def setup(self): path = "$GAMMAPY_DATA/joint-crab/spectra/hess/" self.datasets = Datasets( [ SpectrumDatasetOnOff.read(path + "pha_obs23523.fits"), SpectrumDatasetOnOff.read(path + "pha_obs23592.fits"), ] ) self.pwl = SkyModel( spectral_model=PowerLawSpectralModel( index=2, amplitude=1e-12 * u.Unit("cm-2 s-1 TeV-1"), reference=1 * u.TeV ) ) self.ecpl = SkyModel( spectral_model=ExpCutoffPowerLawSpectralModel( index=2, amplitude=1e-12 * u.Unit("cm-2 s-1 TeV-1"), reference=1 * u.TeV, lambda_=0.1 / u.TeV, ) ) # Example fit for one observation self.datasets[0].models = self.pwl self.fit = Fit([self.datasets[0]])
def test_datasets_stack_reduce_no_off(): datasets = Datasets() obs_ids = [23523, 23526, 23559, 23592] for obs_id in obs_ids: filename = f"$GAMMAPY_DATA/joint-crab/spectra/hess/pha_obs{obs_id}.fits" ds = SpectrumDatasetOnOff.read(filename) datasets.append(ds) datasets[-1].counts_off = None with pytest.raises(ValueError): stacked = datasets.stack_reduce(name="stacked") datasets[-1].mask_safe.data[...] = False stacked = datasets.stack_reduce(name="stacked") assert_allclose(stacked.exposure.meta["livetime"].to_value("s"), 4732.5469999) assert stacked.counts == 369 datasets[0].mask_safe.data[...] = False stacked = datasets.stack_reduce(name="stacked") assert_allclose(stacked.exposure.meta["livetime"].to_value("s"), 3150.81024152) assert stacked.counts == 245
def test_to_from_ogip_files_no_mask(self, tmp_path): dataset = self.dataset.copy(name="test") dataset.mask_safe = None dataset.write(tmp_path / "test.fits") newdataset = SpectrumDatasetOnOff.read(tmp_path / "test.fits") assert_allclose(newdataset.mask_safe.data, True)
def test_to_from_ogip_files_zip(self, tmp_path): dataset = self.dataset.copy(name="test") dataset.write(tmp_path / "test.fits.gz") newdataset = SpectrumDatasetOnOff.read(tmp_path / "test.fits.gz") assert newdataset.counts.meta["RESPFILE"] == "test_rmf.fits.gz" assert newdataset.counts.meta["BACKFILE"] == "test_bkg.fits.gz" assert newdataset.counts.meta["ANCRFILE"] == "test_arf.fits.gz"
def hess_datasets(): datasets = Datasets([]) pwl = PowerLawSpectralModel(amplitude="3.5e-11 cm-2s-1TeV-1", index=2.7) model = SkyModel(spectral_model=pwl, name="Crab") for obsid in [23523, 23526]: dataset = SpectrumDatasetOnOff.read( f"$GAMMAPY_DATA/joint-crab/spectra/hess/pha_obs{obsid}.fits") dataset.models = model datasets.append(dataset) return datasets
def test_stack_livetime(): dataset_ref = SpectrumDatasetOnOff.read( "$GAMMAPY_DATA/joint-crab/spectra/hess/pha_obs23523.fits") energy_axis = dataset_ref.counts.geom.axes["energy"] energy_axis_true = dataset_ref.exposure.geom.axes["energy_true"] geom = RegionGeom(region=None, axes=[energy_axis]) dataset = SpectrumDatasetOnOff.create(geom=geom, energy_axis_true=energy_axis_true) dataset.stack(dataset_ref) assert_allclose(dataset.exposure.meta["livetime"], 1581.736758 * u.s) dataset.stack(dataset_ref) assert_allclose(dataset.exposure.meta["livetime"], 2 * 1581.736758 * u.s)
def test_datasets_stack_reduce(): datasets = Datasets() obs_ids = [23523, 23526, 23559, 23592] for obs_id in obs_ids: filename = f"$GAMMAPY_DATA/joint-crab/spectra/hess/pha_obs{obs_id}.fits" ds = SpectrumDatasetOnOff.read(filename) datasets.append(ds) stacked = datasets.stack_reduce(name="stacked") assert_allclose(stacked.exposure.meta["livetime"].to_value("s"), 6313.8116406202325) info_table = datasets.info_table() assert_allclose(info_table["counts"], [124, 126, 119, 90]) info_table_cum = datasets.info_table(cumulative=True) assert_allclose(info_table_cum["counts"], [124, 250, 369, 459]) assert stacked.name == "stacked"
def test_to_from_ogip_files(self, tmp_path): dataset = self.dataset.copy(name="test") dataset.write(tmp_path / "test.fits") newdataset = SpectrumDatasetOnOff.read(tmp_path / "test.fits") expected_regions = compound_region_to_list(self.off_counts.geom.region) regions = compound_region_to_list(newdataset.counts_off.geom.region) assert newdataset.counts.meta["RESPFILE"] == "test_rmf.fits" assert newdataset.counts.meta["BACKFILE"] == "test_bkg.fits" assert newdataset.counts.meta["ANCRFILE"] == "test_arf.fits" assert_allclose(self.on_counts.data, newdataset.counts.data) assert_allclose(self.off_counts.data, newdataset.counts_off.data) assert_allclose(self.edisp.edisp_map.data, newdataset.edisp.edisp_map.data) assert_time_allclose(newdataset.gti.time_start, dataset.gti.time_start) assert len(regions) == len(expected_regions) assert regions[0].center.is_equivalent_frame(expected_regions[0].center) assert_allclose(regions[1].angle, expected_regions[1].angle)
def test_to_from_ogip_files_no_edisp(self, tmp_path): mask_safe = RegionNDMap.from_geom(self.on_counts.geom, dtype=bool) mask_safe.data += True exposure = self.aeff * self.livetime exposure.meta["livetime"] = self.livetime dataset = SpectrumDatasetOnOff( counts=self.on_counts, exposure=exposure, mask_safe=mask_safe, acceptance=1, name="test", ) dataset.write(tmp_path / "pha_obstest.fits") newdataset = SpectrumDatasetOnOff.read(tmp_path / "pha_obstest.fits") assert_allclose(self.on_counts.data, newdataset.counts.data) assert newdataset.counts_off is None assert newdataset.edisp is None assert newdataset.gti is None
def _read_hess_obs(): path = "$GAMMAPY_DATA/joint-crab/spectra/hess/" obs1 = SpectrumDatasetOnOff.read(path + "pha_obs23523.fits") obs2 = SpectrumDatasetOnOff.read(path + "pha_obs23592.fits") return [obs1, obs2]
def crab_datasets_1d(): filename = "$GAMMAPY_DATA/joint-crab/spectra/hess/pha_obs23523.fits" dataset = SpectrumDatasetOnOff.read(filename) datasets = Datasets([dataset]) return datasets