如何拼凑 DNA 的短片段?匹配序列文件中的碱基对

Posted

技术标签:

【中文标题】如何拼凑 DNA 的短片段?匹配序列文件中的碱基对【英文标题】:How to piece together short reads of DNA? Matching base pairs in file of sequences 【发布时间】:2018-10-30 19:43:05 【问题描述】:

我正在尝试拼凑 DNA 短片段。我需要将大约 3 个碱基对与其他短读片段匹配。 (碱基对= ex. TCG(基本上只有 3 个字母))

我尝试过正则表达式,但是当我尝试读取包含一堆短读的文件时,我需要将核苷酸设为变量,我认为正则表达式不会这样做。我有一个包含一堆这些短读取的文件,我需要将这些碱基对与具有这些相同碱基对序列的其他短读取进行匹配。

例如。我在一个文件中有这两行简短的读取:

AAAGGGTTTCCCGGGAAATCA

CCCGGGAAATCAGGGAAATTT

我需要的结果是:

AAAGGGTTTCCCGGGAAATCAGGGAAATTT

如何匹配匹配的行并将其粘贴到其他行的顶部,以便在相似点将它们组合起来?

【问题讨论】:

5个左右是多少? 嗨,Alpa,您的描述很简短,您还没有告诉我们您尝试了什么。甚至很难说出你想要做什么。我能说的最好的是,您正在尝试将短读对齐以形成更长的读。这不是我建议你手动做的事情,并且是一个正在进行的研究领域,以寻找最好的方法。我建议您查看社区中可用的工具来完成任务。 假设您确实在处理 DNA 数据,有很多非常专业的工具可以做到这一点(并允许误读)。尝试bioinformatics.stackexchange.com 或搜索“序列组装” 【参考方案1】:

您可以在第二个序列中找到匹配序列的索引并将它们连接起来:

seq1 = 'AAAGGGTTTCCCGGGAAATCA'
seq2 = 'CCCGGGAAATCAGGGAAATTT'
match_pair_count = 5
match_seq = seq1[-match_pair_count:]
match_index = seq2.rfind(match_seq)
combined_seq = seq1[:-match_pair_count] + seq2[match_index:]

注意:如果您需要捕获匹配序列未出现在第二个序列中的情况,则需要添加代码来处理 match_index == -1

【讨论】:

【参考方案2】:

每个子序列的简单解决方案计算 5 尾和 5 头。然后尝试使用深度优先搜索的所有组合。

绘制图形的更复杂的方法,其中有向边标记有共边字母的数量(例如 4-9)。应用旅行商解决方案或其他适当的算法来找到所有顶点的最短路径。

我确信有很多适合基因组推断的工具和技术。 https://www.youtube.com/watch?v=fGxx7TvQ3f4.

求两个序列之间的距离,取反一个并找到最长的公共前缀。

def joinifmatch(seq1, seq2, minlen = 4): 尾 = seq2[:4] 对于我在范围内(len(seq1),4,-1) 如果 seq1.startswith(seq2[n-i:]) 返回 "%s%S"(seq2[:n-i], seq1)

【讨论】:

以上是关于如何拼凑 DNA 的短片段?匹配序列文件中的碱基对的主要内容,如果未能解决你的问题,请参考以下文章

2021-06-06

2021-06-06

一本通1131:基因相关性

BZOJ1264[AHOI2006]基因匹配Match DP+树状数组

bzoj1264 基因匹配Match (lcs转lis lcs(nlogn))

HihoCoder1052基因工程(简单模拟题)