Ejemplo n.º 1
0
    def create_roi_wcs(self,
                       roi_idx,
                       coordsys='CEL',
                       projection='AIT',
                       cdelt=1.0,
                       crpix=1.,
                       naxis=2,
                       energies=None):  #pylint: disable=too-many-arguments
        """ Create a WCS object.

        Parameters
        ----------
        roi_idx : int
            Index of the corresponding ROI

        coordsys : str

        projection : str

        cdelt : float

        crpix : float or (float,float)
            In the first case the same value is used for x and y axes

        Returns
        -------
        wcs : `~astropy.wcs`
        """
        skydir = coordinates.SkyCoord(self._glons[roi_idx],
                                      self._glats[roi_idx],
                                      frame=coordinates.Galactic,
                                      unit="deg")
        wcs = wcs_utils.create_wcs(skydir, coordsys, projection, cdelt, crpix,
                                   naxis, energies)
        return wcs
Ejemplo n.º 2
0
def make_psf_mapcube(skydir, psf, outfile, npix=500, cdelt=0.01, rebin=1):
    energies = psf.energies
    nebin = len(energies)

    k = utils.make_psf_kernel(psf, npix * rebin, cdelt / rebin)

    if rebin > 1:
        k = utils.rebin_map(k, nebin, npix, rebin)
    w = wcs_utils.create_wcs(skydir,
                             cdelt=cdelt,
                             crpix=npix / 2. + 0.5,
                             naxis=3)

    w.wcs.crpix[2] = 1
    w.wcs.crval[2] = 10**energies[0]
    w.wcs.cdelt[2] = energies[1] - energies[0]
    w.wcs.ctype[2] = 'Energy'

    ecol = fits.Column(name='Energy', format='D', array=10**energies)
    hdu_energies = fits.BinTableHDU.from_columns([ecol], name='ENERGIES')

    hdu_image = fits.PrimaryHDU(np.zeros((nebin, npix, npix)),
                                header=w.to_header())

    hdu_image.data[...] = k

    hdu_image.header['CUNIT3'] = 'MeV'

    with fits.HDUList([hdu_image, hdu_energies]) as hdulist:
        hdulist.writeto(outfile, overwrite=True)
Ejemplo n.º 3
0
def make_psf_mapcube(skydir, psf, outfile, npix=500, cdelt=0.01, rebin=1):
    energies = psf.energies
    nebin = len(energies)

    k = utils.make_psf_kernel(psf, npix * rebin, cdelt / rebin)

    if rebin > 1:
        k = utils.rebin_map(k, nebin, npix, rebin)
    w = wcs_utils.create_wcs(skydir, cdelt=cdelt,
                             crpix=npix / 2. + 0.5, naxis=3)

    w.wcs.crpix[2] = 1
    w.wcs.crval[2] = 10 ** energies[0]
    w.wcs.cdelt[2] = energies[1] - energies[0]
    w.wcs.ctype[2] = 'Energy'

    ecol = fits.Column(name='Energy', format='D', array=10 ** energies)
    hdu_energies = fits.BinTableHDU.from_columns([ecol], name='ENERGIES')

    hdu_image = fits.PrimaryHDU(np.zeros((nebin, npix, npix)),
                                header=w.to_header())

    hdu_image.data[...] = k

    hdu_image.header['CUNIT3'] = 'MeV'

    with fits.HDUList([hdu_image, hdu_energies]) as hdulist:
        hdulist.writeto(outfile, overwrite=True)
Ejemplo n.º 4
0
    def create(cls,
               skydir,
               cdelt,
               npix,
               coordsys='CEL',
               projection='AIT',
               ebins=None,
               differential=False):
        crpix = np.array([n / 2. + 0.5 for n in npix])

        if ebins is not None:
            if differential:
                nebins = len(ebins)
            else:
                nebins = len(ebins) - 1
            data = np.zeros(list(npix) + [nebins]).T
            naxis = 3
        else:
            data = np.zeros(npix).T
            naxis = 2

        wcs = wcs_utils.create_wcs(skydir,
                                   coordsys,
                                   projection,
                                   cdelt,
                                   crpix,
                                   naxis=naxis,
                                   energies=ebins)
        return cls(data, wcs, ebins=ebins)
Ejemplo n.º 5
0
    def create(cls, skydir, cdelt, npix, coordsys='CEL', projection='AIT', ebins=None):
        crpix = np.array([n / 2. + 0.5 for n in npix])
        wcs = wcs_utils.create_wcs(skydir, coordsys, projection,
                                   cdelt, crpix)

        if ebins is not None:
            data = np.zeros(list(npix) + [len(ebins) - 1]).T
        else:
            data = np.zeros(npix).T

        return cls(data, wcs, ebins=ebins)
Ejemplo n.º 6
0
def make_disk_spatial_map(skydir, radius, outfile, cdelt=None, npix=None):

    if cdelt is None:
        cdelt = radius / 10.

    if npix is None:
        npix = int(np.ceil((2.0 * (radius + cdelt)) / cdelt))

    w = wcs_utils.create_wcs(skydir, cdelt=cdelt, crpix=npix / 2. + 0.5)
    hdu_image = fits.PrimaryHDU(np.zeros((npix, npix)), header=w.to_header())

    hdu_image.data[:, :] = utils.make_disk_kernel(radius,
                                                  npix=npix,
                                                  cdelt=cdelt)
    with fits.HDUList([hdu_image]) as hdulist:
        hdulist.writeto(outfile, overwrite=True)
Ejemplo n.º 7
0
def make_disk_spatial_map(skydir, radius, outfile, cdelt=None, npix=None):

    if cdelt is None:
        cdelt = radius / 10.

    if npix is None:
        npix = int(np.ceil((2.0 * (radius + cdelt)) / cdelt))

    w = wcs_utils.create_wcs(skydir, cdelt=cdelt, crpix=npix / 2. + 0.5)
    hdu_image = fits.PrimaryHDU(np.zeros((npix, npix)),
                                header=w.to_header())

    hdu_image.data[:, :] = utils.make_disk_kernel(radius, npix=npix,
                                                  cdelt=cdelt)
    with fits.HDUList([hdu_image]) as hdulist:
        hdulist.writeto(outfile, overwrite=True)
Ejemplo n.º 8
0
def make_gaussian_spatial_map(skydir, sigma, outfile, cdelt=None, npix=None):

    if cdelt is None:
        cdelt = sigma / 10.

    if npix is None:
        npix = int(np.ceil((6.0 * (sigma + cdelt)) / cdelt))

    w = wcs_utils.create_wcs(skydir, cdelt=cdelt, crpix=npix / 2. + 0.5)
    hdu_image = pyfits.PrimaryHDU(np.zeros((npix, npix)),
                                  header=w.to_header())

    hdu_image.data[:, :] = utils.make_gaussian_kernel(sigma, npix=npix,
                                                      cdelt=cdelt)
    hdulist = pyfits.HDUList([hdu_image])
    hdulist.writeto(outfile, clobber=True)
Ejemplo n.º 9
0
def make_gaussian_spatial_map(skydir, sigma, outfile, cdelt=None, npix=None):

    if cdelt is None:
        cdelt = sigma / 10.

    if npix is None:
        npix = int(np.ceil((6.0 * (sigma + cdelt)) / cdelt))

    w = wcs_utils.create_wcs(skydir, cdelt=cdelt, crpix=npix / 2. + 0.5)
    hdu_image = fits.PrimaryHDU(np.zeros((npix, npix)), header=w.to_header())

    hdu_image.data[:, :] = utils.make_gaussian_kernel(sigma,
                                                      npix=npix,
                                                      cdelt=cdelt)
    with fits.HDUList([hdu_image]) as hdulist:
        hdulist.writeto(outfile, clobber=True)
Ejemplo n.º 10
0
    def create(cls, skydir, cdelt, npix, coordsys='CEL', projection='AIT', ebins=None, differential=False):
        crpix = np.array([n / 2. + 0.5 for n in npix])

        if ebins is not None:
            if differential:
                nebins = len(ebins)
            else:
                nebins = len(ebins) - 1
            data = np.zeros(list(npix) + [nebins]).T
            naxis = 3
        else:
            data = np.zeros(npix).T
            naxis = 2

        wcs = wcs_utils.create_wcs(skydir, coordsys, projection,
                                   cdelt, crpix, naxis=naxis, energies=ebins)
        return cls(data, wcs, ebins=ebins)
Ejemplo n.º 11
0
 def create(skydir, cdelt, npix, coordsys='CEL', projection='AIT'):
     crpix = np.array([n / 2. + 0.5 for n in npix])
     wcs = wcs_utils.create_wcs(skydir, coordsys, projection,
                                cdelt, crpix)
     return Map(np.zeros(npix).T, wcs)
Ejemplo n.º 12
0
def main():
    """ Hook for command line interface """

    npix = (1800, 900)

    # Argument defintion
    usage = "usage: %(prog)s [input]"
    description = "Collect all the new source"

    parser = argparse.ArgumentParser(usage=usage, description=description)
    parser.add_argument('--input',
                        '-i',
                        default='roi_set.yaml',
                        help='ROI set definition file.')
    parser.add_argument('--output',
                        '-o',
                        type=argparse.FileType('w'),
                        help='Output file.')
    parser.add_argument('--clobber',
                        action='store_true',
                        help='Overwrite output file.')
    parser.add_argument('--filestr',
                        '-f',
                        default="tscube.fits",
                        help="Name of file within each ROI sub-directory")
    parser.add_argument('--extname', '-e', default=0, help="Name of the HDU")
    parser.add_argument('--nbin',
                        type=int,
                        default=None,
                        help="Number of bins per pixel")
    parser.add_argument('--ibin',
                        type=int,
                        default=None,
                        help="Extract data for this bin")
    parser.add_argument('--size',
                        '-s',
                        type=float,
                        default=0.2,
                        help='Pixel size (degrees)')
    parser.add_argument('--proj', '-p', default="AIT", help='Projection')

    # Argument parsing
    args = parser.parse_args()

    # Make a WCS, and get the corresponding mesh of coordinates
    if args.nbin is None:
        npix = (int(np.ceil(360. / args.size)), int(np.ceil(180. / args.size)))
    else:
        npix = (int(np.ceil(360. / args.size)), int(np.ceil(180. / args.size)),
                args.nbin)
    crpix = ((npix[0] + 1.) / 2., (npix[1] + 1.) / 2.)

    skydir_gc = coordinates.SkyCoord(0.,
                                     0.,
                                     frame=coordinates.Galactic,
                                     unit="deg")
    wcs_gc = wcs_utils.create_wcs(skydir_gc,
                                  coordsys='GAL',
                                  projection=args.proj,
                                  cdelt=args.size,
                                  crpix=crpix)

    pix_dirs = np.dstack(
        np.meshgrid(np.arange(1, npix[0] + 1),
                    np.arange(1, npix[1] + 1))).swapaxes(0, 1).reshape(
                        (npix[0] * npix[1], 2))
    sky_crds = wcs_gc.wcs_pix2world(pix_dirs, 1)

    # Make the roi_set object
    roi_set, basedir = dmp_roi.DMROISet.create_from_yaml(args.input)

    kwargs = dict(hdu=args.extname, nbin=args.nbin, ibin=args.ibin)

    # extract the data
    out_array = roi_set.extract_map_data(npix,
                                         sky_crds,
                                         args.filestr,
                                         basedir=basedir,
                                         **kwargs)

    # Write the output
    outmap = skymap.Map(out_array.T, wcs_gc)
    hdulist = pf.HDUList([outmap.create_primary_hdu()])
    hdulist.writeto(args.output)