24 __all__ = [
"BasePsfDeterminerConfig",
"BasePsfDeterminerTask",
"psfDeterminerRegistry"]
29 import lsst.pex.config
as pexConfig
33 """Configuration that is likely to be shared by all PSF determiners
35 This is fairly sparse; more fields can be moved here once it is clear they are universal.
37 kernelSize = pexConfig.Field(
38 doc=
"radius of the kernel to create, relative to the square root of the stellar quadrupole moments",
42 kernelSizeMin = pexConfig.Field(
43 doc=
"Minimum radius of the kernel",
47 kernelSizeMax = pexConfig.Field(
48 doc=
"Maximum radius of the kernel",
55 """!Base class for PSF determiners
57 Register all PSF determiners with the psfDeterminerRegistry using:
58 psfDeterminerRegistry.register(name, class)
62 ConfigClass = BasePsfDeterminerConfig
63 _DefaultName =
"psfDeterminer"
65 def __init__(self, config, schema=None, **kwds):
66 """Construct a PSF Determiner
68 @param[in] config an instance of pexConfig.Config that configures this algorithm
69 @param[in,out] schema an instance of afw.table.Schema used for sources; passing a
70 schema allows the determiner to reserve a flag field to mark stars
71 used in PSF measurement, but some PSF determiners ignore this argument
73 pipeBase.Task.__init__(self, config=config, **kwds)
77 """Determine a PSF model
79 @param[in] exposure exposure containing the psf candidates (lsst.afw.image.Exposure)
80 @param[in] psfCandidateList: a sequence of PSF candidates (each an
81 lsst.meas.algorithms.PsfCandidate); typically obtained by
82 detecting sources and then running them through a star selector
83 @param[in,out] metadata a place to save interesting items
86 - psf: the fit PSF; a subclass of lsst.afw.detection.Psf
87 - cellSet: the spatial cell set used to determine the PSF (lsst.afw.math.SpatialCellSet)
89 raise NotImplementedError(
"BasePsfDeterminerTask is abstract, subclasses must override this method")
92 psfDeterminerRegistry = pexConfig.makeRegistry(
93 doc=
"A registry of PSF determiners (subclasses of BasePsfDeterminerTask)",