def run(self, dataset, observation=None): """Run the event sampler, applying IRF corrections. Parameters ---------- dataset : `~gammapy.datasets.MapDataset` Map dataset observation : `~gammapy.data.Observation` In memory observation. edisp : Bool It allows to include or exclude the Edisp in the simulation. Returns ------- events : `~gammapy.data.EventList` Event list. """ if len(dataset.models) > 1: events_src = self.sample_sources(dataset) if len(events_src.table) > 0: if dataset.psf: events_src = self.sample_psf(dataset.psf, events_src) else: events_src.table["RA"] = events_src.table["RA_TRUE"] events_src.table["DEC"] = events_src.table["DEC_TRUE"] if dataset.edisp: events_src = self.sample_edisp(dataset.edisp, events_src) else: events_src.table["ENERGY"] = events_src.table[ "ENERGY_TRUE"] if dataset.background: events_bkg = self.sample_background(dataset) events = EventList.from_stack([events_bkg, events_src]) else: events = events_src if len(dataset.models) == 1 and dataset.background_model is not None: events_bkg = self.sample_background(dataset) events = EventList.from_stack([events_bkg]) events = self.event_det_coords(observation, events) events.table["EVENT_ID"] = np.arange(len(events.table)) events.table.meta = self.event_list_meta(dataset, observation) geom = dataset._geom selection = geom.contains(events.map_coord(geom)) return events.select_row_subset(selection)
def _make_counts(dataset, observation, phases): event_lists = [] for interval in phases: events = observation.events.select_parameter(parameter="PHASE", band=interval) event_lists.append(events) events = EventList.from_stack(event_lists) counts = RegionNDMap.from_geom(dataset.counts.geom) counts.fill_events(events) return counts
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 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_from_stack(self): event_lists = [self.events] * 2 stacked_list = EventList.from_stack(event_lists) assert len(stacked_list.table) == 11243 * 2