23 "VisualizeBinExpConfig",
24 "VisualizeBinExpTask",
25 "VisualizeMosaicExpConfig",
26 "VisualizeMosaicExpTask",
27 "VisualizeBinCalibConfig",
28 "VisualizeBinCalibTask",
29 "VisualizeMosaicCalibConfig",
30 "VisualizeMosaicCalibTask",
31 "VisualizeBinCalibFilterConfig",
32 "VisualizeBinCalibFilterTask",
33 "VisualizeMosaicCalibFilterConfig",
34 "VisualizeMosaicCalibFilterTask",
43import lsst.pipe.base
as pipeBase
44import lsst.pipe.base.connectionTypes
as cT
50 pipeBase.PipelineTaskConnections, dimensions=(
"instrument",
"visit",
"detector")
52 camera = cT.PrerequisiteInput(
54 doc=
"Input camera to use for mosaic geometry.",
55 storageClass=
"Camera",
56 dimensions=(
"instrument",),
61 doc=
"Input exposure data to mosaic.",
62 storageClass=
"ExposureF",
63 dimensions=(
"instrument",
"visit",
"detector"),
65 outputExp = cT.Output(
67 doc=
"Output binned image.",
68 storageClass=
"ExposureF",
69 dimensions=(
"instrument",
"visit",
"detector"),
73 """Customize connections for a specific instance.
75 This customization enables for dynamic setup at runtime,
76 allowing VisualizeBinExpTask to work with different types of
77 Exposures such as postISRCCDs and calexps.
81 config : `VisualizeBinExpConfig`
82 A config for `VisualizeBinExpTask`.
87 self.dimensions.clear()
88 self.dimensions.update(config.dimensions)
92 storageClass=config.storageClass,
93 dimensions=config.dimensions,
97 storageClass=config.storageClass,
98 dimensions=config.dimensions,
103 """Configuration for focal plane visualization."""
105 storageClass = pexConfig.Field(
106 default=VisualizeBinExpConnections.inputExp.storageClass,
109 "The storageClasses of the input and output exposures. "
110 "Must be of type lsst.afw.Image.Exposure, or one of its subtypes."
113 dimensions = pexConfig.ListField(
115 default=sorted(VisualizeBinExpConnections.dimensions),
117 doc=
"The task dimensions, also applied to the input/output exposures. ",
119 binning = pexConfig.Field(
122 doc=
"Binning factor to apply to each input exposure's image data.",
124 detectorKeyword = pexConfig.Field(
127 doc=
"Metadata keyword to use to find detector if not available from input.",
132 """Bin the detectors of an exposure.
134 The outputs of this task should be passed to
135 VisualizeMosaicExpTask to be mosaicked into a full focal plane
139 ConfigClass = VisualizeBinExpConfig
140 _DefaultName =
"VisualizeBinExp"
142 def run(self, inputExp, camera):
143 """Bin input image, attach associated detector.
147 inputExp : `lsst.afw.image.Exposure`
148 Input exposure data to bin.
149 camera : `lsst.afw.cameraGeom.Camera`
150 Input camera to use for mosaic geometry.
154 output : `lsst.pipe.base.Struct`
155 Results struct with attribute:
158 Binned version of input image (`lsst.afw.image.Exposure`).
160 if inputExp.getDetector()
is None:
161 detectorId = inputExp.getMetadata().get(self.config.detectorKeyword)
162 if detectorId
is not None:
163 inputExp.setDetector(camera[detectorId])
165 binned = inputExp.getMaskedImage()
166 binned = afwMath.binImage(binned, self.config.binning)
167 outputExp = afwImage.makeExposure(binned)
169 outputExp.setInfo(inputExp.getInfo())
171 return pipeBase.Struct(outputExp=outputExp)
176 camera = cT.PrerequisiteInput(
178 doc=
"Input camera to use for mosaic geometry.",
179 storageClass=
"Camera",
180 dimensions=(
"instrument",),
183 inputExps = cT.Input(
185 doc=
"Input binned images to mosaic.",
186 storageClass=
"ExposureF",
187 dimensions=(
"instrument",
"visit",
"detector"),
190 outputData = cT.Output(
191 name=
"calexpFocalPlane",
192 doc=
"Output binned mosaicked frame.",
193 storageClass=
"ImageF",
194 dimensions=(
"instrument",
"visit"),
198 """Customize connections for a specific instance.
200 This customization enables for dynamic setup at runtime,
201 allowing VisualizeMosaicExpTask to work with different types of
202 Exposures such as postISRCCDs and calexps.
206 config : `VisualizeMosaicExpTask`
207 A config for `VisualizeMosaicExpTask`.
212 self.dimensions.clear()
213 self.dimensions.update(config.dimensions)
215 inputExpsDimensions = list(config.dimensions) + [
"detector"]
218 storageClass=config.storageClass,
219 dimensions=inputExpsDimensions,
223 dimensions=config.dimensions,
228 pipeBase.PipelineTaskConfig, pipelineConnections=VisualizeMosaicExpConnections
230 """Configuration for focal plane visualization."""
232 storageClass = pexConfig.Field(
233 default=VisualizeMosaicExpConnections.inputExps.storageClass,
236 "The storageClass of the input exposures. "
237 "Must be of type lsst.afw.Image.Exposure, or one of its subtypes."
240 dimensions = pexConfig.ListField(
242 default=sorted(VisualizeMosaicExpConnections.dimensions),
244 doc=
"The task dimensions, also applied to the input/output exposures. "
245 "Note: the input exposure will have 'detector' appended by default.",
247 binning = pexConfig.Field(
250 doc=
"Binning factor previously applied to input exposures.",
255 """Task to mosaic binned products.
257 The config.binning parameter must match that used in the
258 VisualizeBinExpTask. Otherwise there will be a mismatch between
259 the input image size and the expected size of that image in the
260 full focal plane frame.
263 ConfigClass = VisualizeMosaicExpConfig
264 _DefaultName =
"VisualizeMosaicExp"
267 """Make an image of an entire focal plane.
271 exposures: `dict` [`int`, `lsst.afw.image.Exposure`]
272 CCD exposures, binned by `binning`. The keys are the
273 detectorIDs, with the values the binned image exposure.
277 image : `lsst.afw.image.Image`
278 Image mosaicked from the individual binned images for each
281 image = afwUtils.makeImageFromCamera(
282 camera, imageSource=
ImageSource(inputExps), imageFactory=afwImage.ImageF, binSize=binning
286 def run(self, inputExps, camera, inputIds=None):
287 """Mosaic inputs together to create focal plane image.
291 inputExps : `list` [`lsst.afw.image.Exposure`]
292 Input exposure data to bin.
293 camera : `lsst.afw.cameraGeom.Camera`
294 Input camera to use for mosaic geometry.
295 inputIds : `list` [`int`], optional
296 Optional list providing exposure IDs corresponding to input
297 exposures. Will be generated via the exposure data `getDetector`
298 method if not provided.
302 output : `lsst.pipe.base.Struct`
303 Results struct with attribute:
306 Binned version of input image (`lsst.afw.image.Exposure`).
309 inputIds = [exp.getDetector().getId()
for exp
in inputExps]
310 expDict = {id: exp
for id, exp
in zip(inputIds, inputExps)}
313 return pipeBase.Struct(outputData=image)
317 """Source of images for makeImageFromCamera"""
325 """Provide image of CCD to makeImageFromCamera
330 Detector ID to get image data for.
331 imageFactory : `lsst.afw.image.Image`
332 Type of image to construct.
334 Binsize to use to recompute dimensions.
338 image : `lsst.afw.image.Image`
339 Appropriately rotated, binned, and transformed
340 image to be mosaicked.
341 detector : `lsst.afw.cameraGeom.Detector`
342 Camera detector that the returned image data
345 detId = detector.getId()
348 dims = detector.getBBox().getDimensions() / binSize
349 image = imageFactory(*[int(xx)
for xx
in dims])
353 if hasattr(image,
"getMaskedImage"):
354 image = image.getMaskedImage()
355 if hasattr(image,
"getMask"):
356 mask = image.getMask()
357 isBad = mask.getArray() & mask.getPlaneBitMask(
"NO_DATA") > 0
358 image = image.clone()
359 image.getImage().getArray()[isBad] = self.
background
360 if hasattr(image,
"getImage"):
361 image = image.getImage()
365 image = afwMath.rotateImageBy90(image, detector.getOrientation().getNQuarter())
366 return image, detector
375 doc=
"Input exposure data to mosaic.",
376 storageClass=
"ExposureF",
377 dimensions=(
"instrument",
"detector"),
380 camera = cT.PrerequisiteInput(
382 doc=
"Input camera to use for mosaic geometry.",
383 storageClass=
"Camera",
384 dimensions=(
"instrument",),
388 outputExp = cT.Output(
390 doc=
"Output binned image.",
391 storageClass=
"ExposureF",
392 dimensions=(
"instrument",
"detector"),
401 """Bin the detectors of an calibration.
403 The outputs of this task should be passed to
404 VisualizeMosaicCalibTask to be mosaicked into a full focal plane
408 ConfigClass = VisualizeBinCalibConfig
409 _DefaultName =
"VisualizeBinCalib"
418 inputExps = cT.Input(
420 doc=
"Input binned images mosaic.",
421 storageClass=
"ExposureF",
422 dimensions=(
"instrument",
"detector"),
425 camera = cT.PrerequisiteInput(
427 doc=
"Input camera to use for mosaic geometry.",
428 storageClass=
"Camera",
429 dimensions=(
"instrument",),
433 outputData = cT.Output(
434 name=
"biasFocalPlane",
435 doc=
"Output binned mosaicked frame.",
436 storageClass=
"ImageF",
437 dimensions=(
"instrument",),
442 VisualizeMosaicExpConfig, pipelineConnections=VisualizeMosaicCalibConnections
448 """Task to mosaic binned products.
450 The config.binning parameter must match that used in the
451 VisualizeBinCalibTask. Otherwise there will be a mismatch between
452 the input image size and the expected size of that image in the
453 full focal plane frame.
456 ConfigClass = VisualizeMosaicCalibConfig
457 _DefaultName =
"VisualizeMosaicCalib"
466 pipeBase.PipelineTaskConnections, dimensions=(
"instrument",
"detector",
"physical_filter")
470 doc=
"Input exposure data to mosaic.",
471 storageClass=
"ExposureF",
472 dimensions=(
"instrument",
"detector",
"physical_filter"),
475 camera = cT.PrerequisiteInput(
477 doc=
"Input camera to use for mosaic geometry.",
478 storageClass=
"Camera",
479 dimensions=(
"instrument",),
483 outputExp = cT.Output(
485 doc=
"Output binned image.",
486 storageClass=
"ExposureF",
487 dimensions=(
"instrument",
"detector",
"physical_filter"),
492 VisualizeBinExpConfig, pipelineConnections=VisualizeBinCalibFilterConnections
498 """Bin the detectors of an calibration.
500 The outputs of this task should be passed to
501 VisualizeMosaicCalibTask to be mosaicked into a full focal plane
505 ConfigClass = VisualizeBinCalibFilterConfig
506 _DefaultName =
"VisualizeBinCalibFilter"
515 pipeBase.PipelineTaskConnections,
516 dimensions=(
"instrument",
"physical_filter"),
518 inputExps = cT.Input(
520 doc=
"Input binned images mosaic.",
521 storageClass=
"ExposureF",
522 dimensions=(
"instrument",
"detector",
"physical_filter"),
525 camera = cT.PrerequisiteInput(
527 doc=
"Input camera to use for mosaic geometry.",
528 storageClass=
"Camera",
529 dimensions=(
"instrument",),
533 outputData = cT.Output(
534 name=
"flatFocalPlane",
535 doc=
"Output binned mosaicked frame.",
536 storageClass=
"ImageF",
537 dimensions=(
"instrument",
"physical_filter"),
542 VisualizeMosaicExpConfig, pipelineConnections=VisualizeMosaicCalibFilterConnections
548 """Task to mosaic binned products.
550 The config.binning parameter must match that used in the
551 VisualizeBinCalibFilterTask. Otherwise there will be a mismatch between
552 the input image size and the expected size of that image in the
553 full focal plane frame.
556 ConfigClass = VisualizeMosaicCalibFilterConfig
557 _DefaultName =
"VisualizeMosaicCalibFilter"
__init__(self, exposures)
getCcdImage(self, detector, imageFactory, binSize)
__init__(self, *, config=None)
run(self, inputExp, camera)
__init__(self, *, config=None)
makeCameraImage(self, inputExps, camera, binning)
run(self, inputExps, camera, inputIds=None)