LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Static Public Attributes | List of all members
lsst.pipe.tasks.repair.RepairTask Class Reference

More...

Inheritance diagram for lsst.pipe.tasks.repair.RepairTask:

Public Member Functions

def __init__ (self, **kwargs)
 
def run (self, exposure, defects=None, keepCRs=None)
 Repair an Exposure's defects and cosmic rays. More...
 
def cosmicRay (self, exposure, keepCRs=None)
 

Static Public Attributes

 ConfigClass = RepairConfig
 

Detailed Description

Interpolate over defects in an exposure and handle cosmic rays

Contents

Description

RepairTask

This task operates on an lsst.afw.image.Exposure in place to interpolate over a set of lsst.meas.algorithms.Defect objects. It will also, optionally, find and interpolate any cosmic rays in the lsst.afw.image.Exposure.

Task initialization

See: lsst.pipe.base.task.Task.__init__

Inputs/Outputs to the run method

Repair an Exposure's defects and cosmic rays.

    @param[in, out] exposure  lsst.afw.image.Exposure to process.  Exposure must have a valid Psf.
                              Modified in place.
    @param[in]      defects   an lsst.meas.algorithms.DefectListT object.  If None, do no
                              defect correction.
    @param[in]      keepCRs   don't interpolate over the CR pixels (defer to RepairConfig if None)

    @throws AssertionError with the following strings:

    <DL>
      <DT> No exposure provided
      <DD> The object provided as exposure evaluates to False
      <DT> No PSF provided
      <DD> The Exposure has no associated Psf
    </DL>

Configuration parameters

See RepairConfig

Debug variables

The command line task interface supports a flag -d to import debug.py from your PYTHONPATH; see Debugging Tasks with lsstDebug for more about debug.py files.

The available variables in RepairTask are:

display
A dictionary containing debug point names as keys with frame number as value. Valid keys are:
repair.before
display image before any repair is done
repair.after
display image after cosmic ray and defect correction
displayCR
If True, display the exposure on display's frame 1 and overlay bounding boxes around detects CRs.

A complete example of using RepairTask

This code is in runRepair.py in the examples directory, and can be run as e.g.

examples/runRepair.py

Import the task. There are other imports. Read the source file for more info.

For this example, we manufacture a test image to run on.

First, create a pure Poisson noise image and a Psf to go with it. The mask plane and variance can be constructed at the same time.

Inject some cosmic rays and generate the Exposure. Exposures are MaskedImages (image + mask + variance) with other metadata (e.g. Psf and Wcs objects).

Defects are represented as bad columns of random lengths. A defect list must be constructed to pass on to the RepairTask.

Bug:
This is addressed in DM-963

Finally, the exposure can be repaired. Create an instance of the task and run it. The exposure is modified in place.


To investigate the Debug variables, put something like

import lsstDebug
def DebugInfo(name):
di = lsstDebug.getInfo(name) # N.b. lsstDebug.Info(name) would call us recursively
if name == "lsst.pipe.tasks.repair":
di.display = {'repair.before':2, 'repair.after':3}
di.displayCR = True
return di
lsstDebug.Info = DebugInfo

into your debug.py file and run runRepair.py with the –debug flag.

Conversion notes:
    Display code should be updated once we settle on a standard way of controlling what is displayed.

Definition at line 66 of file repair.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.pipe.tasks.repair.RepairTask.__init__ (   self,
**  kwargs 
)

Definition at line 177 of file repair.py.

177  def __init__(self, **kwargs):
178  pipeBase.Task.__init__(self, **kwargs)
179  if self.config.doInterpolate:
180  self.makeSubtask("interp")
181 

Member Function Documentation

◆ cosmicRay()

def lsst.pipe.tasks.repair.RepairTask.cosmicRay (   self,
  exposure,
  keepCRs = None 
)
Mask cosmic rays

@param[in,out] exposure Exposure to process
@param[in]     keepCRs  Don't interpolate over the CR pixels (defer to pex_config if None)

Definition at line 219 of file repair.py.

219  def cosmicRay(self, exposure, keepCRs=None):
220  """Mask cosmic rays
221 
222  @param[in,out] exposure Exposure to process
223  @param[in] keepCRs Don't interpolate over the CR pixels (defer to pex_config if None)
224  """
225  import lsstDebug
226  display = lsstDebug.Info(__name__).display
227  displayCR = lsstDebug.Info(__name__).displayCR
228 
229  assert exposure, "No exposure provided"
230  psf = exposure.getPsf()
231  assert psf, "No psf provided"
232 
233  # Blow away old mask
234  try:
235  mask = exposure.getMaskedImage().getMask()
236  crBit = mask.getMaskPlane("CR")
237  mask.clearMaskPlane(crBit)
238  except Exception:
239  pass
240 
241  exposure0 = exposure # initial value of exposure
242  binSize = self.config.cosmicray.background.binSize
243  nx, ny = exposure.getWidth()/binSize, exposure.getHeight()/binSize
244  # Treat constant background as a special case to avoid the extra complexity in calling
245  # measAlg.SubtractBackgroundTask().
246  if nx*ny <= 1:
247  medianBg = afwMath.makeStatistics(exposure.getMaskedImage(), afwMath.MEDIAN).getValue()
248  modelBg = None
249  else:
250  # make a deep copy of the exposure before subtracting its background,
251  # because this routine is only allowed to modify the exposure by setting mask planes
252  # and interpolating over defects, not changing the background level
253  exposure = exposure.Factory(exposure, True)
254  subtractBackgroundTask = measAlg.SubtractBackgroundTask(config=self.config.cosmicray.background)
255  modelBg = subtractBackgroundTask.run(exposure).background
256  medianBg = 0.0
257 
258  if keepCRs is None:
259  keepCRs = self.config.cosmicray.keepCRs
260  try:
261  crs = measAlg.findCosmicRays(exposure.getMaskedImage(), psf, medianBg,
262  pexConfig.makePropertySet(self.config.cosmicray), keepCRs)
263  if modelBg:
264  # Add back background image
265  img = exposure.getMaskedImage()
266  img += modelBg.getImageF()
267  del img
268  # Replace original image with CR subtracted image
269  exposure0.setMaskedImage(exposure.getMaskedImage())
270 
271  except Exception:
272  if display:
273  afwDisplay.Display().mtv(exposure0, title="Failed CR")
274  raise
275 
276  num = 0
277  if crs is not None:
278  mask = exposure0.getMaskedImage().getMask()
279  crBit = mask.getPlaneBitMask("CR")
280  afwDet.setMaskFromFootprintList(mask, crs, crBit)
281  num = len(crs)
282 
283  if display and displayCR:
284  disp = afwDisplay.Display()
285  disp.incrDefaultFrame()
286  disp.mtv(exposure0, title="Post-CR")
287 
288  with disp.Buffering():
289  for cr in crs:
290  afwDisplay.utils.drawBBox(cr.getBBox(), borderWidth=0.55)
291 
292  self.log.info("Identified %s cosmic rays.", num)
def mtv(data, frame=None, title="", wcs=None, *args, **kwargs)
Definition: ds9.py:92
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, lsst::afw::image::Mask< image::MaskPixel > const &msk, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a watered-down front-end to the constructor (no variance)
Definition: Statistics.h:359

◆ run()

def lsst.pipe.tasks.repair.RepairTask.run (   self,
  exposure,
  defects = None,
  keepCRs = None 
)

Repair an Exposure's defects and cosmic rays.

    @param[in, out] exposure  lsst.afw.image.Exposure to process.  Exposure must have a valid Psf.
                              Modified in place.
    @param[in]      defects   an lsst.meas.algorithms.DefectListT object.  If None, do no
                              defect correction.
    @param[in]      keepCRs   don't interpolate over the CR pixels (defer to RepairConfig if None)

    @throws AssertionError with the following strings:

    <DL>
      <DT> No exposure provided
      <DD> The object provided as exposure evaluates to False
      <DT> No PSF provided
      <DD> The Exposure has no associated Psf
    </DL>

Definition at line 183 of file repair.py.

183  def run(self, exposure, defects=None, keepCRs=None):
184  """!Repair an Exposure's defects and cosmic rays
185 
186  @param[in, out] exposure lsst.afw.image.Exposure to process. Exposure must have a valid Psf.
187  Modified in place.
188  @param[in] defects an lsst.meas.algorithms.DefectListT object. If None, do no
189  defect correction.
190  @param[in] keepCRs don't interpolate over the CR pixels (defer to RepairConfig if None)
191 
192  @throws AssertionError with the following strings:
193 
194  <DL>
195  <DT> No exposure provided
196  <DD> The object provided as exposure evaluates to False
197  <DT> No PSF provided
198  <DD> The Exposure has no associated Psf
199  </DL>
200  """
201  assert exposure, "No exposure provided"
202  psf = exposure.getPsf()
203  assert psf, "No PSF provided"
204 
205  frame = getDebugFrame(self._display, "repair.before")
206  if frame:
207  afwDisplay.Display(frame).mtv(exposure)
208 
209  if defects is not None and self.config.doInterpolate:
210  self.interp.run(exposure, defects=defects)
211 
212  if self.config.doCosmicRay:
213  self.cosmicRay(exposure, keepCRs=keepCRs)
214 
215  frame = getDebugFrame(self._display, "repair.after")
216  if frame:
217  afwDisplay.Display(frame).mtv(exposure)
218 
def run(self, coaddExposures, bbox, wcs)
Definition: getTemplate.py:603
def getDebugFrame(debugDisplay, name)
Definition: lsstDebug.py:95

Member Data Documentation

◆ ConfigClass

lsst.pipe.tasks.repair.RepairTask.ConfigClass = RepairConfig
static

Definition at line 174 of file repair.py.


The documentation for this class was generated from the following file: