Coverage for tests/test_isrMock.py: 24%

64 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2024-03-20 01:16 -0700

1# 

2# LSST Data Management System 

3# Copyright 2008-2017 AURA/LSST. 

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 <https://www.lsstcorp.org/LegalNotices/>. 

21# 

22 

23import unittest 

24import numpy as np 

25 

26import lsst.utils.tests 

27 

28import lsst.afw.image as afwImage 

29import lsst.ip.isr.isrMock as isrMock 

30 

31 

32class IsrMockCases(lsst.utils.tests.TestCase): 

33 """Test the generation of IsrMock data. 

34 """ 

35 def setUp(self): 

36 self.inputExp = isrMock.TrimmedRawMock().run() 

37 self.mi = self.inputExp.getMaskedImage() 

38 

39 def test_simple(self): 

40 """Chain raw and calibration mock data. 

41 

42 This test should confirm the raw data is generated as expected. 

43 """ 

44 

45 initialMean = np.median(self.mi.getImage().getArray()[:]) 

46 initialStd = np.std(self.mi.getImage().getArray()[:]) 

47 

48 bias = isrMock.BiasMock().run() 

49 self.mi.getImage().getArray()[:] = (self.mi.getImage().getArray()[:] 

50 - bias.getMaskedImage().getImage().getArray()[:]) 

51 newMean = np.median(self.mi.getImage().getArray()[:]) 

52 newStd = np.std(self.mi.getImage().getArray()[:]) 

53 

54 self.assertLess(newMean, initialMean) 

55 

56 initialMean = newMean 

57 initialStd = newStd 

58 

59 dark = isrMock.DarkMock().run() 

60 self.mi.getImage().getArray()[:] = (self.mi.getImage().getArray()[:] 

61 - dark.getMaskedImage().getImage().getArray()[:]) 

62 newMean = np.median(self.mi.getImage().getArray()[:]) 

63 newStd = np.std(self.mi.getImage().getArray()[:]) 

64 

65 self.assertLess(newMean, initialMean) 

66 

67 initialMean = newMean 

68 initialStd = newStd 

69 

70 flat = isrMock.FlatMock().run() 

71 self.mi.getImage().getArray()[:] = (self.mi.getImage().getArray()[:] 

72 - flat.getMaskedImage().getImage().getArray()[:]) 

73 newMean = np.median(self.mi.getImage().getArray()[:]) 

74 newStd = np.std(self.mi.getImage().getArray()[:]) 

75 

76 self.assertAlmostEqual(newMean, initialMean, -2) 

77 self.assertLess(newStd, initialStd) 

78 

79 initialMean = newMean 

80 initialStd = newStd 

81 

82 fringe = isrMock.FringeMock().run() 

83 self.mi.getImage().getArray()[:] = (self.mi.getImage().getArray()[:] 

84 - fringe.getMaskedImage().getImage().getArray()[:]) 

85 newMean = np.median(self.mi.getImage().getArray()[:]) 

86 newStd = np.std(self.mi.getImage().getArray()[:]) 

87 

88 self.assertLess(newMean, initialMean) 

89 

90 def test_untrimmedSimple(self): 

91 """Confirm untrimmed data classes are generated consistently. 

92 """ 

93 exposure = isrMock.RawMock().run() 

94 fringe = isrMock.UntrimmedFringeMock().run() 

95 

96 initialStd = np.std(exposure.getMaskedImage().getImage().getArray()[:]) 

97 

98 diff = (exposure.getMaskedImage().getImage().getArray()[:] 

99 - fringe.getMaskedImage().getImage().getArray()[:]) 

100 

101 newStd = np.std(diff[:]) 

102 

103 self.assertLess(newStd, initialStd) 

104 

105 def test_productTypes(self): 

106 """Test non-image data is returned as the expected type. 

107 """ 

108 self.assertIsInstance(isrMock.BfKernelMock().run(), np.ndarray) 

109 self.assertIsInstance(isrMock.CrosstalkCoeffMock().run(), np.ndarray) 

110 

111 self.assertIsInstance(isrMock.DefectMock().run()[0], lsst.meas.algorithms.Defect) 

112 self.assertIsInstance(isrMock.TransmissionMock().run(), afwImage.TransmissionCurve) 

113 

114 def test_edgeCases(self): 

115 """Test that improperly specified configurations do not return data. 

116 """ 

117 config = isrMock.IsrMockConfig() 

118 self.assertIsNone(isrMock.IsrMock(config=config).run()) 

119 

120 with self.assertRaises(RuntimeError): 

121 config.doGenerateData = True 

122 isrMock.IsrMock(config=config).run() 

123 

124 

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

126 pass 

127 

128 

129def setup_module(module): 

130 lsst.utils.tests.init() 

131 

132 

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

134 lsst.utils.tests.init() 

135 unittest.main()