예제 #1
0
파일: fit.py 프로젝트: peroju/gammapy
    def from_geoms(
        cls,
        geom,
        geom_exposure,
        geom_psf,
        geom_edisp,
        reference_time="2000-01-01",
        name="",
        **kwargs,
    ):
        """
        Create a MapDatasetOnOff object with zero filled maps according to the specified geometries

        Parameters
        ----------
        geom : `Geom`
            geometry for the counts, counts_off, acceptance and acceptance_off maps
        geom_exposure : `Geom`
            geometry for the exposure map
        geom_psf : `Geom`
            geometry for the psf map
        geom_edisp : `Geom`
            geometry for the energy dispersion map
        reference_time : `~astropy.time.Time`
            the reference time to use in GTI definition
        name : str
            Name of the dataset.

        Returns
        -------
        empty_maps : `MapDatasetOnOff`
            A MapDatasetOnOff containing zero filled maps
        """
        maps = {}
        for name in ["counts", "counts_off", "acceptance", "acceptance_off"]:
            maps[name] = Map.from_geom(geom, unit="")

        exposure = Map.from_geom(geom_exposure, unit="m2 s")
        edisp = EDispMap.from_geom(geom_edisp)
        psf = PSFMap.from_geom(geom_psf)

        gti = GTI.create([] * u.s, [] * u.s, reference_time=reference_time)

        mask_safe = Map.from_geom(geom, dtype=bool)

        return cls(
            counts=maps["counts"],
            counts_off=maps["counts_off"],
            acceptance=maps["acceptance"],
            acceptance_off=maps["acceptance_off"],
            exposure=exposure,
            psf=psf,
            edisp=edisp,
            gti=gti,
            mask_safe=mask_safe,
            name=name,
            **kwargs,
        )
예제 #2
0
파일: fit.py 프로젝트: peroju/gammapy
    def from_hdulist(cls, hdulist, name=""):
        """Create map dataset from list of HDUs.

        Parameters
        ----------
        hdulist : `~astropy.io.fits.HDUList`
            List of HDUs.

        Returns
        -------
        dataset : `MapDataset`
            Map dataset.
        """
        kwargs = {"name": name}

        if "COUNTS" in hdulist:
            kwargs["counts"] = Map.from_hdulist(hdulist, hdu="counts")

        if "EXPOSURE" in hdulist:
            kwargs["exposure"] = Map.from_hdulist(hdulist, hdu="exposure")

        if "BACKGROUND" in hdulist:
            background_map = Map.from_hdulist(hdulist, hdu="background")
            kwargs["background_model"] = BackgroundModel(background_map)

        if "EDISP_MATRIX" in hdulist:
            kwargs["edisp"] = EnergyDispersion.from_hdulist(
                hdulist, hdu1="EDISP_MATRIX", hdu2="EDISP_MATRIX_EBOUNDS"
            )
        if "EDISP" in hdulist:
            edisp_map = Map.from_hdulist(hdulist, hdu="edisp")
            exposure_map = Map.from_hdulist(hdulist, hdu="edisp_exposure")
            kwargs["edisp"] = EDispMap(edisp_map, exposure_map)

        if "PSF_KERNEL" in hdulist:
            psf_map = Map.from_hdulist(hdulist, hdu="psf_kernel")
            kwargs["psf"] = PSFKernel(psf_map)
        if "PSF" in hdulist:
            psf_map = Map.from_hdulist(hdulist, hdu="psf")
            exposure_map = Map.from_hdulist(hdulist, hdu="psf_exposure")
            kwargs["psf"] = PSFMap(psf_map, exposure_map)

        if "MASK_SAFE" in hdulist:
            mask_safe = Map.from_hdulist(hdulist, hdu="mask_safe")
            mask_safe.data = mask_safe.data.astype(bool)
            kwargs["mask_safe"] = mask_safe

        if "MASK_FIT" in hdulist:
            mask_fit = Map.from_hdulist(hdulist, hdu="mask_fit")
            mask_fit.data = mask_fit.data.astype(bool)
            kwargs["mask_fit"] = mask_fit

        if "GTI" in hdulist:
            gti = GTI(Table.read(hdulist, hdu="GTI"))
            kwargs["gti"] = gti

        return cls(**kwargs)
예제 #3
0
파일: fit.py 프로젝트: peroju/gammapy
    def from_geoms(
        cls,
        geom,
        geom_exposure,
        geom_psf,
        geom_edisp,
        reference_time="2000-01-01",
        name="",
        **kwargs,
    ):
        """
        Create a MapDataset object with zero filled maps according to the specified geometries

        Parameters
        ----------
        geom : `Geom`
            geometry for the counts and background maps
        geom_exposure : `Geom`
            geometry for the exposure map
        geom_psf : `Geom`
            geometry for the psf map
        geom_edisp : `Geom`
            geometry for the energy dispersion map
        reference_time : `~astropy.time.Time`
            the reference time to use in GTI definition
        name : str
            Name of the dataset.

        Returns
        -------
        empty_maps : `MapDataset`
            A MapDataset containing zero filled maps
        """
        counts = Map.from_geom(geom, unit="")

        background = Map.from_geom(geom, unit="")
        background_model = BackgroundModel(background)

        exposure = Map.from_geom(geom_exposure, unit="m2 s")
        edisp = EDispMap.from_geom(geom_edisp)
        psf = PSFMap.from_geom(geom_psf)

        gti = GTI.create([] * u.s, [] * u.s, reference_time=reference_time)

        mask_safe = Map.from_geom(geom, unit="", dtype=bool)

        return cls(
            counts=counts,
            exposure=exposure,
            psf=psf,
            edisp=edisp,
            background_model=background_model,
            gti=gti,
            mask_safe=mask_safe,
            name=name,
            **kwargs,
        )
예제 #4
0
    def create(
        cls,
        geom,
        geom_irf=None,
        migra_axis=None,
        rad_axis=None,
        reference_time="2000-01-01",
        name="",
        **kwargs
    ):
        """Creates a MapDataset object with zero filled maps

        Parameters
        ----------
        geom: `~gammapy.maps.WcsGeom`
            Reference target geometry in reco energy, used for counts and background maps
        geom_irf: `~gammapy.maps.WcsGeom`
            Reference image geometry in true energy, used for IRF maps.
        migra_axis: `~gammapy.maps.MapAxis`
            Migration axis for the energy dispersion map
        rad_axis: `~gammapy.maps.MapAxis`
            Rad axis for the psf map
        name : str
            Name of the dataset.
        """
        geom_irf = geom_irf or geom.to_binsz(BINSZ_IRF)
        migra_axis = migra_axis or MIGRA_AXIS_DEFAULT
        rad_axis = rad_axis or RAD_AXIS_DEFAULT

        counts = Map.from_geom(geom, unit="")

        background = Map.from_geom(geom, unit="")
        background_model = BackgroundModel(background)

        energy_axis = geom_irf.get_axis_by_name("ENERGY")

        exposure_geom = geom.to_image().to_cube([energy_axis])
        exposure = Map.from_geom(exposure_geom, unit="m2 s")
        exposure_irf = Map.from_geom(geom_irf, unit="m2 s")

        mask_safe = np.zeros(geom.data_shape, dtype=bool)

        gti = GTI.create([] * u.s, [] * u.s, reference_time=reference_time)

        geom_migra = geom_irf.to_image().to_cube([migra_axis, energy_axis])
        edisp_map = Map.from_geom(geom_migra, unit="")
        loc = migra_axis.edges.searchsorted(1.0)
        edisp_map.data[:, loc, :, :] = 1.0
        edisp = EDispMap(edisp_map, exposure_irf)

        geom_rad = geom_irf.to_image().to_cube([rad_axis, energy_axis])
        psf_map = Map.from_geom(geom_rad, unit="sr-1")
        psf = PSFMap(psf_map, exposure_irf)

        return cls(
            counts=counts,
            exposure=exposure,
            psf=psf,
            edisp=edisp,
            background_model=background_model,
            gti=gti,
            mask_safe=mask_safe,
            name=name,
            **kwargs
        )