LSST Applications g0d97872fb5+4fd969bb9d,g1653933729+34a971ddd9,g28da252d5a+072f89fe25,g2bbee38e9b+a99b0ab4cd,g2bc492864f+a99b0ab4cd,g2ca4be77d2+c0e3b27cd8,g2cdde0e794+704103fe75,g3156d2b45e+6e87dc994a,g347aa1857d+a99b0ab4cd,g35bb328faa+34a971ddd9,g3a166c0a6a+a99b0ab4cd,g3e281a1b8c+8ec26ec694,g4005a62e65+ba0306790b,g414038480c+9ed5ed841a,g569e0e2b34+cb4faa46ad,g5a97de2502+520531a62c,g717e5f8c0f+29153700a5,g7ede599f99+367733290c,g80478fca09+17051a22cc,g82479be7b0+f2f1ea0a87,g858d7b2824+29153700a5,g8b782ad322+29153700a5,g8cd86fa7b1+05420e7f7d,g9125e01d80+34a971ddd9,ga5288a1d22+e7f674aaf3,gae0086650b+34a971ddd9,gae74b0b5c6+45ef5cdc51,gb58c049af0+ace264a4f2,gc28159a63d+a99b0ab4cd,gcf0d15dbbd+8051a81198,gda6a2b7d83+8051a81198,gdaeeff99f8+7774323b41,gdf4d240d4a+34a971ddd9,ge2409df99d+cb167bac99,ge33fd446bb+29153700a5,ge79ae78c31+a99b0ab4cd,gf0baf85859+890af219f9,gf5289d68f6+9faa5c5784,w.2024.36
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Static Public Attributes | Friends | List of all members
lsst::gauss2d::EllipseData Class Referenceabstract

Interface for an object storing Ellipse data. More...

#include <ellipse.h>

Inheritance diagram for lsst::gauss2d::EllipseData:
lsst::gauss2d::Object lsst::gauss2d::Ellipse lsst::gauss2d::EllipseValues lsst::gauss2d::fit::GaussianParametricEllipse lsst::gauss2d::fit::SersicEllipseData

Public Member Functions

virtual ~EllipseData ()=default
 
virtual void convolve (const Ellipse &ell)
 Convolve this ellipse with another.
 
virtual double get_area () const
 Return the area of this ellipse, equal to pi*sigma_major*sigma_minor.
 
virtual double get_cov_xy () const
 Return the covariance, equal to sigma_x*sigma_y*rho.
 
virtual double get_hwhm_x () const
 Get the x-axis half-width at half-maximum.
 
virtual double get_hwhm_y () const
 Get the y-axis half-width at half-maximum.
 
virtual double get_radius_trace () const
 Return the trace radius, equal to sqrt(sigma_x^2 + sigma_y^2)
 
virtual double get_sigma_x () const =0
 Get sigma_x.
 
virtual double get_sigma_y () const =0
 Get sigma_y.
 
virtual double get_rho () const =0
 Get rho.
 
virtual double get_sigma_x_sq () const
 Get the square of sigma_x.
 
virtual double get_sigma_y_sq () const
 Get the square of sigma_y.
 
virtual double get_sigma_xy () const
 Return sigma_x*sigma_y.
 
virtual std::array< double, 3 > get_hxyr () const
 Get hwhm_x, hwhm_y, rho.
 
virtual std::array< double, 3 > get_xyr () const
 Get sigma_x, sigma_y, rho.
 
virtual void set (double sigma_x, double sigma_y, double rho)
 Set sigma_x, sigma_y, rho.
 
virtual void set (const Covariance &covar)
 Set values from a Covariance object.
 
virtual void set (const EllipseMajor &ellipse)
 Set values from an EllipseMajor object.
 
virtual void set_h (double hwhm_x, double hwhm_y, double rho)
 Set hwhm_x, hwhm_y, rho (half-width at half-max)
 
virtual void set_hwhm_x (double hwhm_x)
 Set the x-axis half-width at half-max (FWHM/2)
 
virtual void set_hwhm_y (double hwhm_y)
 Set the y-axis half-width at half-max (FWHM/2)
 
virtual void set_sigma_x (double sigma_x)=0
 Set the x-axis dispersion (sigma)
 
virtual void set_sigma_y (double sigma_y)=0
 Set the y-axis dispersion (sigma)
 
virtual void set_rho (double rho)=0
 Set the correlation parameter (rho)
 
virtual void set_hxyr (const std::array< double, 3 > &hxyr)
 Set hwhm_x, hwhm_y, rho from an array.
 
virtual void set_xyr (const std::array< double, 3 > &xyr)
 Set sigma_x, sigma_y, rho from an array.
 
virtual std::string repr (bool name_keywords=false, std::string_view namespace_separator=Object::CC_NAMESPACE_SEPARATOR) const override=0
 Return a full, callable string representation of this.
 
virtual std::string str () const override=0
 Return a brief, human-readable string representation of this.
 
bool operator== (const EllipseData &other) const
 
bool operator!= (const EllipseData &other) const
 

Static Public Member Functions

static void check (double size_x, double size_y, double rho, std::string_view error_suffix="")
 Check whether Ellipse parameter values are valid, throwing if not.
 
static void check_size (double size, std::string_view error_suffix="")
 Check whether an x- or x-yaxis size value is valid.
 
static void check_rho (double rho, std::string_view error_suffix="")
 Check whether a rho value is valid.
 
static std::string_view null_str (const std::string_view &namespace_separator)
 

Static Public Attributes

static constexpr std::string_view CC_NAMESPACE_SEPARATOR = "::"
 The C++ namespace separator.
 
static constexpr std::string_view NULL_STR_GENERAL = "None"
 
static constexpr std::string_view PY_NAMESPACE_SEPARATOR = "."
 

Friends

std::ostreamoperator<< (std::ostream &out, const EllipseData &obj)
 

Detailed Description

Interface for an object storing Ellipse data.

This is an abstract class designed to store data for an Ellipse to retrieve. No additional restrictions are placed on implementations. Some default implementations are provided.

Definition at line 132 of file ellipse.h.

Constructor & Destructor Documentation

◆ ~EllipseData()

virtual lsst::gauss2d::EllipseData::~EllipseData ( )
virtualdefault

Member Function Documentation

◆ check()

static void lsst::gauss2d::EllipseData::check ( double size_x,
double size_y,
double rho,
std::string_view error_suffix = "" )
inlinestatic

Check whether Ellipse parameter values are valid, throwing if not.

Definition at line 137 of file ellipse.h.

137 {
138 if (!(size_x >= 0) || !(size_y >= 0) || !(rho >= -1 && rho <= 1)) {
139 throw std::invalid_argument("Invalid size_x, size_y, rho=" + to_string_float(size_x) + ","
140 + to_string_float(size_y) + "," + to_string_float(rho)
141 + "; sigma_x,y >= 0 and 1 >= rho >= -1 required."
142 + std::string(error_suffix));
143 }
144 }
std::string to_string_float(const T value, const int precision=6, const bool scientific=true)
Definition to_string.h:15

◆ check_rho()

static void lsst::gauss2d::EllipseData::check_rho ( double rho,
std::string_view error_suffix = "" )
inlinestatic

Check whether a rho value is valid.

Definition at line 153 of file ellipse.h.

153 {
154 if (!(rho >= -1 && rho <= 1)) {
155 throw std::invalid_argument("Invalid rho=" + to_string_float(rho) + "; 1 >= rho >= -1 required."
156 + std::string(error_suffix));
157 }
158 }

◆ check_size()

static void lsst::gauss2d::EllipseData::check_size ( double size,
std::string_view error_suffix = "" )
inlinestatic

Check whether an x- or x-yaxis size value is valid.

Definition at line 146 of file ellipse.h.

146 {
147 if (!(size >= 0)) {
148 throw std::invalid_argument("Invalid size=" + to_string_float(size) + "; size >= 0 required."
149 + std::string(error_suffix));
150 }
151 }

◆ convolve()

void lsst::gauss2d::EllipseData::convolve ( const Ellipse & ell)
virtual

Convolve this ellipse with another.

Definition at line 149 of file ellipse.cc.

149 {
150 double sigma_x_ell = ell.get_sigma_x();
151 double sigma_y_ell = ell.get_sigma_y();
152 double sigma_x = this->get_sigma_x();
153 sigma_x = sqrt(sigma_x * sigma_x + sigma_x_ell * sigma_x_ell);
154 double sigma_y = this->get_sigma_y();
155 sigma_y = sqrt(sigma_y * sigma_y + sigma_y_ell * sigma_y_ell);
156 double rho = (this->get_cov_xy() + ell.get_cov_xy()) / (sigma_x * sigma_y);
157 this->set(sigma_x, sigma_y, rho);
158}
virtual double get_cov_xy() const
Return the covariance, equal to sigma_x*sigma_y*rho.
Definition ellipse.cc:160
virtual double get_sigma_y() const =0
Get sigma_y.
virtual double get_sigma_x() const =0
Get sigma_x.
daf::base::PropertySet * set
Definition fits.cc:931

◆ get_area()

double lsst::gauss2d::EllipseData::get_area ( ) const
virtual

Return the area of this ellipse, equal to pi*sigma_major*sigma_minor.

Definition at line 142 of file ellipse.cc.

142 {
143 double rho = this->get_rho();
144 return M_PI * this->get_sigma_xy() * sqrt(1 - rho * rho);
145}
#define M_PI
Definition ListMatch.cc:31
virtual double get_rho() const =0
Get rho.
virtual double get_sigma_xy() const
Return sigma_x*sigma_y.
Definition ellipse.cc:147

◆ get_cov_xy()

double lsst::gauss2d::EllipseData::get_cov_xy ( ) const
virtual

Return the covariance, equal to sigma_x*sigma_y*rho.

Definition at line 160 of file ellipse.cc.

160{ return this->get_sigma_x() * this->get_sigma_y() * this->get_rho(); }

◆ get_hwhm_x()

double lsst::gauss2d::EllipseData::get_hwhm_x ( ) const
virtual

Get the x-axis half-width at half-maximum.

Reimplemented in lsst::gauss2d::fit::GaussianParametricEllipse.

Definition at line 162 of file ellipse.cc.

162{ return M_SIGMA_HWHM * this->get_sigma_x(); };
const double M_SIGMA_HWHM
Definition ellipse.h:39

◆ get_hwhm_y()

double lsst::gauss2d::EllipseData::get_hwhm_y ( ) const
virtual

Get the y-axis half-width at half-maximum.

Reimplemented in lsst::gauss2d::fit::GaussianParametricEllipse.

Definition at line 164 of file ellipse.cc.

164{ return M_SIGMA_HWHM * this->get_sigma_y(); };

◆ get_hxyr()

std::array< double, 3 > lsst::gauss2d::EllipseData::get_hxyr ( ) const
virtual

Get hwhm_x, hwhm_y, rho.

Reimplemented in lsst::gauss2d::fit::GaussianParametricEllipse.

Definition at line 166 of file ellipse.cc.

166 {
167 return {this->get_hwhm_x(), this->get_hwhm_y(), this->get_rho()};
168}
virtual double get_hwhm_y() const
Get the y-axis half-width at half-maximum.
Definition ellipse.cc:164
virtual double get_hwhm_x() const
Get the x-axis half-width at half-maximum.
Definition ellipse.cc:162

◆ get_radius_trace()

double lsst::gauss2d::EllipseData::get_radius_trace ( ) const
virtual

Return the trace radius, equal to sqrt(sigma_x^2 + sigma_y^2)

Definition at line 173 of file ellipse.cc.

173{ return sqrt(this->get_sigma_x_sq() + this->get_sigma_y_sq()); }
virtual double get_sigma_x_sq() const
Get the square of sigma_x.
Definition ellipse.cc:175
virtual double get_sigma_y_sq() const
Get the square of sigma_y.
Definition ellipse.cc:180

◆ get_rho()

virtual double lsst::gauss2d::EllipseData::get_rho ( ) const
pure virtual

◆ get_sigma_x()

virtual double lsst::gauss2d::EllipseData::get_sigma_x ( ) const
pure virtual

◆ get_sigma_x_sq()

double lsst::gauss2d::EllipseData::get_sigma_x_sq ( ) const
virtual

Get the square of sigma_x.

Definition at line 175 of file ellipse.cc.

175 {
176 double sigma = this->get_sigma_x();
177 return sigma * sigma;
178}
afw::table::Key< double > sigma

◆ get_sigma_xy()

double lsst::gauss2d::EllipseData::get_sigma_xy ( ) const
virtual

Return sigma_x*sigma_y.

Definition at line 147 of file ellipse.cc.

147{ return this->get_sigma_x() * this->get_sigma_y(); }

◆ get_sigma_y()

virtual double lsst::gauss2d::EllipseData::get_sigma_y ( ) const
pure virtual

◆ get_sigma_y_sq()

double lsst::gauss2d::EllipseData::get_sigma_y_sq ( ) const
virtual

Get the square of sigma_y.

Definition at line 180 of file ellipse.cc.

180 {
181 double sigma = this->get_sigma_y();
182 return sigma * sigma;
183}

◆ get_xyr()

std::array< double, 3 > lsst::gauss2d::EllipseData::get_xyr ( ) const
virtual

Get sigma_x, sigma_y, rho.

Reimplemented in lsst::gauss2d::EllipseValues, lsst::gauss2d::fit::GaussianParametricEllipse, and lsst::gauss2d::fit::SersicEllipseData.

Definition at line 169 of file ellipse.cc.

169 {
170 return {this->get_sigma_x(), this->get_sigma_y(), this->get_rho()};
171}

◆ null_str()

static std::string_view lsst::gauss2d::Object::null_str ( const std::string_view & namespace_separator)
inlinestaticinherited

Definition at line 49 of file object.h.

49 {
50 return namespace_separator == CC_NAMESPACE_SEPARATOR ? "nullptr" : NULL_STR_GENERAL;
51 }
static constexpr std::string_view CC_NAMESPACE_SEPARATOR
The C++ namespace separator.
Definition object.h:45
static constexpr std::string_view NULL_STR_GENERAL
Definition object.h:46

◆ operator!=()

bool lsst::gauss2d::EllipseData::operator!= ( const EllipseData & other) const
inline

Definition at line 217 of file ellipse.h.

217{ return !(*this == other); };

◆ operator==()

bool lsst::gauss2d::EllipseData::operator== ( const EllipseData & other) const
inline

Definition at line 216 of file ellipse.h.

216{ return get_xyr() == other.get_xyr(); };
virtual std::array< double, 3 > get_xyr() const
Get sigma_x, sigma_y, rho.
Definition ellipse.cc:169

◆ repr()

virtual std::string lsst::gauss2d::EllipseData::repr ( bool name_keywords = false,
std::string_view namespace_separator = Object::CC_NAMESPACE_SEPARATOR ) const
overridepure virtual

Return a full, callable string representation of this.

Parameters
name_keywordsWhether to prefix arguments with "{name}=", where name is the arg name in the header (as with keyword arguments in Python).
namespace_separatorThe string to use to delimit namespaces, i.e. :: in C++ and . in Python.
Returns
A callable string representation of this, which should return an an identical object to this.
Note
The representation with name_keywords=false must be callable in C++. The representation with name_keywords=true should be callable in Python, if there are any bindings.

Implements lsst::gauss2d::Object.

Implemented in lsst::gauss2d::fit::SersicEllipseData, lsst::gauss2d::EllipseValues, lsst::gauss2d::Ellipse, and lsst::gauss2d::fit::GaussianParametricEllipse.

◆ set() [1/3]

void lsst::gauss2d::EllipseData::set ( const Covariance & covar)
virtual

Set values from a Covariance object.

Definition at line 263 of file ellipse.cc.

263 {
264 double sigma_x = covar.get_sigma_x_sq();
265 double sigma_y = covar.get_sigma_y_sq();
266 sigma_x = sqrt(sigma_x);
267 sigma_y = sqrt(sigma_y);
268 double rho = (sigma_x == 0 || sigma_y == 0) ? 0 : covar.get_cov_xy() / (sigma_x * sigma_y);
269 this->set(sigma_x, sigma_y, rho);
270}

◆ set() [2/3]

void lsst::gauss2d::EllipseData::set ( const EllipseMajor & ellipse)
virtual

Set values from an EllipseMajor object.

Definition at line 272 of file ellipse.cc.

272 {
273 const double r_major = ellipse.get_r_major();
274 if (r_major == 0) {
275 this->set(0, 0, 0);
276 return;
277 }
278 const double axrat = ellipse.get_axrat();
279 if (axrat == 1) {
280 this->set(r_major, r_major, 0);
281 return;
282 }
283 const auto [sin_th, cos_th] = sincos(ellipse.get_angle_radians());
284 const double sin_th_sq = sin_th * sin_th;
285 const double cos_th_sq = cos_th * cos_th;
286
287 const double r_major_sq = r_major * r_major;
288 const double r_minor_sq = r_major_sq * axrat * axrat;
289 const double sigma_x = sqrt(cos_th_sq * r_major_sq + sin_th_sq * r_minor_sq);
290 const double sigma_y = sqrt(sin_th_sq * r_major_sq + cos_th_sq * r_minor_sq);
291 double rho = (sigma_x == 0 || sigma_y == 0)
292 ? 0
293 : sin_th * cos_th * (r_major_sq - r_minor_sq) / (sigma_x * sigma_y);
294 this->set(sigma_x, sigma_y, rho);
295}
std::pair< S, S > sincos(S arg)
Definition ellipse.cc:36

◆ set() [3/3]

void lsst::gauss2d::EllipseData::set ( double sigma_x,
double sigma_y,
double rho )
virtual

Set sigma_x, sigma_y, rho.

Reimplemented in lsst::gauss2d::EllipseValues, lsst::gauss2d::fit::GaussianParametricEllipse, and lsst::gauss2d::fit::SersicEllipseData.

Definition at line 256 of file ellipse.cc.

256 {
257 this->check(sigma_x, sigma_y, rho);
258 this->set_sigma_x(sigma_x);
259 this->set_sigma_y(sigma_y);
260 this->set_rho(rho);
261}
virtual void set_rho(double rho)=0
Set the correlation parameter (rho)
virtual void set_sigma_y(double sigma_y)=0
Set the y-axis dispersion (sigma)
static void check(double size_x, double size_y, double rho, std::string_view error_suffix="")
Check whether Ellipse parameter values are valid, throwing if not.
Definition ellipse.h:137
virtual void set_sigma_x(double sigma_x)=0
Set the x-axis dispersion (sigma)

◆ set_h()

void lsst::gauss2d::EllipseData::set_h ( double hwhm_x,
double hwhm_y,
double rho )
virtual

Set hwhm_x, hwhm_y, rho (half-width at half-max)

Reimplemented in lsst::gauss2d::EllipseValues, lsst::gauss2d::fit::GaussianParametricEllipse, and lsst::gauss2d::fit::SersicEllipseData.

Definition at line 297 of file ellipse.cc.

297 {
298 EllipseData::check(hwhm_x, hwhm_y, rho);
299 this->set_hwhm_x(hwhm_x);
300 this->set_hwhm_y(hwhm_y);
301 this->set_rho(rho);
302}
virtual void set_hwhm_y(double hwhm_y)
Set the y-axis half-width at half-max (FWHM/2)
Definition ellipse.cc:304
virtual void set_hwhm_x(double hwhm_x)
Set the x-axis half-width at half-max (FWHM/2)
Definition ellipse.cc:303

◆ set_hwhm_x()

void lsst::gauss2d::EllipseData::set_hwhm_x ( double hwhm_x)
virtual

Set the x-axis half-width at half-max (FWHM/2)

Reimplemented in lsst::gauss2d::fit::GaussianParametricEllipse.

Definition at line 303 of file ellipse.cc.

303{ this->set_sigma_x(M_HWHM_SIGMA * hwhm_x); }
const double M_HWHM_SIGMA
Definition ellipse.h:38

◆ set_hwhm_y()

void lsst::gauss2d::EllipseData::set_hwhm_y ( double hwhm_y)
virtual

Set the y-axis half-width at half-max (FWHM/2)

Reimplemented in lsst::gauss2d::fit::GaussianParametricEllipse.

Definition at line 304 of file ellipse.cc.

304{ this->set_sigma_y(M_HWHM_SIGMA * hwhm_y); }

◆ set_hxyr()

void lsst::gauss2d::EllipseData::set_hxyr ( const std::array< double, 3 > & hxyr)
virtual

Set hwhm_x, hwhm_y, rho from an array.

Reimplemented in lsst::gauss2d::fit::GaussianParametricEllipse, and lsst::gauss2d::fit::SersicEllipseData.

Definition at line 305 of file ellipse.cc.

305{ this->set_h(hxyr[0], hxyr[1], hxyr[2]); }
virtual void set_h(double hwhm_x, double hwhm_y, double rho)
Set hwhm_x, hwhm_y, rho (half-width at half-max)
Definition ellipse.cc:297

◆ set_rho()

virtual void lsst::gauss2d::EllipseData::set_rho ( double rho)
pure virtual

◆ set_sigma_x()

virtual void lsst::gauss2d::EllipseData::set_sigma_x ( double sigma_x)
pure virtual

◆ set_sigma_y()

virtual void lsst::gauss2d::EllipseData::set_sigma_y ( double sigma_y)
pure virtual

◆ set_xyr()

void lsst::gauss2d::EllipseData::set_xyr ( const std::array< double, 3 > & xyr)
virtual

Set sigma_x, sigma_y, rho from an array.

Reimplemented in lsst::gauss2d::fit::GaussianParametricEllipse, and lsst::gauss2d::fit::SersicEllipseData.

Definition at line 306 of file ellipse.cc.

306{ this->set(xyr[0], xyr[1], xyr[2]); }

◆ str()

virtual std::string lsst::gauss2d::EllipseData::str ( ) const
overridepure virtual

Return a brief, human-readable string representation of this.

Implements lsst::gauss2d::Object.

Implemented in lsst::gauss2d::EllipseValues, lsst::gauss2d::Ellipse, lsst::gauss2d::fit::GaussianParametricEllipse, and lsst::gauss2d::fit::SersicEllipseData.

Friends And Related Symbol Documentation

◆ operator<<

std::ostream & operator<< ( std::ostream & out,
const EllipseData & obj )
friend

Definition at line 219 of file ellipse.h.

219 {
220 out << obj.str();
221 return out;
222 }

Member Data Documentation

◆ CC_NAMESPACE_SEPARATOR

constexpr std::string_view lsst::gauss2d::Object::CC_NAMESPACE_SEPARATOR = "::"
staticconstexprinherited

The C++ namespace separator.

Definition at line 45 of file object.h.

◆ NULL_STR_GENERAL

constexpr std::string_view lsst::gauss2d::Object::NULL_STR_GENERAL = "None"
staticconstexprinherited

Definition at line 46 of file object.h.

◆ PY_NAMESPACE_SEPARATOR

constexpr std::string_view lsst::gauss2d::Object::PY_NAMESPACE_SEPARATOR = "."
staticconstexprinherited

Definition at line 47 of file object.h.


The documentation for this class was generated from the following files: