163 def __init__(self, camera=None, inputRange=1, fitRange=None, availableFilters=list(), **kwargs):
165 Filename refers to an input tuple that contains the
166 boundary shifts for one electron. This file is produced by an
167 electrostatic fit to data extracted from flat-field statistics,
168 implemented in https://gitlab.in2p3.fr/astier/bfptc/tools/fit_cov.py
173 fitRange = inputRange
177 self.
aMatrix = np.full((inputRange, inputRange), np.nan)
191 self.
ath = np.full((fitRange, fitRange), np.nan)
193 self.
aN = np.full((fitRange, fitRange), np.nan)
194 self.
aS = np.full((fitRange, fitRange), np.nan)
195 self.
aE = np.full((fitRange, fitRange), np.nan)
196 self.
aW = np.full((fitRange, fitRange), np.nan)
201 self.
aNByFilter = {k: np.full((fitRange, fitRange), np.nan)
for k
in availableFilters}
202 self.
aSByFilter = {k: np.full((fitRange, fitRange), np.nan)
for k
in availableFilters}
203 self.
aEByFilter = {k: np.full((fitRange, fitRange), np.nan)
for k
in availableFilters}
204 self.
aWByFilter = {k: np.full((fitRange, fitRange), np.nan)
for k
in availableFilters}
209 self.
initFromCamera(camera, detectorId=kwargs.get(
'detectorId',
None))
212 'inputRange',
'fitRange',
'badAmps',
'gain',
'aMatrix',
213 'aMatrixSigma',
'aMatrixModel',
'aMatrixSum',
'aMatrixModelSum',
214 'modelNormalization',
'usedPixels',
'fitParamNames',
215 'freeFitParamNames',
'fitParams',
'fitParamErrors',
'fitChi2',
216 'fitReducedChi2',
'fitParamCovMatrix',
'ath',
'athMinusBeta',
217 'aN',
'aS',
'aE',
'aW',
'ampNames',
'availableFilters',
218 'aMatrixModelByFilter',
'athByFilter',
'athMinusBetaByFilter',
219 'aNByFilter',
'aSByFilter',
'aEByFilter',
'aWByFilter',
281 """Construct a calibration from a dictionary of properties.
286 Dictionary of properties.
290 calib : `lsst.ip.isr.BrighterFatterKernel`
291 Constructed calibration.
296 Raised if the supplied dictionary is for a different
298 Raised if the version of the supplied dictionary is 1.0.
302 if calib._OBSTYPE != (found := dictionary[
'metadata'][
'OBSTYPE']):
303 raise RuntimeError(f
"Incorrect brighter-fatter calibration supplied. Expected {calib._OBSTYPE}, "
305 calib.setMetadata(dictionary[
'metadata'])
306 calib.calibInfoFromDict(dictionary)
308 calib.ampNames = dictionary[
'ampNames']
309 inputRange = dictionary[
'inputRange']
310 fitRange = dictionary[
'fitRange']
311 calib.inputRange = inputRange
312 calib.fitRange = fitRange
313 calib.gain = dictionary[
'gain']
314 calib.badAmps = dictionary[
'badAmps']
315 calib.fitParamNames = dictionary[
'fitParamNames']
316 calib.freeFitParamNames = dictionary[
'freeFitParamNames']
317 calib.aMatrix = np.array(
318 dictionary[
'aMatrix'],
320 ).reshape(inputRange, inputRange)
321 calib.aMatrixSigma = np.array(
322 dictionary[
'aMatrixSigma'],
324 ).reshape(inputRange, inputRange)
325 calib.aMatrixModel = np.array(
326 dictionary[
'aMatrixSigma'],
328 ).reshape(fitRange, fitRange)
329 calib.aMatrixSum = float(dictionary[
'aMatrixSum'])
330 calib.aMatrixModelSum = float(dictionary[
'aMatrixModelSum'])
331 calib.modelNormalization = dictionary[
'modelNormalization']
332 calib.usedPixels = np.array(dictionary[
'usedPixels'])
333 calib.fitParams = dictionary[
'fitParams']
334 calib.fitParamErrors = dictionary[
'fitParamErrors']
335 calib.fitChi2 = float(dictionary[
'fitChi2'])
336 calib.fitReducedChi2 = float(dictionary[
'fitReducedChi2'])
337 calib.fitParamCovMatrix = np.array(
338 dictionary[
'fitParamCovMatrix'],
340 ).reshape(len(calib.freeFitParamNames), len(calib.freeFitParamNames))
341 calib.ath = np.array(
344 ).reshape(fitRange, fitRange)
345 calib.athMinusBeta = np.array(
346 dictionary[
'athMinusBeta'],
348 ).reshape(fitRange, fitRange)
352 ).reshape(fitRange, fitRange)
356 ).reshape(fitRange, fitRange)
360 ).reshape(fitRange, fitRange)
364 ).reshape(fitRange, fitRange)
366 filters = dictionary[
'availableFilters']
367 calib.availableFilters = dictionary[
'availableFilters']
368 calib.aMatrixModelByFilter = {
369 k: np.array(v, dtype=np.float64).reshape(fitRange, fitRange)
370 for k, v
in zip(filters, dictionary[
'aMatrixModelByFilter'])
372 calib.athByFilter = {
373 k: np.array(v, dtype=np.float64).reshape(fitRange, fitRange)
374 for k, v
in zip(filters, dictionary[
'athByFilter'])
376 calib.athMinusBetaByFilter = {
377 k: np.array(v, dtype=np.float64).reshape(fitRange, fitRange)
378 for k, v
in zip(filters, dictionary[
'athMinusBetaByFilter'])
381 k: np.array(v, dtype=np.float64).reshape(fitRange, fitRange)
382 for k, v
in zip(filters, dictionary[
'aNByFilter'])
385 k: np.array(v, dtype=np.float64).reshape(fitRange, fitRange)
386 for k, v
in zip(filters, dictionary[
'aSByFilter'])
389 k: np.array(v, dtype=np.float64).reshape(fitRange, fitRange)
390 for k, v
in zip(filters, dictionary[
'aEByFilter'])
393 k: np.array(v, dtype=np.float64).reshape(fitRange, fitRange)
394 for k, v
in zip(filters, dictionary[
'aWByFilter'])
397 calib.updateMetadata()