Exemplo n.º 1
0
def exercise_singular_least_squares():
    obs = flex.double([1.234])
    weights_2345 = flex.double([2.345])
    weights_zero = flex.double([0])
    r_free_flags = flex.bool([False])
    a = flex.double([0])
    b = flex.double([0])
    for obs_type in ["F", "I"]:
        for weights, scale_factor in [(weights_2345, 3.456),
                                      (weights_zero, 0)]:
            tg = ext.targets_least_squares(compute_scale_using_all_data=False,
                                           obs_type=obs_type,
                                           obs=obs,
                                           weights=weights,
                                           r_free_flags=r_free_flags,
                                           f_calc=flex.complex_double(a, b),
                                           derivatives_depth=2,
                                           scale_factor=scale_factor)
            if (weights is weights_2345):
                assert approx_equal(tg.scale_factor(), scale_factor)
                assert list(tg.gradients_work()) == [0j]
                assert list(tg.hessians_work()) == [(1, 1, 1)]
            else:
                assert tg.scale_factor() is None
                assert tg.target_work() is None
                assert tg.target_test() is None
                assert tg.gradients_work().size() == 0
                assert tg.hessians_work().size() == 0
Exemplo n.º 2
0
def exercise_singular_least_squares():
  obs = flex.double([1.234])
  weights_2345 = flex.double([2.345])
  weights_zero = flex.double([0])
  r_free_flags = flex.bool([False])
  a = flex.double([0])
  b = flex.double([0])
  for obs_type in ["F", "I"]:
    for weights,scale_factor in [
          (weights_2345, 3.456),
          (weights_zero, 0)]:
      tg = ext.targets_least_squares(
        compute_scale_using_all_data=False,
        obs_type=obs_type,
        obs=obs,
        weights=weights,
        r_free_flags=r_free_flags,
        f_calc=flex.complex_double(a, b),
        derivatives_depth=2,
        scale_factor=scale_factor)
      if (weights is weights_2345):
        assert approx_equal(tg.scale_factor(), scale_factor)
        assert list(tg.gradients_work()) == [0j]
        assert list(tg.hessians_work()) == [(1,1,1)]
      else:
        assert tg.scale_factor() is None
        assert tg.target_work() is None
        assert tg.target_test() is None
        assert tg.gradients_work().size() == 0
        assert tg.hessians_work().size() == 0
Exemplo n.º 3
0
 def __call__(self, f_calc, compute_gradients):
   assert f_calc.unit_cell().is_similar_to(self.f_obs.unit_cell())
   assert f_calc.space_group() == self.f_obs.space_group()
   return ext.targets_least_squares(
     compute_scale_using_all_data=self.compute_scale_using_all_data,
     obs_type="F",
     obs=self.f_obs.data(),
     weights=self.weights,
     r_free_flags=self.r_free_flags.data(),
     f_calc=f_calc.data(),
     derivatives_depth=int(compute_gradients),
     scale_factor=self.scale_factor)
Exemplo n.º 4
0
 def __call__(self, f_calc, compute_gradients):
     assert f_calc.unit_cell().is_similar_to(self.f_obs.unit_cell())
     assert f_calc.space_group() == self.f_obs.space_group()
     return ext.targets_least_squares(
         compute_scale_using_all_data=self.compute_scale_using_all_data,
         obs_type="F",
         obs=self.f_obs.data(),
         weights=self.weights,
         r_free_flags=self.r_free_flags.data(),
         f_calc=f_calc.data(),
         derivatives_depth=int(compute_gradients),
         scale_factor=self.scale_factor)
Exemplo n.º 5
0
 def get(O, derivatives_depth=0):
     if (O.target_type == "ls"):
         return ext.targets_least_squares(
             compute_scale_using_all_data=False,
             obs_type=O.obs_type,
             obs=O.obs,
             weights=O.weights,
             r_free_flags=O.r_free_flags,
             f_calc=flex.complex_double(O.a, O.b),
             derivatives_depth=derivatives_depth,
             scale_factor=O.scale_factor)
     if (O.target_type == "cc"):
         return ext.targets_correlation(obs_type=O.obs_type,
                                        obs=O.obs,
                                        weights=O.weights,
                                        r_free_flags=O.r_free_flags,
                                        f_calc=flex.complex_double(
                                            O.a, O.b),
                                        derivatives_depth=derivatives_depth)
     raise RuntimeError("Unknown target_type.")
Exemplo n.º 6
0
 def get(O, derivatives_depth=0):
   if (O.target_type == "ls"):
     return ext.targets_least_squares(
       compute_scale_using_all_data=False,
       obs_type=O.obs_type,
       obs=O.obs,
       weights=O.weights,
       r_free_flags=O.r_free_flags,
       f_calc=flex.complex_double(O.a, O.b),
       derivatives_depth=derivatives_depth,
       scale_factor=O.scale_factor)
   if (O.target_type == "cc"):
     return ext.targets_correlation(
       obs_type=O.obs_type,
       obs=O.obs,
       weights=O.weights,
       r_free_flags=O.r_free_flags,
       f_calc=flex.complex_double(O.a, O.b),
       derivatives_depth=derivatives_depth)
   raise RuntimeError("Unknown target_type.")