LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
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 397 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 428 of file utils.py.

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

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 374 of file utils.py.

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

◆ 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 451 of file utils.py.

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

◆ 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 353 of file utils.py.

353  def getCcdImage(self, det, imageFactory, binSize):
354  """Return a CCD image for the detector and the (possibly updated) Detector.
355 
356  Parameters
357  ----------
358  det : `lsst.afw.cameraGeom.Detector`
359  Detector to use for making the image.
360  imageFactory : callable like `lsst.afw.image.Image`
361  Image constructor for making the image.
362  binSize : `int`
363  Bin the image by this factor in both dimensions.
364 
365  Returns
366  -------
367  ccdImage : `lsst.afw.image.Image`
368  The constructed image.
369  """
370  ccdImage = makeImageFromCcd(det, isTrimmed=self.isTrimmed, showAmpGain=self.showAmpGain,
371  imageFactory=imageFactory, binSize=binSize)
372  return afwMath.rotateImageBy90(ccdImage, det.getOrientation().getNQuarter()), det
373 
def makeImageFromCcd(ccd, isTrimmed=True, showAmpGain=True, imageFactory=afwImage.ImageU, rcMarkSize=10, binSize=1)
Definition: utils.py:265
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 350 of file utils.py.

◆ background

lsst.afw.cameraGeom.utils.ButlerImage.background

Definition at line 437 of file utils.py.

◆ butler

lsst.afw.cameraGeom.utils.ButlerImage.butler

Definition at line 434 of file utils.py.

◆ callback

lsst.afw.cameraGeom.utils.ButlerImage.callback

Definition at line 439 of file utils.py.

◆ isRaw

lsst.afw.cameraGeom.utils.ButlerImage.isRaw

Definition at line 436 of file utils.py.

◆ isTrimmed

lsst.afw.cameraGeom.utils.ButlerImage.isTrimmed

Definition at line 432 of file utils.py.

◆ kwargs

lsst.afw.cameraGeom.utils.ButlerImage.kwargs

Definition at line 435 of file utils.py.

◆ markSize

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

Definition at line 348 of file utils.py.

◆ markValue

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

Definition at line 349 of file utils.py.

◆ scaleGain

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

Definition at line 351 of file utils.py.

◆ showAmpGain

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

Definition at line 347 of file utils.py.

◆ type

lsst.afw.cameraGeom.utils.ButlerImage.type

Definition at line 433 of file utils.py.

◆ verbose

lsst.afw.cameraGeom.utils.ButlerImage.verbose

Definition at line 438 of file utils.py.


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