from __future__ import print_function
import numpy as np
import astropy.time
from legacypipe.image import LegacySurveyImage, CP_DQ_BITS
'''
Code specific to images from the Dark Energy Camera (DECam).
'''
[docs]class DecamImage(LegacySurveyImage):
'''
A LegacySurveyImage subclass to handle images from the Dark Energy
Camera, DECam, on the Blanco telescope.
'''
def __init__(self, survey, t):
super(DecamImage, self).__init__(survey, t)
# Adjust zeropoint for exposure time
self.ccdzpt += 2.5 * np.log10(self.exptime)
[docs] def read_invvar(self, **kwargs):
return self.read_invvar_clipped(**kwargs)
glowmjd = astropy.time.Time('2014-08-01').utc.mjd
[docs] def get_good_image_subregion(self):
x0,x1,y0,y1 = None,None,None,None
# Handle 'glowing' edges in DES r-band images
# aww yeah
if self.band == 'r' and (
('DES' in self.imgfn) or ('COSMOS' in self.imgfn) or
(self.mjdobs < DecamImage.glowmjd)):
# Northern chips: drop 100 pix off the bottom
if 'N' in self.ccdname:
print('Clipping bottom part of northern DES r-band chip')
y0 = 100
else:
# Southern chips: drop 100 pix off the top
print('Clipping top part of southern DES r-band chip')
y1 = self.height - 100
# Clip the bad half of chip S7.
# The left half is OK.
if self.ccdname == 'S7':
print('Clipping the right half of chip S7')
x1 = 1023
return x0,x1,y0,y1
[docs] def remap_dq(self, dq, hdr):
'''
Called by get_tractor_image() to map the results from read_dq
into a bitmask.
'''
primhdr = self.read_primary_header(self.dqfn)
plver = primhdr['PLVER']
if decam_has_dq_codes(plver):
dq = self.remap_dq_cp_codes(dq, hdr)
else:
from legacypipe.image import CP_DQ_BITS
dq = dq.astype(np.int16)
# Un-set the SATUR flag for pixels that also have BADPIX set.
bothbits = CP_DQ_BITS['badpix'] | CP_DQ_BITS['satur']
I = np.flatnonzero((dq & bothbits) == bothbits)
if len(I):
print('Warning: un-setting SATUR for', len(I),
'pixels with SATUR and BADPIX set.')
dq.flat[I] &= ~CP_DQ_BITS['satur']
assert(np.all((dq & bothbits) != bothbits))
return dq
def decam_has_dq_codes(plver):
from distutils.version import StrictVersion
# The format of the DQ maps changed as of version 3.5.0 of the
# Community Pipeline. Handle that here...
plver = plver.strip()
plver = plver.replace('V','')
plver = plver.replace('DES ', '')
plver = plver.replace('+1', 'a1')
return StrictVersion(plver) >= StrictVersion('3.5.0')