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.ip.diffim.dipoleMeasurement.DipoleDeblender Class Reference
Inheritance diagram for lsst.ip.diffim.dipoleMeasurement.DipoleDeblender:

Public Member Functions

def __init__ (self)
 
def __call__ (self, source, exposure)
 

Public Attributes

 psfChisqCut1
 
 psfChisqCut2
 
 psfChisqCut2b
 
 log
 
 sigma2fwhm
 

Detailed Description

Functor to deblend a source as a dipole, and return a new source with deblended footprints.

   This necessarily overrides some of the functionality from
   meas_algorithms/python/lsst/meas/algorithms/deblend.py since we
   need a single source that contains the blended peaks, not
   multiple children sources.  This directly calls the core
   deblending code deblendBaseline.deblend (optionally _fitPsf for
   debugging).

   Not actively being used, but there is a unit test for it in
   dipoleAlgorithm.py.

Definition at line 498 of file dipoleMeasurement.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.__init__ (   self)

Definition at line 512 of file dipoleMeasurement.py.

512  def __init__(self):
513  # Set up defaults to send to deblender
514 
515  # Always deblend as Psf
516  self.psfChisqCut1 = self.psfChisqCut2 = self.psfChisqCut2b = np.inf
517  self.log = Log.getLogger('lsst.ip.diffim.DipoleDeblender')
518  self.sigma2fwhm = 2. * np.sqrt(2. * np.log(2.))
519 

Member Function Documentation

◆ __call__()

def lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.__call__ (   self,
  source,
  exposure 
)

Definition at line 520 of file dipoleMeasurement.py.

520  def __call__(self, source, exposure):
521  fp = source.getFootprint()
522  peaks = fp.getPeaks()
523  peaksF = [pk.getF() for pk in peaks]
524  fbb = fp.getBBox()
525  fmask = afwImage.Mask(fbb)
526  fmask.setXY0(fbb.getMinX(), fbb.getMinY())
527  fp.spans.setMask(fmask, 1)
528 
529  psf = exposure.getPsf()
530  psfSigPix = psf.computeShape().getDeterminantRadius()
531  psfFwhmPix = psfSigPix * self.sigma2fwhm
532  subimage = afwImage.ExposureF(exposure, bbox=fbb, deep=True)
533  cpsf = deblendBaseline.CachingPsf(psf)
534 
535  # if fewer than 2 peaks, just return a copy of the source
536  if len(peaks) < 2:
537  return source.getTable().copyRecord(source)
538 
539  # make sure you only deblend 2 peaks; take the brighest and faintest
540  speaks = [(p.getPeakValue(), p) for p in peaks]
541  speaks.sort()
542  dpeaks = [speaks[0][1], speaks[-1][1]]
543 
544  # and only set these peaks in the footprint (peaks is mutable)
545  peaks.clear()
546  for peak in dpeaks:
547  peaks.append(peak)
548 
549  if True:
550  # Call top-level deblend task
551  fpres = deblendBaseline.deblend(fp, exposure.getMaskedImage(), psf, psfFwhmPix,
552  log=self.log,
553  psfChisqCut1=self.psfChisqCut1,
554  psfChisqCut2=self.psfChisqCut2,
555  psfChisqCut2b=self.psfChisqCut2b)
556  else:
557  # Call lower-level _fit_psf task
558 
559  # Prepare results structure
560  fpres = deblendBaseline.DeblenderResult(fp, exposure.getMaskedImage(), psf, psfFwhmPix, self.log)
561 
562  for pki, (pk, pkres, pkF) in enumerate(zip(dpeaks, fpres.deblendedParents[0].peaks, peaksF)):
563  self.log.debug('Peak %i', pki)
564  deblendBaseline._fitPsf(fp, fmask, pk, pkF, pkres, fbb, dpeaks, peaksF, self.log,
565  cpsf, psfFwhmPix,
566  subimage.getMaskedImage().getImage(),
567  subimage.getMaskedImage().getVariance(),
568  self.psfChisqCut1, self.psfChisqCut2, self.psfChisqCut2b)
569 
570  deblendedSource = source.getTable().copyRecord(source)
571  deblendedSource.setParent(source.getId())
572  peakList = deblendedSource.getFootprint().getPeaks()
573  peakList.clear()
574 
575  for i, peak in enumerate(fpres.deblendedParents[0].peaks):
576  if peak.psfFitFlux > 0:
577  suffix = "pos"
578  else:
579  suffix = "neg"
580  c = peak.psfFitCenter
581  self.log.info("deblended.centroid.dipole.psf.%s %f %f",
582  suffix, c[0], c[1])
583  self.log.info("deblended.chi2dof.dipole.%s %f",
584  suffix, peak.psfFitChisq / peak.psfFitDof)
585  self.log.info("deblended.flux.dipole.psf.%s %f",
586  suffix, peak.psfFitFlux * np.sum(peak.templateImage.getArray()))
587  peakList.append(peak.peak)
588  return deblendedSource
Represent a 2-dimensional array of bitmask pixels.
Definition: Mask.h:77

Member Data Documentation

◆ log

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.log

Definition at line 517 of file dipoleMeasurement.py.

◆ psfChisqCut1

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.psfChisqCut1

Definition at line 516 of file dipoleMeasurement.py.

◆ psfChisqCut2

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.psfChisqCut2

Definition at line 516 of file dipoleMeasurement.py.

◆ psfChisqCut2b

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.psfChisqCut2b

Definition at line 516 of file dipoleMeasurement.py.

◆ sigma2fwhm

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.sigma2fwhm

Definition at line 518 of file dipoleMeasurement.py.


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