2

我需要一种方法来创建3到1000个不同长度的短(10-20bp)核苷酸(“ATCG”)读段中的共有序列。不等长字符串长度的多序列比对

简化示例:

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

应当导致"AGGGGC"的共有序列。

我发现在BioPython库中执行多重序列比对(MSA)的模块,但仅限于具有相同长度的序列。我也熟悉(并且已经实施)Smith-Waterman风格的对齐任意长度的两个序列。我想象一下,必须有一个图书馆或实施方案将这些要素结合起来(MSA通过不平等的方式),但是经过几个小时的网络冲刺,各种文件都没有发现。

任何关于现有模块/库(Python优先)的建议或我可以合并到管道中的程序?

谢谢!

回答

1

在序列末尾添加空位字符,使它们全部具有相同的长度。然后你可以用你选择的程序来处理它们,例如肌肉:

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

+0

MAFFT比肌肉快,但任何应该罚款OP的输入数据大小 – dkatzel

+0

谢谢,无论是MAFFT和肌肉符合我的需要。然而,他们都产生意想不到的结果: 1 aggggc- 4 aggagc- 3 agggggc 5 aggggg- 2-gggc- * * * 我想差距成本太高,所以它的。在1,4,5和2中不创建“ - ”以将列中的“c”核苷酸对齐。我在MAFFT看到有各种各样的-op标志来改变这个重量,任何建议是正确的或者是修补的起始值?就MUSCLE而言,我没有看到任何改变这种重量的选择? –