410 likes | 522 Views
PERL ízelítő. Practical Extraction and Report Language. Pathologically Eclectic Rubbish Lister. Miért kell programozni?. „A számítógépek megkönnyítik azon problémák megoldását, amik számítógép nélkül fel sem merülnének” Az információ mennyiségének növekedtével egyre bővülő igény van
E N D
PERL ízelítő Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister
Miért kell programozni? „A számítógépek megkönnyítik azon problémák megoldását, amik számítógép nélkül fel sem merülnének” • Az információ mennyiségének növekedtével egyre bővülő igény van • nagy volumenű számítások/vizsgálatok végrehajtására, • egyre nagyobb adathalmazon kell végrehajtani a feladatokat, • az adott objektumot több módon (többféle programmal) vizsgáljuk, amik sokszor egymás eredményét (is) használják. • A rutin vizsgálatoktól eltekintve állandóan változó kérdéseket teszünk fel, újabb módszereket/adatbázisokat használunk Ezen célokhoz automatizálható („batch”, nem interaktív) és szabadon változtatható megoldásokra van szükség.
Tanulmányozottobjektum Módszerekadatok K/F
Tanulmányozottobjektum Módszerekadatok K/F
Tanulmányozottobjektum halmaz Módszerekadatok K/F
A programozás, mint olyan • Azt, hogy mivel mit kell tenni, el kell mondani (pl. a számítógépnek) • Ahhoz, hogy elmondjuk, közös nyelvet kell ismernünk (pl. magyar, angol, PERL) • Az adatokat „változókban” tartjuk (v.ö. doboz, file, fényképalbumos polc, pohár, kalitka, ...) • Az adatokkal lapcsolatos tennivalókat „utasítások” formájában adjuk meg
A programozási nyelvek • Az egyes programozási nyelvek a rendelkezésre álló adatstruktúrákban és utasításokban (is) különböznek • A könnyű használhatóság érdekében célszerű „antropomorf” utasításokkal rendelkezni • A széles körű használhatóság érdekében jó, ha mindenféle számítógépen használható
Miért épp a Perl? A Perl kifejlesztésének célja: „Egyszerű dolgokat egyszerűen!” Egyszerű, de ugyanakkor gazdag és teljes programozási nyelv Bármilyen programozási feladat megoldható vele, a legtöbb egyszerűbben, mint más nyelvekkel Bioinformatikai felhasználásra speciális eszközöket fejlesztettek ki
(Perl) scriptek összehasonlítása kommerciális programokkal A jól szervezett, esetleg könnyen kezelhető integrált bioinformatikai programcsomagok hátránya, hogy jobbára elsősorban interaktív felhasználásra készültek. Nehezen automatizálhatók, nem testre szabhatóak és nagyon drágák. Megjegyzendő, hogy a bioinformatikai vizsgálódások során az esetek többségében igen egyszerű tevékenységeket végzünk: • file-ok formátumának megváltoztatása, • szekvenciák kivágása, • előhívásuk adatbázisokból, • egyszerű keresések, • illesztések
(Perl) scriptek összehasonlítása kommerciális programokkal Egy script testreszabottan a felhasználó igényeit elégíti ki. Tetszőleges számú objektum vizsgálatára automatizálható,statisztikai elemzés is készíthető Azeredmény automatikusan tovább analizálható, pl. a keresés előtt még ismeretlen szekvenciák vizsgálata is megoldott Ingyenes A külső körülmények változásával azonnal módosítható Ugyanakkor interaktívan is használható Grafikus felület is készíthető rutin célokra Könnyen tanulható és feljeszthető
Perl • A Unix része de minden más op.rendszeren is futtatható (pl. Cygwin) • A könnyű tanulhatóság és használat érdekében • más nyelvekből kölcsönzött szintaxist használ (unix, C, awk, angol) • Programozást könnyítő, intuitív automatizmusokat tartalmaz (automatikus tipus-konverzió, dinamikus tömbök, stb.) • A „reguláris kifejezések” egyedülálló eszközt kínálnak szöveges file-ok értelmezésére • Objektum orientált programozást is lehetővé tesz „modulok” használatával • Elrejtett tartalom • Eljárások (methods, függvények, szubrutinok) • Konstruktorok • Öröklés
BioPerl • A bioinformatikai programokban gyakran ismétlődő feladatok megkönnyítésére, a felesleges párhuzamos fejlesztések megelőzésre létrehozott nyilt kódú kezdeményezés • Bioinformatikusok által magas szinten, hasonló célú más projectekkel integráltan létrehozott, és alaposan dokumentált modulok gyűjteménye (http://doc.bioperl.org/releases/) • A tudományos közösség közreműködése és igényei szerint folyamatosan fejlődő ingyenes eszköz
FEEDBACK Mailing Lists User feedback is an integral part of the evolution of this and other Bioperl modules.Send your comments and suggestions preferably to one of the Bioperl mailing lists. Your participation is much appreciated. bioperl-l@bioperl.org - General discussion http://bio.perl.org/MailList.html- About the mailing lists Reporting Bugs Report bugs to the Bioperl bug tracking system to help us keep track the bugs and their resolution. Bug reports can be submitted via email or the web: bioperl-bugs@bio.perl.org http://bugzilla.bioperl.org/
A Perl legegyszerűbb építő elemei • Utasítások • Változók • Változó típusok, $,@,%; ”...” , ’...’ string • Spéci változók @_, $_ • Ciklusok: • foreach $f (@v) {…}; • while (<>) {…};
RegEx Reguláris kifejezés: Karakterek mintázatának leképezése (kódolása) Találat esetén egy logikai változó IGAZ értéket vesz fel if (/GATATC/) {print “EcoRV”}; m/pattern/ tr/pattern/replacement/ # tr/ATGC/TACG/ (#mellékhatás!) s/pattern/replacement/egimosx # s/idei/tavaji/ *
$szoveg =~ s/a((ny)|p)((uci)|a|u)/valaki/ig; RegEx szintaxis
RegExkarakter osztályok /[tT]here/; /[a-zA-Z]/;# bármely betű /[0-9]/; # bármely számjegy /[^A-Z]/;#bármely karakter, ami nem nagybetű /[ACDEFGHIKLMNPQRSTVWYX]/; # bármely aminosav
RegExhorgony foreach(@CDS) {$atg++ if /\AATG/ $gtg++ if /\AGTG/}; print "$atg gén kezdődik ATG-vel, $gtg gén kezdődik GTG-vel.\n";
RegExsorozatok foreach (@primers) { next if (/[CG]{4,}$/); … } Vegyük sorra a primereket Ha nincs mostaniban min. 4 G/C egymás után, Akkor csináljunk vele valamit
RegEx változók és kiterjesztések $1, $2, … $9, $+ Az első... kilencedik, utólsó zárójel találata s/([^c])ei/$1ie/g; # cseréljük ki az „ei”-ket # „ie”-kre, ahol „nem 1 c” # van előttük a szó elején $& A találat $` A találat előtt minden $' A találat utáni rész (?(feltétel)igen-kif.|nem-kif.) (?(feltétel)igen-kifejezés) ... és még sokan mások ...
File formátumok Az egymástól függetlenül fejlesztett programok más és más információt tartalmaznak, különböző formátumokat használnak, különbözik a szintaxis A file formátumok átalakítása nékül a programok inkompatibilisek A formátumok átalakítása nem mindig egyszerű Genbank FASTA EMBL A reguláris kifejezések nagyban megkönnyítették a fájlok értelmezését, az egyes szakaszok felismerését beolvasását. Ma már van sokkal jobb eszköz is: BioPerl
A világ legrövidebb file-format konvertáló programja use Bio::SeqIO;$in = Bio::SeqIO->newFh(-file => "inputfilename" , '-format' => 'Fasta');$out = Bio::SeqIO->newFh('-format' => 'EMBL');print $out $_ while <$in>; Használata pl Unix alatt: fasta2EMBL inputfilename > outfile * * use Bio::SeqIO;$infile = shift; $infile =~ /(\w+)(\.\w)?/; $outfile = $1 . '.embl' ; $in = Bio::SeqIO->newFh(-file => $infile , '-format' => 'Fasta');$out = Bio::SeqIO->newFh(-file => $outfile ,'-format' => 'EMBL');print $out $_ while <$in>; fasta2EMBL inputfilename
Seq object • Egy szekvenciával kapcsolatban sokféle információt kell számon tartani • Aminosav/nukleinsav sorrend • Bibliográfiai információ • Származás (organizmus) • „Feature”, megnevezett szakasz • Szakasz határai • Funkció • Keresztreferenciák • Aminosav sorrend • Egyéb annotáció • Ezen információkat tartalmazhatja az adatbázis, ill. adatfile • Ugyanezeket, jól kezelhető formában tartalmaznia kell a szekvencia objektumnak is
A Seq object alatt meghúzódó objektumok használata • $seqstr = $seqobj->seq(); # a szekvencia, mint betűsor • $seqstr = $seqobj->subseq(10,50); # a szekvencia egy része • @features = $seqobj->get_SeqFeatures(); # A legfelső szint, az annotációk halmaza egy objektumokat tartalmazó vektorban • foreach my $feat ( @features ) { print "Feature ",$feat->primary_tag," starts ",$feat->start," ends ",$feat->end," strand ",$feat->strand,"\n"; # a feature objektumok megtartják a saját vonatkozó szekvenciájukat print "Feature sequence is ",$feat->seq->seq(),"\n" }# seq objektumnak lehet species bejegyzéseif( defined $seq->species ) {print "Sequence is from ",$species->binomial_name," [",$species->common_name,"]\n";}# Az annotáció is egy külön objektum fajta: Bio::AnnotationCollection$ann = $seqobj->annotation(); # annotation objectAz egyik lehetséges annotáció a vonatkozó referenciák gyűjteménye.foreach my $ref ( $ann->get_Annotations('reference') ) {print "Reference ",$ref->title,"\n";}
Location object A location object hasznos minden olyan esetben, ha valami hasonlít egy tartományra: egy „feature”-höz vagy „alignment”-hez társított szakasz, stb. Tartományok, listák, és pontosan meg nem határozható helyek is lehetnek. my $fuzzylocation = new Bio::Location::Fuzzy (-start => '<30', -end => 90, -loc_type => '.');
A Seq object „feltöltése” use Bio::SeqFeature::Generic; use Bio::SeqIO; $in = Bio::SeqIO->newFh(-file => $ARGV[0]); $out = Bio::SeqIO->newFh(); $seq = <$in>; $feat = new Bio::SeqFeature::Generic ( -start => 10, -end => 100, -strand => -1, -primary => 'repeat', -source => 'repeatmasker', -score => 1000, -tag => { new => 1, author => ‘akárki', valami => ‘bármi lehet' } ); $seq->add_SeqFeature($feat); print $out $seq;
A SeqFeature megjelenítése Bio::Graphics::Panel, Bio::Graphics::Glyph, add_track, ... .png fájlok készíthetők
Analízis segédprogramok # A szekvencia, mint karakterfüzér $seqobj->seq; # A szekvencia egy része, mint karakterfüzér $seqobj->subseq(10,40); # A szekvencia egy része, mint Bio::PrimarySeq objektum $seqobj->trunc(10,100); $seqobj->translate; $seqobj->revcom; Egy a „minus” szálon lévő gén aminosav sorrendje: my $trans_trunc_rev = $seqobj->trunc(59100,59633)->revcom->translate(); *
Analízis segédprogramokSeqStats object print "\nMonomer counts using statistics object\n"; $seq_stats = Bio::Tools::SeqStats->new(-seq=>$seqobj); $hash_ref = $seq_stats->count_monomers(); # DNA v AAforeach $base (sort keys %$hash_ref) { print "Number of bases of type ", $base, "= ", %$hash_ref->{$base},"\n"; } print "\nCodon counts without statistics object\n";$hash_ref = Bio::Tools::SeqStats->count_codons($seqobj);foreach $base (sort keys %$hash_ref) {print "Number of codons of type ", $base, "= ", %$hash_ref->{$base},"\n";} $weight = Bio::Tools::SeqStats->get_mol_wt($seqobj);print "\nMolecular weight (without statistics object) of sequence ", $seqobj->id(), " is between ", $$weight[0], " and " , $$weight[1], "\n"; *
Analízis segédprogramokSeqUtils, RestrictionEnzyme object use Bio::SeqUtils;# legyen $seq egy Bio::PrimarySeqI szerű object$util = new Bio::SeqUtils;$polypeptide_3char = $util->seq3($seq);# vagy $polypeptide_3char = Bio::SeqUtils->seq3($seq);# vagyBio::SeqUtils->seq3($seq, $polypeptide_3char);# transzláció 3 vagy 6 frame-ben@seqs = Bio::SeqUtils->translate_3frames($seq);@seqs = Bio::SeqUtils->translate_6frames($seq); $re1 = new Bio::Tools::RestrictionEnzyme(-NAME =>'EcoRI'); @fragments = $re1->cut_seq($seqobj); $re2 = new Bio::Tools::RestrictionEnzyme ( -NAME =>'EcoRV--GAT^ATC', # új enzimek felvétele -MAKE =>'custom');
Analízis segédprogramokSigcleave object use Bio::Tools::Sigcleave (); $sigcleave_object = new Bio::Tools::Sigcleave(-file=>'sigtest.aa', -desc=>'test sigcleave protein seq', -type=>'AMINO', -threshold=>'3.5' ); %raw_results = $sigcleave_object->signals; $formatted_output = $sigcleave_object->pretty_print; Pretty_print output:SIGCLEAVE of sigtest from: 1 to 146Report scores over 3.5Maximum score 4.9 at residue 131Sequence: FVILAAMSIQGSA-NLQTQWKSTASLALET | (signal) | (mature peptide) 118 131Other entries above 3.5Maximum score 3.7 at residue 112Sequence: CSRQLFGWLFCKV-HPGAIVFVILAAMSIQGSANLQTQWKSTASLALET | (signal) | (mature peptide) 99 112
Stand-alone BLAST use Bio::DB::SwissProt; my $database = new Bio::DB::SwissProt; my $query = $database->get_Seq_by_id('TAUD_ECOLI'); #vagy valami Seq obj.my $factory = Bio::Tools::Run::StandAloneBlast->new( 'program' => 'blastp', 'database' => 'swissprot', _READMETHOD => "Blast" ); $factory->outfile('blast.out'); my $blast_report = $factory->blastall($query); my $result = $blast_report->next_result; while( my $hit = $result->next_hit()) { print "\thit name: ", $hit->name(), " significance: ", $hit->significance(), "\n"; }
Példa: Keressünk DNS kötő motívumot minden olyan génünkkel, aminek van transzmembrán régiót tartalmazó ismert homológja és aminek izoelektromos pontja 5 és 9 pH között van, mólsúlya pedig 20 és 30 kDa között! use Bio::SeqIO; use Bio::Tools::Run::RemoteBlast; use Bio::Tools::pICalculator; $database = new Bio::DB::SwissProt; $Seq_in = Bio::SeqIO->new (-file => ‘genes.fas’, -format => 'fasta'); # van pár ezer génünk ebben a file-ban $factory = Bio::Tools::Run::RemoteBlast->new('-prog' => 'blastx', ‘-data' => 'swissprot', ); while ( $query = $Seq_in->next_seq() ) { $azonosito=$query -> display_id ; $blast_report = $factory->submit_blast($query); @rids = $factory->each_rid; # RID = Remote Blast ID (e.g: 1017772174-16400-6638) … $result = $factory->retrieve_blast($rid) ->next_result ; $hit = $result->next_hit $hitname = $hit->name; $homolog = $database->get_Seq_by_id($hitname); # A homológ szekvenciát hozzuk el a SwissProtból foreach $feat ( $homolog->get_SeqFeatures() ) { # a tulajdonságai között if ($feat->primary_tag =~ /transmem/i) { # van-e Transzmembrán régió? Ha igen, $miproteinunk = $query -> translate; $weight = Bio::Tools::SeqStats->get_mol_wt($miproteinunk);#akkor számoljunk mólsúlyt $calc = Bio::Tools::pICalculator->new(-places => 2,-pKset => 'EMBOSS');$calc->seq($seq);$iep = $calc->iep; # meg izoelektromos pontot if (( 20 < $weight < 30 ) and (5 < $iep < 9)){# és ha minden passzol, akkor $out = Bio::SeqIO->new(-file => ">$azonosito.aa" , '-format' => ‘fasta'); print $out $miproteinunk; system (“helixturnhelix –sequence $azonosito.aa –outfile $azonosito.helix”)” }# indítsuk a keresést ezzel a fehérjénkkel! } }
bioperl-1.2::Bio bioperl-1.2::Bio::Align bioperl-1.2::Bio::AlignIO bioperl-1.2::Bio::Assembly bioperl-1.2::Bio::Biblio bioperl-1.2::Bio::Cluster bioperl-1.2::Bio::Coordinate bioperl-1.2::Bio::Annotation bioperl-1.2::Bio::Coordinate::Result bioperl-1.2::Bio::DB bioperl-1.2::Bio::DB::Biblio bioperl-1.2::Bio::DB::Flat bioperl-1.2::Bio::DB::Flat::BDB bioperl-1.2::Bio::DB::GFF bioperl-1.2::Bio::DB::Query bioperl-1.2::Bio::Das bioperl-1.2::Bio::Event bioperl-1.2::Bio::Expression bioperl-1.2::Bio::Factory bioperl-1.2::Bio::Graphics bioperl-1.2::Bio::Graphics::Glyph bioperl-1.2::Bio::Index bioperl-1.2::Bio::LiveSeq bioperl-1.2::Bio::Location bioperl-1.2::Bio::Map bioperl-1.2::Bio::Matrix bioperl-1.2::Bio::Ontology bioperl-1.2::Bio::Phenotype bioperl-1.2::Bio::Root bioperl-1.2::Bio::Search bioperl-1.2::Bio::Seq bioperl-1.2::Bio::SeqFeature bioperl-1.2::Bio::Structure bioperl-1.2::Bio::Symbol bioperl-1.2::Bio::Taxonomy bioperl-1.2::Bio::Tools bioperl-1.2::Bio::Tools::Alignment bioperl-1.2::Bio::Tools::BPlite bioperl-1.2::Bio::Tools::Blast bioperl-1.2::Bio::Tools::HMMER bioperl-1.2::Bio::Tools::Phylo bioperl-1.2::Bio::Tools::Phylo::Molphy bioperl-1.2::Bio::Tools::Phylo::PAML bioperl-1.2::Bio::Tools::Phylo::Phylip bioperl-1.2::Bio::Tools::Prediction bioperl-1.2::Bio::Tools::Run bioperl-1.2::Bio::Tools::Sim4 bioperl-1.2::Bio::Tools::StateMachine bioperl-1.2::Bio::Tree bioperl-1.2::Bio::Variation Egyéb modulok ...
BioPerl Class- és Object struktúra A BioPerl Class- és Object struktúra meglehetősen szerteágazó NEM kell azonnal átlátni az egészet; A Perlés a BioPerl az egyszerű kezdés szem előtt tartásával készült ld pl http://www.pasteur.fr/recherche/unites/sis/formation/bioperl/ http://www.bioperl.org http://learn.perl.org/ http://www.perl.org/