2013-07-28 42 views
0

我有一套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/,但它具有完全相同的內容]

+0

你能鏈接到BioStarts的問題嗎? – PhiS

回答

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打電話給肌肉,然後把結果解析回一個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()) 
+0

嗨大衛,我已經嘗試過你的子進程代碼,但似乎無法在我的電腦上工作。儘管我可以使用bash來執行命令,例如'muscle -in muscle_align_vap492zjqgxk915.fasta -out muscle_align_vap492zjqgxk915.out'。它不能用Python中的'subprocess'工作,下面的代碼使用'aligner = subprocess.Popen(muscle_command,stdout = subprocess.PIPE,stderr = subprocess.PIPE,shell = True) stdout,stderr = aligner.communicate() '結果是stdout是NULL,stderr是'-in:1:-in:muscle:not found' – sikisis

+0

@Davide Cain那麼我該怎麼做才能完成,因爲我不需要在BioPython中使用它。 – sikisis