不同字符串长度的多序列比对

4
我需要一种方法来创建一个共识序列,该序列由3-1000个长度不同的短(10-20bp)核苷酸("ATCG")读取组成。请参考以下简化示例:
"AGGGGC"
"AGGGC"
"AGGGGGC"
"AGGAGC"
"AGGGGG"

应该得到一个共识序列,其代码为“AGGGGC”。
我在BioPython库中找到了执行多序列比对(MSA)的模块,但仅适用于相同长度的序列。我还熟悉(并实现了)用于任意长度两个序列的Smith-Waterman样式比对。我想象中一定有一个库或实现可以结合这些元素(不等长度的MSA),但是在搜索网络和各种文档数小时后没有找到任何东西。
您有关于现有模块/库(首选Python)或可纳入管道的程序的建议吗?
谢谢!
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

1
肌肉对长度不一的序列处理良好,无需用间隔填充它们。 - heathobrien
MAFFT比Muscle更快,但两者都适合OP的输入数据大小。 - dkatzel
谢谢,MAFFT和Muscle都符合我的需求。然而,它们都产生了意外的结果: 1 aggggc- 4 aggagc- 3 agggggc 5 aggggg- 2 a-gggc- * . 我认为间隙成本太高了,因此没有在1、4、5和2中创建“-”来对齐一列中的“c”核苷酸。我看到在MAFFT中有各种-op标志可以更改这个权重,您有什么建议哪个是正确的或开始调整的起始值?至于MUSCLE,我没有看到任何更改此权重的选项? - Alexander West
玩了一下MAFFT的设置。我似乎找不到任何地方可以将“A”和“C”对齐,并将“G”的数量变化视为插入/缺失。 - Alexander West

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接