Coverage for python/lsst/meas/algorithms/psfDeterminer.py : 94%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1#
2# LSST Data Management System
3#
4# Copyright 2008-2017 AURA/LSST.
5#
6# This product includes software developed by the
7# LSST Project (http://www.lsst.org/).
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the LSST License Statement and
20# the GNU General Public License along with this program. If not,
21# see <https://www.lsstcorp.org/LegalNotices/>.
22#
24__all__ = ["BasePsfDeterminerConfig", "BasePsfDeterminerTask", "psfDeterminerRegistry"]
26import abc
28import lsst.pipe.base as pipeBase
29import lsst.pex.config as pexConfig
32class BasePsfDeterminerConfig(pexConfig.Config):
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.
36 """
37 kernelSize = pexConfig.Field(
38 doc="radius of the kernel to create, relative to the square root of the stellar quadrupole moments",
39 dtype=float,
40 default=10.0,
41 )
42 kernelSizeMin = pexConfig.Field(
43 doc="Minimum radius of the kernel",
44 dtype=int,
45 default=25,
46 )
47 kernelSizeMax = pexConfig.Field(
48 doc="Maximum radius of the kernel",
49 dtype=int,
50 default=45,
51 )
54class BasePsfDeterminerTask(pipeBase.Task, metaclass=abc.ABCMeta):
55 """!Base class for PSF determiners
57 Register all PSF determiners with the psfDeterminerRegistry using:
58 psfDeterminerRegistry.register(name, class)
59 """
61 usesMatches = False # Does the PSF determiner use the "matches" argument in the "run method? Few do.
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
72 """
73 pipeBase.Task.__init__(self, config=config, **kwds)
75 @abc.abstractmethod
76 def determinePsf(self, exposure, psfCandidateList, metadata=None):
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
85 @return
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)
88 """
89 raise NotImplementedError("BasePsfDeterminerTask is abstract, subclasses must override this method")
92psfDeterminerRegistry = pexConfig.makeRegistry(
93 doc="A registry of PSF determiners (subclasses of BasePsfDeterminerTask)",
94)