当前位置:编程学习 > 网站相关 >>

perl应用:六框阅读翻译DNA序列


生物学知识:

1.六框翻译
        因为DNA为双链, 平时从NCBI等里面得到的只是其中的一条链,还有一个互补链没有结出. 先从一条链讲起, 如此链为ACGATGCCG....则现在有以下三种读法:第一种,ACG/ATG/CCG.... 第二种,把A看做前面的部分,则为A/CGA/TGC/CG..... 第三种,把AC看做是前面的部分,则为AC/GAT/GCC/G... 只此一条链就有三种读码框。当然,互补链也有其对应的三个读码框,所以两者加起来是六个读码框了。
比如序列:ACGACGACGACGACGACG,可能的读码框就有以下三种:
ACG ACG ACG ACG ACG ACG ACG ACG
CGA CGA CGA CGA CGA CGA CGA CGA
GAC GAC GAC GAC GAC GAC GAC GAC


[plain] 
use strict;   
use warnings;   
   
   
my $dna      ='';   
my $protein  ='';   
my @file_data=( );   
my @filedata; 
my $revcom=''; 
 
 
#打开文件  
@filedata  = get_file_data(); 
#得到序列 
$dna       = extract_sequence_from_fasta_data(@filedata);   
 
#六框阅读翻译 
 
print "\n---------------------Reading Frame 1-----------------\n"; 
$protein=translate_frame($dna,1); 
print_sequence($protein,70); 
 
print "\n---------------------Reading Frame 2-----------------\n"; 
$protein=translate_frame($dna,2); 
print_sequence($protein,70); 
 
print "\n---------------------Reading Frame 3-----------------\n"; 
$protein=translate_frame($dna,3); 
print_sequence($protein,70); 
 
print "\n---------------------Reading Frame 4-----------------\n"; 
$protein=translate_frame($dna,4); 
print_sequence($protein,70); 
 
print "\n---------------------Reading Frame 5-----------------\n"; 
$protein=translate_frame($dna,5); 
print_sequence($protein,70); 
 
print "\n---------------------Reading Frame 6-----------------\n"; 
$protein=translate_frame($dna,6); 
print_sequence($protein,70); 
 
sub get_file_data 
{   
    # A subroutine to get data from a file given its filename 
    #读取文件的子序列 
    my $dna_filename; 
    my @filedata; 
    print "please input the Path just like this f:\\\\perl\\\\data.txt\n";    
    chomp($dna_filename=<STDIN>);  
    open(DNAFILENAME,$dna_filename)||die("can not open the file!");     
    @filedata     = <DNAFILENAME>;   
    close DNAFILENAME;   
    return @filedata;#子函数的返回值一定要记住写 

 
sub extract_sequence_from_fasta_data   
{   
    #*******************************************************************   
    # A subroutine to extract FASTA sequence data from an array   
    # 得到其中的序列   
    # fasta格式介绍:   
    # 包括三个部分   
    # 1.第一行中以>开头的注释行,后面是名称和序列的来源   
    # 2.标准单字母符号的序列   
    # 3.*表示结尾   
    #*******************************************************************   
   
    my (@fasta_file_data) =@_;   
    my $sequence =' ';   
    foreach my $line (@fasta_file_data)   
    {   
        #这里忽略空白行   
        if ($line=~/^\s*$/)   
        {   
            next;   
        }   
        #忽略注释行   
        elsif($line=~/^\s*#/)   
        {   
            next;   
        }   
        #忽略fasta的第一行   
        elsif($line=~/^>/)   
        {   
            next;   
        }   
        else   
        {   
            $sequence .=$line;   
        }   
    }   
    $sequence=~s/\s//g;   
    return $sequence;   
}   
   
sub print_sequence   
{   
    # A subroutine to format and print sequence data   
    my ($sequence, $length) = @_;   
    for (my $pos =0; $pos<length($sequence);$pos+=$length)   
    {   
        print substr($sequence,$pos,$length),"\n";   
    }   
}   
   
      
   
sub codon2aa      
{      
   
    #第三种方法     
    #也就是运用哈希     
    #我们将所有的密码子作为hash的key,然后将代表的氨基酸作为hash的value     
    #然后进行匹配     
    # codon2aa      
    # A subroutine to translate a DNA 3-character codon to an amino acid      
    # Version 3, using hash lookup      
    my($codon) = @_;      
      
    $codon = uc $codon;#uc=uppercase;lc=lowercase     
                   #也就是大小写转换,uc表示将所有的小写 转换为大写    &n

补充:Web开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,