def data_reduction(instrument): log.info(f"data_reduction: {instrument}") config = AnalysisConfig.read(f"config.yaml") config.observations.datastore = f"$JOINT_CRAB/data/{instrument}" config.datasets.stack = instrument_opts[instrument]['stack'] config.datasets.containment_correction = instrument_opts[instrument][ 'containment'] config.datasets.on_region.radius = instrument_opts[instrument]['on_radius'] analysis = Analysis(config) analysis.get_observations() analysis.get_datasets() # TODO remove when safe mask can be set on config if instrument is 'fact': from gammapy.datasets import SpectrumDatasetOnOff stacked = SpectrumDatasetOnOff.create( e_reco=analysis.datasets[0]._energy_axis.edges, e_true=analysis.datasets[0]._energy_axis.edges, region=None) for ds in analysis.datasets: ds.mask_safe[:] = True stacked.stack(ds) analysis.datasets = Datasets([stacked]) analysis.datasets.write(f"reduced_{instrument}", overwrite=True)
def test_create_stack(self): geom = RegionGeom(region=None, axes=[self.e_reco]) stacked = SpectrumDatasetOnOff.create(geom=geom, energy_axis_true=self.e_true) stacked.mask_safe.data += True stacked.stack(self.dataset) assert_allclose(stacked.energy_range.value, self.dataset.energy_range.value)
def test_stack_livetime(): dataset_ref = SpectrumDatasetOnOff.from_ogip_files( "$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"] dataset = SpectrumDatasetOnOff.create(e_reco=energy_axis, e_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_spectrumdatasetonoff_create(self): e_reco = u.Quantity([0.1, 1, 10.0], "TeV") e_true = u.Quantity([0.05, 0.5, 5, 20.0], "TeV") empty_dataset = SpectrumDatasetOnOff.create(e_reco, e_true) assert empty_dataset.counts.data.sum() == 0 assert empty_dataset.data_shape[0] == 2 assert empty_dataset.counts_off.data.sum() == 0 assert empty_dataset.counts_off.geom.axes[0].nbin == 2 assert_allclose(empty_dataset.acceptance_off, 1) assert_allclose(empty_dataset.acceptance, 1) assert empty_dataset.acceptance.data.shape[0] == 2 assert empty_dataset.acceptance_off.data.shape[0] == 2 assert empty_dataset.livetime.value == 0 assert len(empty_dataset.gti.table) == 0 assert empty_dataset.energy_range[0] is None
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_spectrum_dataset_on_off_create(self): e_reco = MapAxis.from_edges(u.Quantity([0.1, 1, 10.0], "TeV"), name="energy") e_true = MapAxis.from_edges(u.Quantity([0.05, 0.5, 5, 20.0], "TeV"), name="energy_true") empty_dataset = SpectrumDatasetOnOff.create(e_reco, e_true) assert empty_dataset.counts.data.sum() == 0 assert empty_dataset.data_shape[0] == 2 assert empty_dataset.counts_off.data.sum() == 0 assert empty_dataset.counts_off.geom.axes[0].nbin == 2 assert_allclose(empty_dataset.acceptance_off, 1) assert_allclose(empty_dataset.acceptance, 1) assert empty_dataset.acceptance.data.shape[0] == 2 assert empty_dataset.acceptance_off.data.shape[0] == 2 assert empty_dataset.gti.time_sum.value == 0 assert len(empty_dataset.gti.table) == 0 assert empty_dataset.energy_range[0] is None
def test_create_stack(self): stacked = SpectrumDatasetOnOff.create(self.e_reco, self.e_true) stacked.stack(self.dataset) assert_allclose(stacked.energy_range.value, self.dataset.energy_range.value)
def data_prep(): data_store = DataStore.from_dir("$GAMMAPY_DATA/hess-dl3-dr1/") OBS_ID = 23523 obs_ids = OBS_ID * np.ones(N_OBS) observations = data_store.get_observations(obs_ids) target_position = SkyCoord(ra=83.63, dec=22.01, unit="deg", frame="icrs") on_region_radius = Angle("0.11 deg") on_region = CircleSkyRegion(center=target_position, radius=on_region_radius) exclusion_region = CircleSkyRegion( center=SkyCoord(183.604, -8.708, unit="deg", frame="galactic"), radius=0.5 * u.deg, ) skydir = target_position.galactic exclusion_mask = Map.create(npix=(150, 150), binsz=0.05, skydir=skydir, proj="TAN", frame="galactic") mask = exclusion_mask.geom.region_mask([exclusion_region], inside=False) exclusion_mask.data = mask e_reco = MapAxis.from_bounds(0.1, 40, nbin=40, interp="log", unit="TeV", name="energy") e_true = MapAxis.from_bounds(0.05, 100, nbin=200, interp="log", unit="TeV", name="energy_true") stacked = SpectrumDatasetOnOff.create(region=on_region, e_reco=e_reco, e_true=e_true, name="stacked") dataset_maker = SpectrumDatasetMaker(containment_correction=False, selection=["counts", "aeff", "edisp"]) bkg_maker = ReflectedRegionsBackgroundMaker(exclusion_mask=exclusion_mask) safe_mask_masker = SafeMaskMaker(methods=["aeff-max"], aeff_percent=10) spectral_model = PowerLawSpectralModel(index=2, amplitude=2e-11 * u.Unit("cm-2 s-1 TeV-1"), reference=1 * u.TeV) spatial_model = PointSpatialModel(lon_0=target_position.ra, lat_0=target_position.dec, frame="icrs") spatial_model.lon_0.frozen = True spatial_model.lat_0.frozen = True sky_model = SkyModel(spatial_model=spatial_model, spectral_model=spectral_model, name="") for observation in observations: dataset = stacked.copy(name=f"dataset-{observation.obs_id}") dataset = dataset_maker.run(dataset=dataset, observation=observation) dataset_on_off = bkg_maker.run(dataset, observation) dataset_on_off = safe_mask_masker.run(dataset_on_off, observation) stacked.stack(dataset_on_off) stacked.models = sky_model return Datasets([stacked])