Upload
gina
View
21
Download
2
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
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.
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
GCG Programok használatának statisztikája reformat . 17% chopup . 14%
fetch . 11% bestfit . 9%
lookup . 6% gap . 5%
fasta . 5% pileup . 4%
blast . 3% paupsearch . 3%
paupdisplay . 2% motifs . 2%
stringsearch . 2% names . 2%
еgyebek . 15%
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. 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élokraKönnyen tanulható és feljeszthető
(Perl) scriptek összehasonlítása kommerciális programokkal
PerlA 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éreObjektum orientált programozást is lehetővé tesz „modulok” használatával
BioPerl
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
and other Bioperl modules. Send your comments and suggestions preferably to one of the Bioperl mailing lists. Your participation is much appreciated.
[email protected] - General discussion http://bio.perl.org/MailList.html - About the mailing lists
Reporting BugsReport 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:
[email protected] http://bugzilla.bioperl.org/
A Perl legegyszerűbb építő elemei
UtasításokVáltozók Változó típusok, $,@,%, string Spéci változók @_, $_ Ciklusok:
foreach $f(@v) {…}; while (<>) {…};
Az objektumok (adatstruktúrák kiterjesztése)
Elrejtett tartalomEljárások (methods, függvények,
szubrutinok) Konstruktorok (utasítások kiterjesztése)
Öröklés
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/Modifier Meaning
e Evaluate the right side as an expression.
g Replace globally, i.e., all occurrences.
i Do case-insensitive pattern matching.
m Treat string as multiple lines.
o Only compile pattern once.
s Treat string as single line.
x Use extended regular expressions.
RegEx szintaxisMetakarakter 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;
RegEx karakter osztályok
/[tT]here/;/[a-zA-Z]/; # bármely betű/[0-9]/; # bármely számjegy/[^A-Z]/; #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-zA-Z_0-9]
\W Nem alfanumerikus jel, vagyis: [^a-zA-Z_0-9]
\s „Színtelen” karakter, vagy: [\t\n\r\f]
\S Látható karakter, vagy: [^\t\n\r\f]
RegEx horgony
Jel 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ályt\n";
RegEx sorozatokMax Min Megengedett tartomány
{n,m} {n,m}? Legalább n-szer, max m-szer
{n,} {n,}? Legalább n-szer
{n} {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,}$/);…}
RegEx változók és kiterjesztések
(?(feltétel)igen-kif.|nem-kif.) (?(feltétel)igen-kifejezés)
$1, $2, … $9, $+ Az első... kilencedik, utólsó zárójel találata
s/([^c])ei/$1ie/g;$& A találat$` A találat előtt minden$' A találat utáni rész
... é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ű
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:
BioPerl
Seq objectA 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: SeqIO
Szekvencia beolvasása file-ból:$seqio = Bio::SeqIO->new( '-format' => 'embl' , -file =>
'myfile.dat');$seqobj = $seqio->next_seq();
Szekvencia kiírása file-ba:$out = Bio::SeqIO->new(-file => ">outputfilename" , '-format' =>
'EMBL') ;print $out $seqobj;
Szekvencia letöltése adatbázisból (GCG: Fetch)
$db = Bio::DB::GenBank->new();$seqobj = $db->get_Seq_by_acc('X78121');
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::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 objectEgy 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. adatfileUgyanezeket, jól kezelhető formában tartalmaznia kell a szekvencia objektumnak is
Egy SwissProt file és egy Bio::Seq object komponensei
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ájukatprint "Feature sequence is ",$feat->seq->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::AnnotationCollection$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 objectA 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 kapcsolata más modulokkal
A SeqFeature megjelenítéseBio::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;
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 AA
foreach $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";
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édprogramokSeqUtils, RestrictionEnzyme
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.5Maximum 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
Analízis segédprogramokSigcleave object
BLAST
Mivel ez a leggyakrabban végrehajtott keresés, ennek mgkönnyítésére külön modul áll rendelkezésreHelyi é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
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"; }
Remote Blast 1
use Bio::SeqIO;use Bio::Tools::Run::RemoteBlast;
my $Seq_in = Bio::SeqIO->new (-file => $ARGV[0], -format => 'fasta');
my $query = $Seq_in->next_seq();
my $factory = Bio::Tools::Run::RemoteBlast->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 "\nSorry, maximum number of retries $max_number exceeded\n" if $trial >= $max_number;
last if $trial >= $max_number; $trial++;
print STDERR "waiting... ".(5*$trial)." units of time\n" ;
# 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 "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 modulokbioperl-1.2::Biobioperl-1.2::Bio::Alignbioperl-1.2::Bio::AlignIObioperl-1.2::Bio::Assemblybioperl-1.2::Bio::Bibliobioperl-1.2::Bio::Clusterbioperl-1.2::Bio::Coordinatebioperl-1.2::Bio::Annotationbioperl-1.2::Bio::Coordinate::Resultbioperl-1.2::Bio::DBbioperl-1.2::Bio::DB::Bibliobioperl-1.2::Bio::DB::Flatbioperl-1.2::Bio::DB::Flat::BDBbioperl-1.2::Bio::DB::GFFbioperl-1.2::Bio::DB::Querybioperl-1.2::Bio::Dasbioperl-1.2::Bio::Eventbioperl-1.2::Bio::Expressionbioperl-1.2::Bio::Factorybioperl-1.2::Bio::Graphicsbioperl-1.2::Bio::Graphics::Glyphbioperl-1.2::Bio::Indexbioperl-1.2::Bio::LiveSeqbioperl-1.2::Bio::Locationbioperl-1.2::Bio::Map
bioperl-1.2::Bio::Matrixbioperl-1.2::Bio::Ontologybioperl-1.2::Bio::Phenotypebioperl-1.2::Bio::Rootbioperl-1.2::Bio::Searchbioperl-1.2::Bio::Seqbioperl-1.2::Bio::SeqFeaturebioperl-1.2::Bio::Structurebioperl-1.2::Bio::Symbolbioperl-1.2::Bio::Taxonomybioperl-1.2::Bio::Toolsbioperl-1.2::Bio::Tools::Alignmentbioperl-1.2::Bio::Tools::BPlitebioperl-1.2::Bio::Tools::Blastbioperl-1.2::Bio::Tools::HMMERbioperl-1.2::Bio::Tools::Phylobioperl-1.2::Bio::Tools::Phylo::Molphybioperl-1.2::Bio::Tools::Phylo::PAMLbioperl-1.2::Bio::Tools::Phylo::Phylipbioperl-1.2::Bio::Tools::Predictionbioperl-1.2::Bio::Tools::Runbioperl-1.2::Bio::Tools::Sim4bioperl-1.2::Bio::Tools::StateMachinebioperl-1.2::Bio::Treebioperl-1.2::Bio::Variation
...
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/