Exemple #1
0
    def test_write(self):
        # Without GTI
        self.events.write("test.fits", overwrite=True)
        read_again = EventList.read("test.fits")

        # the meta dictionaries match because the input one
        # already has the EXTNAME keyword
        assert self.events.table.meta == read_again.table.meta
        assert (self.events.table == read_again.table).all()

        dummy_events = EventList(Table())
        dummy_events.write("test.fits", overwrite=True)
        read_again = EventList.read("test.fits")
        assert read_again.table.meta['EXTNAME'] == "EVENTS"
        assert read_again.table.meta['HDUCLASS'] == "GADF"
        assert read_again.table.meta['HDUCLAS1'] == "EVENTS"

        # With GTI
        gti = GTI.read(
            "$GAMMAPY_DATA/hess-dl3-dr1/data/hess_dl3_dr1_obs_id_020136.fits.gz"
        )
        self.events.write("test.fits", overwrite=True, gti=gti)
        read_again_ev = EventList.read("test.fits")
        read_again_gti = GTI.read("test.fits")

        assert self.events.table.meta == read_again_ev.table.meta
        assert (self.events.table == read_again_ev.table).all()
        assert gti.table.meta == read_again_gti.table.meta
        assert (gti.table == read_again_gti.table).all()

        # test that it won't work if gti is not a GTI
        with pytest.raises(TypeError):
            self.events.write("test.fits", overwrite=True, gti=gti.table)
        # test that it won't work if format is not "gadf"
        with pytest.raises(ValueError):
            self.events.write("test.fits", overwrite=True, format='something')
        # test that it won't work if the basic headers are wrong
        with pytest.raises(ValueError):
            dummy_events = EventList(Table())
            dummy_events.table.meta['HDUCLAS1'] = 'response'
            dummy_events.write("test.fits", overwrite=True)
        with pytest.raises(ValueError):
            dummy_events = EventList(Table())
            dummy_events.table.meta['HDUCLASS'] = "ogip"
            dummy_events.write("test.fits", overwrite=True)

        # test that it works when the srings are right but lowercase
        dummy_events = EventList(Table())
        dummy_events.table.meta['HDUCLASS'] = "gadf"
        dummy_events.table.meta['HDUCLAS1'] = "events"
        dummy_events.write("test.fits", overwrite=True)
Exemple #2
0
    def sample_background(self, dataset):
        """Sample background

        Parameters
        ----------
        dataset : `~gammapy.datasets.MapDataset`
            Map dataset

        Returns
        -------
        events : `gammapy.data.EventList`
            Background events
        """
        background = dataset.npred_background()

        temporal_model = ConstantTemporalModel()

        table = self._sample_coord_time(background, temporal_model, dataset.gti)

        table["MC_ID"] = 0
        table["ENERGY"] = table["ENERGY_TRUE"]
        table["RA"] = table["RA_TRUE"]
        table["DEC"] = table["DEC_TRUE"]

        return EventList(table)
Exemple #3
0
    def sample_background(self, dataset):
        """Sample background

        Parameters
        ----------
        dataset : `~gammapy.cube.MapDataset`
            Map dataset

        Returns
        -------
        events : `gammapy.data.EventList`
            Background events
        """
        background = dataset.background_model.evaluate()

        temporal_model = ConstantTemporalModel()

        table = self._sample_coord_time(background, temporal_model,
                                        dataset.gti)

        table["MC_ID"] = 0
        table.rename_column("ENERGY_TRUE", "ENERGY")
        table.rename_column("RA_TRUE", "RA")
        table.rename_column("DEC_TRUE", "DEC")

        return EventList(table)
Exemple #4
0
    def sample_sources(self, dataset):
        """Sample source model components.

        Parameters
        ----------
        dataset : `~gammapy.cube.MapDataset`
            Map dataset.

        Returns
        -------
        events : `~gammapy.data.EventList`
            Event list
        """
        events_all = []
        for idx, evaluator in enumerate(dataset._evaluators):
            evaluator = copy.deepcopy(evaluator)
            evaluator.edisp = None
            evaluator.psf = None
            npred = evaluator.compute_npred()

            temporal_model = ConstantTemporalModel()

            table = self._sample_coord_time(npred, temporal_model, dataset.gti)
            table["MC_ID"] = idx + 1
            events_all.append(EventList(table))

        return EventList.stack(events_all)
Exemple #5
0
    def sample_sources(self, dataset):
        """Sample source model components.

        Parameters
        ----------
        dataset : `~gammapy.cube.MapDataset`
            Map dataset.

        Returns
        -------
        events : `~gammapy.data.EventList`
            Event list
        """
        events_all = []

        for idx, model in enumerate(dataset.models):
            if isinstance(model, BackgroundModel):
                continue

            evaluator = dataset.evaluators.get(model.name)

            evaluator = copy.deepcopy(evaluator)
            evaluator.model.apply_irf["psf"] = False
            evaluator.model.apply_irf["edisp"] = False
            npred = evaluator.compute_npred()

            temporal_model = ConstantTemporalModel()

            table = self._sample_coord_time(npred, temporal_model, dataset.gti)
            table["MC_ID"] = idx + 1
            events_all.append(EventList(table))

        return EventList.stack(events_all)
Exemple #6
0
def events():
    t = Table()
    t["EVENT_ID"] = np.array([1, 5], dtype=np.uint16)
    t["RA"] = [5, 11] * u.deg
    t["DEC"] = [0, 0] * u.deg
    t["ENERGY"] = [10, 12] * u.TeV
    t["TIME"] = [3, 4] * u.s
    return EventList(t)
    def setup_class(self):
        table = Table()
        table["RA"] = [0.0, 0.0, 0.0, 10.0] * u.deg
        table["DEC"] = [0.0, 0.9, 10.0, 10.0] * u.deg
        table["ENERGY"] = [1.0, 1.5, 1.5, 10.0] * u.TeV
        table["OFFSET"] = [0.1, 0.5, 1.0, 1.5] * u.deg

        self.events = EventList(table)

        center1 = SkyCoord(0.0, 0.0, frame="icrs", unit="deg")
        on_region1 = CircleSkyRegion(center1, radius=1.0 * u.deg)
        center2 = SkyCoord(0.0, 10.0, frame="icrs", unit="deg")
        on_region2 = RectangleSkyRegion(center2, width=0.5 * u.deg, height=0.3 * u.deg)
        self.on_regions = [on_region1, on_region2]
Exemple #8
0
    def sample_sources(self, dataset):
        """Sample source model components.

        Parameters
        ----------
        dataset : `~gammapy.cube.MapDataset`
            Map dataset.

        Returns
        -------
        events : `~gammapy.data.EventList`
            Event list
        """
        events_all = []

        for idx, model in enumerate(dataset.models):
            if isinstance(model, BackgroundModel):
                continue

            evaluator = dataset.evaluators.get(model.name)

            evaluator = copy.deepcopy(evaluator)
            evaluator.model.apply_irf["psf"] = False
            evaluator.model.apply_irf["edisp"] = False
            npred = evaluator.compute_npred()

            if hasattr(model, "temporal_model"):
                if getattr(model, "temporal_model") is None:
                    temporal_model = ConstantTemporalModel()
                else:
                    temporal_model = model.temporal_model
            else:
                temporal_model = ConstantTemporalModel()

            table = self._sample_coord_time(npred, temporal_model, dataset.gti)
            if len(table) > 0:
                table["MC_ID"] = idx + 1
            else:
                mcid = table.Column(name="MC_ID", length=0, dtype=int)
                table.add_column(mcid)
            events_all.append(EventList(table))

        return EventList.stack(events_all)
Exemple #9
0
    def sample_sources(self, dataset):
        """Sample source model components.

        Parameters
        ----------
        dataset : `~gammapy.datasets.MapDataset`
            Map dataset.

        Returns
        -------
        events : `~gammapy.data.EventList`
            Event list
        """

        events_all = []
        for idx, evaluator in enumerate(dataset.evaluators.values()):
            if evaluator.needs_update:
                evaluator.update(
                    dataset.exposure,
                    dataset.psf,
                    dataset.edisp,
                    dataset._geom,
                    dataset.mask,
                )

            flux = evaluator.compute_flux()
            npred = evaluator.apply_exposure(flux)

            if evaluator.model.temporal_model is None:
                temporal_model = ConstantTemporalModel()
            else:
                temporal_model = evaluator.model.temporal_model

            table = self._sample_coord_time(npred, temporal_model, dataset.gti)
            if len(table) > 0:
                table["MC_ID"] = idx + 1
            else:
                mcid = table.Column(name="MC_ID", length=0, dtype=int)
                table.add_column(mcid)
            events_all.append(EventList(table))

        return EventList.from_stack(events_all)
Exemple #10
0
    def setup_class(self):
        table = Table()
        table["RA"] = [0.0, 0.0, 0.0, 0.0, 10.0] * u.deg
        table["DEC"] = [0.0, 0.05, 0.9, 10.0, 10.0] * u.deg
        table["ENERGY"] = [1.0, 1.0, 1.5, 1.5, 10.0] * u.TeV
        table["OFFSET"] = [0.1, 0.1, 0.5, 1.0, 1.5] * u.deg

        table.meta["RA_PNT"] = 0 * u.deg
        table.meta["DEC_PNT"] = 0.5 * u.deg

        meta_obs = dict()
        meta_obs["RA_PNT"] = 0 * u.deg
        meta_obs["DEC_PNT"] = 0.5 * u.deg
        meta_obs["DEADC"] = 1

        meta = time_ref_to_dict("2010-01-01")
        gti_table = Table({"START": [1], "STOP": [3]}, meta=meta)
        gti = GTI(gti_table)

        self.observation = Observation(
            events=EventList(table), obs_info=meta_obs, gti=gti
        )
Exemple #11
0
    def setup_class(self):
        self.observations = []
        for sign in [-1, 1]:
            events = Table()
            events["RA"] = [0.0, 0.0, 0.0, 0.0, 10.0] * u.deg
            events["DEC"] = sign * ([0.0, 0.05, 0.9, 10.0, 10.0] * u.deg)
            events["ENERGY"] = [1.0, 1.0, 1.5, 1.5, 10.0] * u.TeV
            events["OFFSET"] = [0.1, 0.1, 0.5, 1.0, 1.5] * u.deg


            obs_info = dict(
                RA_PNT=0 * u.deg,
                DEC_PNT=sign * 0.5 * u.deg,
                DEADC=1,
            )
            events.meta.update(obs_info)
            meta = time_ref_to_dict("2010-01-01")
            gti_table = Table({"START": [1], "STOP": [3]}, meta=meta)
            gti = GTI(gti_table)

            self.observations.append(Observation(
                events=EventList(events), obs_info=obs_info, gti=gti
            ))
Exemple #12
0
    def sample_sources(self, dataset):
        """Sample source model components.

        Parameters
        ----------
        dataset : `~gammapy.datasets.MapDataset`
            Map dataset.

        Returns
        -------
        events : `~gammapy.data.EventList`
            Event list
        """
        events_all = []
        for idx, model in enumerate(dataset.models):
            if isinstance(model, BackgroundModel):
                continue

            evaluator = dataset.evaluators.get(model)
            flux = evaluator.compute_flux()
            npred = evaluator.apply_exposure(flux)

            if model.temporal_model is None:
                temporal_model = ConstantTemporalModel()
            else:
                temporal_model = model.temporal_model

            table = self._sample_coord_time(npred, temporal_model, dataset.gti)
            if len(table) > 0:
                table["MC_ID"] = idx + 1
            else:
                mcid = table.Column(name="MC_ID", length=0, dtype=int)
                table.add_column(mcid)
            events_all.append(EventList(table))

        return EventList.from_stack(events_all)
Exemple #13
0
def test_interpolate_map_dataset():
    energy = MapAxis.from_energy_bounds("1 TeV", "300 TeV", nbin=5, name="energy")
    energy_true = MapAxis.from_nodes(np.logspace(-1, 3, 20), name="energy_true", interp="log", unit="TeV")

    # make dummy map IRFs
    geom_allsky = WcsGeom.create(npix=(5, 3), proj="CAR", binsz=60, axes=[energy], skydir=(0, 0))
    geom_allsky_true = geom_allsky.drop('energy').to_cube([energy_true])

    #background
    value = 30
    bkg_map = Map.from_geom(geom_allsky, unit="")
    bkg_map.data = value*np.ones(bkg_map.data.shape)

    #effective area - with a gradient that also depends on energy
    aeff_map = Map.from_geom(geom_allsky_true, unit="cm2 s")
    ra_arr = np.arange(aeff_map.data.shape[1])
    dec_arr = np.arange(aeff_map.data.shape[2])
    for i in np.arange(aeff_map.data.shape[0]):
        aeff_map.data[i, :, :] = (i+1)*10*np.meshgrid(dec_arr, ra_arr)[0]+10*np.meshgrid(dec_arr, ra_arr)[1]+10
    aeff_map.meta["TELESCOP"] = "HAWC"

    #psf map
    width = 0.2*u.deg
    rad_axis = MapAxis.from_nodes(np.linspace(0, 2, 50), name="rad", unit="deg")
    psfMap = PSFMap.from_gauss(energy_true, rad_axis, width)

    #edispmap
    edispmap = EDispKernelMap.from_gauss(energy, energy_true, sigma=0.1, bias=0.0, geom=geom_allsky)

    #events and gti
    nr_ev = 10
    ev_t = Table()
    gti_t = Table()

    ev_t['EVENT_ID'] = np.arange(nr_ev)
    ev_t['TIME'] = nr_ev*[Time('2011-01-01 00:00:00', scale='utc', format='iso')]
    ev_t['RA'] = np.linspace(-1, 1, nr_ev)*u.deg
    ev_t['DEC'] = np.linspace(-1, 1, nr_ev)*u.deg
    ev_t['ENERGY'] = np.logspace(0, 2, nr_ev)*u.TeV

    gti_t['START'] = [Time('2010-12-31 00:00:00', scale='utc', format='iso')]
    gti_t['STOP'] = [Time('2011-01-02 00:00:00', scale='utc', format='iso')]

    events = EventList(ev_t)
    gti = GTI(gti_t)

    #define observation
    obs = Observation(
        obs_id=0,
        obs_info={},
        gti=gti,
        aeff=aeff_map,
        edisp=edispmap,
        psf=psfMap,
        bkg=bkg_map,
        events=events,
        obs_filter=None,
    )

    #define analysis geometry
    geom_target = WcsGeom.create(
        skydir=(0, 0),
        width=(10, 10),
        binsz=0.1*u.deg,
        axes=[energy]
    )

    maker = MapDatasetMaker(selection=["exposure", "counts", "background", "edisp", "psf"])
    dataset = MapDataset.create(geom=geom_target, energy_axis_true=energy_true, name="test")
    dataset = maker.run(dataset, obs)

    # test counts
    assert dataset.counts.data.sum() == nr_ev

    #test background
    coords_bg = {
        'skycoord' : SkyCoord("0 deg", "0 deg"),
        'energy' : energy.center[0]
    }
    assert_allclose(
        dataset.background_model.evaluate().get_by_coord(coords_bg)[0],
        value,
        atol=1e-7)

    #test effective area
    coords_aeff = {
        'skycoord' : SkyCoord("0 deg", "0 deg"),
        'energy_true' : energy_true.center[0]
    }
    assert_allclose(
        aeff_map.get_by_coord(coords_aeff)[0]/dataset.exposure.get_by_coord(coords_aeff)[0],
        1,
        atol=1e-3)

    #test edispmap
    pdfmatrix_preinterp = edispmap.get_edisp_kernel(SkyCoord("0 deg", "0 deg")).pdf_matrix
    pdfmatrix_postinterp = dataset.edisp.get_edisp_kernel(SkyCoord("0 deg", "0 deg")).pdf_matrix
    assert_allclose(pdfmatrix_preinterp, pdfmatrix_postinterp, atol=1e-7)

    #test psfmap
    geom_psf = geom_target.drop('energy').to_cube([energy_true])
    psfkernel_preinterp = psfMap.get_psf_kernel(SkyCoord("0 deg", "0 deg"), geom_psf, max_radius=2*u.deg).data
    psfkernel_postinterp = dataset.psf.get_psf_kernel(SkyCoord("0 deg", "0 deg"), geom_psf, max_radius=2*u.deg).data
    assert_allclose(psfkernel_preinterp, psfkernel_postinterp, atol=1e-4)