diff options
-rw-r--r-- | updatewcs/det2im.py | 20 | ||||
-rw-r--r-- | updatewcs/dgeo.py | 31 |
2 files changed, 33 insertions, 18 deletions
diff --git a/updatewcs/det2im.py b/updatewcs/det2im.py index 90fe339..c8e9ab8 100644 --- a/updatewcs/det2im.py +++ b/updatewcs/det2im.py @@ -42,8 +42,8 @@ class DET2IMCorr(object): getAxisCorr = classmethod(getAxisCorr) def applyDet2ImCorr(cls,fobj, axiscorr): - d2imfile = fileutil.osfn(fobj[0].header['D2IMFILE']) - hdu = cls.createDgeoHDU(d2imfile, axiscorr) + + hdu = cls.createDgeoHDU(fobj, axiscorr) d2imarr_ind = cls.getD2imIndex(fobj) if d2imarr_ind: fobj[d2imarr_ind] = hdu @@ -63,30 +63,32 @@ class DET2IMCorr(object): return index getD2imIndex = classmethod(getD2imIndex) - def createDgeoHDU(cls, d2imfile, axiscorr): - + def createDgeoHDU(cls, fobj, axiscorr): + d2imfile = fileutil.osfn(fobj[0].header['D2IMFILE']) d2im_data = pyfits.getdata(d2imfile, ext=1) - d2im_hdr = cls.createDet2ImHdr(d2im_data.shape, axiscorr) + sci_hdr = fobj['sci',1].header + d2im_hdr = cls.createDet2ImHdr(sci_hdr, d2im_data.shape, axiscorr) hdu = pyfits.ImageHDU(header=d2im_hdr, data=d2im_data) return hdu createDgeoHDU = classmethod(createDgeoHDU) - def createDet2ImHdr(cls, data_shape, axiscorr): + def createDet2ImHdr(cls, sci_hdr, data_shape, axiscorr): """ Creates a header for the D2IMARR extension based on the reference file recorded in D2IMFILE keyword in the primary header. """ - + ltv1 = sci_hdr.get('LTV1', 0.0) + ltv2 = sci_hdr.get('LTV2', 0.0) naxis1 = data_shape[0] naxis2 = 0 crpix1 = 0.0 crpix2 = 0.0 cdelt1 = 1.0 cdelt2 = 1.0 - crval1 = 0.0 - crval2 = 0.0 + crval1 = 0.0 + ltv1 + crval2 = 0.0 + ltv2 keys = ['XTENSION','BITPIX','NAXIS','NAXIS1','NAXIS2', 'EXTNAME','EXTVER','PCOUNT','GCOUNT','CRPIX1', 'CDELT1','CRVAL1','CRPIX2','CDELT2','CRVAL2', 'AXISCORR'] diff --git a/updatewcs/dgeo.py b/updatewcs/dgeo.py index e50725d..d1db3fd 100644 --- a/updatewcs/dgeo.py +++ b/updatewcs/dgeo.py @@ -184,23 +184,36 @@ class DGEOCorr(object): def createDgeoHdr(cls, sciheader, dgeofile, wdvarr_ver, dgeoname, extver): """ Creates a header for the WCSDVARR extension based on the DGEO reference file - and sci extension header. + and sci extension header. The goal is to always work in image coordinates + (also for subarrays and binned images. The WCS for the WCSDVARR extension + i ssuch that a full size dgeo table is created and then shifted or scaled + if the science image is a subarray or binned image. """ dgeo_header = pyfits.getheader(dgeofile, ext=(dgeoname,extver)) - sci_naxis1 = sciheader['NAXIS1'] - sci_naxis2 = sciheader['NAXIS2'] - sci_crpix1 = sciheader['CRPIX1'] - sci_crpix2 = sciheader['CRPIX2'] + + #LTV1/2 are needed to map correctly dgeo files into subarray coordinates + ltv1 = sciheader.get('LTV1', 0.0) + ltv2 = sciheader.get('LTV2', 0.0) + + # This is the size of the full dgeo chip + # recorded in the small dgeo table and needed in order to map to full dgeo + # chip coordinates. + chip_size1 = dgeo_header['ONAXIS1'] + chip_size2 = dgeo_header['ONAXIS2'] naxis1 = dgeo_header['naxis1'] naxis2 = dgeo_header['naxis2'] extver = dgeo_header['extver'] crpix1 = naxis1/2. crpix2 = naxis2/2. - cdelt1 = float(sci_naxis1)/naxis1 - cdelt2 = float(sci_naxis2)/naxis2 - crval1 = sci_crpix1 - crval2 = sci_crpix2 + cdelt1 = float(chip_size1)/naxis1 + cdelt2 = float(chip_size2)/naxis2 + + # CRVAL1/2 of the small dgeo table is the shifted center of the full + # dgeo chip. + crval1 = chip_size1/2. +ltv1 + crval2 = chip_size2/2. + ltv2 + keys = ['XTENSION','BITPIX','NAXIS','NAXIS1','NAXIS2', 'EXTNAME','EXTVER','PCOUNT','GCOUNT','CRPIX1', 'CDELT1','CRVAL1','CRPIX2','CDELT2','CRVAL2'] |