def test_write(self): # Without GTI self.events.write("test.fits", overwrite=True) read_again = EventList.read("test.fits") # the meta dictionaries match because the input one # already has the EXTNAME keyword assert self.events.table.meta == read_again.table.meta assert (self.events.table == read_again.table).all() dummy_events = EventList(Table()) dummy_events.write("test.fits", overwrite=True) read_again = EventList.read("test.fits") assert read_again.table.meta['EXTNAME'] == "EVENTS" assert read_again.table.meta['HDUCLASS'] == "GADF" assert read_again.table.meta['HDUCLAS1'] == "EVENTS" # With GTI gti = GTI.read( "$GAMMAPY_DATA/hess-dl3-dr1/data/hess_dl3_dr1_obs_id_020136.fits.gz" ) self.events.write("test.fits", overwrite=True, gti=gti) read_again_ev = EventList.read("test.fits") read_again_gti = GTI.read("test.fits") assert self.events.table.meta == read_again_ev.table.meta assert (self.events.table == read_again_ev.table).all() assert gti.table.meta == read_again_gti.table.meta assert (gti.table == read_again_gti.table).all() # test that it won't work if gti is not a GTI with pytest.raises(TypeError): self.events.write("test.fits", overwrite=True, gti=gti.table) # test that it won't work if format is not "gadf" with pytest.raises(ValueError): self.events.write("test.fits", overwrite=True, format='something') # test that it won't work if the basic headers are wrong with pytest.raises(ValueError): dummy_events = EventList(Table()) dummy_events.table.meta['HDUCLAS1'] = 'response' dummy_events.write("test.fits", overwrite=True) with pytest.raises(ValueError): dummy_events = EventList(Table()) dummy_events.table.meta['HDUCLASS'] = "ogip" dummy_events.write("test.fits", overwrite=True) # test that it works when the srings are right but lowercase dummy_events = EventList(Table()) dummy_events.table.meta['HDUCLASS'] = "gadf" dummy_events.table.meta['HDUCLAS1'] = "events" dummy_events.write("test.fits", overwrite=True)
def sample_background(self, dataset): """Sample background Parameters ---------- dataset : `~gammapy.datasets.MapDataset` Map dataset Returns ------- events : `gammapy.data.EventList` Background events """ background = dataset.npred_background() temporal_model = ConstantTemporalModel() table = self._sample_coord_time(background, temporal_model, dataset.gti) table["MC_ID"] = 0 table["ENERGY"] = table["ENERGY_TRUE"] table["RA"] = table["RA_TRUE"] table["DEC"] = table["DEC_TRUE"] return EventList(table)
def sample_background(self, dataset): """Sample background Parameters ---------- dataset : `~gammapy.cube.MapDataset` Map dataset Returns ------- events : `gammapy.data.EventList` Background events """ background = dataset.background_model.evaluate() temporal_model = ConstantTemporalModel() table = self._sample_coord_time(background, temporal_model, dataset.gti) table["MC_ID"] = 0 table.rename_column("ENERGY_TRUE", "ENERGY") table.rename_column("RA_TRUE", "RA") table.rename_column("DEC_TRUE", "DEC") return EventList(table)
def sample_sources(self, dataset): """Sample source model components. Parameters ---------- dataset : `~gammapy.cube.MapDataset` Map dataset. Returns ------- events : `~gammapy.data.EventList` Event list """ events_all = [] for idx, evaluator in enumerate(dataset._evaluators): evaluator = copy.deepcopy(evaluator) evaluator.edisp = None evaluator.psf = None npred = evaluator.compute_npred() temporal_model = ConstantTemporalModel() table = self._sample_coord_time(npred, temporal_model, dataset.gti) table["MC_ID"] = idx + 1 events_all.append(EventList(table)) return EventList.stack(events_all)
def sample_sources(self, dataset): """Sample source model components. Parameters ---------- dataset : `~gammapy.cube.MapDataset` Map dataset. Returns ------- events : `~gammapy.data.EventList` Event list """ events_all = [] for idx, model in enumerate(dataset.models): if isinstance(model, BackgroundModel): continue evaluator = dataset.evaluators.get(model.name) evaluator = copy.deepcopy(evaluator) evaluator.model.apply_irf["psf"] = False evaluator.model.apply_irf["edisp"] = False npred = evaluator.compute_npred() temporal_model = ConstantTemporalModel() table = self._sample_coord_time(npred, temporal_model, dataset.gti) table["MC_ID"] = idx + 1 events_all.append(EventList(table)) return EventList.stack(events_all)
def events(): t = Table() t["EVENT_ID"] = np.array([1, 5], dtype=np.uint16) t["RA"] = [5, 11] * u.deg t["DEC"] = [0, 0] * u.deg t["ENERGY"] = [10, 12] * u.TeV t["TIME"] = [3, 4] * u.s return EventList(t)
def setup_class(self): table = Table() table["RA"] = [0.0, 0.0, 0.0, 10.0] * u.deg table["DEC"] = [0.0, 0.9, 10.0, 10.0] * u.deg table["ENERGY"] = [1.0, 1.5, 1.5, 10.0] * u.TeV table["OFFSET"] = [0.1, 0.5, 1.0, 1.5] * u.deg self.events = EventList(table) center1 = SkyCoord(0.0, 0.0, frame="icrs", unit="deg") on_region1 = CircleSkyRegion(center1, radius=1.0 * u.deg) center2 = SkyCoord(0.0, 10.0, frame="icrs", unit="deg") on_region2 = RectangleSkyRegion(center2, width=0.5 * u.deg, height=0.3 * u.deg) self.on_regions = [on_region1, on_region2]
def sample_sources(self, dataset): """Sample source model components. Parameters ---------- dataset : `~gammapy.cube.MapDataset` Map dataset. Returns ------- events : `~gammapy.data.EventList` Event list """ events_all = [] for idx, model in enumerate(dataset.models): if isinstance(model, BackgroundModel): continue evaluator = dataset.evaluators.get(model.name) evaluator = copy.deepcopy(evaluator) evaluator.model.apply_irf["psf"] = False evaluator.model.apply_irf["edisp"] = False npred = evaluator.compute_npred() if hasattr(model, "temporal_model"): if getattr(model, "temporal_model") is None: temporal_model = ConstantTemporalModel() else: temporal_model = model.temporal_model else: temporal_model = ConstantTemporalModel() table = self._sample_coord_time(npred, temporal_model, dataset.gti) if len(table) > 0: table["MC_ID"] = idx + 1 else: mcid = table.Column(name="MC_ID", length=0, dtype=int) table.add_column(mcid) events_all.append(EventList(table)) return EventList.stack(events_all)
def sample_sources(self, dataset): """Sample source model components. Parameters ---------- dataset : `~gammapy.datasets.MapDataset` Map dataset. Returns ------- events : `~gammapy.data.EventList` Event list """ events_all = [] for idx, evaluator in enumerate(dataset.evaluators.values()): if evaluator.needs_update: evaluator.update( dataset.exposure, dataset.psf, dataset.edisp, dataset._geom, dataset.mask, ) flux = evaluator.compute_flux() npred = evaluator.apply_exposure(flux) if evaluator.model.temporal_model is None: temporal_model = ConstantTemporalModel() else: temporal_model = evaluator.model.temporal_model table = self._sample_coord_time(npred, temporal_model, dataset.gti) if len(table) > 0: table["MC_ID"] = idx + 1 else: mcid = table.Column(name="MC_ID", length=0, dtype=int) table.add_column(mcid) events_all.append(EventList(table)) return EventList.from_stack(events_all)
def setup_class(self): table = Table() table["RA"] = [0.0, 0.0, 0.0, 0.0, 10.0] * u.deg table["DEC"] = [0.0, 0.05, 0.9, 10.0, 10.0] * u.deg table["ENERGY"] = [1.0, 1.0, 1.5, 1.5, 10.0] * u.TeV table["OFFSET"] = [0.1, 0.1, 0.5, 1.0, 1.5] * u.deg table.meta["RA_PNT"] = 0 * u.deg table.meta["DEC_PNT"] = 0.5 * u.deg meta_obs = dict() meta_obs["RA_PNT"] = 0 * u.deg meta_obs["DEC_PNT"] = 0.5 * u.deg meta_obs["DEADC"] = 1 meta = time_ref_to_dict("2010-01-01") gti_table = Table({"START": [1], "STOP": [3]}, meta=meta) gti = GTI(gti_table) self.observation = Observation( events=EventList(table), obs_info=meta_obs, gti=gti )
def setup_class(self): self.observations = [] for sign in [-1, 1]: events = Table() events["RA"] = [0.0, 0.0, 0.0, 0.0, 10.0] * u.deg events["DEC"] = sign * ([0.0, 0.05, 0.9, 10.0, 10.0] * u.deg) events["ENERGY"] = [1.0, 1.0, 1.5, 1.5, 10.0] * u.TeV events["OFFSET"] = [0.1, 0.1, 0.5, 1.0, 1.5] * u.deg obs_info = dict( RA_PNT=0 * u.deg, DEC_PNT=sign * 0.5 * u.deg, DEADC=1, ) events.meta.update(obs_info) meta = time_ref_to_dict("2010-01-01") gti_table = Table({"START": [1], "STOP": [3]}, meta=meta) gti = GTI(gti_table) self.observations.append(Observation( events=EventList(events), obs_info=obs_info, gti=gti ))
def sample_sources(self, dataset): """Sample source model components. Parameters ---------- dataset : `~gammapy.datasets.MapDataset` Map dataset. Returns ------- events : `~gammapy.data.EventList` Event list """ events_all = [] for idx, model in enumerate(dataset.models): if isinstance(model, BackgroundModel): continue evaluator = dataset.evaluators.get(model) flux = evaluator.compute_flux() npred = evaluator.apply_exposure(flux) if model.temporal_model is None: temporal_model = ConstantTemporalModel() else: temporal_model = model.temporal_model table = self._sample_coord_time(npred, temporal_model, dataset.gti) if len(table) > 0: table["MC_ID"] = idx + 1 else: mcid = table.Column(name="MC_ID", length=0, dtype=int) table.add_column(mcid) events_all.append(EventList(table)) return EventList.from_stack(events_all)
def test_interpolate_map_dataset(): energy = MapAxis.from_energy_bounds("1 TeV", "300 TeV", nbin=5, name="energy") energy_true = MapAxis.from_nodes(np.logspace(-1, 3, 20), name="energy_true", interp="log", unit="TeV") # make dummy map IRFs geom_allsky = WcsGeom.create(npix=(5, 3), proj="CAR", binsz=60, axes=[energy], skydir=(0, 0)) geom_allsky_true = geom_allsky.drop('energy').to_cube([energy_true]) #background value = 30 bkg_map = Map.from_geom(geom_allsky, unit="") bkg_map.data = value*np.ones(bkg_map.data.shape) #effective area - with a gradient that also depends on energy aeff_map = Map.from_geom(geom_allsky_true, unit="cm2 s") ra_arr = np.arange(aeff_map.data.shape[1]) dec_arr = np.arange(aeff_map.data.shape[2]) for i in np.arange(aeff_map.data.shape[0]): aeff_map.data[i, :, :] = (i+1)*10*np.meshgrid(dec_arr, ra_arr)[0]+10*np.meshgrid(dec_arr, ra_arr)[1]+10 aeff_map.meta["TELESCOP"] = "HAWC" #psf map width = 0.2*u.deg rad_axis = MapAxis.from_nodes(np.linspace(0, 2, 50), name="rad", unit="deg") psfMap = PSFMap.from_gauss(energy_true, rad_axis, width) #edispmap edispmap = EDispKernelMap.from_gauss(energy, energy_true, sigma=0.1, bias=0.0, geom=geom_allsky) #events and gti nr_ev = 10 ev_t = Table() gti_t = Table() ev_t['EVENT_ID'] = np.arange(nr_ev) ev_t['TIME'] = nr_ev*[Time('2011-01-01 00:00:00', scale='utc', format='iso')] ev_t['RA'] = np.linspace(-1, 1, nr_ev)*u.deg ev_t['DEC'] = np.linspace(-1, 1, nr_ev)*u.deg ev_t['ENERGY'] = np.logspace(0, 2, nr_ev)*u.TeV gti_t['START'] = [Time('2010-12-31 00:00:00', scale='utc', format='iso')] gti_t['STOP'] = [Time('2011-01-02 00:00:00', scale='utc', format='iso')] events = EventList(ev_t) gti = GTI(gti_t) #define observation obs = Observation( obs_id=0, obs_info={}, gti=gti, aeff=aeff_map, edisp=edispmap, psf=psfMap, bkg=bkg_map, events=events, obs_filter=None, ) #define analysis geometry geom_target = WcsGeom.create( skydir=(0, 0), width=(10, 10), binsz=0.1*u.deg, axes=[energy] ) maker = MapDatasetMaker(selection=["exposure", "counts", "background", "edisp", "psf"]) dataset = MapDataset.create(geom=geom_target, energy_axis_true=energy_true, name="test") dataset = maker.run(dataset, obs) # test counts assert dataset.counts.data.sum() == nr_ev #test background coords_bg = { 'skycoord' : SkyCoord("0 deg", "0 deg"), 'energy' : energy.center[0] } assert_allclose( dataset.background_model.evaluate().get_by_coord(coords_bg)[0], value, atol=1e-7) #test effective area coords_aeff = { 'skycoord' : SkyCoord("0 deg", "0 deg"), 'energy_true' : energy_true.center[0] } assert_allclose( aeff_map.get_by_coord(coords_aeff)[0]/dataset.exposure.get_by_coord(coords_aeff)[0], 1, atol=1e-3) #test edispmap pdfmatrix_preinterp = edispmap.get_edisp_kernel(SkyCoord("0 deg", "0 deg")).pdf_matrix pdfmatrix_postinterp = dataset.edisp.get_edisp_kernel(SkyCoord("0 deg", "0 deg")).pdf_matrix assert_allclose(pdfmatrix_preinterp, pdfmatrix_postinterp, atol=1e-7) #test psfmap geom_psf = geom_target.drop('energy').to_cube([energy_true]) psfkernel_preinterp = psfMap.get_psf_kernel(SkyCoord("0 deg", "0 deg"), geom_psf, max_radius=2*u.deg).data psfkernel_postinterp = dataset.psf.get_psf_kernel(SkyCoord("0 deg", "0 deg"), geom_psf, max_radius=2*u.deg).data assert_allclose(psfkernel_preinterp, psfkernel_postinterp, atol=1e-4)