LSST Applications g0265f82a02+0e5473021a,g02d81e74bb+0dd8ce4237,g1470d8bcf6+3ea6592b6f,g2079a07aa2+86d27d4dc4,g2305ad1205+5ca4c0b359,g295015adf3+d10818ec9d,g2a9a014e59+6f9be1b9cd,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g3ddfee87b4+703ba97ebf,g487adcacf7+4fa16da234,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+ffa42b374e,g5a732f18d5+53520f316c,g64a986408d+0dd8ce4237,g858d7b2824+0dd8ce4237,g8a8a8dda67+585e252eca,g99cad8db69+d39438377f,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+f1d96605c8,gb0e22166c9+60f28cb32d,gb6a65358fc+0e5473021a,gba4ed39666+c2a2e4ac27,gbb8dafda3b+e5339d463f,gc120e1dc64+da31e9920e,gc28159a63d+0e5473021a,gcf0d15dbbd+703ba97ebf,gdaeeff99f8+f9a426f77a,ge6526c86ff+889fc9d533,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gf18bd8381d+7268b93478,gff1a9f87cc+0dd8ce4237,w.2024.16
LSST Data Management Base Package
Loading...
Searching...
No Matches
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

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

Public Attributes

 psfChisqCut1
 
 log
 
 sigma2fwhm
 
 psfChisqCut2
 
 psfChisqCut2b
 

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 289 of file dipoleMeasurement.py.

Constructor & Destructor Documentation

◆ __init__()

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

Definition at line 303 of file dipoleMeasurement.py.

303 def __init__(self):
304 # Set up defaults to send to deblender
305
306 # Always deblend as Psf
307 self.psfChisqCut1 = self.psfChisqCut2 = self.psfChisqCut2b = np.inf
308 self.log = getLogger('lsst.ip.diffim.DipoleDeblender')
309 self.sigma2fwhm = 2. * np.sqrt(2. * np.log(2.))
310

Member Function Documentation

◆ __call__()

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

Definition at line 311 of file dipoleMeasurement.py.

311 def __call__(self, source, exposure):
312 fp = source.getFootprint()
313 peaks = fp.getPeaks()
314 peaksF = [pk.getF() for pk in peaks]
315 fbb = fp.getBBox()
316 fmask = afwImage.Mask(fbb)
317 fmask.setXY0(fbb.getMinX(), fbb.getMinY())
318 fp.spans.setMask(fmask, 1)
319
320 psf = exposure.getPsf()
321 psfSigPix = psf.computeShape(psf.getAveragePosition()).getDeterminantRadius()
322 psfFwhmPix = psfSigPix * self.sigma2fwhm
323 subimage = afwImage.ExposureF(exposure, bbox=fbb, deep=True)
324 cpsf = deblendBaseline.CachingPsf(psf)
325
326 # if fewer than 2 peaks, just return a copy of the source
327 if len(peaks) < 2:
328 return source.getTable().copyRecord(source)
329
330 # make sure you only deblend 2 peaks; take the brighest and faintest
331 speaks = [(p.getPeakValue(), p) for p in peaks]
332 speaks.sort()
333 dpeaks = [speaks[0][1], speaks[-1][1]]
334
335 # and only set these peaks in the footprint (peaks is mutable)
336 peaks.clear()
337 for peak in dpeaks:
338 peaks.append(peak)
339
340 if True:
341 # Call top-level deblend task
342 fpres = deblendBaseline.deblend(fp, exposure.getMaskedImage(), psf, psfFwhmPix,
343 log=self.log,
344 psfChisqCut1=self.psfChisqCut1,
345 psfChisqCut2=self.psfChisqCut2,
346 psfChisqCut2b=self.psfChisqCut2b)
347 else:
348 # Call lower-level _fit_psf task
349
350 # Prepare results structure
351 fpres = deblendBaseline.DeblenderResult(fp, exposure.getMaskedImage(), psf, psfFwhmPix, self.log)
352
353 for pki, (pk, pkres, pkF) in enumerate(zip(dpeaks, fpres.deblendedParents[0].peaks, peaksF)):
354 self.log.debug('Peak %i', pki)
355 deblendBaseline._fitPsf(fp, fmask, pk, pkF, pkres, fbb, dpeaks, peaksF, self.log,
356 cpsf, psfFwhmPix,
357 subimage.image,
358 subimage.variance,
359 self.psfChisqCut1, self.psfChisqCut2, self.psfChisqCut2b)
360
361 deblendedSource = source.getTable().copyRecord(source)
362 deblendedSource.setParent(source.getId())
363 peakList = deblendedSource.getFootprint().getPeaks()
364 peakList.clear()
365
366 for i, peak in enumerate(fpres.deblendedParents[0].peaks):
367 if peak.psfFitFlux > 0:
368 suffix = "pos"
369 else:
370 suffix = "neg"
371 c = peak.psfFitCenter
372 self.log.info("deblended.centroid.dipole.psf.%s %f %f",
373 suffix, c[0], c[1])
374 self.log.info("deblended.chi2dof.dipole.%s %f",
375 suffix, peak.psfFitChisq / peak.psfFitDof)
376 self.log.info("deblended.flux.dipole.psf.%s %f",
377 suffix, peak.psfFitFlux * np.sum(peak.templateImage.array))
378 peakList.append(peak.peak)
379 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 308 of file dipoleMeasurement.py.

◆ psfChisqCut1

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.psfChisqCut1

Definition at line 307 of file dipoleMeasurement.py.

◆ psfChisqCut2

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.psfChisqCut2

Definition at line 359 of file dipoleMeasurement.py.

◆ psfChisqCut2b

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.psfChisqCut2b

Definition at line 359 of file dipoleMeasurement.py.

◆ sigma2fwhm

lsst.ip.diffim.dipoleMeasurement.DipoleDeblender.sigma2fwhm

Definition at line 309 of file dipoleMeasurement.py.


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