当前位置: 首页 > 知识库问答 >
问题:

如何使用Biopython的翻译功能后跟踪开始密码子(ATG)在核苷酸序列中的位置?

竺勇
2023-03-14

我有一个FASTA文件,其中包含一系列序列,格式如下:

BMRat | XM | U 008846946.1 ATGAGACACACACACACACACACAAGCACACACACACAAGCACACACAAGCACACACAAGCTCAAGGTCA TCTCTTTTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCACAAGATATTAGTTAGTGACTCACACACACACACACACACACACACACACACACACAAGCTCAAGCTCAAGGTCA TCTCTCTCTCTCTCTCTTTTTTTTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCAGCTAGCTAGCTAGTTAGTTAGTTAGTTAGTTAGTTAGTTAGTTAGTTAGTTAGATTGCAACCAGTTTTCTCTCGCTGTTACTTTGCGACCACAGATGCTTGCTTGCTTGCTTGCGCGTGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCTGTGATGCTCATGCTTGCGCATGCGCATGCATGCGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATTCTCATGCATGCATGCATGCATGCATGCATGCATGCATTCTCTCTCTCTCATTCTCTCTCATTCTCTCTCTTCTGACTACATCAATGCTCTGTTGTTCTTCTCTCTCTCCATAGATAGATATCATCTCTCTTGCATGGTTTCATGCATGCATGGATGAATTCAGATTCAGATTCAGATTCAGATGCATGGAGAGAAGTTCTCTCTCTCATGGGTCTCACTACTGGAGTCATTCATTCATTCATGCATGCATGCATGCATGCATGGATGCATAGATGCATAGATTCATTCATTCATTCAGATTCATTCATTCATGCATGCATGCATGCATTCAGATTCATGCATGCATTCAGATTCATTCAGATTCATTCATGCATGCATTCATGCATTCATTCATTCATTCATGTCCCATGCTGAACCCTGTCATCTACAGTCTGAGAGAACAAGAGATGTGAAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGATTTGA AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG

使用biopythonhttp://biopython.org/wiki/Seq实现的代码允许我找到FASTA文件中每个序列中以蛋氨酸开始、以停止密码子结束的最长氨基酸序列。

函数为find_largest_polypeptide_in_DNA。基本上,它使用3个不同的正向读取帧将脱氧核糖核酸序列翻译成氨基酸序列,并在变量allPos的中保存了以M(特定氨基酸)开始并以终止密码子结束的片段。然后它比较可能性的长度,选择最长的可能性,返回该片段的蛋白质序列。

def find_largest_polypeptide_in_DNA(seq, translationTable=1):
    allPossibilities = []
    for frame in range(3):
        trans = str(seq[frame:].translate(translationTable))
        framePossibilitiesF = [i[i.find("M"):] for i in trans.split("*") if "M" in i]
        allPossibilities += framePossibilitiesF
    allPossibilitiesLengths = [len(i) for i in allPossibilities]

    if len(allPossibilitiesLengths) == 0:
        raise Exception("no candidate ORFs")

    proteinAsString = allPossibilities[allPossibilitiesLengths.index(max(allPossibilitiesLengths))]

    return Seq(proteinAsString, alphabet=ProteinAlphabet)

它工作得很好,但是现在我想得到与函数返回的蛋白质序列相对应的脱氧核糖核酸序列。为了得到两个序列,我需要在函数中添加一些行,但我真的不知道怎么做。我不知道是否有可能跟踪i.find(“M”)的每个蛋氨酸的位置,然后用这个位置来跟踪它在核苷酸序列中的位置。

谢谢。

共有1个答案

陶博涉
2023-03-14

我认为按照类似的原则编写一个新函数是最容易的。你的想法“跟踪i.find('M')中每个蛋氨酸的位置”基本上就是下面所做的。对你开始使用的代码执行此操作的困难在于,序列会被拆分('*')切碎,因此DNA起始位置是读取帧偏移量加上相关序列之前片段的所有密码子之和。根据您的说明,我添加了一个封闭循环,以在前进和后退方向上进行迭代。

def find_largest_polypeptide_in_DNA(seq, translationTable=1):
    # Set the record to start with, then try to beat it
    longest_DNA = ''
    longest_amino_acid_sequence = 0

    for direction in [-1, 1]:
        forward_DNA = seq[::direction]
        # Check all three reading frames in this direction.
        for frame in range(3):
            trans = str(forward_DNA[frame:].translate(translationTable))
            cut_codons = 0
            while 'M' in trans:
                codons_before_Met = trans.find('M')
                cut_codons += codons_before_Met
                trans = trans[codons_before_Met:]
                if '*' in trans:
                    length = trans.find('*') + 1 
                    if length > longest_amino_acid_sequence:
                        longest_amino_acid_sequence = length
                        first_bp = frame + 3*cut_codons
                        last_bp = frame + 3*cut_codons + 3*(length)
                        longest_DNA = str(forward_DNA[first_bp:last_bp+1])
                    trans = trans[length:]
                else:
                    # Ignore sequence M... if ORF extends beyond FASTA?
                    trans = ''
    return longest_DNA
 类似资料:
  • 问题内容: 如果对http请求的响应是带有cookie的重定向(http代码302), 您如何指示Go客户使用收到的Cookie跟踪新位置? 在CURL中,可以通过以下方式轻松设置客户端: 您如何在Go中做到这一点? 问题答案: 使用Go 1.1,您可以使用。 这是一个工作示例:

  • 问题内容: 我曾经短暂地附加一个过程。该过程创建了90个线程。当我找到有问题的线程时,我必须繁琐地搜索父线程,然后是祖父母线程,一直到根进程。 是否有技巧或工具可以快速找出哪个线程创建了另一个线程?还是更好,打印类似树的线程创建树? 问题答案: 跟踪编辑的子进程。

  • 我不是在问AffineTransform是如何工作的,而是如何使用它的翻译方法。 我多次阅读API,但仍然不明白它是如何工作的。 公共空转换(双tx,双ty) 将此转换与翻译转换连接起来。这相当于调用concatenate(T),其中T是由以下矩阵表示的AffineTransform: 问题:

  • 所以我让全球定位系统从我“按下播放”开始持续跟踪和记录我的位置。我想显示所行驶的距离、平均速度、所花费时间的上升和下降。 我正在用我的“LocationsService.java”类记录我的位置,这个类使用startLocationService(),它通过LocationCallback循环(我想)。我使用从@TDIScott获得的代码创建了一个hashmap,并将其放入列表中。 更新问题:如何

  • 问题内容: 我可以使用Python中的OpenCV从网络摄像头获取帧。camshift示例接近我想要的,但是我不希望人工干预来定义对象。我想获得在几帧的过程中变化的总像素的中心点,即运动对象的中心。 问题答案: 我已经从博客文章 使用OpenCV进行运动检测中 找到的C版本的代码转换了一些工作代码:

  • 我在过去为Azure函数使用了很多秘密,现在我试图使用一个密钥,RSA加密,4096位。这是一个私有的PuTTy.ppk键,我已经将其导出为。pem类型以满足Azure的要求。我有一个Python 3.7应用程序,我已经在其中部署了所需的功能,并尝试在应用程序设置中引用所需的键,下面的语句是: @microsoft.keyvault(secreturi=https://{thevault-addr