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.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('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: