def make_mask_energy_aeff_max(self, dataset, observation=None): """Make safe energy mask from effective area maximum value. Parameters ---------- dataset : `~gammapy.datasets.MapDataset` or `~gammapy.datasets.SpectrumDataset` Dataset to compute mask for. observation: `~gammapy.data.Observation` Observation to compute mask for. It is a mandatory argument when fixed_offset is set. Returns ------- mask_safe : `~numpy.ndarray` Safe data range mask. """ geom, exposure = dataset._geom, dataset.exposure if self.fixed_offset: if observation: position = observation.pointing_radec.directional_offset_by( position_angle=0.0 * u.deg, separation=self.fixed_offset) else: raise ValueError( f"observation argument is mandatory with {self.fixed_offset}" ) elif self.position: position = self.position else: position = geom.center_skydir aeff = exposure.get_spectrum(position) / exposure.meta["livetime"] model = TemplateSpectralModel.from_region_map(aeff) energy_true = model.energy energy_min = energy_true[np.where(model.values > 0)[0][0]] energy_max = energy_true[-1] aeff_thres = (self.aeff_percent / 100) * aeff.quantity.max() inversion = model.inverse(aeff_thres, energy_min=energy_min, energy_max=energy_max) if not np.isnan(inversion[0]): energy_min = inversion[0] return geom.energy_mask(energy_min=energy_min)
def make_mask_energy_aeff_max(self, dataset, observation=None): """Make safe energy mask from effective area maximum value. Parameters ---------- dataset : `~gammapy.datasets.MapDataset` or `~gammapy.datasets.SpectrumDataset` Dataset to compute mask for. observation: `~gammapy.data.Observation` Observation to compute mask for. It is a mandatory argument when fixed_offset is set. Returns ------- mask_safe : `~numpy.ndarray` Safe data range mask. """ geom = dataset._geom if self.fixed_offset: if observation: position = observation.pointing_radec.directional_offset_by( position_angle=0. * u.deg, separation=self.fixed_offset) else: raise ValueError( f"observation argument is mandatory with {self.fixed_offset}" ) elif self.position is None and self.fixed_offset is None: position = PointSkyRegion(dataset.counts.geom.center_skydir) else: position = PointSkyRegion(self.position) aeff = dataset.exposure.get_spectrum( position) / dataset.exposure.meta["livetime"] model = TemplateSpectralModel.from_region_map(aeff) aeff_thres = (self.aeff_percent / 100) * aeff.quantity.max() energy_min = model.inverse(aeff_thres) return geom.energy_mask(energy_min=energy_min)