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)",