Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
HitSummaryDataUtils.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ACTSTRK_HITSUMMARYDATAUTILS_H
6 #define ACTSTRK_HITSUMMARYDATAUTILS_H
7 
12 #include "InDetIdentifier/SCT_ID.h"
13 
14 #include <vector>
15 #include <cmath>
16 #include <array>
17 #include <tuple>
18 #include <type_traits>
19 
20 namespace ActsTrk::detail {
23  template <typename T_EnumClass >
24  constexpr typename std::underlying_type<T_EnumClass>::type to_underlying(T_EnumClass an_enum) {
25  return static_cast<typename std::underlying_type<T_EnumClass>::type>(an_enum);
26  }
27 
28  namespace HitCategory {
32  N
33  };
34  }
35 
39  public:
48  unknown = 5,
52  Total = 9
53  };
54 
55  constexpr static unsigned short LAYER_REGION_MASK = 0x1FF; // bits 0-8
56  constexpr static unsigned short REGION_BITS = 3; // bits 0-2
57  constexpr static unsigned short REGION_MASK = 0x7; // 3 bits
58  constexpr static unsigned short LAYER_BITS = 6; // bits 3-8
59  constexpr static unsigned short LAYER_MASK = 0x3F; // 6 bits
60  constexpr static unsigned short SIGNED_ETA_MOD_BITS = 7; // bits 9-14 + 15(sign)
61  constexpr static unsigned short SIGNED_ETA_MOD_MASK = 0x7F; // 6 + 1(sign) bit
62 
68  constexpr static unsigned short makeKey(unsigned short region, unsigned short layer, int eta_mod) {
69  // 3 bits region : 0-7 : pixelBarrelFlat - unknown
70  // 6 bits layer : 0-63
71  // 1+6 bits eta_mod : +- 0-63
72  // @TODO endcap side A/C ?
73  assert(region < (1<<REGION_BITS) );
74  assert(layer < (1<<LAYER_BITS));
75  assert( std::abs(eta_mod) < (1<<(SIGNED_ETA_MOD_BITS-1)) );
76  if (region != stripBarrel && region != pixelBarrelFlat) {
77  layer |= (static_cast<uint8_t>(eta_mod) & SIGNED_ETA_MOD_MASK) << LAYER_BITS ;
78  }
79  return static_cast<uint8_t>(region) | (layer<<REGION_BITS);
80  }
81 
84  constexpr static DetectorRegion regionFromKey(unsigned short key) {
85  return static_cast<DetectorRegion>(key & REGION_MASK); // bits 0-2
86  }
87 
90  constexpr static uint8_t layerFromKey(unsigned short key) {
91  return (key>>REGION_BITS) & LAYER_MASK; // bits 3-8
92  }
93 
94  // To select, hits, outliers, and/or shared hits.
96  Hit = 1,
97  Outlier = 2,
99  SharedHit = 4
100  };
101 
104  void reset() {
105  m_stat.clear();
106  std::fill(m_hits.begin(),m_hits.end(), 0u);
107  std::fill(m_outlierHits.begin(),m_outlierHits.end(), 0u);
108  std::fill(m_sharedHits.begin(),m_sharedHits.end(), 0u);
109  std::fill(m_layers.begin(),m_layers.end(), 0u);
110  }
111 
119  bool addHit(const InDetDD::SiDetectorElementCollection *detector_elements, unsigned int id_hash, EHitSelection hit_selection) {
120  if (!detector_elements || id_hash>=detector_elements->size() || !(*detector_elements)[id_hash]) {
121  return false;
122  }
123  const InDetDD::SiDetectorElement *detEl=(*detector_elements)[id_hash];
124  DetectorRegion region = unknown;
125  uint8_t layer = 255;
126  int eta_module = 0;
127  if (detEl->isPixel()) {
128  InDetDD::DetectorType type = detEl->design().type();
130  else if(type==InDetDD::PixelBarrel) region = pixelBarrelFlat;
131  else region = pixelEndcap;
132 
133  const PixelID* pixel_id = static_cast<const PixelID *>(detEl->getIdHelper());
134  layer = pixel_id->layer_disk(detEl->identify());
135  eta_module = pixel_id->eta_module(detEl->identify());
136  }
137  else if (detEl->isSCT()) {
138  region = (detEl->isBarrel() ? stripBarrel : stripEndcap);
139 
140  const SCT_ID* sct_id = static_cast<const SCT_ID *>(detEl->getIdHelper());
141  layer = sct_id->layer_disk(detEl->identify());
142  eta_module = sct_id->eta_module(detEl->identify());
143  }
144 
145  unsigned short key = makeKey(region, layer, eta_module);
146  for (auto &[stat_key, stat_hits, stat_outlier_hits, stat_shared_hits] : m_stat) {
147  if (stat_key == key) {
148  stat_hits += ((hit_selection & HitSummaryData::Hit)!=0);
149  stat_outlier_hits += ((hit_selection & HitSummaryData::Outlier)!=0);
150  stat_shared_hits += ((hit_selection & HitSummaryData::SharedHit)!=0);
151  return true;
152  }
153  }
154  m_stat.emplace_back( std::make_tuple(key,
155  ((hit_selection & HitSummaryData::Hit)!=0),
156  ((hit_selection & HitSummaryData::Outlier)!=0),
157  ((hit_selection & HitSummaryData::SharedHit)!=0)) );
158  return true;
159  }
160 
165  for (const auto &[stat_key, stat_hits, stat_outlier_hits, stat_shared_hits] : m_stat) {
166  unsigned short region=regionFromKey(stat_key);
167  m_hits.at(region) += stat_hits;
168  m_outlierHits.at(region) += stat_outlier_hits;
169  m_sharedHits.at(region) += stat_shared_hits;
170  ++m_layers.at(region);
171  }
172  for (unsigned int region_i=0; region_i<unknown+1; ++region_i) {
173  m_hits.at(s_type.at(region_i)) += m_hits[region_i];
174  m_outlierHits.at(s_type.at(region_i)) += m_outlierHits[region_i];
175  m_sharedHits.at(s_type.at(region_i)) += m_sharedHits[region_i];
176  m_layers.at(s_type.at(region_i)) += m_layers[region_i];
177  m_hits.at(Total) += m_hits[region_i];
178  m_outlierHits.at(Total) += m_outlierHits[region_i];
179  m_sharedHits.at(Total) += m_sharedHits[region_i];
180  m_layers.at(Total) += m_layers[region_i];
181  }
182  }
183 
189  return m_layers.at(region);
190  }
191 
197  return m_hits.at(region);
198  }
199 
205  return m_outlierHits.at(region);
206  }
207 
213  return m_sharedHits.at(region);
214  }
215 
216 
221  template <unsigned short HIT_SELECTION>
223  uint8_t total=0u;
224  unsigned short key = makeKey(region, layer, 0);
225  for (const auto &[stat_key, stat_hits, stat_outlier_hits, stat_shared_hits] : m_stat) {
226  if ((stat_key & LAYER_REGION_MASK) == key) {
227  if constexpr(HIT_SELECTION & HitSummaryData::Hit) {
228  total += stat_hits;
229  }
230  if constexpr(HIT_SELECTION & HitSummaryData::Outlier) {
231  total += stat_outlier_hits;
232  }
233  if constexpr(HIT_SELECTION & HitSummaryData::SharedHit) {
234  total += stat_shared_hits;
235  }
236  }
237  }
238  return total;
239  }
240 
241  private:
242  std::vector< std::tuple<unsigned short, uint8_t, uint8_t, uint8_t> > m_stat;
243  std::array<uint8_t, Total+1> m_hits;
244  std::array<uint8_t, Total+1> m_outlierHits;
245  std::array<uint8_t, Total+1> m_sharedHits;
246  std::array<uint8_t, Total+1> m_layers;
247  static constexpr std::array<uint8_t, unknown+1> s_type
249  };
250 
253  class SumOfValues {
254  private:
255  double m_sum = 0.;
256  double m_sum2 = 0.;
257  unsigned int m_n =0u;
258  public:
259  void reset() {
260  m_sum=0.;
261  m_sum2=0.;
262  m_n=0u;
263  }
264  void add(double value) {
265  m_sum += value;
266  m_sum2 += value * value;
267  ++m_n;
268  }
269  std::array<double,2> meanAndBiasedVariance() const {
270  double inv_n = m_n>0 ? 1/m_n : 0 ;
271  double mean = m_sum * inv_n;
272  return std::array<double, 2> { mean, (m_sum2 - m_sum * mean) * inv_n };
273  }
274  double biasedVariance() const {
275  double inv_n = m_n>0 ? 1./m_n : 0 ;
276  return (m_sum2 - m_sum * m_sum *inv_n) * inv_n;
277  }
278  };
279 
290  void gatherTrackSummaryData(const ActsTrk::TrackContainer &tracksContainer,
291  const typename ActsTrk::TrackContainer::ConstTrackProxy &track,
295  &measurement_to_summary_type,
296  SumOfValues &chi2_stat_out,
297  HitSummaryData &hit_info_out,
298  std::vector<ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType > &param_state_idx_out,
300  to_underlying(xAOD::UncalibMeasType::nTypes)> &special_hit_counts_out);
301 
302 }
303 #endif
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
ActsTrk::detail::HitSummaryData::computeSummaries
void computeSummaries()
Compute the varius summaries.
Definition: HitSummaryDataUtils.h:164
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
ActsTrk::TrackContainer
Definition: TrackContainer.h:31
mean
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
Definition: dependence.cxx:254
ActsTrk::detail::SumOfValues
Helper class to gather statistics and compute the biased variance.
Definition: HitSummaryDataUtils.h:253
ActsTrk::detail::gatherTrackSummaryData
void gatherTrackSummaryData(const ActsTrk::TrackContainer &tracksContainer, const typename ActsTrk::TrackContainer::ConstTrackProxy &track, const std::array< const InDetDD::SiDetectorElementCollection *, to_underlying(xAOD::UncalibMeasType::nTypes)> &siDetEleColl, const std::array< unsigned short, to_underlying(xAOD::UncalibMeasType::nTypes)> &measurement_to_summary_type, SumOfValues &chi2_stat_out, HitSummaryData &hit_info_out, std::vector< ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType > &param_state_idx_out, std::array< std::array< uint8_t, to_underlying(HitCategory::N)>, to_underlying(xAOD::UncalibMeasType::nTypes)> &special_hit_counts_out)
Helper to gather track summary information from the track states of the specified track.
Definition: HitSummaryDataUtils.cxx:14
ActsTrk::detail::HitSummaryData::contributingHits
uint8_t contributingHits(DetectorRegion region) const
return the number of hits in a certain detector region.
Definition: HitSummaryDataUtils.h:196
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
ActsTrk::detail::to_underlying
constexpr std::underlying_type< T_EnumClass >::type to_underlying(T_EnumClass an_enum)
Helper to convert class enum into an integer.
Definition: HitSummaryDataUtils.h:24
ActsTrk::detail::HitSummaryData::EHitSelection
EHitSelection
Definition: HitSummaryDataUtils.h:95
ActsTrk::detail::HitSummaryData::Hit
@ Hit
Definition: HitSummaryDataUtils.h:96
ActsTrk::detail::HitSummaryData::contributingSharedHits
uint8_t contributingSharedHits(DetectorRegion region) const
return the number of shared hits in a certain detector region.
Definition: HitSummaryDataUtils.h:212
ActsTrk::detail::HitSummaryData::Outlier
@ Outlier
Definition: HitSummaryDataUtils.h:97
ActsTrk::detail::HitSummaryData::pixelEndcap
@ pixelEndcap
Definition: HitSummaryDataUtils.h:45
ActsTrk::detail::HitSummaryData::LAYER_REGION_MASK
constexpr static unsigned short LAYER_REGION_MASK
Definition: HitSummaryDataUtils.h:55
athena.value
value
Definition: athena.py:124
ActsTrk::detail::HitCategory::DeadSensor
@ DeadSensor
Definition: HitSummaryDataUtils.h:30
ActsTrk::detail::HitSummaryData::SIGNED_ETA_MOD_MASK
constexpr static unsigned short SIGNED_ETA_MOD_MASK
Definition: HitSummaryDataUtils.h:61
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ActsTrk::detail::HitSummaryData::makeKey
constexpr static unsigned short makeKey(unsigned short region, unsigned short layer, int eta_mod)
Compute a counter key for the given region, layer and module eta module index.
Definition: HitSummaryDataUtils.h:68
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
InDetDD::SolidStateDetectorElementBase::getIdHelper
const AtlasDetectorID * getIdHelper() const
Returns the id helper (inline)
InDetDD::PixelInclined
@ PixelInclined
Definition: DetectorDesign.h:46
ActsTrk::detail::HitSummaryData::s_type
static constexpr std::array< uint8_t, unknown+1 > s_type
Definition: HitSummaryDataUtils.h:248
ActsTrk::detail::HitSummaryData::REGION_MASK
constexpr static unsigned short REGION_MASK
Definition: HitSummaryDataUtils.h:57
ActsTrk::detail::HitSummaryData::m_outlierHits
std::array< uint8_t, Total+1 > m_outlierHits
Definition: HitSummaryDataUtils.h:244
Hit
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:16
ActsTrk::detail::HitSummaryData::SIGNED_ETA_MOD_BITS
constexpr static unsigned short SIGNED_ETA_MOD_BITS
Definition: HitSummaryDataUtils.h:60
ActsTrk::detail::HitSummaryData
Helper class to gather hit summary information for e.g.
Definition: HitSummaryDataUtils.h:38
ActsTrk::detail::HitSummaryData::contributingOutlierHits
uint8_t contributingOutlierHits(DetectorRegion region) const
return the number of outliers in a certain detector region.
Definition: HitSummaryDataUtils.h:204
ActsTrk::detail::HitSummaryData::addHit
bool addHit(const InDetDD::SiDetectorElementCollection *detector_elements, unsigned int id_hash, EHitSelection hit_selection)
update summaries to take the given hit into account.
Definition: HitSummaryDataUtils.h:119
InDetDD::DetectorType
DetectorType
Definition: DetectorDesign.h:45
ActsTrk::detail::HitSummaryData::m_hits
std::array< uint8_t, Total+1 > m_hits
Definition: HitSummaryDataUtils.h:243
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
ActsTrk::detail::HitSummaryData::contributingLayers
uint8_t contributingLayers(DetectorRegion region) const
return the number of layers contributing to the hit collection in the given detector region.
Definition: HitSummaryDataUtils.h:188
ActsTrk::detail::HitCategory::N
@ N
Definition: HitSummaryDataUtils.h:32
ActsTrk::detail::HitSummaryData::unknown
@ unknown
Definition: HitSummaryDataUtils.h:48
InDetDD::DetectorDesign::type
virtual DetectorType type() const
Type of element.
Definition: DetectorDesign.cxx:101
ActsTrk::detail::HitSummaryData::Total
@ Total
Definition: HitSummaryDataUtils.h:52
ActsTrk::detail::HitSummaryData::pixelBarrelFlat
@ pixelBarrelFlat
Definition: HitSummaryDataUtils.h:43
ActsTrk::detail::HitSummaryData::layerFromKey
constexpr static uint8_t layerFromKey(unsigned short key)
extract the layer index from the given key.
Definition: HitSummaryDataUtils.h:90
ActsTrk::detail::HitCategory::ESpecialHitCategories
ESpecialHitCategories
Definition: HitSummaryDataUtils.h:29
ActsTrk::detail::HitSummaryData::m_stat
std::vector< std::tuple< unsigned short, uint8_t, uint8_t, uint8_t > > m_stat
Definition: HitSummaryDataUtils.h:242
fill
void fill(H5::Group &out_file, size_t iterations)
Definition: test-hdf5-writer.cxx:95
InDetDD::SiDetectorElement::isPixel
bool isPixel() const
lumiFormat.array
array
Definition: lumiFormat.py:91
ActsTrk::detail::HitSummaryData::sum
uint8_t sum(DetectorRegion region, uint8_t layer) const
return the total number of hits, outliers, and/or shared hits in the givrn detector region and layer.
Definition: HitSummaryDataUtils.h:222
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:626
xAOD::UncalibMeasType::nTypes
@ nTypes
PixelID::eta_module
int eta_module(const Identifier &id) const
Definition: PixelID.h:651
ActsTrk::detail::HitSummaryData::m_sharedHits
std::array< uint8_t, Total+1 > m_sharedHits
Definition: HitSummaryDataUtils.h:245
InDetDD::PixelBarrel
@ PixelBarrel
Definition: DetectorDesign.h:46
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
ActsTrk::detail::HitSummaryData::LAYER_MASK
constexpr static unsigned short LAYER_MASK
Definition: HitSummaryDataUtils.h:59
InDetDD::SiDetectorElement::isBarrel
bool isBarrel() const
SiDetectorElementCollection.h
python.Dumpers.typename
def typename(t)
Definition: Dumpers.py:194
SiDetectorElement.h
ActsTrk::detail::HitSummaryData::HitAndOutlier
@ HitAndOutlier
Definition: HitSummaryDataUtils.h:98
ActsTrk::detail::HitSummaryData::stripTotal
@ stripTotal
Definition: HitSummaryDataUtils.h:50
ActsTrk::detail::HitSummaryData::pixelBarrelInclined
@ pixelBarrelInclined
Definition: HitSummaryDataUtils.h:44
ActsTrk::detail::HitSummaryData::REGION_BITS
constexpr static unsigned short REGION_BITS
Definition: HitSummaryDataUtils.h:56
ActsTrk::detail::HitSummaryData::stripBarrel
@ stripBarrel
Definition: HitSummaryDataUtils.h:46
SCT_ID
Definition: SCT_ID.h:68
ActsTrk::detail::SumOfValues::biasedVariance
double biasedVariance() const
Definition: HitSummaryDataUtils.h:274
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
ActsTrk::detail::HitSummaryData::SharedHit
@ SharedHit
Definition: HitSummaryDataUtils.h:99
ActsTrk::detail::HitSummaryData::m_layers
std::array< uint8_t, Total+1 > m_layers
Definition: HitSummaryDataUtils.h:246
ActsTrk::detail::HitSummaryData::regionFromKey
constexpr static DetectorRegion regionFromKey(unsigned short key)
extract the region index from the given key.
Definition: HitSummaryDataUtils.h:84
InDetDD::SiDetectorElement::isSCT
bool isSCT() const
ActsTrk::detail::HitSummaryData::LAYER_BITS
constexpr static unsigned short LAYER_BITS
Definition: HitSummaryDataUtils.h:58
ActsTrk::detail
Definition: Decoration.h:15
ActsTrk::detail::HitCategory::Hole
@ Hole
Definition: HitSummaryDataUtils.h:31
ActsTrk::detail::HitSummaryData::pixelTotal
@ pixelTotal
Definition: HitSummaryDataUtils.h:49
ActsTrk::detail::SumOfValues::reset
void reset()
Definition: HitSummaryDataUtils.h:259
ActsTrk::detail::SumOfValues::m_sum
double m_sum
Definition: HitSummaryDataUtils.h:255
InDetDD::SiDetectorElement::design
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
ActsTrk::detail::HitSummaryData::DetectorRegion
DetectorRegion
Regions for which hit counts are computed.
Definition: HitSummaryDataUtils.h:42
ActsTrk::detail::HitSummaryData::stripEndcap
@ stripEndcap
Definition: HitSummaryDataUtils.h:47
PixelID
Definition: PixelID.h:67
ActsTrk::detail::HitSummaryData::unknownTotal
@ unknownTotal
Definition: HitSummaryDataUtils.h:51
ActsTrk::detail::SumOfValues::m_sum2
double m_sum2
Definition: HitSummaryDataUtils.h:256
ActsTrk::detail::SumOfValues::add
void add(double value)
Definition: HitSummaryDataUtils.h:264
TrackContainer.h
InDetDD::SolidStateDetectorElementBase::identify
virtual Identifier identify() const override final
identifier of this detector element (inline)
ActsTrk::detail::SumOfValues::m_n
unsigned int m_n
Definition: HitSummaryDataUtils.h:257
ActsTrk::detail::HitSummaryData::reset
void reset()
reset all summary counters to zero.
Definition: HitSummaryDataUtils.h:104
ActsTrk::detail::SumOfValues::meanAndBiasedVariance
std::array< double, 2 > meanAndBiasedVariance() const
Definition: HitSummaryDataUtils.h:269
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37