def rad_max(self): # prevent circular import from gammapy.irf import RadMax2D if self._rad_max is not None: return self._rad_max # load once to avoid trigger lazy loading it three times aeff = self.aeff if aeff is not None and aeff.is_pointlike: self._rad_max = RadMax2D.from_irf(aeff) return self._rad_max edisp = self.edisp if edisp is not None and edisp.is_pointlike: self._rad_max = RadMax2D.from_irf(self.edisp) return self._rad_max
def test_rad_max_from_irf(): e_bins = 3 o_bins = 2 energy_axis = MapAxis.from_energy_bounds(1 * u.TeV, 10 * u.TeV, nbin=e_bins, name='energy_true') offset_axis = MapAxis.from_bounds(0 * u.deg, 3 * u.deg, nbin=o_bins, name='offset') aeff = EffectiveAreaTable2D( data=u.Quantity(np.ones((e_bins, o_bins)), u.m**2, copy=False), axes=[energy_axis, offset_axis], is_pointlike=True, ) with pytest.raises(ValueError): # not a point-like IRF RadMax2D.from_irf(aeff) with pytest.raises(ValueError): # missing rad_max RadMax2D.from_irf(aeff) aeff.meta['RAD_MAX'] = '0.2 deg' with pytest.raises(ValueError): # invalid format RadMax2D.from_irf(aeff) aeff.meta['RAD_MAX'] = 0.2 rad_max = RadMax2D.from_irf(aeff) assert rad_max.axes['energy'].nbin == 1 assert rad_max.axes['offset'].nbin == 1 assert rad_max.axes['energy'].edges[0] == aeff.axes['energy_true'].edges[0] assert rad_max.axes['energy'].edges[1] == aeff.axes['energy_true'].edges[ -1] assert rad_max.axes['offset'].edges[0] == aeff.axes['offset'].edges[0] assert rad_max.axes['offset'].edges[1] == aeff.axes['offset'].edges[-1] assert rad_max.quantity.shape == (1, 1) assert rad_max.quantity[0, 0] == 0.2 * u.deg