def test_extended_gauss(): mu1 = Parameter("mu11", 1.0) mu2 = Parameter("mu21", 12.0) mu3 = Parameter("mu31", 3.0) sigma1 = Parameter("sigma11", 1.0) sigma2 = Parameter("sigma21", 12.0) sigma3 = Parameter("sigma31", 33.0) yield1 = Parameter("yield11", 150.0) yield2 = Parameter("yield21", 550.0) yield3 = Parameter("yield31", 2500.0) gauss1 = Gauss(mu=mu1, sigma=sigma1, obs=obs1, name="gauss11") gauss2 = Gauss(mu=mu2, sigma=sigma2, obs=obs1, name="gauss21") gauss3 = Gauss(mu=mu3, sigma=sigma3, obs=obs1, name="gauss31") gauss1 = gauss1.create_extended(yield1) gauss2 = gauss2.create_extended(yield2) gauss3 = gauss3.create_extended(yield3) gauss_dists = [gauss1, gauss2, gauss3] sum_gauss = SumPDF(pdfs=gauss_dists) integral_true = (sum_gauss.integrate((-1, 5), ) * sum_gauss.get_yield()) assert zfit.run(integral_true) == pytest.approx( zfit.run(sum_gauss.ext_integrate((-1, 5), ))) normalization_testing(pdf=sum_gauss, limits=obs1)
def test_extended_gauss(): with tf.name_scope("gauss_params2"): mu1 = Parameter("mu11", 1.) mu2 = Parameter("mu21", 12.) mu3 = Parameter("mu31", 3.) sigma1 = Parameter("sigma11", 1.) sigma2 = Parameter("sigma21", 12.) sigma3 = Parameter("sigma31", 33.) yield1 = Parameter("yield11", 150.) yield2 = Parameter("yield21", 550.) yield3 = Parameter("yield31", 2500.) sum_yields = 150 + 550 + 2500 gauss1 = Gauss(mu=mu1, sigma=sigma1, obs=obs1, name="gauss11") gauss2 = Gauss(mu=mu2, sigma=sigma2, obs=obs1, name="gauss21") gauss3 = Gauss(mu=mu3, sigma=sigma3, obs=obs1, name="gauss31") gauss1 = gauss1.create_extended(yield1) gauss2 = gauss2.create_extended(yield2) gauss3 = gauss3.create_extended(yield3) gauss_dists = [gauss1, gauss2, gauss3] sum_gauss = SumPDF( pdfs=gauss_dists, obs=obs1, ) normalization_testing(pdf=sum_gauss, normalization_value=sum_yields)
def create_gauss3ext(): mu, sigma, yield3 = create_params3() gaussian3 = Gauss(mu, sigma, obs=obs1, name="gaussian3") gaussian3 = gaussian3.create_extended(yield3) return gaussian3, mu, sigma, yield3
sigma1 = Parameter("sigma1", ztf.to_real(sigma_true) - 0.3, sigma_true - 2., sigma_true + 2.) mu2 = Parameter("mu25", ztf.to_real(mu_true) - 0.2, mu_true - 1., mu_true + 1.) sigma2 = Parameter("sigma25", ztf.to_real(sigma_true) - 0.3, sigma_true - 2., sigma_true + 2.) mu3 = Parameter("mu35", ztf.to_real(mu_true) - 0.2, mu_true - 1., mu_true + 1.) sigma3 = Parameter("sigma35", ztf.to_real(sigma_true) - 0.3, sigma_true - 2., sigma_true + 2.) yield3 = Parameter("yield35", yield_true + 300, 0, yield_true + 20000) obs1 = 'obs1' mu_constr = [1.6, 0.2] # mu, sigma sigma_constr = [3.8, 0.2] gaussian1 = Gauss(mu1, sigma1, obs=obs1, name="gaussian1") gaussian2 = Gauss(mu2, sigma2, obs=obs1, name="gaussian2") gaussian3 = Gauss(mu3, sigma3, obs=obs1, name="gaussian3") gaussian3 = gaussian3.create_extended(yield3) def test_extended_unbinned_nll(): test_values = ztf.constant(test_values_np) test_values = zfit.data.Data.from_tensor(obs=obs1, tensor=test_values) nll_object = zfit.loss.ExtendedUnbinnedNLL(model=gaussian3, data=test_values, fit_range=(-20, 20)) minimizer = MinuitMinimizer() status = minimizer.minimize(loss=nll_object, params=[mu3, sigma3, yield3]) params = status.params assert params[mu3]['value'] == pytest.approx(np.mean(test_values_np), rel=0.005) assert params[sigma3]['value'] == pytest.approx(np.std(test_values_np), rel=0.005) assert params[yield3]['value'] == pytest.approx(yield_true, rel=0.005)