41
PERL ízelítő Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister

PERL ízelítő

  • Upload
    baka

  • View
    27

  • Download
    0

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

Page 1: PERL ízelítő

PERL ízelítő

Practical Extraction and Report Language

Pathologically Eclectic Rubbish Lister

Page 2: PERL ízelítő

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.

Page 3: PERL ízelítő

K/FTanulmányozottobjektum

Módszerek adatok

Page 4: PERL ízelítő

K/FTanulmányozottobjektum

Módszerek adatok

Page 5: PERL ízelítő

K/FTanulmányozottobjektum halmaz

Módszerek adatok

Page 6: PERL ízelítő

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

Page 7: PERL ízelítő

A programozási nyelvek

Az egyes programozási nyelvek a rendelkezésre álló adatstruktúrákban és utasításokban (is) különböznekA könnyű használhatóság érdekében célszerű „antropomorf” utasításokkal rendelkezniA széles körű használhatóság érdekében jó, ha mindenféle számítógépen használható

Page 8: PERL ízelítő

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

Page 9: PERL ízelítő

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

Page 10: PERL ízelítő

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őAz eredmény automatikusan tovább analizálható,

pl. a keresés előtt még ismeretlen szekvenciák vizsgálata is megoldott

IngyenesA 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élokraKönnyen tanulható és feljeszthető

(Perl) scriptek összehasonlítása kommerciális programokkal

Page 11: PERL ízelítő

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

Elrejtett tartalom Eljárások (methods, függvények, szubrutinok)

Konstruktorok Öröklés

Page 12: PERL ízelítő

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

Page 13: PERL ízelítő

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/

Page 14: PERL ízelítő

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 (<>) {…};

Page 15: PERL ízelítő

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.

*

Page 16: PERL ízelítő

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 eleje

$ A string 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;

Page 17: PERL ízelítő

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ű/[ACDEFGHIKLMNPQRSTVWYX]/; # bármely aminosav

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]

Page 18: PERL ízelítő

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/$gtg++ if /\AGTG/};

print "$atg gén kezdődik ATG-vel, $gtg gén kezdődik GTG-vel.\

n";

Page 19: PERL ízelítő

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,}$/);…}

Vegyük sorra a primereket

Ha nincs mostaniban min. 4 G/C egymás után,

Akkor csináljunk vele valamit

Page 20: PERL ízelítő

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; # 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

... és még sokan mások ...

Page 21: PERL ízelítő

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

Page 22: PERL ízelítő

Seq objectA Bioperl fő szekvencia-objektuma

Se magát a szekvenciát, se a járulékos információkat nem látjuk.

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);

*

Page 23: PERL ízelítő

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

**

Page 24: PERL ízelítő
Page 25: PERL ízelítő

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

Page 26: PERL ízelítő

Egy SwissProt file és egy Bio::Seq object komponensei

*

Page 27: PERL ízelítő

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";}

Page 28: PERL ízelítő

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 => '.');

Page 29: PERL ízelítő

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;

Page 30: PERL ízelítő

A SeqFeature kapcsolata más modulokkal

Page 31: PERL ízelítő

A SeqFeature megjelenítéseBio::Graphics::Panel, Bio::Graphics::Glyph, add_track, ...

.png fájlok készíthetők

Page 32: PERL ízelítő

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();

*

Page 33: PERL ízelítő

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";

*

Page 34: PERL ízelítő

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

Page 35: PERL ízelítő

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

Page 36: PERL ízelítő

BLAST

Page 37: PERL ízelítő

Stand-alone BLASTuse 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"; }

Page 38: PERL ízelítő

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!

}}

Page 39: PERL ízelítő

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

...

Page 40: PERL ízelítő

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/

Page 41: PERL ízelítő