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

96 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2022-12-30 01:58 -0800

1from __future__ import annotations 

2 

3from ..actions.keyedData.stellarLocusFit import StellarLocusFitAction 

4from ..actions.scalar import ApproxFloor 

5from ..actions.vector import ( 

6 CoaddPlotFlagSelector, 

7 ExtinctionCorrectedMagDiff, 

8 MagColumnNanoJansky, 

9 SnSelector, 

10 StarSelector, 

11) 

12from ..interfaces import AnalysisTool 

13 

14 

15class StellarLocusBase(AnalysisTool): 

16 # Use this as the Base Class for now StellarLocusBaseMetric 

17 parameterizedBand: bool = False 

18 

19 def setDefaults(self): 

20 super().setDefaults() 

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

22 

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

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

25 

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

27 

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

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

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

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

32 

33 

34class WPerpPSF(StellarLocusBase): 

35 def setDefaults(self): 

36 super().setDefaults() 

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

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

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

40 

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

42 

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

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

45 

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

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

48 

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

50 

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

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

53 "xMin": 0.28, 

54 "xMax": 1.0, 

55 "yMin": 0.02, 

56 "yMax": 0.48, 

57 "mHW": 0.52, 

58 "bHW": -0.08, 

59 } 

60 

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

62 

63 

64class WPerpCModel(WPerpPSF): 

65 def setDefaults(self): 

66 super().setDefaults() 

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

68 

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

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

71 

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

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

74 

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

76 

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

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

79 "xMin": 0.28, 

80 "xMax": 1.0, 

81 "yMin": 0.02, 

82 "yMax": 0.48, 

83 "mHW": 0.52, 

84 "bHW": -0.08, 

85 } 

86 

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

88 

89 

90class XPerpPSF(StellarLocusBase): 

91 def setDefaults(self): 

92 super().setDefaults() 

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

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

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

96 

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

98 

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

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

101 

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

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

104 

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

106 

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

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

109 "xMin": 1.05, 

110 "xMax": 1.55, 

111 "yMin": 0.78, 

112 "yMax": 1.62, 

113 "mHW": 13.35, 

114 "bHW": -15.54, 

115 } 

116 

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

118 

119 

120class XPerpCModel(XPerpPSF): 

121 def setDefaults(self): 

122 super().setDefaults() 

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

124 

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

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

127 

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

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

130 

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

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

133 "xMin": 1.05, 

134 "xMax": 1.55, 

135 "yMin": 0.78, 

136 "yMax": 1.62, 

137 "mHW": 13.35, 

138 "bHW": -15.54, 

139 } 

140 

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

142 

143 

144class YPerpPSF(StellarLocusBase): 

145 def setDefaults(self): 

146 super().setDefaults() 

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

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

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

150 

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

152 

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

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

155 

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

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

158 

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

160 

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

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

163 "xMin": 0.82, 

164 "xMax": 2.01, 

165 "yMin": 0.37, 

166 "yMax": 0.90, 

167 "mHW": 0.40, 

168 "bHW": 0.03, 

169 } 

170 

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

172 

173 

174class YPerpCModel(YPerpPSF): 

175 def setDefaults(self): 

176 super().setDefaults() 

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

178 

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

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

181 

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

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

184 

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

186 

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

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

189 "xMin": 0.82, 

190 "xMax": 2.01, 

191 "yMin": 0.37, 

192 "yMax": 0.90, 

193 "mHW": 0.40, 

194 "bHW": 0.03, 

195 }