Exemplo n.º 1
0
# Define map geometry
axis = MapAxis.from_edges(np.logspace(-1.0, 1.0, 10),
                          unit="TeV",
                          name="energy")
geom = WcsGeom.create(skydir=(0, 0),
                      binsz=0.02,
                      width=(2, 2),
                      frame="galactic",
                      axes=[axis])

# Define some observation parameters
# we are not simulating many pointings / observations
pointing = SkyCoord(0.2, 0.5, unit="deg", frame="galactic")
livetime = 20 * u.hour

exposure_map = make_map_exposure_true_energy(pointing=pointing,
                                             livetime=livetime,
                                             aeff=aeff,
                                             geom=geom)

dataset = MapDataset(models=models, exposure=exposure_map)
npred = dataset.npred()

dataset.fake()

fit = Fit([dataset])
results = fit.run()

print(results)
print(models)
    def data(self) -> MapDataset:
        def empty_dataset(source_pos_radec, map_geom, e_reco_binning, livetime,
                          irf_file, offset):

            source_pos_ra = source_pos_radec["ra"]
            source_pos_dec = source_pos_radec["dec"]

            source = SkyCoord(source_pos_ra,
                              source_pos_dec,
                              unit="deg",
                              frame="icrs")

            e_reco_min = u.Quantity(e_reco_binning["e_reco_min"]).to("TeV")
            e_reco_min = e_reco_min.value
            e_reco_max = u.Quantity(e_reco_binning["e_reco_max"]).to("TeV")
            e_reco_max = e_reco_max.value
            n_e_reco = e_reco_binning["n_e_reco"]

            energy_axis = MapAxis.from_edges(np.logspace(
                np.log10(e_reco_min), np.log10(e_reco_max), n_e_reco),
                                             unit="TeV",
                                             name="energy",
                                             interp="log")

            geom = WcsGeom.create(
                skydir=source,
                binsz=u.Quantity(map_geom["binsize"]).to("deg").value,
                width=(u.Quantity(map_geom["width"]).to("deg").value,
                       u.Quantity(map_geom["width"]).to("deg").value),
                frame="icrs",
                axes=[energy_axis])

            energy_axis_true = MapAxis.from_edges(np.logspace(
                np.log10(e_reco_min), np.log10(e_reco_max), n_e_reco),
                                                  unit="TeV",
                                                  name="energy",
                                                  interp="log")

            pointing = SkyCoord(u.Quantity(source_pos_ra).to("deg"),
                                u.Quantity(source_pos_dec).to("deg") + offset,
                                frame="icrs",
                                unit="deg")

            irfs = load_cta_irfs(irf_file)

            obs = Observation.create(pointing=pointing,
                                     livetime=livetime,
                                     irfs=irfs)

            empty = MapDataset.create(geom, energy_axis_true=energy_axis_true)
            maker = MapDatasetMaker(
                selection=["exposure", "background", "psf", "edisp"])
            maker_safe_mask = SafeMaskMaker(
                methods=["offset-max"],
                offset_max=u.quantity.Quantity(map_geom["width"]) +
                1.0 * u.deg)

            dataset = maker.run(empty, obs)
            dataset = maker_safe_mask.run(dataset, obs)

            return dataset

        _empty_dataset = empty_dataset(self.source_pos_radec, self.map_geom,
                                       self.e_reco_binning, self.livetime,
                                       self.irf_file, self.offset)

        dataset = MapDataset(models=self.true_model,
                             exposure=_empty_dataset.exposure,
                             background_model=_empty_dataset.background_model,
                             psf=_empty_dataset.psf,
                             edisp=_empty_dataset.edisp)

        dataset.background_model.norm.frozen = False
        dataset.background_model.tilt.frozen = True
        dataset.fake(random_state=self.random_state)

        return dataset