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))
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()