21from abc
import abstractmethod
22from typing
import Optional
25from lsst.pipe.base
import Task
27from .isrFunctions
import checkFilter
28from .calibType
import IsrCalib
32 doRotatorAngleCorrection = Field(
40 doc=
"Filters that need straylight correction.",
46 """Remove stray light from instruments.
48 This is a dummy task to be retargeted
with an camera-specific version.
50 ConfigClass = StrayLightConfig
51 _DefaultName = "isrStrayLight"
54 """Read and return calibration products relevant for correcting
55 stray light in the given exposure.
59 dataRef : `daf.persistence.butlerSubset.ButlerDataRef`
60 Butler reference of the detector data to be processed
62 The raw exposure that will later be corrected
with the
63 retrieved calibration data; should
not be modified
in this
68 straylightData : `object`, optional
69 An opaque object that should be passed
as the second argument to
70 the `run` method. If `
None`, no stray light correction will be
71 performed
for the given image. Any other object (e.g. `
True`)
72 may be used to signal that stray light correction should be
73 performed even
if there
is nothing to read.
77 This method will be called only when `IsrTask`
is run by the Gen2
78 Middleware (i.e. CmdLineTask).
83 """Check if stray light correction should be run.
92 def run(self, exposure, strayLightData):
93 """Correct stray light.
99 strayLightData : `object`, optional
100 An opaque object that contains any calibration data used to
101 correct for stray light.
103 raise NotImplementedError(
"Must be implemented by subclasses.")
105 def checkFilter(self, exposure):
106 """Check whether we should fringe-subtract the science exposure.
111 Exposure to check the filter of.
116 If True, then the exposure has a filter listed
in the
117 configuration,
and should have the fringe applied.
119 return checkFilter(exposure, self.config.filters, log=self.log)
123 """An abstract base class for rotator-dependent stray light information.
127 def evaluate(self, angle_start: Angle, angle_end: Optional[Angle] =
None):
128 """Get a stray light array for a range of rotator angles.
132 angle_begin : `float`
133 Instrument rotation angle at the start of the exposure.
134 angle_end : `float`, optional
135 Instrument rotation angle at the end of the exposure.
136 If not provided, the returned array will reflect a snapshot at
141 array : `numpy.ndarray`
142 A stray-light background image
for this exposure.
144 raise NotImplementedError(
"Must be implemented by subclasses.")
def evaluate(self, Angle angle_start, Optional[Angle] angle_end=None)
def check(self, exposure)
def run(self, exposure, strayLightData)
def readIsrData(self, dataRef, rawExposure)