LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
ShapeUtilities.h
Go to the documentation of this file.
1// -*- lsst-c++ -*-
2/*
3 * LSST Data Management System
4 * Copyright 2008-2015 AURA/LSST.
5 *
6 * This product includes software developed by the
7 * LSST Project (http://www.lsst.org/).
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 LSST License Statement and
20 * the GNU General Public License along with this program. If not,
21 * see <http://www.lsstcorp.org/LegalNotices/>.
22 */
23
24#ifndef LSST_MEAS_BASE_ShapeUtilities_h_INCLUDED
25#define LSST_MEAS_BASE_ShapeUtilities_h_INCLUDED
26
30
31namespace lsst {
32namespace meas {
33namespace base {
34
53
56
58 explicit ShapeResult(ShapeElement xx_, ShapeElement yy_, ShapeElement xy_, ShapeCov const& matrix)
59 : xx(xx_),
60 yy(yy_),
61 xy(xy_),
62 xxErr(std::sqrt(matrix(0, 0))),
63 yyErr(std::sqrt(matrix(1, 1))),
64 xyErr(std::sqrt(matrix(2, 2))),
65 xx_yy_Cov(matrix(0, 1)),
66 xx_xy_Cov(matrix(0, 2)),
67 yy_xy_Cov(matrix(1, 2)) {}
68
71 ErrElement yyErr_, ErrElement xyErr_)
72 : xx(xx_),
73 yy(yy_),
74 xy(xy_),
75 xxErr(xxErr_),
76 yyErr(yyErr_),
77 xyErr(xyErr_),
78 xx_yy_Cov(0.0),
79 xx_xy_Cov(0.0),
80 yy_xy_Cov(0.0) {}
81
88 Shape const getShape() const;
89
90 // get the Quadrupole corresponding to this ShapeResult
92
94 void setShape(Shape const& shape);
95
97 ShapeCov const getShapeErr() const;
98
101 void setShapeErr(ShapeCov const& matrix);
102
105};
106
113class ShapeResultKey : public afw::table::FunctorKey<ShapeResult> {
114public:
127 std::string const& doc, UncertaintyEnum uncertainty,
129
131 ShapeResultKey() : _shape(), _shapeErr() {}
132
136 : _shape(shape), _shapeErr(shapeErr) {}
137
148
150 virtual ShapeResult get(afw::table::BaseRecord const& record) const;
151
153 virtual void set(afw::table::BaseRecord& record, ShapeResult const& value) const;
154
156
157 bool operator==(ShapeResultKey const& other) const {
158 return _shape == other._shape && _shapeErr == other._shapeErr;
159 }
160 bool operator!=(ShapeResultKey const& other) const { return !(*this == other); }
162
164 bool isValid() const { return _shape.isValid() && _shapeErr.isValid(); }
165
167 afw::table::QuadrupoleKey getShape() const { return _shape; }
168
171
173 afw::table::Key<ShapeElement> getIxx() const { return _shape.getIxx(); }
174
176 afw::table::Key<ShapeElement> getIyy() const { return _shape.getIyy(); }
177
179 afw::table::Key<ShapeElement> getIxy() const { return _shape.getIxy(); }
180
181private:
184};
185
207
208} // namespace base
209} // namespace meas
210} // namespace lsst
211
212#endif // !LSST_MEAS_BASE_ShapeUtilities_h_INCLUDED
table::Key< std::string > name
Definition: Amplifier.cc:116
table::Schema schema
Definition: python.h:134
An ellipse core with quadrupole moments as parameters.
Definition: Quadrupole.h:47
Base class for all records.
Definition: BaseRecord.h:31
Convenience base class that combines the OutputFunctorKey and InputFunctorKey.
Definition: FunctorKey.h:74
A class used as a handle to a particular field in a table.
Definition: Key.h:53
A FunctorKey used to get or set a geom::ellipses::Quadrupole from a tuple of constituent Keys.
Definition: aggregates.h:282
Key< double > getIxx() const noexcept
Return a constituent Key.
Definition: aggregates.h:346
Key< double > getIxy() const noexcept
Definition: aggregates.h:348
Key< double > getIyy() const noexcept
Definition: aggregates.h:347
bool isValid() const noexcept
Return True if all the constituent Keys are valid.
Definition: aggregates.h:342
Defines the fields and offsets for a table.
Definition: Schema.h:51
A proxy type for name lookups in a Schema.
Definition: Schema.h:367
A 2D linear coordinate transformation.
A FunctorKey for ShapeResult.
afw::table::QuadrupoleKey getShape() const
Return a FunctorKey to just the shape value.
static ShapeResultKey addFields(afw::table::Schema &schema, std::string const &name, std::string const &doc, UncertaintyEnum uncertainty, afw::table::CoordinateType coordType=afw::table::CoordinateType::PIXEL)
Add the appropriate fields to a Schema, and return a ShapeResultKey that manages them.
ShapeResultKey(afw::table::QuadrupoleKey const &shape, afw::table::CovarianceMatrixKey< ErrElement, 3 > const &shapeErr)
Construct from a pair of Keys.
afw::table::Key< ShapeElement > getIxy() const
Return a Key for the xy moment.
bool operator==(ShapeResultKey const &other) const
Compare the FunctorKey for equality with another, using the underlying Keys.
virtual ShapeResult get(afw::table::BaseRecord const &record) const
Get a ShapeResult from the given record.
ShapeResultKey()
Default constructor; instance will not be usuable unless subsequently assigned to.
bool operator!=(ShapeResultKey const &other) const
afw::table::Key< ShapeElement > getIxx() const
Return a Key for the xx moment.
bool isValid() const
Return True if the shape key is valid.
afw::table::Key< ShapeElement > getIyy() const
Return a Key for the yy moment.
virtual void set(afw::table::BaseRecord &record, ShapeResult const &value) const
Set a ShapeResult in the given record.
afw::table::CovarianceMatrixKey< ErrElement, 3 > getShapeErr() const
Return a FunctorKey to just the uncertainty matrix.
CoordinateType
Enum used to set units for geometric FunctorKeys.
Definition: aggregates.h:277
UncertaintyEnum
An enum used to specify how much uncertainty information measurement algorithms provide.
Definition: constants.h:43
Eigen::Matrix< ErrElement, 3, 3, Eigen::DontAlign > ShapeCov
Definition: constants.h:61
Eigen::Matrix< ShapeElement, 3, 3, Eigen::DontAlign > ShapeTrMatrix
Definition: constants.h:62
float ErrElement
Definition: constants.h:55
double ShapeElement
Definition: constants.h:57
ShapeTrMatrix makeShapeTransformMatrix(geom::LinearTransform const &xform)
Construct a matrix suitable for transforming second moments.
A base class for image defects.
STL namespace.
A reusable struct for moments-based shape measurements.
ErrElement yy_xy_Cov
yy,xy term in the uncertainty convariance matrix
Shape const getShape() const
Return an afw::geom::ellipses object corresponding to xx, yy, xy.
ShapeCov const getShapeErr() const
Return the 3x3 symmetric covariance matrix, with rows and columns ordered (xx, yy,...
ErrElement xyErr
standard deviation of xy
afw::geom::ellipses::Quadrupole getQuadrupole()
void setShape(Shape const &shape)
Set struct elements from the given Quadrupole object.
ErrElement xx_xy_Cov
xx,xy term in the uncertainty convariance matrix
ShapeResult()
Constructor; initializes everything to NaN.
ShapeElement xy
image or model second moment for xy^2
ShapeResult(ShapeElement xx_, ShapeElement yy_, ShapeElement xy_, ErrElement xxErr_, ErrElement yyErr_, ErrElement xyErr_)
Constructor; initializes everything from values.
ErrElement xxErr
standard deviation of xx
ShapeElement xx
image or model second moment for x^2
void setShapeErr(ShapeCov const &matrix)
Set the struct standard deviation elements from the given matrix, with rows and columns ordered (xx,...
ErrElement xx_yy_Cov
xx,yy term in the uncertainty convariance matrix
ShapeResult(ShapeElement xx_, ShapeElement yy_, ShapeElement xy_, ShapeCov const &matrix)
Constructor; initializes everything from values.
ErrElement yyErr
standard deviation of yy
ShapeElement yy
image or model second moment for y^2