Skip to content

Commit

Permalink
Merge branch 'tickets/DM-30171'
Browse files Browse the repository at this point in the history
  • Loading branch information
plazas committed Aug 5, 2022
2 parents 109e6a0 + e7fd6a4 commit 4117516
Show file tree
Hide file tree
Showing 7 changed files with 859 additions and 25 deletions.
511 changes: 511 additions & 0 deletions examples/cpVerifyPtcV2.ipynb

Large diffs are not rendered by default.

34 changes: 17 additions & 17 deletions pipelines/VerifyDefect.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,29 @@ tasks:
connections.ccdExposure: 'raw'
connections.outputExposure: 'verifyDefectProc'
overscan.fitType: 'MEDIAN_PER_ROW'
doWrite: True
doOverscan: True
doAssembleCcd: True
doBias: True
doVariance: False
doLinearize: False
doCrosstalk: False
doBrighterFatter: False
doDark: False
doStrayLight: False
doFlat: False
doFringe: False
doApplyGains: False
doDefect: True
doSaturationInterpolation: False
doWrite: true
doOverscan: true
doAssembleCcd: true
doBias: true
doVariance: false
doLinearize: false
doCrosstalk: false
doBrighterFatter: false
doDark: false
doStrayLight: false
doFlat: false
doFringe: false
doApplyGains: false
doDefect: true
doSaturationInterpolation: false
growSaturationFootprintSize: 0
verifyMeasureStats:
class: lsst.cp.verify.CpVerifyDefectsTask
config:
connections.inputExp: 'verifyDefectProc'
connections.outputStats: 'verifyDefectDetStats'
doVignette: False
useReadNoise: False
doVignette: false
useReadNoise: false
verifyExposureStats:
class: lsst.cp.verify.CpVerifyExpMergeTask
config:
Expand Down
12 changes: 12 additions & 0 deletions pipelines/VerifyPtc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: cp_verify Photon Transfer Curve calibration verification
tasks:
verifyPtcCalib:
class: lsst.cp.verify.verifyPtc.CpVerifyPtcTask
config:
connections.inputCalib: 'ptc'
connections.outputStats: 'verifyPtcDetStats'
verifyPtc:
class: lsst.cp.verify.CpVerifyCalibMergeTask
config:
connections.inputStats: 'verifyPtcDetStats'
connections.outputStats: 'verifyPtcStats'
1 change: 1 addition & 0 deletions python/lsst/cp/verify/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@
from .verifyDark import *
from .verifyFlat import *
from .verifyCrosstalk import *
from .verifyPtc import *
54 changes: 48 additions & 6 deletions python/lsst/cp/verify/verifyCalib.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import lsst.pipe.base as pipeBase
import lsst.pipe.base.connectionTypes as cT

from lsst.cp.pipe._lookupStaticCalibration import lookupStaticCalibration

__all__ = ['CpVerifyCalibConfig', 'CpVerifyCalibTask']

Expand All @@ -37,6 +38,15 @@ class CpVerifyCalibConnections(pipeBase.PipelineTaskConnections,
isCalibration=True
)

camera = cT.PrerequisiteInput(
name="camera",
doc="Input camera to use for gain lookup.",
storageClass="Camera",
dimensions=("instrument",),
lookupFunction=lookupStaticCalibration,
isCalibration=True,
)

outputStats = cT.Output(
name="calibStats",
doc="Output statistics from cp_verify.",
Expand Down Expand Up @@ -86,14 +96,16 @@ class CpVerifyCalibTask(pipeBase.PipelineTask):
ConfigClass = CpVerifyCalibConfig
_DefaultName = 'cpVerifyCalib'

def run(self, inputCalib):
def run(self, inputCalib, camera=None):
"""Calculate quality statistics and verify they meet the requirements
for a calibration.
Parameters
----------
inputCalib : `lsst.ip.isr.IsrCalib`
The calibration to be measured.
camera : `lsst.afw.cameraGeom.Camera`, optional
Input camera.
Returns
-------
Expand All @@ -111,22 +123,25 @@ def run(self, inputCalib):
DET:
STAT: value
STAT2: value
AMP:
STAT: value
STAT2: value
VERIFY:
TEST: boolean
SUCCESS: boolean
"""
outputStats = {}

outputStats['DET'] = self.detectorStatistics(inputCalib)
outputStats['VERIFY'], outputStats['SUCCESS'] = self.verify(inputCalib, outputStats)
outputStats['AMP'] = self.amplifierStatistics(inputCalib, camera=camera)
outputStats['DET'] = self.detectorStatistics(inputCalib, camera=camera)
outputStats['VERIFY'], outputStats['SUCCESS'] = self.verify(inputCalib, outputStats, camera=camera)

return pipeBase.Struct(
outputStats=outputStats,
)

# Methods that need to be implemented by the calibration-level subclasses.
def detectorStatistics(self, inputCalib):
def detectorStatistics(self, inputCalib, camera=None):
"""Calculate detector level statistics from the calibration.
Parameters
Expand All @@ -138,6 +153,8 @@ def detectorStatistics(self, inputCalib):
-------
outputStatistics : `dict` [`str`, scalar]
A dictionary of the statistics measured and their values.
camera : `lsst.afw.cameraGeom.Camera`, optional
Input camera.
Raises
------
Expand All @@ -147,7 +164,30 @@ def detectorStatistics(self, inputCalib):
"""
raise NotImplementedError("Subclasses must implement detector statistics method.")

def verify(self, inputCalib, statisticsDict):
def amplifierStatistics(self, inputCalib, camera=None):
"""Calculate amplifier level statistics from the calibration.
Parameters
----------
inputCalib : `lsst.ip.isr.IsrCalib`
The calibration to verify.
camera : `lsst.afw.cameraGeom.Camera`, optional
Input camera.
Returns
-------
outputStatistics : `dict` [`str`, scalar]
A dictionary of the statistics measured and their values.
Raises
------
NotImplementedError :
This method must be implemented by the calibration-type
subclass.
"""
raise NotImplementedError("Subclasses must implement amplifier statistics method.")

def verify(self, inputCalib, statisticsDict, camera=None):
"""Verify that the measured calibration meet the verification criteria.
Parameters
Expand All @@ -159,6 +199,8 @@ def verify(self, inputCalib, statisticsDict):
should have keys that are statistic names (`str`) with
values that are some sort of scalar (`int` or `float` are
the mostly likely types).
camera : `lsst.afw.cameraGeom.Camera`, optional
Input camera.
Returns
-------
Expand Down
26 changes: 24 additions & 2 deletions python/lsst/cp/verify/verifyCrosstalk.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,15 @@ class CpVerifyCrosstalkTask(CpVerifyCalibTask):
ConfigClass = CpVerifyCrosstalkConfig
_DefaultName = 'cpVerifyCrosstalk'

def detectorStatistics(self, inputCalib):
def detectorStatistics(self, inputCalib, camera=None):
"""Calculate detector level statistics from the calibration.
Parameters
----------
inputCalib : `lsst.ip.isr.IsrCalib`
The calibration to verify.
camera : `lsst.afw.cameraGeom.Camera`, optional
Input camera.
Returns
-------
Expand All @@ -73,7 +75,25 @@ def detectorStatistics(self, inputCalib):

return outputStatistics

def verify(self, calib, statisticsDict):
def amplifierStatistics(self, inputCalib, camera=None):
"""Calculate amplifier level statistics from the calibration.
Parameters
----------
inputCalib : `lsst.ip.isr.IsrCalib`
The calibration to verify.
camera : `lsst.afw.cameraGeom.Camera`, optional
Input camera.
Returns
-------
outputStatistics : `dict` [`str`, scalar]
A dictionary of the statistics measured and their values.
"""

pass

def verify(self, calib, statisticsDict, camera=None):
"""Verify that the calibration meets the verification criteria.
Parameters
Expand All @@ -85,6 +105,8 @@ def verify(self, calib, statisticsDict):
should have keys that are statistic names (`str`) with
values that are some sort of scalar (`int` or `float` are
the mostly likely types).
camera : `lsst.afw.cameraGeom.Camera`, optional
Input camera.
Returns
-------
Expand Down

0 comments on commit 4117516

Please sign in to comment.