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
19
20class TRandom3;
21
22namespace AmpGen
23{
33 {
34 public:
36 explicit LinearErrorPropagator( const std::vector<MinuitParameter*>& params );
40 LinearErrorPropagator( const TMatrixD& reducedCovarianceMatrix, const std::vector<MinuitParameter*>& params );
41
43 template <class FCN> double operator()( FCN fcn ) const
44 {
45 return getError( std::function<double(void)>(fcn) );
46 }
47
49 double getError( const std::function<double(void)>& fcn ) const;
50
52 std::vector<double> getVectorError( const std::function<std::vector<double>(void)>& fcn, size_t RANK ) const;
53
55 std::vector<double> combinationWeights( const std::vector<std::function<double(void)>>& functions );
56 TMatrixD covarianceMatrix(const std::vector<std::function<double(void)>>& functions );
57
59 TMatrixD correlationMatrix(const std::vector<std::function<double(void)>>& functions );
60
62 std::pair<double,double> combinationCovWeighted(const std::vector<std::function<double(void)>>& functions );
63
64 void add( const LinearErrorPropagator& p2 );
65 void reset();
66 size_t size() const;
67 const TMatrixD& cov() const;
68 const std::map<std::string, size_t> posMap() const;
69 const std::vector<MinuitParameter*>& params() const;
70
71 private:
72 TMatrixD m_cov;
73 std::vector<MinuitParameter*> m_parameters;
74
75 template <class FCN> double derivative( FCN fcn, const size_t& i ) const
76 {
77 double startingValue = m_parameters[i]->mean();
78 m_parameters[i]->setCurrentFitVal( startingValue + std::sqrt( m_cov( i, i ) ) );
79 double plus_variation = fcn();
80 m_parameters[i]->setCurrentFitVal( startingValue - std::sqrt( m_cov( i, i ) ) );
81 double minus_variation = fcn();
82 m_parameters[i]->setCurrentFitVal( startingValue );
83 return ( plus_variation - minus_variation ) / ( 2 * std::sqrt( m_cov( i, i ) ) );
84 }
85 };
86
88 {
89 public:
90 GaussErrorPropagator( const TMatrixD& reducedCovariance,
91 const std::vector<MinuitParameter*>& params,
92 TRandom3* rnd );
93 void perturb();
94 void reset();
95 void transpose();
96
97 private:
98 std::vector<MinuitParameter*> m_parameters;
99 std::vector<double> m_startingValues;
100 TRandom3* m_rand;
101 TMatrixD m_decomposedCholesky;
102 };
103
105 {
106 public:
107 NonlinearErrorPropagator( const std::function<double(void)>&, const TMatrixD&, const std::vector<MinuitParameter*>&);
108 TMatrixD correlationMatrix( const std::vector<std::function<double(void)>>& functions, TRandom3* rnd, const unsigned& nSamples = 50000);
109 private:
110 std::function<double(void)> m_fcn;
111 TMatrixD m_cov;
112 std::vector<MinuitParameter*> m_parameters;
113 };
114
115} // namespace AmpGen
116#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 * > &)