def test_background_2d_read_missing_hducls(): energy_axis = MapAxis.from_energy_bounds("1 TeV", "10 TeV", nbin=3) offset_axis = MapAxis.from_edges([0, 1, 2], unit="deg", name="offset") bkg = Background2D(axes=[energy_axis, offset_axis], unit="s-1 MeV-1 sr-1") table = bkg.to_table() table.meta.pop("HDUCLAS2") bkg = Background2D.from_table(table) assert bkg.axes[0].name == "energy"
def test_bkg_2d_wrong_units(): energy = [0.1, 10, 1000] * u.TeV energy_axis = MapAxis.from_energy_edges(energy) offset_axis = MapAxis.from_edges([0, 1, 2], unit="deg", name="offset") wrong_unit = u.cm**2 * u.s data = np.ones((energy_axis.nbin, offset_axis.nbin)) * wrong_unit bkg2d_test = Background2D(axes=[energy_axis, offset_axis]) with pytest.raises(ValueError) as error: Background2D(axes=[energy_axis, offset_axis], data=data) assert error.match( f"Error: {wrong_unit} is not an allowed unit. {bkg2d_test.tag} requires {bkg2d_test.default_unit} data quantities." )
def test_background_2d_read_gadf(): filename = "$GAMMAPY_DATA/tests/irf/bkg_2d_full_example.fits" bkg = Background2D.read(filename) data = bkg.quantity assert data.shape == (20, 5) assert bkg.axes.names == ["energy", "offset"] assert data.unit == "s-1 MeV-1 sr-1"
def bkg_2d(): offset_axis = MapAxis.from_bounds(0, 4, nbin=10, name="offset", unit="deg") energy_axis = MapAxis.from_energy_bounds("0.1 TeV", "10 TeV", nbin=20) bkg_2d = Background2D(axes=[energy_axis, offset_axis], unit="s-1 TeV-1 sr-1") coords = bkg_2d.axes.get_coord() value = np.exp(-0.5 * (coords["offset"] / (2 * u.deg))**2) bkg_2d.data = (value * (coords["energy"] / (1 * u.TeV))**-2).to_value("") return bkg_2d
def _make_bkg2d(ebounds, offset, unit): ebounds = ebounds.to("MeV") offset = offset.to("deg") shape = len(ebounds) - 1, len(offset) - 1 return Background2D( energy_lo=ebounds[:-1], energy_hi=ebounds[1:], offset_lo=offset[:-1], offset_hi=offset[1:], data=np.zeros(shape) * u.Unit(unit), )
def bkg_2d(): """A simple Background2D test case""" energy = [0.1, 10, 1000] * u.TeV energy_axis = MapAxis.from_energy_edges(energy) offset = [0, 1, 2, 3] * u.deg offset_axis = MapAxis.from_edges(offset, name="offset") data = np.zeros((2, 3)) * u.Unit("s-1 MeV-1 sr-1") data.value[1, 0] = 2 data.value[1, 1] = 4 return Background2D(energy_axis=energy_axis, offset_axis=offset_axis, data=data,)
def bkg_2d(): """A simple Background2D test case""" energy = [0.1, 10, 1000] * u.TeV offset = [0, 1, 2, 3] * u.deg data = np.zeros((2, 3)) * u.Unit("s-1 MeV-1 sr-1") data.value[1, 0] = 2 data.value[1, 1] = 4 return Background2D( energy_lo=energy[:-1], energy_hi=energy[1:], offset_lo=offset[:-1], offset_hi=offset[1:], data=data, )
def test_background_2d_read_write(tmp_path, bkg_2d): bkg_2d.to_fits().writeto(tmp_path / "tmp.fits") bkg_2d_2 = Background2D.read(tmp_path / "tmp.fits") axis = bkg_2d_2.data.axis("energy") assert axis.nbin == 2 assert axis.unit == "TeV" axis = bkg_2d_2.data.axis("offset") assert axis.nbin == 3 assert axis.unit == "deg" data = bkg_2d_2.data.data assert data.shape == (2, 3) assert data.unit == "s-1 MeV-1 sr-1"
def test_background_2d_gammapy(bg_hdu): '''Test our background hdu is readable by gammapy''' from gammapy.irf import Background2D background, hdu = bg_hdu with tempfile.NamedTemporaryFile(suffix='.fits') as f: fits.HDUList([fits.PrimaryHDU(), hdu]).writeto(f.name) # test reading with gammapy works bg2d = Background2D.read(f.name, 'BACKGROUND') assert u.allclose(background, bg2d.data.data, atol=1e-16 * u.Unit('TeV-1 s-1 sr-1'))
def load(self): """Load HDU as appropriate class. TODO: this should probably go via an extensible registry. """ hdu_class = self.hdu_class filename = self.path() hdu = self.hdu_name if hdu_class == "events": from gammapy.data import EventList return EventList.read(filename, hdu=hdu) elif hdu_class == "gti": from gammapy.data import GTI return GTI.read(filename, hdu=hdu) elif hdu_class == "aeff_2d": from gammapy.irf import EffectiveAreaTable2D return EffectiveAreaTable2D.read(filename, hdu=hdu) elif hdu_class == "edisp_2d": from gammapy.irf import EnergyDispersion2D return EnergyDispersion2D.read(filename, hdu=hdu) elif hdu_class == "psf_table": from gammapy.irf import PSF3D return PSF3D.read(filename, hdu=hdu) elif hdu_class == "psf_3gauss": from gammapy.irf import EnergyDependentMultiGaussPSF return EnergyDependentMultiGaussPSF.read(filename, hdu=hdu) elif hdu_class == "psf_king": from gammapy.irf import PSFKing return PSFKing.read(filename, hdu=hdu) elif hdu_class == "bkg_2d": from gammapy.irf import Background2D return Background2D.read(filename, hdu=hdu) elif hdu_class == "bkg_3d": from gammapy.irf import Background3D return Background3D.read(filename, hdu=hdu) else: raise ValueError(f"Invalid hdu_class: {hdu_class}")
def test_background_2d_read_write(tmpdir, bkg_2d): filename = str(tmpdir / "bkg2d.fits") bkg_2d.to_fits().writeto(filename) bkg_2d_2 = Background2D.read(filename) axis = bkg_2d_2.data.axis("energy") assert axis.nbin == 2 assert axis.unit == "TeV" axis = bkg_2d_2.data.axis("offset") assert axis.nbin == 3 assert axis.unit == "deg" data = bkg_2d_2.data.data assert data.shape == (2, 3) assert data.unit == "s-1 MeV-1 sr-1"