32def selectPsfSources(exposure, matches, psfPolicy):
33 """Get a list of suitable stars to construct a PSF."""
34
35 import lsstDebug
38
39
40
41 kernelSize = psfPolicy.get("kernelSize")
42 borderWidth = psfPolicy.get("borderWidth")
43 sizePsfCellX = psfPolicy.get("sizeCellX")
44 sizePsfCellY = psfPolicy.get("sizeCellY")
45
46 mi = exposure.getMaskedImage()
47
48 if display and displayExposure:
49 disp = afwDisplay.Display(frame=0)
50 disp.mtv(mi, title="PSF candidates")
51
53 psfStars = []
54
55 for val in matches:
56 ref, source = val[0:2]
57 if not (ref.getFlagForDetection() & measAlg.Flags.STAR) or \
58 (source.getFlagForDetection() & measAlg.Flags.BAD):
59 continue
60
61 try:
62 cand = measAlg.makePsfCandidate(source, mi)
63
64
65
66 if cand.getWidth() == 0:
67 cand.setBorderWidth(borderWidth)
68 cand.setWidth(kernelSize + 2*borderWidth)
69 cand.setHeight(kernelSize + 2*borderWidth)
70
71 im = cand.getMaskedImage().getImage()
73 if not np.isfinite(max):
74 continue
75
76 psfCellSet.insertCandidate(cand)
77
78 if display and displayExposure:
79 disp.dot("+", source.getXAstrom() - mi.getX0(), source.getYAstrom() - mi.getY0(),
80 size=4, ctype=afwDisplay.CYAN)
81 disp.dot("o", source.getXAstrom() - mi.getX0(), source.getYAstrom() - mi.getY0(),
82 size=4, ctype=afwDisplay.CYAN)
83 except Exception:
84 continue
85
86 source.setFlagForDetection(source.getFlagForDetection() | measAlg.Flags.STAR)
87 psfStars += [source]
88
89 return psfStars, psfCellSet
A collection of SpatialCells covering an entire image.
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, lsst::afw::image::Mask< image::MaskPixel > const &msk, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a watered-down front-end to the constructor (no variance)