LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
lsst::gauss2d::fit::GaussianPrior Class Reference

A 1D Gaussian prior for a single Parameter. More...

#include <gaussianprior.h>

Inheritance diagram for lsst::gauss2d::fit::GaussianPrior:
lsst::gauss2d::fit::Prior lsst::gauss2d::Object

Public Member Functions

 GaussianPrior (std::shared_ptr< const ParamBase > param, double mean, double stddev, bool transformed)
 Construct a GaussianPrior from a Parameter and mean/std.
 
 ~GaussianPrior ()
 
PriorEvaluation evaluate (bool calc_jacobians=false, bool normalize_loglike=false) const override
 Evaluate the log likelihood and residual-dependent terms.
 
const ParamBaseget_param () const
 
std::vector< double > get_loglike_const_terms () const override
 Return the constant terms of the log likelihood (dependent on stddevs only)
 
double get_mean () const
 
double get_stddev () const
 
bool get_transformed () const
 
void set_mean (double mean)
 
void set_stddev (double stddev)
 
void set_transformed (bool transformed)
 
size_t size () const override
 
std::string repr (bool name_keywords=false, std::string_view namespace_separator=Object::CC_NAMESPACE_SEPARATOR) const override
 Return a full, callable string representation of this.
 
std::string str () const override
 Return a brief, human-readable string representation of this.
 

Static Public Member Functions

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 = "."
 

Detailed Description

A 1D Gaussian prior for a single Parameter.

Definition at line 15 of file gaussianprior.h.

Constructor & Destructor Documentation

◆ GaussianPrior()

lsst::gauss2d::fit::GaussianPrior::GaussianPrior ( std::shared_ptr< const ParamBase > param,
double mean,
double stddev,
bool transformed )
explicit

Construct a GaussianPrior from a Parameter and mean/std.

deviation.

Parameters
paramThe ParamBase to compute a prior for.
meanThe mean value of the prior.
stddevThe standard deviation of the prior.
transformedWhether the prior is based on the transformed value of param.

Definition at line 33 of file gaussianprior.cc.

35 : _param(std::move(param)), _transformed(transformed) {
36 if (_param == nullptr) throw std::invalid_argument("param must not be null");
37 set_mean(mean);
38 set_stddev(stddev);
39 double loglike = this->evaluate().loglike;
40 if (!std::isfinite(loglike)) {
41 throw std::invalid_argument(this->str() + " has non-finite loglike=" + std::to_string(loglike)
42 + " on init");
43 }
44}
PriorEvaluation evaluate(bool calc_jacobians=false, bool normalize_loglike=false) const override
Evaluate the log likelihood and residual-dependent terms.
std::string str() const override
Return a brief, human-readable string representation of this.
T isfinite(T... args)
T move(T... args)
@ loglike
Compute the log likelihood only.
T to_string(T... args)

◆ ~GaussianPrior()

lsst::gauss2d::fit::GaussianPrior::~GaussianPrior ( )

Definition at line 46 of file gaussianprior.cc.

46{};

Member Function Documentation

◆ evaluate()

PriorEvaluation lsst::gauss2d::fit::GaussianPrior::evaluate ( bool calc_jacobians = false,
bool normalize_loglike = false ) const
overridevirtual

Evaluate the log likelihood and residual-dependent terms.

Parameters
calc_jacobiansWhether to compute the Jacobian and residual terms.
normalize_loglikeWhether to add the constant (sigma-dependent) factors to the log likehood.
Returns
The result of the evaluation.

Implements lsst::gauss2d::fit::Prior.

Definition at line 48 of file gaussianprior.cc.

48 {
49 double residual
50 = ((_transformed ? _param->get_value_transformed() : _param->get_value()) - _mean) / _stddev;
51 if (!std::isfinite(residual)) {
52 throw std::runtime_error(this->str()
53 + ".evaluate() got non-finite residual=" + std::to_string(residual));
54 }
55 double prior = -residual * residual / 2.;
56 if (normalize) prior += this->get_loglike_const_terms()[0];
58 // dresidual/dx = d((x - mean)/stddev)/dx = 1/stddev
59 if (calc_jacobians) {
60 jacobians[*_param] = std::vector<double>{1.0 / (_stddev * (_transformed ? 1.0 : _param->get_transform_derivative()))};
61 }
62
63 return PriorEvaluation{prior, {residual}, jacobians};
64}
std::vector< double > get_loglike_const_terms() const override
Return the constant terms of the log likelihood (dependent on stddevs only)

◆ get_loglike_const_terms()

std::vector< double > lsst::gauss2d::fit::GaussianPrior::get_loglike_const_terms ( ) const
overridevirtual

Return the constant terms of the log likelihood (dependent on stddevs only)

Implements lsst::gauss2d::fit::Prior.

Definition at line 66 of file gaussianprior.cc.

66 {
67 return {LOG_1_M_LOG_SQRT_2_PI - log(_stddev)};
68}
const double LOG_1_M_LOG_SQRT_2_PI
Definition math.h:10

◆ get_mean()

double lsst::gauss2d::fit::GaussianPrior::get_mean ( ) const

Definition at line 70 of file gaussianprior.cc.

70{ return _mean; };

◆ get_param()

const ParamBase & lsst::gauss2d::fit::GaussianPrior::get_param ( ) const

Definition at line 71 of file gaussianprior.cc.

71{ return *_param; };

◆ get_stddev()

double lsst::gauss2d::fit::GaussianPrior::get_stddev ( ) const

Definition at line 72 of file gaussianprior.cc.

72{ return _stddev; };

◆ get_transformed()

bool lsst::gauss2d::fit::GaussianPrior::get_transformed ( ) const

Definition at line 73 of file gaussianprior.cc.

73{ return _transformed; };

◆ 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

◆ repr()

std::string lsst::gauss2d::fit::GaussianPrior::repr ( bool name_keywords = false,
std::string_view namespace_separator = Object::CC_NAMESPACE_SEPARATOR ) const
overridevirtual

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.

Definition at line 90 of file gaussianprior.cc.

90 {
91 return type_name_str<GaussianPrior>(false, namespace_separator) + "(" + (name_keywords ? "param=" : "")
92 + _param->repr(name_keywords, namespace_separator) + ", " + (name_keywords ? "mean=" : "")
93 + to_string_float(_mean) + ", " + (name_keywords ? "stddev=" : "") + to_string_float(_stddev)
94 + ", " + (name_keywords ? "transformed=" : "") + std::to_string(_transformed) + ")";
95}
std::string to_string_float(const T value, const int precision=6, const bool scientific=true)
Definition to_string.h:15

◆ set_mean()

void lsst::gauss2d::fit::GaussianPrior::set_mean ( double mean)

Definition at line 75 of file gaussianprior.cc.

75 {
76 if (!std::isfinite(mean))
77 throw std::invalid_argument("mean=" + to_string_float(mean) + " must be finite");
78 _mean = mean;
79}

◆ set_stddev()

void lsst::gauss2d::fit::GaussianPrior::set_stddev ( double stddev)

Definition at line 80 of file gaussianprior.cc.

80 {
81 if (!(std::isfinite(stddev) && (stddev > 0))) {
82 throw std::invalid_argument("stddev=" + to_string_float(stddev) + " must be finite and >0");
83 }
84 _stddev = stddev;
85}

◆ set_transformed()

void lsst::gauss2d::fit::GaussianPrior::set_transformed ( bool transformed)

Definition at line 86 of file gaussianprior.cc.

86{ _transformed = transformed; };

◆ size()

size_t lsst::gauss2d::fit::GaussianPrior::size ( ) const
overridevirtual

Implements lsst::gauss2d::fit::Prior.

Definition at line 88 of file gaussianprior.cc.

88{ return 1; };

◆ str()

std::string lsst::gauss2d::fit::GaussianPrior::str ( ) const
overridevirtual

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

Implements lsst::gauss2d::Object.

Definition at line 97 of file gaussianprior.cc.

97 {
98 return type_name_str<GaussianPrior>(true) + "(param=" + _param->str() + ", mean=" + to_string_float(_mean)
99 + ", stddev=" + std::to_string(_stddev) + ", transformed=" + to_string_float(_transformed) + ")";
100}

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: