23Define dataset class for MeasurePhotonTransferCurve task
26__all__ = [
'PhotonTransferCurveDataset']
29from astropy.table
import Table
36 """A simple class to hold the output data from the PTC task.
38 The dataset is made up of a dictionary
for each item, keyed by the
39 amplifiers
' names, which much be supplied at construction time.
40 New items cannot be added to the class to save accidentally saving to the
41 wrong property,
and the
class can be frozen if desired.
42 inputExpIdPairs records the exposures used to produce the data.
43 When fitPtc()
or fitCovariancesAstier()
is run, a mask
is built up, which
44 is by definition always the same length
as inputExpIdPairs, rawExpTimes,
45 rawMeans
and rawVars,
and is a list of bools, which are incrementally set
46 to
False as points are discarded
from the fits.
47 PTC fit parameters
for polynomials are stored
in a list
in ascending order
48 of polynomial term, i.e. par[0]*x^0 + par[1]*x + par[2]*x^2 etc
49 with the length of the list corresponding to the order of the polynomial
55 List
with the names of the amplifiers of the detector at hand.
57 Type of model fitted to the PTC:
"POLYNOMIAL",
"EXPAPPROXIMATION",
60 Maximum lag of covariances (size of square covariance matrices).
61 kwargs : `dict`, optional
62 Other keyword arguments to
pass to the parent init.
66 The stored attributes are:
68 badAmps : `list` [`str`]
69 List
with bad amplifiers names.
70 inputExpIdPairs : `dict`, [`str`, `list`]
71 Dictionary keyed by amp names containing the input exposures IDs.
72 expIdMask : `dict`, [`str`, `np.ndarray`]
73 Dictionary keyed by amp names containing the mask produced after
74 outlier rejection. The mask produced by the
"FULLCOVARIANCE"
75 option may differ
from the one produced
in the other two PTC
77 rawExpTimes : `dict`, [`str`, `np.ndarray`]
78 Dictionary keyed by amp names containing the unmasked exposure times.
79 rawMeans : `dict`, [`str`, `np.ndarray`]
80 Dictionary keyed by amp names containing the unmasked average of the
81 means of the exposures
in each flat pair.
82 rawVars : `dict`, [`str`, `np.ndarray`]
83 Dictionary keyed by amp names containing the variance of the
84 difference image of the exposures
in each flat pair.
85 histVars : `dict`, [`str`, `np.ndarray`]
86 Dictionary keyed by amp names containing the variance of the
87 difference image of the exposures
in each flat pair estimated
88 by fitting a Gaussian model.
89 histChi2Dofs : `dict`, [`str`, `np.ndarray`]
90 Dictionary keyed by amp names containing the chi-squared per degree
91 of freedom fitting the difference image to a Gaussian model.
92 kspValues : `dict`, [`str`, `np.ndarray`]
93 Dictionary keyed by amp names containing the KS test p-value
from
94 fitting the difference image to a Gaussian model.
95 gain : `dict`, [`str`, `float`]
96 Dictionary keyed by amp names containing the fitted gains.
97 gainErr : `dict`, [`str`, `float`]
98 Dictionary keyed by amp names containing the errors on the
100 noise : `dict`, [`str`, `float`]
101 Dictionary keyed by amp names containing the fitted noise.
102 noiseErr : `dict`, [`str`, `float`]
103 Dictionary keyed by amp names containing the errors on the fitted
105 ptcFitPars : `dict`, [`str`, `np.ndarray`]
106 Dictionary keyed by amp names containing the fitted parameters of the
107 PTC model
for ptcFitTye
in [
"POLYNOMIAL",
"EXPAPPROXIMATION"].
108 ptcFitParsError : `dict`, [`str`, `np.ndarray`]
109 Dictionary keyed by amp names containing the errors on the fitted
110 parameters of the PTC model
for ptcFitTye
in
111 [
"POLYNOMIAL",
"EXPAPPROXIMATION"].
112 ptcFitChiSq : `dict`, [`str`, `float`]
113 Dictionary keyed by amp names containing the reduced chi squared
114 of the fit
for ptcFitTye
in [
"POLYNOMIAL",
"EXPAPPROXIMATION"].
115 ptcTurnoff : `dict` [`str, `float`]
116 Flux value (
in ADU) where the variance of the PTC curve starts
117 decreasing consistently.
118 covariances : `dict`, [`str`, `np.ndarray`]
119 Dictionary keyed by amp names containing a list of measured
120 covariances per mean flux.
121 covariancesModel : `dict`, [`str`, `np.ndarray`]
122 Dictionary keyed by amp names containinging covariances model
123 (Eq. 20 of Astier+19) per mean flux.
124 covariancesSqrtWeights : `dict`, [`str`, `np.ndarray`]
125 Dictionary keyed by amp names containinging sqrt. of covariances
127 aMatrix : `dict`, [`str`, `np.ndarray`]
128 Dictionary keyed by amp names containing the
"a" parameters
from
129 the model
in Eq. 20 of Astier+19.
130 bMatrix : `dict`, [`str`, `np.ndarray`]
131 Dictionary keyed by amp names containing the
"b" parameters
from
132 the model
in Eq. 20 of Astier+19.
133 covariancesModelNoB : `dict`, [`str`, `np.ndarray`]
134 Dictionary keyed by amp names containing covariances model
135 (
with 'b'=0
in Eq. 20 of Astier+19)
137 aMatrixNoB : `dict`, [`str`, `np.ndarray`]
138 Dictionary keyed by amp names containing the
"a" parameters
from the
139 model
in Eq. 20 of Astier+19
141 finalVars : `dict`, [`str`, `np.ndarray`]
142 Dictionary keyed by amp names containing the masked variance of the
143 difference image of each flat
144 pair. If needed, each array will be right-padded
with
145 np.nan to match the length of rawExpTimes.
146 finalModelVars : `dict`, [`str`, `np.ndarray`]
147 Dictionary keyed by amp names containing the masked modeled
148 variance of the difference image of each flat pair. If needed, each
149 array will be right-padded
with np.nan to match the length of
151 finalMeans : `dict`, [`str`, `np.ndarray`]
152 Dictionary keyed by amp names containing the masked average of the
153 means of the exposures
in each flat pair. If needed, each array
154 will be right-padded
with np.nan to match the length of
156 photoCharges : `dict`, [`str`, `np.ndarray`]
157 Dictionary keyed by amp names containing the integrated photocharge
158 for linearity calibration.
160 Version 1.1 adds the `ptcTurnoff` attribute.
164 _SCHEMA =
'Gen3 Photon Transfer Curve'
167 def __init__(self, ampNames=[], ptcFitType=None, covMatrixSide=1, **kwargs):
175 self.
expIdMask = {ampName: np.array([], dtype=bool)
for ampName
in ampNames}
176 self.
rawExpTimes = {ampName: np.array([])
for ampName
in ampNames}
177 self.
rawMeans = {ampName: np.array([])
for ampName
in ampNames}
178 self.
rawVars = {ampName: np.array([])
for ampName
in ampNames}
181 self.
gain = {ampName: np.nan
for ampName
in ampNames}
182 self.
gainErr = {ampName: np.nan
for ampName
in ampNames}
183 self.
noise = {ampName: np.nan
for ampName
in ampNames}
184 self.
noiseErr = {ampName: np.nan
for ampName
in ampNames}
186 self.
histVars = {ampName: np.array([])
for ampName
in ampNames}
188 self.
kspValues = {ampName: np.array([])
for ampName
in ampNames}
190 self.
ptcFitPars = {ampName: np.array([])
for ampName
in ampNames}
195 self.
covariances = {ampName: np.array([])
for ampName
in ampNames}
198 self.
aMatrix = {ampName: np.array([])
for ampName
in ampNames}
199 self.
bMatrix = {ampName: np.array([])
for ampName
in ampNames}
201 self.
aMatrixNoB = {ampName: np.array([])
for ampName
in ampNames}
203 self.
finalVars = {ampName: np.array([])
for ampName
in ampNames}
205 self.
finalMeans = {ampName: np.array([])
for ampName
in ampNames}
209 'rawMeans',
'rawVars',
'gain',
'gainErr',
'noise',
'noiseErr',
210 'ptcFitPars',
'ptcFitParsError',
'ptcFitChiSq',
'ptcTurnoff',
211 'aMatrixNoB',
'covariances',
'covariancesModel',
212 'covariancesSqrtWeights',
'covariancesModelNoB',
213 'aMatrix',
'bMatrix',
'finalVars',
'finalModelVars',
'finalMeans',
214 'photoCharges',
'histVars',
'histChi2Dofs',
'kspValues'])
221 inputExpIdPair=(-1, -1),
236 Set the amp values for a partial PTC Dataset (
from cpExtractPtcTask).
241 Name of the amp to set the values.
242 inputExpIdPair : `tuple` [`int`]
243 Exposure IDs of input pair.
244 rawExpTime : `float`, optional
245 Exposure time
for this exposure pair.
246 rawMean : `float`, optional
247 Average of the means of the exposures
in this pair.
248 rawVar : `float`, optional
249 Variance of the difference of the exposures
in this pair.
250 photoCharge : `float`, optional
251 Integrated photocharge
for flat pair
for linearity calibration.
252 expIdMask : `bool`, optional
253 Flag setting
if this exposure pair should be used (
True)
255 covariance : `np.ndarray`
or None, optional
256 Measured covariance
for this exposure pair.
257 covSqrtWeights : `np.ndarray`
or None, optional
258 Measured sqrt of covariance weights
in this exposure pair.
259 gain : `float`, optional
260 Estimated gain
for this exposure pair.
261 noise : `float`, optional
262 Estimated read noise
for this exposure pair.
263 histVar : `float`, optional
264 Variance estimated
from fitting a histogram
with a Gaussian model.
265 histChi2Dof : `float`, optional
266 Chi-squared per degree of freedom
from Gaussian histogram fit.
267 kspValue : `float`, optional
268 KS test p-value
from the Gaussian histogram fit.
271 if covariance
is None:
272 covariance = nanMatrix
273 if covSqrtWeights
is None:
274 covSqrtWeights = nanMatrix
278 self.
rawMeans[ampName] = np.array([rawMean])
279 self.
rawVars[ampName] = np.array([rawVar])
281 self.
expIdMask[ampName] = np.array([expIdMask])
284 self.
gain[ampName] = gain
285 self.
noise[ampName] = noise
286 self.
histVars[ampName] = np.array([histVar])
288 self.
kspValues[ampName] = np.array([kspValue])
292 self.
aMatrix[ampName] = nanMatrix
293 self.
bMatrix[ampName] = nanMatrix
297 """Update calibration metadata.
298 This calls the base class's method after ensuring the required
299 calibration keywords will be saved.
303 setDate : `bool`, optional
304 Update the CALIBDATE fields in the metadata to the current
305 time. Defaults to
False.
307 Other keyword parameters to set
in the metadata.
313 """Construct a calibration from a dictionary of properties.
314 Must be implemented by the specific calibration subclasses.
319 Dictionary of properties.
324 Constructed calibration.
329 Raised if the supplied dictionary
is for a different
333 if calib._OBSTYPE != dictionary[
'metadata'][
'OBSTYPE']:
334 raise RuntimeError(f
"Incorrect Photon Transfer Curve dataset supplied. "
335 f
"Expected {calib._OBSTYPE}, found {dictionary['metadata']['OBSTYPE']}")
336 calib.setMetadata(dictionary[
'metadata'])
337 calib.ptcFitType = dictionary[
'ptcFitType']
338 calib.covMatrixSide = dictionary[
'covMatrixSide']
339 calib.badAmps = np.array(dictionary[
'badAmps'],
'str').tolist()
343 covMatrixSide = calib.covMatrixSide
345 covDimensionsProduct = len(np.array(list(dictionary[
'covariances'].values())[0]).ravel())
346 nSignalPoints = int(covDimensionsProduct/(covMatrixSide*covMatrixSide))
348 for ampName
in dictionary[
'ampNames']:
349 calib.ampNames.append(ampName)
350 calib.inputExpIdPairs[ampName] = dictionary[
'inputExpIdPairs'][ampName]
351 calib.expIdMask[ampName] = np.array(dictionary[
'expIdMask'][ampName])
352 calib.rawExpTimes[ampName] = np.array(dictionary[
'rawExpTimes'][ampName], dtype=np.float64)
353 calib.rawMeans[ampName] = np.array(dictionary[
'rawMeans'][ampName], dtype=np.float64)
354 calib.rawVars[ampName] = np.array(dictionary[
'rawVars'][ampName], dtype=np.float64)
355 calib.gain[ampName] = float(dictionary[
'gain'][ampName])
356 calib.gainErr[ampName] = float(dictionary[
'gainErr'][ampName])
357 calib.noise[ampName] = float(dictionary[
'noise'][ampName])
358 calib.noiseErr[ampName] = float(dictionary[
'noiseErr'][ampName])
359 calib.histVars[ampName] = np.array(dictionary[
'histVars'][ampName], dtype=np.float64)
360 calib.histChi2Dofs[ampName] = np.array(dictionary[
'histChi2Dofs'][ampName], dtype=np.float64)
361 calib.kspValues[ampName] = np.array(dictionary[
'kspValues'][ampName], dtype=np.float64)
362 calib.ptcFitPars[ampName] = np.array(dictionary[
'ptcFitPars'][ampName], dtype=np.float64)
363 calib.ptcFitParsError[ampName] = np.array(dictionary[
'ptcFitParsError'][ampName],
365 calib.ptcFitChiSq[ampName] = float(dictionary[
'ptcFitChiSq'][ampName])
366 calib.ptcTurnoff[ampName] = float(dictionary[
'ptcTurnoff'][ampName])
367 if nSignalPoints > 0:
369 calib.covariances[ampName] = np.array(dictionary[
'covariances'][ampName],
370 dtype=np.float64).reshape(
371 (nSignalPoints, covMatrixSide, covMatrixSide))
372 calib.covariancesModel[ampName] = np.array(
373 dictionary[
'covariancesModel'][ampName],
374 dtype=np.float64).reshape(
375 (nSignalPoints, covMatrixSide, covMatrixSide))
376 calib.covariancesSqrtWeights[ampName] = np.array(
377 dictionary[
'covariancesSqrtWeights'][ampName],
378 dtype=np.float64).reshape(
379 (nSignalPoints, covMatrixSide, covMatrixSide))
380 calib.aMatrix[ampName] = np.array(dictionary[
'aMatrix'][ampName],
381 dtype=np.float64).reshape(
382 (covMatrixSide, covMatrixSide))
383 calib.bMatrix[ampName] = np.array(dictionary[
'bMatrix'][ampName],
384 dtype=np.float64).reshape(
385 (covMatrixSide, covMatrixSide))
386 calib.covariancesModelNoB[ampName] = np.array(
387 dictionary[
'covariancesModelNoB'][ampName], dtype=np.float64).reshape(
388 (nSignalPoints, covMatrixSide, covMatrixSide))
389 calib.aMatrixNoB[ampName] = np.array(
390 dictionary[
'aMatrixNoB'][ampName],
391 dtype=np.float64).reshape((covMatrixSide, covMatrixSide))
394 calib.covariances[ampName] = np.array([], dtype=np.float64)
395 calib.covariancesModel[ampName] = np.array([], dtype=np.float64)
396 calib.covariancesSqrtWeights[ampName] = np.array([], dtype=np.float64)
397 calib.aMatrix[ampName] = np.array([], dtype=np.float64)
398 calib.bMatrix[ampName] = np.array([], dtype=np.float64)
399 calib.covariancesModelNoB[ampName] = np.array([], dtype=np.float64)
400 calib.aMatrixNoB[ampName] = np.array([], dtype=np.float64)
402 calib.finalVars[ampName] = np.array(dictionary[
'finalVars'][ampName], dtype=np.float64)
403 calib.finalModelVars[ampName] = np.array(dictionary[
'finalModelVars'][ampName], dtype=np.float64)
404 calib.finalMeans[ampName] = np.array(dictionary[
'finalMeans'][ampName], dtype=np.float64)
405 calib.photoCharges[ampName] = np.array(dictionary[
'photoCharges'][ampName], dtype=np.float64)
407 calib.updateMetadata()
411 """Return a dictionary containing the calibration properties.
412 The dictionary should be able to be round-tripped through
418 Dictionary of properties.
424 outDict['metadata'] = metadata
426 def _dictOfArraysToDictOfLists(dictOfArrays):
428 for key, value
in dictOfArrays.items():
429 dictOfLists[key] = value.ravel().tolist()
436 outDict[
'badAmps'] = self.
badAmps
438 outDict[
'expIdMask'] = _dictOfArraysToDictOfLists(self.
expIdMask)
439 outDict[
'rawExpTimes'] = _dictOfArraysToDictOfLists(self.
rawExpTimes)
440 outDict[
'rawMeans'] = _dictOfArraysToDictOfLists(self.
rawMeans)
441 outDict[
'rawVars'] = _dictOfArraysToDictOfLists(self.
rawVars)
442 outDict[
'gain'] = self.
gain
443 outDict[
'gainErr'] = self.
gainErr
444 outDict[
'noise'] = self.
noise
449 outDict[
'ptcFitPars'] = _dictOfArraysToDictOfLists(self.
ptcFitPars)
450 outDict[
'ptcFitParsError'] = _dictOfArraysToDictOfLists(self.
ptcFitParsError)
453 outDict[
'covariances'] = _dictOfArraysToDictOfLists(self.
covariances)
454 outDict[
'covariancesModel'] = _dictOfArraysToDictOfLists(self.
covariancesModel)
456 outDict[
'aMatrix'] = _dictOfArraysToDictOfLists(self.
aMatrix)
457 outDict[
'bMatrix'] = _dictOfArraysToDictOfLists(self.
bMatrix)
459 outDict[
'aMatrixNoB'] = _dictOfArraysToDictOfLists(self.
aMatrixNoB)
460 outDict[
'finalVars'] = _dictOfArraysToDictOfLists(self.
finalVars)
461 outDict[
'finalModelVars'] = _dictOfArraysToDictOfLists(self.
finalModelVars)
462 outDict[
'finalMeans'] = _dictOfArraysToDictOfLists(self.
finalMeans)
463 outDict[
'photoCharges'] = _dictOfArraysToDictOfLists(self.
photoCharges)
469 """Construct calibration from a list of tables.
470 This method uses the `fromDict` method to create the
471 calibration, after constructing an appropriate dictionary from
476 tableList : `list` [`lsst.afw.table.Table`]
477 List of tables to use to construct the datasetPtc.
482 The calibration defined
in the tables.
484 ptcTable = tableList[0]
486 metadata = ptcTable.meta
488 inDict['metadata'] = metadata
489 inDict[
'ampNames'] = []
490 inDict[
'ptcFitType'] = []
491 inDict[
'covMatrixSide'] = []
492 inDict[
'inputExpIdPairs'] = dict()
493 inDict[
'expIdMask'] = dict()
494 inDict[
'rawExpTimes'] = dict()
495 inDict[
'rawMeans'] = dict()
496 inDict[
'rawVars'] = dict()
497 inDict[
'gain'] = dict()
498 inDict[
'gainErr'] = dict()
499 inDict[
'noise'] = dict()
500 inDict[
'noiseErr'] = dict()
501 inDict[
'histVars'] = dict()
502 inDict[
'histChi2Dofs'] = dict()
503 inDict[
'kspValues'] = dict()
504 inDict[
'ptcFitPars'] = dict()
505 inDict[
'ptcFitParsError'] = dict()
506 inDict[
'ptcFitChiSq'] = dict()
507 inDict[
'ptcTurnoff'] = dict()
508 inDict[
'covariances'] = dict()
509 inDict[
'covariancesModel'] = dict()
510 inDict[
'covariancesSqrtWeights'] = dict()
511 inDict[
'aMatrix'] = dict()
512 inDict[
'bMatrix'] = dict()
513 inDict[
'covariancesModelNoB'] = dict()
514 inDict[
'aMatrixNoB'] = dict()
515 inDict[
'finalVars'] = dict()
516 inDict[
'finalModelVars'] = dict()
517 inDict[
'finalMeans'] = dict()
518 inDict[
'badAmps'] = []
519 inDict[
'photoCharges'] = dict()
521 calibVersion = metadata[
'PTC_VERSION']
522 if calibVersion == 1.0:
523 cls().log.warning(f
"Previous version found for PTC dataset: {calibVersion}. "
524 f
"Setting 'ptcTurnoff' in all amps to last value in 'finalMeans'.")
525 for record
in ptcTable:
526 ampName = record[
'AMPLIFIER_NAME']
528 inDict[
'ptcFitType'] = record[
'PTC_FIT_TYPE']
529 inDict[
'covMatrixSide'] = record[
'COV_MATRIX_SIDE']
530 inDict[
'ampNames'].append(ampName)
531 inDict[
'inputExpIdPairs'][ampName] = record[
'INPUT_EXP_ID_PAIRS'].tolist()
532 inDict[
'expIdMask'][ampName] = record[
'EXP_ID_MASK']
533 inDict[
'rawExpTimes'][ampName] = record[
'RAW_EXP_TIMES']
534 inDict[
'rawMeans'][ampName] = record[
'RAW_MEANS']
535 inDict[
'rawVars'][ampName] = record[
'RAW_VARS']
536 inDict[
'gain'][ampName] = record[
'GAIN']
537 inDict[
'gainErr'][ampName] = record[
'GAIN_ERR']
538 inDict[
'noise'][ampName] = record[
'NOISE']
539 inDict[
'noiseErr'][ampName] = record[
'NOISE_ERR']
540 inDict[
'ptcFitPars'][ampName] = record[
'PTC_FIT_PARS']
541 inDict[
'ptcFitParsError'][ampName] = record[
'PTC_FIT_PARS_ERROR']
542 inDict[
'ptcFitChiSq'][ampName] = record[
'PTC_FIT_CHI_SQ']
543 inDict[
'covariances'][ampName] = record[
'COVARIANCES']
544 inDict[
'covariancesModel'][ampName] = record[
'COVARIANCES_MODEL']
545 inDict[
'covariancesSqrtWeights'][ampName] = record[
'COVARIANCES_SQRT_WEIGHTS']
546 inDict[
'aMatrix'][ampName] = record[
'A_MATRIX']
547 inDict[
'bMatrix'][ampName] = record[
'B_MATRIX']
548 inDict[
'covariancesModelNoB'][ampName] = record[
'COVARIANCES_MODEL_NO_B']
549 inDict[
'aMatrixNoB'][ampName] = record[
'A_MATRIX_NO_B']
550 inDict[
'finalVars'][ampName] = record[
'FINAL_VARS']
551 inDict[
'finalModelVars'][ampName] = record[
'FINAL_MODEL_VARS']
552 inDict[
'finalMeans'][ampName] = record[
'FINAL_MEANS']
553 inDict[
'badAmps'] = record[
'BAD_AMPS'].tolist()
554 inDict[
'photoCharges'][ampName] = record[
'PHOTO_CHARGE']
555 if calibVersion == 1.0:
556 mask = record[
'FINAL_MEANS'].mask
557 array = record[
'FINAL_MEANS'][~mask]
559 inDict[
'ptcTurnoff'][ampName] = record[
'FINAL_MEANS'][~mask][-1]
561 inDict[
'ptcTurnoff'][ampName] = np.nan
563 inDict[
'ptcTurnoff'][ampName] = record[
'PTC_TURNOFF']
564 if calibVersion == 1.1:
565 inDict[
'histVars'][ampName] = np.array([np.nan])
566 inDict[
'histChi2Dofs'][ampName] = np.array([np.nan])
567 inDict[
'kspValues'][ampName] = np.array([0.0])
569 inDict[
'histVars'][ampName] = record[
'HIST_VARS']
570 inDict[
'histChi2Dofs'][ampName] = record[
'HIST_CHI2_DOFS']
571 inDict[
'kspValues'][ampName] = record[
'KS_PVALUES']
576 """Construct a list of tables containing the information in this
579 The list of tables should create an identical calibration
580 after being passed to this class's fromTable method.
584 tableList : `list` [`astropy.table.Table`]
585 List of tables containing the linearity calibration
591 badAmps = np.array(self.badAmps) if len(self.
badAmps)
else np.array([], dtype=
"U3")
596 'AMPLIFIER_NAME': ampName,
602 'RAW_MEANS': self.
rawMeans[ampName],
603 'RAW_VARS': self.
rawVars[ampName],
604 'GAIN': self.
gain[ampName],
605 'GAIN_ERR': self.
gainErr[ampName],
606 'NOISE': self.
noise[ampName],
607 'NOISE_ERR': self.
noiseErr[ampName],
608 'HIST_VARS': self.
histVars[ampName],
611 'PTC_FIT_PARS': np.array(self.
ptcFitPars[ampName]),
615 'A_MATRIX': self.
aMatrix[ampName].ravel(),
616 'B_MATRIX': self.
bMatrix[ampName].ravel(),
617 'A_MATRIX_NO_B': self.
aMatrixNoB[ampName].ravel(),
628 catalogList.append(ampDict)
630 catalog = Table(catalogList)
633 outMeta = {k: v
for k, v
in inMeta.items()
if v
is not None}
634 outMeta.update({k:
"" for k, v
in inMeta.items()
if v
is None})
635 catalog.meta = outMeta
636 tableList.append(catalog)
641 """Read metadata parameters from a detector.
645 detector : `lsst.afw.cameraGeom.detector`
646 Input detector with parameters to use.
651 The calibration constructed
from the detector.
657 """Get the exposures used, i.e. not discarded, for a given amp.
658 If no mask has been created yet, all exposures are returned.
666 expIdsUsed : `list` [`tuple`]
667 List of pairs of exposure ids used in PTC.
679 expIdsUsed = [(exp1, exp2)
for ((exp1, exp2), m)
in zip(pairs, mask)
if m]
681 warnings.warn(
"The PTC file was written incorrectly; you should rerun the "
682 "PTC solve task if possible.", RuntimeWarning)
684 for pairList, m
in zip(pairs, mask):
686 expIdsUsed.append(pairList[0])
691 """Get the good amps from this PTC."""
695 """Get the good points used for a given amp in the PTC.
703 goodPoints : `np.ndarray`
704 Boolean array of good points used in PTC.
def requiredAttributes(self, value)
def updateMetadata(self, camera=None, detector=None, filterName=None, setCalibId=False, setCalibInfo=False, setDate=False, **kwargs)
def requiredAttributes(self)
def __init__(self, ampNames=[], ptcFitType=None, covMatrixSide=1, **kwargs)
def setAmpValuesPartialDataset(self, ampName, inputExpIdPair=(-1, -1), rawExpTime=np.nan, rawMean=np.nan, rawVar=np.nan, photoCharge=np.nan, expIdMask=False, covariance=None, covSqrtWeights=None, gain=np.nan, noise=np.nan, histVar=np.nan, histChi2Dof=np.nan, kspValue=0.0)
def getExpIdsUsed(self, ampName)
def fromDict(cls, dictionary)
def fromDetector(self, detector)
def updateMetadata(self, **kwargs)
def fromTable(cls, tableList)
def getGoodPoints(self, ampName)