def test_dnde_from_flux(): """Tests y-value normalization adjustment method. """ e_min = np.array([10, 20, 30, 40]) e_max = np.array([20, 30, 40, 50]) flux = np.array([42, 52, 62, 72]) # 'True' integral flux in this test bin # Get values model = XSqrTestModel() e_ref = FluxPoints._e_ref_lafferty(model, e_min, e_max) dnde = FluxPoints._dnde_from_flux(flux, model, e_ref, e_min, e_max, pwl_approx=False) # Set up test case comparison dnde_model = model(e_ref) # Test comparison result desired = model.integral(e_min, e_max) # Test output result actual = flux * (dnde_model / dnde) # Compare assert_allclose(actual, desired, rtol=1e-6)
def test_compute_flux_points_dnde_exp(method): """ Tests against analytical result or result from gammapy.spectrum.powerlaw. """ model = ExpTestModel() e_min = [1.0, 10.0] * u.TeV e_max = [10.0, 100.0] * u.TeV table = Table() table.meta["SED_TYPE"] = "flux" table["e_min"] = e_min table["e_max"] = e_max flux = model.integral(e_min, e_max) table["flux"] = flux if method == "log_center": e_ref = np.sqrt(e_min * e_max) elif method == "table": e_ref = [2.0, 20.0] * u.TeV table["e_ref"] = e_ref elif method == "lafferty": e_ref = FluxPoints._e_ref_lafferty(model, e_min, e_max) result = FluxPoints(table).to_sed_type("dnde", model=model, method=method) # Test energy actual = result.e_ref assert_quantity_allclose(actual, e_ref, rtol=1e-8) # Test flux actual = result.table["dnde"].quantity desired = model(e_ref) assert_quantity_allclose(actual, desired, rtol=1e-8)
def test_e_ref_lafferty(): """ Tests Lafferty & Wyatt x-point method. Using input function g(x) = 10^4 exp(-6x) against check values from paper Lafferty & Wyatt. Nucl. Instr. and Meth. in Phys. Res. A 355 (1995) 541-547, p. 542 Table 1 """ # These are the results from the paper desired = np.array([0.048, 0.190, 0.428, 0.762]) model = LWTestModel() e_min = np.array([0.0, 0.1, 0.3, 0.6]) e_max = np.array([0.1, 0.3, 0.6, 1.0]) actual = FluxPoints._e_ref_lafferty(model, e_min, e_max) assert_allclose(actual, desired, atol=1e-3)