Coverage for tests/test_isrMock.py: 24%
64 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-04-11 09:44 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2023-04-11 09:44 +0000
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#
23import unittest
24import numpy as np
26import lsst.utils.tests
28import lsst.afw.image as afwImage
29import lsst.ip.isr.isrMock as isrMock
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()
39 def test_simple(self):
40 """Chain raw and calibration mock data.
42 This test should confirm the raw data is generated as expected.
43 """
45 initialMean = np.median(self.mi.getImage().getArray()[:])
46 initialStd = np.std(self.mi.getImage().getArray()[:])
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()[:])
54 self.assertLess(newMean, initialMean)
56 initialMean = newMean
57 initialStd = newStd
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()[:])
65 self.assertLess(newMean, initialMean)
67 initialMean = newMean
68 initialStd = newStd
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()[:])
76 self.assertAlmostEqual(newMean, initialMean, -2)
77 self.assertLess(newStd, initialStd)
79 initialMean = newMean
80 initialStd = newStd
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()[:])
88 self.assertLess(newMean, initialMean)
90 def test_untrimmedSimple(self):
91 """Confirm untrimmed data classes are generated consistently.
92 """
93 exposure = isrMock.RawMock().run()
94 fringe = isrMock.UntrimmedFringeMock().run()
96 initialStd = np.std(exposure.getMaskedImage().getImage().getArray()[:])
98 diff = (exposure.getMaskedImage().getImage().getArray()[:]
99 - fringe.getMaskedImage().getImage().getArray()[:])
101 newStd = np.std(diff[:])
103 self.assertLess(newStd, initialStd)
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)
111 self.assertIsInstance(isrMock.DefectMock().run()[0], lsst.meas.algorithms.Defect)
112 self.assertIsInstance(isrMock.TransmissionMock().run(), afwImage.TransmissionCurve)
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())
120 with self.assertRaises(RuntimeError):
121 config.doGenerateData = True
122 isrMock.IsrMock(config=config).run()
125class MemoryTester(lsst.utils.tests.MemoryTestCase):
126 pass
129def setup_module(module):
130 lsst.utils.tests.init()
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()