def makeCameraImage(camera, exposures, binning): """Make and write an image of an entire focal plane Parameters ---------- camera : `lsst.afw.cameraGeom.Camera` Camera description. exposures : `dict` mapping detector ID to `lsst.afw.image.Exposure` CCD exposures, binned by `binning`. binning : `int` Binning size that has been applied to images. """ class ImageSource(object): """Source of images for makeImageFromCamera""" def __init__(self, exposures): """Constructor Parameters ---------- exposures : `dict` mapping detector ID to `lsst.afw.image.Exposure` CCD exposures, already binned. """ self.isTrimmed = True self.exposures = exposures self.background = np.nan def getCcdImage(self, detector, imageFactory, binSize): """Provide image of CCD to makeImageFromCamera""" detId = detector.getId() if detId not in self.exposures: dims = detector.getBBox().getDimensions() / binSize image = imageFactory(*[int(xx) for xx in dims]) image.set(self.background) else: image = self.exposures[detector.getId()] if hasattr(image, "getMaskedImage"): image = image.getMaskedImage() if hasattr(image, "getMask"): mask = image.getMask() isBad = mask.getArray() & mask.getPlaneBitMask("NO_DATA") > 0 image = image.clone() image.getImage().getArray()[isBad] = self.background if hasattr(image, "getImage"): image = image.getImage() image = afwMath.rotateImageBy90( image, detector.getOrientation().getNQuarter()) return image, detector image = makeImageFromCamera(camera, imageSource=ImageSource(exposures), imageFactory=afwImage.ImageF, binSize=binning) return image
def makeCameraImage(self, inputExps, camera, binning): """Make an image of an entire focal plane. Parameters ---------- exposures: `dict` [`int`, `lsst.afw.image.Exposure`] CCD exposures, binned by `binning`. The keys are the detectorIDs, with the values the binned image exposure. Returns ------- image : `lsst.afw.image.Image` Image mosaicked from the individual binned images for each detector. """ image = afwUtils.makeImageFromCamera( camera, imageSource=ImageSource(inputExps), imageFactory=afwImage.ImageF, binSize=binning) return image
import os import glob import lsst.afw.image as afwImage from lsst.afw.cameraGeom import utils as cgu import lsst.obs.lsst as obs_lsst import lsst_camera.cp_pipe_drivers as cpd camera = obs_lsst.LsstCamMapper().camera det_names = [ 'R22_S00', 'R22_S01', 'R22_S02', 'R22_S10', 'R22_S11', 'R22_S12', 'R22_S20', 'R22_S21', 'R22_S22' ] image_source = cpd.CalibImageSource('CALIB/bias/2019-10-18') bias_image = cgu.makeImageFromCamera(camera, detectorNameList=det_names, imageSource=image_source, imageFactory=afwImage.ImageF) bias_image.writeFits('BOT_R22_6813D_bias_mosaic.fits') image_source = CalibImageSource('CALIB/dark/2019-10-18') #image_source = cpd.CalibImageSource( # 'calib_products/rerun/dark_calibs_nobias/dark/2019-10-18') dark_image = cgu.makeImageFromCamera(camera, detectorNameList=det_names, imageSource=image_source, imageFactory=afwImage.ImageF) dark_image.writeFits('BOT_R22_6813D_dark_mosaic.fits') #dark_image.writeFits('BOT_R22_6813D_dark_mosaic_nobias.fits')