Skip to content
Snippets Groups Projects
Commit 4ddda29c authored by Pascal Benkert's avatar Pascal Benkert Committed by Marco Biasini
Browse files

clustalw with external options, including unittest; renumbering accepts seq...

clustalw with external options, including unittest; renumbering accepts seq and aln as input;unit tests
parent 688febba
No related branches found
No related tags found
No related merge requests found
Showing
with 400 additions and 32 deletions
...@@ -3,7 +3,7 @@ from ost import settings, io, seq, LogError ...@@ -3,7 +3,7 @@ from ost import settings, io, seq, LogError
import os import os
import subprocess import subprocess
def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False): def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, clustalw_option_string=False):
clustalw_path=settings.Locate(('clustalw', 'clustalw2'), clustalw_path=settings.Locate(('clustalw', 'clustalw2'),
explicit_file_name=clustalw) explicit_file_name=clustalw)
...@@ -32,6 +32,10 @@ def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False): ...@@ -32,6 +32,10 @@ def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False):
command='%s -infile="%s" -output=fasta -outfile="%s"' % (clustalw_path, command='%s -infile="%s" -output=fasta -outfile="%s"' % (clustalw_path,
temp_dir.files[0], temp_dir.files[0],
out) out)
if clustalw_option_string!=False:
command=command+" "+clustalw_option_string #see useful flags: http://toolkit.tuebingen.mpg.de/clustalw/help_params
ps=subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) ps=subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
ps.stdout.readlines() ps.stdout.readlines()
aln=io.LoadAlignment(out) aln=io.LoadAlignment(out)
......
...@@ -14,6 +14,10 @@ class TestClustalWBindings(unittest.TestCase): ...@@ -14,6 +14,10 @@ class TestClustalWBindings(unittest.TestCase):
self.multseq = io.LoadSequenceList("testfiles/multiple.fasta") self.multseq = io.LoadSequenceList("testfiles/multiple.fasta")
self.pw_alignment = io.LoadAlignment("testfiles/pairwise_aln.fasta") self.pw_alignment = io.LoadAlignment("testfiles/pairwise_aln.fasta")
self.mult_alignment = io.LoadAlignment("testfiles/multiple_aln.fasta") self.mult_alignment = io.LoadAlignment("testfiles/multiple_aln.fasta")
self.seq1 = io.LoadSequence("testfiles/seq1.fasta")
self.seq2 = io.LoadSequence("testfiles/seq2.fasta")
self.seq1_seq2_alignment = io.LoadAlignment("testfiles/seq1_seq2_aln.fasta")
self.seq1_seq2_alignment_options_changed = io.LoadAlignment("testfiles/seq1_seq2_aln_options_changed.fasta")
def testPairwiseClustalW(self): def testPairwiseClustalW(self):
aln=clustalw.ClustalW(self.targetseq, self.templseq) aln=clustalw.ClustalW(self.targetseq, self.templseq)
...@@ -30,6 +34,15 @@ class TestClustalWBindings(unittest.TestCase): ...@@ -30,6 +34,15 @@ class TestClustalWBindings(unittest.TestCase):
assert self.mult_alignment.ToString(80) == aln.ToString(80), \ assert self.mult_alignment.ToString(80) == aln.ToString(80), \
"Multiple alignment differs from precomputed one" "Multiple alignment differs from precomputed one"
def testPairwiseClustalWChangedOptions(self):
# five residues removed two positions before the end of seq2
aln=clustalw.ClustalW(self.seq1,self.seq2)
assert self.seq1_seq2_alignment.ToString(80) == aln.ToString(80), \
"Pairwise alignment with default gap penalties differs from precomputed one"
aln=clustalw.ClustalW(self.seq1,self.seq2,clustalw_option_string="-GAPOPEN=2 -GAPEXT=0")
assert self.seq1_seq2_alignment_options_changed.ToString(80) == aln.ToString(80), \
"Pairwise alignment with modified gap penalties differs from precomputed one"
if __name__ == "__main__": if __name__ == "__main__":
# test if clustalw package is available on system, otherwise ignore tests # test if clustalw package is available on system, otherwise ignore tests
......
>target
MAETLIKVDLNQSPYDNPQVHNRWHPDIPMAVWVEPGAEFKLETYDWTGGAIKNDDSAEDVRDVDLSTVHFLSGPVGVKGAEPGDLLVVDLLDIGARDDSLWGFNGFFSKQNGGGFLDEHFPLAQKSIWDFHGMFTKSRHIPGVNFAGLIHPGLIGCLPDPKMLASWNERETGLIATDPDRIPGLANPPNATTAHMGQMQGEARDKAAAEGARTVPPREHGGNCDIKDLSRGSRVFFPVYVDGAGLSVGDLHFSQGDGEITFCGAIEMAGWVHMKVSLIKGGMAKYGIKNPIFKPSPMTPNYKDYLIFEGISVDEKGKQHYLDVTVAYRQACLNAIEYLKKFGYSGAQAYSLLGTAPVQGHISGVVDVPNACATLWLPTEIFDFDINPTAEGPQKIITGGVDLPIAQDK
\ No newline at end of file
>target
MAETLIKVDLNQSPYDNPQVHNRWHPDIPMAVWVEPGAEFKLETYDWTGGAIKNDDSAEDVRDVDLSTVHFLSGPVGVKGAEPGDLLVVDLLDIGARDDSLWGFNGFFSKQNGGGFLDEHFPLAQKSIWDFHGMFTKSRHIPGVNFAGLIHPGLIGCLPDPKMLASWNERETGLIATDPDRIPGLANPPNATTAHMGQMQGEARDKAAAEGARTVPPREHGGNCDIKDLSRGSRVFFPVYVDGAGLSVGDLHFSQGDGEITFCGAIEMAGWVHMKVSLIKGGMAKYGIKNPIFKPSPMTPNYKDYLIFEGISVDEKGKQHYLDVTVAYRQACLNAIEYLKKFGYSGAQAYSLLGTAPVQGHISGVVDVPNACATLWLPTEIFDFDINPTAEGPQKIITGGVDLPIAQDK
>model
---------------------------------VEPGAEFKLETYDWTGGAIKNDDSAEDVRDVDLSTVHFLSGPVGVKGAEPGDLLVVDLLDIGARDDSLWGFNGFFSKQNGGGFLDEHFPLAQKSIWDFHGMFTKSRHIPGVNFAGLIHPGLIGCLPDPKMLASWNERETGLIATDPDRIPGLANPPNATTAHMGQMQGEARDKAAAEGARTVPPREHGGNCDIKDLSRGSRVFFPVYVDGAGLSVGDLHFSQGDGEITFCGAIEMAGWVIK---------------------------------------------------------------------------------------------------------------------------------------
\ No newline at end of file
>target
MAETLIKVDLNQSPYDNPQVHNRWHPDIPMAVWVEPGAEFKLETYDWTGGAIKNDDSAEDVRDVDLSTVHFLSGPVGVKGAEPGDLLVVDLLDIGARDDSLWGFNGFFSKQNGGGFLDEHFPLAQKSIWDFHGMFTKSRHIPGVNFAGLIHPGLIGCLPDPKMLASWNERETGLIATDPDRIPGLANPPNATTAHMGQMQGEARDKAAAEGARTVPPREHGGNCDIKDLSRGSRVFFPVYVDGAGLSVGDLHFSQGDGEITFCGAIEMAGWVHMKVSLIKGGMAKYGIKNPIFKPSPMTPNYKDYLIFEGISVDEKGKQHYLDVTVAYRQACLNAIEYLKKFGYSGAQAYSLLGTAPVQGHISGVVDVPNACATLWLPTEIFDFDINPTAEGPQKIITGGVDLPIAQDK
>model
---------------------------------VEPGAEFKLETYDWTGGAIKNDDSAEDVRDVDLSTVHFLSGPVGVKGAEPGDLLVVDLLDIGARDDSLWGFNGFFSKQNGGGFLDEHFPLAQKSIWDFHGMFTKSRHIPGVNFAGLIHPGLIGCLPDPKMLASWNERETGLIATDPDRIPGLANPPNATTAHMGQMQGEARDKAAAEGARTVPPREHGGNCDIKDLSRGSRVFFPVYVDGAGLSVGDLHFSQGDGEITFCGAIEMAGWV------IK---------------------------------------------------------------------------------------------------------------------------------
\ No newline at end of file
>model
VEPGAEFKLETYDWTGGAIKNDDSAEDVRDVDLSTVHFLSGPVGVKGAEPGDLLVVDLLDIGARDDSLWGFNGFFSKQNGGGFLDEHFPLAQKSIWDFHGMFTKSRHIPGVNFAGLIHPGLIGCLPDPKMLASWNERETGLIATDPDRIPGLANPPNATTAHMGQMQGEARDKAAAEGARTVPPREHGGNCDIKDLSRGSRVFFPVYVDGAGLSVGDLHFSQGDGEITFCGAIEMAGWVIK
\ No newline at end of file
from ost import io, seq, mol, conop from ost import io, seq, mol, conop
import ost from ost import *
def Renumber(seq_handle): def Renumber(seq_handle, sequence_number_with_attached_view=1):
""" """
Function to renumber an entity according to an alignment between the model sequence Function to renumber an entity according to an alignment between the model sequence
and the full-length target sequence. The aligned model sequence with an attached and the full-length target sequence. The aligned model sequence or the alignment itself
view needs to be provided. Upon succcess, the renumbered entity is returned. with an attached view needs to be provided. Upon succcess, the renumbered entity is returned.
.. code-block:: python .. code-block:: python
...@@ -16,35 +16,69 @@ def Renumber(seq_handle): ...@@ -16,35 +16,69 @@ def Renumber(seq_handle):
pdb_seq=seq.SequenceFromChain("model", ent.chains[0]) pdb_seq=seq.SequenceFromChain("model", ent.chains[0])
aln=ClustalW(s,pdb_seq) aln=ClustalW(s,pdb_seq)
aln.AttachView(1,ent.chains[0].Select("")) aln.AttachView(1,ent.chains[0].Select(""))
e=Renumber(aln.GetSequence(1)) e=Renumber(aln.GetSequence(sequence_number_with_attached_view))
io.SavePDB(e, "renum.pdb") io.SavePDB(e, "renum.pdb")
""" """
if seq_handle.HasAttachedView()==False: if isinstance(seq_handle, seq.SequenceHandle):
raise RuntimeError, "Sequence Handle has no attached view" if seq_handle.HasAttachedView()==False:
changed_residue_count=0 raise RuntimeError, "Sequence Handle has no attached view"
renumberingFlag = False changed_residue_count=0
ent_n=mol.CreateEntity() renumberingFlag = False
ed=ent_n.RequestXCSEditor() ent_n=mol.CreateEntity()
c=ed.InsertChain(" ") ed=ent_n.RequestXCSEditor()
for pos in range(len(seq_handle)): c=ed.InsertChain(" ")
if seq_handle[pos]!='-': for pos in range(len(seq_handle)):
r=seq_handle.GetResidue(pos) if seq_handle[pos]!='-':
if r.IsValid(): r=seq_handle.GetResidue(pos)
#print seq_handle[pos],r.number.num,pos+1 if r.IsValid():
if r.number.num!=pos+1: #print seq_handle[pos],r.number.num,pos+1
changed_residue_count+=1 if r.number.num!=pos+1:
renumberingFlag = True changed_residue_count+=1
r_n=ed.AppendResidue(c,r.name, mol.ResNum(pos+1)) renumberingFlag = True
for atom in r.atoms: r_n=ed.AppendResidue(c,r.name, mol.ResNum(pos+1))
ed.InsertAtom(r_n,atom.name,atom.pos,atom.prop) for atom in r.atoms:
else: ed.InsertAtom(r_n,atom.name,atom.pos,atom.prop)
err='Error: renumbering failed at position %s' %pos else:
raise RuntimeError, err err='Error: renumbering failed at position %s' %pos
if renumberingFlag == True: raise RuntimeError, err
err = 'Warning: %s residues have been renumbered!' %changed_residue_count if renumberingFlag == True:
ost.LogMessage(err) err = 'Warning: %s residues have been renumbered!' %changed_residue_count
conop.ConnectAll(ent_n) LogInfo(err)
return ent_n conop.ConnectAll(ent_n)
return ent_n
elif isinstance(seq_handle, seq.AlignmentHandle):
if seq_handle.GetSequence(sequence_number_with_attached_view).HasAttachedView()==False:
raise RuntimeError, "Sequence Handle has no attached view"
dir(seq_handle)
counter=0
changed_residue_count=0
renumberingFlag = False
ent_n=mol.CreateEntity()
ed=ent_n.RequestXCSEditor()
c=ed.InsertChain(seq_handle.GetSequence(sequence_number_with_attached_view).GetAttachedView().chains[0].name)
for col in seq_handle:
if col[0]!='-' and col[1]!='-':
if col[0]==col[1]:
rnum=seq_handle.GetSequence(sequence_number_with_attached_view).GetResidueIndex(counter)
r=seq_handle.GetSequence(sequence_number_with_attached_view).GetResidue(counter)
if r.IsValid():
if r.number.num!=counter+1:
changed_residue_count+=1
renumberingFlag = True
r_n=ed.AppendResidue(c,r.name, mol.ResNum(counter+1))
for atom in r.atoms:
ed.InsertAtom(r_n,atom.name,atom.pos,atom.prop)
else:
raise RuntimeError("invalide residue at postion %s (renumbering failed)" %(counter))
else:
raise RuntimeError("residue mismatch at position %d (%s vs %s) (renumbering failed)"%(counter, col[0],col[1]))
counter+=1
if renumberingFlag == True:
err = 'Warning: %s residues have been renumbered!' %changed_residue_count
LogInfo(err)
conop.ConnectAll(ent_n)
return ent_n
...@@ -2,6 +2,7 @@ set(OST_SEQ_ALG_UNIT_TESTS ...@@ -2,6 +2,7 @@ set(OST_SEQ_ALG_UNIT_TESTS
test_merge_pairwise_alignments.cc test_merge_pairwise_alignments.cc
test_sequence_identity.cc test_sequence_identity.cc
tests.cc tests.cc
test_renumber.py
) )
ost_unittest(seq_alg "${OST_SEQ_ALG_UNIT_TESTS}") ost_unittest(seq_alg "${OST_SEQ_ALG_UNIT_TESTS}")
......
import unittest
from ost import *
from ost import settings
from ost import seq
from ost.bindings.clustalw import *
from ost.seq.alg import renumber
class TestRenumber(unittest.TestCase):
def setUp(self):
self.target_seq = io.LoadSequence("testfiles/peptide.fasta")
self.peptide_original = io.LoadEntity("testfiles/peptide_original.pdb")
self.peptide_plus_5 = io.LoadEntity("testfiles/peptide_plus_5.pdb")
self.peptide_random = io.LoadEntity("testfiles/peptide_random.pdb")
self.peptide_del_1_2 = io.LoadEntity("testfiles/peptide_del_1_2.pdb")
self.peptide_del_4 = io.LoadEntity("testfiles/peptide_del_4.pdb")
self.peptide_mutation_3 = io.LoadEntity("testfiles/peptide_mutation_3.pdb")
def testPeptidePlusFive(self):
"""
All residue numbers shifted by 5.
Check whether internal atom order changes while renumbering
(a new entity is generated in the edit_mode)
TODO: add more basic tests: are all properties preserved?
"""
model_seq=seq.SequenceFromChain(" ", self.peptide_plus_5.chains[0])
model_seq.name="model"
aln=ClustalW(self.target_seq,model_seq)
aln.AttachView(1,self.peptide_plus_5.Select(""))
ent_n=renumber.Renumber(aln)
for r_counter in range(len(self.peptide_original.residues)):
assert self.peptide_original.residues[r_counter].qualified_name == ent_n.residues[r_counter].qualified_name, \
"Renumbering failed on residue level: restoring from ResNum+5"
for atom_nr in range(len(self.peptide_original.residues[r_counter].atoms)):
assert self.peptide_original.residues[r_counter].atoms[atom_nr].name==ent_n.residues[r_counter].atoms[atom_nr].name, \
"Renumbering failed on atom level: restoring from ResNum+5"
def testPeptideRandom(self):
"""
Change residue names in random order
"""
model_seq=seq.SequenceFromChain(" ", self.peptide_random.chains[0])
model_seq.name="model"
aln=ClustalW(self.target_seq,model_seq)
aln.AttachView(1,self.peptide_random.Select(""))
ent_n=renumber.Renumber(aln)
for r_counter in range(len(self.peptide_original.residues)):
assert self.peptide_original.residues[r_counter].qualified_name == ent_n.residues[r_counter].qualified_name, \
"Renumbering failed on residue level: restoring from random residue numbers"
for atom_nr in range(len(self.peptide_original.residues[r_counter].atoms)):
assert self.peptide_original.residues[r_counter].atoms[atom_nr].name==ent_n.residues[r_counter].atoms[atom_nr].name, \
"Renumbering failed on atom level: restoring from random residue numbers"
def testPeptideDel_1_2(self):
"""
First two residues were removed
"""
model_seq=seq.SequenceFromChain(" ", self.peptide_del_1_2.chains[0])
model_seq.name="model"
aln=ClustalW(self.target_seq,model_seq)
aln.AttachView(1,self.peptide_del_1_2.Select(""))
ent_n=renumber.Renumber(aln)
for r_counter in range(len(self.peptide_original.residues)):
if r_counter==0 or r_counter==1:
continue
assert self.peptide_original.residues[r_counter].qualified_name == ent_n.residues[r_counter-2].qualified_name, \
"Renumbering failed on residue level: restoring from random residue numbers"
for atom_nr in range(len(self.peptide_original.residues[r_counter].atoms)):
assert self.peptide_original.residues[r_counter].atoms[atom_nr].name==ent_n.residues[r_counter-2].atoms[atom_nr].name, \
"Renumbering failed on atom level: restoring from random residue numbers"
def testPeptideDel_4(self):
"""
Residues in the middle (position 4) was removed
"""
model_seq=seq.SequenceFromChain(" ", self.peptide_del_4.chains[0])
model_seq.name="model"
aln=ClustalW(self.target_seq,model_seq)
aln.AttachView(1,self.peptide_del_4.Select(""))
ent_n=renumber.Renumber(aln)
flag=0
for r_counter in range(len(self.peptide_original.residues)):
if r_counter==3:
flag=1
continue
assert self.peptide_original.residues[r_counter].qualified_name == ent_n.residues[r_counter-flag].qualified_name, \
"Renumbering failed on residue level: restoring from random residue numbers"
for atom_nr in range(len(self.peptide_original.residues[r_counter].atoms)):
assert self.peptide_original.residues[r_counter].atoms[atom_nr].name==ent_n.residues[r_counter-flag].atoms[atom_nr].name, \
"Renumbering failed on atom level: restoring from random residue numbers"
def testPeptideMutation_3(self):
"""
Mutation to GLY at postion 3
"""
model_seq=seq.SequenceFromChain(" ", self.peptide_mutation_3.chains[0])
model_seq.name="model"
aln=ClustalW(self.target_seq,model_seq)
aln.AttachView(1,self.peptide_mutation_3.Select(""))
self.assertRaises(RuntimeError, renumber.Renumber, aln)
if __name__ == "__main__":
# test renumbering
try:
unittest.main()
except Exception, e:
print e
\ No newline at end of file
>peptide
MPTNA
\ No newline at end of file
ATOM 16 N THR 1 -26.565 -9.309 10.007 1.00 0.00 N
ATOM 17 CA THR 1 -26.102 -8.194 9.247 1.00 0.00 C
ATOM 18 C THR 1 -25.296 -7.372 10.186 1.00 0.00 C
ATOM 19 O THR 1 -24.295 -6.768 9.810 1.00 0.00 O
ATOM 20 CB THR 1 -27.274 -7.369 8.683 1.00 0.00 C
ATOM 21 OG1 THR 1 -28.080 -6.880 9.762 1.00 0.00 O
ATOM 22 CG2 THR 1 -28.139 -8.227 7.772 1.00 0.00 C
ATOM 23 N ASN 2 -25.736 -7.349 11.452 1.00 0.00 N
ATOM 24 CA ASN 2 -25.104 -6.609 12.495 1.00 0.00 C
ATOM 25 C ASN 2 -23.742 -7.171 12.684 1.00 0.00 C
ATOM 26 O ASN 2 -22.806 -6.454 13.030 1.00 0.00 O
ATOM 27 CB ASN 2 -25.901 -6.728 13.795 1.00 0.00 C
ATOM 28 CG ASN 2 -27.189 -5.929 13.764 1.00 0.00 C
ATOM 29 OD1 ASN 2 -27.340 -5.007 12.963 1.00 0.00 O
ATOM 30 ND2 ASN 2 -28.124 -6.282 14.639 1.00 0.00 N
ATOM 31 N ALA 3 -16.677 -4.828 10.806 1.00 0.00 N
ATOM 32 CA ALA 3 -15.984 -3.708 10.241 1.00 0.00 C
ATOM 33 C ALA 3 -15.498 -2.863 11.363 1.00 0.00 C
ATOM 34 O ALA 3 -14.369 -2.378 11.344 1.00 0.00 O
ATOM 35 CB ALA 3 -16.917 -2.901 9.352 1.00 0.00 C
\ No newline at end of file
ATOM 1 N MET 1 -29.037 -8.783 14.347 1.00 0.00 N
ATOM 2 CA MET 1 -28.985 -9.502 13.056 1.00 0.00 C
ATOM 3 C MET 1 -27.597 -9.852 12.665 1.00 0.00 C
ATOM 4 O MET 1 -26.614 -9.275 13.129 1.00 0.00 O
ATOM 5 CB MET 1 -29.575 -8.640 11.938 1.00 0.00 C
ATOM 6 CG MET 1 -31.084 -8.470 12.016 1.00 0.00 C
ATOM 7 SD MET 1 -31.752 -7.534 10.628 1.00 0.00 S
ATOM 8 CE MET 1 -33.497 -7.530 11.030 1.00 0.00 C
ATOM 9 N PRO 2 -27.533 -10.838 11.828 1.00 0.00 N
ATOM 10 CA PRO 2 -26.273 -11.293 11.337 1.00 0.00 C
ATOM 11 C PRO 2 -25.709 -10.233 10.478 1.00 0.00 C
ATOM 12 O PRO 2 -24.518 -10.265 10.186 1.00 0.00 O
ATOM 13 CB PRO 2 -26.616 -12.565 10.559 1.00 0.00 C
ATOM 14 CG PRO 2 -28.043 -12.386 10.161 1.00 0.00 C
ATOM 15 CD PRO 2 -28.699 -11.637 11.286 1.00 0.00 C
ATOM 16 N THR 3 -26.565 -9.309 10.007 1.00 0.00 N
ATOM 17 CA THR 3 -26.102 -8.194 9.247 1.00 0.00 C
ATOM 18 C THR 3 -25.296 -7.372 10.186 1.00 0.00 C
ATOM 19 O THR 3 -24.295 -6.768 9.810 1.00 0.00 O
ATOM 20 CB THR 3 -27.274 -7.369 8.683 1.00 0.00 C
ATOM 21 OG1 THR 3 -28.080 -6.880 9.762 1.00 0.00 O
ATOM 22 CG2 THR 3 -28.139 -8.227 7.772 1.00 0.00 C
ATOM 31 N ALA 4 -16.677 -4.828 10.806 1.00 0.00 N
ATOM 32 CA ALA 4 -15.984 -3.708 10.241 1.00 0.00 C
ATOM 33 C ALA 4 -15.498 -2.863 11.363 1.00 0.00 C
ATOM 34 O ALA 4 -14.369 -2.378 11.344 1.00 0.00 O
ATOM 35 CB ALA 4 -16.917 -2.901 9.352 1.00 0.00 C
\ No newline at end of file
ATOM 1 N MET 1 -29.037 -8.783 14.347 1.00 0.00 N
ATOM 2 CA MET 1 -28.985 -9.502 13.056 1.00 0.00 C
ATOM 3 C MET 1 -27.597 -9.852 12.665 1.00 0.00 C
ATOM 4 O MET 1 -26.614 -9.275 13.129 1.00 0.00 O
ATOM 5 CB MET 1 -29.575 -8.640 11.938 1.00 0.00 C
ATOM 6 CG MET 1 -31.084 -8.470 12.016 1.00 0.00 C
ATOM 7 SD MET 1 -31.752 -7.534 10.628 1.00 0.00 S
ATOM 8 CE MET 1 -33.497 -7.530 11.030 1.00 0.00 C
ATOM 9 N PRO 2 -27.533 -10.838 11.828 1.00 0.00 N
ATOM 10 CA PRO 2 -26.273 -11.293 11.337 1.00 0.00 C
ATOM 11 C PRO 2 -25.709 -10.233 10.478 1.00 0.00 C
ATOM 12 O PRO 2 -24.518 -10.265 10.186 1.00 0.00 O
ATOM 13 CB PRO 2 -26.616 -12.565 10.559 1.00 0.00 C
ATOM 14 CG PRO 2 -28.043 -12.386 10.161 1.00 0.00 C
ATOM 15 CD PRO 2 -28.699 -11.637 11.286 1.00 0.00 C
ATOM 16 N GLY 3 -26.565 -9.309 10.007 1.00 0.00 N
ATOM 17 CA GLY 3 -26.102 -8.194 9.247 1.00 0.00 C
ATOM 18 C GLY 3 -25.296 -7.372 10.186 1.00 0.00 C
ATOM 19 O GLY 3 -24.295 -6.768 9.810 1.00 0.00 O
ATOM 23 N ASN 4 -25.736 -7.349 11.452 1.00 0.00 N
ATOM 24 CA ASN 4 -25.104 -6.609 12.495 1.00 0.00 C
ATOM 25 C ASN 4 -23.742 -7.171 12.684 1.00 0.00 C
ATOM 26 O ASN 4 -22.806 -6.454 13.030 1.00 0.00 O
ATOM 27 CB ASN 4 -25.901 -6.728 13.795 1.00 0.00 C
ATOM 28 CG ASN 4 -27.189 -5.929 13.764 1.00 0.00 C
ATOM 29 OD1 ASN 4 -27.340 -5.007 12.963 1.00 0.00 O
ATOM 30 ND2 ASN 4 -28.124 -6.282 14.639 1.00 0.00 N
ATOM 31 N ALA 5 -16.677 -4.828 10.806 1.00 0.00 N
ATOM 32 CA ALA 5 -15.984 -3.708 10.241 1.00 0.00 C
ATOM 33 C ALA 5 -15.498 -2.863 11.363 1.00 0.00 C
ATOM 34 O ALA 5 -14.369 -2.378 11.344 1.00 0.00 O
ATOM 35 CB ALA 5 -16.917 -2.901 9.352 1.00 0.00 C
\ No newline at end of file
ATOM 1 N MET 1 -29.037 -8.783 14.347 1.00 0.00 N
ATOM 2 CA MET 1 -28.985 -9.502 13.056 1.00 0.00 C
ATOM 3 C MET 1 -27.597 -9.852 12.665 1.00 0.00 C
ATOM 4 O MET 1 -26.614 -9.275 13.129 1.00 0.00 O
ATOM 5 CB MET 1 -29.575 -8.640 11.938 1.00 0.00 C
ATOM 6 CG MET 1 -31.084 -8.470 12.016 1.00 0.00 C
ATOM 7 SD MET 1 -31.752 -7.534 10.628 1.00 0.00 S
ATOM 8 CE MET 1 -33.497 -7.530 11.030 1.00 0.00 C
ATOM 9 N PRO 2 -27.533 -10.838 11.828 1.00 0.00 N
ATOM 10 CA PRO 2 -26.273 -11.293 11.337 1.00 0.00 C
ATOM 11 C PRO 2 -25.709 -10.233 10.478 1.00 0.00 C
ATOM 12 O PRO 2 -24.518 -10.265 10.186 1.00 0.00 O
ATOM 13 CB PRO 2 -26.616 -12.565 10.559 1.00 0.00 C
ATOM 14 CG PRO 2 -28.043 -12.386 10.161 1.00 0.00 C
ATOM 15 CD PRO 2 -28.699 -11.637 11.286 1.00 0.00 C
ATOM 16 N THR 3 -26.565 -9.309 10.007 1.00 0.00 N
ATOM 17 CA THR 3 -26.102 -8.194 9.247 1.00 0.00 C
ATOM 18 C THR 3 -25.296 -7.372 10.186 1.00 0.00 C
ATOM 19 O THR 3 -24.295 -6.768 9.810 1.00 0.00 O
ATOM 20 CB THR 3 -27.274 -7.369 8.683 1.00 0.00 C
ATOM 21 OG1 THR 3 -28.080 -6.880 9.762 1.00 0.00 O
ATOM 22 CG2 THR 3 -28.139 -8.227 7.772 1.00 0.00 C
ATOM 23 N ASN 4 -25.736 -7.349 11.452 1.00 0.00 N
ATOM 24 CA ASN 4 -25.104 -6.609 12.495 1.00 0.00 C
ATOM 25 C ASN 4 -23.742 -7.171 12.684 1.00 0.00 C
ATOM 26 O ASN 4 -22.806 -6.454 13.030 1.00 0.00 O
ATOM 27 CB ASN 4 -25.901 -6.728 13.795 1.00 0.00 C
ATOM 28 CG ASN 4 -27.189 -5.929 13.764 1.00 0.00 C
ATOM 29 OD1 ASN 4 -27.340 -5.007 12.963 1.00 0.00 O
ATOM 30 ND2 ASN 4 -28.124 -6.282 14.639 1.00 0.00 N
ATOM 31 N ALA 5 -16.677 -4.828 10.806 1.00 0.00 N
ATOM 32 CA ALA 5 -15.984 -3.708 10.241 1.00 0.00 C
ATOM 33 C ALA 5 -15.498 -2.863 11.363 1.00 0.00 C
ATOM 34 O ALA 5 -14.369 -2.378 11.344 1.00 0.00 O
ATOM 35 CB ALA 5 -16.917 -2.901 9.352 1.00 0.00 C
\ No newline at end of file
ATOM 1 N MET 6 -29.037 -8.783 14.347 1.00 0.00 N
ATOM 2 CA MET 6 -28.985 -9.502 13.056 1.00 0.00 C
ATOM 3 C MET 6 -27.597 -9.852 12.665 1.00 0.00 C
ATOM 4 O MET 6 -26.614 -9.275 13.129 1.00 0.00 O
ATOM 5 CB MET 6 -29.575 -8.640 11.938 1.00 0.00 C
ATOM 6 CG MET 6 -31.084 -8.470 12.016 1.00 0.00 C
ATOM 7 SD MET 6 -31.752 -7.534 10.628 1.00 0.00 S
ATOM 8 CE MET 6 -33.497 -7.530 11.030 1.00 0.00 C
ATOM 9 N PRO 7 -27.533 -10.838 11.828 1.00 0.00 N
ATOM 10 CA PRO 7 -26.273 -11.293 11.337 1.00 0.00 C
ATOM 11 C PRO 7 -25.709 -10.233 10.478 1.00 0.00 C
ATOM 12 O PRO 7 -24.518 -10.265 10.186 1.00 0.00 O
ATOM 13 CB PRO 7 -26.616 -12.565 10.559 1.00 0.00 C
ATOM 14 CG PRO 7 -28.043 -12.386 10.161 1.00 0.00 C
ATOM 15 CD PRO 7 -28.699 -11.637 11.286 1.00 0.00 C
ATOM 16 N THR 8 -26.565 -9.309 10.007 1.00 0.00 N
ATOM 17 CA THR 8 -26.102 -8.194 9.247 1.00 0.00 C
ATOM 18 C THR 8 -25.296 -7.372 10.186 1.00 0.00 C
ATOM 19 O THR 8 -24.295 -6.768 9.810 1.00 0.00 O
ATOM 20 CB THR 8 -27.274 -7.369 8.683 1.00 0.00 C
ATOM 21 OG1 THR 8 -28.080 -6.880 9.762 1.00 0.00 O
ATOM 22 CG2 THR 8 -28.139 -8.227 7.772 1.00 0.00 C
ATOM 23 N ASN 9 -25.736 -7.349 11.452 1.00 0.00 N
ATOM 24 CA ASN 9 -25.104 -6.609 12.495 1.00 0.00 C
ATOM 25 C ASN 9 -23.742 -7.171 12.684 1.00 0.00 C
ATOM 26 O ASN 9 -22.806 -6.454 13.030 1.00 0.00 O
ATOM 27 CB ASN 9 -25.901 -6.728 13.795 1.00 0.00 C
ATOM 28 CG ASN 9 -27.189 -5.929 13.764 1.00 0.00 C
ATOM 29 OD1 ASN 9 -27.340 -5.007 12.963 1.00 0.00 O
ATOM 30 ND2 ASN 9 -28.124 -6.282 14.639 1.00 0.00 N
ATOM 31 N ALA 10 -16.677 -4.828 10.806 1.00 0.00 N
ATOM 32 CA ALA 10 -15.984 -3.708 10.241 1.00 0.00 C
ATOM 33 C ALA 10 -15.498 -2.863 11.363 1.00 0.00 C
ATOM 34 O ALA 10 -14.369 -2.378 11.344 1.00 0.00 O
ATOM 35 CB ALA 10 -16.917 -2.901 9.352 1.00 0.00 C
\ No newline at end of file
ATOM 1 N MET 6 -29.037 -8.783 14.347 1.00 0.00 N
ATOM 2 CA MET 6 -28.985 -9.502 13.056 1.00 0.00 C
ATOM 3 C MET 6 -27.597 -9.852 12.665 1.00 0.00 C
ATOM 4 O MET 6 -26.614 -9.275 13.129 1.00 0.00 O
ATOM 5 CB MET 6 -29.575 -8.640 11.938 1.00 0.00 C
ATOM 6 CG MET 6 -31.084 -8.470 12.016 1.00 0.00 C
ATOM 7 SD MET 6 -31.752 -7.534 10.628 1.00 0.00 S
ATOM 8 CE MET 6 -33.497 -7.530 11.030 1.00 0.00 C
ATOM 9 N PRO 1 -27.533 -10.838 11.828 1.00 0.00 N
ATOM 10 CA PRO 1 -26.273 -11.293 11.337 1.00 0.00 C
ATOM 11 C PRO 1 -25.709 -10.233 10.478 1.00 0.00 C
ATOM 12 O PRO 1 -24.518 -10.265 10.186 1.00 0.00 O
ATOM 13 CB PRO 1 -26.616 -12.565 10.559 1.00 0.00 C
ATOM 14 CG PRO 1 -28.043 -12.386 10.161 1.00 0.00 C
ATOM 15 CD PRO 1 -28.699 -11.637 11.286 1.00 0.00 C
ATOM 16 N THR 7 -26.565 -9.309 10.007 1.00 0.00 N
ATOM 17 CA THR 7 -26.102 -8.194 9.247 1.00 0.00 C
ATOM 18 C THR 7 -25.296 -7.372 10.186 1.00 0.00 C
ATOM 19 O THR 7 -24.295 -6.768 9.810 1.00 0.00 O
ATOM 20 CB THR 7 -27.274 -7.369 8.683 1.00 0.00 C
ATOM 21 OG1 THR 7 -28.080 -6.880 9.762 1.00 0.00 O
ATOM 22 CG2 THR 7 -28.139 -8.227 7.772 1.00 0.00 C
ATOM 23 N ASN 4 -25.736 -7.349 11.452 1.00 0.00 N
ATOM 24 CA ASN 4 -25.104 -6.609 12.495 1.00 0.00 C
ATOM 25 C ASN 4 -23.742 -7.171 12.684 1.00 0.00 C
ATOM 26 O ASN 4 -22.806 -6.454 13.030 1.00 0.00 O
ATOM 27 CB ASN 4 -25.901 -6.728 13.795 1.00 0.00 C
ATOM 28 CG ASN 4 -27.189 -5.929 13.764 1.00 0.00 C
ATOM 29 OD1 ASN 4 -27.340 -5.007 12.963 1.00 0.00 O
ATOM 30 ND2 ASN 4 -28.124 -6.282 14.639 1.00 0.00 N
ATOM 31 N ALA 2 -16.677 -4.828 10.806 1.00 0.00 N
ATOM 32 CA ALA 2 -15.984 -3.708 10.241 1.00 0.00 C
ATOM 33 C ALA 2 -15.498 -2.863 11.363 1.00 0.00 C
ATOM 34 O ALA 2 -14.369 -2.378 11.344 1.00 0.00 O
ATOM 35 CB ALA 2 -16.917 -2.901 9.352 1.00 0.00 C
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment