23 __all__ = [
"BaseStarSelectorConfig",
"BaseStarSelectorTask",
"starSelectorRegistry"]
28 import lsst.pex.config
as pexConfig
33 badFlags = pexConfig.ListField(
34 doc=
"List of flags which cause a source to be rejected as bad",
37 "base_PixelFlags_flag_edge",
38 "base_PixelFlags_flag_interpolatedCenter",
39 "base_PixelFlags_flag_saturatedCenter",
40 "base_PixelFlags_flag_crCenter",
41 "base_PixelFlags_flag_bad",
42 "base_PixelFlags_flag_interpolated",
48 """Base class for star selectors
50 Register all star selectors with the starSelectorRegistry using:
51 starSelectorRegistry.register(name, class)
55 ConfigClass = BaseStarSelectorConfig
56 _DefaultName =
"starSelector"
60 assert isinstance(schema, Schema)
61 pipeBase.Task.__init__(self, **kwds)
63 def run(self, exposure, sourceCat, matches=None, isStarField=None):
64 """Select stars and set a flag field True for stars in the input catalog.
68 exposure : `lsst.afw.image.Exposure`
69 the exposure containing the sources
70 sourceCat : `lsst.afw.table.SourceCatalog`
71 catalog of sources that may be stars
72 matches : `lsst.afw.table.ReferenceMatchVector` or None
73 astrometric matches; ignored by this star selector. Some star selectors
74 will ignore this argument, others may require it. See the
75 usesMatches class variable.
77 name of flag field to set True for stars, or None to not set a field;
78 the field is left unchanged for non-stars
82 struct : `lsst.pipe.base.Struct`
83 Result struct containing:
85 - starCat catalog of stars that were selected as stars and successfuly made into PSF candidates
86 (a subset of sourceCat whose records are shallow copies)
88 result = self.
selectStars(exposure=exposure, sourceCat=sourceCat, matches=matches)
90 if isStarField
is not None:
91 isStarKey = sourceCat.schema[isStarField].asKey()
92 for star
in result.starCat:
93 star.set(isStarKey,
True)
95 return pipeBase.Struct(starCat=result.starCat)
99 """Return a catalog of stars: a subset of sourceCat whose records are shallow copies
103 exposure : `lsst.afw.image.Exposure`
104 The exposure containing the sources.
105 sourceCat : `lsst.afw.table.SourceCatalog`
106 Catalog of sources that may be stars.
107 matches : `lsst.afw.table.ReferenceMatchVector` or None
108 astrometric matches; ignored by this star selector. Some star selectors
109 will ignore this argument, others may require it. See the usesMatches class variable.
113 struct : `lsst.pipe.base.Struct`
114 Result struct containing:
116 - starCat catalog of stars that were selected as stars and successfuly made into PSF candidates
117 (a subset of sourceCat whose records are shallow copies)
121 Warning: The returned catalog must have records that are shallow copies
122 (fortunately this is the default behavior when you add a record from one catalog to another);
123 otherwise the run method cannot set the isStarField flag in the original source catalog.
125 raise NotImplementedError(
"BaseStarSelectorTask is abstract, subclasses must override this method")
128 starSelectorRegistry = pexConfig.makeRegistry(
129 doc=
"A registry of star selectors (subclasses of BaseStarSelectorTask)",