LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
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 
31 namespace lsst {
32 namespace meas {
33 namespace base {
34 
43 struct ShapeResult {
53 
55  ShapeResult();
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 
113 class ShapeResultKey : public afw::table::FunctorKey<ShapeResult> {
114 public:
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  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 
181 private:
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
bool isValid() const noexcept
Return True if all the constituent error Keys are valid.
Definition: aggregates.cc:294
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 > getIyy() const noexcept
Definition: aggregates.h:347
Key< double > getIxy() const noexcept
Definition: aggregates.h:348
Key< double > getIxx() const noexcept
Return a constituent Key.
Definition: aggregates.h:346
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::Key< ShapeElement > getIxx() const
Return a Key for the xx moment.
afw::table::CovarianceMatrixKey< ErrElement, 3 > getShapeErr() const
Return a FunctorKey to just the uncertainty matrix.
afw::table::Key< ShapeElement > getIyy() const
Return a Key for the yy moment.
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.
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.
afw::table::Key< ShapeElement > getIxy() const
Return a Key for the xy moment.
bool operator!=(ShapeResultKey const &other) const
bool isValid() const
Return True if the shape key is valid.
virtual void set(afw::table::BaseRecord &record, ShapeResult const &value) const
Set a ShapeResult in the given record.
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