Something went wrong on our end
-
Tobias Schmidt authored
This reverts commit d1818e3b.
Tobias Schmidt authoredThis reverts commit d1818e3b.
clustalw.py 1.74 KiB
from ost.bindings import utils
from ost import settings, io, seq, LogError
import os
import subprocess
def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False):
clustalw_path=settings.Locate(('clustalw', 'clustalw2'),
explicit_file_name=clustalw)
if seq2!=None:
if isinstance(seq1, seq.SequenceHandle) and isinstance(seq2, seq.SequenceHandle):
seq_list=seq.CreateSequenceList()
seq_list.AddSequence(seq1)
seq_list.AddSequence(seq2)
elif isinstance(seq1, str) and isinstance(seq2, str):
seqh1=CreateSequence("seq1", seq1)
seqh2=CreateSequence("seq2", seq2)
seq_list=seq.CreateSequenceList()
seq_list.AddSequence(seqh1)
seq_list.AddSequence(seqh2)
else:
LogError("WARNING: Specify at least two Sequences")
return
elif isinstance(seq1, seq.SequenceList):
seq_list=seq1
else:
LogError("WARNING: Specify either two SequenceHandles or one SequenceList")
return
temp_dir=utils.TempDirWithFiles((seq_list,))
out=os.path.join(temp_dir.dirname, 'out.fasta')
command='%s -infile="%s" -output=fasta -outfile="%s"' % (clustalw_path,
temp_dir.files[0],
out)
ps=subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
ps.stdout.readlines()
aln=io.LoadAlignment(out)
for sequence in seq_list:
for seq_num,aln_seq in enumerate(aln.sequences):
if aln_seq.GetName()==sequence.GetName():
break
aln.SetSequenceOffset(seq_num,sequence.offset)
if sequence.HasAttachedView():
aln.AttachView(seq_num,sequence.GetAttachedView().Copy())
if not keep_files:
temp_dir.Cleanup()
return aln