22__all__ = [
"CosmicRayPostDiffConfig",
"CosmicRayPostDiffTask"]
25import lsst.pipe.base
as pipeBase
26import lsst.pipe.base.connectionTypes
as cT
27from lsst.utils.timer
import timeMethod
28from .repair
import RepairTask
32 dimensions=(
"instrument",
"visit",
"detector"),
33 defaultTemplates={
"coaddName":
"deep",
36 doc=
"Input difference image",
37 name=
"{fakesType}{coaddName}Diff_differenceExp",
38 storageClass=
"ExposureF",
39 dimensions=(
"instrument",
"visit",
"detector"),
42 doc=
"Output subtracted image after CR run.",
43 name=
"{fakesType}{coaddName}Diff_repairedExp",
44 storageClass=
"ExposureF",
45 dimensions=(
"instrument",
"visit",
"detector"),
48 def adjustQuantum(self, inputs, outputs, label, dataId):
51 return super().adjustQuantum(inputs, outputs, label, dataId)
52 except pipeBase.ScalarError
as err:
53 raise pipeBase.ScalarError(
54 "CosmicRayPostDiffTask can at present only be run on visits that are associated with "
55 "exactly one exposure. Either this is not a valid exposure for this pipeline, or the "
56 "snap-combination step you probably want hasn't been configured to run between ISR and "
57 "this task (as of this writing, that would be because it hasn't been implemented yet)."
61class CosmicRayPostDiffConfig(pipeBase.PipelineTaskConfig,
62 pipelineConnections=CosmicRayPostDiffConnections):
64 """Config for CosmicRayPostDiffTask"""
65 repair = pexConfig.ConfigurableField(
67 doc=
"Remove cosmic rays",
70 def setDefaults(self):
74class CosmicRayPostDiffTask(pipeBase.PipelineTask):
75 """ Detect and repair cosmic rays on an image difference.
76 Given an output image from image differencing:
77 - detect
and repair cosmic rays
78 - At the moment this task does NOT recompute the PSF
or re-do source detection.
79 To invoke the task, Call the `run` method.
82 ConfigClass = CosmicRayPostDiffConfig
83 _DefaultName = "cosmicRayPostDiff"
85 def runQuantum(self, butlerQC, inputRefs, outputRefs):
86 inputs = butlerQC.get(inputRefs)
87 outputs = self.run(**inputs)
88 butlerQC.put(outputs, outputRefs)
90 def __init__(self, **kwargs):
91 """Construct a CosmicRayPostDiffTask"""
92 super().__init__(**kwargs)
93 self.makeSubtask(
"repair")
96 def run(self, exposure):
97 """Run cosmic ray detection and repair on imageDifference outputs
102 The following changes are made to the exposure,
103 - Blank cosmic ray mask planes, run CR detection and repair, update CR mask plane
107 `lsst.pipe.base.Struct`:
108 Struct containing the input image
with the CR mask plane first blanked,
109 and then cosmic rays detected,
and the mask
is updated accordingly.
110 The PSF model
is NOT changed.
113 self.repair.run(exposure=exposure)
115 return pipeBase.Struct(