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