def _make_extension_fits(self, ext, filename, **kwargs): maps = {'EXT_TOT_MAP': ext['ext_tot_map'], 'EXT_SRC_MAP': ext['ext_src_map'], 'EXT_BKG_MAP': ext['ext_bkg_map'], 'PTSRC_TOT_MAP': ext['ptsrc_tot_map'], 'PTSRC_SRC_MAP': ext['ptsrc_src_map'], 'PTSRC_BKG_MAP': ext['ptsrc_bkg_map']} hdu_images = [] for k, v in sorted(maps.items()): if v is None: continue hdu_images += [v.make_hdu(k)] tab = fits_utils.dict_to_table(ext) hdu_data = fits.table_to_hdu(tab) hdu_data.name = 'EXT_DATA' if ext.get('tsmap'): hdus = [ext['tsmap'].make_hdu(hdu='PRIMARY')] else: hdus = [fits.PrimaryHDU()] hdus += [hdu_data] + hdu_images hdus[0].header['CONFIG'] = json.dumps(utils.tolist(ext['config'])) hdus[1].header['CONFIG'] = json.dumps(utils.tolist(ext['config'])) fits_utils.write_hdus(hdus, filename, keywords={'SRCNAME': ext['name']})
def _make_extension_fits(self, ext, filename, **kwargs): maps = { 'EXT_TOT_MAP': ext['ext_tot_map'], 'EXT_SRC_MAP': ext['ext_src_map'], 'EXT_BKG_MAP': ext['ext_bkg_map'], 'PTSRC_TOT_MAP': ext['ptsrc_tot_map'], 'PTSRC_SRC_MAP': ext['ptsrc_src_map'], 'PTSRC_BKG_MAP': ext['ptsrc_bkg_map'] } hdu_images = [] for k, v in sorted(maps.items()): if v is None: continue hdu_images += [v.make_hdu(k)] tab = fits_utils.dict_to_table(ext) hdu_data = fits.table_to_hdu(tab) hdu_data.name = 'EXT_DATA' if ext.get('tsmap'): hdus = [ext['tsmap'].make_hdu(hdu='PRIMARY')] else: hdus = [fits.PrimaryHDU()] hdus += [hdu_data] + hdu_images hdus[0].header['CONFIG'] = json.dumps(utils.tolist(ext['config'])) hdus[1].header['CONFIG'] = json.dumps(utils.tolist(ext['config'])) fits_utils.write_hdus(hdus, filename, keywords={'SRCNAME': ext['name']})
def _make_lc_fits(self, lc, filename, **kwargs): # produce columns in fits file cols = OrderedDict() cols['tmin'] = Column(name='tmin', dtype='f8', data=lc['tmin'], unit='s') cols['tmax'] = Column(name='tmax', dtype='f8', data=lc['tmax'], unit='s') cols['tmin_mjd'] = Column(name='tmin_mjd', dtype='f8', data=lc['tmin_mjd'], unit='day') cols['tmax_mjd'] = Column(name='tmax_mjd', dtype='f8', data=lc['tmax_mjd'], unit='day') # add in columns for model parameters for k, v in lc.items(): if k in cols: continue if isinstance(v, np.ndarray): cols[k] = Column(name=k, data=v, dtype=v.dtype) tab = Table(cols.values()) hdu_lc = fits.table_to_hdu(tab) hdu_lc.name = 'LIGHTCURVE' hdus = [fits.PrimaryHDU(), hdu_lc] keywords = {'SRCNAME': lc['name'], 'CONFIG': json.dumps(lc['config'])} fits_utils.write_hdus(hdus, filename, keywords=keywords)
def _make_localize_fits(self, loc, filename, **kwargs): tab = fits_utils.dict_to_table(loc) hdu_data = fits.table_to_hdu(tab) hdu_data.name = 'LOC_DATA' hdus = [loc['tsmap_peak'].make_hdu(hdu='PRIMARY'), loc['tsmap'].make_hdu(hdu='TSMAP'), hdu_data] hdus[0].header['CONFIG'] = json.dumps(loc['config']) hdus[2].header['CONFIG'] = json.dumps(loc['config']) fits_utils.write_hdus(hdus, filename)
def _make_localize_fits(self, loc, filename, **kwargs): tab = fits_utils.dict_to_table(loc) hdu_data = fits.table_to_hdu(tab) hdu_data.name = 'LOC_DATA' hdus = [loc['tsmap_peak'].create_primary_hdu(), loc['tsmap'].create_image_hdu('TSMAP'), hdu_data] hdus[0].header['CONFIG'] = json.dumps(loc['config']) hdus[2].header['CONFIG'] = json.dumps(loc['config']) fits_utils.write_hdus(hdus, filename)
def _make_residmap_fits(self, data, filename, **kwargs): maps = {'DATA_MAP': data['data'], 'MODEL_MAP': data['model'], 'EXCESS_MAP': data['excess']} hdu_images = [] for k, v in sorted(maps.items()): if v is None: continue hdu_images += [v.create_image_hdu(k)] hdus = [data['sigma'].create_primary_hdu()] + hdu_images hdus[0].header['CONFIG'] = json.dumps(data['config']) hdus[1].header['CONFIG'] = json.dumps(data['config']) fits_utils.write_hdus(hdus, filename)
def _make_residmap_fits(self, data, filename, **kwargs): maps = {'DATA_MAP': data['data'], 'MODEL_MAP': data['model'], 'EXCESS_MAP': data['excess']} hdu_images = [] for k, v in sorted(maps.items()): if v is None: continue hdu_images += [v.make_hdu(k)] if data['projtype'] == 'WCS': hdus = [data['sigma'].make_hdu(hdu='PRIMARY')] + hdu_images hdus[0].header['CONFIG'] = json.dumps(data['config']) hdus[1].header['CONFIG'] = json.dumps(data['config']) elif data['projtype'] == 'HPX': hdus = [fits.PrimaryHDU(), data['sigma'].make_hdu(hdu="SIGMA")] + hdu_images hdus[1].header['CONFIG'] = json.dumps(data['config']) hdus[2].header['CONFIG'] = json.dumps(data['config']) fits_utils.write_hdus(hdus, filename)
def _make_tsmap_fits(self, data, filename, **kwargs): maps = {'SQRT_TS_MAP': data['sqrt_ts'], 'NPRED_MAP': data['npred'], 'N_MAP': data['amplitude']} hdu_images = [] for k, v in sorted(maps.items()): if v is None: continue hdu_images += [v.create_image_hdu(k)] tab = fits_utils.dict_to_table(data) hdu_data = fits.table_to_hdu(tab) hdu_data.name = 'TSMAP_DATA' hdus = [data['ts'].create_primary_hdu(), hdu_data] + hdu_images hdus[0].header['CONFIG'] = json.dumps(data['config']) hdus[1].header['CONFIG'] = json.dumps(data['config']) fits_utils.write_hdus(hdus, filename)
def _make_tsmap_fits(self, data, filename, **kwargs): maps = {'SQRT_TS_MAP': data['sqrt_ts'], 'NPRED_MAP': data['npred'], 'N_MAP': data['amplitude']} hdu_images = [] for k, v in sorted(maps.items()): if v is None: continue hdu_images += [v.to_hdu(hdu=k)] tab = fits_utils.dict_to_table(data) hdu_data = fits.table_to_hdu(tab) hdu_data.name = 'TSMAP_DATA' hdus = [data['ts'].to_hdu(hdu='PRIMARY'), hdu_data] + hdu_images data['config'].pop('map_skydir', None) hdus[0].header['CONFIG'] = json.dumps(data['config']) hdus[1].header['CONFIG'] = json.dumps(data['config']) fits_utils.write_hdus(hdus, filename)
def _make_sed_fits(self, sed, filename, **kwargs): # Write a FITS file cols = [Column(name='e_min', dtype='f8', data=sed['e_min'], unit='MeV'), Column(name='e_ref', dtype='f8', data=sed['e_ref'], unit='MeV'), Column(name='e_max', dtype='f8', data=sed['e_max'], unit='MeV'), Column(name='ref_dnde_e_min', dtype='f8', data=sed['ref_dnde_e_min'], unit='ph / (MeV cm2 s)'), Column(name='ref_dnde_e_max', dtype='f8', data=sed['ref_dnde_e_max'], unit='ph / (MeV cm2 s)'), Column(name='ref_dnde', dtype='f8', data=sed['ref_dnde'], unit='ph / (MeV cm2 s)'), Column(name='ref_flux', dtype='f8', data=sed['ref_flux'], unit='ph / (cm2 s)'), Column(name='ref_eflux', dtype='f8', data=sed['ref_eflux'], unit='MeV / (cm2 s)'), Column(name='ref_npred', dtype='f8', data=sed['ref_npred']), Column(name='dnde', dtype='f8', data=sed['dnde'], unit='ph / (MeV cm2 s)'), Column(name='dnde_err', dtype='f8', data=sed['dnde_err'], unit='ph / (MeV cm2 s)'), Column(name='dnde_errp', dtype='f8', data=sed['dnde_err_hi'], unit='ph / (MeV cm2 s)'), Column(name='dnde_errn', dtype='f8', data=sed['dnde_err_lo'], unit='ph / (MeV cm2 s)'), Column(name='dnde_ul', dtype='f8', data=sed['dnde_ul'], unit='ph / (MeV cm2 s)'), Column(name='e2dnde', dtype='f8', data=sed['e2dnde'], unit='MeV / (cm2 s)'), Column(name='e2dnde_err', dtype='f8', data=sed['e2dnde_err'], unit='MeV / (cm2 s)'), Column(name='e2dnde_errp', dtype='f8', data=sed['e2dnde_err_hi'], unit='MeV / (cm2 s)'), Column(name='e2dnde_errn', dtype='f8', data=sed['e2dnde_err_lo'], unit='MeV / (cm2 s)'), Column(name='e2dnde_ul', dtype='f8', data=sed['e2dnde_ul'], unit='MeV / (cm2 s)'), Column(name='norm', dtype='f8', data=sed['norm']), Column(name='norm_err', dtype='f8', data=sed['norm_err']), Column(name='norm_errp', dtype='f8', data=sed['norm_err_hi']), Column(name='norm_errn', dtype='f8', data=sed['norm_err_lo']), Column(name='norm_ul', dtype='f8', data=sed['norm_ul95']), Column(name='ts', dtype='f8', data=sed['ts']), Column(name='loglike', dtype='f8', data=sed['loglike']), Column(name='norm_scan', dtype='f8', data=sed['norm_scan']), Column(name='dloglike_scan', dtype='f8', data=sed['dloglike_scan']), ] tab = Table(cols) tab.meta['UL_CONF'] = 0.95 hdu_sed = fits.table_to_hdu(tab) hdu_sed.name = 'SED' columns = fits.ColDefs([]) columns.add_col(fits.Column(name=str('energy'), format='E', array=sed['model_flux']['energies'], unit='MeV')) columns.add_col(fits.Column(name=str('dnde'), format='E', array=sed['model_flux']['dnde'], unit='ph / (MeV cm2 s)')) columns.add_col(fits.Column(name=str('dnde_lo'), format='E', array=sed['model_flux']['dnde_lo'], unit='ph / (MeV cm2 s)')) columns.add_col(fits.Column(name=str('dnde_hi'), format='E', array=sed['model_flux']['dnde_hi'], unit='ph / (MeV cm2 s)')) columns.add_col(fits.Column(name=str('dnde_err'), format='E', array=sed['model_flux']['dnde_err'], unit='ph / (MeV cm2 s)')) columns.add_col(fits.Column(name=str('dnde_ferr'), format='E', array=sed['model_flux']['dnde_ferr'])) hdu_f = fits.BinTableHDU.from_columns(columns, name='MODEL_FLUX') columns = fits.ColDefs([]) npar = len(sed['param_names']) columns.add_col(fits.Column(name=str('name'), format='A32', array=sed['param_names'])) columns.add_col(fits.Column(name=str('value'), format='E', array=sed['param_values'])) columns.add_col(fits.Column(name=str('error'), format='E', array=sed['param_errors'])) columns.add_col(fits.Column(name=str('covariance'), format='%iE' % npar, dim=str('(%i)' % npar), array=sed['param_covariance'])) columns.add_col(fits.Column(name=str('correlation'), format='%iE' % npar, dim=str('(%i)' % npar), array=sed['param_correlation'])) hdu_p = fits.BinTableHDU.from_columns(columns, name='PARAMS') hdus = [fits.PrimaryHDU(), hdu_sed, hdu_f, hdu_p] hdus[0].header['CONFIG'] = json.dumps(sed['config']) hdus[1].header['CONFIG'] = json.dumps(sed['config']) fits_utils.write_hdus(hdus, filename, keywords={'SRCNAME': sed['name']})