Esempio n. 1
0
    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
Esempio n. 2
0
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