def make_counts_off(self, dataset, observation): """Make off counts. Parameters ---------- dataset : `SpectrumDataset` Spectrum dataset. observation : `DatastoreObservation` Data store observation. Returns ------- counts_off : `CountsSpectrum` Off counts. """ finder = self._get_finder(dataset, observation) finder.run() region_union = list_to_compound_region(finder.reflected_regions) wcs = finder.reference_map.geom.wcs events_off = observation.events.select_region(region_union, wcs) edges = dataset.counts.energy.edges counts_off = CountsSpectrum(energy_hi=edges[1:], energy_lo=edges[:-1], region=region_union) counts_off.fill_events(events_off) return counts_off
def make_counts_off(self, dataset, observation): """Make off counts. Parameters ---------- dataset : `SpectrumDataset` Spectrum dataset. observation : `DatastoreObservation` Data store observation. Returns ------- counts_off : `RegionNDMap` Off counts. """ finder = self._get_finder(dataset, observation) finder.run() energy_axis = dataset.counts.geom.axes["energy"] if len(finder.reflected_regions) > 0: region_union = list_to_compound_region(finder.reflected_regions) wcs = finder.reference_map.geom.wcs geom = RegionGeom.create(region=region_union, axes=[energy_axis], wcs=wcs) counts_off = RegionNDMap.from_geom(geom=geom) counts_off.fill_events(observation.events) acceptance_off = len(finder.reflected_regions) else: # if no OFF regions are found, off is set to None and acceptance_off to zero counts_off = None acceptance_off = 0 return counts_off, acceptance_off
def from_hdulist(cls, hdulist, format="ogip"): """Read region table and convert it to region list. Parameters ---------- hdulist : `~astropy.io.fits.HDUList` HDU list format : {"ogip"} HDU format Returns ------- geom : `RegionGeom` Region map geometry """ if "REGION" in hdulist: region_table = Table.read(hdulist["REGION"]) parser = FITSRegionParser(region_table) pix_region = parser.shapes.to_regions() wcs = WCS(region_table.meta) regions = [] for reg in pix_region: regions.append(reg.to_sky(wcs)) region = list_to_compound_region(regions) else: region, wcs = None, None axis = MapAxis.from_table_hdu(hdulist["EBOUNDS"]) return cls(region=region, wcs=wcs, axes=[axis])
def from_hdulist(cls, hdulist, format="ogip", hdu=None): """Read region table and convert it to region list. Parameters ---------- hdulist : `~astropy.io.fits.HDUList` HDU list format : {"ogip", "ogip-arf", "gadf"} HDU format Returns ------- geom : `RegionGeom` Region map geometry """ region_hdu = "REGION" if format == "gadf" and hdu: region_hdu = hdu + "_" + region_hdu if region_hdu in hdulist: region_table = Table.read(hdulist[region_hdu]) parser = FITSRegionParser(region_table) pix_region = parser.shapes.to_regions() wcs = WcsGeom.from_header(region_table.meta).wcs regions = [] for reg in pix_region: regions.append(reg.to_sky(wcs)) region = list_to_compound_region(regions) else: region, wcs = None, None if format == "ogip": hdu_bands = "EBOUNDS" elif format == "ogip-arf": hdu_bands = "SPECRESP" elif format == "gadf": hdu_bands = hdu + "_BANDS" else: raise ValueError(f"Unknown format {format}") axes = MapAxes.from_table_hdu(hdulist[hdu_bands], format=format) return cls(region=region, wcs=wcs, axes=axes)
def from_regions(cls, regions, **kwargs): """Create region geom from list of regions The regions are combined with union to a compound region. Parameters ---------- regions : `~regions.SkyRegion` Regions **kwargs: dict Keyword arguments forwarded to `RegionGeom` Returns ------- geom : `RegionGeom` Region map geometry """ if isinstance(regions, (SkyRegion, str)): regions = [make_region(regions)] region = list_to_compound_region(regions) return cls(region, **kwargs)
def from_hdulist(cls, hdulist, format="ogip"): """Read region table and convert it to region list.""" if "REGION" in hdulist: region_table = Table.read(hdulist["REGION"]) parser = FITSRegionParser(region_table) pix_region = parser.shapes.to_regions() wcs = WCS(region_table.meta) regions = [] for reg in pix_region: regions.append(reg.to_sky(wcs)) region = list_to_compound_region(regions) else: region, wcs = None, None ebounds = Table.read(hdulist["EBOUNDS"]) emin = ebounds["E_MIN"].quantity emax = ebounds["E_MAX"].quantity edges = edges_from_lo_hi(emin, emax) axis = MapAxis.from_edges(edges, interp="log", name="energy") return cls(region=region, wcs=wcs, axes=[axis])
def make_counts_off(self, dataset, observation): """Make off counts. Parameters ---------- dataset : `SpectrumDataset` Spectrum dataset. observation : `DatastoreObservation` Data store observation. Returns ------- counts_off : `CountsSpectrum` Off counts. """ finder = self._get_finder(dataset, observation) finder.run() if len(finder.reflected_regions) > 0: region_union = list_to_compound_region(finder.reflected_regions) wcs = finder.reference_map.geom.wcs events_off = observation.events.select_region(region_union, wcs) edges = dataset.counts.energy.edges counts_off = CountsSpectrum(energy_hi=edges[1:], energy_lo=edges[:-1], region=region_union) counts_off.fill_events(events_off) acceptance_off = len(finder.reflected_regions) else: # if no OFF regions are found, off is set to None and acceptance_off to zero counts_off = None acceptance_off = 0 return counts_off, acceptance_off