21 from abc
import ABC, abstractmethod
22 from typing
import Optional
24 from lsst.pex.config
import Config, Field, ListField
30 doRotatorAngleCorrection = Field(
37 doc=
"Filters that need straylight correction.",
43 """Remove stray light from instruments.
45 This is a dummy task to be retargeted with an camera-specific version.
47 ConfigClass = StrayLightConfig
48 _DefaultName =
"isrStrayLight"
51 """Read and return calibration products relevant for correcting
52 stray light in the given exposure.
56 dataRef : `daf.persistence.butlerSubset.ButlerDataRef`
57 Butler reference of the detector data to be processed
58 rawExposure : `afw.image.Exposure`
59 The raw exposure that will later be corrected with the
60 retrieved calibration data; should not be modified in this
65 straylightData : `object`, optional
66 An opaque object that should be passed as the second argument to
67 the `run` method. If `None`, no stray light correction will be
68 performed for the given image. Any other object (e.g. `True`)
69 may be used to signal that stray light correction should be
70 performed even if there is nothing to read.
74 This method will be called only when `IsrTask` is run by the Gen2
75 Middleware (i.e. CmdLineTask).
80 """Check if stray light correction should be run.
84 exposure : `lsst.afw.image.Exposure`
89 def run(self, exposure, strayLightData):
90 """Correct stray light.
94 exposure : `lsst.afw.image.Exposure`
96 strayLightData : `object`, optional
97 An opaque object that contains any calibration data used to
98 correct for stray light.
100 raise NotImplementedError(
"Must be implemented by subclasses.")
103 """Check whether we should fringe-subtract the science exposure.
107 exposure : `lsst.afw.image.Exposure`
108 Exposure to check the filter of.
113 If True, then the exposure has a filter listed in the
114 configuration, and should have the fringe applied.
120 """An abstract base class for rotator-dependent stray light information.
124 def evaluate(self, angle_start: Angle, angle_end: Optional[Angle] =
None):
125 """Get a stray light array for a range of rotator angles.
129 angle_begin : `float`
130 Instrument rotation angle at the start of the exposure.
131 angle_end : `float`, optional
132 Instrument rotation angle at the end of the exposure.
133 If not provided, the returned array will reflect a snapshot at
138 array : `numpy.ndarray`
139 A stray-light background image for this exposure.
141 raise NotImplementedError(
"Must be implemented by subclasses.")