def make_mask_energy_aeff_max(self, dataset): """Make safe energy mask from effective area maximum value. Parameters ---------- dataset : `~gammapy.datasets.MapDataset` or `~gammapy.datasets.SpectrumDataset` Dataset to compute mask for. Returns ------- mask_safe : `~numpy.ndarray` Safe data range mask. """ geom = dataset._geom if self.position is None: position = PointSkyRegion(dataset.counts.geom.center_skydir) else: position = PointSkyRegion(self.position) exposure = dataset.exposure.get_spectrum(position) energy = exposure.geom.axes["energy_true"] aeff = EffectiveAreaTable( energy_axis_true=energy, data=(exposure.quantity / dataset.gti.time_sum).squeeze(), ) aeff_thres = (self.aeff_percent / 100) * aeff.max_area e_min = aeff.find_energy(aeff_thres) return geom.energy_mask(emin=e_min)
def make_mask_energy_aeff_max(self, dataset): """Make safe energy mask from effective area maximum value. Parameters ---------- dataset : `~gammapy.datasets.MapDataset` or `~gammapy.datasets.SpectrumDataset` Dataset to compute mask for. Returns ------- mask_safe : `~numpy.ndarray` Safe data range mask. """ geom = dataset._geom if isinstance(dataset, MapDataset): position = self.position if position is None: position = dataset.counts.geom.center_skydir exposure = dataset.exposure energy = exposure.geom.get_axis_by_name("energy_true") coord = MapCoord.create({"skycoord": position, "energy_true": energy.center}) exposure_1d = exposure.interp_by_coord(coord) aeff = EffectiveAreaTable( energy_lo=energy.edges[:-1], energy_hi=energy.edges[1:], data=exposure_1d, ) else: aeff = dataset.aeff aeff_thres = (self.aeff_percent / 100) * aeff.max_area e_min = aeff.find_energy(aeff_thres) return geom.energy_mask(emin=e_min)
from gammapy.utils.random import get_random_state import numpy as np import astropy.units as u import matplotlib.pyplot as plt e_true = SpectrumExtraction.DEFAULT_TRUE_ENERGY e_reco = SpectrumExtraction.DEFAULT_RECO_ENERGY # EDISP edisp = EnergyDispersion.from_gauss(e_true=e_true, e_reco=e_true, sigma=0.2) # AEFF nodes = np.sqrt(e_true[:-1] * e_true[1:]) data = abramowski_effective_area(energy=nodes) aeff = EffectiveAreaTable(data=data, energy=e_true) lo_threshold = aeff.find_energy(0.1 * aeff.max_area) # MODEL model = PowerLaw(index=2.3 * u.Unit(""), amplitude=2.5 * 1e-12 * u.Unit("cm-2 s-1 TeV-1"), reference=1 * u.TeV) # COUNTS livetime = 2 * u.h npred = calculate_predicted_counts(model=model, aeff=aeff, edisp=edisp, livetime=livetime) bkg = 0.2 * npred.data alpha = 0.1 counts_kwargs = dict( energy=npred.energy, exposure=livetime, obs_id=31415,
from gammapy.utils.random import get_random_state import numpy as np import astropy.units as u import matplotlib.pyplot as plt e_true = SpectrumExtraction.DEFAULT_TRUE_ENERGY e_reco = SpectrumExtraction.DEFAULT_RECO_ENERGY # EDISP edisp = EnergyDispersion.from_gauss(e_true=e_true, e_reco=e_true, sigma=0.2) # AEFF nodes = np.sqrt(e_true[:-1] * e_true[1:]) data = abramowski_effective_area(energy=nodes) aeff = EffectiveAreaTable(data=data, energy=e_true) lo_threshold = aeff.find_energy(0.1 * aeff.max_area) # MODEL model = PowerLaw(index=2.3 * u.Unit(''), amplitude=2.5 * 1e-12 * u.Unit('cm-2 s-1 TeV-1'), reference=1 * u.TeV) # COUNTS livetime = 2 * u.h npred = calculate_predicted_counts(model=model, aeff=aeff, edisp=edisp, livetime=livetime) bkg = 0.2 * npred.data alpha = 0.1