File indexing completed on 2025-12-17 09:19:58
0001 #ifndef CALORECO_CLUSTERCDFCALCULATOR_H
0002 #define CALORECO_CLUSTERCDFCALCULATOR_H
0003
0004 #include <TFile.h>
0005 #include <TMatrixD.h>
0006
0007 class TH1;
0008
0009 class ClusterCDFCalculator {
0010 public:
0011 ClusterCDFCalculator() = default;
0012 virtual ~ClusterCDFCalculator();
0013
0014 void LoadProfile(const std::string &filename);
0015 std::pair<double, double> GetCDF(const std::vector<double>& energies, double clusterenergy, int NMATRIXDIM);
0016
0017 int Verbosity() { return m_verbosity; }
0018 void Verbosity(const int verbose) { m_verbosity = verbose; }
0019
0020 private:
0021 TFile* file{nullptr};
0022 TH1* henbins_photon{nullptr};
0023 TH1* henbins_pi0{nullptr};
0024
0025 std::vector<TH1*> hD2_3x3_photon;
0026 std::vector<TH1*> hD2_5x5_photon;
0027 std::vector<TH1*> hD2_7x7_photon;
0028 std::vector<TH1*> hD2_3x3_pi0;
0029 std::vector<TH1*> hD2_5x5_pi0;
0030 std::vector<TH1*> hD2_7x7_pi0;
0031
0032 std::vector<TMatrixD> inverseCovarianceMatrix_3x3_photon;
0033 std::vector<TMatrixD> inverseCovarianceMatrix_5x5_photon;
0034 std::vector<TMatrixD> inverseCovarianceMatrix_7x7_photon;
0035 std::vector<TMatrixD> inverseCovarianceMatrix_3x3_pi0;
0036 std::vector<TMatrixD> inverseCovarianceMatrix_5x5_pi0;
0037 std::vector<TMatrixD> inverseCovarianceMatrix_7x7_pi0;
0038
0039 std::vector<double> meanD2_3x3_photon;
0040 std::vector<double> meanD2_5x5_photon;
0041 std::vector<double> meanD2_7x7_photon;
0042 std::vector<double> meanD2_3x3_pi0;
0043 std::vector<double> meanD2_5x5_pi0;
0044 std::vector<double> meanD2_7x7_pi0;
0045
0046 std::vector<std::vector<TH1*>> ratioHistograms_3x3_photon;
0047 std::vector<std::vector<TH1*>> ratioHistograms_5x5_photon;
0048 std::vector<std::vector<TH1*>> ratioHistograms_7x7_photon;
0049 std::vector<std::vector<TH1*>> ratioHistograms_3x3_pi0;
0050 std::vector<std::vector<TH1*>> ratioHistograms_5x5_pi0;
0051 std::vector<std::vector<TH1*>> ratioHistograms_7x7_pi0;
0052
0053 void LoadHistogramsAndMatrices();
0054
0055 double CalculateJointDeviation(const std::vector<double>& energies,
0056 const std::vector<TH1*>& ratioHistograms,
0057 const TMatrixD& inverseCovarianceMatrix,
0058 double meanD2);
0059
0060 virtual std::unordered_set<int> getSubsetIndices(int gridSize, int subsetSize);
0061 static double GetCDFValue(double jointDeviation, TH1* hD2);
0062
0063 static const int NMATRIX_3x3 {9};
0064 static const int NMATRIX_5x5 {25};
0065 static const int NMATRIX_7x7 {49};
0066 static const int FULLGRIDSIZE {7};
0067
0068 static const int NMATRIXDIM3 {3};
0069 static const int NMATRIXDIM5 {5};
0070 static const int NMATRIXDIM7 {7};
0071
0072 const int gridSize {49};
0073 const double epsilon {1e-9};
0074
0075 int m_verbosity{0};
0076 };
0077
0078 #endif