Coverage for tests/test_biasAndDarkCorrection.py: 17%

106 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-15 03:17 -0700

1# 

2# LSST Data Management System 

3# Copyright 2008-2017 LSST Corporation. 

4# 

5# This product includes software developed by the 

6# LSST Project (http://www.lsst.org/). 

7# 

8# This program is free software: you can redistribute it and/or modify 

9# it under the terms of the GNU General Public License as published by 

10# the Free Software Foundation, either version 3 of the License, or 

11# (at your option) any later version. 

12# 

13# This program is distributed in the hope that it will be useful, 

14# but WITHOUT ANY WARRANTY; without even the implied warranty of 

15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

16# GNU General Public License for more details. 

17# 

18# You should have received a copy of the LSST License Statement and 

19# the GNU General Public License along with this program. If not, 

20# see <http://www.lsstcorp.org/LegalNotices/>. 

21# 

22 

23import unittest 

24 

25import lsst.utils.tests 

26import lsst.geom 

27import lsst.afw.image as afwImage 

28import lsst.ip.isr as ipIsr 

29 

30 

31class IsrTestCases(unittest.TestCase): 

32 

33 def setUp(self): 

34 self.pmin = lsst.geom.Point2I(1, 1) 

35 self.pmax = lsst.geom.Point2I(10, 10) 

36 self.meanCountsKeyword = "IMMODE" 

37 self.filenameKeyword = "filename" 

38 

39 def tearDown(self): 

40 del self.pmin 

41 del self.pmax 

42 del self.meanCountsKeyword 

43 del self.filenameKeyword 

44 

45 def testBias(self): 

46 maskedImage = afwImage.MaskedImageF(lsst.geom.Box2I(self.pmin, self.pmax)) 

47 maskedImage.getImage().set(10) 

48 

49 bias = afwImage.MaskedImageF(lsst.geom.Box2I(self.pmin, self.pmax)) 

50 bias.getImage().set(1) 

51 biasexposure = afwImage.ExposureF(bias, None) 

52 bmetadata = biasexposure.getMetadata() 

53 bmetadata.setDouble(self.meanCountsKeyword, 1.) 

54 bmetadata.setString(self.filenameKeyword, 'Unittest Bias') 

55 

56 ipIsr.biasCorrection(maskedImage, biasexposure.getMaskedImage()) 

57 

58 height = maskedImage.getHeight() 

59 width = maskedImage.getWidth() 

60 for j in range(height): 

61 for i in range(width): 

62 self.assertEqual(maskedImage.image[i, j, afwImage.LOCAL], 9) 

63 

64 def doDark(self, scaling): 

65 maskedImage = afwImage.MaskedImageF(lsst.geom.Box2I(self.pmin, self.pmax)) 

66 maskedImage.getImage().set(10) 

67 

68 dark = afwImage.MaskedImageF(lsst.geom.Box2I(self.pmin, self.pmax)) 

69 dark.getImage().set(1) 

70 darkexposure = afwImage.ExposureF(dark, None) 

71 dmetadata = darkexposure.getMetadata() 

72 dmetadata.setString(self.filenameKeyword, 'Unittest Dark') 

73 

74 ipIsr.darkCorrection(maskedImage, darkexposure.getMaskedImage(), 1., scaling) 

75 

76 height = maskedImage.getHeight() 

77 width = maskedImage.getWidth() 

78 for j in range(height): 

79 for i in range(width): 

80 self.assertAlmostEqual(maskedImage.image[i, j, afwImage.LOCAL], 10 - 1./scaling, 5) 

81 

82 def testDark1(self): 

83 self.doDark(scaling=10) 

84 

85 def testDark2(self): 

86 self.doDark(scaling=0.1) 

87 

88 def testDark3(self): 

89 self.doDark(scaling=3.7) 

90 

91 def testDarkWithDarktime(self): 

92 darkTime = 128.0 

93 nan = float("NAN") 

94 

95 exp = afwImage.ExposureF(1, 1) 

96 exp.getMaskedImage().getImage().set(1.0) 

97 exp.getMaskedImage().getMask().set(0) 

98 exp.getMaskedImage().getVariance().set(1.0) 

99 

100 dark = afwImage.ExposureF(1, 1) 

101 dark.getMaskedImage().getImage().set(1.0/darkTime) 

102 dark.getMaskedImage().getMask().set(0) 

103 dark.getMaskedImage().getVariance().set(0.0) 

104 dark.getInfo().setVisitInfo(afwImage.VisitInfo()) 

105 

106 task = ipIsr.IsrTask() 

107 

108 # No darktime set in at least one of the inputs 

109 exp.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=nan)) 

110 dark.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=nan)) 

111 with self.assertRaises(RuntimeError): 

112 task.darkCorrection(exp, dark) 

113 exp.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=nan)) 

114 dark.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=1.0)) 

115 with self.assertRaises(RuntimeError): 

116 task.darkCorrection(exp, dark) 

117 

118 # With darktime set 

119 exp.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=darkTime)) 

120 dark.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=1.0)) 

121 task.darkCorrection(exp, dark) 

122 

123 self.assertEqual(exp.image[0, 0, afwImage.LOCAL], 0.0) 

124 self.assertEqual(exp.mask[0, 0, afwImage.LOCAL], 0) 

125 self.assertEqual(exp.variance[0, 0, afwImage.LOCAL], 1.0) 

126 self.assertEqual(exp.getInfo().getVisitInfo().getDarkTime(), darkTime) # Hasn't been modified 

127 

128 def testDarkWithDarktimeNan(self): 

129 darkTime = 128.0 

130 nan = float("NAN") 

131 

132 exp = afwImage.ExposureF(1, 1) 

133 exp.getMaskedImage().getImage().set(1.0) 

134 exp.getMaskedImage().getMask().set(0) 

135 exp.getMaskedImage().getVariance().set(1.0) 

136 

137 dark = afwImage.ExposureF(1, 1) 

138 dark.getMaskedImage().getImage().set(1.0/darkTime) 

139 dark.getMaskedImage().getMask().set(0) 

140 dark.getMaskedImage().getVariance().set(0.0) 

141 dark.getInfo().setVisitInfo(afwImage.VisitInfo()) 

142 

143 task = ipIsr.IsrTask() 

144 

145 # scale with darkScale=1 if the dark has darkTime=NaN. 

146 exp.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=darkTime)) 

147 dark.getInfo().setVisitInfo(afwImage.VisitInfo(darkTime=nan)) 

148 task.darkCorrection(exp, dark) 

149 

150 self.assertEqual(exp.image[0, 0, afwImage.LOCAL], 0.0) 

151 self.assertEqual(exp.mask[0, 0, afwImage.LOCAL], 0) 

152 self.assertEqual(exp.variance[0, 0, afwImage.LOCAL], 1.0) 

153 self.assertEqual(exp.getInfo().getVisitInfo().getDarkTime(), darkTime) # Hasn't been modified 

154 

155 

156class MemoryTester(lsst.utils.tests.MemoryTestCase): 

157 pass 

158 

159 

160def setup_module(module): 

161 lsst.utils.tests.init() 

162 

163 

164if __name__ == "__main__": 164 ↛ 165line 164 didn't jump to line 165, because the condition on line 164 was never true

165 lsst.utils.tests.init() 

166 unittest.main()