1#ifndef AMPGEN_ERRORPROPAGATOR_H
2#define AMPGEN_ERRORPROPAGATOR_H
44 double getError(
const std::function<
double(
void)> &
fcn)
const;
47 std::vector<double>
getVectorError(
const std::function<std::vector<double>(
void)> &
fcn,
size_t RANK)
const;
50 std::vector<double>
combinationWeights(
const std::vector<std::function<
double(
void)>> &functions);
62 const TMatrixD &
cov()
const;
63 const std::map<std::string, size_t>
posMap()
const;
64 const std::vector<MinuitParameter *> &
params()
const;
68 std::vector<MinuitParameter *> m_parameters;
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)));
83 GaussErrorPropagator(
const TMatrixD &reducedCovariance,
const std::vector<MinuitParameter *> ¶ms, TRandom3 *rnd);
89 std::vector<MinuitParameter *> m_parameters;
90 std::vector<double> m_startingValues;
92 TMatrixD m_decomposedCholesky;
98 TMatrixD
correlationMatrix(
const std::vector<std::function<
double(
void)>> &functions, TRandom3 *rnd,
const unsigned &nSamples = 50000);
101 std::function<double(
void)> m_fcn;
103 std::vector<MinuitParameter *> m_parameters;
GaussErrorPropagator(const TMatrixD &reducedCovariance, const std::vector< MinuitParameter * > ¶ms, TRandom3 *rnd)
LinearErrorPropagator(const MinuitParameterSet ¶ms)
Constructor for LinearErrorPropagator, taking a covariance matrix and a vector parameters.
LinearErrorPropagator(const TMatrixD &reducedCovarianceMatrix, const std::vector< MinuitParameter * > ¶ms)
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 * > ¶ms)
< 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 * > &)