Coverage for python/lsst/analysis/tools/atools/photometry.py: 15%

88 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-23 13:09 +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 

22 

23__all__ = ("Ap12PsfSkyPlot", "PsfCModelSkyPlot", "PsfApRatio") 

24 

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 

38 

39 

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 = [] 

47 

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

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

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

51 

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

53 self.prep.selectors.starSelector.vectorKey = "{band}_extendedness" 

54 

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" 

62 

63 self.process.buildActions.zStars = ExtinctionCorrectedMagDiff() 

64 self.process.buildActions.zStars.magDiff.col1 = "{band}_ap12Flux" 

65 self.process.buildActions.zStars.magDiff.col2 = "{band}_psfFlux" 

66 

67 self.process.calculateActions.median = MedianAction() 

68 self.process.calculateActions.median.vectorKey = "zStars" 

69 

70 self.process.calculateActions.mean = MeanAction() 

71 self.process.calculateActions.mean.vectorKey = "zStars" 

72 

73 self.process.calculateActions.sigmaMad = SigmaMadAction() 

74 self.process.calculateActions.sigmaMad.vectorKey = "zStars" 

75 

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 

83 

84 self.produce.metric.units = {"median": "mmag", "sigmaMad": "mmag", "mean": "mmag"} 

85 

86 self.produce.metric.newNames = { 

87 "median": "{band}_ap12-psf_median", 

88 "mean": "{band}_ap12-psf_mean", 

89 "sigmaMad": "{band}_ap12-psf_sigmaMad", 

90 } 

91 

92 

93class PsfCModelSkyPlot(AnalysisTool): 

94 """Creates a skyPlot showing the difference between PSF and CModel mags""" 

95 

96 def setDefaults(self): 

97 super().setDefaults() 

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

99 self.prep.selectors.flagSelector.bands = [] 

100 

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

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

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

104 

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

106 self.prep.selectors.starSelector.vectorKey = "{band}_extendedness" 

107 

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 

115 

116 self.process.buildActions.zStars = MagDiff() 

117 self.process.buildActions.zStars.col1 = "{band}_psfFlux" 

118 self.process.buildActions.zStars.col2 = "{band}_cModelFlux" 

119 

120 self.process.calculateActions.median = MedianAction() 

121 self.process.calculateActions.median.vectorKey = "zStars" 

122 

123 self.process.calculateActions.mean = MeanAction() 

124 self.process.calculateActions.mean.vectorKey = "zStars" 

125 

126 self.process.calculateActions.sigmaMad = SigmaMadAction() 

127 self.process.calculateActions.sigmaMad.vectorKey = "zStars" 

128 

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 

136 

137 self.produce.metric.units = {"median": "mmag", "sigmaMad": "mmag", "mean": "mmag"} 

138 

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 } 

144 

145 

146class PsfApRatio(AnalysisTool): 

147 """Base class for plots or metrics which use PSF/Aperture Ratios.""" 

148 

149 def setDefaults(self): 

150 super().setDefaults() 

151 self.process.buildActions.loadVectorPsf = LoadVector() 

152 self.process.buildActions.loadVectorAp = LoadVector() 

153 

154 # assign keys for PSF and AP Flux 

155 self.process.buildActions.loadVectorPsf.vectorKey = "psFlux" 

156 self.process.buildActions.loadVectorAp.vectorKey = "apFlux" 

157 

158 self.process.calculateActions.fluxRatio = DivideVector( 

159 actionA=self.process.buildActions.loadVectorPsf, actionB=self.process.buildActions.loadVectorAp 

160 ) 

161 

162 self.produce.plot = HistPlot() 

163 

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")