def test_flux_estimator_fermi_no_reoptimization(fermi_datasets): estimator = FluxEstimator( 0, norm_n_values=5, norm_min=0.5, norm_max=2, selection_optional="all", reoptimize=False ) datasets = fermi_datasets.slice_by_energy( energy_min="1 GeV", energy_max="100 GeV" ) datasets.models = fermi_datasets.models result = estimator.run(datasets) assert_allclose(result["norm"], 0.98949, atol=1e-3) assert_allclose(result["ts"], 25083.75408, rtol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3) assert_allclose(result["norm_errn"], 0.0199, atol=1e-3) assert_allclose(result["norm_errp"], 0.0199, atol=1e-3) assert len(result["norm_scan"]) == 5 assert_allclose(result["norm_scan"][0], 0.5) assert_allclose(result["norm_scan"][-1], 2) assert_allclose(result["e_min"], 10 * u.GeV, atol=1e-3) assert_allclose(result["e_max"], 83.255 * u.GeV, atol=1e-3)
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets): estimator = FluxEstimator(0, energy_range=["1 GeV", "100 GeV"], reoptimize=True) result = estimator.run(fermi_datasets, steps=["err", "ts"]) assert_allclose(result["norm"], 0.970614, atol=1e-3) assert_allclose(result["ts"], 13005.903067, atol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
def test_flux_estimator_1d(hess_datasets): estimator = FluxEstimator(hess_datasets, source="Crab") result = estimator.run('1 TeV', '10 TeV', steps=["ts", "errp-errn", "ul"]) assert_allclose(result["norm"], 1.176789, atol=1e-3) assert_allclose(result["delta_ts"], 693.111777, atol=1e-3) assert_allclose(result["err"], 0.078087, atol=1e-3) assert_allclose(result["errn"], 0.078046, atol=1e-3) assert_allclose(result["errp"], 0.081665, atol=1e-3) assert_allclose(result["ul"], 1.431722, atol=1e-3)
def test_flux_estimator_1d(hess_datasets): estimator = FluxEstimator(source="Crab", energy_range=[1, 10] * u.TeV) result = estimator.run(hess_datasets, steps=["err", "ts", "errp-errn", "ul"]) assert_allclose(result["norm"], 1.176789, atol=1e-3) assert_allclose(result["ts"], 693.111777, atol=1e-3) assert_allclose(result["norm_err"], 0.078087, atol=1e-3) assert_allclose(result["norm_errn"], 0.078046, atol=1e-3) assert_allclose(result["norm_errp"], 0.081665, atol=1e-3) assert_allclose(result["norm_ul"], 1.431722, atol=1e-3)
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets): estimator = FluxEstimator(0, energy_min="1 GeV", energy_max="100 GeV", selection_optional=None, reoptimize=True) result = estimator.run(fermi_datasets) assert_allclose(result["norm"], 0.989989, atol=1e-3) assert_allclose(result["ts"], 18729.907481, rtol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets): estimator = FluxEstimator(0, e_min="1 GeV", e_max="100 GeV", reoptimize=True, selection_optional=None) result = estimator.run(fermi_datasets) assert_allclose(result["norm"], 1.010983, atol=1e-3) assert_allclose(result["ts"], 20896.1864, atol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets): estimator = FluxEstimator(0, selection_optional=None, reoptimize=True) datasets = fermi_datasets.slice_by_energy(energy_min="1 GeV", energy_max="100 GeV") datasets.models = fermi_datasets.models result = estimator.run(datasets) assert_allclose(result["norm"], 0.989989, atol=1e-3) assert_allclose(result["ts"], 18729.368105, rtol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
def test_flux_estimator_incorrect_energy_range(fermi_datasets): with pytest.raises(ValueError): FluxEstimator(source="Crab", energy_min=10 * u.TeV, energy_max=1 * u.TeV) fe = FluxEstimator(source="Crab Nebula", energy_min=0.18 * u.TeV, energy_max=0.2 * u.TeV) result = fe.run(fermi_datasets) assert np.isnan(result["norm"])
def test_flux_estimator_1d(hess_datasets): estimator = FluxEstimator(source="Crab", e_min=1 * u.TeV, e_max=10 * u.TeV, selection_optional=["errn-errp", "ul"]) result = estimator.run(hess_datasets) assert_allclose(result["norm"], 1.176789, atol=1e-3) assert_allclose(result["ts"], 693.111777, atol=1e-3) assert_allclose(result["norm_err"], 0.078087, atol=1e-3) assert_allclose(result["norm_errn"], 0.078046, atol=1e-3) assert_allclose(result["norm_errp"], 0.081665, atol=1e-3) assert_allclose(result["norm_ul"], 1.431722, atol=1e-3)
def test_flux_estimator_1d(hess_datasets): estimator = FluxEstimator( source="Crab", energy_min=1 * u.TeV, energy_max=10 * u.TeV, selection_optional=["errn-errp", "ul"], ) result = estimator.run(hess_datasets) assert_allclose(result["norm"], 1.218139, atol=1e-3) assert_allclose(result["ts"], 527.492959, atol=1e-3) assert_allclose(result["norm_err"], 0.095496, atol=1e-3) assert_allclose(result["norm_errn"], 0.093204, atol=1e-3) assert_allclose(result["norm_errp"], 0.097818, atol=1e-3) assert_allclose(result["norm_ul"], 1.525773, atol=1e-3) assert_allclose(result["e_min"], 1 * u.TeV, atol=1e-3) assert_allclose(result["e_max"], 10 * u.TeV, atol=1e-3)
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets): estimator = FluxEstimator(fermi_datasets, 0, norm_n_values=5, norm_min=0.5, norm_max=2, reoptimize=False) result = estimator.run("1 GeV", "100 GeV") assert_allclose(result["norm"], 0.970614, atol=1e-3) assert_allclose(result["delta_ts"], 29695.720611, atol=1e-3) assert_allclose(result["err"], 0.01998, atol=1e-3) assert_allclose(result["errn"], 0.0199, atol=1e-3) assert_allclose(result["errp"], 0.0199, atol=1e-3) assert len(result["norm_scan"]) == 5 assert_allclose(result["norm_scan"][0], 0.5) assert_allclose(result["norm_scan"][-1], 2)
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets): for dataset in hess_datasets: dataset.models = fermi_datasets.models datasets = Datasets() datasets.extend(fermi_datasets) datasets.extend(hess_datasets) estimator = FluxEstimator(source="Crab Nebula", e_min=1 * u.TeV, e_max=10 * u.TeV, selection_optional=None) result = estimator.run(datasets) assert_allclose(result["norm"], 1.022802, atol=1e-3) assert_allclose(result["ts"], 21584.515969, atol=1e-3) assert_allclose(result["norm_err"], 0.01966, atol=1e-3)
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets): estimator = FluxEstimator( 0, energy_range=["1 GeV", "100 GeV"], norm_n_values=5, norm_min=0.5, norm_max=2, reoptimize=False, ) result = estimator.run(fermi_datasets) assert_allclose(result["norm"], 0.970614, atol=1e-3) assert_allclose(result["ts"], 29695.689216, atol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3) assert_allclose(result["norm_errn"], 0.0199, atol=1e-3) assert_allclose(result["norm_errp"], 0.0199, atol=1e-3) assert len(result["norm_scan"]) == 5 assert_allclose(result["norm_scan"][0], 0.5) assert_allclose(result["norm_scan"][-1], 2)
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets): estimator = FluxEstimator( 0, e_min="1 GeV", e_max="100 GeV", norm_n_values=5, norm_min=0.5, norm_max=2, reoptimize=False, ) result = estimator.run(fermi_datasets) assert_allclose(result["norm"], 1.010983, atol=1e-3) assert_allclose(result["ts"], 28086.565, atol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3) assert_allclose(result["norm_errn"], 0.0199, atol=1e-3) assert_allclose(result["norm_errp"], 0.0199, atol=1e-3) assert len(result["norm_scan"]) == 5 assert_allclose(result["norm_scan"][0], 0.5) assert_allclose(result["norm_scan"][-1], 2)
def test_flux_estimator_1d(hess_datasets): estimator = FluxEstimator( source="Crab", selection_optional=["errn-errp", "ul"], reoptimize=False ) datasets = hess_datasets.slice_by_energy( energy_min=1 * u.TeV, energy_max=10 * u.TeV, ) datasets.models = hess_datasets.models result = estimator.run(datasets) assert_allclose(result["norm"], 1.218139, atol=1e-3) assert_allclose(result["ts"], 527.492959, atol=1e-3) assert_allclose(result["norm_err"], 0.095496, atol=1e-3) assert_allclose(result["norm_errn"], 0.093204, atol=1e-3) assert_allclose(result["norm_errp"], 0.097818, atol=1e-3) assert_allclose(result["norm_ul"], 1.418475, atol=1e-3) assert_allclose(result["e_min"], 1 * u.TeV, atol=1e-3) assert_allclose(result["e_max"], 10 * u.TeV, atol=1e-3)
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets): datasets = Datasets() datasets.extend(fermi_datasets) datasets.extend(hess_datasets) datasets = datasets.slice_by_energy( energy_min=1 * u.TeV, energy_max=10 * u.TeV, ) datasets.models = fermi_datasets.models estimator = FluxEstimator(source="Crab Nebula", selection_optional=[], reoptimize=True) result = estimator.run(datasets) assert_allclose(result["norm"], 1.190622, atol=1e-3) assert_allclose(result["ts"], 612.50171, atol=1e-3) assert_allclose(result["norm_err"], 0.090744, atol=1e-3) assert_allclose(result["e_min"], 0.693145 * u.TeV, atol=1e-3) assert_allclose(result["e_max"], 10 * u.TeV, atol=1e-3)
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets): estimator = FluxEstimator( 0, energy_min="1 GeV", energy_max="100 GeV", norm_n_values=5, norm_min=0.5, norm_max=2, reoptimize=False, ) result = estimator.run(fermi_datasets) assert_allclose(result["norm"], 0.982434, atol=1e-3) assert_allclose(result["ts"], 23856.262603, atol=1e-3) assert_allclose(result["norm_err"], 0.01998, atol=1e-3) assert_allclose(result["norm_errn"], 0.0199, atol=1e-3) assert_allclose(result["norm_errp"], 0.0199, atol=1e-3) assert len(result["norm_scan"]) == 5 assert_allclose(result["norm_scan"][0], 0.5) assert_allclose(result["norm_scan"][-1], 2) assert_allclose(result["e_min"], 10 * u.GeV, atol=1e-3) assert_allclose(result["e_max"], 83.255 * u.GeV, atol=1e-3)
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets): for dataset in hess_datasets: dataset.models = fermi_datasets.models datasets = Datasets() datasets.extend(fermi_datasets) datasets.extend(hess_datasets) estimator = FluxEstimator( source="Crab Nebula", energy_min=1 * u.TeV, energy_max=10 * u.TeV, selection_optional=None, ) result = estimator.run(datasets) assert_allclose(result["norm"], 1.190622, atol=1e-3) assert_allclose(result["ts"], 612.500392, atol=1e-3) assert_allclose(result["norm_err"], 0.090744, atol=1e-3) assert_allclose(result["e_min"], 0.693145 * u.TeV, atol=1e-3) assert_allclose(result["e_max"], 2 * u.TeV, atol=1e-3)
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets): fermi_datasets.append(hess_datasets[0]) with pytest.raises(ValueError): estimator = FluxEstimator(source=0, energy_range=[1, 10] * u.TeV) estimator.run(fermi_datasets)