多序列比对 - 附加到比对

时间:2013-07-28 17:52:53

标签: python bioinformatics biopython sequence-alignment

我有一组520个流感序列,我已经完成了多个序列比对,并计算了成对单位矩阵。如果我想添加另一个序列,我必须重新对齐所有内容,并重新计算整个PWI矩阵。是否有任何程序可以用来“追加”其他序列到对齐,并且只计算PWI w.r.t.其他所有序列?

一个简单的例子如下。我有一个2x2对齐,有以下分数。

     SeqA SeqB
SeqA 1.00 0.98
SeqB 0.98 1.00

如果没有重新运行完全对齐,但只对所有其他序列运行“SeqC”,我想得到以下矩阵:

     SeqA SeqB SeqC
SeqA 1.00 0.98 0.99
SeqB 0.98 1.00 0.97
SeqC 0.99 0.97 1.00

我正在使用BioPython软件包,Python是我的首选语言,但如果需要,我也可以使用Java。

[我在此不承认我在BioStars上发帖,以防万一这里的专家不在BioStars上。 BioStars帖子是:http://www.biostars.org/p/77607/,但内容完全相同。]

1 个答案:

答案 0 :(得分:1)

如果您重新运行校准所需的主要问题(重新计算PWI矩阵应该在计算上便宜),那么MUSCLE有能力做你正在寻找的东西,一个程序通常称为"profile-profile alignment"

Profile-profile路线

传递-profile标记时,对齐将“相互重新对齐,保持输入列完整,并在需要时插入间隙列。”:

  

如果您有两个相关序列的现有比对,您可以使用MUSCLE的-profile选项来对齐这两个序列。典型用法是:

   muscle -profile -in1 one.afa -in2 two.afa -out both.afa

在Biopython中实施

Biopythonwrapper around MUSCLE,但我发现使用subprocess调用MUSCLE更容易,然后将结果解析回MultipleSeqAlignment

# Do profile-profile alignment (one sequence to many aligned)
seq_fn = "influenza_seq.fasta"
aligned_fn = "520_influenza_seqs.afasta"
cmd = ['muscle', '-clwstrict', '-profile', '-in1', seq_fn, '-in2', aligned_fn]
aligner = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = aligner.communicate()

# Get resulting alignment (MultipleSeqAlignment)
alignment =  AlignIO.read(StringIO(stdout), "clustal",
                          alphabet=Alphabet.ProteinAlphabet())