Coverage for python/lsst/analysis/tools/analysisParts/stellarLocus.py: 22%

97 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2023-03-31 12:04 +0000

1from __future__ import annotations 

2 

3__all__ = ( 

4 "StellarLocusBase", 

5 "WPerpPSF", 

6 "WPerpCModel", 

7 "XPerpPSF", 

8 "XPerpCModel", 

9 "YPerpPSF", 

10 "YPerpCModel", 

11) 

12 

13from ..actions.keyedData.stellarLocusFit import StellarLocusFitAction 

14from ..actions.scalar import ApproxFloor 

15from ..actions.vector import ( 

16 CoaddPlotFlagSelector, 

17 ExtinctionCorrectedMagDiff, 

18 MagColumnNanoJansky, 

19 SnSelector, 

20 StarSelector, 

21) 

22from ..interfaces import AnalysisTool 

23 

24 

25class StellarLocusBase(AnalysisTool): 

26 # Use this as the Base Class for now StellarLocusBaseMetric 

27 parameterizedBand: bool = False 

28 

29 def setDefaults(self): 

30 super().setDefaults() 

31 self.prep.selectors.flagSelector = CoaddPlotFlagSelector() 

32 

33 self.prep.selectors.snSelector = SnSelector() 

34 self.prep.selectors.snSelector.threshold = 300 

35 

36 self.prep.selectors.starSelector = StarSelector() 

37 

38 self.process.buildActions.x = ExtinctionCorrectedMagDiff() 

39 self.process.buildActions.x.magDiff.returnMillimags = False 

40 self.process.buildActions.y = ExtinctionCorrectedMagDiff() 

41 self.process.buildActions.y.magDiff.returnMillimags = False 

42 

43 

44class WPerpPSF(StellarLocusBase): 

45 def setDefaults(self): 

46 super().setDefaults() 

47 self.prep.selectors.flagSelector.bands = ["g", "r", "i"] 

48 self.prep.selectors.snSelector.bands = ["r"] 

49 self.prep.selectors.snSelector.fluxType = "{band}_psfFlux" 

50 

51 self.prep.selectors.starSelector.vectorKey = "r_extendedness" 

52 

53 self.process.buildActions.x.magDiff.col1 = "g_psfFlux" 

54 self.process.buildActions.x.magDiff.col2 = "r_psfFlux" 

55 

56 self.process.buildActions.y.magDiff.col1 = "r_psfFlux" 

57 self.process.buildActions.y.magDiff.col2 = "i_psfFlux" 

58 

59 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_psfFlux") 

60 

61 self.process.calculateActions.wPerp_psfFlux = StellarLocusFitAction() 

62 self.process.calculateActions.wPerp_psfFlux.stellarLocusFitDict = { 

63 "xMin": 0.28, 

64 "xMax": 1.0, 

65 "yMin": 0.02, 

66 "yMax": 0.48, 

67 "mHW": 0.52, 

68 "bHW": -0.08, 

69 } 

70 

71 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag") 

72 

73 

74class WPerpCModel(WPerpPSF): 

75 def setDefaults(self): 

76 super().setDefaults() 

77 self.prep.selectors.snSelector.fluxType = "{band}_cModelFlux" 

78 

79 self.process.buildActions.x.magDiff.col1 = "g_cModelFlux" 

80 self.process.buildActions.x.magDiff.col2 = "r_cModelFlux" 

81 

82 self.process.buildActions.y.magDiff.col1 = "r_cModelFlux" 

83 self.process.buildActions.y.magDiff.col2 = "i_cModelFlux" 

84 

85 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_cModelFlux") 

86 

87 self.process.calculateActions.wPerp_cmodelFlux = StellarLocusFitAction() 

88 self.process.calculateActions.wPerp_cmodelFlux.stellarLocusFitDict = { 

89 "xMin": 0.28, 

90 "xMax": 1.0, 

91 "yMin": 0.02, 

92 "yMax": 0.48, 

93 "mHW": 0.52, 

94 "bHW": -0.08, 

95 } 

96 

97 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag") 

98 

99 

100class XPerpPSF(StellarLocusBase): 

101 def setDefaults(self): 

102 super().setDefaults() 

103 self.prep.selectors.flagSelector.bands = ["g", "r", "i"] 

104 self.prep.selectors.snSelector.bands = ["r"] 

105 self.prep.selectors.snSelector.fluxType = "{band}_psfFlux" 

106 

107 self.prep.selectors.starSelector.vectorKey = "r_extendedness" 

108 

109 self.process.buildActions.x.magDiff.col1 = "g_psfFlux" 

110 self.process.buildActions.x.magDiff.col2 = "r_psfFlux" 

111 

112 self.process.buildActions.y.magDiff.col1 = "r_psfFlux" 

113 self.process.buildActions.y.magDiff.col2 = "i_psfFlux" 

114 

115 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_psfFlux") 

116 

117 self.process.calculateActions.xPerp_psfFlux = StellarLocusFitAction() 

118 self.process.calculateActions.xPerp_psfFlux.stellarLocusFitDict = { 

119 "xMin": 1.05, 

120 "xMax": 1.55, 

121 "yMin": 0.78, 

122 "yMax": 1.62, 

123 "mHW": 13.35, 

124 "bHW": -15.54, 

125 } 

126 

127 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag") 

128 

129 

130class XPerpCModel(XPerpPSF): 

131 def setDefaults(self): 

132 super().setDefaults() 

133 self.prep.selectors.snSelector.fluxType = "{band}_cModelFlux" 

134 

135 self.process.buildActions.x.magDiff.col1 = "g_cModelFlux" 

136 self.process.buildActions.x.magDiff.col2 = "r_cModelFlux" 

137 

138 self.process.buildActions.y.magDiff.col1 = "r_cModelFlux" 

139 self.process.buildActions.y.magDiff.col2 = "i_cModelFlux" 

140 

141 self.process.calculateActions.xPerp_cmodelFlux = StellarLocusFitAction() 

142 self.process.calculateActions.xPerp_cmodelFlux.stellarLocusFitDict = { 

143 "xMin": 1.05, 

144 "xMax": 1.55, 

145 "yMin": 0.78, 

146 "yMax": 1.62, 

147 "mHW": 13.35, 

148 "bHW": -15.54, 

149 } 

150 

151 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_cModelFlux") 

152 

153 

154class YPerpPSF(StellarLocusBase): 

155 def setDefaults(self): 

156 super().setDefaults() 

157 self.prep.selectors.flagSelector.bands = ["r", "i", "z"] 

158 self.prep.selectors.snSelector.bands = ["i"] 

159 self.prep.selectors.snSelector.fluxType = "{band}_psfFlux" 

160 

161 self.prep.selectors.starSelector.vectorKey = "i_extendedness" 

162 

163 self.process.buildActions.x.magDiff.col1 = "r_psfFlux" 

164 self.process.buildActions.x.magDiff.col2 = "i_psfFlux" 

165 

166 self.process.buildActions.y.magDiff.col1 = "i_psfFlux" 

167 self.process.buildActions.y.magDiff.col2 = "z_psfFlux" 

168 

169 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="i_psfFlux") 

170 

171 self.process.calculateActions.yPerp_psfFlux = StellarLocusFitAction() 

172 self.process.calculateActions.yPerp_psfFlux.stellarLocusFitDict = { 

173 "xMin": 0.82, 

174 "xMax": 2.01, 

175 "yMin": 0.37, 

176 "yMax": 0.90, 

177 "mHW": 0.40, 

178 "bHW": 0.03, 

179 } 

180 

181 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag") 

182 

183 

184class YPerpCModel(YPerpPSF): 

185 def setDefaults(self): 

186 super().setDefaults() 

187 self.prep.selectors.snSelector.fluxType = "{band}_cModelFlux" 

188 

189 self.process.buildActions.x.magDiff.col1 = "r_cModelFlux" 

190 self.process.buildActions.x.magDiff.col2 = "i_cModelFlux" 

191 

192 self.process.buildActions.y.magDiff.col1 = "i_cModelFlux" 

193 self.process.buildActions.y.magDiff.col2 = "z_cModelFlux" 

194 

195 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="i_cModelFlux") 

196 

197 self.process.calculateActions.yPerp_cmodelFlux = StellarLocusFitAction() 

198 self.process.calculateActions.yPerp_cmodelFlux.stellarLocusFitDict = { 

199 "xMin": 0.82, 

200 "xMax": 2.01, 

201 "yMin": 0.37, 

202 "yMax": 0.90, 

203 "mHW": 0.40, 

204 "bHW": 0.03, 

205 }