Loading [MathJax]/jax/input/TeX/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
StripModuleHelper.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_STRIPMODULEHELPER_H
5 #define INDET_STRIPMODULEHELPER_H
6 
8 #include <cassert>
9 #include <array>
10 #include <stdexcept>
11 #include <algorithm>
12 #include "ModuleKeyHelper.h"
13 
14 namespace InDet {
17  class StripModuleHelper : public ModuleKeyHelper<unsigned short, // key type
18  12, // bits for rows
19  0, // bits for columns
20  0, // bits for chip
21  0, // bits for flags
22  0 // no masks defined for strips)
23  > {
24  public:
25 
26 
27  // mask with every bit set for all chips, columns, rows, but the mask index bits.
28  static constexpr unsigned int getStripMask() { return MaskUtils::createMask<0,ROW_BITS+CHIP_BITS>(); }
29  // mask with row and column bits set to zero.
30  static constexpr unsigned int getChipMask() { return MaskUtils::createMask<ROW_BITS,ROW_BITS+CHIP_BITS>(); }
31 
32 
34  {
35  const InDetDD::SCT_ModuleSideDesign *stripModuleDesign = dynamic_cast<const InDetDD::SCT_ModuleSideDesign *>(&design);
36  if (stripModuleDesign) {
37  m_rows = stripModuleDesign->cells(); // strips
38  m_columns=1u;
39  }
40  }
41  operator bool () const { return m_rows>0; }
42 
43  unsigned int columns() const { return m_columns; }
44  unsigned int rows() const { return m_rows; }
45  static constexpr unsigned int columnsPerCircuit() { return 1u; }
46  unsigned int rowsPerCircuit() const { return m_rows; }
47  static constexpr unsigned int circuitsPerColumn() { return 1u; }
48  static constexpr unsigned int circuitsPerRow() { return 1u; }
49 
50  static constexpr unsigned int columnsPerMask([[maybe_unused]] unsigned int mask_idx) { return 1u;}
51 
57  KEY_TYPE hardwareCoordinates(unsigned int row, unsigned int column) const {
58  unsigned int chip =0;
59  if (circuitsPerColumn()>1) {
60  chip += (row/rowsPerCircuit()) * circuitsPerRow();
61  row = row % rowsPerCircuit();
62  if (chip>0) {
63  row = rowsPerCircuit() - row -1;
64  column = columns() - column -1;
65  }
66  }
67  if (circuitsPerRow()>1) {
68  chip += column/columnsPerCircuit();
70  }
71  return makeKey(0u, chip, column, row);
72  }
73 
76  unsigned int nCells() const {
77  return m_columns * m_rows;
78  }
81  unsigned int nSensorColumns() const {
82  return m_columns;
83  }
86  unsigned int nSensorRows() const {
87  return m_rows;
88  }
92  unsigned int nElements([[maybe_unused]] unsigned int mask_i) const {
93  assert( mask_i==0);
94  return nCells();
95  }
96 
101  bool isMatchingDefect( unsigned int key_ref, unsigned int key_test) const {
102  return isOverlapping(key_ref, key_test);
103  }
104 
109  std::array<unsigned int,4> offlineRange(unsigned int key) const {
110  unsigned int mask_index = ( N_MASKS > 0 ? getMaskIdx(key) : 0u);
111  if (mask_index !=0) {
112  if (getRow(key) !=0) {
113  throw std::runtime_error("invalid key");
114  };
115 
116  unsigned int chip=getChip(key);
117  unsigned int row=getRow(key);
118  unsigned int row_end=row + rowsPerCircuit()-1;
119  unsigned int column=getColumn(key);
120  unsigned int column_end= column + columnsPerMask( mask_index);
121 
122  unsigned int chip_row = chip / circuitsPerRow();
123  unsigned int chip_column = chip % circuitsPerRow();
124 
125  column += chip_column * columnsPerCircuit();
126  column_end += chip_column * columnsPerCircuit();
127  if (chip_row>=1) {
128  column = columns() - column -1;
129  column_end = columns() - column_end -1;
130 
131  row = rowsPerCircuit() - row -1 + chip_row * rowsPerCircuit();
132  row_end = rowsPerCircuit() - row_end -1 + chip_row * rowsPerCircuit();
133  }
134  if (swapOfflineRowsColumns()) {
135  return std::array<unsigned int,4>{ std::min(column, column_end), std::max(column,column_end)+1,
136  std::min(row, row_end), std::max(row, row_end)+1 };
137  }
138  else {
139  return std::array<unsigned int,4>{ std::min(row, row_end), std::max(row, row_end)+1,
140  std::min(column, column_end), std::max(column,column_end)+1 };
141  }
142  }
143  else {
144  unsigned int chip=getChip(key);
145  unsigned int row=getRow(key);
146  unsigned int column=getColumn(key);
147 
148  unsigned int chip_row = chip / circuitsPerRow();
149  unsigned int chip_column = chip % circuitsPerRow();
150 
151  column += chip_column * columnsPerCircuit();
152  if (chip_row>=1) {
153  column = columns() - column -1;
154 
155  row = rowsPerCircuit() - row -1 + chip_row * rowsPerCircuit();
156  }
157  if (swapOfflineRowsColumns()) {
158  return std::array<unsigned int,4 >{ column, column + 1,
159  row, row +1 };
160  }
161  else {
162  return std::array<unsigned int,4>{ row, row + 1,
163  column, column +1 };
164  }
165  }
166  }
167 
168  static constexpr bool swapOfflineRowsColumns() { return false;}
169  private:
170 
171  unsigned short m_rows = 0;
172  unsigned short m_columns = 0;
173  };
174 }
175 #endif
InDet::StripModuleHelper::columnsPerCircuit
static constexpr unsigned int columnsPerCircuit()
Definition: StripModuleHelper.h:45
query_example.row
row
Definition: query_example.py:24
InDet::StripModuleHelper
Helper class to convert between offline column, row and hardware chip, column, row coordinates.
Definition: StripModuleHelper.h:23
InDet::StripModuleHelper::nSensorColumns
unsigned int nSensorColumns() const
Number of offline columns aka.
Definition: StripModuleHelper.h:81
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::getChip
static constexpr unsigned short getChip(unsigned short key)
Get the column index from a full key.
Definition: ModuleKeyHelper.h:107
InDet::StripModuleHelper::circuitsPerRow
static constexpr unsigned int circuitsPerRow()
Definition: StripModuleHelper.h:48
SCT_ModuleSideDesign.h
InDetDD::SCT_ModuleSideDesign
Definition: SCT_ModuleSideDesign.h:40
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
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
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::N_MASKS
static constexpr unsigned int N_MASKS
Definition: ModuleKeyHelper.h:52
DeMoUpdate.column
dictionary column
Definition: DeMoUpdate.py:1110
InDet::StripModuleHelper::nElements
unsigned int nElements([[maybe_unused]] unsigned int mask_i) const
return the maximum number of unique mask (or group) defects per module.
Definition: StripModuleHelper.h:92
InDetDD::SCT_ModuleSideDesign::cells
int cells() const
number of readout stips within module side:
Definition: SCT_ModuleSideDesign.h:228
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
InDet::StripModuleHelper::nCells
unsigned int nCells() const
Return the total number strips of this module.
Definition: StripModuleHelper.h:76
InDet::StripModuleHelper::rowsPerCircuit
unsigned int rowsPerCircuit() const
Definition: StripModuleHelper.h:46
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::getColumn
static constexpr unsigned short getColumn(unsigned short key)
Get the column index from a full key.
Definition: ModuleKeyHelper.h:99
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::makeKey
static constexpr unsigned short makeKey(unsigned int mask_sel, unsigned int chip, unsigned int col, unsigned int row=0u)
Create a key from mask, chip, column and row indices.
Definition: ModuleKeyHelper.h:89
InDet::StripModuleHelper::m_columns
unsigned short m_columns
Definition: StripModuleHelper.h:172
InDet::StripModuleHelper::circuitsPerColumn
static constexpr unsigned int circuitsPerColumn()
Definition: StripModuleHelper.h:47
InDet::StripModuleHelper::swapOfflineRowsColumns
static constexpr bool swapOfflineRowsColumns()
Definition: StripModuleHelper.h:168
InDet::StripModuleHelper::getChipMask
static constexpr unsigned int getChipMask()
Definition: StripModuleHelper.h:30
InDet::StripModuleHelper::columnsPerMask
static constexpr unsigned int columnsPerMask([[maybe_unused]] unsigned int mask_idx)
Definition: StripModuleHelper.h:50
InDet::StripModuleHelper::StripModuleHelper
StripModuleHelper(const InDetDD::SiDetectorDesign &design)
Definition: StripModuleHelper.h:33
InDet::StripModuleHelper::offlineRange
std::array< unsigned int, 4 > offlineRange(unsigned int key) const
Convenience function to return offline column and row ranges matching the defect-area of the given ke...
Definition: StripModuleHelper.h:109
InDet::StripModuleHelper::nSensorRows
unsigned int nSensorRows() const
Number of offline rows aka.
Definition: StripModuleHelper.h:86
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::getRow
static constexpr unsigned short getRow(unsigned short key)
Get the row index from a full key.
Definition: ModuleKeyHelper.h:103
InDet::StripModuleHelper::m_rows
unsigned short m_rows
Definition: StripModuleHelper.h:171
InDet::StripModuleHelper::columns
unsigned int columns() const
Definition: StripModuleHelper.h:43
InDet::StripModuleHelper::getStripMask
static constexpr unsigned int getStripMask()
Definition: StripModuleHelper.h:28
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::isOverlapping
bool isOverlapping(unsigned short key_ref, unsigned short key_test) const
Test whether a single cell (e.g.
Definition: ModuleKeyHelper.h:195
InDet::ModuleKeyHelper< unsigned short, 12, 0, 0, 0, 0 >::getMaskIdx
static constexpr unsigned short getMaskIdx(unsigned short key)
Get the mask index from a full key.
Definition: ModuleKeyHelper.h:111
InDet::ModuleKeyHelper
Helper class to create keys for defects described by chip, column and row indices,...
Definition: ModuleKeyHelper.h:47
InDetDD::SiDetectorDesign
Definition: SiDetectorDesign.h:50
InDet::StripModuleHelper::rows
unsigned int rows() const
Definition: StripModuleHelper.h:44
InDet::StripModuleHelper::hardwareCoordinates
KEY_TYPE hardwareCoordinates(unsigned int row, unsigned int column) const
Compute "hardware" coordinates from offline coordinates.
Definition: StripModuleHelper.h:57
InDet::StripModuleHelper::isMatchingDefect
bool isMatchingDefect(unsigned int key_ref, unsigned int key_test) const
Test whether the given packed hardware coordinates match the given defect.
Definition: StripModuleHelper.h:101
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
ModuleKeyHelper.h
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37