def test_analysis_1d_stacked(): cfg = """ datasets: geom: axes: energy_true: {min: 0.03 TeV, max: 100 TeV, nbins: 50} background: method: reflected """ config = get_example_config("1d") analysis = Analysis(config) analysis.update_config(cfg) analysis.config.datasets.stack = True analysis.get_observations() analysis.get_datasets() analysis.read_models(MODEL_FILE_1D) analysis.run_fit() assert len(analysis.datasets) == 1 assert_allclose(analysis.datasets["stacked"].counts.data.sum(), 184) pars = analysis.fit_result.parameters assert_allclose(pars["index"].value, 2.76913, rtol=1e-2) assert_allclose(pars["amplitude"].value, 5.496388e-11, rtol=1e-2)
def test_geom_analysis_1d(): cfg = """ observations: datastore: $GAMMAPY_DATA/hess-dl3-dr1 obs_ids: [23523] datasets: type: 1d background: method: reflected on_region: {frame: icrs, lon: 83.633 deg, lat: 22.014 deg, radius: 0.11 deg} geom: axes: energy: {min: 0.1 TeV, max: 30 TeV, nbins: 20} energy_true: {min: 0.03 TeV, max: 100 TeV, nbins: 50} containment_correction: false flux_points: energy: {min: 1 TeV, max: 50 TeV, nbins: 4} """ config = get_example_config("1d") analysis = Analysis(config) analysis.update_config(cfg) analysis.get_observations() analysis.get_datasets() assert len(analysis.datasets) == 1 axis = analysis.datasets[0].exposure.geom.axes["energy_true"] assert axis.nbin == 50 assert_allclose(axis.edges[0].to_value("TeV"), 0.03) assert_allclose(axis.edges[-1].to_value("TeV"), 100)
def test_analysis_1d(): cfg = """ observations: datastore: $GAMMAPY_DATA/hess-dl3-dr1 obs_ids: [23523, 23526] obs_time: { start: [J2004.92654346, J2004.92658453, J2004.92663655], stop: [J2004.92658453, J2004.92663655, J2004.92670773] } datasets: type: 1d background: method: reflected geom: axes: energy_true: {min: 0.01 TeV, max: 300 TeV, nbins: 109} on_region: {frame: icrs, lon: 83.633 deg, lat: 22.014 deg, radius: 0.11 deg} safe_mask: methods: [aeff-default, edisp-bias] parameters: {bias_percent: 10.0} containment_correction: false flux_points: energy: {min: 1 TeV, max: 50 TeV, nbins: 4} light_curve: energy_edges: {min: 1 TeV, max: 50 TeV, nbins: 1} time_intervals: { start: [J2004.92654346, J2004.92658453, J2004.92663655], stop: [J2004.92658453, J2004.92663655, J2004.92670773] } """ config = get_example_config("1d") analysis = Analysis(config) analysis.update_config(cfg) analysis.get_observations() analysis.get_datasets() analysis.read_models(MODEL_FILE_1D) analysis.run_fit() analysis.get_flux_points() analysis.get_light_curve() assert len(analysis.datasets) == 3 table = analysis.flux_points.data.to_table(sed_type="dnde") assert len(table) == 4 dnde = table["dnde"].quantity assert dnde.unit == "cm-2 s-1 TeV-1" assert_allclose(dnde[0].value, 8.116854e-12, rtol=1e-2) assert_allclose(dnde[2].value, 3.444475e-14, rtol=1e-2) axis = analysis.light_curve.geom.axes["time"] assert axis.nbin == 3 assert_allclose(axis.time_min.mjd, [53343.92, 53343.935, 53343.954]) flux = analysis.light_curve.flux.data[:, :, 0, 0] assert_allclose(flux, [[1.688954e-11], [2.347870e-11], [1.604152e-11]], rtol=1e-4)
def test_analysis_1d_stacked_no_fit_range(): cfg = """ observations: datastore: $GAMMAPY_DATA/hess-dl3-dr1 obs_cone: {frame: icrs, lon: 83.633 deg, lat: 22.014 deg, radius: 5 deg} obs_ids: [23592, 23559] datasets: type: 1d stack: false geom: axes: energy: {min: 0.01 TeV, max: 100 TeV, nbins: 73} energy_true: {min: 0.03 TeV, max: 100 TeV, nbins: 50} on_region: {frame: icrs, lon: 83.633 deg, lat: 22.014 deg, radius: 0.1 deg} containment_correction: true background: method: reflected """ config = AnalysisConfig.from_yaml(cfg) analysis = Analysis(config) analysis.update_config(cfg) analysis.config.datasets.stack = True analysis.get_observations() analysis.get_datasets() analysis.read_models(MODEL_FILE_1D) analysis.run_fit() with pytest.raises(ValueError): analysis.get_excess_map() assert len(analysis.datasets) == 1 assert_allclose(analysis.datasets["stacked"].counts.data.sum(), 184) pars = analysis.models.parameters assert_allclose(analysis.datasets[0].mask_fit.data, True) assert_allclose(pars["index"].value, 2.76913, rtol=1e-2) assert_allclose(pars["amplitude"].value, 5.479729e-11, rtol=1e-2)
def test_analysis_1d(): cfg = """ observations: datastore: $GAMMAPY_DATA/hess-dl3-dr1 obs_ids: [23523, 23526] datasets: type: 1d background: method: reflected geom: axes: energy_true: {min: 0.01 TeV, max: 300 TeV, nbins: 109} on_region: {frame: icrs, lon: 83.633 deg, lat: 22.014 deg, radius: 0.11 deg} safe_mask: methods: [aeff-default, edisp-bias] parameters: {bias_percent: 10.0} containment_correction: false flux_points: energy: {min: 1 TeV, max: 50 TeV, nbins: 4} """ config = get_example_config("1d") analysis = Analysis(config) analysis.update_config(cfg) analysis.get_observations() analysis.get_datasets() analysis.read_models(MODEL_FILE_1D) analysis.run_fit() analysis.get_flux_points() assert len(analysis.datasets) == 2 assert len(analysis.flux_points.data.table) == 4 dnde = analysis.flux_points.data.table["dnde"].quantity assert dnde.unit == "cm-2 s-1 TeV-1" assert_allclose(dnde[0].value, 8.116854e-12, rtol=1e-2) assert_allclose(dnde[2].value, 3.547128e-14, rtol=1e-2)
def test_update_config(): analysis = Analysis(AnalysisConfig()) data = {"general": {"outdir": "test"}} config = AnalysisConfig(**data) analysis.update_config(config) assert analysis.config.general.outdir == "test" analysis = Analysis(AnalysisConfig()) data = """ general: outdir: test """ analysis.update_config(data) assert analysis.config.general.outdir == "test" analysis = Analysis(AnalysisConfig()) with pytest.raises(TypeError): analysis.update_config(0)