ATLAS Offline Software
DetailedHitInfo.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 #include <numeric>
8 
9 namespace{
10 
11  template<typename InputIterator,typename AccumulateType,typename BinaryOperation,typename Predicate>
12  const AccumulateType
13  accumulate_if(InputIterator first,const InputIterator last,
14  AccumulateType init, BinaryOperation&& binary_op,Predicate&& predicate){
15  for (; first != last; ++first){
16  if (predicate(*first)) init = binary_op(init, *first);
17  }
18  return init;
19  }
20 
21  enum TupleItem{ ThisLayer, NumLayers, NumHits};
22 
23  using OneDetail = std::tuple<int, int, int>;
24  using DetailVector = std::vector<OneDetail>;
25 
26  template<int q>
27  int addUp(int l, const std::pair < Trk::DetectorRegion, DetailVector > & p){
28  for (const auto &t:p.second){
29  l+=std::get<q>(t);
30  }
31  return l;
32  }
33 
34  auto fromRegion=[](Trk::DetectorRegion r){
35  return [r](const std::pair < Trk::DetectorRegion, DetailVector > & p){
36  return p.first == r;
37  };
38  };
39 
40  auto fromStrips ATLAS_THREAD_SAFE =[](const std::pair < Trk::DetectorRegion, DetailVector > & p) {
42  };
43 
44  auto fromPixels ATLAS_THREAD_SAFE =[](const std::pair < Trk::DetectorRegion, DetailVector > & p) {
45  return (p.first==Trk::DetectorRegion::pixelBarrelFlat) or
48  };
49 }
50 
51 
52 
53 std::vector < std::pair < Trk::DetectorRegion, std::vector < std::tuple <int , int , int> > > >
55  return m_detailedHitInfo;
56 }
57 
58 void
59 Trk::DetailedHitInfo::addHit(Trk::DetectorRegion region, int layer, int eta_module, int hit) {
60  for (auto& [thisRegion,thisHitInfoVector] : m_detailedHitInfo) {
61  if (thisRegion==region) {
62  for (auto& [thisLayer, nLayers, nHits] : thisHitInfoVector) {
63  if (thisLayer==layer) {
64  // increase the contributing layers only for inclined/endcap modules
65  if (region!=pixelBarrelFlat and region!=stripBarrel and eta_module!=m_prevEta) {
66  nLayers++;
67  m_prevEta = eta_module;
68  }
69  nHits+=hit;
70  return;
71  }
72  }
73  }
74  }
75  // if reaches this point the element is not found, then you add it to m_detailedHitInfo
76  m_prevEta = eta_module;
77  std::vector < std::tuple <int, int, int> > counts = {{layer, 1, hit}};
78  m_detailedHitInfo.emplace_back(region, counts);
79 }
80 
81 int
83  for (auto& [thisRegion,thisHitInfoVector] : m_detailedHitInfo) {
84  if (thisRegion==region) {
85  for (auto& [thisLayer, nLayers, nHits] : thisHitInfoVector) {
86  if (thisLayer==layer) {
87  return nHits;
88  }
89  }
90  }
91  }
92  return 0;
93 }
94 
95 int
97  return accumulate_if(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumLayers>, fromRegion(region));
98 }
99 
100 int
102  return std::accumulate(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumLayers>);
103 }
104 
105 int
107  return accumulate_if(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumHits>, fromRegion(region));
108 }
109 
110 int
112  return std::accumulate(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumHits>);
113 }
114 
115 int
117  return accumulate_if(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumLayers>, fromPixels);
118 }
119 
120 int
122  return accumulate_if(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumHits>, fromPixels);
123 
124 }
125 
126 int
128  return accumulate_if(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumLayers>, fromStrips);
129 }
130 
131 int
133  return accumulate_if(m_detailedHitInfo.begin(), m_detailedHitInfo.end(), 0, addUp<NumHits>, fromStrips);
134 }
beamspotman.r
def r
Definition: beamspotman.py:676
Trk::DetailedHitInfo::m_detailedHitInfo
std::vector< std::pair< Trk::DetectorRegion, std::vector< std::tuple< int, int, int > > > > m_detailedHitInfo
Definition: DetailedHitInfo.h:45
Trk::stripBarrel
@ stripBarrel
Definition: DetailedHitInfo.h:17
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
DetailedHitInfo.h
Trk::DetailedHitInfo::getStripContributions
int getStripContributions()
Definition: DetailedHitInfo.cxx:127
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
Trk::DetailedHitInfo::getAllContributions
int getAllContributions()
Definition: DetailedHitInfo.cxx:101
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::DetailedHitInfo::getHitInfo
std::vector< std::pair< Trk::DetectorRegion, std::vector< std::tuple< int, int, int > > > > getHitInfo()
Definition: DetailedHitInfo.cxx:54
Trk::pixelBarrelFlat
@ pixelBarrelFlat
Definition: DetailedHitInfo.h:14
Trk::DetailedHitInfo::getHits
int getHits(Trk::DetectorRegion region, int layer)
Definition: DetailedHitInfo.cxx:82
Trk::DetailedHitInfo::getPixelContributions
int getPixelContributions()
Definition: DetailedHitInfo.cxx:116
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Trk::DetailedHitInfo::getPixelHits
int getPixelHits()
Definition: DetailedHitInfo.cxx:121
Trk::stripEndcap
@ stripEndcap
Definition: DetailedHitInfo.h:18
Trk::pixelEndcap
@ pixelEndcap
Definition: DetailedHitInfo.h:16
Trk::DetailedHitInfo::addHit
void addHit(Trk::DetectorRegion region, int layer, int etaModule, int hit=1)
This class containes the detailed information on the contributing layers and regions to the hit count...
Definition: DetailedHitInfo.cxx:59
Trk::DetailedHitInfo::getStripHits
int getStripHits()
Definition: DetailedHitInfo.cxx:132
Trk::pixelBarrelInclined
@ pixelBarrelInclined
Definition: DetailedHitInfo.h:15
python.PyKernel.init
def init(v_theApp, v_rootStream=None)
Definition: PyKernel.py:45
Trk::DetectorRegion
DetectorRegion
Definition: DetailedHitInfo.h:13
Trk::DetailedHitInfo::getContributionFromRegion
int getContributionFromRegion(Trk::DetectorRegion region)
Definition: DetailedHitInfo.cxx:96
Trk::DetailedHitInfo::getAllHits
int getAllHits()
Definition: DetailedHitInfo.cxx:111
DeMoScan.first
bool first
Definition: DeMoScan.py:534
Trk::DetailedHitInfo::getHitsFromRegion
int getHitsFromRegion(Trk::DetectorRegion region)
Definition: DetailedHitInfo.cxx:106
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
checker_macros.h
Define macros for attributes used to control the static checker.