PERL zelt Practical Extraction and Report Language Pathologically

  • Slides: 39
Download presentation
PERL ízelítő Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister

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

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 n 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.

Miért épp a Perl? A Perl kifejlesztésének célja: „Egyszerű dolgokat egyszerűen!” Egyszerű, de ugyanakkor

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

(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ítit ki. (Ld.

(Perl) scriptek összehasonlítása kommerciális programokkal Egy script testreszabottan a felhasználó igényeit elégítit ki. (Ld. pl… ) Tetszőleges számú objektum vizsgálatára automatizálható, statisztikai elemzés is készíthető Az eredmény automatikusan tovább analizálható, pl. a keresés előtt még ismeretlen szekvenciák vizsgálata is megoldott Ingyenes 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

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 n n 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

Bio. Perl A nehézkes, gyakran ismétlődő bioinformatikai feladatok megkönnyítésére, a felesleges párhuzamos fejlesztések megelőzésre

Bio. Perl A nehézkes, gyakran ismétlődő bioinformatikai 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/bioperl-1. 2/ ) 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

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/Mail. List. 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 n n n Változó típusok, $, @,

A Perl legegyszerűbb építő elemei Utasítások Változók n n n Változó típusok, $, @, %, string Spéci változók @_, $_ Ciklusok: w foreach $f(@v) {…}; w while (<>) {…};

Az objektumok (adatstruktúrák kiterjesztése) Elrejtett tartalom Eljárások (methods, függvények, szubrutinok) n Konstruktorok Öröklés (utasítások

Az objektumok (adatstruktúrák kiterjesztése) Elrejtett tartalom Eljárások (methods, függvények, szubrutinok) n Konstruktorok Öröklés (utasítások kiterjesztése)

Reg. Ex Reguláris kifejezés: Karakterek mintázatának leképezése (kódolása) Találat esetén egy logikai változó IGAZ

Reg. Ex 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 “Eco. RV”}; m/pattern/ tr/pattern/replacement/ # tr/ATGC/TACG/ s/pattern/replacement/egimosx # s/idei/tavaji/ (#mellékhatás!)

Reg. Ex szintaxis Metakarakter Jelentés  Meváltoztatja a következő karakter jelentését . Az újsor

Reg. Ex szintaxis Metakarakter Jelentés Meváltoztatja a következő karakter jelentését . Az újsor karakter kivételével bármivel egyezik (kivéve, ha /s) ^ A string (vagy sor, ha /m) eleje $ A string (vagy sor, ha /m) vége * Az előző elemből 0 vagy több darab + Az előző elemből 1 vagy több darab ? Az előző elemből 0 vagy 1 darab {. . . } Az előző elemből előfordulási számának tartománya [. . . ] A zárójelek közötti elemek bármelyikével egyezik (karakter osztály) (. . . ) Reguláris kifejezések csoportja | Vagy a jel előtti, vagy az utáni kifejezéssel egyezik $szoveg =~ s/a((ny)|p)((uci)|a|u)/valaki/ig;

Reg. Ex karakter osztályok /[t. T]here/; /[a-z. A-Z]/; /[0 -9]/; /[^A-Z]/; # bármely betű

Reg. Ex karakter osztályok /[t. T]here/; /[a-z. A-Z]/; /[0 -9]/; /[^A-Z]/; # bármely betű # bármely számjegy #bármely karakter, ami nem nagybetű Kód Jelentés d Számjegy, vagyis: [0 -9] D Nem számjegy, vagyis: [^0 -9] w Alfanumerikus jel, vagyis: [a-z. A-Z_0 -9] W Nem alfanumerikus jel, vagyis: [^a-z. A-Z_0 -9] s „Színtelen” karakter, vagy: [tnrf] S Látható karakter, vagy: [^tnrf]

Reg. Ex horgony Jelentés ^ A string eleje $ A string vége b Szó

Reg. Ex horgony Jelentés ^ A string eleje $ A string vége b Szó széle (w és W között) B Bárhol, csak nem a szóhatáron A A string eleje Z A string vége, vagy az újsor előtt z A string vége G Ott, ahol az előző m//g abbahagyta foreach(@CDS) {$atg++ if /AATG/}; print "$atg gén tudja a szabálytn";

Reg. Ex sorozatok Max Min Megengedett tartomány {n, m}? Legalább n-szer, max m-szer {n,

Reg. Ex sorozatok Max Min Megengedett tartomány {n, m}? Legalább n-szer, max m-szer {n, }? Legalább n-szer {n}? Pontosan n-szer * *? 0 vagy több (mint {0, }) + +? 1 vagy több (mint {1, }) ? ? ? 0 vagy 1 -szer (mint {0, 1}) foreach (@primers) { next if (/[CG]{4, }$/); … }

Reg. Ex változók és kiterjesztések $1, $2, … $9, $+ Az első. . .

Reg. Ex változók és kiterjesztések $1, $2, … $9, $+ Az első. . . kilencedik, utólsó zárójel találata s/([^c])ei/$1 ie/g; $& 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

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ű FASTA EMBL Genbank 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: Bio. Perl

Seq object A Bioperl fő szekvencia-objektuma Se magát a szekvenciát, se a járulékos információkat

Seq object A Bioperl fő szekvencia-objektuma Se magát a szekvenciát, se a járulékos információkat nem látjuk. I/O műveletekhez külön modult használunk: Seq. IO Szekvencia beolvasása file-ból: $seqio = Bio: : Seq. IO->new( '-format' => 'embl' , -file => 'myfile. dat'); $seqobj = $seqio->next_seq(); Szekvencia kiírása file-ba: $out = Bio: : Seq. IO->new(-file => ">outputfilename" , '-format' => 'EMBL') ; print $out $seqobj; Szekvencia letöltése adatbázisból (GCG: Fetch) $db = Bio: : DB: : Gen. Bank->new(); $seqobj = $db->get_Seq_by_acc('X 78121'); Szekvencia előállítása betűfüzérből (stringből) $seqobj = Bio: : Seq->new( -display_id => 'my_id', -seq => $sequence_as_string);

A világ legrövidebb file-format konvertáló programja use Bio: : Seq. IO; $in = Bio:

A világ legrövidebb file-format konvertáló programja use Bio: : Seq. IO; $in = Bio: : Seq. IO->new. Fh(-file => "inputfilename" , '-format' => 'Fasta'); $out = Bio: : Seq. IO->new. Fh('-format' => 'EMBL'); print $out $_ while <$in>; Használata pl Unix alatt: fasta 2 EMBL inputfilename > outfile use Bio: : Seq. IO; $infile = shift; $infile =~ /(w+)(. w)? /; $outfile = $1. '. embl' ; $in = Bio: : Seq. IO->new. Fh(-file => $infile , '-format' => 'Fasta'); $out = Bio: : Seq. IO->new. Fh(-file => $outfile , '-format' => 'EMBL'); print $out $_ while <$in>; fasta 2 EMBL inputfilename

Seq object Egy szekvenciával kapcsolatban sokféle információt kell számon tartani n n Aminosav/nukleinsav sorrend

Seq object Egy szekvenciával kapcsolatban sokféle információt kell számon tartani n n Aminosav/nukleinsav sorrend Bibliográfiai információ Származás (organizmus) „Feature”, megnevezett szakasz w w n 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

Egy Swiss. Prot file és egy Bio: : Seq object komponensei

Egy Swiss. Prot file és egy Bio: : Seq object komponensei

A Seq object alatt meghúzódó objektumok használata $seqstr = $seqobj->seq(); # a szekvencia, mint

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_Seq. Features(); # 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(), "n" } # seq objektumnak lehet species bejegyzése if( 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: : Annotation. Collection $ann = $seqobj->annotation(); # annotation object Az 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:

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: : Seq. Feature: : Generic; use Bio: :

A Seq object „feltöltése” use Bio: : Seq. Feature: : Generic; use Bio: : Seq. IO; $in = Bio: : Seq. IO->new. Fh(-file => $ARGV[0]); $out = Bio: : Seq. IO->new. Fh(); $seq = <$in>; $feat = new Bio: : Seq. Feature: : 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_Seq. Feature($feat); print $out $seq;

A Seq. Feature kapcsolata más modulokkal

A Seq. Feature kapcsolata más modulokkal

A Seq. Feature megjelenítése Bio: : Graphics: : Panel, Bio: : Graphics: : Glyph,

A Seq. Feature 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

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: : Primary. Seq objektum $seqobj->trunc(10, 100); $seqobj->translate; $seqobj->revcom; A „minus” szálon lévő gén aminosav sorrendje: my $trans_trunc_rev = $seqobj->trunc(59100, 59633)->revcom->translate();

Analízis segédprogramok Seq. Stats object print "n. Monomer counts using statistics objectn"; $seq_stats =

Analízis segédprogramok Seq. Stats object print "n. Monomer counts using statistics objectn"; $seq_stats = Bio: : Tools: : Seq. Stats->new(-seq=>$seqobj); $hash_ref = $seq_stats->count_monomers(); # DNA v AA foreach $base (sort keys %$hash_ref) { print "Number of bases of type ", $base, "= ", %$hash_ref->{$base}, "n"; } print "n. Codon counts without statistics objectn"; $hash_ref = Bio: : Tools: : Seq. Stats->count_codons($seqobj); foreach $base (sort keys %$hash_ref) { print "Number of codons of type ", $base, "= ", %$hash_ref->{$base}, "n"; } $weight = Bio: : Tools: : Seq. Stats->get_mol_wt($seqobj); print "n. Molecular weight (without statistics object) of sequence ", $seqobj->id(), " is between ", $$weight[0], " and " , $$weight[1], "n";

Analízis segédprogramok Seq. Utils, Restriction. Enzyme object use Bio: : Seq. Utils; # legyen

Analízis segédprogramok Seq. Utils, Restriction. Enzyme object use Bio: : Seq. Utils; # legyen $seq egy Bio: : Primary. Seq. I szerű object $util = new Bio: : Seq. Utils; $polypeptide_3 char = $util->seq 3($seq); # vagy $polypeptide_3 char = Bio: : Seq. Utils->seq 3($seq); # vagy Bio: : Seq. Utils->seq 3($seq, $polypeptide_3 char); # transzláció 3 vagy 6 frame-ben @seqs = Bio: : Seq. Utils->translate_3 frames($seq); @seqs = Bio: : Seq. Utils->translate_6 frames($seq); $re 1 = new Bio: : Tools: : Restriction. Enzyme(-NAME =>'Eco. RI'); @fragments = $re 1 ->cut_seq($seqobj); $re 2 = new Bio: : Tools: : Restriction. Enzyme ( -NAME =>'Eco. RV--GAT^ATC', # új enzimek felvétele -MAKE =>'custom');

Analízis segédprogramok Sigcleave object use Bio: : Tools: : Sigcleave (); $sigcleave_object = new

Analízis segédprogramok Sigcleave 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 146 Report scores over 3. 5 Maximum score 4. 9 at residue 131 Sequence: FVILAAMSIQGSA-NLQTQWKSTASLALET | (signal) | (mature peptide) 118 131 Other entries above 3. 5 Maximum score 3. 7 at residue 112 Sequence: CSRQLFGWLFCKV-HPGAIVFVILAAMSIQGSANLQTQWKSTASLALET | (signal) | (mature peptide) 99 112

BLAST Mivel ez a leggyakrabban végrehajtott keresés, ennek mgkönnyítésére külön modul áll rendelkezésre Helyi

BLAST Mivel ez a leggyakrabban végrehajtott keresés, ennek mgkönnyítésére külön modul áll rendelkezésre Helyi és interneten keresztüli futtatás azonos módon kezelhető Az eredmény-file ismeretlen számú találatot tartalmaz, ismeretlen szignifikancia értékkel, hosszal, stb. Ezek értelmezését is leegyszerűsíti Blast eredmény-file

BLAST

BLAST

Stand-alone BLAST use Bio: : DB: : Swiss. Prot; my $database = new Bio:

Stand-alone BLAST use Bio: : DB: : Swiss. Prot; my $database = new Bio: : DB: : Swiss. Prot; my $query = $database->get_Seq_by_id('TAUD_ECOLI'); #vagy valami Seq obj. my $factory = Bio: : Tools: : Run: : Stand. Alone. Blast->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"; }

Remote Blast 1 use Bio: : Seq. IO; use Bio: : Tools: : Run:

Remote Blast 1 use Bio: : Seq. IO; use Bio: : Tools: : Run: : Remote. Blast; my $Seq_in = Bio: : Seq. IO->new (-file => $ARGV[0], -format => 'fasta'); my $query = $Seq_in->next_seq(); my $factory = Bio: : Tools: : Run: : Remote. Blast->new( '-prog' => 'blastp', '-data' => 'swissprot', _READMETHOD => "Blast" ); my $blast_report = $factory->submit_blast($query); my $max_number = 100; my $trial = 0;

Remote Blast 2 while ( my @rids = $factory->each_rid ) { print STDERR "n.

Remote Blast 2 while ( my @rids = $factory->each_rid ) { print STDERR "n. Sorry, maximum number of retries $max_number exceededn" if $trial >= $max_number; last if $trial >= $max_number; $trial++; print STDERR "waiting. . . ". (5*$trial). " units of timen" ; # RID = Remote Blast ID (e. g: 1017772174 -16400 -6638) foreach my $rid ( @rids ) { my $rc = $factory->retrieve_blast($rid); if( !ref($rc) ) { if( $rc < 0 ) { # retrieve_blast returns -1 on error $factory->remove_rid($rid); } # retrieve_blast returns 0 on 'job not finished‘ sleep 5*$trial; }

Remote Blast 3 else { #---- Blast done ---$factory->remove_rid($rid); my $result = $rc->next_result; print

Remote Blast 3 else { #---- Blast done ---$factory->remove_rid($rid); my $result = $rc->next_result; print "database: ", $result->database_name(), "n"; while( my $hit = $result->next_hit ) { print "hit name is: ", $hit->name, "n"; while( my $hsp = $hit->next_hsp ) { print "score is: ", $hsp->score, "n"; } } }

Egyéb modulok bioperl-1. 2: : Bio: : Align. IO bioperl-1. 2: : Bio: :

Egyéb modulok bioperl-1. 2: : Bio: : Align. IO 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: : Biblio 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: : Glyph bioperl-1. 2: : Bio: : Index bioperl-1. 2: : Bio: : Live. Seq 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. Feature bioperl-1. 2: : Bio: : Structure bioperl-1. 2: : Bio: : Symbol bioperl-1. 2: : Bio: : Taxonomy 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: : 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: : Sim 4 bioperl-1. 2: : Bio: : Tools: : State. Machine bioperl-1. 2: : Bio: : Tree bioperl-1. 2: : Bio: : Variation . . .

Bio. Perl Class- és Object struktúra A Bio. Perl Class- és Object struktúra meglehetősen

Bio. Perl Class- és Object struktúra A Bio. Perl Class- és Object struktúra meglehetősen szerteágazó NEM kell azonnal átlátni az egészet; A Perl és a Bio. Perl 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/