24 from __future__
import print_function
37 doDeblend = pexConfig.Field(dtype=bool, default=
True, doc=
"Deblend sources?")
38 doMeasurement = pexConfig.Field(dtype=bool, default=
True, doc=
"Measure sources?")
39 doWriteSources = pexConfig.Field(dtype=bool, default=
True, doc=
"Write sources?")
40 doWriteHeavyFootprintsInSources = pexConfig.Field(dtype=bool, default=
False,
41 doc=
"Include HeavyFootprint data in source table?")
43 sourceOutputFile = pexConfig.Field(
44 dtype=str, default=
None, doc=
"Write sources to given filename (default: use butler)", optional=
True)
46 deblend = pexConfig.ConfigurableField(
47 target=SourceDeblendTask,
48 doc=
"Split blended sources into their components",
50 measurement = pexConfig.ConfigurableField(
51 target=SourceMeasurementTask,
52 doc=
"Final source measurement on low-threshold detections",
57 ConfigClass = DeblendAndMeasureConfig
58 _DefaultName =
"deblendAndMeasure" 64 pipeBase.CmdLineTask.__init__(self, **kwargs)
67 def run(self, dataRef):
68 self.log.info(
"Processing %s" % (dataRef.dataId))
69 calexp = dataRef.get(
'calexp')
70 srcs = dataRef.get(
'src')
71 print(
'Calexp:', calexp)
78 mapper = afwTable.SchemaMapper(srcs.getSchema())
80 mapper.addMinimalSchema(srcs.getSchema(),
True)
81 schema = mapper.getOutputSchema()
83 if self.config.doDeblend:
84 self.makeSubtask(
"deblend", schema=schema)
85 if self.config.doMeasurement:
86 self.makeSubtask(
"measurement", schema=schema, algMetadata=self.
algMetadata)
91 if src.getParent() == 0:
94 outsources = afwTable.SourceCatalog(schema)
95 outsources.reserve(len(parents))
96 outsources.extend(parents, mapper=mapper)
98 print(len(srcs),
'sources before deblending')
100 if self.config.doDeblend:
101 self.deblend.
run(calexp, srcs)
103 if self.config.doMeasurement:
104 self.measurement.
run(calexp, srcs)
106 if srcs
is not None and self.config.doWriteSources:
107 sourceWriteFlags = (0
if self.config.doWriteHeavyFootprintsInSources
108 else afwTable.SOURCE_IO_NO_HEAVY_FOOTPRINTS)
109 print(
'Writing "src" outputs')
110 if self.config.sourceOutputFile:
111 srcs.writeFits(self.config.sourceOutputFile, flags=sourceWriteFlags)
113 dataRef.put(srcs,
'src', flags=sourceWriteFlags)
115 if __name__ ==
'__main__':
116 DeblendAndMeasureTask.parseAndRun()
def __init__(self, kwargs)
def writeConfig(self, args, kwargs)
algMetadata
FIXME – this whole mapping business is very fragile – it seems to fail, eg, if you don't set "-c d...