from keckdrpframework.primitives.base_primitive import BasePrimitive
from kcwidrp.primitives.kcwi_file_primitives import kcwi_fits_writer
import numpy as np
[docs]class RectifyImage(BasePrimitive):
"""Ensure output image has a consistent orientation"""
def __init__(self, action, context):
BasePrimitive.__init__(self, action, context)
self.logger = context.pipeline_logger
def _perform(self):
# Header keyword to update
key = 'IMGRECT'
keycom = 'Image rectified?'
# get amp mode
ampmode = self.action.args.ccddata.header['AMPMODE'].strip().upper()
if '__B' in ampmode or '__G' in ampmode:
newimg = np.rot90(self.action.args.ccddata.data, 2)
self.action.args.ccddata.data = newimg
if self.action.args.ccddata.uncertainty:
newunc = np.rot90(self.action.args.ccddata.uncertainty.array, 2)
self.action.args.ccddata.uncertainty.array = newunc
mask = getattr(self.action.args.ccddata, "mask", None)
if mask is not None:
newmask = np.rot90(mask, 2)
self.action.args.ccddata.mask = newmask
else:
self.logger.info("No mask data to rectify")
flags = getattr(self.action.args.ccddata, "flags", None)
if flags is not None:
newflags = np.rot90(flags, 2)
self.action.args.ccddata.flags = newflags
else:
self.logger.info("No flags data to rectify")
elif '__D' in ampmode or '__F' in ampmode:
newimg = np.fliplr(self.action.args.ccddata.data)
self.action.args.ccddata.data = newimg
if self.action.args.ccddata.uncertainty:
newunc = np.fliplr(self.action.args.ccddata.uncertainty.array)
self.action.args.ccddata.uncertainty.array = newunc
mask = getattr(self.action.args.ccddata, "mask", None)
if mask is not None:
newmask = np.fliplr(mask)
self.action.args.ccddata.mask = newmask
else:
self.logger.info("No mask data to rectify")
flags = getattr(self.action.args.ccddata, "flags", None)
if flags is not None:
newflags = np.fliplr(flags)
self.action.args.ccddata.flags = newflags
else:
self.logger.info("No flags data to rectify")
elif '__A' in ampmode or '__H' in ampmode or 'TUP' in ampmode:
newimg = np.flipud(self.action.args.ccddata.data)
self.action.args.ccddata.data = newimg
if self.action.args.ccddata.uncertainty:
newunc = np.flipud(self.action.args.ccddata.uncertainty.array)
self.action.args.ccddata.uncertainty.array = newunc
mask = getattr(self.action.args.ccddata, "mask", None)
if mask is not None:
newmask = np.flipud(mask)
self.action.args.ccddata.mask = newmask
else:
self.logger.info("No mask data to rectify")
flags = getattr(self.action.args.ccddata, "flags", None)
if flags is not None:
newflags = np.flipud(flags)
self.action.args.ccddata.flags = newflags
else:
self.logger.info("No flags data to rectify")
self.action.args.ccddata.header[key] = (True, keycom)
log_string = RectifyImage.__module__
self.action.args.ccddata.header['HISTORY'] = log_string
self.logger.info(log_string)
# write out int image
kcwi_fits_writer(self.action.args.ccddata,
table=self.action.args.table,
output_file=self.action.args.name,
output_dir=self.config.instrument.output_directory,
suffix="int")
self.context.proctab.update_proctab(frame=self.action.args.ccddata,
suffix="int",
filename=self.action.args.name)
self.context.proctab.write_proctab()
return self.action.args
# END: class RectifyImage()