AmpGen 2.1
Loading...
Searching...
No Matches
ErrorPropagator.h
Go to the documentation of this file.
1#ifndef AMPGEN_ERRORPROPAGATOR_H
2#define AMPGEN_ERRORPROPAGATOR_H
3
4#include <cmath>
5#include <stddef.h>
6#include <string>
7#include <vector>
8#include <map>
9#include <functional>
10#include <array>
11#include <utility>
12
13#include <TMatrixD.h>
14#include <TRandom3.h>
15
17#include "AmpGen/MsgService.h"
18
19class TRandom3;
20
21namespace AmpGen {
31 public:
33 explicit LinearErrorPropagator(const std::vector<MinuitParameter *> &params);
38 LinearErrorPropagator(const TMatrixD &reducedCovarianceMatrix, const std::vector<MinuitParameter *> &params);
39
41 template <class FCN> double operator()(FCN fcn) const { return getError(std::function<double(void)>(fcn)); }
42
44 double getError(const std::function<double(void)> &fcn) const;
45
47 std::vector<double> getVectorError(const std::function<std::vector<double>(void)> &fcn, size_t RANK) const;
48
50 std::vector<double> combinationWeights(const std::vector<std::function<double(void)>> &functions);
51 TMatrixD covarianceMatrix(const std::vector<std::function<double(void)>> &functions);
52
54 TMatrixD correlationMatrix(const std::vector<std::function<double(void)>> &functions);
55
57 std::pair<double, double> combinationCovWeighted(const std::vector<std::function<double(void)>> &functions);
58
59 void add(const LinearErrorPropagator &p2);
60 void reset();
61 size_t size() const;
62 const TMatrixD &cov() const;
63 const std::map<std::string, size_t> posMap() const;
64 const std::vector<MinuitParameter *> &params() const;
65
66 private:
67 TMatrixD m_cov;
68 std::vector<MinuitParameter *> m_parameters;
69
70 template <class FCN> double derivative(FCN fcn, const size_t &i) const {
71 double startingValue = m_parameters[i]->mean();
72 m_parameters[i]->setCurrentFitVal(startingValue + std::sqrt(m_cov(i, i)));
73 double plus_variation = fcn();
74 m_parameters[i]->setCurrentFitVal(startingValue - std::sqrt(m_cov(i, i)));
75 double minus_variation = fcn();
76 m_parameters[i]->setCurrentFitVal(startingValue);
77 return (plus_variation - minus_variation) / (2 * std::sqrt(m_cov(i, i)));
78 }
79 };
80
82 public:
83 GaussErrorPropagator(const TMatrixD &reducedCovariance, const std::vector<MinuitParameter *> &params, TRandom3 *rnd);
84 void perturb();
85 void reset();
86 void transpose();
87
88 private:
89 std::vector<MinuitParameter *> m_parameters;
90 std::vector<double> m_startingValues;
91 TRandom3 *m_rand;
92 TMatrixD m_decomposedCholesky;
93 };
94
96 public:
97 NonlinearErrorPropagator(const std::function<double(void)> &, const TMatrixD &, const std::vector<MinuitParameter *> &);
98 TMatrixD correlationMatrix(const std::vector<std::function<double(void)>> &functions, TRandom3 *rnd, const unsigned &nSamples = 50000);
99
100 private:
101 std::function<double(void)> m_fcn;
102 TMatrixD m_cov;
103 std::vector<MinuitParameter *> m_parameters;
104 };
105
106} // namespace AmpGen
107#endif
GaussErrorPropagator(const TMatrixD &reducedCovariance, const std::vector< MinuitParameter * > &params, TRandom3 *rnd)
LinearErrorPropagator(const MinuitParameterSet &params)
Constructor for LinearErrorPropagator, taking a covariance matrix and a vector parameters.
LinearErrorPropagator(const TMatrixD &reducedCovarianceMatrix, const std::vector< MinuitParameter * > &params)
Calculates the uncertainty on functor fcn.
double getError(const std::function< double(void)> &fcn) const
Calculate the uncertainties on a functor that returns a vector of size RANK.
const std::map< std::string, size_t > posMap() const
std::pair< double, double > combinationCovWeighted(const std::vector< std::function< double(void)> > &functions)
Calculate the covariance-matrix weighted combination of functor set functions.
double operator()(FCN fcn) const
Calculates the error on functor fcn (should take no arguments and return a double).
const TMatrixD & cov() const
TMatrixD correlationMatrix(const std::vector< std::function< double(void)> > &functions)
Calculate the correlation matrix of functor set functions.
const std::vector< MinuitParameter * > & params() const
std::vector< double > combinationWeights(const std::vector< std::function< double(void)> > &functions)
Calculate the variance-covariance matrix of functor set functions.
TMatrixD covarianceMatrix(const std::vector< std::function< double(void)> > &functions)
LinearErrorPropagator(const std::vector< MinuitParameter * > &params)
< Constructor for LinearErrorPropagator taking a vector of free parameters, assumes a diagonal covari...
void add(const LinearErrorPropagator &p2)
std::vector< double > getVectorError(const std::function< std::vector< double >(void)> &fcn, size_t RANK) const
TMatrixD correlationMatrix(const std::vector< std::function< double(void)> > &functions, TRandom3 *rnd, const unsigned &nSamples=50000)
NonlinearErrorPropagator(const std::function< double(void)> &, const TMatrixD &, const std::vector< MinuitParameter * > &)