Coverage for python/lsst/faro/measurement/MatchedCatalogMeasurement.py : 67%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import traceback
3import lsst.pipe.base as pipeBase
4from lsst.verify.tasks import MetricConnections, MetricComputationError
6from lsst.faro.base.CatalogMeasurementBase import CatalogMeasurementBaseTaskConfig, CatalogMeasurementBaseTask
8__all__ = ("PatchMatchedMeasurementTaskConnections", "PatchMatchedMeasurementTaskConfig",
9 "PatchMatchedMeasurementTask",
10 "TractMatchedMeasurementTaskConnections", "TractMatchedMeasurementTaskConfig",
11 "TractMatchedMeasurementTask",
12 "PatchMatchedMultiBandMeasurementTaskConnections", "PatchMatchedMultiBandMeasurementTaskConfig",
13 "PatchMatchedMultiBandMeasurementTask")
15# The first thing to do is to define a Connections class. This will define all
16# the inputs and outputs that our task requires
19class PatchMatchedMeasurementTaskConnections(MetricConnections,
20 dimensions=("tract", "patch", "band",
21 "instrument", "skymap")):
22 cat = pipeBase.connectionTypes.Input(doc="Input matched catalog.",
23 dimensions=("tract", "patch", "instrument",
24 "band"),
25 storageClass="SimpleCatalog",
26 name="matchedCatalogPatch")
27 measurement = pipeBase.connectionTypes.Output(doc="Resulting matched catalog.",
28 dimensions=("tract", "patch",
29 "instrument", "band"),
30 storageClass="MetricValue",
31 name="metricvalue_{package}_{metric}")
34class PatchMatchedMeasurementTaskConfig(CatalogMeasurementBaseTaskConfig,
35 pipelineConnections=PatchMatchedMeasurementTaskConnections):
36 pass
39class PatchMatchedMeasurementTask(CatalogMeasurementBaseTask):
40 ConfigClass = PatchMatchedMeasurementTaskConfig
41 _DefaultName = "patchMatchedMeasurementTask"
44class TractMatchedMeasurementTaskConnections(PatchMatchedMeasurementTaskConnections,
45 dimensions=("tract", "instrument",
46 "band", "skymap")):
47 cat = pipeBase.connectionTypes.Input(doc="Input matched catalog.",
48 dimensions=("tract", "instrument",
49 "band"),
50 storageClass="SimpleCatalog",
51 name="matchedCatalogTract")
52 measurement = pipeBase.connectionTypes.Output(doc="Resulting matched catalog.",
53 dimensions=("tract",
54 "instrument", "band"),
55 storageClass="MetricValue",
56 name="metricvalue_{package}_{metric}")
59class TractMatchedMeasurementTaskConfig(CatalogMeasurementBaseTaskConfig,
60 pipelineConnections=TractMatchedMeasurementTaskConnections):
61 pass
64class TractMatchedMeasurementTask(CatalogMeasurementBaseTask):
65 ConfigClass = TractMatchedMeasurementTaskConfig
66 _DefaultName = "tractMatchedMeasurementTask"
69class PatchMatchedMultiBandMeasurementTaskConnections(MetricConnections,
70 dimensions=("tract", "patch", "band",
71 "instrument", "skymap")):
72 cat = pipeBase.connectionTypes.Input(doc="Input matched catalog.",
73 dimensions=("tract", "patch", "instrument"),
74 storageClass="SimpleCatalog",
75 name="matchedCatalogPatchMultiBand")
76 measurement = pipeBase.connectionTypes.Output(doc="Resulting matched catalog.",
77 dimensions=("tract", "patch",
78 "instrument", "band"),
79 storageClass="MetricValue",
80 name="metricvalue_{package}_{metric}")
83class PatchMatchedMultiBandMeasurementTaskConfig(
84 CatalogMeasurementBaseTaskConfig,
85 pipelineConnections=PatchMatchedMultiBandMeasurementTaskConnections):
86 pass
89class PatchMatchedMultiBandMeasurementTask(CatalogMeasurementBaseTask):
90 ConfigClass = PatchMatchedMultiBandMeasurementTaskConfig
91 _DefaultName = "patchMatchedMultiBandMeasurementTask"
93 def run(self, cat, in_id, out_id):
94 return self.measure.run(cat, self.config.connections.metric, in_id, out_id)
96 def runQuantum(self, butlerQC, inputRefs, outputRefs):
97 """Do Butler I/O to provide in-memory objects for run.
98 This specialization of runQuantum performs error-handling specific to
99 MetricTasks. Most or all of this functionality may be moved to
100 activators in the future.
101 """
102 try:
103 in_id = butlerQC.registry.expandDataId(inputRefs.cat.dataId)
104 out_id = butlerQC.registry.expandDataId(outputRefs.measurement.dataId)
105 inputs = butlerQC.get(inputRefs)
106 inputs['in_id'] = in_id
107 inputs['out_id'] = out_id
108 outputs = self.run(**inputs)
109 if outputs.measurement is not None:
110 butlerQC.put(outputs, outputRefs)
111 else:
112 self.log.debugf("Skipping measurement of {!r} on {} "
113 "as not applicable.", self, inputRefs)
114 except MetricComputationError:
115 # Apparently lsst.log doesn't have built-in exception support?
116 self.log.errorf(
117 "Measurement of {!r} failed on {}->{}\n{}",
118 self, inputRefs, outputRefs, traceback.format_exc())