Example #1
0
    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
Example #2
0
    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
Example #3
0
    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])
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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])
Example #7
0
    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