Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DM-45856: Add new calibration pipelines for IsrTaskLSST to _ingredients #266

Merged
merged 17 commits into from
Sep 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion pipelines/_ingredients/cpBfk.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
description: cp_pipe brighter-fatter kernel calibration construction.
tasks:
cpBfkSolve:
# TODO DM-46439: This can be renamed back to cpBfkSolve when repos
# are cleaned up for the previous dimensionality error.
cpBfkSolveX:
class: lsst.cp.pipe.BrighterFatterKernelSolveTask
config:
connections.inputPtc: ptc
Expand Down
52 changes: 52 additions & 0 deletions pipelines/_ingredients/cpBfkLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
description: cp_pipe brighter-fatter kernel calibration construction.
tasks:
cpBfkIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpBfkIsrExp"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doBootstrap = True
config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = False
config.doLinearize = True
# TODO DM-46426: Add cpCtiLSST pipeline so that this can be True.
config.doDeferredCharge = False
config.doDefect = True
cpBfkPtcExtract:
class: lsst.cp.pipe.ptc.PhotonTransferCurveExtractTask
config:
connections.inputExp: "cpBfkIsrExp"
connections.outputCovariances: "cpBfkPtcPartial"
maximumRangeCovariancesAstier: 15
numEdgeSuspect: 20
edgeMaskLevel: "AMP"
useEfdPhotodiodeData: true
auxiliaryHeaderKeys: ["TEMP6"]
cpBfkPtcSolve:
class: lsst.cp.pipe.ptc.PhotonTransferCurveSolveTask
config:
connections.inputCovariances: "cpBfkPtcPartial"
connections.outputPtcDataset: "bfkPtc"
ptcFitType: "FULLCOVARIANCE"
maximumRangeCovariancesAstier: 15
maximumRangeCovariancesAstierFullCovFit: 15
# TODO DM-46439: This can be renamed back to cpBfkSolve when repos
# are cleaned up for the previous dimensionality error.
cpBfkSolveX:
class: lsst.cp.pipe.BrighterFatterKernelSolveTask
config:
useBfkPtc: true
connections.inputPtc: bfkPtc
connections.outputBFK: bfk
contracts:
- cpBfkIsr.doBootstrap == True
- cpBfkPtcExtract.connections.inputExp == cpBfkIsr.connections.outputExposure
- cpBfkPtcSolve.binSize == cpBfkPtcExtract.binSize
- cpBfkPtcSolve.maximumRangeCovariancesAstier == cpBfkPtcExtract.maximumRangeCovariancesAstier
- cpBfkPtcSolve.connections.inputCovariances == cpBfkPtcExtract.connections.outputCovariances
- cpBfkSolveX.connections.inputPtc == cpBfkPtcSolve.connections.outputPtcDataset
29 changes: 29 additions & 0 deletions pipelines/_ingredients/cpBiasBootstrapLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
description: cp_pipe bootstrap bias calibration for LSST isr task
tasks:
cpBiasBootstrapIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpBiasBootstrapIsrExp"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doBootstrap = True
config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = False
cpBiasBootstrapCombine:
class: lsst.cp.pipe.CalibCombineTask
config:
connections.inputExpHandles: "cpBiasBootstrapIsrExp"
connections.outputData: "biasBootstrap"
calibrationType: "bias"
exposureScaling: "Unity"
mask: ["DETECTED", "INTRP"]
contracts:
- cpBiasBootstrapIsr.doBias == False
- cpBiasBootstrapIsr.doBootstrap == True
- cpBiasBootstrapCombine.calibrationType == "bias"
- cpBiasBootstrapCombine.exposureScaling == "Unity"
- cpBiasBootstrapIsr.connections.outputExposure == cpBiasBootstrapCombine.connections.inputExpHandles
60 changes: 60 additions & 0 deletions pipelines/_ingredients/cpBiasLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
description: cp_pipe bias calibration for LSST isr task
tasks:
cpBiasIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpBiasIsrExp"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = True
config.doApplyGains = True
config.doLinearize = True
cpBiasCombine:
class: lsst.cp.pipe.CalibCombineTask
config:
connections.inputExpHandles: "cpBiasIsrExp"
connections.outputData: "bias"
calibrationType: "bias"
exposureScaling: "Unity"
mask: ["DETECTED", "INTRP"]
cpBiasBin8:
class: lsst.pipe.tasks.visualizeVisit.VisualizeBinCalibTask
config:
connections.inputExp: "bias"
connections.outputExp: "biasBin8"
binning: 8
cpBiasBin64:
class: lsst.pipe.tasks.visualizeVisit.VisualizeBinCalibTask
config:
connections.inputExp: "bias"
connections.outputExp: "biasBin64"
binning: 64
cpBiasMosaic8:
class: lsst.pipe.tasks.visualizeVisit.VisualizeMosaicCalibTask
config:
connections.inputExps: "biasBin8"
connections.outputData: "biasMosaic8"
binning: 8
cpBiasMosaic64:
class: lsst.pipe.tasks.visualizeVisit.VisualizeMosaicCalibTask
config:
connections.inputExps: "biasBin64"
connections.outputData: "biasMosaic64"
binning: 64
contracts:
- cpBiasIsr.doBias == False
- cpBiasIsr.doBootstrap == False
- cpBiasCombine.calibrationType == "bias"
- cpBiasCombine.exposureScaling == "Unity"
- cpBiasBin8.binning == cpBiasMosaic8.binning
- cpBiasBin64.binning == cpBiasMosaic64.binning
- cpBiasCombine.connections.inputExpHandles == cpBiasIsr.connections.outputExposure
- cpBiasBin8.connections.inputExp == cpBiasCombine.connections.outputData
- cpBiasBin64.connections.inputExp == cpBiasCombine.connections.outputData
- cpBiasMosaic8.connections.inputExps == cpBiasBin8.connections.outputExp
- cpBiasMosaic64.connections.inputExps == cpBiasBin64.connections.outputExp
31 changes: 31 additions & 0 deletions pipelines/_ingredients/cpDarkBootstrapLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
description: cp_pipe bootstrap dark calibration for LSST isr task
tasks:
cpDarkBootstrapIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpDarkBootstrapIsrExp"
connections.bias: "biasBootstrap"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doBootstrap = True
config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = False
doBias = True
cpDarkBootstrapCombine:
class: lsst.cp.pipe.CalibCombineTask
config:
connections.inputExpHandles: "cpDarkBootstrapIsrExp"
connections.outputData: "darkBootstrap"
calibrationType: "dark"
exposureScaling: "DarkTime"
mask: ["DETECTED", "INTRP"]
contracts:
- cpDarkBootstrapIsr.doDark == False
- cpDarkBootstrapIsr.doBootstrap == True
- cpDarkBootstrapCombine.calibrationType == "dark"
- cpDarkBootstrapCombine.exposureScaling == "DarkTime"
- cpDarkBootstrapIsr.connections.outputExposure == cpDarkBootstrapCombine.connections.inputExpHandles
69 changes: 69 additions & 0 deletions pipelines/_ingredients/cpDarkLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
description: cp_pipe dark calibration for LSST isr task
tasks:
cpDarkIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpDarkIsrExp"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = True
config.doApplyGains = True
config.doLinearize = True
config.doBias = True
# Defects are flagged but not interpolated for CR detection.
config.doDefect = True
cpDark:
class: lsst.cp.pipe.CpDarkTask
config:
connections.inputExp: 'cpDarkIsrExp'
connections.outputExp: 'cpDarkRemoveCRIsrExp'
cpDarkCombine:
class: lsst.cp.pipe.CalibCombineTask
config:
connections.inputExpHandles: "cpDarkRemoveCRIsrExp"
connections.outputData: "dark"
calibrationType: "dark"
exposureScaling: "DarkTime"
python: config.mask.append("CR")
cpDarkBin8:
class: lsst.pipe.tasks.visualizeVisit.VisualizeBinCalibTask
config:
connections.inputExp: "dark"
connections.outputExp: "darkBin8"
binning: 8
cpDarkBin64:
class: lsst.pipe.tasks.visualizeVisit.VisualizeBinCalibTask
config:
connections.inputExp: "dark"
connections.outputExp: "darkBin64"
binning: 64
cpDarkMosaic8:
class: lsst.pipe.tasks.visualizeVisit.VisualizeMosaicCalibTask
config:
connections.inputExps: "darkBin8"
connections.outputData: "darkMosaic8"
binning: 8
cpDarkMosaic64:
class: lsst.pipe.tasks.visualizeVisit.VisualizeMosaicCalibTask
config:
connections.inputExps: "darkBin64"
connections.outputData: "darkMosaic64"
binning: 64
contracts:
- cpDarkIsr.doDark == False
- cpDarkIsr.doBootstrap == False
- cpDarkCombine.calibrationType == "dark"
- cpDarkCombine.exposureScaling == "DarkTime"
- cpDarkBin8.binning == cpDarkMosaic8.binning
- cpDarkBin64.binning == cpDarkMosaic64.binning
- cpDark.connections.inputExp == cpDarkIsr.connections.outputExposure
- cpDarkCombine.connections.inputExpHandles == cpDark.connections.outputExp
- cpDarkBin8.connections.inputExp == cpDarkCombine.connections.outputData
- cpDarkBin64.connections.inputExp == cpDarkCombine.connections.outputData
- cpDarkMosaic8.connections.inputExps == cpDarkBin8.connections.outputExp
- cpDarkMosaic64.connections.inputExps == cpDarkBin64.connections.outputExp
29 changes: 29 additions & 0 deletions pipelines/_ingredients/cpDefectsLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
description: cp_pipe defect calibration construction from combined images for LSST isr.
tasks:
cpMeasureBiasDefects:
class: lsst.cp.pipe.MeasureDefectsCombinedTask
config:
connections.inputExp: "biasBootstrap"
connections.outputDefects: "cpDefectsFromBiasBootstrap"
thresholdType: "VALUE"
cpMeasureDarkDefects:
class: lsst.cp.pipe.MeasureDefectsCombinedTask
config:
connections.inputExp: "darkBootstrap"
connections.outputDefects: "cpDefectsFromDarkBootstrap"
cpMeasureFlatDefects:
class: lsst.cp.pipe.MeasureDefectsCombinedWithFilterTask
config:
connections.inputExp: "flatBootstrap"
connections.outputDefects: "cpDefectsFromFlatBootstrap"
cpMergeDefects:
class: lsst.cp.pipe.MergeDefectsCombinedTask
config:
combinationMode: OR
connections.inputBiasDefects: "cpDefectsFromBiasBootstrap"
connections.inputDarkDefects: "cpDefectsFromDarkBootstrap"
connections.inputFlatDefects: "cpDefectsFromFlatBootstrap"
contracts:
- cpMergeDefects.connections.inputBiasDefects == cpMeasureBiasDefects.connections.outputDefects
- cpMergeDefects.connections.inputDarkDefects == cpMeasureDarkDefects.connections.outputDefects
- cpMergeDefects.connections.inputFlatDefects == cpMeasureFlatDefects.connections.outputDefects
32 changes: 32 additions & 0 deletions pipelines/_ingredients/cpFilterScanLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
description: cp_pipe pipeline to measure filter scans.
tasks:
cpFilterScanIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpFilterScanIsrExp"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = True
config.doApplyGains = True
config.doLinearize = True
# TODO DM-46426: Add cpCtiLSST pipeline so that this can be True.
config.doDeferredCharge = False
config.doBias = True
config.doDark = True
config.doBrighterFatter = True
# TODO DM-46356: Check if this should be True or False.
config.doFlat = False
config.doInterpolate = True
cpFilterScanMerge:
class: lsst.cp.pipe.CpFilterScanTask
config:
connections.inputExpHandles: "cpFilterScanIsrExp"
# This is still an intermediate product, although it"s the end of this pipeline.
connections.outputData: "cpFilterScan"
contracts:
- cpFilterScanMerge.connections.inputExpHandles == cpFilterScanIsr.connections.outputExposure
47 changes: 47 additions & 0 deletions pipelines/_ingredients/cpFlatBootstrapLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
description: cp_pipe bootstrap flat calibration for LSST isr task
tasks:
cpFlatBootstrapIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpFlatBootstrapIsrExp"
connections.bias: "biasBootstrap"
connections.dark: "darkBootstrap"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doBootstrap = True
config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = False
config.doBias = True
config.doDark = True
cpFlatBootstrapMeasure:
class: lsst.cp.pipe.CpFlatMeasureTask
config:
connections.inputExp: "cpFlatBootstrapIsrExp"
connections.outputStats: "cpFlatBootstrapStatistics"
cpFlatBootstrapNormalize:
class: lsst.cp.pipe.CpFlatNormalizationTask
config:
connections.inputMDs: "cpFlatBootstrapStatistics"
connections.outputScales: "cpFlatBootstrapNormalizeScales"
cpFlatBootstrapCombine:
class: lsst.cp.pipe.CalibCombineByFilterTask
config:
connections.inputExpHandles: "cpFlatBootstrapIsrExp"
connections.inputScales: "cpFlatBootstrapNormalizeScales"
connections.outputData: "flatBootstrap"
calibrationType: "flat"
exposureScaling: InputList
scalingLevel: AMP
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume this is AMP, where cpFlatLSST.yaml uses DETECTOR is due to this bootstrap version not having gains to normalize the amplifiers, so it's using the best guess from the normalization code? If so, a comment here might be useful so that it's clear that this difference is intentional.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand the normalization conditions so this was at best accidental. This is used to find defects ... so I think AMP is appropriate? Unless you say it should be DETECTOR? Which should it be to find dark defects? None maybe.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think AMP is more correct here, but in thinking about the details of this, I don't think it matters. The defect code measures a clipped mean per amp to ensure each amp is on the same scale before doing the defect finding, so changing the flat scaling just changes the size of the offset subtracted by that clipped mean.

contracts:
- cpFlatBootstrapIsr.doFlat == False
- cpFlatBootstrapIsr.doBootstrap == True
- cpFlatBootstrapMeasure.connections.inputExp == cpFlatBootstrapIsr.connections.outputExposure
- cpFlatBootstrapNormalize.connections.inputMDs == cpFlatBootstrapMeasure.connections.outputStats
- cpFlatBootstrapCombine.calibrationType == "flat"
- cpFlatBootstrapCombine.exposureScaling == "InputList"
- cpFlatBootstrapCombine.connections.inputExpHandles == cpFlatBootstrapIsr.connections.outputExposure
- cpFlatBootstrapCombine.connections.inputScales == cpFlatBootstrapNormalize.connections.outputScales
32 changes: 32 additions & 0 deletions pipelines/_ingredients/cpFlatBootstrapSingleChipLSST.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
description: cp_pipe bootstrap flat calibration for LSST isr task
tasks:
cpFlatBootstrapIsr:
class: lsst.ip.isr.IsrTaskLSST
config:
connections.ccdExposure: "raw"
connections.outputExposure: "cpFlatBootstrapIsrExp"
connections.bias: "biasBootstrap"
connections.dark: "darkBootstrap"
python: |
from lsst.cp.pipe import configureIsrTaskLSSTForCalibrations

configureIsrTaskLSSTForCalibrations(config)

config.doBootstrap = True
config.doCrosstalk = True
config.crosstalk.doQuadraticCrosstalkCorrection = False
config.doBias = True
config.doDark = True
cpFlatBootstrapCombine:
class: lsst.cp.pipe.CalibCombineByFilterTask
config:
connections.inputExpHandles: "cpFlatBootstrapIsrExp"
connections.outputData: "flatBootstrap"
calibrationType: "flat"
exposureScaling: MeanStats
contracts:
- cpFlatBootstrapIsr.doFlat == False
- cpFlatBootstrapIsr.doBootstrap == True
- cpFlatBootstrapCombine.calibrationType == "flat"
- cpFlatBootstrapCombine.connections.inputExpHandles == cpFlatBootstrapIsr.connections.outputExposure

Loading
Loading