def test_dnde_from_flux(): """Tests y-value normalization adjustment method. """ energy_min = np.array([10, 20, 30, 40]) energy_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() energy_ref = FluxPoints._energy_ref_lafferty(model, energy_min, energy_max) dnde = FluxPoints._dnde_from_flux(flux, model, energy_ref, energy_min, energy_max, pwl_approx=False) # Set up test case comparison dnde_model = model(energy_ref) # Test comparison result desired = model.integral(energy_min, energy_max) # Test output result actual = flux * (dnde_model / dnde) # Compare assert_allclose(actual, desired, rtol=1e-6)
def test_energy_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() energy_min = np.array([0.0, 0.1, 0.3, 0.6]) energy_max = np.array([0.1, 0.3, 0.6, 1.0]) actual = FluxPoints._energy_ref_lafferty(model, energy_min, energy_max) assert_allclose(actual, desired, atol=1e-3)
def test_dnde_from_flux(): """Tests y-value normalization adjustment method. """ table = Table() table["e_min"] = np.array([10, 20, 30, 40]) table["e_max"] = np.array([20, 30, 40, 50]) table["flux"] = np.array([42, 52, 62, 72]) # 'True' integral flux in this test bin # Get values model = XSqrTestModel() table["e_ref"] = FluxPoints._energy_ref_lafferty(model, table["e_min"], table["e_max"]) dnde = FluxPoints.from_table(table, reference_model=model) # Set up test case comparison dnde_model = model(table["e_ref"]) # Test comparison result desired = model.integral(table["e_min"], table["e_max"]) # Test output result actual = table["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 a powerlaw. """ model = ExpTestModel() energy_min = [1.0, 10.0] * u.TeV energy_max = [10.0, 100.0] * u.TeV table = Table() table.meta["SED_TYPE"] = "flux" table["e_min"] = energy_min table["e_max"] = energy_max flux = model.integral(energy_min, energy_max) table["flux"] = flux if method == "log_center": energy_ref = np.sqrt(energy_min * energy_max) elif method == "table": energy_ref = [2.0, 20.0] * u.TeV elif method == "lafferty": energy_ref = FluxPoints._energy_ref_lafferty(model, energy_min, energy_max) table["e_ref"] = energy_ref result = FluxPoints.from_table(table, reference_model=model) # Test energy actual = result.energy_ref assert_quantity_allclose(actual, energy_ref, rtol=1e-8) # Test flux actual = result.dnde desired = model(energy_ref) assert_quantity_allclose(actual, desired, rtol=1e-8)