ATLAS Offline Software
SCT_ReadCalibDataCondAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
10 #include "InDetIdentifier/SCT_ID.h"
13 
14 // Include STL stuff
15 #include <limits>
16 #include <memory>
17 
18 using namespace SCT_ConditionsData;
19 
20 // Utility functions
21 namespace {
22  float coerceToFloatRange(const double value) {
23  const double maxfloat{std::numeric_limits<float>::max()};
24  const double minfloat{std::numeric_limits<float>::min()};
25  return static_cast<float>(std::clamp(value,minfloat,maxfloat));
26  }
27 }
28 
29 SCT_ReadCalibDataCondAlg::SCT_ReadCalibDataCondAlg(const std::string& name, ISvcLocator* pSvcLocator)
30  : ::AthReentrantAlgorithm(name, pSvcLocator)
31 {
32  m_ignoreDefects.value().push_back("NOISE_SLOPE");
33  m_ignoreDefectParameters.value().push_back(-1000.);
34 
35  m_ignoreDefects.value().push_back("OFFSET_SLOPE");
36  m_ignoreDefectParameters.value().push_back(-1000.);
37 
38  m_ignoreDefects.value().push_back("GAIN_SLOPE");
39  m_ignoreDefectParameters.value().push_back(-1000.);
40 
41  m_ignoreDefects.value().push_back("BAD_OPE");
42  m_ignoreDefectParameters.value().push_back(-1000.);
43 
44  m_ignoreDefects.value().push_back("NO_HI");
45  m_ignoreDefectParameters.value().push_back(1.);
46  // 1. means 100%. Only NO_HI defects with >100% are considered, i.e., all NO_HI defects are ignored.
47 
48  m_ignoreDefects.value().push_back("LO_GAIN");
49  m_ignoreDefectParameters.value().push_back(-1000.);
50 
51  m_ignoreDefects.value().push_back("HI_GAIN");
52  m_ignoreDefectParameters.value().push_back(-1000.);
53 }
54 
56  ATH_MSG_DEBUG("initialize " << name());
57 
58  // Get SCT helper
59  ATH_CHECK(detStore()->retrieve(m_id_sct, "SCT_ID"));
60 
61  // Read Cond Handle
65 
66  // Write Cond Handles
67  for (unsigned int i{GAIN}; i<NFEATURES; i++) {
68  SG::WriteCondHandleKey<SCT_CalibDefectData>* writeKeyData{nullptr};
69  if ( i==GAIN) writeKeyData = &m_writeKeyGain;
70  else if (i==NOISE) writeKeyData = &m_writeKeyNoise;
71  if (writeKeyData==nullptr) continue;
72  ATH_CHECK(writeKeyData->initialize());
73  }
75 
76  // Fit Defects
77  m_defectMapIntToString[0] = "UNKNOWN"; //<! Defect type not in this map, add!
78  m_defectMapIntToString[1] = "DEAD"; //<! Output always < 1%
79  m_defectMapIntToString[2] = "STUCKON"; //<! Output always > 98%
80  m_defectMapIntToString[3] = "UNDER"; //<! Occupancy never reaches max, always less than 95%
81  m_defectMapIntToString[4] = "OVER"; //<! Occcupancy greater than 100%
82  m_defectMapIntToString[5] = "BADFIT"; //<! The fit was not good for some reason - parameter is a chi2 cut
83  // NPt Gain Defects
84  m_defectMapIntToString[32] = "VLO_GAIN"; //<! Gain < 0.3 * chip average
85  m_defectMapIntToString[9] = "LO_GAIN"; //<! Gain < 0.75 * chip average
86  m_defectMapIntToString[10] = "HI_GAIN"; //<! Gain > 1.25 * chip average
87  m_defectMapIntToString[11] = "LO_OFFSET"; //<! Offset < -100
88  m_defectMapIntToString[12] = "HI_OFFSET"; //<! Offset > 200
89  m_defectMapIntToString[13] = "UNBONDED"; //<! Noise <= 750
90  m_defectMapIntToString[14] = "PARTBONDED"; //<! Noise <= 1100
91  m_defectMapIntToString[15] = "NOISY"; //<! Noise > 1.15* av chip noise
92  m_defectMapIntToString[33] = "V_NOISY"; //<! Noise > 1.25* av chip noise
93  m_defectMapIntToString[34] = "NOISE_SLOPE"; //<! Slope in noise across module, slope/chan > 1.
94  m_defectMapIntToString[35] = "OFFSET_SLOPE"; //<! Slope in offset across module, slope/chan > 0.07
95  m_defectMapIntToString[36] = "GAIN_SLOPE"; //<! Slope in gain across module, slope/chan > 0.04
96  // Noise Occupancy Defects
97  m_defectMapIntToString[19] = "NO_HI"; //<! High noise occupancy, 0.0005
98  m_defectMapIntToString[37] = "BAD_OPE"; //<! Bad occupancy per event variance/binomial variance > 2.0)
99  m_defectMapIntToString[38] = "DOUBTR_HI"; //<! High double trigger noise occupancy, > 5
100  m_defectMapIntToString[41] = "LO_GAIN_ABSOLUTE"; // <! Gain < 15 mV/fC, newly added for Run 3
101 
102  //Check ignoreDefects vectors are the same size
103  if (m_ignoreDefects.value().size() != m_ignoreDefectParameters.value().size()) {
104  ATH_MSG_FATAL("IgnoreDefect != IgnoreDefectsParameters, check job options!");
105  return StatusCode::FAILURE;
106  }
107 
108  return StatusCode::SUCCESS;
109 }
110 
111 StatusCode SCT_ReadCalibDataCondAlg::execute(const EventContext& ctx) const {
112  ATH_MSG_DEBUG("execute " << name());
113 
114  // Write Cond Handle
115  bool validWriteCondHandle{true};
116  // Do we have a valid Write Cond Handle for current time?
118  for (unsigned int i{GAIN}; i<NFEATURES; i++) {
119  if (writeHandleData[i].isValid()) {
120  ATH_MSG_DEBUG("CondHandle " << writeHandleData[i].fullKey() << " is already valid."
121  << ". In theory this should not be called, but may happen"
122  << " if multiple concurrent events are being processed out of order.");
123  } else {
124  validWriteCondHandle = false;
125  }
126  }
128  if (writeHandleInfo.isValid()) {
129  ATH_MSG_DEBUG("CondHandle " << writeHandleInfo.fullKey() << " is already valid."
130  << ". In theory this should not be called, but may happen"
131  << " if multiple concurrent events are being processed out of order.");
132  } else {
133  validWriteCondHandle = false;
134  }
135  if (validWriteCondHandle) return StatusCode::SUCCESS;
136 
137  // Read Cond Handle
139  const CondAttrListCollection* readCdo[NFEATURES]{*readHandle[GAIN], *readHandle[NOISE]};
140  for (unsigned int i{GAIN}; i<NFEATURES; i++) {
141  if (readCdo[i]==nullptr) {
142  ATH_MSG_FATAL("Null pointer to the read conditions object " << readHandle[i].key());
143  return StatusCode::FAILURE;
144  }
145  // Add dependency
146  writeHandleData[i].addDependency(readHandle[i]);
147  writeHandleInfo.addDependency(readHandle[i]);
148  ATH_MSG_INFO("Size of CondAttrListCollection " << readHandle[i].fullKey() << " readCdo->size()= " << readCdo[i]->size());
149  ATH_MSG_INFO("Range of input is " << readHandle[i].getRange());
150  }
151 
152  // Get SCT_DetectorElementCollection
154  const InDetDD::SiDetectorElementCollection* elements{sctDetEle.retrieve()};
155  if (elements==nullptr) {
156  ATH_MSG_FATAL(m_SCTDetEleCollKey.fullKey() << " could not be retrieved");
157  return StatusCode::FAILURE;
158  }
159  for (unsigned int i{GAIN}; i<NFEATURES; i++) {
160  writeHandleData[i].addDependency(sctDetEle);
161  }
162  writeHandleInfo.addDependency(sctDetEle);
163 
164  // Construct the output Cond Object and fill it in
165  std::unique_ptr<SCT_CalibDefectData> writeCdoData[NFEATURES]{nullptr, nullptr};
166  for (unsigned int i{GAIN}; i<NFEATURES; i++) {
167  writeCdoData[i] = std::make_unique<SCT_CalibDefectData>();
168  }
169  std::unique_ptr<SCT_AllGoodStripInfo> writeCdoInfo{std::make_unique<SCT_AllGoodStripInfo>()};
170  // Initialize arrays and all strips to True
171  for (int w{0}; w!=NUMBER_OF_WAFERS; ++w) {
172  for (int s{0}; s!=STRIPS_PER_WAFER; ++s) {
173  (*writeCdoInfo)[w][s]=true;
174  }
175  }
176 
177 
178  // Create pointer to CalibDataDefect object
180 
181  // loop over collection
182  for (unsigned int i{GAIN}; i<NFEATURES; i++) {
183  CondAttrListCollection::const_iterator itLoop{readCdo[i]->begin()};
184  CondAttrListCollection::const_iterator itLoop_end{readCdo[i]->end()};
185  for (; itLoop!=itLoop_end; ++itLoop) {
186  CondAttrListCollection::ChanNum chanNum{(*itLoop).first};
187  const coral::AttributeList &anAttrList{(*itLoop).second};
188 
189  // Convert chanNum=offlineID into identifier
190  Identifier moduleId{chanNum};
191  IdentifierHash hashId0{m_id_sct->wafer_hash(moduleId)};
192  IdentifierHash hashId1;
193  m_id_sct->get_other_side(hashId0, hashId1);
194 
195  // Check for PhiSwap readout
196  const InDetDD::SiDetectorElement* p_element{elements->getDetectorElement(hashId0)};
197  bool phiSwap0Present{p_element->swapPhiReadoutDirection()};
198  p_element = (elements->getDetectorElement(hashId1));
199  bool phiSwap1Present{p_element->swapPhiReadoutDirection()};
200 
201  // Clear theseDefects
202  theseDefects.begDefects.clear();
203  theseDefects.endDefects.clear();
204  theseDefects.typeOfDefect.clear();
205  theseDefects.parValue.clear();
206 
207  // Get all defect parameters from COOL attrib list
208  const std::string &gaindefectb{(anAttrList["defectBeginChannel"]).data<std::string>()};
209  const std::string &gaindefecte{(anAttrList["defectEndChannel"]).data<std::string>()};
210  const std::string &defectType{(anAttrList["defectType"]).data<std::string>()};
211  const std::string &parValue{(anAttrList["defectParameter"]).data<std::string>()};
212 
213  // Convert the defect strings to vectors
214  std::vector<unsigned int> gaindefectbvec;
215  fillEmptyVectorFromString(gaindefectb, gaindefectbvec);
216  std::vector<unsigned int> gaindefectevec;
217  fillEmptyVectorFromString(gaindefecte, gaindefectevec);
218  std::vector<unsigned int> defectTypevec;
219  fillEmptyVectorFromString(defectType, defectTypevec);
220  std::vector<double> parValuevec;
221  fillEmptyVectorFromString(parValue, parValuevec);
222 
223  // Fill the Calib defect objects
224  long unsigned int gainvec_size{gaindefectbvec.size()};
225  for (long unsigned int i{0}; i<gainvec_size; ++i) {
226  // Check existence of the defect index to avoid failure when a new defect is added in SCT DAQ.
227  if (m_defectMapIntToString.find(defectTypevec[i]) == m_defectMapIntToString.end()) {
228  ATH_MSG_DEBUG("Defect type " << defectTypevec[i] << " is not defined! This defect is ignored.");
229  } else {
230  theseDefects.typeOfDefect.push_back(m_defectMapIntToString.at(defectTypevec[i]));
231  theseDefects.begDefects.push_back(gaindefectbvec[i]);
232  theseDefects.endDefects.push_back(gaindefectevec[i]);
233  theseDefects.parValue.push_back(coerceToFloatRange(parValuevec[i]));
234  }
235  }
236  // Fill the isGoodWaferArray
237  if (not theseDefects.begDefects.empty()) {
238  for (unsigned int i{0}; i<theseDefects.begDefects.size(); ++i) { // loop over all defects
239  // Check for defects and their limits not to take into account in isGood
240  bool ignoreDefect{false};
241  unsigned int ig{0};
242  while (ig<m_ignoreDefects.value().size()) { //loop until found defect or end of ignoredefects
243  if (m_ignoreDefects.value()[ig] == theseDefects.typeOfDefect[i]) {
244  if ( m_ignoreDefectParameters.value()[ig]<-999. ) ignoreDefect = true; //no check on parameter value, defect ignored
245  else if (theseDefects.typeOfDefect[i]=="NO_HI" and m_ignoreDefectParameters.value()[ig]>theseDefects.parValue[i]) ignoreDefect = true; //noise below threshold, > 0.0005 (in DB, so default values printed here)
246  else if (theseDefects.typeOfDefect[i]=="NOISY" and m_ignoreDefectParameters.value()[ig]>theseDefects.parValue[i]) ignoreDefect = true; //noise below threshold, > 1.15* av chip average
247  else if (theseDefects.typeOfDefect[i]=="V_NOISY" and m_ignoreDefectParameters.value()[ig]>theseDefects.parValue[i]) ignoreDefect = true; //noise below threshold, > 1.25* av chip average
248  else if (theseDefects.typeOfDefect[i]=="VLO_GAIN" and m_ignoreDefectParameters.value()[ig]<theseDefects.parValue[i]) ignoreDefect = true; // gain to low, < 0.3 * chip average
249  else if (theseDefects.typeOfDefect[i]=="LO_GAIN" and m_ignoreDefectParameters.value()[ig]<theseDefects.parValue[i]) ignoreDefect = true; // gain to low < 0.75 * chip average
250  else if (theseDefects.typeOfDefect[i]=="HI_GAIN" and m_ignoreDefectParameters.value()[ig]>theseDefects.parValue[i]) ignoreDefect = true; // gain to high > 1.25 * chip average
251  else if (theseDefects.typeOfDefect[i]=="LO_OFFSET" and m_ignoreDefectParameters.value()[ig]>theseDefects.parValue[i]) ignoreDefect = true; // offset to low < -100
252  else if (theseDefects.typeOfDefect[i]=="HI_OFFSET" and m_ignoreDefectParameters.value()[ig]<theseDefects.parValue[i]) ignoreDefect = true; // offset to high > 200
253  }
254  ig++;
255  }
256  if (not ignoreDefect) {
257  //set the isGoodBool value for all strips for this defect
258  for (unsigned int strip = theseDefects.begDefects[i]; strip <= theseDefects.endDefects[i]; ++strip) {
259  // Check for phiSwap and which wafer side before filling isGood vector
260  if (strip < STRIPS_PER_WAFER) { //side 0 0->767
261  const unsigned int waferId0{hashId0};
262  SCT_WaferGoodStripInfo& thisWaferIsGoodData0{(*writeCdoInfo)[waferId0]};
263  const unsigned int side0StripNumber{phiSwap0Present ? ( STRIPS_PER_WAFER-1-strip) : strip};
264  thisWaferIsGoodData0[side0StripNumber] = false;
265  } else { // side 1 768->1535 => 0->767
266  const unsigned int waferId1{hashId1};
267  SCT_WaferGoodStripInfo& thisWaferIsGoodData1{(*writeCdoInfo)[waferId1]};
268  const unsigned int side1StripNumber{phiSwap1Present ? (2*STRIPS_PER_WAFER-1-strip) : (strip-STRIPS_PER_WAFER)};
269  thisWaferIsGoodData1[side1StripNumber] = false;
270  }
271  }
272  }
273  }
274  }
275 
276  // Fill the CalibDefectData maps with the Calib defect objects
277  if (i==GAIN) {
278  if (theseDefects.begDefects.empty()) {
279  ATH_MSG_DEBUG("No NPtGain defects for module " << moduleId);
280  continue;
281  }
282  if (not (writeCdoData[i]->addModule(moduleId, theseDefects))) {
283  ATH_MSG_ERROR("Unable to add module " << moduleId << " to NPtGain defect map");
284  return StatusCode::RECOVERABLE;
285  } else {
286  ATH_MSG_DEBUG("Defects for module " << moduleId << " added to NPG defect map");
287  }
288  } else if (i==NOISE) {
289  if (theseDefects.begDefects.empty()) {
290  ATH_MSG_DEBUG("No NoiseOccupancy defects for module " << moduleId);
291  continue;
292  }
293  if (not (writeCdoData[i]->addModule(moduleId, theseDefects))) {
294  ATH_MSG_ERROR("Unable to add module " << moduleId << " to NoiseOccupancy defect map");
295  return StatusCode::RECOVERABLE;
296  } else {
297  ATH_MSG_DEBUG("Defects for module " << moduleId << " added to NoiseOccupancy defect map");
298  }
299  }
300  }
301  }
302 
303  // Record the output cond objects
304  ATH_MSG_DEBUG("There are " << writeCdoInfo->size() << " elements in " << writeHandleInfo.key());
305  if (writeHandleInfo.record(std::move(writeCdoInfo)).isFailure()) {
306  ATH_MSG_FATAL("Could not record SCT_AllGoodStripInfo " << writeHandleInfo.key()
307  << " with EventRange " << writeHandleInfo.getRange() << " into Conditions Store");
308  return StatusCode::FAILURE;
309  }
310  ATH_MSG_INFO("recorded new CDO " << writeHandleInfo.key() << " with range " << writeHandleInfo.getRange() << " into Conditions Store");
311  for (unsigned int i{GAIN}; i<NFEATURES; i++) {
312  ATH_MSG_DEBUG("There are " << writeCdoData[i]->size() << " elements in " << writeHandleData[i].key());
313  if (writeHandleData[i].record(std::move(writeCdoData[i])).isFailure()) {
314  ATH_MSG_FATAL("Could not record SCT_CalibDefectData " << writeHandleData[i].key()
315  << " with EventRange " << writeHandleData[i].getRange() << " into Conditions Store");
316  return StatusCode::FAILURE;
317  }
318  ATH_MSG_INFO("recorded new CDO " << writeHandleData[i].key() << " with range " << writeHandleData[i].getRange() << " into Conditions Store");
319  }
320 
321  return StatusCode::SUCCESS;
322 }
323 
325  ATH_MSG_DEBUG("finalize " << name());
326  return StatusCode::SUCCESS;
327 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
SCT_ReadCalibDataCondAlg::SCT_ReadCalibDataCondAlg
SCT_ReadCalibDataCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SCT_ReadCalibDataCondAlg.cxx:29
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
SiliconTech::strip
@ strip
SCT_ReadCalibDataCondAlg::m_writeKeyNoise
SG::WriteCondHandleKey< SCT_CalibDefectData > m_writeKeyNoise
Definition: SCT_ReadCalibDataCondAlg.h:45
max
#define max(a, b)
Definition: cfImp.cxx:41
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SCT_ConditionsData::STRIPS_PER_WAFER
@ STRIPS_PER_WAFER
Definition: SCT_ConditionsParameters.h:21
SCT_ReadCalibDataCondAlg::NFEATURES
@ NFEATURES
Definition: SCT_ReadCalibDataCondAlg.h:39
athena.value
value
Definition: athena.py:124
SCT_ReadCalibDataCondAlg::m_id_sct
const SCT_ID * m_id_sct
Handle to SCT ID helper.
Definition: SCT_ReadCalibDataCondAlg.h:54
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:225
CondAttrListCollection
This class is a collection of AttributeLists where each one is associated with a channel number....
Definition: CondAttrListCollection.h:52
SCT_ConditionsParameters.h
header file containing the number of elements and enumerated type of parameters which may be retrieve...
SCT_ReadCalibDataCondAlg::m_readKeyNoise
SG::ReadCondHandleKey< CondAttrListCollection > m_readKeyNoise
Definition: SCT_ReadCalibDataCondAlg.h:42
SCT_ReadCalibDataCondAlg.h
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
SCT_ReadCalibDataCondAlg::finalize
virtual StatusCode finalize() override final
Definition: SCT_ReadCalibDataCondAlg.cxx:324
SCT_CalibDefectData::CalibModuleDefects::begDefects
std::vector< unsigned int > begDefects
Definition: SCT_CalibDefectData.h:33
generate::getRange
void getRange(TH1D *s, int imax, double frac, int &lowerbin, int &upperbin, double &lowerfrac, double &upperfrac)
Definition: rmsFrac.cxx:32
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
SCT_ReadCalibDataCondAlg::m_writeKeyInfo
SG::WriteCondHandleKey< SCT_AllGoodStripInfo > m_writeKeyInfo
Definition: SCT_ReadCalibDataCondAlg.h:46
SCT_ReadCalibDataCondAlg::NOISE
@ NOISE
Definition: SCT_ReadCalibDataCondAlg.h:39
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
checkCoolLatestUpdate.chanNum
chanNum
Definition: checkCoolLatestUpdate.py:27
SCT_ConditionsData::NUMBER_OF_WAFERS
@ NUMBER_OF_WAFERS
Definition: SCT_ConditionsParameters.h:19
SCT_ConditionsData
Definition: SCT_ConditionsParameters.h:17
lumiFormat.i
int i
Definition: lumiFormat.py:85
InDetDD::SiDetectorElement::swapPhiReadoutDirection
bool swapPhiReadoutDirection() const
Determine if readout direction between online and offline needs swapping.
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SCT_WaferGoodStripInfo
std::array< bool, SCT_ConditionsData::STRIPS_PER_WAFER > SCT_WaferGoodStripInfo
Class for data object used in SCT_ReadCalibDataCondAlg and SCT_AllGoodStripInfo.
Definition: SCT_WaferGoodStripInfo.h:27
FillFromStringUtility.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SCT_ReadCalibDataCondAlg::m_readKeyGain
SG::ReadCondHandleKey< CondAttrListCollection > m_readKeyGain
Definition: SCT_ReadCalibDataCondAlg.h:41
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
SCT_ID::get_other_side
int get_other_side(const IdentifierHash &id, IdentifierHash &other) const
Wafer hash on other side.
Definition: SCT_ID.cxx:434
SCT_CalibDefectData::CalibModuleDefects::typeOfDefect
std::vector< std::string > typeOfDefect
Definition: SCT_CalibDefectData.h:35
CondAttrListCollection::ChanNum
unsigned int ChanNum
Definition: CondAttrListCollection.h:55
SCT_ReadCalibDataCondAlg::m_writeKeyGain
SG::WriteCondHandleKey< SCT_CalibDefectData > m_writeKeyGain
Definition: SCT_ReadCalibDataCondAlg.h:44
min
#define min(a, b)
Definition: cfImp.cxx:40
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
IdentifierHash.h
SCT_CalibDefectData::CalibModuleDefects
Definition: SCT_CalibDefectData.h:32
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
SCT_ReadCalibDataCondAlg::initialize
virtual StatusCode initialize() override final
Definition: SCT_ReadCalibDataCondAlg.cxx:55
SCT_ReadCalibDataCondAlg::m_ignoreDefects
StringArrayProperty m_ignoreDefects
Definition: SCT_ReadCalibDataCondAlg.h:51
SCT_CalibDefectData::CalibModuleDefects::parValue
std::vector< float > parValue
Definition: SCT_CalibDefectData.h:36
SCT_ReadCalibDataCondAlg::m_ignoreDefectParameters
FloatArrayProperty m_ignoreDefectParameters
Definition: SCT_ReadCalibDataCondAlg.h:52
SiDetectorElement.h
SCT_ReadCalibDataCondAlg::m_defectMapIntToString
std::map< int, std::string > m_defectMapIntToString
Definition: SCT_ReadCalibDataCondAlg.h:49
CondAttrListCollection::const_iterator
ChanAttrListMap::const_iterator const_iterator
Definition: CondAttrListCollection.h:63
SCT_ReadCalibDataCondAlg::GAIN
@ GAIN
Definition: SCT_ReadCalibDataCondAlg.h:39
SG::WriteCondHandleKey< SCT_CalibDefectData >
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
SCT_ReadCalibDataCondAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override final
Definition: SCT_ReadCalibDataCondAlg.cxx:111
SCT_ReadCalibDataCondAlg::m_SCTDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
Definition: SCT_ReadCalibDataCondAlg.h:43
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
SCT_CalibDefectData::CalibModuleDefects::endDefects
std::vector< unsigned int > endDefects
Definition: SCT_CalibDefectData.h:34
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
Identifier
Definition: IdentifierFieldParser.cxx:14