Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-12 07:52:23

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 <TProfile.h>
0014 
0015 namespace ActsExamples {
0016 
0017 TrackSummaryPlotTool::TrackSummaryPlotTool(
0018     const TrackSummaryPlotTool::Config& cfg, Acts::Logging::Level lvl)
0019     : m_cfg(cfg),
0020       m_logger(Acts::getDefaultLogger("TrackSummaryPlotTool", lvl)) {}
0021 
0022 void TrackSummaryPlotTool::book(Cache& cache, const std::string& prefix) const {
0023   PlotHelpers::Binning bEta = m_cfg.varBinning.at("Eta");
0024   PlotHelpers::Binning bPt = m_cfg.varBinning.at("Pt");
0025   PlotHelpers::Binning bNum = m_cfg.varBinning.at("Num");
0026   ACTS_DEBUG("Initialize the histograms for track info plots, use prefix '"
0027              << prefix << "'");
0028   auto addPrefix = [&](const std::string& name) {
0029     return prefix.empty() ? name : prefix + "_" + name;
0030   };
0031   // number of track states versus eta
0032   cache.nStates_vs_eta =
0033       PlotHelpers::bookProf(addPrefix("nStates_vs_eta").c_str(),
0034                             "Number of total states vs. #eta", bEta, bNum);
0035   // number of measurements versus eta
0036   cache.nMeasurements_vs_eta =
0037       PlotHelpers::bookProf(addPrefix("nMeasurements_vs_eta").c_str(),
0038                             "Number of measurements vs. #eta", bEta, bNum);
0039   // number of holes versus eta
0040   cache.nHoles_vs_eta =
0041       PlotHelpers::bookProf(addPrefix("nHoles_vs_eta").c_str(),
0042                             "Number of holes vs. #eta", bEta, bNum);
0043   // number of outliers versus eta
0044   cache.nOutliers_vs_eta =
0045       PlotHelpers::bookProf(addPrefix("nOutliers_vs_eta").c_str(),
0046                             "Number of outliers vs. #eta", bEta, bNum);
0047   // number of Shared Hits versus eta
0048   cache.nSharedHits_vs_eta =
0049       PlotHelpers::bookProf(addPrefix("nSharedHits_vs_eta").c_str(),
0050                             "Number of Shared Hits vs. #eta", bEta, bNum);
0051   // number of track states versus pt
0052   cache.nStates_vs_pt =
0053       PlotHelpers::bookProf(addPrefix("nStates_vs_pT").c_str(),
0054                             "Number of total states vs. pT", bPt, bNum);
0055   // number of measurements versus pt
0056   cache.nMeasurements_vs_pt =
0057       PlotHelpers::bookProf(addPrefix("nMeasurements_vs_pT").c_str(),
0058                             "Number of measurements vs. pT", bPt, bNum);
0059   // number of holes versus pt
0060   cache.nHoles_vs_pt = PlotHelpers::bookProf(
0061       addPrefix("nHoles_vs_pT").c_str(), "Number of holes vs. pT", bPt, bNum);
0062   // number of outliers versus pt
0063   cache.nOutliers_vs_pt =
0064       PlotHelpers::bookProf(addPrefix("nOutliers_vs_pT").c_str(),
0065                             "Number of outliers vs. pT", bPt, bNum);
0066   // number of Shared Hits versus pt
0067   cache.nSharedHits_vs_pt =
0068       PlotHelpers::bookProf(addPrefix("nSharedHits_vs_pT").c_str(),
0069                             "Number of Shared Hits vs. pT", bPt, bNum);
0070 }
0071 
0072 void TrackSummaryPlotTool::clear(Cache& cache) const {
0073   delete cache.nStates_vs_eta;
0074   delete cache.nMeasurements_vs_eta;
0075   delete cache.nOutliers_vs_eta;
0076   delete cache.nHoles_vs_eta;
0077   delete cache.nSharedHits_vs_eta;
0078   delete cache.nStates_vs_pt;
0079   delete cache.nMeasurements_vs_pt;
0080   delete cache.nOutliers_vs_pt;
0081   delete cache.nHoles_vs_pt;
0082   delete cache.nSharedHits_vs_pt;
0083 }
0084 
0085 void TrackSummaryPlotTool::write(const Cache& cache) const {
0086   ACTS_DEBUG("Write the plots to output file.");
0087   cache.nStates_vs_eta->Write();
0088   cache.nMeasurements_vs_eta->Write();
0089   cache.nOutliers_vs_eta->Write();
0090   cache.nHoles_vs_eta->Write();
0091   cache.nSharedHits_vs_eta->Write();
0092   cache.nStates_vs_pt->Write();
0093   cache.nMeasurements_vs_pt->Write();
0094   cache.nOutliers_vs_pt->Write();
0095   cache.nHoles_vs_pt->Write();
0096   cache.nSharedHits_vs_pt->Write();
0097 }
0098 
0099 void TrackSummaryPlotTool::fill(
0100     Cache& cache, const Acts::BoundTrackParameters& fittedParameters,
0101     std::size_t nStates, std::size_t nMeasurements, std::size_t nOutliers,
0102     std::size_t nHoles, std::size_t nSharedHits) const {
0103   using Acts::VectorHelpers::eta;
0104   using Acts::VectorHelpers::perp;
0105   const auto momentum = fittedParameters.momentum();
0106   const double fit_eta = eta(momentum);
0107   const double fit_pT = perp(momentum);
0108 
0109   PlotHelpers::fillProf(cache.nStates_vs_eta, fit_eta, nStates);
0110   PlotHelpers::fillProf(cache.nMeasurements_vs_eta, fit_eta, nMeasurements);
0111   PlotHelpers::fillProf(cache.nOutliers_vs_eta, fit_eta, nOutliers);
0112   PlotHelpers::fillProf(cache.nHoles_vs_eta, fit_eta, nHoles);
0113   PlotHelpers::fillProf(cache.nSharedHits_vs_eta, fit_eta, nSharedHits);
0114 
0115   PlotHelpers::fillProf(cache.nStates_vs_pt, fit_pT, nStates);
0116   PlotHelpers::fillProf(cache.nMeasurements_vs_pt, fit_pT, nMeasurements);
0117   PlotHelpers::fillProf(cache.nOutliers_vs_pt, fit_pT, nOutliers);
0118   PlotHelpers::fillProf(cache.nHoles_vs_pt, fit_pT, nHoles);
0119   PlotHelpers::fillProf(cache.nSharedHits_vs_pt, fit_pT, nSharedHits);
0120 }
0121 
0122 }  // namespace ActsExamples