def update_image_wcs_info(tweakwcs_output, headerlet_filenames=None, fit_label=None): """Write newly computed WCS information to image headers and write headerlet files Parameters ---------- tweakwcs_output : list output of tweakwcs. Contains sourcelist tables, newly computed WCS info, etc. for every chip of every valid every valid input image. headerlet_filenames : dictionary, optional dictionary that maps the flt/flc.fits file name to the corresponding custom headerlet filename. Returns ------- out_headerlet_list : dictionary a dictionary of the headerlet files created by this subroutine, keyed by flt/flc fits filename. """ out_headerlet_dict = {} for item in tweakwcs_output: image_name = item.meta['filename'] chipnum = item.meta['chip'] hdulist = fits.open(image_name, mode='update') if chipnum == 1: chipctr = 1 num_sci_ext = amutils.countExtn(hdulist) # generate wcs name for updated image header, headerlet # Just in case header value 'wcs_name' is empty. if fit_label is None: if 'relative' in item.meta['fit method']: fit_label = 'REL' else: fit_label = 'IMG' if not hdulist['SCI', 1].header['WCSNAME'] or hdulist[ 'SCI', 1].header['WCSNAME'] == "": wcs_name = "FIT_{}_{}".format(fit_label, item.meta['catalog_name']) else: wname = hdulist['sci', 1].header['wcsname'] if "-" in wname: wcs_name = '{}-FIT_{}_{}'.format( wname[:wname.index('-')], fit_label, item.meta['fit_info']['catalog']) else: wcs_name = '{}-FIT_{}_{}'.format( wname, fit_label, item.meta['fit_info']['catalog']) # establish correct mapping to the science extensions sci_ext_dict = {} for sci_ext_ctr in range(1, num_sci_ext + 1): sci_ext_dict["{}".format(sci_ext_ctr)] = fileutil.findExtname( hdulist, 'sci', extver=sci_ext_ctr) # update header with new WCS info sci_extn = sci_ext_dict["{}".format(item.meta['chip'])] hdr_name = "{}_{}-hlet.fits".format(image_name.rstrip(".fits"), wcs_name) updatehdr.update_wcs(hdulist, sci_extn, item.wcs, wcsname=wcs_name, reusename=True) info = item.meta['fit_info'] hdulist[sci_extn].header['RMS_RA'] = info['RMS_RA'].value if info[ 'RMS_RA'] is not None else -1.0 hdulist[sci_extn].header['RMS_DEC'] = info['RMS_DEC'].value if info[ 'RMS_DEC'] is not None else -1.0 hdulist[sci_extn].header['CRDER1'] = info['RMS_RA'].value if info[ 'RMS_RA'] is not None else -1.0 hdulist[sci_extn].header['CRDER2'] = info['RMS_DEC'].value if info[ 'RMS_DEC'] is not None else -1.0 hdulist[sci_extn].header['NMATCHES'] = len( info['ref_mag']) if info['ref_mag'] is not None else -1.0 if 'HDRNAME' in hdulist[sci_extn].header: del hdulist[sci_extn].header['HDRNAME'] hdulist[sci_extn].header['HDRNAME'] = hdr_name hdulist.flush() hdulist.close() # Create headerlet out_headerlet = headerlet.create_headerlet(image_name, hdrname=hdr_name, wcsname=wcs_name, logging=False) # Update headerlet update_headerlet_phdu(item, out_headerlet) # Write headerlet if headerlet_filenames: headerlet_filename = headerlet_filenames[ image_name] # Use HAP-compatible filename defined in runhlaprocessing.py else: if image_name.endswith("flc.fits"): headerlet_filename = image_name.replace("flc", "flt_hlet") if image_name.endswith("flt.fits"): headerlet_filename = image_name.replace("flt", "flt_hlet") out_headerlet.writeto(headerlet_filename, overwrite=True) log.info("Wrote headerlet file {}.\n\n".format(headerlet_filename)) out_headerlet_dict[image_name] = headerlet_filename # Attach headerlet as HDRLET extension if headerlet.verify_hdrname_is_unique(hdulist, hdr_name): headerlet.attach_headerlet(image_name, headerlet_filename, logging=False) chipctr += 1 return (out_headerlet_dict)
def run(configObj=None): headerlet.attach_headerlet(configObj['filename'], configObj['hdrlet'], configObj['logging'])
def run(configObj=None): headerlet.attach_headerlet(configObj['filename'],configObj['hdrlet'], configObj['logging'])