MaCh3  2.5.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 
121  bool IsParameterFixedPCA(const int i) const {
122  if (_fErrorPCA[i] < 0) { return true; }
123  else { return false; }
124  }
125 
128  const TMatrixD GetEigenVectors() const {
129  return eigen_vectors;
130  }
131 
136  void SetParPropPCA(const int i, const double value) {
137  _fParPropPCA(i) = value;
138  // And then transfer back to the parameter basis
139  TransferToParam();
140  }
145  void SetParCurrPCA(const int i, const double value) {
146  _fParCurrPCA(i) = value;
147  // And then transfer back to the parameter basis
148  TransferToParam();
149  }
150 
154  double GetParPropPCA(const int i) const {
155  return _fParPropPCA(i);
156  }
157 
161  double GetPreFitValuePCA(const int i) const {
162  return _fPreFitValuePCA[i];
163  }
164 
168  double GetParCurrPCA(const int i) const {
169  return _fParCurrPCA(i);
170  }
171 
174  const TMatrixD GetTransferMatrix() const {
175  return TransferMat;
176  }
177 
180  const TVectorD GetEigenValues() const {
181  return eigen_values;
182  }
185  const std::vector<double> GetEigenValuesMaster() const {
186  return eigen_values_master;
187  }
188 
192  bool IsParameterDecomposed(const int i) const {
193  if(isDecomposedPCA[i] >= 0) return false;
194  else return true;
195  }
196 
197  #ifdef MACH3_DEBUG
199  void DebugPCA(const double sum, TMatrixD temp, int NumPar);
200  #endif
201 
202  private:
204  void SanitisePCA(TMatrixDSym* CovMatrix);
205 
207  std::vector<double> _fPreFitValuePCA;
209  TVectorD _fParPropPCA;
211  TVectorD _fParCurrPCA;
213  std::vector<double> _fErrorPCA;
215  std::vector<int> isDecomposedPCA;
218 
220  TMatrixD TransferMat;
222  TMatrixD TransferMatT;
224  TVectorD eigen_values;
226  TMatrixD eigen_vectors;
228  std::vector<double> eigen_values_master;
229 
238 
240  std::vector<double>* _pCurrVal;
242  std::vector<M3::float_t>* _pPropVal;
243 };
244 
#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:215
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:333
void ToggleFixAllParameters(const std::vector< std::string > &Names)
fix parameters at prior values
Definition: PCAHandler.cpp:309
TMatrixD TransferMat
Matrix used to converting from PCA base to normal base.
Definition: PCAHandler.h:220
const TMatrixD GetTransferMatrix() const
Get transfer matrix allowing to go from PCA base to normal base.
Definition: PCAHandler.h:174
const std::vector< double > GetEigenValuesMaster() const
Get eigen value of only decomposed parameters, if you want for all parameters use GetEigenValues.
Definition: PCAHandler.h:185
double GetParCurrPCA(const int i) const
Get current parameter value using PCA.
Definition: PCAHandler.h:168
std::vector< double > eigen_values_master
Eigen values which have dimension equal to _fNumParPCA, and can be used in CorrelateSteps.
Definition: PCAHandler.h:228
void SetBranches(TTree &tree, const bool SaveProposal, const std::vector< std::string > &Names)
set branches for output file
Definition: PCAHandler.cpp:294
TMatrixD eigen_vectors
Eigen vectors only of params which are being decomposed.
Definition: PCAHandler.h:226
TVectorD _fParPropPCA
CW: Current parameter value in PCA base.
Definition: PCAHandler.h:209
bool IsParameterFixedPCA(const int i) const
Is parameter fixed in PCA base or not.
Definition: PCAHandler.h:121
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:29
double GetParPropPCA(const int i) const
Get current parameter value using PCA.
Definition: PCAHandler.h:154
int NumParPCA
Number of parameters in PCA base.
Definition: PCAHandler.h:217
void SetInitialParameters()
KS: Transfer the starting parameters to the PCA basis, you don't want to start with zero....
Definition: PCAHandler.cpp:257
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:242
std::vector< double > * _pCurrVal
Pointer to current value of the parameter.
Definition: PCAHandler.h:240
TMatrixD TransferMatT
Matrix used to converting from normal base to PCA base.
Definition: PCAHandler.h:222
void AcceptStep() _noexcept_
Accepted this step.
Definition: PCAHandler.cpp:191
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:206
void SetParPropPCA(const int i, const double value)
Set proposed value for parameter in PCA base.
Definition: PCAHandler.h:136
void TransferToPCA()
Transfer param values from normal base to PCA base.
Definition: PCAHandler.cpp:242
virtual ~PCAHandler()
Destructor.
Definition: PCAHandler.cpp:24
double GetPreFitValuePCA(const int i) const
Get current parameter value using PCA.
Definition: PCAHandler.h:161
bool IsParameterDecomposed(const int i) const
Check if parameter in PCA base is decomposed or not.
Definition: PCAHandler.h:192
TVectorD eigen_values
Eigen value only of particles which are being decomposed.
Definition: PCAHandler.h:224
void TransferToParam()
Transfer param values from PCA base to normal base.
Definition: PCAHandler.cpp:267
int LastPCAdpar
Index of the last param that is being decomposed.
Definition: PCAHandler.h:235
int nKeptPCApars
Total number that remained after applying PCA Threshold.
Definition: PCAHandler.h:231
const TVectorD GetEigenValues() const
Get eigen values for all parameters, if you want for decomposed only parameters use GetEigenValuesMas...
Definition: PCAHandler.h:180
std::vector< double > _fErrorPCA
Tells if parameter is fixed in PCA base or not.
Definition: PCAHandler.h:213
PCAHandler()
Constructor.
Definition: PCAHandler.cpp:17
std::vector< double > _fPreFitValuePCA
Prefit value for PCA params.
Definition: PCAHandler.h:207
void ToggleFixParameter(const int i, const std::vector< std::string > &Names)
fix parameters at prior values
Definition: PCAHandler.cpp:315
void SetParCurrPCA(const int i, const double value)
Set current value for parameter in PCA base.
Definition: PCAHandler.h:145
void Print() const
KS: Print info about PCA parameters.
Definition: PCAHandler.cpp:285
TVectorD _fParCurrPCA
CW: Proposed parameter value in PCA base.
Definition: PCAHandler.h:211
void SanitisePCA(TMatrixDSym *CovMatrix)
KS: Make sure decomposed matrix isn't correlated with undecomposed.
Definition: PCAHandler.cpp:162
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:37
int FirstPCAdpar
Index of the first param that is being decomposed.
Definition: PCAHandler.h:233
const TMatrixD GetEigenVectors() const
Get eigen vectors of covariance matrix, only works with PCA.
Definition: PCAHandler.h:128
double eigen_threshold
CW: Threshold based on which we remove parameters in eigen base.
Definition: PCAHandler.h:237