コード例 #1
0
ファイル: effective_area.py プロジェクト: laofei177/gammapy
    def __init__(
        self,
        energy_lo,
        energy_hi,
        offset_lo,
        offset_hi,
        data,
        meta=None,
        interp_kwargs=None,
    ):

        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        e_edges = edges_from_lo_hi(energy_lo, energy_hi)
        energy_axis = MapAxis.from_edges(e_edges,
                                         interp="log",
                                         name="energy_true")

        # TODO: for some reason the H.E.S.S. DL3 files contain the same values for offset_hi and offset_lo
        if np.allclose(offset_lo.to_value("deg"), offset_hi.to_value("deg")):
            offset_axis = MapAxis.from_nodes(offset_lo,
                                             interp="lin",
                                             name="offset")
        else:
            offset_edges = edges_from_lo_hi(offset_lo, offset_hi)
            offset_axis = MapAxis.from_edges(offset_edges,
                                             interp="lin",
                                             name="offset")

        self.data = NDDataArray(axes=[energy_axis, offset_axis],
                                data=data,
                                interp_kwargs=interp_kwargs)
        self.meta = meta or {}
コード例 #2
0
    def __init__(
        self,
        e_true_lo,
        e_true_hi,
        migra_lo,
        migra_hi,
        offset_lo,
        offset_hi,
        data,
        interp_kwargs=None,
        meta=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        e_true_edges = edges_from_lo_hi(e_true_lo, e_true_hi)
        e_true_axis = MapAxis.from_edges(e_true_edges, interp="log", name="e_true")

        migra_edges = edges_from_lo_hi(migra_lo, migra_hi)
        migra_axis = MapAxis.from_edges(
            migra_edges, interp="log", name="migra", unit=""
        )

        # TODO: for some reason the H.E.S.S. DL3 files contain the same values for offset_hi and offset_lo
        if np.allclose(offset_lo.to_value("deg"), offset_hi.to_value("deg")):
            offset_axis = MapAxis.from_nodes(offset_lo, interp="lin", name="offset")
        else:
            offset_edges = edges_from_lo_hi(offset_lo, offset_hi)
            offset_axis = MapAxis.from_edges(offset_edges, interp="lin", name="offset")

        axes = [e_true_axis, migra_axis, offset_axis]

        self.data = NDDataArray(axes=axes, data=data, interp_kwargs=interp_kwargs)
        self.meta = OrderedDict(meta) if meta else OrderedDict()
コード例 #3
0
ファイル: background.py プロジェクト: gfiusa/gammapy
    def __init__(
        self,
        energy_lo,
        energy_hi,
        offset_lo,
        offset_hi,
        data,
        meta=None,
        interp_kwargs=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        e_edges = edges_from_lo_hi(energy_lo, energy_hi)
        energy_axis = MapAxis.from_edges(e_edges, interp="log", name="energy")

        offset_edges = edges_from_lo_hi(offset_lo, offset_hi)
        offset_axis = MapAxis.from_edges(offset_edges,
                                         interp="lin",
                                         name="offset")

        self.data = NDDataArray(axes=[energy_axis, offset_axis],
                                data=data,
                                interp_kwargs=interp_kwargs)
        self.meta = meta or {}
コード例 #4
0
    def __init__(
        self,
        e_true_lo,
        e_true_hi,
        e_reco_lo,
        e_reco_hi,
        data,
        interp_kwargs=None,
        meta=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        e_true_edges = edges_from_lo_hi(e_true_lo, e_true_hi)
        e_true_axis = MapAxis.from_edges(e_true_edges,
                                         interp="log",
                                         name="e_true")

        e_reco_edges = edges_from_lo_hi(e_reco_lo, e_reco_hi)
        e_reco_axis = MapAxis.from_edges(e_reco_edges,
                                         interp="log",
                                         name="e_reco")

        self.data = NDDataArray(axes=[e_true_axis, e_reco_axis],
                                data=data,
                                interp_kwargs=interp_kwargs)
        self.meta = meta or {}
コード例 #5
0
ファイル: background.py プロジェクト: gfiusa/gammapy
    def __init__(
        self,
        energy_lo,
        energy_hi,
        fov_lon_lo,
        fov_lon_hi,
        fov_lat_lo,
        fov_lat_hi,
        data,
        meta=None,
        interp_kwargs=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        e_edges = edges_from_lo_hi(energy_lo, energy_hi)
        energy_axis = MapAxis.from_edges(e_edges, interp="log", name="energy")

        fov_lon_edges = edges_from_lo_hi(fov_lon_lo, fov_lon_hi)
        fov_lon_axis = MapAxis.from_edges(fov_lon_edges,
                                          interp="lin",
                                          name="fov_lon")

        fov_lat_edges = edges_from_lo_hi(fov_lat_lo, fov_lat_hi)
        fov_lat_axis = MapAxis.from_edges(fov_lat_edges,
                                          interp="lin",
                                          name="fov_lat")

        self.data = NDDataArray(
            axes=[energy_axis, fov_lon_axis, fov_lat_axis],
            data=data,
            interp_kwargs=interp_kwargs,
        )
        self.meta = meta or {}
コード例 #6
0
ファイル: table.py プロジェクト: mdebony/gammapy
    def __init__(self, rad_axis, data, interp_kwargs=None):
        interp_kwargs = interp_kwargs or {}

        rad_axis.assert_name("rad")

        self.data = NDDataArray(axes=[rad_axis],
                                data=u.Quantity(data).to("sr^-1"),
                                interp_kwargs=interp_kwargs)
コード例 #7
0
ファイル: effective_area.py プロジェクト: mdebony/gammapy
    def __init__(self, energy_axis_true, data, meta=None):
        interp_kwargs = {"extrapolate": False, "bounds_error": False}

        self.data = NDDataArray(axes=[energy_axis_true],
                                data=data,
                                interp_kwargs=interp_kwargs)
        self.data.axes.assert_names(["energy_true"])
        self.meta = meta or {}
コード例 #8
0
ファイル: cta_irf.py プロジェクト: morcuended/gammapy-extra
 def __init__(self, energy_lo, energy_hi, data):
     axes = [
         BinnedDataAxis(energy_lo,
                        energy_hi,
                        interpolation_mode='log',
                        name='energy'),
     ]
     self.data = NDDataArray(axes=axes, data=data)
コード例 #9
0
ファイル: edisp_kernel.py プロジェクト: laofei177/gammapy
    def __init__(
        self, e_true, e_reco, data, interp_kwargs=None, meta=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        self.data = NDDataArray(
            axes=[e_true, e_reco], data=data, interp_kwargs=interp_kwargs
        )
        self.meta = meta or {}
コード例 #10
0
    def __init__(
        self, energy_axis_true, energy_axis, data, interp_kwargs=None, meta=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        self.data = NDDataArray(
            axes=[energy_axis_true, energy_axis], data=data, interp_kwargs=interp_kwargs
        )
        self.meta = meta or {}
コード例 #11
0
    def __init__(self, energy_lo, energy_hi, data, meta=None):

        e_edges = edges_from_lo_hi(energy_lo, energy_hi)
        energy_axis = MapAxis.from_edges(e_edges, interp="log", name="energy")

        interp_kwargs = {"extrapolate": False, "bounds_error": False}
        self.data = NDDataArray(axes=[energy_axis],
                                data=data,
                                interp_kwargs=interp_kwargs)
        self.meta = meta or {}
コード例 #12
0
ファイル: background.py プロジェクト: mdebony/gammapy
    def __init__(
        self, energy_axis, offset_axis, data, meta=None, interp_kwargs=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        self.data = NDDataArray(
            axes=[energy_axis, offset_axis], data=data, interp_kwargs=interp_kwargs
        )
        self.data.axes.assert_names(["energy", "offset"])
        self.meta = meta or {}
コード例 #13
0
ファイル: background.py プロジェクト: sreekanth370/gammapy
    def __init__(
        self, energy_axis, offset_axis, data, meta=None, interp_kwargs=None,
    ):
        if interp_kwargs is None:
            interp_kwargs = self.default_interp_kwargs

        assert offset_axis.name == "offset"

        self.data = NDDataArray(
            axes=[energy_axis, offset_axis], data=data, interp_kwargs=interp_kwargs
        )
        self.meta = meta or {}
コード例 #14
0
ファイル: irf_maker.py プロジェクト: hugovk/pyirf
    def load_irf(self):
        filename = os.path.join(self.outdir, "irf.fits.gz")
        with fits.open(filename, memmap=False) as hdulist:
            aeff = EffectiveAreaTable2D.from_hdulist(hdulist=hdulist)
            edisp = EnergyDispersion2D.read(filename, hdu="ENERGY DISPERSION")

            bkg_fits_table = hdulist["BACKGROUND"]
            bkg_table = Table.read(bkg_fits_table)
            energy_lo = bkg_table["ENERG_LO"].quantity
            energy_hi = bkg_table["ENERG_HI"].quantity
            bkg = bkg_table["BGD"].quantity

            axes = [
                BinnedDataAxis(energy_lo,
                               energy_hi,
                               interpolation_mode="log",
                               name="energy")
            ]
            bkg = BkgData(data=NDDataArray(axes=axes, data=bkg))

        # Create rmf with appropriate dimensions (e_reco->bkg, e_true->area)
        e_reco_min = bkg.energy.lo[0]
        e_reco_max = bkg.energy.hi[-1]
        e_reco_bin = bkg.energy.nbins
        e_reco_axis = EnergyBounds.equal_log_spacing(e_reco_min, e_reco_max,
                                                     e_reco_bin, "TeV")

        e_true_min = aeff.data.axes[0].lo[0]
        e_true_max = aeff.data.axes[0].hi[-1]
        e_true_bin = len(aeff.data.axes[0].bins) - 1
        e_true_axis = EnergyBounds.equal_log_spacing(e_true_min, e_true_max,
                                                     e_true_bin, "TeV")

        # Fake offset...
        rmf = edisp.to_energy_dispersion(offset=0.5 * u.deg,
                                         e_reco=e_reco_axis,
                                         e_true=e_true_axis)

        # This is required because in gammapy v0.8
        # gammapy.spectrum.utils.integrate_model
        # calls the attribute aeff.energy which is an attribute of
        # EffectiveAreaTable and not of  EffectiveAreaTable2D
        # WARNING the angle is not important, but only because we started with
        # on-axis data! TO UPDATE
        aeff = aeff.to_effective_area_table(Angle("1d"))

        self.irf = Irf(bkg=bkg, aeff=aeff, rmf=rmf)
コード例 #15
0
ファイル: table.py プロジェクト: mdebony/gammapy
    def __init__(
        self,
        energy_axis_true,
        offset_axis,
        rad_axis,
        data,
        meta=None,
        interp_kwargs=None,
    ):

        interp_kwargs = interp_kwargs or {}

        axes = MapAxes([energy_axis_true, offset_axis, rad_axis])
        axes.assert_names(["energy_true", "offset", "rad"])

        self.data = NDDataArray(axes=axes,
                                data=u.Quantity(data).to("sr^-1"),
                                interp_kwargs=interp_kwargs)

        self.meta = meta or {}
コード例 #16
0
ファイル: table.py プロジェクト: mdebony/gammapy
    def __init__(
        self,
        energy_axis_true,
        rad_axis,
        exposure=None,
        data=None,
        interp_kwargs=None,
    ):
        interp_kwargs = interp_kwargs or {}
        axes = MapAxes([energy_axis_true, rad_axis])
        axes.assert_names(["energy_true", "rad"])

        self.data = NDDataArray(axes=axes,
                                data=u.Quantity(data).to("sr^-1"),
                                interp_kwargs=interp_kwargs)

        if exposure is None:
            self.exposure = u.Quantity(np.ones(self.energy_axis_true.nbin),
                                       "cm^2 s")
        else:
            self.exposure = u.Quantity(exposure).to("cm^2 s")
コード例 #17
0
ファイル: irf_maker.py プロジェクト: vuillaut/protopipe
    def load_irf(self):
        filename = os.path.join(self.outdir, 'irf.fits.gz')
        with fits.open(filename, memmap=False) as hdulist:
            aeff = EffectiveAreaTable.from_hdulist(hdulist=hdulist)
            edisp = EnergyDispersion2D.read(filename, hdu="ENERGY DISPERSION")

            bkg_fits_table = hdulist["BACKGROUND"]
            bkg_table = Table.read(bkg_fits_table)
            energy_lo = bkg_table["ENERG_LO"].quantity
            energy_hi = bkg_table["ENERG_HI"].quantity
            bkg = bkg_table["BGD"].quantity

            axes = [
                BinnedDataAxis(
                    energy_lo, energy_hi, interpolation_mode="log", name="energy"
                )
            ]
            bkg = BkgData(data=NDDataArray(axes=axes, data=bkg))

        # Create rmf with appropriate dimensions (e_reco->bkg, e_true->area)
        e_reco_min = bkg.energy.lo[0]
        e_reco_max = bkg.energy.hi[-1]
        e_reco_bin = bkg.energy.nbins
        e_reco_axis = EnergyBounds.equal_log_spacing(
            e_reco_min, e_reco_max, e_reco_bin, "TeV"
        )

        e_true_min = aeff.energy.lo[0]
        e_true_max = aeff.energy.hi[-1]
        e_true_bin = aeff.energy.nbins
        e_true_axis = EnergyBounds.equal_log_spacing(
            e_true_min, e_true_max, e_true_bin, "TeV"
        )

        # Fake offset...
        rmf = edisp.to_energy_dispersion(
            offset=0.5 * u.deg, e_reco=e_reco_axis, e_true=e_true_axis
        )

        self.irf = Irf(bkg=bkg, aeff=aeff, rmf=rmf)
コード例 #18
0
ファイル: test_nddata.py プロジェクト: mdebony/gammapy
def nddata_1d(axis_x):
    return NDDataArray(
        axes=[axis_x],
        data=[1, -1, 2],
        interp_kwargs=dict(bounds_error=False, fill_value=None),
    )
コード例 #19
0
ファイル: test_nddata.py プロジェクト: mdebony/gammapy
def nddata_2d(axis_energy, axis_offset):
    return NDDataArray(
        axes=[axis_energy, axis_offset],
        data=np.arange(8).reshape(2, 4) * u.cm * u.cm,
        interp_kwargs=dict(bounds_error=False, fill_value=None),
    )
コード例 #20
0
from gammapy.utils.energy import Energy, EnergyBounds
import numpy as np
import astropy.units as u


# ## 1D example
# 
# Let's start with a simple example. A one dimensional array storing an exposure in ``cm-2 s-1`` as a function of energy. The energy axis is log spaced and thus also the interpolation shall take place in log.

# In[ ]:


energies = Energy.equal_log_spacing(10, 100, 10, unit=u.TeV)
x_axis = DataAxis(energies, name="energy", interpolation_mode="log")
data = np.arange(20, 0, -2) / u.cm ** 2 / u.s
nddata = NDDataArray(axes=[x_axis], data=data)
print(nddata)
print(nddata.axis("energy"))


# In[ ]:


eval_energies = np.linspace(2, 6, 20) * 1e4 * u.GeV
eval_exposure = nddata.evaluate(energy=eval_energies, method="linear")

plt.plot(
    nddata.axis("energy").nodes.value,
    nddata.data.value,
    ".",
    label="Interpolation nodes",
コード例 #21
0
ファイル: test_nddata.py プロジェクト: mdebony/gammapy
 def test_init_error(self):
     with pytest.raises(ValueError):
         NDDataArray(
             axes=[MapAxis.from_nodes([1, 3, 6], name="x")],
             data=np.arange(8).reshape(4, 2),
         )