2016-05-02 6 views
2

私は(かなり)基本的なコーディングスキルを使用して、アライメントされたマルチファイアファイル(複数シーケンスアライメント)を解析し、 。複数の配列アライメントからのエクソンの抽出と結合

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

私が持っている問題は、私は同じアライメントから複数の領域をスライスして、前OUTFILEへの書き込みに、これらの地域に参加できるようにしたいということです。 合併症私は、各行に2つ以上の座標が含まれている座標のリストをファイルに渡して、データを抽出して結合する必要があるということです。ここで

は、ここでは例の座標ファイル

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 

とが整列FASTAファイルの(小)の例

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

である私が解決するために、かなり簡単な方法があるはずだと思いますこの問題は、おそらく最初の列の情報を使って、エキソン番号とペアになっていますが、私の人生にとっては、これをどうやってできるのか理解できません。

誰でもお手伝いできますか?

答えて

1
  1. 投稿したアライメントされたfastaファイルは、少なくともstackoverflow Webページに表示されているようにコンパイルされませんでした。 https://en.wikipedia.org/wiki/FASTA_formatによると、記述行は、\>ではなく、>で始まる必要があります。

  2. 必ずすべてのPerlプログラムをuse strict; use warnings;で実行してください。これにより、デバッグが容易になります。

  3. @arrayを入力していません。したがって、あなたがこのようなエラーが出ることを期待することができます:

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

    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 
    

あなたがもっともらしい値、例えば、

@array = (1,17); 

を割り当てると...あなたはもっともっともらしい結果が得られます

HTH!