Coverage for python/lsst/analysis/tools/atools/photometry.py: 15%
88 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-10 14:08 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-10 14:08 +0000
1# This file is part of analysis_tools.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
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 GNU General Public License
20# along with this program. If not, see <https://www.gnu.org/licenses/>.
21from __future__ import annotations
23__all__ = ("Ap12PsfSkyPlot", "PsfCModelSkyPlot", "PsfApRatio")
25from ..actions.plot.histPlot import HistPanel, HistPlot
26from ..actions.plot.skyPlot import SkyPlot
27from ..actions.scalar.scalarActions import MeanAction, MedianAction, SigmaMadAction
28from ..actions.vector import (
29 CoaddPlotFlagSelector,
30 DivideVector,
31 ExtinctionCorrectedMagDiff,
32 LoadVector,
33 MagDiff,
34 SnSelector,
35 StarSelector,
36)
37from ..interfaces import AnalysisTool
40class Ap12PsfSkyPlot(AnalysisTool):
41 def setDefaults(self):
42 super().setDefaults()
43 self.prep.selectors.flagSelector = CoaddPlotFlagSelector()
44 # Set this to an empty list to look at the band
45 # the plot is being made in.
46 self.prep.selectors.flagSelector.bands = []
48 self.prep.selectors.snSelector = SnSelector()
49 self.prep.selectors.snSelector.fluxType = "{band}_psfFlux"
50 self.prep.selectors.snSelector.threshold = 300
52 self.prep.selectors.starSelector = StarSelector()
53 self.prep.selectors.starSelector.vectorKey = "{band}_extendedness"
55 # TODO: Can we make these defaults somewhere?
56 self.process.buildActions.xStars = LoadVector()
57 self.process.buildActions.xStars.vectorKey = "coord_ra"
58 self.process.buildActions.yStars = LoadVector()
59 self.process.buildActions.yStars.vectorKey = "coord_dec"
60 self.process.buildActions.starStatMask = SnSelector()
61 self.process.buildActions.starStatMask.fluxType = "{band}_psfFlux"
63 self.process.buildActions.zStars = ExtinctionCorrectedMagDiff()
64 self.process.buildActions.zStars.magDiff.col1 = "{band}_ap12Flux"
65 self.process.buildActions.zStars.magDiff.col2 = "{band}_psfFlux"
67 self.process.calculateActions.median = MedianAction()
68 self.process.calculateActions.median.vectorKey = "zStars"
70 self.process.calculateActions.mean = MeanAction()
71 self.process.calculateActions.mean.vectorKey = "zStars"
73 self.process.calculateActions.sigmaMad = SigmaMadAction()
74 self.process.calculateActions.sigmaMad.vectorKey = "zStars"
76 self.produce.plot = SkyPlot()
77 self.produce.plot.plotTypes = ["stars"]
78 self.produce.plot.plotName = "{band}_ap12-psf"
79 self.produce.plot.xAxisLabel = "R.A. (degrees)"
80 self.produce.plot.yAxisLabel = "Dec. (degrees)"
81 self.produce.plot.zAxisLabel = "Ap 12 - PSF [mag]"
82 self.produce.plot.plotOutlines = False
84 self.produce.metric.units = {"median": "mmag", "sigmaMad": "mmag", "mean": "mmag"}
86 self.produce.metric.newNames = {
87 "median": "{band}_ap12-psf_median",
88 "mean": "{band}_ap12-psf_mean",
89 "sigmaMad": "{band}_ap12-psf_sigmaMad",
90 }
93class PsfCModelSkyPlot(AnalysisTool):
94 """Creates a skyPlot showing the difference between PSF and CModel mags"""
96 def setDefaults(self):
97 super().setDefaults()
98 self.prep.selectors.flagSelector = CoaddPlotFlagSelector()
99 self.prep.selectors.flagSelector.bands = []
101 self.prep.selectors.snSelector = SnSelector()
102 self.prep.selectors.snSelector.fluxType = "{band}_psfFlux"
103 self.prep.selectors.snSelector.threshold = 300
105 self.prep.selectors.starSelector = StarSelector()
106 self.prep.selectors.starSelector.vectorKey = "{band}_extendedness"
108 self.process.buildActions.xStars = LoadVector()
109 self.process.buildActions.xStars.vectorKey = "coord_ra"
110 self.process.buildActions.yStars = LoadVector()
111 self.process.buildActions.yStars.vectorKey = "coord_dec"
112 self.process.buildActions.starStatMask = SnSelector()
113 self.process.buildActions.starStatMask.fluxType = "{band}_psfFlux"
114 self.process.buildActions.starStatMask.threshold = 300
116 self.process.buildActions.zStars = MagDiff()
117 self.process.buildActions.zStars.col1 = "{band}_psfFlux"
118 self.process.buildActions.zStars.col2 = "{band}_cModelFlux"
120 self.process.calculateActions.median = MedianAction()
121 self.process.calculateActions.median.vectorKey = "zStars"
123 self.process.calculateActions.mean = MeanAction()
124 self.process.calculateActions.mean.vectorKey = "zStars"
126 self.process.calculateActions.sigmaMad = SigmaMadAction()
127 self.process.calculateActions.sigmaMad.vectorKey = "zStars"
129 self.produce.plot = SkyPlot()
130 self.produce.plot.plotTypes = ["stars"]
131 self.produce.plot.plotName = "{band}_psf-cModel"
132 self.produce.plot.xAxisLabel = "R.A. (degrees)"
133 self.produce.plot.yAxisLabel = "Dec. (degrees)"
134 self.produce.plot.zAxisLabel = "PSF - cModel [mmag]"
135 self.produce.plot.plotOutlines = False
137 self.produce.metric.units = {"median": "mmag", "sigmaMad": "mmag", "mean": "mmag"}
139 self.produce.metric.newNames = {
140 "median": "{band}_psf_cModel_diff_median",
141 "mean": "{band}_psf_cModel_diff_mean",
142 "sigmaMad": "{band}_psf_cModel_diff_sigmaMad",
143 }
146class PsfApRatio(AnalysisTool):
147 """Base class for plots or metrics which use PSF/Aperture Ratios."""
149 def setDefaults(self):
150 super().setDefaults()
151 self.process.buildActions.loadVectorPsf = LoadVector()
152 self.process.buildActions.loadVectorAp = LoadVector()
154 # assign keys for PSF and AP Flux
155 self.process.buildActions.loadVectorPsf.vectorKey = "psFlux"
156 self.process.buildActions.loadVectorAp.vectorKey = "apFlux"
158 self.process.calculateActions.fluxRatio = DivideVector(
159 actionA=self.process.buildActions.loadVectorPsf, actionB=self.process.buildActions.loadVectorAp
160 )
162 self.produce.plot = HistPlot()
164 self.produce.panels["panel_flux"] = HistPanel()
165 self.produce.panels["panel_flux"].label = "Psf/Ap Ratio"
166 self.produce.panels["panel_flux"].hists = dict(fluxRatioMetric="Ratio")