Skip to content
Snippets Groups Projects
Commit ae555fd4 authored by juergen's avatar juergen
Browse files

updating unit tests for viewsfromseq

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2253 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 1b54f862
No related branches found
No related tags found
No related merge requests found
...@@ -19,16 +19,20 @@ ...@@ -19,16 +19,20 @@
from _seq import * from _seq import *
from ost import mol from ost import mol
## \brief Create two views from sequence alignment such that the matching
# residues occur at the same index within the chain.
#
# The first sequence in the sequence alignment belongs to ent_a, the second to
# ent_b.
#
# Requires that each of the entities/views only contains one chain and that
# the sequence offset of the sequences in the alignment is set appropriately.
def ViewsFromAlignment(multi_seq_ali, ent_a, ent_b, include_atoms=True): def ViewsFromAlignment(multi_seq_ali, ent_a, ent_b, include_atoms=True):
seq_a=multi_seq_ali.GetSequence(0) seq_a=multi_seq_ali.GetSequence(0)
seq_b=multi_seq_ali.GetSequence(1) seq_b=multi_seq_ali.GetSequence(1)
# set offset according to ent_a and ent_b
return ViewsFromSequences(seq_a, seq_b, ent_a, ent_b, include_atoms) return ViewsFromSequences(seq_a, seq_b, ent_a, ent_b, include_atoms)
def ViewsFromSequences(seq_a, seq_b, ent_a=None, ent_b=None, def ViewsFromSequences(seq_a, seq_b, ent_a=None, ent_b=None,
include_atoms=True): include_atoms=True):
ent_a=ent_a or seq_a.attached_view ent_a=ent_a or seq_a.attached_view
ent_b=ent_b or seq_b.attached_view ent_b=ent_b or seq_b.attached_view
...@@ -37,81 +41,42 @@ def ViewsFromSequences(seq_a, seq_b, ent_a=None, ent_b=None, ...@@ -37,81 +41,42 @@ def ViewsFromSequences(seq_a, seq_b, ent_a=None, ent_b=None,
if ent_b.chain_count>1: if ent_b.chain_count>1:
raise RuntimeError("second entity contains more than one chain") raise RuntimeError("second entity contains more than one chain")
is_ha=isinstance(ent_a, mol.EntityHandle) is_ha=isinstance(ent_a, mol.EntityHandle)
is_hb=isinstance(ent_b, mol.EntityHandle) is_hb=isinstance(ent_b, mol.EntityHandle)
ev_a= is_ha and ent_a.CreateEmptyView() or ent_a.handle.CreateEmptyView() ev_a= is_ha and ent_a.CreateEmptyView() or ent_a.handle.CreateEmptyView()
ev_b= is_hb and ent_b.CreateEmptyView() or ent_b.handle.CreateEmptyView() ev_b= is_hb and ent_b.CreateEmptyView() or ent_b.handle.CreateEmptyView()
flags=include_atoms and mol.ViewAddFlag.INCLUDE_ATOMS or 0 flags=include_atoms and mol.ViewAddFlag.INCLUDE_ATOMS or 0
# get all residues
res_a=ent_a.residues res_a=ent_a.residues
res_b=ent_b.residues res_b=ent_b.residues
off_a=seq_a.GetSequenceOffset()
# map sequence onto off_b=seq_b.GetSequenceOffset()
s1 = seq_a.gapless_string
s2 = seq_b.gapless_string
# get sequence of ent1
seq_ent_a = ""
seq_ent_b= ""
sub_a = ent_a.Select("peptide = 1")
sub_b = ent_b.Select("peptide = 1")
for res1 in sub_a.residues:
seq_ent_a = "%s%s" % (seq_ent_a, res1.one_letter_code)
seq_ent_b = ""
for res2 in sub_b.residues:
seq_ent_b = "%s%s" % (seq_ent_b, res2.one_letter_code)
#~ print seq_ent_a
#~ print s1
#~ print seq_ent_b
#~ print s2
off_a = seq_ent_a.index(s1)
off_b = seq_ent_b.index(s2)
#off_a=seq_a.GetSequenceOffset()
#off_b=seq_b.GetSequenceOffset()
index_a, index_b=(0, 0) index_a, index_b=(0, 0)
done=False done=False
#~ for i,j in zip(ent_a.residues,ent_b.residues): print i,i.index,j,j.index
align_index = 0 #~ print
# iterate over residues
while index_a<seq_a.GetLength() and index_b<seq_b.GetLength(): while index_a<seq_a.GetLength() and index_b<seq_b.GetLength():
# print 'index',index_a, seq_a.GetLength(), index_b, seq_b.GetLength() while seq_a.GetOneLetterCode(index_a+off_b)=='-':
while seq_a.GetOneLetterCode(index_a)=='-': index_a+=1
index_a+=1 print 'gap a'
if seq_a.GetLength()<index_a: if seq_a.GetLength()<=index_a+off_b:
done=True done=True
break break
while seq_b.GetOneLetterCode(index_b)=='-': while seq_b.GetOneLetterCode(index_b+off_a)=='-':
index_b+=1 index_b+=1
if seq_b.GetLength()<index_b: print 'gap b'
done=True if seq_b.GetLength()<=index_b+off_a:
break done=True
if done or len(res_a)<=off_a+index_b or len(res_b)<=off_b+index_a: break
break if done or len(res_a)<=index_b+off_a or len(res_b)<=index_a+off_b:
break
ra=res_a[off_a+index_b] ra=res_a[off_a+index_b]
rb=res_b[off_b+index_a] rb=res_b[off_b+index_a]
#ra = res_a[index_b] print 'index_a',index_a, seq_a.GetLength(),seq_a.GetOneLetterCode(index_a+off_a),ra
#rb = res_a[index_a] print 'index_b',index_b, seq_b.GetLength(),seq_b.GetOneLetterCode(index_b+off_b),rb
#~ print "set align_index %d for %s %s" % (align_index, ra, rb)
#ra.SetIntProp("align_index",align_index)
#rb.SetIntProp("align_index",align_index)
align_index += 1
ev_a.AddResidue(is_ha and ra or ra.handle, flags) ev_a.AddResidue(is_ha and ra or ra.handle, flags)
ev_b.AddResidue(is_hb and rb or rb.handle, flags) ev_b.AddResidue(is_hb and rb or rb.handle, flags)
index_a+=1 index_a+=1
index_b+=1 index_b+=1
if (ent_a.chains[0].name!=ev_a.chains[0].name):
eda=ev_a.handle.RequestXCSEditor()
eda.RenameChain(ent_a.chains[0].handle,ent_a.chains[0].name)
if (ent_b.chains[0].name!=ev_b.chains[0].name):
edb=ev_b.handle.RequestXCSEditor()
edb.RenameChain(ent_b.chains[0].handle, ent_b.chains[0].name)
return ev_a, ev_b return ev_a, ev_b
...@@ -3,133 +3,175 @@ from ost import * ...@@ -3,133 +3,175 @@ from ost import *
from ost import settings from ost import settings
from ost import seq from ost import seq
def fixture(seq_str='MRLDGKTALITGSAR'):
e=mol.CreateEntity()
ede=e.RequestXCSEditor()
chain=ede.InsertChain('A')
res_str='MET ARG LEU ASP GLY LYS THR ALA LEU ILE THR GLY SER ALA ARG'
res=res_str.split()
olc={}
counter=0
for i in 'MRLDGKTALITGSAR':
olc[i]=res[counter]
counter+=1
for i in seq_str:
if i!='-':
r=ede.AppendResidue(chain,olc[i])
r.SetOneLetterCode(i)
a=ede.InsertAtom(r,'CA',geom.Vec3())
#~ for i in e.atoms: print i,i.index
return e.Copy()
class TestSeq(unittest.TestCase): class TestSeq(unittest.TestCase):
def setUp(self): def setUp(self):
self.protein = io.LoadEntity("testfiles/testprotein.pdb") #sequence and entity must correspond
print 'initialising'
ent=fixture()
self.protein=ent.Select('')
c=self.protein.chains[0] c=self.protein.chains[0]
self.seq_a=seq.SequenceFromChain('0',c) # MRLDGKTALITGSAR self.seq_a=seq.SequenceFromChain('0',c) # MRLDGKTALITGSAR
self.seq_a.AttachView(self.protein.Select('aname==CA')) self.seq_a.AttachView(self.protein)
self.seq_b=seq.CreateSequence('1','---DGKTALITGSAR') self.seq_b=seq.CreateSequence('1','---DGKTALITGSAR')
self.seq_b.AttachView(self.protein.Select('aname==CA')) self.seq_b.AttachView(fixture('---DGKTALITGSAR').Select(''))
self.seq_c=seq.CreateSequence('2','MRLDG---LITGSAR') #~ self.seq_c=seq.CreateSequence('2','MRLDG---LITGSAR')
self.seq_c.AttachView(self.protein.Select('aname==CA')) #~ self.seq_c.AttachView(self.protein)
self.seq_d=seq.CreateSequence('3','MRLDG----ITGSAR') #~ self.seq_d=seq.CreateSequence('3','MRLDG----ITGSAR')
self.seq_d.AttachView(self.protein.Select('aname==CA')) #~ self.seq_d.AttachView(self.protein)
self.seq_e=seq.CreateSequence('4','AMRLDG----ITGSA') self.seq_e=seq.CreateSequence('4','AMRLDG----ITGSA')
self.seq_e.AttachView(self.protein.Select('aname==CA')) self.seq_e.AttachView(fixture('AMRLDG----ITGSA').Select(''))
##self.seq_e.AttachView(self.protein)
self.seq_e.SetSequenceOffset(1) self.seq_e.SetSequenceOffset(1)
self.seq_f=seq.CreateSequence('5','MRLDGKTA-ITGSAR') self.seq_f=seq.CreateSequence('5','MRLDGKTA-ITGSAR')
self.seq_f.AttachView(self.protein.Select('aname==CA')) self.seq_f.AttachView(fixture('MRLDGKTA-ITGSAR').Select(''))
self.seq_g=seq.CreateSequence('6','MRLDGKTALITG---') self.seq_g=seq.CreateSequence('6','MRLDGKTALITG---')
self.seq_g.AttachView(self.protein.Select('aname==CA')) self.seq_g.AttachView(fixture('MRLDGKTALITG---').Select(''))
#~ MRLDGKTALITGSAR
#~ ---DGKTALITGSAR
def testViewsFromSequences1(self):
def testViewsFromSequencesGapFrontSeqB(self):
#~ MRLDGKTALITGSAR
#~ ---DGKTALITGSAR
[a,b]=seq.ViewsFromSequences(self.seq_a, [a,b]=seq.ViewsFromSequences(self.seq_a,
self.seq_b, self.seq_b,
self.seq_a.GetAttachedView(), self.seq_a.GetAttachedView(),
self.seq_b.GetAttachedView()) self.seq_b.GetAttachedView())
#~ for i,j in zip(a.atoms,b.atoms):
#~ print i,i.residue.one_letter_code,j,j.residue.one_letter_code
self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'D');
self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'D');
self.assertEqual(a.atoms[11].GetResidue().GetOneLetterCode(),'R');
self.assertEqual(b.atoms[11].GetResidue().GetOneLetterCode(),'R');
def testViewsFromSequencesGapFrontSeqA(self): #~ ---DGKTALITGSAR
#~ ---DGKTALITGSAR #~ MRLDGKTALITGSAR
#~ MRLDGKTALITGSAR def testViewsFromSequences2(self):
[a,b]=seq.ViewsFromSequences(self.seq_b, [a,b]=seq.ViewsFromSequences(self.seq_b,
self.seq_a, self.seq_a,
self.seq_b.GetAttachedView(), self.seq_b.GetAttachedView(),
self.seq_a.GetAttachedView()) self.seq_a.GetAttachedView())
for i,j in zip(a.atoms,b.atoms): print i,j
self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'D');
self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'D');
self.assertEqual(a.atoms[11].GetResidue().GetOneLetterCode(),'R');
self.assertEqual(b.atoms[11].GetResidue().GetOneLetterCode(),'R');
def testViewsFromSequencesGapRearSeqB(self): ##~ MRLDGKTALITGSAR
#~ MRLDGKTALITGSAR ##~ MRLDGKTALITG---
#~ ---DGKTALITGSAR def testViewsFromSequences3(self):
[a,b]=seq.ViewsFromSequences(self.seq_a, [a,b]=seq.ViewsFromSequences(self.seq_a,
self.seq_b, self.seq_g,
self.seq_a.GetAttachedView(), self.seq_a.GetAttachedView(),
self.seq_b.GetAttachedView()) self.seq_g.GetAttachedView())
self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M');
self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M');
self.assertEqual(a.atoms[-1].GetResidue().GetOneLetterCode(),'G');
self.assertEqual(b.atoms[-1].GetResidue().GetOneLetterCode(),'G');
def testViewsFromSequencesGapRearSeqA(self): ##~ MRLDGKTALITG---
#~ ---DGKTALITGSAR ##~ MRLDGKTALITGSAR
#~ MRLDGKTALITGSAR def testViewsFromSequences4(self):
[a,b]=seq.ViewsFromSequences(self.seq_b, [a,b]=seq.ViewsFromSequences(self.seq_g,
self.seq_a, self.seq_a,
self.seq_b.GetAttachedView(), self.seq_g.GetAttachedView(),
self.seq_a.GetAttachedView()) self.seq_a.GetAttachedView())
#~ for i,j in zip(a.atoms,b.atoms): print i,j
self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M');
self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'D'); self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M');
self.assertEqual(a.atoms[-1].GetResidue().GetOneLetterCode(),'G');
self.assertEqual(b.atoms[-1].GetResidue().GetOneLetterCode(),'G');
def testViewsFromSequencesSingleGapMiddle1(self): ##~ MRLDGKTALITGSAR
#~ MRLDGKTALITGSAR ##~ MRLDGKTA-ITGSAR
#~ MRLDGKTA-ITGSAR def testViewsFromSequences5(self):
[a,b]=seq.ViewsFromSequences(self.seq_a, [a,b]=seq.ViewsFromSequences(self.seq_a,
self.seq_f, self.seq_f,
self.seq_a.GetAttachedView(), self.seq_a.GetAttachedView(),
self.seq_f.GetAttachedView()) self.seq_f.GetAttachedView())
print 'result'
for i,j in zip(a.residues,b.residues): print i,i.index,j,j.index
self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M'); self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M');
self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M'); self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M');
#~ for i,j in zip(a.atoms,b.atoms): print i,j
self.assertEqual(a.atoms[8].GetResidue().GetOneLetterCode(),'I'); self.assertEqual(a.atoms[8].GetResidue().GetOneLetterCode(),'I');
self.assertEqual(b.atoms[8].GetResidue().GetOneLetterCode(),'I'); self.assertEqual(b.atoms[8].GetResidue().GetOneLetterCode(),'I');
def testViewsFromSequencesSingleGapMiddle2(self): ##~ MRLDGKTA-ITGSAR
#~ MRLDGKTA-ITGSAR ##~ MRLDGKTALITGSAR
#~ MRLDGKTALITGSAR #def testViewsFromSequences6(self):
[a,b]=seq.ViewsFromSequences(self.seq_f, #[a,b]=seq.ViewsFromSequences(self.seq_f,
self.seq_a, #self.seq_a,
self.seq_f.GetAttachedView(), #self.seq_f.GetAttachedView(),
self.seq_a.GetAttachedView()) #self.seq_a.GetAttachedView())
#self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M');
#self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M');
#self.assertEqual(a.atoms[8].GetResidue().GetOneLetterCode(),'I');
#self.assertEqual(b.atoms[8].GetResidue().GetOneLetterCode(),'I');
##~ MRLDG---LITGSAR
##~ MRLDG----ITGSAR
#~ def testViewsFromSequences7(self):
#~ [a,b]=seq.ViewsFromSequences(self.seq_c,
#~ self.seq_d,
#~ self.seq_c.GetAttachedView(),
#~ self.seq_d.GetAttachedView())
#~
#~ self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M');
#~ self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M');
#~ self.assertEqual(a.atoms[5].GetResidue().GetOneLetterCode(),'I');
#~ self.assertEqual(b.atoms[5].GetResidue().GetOneLetterCode(),'I');
#~ MRLDGKTALITGSAR
#~ AMRLDG----ITGSA
def testViewsFromSequences8(self):
[a,b]=seq.ViewsFromSequences(self.seq_a,
self.seq_e,
self.seq_a.GetAttachedView(),
self.seq_e.GetAttachedView())
print 'result'
for i,j in zip(a.residues,b.residues): print i,i.index,j,j.index
self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M'); self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M');
self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M'); self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'M');
self.assertEqual(a.atoms[8].GetResidue().GetOneLetterCode(),'I'); self.assertEqual(a.atoms[6].GetResidue().GetOneLetterCode(),'I');
self.assertEqual(b.atoms[8].GetResidue().GetOneLetterCode(),'I'); self.assertEqual(b.atoms[6].GetResidue().GetOneLetterCode(),'I');
#def testViewsFromSequencesGapMiddleBoth(self):
##~ MRLDG---LITGSAR
##~ MRLDG----ITGSAR
#[a,b]=seq.ViewsFromSequences(self.seq_c,
#self.seq_d,
#self.seq_c.GetAttachedView(),
#self.seq_d.GetAttachedView())
#print 'aaa'+a.atoms[4].name+'aaaa'
#assertEqual(a.atoms[0].GetResidue().GetOneLetterCode()=='M');
#assertEqual(b.atoms[0].GetResidue().GetOneLetterCode()=='M');
#assertEqual(a.atoms[4].GetResidue().GetOneLetterCode()=='I');
#assertEqual(b.atoms[4].GetResidue().GetOneLetterCode()=='I');
#~ self.seq_b.GetResidue(j.GetResidue().GetIndex()).GetOneLetterCode());
#def testViewsFromSequencesGapSeqOffset(self):
##~ MRLDGKTALITGSAR
##~ AMRLDG----ITGSA
#[a,b]=seq.ViewsFromSequences(self.seq_a,
#self.seq_e,
#self.seq_a.GetAttachedView(),
#self.seq_e.GetAttachedView())
#assertEqual(a.atoms[0].GetResidue().GetOneLetterCode()=='M');
#assertEqual(b.atoms[0].GetResidue().GetOneLetterCode()=='M');
#assertEqual(a.atoms[5].GetResidue().GetOneLetterCode()=='I');
#assertEqual(b.atoms[5].GetResidue().GetOneLetterCode()=='I');
##~ self.seq_b.GetResidue(j.GetResidue().GetIndex()).GetOneLetterCode());
if __name__ == "__main__": if __name__ == "__main__":
# test if python extension for seq module work # test if python extension for seq module work
suite = unittest.TestLoader().loadTestsFromTestCase(TestSeq) suite = unittest.TestLoader().loadTestsFromTestCase(TestSeq)
unittest.TextTestRunner(verbosity=2).run(suite) unittest.TextTestRunner(verbosity=3).run(suite)
#~ unittest.main() #~ unittest.main()
ATOM 1 N MET A 1 21.609 35.384 56.705 1.00 41.48 N ATOM 1 CA MET A 1 20.601 35.494 57.793 1.00 41.58 C
ATOM 2 CA MET A 1 20.601 35.494 57.793 1.00 41.58 C ATOM 2 CA ARG A 2 19.396 31.903 58.033 1.00 34.35 C
ATOM 3 C MET A 1 19.654 34.300 57.789 1.00 39.51 C ATOM 3 CA LEU A 3 18.330 32.402 61.664 1.00 34.70 C
ATOM 4 O MET A 1 18.447 34.456 57.595 1.00 38.98 O ATOM 4 CA ASP A 4 17.099 35.980 61.411 1.00 37.42 C
ATOM 5 CB MET A 1 19.789 36.783 57.639 1.00 45.90 C ATOM 5 CA GLY A 5 15.027 37.141 64.378 1.00 40.00 C
ATOM 6 CG MET A 1 20.629 38.055 57.606 1.00 51.18 C ATOM 6 CA LYS A 6 15.354 33.938 66.391 1.00 38.75 C
ATOM 7 SD MET A 1 21.638 38.325 59.084 1.00 55.83 S ATOM 7 CA THR A 7 16.484 33.152 69.925 1.00 31.14 C
ATOM 8 CE MET A 1 23.233 37.697 58.529 1.00 54.59 C ATOM 8 CA ALA A 8 18.759 30.274 70.854 1.00 29.72 C
ATOM 9 N ARG A 2 20.202 33.112 58.011 1.00 36.39 N ATOM 9 CA LEU A 9 19.784 28.923 74.261 1.00 26.72 C
ATOM 10 CA ARG A 2 19.396 31.903 58.033 1.00 34.35 C ATOM 10 CA ILE A 10 23.077 27.016 74.090 1.00 24.46 C
ATOM 11 C ARG A 2 18.608 31.739 59.328 1.00 34.20 C ATOM 11 CA THR A 11 24.256 25.247 77.240 1.00 28.56 C
ATOM 12 O ARG A 2 17.651 30.965 59.381 1.00 32.64 O ATOM 12 CA GLY A 12 27.934 25.121 78.150 1.00 29.86 C
ATOM 13 CB ARG A 2 20.284 30.681 57.801 1.00 33.48 C ATOM 13 CA SER A 13 28.721 27.662 75.443 1.00 33.66 C
ATOM 14 CG ARG A 2 20.665 30.488 56.342 1.00 31.69 C ATOM 14 CA ALA A 14 31.320 29.688 77.335 1.00 36.95 C
ATOM 15 CD ARG A 2 21.557 29.281 56.154 1.00 29.91 C ATOM 15 CA ARG A 15 34.025 27.749 75.511 1.00 38.19 C
ATOM 16 NE ARG A 2 22.931 29.557 56.551 1.00 28.95 N
ATOM 17 CZ ARG A 2 23.901 28.653 56.528 1.00 30.21 C
ATOM 18 NH1 ARG A 2 23.640 27.417 56.130 1.00 32.54 N
ATOM 19 NH2 ARG A 2 25.132 28.980 56.893 1.00 29.14 N
ATOM 20 N LEU A 3 19.003 32.473 60.366 1.00 35.07 N
ATOM 21 CA LEU A 3 18.330 32.402 61.664 1.00 34.70 C
ATOM 22 C LEU A 3 17.884 33.787 62.117 1.00 35.41 C
ATOM 23 O LEU A 3 17.853 34.091 63.308 1.00 35.91 O
ATOM 24 CB LEU A 3 19.269 31.793 62.710 1.00 31.47 C
ATOM 25 CG LEU A 3 19.695 30.340 62.501 1.00 29.10 C
ATOM 26 CD1 LEU A 3 20.585 29.897 63.648 1.00 26.97 C
ATOM 27 CD2 LEU A 3 18.461 29.459 62.420 1.00 27.95 C
ATOM 28 N ASP A 4 17.517 34.614 61.149 1.00 36.70 N
ATOM 29 CA ASP A 4 17.099 35.980 61.411 1.00 37.42 C
ATOM 30 C ASP A 4 15.897 36.114 62.343 1.00 37.20 C
ATOM 31 O ASP A 4 14.839 35.529 62.107 1.00 35.42 O
ATOM 32 CB ASP A 4 16.814 36.671 60.079 1.00 40.33 C
ATOM 33 CG ASP A 4 17.023 38.166 60.142 1.00 43.16 C
ATOM 34 OD1 ASP A 4 16.121 38.876 60.638 1.00 44.42 O
ATOM 35 OD2 ASP A 4 18.100 38.629 59.699 1.00 45.27 O
ATOM 36 N GLY A 5 16.085 36.893 63.408 1.00 38.60 N
ATOM 37 CA GLY A 5 15.027 37.141 64.378 1.00 40.00 C
ATOM 38 C GLY A 5 14.640 35.963 65.253 1.00 40.53 C
ATOM 39 O GLY A 5 13.475 35.828 65.645 1.00 40.48 O
ATOM 40 N LYS A 6 15.612 35.110 65.565 1.00 39.87 N
ATOM 41 CA LYS A 6 15.354 33.938 66.391 1.00 38.75 C
ATOM 42 C LYS A 6 16.248 33.899 67.615 1.00 37.16 C
ATOM 43 O LYS A 6 17.363 34.427 67.602 1.00 36.93 O
ATOM 44 CB LYS A 6 15.548 32.665 65.571 1.00 39.36 C
ATOM 45 CG LYS A 6 14.498 32.476 64.504 1.00 40.15 C
ATOM 46 CD LYS A 6 14.601 31.107 63.866 1.00 41.73 C
ATOM 47 CE LYS A 6 13.463 30.880 62.879 1.00 44.93 C
ATOM 48 NZ LYS A 6 12.132 31.017 63.537 1.00 44.56 N
ATOM 49 N THR A 7 15.750 33.261 68.670 1.00 34.56 N
ATOM 50 CA THR A 7 16.484 33.152 69.925 1.00 31.14 C
ATOM 51 C THR A 7 16.945 31.728 70.188 1.00 30.82 C
ATOM 52 O THR A 7 16.175 30.775 70.059 1.00 31.78 O
ATOM 53 CB THR A 7 15.618 33.605 71.114 1.00 30.89 C
ATOM 54 OG1 THR A 7 14.409 32.837 71.147 1.00 31.28 O
ATOM 55 CG2 THR A 7 15.263 35.077 70.991 1.00 32.31 C
ATOM 56 N ALA A 8 18.205 31.586 70.573 1.00 29.62 N
ATOM 57 CA ALA A 8 18.759 30.274 70.854 1.00 29.72 C
ATOM 58 C ALA A 8 19.461 30.202 72.215 1.00 30.28 C
ATOM 59 O ALA A 8 20.244 31.084 72.579 1.00 30.25 O
ATOM 60 CB ALA A 8 19.732 29.874 69.745 1.00 29.05 C
ATOM 61 N LEU A 9 19.163 29.146 72.964 1.00 28.68 N
ATOM 62 CA LEU A 9 19.784 28.923 74.261 1.00 26.72 C
ATOM 63 C LEU A 9 20.780 27.790 74.007 1.00 26.04 C
ATOM 64 O LEU A 9 20.390 26.713 73.554 1.00 26.45 O
ATOM 65 CB LEU A 9 18.733 28.471 75.291 1.00 26.06 C
ATOM 66 CG LEU A 9 19.044 28.458 76.801 1.00 25.33 C
ATOM 67 CD1 LEU A 9 17.929 27.731 77.537 1.00 23.24 C
ATOM 68 CD2 LEU A 9 20.359 27.772 77.089 1.00 25.34 C
ATOM 69 N ILE A 10 22.056 28.036 74.278 1.00 23.49 N
ATOM 70 CA ILE A 10 23.077 27.016 74.090 1.00 24.46 C
ATOM 71 C ILE A 10 23.777 26.777 75.422 1.00 27.09 C
ATOM 72 O ILE A 10 24.431 27.677 75.953 1.00 27.64 O
ATOM 73 CB ILE A 10 24.124 27.460 73.057 1.00 24.13 C
ATOM 74 CG1 ILE A 10 23.427 27.822 71.747 1.00 22.48 C
ATOM 75 CG2 ILE A 10 25.153 26.351 72.842 1.00 17.46 C
ATOM 76 CD1 ILE A 10 24.360 28.402 70.719 1.00 24.59 C
ATOM 77 N THR A 11 23.650 25.565 75.955 1.00 27.49 N
ATOM 78 CA THR A 11 24.256 25.247 77.240 1.00 28.56 C
ATOM 79 C THR A 11 25.740 24.948 77.123 1.00 29.62 C
ATOM 80 O THR A 11 26.186 24.359 76.138 1.00 32.36 O
ATOM 81 CB THR A 11 23.551 24.043 77.899 1.00 27.97 C
ATOM 82 OG1 THR A 11 23.883 22.839 77.199 1.00 27.93 O
ATOM 83 CG2 THR A 11 22.050 24.235 77.863 1.00 27.09 C
ATOM 84 N GLY A 12 26.499 25.356 78.137 1.00 29.33 N
ATOM 85 CA GLY A 12 27.934 25.121 78.150 1.00 29.86 C
ATOM 86 C GLY A 12 28.634 25.744 76.963 1.00 31.12 C
ATOM 87 O GLY A 12 29.570 25.170 76.407 1.00 32.13 O
ATOM 88 N SER A 13 28.186 26.939 76.592 1.00 32.78 N
ATOM 89 CA SER A 13 28.721 27.662 75.443 1.00 33.66 C
ATOM 90 C SER A 13 29.757 28.737 75.764 1.00 35.28 C
ATOM 91 O SER A 13 30.039 29.600 74.933 1.00 36.10 O
ATOM 92 CB SER A 13 27.561 28.292 74.674 1.00 32.16 C
ATOM 93 OG SER A 13 26.712 29.012 75.550 1.00 31.20 O
ATOM 94 N ALA A 14 30.323 28.696 76.963 1.00 36.42 N
ATOM 95 CA ALA A 14 31.320 29.688 77.335 1.00 36.95 C
ATOM 96 C ALA A 14 32.594 29.418 76.550 1.00 37.21 C
ATOM 97 O ALA A 14 33.338 30.338 76.218 1.00 36.96 O
ATOM 98 CB ALA A 14 31.600 29.621 78.834 1.00 36.61 C
ATOM 99 N ARG A 15 32.833 28.146 76.249 1.00 37.46 N
ATOM 100 CA ARG A 15 34.025 27.749 75.511 1.00 38.19 C
ATOM 101 C ARG A 15 33.755 26.585 74.573 1.00 36.88 C
ATOM 102 O ARG A 15 32.648 26.040 74.533 1.00 36.88 O
ATOM 103 CB ARG A 15 35.136 27.342 76.484 1.00 40.06 C
ATOM 104 CG ARG A 15 35.555 28.438 77.445 1.00 43.70 C
ATOM 105 CD ARG A 15 36.475 27.902 78.531 1.00 44.19 C
ATOM 106 NE ARG A 15 36.657 28.880 79.598 0.00 44.00 N
ATOM 107 CZ ARG A 15 37.270 28.625 80.748 0.00 44.01 C
ATOM 108 NH1 ARG A 15 37.389 29.576 81.664 0.00 43.97 N
ATOM 109 NH2 ARG A 15 37.761 27.416 80.985 0.00 43.97 N
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment