Exemplo n.º 1
0
 def compute_target(self, compute_gradients):
   target_and_grads = self.geometry_restraints.energies_sites(
     sites_cart = self.xray_structure.sites_cart(),
     compute_gradients = True)
   self.f = target_and_grads.target
   if(compute_gradients):
     #self.g = target_and_grads.gradients.as_double()
     self.grads = target_and_grads.gradients
   # -----------------------------------------------------
   # if use_riding hydrogen, modify the gradients
     if self.use_riding:
       modify_gradients.modify_gradients(
         sites_cart          = self.xray_structure.sites_cart(),
         h_parameterization  = self.h_parameterization,
         grads               = self.grads)
   # -----------------------------------------------------
     self.g = self.grads.as_double()
Exemplo n.º 2
0
def exercise(pdb_str, eps):
  mon_lib_srv = monomer_library.server.server()
  ener_lib = monomer_library.server.ener_lib()
  processed_pdb_file = monomer_library.pdb_interpretation.process(
    mon_lib_srv    = mon_lib_srv,
    ener_lib       = ener_lib,
    raw_records    = pdb_str,
    force_symmetry = True)
  pdb_hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy
  xray_structure = processed_pdb_file.xray_structure()
  sites_cart = xray_structure.sites_cart()
  geometry = processed_pdb_file.geometry_restraints_manager(
    show_energies      = False,
    plain_pairs_radius = 5.0)

  es = geometry.energies_sites(
    sites_cart = sites_cart,
    compute_gradients = True)
  g_analytical = es.gradients
#
  riding_h_manager = riding.manager(
    pdb_hierarchy       = pdb_hierarchy,
    geometry_restraints = geometry)

  h_parameterization = riding_h_manager.h_parameterization

  riding_h_manager.idealize_hydrogens_inplace(
      pdb_hierarchy=pdb_hierarchy,
      xray_structure=xray_structure)
  #sites_cart = pdb_hierarchy.atoms().extract_xyz()
  sites_cart = xray_structure.sites_cart()

  #for i in g_analytical:
  #  print i
  #print '----------'
  g_analytical = geometry.energies_sites(
    sites_cart = sites_cart, compute_gradients = True).gradients
  modify_gradients.modify_gradients(
    sites_cart         = sites_cart,
    h_parameterization = h_parameterization,
    grads              = g_analytical)
  #
  ex = [eps,0,0]
  ey = [0,eps,0]
  ez = [0,0,eps]
  g_fd = flex.vec3_double()
  for i_site in xrange(sites_cart.size()):
    g_fd_i = []
    for e in [ex,ey,ez]:
      ts = []
      for sign in [-1,1]:
        sites_cart_ = sites_cart.deep_copy()
        xray_structure_ = xray_structure.deep_copy_scatterers()
        sites_cart_[i_site] = [
          sites_cart_[i_site][j]+e[j]*sign for j in xrange(3)]
        xray_structure_.set_sites_cart(sites_cart_)
        # after shift, recalculate H position
        riding_h_manager.idealize_hydrogens_inplace(
          xray_structure=xray_structure_)
        sites_cart_ = xray_structure_.sites_cart()
        ts.append(geometry.energies_sites(
          sites_cart = sites_cart_,
          compute_gradients = False).target)
      g_fd_i.append((ts[1]-ts[0])/(2*eps))
    g_fd.append(g_fd_i)

  for g1, g2 in zip(g_analytical, g_fd):
    #print g1,g2
    assert approx_equal(g1,g2, 1.e-4)