4

我需要一种从 3 - 1000 个不同长度的短 (10-20bp) 核苷酸 (“ATCG”) 读数中创建共有序列的方法。

一个简化的例子:

"AGGGGC"
"AGGGC"
"AGGGGGC"
"AGGAGC"
"AGGGGG"

应该产生一致的序列"AGGGGC"

我在 BioPython 库中找到了进行多序列比对 (MSA) 的模块,但仅适用于相同长度的序列。我也熟悉(并且已经实现)任意长度的两个序列的 Smith-Waterman 风格对齐。我想一定有一个库或实现结合了这些元素(MSA 不等长),但经过数小时的网络搜索和各种文档都没有找到任何东西。

关于现有模块/库(首选 Python)或我可以合并到执行此操作的管道中的程序的任何建议?

谢谢!

4

1 回答 1

1

在序列末尾添加间隙字符,使它们都具有相同的长度。然后你可以用你选择的程序来处理它们,例如 MUSCLE:

from Bio import SeqIO
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.Align.Applications import MuscleCommandline

sequences = ["AGGGGC",
             "AGGGC",
             "AGGGGGC",
             "AGGAGC",
             "AGGGGG"]

longest_length = max(len(s) for s in sequences)
padded_sequences = [s.ljust(longest_length, '-') for s in sequences]
records = (SeqRecord(Seq(s)) for s in padded_sequences)

SeqIO.write(records, "msa_example.fasta", "fasta")

from Bio.Align.Applications import MuscleCommandline
cline = MuscleCommandline(input="msa_example.fasta", out="msa.txt")
print cline
于 2015-07-01T08:52:34.093 回答