2016-05-02 6 views
2

Mit meinen (ziemlich) grundlegenden Programmierkenntnissen habe ich ein Skript zusammengestellt, das eine ausgerichtete Multi-Fasta-Datei (eine multiple Sequenzausrichtung) analysiert und alle Daten zwischen zwei angegebenen Spalten extrahiert .Extrahieren und Verbinden von Exons aus mehreren Sequenzalignments

use Bio::SimpleAlign; 
use Bio::AlignIO; 
$str = Bio::AlignIO->new(-file => $inputfilename, -format => 'fasta'); 
$aln = $str->next_aln(); 
$mini = $aln->slice($array[0], $array[1]); 
$out = Bio::AlignIO->new(-file => $array[3], -format => 'fasta'); 
$out->write_aln($mini); 

Das Problem ich habe, ist, dass ich mehrere Regionen aus der gleichen Ausrichtung und dann kommen diese Regionen vor dem Schreiben auf eine outfile schneiden können, will. Die Komplikation ist, dass ich eine Datei mit einer Liste von Koordinaten liefern möchte, wobei jede Zeile zwei oder mehr Koordinaten enthält, zwischen denen Daten extrahiert und verknüpft werden sollen. Hier

ist eine Beispiel Koordinatendatei

ORF1, 10, 50, exon1 # The above line should produce a slice between columns 10-50 and write to an outfile 
ORF2, 70, 140, exon1 
ORF2, 190, 270, exon2 
ORF2, 500, 800, exon3 # Data should be extracted between the ranges specified here and in the above two lines and then joined (side by side) to produce the outfile. 
ORF3, 1200, 1210, exon1 
etc etc 

Und hier ist ein (kleines) Beispiel einer ausgerichtete fasta Datei

\>Sample1 
ATGGCGACCGTGCACTACTCCCGCCGACCTGGGACCCCGCCGGTCACCCTCACGTCGTCC 
CCCAGCATGGATGACGTTGCGACCCCCATCCCCTACCTACCCACATACGCCGAGGCCGTG 
GCAGACGCGCCCCCCCCTTACAGAAGCCGCGAGAGTCTGGTGTTCTCCCCGCCTCTTTTT 
CCTCACGTGGAGAATGGCACCACCCAACAGTCTTACGATTGCCTAGACTGCGCTTATGAT 
GGAATCCACAGACTTCAGCTGGCTTTTCTAAGAATTCGCAAATGCTGTGTACCGGCTTTT 
TTAATTCTTTTTGGTATTCTCACCCTTACTGCTGTCGTGGTCGCCATTGTTGCCGTTTTT 
CCCGAGGAACCTCCCAACTCAACTACATGA 
\>Sample2 
ATGGCGACCGTGCACTACTCCCGCCGACCTGGGACCCCGCCGGTCACCCTCACGTCGTCC 
CCCAGCATGGATGACGTTGCGACCCCCATCCCCTACCTACCCACATACGCCGAGGCCGTG 
GCAGACGCGCCCCCCCCTTACAGAAGCCGCGAGAGTCTGGTGTTCTCCCCGCCTCTTTTT 
CCTCACGTGGAGAATGGCACCACCCAACAGTCTTACGATTGCCTAGACTGCGCTTATGAT 
GGAATCCACAGACTTCAGCTGGCTTTTCTAAGAATTCGCAAATGCTGTGTACCGGCTTTT 
TTAATTCTTTTTGGTATTCTCACCCTTACTGCTGTCGTGGTCGCCATTGTTGCCGTTTTT 
CCCGAGGAACCTCCCAACTCAACTACATGA 

Ich denke, es sollte eine ziemlich einfache Art und Weise zu lösen Dieses Problem, möglicherweise die Informationen in der ersten Spalte, gepaart mit der Exon-Nummer, aber ich kann nicht für das Leben von mir herauszufinden, wie dies getan werden kann.

Kann mir jemand helfen?

Antwort

1
  1. Die ausgerichtete Fasta-Datei, die Sie gepostet haben - zumindest so, wie sie auf der stackoverflow-Webseite erscheint - wurde nicht kompiliert. Gemäß https://en.wikipedia.org/wiki/FASTA_format sollten die Beschreibungszeilen mit einer > beginnen, nicht mit \>.

  2. Stellen Sie sicher, dass alle Perl-Programme mit use strict; use warnings; ausgeführt werden. Dies erleichtert das Debugging.

  3. Sie haben @array nicht ausgefüllt. Folglich können Sie erwarten, Fehler wie diese zu bekommen:

    Use of uninitialized value $start in pattern match (m//) at perl-5.24.0/lib/site_perl/5.24.0/Bio/SimpleAlign.pm line 1086, <GEN0> line 16. 
    Use of uninitialized value $start in concatenation (.) or string at perl-5.24.0/lib/site_perl/5.24.0/Bio/SimpleAlign.pm line 1086, <GEN0> line 16. 
    
    ------------- EXCEPTION: Bio::Root::Exception ------------- 
    MSG: Slice start has to be a positive integer, not [] 
    STACK: Error::throw 
    STACK: Bio::Root::Root::throw perl-5.24.0/lib/site_perl/5.24.0/Bio/Root/Root.pm:444 
    STACK: Bio::SimpleAlign::slice perl-5.24.0/lib/site_perl/5.24.0/Bio/SimpleAlign.pm:1086 
    STACK: fasta.pl:26 
    

Sobald Sie plausible Werte zuweisen, zB

@array = (1,17); 

... Sie plausibler Ergebnisse erhalten:

$ perl fasta.pl 
>Sample1/1-17 
ATGGCGACCGTGCACTA 
>Sample2/1-17 
ATGGCGACCGTGCACTA 

HTH!

Verwandte Themen