Пример #1
0
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
Пример #2
0
    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
Пример #3
0
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')