Post on 28-Nov-2014
description
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODA
Open‐SourcePhylogene(cSearchandDNAAnalysis
QuinnSnell,MarkClementBrighamYoungUniversity
Provo,UT
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODA
• Open‐sourcesequenceanalysispackage– GPLv2
• Compa(blewithPAUP*– samefunc(onsyntax– maintainsthesameseman(cs
• Addsscrip(nglanguagetothePAUPblock– allowsforcrea(onofadvancedmeta‐searches
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODAPerformance
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODA
• Begandevelopmentin2005asanalterna(vetoPAUP*– phylogene(csearch– mul(plealignment– detectnaturalselec(on
• PlaPormfordevelopment– newsearchalgorithms– meta‐searches– characteriza(onofop(miza(ons– etc.
Computa(onalSciencesLaboratory,BrighamYoungUniversity
Features
• Heuris(cSearchviaTBR– parsimonyandmaximumlikelihood
• Otherintegratedprograms– RAxML–Likelihoodsearch– Mr.Bayes–Bayesiansearch– TreeSAAP–selec(ondetec(onusingchemicalproper(es– ATV–treeviewer– Jalview–Alignmentviewer
• GraphicalUserInterface–Java– binarydistribu(onforMacOSX,Windows,andLinux
• Object‐orientedC++availableviasubversion– h^p://dna.cs.byu.edu/opensvn/psoda
Computa(onalSciencesLaboratory,BrighamYoungUniversity
GUI
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODAscript
• Addedfunc(onalityforPAUPblocks• Decisionstatements&Loops• Func(ons– built‐inanduser‐defined
• Allowsforeasyscrip(ngofmeta‐searches– Example:likelihoodratchet
• stepwisestar(ngtree• likelihoodTBRonasingletree• adjustweights• parsimonyonasingletreetogetoutoflocalminima• loop
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODAscriptPAUP*ratchet
Repeatedtextcon(nues.Don’tknowwhentostop.
PSODAratchetBEGIN PAUP;
begin randomReweight numChars = getWeightsLength(); numWeights = numChars / percent;
j = 0; while (j < numweights) weight = random(max = range); col = random(max = numChars) + 1; weights weight:col; j++; endwhile; end;
set maxtrees = 1 nreps = 5; set criterion=parsimony; hsearch start = stepwise swap = tbr; range = 3;
while (true) randomReweight(percent = 10); set criterion=parsimony; hsearch start = current swap = tbr;
weights reset;
set criterion=likelihood; hsearch start = current swap = tbr; endwhile;
end;
BEGINPAUP;setcriterion=parsimony;setmaxtrees=1increase=no;hsearchstart=stepwiseswap=TBR;weights2:71417262731344550525457606364657377869192102103107115117121122124127131133134140142155156163173176183185187195197198202204209219221222225226230237238240241244248252254255258269276279283284291294295297309310315319321323325326342346349350351353354355359360363366370377378390393394398408412413418419423425426428429432450456467475479482484489492493497498500;hsearchstart=currentswap=TBR;setmaxtrees=1;weights1:all;hsearchstart=currentswap=TBR;weights2:1172021293335394250575969707173808693969799100102111121125126141142148149155157163168174179180184187188194203208212216219220225226231242243251253254256257260265269272274277282286287288291293296297305306309315316318324326327329334340346351352356360366370372373379380384390396399401408412414421423426428429441442444448455459460462472473475477478487489493;hsearchstart=currentswap=TBR;weights1:all;hsearchstart=currentswap=TBR;weights2:2911141618202428364043454759606264657072849092105107111112118122129130135138146148152153156161162167172173177190197200207209213215217218226234245249250251253254255257266275276281284288293303305315319322324329336347349351352355356358360365367368371376377378381382407409410411412413418421424425426437442444447448452459461462466474475477478480484488491;hsearchstart=currentswap=TBR;weights1:all;hsearchstart=currentswap=TBR;weights2:1517222631343944465865717379808592939598100101107114119127131137138139142145146150151152155161162167170175176177188191197198211212217220228232234236238239241242243245252257268269270271281283287300305308309311318323324326333334335342345349350351361363367368371372374384388395406408410425426427428430432434435439443445447452455457461465467470474483485490;hsearchstart=currentswap=TBR;weights1:all;hsearchstart=currentswap=TBR;weights2:23920222425262830323438434649586066687072758788919799103105109112115118123139140144146152160162165168180184194197203204207214217220222223225233240244249250251257260262270275280286290291292297298301307310313314318321322326334336338339343347357369372373378380381389395396397401403404407410413425430447454455460461464472478482483487488489492494498;hsearchstart=currentswap=TBR;;
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODAscript
• Designedtobeextensible• Eachfunc(onisitsownclassthatinheritsfromaPsodaCommand– programmermustaddtheclasstothecommandregistra(onprocess• registersthecommand’sname
– automa(callyaddsittotheparsing– noneedforparsingcodechanges
– classconstructor• registerscommanddescrip(on• registerscommandarguments• whencommandiscalled,theexecutemethodiscalled
– programmercodestheexecutefunc(on
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODAscript#include"ExportInstr.h"#include"Interpreter.h"#include"PsodaPrinter.h”
usingnamespacestd;
ExportInstr::ExportInstr():BuiltInCommand(){initFileDefaultValue("file","");initDefaultValue("format","fasta","");addParamOp(on("format","phylip");}
ExportInstr::~ExportInstr(){}
voidExportInstr::execute(Environment*baseEnv,Literal*&returnVal__a^ribute__((unused))){execute(baseEnv);}
voidExportInstr::execute(Environment*baseEnv){Dataset*dataset=Interpreter::getInstance()‐>dataset();stringformat=baseEnv‐>lookupString("format");stringfile=baseEnv‐>lookupString("file");dataset‐>printSeqs(format,file);
#ifdefGUIPsodaPrinter::getInstance()‐>write("##ExportCompletedSuccessfully\n");#endif}
stringExportInstr::getName()const{return"export";}
#include"BuiltInCommand.h"
usingnamespacestd;
classExportInstr:publicBuiltInCommand{
private:
//Prohibitcopyingofthisobjectvoidoperator=(ExportInstr&);ExportInstr(ExportInstr&);
public:
//ConstructorExportInstr();
//Destructorvirtual~ExportInstr();
/***CallpassParams()tosetuptheparametersintheinterpreter*/virtualvoidexecute(Environment*baseEnv);virtualvoidexecute(Environment*baseEnv,Literal*&returnVal);
/***Returnsthenameofthisinstruc(on*/virtualstringgetName()const;
};
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODAscript&theGUI
• AllPSODAscriptcommandsmaybeexecutedfromwithinanexusfileortheGUI– noaddi(onalcodeneeded
Commandsareautoma(callyincludedinthecommandslist
Allcommandshaveawindowcreatedwhencalled.Thefieldsarebasedontheregisteredargumentlist
Computa(onalSciencesLaboratory,BrighamYoungUniversity
PSODAscript
• Powerfulscrip(nglanguagethat– alsoallowsaccesstotheinternaldatastructures– allowsforcrea(onandaccesstohighperformancefunc(onality
• Automa(cinclusioninthegraphicaluserinterfacemeansthat– usersautoma(callygetaccesstonewfunc(onality
– programmerdoesnotneedtoknowGUIcode
Computa(onalSciencesLaboratory,BrighamYoungUniversity
Conclusion
• PSODAis:– acompe((veDNAanalysispackage– anopen‐sourcedevelopmentplaPorm– anextensiblescrip(ngplaPorm
• Programmersmay– addnewanalysisfunc(onality– addnewscrip(ngcommands
• Allnewscrip(ngfunc(onalityisautoma(callyaddedtothegraphicaluserinterface
Computa(onalSciencesLaboratory,BrighamYoungUniversity
Acknowledgements&etc.
• Collaborators– QuinnSnell,MarkClement– KeithCrandall,MichaelWhi(ng– KennethSundberg,HyrumCarroll,andmanyothergradstudentstonumeroustomen(on
• Downloadath^p://dna.cs.byu.edu/psoda• svncoh^p://dna.cs.byu.edu/opensvn/psoda
• Ques(ons?