Skip to content

Commit

Permalink
Merge pull request #213 from lsst/tickets/DM-42672
Browse files Browse the repository at this point in the history
Tickets/DM-42672: Create FocalPlaneGeometryPlots for biasMean, biasNoise, biasCRNoise, biasShiftCount
  • Loading branch information
jrmullaney committed Feb 28, 2024
2 parents 3679fc8 + 0bc7dc9 commit f0a709b
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 24 deletions.
36 changes: 31 additions & 5 deletions pipelines/exposureCore.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
description: |
Core-level plots and metrics for exposure-level data.
Tier1 plots to assess validity of calibration exposures.
tasks:
VerifyBias:
class: lsst.analysis.tools.tasks.VerifyBiasAnalysisTask
analyseBiasCore:
class: lsst.analysis.tools.tasks.VerifyCalibAnalysisTask
config:
connections.outputName: VerifyBias
atools.ReadNoisePerAmp: MedReadNoiseFocalPlanePlot
connections.outputName: biasCore
connections.data: verifyBiasResults
atools.biasReadNoisePerAmp: CalibStatisticFocalPlanePlot
atools.biasReadNoisePerAmp.quantityKey: biasReadNoise
atools.meanBiasPerAmp: CalibStatisticFocalPlanePlot
atools.meanBiasPerAmp.quantityKey: biasMean
atools.biasNoisePerAmp: CalibStatisticFocalPlanePlot
atools.biasNoisePerAmp.quantityKey: biasNoise
atools.biasCrNoisePerAmp: CalibStatisticFocalPlanePlot
atools.biasCrNoisePerAmp.quantityKey: biasCrNoise
atools.biasShiftCountPerAmp: CalibStatisticFocalPlanePlot
atools.biasShiftCountPerAmp.quantityKey: biasShiftCount
atools.biasShiftCountPerAmp.unit: count
atools.ampBiasProfileScatter: CPVerifyQuantityAmpProfileScatterTool
atools.ampBiasProfileScatter.prep.quantityKey: biasSerialProfile
atools.ampBiasProfileScatter.produce.plot.suptitle:
Expand All @@ -17,3 +28,18 @@ tasks:
python: |
from lsst.analysis.tools.atools import *
from lsst.analysis.tools.actions.plot.elements import *
analyseDarkCore:
class: lsst.analysis.tools.tasks.VerifyCalibAnalysisTask
config:
connections.outputName: darkCore
connections.data: verifyDarkResults
atools.readNoisePerAmp: CalibStatisticFocalPlanePlot
atools.readNoisePerAmp.quantityKey: darkReadNoise
atools.meanDarkPerAmp: CalibStatisticFocalPlanePlot
atools.meanDarkPerAmp.quantityKey: darkMean
atools.darkNoisePerAmp: CalibStatisticFocalPlanePlot
atools.darkNoisePerAmp.quantityKey: darkNoise
atools.darkCrNoisePerAmp: CalibStatisticFocalPlanePlot
atools.darkCrNoisePerAmp.quantityKey: darkCrNoise
python: |
from lsst.analysis.tools.atools import *
30 changes: 18 additions & 12 deletions python/lsst/analysis/tools/atools/calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from __future__ import annotations

__all__ = (
"MedReadNoiseFocalPlanePlot",
"CalibStatisticFocalPlanePlot",
"PtcGainFP",
"PtcNoiseFP",
"PtcA00FP",
Expand All @@ -30,6 +30,8 @@
"PtcRowMeanVarianceSlopeFP",
)

from lsst.pex.config import Field

from ..actions.plot.focalPlanePlot import FocalPlaneGeometryPlot
from ..actions.vector import LoadVector
from ..interfaces import AnalysisTool
Expand All @@ -53,25 +55,29 @@ def setDefaults(self):
self.produce.plot.statistic = "median"


class MedReadNoiseFocalPlanePlot(AnalysisTool):
class CalibStatisticFocalPlanePlot(CalibrationTool):
"""Generates a plot of the focal plane, color-coded according to the
median bias read noise on a per-amp basis. The median is across
multiple bias exposures.
median of a given measurement (default: "biasMean") on a per-amp basis.
The median is across multiple bias exposures.
"""

quantityKey = Field[str](
default="biasMean", doc="VectorKey to perform the statistic on and to plot per amp and per detector."
)
unit = Field[str](default="ADU", doc="Unit of quantity for including on z-axis label.")

def setDefaults(self):
super().setDefaults()

self.process.buildActions.z = LoadVector()
self.process.buildActions.z.vectorKey = "biasReadNoise"
self.process.buildActions.detector = LoadVector()
self.process.buildActions.detector.vectorKey = "detector"
self.process.buildActions.amplifier = LoadVector()
self.process.buildActions.amplifier.vectorKey = "amplifier"
self.process.buildActions.z.vectorKey = "biasMean"

self.produce.plot = FocalPlaneGeometryPlot()
self.produce.plot.zAxisLabel = "Med. Readnoise"
self.produce.plot.statistic = "median"
self.produce.plot.zAxisLabel = "Median of biasMean"

def finalize(self):
self.process.buildActions.z.vectorKey = self.quantityKey
zAxislabel = f"{self.produce.plot.statistic} of {self.quantityKey} ({self.unit})"
self.produce.plot.zAxisLabel = zAxislabel.capitalize()


class PtcGainFP(CalibrationTool):
Expand Down
14 changes: 7 additions & 7 deletions python/lsst/analysis/tools/tasks/calibrationAnalysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@
from __future__ import annotations

__all__ = (
"VerifyCalibAnalysisConfig",
"VerifyCalibAnalysisTask",
"VerifyPtcAnalysisConfig",
"VerifyPtcAnalysisTask",
"VerifyBiasAnalysisConfig",
"VerifyBiasAnalysisTask",
)

from lsst.pipe.base import connectionTypes as cT

from ..interfaces import AnalysisBaseConfig, AnalysisBaseConnections, AnalysisPipelineTask


class VerifyBiasAnalysisConnections(
class VerifyCalibAnalysisConnections(
AnalysisBaseConnections,
dimensions=("instrument",),
defaultTemplates={"inputName": "verifyBiasResults"},
Expand All @@ -54,13 +54,13 @@ class VerifyBiasAnalysisConnections(
)


class VerifyBiasAnalysisConfig(AnalysisBaseConfig, pipelineConnections=VerifyBiasAnalysisConnections):
class VerifyCalibAnalysisConfig(AnalysisBaseConfig, pipelineConnections=VerifyCalibAnalysisConnections):
pass


class VerifyBiasAnalysisTask(AnalysisPipelineTask):
ConfigClass = VerifyBiasAnalysisConfig
_DefaultName = "verifyBiasAnalysis"
class VerifyCalibAnalysisTask(AnalysisPipelineTask):
ConfigClass = VerifyCalibAnalysisConfig
_DefaultName = "verifyCalibAnalysis"

def runQuantum(self, butlerQC, inputRefs, outputRefs):
# Docs inherited from base class.
Expand Down

0 comments on commit f0a709b

Please sign in to comment.