Coverage for tests / test_deferredCharge.py: 24%
48 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-15 00:22 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-15 00:22 +0000
1#
2# LSST Data Management System
3#
4# Copyright 2008-2017 AURA/LSST.
5#
6# This product includes software developed by the
7# LSST Project (http://www.lsst.org/).
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 LSST License Statement and
20# the GNU General Public License along with this program. If not,
21# see <https://www.lsstcorp.org/LegalNotices/>.
22#
23"""Test cases for lsst.cp.pipe.deferredCharge."""
25import unittest
26import numpy
28import lsst.utils
29import lsst.utils.tests
31import lsst.cp.pipe as cpPipe
32from lsst.ip.isr import IsrMock, PhotonTransferCurveDataset
35class CpCtiSolveTaskTestCase(lsst.utils.tests.TestCase):
36 """A test case for the deferred charge/CTI solve task."""
38 def setUp(self):
39 self.camera = IsrMock().getCamera()
41 serialOscanMeansA = [
42 7.18039751e-01, 4.56550479e-01, 4.14261669e-01, 2.88099229e-01, -2.34310962e-02,
43 -4.59854975e-02, -1.14491098e-02, 5.19846082e-02, 2.05635265e-01, 1.25147207e-02,
44 9.00449380e-02, -2.39106059e-01, -1.52413145e-01, 4.63459678e-02, 1.85195580e-01,
45 -1.58051759e-01, -8.76842241e-04, -5.09192124e-02, 2.58496821e-01, 2.54267782e-01,
46 -1.37611866e-01, 3.35322201e-01, 1.04846083e-01, -2.16551736e-01, -8.82746354e-02,
47 -1.00256450e-01, 2.73297966e-01, -4.52805981e-02, 3.40960979e-01, 7.80628920e-02,
48 -2.90697180e-02, -6.99492991e-02, -1.06599867e-01, 6.89002723e-02, 1.46290688e-02,
49 1.19647197e-01, -1.54527843e-01, 9.35689881e-02, -1.06599934e-01, -2.13166289e-02,
50 9.35688764e-02, -1.19286761e-01, 1.18098985e-02, -3.69616691e-03, -6.14914447e-02,
51 -5.81059000e-03, 9.42736641e-02, 3.92978266e-02, -1.55937240e-01, 3.76202404e-01,
52 -1.13648064e-01, 1.71803936e-01, 6.17138995e-03, 8.22918862e-02, -2.84214199e-01,
53 -2.99097435e-03, -1.31973490e-01, -2.84214795e-01, -2.99140741e-03, -3.76546055e-01,
54 5.97376414e-02, -1.91883057e-01, -1.34087920e-01, -3.23684871e-01,
55 ]
56 serialOscanMeansB = [
57 1.50365152e+01, 4.43178511e+00, 2.66550946e+00, 1.67382801e+00, 1.10997069e+00,
58 8.89361799e-01, 4.66469795e-01, 6.10956728e-01, 6.67343795e-01, 5.22854805e-01,
59 -1.15006611e-01, 2.67710119e-01, 2.05686077e-01, 1.84541523e-01, 8.65717679e-02,
60 5.51738311e-03, 2.35288814e-01, 3.45944524e-01, 7.81139359e-02, 1.52119964e-01,
61 2.02162191e-01, 3.44150960e-02, -2.86277920e-01, 1.43662184e-01, 3.21276844e-01,
62 -6.21452965e-02, 8.58670697e-02, -1.63320359e-02, -1.07958235e-01, -1.60820082e-01,
63 -2.19705645e-02, -1.55181482e-01, -2.39055425e-01, -2.75705636e-01, 6.33126274e-02,
64 -5.50971478e-02, -2.42579415e-01, -9.87957790e-02, 1.08421087e-01, -1.12892322e-01,
65 1.89090632e-02, -1.53086300e-03, -2.18615308e-01, -2.19320312e-01, 9.22102109e-02,
66 -4.87535410e-02, -1.81964979e-01, -4.17055413e-02, -4.24422681e-01, -1.96061105e-01,
67 -1.35127297e-02, -1.77031055e-01, -2.30597332e-01, -4.01868790e-01, -4.18784261e-01,
68 -3.75085384e-01, -3.49007100e-01, -1.77735761e-01, -7.41272718e-02, -1.92537069e-01,
69 2.46565759e-01, -3.44777972e-01, -2.85573214e-01, -2.34121397e-01,
70 ]
71 serialOscanMeansC = [
72 0.212578110, 0.107817403, -0.122200218, -0.0089812368, -0.067990060, 0.040077099,
73 -0.021402006, 0.090923088, -0.099587158, 0.274797124, -0.016930788, 0.045007070,
74 -0.00379911056, -0.16088248, 0.055911896, 0.0601755001, -0.046872945, 0.210018355,
75 0.081641635, -0.046147249, -0.0059020276, 0.108368757, -0.033966731, -0.0058644798,
76 -0.075746922, -0.203826510, 0.12620401, -0.0156685544, -0.09631182, 0.089754454,
77 0.03789926, 0.0304515115, -0.082173715, -0.061332140, -0.24894494, -0.155137551,
78 -0.073825312, 0.24538413, -0.069597074, 0.192338801, -0.0539746876, -0.184556000,
79 -0.173069382, -0.209975778, 0.086679191, 0.016299034, -0.0094125706, -0.100099911,
80 0.061981365, 0.086250364, 0.209128404, -0.0067993622, 0.171072270, -0.29266333,
81 0.075172274, -0.29375612, -0.13377650, 0.0125964781, -0.124991264, 0.226516831,
82 0.128244484, -0.05019844, -0.149249925, -0.1557398,
83 ]
84 serialOscanMeansD = [
85 4.0867248, 1.43194193, 0.95319573, 0.43219185, 0.53112239, 0.28648, 0.323903486,
86 0.27622156, 0.26031138, 0.144442975, 0.0149878587, 0.062969929, 0.018541051,
87 -0.237687056, 0.22804558, 0.0600504708, 0.140250022, -0.137477808, 0.119911710,
88 0.03770870, -0.20021377, 0.187175400, 0.0168790129, -0.110724371, 0.099311580,
89 0.0079969534, -0.157593577, -0.178876067, -0.214948580, -0.11354382, 0.148154530,
90 -0.056012520, 0.11851939, 0.067902033, 0.18970736, -0.181487703, -0.0101017127,
91 0.100998570, -0.0309096733, -0.034450136, -0.066357072, -0.058662959, 0.146185921,
92 -0.218474021, -0.173691633, 0.055349625, -0.178158524, -0.012917378, -0.166576555,
93 -0.063862754, 0.113169933, -0.33518338, -0.074239500, 0.22262230, -0.066653975,
94 -0.200271016, -0.013275277, 0.100596499, -0.092528954, 0.0339541714, 0.113119135,
95 -0.150720824, 0.038237873, 0.17603852613429813,
96 ]
97 parallelOscanMeans = [
98 7.18039751e-01, 4.56550479e-01, 4.14261669e-01, 2.88099229e-01, -2.34310962e-02,
99 -4.59854975e-02, -1.14491098e-02, 5.19846082e-02, 2.05635265e-01, 1.25147207e-02,
100 ]
102 self.inputMeasurements = [
103 {'CTI': {'C:0,0': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
104 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
105 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
106 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
107 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
108 'INPUT_GAIN': 1.5},
109 'C:0,1': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
110 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
111 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
112 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
113 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
114 'INPUT_GAIN': 1.5},
115 'C:0,2': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
116 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
117 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
118 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
119 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
120 'INPUT_GAIN': 1.5},
121 'C:0,3': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
122 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
123 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
124 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
125 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
126 'INPUT_GAIN': 1.5},
127 'C:1,0': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
128 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
129 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
130 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
131 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
132 'INPUT_GAIN': 1.5},
133 'C:1,1': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
134 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
135 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
136 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
137 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
138 'INPUT_GAIN': 1.5},
139 'C:1,2': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
140 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
141 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
142 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
143 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
144 'INPUT_GAIN': 1.5},
145 'C:1,3': {'FIRST_COLUMN_MEAN': 117.810165, 'LAST_COLUMN_MEAN': 1.09791130e+02,
146 'IMAGE_MEAN': 117.810165, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansA,
147 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
148 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
149 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
150 'INPUT_GAIN': 1.5}}},
152 {'CTI': {'C:0,0': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
153 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
154 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
155 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
156 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
157 'INPUT_GAIN': 1.5},
158 'C:0,1': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
159 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
160 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
161 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
162 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
163 'INPUT_GAIN': 1.5},
164 'C:0,2': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
165 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
166 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
167 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
168 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
169 'INPUT_GAIN': 1.5},
170 'C:0,3': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
171 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
172 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
173 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
174 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
175 'INPUT_GAIN': 1.5},
176 'C:1,0': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
177 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
178 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
179 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
180 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
181 'INPUT_GAIN': 1.5},
182 'C:1,1': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
183 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
184 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
185 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
186 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
187 'INPUT_GAIN': 1.5},
188 'C:1,2': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
189 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
190 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
191 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
192 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
193 'INPUT_GAIN': 1.5},
194 'C:1,3': {'FIRST_COLUMN_MEAN': 36562.082, 'LAST_COLUMN_MEAN': 3.45901172e+04,
195 'IMAGE_MEAN': 36562.082, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansB,
196 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
197 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
198 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
199 'INPUT_GAIN': 1.5}}},
201 {'CTI': {'C:0,0': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
202 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
203 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
204 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
205 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
206 'INPUT_GAIN': 1.5},
207 'C:0,1': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
208 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
209 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
210 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
211 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
212 'INPUT_GAIN': 1.5},
213 'C:0,2': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
214 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
215 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
216 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
217 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
218 'INPUT_GAIN': 1.5},
219 'C:0,3': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
220 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
221 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
222 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
223 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
224 'INPUT_GAIN': 1.5},
225 'C:1,0': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
226 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
227 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
228 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
229 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
230 'INPUT_GAIN': 1.5},
231 'C:1,1': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
232 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
233 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
234 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
235 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
236 'INPUT_GAIN': 1.5},
237 'C:1,2': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
238 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
239 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
240 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
241 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
242 'INPUT_GAIN': 1.5},
243 'C:1,3': {'FIRST_COLUMN_MEAN': 994.811, 'LAST_COLUMN_MEAN': 936.415,
244 'IMAGE_MEAN': 994.811, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansC,
245 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
246 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
247 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
248 'INPUT_GAIN': 1.5}}},
250 {'CTI': {'C:0,0': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
251 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
252 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
253 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
254 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
255 'INPUT_GAIN': 1.5},
256 'C:0,1': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
257 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
258 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
259 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
260 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
261 'INPUT_GAIN': 1.5},
262 'C:0,2': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
263 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
264 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
265 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
266 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
267 'INPUT_GAIN': 1.5},
268 'C:0,3': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
269 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
270 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
271 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
272 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
273 'INPUT_GAIN': 1.5},
274 'C:1,0': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
275 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
276 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
277 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
278 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
279 'INPUT_GAIN': 1.5},
280 'C:1,1': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
281 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
282 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
283 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
284 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
285 'INPUT_GAIN': 1.5},
286 'C:1,2': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
287 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
288 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
289 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
290 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
291 'INPUT_GAIN': 1.5},
292 'C:1,3': {'FIRST_COLUMN_MEAN': 12215.778, 'LAST_COLUMN_MEAN': 11536.875,
293 'IMAGE_MEAN': 12215.778, 'SERIAL_OVERSCAN_VALUES': serialOscanMeansD,
294 'SERIAL_OVERSCAN_COLUMNS': [x for x in range(0, 64)],
295 'PARALLEL_OVERSCAN_VALUES': parallelOscanMeans,
296 'PARALLEL_OVERSCAN_ROWS': [x for x in range(0, 10)],
297 'INPUT_GAIN': 1.5}}}]
298 self.inputDims = [{'detector': 20, 'instrument': 'IsrMock', 'exposure': 2019101200433},
299 {'detector': 20, 'instrument': 'IsrMock', 'exposure': 2019101300154},
300 {'detector': 20, 'instrument': 'IsrMock', 'exposure': 2019101300004},
301 {'detector': 20, 'instrument': 'IsrMock', 'exposure': 2019101200333}]
303 self.task = cpPipe.CpCtiSolveTask()
305 self.ptc = PhotonTransferCurveDataset()
306 self.ptc.updateMetadata(camera=self.camera, detector=self.camera[20])
307 self.sequencerMetadata = {
308 "SEQNAME": "a_sequencer",
309 "SEQFILE": "a_sequencer_file",
310 "SEQCKSUM": "deadbeef",
311 }
312 self.ptc.updateMetadata(**self.sequencerMetadata, setCalibInfo=True)
314 def test_task(self):
315 """A test for the main CpCtiSolveTask.
317 This should excercise most of the new code.
318 """
319 results = self.task.run(self.inputMeasurements, self.camera, self.inputDims, self.ptc)
321 calib = results.outputCalib
323 for key, value in self.sequencerMetadata.items():
324 self.assertEqual(calib.metadata[key], value)
326 for key in ["INSTRUME", "DETECTOR", "DET_NAME", "DET_SER"]:
327 self.assertEqual(calib.metadata[key], self.ptc.metadata[key])
329 # Check that the signals array is sorted
330 for ampName in calib.signals.keys():
331 assert numpy.all(numpy.diff(calib.signals[ampName]) > 0)
333 # Check that the result matches expectation.
334 self.assertAlmostEqual(calib.globalCti['C:0,0'], 1.0e-7, 4)
335 self.assertAlmostEqual(calib.driftScale['C:0,0'], 1.8105e-4, 4)
336 self.assertAlmostEqual(calib.decayTime['C:0,0'], 3.08095, 4)
338 # Check that all amps are equal.
339 for ampName in calib.globalCti.keys():
340 self.assertEqual(calib.globalCti['C:0,0'], calib.globalCti[ampName])
341 self.assertEqual(calib.driftScale['C:0,0'], calib.driftScale[ampName])
342 self.assertEqual(calib.decayTime['C:0,0'], calib.decayTime[ampName])
343 self.assertEqual(calib.signals[ampName][-2], calib.serialCtiTurnoff[ampName])
344 self.assertEqual(calib.signals[ampName][-1], calib.parallelCtiTurnoff[ampName])
345 self.assertEqual(
346 (calib.signals[ampName][-1] - calib.signals[ampName][-3]) / 2.0,
347 calib.serialCtiTurnoffSamplingErr[ampName],
348 )
349 self.assertEqual(
350 calib.signals[ampName][-1] - calib.signals[ampName][-2],
351 calib.parallelCtiTurnoffSamplingErr[ampName],
352 )
355class TestMemory(lsst.utils.tests.MemoryTestCase):
356 pass
359def setup_module(module):
360 lsst.utils.tests.init()
363if __name__ == "__main__": 363 ↛ 364line 363 didn't jump to line 364 because the condition on line 363 was never true
364 lsst.utils.tests.init()
365 unittest.main()