ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_MonitorCondData Class Reference

Class for data object used in SCT_MonitorCondAlg and SCT_MonitorConditionsTool. More...

#include <SCT_MonitorCondData.h>

Collaboration diagram for SCT_MonitorCondData:

Public Member Functions

 SCT_MonitorCondData ()
 Constructor.
virtual ~SCT_MonitorCondData ()=default
 Destructor.
bool find (const IdentifierHash &hash, std::string &defectList) const
 Check if a module has a defect (a list of bad strips). If it does not have defect return false.
void insert (const IdentifierHash &hash, const std::string &defectList)
 Insert a new defect (a list of bad strips) for a module.
void clear ()
 Clear m_defectListArray.
std::size_t nBadStripsForModule (const IdentifierHash &moduleHash) const
 Get the number of bad strips for a module.
std::size_t nBadStripsForWafer (const IdentifierHash &waferHash) const
 Get the number of bad strips for a wafer.
std::size_t nBadStripsForChip (const IdentifierHash &waferHash, const int strip) const
 Get the number of bad strips for the chip, where a strip locates.
bool isBadStrip (const IdentifierHash &waferHash, const int strip) const
 Check if a strip is bad.
const std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE > & badStripsForModule (const IdentifierHash &waferHash) const
const std::array< std::array< std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE >, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULES > & badStrips () const

Private Member Functions

void clearModule (const std::size_t moduleIndex)
void fillBadStrip (const std::size_t moduleIndex, const int strip)

Private Attributes

std::array< std::string, SCT_ConditionsData::NUMBER_OF_MODULESm_defectListArray
 Store the relation between modules and defects (lists of bad strips).
std::array< std::array< std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE >, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULESm_badStripArray
std::array< std::array< std::array< std::size_t, SCT_ConditionsData::CHIPS_PER_SIDE >, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULESm_badChipArray {}
std::array< std::array< std::size_t, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULESm_badWaferArray {}
std::array< std::size_t, SCT_ConditionsData::NUMBER_OF_MODULESm_badModuleArray {}

Static Private Attributes

static const std::string s_separator {"-"}

Detailed Description

Class for data object used in SCT_MonitorCondAlg and SCT_MonitorConditionsTool.

Definition at line 29 of file SCT_MonitorCondData.h.

Constructor & Destructor Documentation

◆ SCT_MonitorCondData()

SCT_MonitorCondData::SCT_MonitorCondData ( )

Constructor.

Definition at line 22 of file SCT_MonitorCondData.cxx.

23{
24 clear();
25}
void clear()
Clear m_defectListArray.

◆ ~SCT_MonitorCondData()

virtual SCT_MonitorCondData::~SCT_MonitorCondData ( )
virtualdefault

Destructor.

Member Function Documentation

◆ badStrips()

const std::array< std::array< std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE >, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULES > & SCT_MonitorCondData::badStrips ( ) const
inline

Definition at line 67 of file SCT_MonitorCondData.h.

67 {
68 return m_badStripArray;
69 }
std::array< std::array< std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE >, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULES > m_badStripArray

◆ badStripsForModule()

const std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE > & SCT_MonitorCondData::badStripsForModule ( const IdentifierHash & waferHash) const
inline

Definition at line 58 of file SCT_MonitorCondData.h.

58 {
59 std::size_t moduleIndex{static_cast<std::size_t>(waferHash/SCT_ConditionsData::SIDES_PER_MODULE)};
60 // 0 to 1
61 std::size_t waferIndex{static_cast<std::size_t>(waferHash%SCT_ConditionsData::SIDES_PER_MODULE)};
62 return m_badStripArray[moduleIndex][waferIndex];
63 }

◆ clear()

void SCT_MonitorCondData::clear ( )

Clear m_defectListArray.

Definition at line 83 of file SCT_MonitorCondData.cxx.

84{
85 m_defectListArray.fill("");
86
87 for (std::size_t moduleIndex{0}; moduleIndex<SCT_ConditionsData::NUMBER_OF_MODULES; moduleIndex++) {
88 clearModule(moduleIndex);
89 }
90}
std::array< std::string, SCT_ConditionsData::NUMBER_OF_MODULES > m_defectListArray
Store the relation between modules and defects (lists of bad strips).
void clearModule(const std::size_t moduleIndex)

◆ clearModule()

void SCT_MonitorCondData::clearModule ( const std::size_t moduleIndex)
private

Definition at line 139 of file SCT_MonitorCondData.cxx.

139 {
140 // std::array is not automatically initialized.
141 for (std::size_t waferIndex{0}; waferIndex<SCT_ConditionsData::SIDES_PER_MODULE; waferIndex++) {
142 for (std::size_t chipIndex{0}; chipIndex<SCT_ConditionsData::CHIPS_PER_SIDE; chipIndex++) {
143 m_badStripArray[moduleIndex][waferIndex][chipIndex].reset();
144 m_badChipArray[moduleIndex][waferIndex][chipIndex] = 0;
145 }
146 m_badWaferArray[moduleIndex][waferIndex] = 0;
147 }
148 m_badModuleArray[moduleIndex] = 0;
149}
std::array< std::array< std::size_t, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULES > m_badWaferArray
std::array< std::size_t, SCT_ConditionsData::NUMBER_OF_MODULES > m_badModuleArray
std::array< std::array< std::array< std::size_t, SCT_ConditionsData::CHIPS_PER_SIDE >, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULES > m_badChipArray

◆ fillBadStrip()

void SCT_MonitorCondData::fillBadStrip ( const std::size_t moduleIndex,
const int strip )
private

Definition at line 151 of file SCT_MonitorCondData.cxx.

151 {
152 // 0 <= strip < 1536
153 if (strip<0) return;
155
156 // 0 or 1
157 std::size_t waferIndex{static_cast<std::size_t>(strip/SCT_ConditionsData::STRIPS_PER_WAFER)};
158 // 0 to 5
159 std::size_t chipIndex{static_cast<std::size_t>(strip/SCT_ConditionsData::STRIPS_PER_CHIP)%SCT_ConditionsData::CHIPS_PER_SIDE};
160 // 0 to 127
161 std::size_t stripIndex{static_cast<std::size_t>(strip%SCT_ConditionsData::STRIPS_PER_CHIP)};
162 // Set the strip as bad
163 m_badStripArray[moduleIndex][waferIndex][chipIndex].set(stripIndex);
164}

◆ find()

bool SCT_MonitorCondData::find ( const IdentifierHash & hash,
std::string & defectList ) const

Check if a module has a defect (a list of bad strips). If it does not have defect return false.

Definition at line 29 of file SCT_MonitorCondData.cxx.

30{
31 std::size_t moduleIndex{static_cast<std::size_t>(hash/SCT_ConditionsData::SIDES_PER_MODULE)};
32 std::string result{m_defectListArray[moduleIndex]};
33 if (result.empty()) return false;
34 defectList = std::move(result);
35 return true;
36}

◆ insert()

void SCT_MonitorCondData::insert ( const IdentifierHash & hash,
const std::string & defectList )

Insert a new defect (a list of bad strips) for a module.

Definition at line 40 of file SCT_MonitorCondData.cxx.

41{
42 std::size_t moduleIndex{static_cast<std::size_t>(hash/SCT_ConditionsData::SIDES_PER_MODULE)};
43 m_defectListArray[moduleIndex] = defectList;
44
45 // Set all strips, chips, wafers and module itself of this module good.
46 clearModule(moduleIndex);
47
48 if (doesNotHaveNumbers(defectList)) return;
49
50 // Fill bad strips
51 std::istringstream is{defectList};
52 std::istream_iterator<std::string> readString{is};
53 std::istream_iterator<std::string> endOfString; //relies on default constructor to produce eof
54 for (; readString != endOfString; ++readString) {
55 const std::string& stringRange{*readString};
56 std::string::size_type p{stringRange.find(s_separator)};
57 if (p!=std::string::npos) { //its a range
58 std::string::size_type len1{p++};
59 std::string::size_type len2{stringRange.size()-p};
60 int min{std::stoi(stringRange.substr(0, len1))};
61 int max{std::stoi(stringRange.substr(p, len2))};
62 for (int strip{min}; strip<=max; strip++) {
63 fillBadStrip(moduleIndex, strip);
64 }
65 } else { //assume its a single number
66 int strip{std::stoi(*readString)};
67 fillBadStrip(moduleIndex, strip);
68 }
69 }
70
71 // Fill the number of defects in chips, wafers, module
72 for (std::size_t waferIndex{0}; waferIndex<SCT_ConditionsData::SIDES_PER_MODULE; waferIndex++) {
73 for (std::size_t chipIndex{0}; chipIndex<SCT_ConditionsData::CHIPS_PER_SIDE; chipIndex++) {
74 m_badChipArray[moduleIndex][waferIndex][chipIndex] = m_badStripArray[moduleIndex][waferIndex][chipIndex].count();
75 m_badWaferArray[moduleIndex][waferIndex] += m_badChipArray[moduleIndex][waferIndex][chipIndex];
76 }
77 m_badModuleArray[moduleIndex] += m_badWaferArray[moduleIndex][waferIndex];
78 }
79}
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
void fillBadStrip(const std::size_t moduleIndex, const int strip)
static const std::string s_separator

◆ isBadStrip()

bool SCT_MonitorCondData::isBadStrip ( const IdentifierHash & waferHash,
const int strip ) const

Check if a strip is bad.

Definition at line 121 of file SCT_MonitorCondData.cxx.

122{
123 // 0 <= strip < 768
124 if (strip<0) return false;
126
127 // 0 to 4087
128 std::size_t moduleIndex{static_cast<std::size_t>(waferHash/SCT_ConditionsData::SIDES_PER_MODULE)};
129 // 0 to 1
130 std::size_t waferIndex{static_cast<std::size_t>(waferHash%SCT_ConditionsData::SIDES_PER_MODULE)};
131 // 0 to 5
132 std::size_t chipIndex{static_cast<std::size_t>(strip/SCT_ConditionsData::STRIPS_PER_CHIP)};
133 // 0 to 127
134 std::size_t stripIndex{static_cast<std::size_t>(strip%SCT_ConditionsData::STRIPS_PER_CHIP)};
135
136 return m_badStripArray[moduleIndex][waferIndex][chipIndex].test(stripIndex);
137}

◆ nBadStripsForChip()

std::size_t SCT_MonitorCondData::nBadStripsForChip ( const IdentifierHash & waferHash,
const int strip ) const

Get the number of bad strips for the chip, where a strip locates.

Definition at line 105 of file SCT_MonitorCondData.cxx.

106{
107 // 0 <= strip < 768
108 if (strip<0) return false;
110
111 // 0 to 4087
112 std::size_t moduleIndex{static_cast<std::size_t>(waferHash/SCT_ConditionsData::SIDES_PER_MODULE)};
113 // 0 to 1
114 std::size_t waferIndex{static_cast<std::size_t>(waferHash%SCT_ConditionsData::SIDES_PER_MODULE)};
115 // 0 to 5
116 std::size_t chipIndex{static_cast<std::size_t>(strip/SCT_ConditionsData::STRIPS_PER_CHIP)};
117
118 return m_badChipArray[moduleIndex][waferIndex][chipIndex];
119}

◆ nBadStripsForModule()

std::size_t SCT_MonitorCondData::nBadStripsForModule ( const IdentifierHash & moduleHash) const

Get the number of bad strips for a module.

Definition at line 92 of file SCT_MonitorCondData.cxx.

93{
94 std::size_t moduleIndex{static_cast<std::size_t>(moduleHash/SCT_ConditionsData::SIDES_PER_MODULE)};
95 return m_badModuleArray[moduleIndex];
96}

◆ nBadStripsForWafer()

std::size_t SCT_MonitorCondData::nBadStripsForWafer ( const IdentifierHash & waferHash) const

Get the number of bad strips for a wafer.

Definition at line 98 of file SCT_MonitorCondData.cxx.

99{
100 std::size_t moduleIndex{static_cast<std::size_t>(waferHash/SCT_ConditionsData::SIDES_PER_MODULE)};
101 std::size_t waferIndex{static_cast<std::size_t>(waferHash%SCT_ConditionsData::SIDES_PER_MODULE)};
102 return m_badWaferArray[moduleIndex][waferIndex];
103}

Member Data Documentation

◆ m_badChipArray

std::array<std::array<std::array<std::size_t, SCT_ConditionsData::CHIPS_PER_SIDE>, SCT_ConditionsData::SIDES_PER_MODULE>, SCT_ConditionsData::NUMBER_OF_MODULES> SCT_MonitorCondData::m_badChipArray {}
private

Definition at line 84 of file SCT_MonitorCondData.h.

84{};

◆ m_badModuleArray

std::array<std::size_t, SCT_ConditionsData::NUMBER_OF_MODULES> SCT_MonitorCondData::m_badModuleArray {}
private

Definition at line 89 of file SCT_MonitorCondData.h.

89{};

◆ m_badStripArray

std::array<std::array<std::array<std::bitset<SCT_ConditionsData::STRIPS_PER_CHIP>, SCT_ConditionsData::CHIPS_PER_SIDE>, SCT_ConditionsData::SIDES_PER_MODULE>, SCT_ConditionsData::NUMBER_OF_MODULES> SCT_MonitorCondData::m_badStripArray
private

Definition at line 80 of file SCT_MonitorCondData.h.

◆ m_badWaferArray

std::array<std::array<std::size_t, SCT_ConditionsData::SIDES_PER_MODULE>, SCT_ConditionsData::NUMBER_OF_MODULES> SCT_MonitorCondData::m_badWaferArray {}
private

Definition at line 87 of file SCT_MonitorCondData.h.

87{};

◆ m_defectListArray

std::array<std::string, SCT_ConditionsData::NUMBER_OF_MODULES> SCT_MonitorCondData::m_defectListArray
private

Store the relation between modules and defects (lists of bad strips).

Definition at line 76 of file SCT_MonitorCondData.h.

◆ s_separator

const std::string SCT_MonitorCondData::s_separator {"-"}
staticprivate

Definition at line 166 of file SCT_MonitorCondData.h.

194{
195public:
196
199
201 virtual ~SCT_MonitorCondData() = default;
202
204 bool find(const IdentifierHash& hash, std::string& defectList) const;
205
207 void insert(const IdentifierHash& hash, const std::string& defectList);
208
210 void clear();
211
213 std::size_t nBadStripsForModule(const IdentifierHash& moduleHash) const;
215 std::size_t nBadStripsForWafer(const IdentifierHash& waferHash) const;
217 std::size_t nBadStripsForChip(const IdentifierHash& waferHash, const int strip) const;
219 bool isBadStrip(const IdentifierHash& waferHash, const int strip) const;
220
221 const std::array<std::bitset<SCT_ConditionsData::STRIPS_PER_CHIP>,
223 &badStripsForModule(const IdentifierHash& waferHash) const {
224 std::size_t moduleIndex{static_cast<std::size_t>(waferHash/SCT_ConditionsData::SIDES_PER_MODULE)};
225 // 0 to 1
226 std::size_t waferIndex{static_cast<std::size_t>(waferHash%SCT_ConditionsData::SIDES_PER_MODULE)};
227 return m_badStripArray[moduleIndex][waferIndex];
228 }
229 const std::array<std::array<std::array<std::bitset<SCT_ConditionsData::STRIPS_PER_CHIP>,
233 return m_badStripArray;
234 }
235
236private:
237 void clearModule(const std::size_t moduleIndex);
238 void fillBadStrip(const std::size_t moduleIndex, const int strip);
239
241 std::array<std::string, SCT_ConditionsData::NUMBER_OF_MODULES> m_defectListArray;
242 std::array<std::array<std::array<std::bitset<SCT_ConditionsData::STRIPS_PER_CHIP>,
246 std::array<std::array<std::array<std::size_t,
250 std::array<std::array<std::size_t,
253 std::array<std::size_t,
255
256 static const std::string s_separator;
257};
258
259// Class definition for StoreGate
261CLASS_DEF( SCT_MonitorCondData , 190515334 , 1 )
262
263// Condition container definition for CondInputLoader
264#include "AthenaKernel/CondCont.h"
266
267#endif // SCT_MONITORCONDDATA_H
#define CONDCONT_DEF(...)
Definition CondCont.h:1413
macros to associate a CLID to a type
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
std::size_t nBadStripsForModule(const IdentifierHash &moduleHash) const
Get the number of bad strips for a module.
void insert(const IdentifierHash &hash, const std::string &defectList)
Insert a new defect (a list of bad strips) for a module.
bool find(const IdentifierHash &hash, std::string &defectList) const
Check if a module has a defect (a list of bad strips). If it does not have defect return false.
bool isBadStrip(const IdentifierHash &waferHash, const int strip) const
Check if a strip is bad.
const std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE > & badStripsForModule(const IdentifierHash &waferHash) const
virtual ~SCT_MonitorCondData()=default
Destructor.
SCT_MonitorCondData()
Constructor.
const std::array< std::array< std::array< std::bitset< SCT_ConditionsData::STRIPS_PER_CHIP >, SCT_ConditionsData::CHIPS_PER_SIDE >, SCT_ConditionsData::SIDES_PER_MODULE >, SCT_ConditionsData::NUMBER_OF_MODULES > & badStrips() const
std::size_t nBadStripsForChip(const IdentifierHash &waferHash, const int strip) const
Get the number of bad strips for the chip, where a strip locates.
std::size_t nBadStripsForWafer(const IdentifierHash &waferHash) const
Get the number of bad strips for a wafer.

The documentation for this class was generated from the following files: