用于模拟RNA合成的Perl程序

时间:2010-11-06 05:06:14

标签: perl hash bioinformatics

寻找关于如何处理我的Perl编程家庭作业编写RNA合成程序的建议。我总结并概述了下面的程序。具体来说,我正在寻找下面的块的反馈(我将编号以便于参考)。我读过安德鲁约翰逊的“Perl编程元素”第6章(好书)。我还阅读了perlfunc和perlop pod-pages,没有任何内容可以从哪里开始。

程序描述:程序应该从命令行读取输入文件,将其翻译成RNA,然后将RNA转录成一系列大写的单字母氨基酸名称。

  1. 接受在命令行上命名的文件

      

    这里我将使用<>运营商

  2. 检查以确保该文件仅包含acgt或die

    if ( <> ne [acgt] ) { die "usage: file must only contain nucleotides \n"; }  
    
  3. 将DNA转录为RNA(每个A替换为U,T替换为A,C替换为G,G替换为C)

      

    不确定如何做到这一点

  4. 拿这个转录&amp;从第一次出现的“AUG”开始,将它分成3个字符的“密码子”

      

    不确定,但我认为这是我将启动%哈希变量的地方?

  5. 取3个字符“密码子”并给它们一个字母符号(一个大写的单字母氨基酸名称)

      

    使用键赋值(此处有70种可能性,因此我不确定存储位置或访问方式)

  6. 如果遇到间隙,则启动新行并重复处理

      

    不确定,但我们可以假设差距是三倍的倍数。

  7. 我是以正确的方式接近这个吗?是否有我可以忽略的Perl功能可以简化主程序?

  8. 注意

    必须是自包含程序(密码子名称和符号的存储值)。

    每当程序读取一个没有符号的密码子时,这是RNA中的缺口,它应该开始一个新的输出系列,并在下一次出现“AUG”时开始。为简单起见,我们可以假设间隙总是三倍的倍数。

    在我花费任何额外时间进行研究之前,我希望得到确认,我正在采取正确的方法。感谢您花时间阅读并分享您的专业知识!

3 个答案:

答案 0 :(得分:5)

1. here I will use the <> operator

好的,你的计划是逐行读取文件。不要忘记每行chomp,否则你的序列中最后会出现换行符。


2. Check to make sure the file only contains acgt or die

if ( <> ne [acgt] ) { die "usage: file must only contain nucleotides \n"; }

在while循环中,<>运算符会将读取的行放入特殊变量$_,除非您明确指定它(my $line = <>)。

在上面的代码中,您正在从文件中读取一行并将其丢弃。你需要保存该行。

此外,ne运算符比较两个字符串,而不是一个字符串和一个正则表达式。你需要!~运算符(或=~运算符,带有否定的字符类[^acgt]。如果你需要测试不区分大小写,请查看{{1正则表达式匹配的标志。


i

正如GWW所说,检查你的生物学。 T-> U是转录中的唯一步骤。您会在此处找到3. Transcribe the DNA to RNA (Every A replaced by U, T replaced by A, C replaced by G, G replaced by C).(音译)运算符。


tr

4. Take this transcription & break it into 3 character 'codons' starting at the first occurance of "AUG"

我会在这里使用缓冲区。在not sure but I'm thinking this is where I will start a %hash variables?循环之外定义标量。使用while(<>)匹配“AUG”。如果找不到,请将最后两个基数放在该标量上(您可以使用index)。在循环的下一次迭代中(将substr $line, -2, 2)行添加到这两个碱基,然后再次测试“AUG”。如果你受到了打击,你会知道在哪里,所以你可以标记这个位置并开始翻译。


.=

5. Take the 3 character "codons" and give them a single letter Symbol (an uppercase one-letter amino acid name)

再次,正如GWW所说,构建一个哈希表:

Assign a key a value using (there are 70 possibilities here so I'm not sure where to store or how to access)

然后你可以使用(例如。)%codons = ( AUG => 'M', ...)来构建你正在检查的当前行的数组,一次构建三个元素的密码子,并从哈希表中获取正确的氨基酸代码。 / p>


split

6.If a gap is encountered a new line is started and process is repeated

见上文。您可以使用not sure but we can assume that gaps are multiples of threes.来测试是否存在差距。


exists $codons{$current_codon}

你知道,看看上面的内容,似乎太复杂了。我建了几个积木;子程序7. Am I approaching this the right way? Is there a Perl function that I'm overlooking that can simplify the main program?read_codon:我认为它们极大地帮助了程序的逻辑。

我知道这是一项家庭作业,但我认为这可能有助于您了解其他可能的方法:

translate

答案 1 :(得分:3)

我可以就你的一些观点给你一些提示。

我认为你的第一个目标应该是逐个字符地解析文件,确保每个文件都有效,将它们分成三个核苷酸组,然后处理你的其他目标。

我认为您的生物学也有点过时,当您将DNA转录为RNA时,您需要考虑strands所涉及的内容。在转录过程中,您可能不需要“补充”您的碱基。

2.你应该检查这个是你逐字符解析文件。

3.你可以用循环和一些if语句或散列

来做到这一点

4.当你逐个字符地读取文件时,这可能是用计数器完成的。因为你需要在每个第3个字符后插入一个空格。

5.这是一个使用基于氨基酸密码子表的哈希的好地方。

6.解析文件时,您必须查找间隙字符。这似乎与你的#2要求相矛盾,因为程序说你的文本只能包含ATGC。

有很多perl函数可以使这更容易。还有perl模块,如bioperl。但我认为使用其中一些可能会破坏你的任务目的。

答案 2 :(得分:1)

请查看BioPerlbrowse the source-modules,了解有关如何进行此操作的指标。