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, )
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)
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, )
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 )