コード例 #1
0
 def _check_i_seqs(atom_group1, atom_group2, i_seqs):
     atoms = []
     for i_seq in i_seqs:
         for atom in list(atom_group1.atoms()) + list(atom_group2.atoms()):
             if atom.i_seq == i_seq:
                 atoms.append(atom)
                 break
     d2 = linking_utils.get_distance2(*atoms)  # XXXX needs to be sym aware
     if d2 > 9: return False
     return True
コード例 #2
0
 def _check_i_seqs(atom_group1, atom_group2, i_seqs):
   atoms = []
   for i_seq in i_seqs:
     for atom in list(atom_group1.atoms())+list(atom_group2.atoms()):
       if atom.i_seq==i_seq:
         atoms.append(atom)
         break
   d2 = linking_utils.get_distance2(*atoms) # XXXX needs to be sym aware
   if d2>9: return False
   return True
コード例 #3
0
ファイル: histidines.py プロジェクト: keitaroyam/cctbx_fork
def predict_protonation(ag, verbose=False):
  from cctbx import geometry
  from mmtbx.monomer_library.linking_utils import get_distance2
  from math import sqrt
#  from cctbx_geometry_restraints_ext import *
#  from cctbx.array_family import flex
  """
his1 = -37.35*X1 + 15.57*X2 - 0.64*X3 + 0.76*X4 + 17.30

his2 = -2.16*X1 - 6.08*X2 + 0.56*X3 + 0.42*X4 - 94.46

X1 = ND1-CE1
X2 = CE1-NE2
X3 = -ND1-
X4 = -NE2-

his1<0 ~> ND1 protonated
his1>0
  his2<0 ~> NE2 protonated
  his2>0 ~> doubly protonated
  """
  bonds = {
    ("ND1", "CE1") : None,
    ("NE2", "CE1") : None,
    }
  if verbose:
    for atom in ag.atoms():
      print atom.quote()
  for i, tmp_atom in enumerate(bonds):
    atoms = []
    for j in range(2):
      for atom in ag.atoms():
        if atom.name.strip()==tmp_atom[j]:
          atoms.append(atom)
          break
    if len(atoms)==2:
      d2=get_distance2(*atoms)
      bonds[tmp_atom]=sqrt(d2)
  angles = {
    ("CG", "ND1", "CE1") : None,
    ("CE1","NE2", "CD2") : None,
    }
  for i, tmp_atom in enumerate(angles):
    atoms = []
    for j in range(3):
      for atom in ag.atoms():
        if atom.name.strip()==tmp_atom[j]:
          atoms.append(atom.xyz)
          break
    if len(atoms)==3:
      angle=geometry.angle((atoms)).angle_model
      angles[tmp_atom]=angle
  if None in bonds.values() or None in angles.values(): return None
  his1 =  17.30 - 0.64*angles[("CG", "ND1", "CE1")]
  his1 +=         0.76*angles[("CE1","NE2", "CD2")]
  his1 -=        37.35*bonds[("ND1", "CE1")]
  his1 +=        15.57*bonds[("NE2", "CE1")]
  his2 = -94.46 + 0.56*angles[("CG", "ND1", "CE1")]
  his2 +=         0.42*angles[("CE1","NE2", "CD2")]
  his2 -=         2.61*bonds[("ND1", "CE1")]
  his2 -=         6.08*bonds[("NE2", "CE1")]
  if verbose:
    print 'his1',his1
    print 'his2',his2
  return (his1, his2)
コード例 #4
0
def predict_protonation(ag, verbose=False):
    from cctbx import geometry
    from mmtbx.monomer_library.linking_utils import get_distance2
    from math import sqrt
    #  from cctbx_geometry_restraints_ext import *
    #  from cctbx.array_family import flex
    """
his1 = -37.35*X1 + 15.57*X2 - 0.64*X3 + 0.76*X4 + 17.30

his2 = -2.16*X1 - 6.08*X2 + 0.56*X3 + 0.42*X4 - 94.46

X1 = ND1-CE1
X2 = CE1-NE2
X3 = -ND1-
X4 = -NE2-

his1<0 ~> ND1 protonated
his1>0
  his2<0 ~> NE2 protonated
  his2>0 ~> doubly protonated
  """
    bonds = {
        ("ND1", "CE1"): None,
        ("NE2", "CE1"): None,
    }
    if verbose:
        for atom in ag.atoms():
            print atom.quote()
    for i, tmp_atom in enumerate(bonds):
        atoms = []
        for j in range(2):
            for atom in ag.atoms():
                if atom.name.strip() == tmp_atom[j]:
                    atoms.append(atom)
                    break
        if len(atoms) == 2:
            d2 = get_distance2(*atoms)
            bonds[tmp_atom] = sqrt(d2)
    angles = {
        ("CG", "ND1", "CE1"): None,
        ("CE1", "NE2", "CD2"): None,
    }
    for i, tmp_atom in enumerate(angles):
        atoms = []
        for j in range(3):
            for atom in ag.atoms():
                if atom.name.strip() == tmp_atom[j]:
                    atoms.append(atom.xyz)
                    break
        if len(atoms) == 3:
            angle = geometry.angle((atoms)).angle_model
            angles[tmp_atom] = angle
    if None in bonds.values() or None in angles.values(): return None
    his1 = 17.30 - 0.64 * angles[("CG", "ND1", "CE1")]
    his1 += 0.76 * angles[("CE1", "NE2", "CD2")]
    his1 -= 37.35 * bonds[("ND1", "CE1")]
    his1 += 15.57 * bonds[("NE2", "CE1")]
    his2 = -94.46 + 0.56 * angles[("CG", "ND1", "CE1")]
    his2 += 0.42 * angles[("CE1", "NE2", "CD2")]
    his2 -= 2.61 * bonds[("ND1", "CE1")]
    his2 -= 6.08 * bonds[("NE2", "CE1")]
    if verbose:
        print 'his1', his1
        print 'his2', his2
    return (his1, his2)