Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-10 08:20:22

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #include "ActsExamples/Validation/TrackSummaryPlotTool.hpp"
0010 
0011 #include "Acts/Utilities/VectorHelpers.hpp"
0012 
0013 #include <format>
0014 
0015 using namespace Acts::Experimental;
0016 using namespace ActsExamples;
0017 
0018 namespace {
0019 
0020 ProfileHistogram1 makeProfile(
0021     const TrackSummaryPlotTool::TrackSummaryPlotTool::Config& cfg,
0022     std::string name, const std::string& title,
0023     const Acts::Experimental::AxisVariant& ax) {
0024   if (!cfg.prefix.empty()) {
0025     name = std::format("{}_{}", cfg.prefix, name);
0026   }
0027   const auto& yAxis = cfg.varBinning.at("Num");
0028   Acts::Range1D<double> yRange{yAxis.bin(0).lower(),
0029                                yAxis.bin(yAxis.size() - 1).upper()};
0030   return ProfileHistogram1(name, title, {ax}, yAxis.metadata(), yRange);
0031 }
0032 
0033 }  // namespace
0034 
0035 namespace ActsExamples {
0036 
0037 TrackSummaryPlotTool::TrackSummaryPlotTool(
0038     const TrackSummaryPlotTool::Config& cfg, Acts::Logging::Level lvl)
0039     : m_cfg(cfg),
0040       m_logger(Acts::getDefaultLogger("TrackSummaryPlotTool", lvl)) {
0041   ACTS_DEBUG(
0042       "Initialize the histograms for track info plots"
0043       << (m_cfg.prefix.empty() ? "" : ", use prefix '" + m_cfg.prefix + "'"));
0044 
0045   m_profiles.insert(
0046       {"nStates_vs_eta",
0047        makeProfile(m_cfg, "nStates_vs_eta", "Number of total states vs. #eta",
0048                    m_cfg.varBinning.at("Eta"))});
0049   m_profiles.insert(
0050       {"nMeasurements_vs_eta", makeProfile(m_cfg, "nMeasurements_vs_eta",
0051                                            "Number of measurements vs. #eta",
0052                                            m_cfg.varBinning.at("Eta"))});
0053   m_profiles.insert({"nHoles_vs_eta", makeProfile(m_cfg, "nHoles_vs_eta",
0054                                                   "Number of holes vs. #eta",
0055                                                   m_cfg.varBinning.at("Eta"))});
0056   m_profiles.insert(
0057       {"nOutliers_vs_eta",
0058        makeProfile(m_cfg, "nOutliers_vs_eta", "Number of outliers vs. #eta",
0059                    m_cfg.varBinning.at("Eta"))});
0060   m_profiles.insert(
0061       {"nSharedHits_vs_eta", makeProfile(m_cfg, "nSharedHits_vs_eta",
0062                                          "Number of Shared Hits vs. #eta",
0063                                          m_cfg.varBinning.at("Eta"))});
0064   m_profiles.insert(
0065       {"nStates_vs_pT",
0066        makeProfile(m_cfg, "nStates_vs_pT", "Number of total states vs. pT",
0067                    m_cfg.varBinning.at("Pt"))});
0068   m_profiles.insert(
0069       {"nMeasurements_vs_pT", makeProfile(m_cfg, "nMeasurements_vs_pT",
0070                                           "Number of measurements vs. pT",
0071                                           m_cfg.varBinning.at("Pt"))});
0072   m_profiles.insert({"nHoles_vs_pT", makeProfile(m_cfg, "nHoles_vs_pT",
0073                                                  "Number of holes vs. pT",
0074                                                  m_cfg.varBinning.at("Pt"))});
0075   m_profiles.insert(
0076       {"nOutliers_vs_pT",
0077        makeProfile(m_cfg, "nOutliers_vs_pT", "Number of outliers vs. pT",
0078                    m_cfg.varBinning.at("Pt"))});
0079   m_profiles.insert(
0080       {"nSharedHits_vs_pT",
0081        makeProfile(m_cfg, "nSharedHits_vs_pT", "Number of Shared Hits vs. pT",
0082                    m_cfg.varBinning.at("Pt"))});
0083 }
0084 
0085 void TrackSummaryPlotTool::fill(
0086     const Acts::BoundTrackParameters& fittedParameters, std::size_t nStates,
0087     std::size_t nMeasurements, std::size_t nOutliers, std::size_t nHoles,
0088     std::size_t nSharedHits) {
0089   using Acts::VectorHelpers::eta;
0090   using Acts::VectorHelpers::perp;
0091   const auto momentum = fittedParameters.momentum();
0092   const double fit_eta = eta(momentum);
0093   const double fit_pT = perp(momentum);
0094 
0095   m_profiles.at("nStates_vs_eta").fill({fit_eta}, static_cast<double>(nStates));
0096   m_profiles.at("nMeasurements_vs_eta")
0097       .fill({fit_eta}, static_cast<double>(nMeasurements));
0098   m_profiles.at("nOutliers_vs_eta")
0099       .fill({fit_eta}, static_cast<double>(nOutliers));
0100   m_profiles.at("nHoles_vs_eta").fill({fit_eta}, static_cast<double>(nHoles));
0101   m_profiles.at("nSharedHits_vs_eta")
0102       .fill({fit_eta}, static_cast<double>(nSharedHits));
0103 
0104   m_profiles.at("nStates_vs_pT").fill({fit_pT}, static_cast<double>(nStates));
0105   m_profiles.at("nMeasurements_vs_pT")
0106       .fill({fit_pT}, static_cast<double>(nMeasurements));
0107   m_profiles.at("nOutliers_vs_pT")
0108       .fill({fit_pT}, static_cast<double>(nOutliers));
0109   m_profiles.at("nHoles_vs_pT").fill({fit_pT}, static_cast<double>(nHoles));
0110   m_profiles.at("nSharedHits_vs_pT")
0111       .fill({fit_pT}, static_cast<double>(nSharedHits));
0112 }
0113 
0114 }  // namespace ActsExamples