def do_exercise(self, verbose=False): xs = self.xs indices = self.miller_indices(xs.space_group_info()) f = structure_factors.f_calc_modulus(xs) f_sq = structure_factors.f_calc_modulus_squared(xs) for h in indices: f.linearise(h) f_sq.linearise(h) assert approx_equal_relatively(f.observable ** 2, f_sq.observable, relative_error=1e-10) grad_f_sq = f_sq.grad_observable two_f_grad_f = 2 * f.observable * f.grad_observable flex.compare_derivatives(two_f_grad_f, grad_f_sq, eps=1e-12)
def do_exercise(self, verbose=False): xs = self.xs indices = self.miller_indices(xs.space_group_info()) f = structure_factors.f_calc_modulus(xs) f_sq = structure_factors.f_calc_modulus_squared(xs) for h in indices: f.linearise(h) f_sq.linearise(h) assert approx_equal_relatively(f.observable**2, f_sq.observable, relative_error=1e-10) grad_f_sq = f_sq.grad_observable two_f_grad_f = (2 * f.observable * f.grad_observable) flex.compare_derivatives(two_f_grad_f, grad_f_sq, eps=1e-12)
def compare_analytical_and_finite(f_obs, xray_structure, out): grads_fin = d_target_d_params_finite(f_obs=f_obs, xray_structure=xray_structure) print >> out, "grads_fin:", list(grads_fin) sf = structure_factors(xray_structure=xray_structure, miller_set=f_obs) grads_ana = sf.d_target_d_params(f_obs=f_obs, target_type=least_squares) print >> out, "grads_ana:", list(grads_ana) flex.compare_derivatives(grads_ana, grads_fin) curvs_fin = d2_target_d_params_finite(f_obs=f_obs, xray_structure=xray_structure) print >> out, "curvs_fin:", list(curvs_fin) curvs_ana = sf.d2_target_d_params(f_obs=f_obs, target_type=least_squares) print >> out, "curvs_ana:", list(curvs_ana) flex.compare_derivatives(curvs_ana.as_1d(), curvs_fin) print >> out
def compare_analytical_and_finite(f_obs, xray_structure, out): grads_fin = d_target_d_params_finite( f_obs=f_obs, xray_structure=xray_structure) print >> out, "grads_fin:", list(grads_fin) sf = structure_factors( xray_structure=xray_structure, miller_set=f_obs) grads_ana = sf.d_target_d_params(f_obs=f_obs, target_type=least_squares) print >> out, "grads_ana:", list(grads_ana) flex.compare_derivatives(grads_ana, grads_fin) curvs_fin = d2_target_d_params_finite( f_obs=f_obs, xray_structure=xray_structure) print >> out, "curvs_fin:", list(curvs_fin) curvs_ana = sf.d2_target_d_params(f_obs=f_obs, target_type=least_squares) print >> out, "curvs_ana:", list(curvs_ana) flex.compare_derivatives(curvs_ana.as_1d(), curvs_fin) print >> out
def compare_analytical_and_finite( f_obs, xray_structure, gradients_should_be_zero, eps, out): grads_fin = d_target_d_params_finite( d_order=1, f_obs=f_obs, xray_structure=xray_structure) print >> out, "grads_fin:", list(grads_fin) sf = structure_factors( xray_structure=xray_structure, miller_set=f_obs) grads_ana = sf.d_target_d_params(f_obs=f_obs, target_type=least_squares) print >> out, "grads_ana:", list(grads_ana) if (gradients_should_be_zero): flex.compare_derivatives(grads_ana, flex.double(grads_ana.size(), 0), eps) else: flex.compare_derivatives(grads_ana, grads_fin, eps) curvs_fin = d_target_d_params_finite( d_order=2, f_obs=f_obs, xray_structure=xray_structure) print >> out, "curvs_fin:", list(curvs_fin) curvs_ana = sf.d2_target_d_params(f_obs=f_obs, target_type=least_squares) print >> out, "curvs_ana:", list(curvs_ana) flex.compare_derivatives(curvs_ana.as_1d(), curvs_fin, eps) assert curvs_ana.matrix_is_symmetric(relative_epsilon=1e-10) print >> out # for i_method,curvs_method in enumerate([ sf.d2_target_d_params_diag, sf.d2_target_d_params_diag_cpp]): curvs_diag_ana = curvs_method(f_obs=f_obs, target_type=least_squares) if (i_method != 0): flex.compare_derivatives(grads_ana, curvs_diag_ana.grads, eps=1e-12) curvs_diag_ana = curvs_diag_ana.curvs assert curvs_diag_ana.size() == curvs_ana.focus()[0] flex.compare_derivatives( curvs_ana.matrix_diagonal().as_1d(), curvs_diag_ana, eps=1e-12) # if (gradients_should_be_zero): return flex.max(flex.abs(grads_fin))