Esempio n. 1
0
def test_error_model_target(large_reflection_table, test_sg):
    """Test the error model target."""
    Ih_table = IhTable([large_reflection_table], test_sg, nblocks=1)
    block = Ih_table.blocked_data_list[0]
    em = BasicErrorModel
    em.min_reflections_required = 1
    params = generated_param()
    params.weighting.error_model.basic.n_bins = 2
    params.weighting.error_model.basic.min_Ih = 1.0
    error_model = em(basic_params=params.weighting.error_model.basic)
    error_model.configure_for_refinement(block)
    error_model.parameters = [1.0, 0.05]
    parameterisation = ErrorModelB_APM(error_model)
    target = ErrorModelTargetB(error_model)
    target.predict(parameterisation)
    # Test residual calculation
    residuals = target.calculate_residuals(parameterisation)
    assert residuals == (
        flex.double(2, 1.0) -
        flex.pow2(error_model.binner.binning_info["bin_variances"]))

    # Test gradient calculation against finite differences.
    gradients = target.calculate_gradients(parameterisation)
    gradient_fd = calculate_gradient_fd(target, parameterisation)
    assert list(gradients) == pytest.approx(list(gradient_fd))

    # Test the method calls
    r, g = target.compute_functional_gradients(parameterisation)
    assert r == residuals
    assert list(gradients) == pytest.approx(list(g))
    r, g = target.compute_functional_gradients(parameterisation)
    assert r == residuals
    assert list(gradients) == pytest.approx(list(g))
Esempio n. 2
0
 def _refine_b(self):
     parameterisation = ErrorModelB_APM(self.model)
     self._refine_component(self.model, ErrorModelTargetB(self.model),
                            parameterisation)