File indexing completed on 2026-09-22 07:59:43
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/EventData/BoundTrackParameters.hpp"
0012 #include "Acts/EventData/SubspaceHelpers.hpp"
0013 #include "Acts/Geometry/GeometryContext.hpp"
0014 #include "Acts/Utilities/Histogram.hpp"
0015 #include "Acts/Utilities/Logger.hpp"
0016 #include "ActsExamples/EventData/SimParticle.hpp"
0017
0018 #include <map>
0019 #include <memory>
0020 #include <string>
0021 #include <vector>
0022
0023 namespace ActsExamples {
0024
0025
0026
0027
0028 class ResPlotTool {
0029 public:
0030 using AxisVariant = Acts::Experimental::AxisVariant;
0031 using BoostRegularAxis = Acts::Experimental::BoostRegularAxis;
0032 using Histogram1 = Acts::Experimental::Histogram1;
0033 using Histogram2 = Acts::Experimental::Histogram2;
0034 using Histogram3 = Acts::Experimental::Histogram3;
0035
0036
0037 struct Config {
0038
0039
0040
0041
0042
0043 std::vector<std::string> paramNames;
0044
0045 std::string qOverPtName = "qopt";
0046 std::string relQoverPtName = "qopt_rel";
0047
0048
0049 std::map<std::string, AxisVariant> varBinning = {
0050 {"Eta", BoostRegularAxis(40, -4, 4, "#eta")},
0051 {"Phi", BoostRegularAxis(40, -std::numbers::pi, std::numbers::pi,
0052 "#phi [rad]")},
0053 {"Pt", BoostRegularAxis(40, 0, 100, "pT [GeV/c]")},
0054 {"Pull", BoostRegularAxis(100, -5, 5, "pull")},
0055 {"Residual_d0", BoostRegularAxis(100, -0.5, 0.5, "r_{d0} [mm]")},
0056 {"Residual_z0", BoostRegularAxis(100, -0.5, 0.5, "r_{z0} [mm]")},
0057 {"Residual_loc0", BoostRegularAxis(100, -0.5, 0.5, "r_{loc0} [mm]")},
0058 {"Residual_loc1", BoostRegularAxis(100, -0.5, 0.5, "r_{loc1} [mm]")},
0059 {"Residual_phi", BoostRegularAxis(100, -0.01, 0.01, "r_{#phi} [rad]")},
0060 {"Residual_theta",
0061 BoostRegularAxis(100, -0.01, 0.01, "r_{#theta} [rad]")},
0062 {"Residual_qop", BoostRegularAxis(100, -0.1, 0.1, "r_{q/p} [c/GeV]")},
0063 {"Residual_t", BoostRegularAxis(100, -100, 100, "r_{t} [mm/c]")},
0064 {"Residual_qopt", BoostRegularAxis(100, -0.1, 0.1, "r_{q/pT} [c/GeV]")},
0065 {"Residual_qopt_rel",
0066 BoostRegularAxis(100, -0.1, 0.1, "r_{rel q/pT} [%]")}};
0067 };
0068
0069
0070
0071 struct Binning {
0072 double eta;
0073 double phi;
0074 double pt;
0075 };
0076
0077
0078
0079 ResPlotTool(const Config& cfg, Acts::Logging::Level lvl);
0080
0081
0082
0083
0084 void fill(const Acts::GeometryContext& gctx,
0085 const SimParticleState& truthParticle,
0086 const Acts::BoundTrackParameters& fittedParamters);
0087
0088
0089
0090
0091
0092 void fill(const Acts::BoundTrackParameters& truthParameters,
0093 const Acts::BoundTrackParameters& fittedParameters);
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107 void fill(const Binning& binning,
0108 const Acts::VariableBoundSubspaceHelper& subspace,
0109 const Acts::BoundVector& residuals,
0110 const Acts::BoundMatrix& residualCovariance);
0111
0112 const std::map<std::string, Histogram1>& res() const { return m_res; }
0113 const std::map<std::string, Histogram2>& resVsEta() const {
0114 return m_resVsEta;
0115 }
0116 const std::map<std::string, Histogram2>& resVsPt() const { return m_resVsPt; }
0117 const std::map<std::string, Histogram3>& resVsEtaPhi() const {
0118 return m_resVsEtaPhi;
0119 }
0120 const std::map<std::string, Histogram3>& resVsEtaPt() const {
0121 return m_resVsEtaPt;
0122 }
0123 const std::map<std::string, Histogram1>& pull() const { return m_pull; }
0124 const std::map<std::string, Histogram2>& pullVsEta() const {
0125 return m_pullVsEta;
0126 }
0127 const std::map<std::string, Histogram2>& pullVsPt() const {
0128 return m_pullVsPt;
0129 }
0130 const std::map<std::string, Histogram3>& pullVsEtaPhi() const {
0131 return m_pullVsEtaPhi;
0132 }
0133 const std::map<std::string, Histogram3>& pullVsEtaPt() const {
0134 return m_pullVsEtaPt;
0135 }
0136
0137 private:
0138 Config m_cfg;
0139
0140 std::unique_ptr<const Acts::Logger> m_logger;
0141
0142
0143 std::map<std::string, Histogram1> m_res;
0144
0145 std::map<std::string, Histogram2> m_resVsEta;
0146
0147 std::map<std::string, Histogram2> m_resVsPt;
0148
0149 std::map<std::string, Histogram3> m_resVsEtaPhi;
0150
0151 std::map<std::string, Histogram3> m_resVsEtaPt;
0152
0153
0154 std::map<std::string, Histogram1> m_pull;
0155
0156 std::map<std::string, Histogram2> m_pullVsEta;
0157
0158 std::map<std::string, Histogram2> m_pullVsPt;
0159
0160 std::map<std::string, Histogram3> m_pullVsEtaPhi;
0161
0162 std::map<std::string, Histogram3> m_pullVsEtaPt;
0163
0164 void fill(const Acts::BoundVector& truthVector, const Binning& binning,
0165 double truthCharge, double truthAbsCharge,
0166 const Acts::BoundTrackParameters& fittedParameters);
0167
0168 void fillResidual(const std::string& paramName, double residual,
0169 double truthEta, double truthPhi, double truthPt);
0170 void fillPull(const std::string& paramName, double pull, double truthEta,
0171 double truthPhi, double truthPt);
0172
0173 const Acts::Logger& logger() const { return *m_logger; }
0174 };
0175
0176 }