簡體   English   中英

當DNA序列中存在特定模式時,檢索編碼氨基酸

[英]Retrieve the coding amino-acid when there is certain pattern in a DNA sequence

當DNA序列中存在某些模式時,我想檢索編碼的氨基酸。 例如,模式可以是:ATAGTA。 因此,當具有:

輸入文件:

>sequence1
ATGGCGCATAGTAATGC
>sequence2
ATGATAGTAATGCGCGC

理想的輸出將是一個表格,其中每個氨基酸的次數由模式編碼。 在此,序列1中的模式僅編碼一種氨基酸,而序列2中的模式編碼兩種氨基酸。 我希望這個工具可以擴展到數千個序列。 我一直在考慮如何完成這項工作,但我只想:替換所有不同於模式的核苷酸,翻譯剩下的並獲得編碼氨基酸的摘要。

請讓我知道是否可以使用現有工具執行此任務。

謝謝你的幫助。 一切順利,貝爾納多


編輯(由於我的帖子引起混亂):

請忘記原始帖子以及sequence1和sequence2。

大家好,對於造成的混亂,我們深表歉意。 輸入的fasta文件是使用'FeatureExtract'工具( http://www.cbs.dtu.dk/services/FeatureExtract/download.php )源自GenBank文件的* .ffn文件,因此可以想象它們已經在幀(+1),無需在與+1不同的幀中編碼氨基酸。

我想知道以下序列編碼的氨基酸:

AGAGAG
GAGAGA
CTCTCT
TCTCTC

我想獲得編碼氨基酸的唯一字符串是三個AG,GA,CT或TC的重復,分別是(AG)3,(GA)3,(CT)3和(TC)3。 我不希望該程序檢索四個或四個以上重復序列的編碼氨基酸。

再次感謝,貝爾納多

這是至少應該使您入門的一些代碼。 例如,您可以像這樣運行:

./retrieve_coding_aa.pl file.fa ATAGTA

內容retrieve_coding_aa.pl

#!/usr/bin/perl 

use strict;
use warnings;

use File::Basename;
use Bio::SeqIO;
use Bio::Tools::CodonTable;
use Data::Dumper;

my $pattern = $ARGV[1];

my $fasta = Bio::SeqIO->new ( -file => $ARGV[0], -format => 'fasta');

while (my $seq = $fasta->next_seq ) {

    my $pos = 0;

    my %counts;

    for (split /($pattern)/ => $seq->seq) {

        if ($_ eq $pattern) {

            my $dist = $pos % 3;

            unless ($dist == 0) {

                my $num = 3 - $dist;

                s/.{$num}//;

                chop until length () % 3 == 0;
            }

            my $table = Bio::Tools::CodonTable->new();

            $counts{$_}++ for split (//, $table->translate($_));
        }

        $pos += length;
    }

    print $seq->display_id() . ":\n";

    map {

        print "$_ => $counts{$_}\n"
    }
    sort {

        $counts{$a} <=> $counts{$b}
    }
    keys %counts;

    print "\n";
}

以下是使用示例輸入的結果:

sequence1:
S => 1

sequence2:
V => 1
I => 1

Bio::Tools::CodonTable類還支持非標准密碼子使用表。 您可以使用id指針更改表。 例如:

$table = Bio::Tools::CodonTable->new( -id => 5 );

要么:

$table->id(5);

有關更多信息,包括如何檢查這些表的信息,請參見此處的文檔: http : //metacpan.org/pod/Bio :: Tools :: CodonTable

我會堅持使用您想要的第一個版本,因為附錄只會使我更加困惑。 (幀?)我僅在sequence2中發現一次ATAGTA,但我假設您也想要鏡像/反向序列,在這種情況下為ATGATA。 好吧,我的腳本沒有執行此操作,因此您必須將其在input_sequences文件中寫入兩次,但這應該沒問題。

我使用像您一樣的文件“ dna.txt”和一個輸入序列文件“ input_seq.txt”。 結果文件列出了模式及其在dna.txt文件中的出現(包括重疊結果,但可以將其設置為非重疊,如awk中所述)。

input_seq.txt:

GC
ATA
ATAGTA
ATGATA

dna.txt:

>sequence1
ATGGCGCATAGTAATGC
>sequence2
ATGATAGTAATGCGCGC

RESULTS.TXT:

GC,6
ATA,2
ATAGTA,2
ATGATA,1

代碼是awk調用另一個awk(但是其中一個很簡單)。 您必須運行“ ./match_patterns.awk input_seq.txt”才能生成結果文件。

* match_patterns.awk:*

#! /bin/awk -f
{return_value= system("awk -vsubval="$1" -f test.awk dna.txt")}

test.awk:

#! /bin/awk -f
{string=$0
do
{
where = match(string, subval)
# code is for overlapping matches (i.e ATA matches twice in ATATAC)
# for non-overlapping replace +1 by +RLENGTH in following line
if (RSTART!=0){count++; string=substr(string,RSTART+1)}
}
while (RSTART != 0)
}
END{print subval","count >> "results.txt"}

文件必須全部在同一目錄中。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM