diff --git a/modules/seq/base/pymod/__init__.py b/modules/seq/base/pymod/__init__.py index 6a742908d60a4d4c49dc5f5e0da3480679c0de75..27e186b7565ace6021f3cff5e274d9181c23b291 100644 --- a/modules/seq/base/pymod/__init__.py +++ b/modules/seq/base/pymod/__init__.py @@ -19,16 +19,20 @@ from _seq import * 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): seq_a=multi_seq_ali.GetSequence(0) 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) -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): ent_a=ent_a or seq_a.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, if ent_b.chain_count>1: raise RuntimeError("second entity contains more than one chain") 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_b= is_hb and ent_b.CreateEmptyView() or ent_b.handle.CreateEmptyView() flags=include_atoms and mol.ViewAddFlag.INCLUDE_ATOMS or 0 - # get all residues res_a=ent_a.residues res_b=ent_b.residues - - # map sequence onto - 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() - + off_a=seq_a.GetSequenceOffset() + off_b=seq_b.GetSequenceOffset() index_a, index_b=(0, 0) done=False - - align_index = 0 - - # iterate over residues + #~ for i,j in zip(ent_a.residues,ent_b.residues): print i,i.index,j,j.index + #~ print 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)=='-': - index_a+=1 - if seq_a.GetLength()<index_a: - done=True - break - while seq_b.GetOneLetterCode(index_b)=='-': - index_b+=1 - if seq_b.GetLength()<index_b: - done=True - break - if done or len(res_a)<=off_a+index_b or len(res_b)<=off_b+index_a: - break + while seq_a.GetOneLetterCode(index_a+off_b)=='-': + index_a+=1 + print 'gap a' + if seq_a.GetLength()<=index_a+off_b: + done=True + break + while seq_b.GetOneLetterCode(index_b+off_a)=='-': + index_b+=1 + print 'gap b' + if seq_b.GetLength()<=index_b+off_a: + done=True + 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] rb=res_b[off_b+index_a] - #ra = res_a[index_b] - #rb = res_a[index_a] - #~ 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 + print 'index_a',index_a, seq_a.GetLength(),seq_a.GetOneLetterCode(index_a+off_a),ra + print 'index_b',index_b, seq_b.GetLength(),seq_b.GetOneLetterCode(index_b+off_b),rb ev_a.AddResidue(is_ha and ra or ra.handle, flags) ev_b.AddResidue(is_hb and rb or rb.handle, flags) index_a+=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 diff --git a/modules/seq/base/tests/test_seq.py b/modules/seq/base/tests/test_seq.py index c427c7155d00085b88d32a47cbe9ddbc7364ef50..69644ffc80e707c2bb8282b23b58fb0586277082 100644 --- a/modules/seq/base/tests/test_seq.py +++ b/modules/seq/base/tests/test_seq.py @@ -3,133 +3,175 @@ from ost import * from ost import settings 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): 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] 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.AttachView(self.protein.Select('aname==CA')) - self.seq_c=seq.CreateSequence('2','MRLDG---LITGSAR') - self.seq_c.AttachView(self.protein.Select('aname==CA')) - self.seq_d=seq.CreateSequence('3','MRLDG----ITGSAR') - self.seq_d.AttachView(self.protein.Select('aname==CA')) + self.seq_b.AttachView(fixture('---DGKTALITGSAR').Select('')) + #~ self.seq_c=seq.CreateSequence('2','MRLDG---LITGSAR') + #~ self.seq_c.AttachView(self.protein) + #~ self.seq_d=seq.CreateSequence('3','MRLDG----ITGSAR') + #~ self.seq_d.AttachView(self.protein) 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_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.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, self.seq_b, self.seq_a.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(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 - #~ MRLDGKTALITGSAR +#~ ---DGKTALITGSAR +#~ MRLDGKTALITGSAR + def testViewsFromSequences2(self): [a,b]=seq.ViewsFromSequences(self.seq_b, self.seq_a, self.seq_b.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(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 - #~ ---DGKTALITGSAR +##~ MRLDGKTALITGSAR +##~ MRLDGKTALITG--- + def testViewsFromSequences3(self): [a,b]=seq.ViewsFromSequences(self.seq_a, - self.seq_b, + self.seq_g, self.seq_a.GetAttachedView(), - self.seq_b.GetAttachedView()) + self.seq_g.GetAttachedView()) - self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'D'); - self.assertEqual(b.atoms[0].GetResidue().GetOneLetterCode(),'D'); + self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M'); + 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): - #~ ---DGKTALITGSAR - #~ MRLDGKTALITGSAR - [a,b]=seq.ViewsFromSequences(self.seq_b, +##~ MRLDGKTALITG--- +##~ MRLDGKTALITGSAR + def testViewsFromSequences4(self): + [a,b]=seq.ViewsFromSequences(self.seq_g, self.seq_a, - self.seq_b.GetAttachedView(), + self.seq_g.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(b.atoms[0].GetResidue().GetOneLetterCode(),'D'); + + self.assertEqual(a.atoms[0].GetResidue().GetOneLetterCode(),'M'); + 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 - #~ MRLDGKTA-ITGSAR +##~ MRLDGKTALITGSAR +##~ MRLDGKTA-ITGSAR + def testViewsFromSequences5(self): [a,b]=seq.ViewsFromSequences(self.seq_a, self.seq_f, self.seq_a.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(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(b.atoms[8].GetResidue().GetOneLetterCode(),'I'); - def testViewsFromSequencesSingleGapMiddle2(self): - #~ MRLDGKTA-ITGSAR - #~ MRLDGKTALITGSAR - [a,b]=seq.ViewsFromSequences(self.seq_f, - self.seq_a, - self.seq_f.GetAttachedView(), - self.seq_a.GetAttachedView()) - +##~ MRLDGKTA-ITGSAR +##~ MRLDGKTALITGSAR + #def testViewsFromSequences6(self): + #[a,b]=seq.ViewsFromSequences(self.seq_f, + #self.seq_a, + #self.seq_f.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(b.atoms[0].GetResidue().GetOneLetterCode(),'M'); - self.assertEqual(a.atoms[8].GetResidue().GetOneLetterCode(),'I'); - self.assertEqual(b.atoms[8].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()); + self.assertEqual(a.atoms[6].GetResidue().GetOneLetterCode(),'I'); + self.assertEqual(b.atoms[6].GetResidue().GetOneLetterCode(),'I'); + if __name__ == "__main__": # test if python extension for seq module work suite = unittest.TestLoader().loadTestsFromTestCase(TestSeq) - unittest.TextTestRunner(verbosity=2).run(suite) + unittest.TextTestRunner(verbosity=3).run(suite) #~ unittest.main() diff --git a/modules/seq/base/tests/testfiles/testprotein.pdb b/modules/seq/base/tests/testfiles/testprotein.pdb index 75351f1a994074f4d913ccc1e4b0003297f5e433..e7733fdb8a272ad98f1d125cc1076d8a1e526234 100644 --- a/modules/seq/base/tests/testfiles/testprotein.pdb +++ b/modules/seq/base/tests/testfiles/testprotein.pdb @@ -1,109 +1,15 @@ -ATOM 1 N MET A 1 21.609 35.384 56.705 1.00 41.48 N -ATOM 2 CA MET A 1 20.601 35.494 57.793 1.00 41.58 C -ATOM 3 C MET A 1 19.654 34.300 57.789 1.00 39.51 C -ATOM 4 O MET A 1 18.447 34.456 57.595 1.00 38.98 O -ATOM 5 CB MET A 1 19.789 36.783 57.639 1.00 45.90 C -ATOM 6 CG MET A 1 20.629 38.055 57.606 1.00 51.18 C -ATOM 7 SD MET A 1 21.638 38.325 59.084 1.00 55.83 S -ATOM 8 CE MET A 1 23.233 37.697 58.529 1.00 54.59 C -ATOM 9 N ARG A 2 20.202 33.112 58.011 1.00 36.39 N -ATOM 10 CA ARG A 2 19.396 31.903 58.033 1.00 34.35 C -ATOM 11 C ARG A 2 18.608 31.739 59.328 1.00 34.20 C -ATOM 12 O ARG A 2 17.651 30.965 59.381 1.00 32.64 O -ATOM 13 CB ARG A 2 20.284 30.681 57.801 1.00 33.48 C -ATOM 14 CG ARG A 2 20.665 30.488 56.342 1.00 31.69 C -ATOM 15 CD ARG A 2 21.557 29.281 56.154 1.00 29.91 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 +ATOM 1 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 CA LEU A 3 18.330 32.402 61.664 1.00 34.70 C +ATOM 4 CA ASP A 4 17.099 35.980 61.411 1.00 37.42 C +ATOM 5 CA GLY A 5 15.027 37.141 64.378 1.00 40.00 C +ATOM 6 CA LYS A 6 15.354 33.938 66.391 1.00 38.75 C +ATOM 7 CA THR A 7 16.484 33.152 69.925 1.00 31.14 C +ATOM 8 CA ALA A 8 18.759 30.274 70.854 1.00 29.72 C +ATOM 9 CA LEU A 9 19.784 28.923 74.261 1.00 26.72 C +ATOM 10 CA ILE A 10 23.077 27.016 74.090 1.00 24.46 C +ATOM 11 CA THR A 11 24.256 25.247 77.240 1.00 28.56 C +ATOM 12 CA GLY A 12 27.934 25.121 78.150 1.00 29.86 C +ATOM 13 CA SER A 13 28.721 27.662 75.443 1.00 33.66 C +ATOM 14 CA ALA A 14 31.320 29.688 77.335 1.00 36.95 C +ATOM 15 CA ARG A 15 34.025 27.749 75.511 1.00 38.19 C