Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
StripDefectsEmulatorAlg.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 #ifndef InDet_StripDefectsEmulatorAlg_H
5 #define InDet_StripDefectsEmulatorAlg_H
6 
7 #include "DefectsEmulatorAlg.h"
9 #include "StripEmulatedDefects.h"
10 #include "InDetIdentifier/SCT_ID.h"
12 
13 namespace InDet {
14 
15  template <>
17 
18  using ID_Helper = const SCT_ID*;
19 
22  struct IDAdapter {
24  static const std::vector<int> s_dummyvector;
25 
26  IDAdapter(ID_Helper helper) : m_idHelper(helper) {}
27  int row_index(const Identifier &rdoID) const { return m_idHelper->strip(rdoID); }
28  int col_index(const Identifier &rdoID) const { return m_idHelper->row(rdoID); }
29  template <typename T_ModuleHelper>
30  std::unique_ptr<SCT3_RawData> createNoiseHit(const T_ModuleHelper &helper, const Identifier &identifier, unsigned int cell_idx, unsigned int tot) {
31  unsigned int row_aka_phi=cell_idx % helper.rows();
32  unsigned int col_aka_eta=cell_idx / helper.rows();
33  constexpr unsigned int group_size =1u;
34  constexpr unsigned int errors=0u;
35  return std::make_unique<SCT3_RawData>( m_idHelper->strip_id(identifier,row_aka_phi, col_aka_eta),
36  makeStripWord( /*time bin */ tot, /*stripIn11bits*/ row_aka_phi, group_size, errors ),
37  &s_dummyvector);
38  }
39 
42  unsigned int cloneOrRejectHit( const StripModuleHelper &module_helper,
43  const StripEmulatedDefects &emulated_defects,
44  unsigned int idHash,
45  unsigned int row_idx_aka_phi,
46  unsigned int col_idx_aka_eta,
47  const SCT_RDORawData &rdo,
49  unsigned int n_new=0u;
50  assert( rdo.getGroupSize() > 0);
51  // search for all defects starting from the last strip in the group (search is performed in descending order)
52  StripModuleHelper::KEY_TYPE rdo_end_key = module_helper.hardwareCoordinates(row_idx_aka_phi+rdo.getGroupSize()-1, col_idx_aka_eta);
53  auto [defect_iter, end_iter] =emulated_defects.lower_bound(idHash, rdo_end_key);
54 
55  // A) 0 defect overlapping with strip group
56  // => lower_bound(strip+group_size()-1) < strip-mask+1 -> clone
57  // B) 1 defect overlapping
58  // => lower_bound(strip+group_size()-1) < strip >= strip-mask+1 -> hit[strip .. defect-1], hit[defect+mask.. strip+group_size-1]
59  // iter++ < strip-mask+1
60  // C) n defects overlapping
61  // => lower_bound(strip+group_size()-1) < strip >= strip-mask+1 -> hit[defect+mask.. strip+group_size-1],
62  // defect+mast>strip ? hit[defect+mask.. last_defect-1] -> loop
63  // : hit[strip..last_defect-1] -> end
64 
65  StripModuleHelper::KEY_TYPE rdo_key = module_helper.hardwareCoordinates(row_idx_aka_phi, col_idx_aka_eta);
66  unsigned int strip = module_helper.getRow(rdo_key);
67  std::pair<unsigned int, unsigned int> overlap = (defect_iter != end_iter
68  ? getOverlap( module_helper,
69  *defect_iter,
70  strip,
71  rdo.getGroupSize())
72  : std::make_pair(0u,0u));
73  if (overlap.second==0) {
74  dest.push_back(std::make_unique<SCT3_RawData>(dynamic_cast<const SCT3_RawData &>(rdo)).release() );
75  ++n_new;
76  }
77  else if (static_cast<unsigned int>(rdo.getGroupSize()) != overlap.second) {
78  const SCT3_RawData &sct3_rdo = dynamic_cast<const SCT3_RawData &>(rdo);
79  Identifier module_id = m_idHelper->module_id(rdo.identify());
80 
81  unsigned int last_defect_start = strip + rdo.getGroupSize();
82  for (;;) {
83  unsigned int start = overlap.first + overlap.second;
84  unsigned int group_size = last_defect_start - start;
85  if (group_size==0u) break;
86  dest.push_back(std::make_unique<SCT3_RawData>( m_idHelper->strip_id(module_id,start, col_idx_aka_eta),
87  makeStripWord( sct3_rdo.getTimeBin(), start, group_size, getErrorBits(rdo) ),
88  &s_dummyvector));
89  ++n_new;
90  if (defect_iter == end_iter) break;
91 
92  last_defect_start = overlap.first;
93  overlap = std::make_pair(strip, 0u);
94  ++defect_iter;
95  if (defect_iter != end_iter) {
96  overlap = getOverlap( module_helper,
97  *defect_iter,
98  strip,
99  rdo.getGroupSize());
100  if (overlap.second == 0u) {
101  overlap.first= strip;
102  }
103  }
104  }
105  }
106  return n_new;
107  }
108 
109  protected:
117  static inline unsigned int makeStripWord( unsigned int time_bin, unsigned int strip, unsigned int group_size, unsigned int error_bits) {
118  assert((group_size & (~0x7FFu)) == 0u);
119  assert((strip & (~0x7FFu)) == 0u);
120  assert((time_bin & (~0x7u)) == 0u);
121  assert((error_bits & (~0x3Fu)) == 0u );
122  unsigned int word = group_size | (strip<<11u) | (time_bin<<22u) | (error_bits <<25u);
123  return word;
124  }
127  static inline unsigned int getErrorBits( const SCT_RDORawData &rdo ) {
128  return (rdo.getWord() >>25u) & 0x7u;
129  }
138  std::pair<unsigned int,unsigned int> getOverlap( const StripModuleHelper &module_helper,
139  StripModuleHelper::KEY_TYPE defect_key,
140  unsigned int strip,
141  unsigned int sequence_length) {
144  unsigned int defect_row = module_helper.getRow(defect_key);
145  unsigned int strip_row = strip;
146  unsigned int mask=module_helper.getMask(defect_key);
147  if (mask >1u) {
148  if (defect_row+mask >= strip_row && defect_row < strip_row+sequence_length) {
149  return std::make_pair( defect_row > strip_row ? defect_row : strip_row,
150  (defect_row+mask <= strip_row+sequence_length ? mask : (strip_row+sequence_length) - defect_row ));
151  }
152  }
153  else {
154  if (defect_row >= strip_row && defect_row < strip_row+sequence_length) {
155  return std::make_pair(defect_row,1u);
156  }
157  }
158  return std::make_pair(0u,0u);
159  }
160 
161 
162  };
163 
168  static constexpr ActsTrk::DetectorType DETECTOR_TYPE = ActsTrk::DetectorType::Sct;
169  };
170 
178  class StripDefectsEmulatorAlg :public DefectsEmulatorAlg<SCT_RDO_Container>
179  {
180  public:
182  };
183 }
184 #endif
SCT_RDORawData::getGroupSize
virtual int getGroupSize() const =0
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
InDet::StripDefectsEmulatorAlg
Algorithm which selectively copies hits from an input SCT_RDO_Container.
Definition: StripDefectsEmulatorAlg.h:179
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::makeStripWord
static unsigned int makeStripWord(unsigned int time_bin, unsigned int strip, unsigned int group_size, unsigned int error_bits)
Convenience method to create the strip word from the various components.
Definition: StripDefectsEmulatorAlg.h:117
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::IDAdapter
IDAdapter(ID_Helper helper)
Definition: StripDefectsEmulatorAlg.h:26
InDet::StripModuleHelper
Helper class to convert between offline column, row and hardware chip, column, row coordinates.
Definition: StripModuleHelper.h:23
ActsTrk::DetectorType
DetectorType
Simple enum to Identify the Type of the ACTS sub detector.
Definition: GeometryDefs.h:17
SCT_ModuleSideDesign.h
InDetDD::SCT_ModuleSideDesign
Definition: SCT_ModuleSideDesign.h:40
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::KEY_TYPE
unsigned short KEY_TYPE
Definition: ModuleKeyHelper.h:62
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::m_idHelper
ID_Helper m_idHelper
Definition: StripDefectsEmulatorAlg.h:23
perfmonmt-printer.dest
dest
Definition: perfmonmt-printer.py:189
ActsTrk::DetectorType::Sct
@ Sct
SCT_RDORawData
Definition: SCT_RDORawData.h:24
InDetRawDataContainer
Definition: InDetRawDataContainer.h:27
xAOD::identifier
identifier
Definition: UncalibratedMeasurement_v1.cxx:15
SCT_ID::module_id
Identifier module_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: SCT_ID.h:416
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::getErrorBits
static unsigned int getErrorBits(const SCT_RDORawData &rdo)
Convenience method to extract the error component from the packed word of the strip RDO.
Definition: StripDefectsEmulatorAlg.h:127
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::getOverlap
std::pair< unsigned int, unsigned int > getOverlap(const StripModuleHelper &module_helper, StripModuleHelper::KEY_TYPE defect_key, unsigned int strip, unsigned int sequence_length)
Convenience function to return the defect region overlapping with the strip group.
Definition: StripDefectsEmulatorAlg.h:138
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::s_dummyvector
static const std::vector< int > s_dummyvector
Definition: StripDefectsEmulatorAlg.h:24
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:112
InDet::StripEmulatedDefects
Specialization of emulated defects conditions data for ITk strips Defect conditions data for defects ...
Definition: StripEmulatedDefects.h:15
SCT_RDO_Container.h
InDet::EmulatedDefects::lower_bound
static std::pair< typename std::vector< KEY_TYPE >::iterator, typename std::vector< KEY_TYPE >::iterator > lower_bound(std::vector< KEY_TYPE > &module_defects, KEY_TYPE key)
Convenience method to find the preceding defect.
Definition: EmulatedDefects.h:60
DefectsEmulatorAlg.h
SCT3_RawData
Definition: SCT3_RawData.h:24
mergePhysValFiles.errors
list errors
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:43
SCT_ID::row
int row(const Identifier &id) const
Definition: SCT_ID.h:758
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::CHIP_MASK
static constexpr unsigned short CHIP_MASK
Definition: ModuleKeyHelper.h:59
InDetRawDataCollection
Definition: InDetRawDataCollection.h:31
SCT3_RawData::getTimeBin
int getTimeBin() const
Definition: SCT3_RawData.h:92
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::cloneOrRejectHit
unsigned int cloneOrRejectHit(const StripModuleHelper &module_helper, const StripEmulatedDefects &emulated_defects, unsigned int idHash, unsigned int row_idx_aka_phi, unsigned int col_idx_aka_eta, const SCT_RDORawData &rdo, InDetRawDataCollection< SCT_RDORawData > &dest)
Clone, reject or split strip RDOs depending on overlaps with defects.
Definition: StripDefectsEmulatorAlg.h:42
InDet::DefectsEmulatorTraits
Definition: DefectsEmulatorAlg.h:16
InDet::ModuleKeyHelper::getRow
static constexpr T getRow(T key)
Get the row index from a full key.
Definition: ModuleKeyHelper.h:103
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::col_index
int col_index(const Identifier &rdoID) const
Definition: StripDefectsEmulatorAlg.h:28
InDetRawData::getWord
unsigned int getWord() const
Definition: InDetRawData.h:47
SCT_ID
Definition: SCT_ID.h:68
SCT_ID::strip
int strip(const Identifier &id) const
Definition: SCT_ID.h:764
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::row_index
int row_index(const Identifier &rdoID) const
Definition: StripDefectsEmulatorAlg.h:27
InDet::DefectsEmulatorAlg
Algorithm template to selectivly copy RDOs from an InDetRawDataCollection.
Definition: DefectsEmulatorAlg.h:24
InDetRawData::identify
virtual Identifier identify() const override final
Definition: InDetRawData.h:41
InDet::StripModuleHelper::hardwareCoordinates
KEY_TYPE hardwareCoordinates(unsigned int row, unsigned int column) const
Compute "hardware" coordinates from offline coordinates.
Definition: StripModuleHelper.h:57
InDet::ModuleKeyHelper::getMask
T getMask(T key) const
Get the mask specified by the full key.
Definition: ModuleKeyHelper.h:134
StripEmulatedDefects.h
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::COL_MASK
static constexpr unsigned short COL_MASK
Definition: ModuleKeyHelper.h:58
InDet::DefectsEmulatorTraits< SCT_RDO_Container >::IDAdapter::createNoiseHit
std::unique_ptr< SCT3_RawData > createNoiseHit(const T_ModuleHelper &helper, const Identifier &identifier, unsigned int cell_idx, unsigned int tot)
Definition: StripDefectsEmulatorAlg.h:30
SCT_ID::strip_id
Identifier strip_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side, int strip) const
For an individual strip.
Definition: SCT_ID.h:535
Identifier
Definition: IdentifierFieldParser.cxx:14