Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
BaseLikelihood.h
Go to the documentation of this file.
1#ifndef BASELIKELIHOOD_H
2#define BASELIKELIHOOD_H
3
4#include <memory>
5#include <vector>
6
8#include "JointDistribution.h"
9#include "Math.h"
10
35using ModelFn = std::function<std::vector<double>(const std::vector<double>& p, const std::vector<double>& eta)>;
36
47 std::unique_ptr<JointDistribution> nuisance_dist;
48 std::unique_ptr<JointDistribution> exp_obs_dist;
49 std::vector<double>exp_obs_values;
50 std::vector<fit_app::ParameterDefinition> nuis_defs;
51 std::vector<fit_app::ParameterDefinition> fp_defs;
52};
53
76public:
85 BaseLikelihood(const ModelFn& model, std::shared_ptr<LikelihoodContext> ctx, size_t p_dim);
86
98 double nll(const std::vector<double>& theta) const override;
99
108 std::vector<fit_app::ParameterDefinition> get_param_defs() const override {
109 auto p_defs = ctx->fp_defs;
110 p_defs.insert(p_defs.end(), ctx->nuis_defs.begin(), ctx->nuis_defs.end());
111 return p_defs;
112 }
113
119 std::size_t dim() const override;
120
131 void enable_debug_trace(std::size_t max_evals = 25) {
133 debug_trace_max_evals_ = max_evals;
135 debug_have_ref_theta_ = false;
136 debug_have_ref_res_ = false;
137 debug_ref_theta_.clear();
138 debug_ref_res_.clear();
139 }
140
145 debug_trace_enabled_ = false;
146 }
147
149 std::size_t p_dimension() const override;
150
152 std::size_t eta_dimension() const override;
153
155 std::vector<double> central_p() const override;
156
158 std::vector<double> central_eta() const override;
159
161 std::vector<double> predict(
162 const std::vector<double>& p,
163 const std::vector<double>& eta
164 ) const override;
165
167 std::vector<double> residuals(
168 const std::vector<double>& p,
169 const std::vector<double>& eta
170 ) const override;
171
173 double nll_from_split(
174 const std::vector<double>& p,
175 const std::vector<double>& eta
176 ) const override;
177
180 const std::vector<double>& r
181 ) const override;
182
185 const std::vector<double>& eta
186 ) const override;
187
188protected:
189 std::shared_ptr<LikelihoodContext> ctx;
191 std::size_t p_dim;
192
193 mutable bool debug_trace_enabled_ = false;
194 mutable std::size_t debug_trace_max_evals_ = 0;
195 mutable std::size_t debug_eval_count_ = 0;
196
197 mutable bool debug_have_ref_theta_ = false;
198 mutable bool debug_have_ref_res_ = false;
199 mutable std::vector<double> debug_ref_theta_;
200 mutable std::vector<double> debug_ref_res_;
201
202private:
210 static double max_abs_diff(const std::vector<double>& a,
211 const std::vector<double>& b) {
212 if (a.size() != b.size()) {
213 return std::numeric_limits<double>::quiet_NaN();
214 }
215
216 double out = 0.0;
217 for (std::size_t i = 0; i < a.size(); ++i) {
218 out = std::max(out, std::abs(a[i] - b[i]));
219 }
220 return out;
221 }
222
234 void maybe_log_debug_eval(const std::vector<double>& theta,
235 const std::vector<double>& p,
236 const std::vector<double>& eta,
237 const std::vector<double>& res,
238 double ell_obs,
239 double ell_nuis,
240 double nll_value) const;
241};
242
243#endif // BASELIKELIHOOD_H
std::function< std::vector< double >(const std::vector< double > &p, const std::vector< double > &eta)> ModelFn
Model function signature used by BaseLikelihood.
Interface for likelihoods that separate fitted and nuisance parameters.
Joint probability distribution built from marginals and a copula.
Default implementation of a profileable negative log-likelihood.
std::shared_ptr< LikelihoodContext > ctx
Shared statistical context used by the likelihood.
std::vector< double > central_eta() const override
Returns the central values of the nuisance parameters.
std::vector< double > central_p() const override
Returns the central values of the fitted parameters.
std::vector< double > predict(const std::vector< double > &p, const std::vector< double > &eta) const override
bool debug_have_ref_theta_
Whether the debug reference parameter vector is set.
std::size_t p_dimension() const override
Returns the dimension of the fitted-parameter block.
void disable_debug_trace()
Disables debug tracing of likelihood evaluations.
RealMatrix nuisance_curvature(const std::vector< double > &eta) const override
RealMatrix observable_curvature(const std::vector< double > &r) const override
std::vector< double > debug_ref_res_
First traced residual vector used as debug reference.
std::size_t debug_trace_max_evals_
Maximum number of traced evaluations.
std::vector< double > residuals(const std::vector< double > &p, const std::vector< double > &eta) const override
bool debug_trace_enabled_
Whether evaluation debug tracing is enabled.
double nll(const std::vector< double > &theta) const override
Evaluates the negative log-likelihood for a full parameter vector.
void enable_debug_trace(std::size_t max_evals=25)
Enables debug tracing for likelihood evaluations.
std::vector< double > debug_ref_theta_
First traced parameter vector used as debug reference.
std::size_t eta_dimension() const override
Returns the dimension of the nuisance-parameter block.
std::vector< fit_app::ParameterDefinition > get_param_defs() const override
Returns all parameter definitions in likelihood-vector order.
double nll_from_split(const std::vector< double > &p, const std::vector< double > &eta) const override
std::size_t dim() const override
Returns the total likelihood dimension.
ModelFn model
Model function evaluated by the likelihood.
bool debug_have_ref_res_
Whether the debug reference residual vector is set.
std::size_t debug_eval_count_
Number of evaluations already traced.
std::size_t p_dim
Dimension of the fitted-parameter block.
Extension of ILikelihood with explicit parameter-block access.
Shared immutable-like data required to evaluate a likelihood.
std::vector< fit_app::ParameterDefinition > fp_defs
Definitions of fitted parameters.
std::vector< fit_app::ParameterDefinition > nuis_defs
Definitions of nuisance parameters.
std::vector< double > exp_obs_values
Nominal experimental observable values.
std::unique_ptr< JointDistribution > exp_obs_dist
Joint distribution of observable residuals.
std::unique_ptr< JointDistribution > nuisance_dist
Joint distribution of nuisance parameters.