Coverage for python/lsst/analysis/tools/analysisParts/stellarLocus.py: 22%
97 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-03-21 02:00 -0700
« prev ^ index » next coverage.py v6.5.0, created at 2023-03-21 02:00 -0700
1from __future__ import annotations
3__all__ = (
4 "StellarLocusBase",
5 "WPerpPSF",
6 "WPerpCModel",
7 "XPerpPSF",
8 "XPerpCModel",
9 "YPerpPSF",
10 "YPerpCModel",
11)
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
25class StellarLocusBase(AnalysisTool):
26 # Use this as the Base Class for now StellarLocusBaseMetric
27 parameterizedBand: bool = False
29 def setDefaults(self):
30 super().setDefaults()
31 self.prep.selectors.flagSelector = CoaddPlotFlagSelector()
33 self.prep.selectors.snSelector = SnSelector()
34 self.prep.selectors.snSelector.threshold = 300
36 self.prep.selectors.starSelector = StarSelector()
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
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"
51 self.prep.selectors.starSelector.vectorKey = "r_extendedness"
53 self.process.buildActions.x.magDiff.col1 = "g_psfFlux"
54 self.process.buildActions.x.magDiff.col2 = "r_psfFlux"
56 self.process.buildActions.y.magDiff.col1 = "r_psfFlux"
57 self.process.buildActions.y.magDiff.col2 = "i_psfFlux"
59 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_psfFlux")
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 }
71 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag")
74class WPerpCModel(WPerpPSF):
75 def setDefaults(self):
76 super().setDefaults()
77 self.prep.selectors.snSelector.fluxType = "{band}_cModelFlux"
79 self.process.buildActions.x.magDiff.col1 = "g_cModelFlux"
80 self.process.buildActions.x.magDiff.col2 = "r_cModelFlux"
82 self.process.buildActions.y.magDiff.col1 = "r_cModelFlux"
83 self.process.buildActions.y.magDiff.col2 = "i_cModelFlux"
85 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_cModelFlux")
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 }
97 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag")
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"
107 self.prep.selectors.starSelector.vectorKey = "r_extendedness"
109 self.process.buildActions.x.magDiff.col1 = "g_psfFlux"
110 self.process.buildActions.x.magDiff.col2 = "r_psfFlux"
112 self.process.buildActions.y.magDiff.col1 = "r_psfFlux"
113 self.process.buildActions.y.magDiff.col2 = "i_psfFlux"
115 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_psfFlux")
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 }
127 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag")
130class XPerpCModel(XPerpPSF):
131 def setDefaults(self):
132 super().setDefaults()
133 self.prep.selectors.snSelector.fluxType = "{band}_cModelFlux"
135 self.process.buildActions.x.magDiff.col1 = "g_cModelFlux"
136 self.process.buildActions.x.magDiff.col2 = "r_cModelFlux"
138 self.process.buildActions.y.magDiff.col1 = "r_cModelFlux"
139 self.process.buildActions.y.magDiff.col2 = "i_cModelFlux"
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 }
151 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="r_cModelFlux")
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"
161 self.prep.selectors.starSelector.vectorKey = "i_extendedness"
163 self.process.buildActions.x.magDiff.col1 = "r_psfFlux"
164 self.process.buildActions.x.magDiff.col2 = "i_psfFlux"
166 self.process.buildActions.y.magDiff.col1 = "i_psfFlux"
167 self.process.buildActions.y.magDiff.col2 = "z_psfFlux"
169 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="i_psfFlux")
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 }
181 self.process.calculateActions.approxMagDepth = ApproxFloor(vectorKey="mag")
184class YPerpCModel(YPerpPSF):
185 def setDefaults(self):
186 super().setDefaults()
187 self.prep.selectors.snSelector.fluxType = "{band}_cModelFlux"
189 self.process.buildActions.x.magDiff.col1 = "r_cModelFlux"
190 self.process.buildActions.x.magDiff.col2 = "i_cModelFlux"
192 self.process.buildActions.y.magDiff.col1 = "i_cModelFlux"
193 self.process.buildActions.y.magDiff.col2 = "z_cModelFlux"
195 self.process.buildActions.mag = MagColumnNanoJansky(vectorKey="i_cModelFlux")
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 }