Skip to content

Commit

Permalink
Propagate flat pair read noises to ptcDataset
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex-Broughton committed Feb 2, 2024
1 parent 496e81b commit e0a461a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
18 changes: 16 additions & 2 deletions python/lsst/ip/isr/ptcDataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ class PhotonTransferCurveDataset(IsrCalib):
gainErr : `dict`, [`str`, `float`]
Dictionary keyed by amp names containing the errors on the
fitted gains.
noiseList : `dict`, [`str`, `np.ndarray`]
Dictionary keyed by amp names containing the mean read noise from
each flat pair (as measured from overscan).
noise : `dict`, [`str`, `float`]
Dictionary keyed by amp names containing the fitted noise.
noiseErr : `dict`, [`str`, `float`]
Expand Down Expand Up @@ -181,11 +184,12 @@ class PhotonTransferCurveDataset(IsrCalib):
Version 1.4 adds the `auxValues` attribute.
Version 1.5 adds the `covMatrixSideFullCovFit` attribute.
Version 1.6 adds the `rowMeanVariance` attribute.
Version 1.7 adds the `noiseList` attribute.
"""

_OBSTYPE = 'PTC'
_SCHEMA = 'Gen3 Photon Transfer Curve'
_VERSION = 1.6
_VERSION = 1.7

def __init__(self, ampNames=[], ptcFitType=None, covMatrixSide=1,
covMatrixSideFullCovFit=None, **kwargs):
Expand All @@ -209,6 +213,7 @@ def __init__(self, ampNames=[], ptcFitType=None, covMatrixSide=1,

self.gain = {ampName: np.nan for ampName in ampNames}
self.gainErr = {ampName: np.nan for ampName in ampNames}
self.noiseList = {ampName: np.array([]) for ampName in ampNames}
self.noise = {ampName: np.nan for ampName in ampNames}
self.noiseErr = {ampName: np.nan for ampName in ampNames}

Expand Down Expand Up @@ -241,7 +246,7 @@ def __init__(self, ampNames=[], ptcFitType=None, covMatrixSide=1,
super().__init__(**kwargs)
self.requiredAttributes.update(['badAmps', 'inputExpIdPairs', 'expIdMask', 'rawExpTimes',
'rawMeans', 'rawVars', 'rowMeanVariance', 'gain',
'gainErr', 'noise', 'noiseErr',
'gainErr', 'noise', 'noiseErr', 'noiseList',
'ptcFitPars', 'ptcFitParsError', 'ptcFitChiSq', 'ptcTurnoff',
'aMatrixNoB', 'covariances', 'covariancesModel',
'covariancesSqrtWeights', 'covariancesModelNoB',
Expand Down Expand Up @@ -418,6 +423,7 @@ def fromDict(cls, dictionary):
dtype=np.float64)
calib.gain[ampName] = float(dictionary['gain'][ampName])
calib.gainErr[ampName] = float(dictionary['gainErr'][ampName])
calib.noiseList[ampName] = np.array(dictionary['noiseList'][ampName], dtype=np.float64)
calib.noise[ampName] = float(dictionary['noise'][ampName])
calib.noiseErr[ampName] = float(dictionary['noiseErr'][ampName])
calib.histVars[ampName] = np.array(dictionary['histVars'][ampName], dtype=np.float64)
Expand Down Expand Up @@ -518,6 +524,7 @@ def _dictOfArraysToDictOfLists(dictOfArrays):
outDict['rowMeanVariance'] = _dictOfArraysToDictOfLists(self.rowMeanVariance)
outDict['gain'] = self.gain
outDict['gainErr'] = self.gainErr
outDict['noiseList'] = _dictOfArraysToDictOfLists(self.noiseList)
outDict['noise'] = self.noise
outDict['noiseErr'] = self.noiseErr
outDict['histVars'] = self.histVars
Expand Down Expand Up @@ -578,6 +585,7 @@ def fromTable(cls, tableList):
inDict['rowMeanVariance'] = dict()
inDict['gain'] = dict()
inDict['gainErr'] = dict()
inDict['noiseList'] = dict()
inDict['noise'] = dict()
inDict['noiseErr'] = dict()
inDict['histVars'] = dict()
Expand Down Expand Up @@ -619,6 +627,7 @@ def fromTable(cls, tableList):
inDict['rawVars'][ampName] = record['RAW_VARS']
inDict['gain'][ampName] = record['GAIN']
inDict['gainErr'][ampName] = record['GAIN_ERR']
inDict['noiseList'][ampName] = record['NOISE_LIST']
inDict['noise'][ampName] = record['NOISE']
inDict['noiseErr'][ampName] = record['NOISE_ERR']
inDict['ptcFitPars'][ampName] = record['PTC_FIT_PARS']
Expand Down Expand Up @@ -669,6 +678,10 @@ def fromTable(cls, tableList):
inDict['rowMeanVariance'][ampName] = np.full((len(inDict['expIdMask'][ampName]),), np.nan)
else:
inDict['rowMeanVariance'][ampName] = record['ROW_MEAN_VARIANCE']
if calibVersion < 1.7:
inDict['noiseList'][ampName] = np.array([np.nan])
else:
inDict['noiseList'][ampName] = record['NOISE_LIST']

inDict['auxValues'] = {}
record = ptcTable[0]
Expand Down Expand Up @@ -712,6 +725,7 @@ def toTable(self):
'ROW_MEAN_VARIANCE': self.rowMeanVariance[ampName],
'GAIN': self.gain[ampName],
'GAIN_ERR': self.gainErr[ampName],
'NOISE_LIST': self.noiseList[ampName],
'NOISE': self.noise[ampName],
'NOISE_ERR': self.noiseErr[ampName],
'HIST_VARS': self.histVars[ampName],
Expand Down
2 changes: 2 additions & 0 deletions tests/test_ptcDataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ def _checkTypes(self, ptcDataset):
self.assertIsInstance(ptcDataset.rawVars[ampName], np.ndarray)
self.assertEqual(ptcDataset.rawVars[ampName].dtype, np.float64)
self.assertEqual(ptcDataset.rowMeanVariance[ampName].dtype, np.float64)
self.assertIsInstance(ptcDataset.noiseList[ampName], np.ndarray)
self.assertEqual(ptcDataset.noiseList[ampName].dtype, np.float64)
self.assertIsInstance(ptcDataset.gain[ampName], float)
self.assertIsInstance(ptcDataset.gainErr[ampName], float)
self.assertIsInstance(ptcDataset.noise[ampName], float)
Expand Down

0 comments on commit e0a461a

Please sign in to comment.