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 | Public Attributes | List of all members
lsst.afw.cameraGeom.utils.ButlerImage Class Reference
Inheritance diagram for lsst.afw.cameraGeom.utils.ButlerImage:
lsst.afw.cameraGeom.utils.FakeImageDataSource

Public Member Functions

def __init__ (self, butler=None, type="raw", isTrimmed=True, verbose=False, background=numpy.nan, callback=None, *args, **kwargs)
 
def getCcdImage (self, ccd, imageFactory=afwImage.ImageF, binSize=1, asMaskedImage=False)
 
def getCcdImage (self, det, imageFactory, binSize)
 
def getAmpImage (self, amp, imageFactory)
 

Public Attributes

 isTrimmed
 
 type
 
 butler
 
 kwargs
 
 isRaw
 
 background
 
 verbose
 
 callback
 
 showAmpGain
 
 markSize
 
 markValue
 
 ampImValue
 
 scaleGain
 

Detailed Description

A class to return an Image of a given Ccd using the butler.

Parameters
----------
butler : `lsst.daf.persistence.Butler` or `None`
    The butler to use. If `None`, an empty image is returned.
type : `str`
    The type of image to read (e.g. raw, bias, flat, calexp).
isTrimmed : `bool`
    If true, the showCamera command expects to be given trimmed images.
verbose : `bool`
    Be chatty (in particular, log any error messages from the butler)?
background : `float`
    The value of any pixels that lie outside the CCDs.
callback : callable
    A function called with (image, ccd, butler) for every image, which
    returns the image to be displayed (e.g. rawCallback). The image must
    be of the correct size, allowing for the value of isTrimmed.
*args : `list`
    Passed to the butler.
**kwargs : `dict`
    Passed to the butler.

Notes
-----
You can define a short named function as a callback::

    def callback(im, ccd, imageSource):
        return cameraGeom.utils.rawCallback(im, ccd, imageSource, correctGain=True)

Definition at line 399 of file utils.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.afw.cameraGeom.utils.ButlerImage.__init__ (   self,
  butler = None,
  type = "raw",
  isTrimmed = True,
  verbose = False,
  background = numpy.nan,
  callback = None,
args,
**  kwargs 
)

Definition at line 430 of file utils.py.

432  callback=None, *args, **kwargs):
433  super(ButlerImage, self).__init__(*args)
434  self.isTrimmed = isTrimmed
435  self.type = type
436  self.butler = butler
437  self.kwargs = kwargs
438  self.isRaw = False
439  self.background = background
440  self.verbose = verbose
441  self.callback = callback
442 

Member Function Documentation

◆ getAmpImage()

def lsst.afw.cameraGeom.utils.FakeImageDataSource.getAmpImage (   self,
  amp,
  imageFactory 
)
inherited
Return an amp segment image.

Parameters
----------
amp : `lsst.afw.table.AmpInfoTable`
    AmpInfoTable for this amp.
imageFactory : callable like `lsst.afw.image.Image`
    Image constructor for making the image.

Returns
-------
ampImage : `lsst.afw.image.Image`
    The constructed image.

Definition at line 376 of file utils.py.

376  def getAmpImage(self, amp, imageFactory):
377  """Return an amp segment image.
378 
379  Parameters
380  ----------
381  amp : `lsst.afw.table.AmpInfoTable`
382  AmpInfoTable for this amp.
383  imageFactory : callable like `lsst.afw.image.Image`
384  Image constructor for making the image.
385 
386  Returns
387  -------
388  ampImage : `lsst.afw.image.Image`
389  The constructed image.
390  """
391  ampImage = makeImageFromAmp(amp, imValue=self.ampImValue, imageFactory=imageFactory,
392  markSize=self.markSize, markValue=self.markValue,
393  scaleGain=self.scaleGain)
394  if self.isTrimmed:
395  ampImage = ampImage.Factory(ampImage, amp.getRawDataBBox())
396  return ampImage
397 
398 
def makeImageFromAmp(amp, imValue=None, imageFactory=afwImage.ImageU, markSize=10, markValue=0, scaleGain=lambda gain:(gain *1000)//10)
Definition: utils.py:186

◆ getCcdImage() [1/2]

def lsst.afw.cameraGeom.utils.ButlerImage.getCcdImage (   self,
  ccd,
  imageFactory = afwImage.ImageF,
  binSize = 1,
  asMaskedImage = False 
)
Return an image of the specified ccd, and also the (possibly updated) ccd

Definition at line 453 of file utils.py.

453  def getCcdImage(self, ccd, imageFactory=afwImage.ImageF, binSize=1, asMaskedImage=False):
454  """Return an image of the specified ccd, and also the (possibly updated) ccd"""
455 
456  log = _LOG.getChild("ButlerImage")
457 
458  if self.isTrimmed:
459  bbox = ccd.getBBox()
460  else:
461  bbox = calcRawCcdBBox(ccd)
462 
463  im = None
464  if self.butler is not None:
465  err = None
466  for dataId in [dict(detector=ccd.getId()), dict(ccd=ccd.getId()), dict(ccd=ccd.getName())]:
467  try:
468  im = self.butler.get(self.type, dataId, **self.kwargs)
469  except FitsError as e: # no point trying another dataId
470  err = IOError(e.args[0].split('\n')[0]) # It's a very chatty error
471  break
472  except Exception as e: # try a different dataId
473  if err is None:
474  err = e
475  continue
476  else:
477  ccd = im.getDetector() # possibly modified by assembleCcdTask
478  break
479 
480  if im:
481  if asMaskedImage:
482  im = im.getMaskedImage()
483  else:
484  im = im.getMaskedImage().getImage()
485  else:
486  if self.verbose:
487  # Lost by jupyterlab.
488  print(f"Reading {ccd.getId()}: {err}")
489 
490  log.warning("Reading %s: %s", ccd.getId(), err)
491 
492  if im is None:
493  return self._prepareImage(ccd, imageFactory(*bbox.getDimensions()), binSize), ccd
494 
495  if self.type == "raw":
496  if hasattr(im, 'convertF'):
497  im = im.convertF()
498  if False and self.callback is None: # we need to trim the raw image
499  self.callback = rawCallback
500 
501  allowRotate = True
502  if self.callback:
503  try:
504  im = self.callback(im, ccd, imageSource=self)
505  except Exception as e:
506  if self.verbose:
507  log.error("callback failed: %s", e)
508  im = imageFactory(*bbox.getDimensions())
509  else:
510  allowRotate = False # the callback was responsible for any rotations
511 
512  return self._prepareImage(ccd, im, binSize, allowRotate=allowRotate), ccd
513 
514 

◆ getCcdImage() [2/2]

def lsst.afw.cameraGeom.utils.FakeImageDataSource.getCcdImage (   self,
  det,
  imageFactory,
  binSize 
)
inherited
Return a CCD image for the detector and the (possibly updated) Detector.

Parameters
----------
det : `lsst.afw.cameraGeom.Detector`
    Detector to use for making the image.
imageFactory : callable like `lsst.afw.image.Image`
    Image constructor for making the image.
binSize : `int`
    Bin the image by this factor in both dimensions.

Returns
-------
ccdImage : `lsst.afw.image.Image`
    The constructed image.

Definition at line 355 of file utils.py.

355  def getCcdImage(self, det, imageFactory, binSize):
356  """Return a CCD image for the detector and the (possibly updated) Detector.
357 
358  Parameters
359  ----------
360  det : `lsst.afw.cameraGeom.Detector`
361  Detector to use for making the image.
362  imageFactory : callable like `lsst.afw.image.Image`
363  Image constructor for making the image.
364  binSize : `int`
365  Bin the image by this factor in both dimensions.
366 
367  Returns
368  -------
369  ccdImage : `lsst.afw.image.Image`
370  The constructed image.
371  """
372  ccdImage = makeImageFromCcd(det, isTrimmed=self.isTrimmed, showAmpGain=self.showAmpGain,
373  imageFactory=imageFactory, binSize=binSize)
374  return afwMath.rotateImageBy90(ccdImage, det.getOrientation().getNQuarter()), det
375 
def makeImageFromCcd(ccd, isTrimmed=True, showAmpGain=True, imageFactory=afwImage.ImageU, rcMarkSize=10, binSize=1)
Definition: utils.py:267
std::shared_ptr< ImageT > rotateImageBy90(ImageT const &image, int nQuarter)
Rotate an image by an integral number of quarter turns.
Definition: rotateImage.cc:39

Member Data Documentation

◆ ampImValue

lsst.afw.cameraGeom.utils.FakeImageDataSource.ampImValue
inherited

Definition at line 352 of file utils.py.

◆ background

lsst.afw.cameraGeom.utils.ButlerImage.background

Definition at line 439 of file utils.py.

◆ butler

lsst.afw.cameraGeom.utils.ButlerImage.butler

Definition at line 436 of file utils.py.

◆ callback

lsst.afw.cameraGeom.utils.ButlerImage.callback

Definition at line 441 of file utils.py.

◆ isRaw

lsst.afw.cameraGeom.utils.ButlerImage.isRaw

Definition at line 438 of file utils.py.

◆ isTrimmed

lsst.afw.cameraGeom.utils.ButlerImage.isTrimmed

Definition at line 434 of file utils.py.

◆ kwargs

lsst.afw.cameraGeom.utils.ButlerImage.kwargs

Definition at line 437 of file utils.py.

◆ markSize

lsst.afw.cameraGeom.utils.FakeImageDataSource.markSize
inherited

Definition at line 350 of file utils.py.

◆ markValue

lsst.afw.cameraGeom.utils.FakeImageDataSource.markValue
inherited

Definition at line 351 of file utils.py.

◆ scaleGain

lsst.afw.cameraGeom.utils.FakeImageDataSource.scaleGain
inherited

Definition at line 353 of file utils.py.

◆ showAmpGain

lsst.afw.cameraGeom.utils.FakeImageDataSource.showAmpGain
inherited

Definition at line 349 of file utils.py.

◆ type

lsst.afw.cameraGeom.utils.ButlerImage.type

Definition at line 435 of file utils.py.

◆ verbose

lsst.afw.cameraGeom.utils.ButlerImage.verbose

Definition at line 440 of file utils.py.


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