Hide keyboard shortcuts

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 lsst.pipe.base as pipeBase 

2from lsst.verify.tasks import MetricConnections 

3from lsst.afw.table import SourceCatalog 

4 

5from lsst.faro.base.CatalogMeasurementBase import CatalogMeasurementBaseTaskConfig, CatalogMeasurementBaseTask 

6 

7__all__ = ("VisitMeasurementTaskConfig", "VisitMeasurementTask") 

8 

9 

10# The first thing to do is to define a Connections class. This will define all 

11# the inputs and outputs that our task requires 

12class VisitMeasurementTaskConnections(MetricConnections, 

13 dimensions=("instrument", "visit", "band")): 

14 

15 source_catalogs = pipeBase.connectionTypes.Input(doc="Source catalogs.", 

16 dimensions=("instrument", "visit", 

17 "detector", "band"), 

18 storageClass="SourceCatalog", 

19 name="src", 

20 multiple=True) 

21 

22 measurement = pipeBase.connectionTypes.Output(doc="Per-visit measurement.", 

23 dimensions=("instrument", "visit", "band"), 

24 storageClass="MetricValue", 

25 name="metricvalue_{package}_{metric}") 

26 

27 

28class VisitMeasurementTaskConfig(CatalogMeasurementBaseTaskConfig, 

29 pipelineConnections=VisitMeasurementTaskConnections): 

30 pass 

31 

32 

33class VisitMeasurementTask(CatalogMeasurementBaseTask): 

34 ConfigClass = VisitMeasurementTaskConfig 

35 _DefaultName = "visitMeasurementTask" 

36 

37 def run(self, source_catalogs, vIds): 

38 

39 # Concatenate catalogs 

40 schema = source_catalogs[0].schema 

41 size = sum([len(cat) for cat in source_catalogs]) 

42 source_catalog = SourceCatalog(schema) 

43 source_catalog.reserve(size) 

44 for cat in source_catalogs: 

45 source_catalog.extend(cat) 

46 

47 return self.measure.run(source_catalog, self.config.connections.metric, vIds) 

48 

49 def runQuantum(self, butlerQC, inputRefs, outputRefs): 

50 inputs = butlerQC.get(inputRefs) 

51 inputs['vIds'] = [butlerQC.registry.expandDataId(el.dataId) for el in inputRefs.source_catalogs] 

52 outputs = self.run(**inputs) 

53 if outputs.measurement is not None: 

54 butlerQC.put(outputs, outputRefs) 

55 else: 

56 self.log.debugf("Skipping measurement of {!r} on {} " 

57 "as not applicable.", self, inputRefs)