23 Tasks for transforming raw measurement outputs to calibrated quantities. 25 from __future__
import absolute_import, division, print_function
26 import lsst.afw.table
as afwTable
27 import lsst.pex.config
as pexConfig
28 import lsst.pipe.base
as pipeBase
32 """!Return a version of the input catalog which is contiguous in memory.""" 33 if not catalog.isContiguous():
34 return catalog.copy(deep=
True)
40 """!Configuration for TransformTask.""" 41 copyFields = pexConfig.ListField(
43 doc=
"Fields to copy from input to output catalog without transformation",
44 default=(
'id',
'coord_ra',
'coord_dec')
57 \anchor TransformTask_ 59 \brief Transform a SourceCatalog containing raw measurements to calibrated form. 61 \section pipe_tasks_transform_Contents Contents 63 - \ref pipe_tasks_transform_purpose 64 - \ref pipe_tasks_transform_initialize 65 - \ref pipe_tasks_transform_invoke 67 \section pipe_tasks_transform_purpose Description 69 Given a set of measurement algorithms with their associated configuration, 70 the table of source measurements they have produced, and information about 71 an associated WCS and calibration, transform the raw measurement output to 74 Transformations are defined on a per-measurement-plugin basis. In 75 addition, a configurable set of fields may be simply copied from the input 76 to the output catalog. 78 This task operates on an input SourceCatalog and returns a BaseCatalog 79 containing the transformed results. It requires that the caller supply 80 information on the configuration of the measurement task which produced 81 the input data as well as the world coordinate system and calibration 82 under which the transformation will take place. It provides no 83 functionality for reading or writing data from a Butler: rather, 84 per-dataset-type command line tasks are provided to obtain the appropriate 85 information from a Butler (or elsewhere) and then delegate to this task. 87 \section pipe_tasks_transform_initialize Task initialization 91 \section pipe_tasks_transform_invoke Task invocation 95 ConfigClass = TransformConfig
96 _DefaultName =
"transform" 98 def __init__(self, measConfig, inputSchema, outputDataset, *args, **kwargs):
99 """!Initialize TransformTask. 101 @param[in] measConfig Configuration for the measurement task which 102 produced the measurments being transformed. 103 @param[in] inputSchema The schema of the input catalog. 104 @param[in] outputDataset The butler dataset type of the output catalog. 105 @param[in] *args Passed through to pipeBase.Task.__init__() 106 @param[in] *kwargs Passed through to pipeBase.Task.__init__() 108 pipeBase.Task.__init__(self, *args, **kwargs)
115 self.
mapper = afwTable.SchemaMapper(inputSchema)
116 for field
in self.config.copyFields:
117 self.
mapper.addMapping(inputSchema.find(field).key)
122 for name
in measConfig.plugins.names:
123 config = measConfig.plugins.get(name)
124 transformClass = measConfig.plugins.registry.get(name).PluginClass.getTransformClass()
128 """!Return a dict containing an empty catalog representative of this task's output.""" 129 transformedSrc = afwTable.BaseCatalog(self.
mapper.getOutputSchema())
132 def run(self, inputCat, wcs, calib):
133 """!Transform raw source measurements to calibrated quantities. 135 @param[in] inputCat SourceCatalog of sources to transform. 136 @param[in] wcs The world coordinate system under which transformations will take place. 137 @param[in] calib The calibration under which transformations will take place. 139 @return A BaseCatalog containing the transformed measurements. 141 outputCat = afwTable.BaseCatalog(self.
mapper.getOutputSchema())
142 outputCat.extend(inputCat, mapper=self.
mapper)
150 transform(inputCat, outputCat, wcs, calib)
155 """!Configuration for RunTransformTaskBase derivatives.""" 156 transform = pexConfig.ConfigurableField(
157 doc=
"Subtask which performs transformations",
160 inputConfigType = pexConfig.Field(
162 doc=
"Dataset type of measurement operation configuration",
168 \anchor RunTransformTaskBase_ 170 \brief Command line interface for TransformTask. 172 \section pipe_tasks_transform_Contents Contents 174 - \ref pipe_tasks_runtransform_purpose 175 - \ref pipe_tasks_runtransform_invoke 177 \section pipe_tasks_runtransform_purpose Description 179 Provides a command-line task which can be used to run TransformTask. 181 - Loads a plugin registry based on configuration; 182 - Loads configuration for the measurement task which was applied from a repository; 183 - Loads the SourceCatalog input schema from a repository; 184 - For each input dataRef, reads the SourceCatalog, WCS and calibration from the 185 repository and executes TransformTask. 187 This is not a fully-fledged command line task: it requires specialization to a particular 188 source type by defining the variables indicated below. 190 \section pipe_tasks_runtransform_invoke Task invocation 194 RunnerClass = pipeBase.ButlerInitializedTaskRunner
195 ConfigClass = RunTransformConfig
212 The Butler dataset type for the schema of the input source catalog. 214 By default, we append `_schema` to the input source type. Subclasses may customize 222 The Butler dataset type for the schema of the output catalog. 224 By default, we prepend `transformed_` to the input source type. Subclasses may 225 customize if required. 232 The configuration of the measurement operation used to generate the input catalog. 234 By default we look for `measurement` under the root configuration of the 235 generating task. Subclasses may customize this (e.g. to `calibrate.measurement`) 238 return self.
butler.get(self.config.inputConfigType).measurement.value
241 pipeBase.CmdLineTask.__init__(self, *args, config=kwargs[
'config'], log=kwargs[
'log'])
249 """!Transform the source catalog referred to by dataRef. 251 The result is both returned and written as dataset type "transformed_" + the input 252 source dataset type to the provided dataRef. 254 @param[in] dataRef Data reference for source catalog & calibrated exposure. 256 @returns A BaseCatalog containing the transformed measurements. 259 inputCat = dataRef.get(self.
sourceType, immediate=
True)
261 calib = dataRef.get(self.
calexpType).getCalib()
262 outputCat = self.transform.
run(inputCat, wcs, calib)
276 \anchor SrcTransformTask_ 278 \brief Transform ``src`` measuremenents to calibrated form. 280 This is a specialization of \ref RunTransformTaskBase_ "RunTransformTaskBase" which 281 operates on ``src`` measurements. Refer to the parent documentation for details. 283 _DefaultName =
"transformSrcMeasurement" 285 calexpType =
'calexp' 289 return self.
butler.get(self.config.inputConfigType).calibrate.measurement.value
301 \anchor ForcedSrcTransformTask_ 303 \brief Transform ``forced_src`` measuremenents to calibrated form. 305 This is a specialization of \ref RunTransformTaskBase_ "RunTransformTaskBase" which 306 operates on ``forced_src`` measurements. Refer to the parent documentation for details. 308 _DefaultName =
"transformForcedSrcMeasurement" 309 sourceType =
'forced_src' 310 calexpType =
'calexp' 322 \anchor CoaddSrcTransformTask_ 324 \brief Transform measuremenents made on coadds to calibrated form. 326 This is a specialization of \ref RunTransformTaskBase_ "RunTransformTaskBase" which 327 operates on measurements made on coadds. Refer to the parent documentation for details. 329 _DefaultName =
"transformCoaddSrcMeasurement" 333 return self.
butler.get(self.config.inputConfigType).coaddName
343 def _getConfigName(self):
344 return "%s_transformCoaddSrcMeasurement_config" % (self.
coaddName,)
346 def _getMetaDataName(self):
347 return "%s_transformCoaddSrcMeasurement_metadata" % (self.
coaddName,)