Coverage for python/lsst/meas/algorithms/starSelector.py: 61%

25 statements  

« prev     ^ index     » next       coverage.py v6.4.1, created at 2022-06-18 02:51 -0700

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 

25import abc 

26 

27from lsst.afw.table import Schema 

28import lsst.pex.config as pexConfig 

29import lsst.pipe.base as pipeBase 

30 

31 

32class 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 

47class 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 

128starSelectorRegistry = pexConfig.makeRegistry( 

129 doc="A registry of star selectors (subclasses of BaseStarSelectorTask)", 

130)