22 """Measurement transformations. 24 When a measurement plugin is run, it provides raw, uncalibrated outputs such 25 as pixel positions. A transformation may be run as a post-processing step to 26 convert those outputs to calibrated quantities, such as celestial coordinates. 28 At construction, the transformation is passed the configuration and name of 29 the plugin whose outputs it will be transformaing (all fields in the input 30 table produced by that plugin will have their field names prefixed by the 31 plugin name) and a `~lsst.afw.table.SchemaMapper` which holds the schemata for 32 the input and output catalogs and which may be used to directly map fields 35 When a transformer is called, it is handed a `~lsst.afw.table.SourceCatalog` 36 containing the measurements to be transformed, a `~lsst.afw.table.BaseCatalog` 37 in which to store results, and information about the WCS and calibration of 38 the data. It may be safely assumed that both are contiguous in memory, thus a 39 ``ColumnView`` may be used for efficient processing. If the transformation is 40 not possible, it should be aborted by throwing an exception; if this happens, 41 the caller should assume that the contents of the output catalog are 44 Transformations can be defined in Python or in C++. Python code should inherit 45 from `MeasurementTransform`, following its interface. 50 from .
import CentroidResultKey
52 __all__ = (
"MeasurementTransform",
"NullTransform",
"PassThroughTransform",
"SimpleCentroidTransform")
56 """Base class for measurement transformations. 60 config : subclass of `BasePluginConfig` 61 The configuration of the measurement plugin whose outputs are being 64 The name of the measurement plugin whose outputs are being 66 mapper : `lsst.afw.table.SchemaMapper` 67 Mapping between the input (pre-transformation) and output 68 (transformed) catalogs. 72 Create transformations by deriving from this class, implementing 73 `__call__()` and (optionally) augmenting `__init__()`. 80 def __call__(self, inputCatalog, outputCatalog, wcs, photoCalib):
81 raise NotImplementedError()
84 def _checkCatalogSize(cat1, cat2):
85 if len(cat1) != len(cat2):
90 """Null transform which transfers no data from input to output. 92 This is intended as the default for measurements for which no other 93 transformation is specified. 97 config : subclass of `BasePluginConfig` 98 The configuration of the measurement plugin whose outputs are being 101 The name of the measurement plugin whose outputs are being 103 mapper : `lsst.afw.table.SchemaMapper` 104 Mapping between the input (pre-transformation) and output 105 (transformed) catalogs. 108 def __call__(self, inputCatalog, outputCatalog, wcs, photoCalib):
113 """Copy fields from input to output without transformation. 117 config : subclass of `BasePluginConfig` 118 The configuration of the measurement plugin whose outputs are being 121 The name of the measurement plugin whose outputs are being 123 mapper : `lsst.afw.table.SchemaMapper` 124 Mapping between the input (pre-transformation) and output 125 (transformed) catalogs. 129 MeasurementTransform.__init__(self, config, name, mapper)
130 for key, field
in mapper.getInputSchema().extract(name +
"*").values():
131 mapper.addMapping(key)
133 def __call__(self, inputCatalog, outputCatalog, wcs, photoCalib):
138 """Transform pixel centroid, without uncertainty, to celestial coordinates. 142 config : subclass of `BasePluginConfig` 143 The configuration of the measurement plugin whose outputs are being 146 The name of the measurement plugin whose outputs are being 148 mapper : `lsst.afw.table.SchemaMapper` 149 Mapping between the input (pre-transformation) and output 150 (transformed) catalogs. 154 MeasurementTransform.__init__(self, config, name, mapper)
155 self.
coordKey = CoordKey.addFields(mapper.editOutputSchema(), name,
"Position from " + name)
157 def __call__(self, inputCatalog, outputCatalog, wcs, photoCalib):
159 centroidResultKey = CentroidResultKey(inputCatalog.schema[self.
name])
160 for inSrc, outSrc
in zip(inputCatalog, outputCatalog):
161 self.
coordKey.
set(outSrc, wcs.pixelToSky(centroidResultKey.get(inSrc).getCentroid()))
Reports attempts to exceed implementation-defined length limits for some classes. ...
daf::base::PropertySet * set