File indexing completed on 2025-08-06 08:17:33
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 private:
0018 TFile* file{nullptr};
0019 TH1* henbins_photon{nullptr};
0020 TH1* henbins_pi0{nullptr};
0021
0022 std::vector<TH1*> hD2_3x3_photon;
0023 std::vector<TH1*> hD2_5x5_photon;
0024 std::vector<TH1*> hD2_7x7_photon;
0025 std::vector<TH1*> hD2_3x3_pi0;
0026 std::vector<TH1*> hD2_5x5_pi0;
0027 std::vector<TH1*> hD2_7x7_pi0;
0028
0029 std::vector<TMatrixD> inverseCovarianceMatrix_3x3_photon;
0030 std::vector<TMatrixD> inverseCovarianceMatrix_5x5_photon;
0031 std::vector<TMatrixD> inverseCovarianceMatrix_7x7_photon;
0032 std::vector<TMatrixD> inverseCovarianceMatrix_3x3_pi0;
0033 std::vector<TMatrixD> inverseCovarianceMatrix_5x5_pi0;
0034 std::vector<TMatrixD> inverseCovarianceMatrix_7x7_pi0;
0035
0036 std::vector<double> meanD2_3x3_photon;
0037 std::vector<double> meanD2_5x5_photon;
0038 std::vector<double> meanD2_7x7_photon;
0039 std::vector<double> meanD2_3x3_pi0;
0040 std::vector<double> meanD2_5x5_pi0;
0041 std::vector<double> meanD2_7x7_pi0;
0042
0043 std::vector<std::vector<TH1*>> ratioHistograms_3x3_photon;
0044 std::vector<std::vector<TH1*>> ratioHistograms_5x5_photon;
0045 std::vector<std::vector<TH1*>> ratioHistograms_7x7_photon;
0046 std::vector<std::vector<TH1*>> ratioHistograms_3x3_pi0;
0047 std::vector<std::vector<TH1*>> ratioHistograms_5x5_pi0;
0048 std::vector<std::vector<TH1*>> ratioHistograms_7x7_pi0;
0049
0050 void LoadHistogramsAndMatrices();
0051
0052 double CalculateJointDeviation(const std::vector<double>& energies,
0053 const std::vector<TH1*>& ratioHistograms,
0054 const TMatrixD& inverseCovarianceMatrix,
0055 double meanD2);
0056
0057 virtual std::unordered_set<int> getSubsetIndices(int gridSize, int subsetSize);
0058 static double GetCDFValue(double jointDeviation, TH1* hD2);
0059
0060 static const int NMATRIX_3x3 {9};
0061 static const int NMATRIX_5x5 {25};
0062 static const int NMATRIX_7x7 {49};
0063 static const int FULLGRIDSIZE {7};
0064
0065 static const int NMATRIXDIM3 {3};
0066 static const int NMATRIXDIM5 {5};
0067 static const int NMATRIXDIM7 {7};
0068
0069 const int gridSize {49};
0070 const double epsilon {1e-9};
0071 };
0072
0073 #endif