Ejemplo n.º 1
0
 def __init__(self,
              unit_cell,
              map_target,
              real_space_gradients_delta,
              sites_frac,
              map_current = None,
              geometry_restraints_manager = None,
              real_space_target_weight = None,
              restraints_target_weight = None,
              sites_cart = None,
              target_type = "diffmap"):
   adopt_init_args(self, locals())
   assert target_type in ["simple", "diffmap"]
   if(geometry_restraints_manager is not None):
     assert [real_space_target_weight, restraints_target_weight, sites_cart
            ].count(None)==0
     self.geom_tg_obj = geometry_restraints_manager.energies_sites(
       sites_cart = sites_cart, compute_gradients = True)
   if(target_type == "diffmap"):
     assert map_current is not None
     self.rsr_tg_obj = maptbx.target_and_gradients_diffmap(
       unit_cell   = unit_cell,
       map_target  = map_target,
       map_current = map_current,
       step        = real_space_gradients_delta,
       sites_frac  = sites_frac)
   if(target_type == "simple"):
     assert sites_cart is not None
     self.rsr_tg_obj = maptbx.target_and_gradients_simple(
       unit_cell   = unit_cell,
       map_target  = map_target,
       sites_cart  = sites_cart,
       delta       = real_space_gradients_delta,
       selection   = flex.bool(sites_cart.size(),True))
Ejemplo n.º 2
0
 def data_target_and_grads(self, compute_gradients, x):
     """
 Args:
   compute_gradients: (bool) when True compute gradients
   x: refined parameters
 """
     g = None
     tg = maptbx.target_and_gradients_simple(
         unit_cell=self.unit_cell,
         map_target=self.map_data,
         sites_cart=self.xray_structure.sites_cart(),
         delta=self.real_space_gradients_delta,
         selection=self.selection)
     t = tg.target() * (-1)
     if compute_gradients:
         if self.refine_sites:
             g = tg.gradients() * (-1)
     return t, g
def exercise_03():
    """
  Exercise maptbx.target_and_gradients_simple.
  """
    def compute_map(xray_structure, d_min=1.5, resolution_factor=1. / 4):
        fc = xray_structure.structure_factors(d_min=d_min).f_calc()
        fft_map = fc.fft_map(resolution_factor=resolution_factor)
        fft_map.apply_sigma_scaling()
        result = fft_map.real_map_unpadded()
        return result, fc, fft_map

    xrs = random_structure.xray_structure(
        space_group_info=sgtbx.space_group_info("P212121"),
        elements=["N", "C", "O", "S", "P"] * 10,
        volume_per_atom=50)
    map_target, tmp, tmp = compute_map(xray_structure=xrs)
    xrs_sh = xrs.deep_copy_scatterers()
    xrs_sh.shake_sites_in_place(mean_distance=0.8)
    #
    t1 = maptbx.real_space_target_simple(unit_cell=xrs.unit_cell(),
                                         density_map=map_target,
                                         sites_cart=xrs_sh.sites_cart(),
                                         selection=flex.bool(
                                             xrs_sh.scatterers().size(), True))
    g1 = maptbx.real_space_gradients_simple(unit_cell=xrs.unit_cell(),
                                            density_map=map_target,
                                            sites_cart=xrs_sh.sites_cart(),
                                            delta=0.25,
                                            selection=flex.bool(
                                                xrs_sh.scatterers().size(),
                                                True))
    o = maptbx.target_and_gradients_simple(unit_cell=xrs.unit_cell(),
                                           map_target=map_target,
                                           sites_cart=xrs_sh.sites_cart(),
                                           delta=0.25,
                                           selection=flex.bool(
                                               xrs_sh.scatterers().size(),
                                               True))
    assert approx_equal(t1, o.target())
    for gi, gj in zip(g1, o.gradients()):
        assert approx_equal(gi, gj)
 def compute_functional_and_gradients(O):
     if (O.number_of_function_evaluations == 0):
         O.number_of_function_evaluations += 1
         return O.f_start, O.g_start
     O.number_of_function_evaluations += 1
     #
     x_current = O.x
     if (O.x_previous is None):
         O.x_previous = x_current.deep_copy()
     else:
         xray.ext.damp_shifts(previous=O.x_previous,
                              current=x_current,
                              max_value=10.)
         O.x_previous = x_current.deep_copy()
     #
     O.sites_cart_variable = flex.vec3_double(x_current)
     if (O.real_space_target_weight == 0):
         rs_f = 0.
         rs_g = flex.vec3_double(O.sites_cart_variable.size(), (0, 0, 0))
     else:
         if (O.local_standard_deviations_radius is None):
             if (O.gradients_method == "fd"):
                 o = maptbx.target_and_gradients_simple(
                     unit_cell=O.unit_cell,
                     map_target=O.density_map,
                     sites_cart=O.sites_cart_variable,
                     delta=O.real_space_gradients_delta,
                     selection=O.selection_variable_real_space)
             else:
                 o = maptbx.target_and_gradients_simple(
                     unit_cell=O.unit_cell,
                     map_target=O.density_map,
                     sites_cart=O.sites_cart_variable,
                     selection=O.selection_variable_real_space,
                     use_quadratic_interpolation=O.
                     use_quadratic_interpolation)
             rs_f = o.target()
             rs_g = o.gradients()
         else:
             rs_f = local_standard_deviations_target(
                 unit_cell=O.unit_cell,
                 density_map=O.density_map,
                 weight_map=O.weight_map,
                 weight_map_scale_factor=O.weight_map_scale_factor,
                 sites_cart=O.sites_cart_variable,
                 site_radii=O.site_radii)
             rs_g = local_standard_deviations_gradients(
                 unit_cell=O.unit_cell,
                 density_map=O.density_map,
                 weight_map=O.weight_map,
                 weight_map_scale_factor=O.weight_map_scale_factor,
                 sites_cart=O.sites_cart_variable,
                 site_radii=O.site_radii,
                 delta=O.real_space_gradients_delta)
         rs_f *= -O.real_space_target_weight
         rs_g *= -O.real_space_target_weight
     if (O.geometry_restraints_manager is None):
         f = rs_f
         g = rs_g
     else:
         if (O.selection_variable is None):
             O.sites_cart = O.sites_cart_variable
         else:
             O.sites_cart.set_selected(O.selection_variable,
                                       O.sites_cart_variable)
             if (O.states_collector is not None):
                 O.states_collector.add(sites_cart=O.sites_cart)
         gr_e = O.geometry_restraints_manager.energies_sites(
             sites_cart=O.sites_cart, compute_gradients=True)
         gr_e_gradients = gr_e.gradients
         if (O.selection_variable is not None):
             gr_e_gradients = gr_e.gradients.select(O.selection_variable)
         f = rs_f + gr_e.target
         g = rs_g + gr_e_gradients
     return f, g.as_double()