lsst.meas.base
ga44f29b7aa+21155385c5
Toggle main menu visibility
Loading...
Searching...
No Matches
python
lsst
meas
base
transforms.py
Go to the documentation of this file.
1
# This file is part of meas_base.
2
#
3
# Developed for the LSST Data Management System.
4
# This product includes software developed by the LSST Project
5
# (https://www.lsst.org).
6
# See the COPYRIGHT file at the top-level directory of this distribution
7
# for details of code ownership.
8
#
9
# This program is free software: you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation, either version 3 of the License, or
12
# (at your option) any later version.
13
#
14
# This program is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
# GNU General Public License for more details.
18
#
19
# You should have received a copy of the GNU General Public License
20
# along with this program. If not, see <https://www.gnu.org/licenses/>.
21
22
"""Measurement transformations.
23
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.
27
28
At construction, the transformation is passed the configuration and name of
29
the plugin whose outputs it will be transforming (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
33
between the catalogs.
34
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
42
inconsistent.
43
44
Transformations can be defined in Python or in C++. Python code should inherit
45
from `MeasurementTransform`, following its interface.
46
"""
47
48
from
lsst.afw.table
import
CoordKey
49
from
lsst.pex.exceptions
import
LengthError
50
from
._measBaseLib
import
CentroidResultKey
51
52
__all__ = (
"MeasurementTransform"
,
"NullTransform"
,
"PassThroughTransform"
,
"SimpleCentroidTransform"
)
53
54
55
class
MeasurementTransform
:
56
"""Base class for measurement transformations.
57
58
Parameters
59
----------
60
config : subclass of `BasePluginConfig`
61
The configuration of the measurement plugin whose outputs are being
62
transformed.
63
name : `str`
64
The name of the measurement plugin whose outputs are being
65
transformed.
66
mapper : `lsst.afw.table.SchemaMapper`
67
Mapping between the input (pre-transformation) and output
68
(transformed) catalogs.
69
70
Notes
71
-----
72
Create transformations by deriving from this class, implementing
73
`__call__()` and (optionally) augmenting `__init__()`.
74
"""
75
76
def
__init__
(self, config, name, mapper):
77
self.
name
= name
78
self.
config
= config
79
80
def
__call__
(self, inputCatalog, outputCatalog, wcs, photoCalib):
81
raise
NotImplementedError()
82
83
@staticmethod
84
def
_checkCatalogSize
(cat1, cat2):
85
if
len(cat1) != len(cat2):
86
raise
LengthError
(
"Catalog size mismatch"
)
87
88
89
class
NullTransform
(
MeasurementTransform
):
90
"""Null transform which transfers no data from input to output.
91
92
This is intended as the default for measurements for which no other
93
transformation is specified.
94
95
Parameters
96
----------
97
config : subclass of `BasePluginConfig`
98
The configuration of the measurement plugin whose outputs are being
99
transformed.
100
name : `str`
101
The name of the measurement plugin whose outputs are being
102
transformed.
103
mapper : `lsst.afw.table.SchemaMapper`
104
Mapping between the input (pre-transformation) and output
105
(transformed) catalogs.
106
"""
107
108
def
__call__
(self, inputCatalog, outputCatalog, wcs, photoCalib):
109
self.
_checkCatalogSize
(inputCatalog, outputCatalog)
110
111
112
class
PassThroughTransform
(
MeasurementTransform
):
113
"""Copy fields from input to output without transformation.
114
115
Parameters
116
----------
117
config : subclass of `BasePluginConfig`
118
The configuration of the measurement plugin whose outputs are being
119
transformed.
120
name : `str`
121
The name of the measurement plugin whose outputs are being
122
transformed.
123
mapper : `lsst.afw.table.SchemaMapper`
124
Mapping between the input (pre-transformation) and output
125
(transformed) catalogs.
126
"""
127
128
def
__init__
(self, config, name, mapper):
129
MeasurementTransform.__init__(self, config, name, mapper)
130
for
key, field
in
mapper.getInputSchema().extract(name +
"*"
).values():
131
mapper.addMapping(key)
132
133
def
__call__
(self, inputCatalog, outputCatalog, wcs, photoCalib):
134
self.
_checkCatalogSize
(inputCatalog, outputCatalog)
135
136
137
class
SimpleCentroidTransform
(
MeasurementTransform
):
138
"""Transform pixel centroid, without uncertainty, to celestial coordinates.
139
140
Parameters
141
----------
142
config : subclass of `BasePluginConfig`
143
The configuration of the measurement plugin whose outputs are being
144
transformed.
145
name : `str`
146
The name of the measurement plugin whose outputs are being
147
transformed.
148
mapper : `lsst.afw.table.SchemaMapper`
149
Mapping between the input (pre-transformation) and output
150
(transformed) catalogs.
151
"""
152
153
def
__init__
(self, config, name, mapper):
154
MeasurementTransform.__init__(self, config, name, mapper)
155
self.
coordKey
= CoordKey.addFields(mapper.editOutputSchema(), name,
"Position from "
+ name)
156
157
def
__call__
(self, inputCatalog, outputCatalog, wcs, photoCalib):
158
self.
_checkCatalogSize
(inputCatalog, outputCatalog)
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()))
lsst::meas::base::CentroidResultKey
A FunctorKey for CentroidResult.
Definition
CentroidUtilities.h:90
lsst::meas::base.transforms.MeasurementTransform
Definition
transforms.py:55
lsst::meas::base.transforms.MeasurementTransform.config
config
Definition
transforms.py:78
lsst::meas::base.transforms.MeasurementTransform._checkCatalogSize
_checkCatalogSize(cat1, cat2)
Definition
transforms.py:84
lsst::meas::base.transforms.MeasurementTransform.name
name
Definition
transforms.py:77
lsst::meas::base.transforms.MeasurementTransform.__call__
__call__(self, inputCatalog, outputCatalog, wcs, photoCalib)
Definition
transforms.py:80
lsst::meas::base.transforms.MeasurementTransform.__init__
__init__(self, config, name, mapper)
Definition
transforms.py:76
lsst::meas::base.transforms.NullTransform
Definition
transforms.py:89
lsst::meas::base.transforms.NullTransform.__call__
__call__(self, inputCatalog, outputCatalog, wcs, photoCalib)
Definition
transforms.py:108
lsst::meas::base.transforms.PassThroughTransform
Definition
transforms.py:112
lsst::meas::base.transforms.PassThroughTransform.__call__
__call__(self, inputCatalog, outputCatalog, wcs, photoCalib)
Definition
transforms.py:133
lsst::meas::base.transforms.PassThroughTransform.__init__
__init__(self, config, name, mapper)
Definition
transforms.py:128
lsst::meas::base.transforms.SimpleCentroidTransform
Definition
transforms.py:137
lsst::meas::base.transforms.SimpleCentroidTransform.__call__
__call__(self, inputCatalog, outputCatalog, wcs, photoCalib)
Definition
transforms.py:157
lsst::meas::base.transforms.SimpleCentroidTransform.__init__
__init__(self, config, name, mapper)
Definition
transforms.py:153
lsst::meas::base.transforms.SimpleCentroidTransform.coordKey
coordKey
Definition
transforms.py:155
lsst::pex::exceptions::LengthError
lsst::afw::table
lsst::pex::exceptions
Generated on
for lsst.meas.base by
1.17.0