LSSTApplications  17.0+11,17.0+34,17.0+56,17.0+57,17.0+59,17.0+7,17.0-1-g377950a+33,17.0.1-1-g114240f+2,17.0.1-1-g4d4fbc4+28,17.0.1-1-g55520dc+49,17.0.1-1-g5f4ed7e+52,17.0.1-1-g6dd7d69+17,17.0.1-1-g8de6c91+11,17.0.1-1-gb9095d2+7,17.0.1-1-ge9fec5e+5,17.0.1-1-gf4e0155+55,17.0.1-1-gfc65f5f+50,17.0.1-1-gfc6fb1f+20,17.0.1-10-g87f9f3f+1,17.0.1-11-ge9de802+16,17.0.1-16-ga14f7d5c+4,17.0.1-17-gc79d625+1,17.0.1-17-gdae4c4a+8,17.0.1-2-g26618f5+29,17.0.1-2-g54f2ebc+9,17.0.1-2-gf403422+1,17.0.1-20-g2ca2f74+6,17.0.1-23-gf3eadeb7+1,17.0.1-3-g7e86b59+39,17.0.1-3-gb5ca14a,17.0.1-3-gd08d533+40,17.0.1-30-g596af8797,17.0.1-4-g59d126d+4,17.0.1-4-gc69c472+5,17.0.1-6-g5afd9b9+4,17.0.1-7-g35889ee+1,17.0.1-7-gc7c8782+18,17.0.1-9-gc4bbfb2+3,w.2019.22
LSSTDataManagementBasePackage
starSelector.py
Go to the documentation of this file.
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 #
23 __all__ = ["BaseStarSelectorConfig", "BaseStarSelectorTask", "starSelectorRegistry"]
24 
25 import abc
26 
27 from lsst.afw.table import Schema
28 import lsst.pex.config as pexConfig
29 import lsst.pipe.base as pipeBase
30 
31 
32 class BaseStarSelectorConfig(pexConfig.Config):
33  badFlags = pexConfig.ListField(
34  doc="List of flags which cause a source to be rejected as bad",
35  dtype=str,
36  default=[
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",
43  ],
44  )
45 
46 
47 class BaseStarSelectorTask(pipeBase.Task, metaclass=abc.ABCMeta):
48  """Base class for star selectors
49 
50  Register all star selectors with the starSelectorRegistry using:
51  starSelectorRegistry.register(name, class)
52  """
53 
54  usesMatches = False # Does the star selector use the "matches" argument in the "run method? Few do.
55  ConfigClass = BaseStarSelectorConfig
56  _DefaultName = "starSelector"
57 
58  def __init__(self, schema, **kwds):
59  # catch code that passed config positionally before schema argument was added
60  assert isinstance(schema, Schema)
61  pipeBase.Task.__init__(self, **kwds)
62 
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.
65 
66  Parameters
67  ----------
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.
76  isStarField : `str`
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
79 
80  Returns
81  -------
82  struct : `lsst.pipe.base.Struct`
83  Result struct containing:
84 
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)
87  """
88  result = self.selectStars(exposure=exposure, sourceCat=sourceCat, matches=matches)
89 
90  if isStarField is not None:
91  isStarKey = sourceCat.schema[isStarField].asKey()
92  for star in result.starCat:
93  star.set(isStarKey, True)
94 
95  return pipeBase.Struct(starCat=result.starCat)
96 
97  @abc.abstractmethod
98  def selectStars(self, exposure, sourceCat, matches=None):
99  """Return a catalog of stars: a subset of sourceCat whose records are shallow copies
100 
101  Parameters
102  ----------
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.
110 
111  Paramters
112  ---------
113  struct : `lsst.pipe.base.Struct`
114  Result struct containing:
115 
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)
118 
119  Notes
120  -----
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.
124  """
125  raise NotImplementedError("BaseStarSelectorTask is abstract, subclasses must override this method")
126 
127 
128 starSelectorRegistry = pexConfig.makeRegistry(
129  doc="A registry of star selectors (subclasses of BaseStarSelectorTask)",
130 )
def selectStars(self, exposure, sourceCat, matches=None)
Definition: starSelector.py:98
def run(self, exposure, sourceCat, matches=None, isStarField=None)
Definition: starSelector.py:63