File indexing completed on 2025-12-16 09:23:45
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include <cmath>
0012 #include <string>
0013 #include <utility>
0014
0015 #include "TEfficiency.h"
0016 #include "TProfile.h"
0017
0018 class TEfficiency;
0019 class TH1D;
0020 class TH1F;
0021 class TH2F;
0022 class TProfile;
0023
0024 namespace ActsExamples::PlotHelpers {
0025
0026
0027 class Binning {
0028 public:
0029 static Binning Uniform(std::string title, const std::size_t bins,
0030 const double bMin, const double bMax) {
0031 std::vector<double> binEdges(bins + 1);
0032 const double step = (bMax - bMin) / bins;
0033 std::generate(binEdges.begin(), binEdges.end(), [&, v = bMin]() mutable {
0034 const double r = v;
0035 v += step;
0036 return r;
0037 });
0038 return Binning(std::move(title), std::move(binEdges));
0039 }
0040 static Binning Variable(std::string title, std::vector<double> binEdges) {
0041 return Binning(std::move(title), std::move(binEdges));
0042 }
0043 static Binning Logarithmic(std::string title, const std::size_t bins,
0044 const double bMin, const double bMax) {
0045 std::vector<double> binEdges(bins + 1);
0046 const double logMin = std::log10(bMin);
0047 const double logMax = std::log10(bMax);
0048 const double step = (logMax - logMin) / bins;
0049 for (std::size_t i = 0; i <= bins; ++i) {
0050 binEdges[i] = std::pow(10, logMin + i * step);
0051 }
0052 return Binning(std::move(title), std::move(binEdges));
0053 }
0054
0055 Binning(std::string title, std::vector<double> binEdges)
0056 : m_title(std::move(title)), m_binEdges(std::move(binEdges)) {}
0057
0058 const std::string& title() const { return m_title; }
0059 std::size_t nBins() const { return m_binEdges.size() - 1; }
0060 const double* binEdges() const { return m_binEdges.data(); }
0061 double low() const { return m_binEdges.front(); }
0062 double high() const { return m_binEdges.back(); }
0063
0064 private:
0065 std::string m_title;
0066 std::vector<double> m_binEdges;
0067 };
0068
0069
0070
0071
0072
0073
0074 TH1F* bookHisto(const std::string& histName, const std::string& histTitle,
0075 const Binning& varBinning);
0076
0077
0078
0079
0080
0081
0082
0083 TH2F* bookHisto(const std::string& histName, const std::string& histTitle,
0084 const Binning& varXBinning, const Binning& varYBinning);
0085
0086
0087
0088
0089
0090 void fillHisto(TH1F* hist, float value, float weight = 1.0);
0091
0092
0093
0094
0095
0096
0097 void fillHisto(TH2F* hist, float xValue, float yValue, float weight = 1.0);
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107 void anaHisto(TH1D* inputHist, int j, TH1F* meanHist, TH1F* widthHist);
0108
0109
0110
0111
0112
0113
0114 TEfficiency* bookEff(const std::string& effName, const std::string& effTitle,
0115 const Binning& varBinning);
0116
0117
0118
0119
0120
0121
0122
0123 TEfficiency* bookEff(const std::string& effName, const std::string& effTitle,
0124 const Binning& varXBinning, const Binning& varYBinning);
0125
0126
0127
0128
0129
0130 void fillEff(TEfficiency* efficiency, float value, bool status);
0131
0132
0133
0134
0135
0136
0137 void fillEff(TEfficiency* efficiency, float xValue, float yValue, bool status);
0138
0139
0140
0141
0142
0143
0144
0145 TProfile* bookProf(const std::string& profName, const std::string& profTitle,
0146 const Binning& varXBinning, const Binning& varYBinning);
0147
0148
0149
0150
0151
0152
0153 void fillProf(TProfile* profile, float xValue, float yValue,
0154 float weight = 1.0);
0155
0156 }