Skip to content
Snippets Groups Projects
Commit 1d84746f 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 eac5806b
Branches
Tags
No related merge requests found
Showing
with 404 additions and 33 deletions
......@@ -3,7 +3,8 @@ from ost import settings, io, seq, LogError
import os
import subprocess
def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, nopgap=False):
def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, nopgap=False,
clustalw_option_string=False):
clustalw_path=settings.Locate(('clustalw', 'clustalw2'),
explicit_file_name=clustalw)
......@@ -34,6 +35,9 @@ def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, nopgap=False):
out)
if nopgap:
command+=" -nopgap"
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.stdout.readlines()
aln=io.LoadAlignment(out)
......
......@@ -15,9 +15,15 @@ class TestClustalWBindings(unittest.TestCase):
self.pw_alignment = io.LoadAlignment("testfiles/pairwise_aln.fasta")
self.nopgap_pw_alignment = io.LoadAlignment("testfiles/nopgap_pairwise_aln.fasta")
self.mult_alignment = io.LoadAlignment("testfiles/multiple_aln.fasta")
self.strseq1 = self.targetseq.GetGaplessString()
self.strseq2 = self.templseq.GetGaplessString()
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):
aln=clustalw.ClustalW(self.targetseq, self.templseq)
assert self.pw_alignment.ToString(80) == aln.ToString(80), \
......@@ -46,6 +52,15 @@ class TestClustalWBindings(unittest.TestCase):
"Pairwise alignment using two strings differs from precomputed one \n%s \n%s" \
%(self.pw_alignment.ToString(80),aln.ToString(80))
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__":
# test if clustalw package is available on system, otherwise ignore tests
try:
......
>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
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
and the full-length target sequence. The aligned model sequence with an attached
view needs to be provided. Upon succcess, the renumbered entity is returned.
and the full-length target sequence. The aligned model sequence or the alignment itself
with an attached view needs to be provided. Upon succcess, the renumbered entity is returned.
.. code-block:: python
......@@ -16,35 +16,70 @@ def Renumber(seq_handle):
pdb_seq=seq.SequenceFromChain("model", ent.chains[0])
aln=ClustalW(s,pdb_seq)
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")
"""
if seq_handle.HasAttachedView()==False:
raise RuntimeError, "Sequence Handle has no attached view"
changed_residue_count=0
renumberingFlag = False
ent_n=mol.CreateEntity()
ed=ent_n.EditXCS()
c=ed.InsertChain(" ")
for pos in range(len(seq_handle)):
if seq_handle[pos]!='-':
r=seq_handle.GetResidue(pos)
if r.IsValid():
#print seq_handle[pos],r.number.num,pos+1
if r.number.num!=pos+1:
changed_residue_count+=1
renumberingFlag = True
r_n=ed.AppendResidue(c,r.name, mol.ResNum(pos+1))
for atom in r.atoms:
ed.InsertAtom(r_n,atom.name,atom.pos,atom.prop)
else:
err='Error: renumbering failed at position %s' %pos
raise RuntimeError, err
if renumberingFlag == True:
err = 'Warning: %s residues have been renumbered!' %changed_residue_count
ost.LogMessage(err)
conop.ConnectAll(ent_n)
return ent_n
if isinstance(seq_handle, seq.SequenceHandle):
if seq_handle.HasAttachedView()==False:
raise RuntimeError, "Sequence Handle has no attached view"
changed_residue_count=0
renumberingFlag = False
ent_n=mol.CreateEntity()
ed=ent_n.EditXCS()
c=ed.InsertChain(" ")
for pos in range(len(seq_handle)):
if seq_handle[pos]!='-':
r=seq_handle.GetResidue(pos)
if r.IsValid():
#print seq_handle[pos],r.number.num,pos+1
if r.number.num!=pos+1:
changed_residue_count+=1
renumberingFlag = True
r_n=ed.AppendResidue(c,r.name, mol.ResNum(pos+1))
for atom in r.atoms:
ed.InsertAtom(r_n,atom.name,atom.pos,atom.prop)
else:
err='Error: renumbering failed at position %s' %pos
raise RuntimeError, err
if renumberingFlag == True:
err = 'Warning: %s residues have been renumbered!' %changed_residue_count
LogInfo(err)
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.EditXCS()
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.element, atom.b_factor,
atom.occupancy, atom.is_hetatom)
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
test_merge_pairwise_alignments.cc
test_sequence_identity.cc
tests.cc
test_renumber.py
)
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