MaCh3  2.6.0
Reference Guide
PCAHandler.h
Go to the documentation of this file.
1 #pragma once
2 
3 // MaCh3 Includes
4 #include "Manager/Manager.h"
6 
38 class PCAHandler{
39  public:
41  PCAHandler();
42 
44  virtual ~PCAHandler();
45 
47  void Print() const;
49  int GetNumberPCAedParameters() const { return NumParPCA; }
50 
54  void SetupPointers(std::vector<double>* fCurr_Val,
55  std::vector<M3::float_t>* fProp_Val);
56 
63  void ConstructPCA(TMatrixDSym * CovMatrix, const int firstPCAd, const int lastPCAd,
64  const double eigen_thresh, const int _fNumPar);
65 
67  void TransferToPCA();
69  void TransferToParam();
70 
72  void ThrowParameters(const std::vector<std::unique_ptr<TRandom3>>& random_number,
73  double** throwMatrixCholDecomp,
74  double* randParams,
75  double* corr_throw,
76  const std::vector<double>& fPreFitValue,
77  const std::vector<double>& fLowBound,
78  const std::vector<double>& fUpBound,
79  int _fNumPar);
80 
82  void AcceptStep() _noexcept_;
84  void CorrelateSteps(const std::vector<double>& IndivStepScale,
85  const double GlobalStepScale,
86  const double* _restrict_ randParams,
87  const double* _restrict_ corr_throw) _noexcept_;
88 
91  void SetInitialParameters();
94  void SetBranches(TTree &tree, const bool SaveProposal, const std::vector<std::string>& Names);
97  void ToggleFixAllParameters(const std::vector<std::string>& Names);
100  void ToggleFixParameter(const int i, const std::vector<std::string>& Names);
101 
105  void SetParametersPCA(const std::vector<double> &pars) {
106  if (int(pars.size()) != NumParPCA) {
107  MACH3LOG_ERROR("Parameter arrays of incompatible size! Not changing parameters! has size {} but was expecting {}", pars.size(), NumParPCA);
108  throw MaCh3Exception(__FILE__ , __LINE__ );
109  }
110  int parsSize = int(pars.size());
111  for (int i = 0; i < parsSize; i++) {
112  _fParPropPCA(i) = pars[i];
113  }
114  //KS: Transfer to normal base
115  TransferToParam();
116  }
117 
120  bool IsParameterFixedPCA(const int i) const {
121  if (_fErrorPCA[i] < 0) { return true; }
122  else { return false; }
123  }
124 
126  const TMatrixD GetEigenVectors() const {
127  return eigen_vectors;
128  }
129 
133  void SetParPropPCA(const int i, const double value) {
134  _fParPropPCA(i) = value;
135  // And then transfer back to the parameter basis
136  TransferToParam();
137  }
142  void SetParCurrPCA(const int i, const double value) {
143  _fParCurrPCA(i) = value;
144  // And then transfer back to the parameter basis
145  TransferToParam();
146  }
147 
150  double GetParPropPCA(const int i) const {
151  return _fParPropPCA(i);
152  }
153 
156  double GetPreFitValuePCA(const int i) const {
157  return _fPreFitValuePCA[i];
158  }
159 
162  double GetParCurrPCA(const int i) const {
163  return _fParCurrPCA(i);
164  }
165 
167  const TMatrixD GetTransferMatrix() const {
168  return TransferMat;
169  }
170 
172  const TVectorD GetEigenValues() const {
173  return eigen_values;
174  }
176  const std::vector<double> GetEigenValuesMaster() const {
177  return eigen_values_master;
178  }
179 
182  bool IsParameterDecomposed(const int i) const {
183  if(isDecomposedPCA[i] >= 0) return false;
184  else return true;
185  }
186 
187  private:
189  void SanitisePCA(TMatrixDSym* CovMatrix);
190 
192  std::vector<double> _fPreFitValuePCA;
194  TVectorD _fParPropPCA;
196  TVectorD _fParCurrPCA;
198  std::vector<double> _fErrorPCA;
200  std::vector<int> isDecomposedPCA;
203 
205  TMatrixD TransferMat;
207  TMatrixD TransferMatT;
209  TVectorD eigen_values;
211  TMatrixD eigen_vectors;
213  std::vector<double> eigen_values_master;
214 
223 
225  std::vector<double>* _pCurrVal;
227  std::vector<M3::float_t>* _pPropVal;
228 };
229 
#define _noexcept_
KS: noexcept can help with performance but is terrible for debugging, this is meant to help easy way ...
Definition: Core.h:96
#define _restrict_
KS: Using restrict limits the effects of pointer aliasing, aiding optimizations. While reading I foun...
Definition: Core.h:108
#define MACH3LOG_ERROR
Definition: MaCh3Logger.h:37
Custom exception class used throughout MaCh3.
Class responsible for handling Principal Component Analysis (PCA) of covariance matrix.
Definition: PCAHandler.h:38
std::vector< int > isDecomposedPCA
If param is decomposed this will return -1, if not this will return enumerator to param in normal bas...
Definition: PCAHandler.h:200
void ThrowParameters(const std::vector< std::unique_ptr< TRandom3 >> &random_number, double **throwMatrixCholDecomp, double *randParams, double *corr_throw, const std::vector< double > &fPreFitValue, const std::vector< double > &fLowBound, const std::vector< double > &fUpBound, int _fNumPar)
Throw the parameters according to the covariance matrix. This shouldn't be used in MCMC code ase it c...
Definition: PCAHandler.cpp:321
void ToggleFixAllParameters(const std::vector< std::string > &Names)
fix parameters at prior values
Definition: PCAHandler.cpp:298
TMatrixD TransferMat
Matrix used to converting from PCA base to normal base.
Definition: PCAHandler.h:205
const TMatrixD GetTransferMatrix() const
Get transfer matrix allowing to go from PCA base to normal base.
Definition: PCAHandler.h:167
const std::vector< double > GetEigenValuesMaster() const
Get eigen value of only decomposed parameters, if you want for all parameters use GetEigenValues.
Definition: PCAHandler.h:176
double GetParCurrPCA(const int i) const
Get current parameter value using PCA.
Definition: PCAHandler.h:162
std::vector< double > eigen_values_master
Eigen values which have dimension equal to _fNumParPCA, and can be used in CorrelateSteps.
Definition: PCAHandler.h:213
void SetBranches(TTree &tree, const bool SaveProposal, const std::vector< std::string > &Names)
set branches for output file
Definition: PCAHandler.cpp:283
TMatrixD eigen_vectors
Eigen vectors only of params which are being decomposed.
Definition: PCAHandler.h:211
TVectorD _fParPropPCA
CW: Current parameter value in PCA base.
Definition: PCAHandler.h:194
bool IsParameterFixedPCA(const int i) const
Is parameter fixed in PCA base or not.
Definition: PCAHandler.h:120
void SetupPointers(std::vector< double > *fCurr_Val, std::vector< M3::float_t > *fProp_Val)
KS: Setup pointers to current and proposed parameter value which we need to convert them to PCA base ...
Definition: PCAHandler.cpp:16
double GetParPropPCA(const int i) const
Get current parameter value using PCA.
Definition: PCAHandler.h:150
int NumParPCA
Number of parameters in PCA base.
Definition: PCAHandler.h:202
void SetInitialParameters()
KS: Transfer the starting parameters to the PCA basis, you don't want to start with zero....
Definition: PCAHandler.cpp:246
int GetNumberPCAedParameters() const
Retrieve number of parameters in PCA base.
Definition: PCAHandler.h:49
std::vector< M3::float_t > * _pPropVal
Pointer to proposed value of the parameter.
Definition: PCAHandler.h:227
std::vector< double > * _pCurrVal
Pointer to current value of the parameter.
Definition: PCAHandler.h:225
TMatrixD TransferMatT
Matrix used to converting from normal base to PCA base.
Definition: PCAHandler.h:207
void AcceptStep() _noexcept_
Accepted this step.
Definition: PCAHandler.cpp:180
void CorrelateSteps(const std::vector< double > &IndivStepScale, const double GlobalStepScale, const double *_restrict_ randParams, const double *_restrict_ corr_throw) _noexcept_
Use Cholesky throw matrix for better step proposal.
Definition: PCAHandler.cpp:195
void SetParPropPCA(const int i, const double value)
Set proposed value for parameter in PCA base.
Definition: PCAHandler.h:133
void TransferToPCA()
Transfer param values from normal base to PCA base.
Definition: PCAHandler.cpp:231
virtual ~PCAHandler()
Destructor.
Definition: PCAHandler.cpp:11
double GetPreFitValuePCA(const int i) const
Get current parameter value using PCA.
Definition: PCAHandler.h:156
bool IsParameterDecomposed(const int i) const
Check if parameter in PCA base is decomposed or not.
Definition: PCAHandler.h:182
TVectorD eigen_values
Eigen value only of particles which are being decomposed.
Definition: PCAHandler.h:209
void TransferToParam()
Transfer param values from PCA base to normal base.
Definition: PCAHandler.cpp:256
int LastPCAdpar
Index of the last param that is being decomposed.
Definition: PCAHandler.h:220
int nKeptPCApars
Total number that remained after applying PCA Threshold.
Definition: PCAHandler.h:216
const TVectorD GetEigenValues() const
Get eigen values for all parameters, if you want for decomposed only parameters use GetEigenValuesMas...
Definition: PCAHandler.h:172
std::vector< double > _fErrorPCA
Tells if parameter is fixed in PCA base or not.
Definition: PCAHandler.h:198
PCAHandler()
Constructor.
Definition: PCAHandler.cpp:4
std::vector< double > _fPreFitValuePCA
Prefit value for PCA params.
Definition: PCAHandler.h:192
void ToggleFixParameter(const int i, const std::vector< std::string > &Names)
fix parameters at prior values
Definition: PCAHandler.cpp:304
void SetParCurrPCA(const int i, const double value)
Set current value for parameter in PCA base.
Definition: PCAHandler.h:142
void Print() const
KS: Print info about PCA parameters.
Definition: PCAHandler.cpp:274
TVectorD _fParCurrPCA
CW: Proposed parameter value in PCA base.
Definition: PCAHandler.h:196
void SanitisePCA(TMatrixDSym *CovMatrix)
KS: Make sure decomposed matrix isn't correlated with undecomposed.
Definition: PCAHandler.cpp:151
void SetParametersPCA(const std::vector< double > &pars)
Set values for PCA parameters in PCA base.
Definition: PCAHandler.h:105
void ConstructPCA(TMatrixDSym *CovMatrix, const int firstPCAd, const int lastPCAd, const double eigen_thresh, const int _fNumPar)
CW: Calculate eigen values, prepare transition matrices and remove param based on defined threshold.
Definition: PCAHandler.cpp:24
int FirstPCAdpar
Index of the first param that is being decomposed.
Definition: PCAHandler.h:218
const TMatrixD GetEigenVectors() const
Get eigen vectors of covariance matrix, only works with PCA.
Definition: PCAHandler.h:126
double eigen_threshold
CW: Threshold based on which we remove parameters in eigen base.
Definition: PCAHandler.h:222