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)
示例#2
0
 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))