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