Skip to content

Commit 6face5b

Browse files
committed
Generalize MetricAnalysisTask
Enable MetricAnalysisTask to work with any metric table. Inputs and dimensions specified at runtime via the pipeline yaml file.
1 parent 37935f7 commit 6face5b

File tree

1 file changed

+58
-9
lines changed

1 file changed

+58
-9
lines changed

python/lsst/analysis/tools/tasks/metricAnalysis.py

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,33 +26,82 @@
2626
)
2727

2828

29+
from lsst.pex.config import ListField
2930
from lsst.pipe.base import connectionTypes as ct
3031

3132
from ..interfaces import AnalysisBaseConfig, AnalysisBaseConnections, AnalysisPipelineTask
3233

3334

3435
class MetricAnalysisConnections(
3536
AnalysisBaseConnections,
36-
dimensions=("skymap",),
37-
defaultTemplates={"metricBundleName": "objectTableCore_metrics"},
37+
dimensions=(),
38+
defaultTemplates={"metricTableName": ""},
3839
):
40+
3941
data = ct.Input(
40-
doc="A summary table of all metrics by tract.",
41-
name="{metricBundleName}Table",
42+
doc="A table containing metrics.",
43+
name="{metricTableName}",
4244
storageClass="ArrowAstropy",
43-
dimensions=("skymap",),
4445
deferLoad=True,
46+
dimensions=(),
4547
)
4648

49+
def __init__(self, *, config=None):
50+
51+
self.dimensions.update(frozenset(sorted(config.outputDataDimensions)))
52+
super().__init__(config=config)
53+
self.data = ct.Input(
54+
doc=self.data.doc,
55+
name=self.data.name,
56+
storageClass=self.data.storageClass,
57+
deferLoad=self.data.deferLoad,
58+
dimensions=frozenset(sorted(config.inputDataDimensions)),
59+
)
60+
4761

48-
class MetricAnalysisConfig(AnalysisBaseConfig, pipelineConnections=MetricAnalysisConnections):
49-
pass
62+
class MetricAnalysisConfig(
63+
AnalysisBaseConfig,
64+
pipelineConnections=MetricAnalysisConnections,
65+
):
66+
inputDataDimensions = ListField[str](
67+
doc="Dimensions of the input data table.",
68+
default=(),
69+
optional=False,
70+
)
71+
outputDataDimensions = ListField[str](
72+
doc="Dimensions of the outputs.",
73+
default=(),
74+
optional=False,
75+
)
5076

5177

5278
class MetricAnalysisTask(AnalysisPipelineTask):
53-
"""Turn metric bundles which are per tract into a
54-
summary metric table.
79+
"""Take a metric table and run an analysis tool on the
80+
data it contains. This could include creating a plot
81+
the metrics and/or calculating summary values of those
82+
metrics, such as means, medians, etc. The analysis
83+
is outlined within the analysis tool.
5584
"""
5685

5786
ConfigClass = MetricAnalysisConfig
5887
_DefaultName = "metricAnalysis"
88+
89+
def runQuantum(self, butlerQC, inputRefs, outputRefs):
90+
# Doctstring inherited
91+
92+
inputs = butlerQC.get(inputRefs)
93+
dataId = butlerQC.quantum.dataId
94+
plotInfo = self.parsePlotInfo(inputs, dataId)
95+
96+
data = self.loadData(inputs.pop("data"))
97+
98+
# TODO: "bands" kwarg is a workaround for DM-47941.
99+
outputs = self.run(
100+
data=data,
101+
plotInfo=plotInfo,
102+
bands=dataId["band"],
103+
band=dataId["band"],
104+
**inputs,
105+
)
106+
107+
butlerQC.put(outputs, outputRefs)

0 commit comments

Comments
 (0)