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

This class contains a Tool that reads SCT calibration data and makes it available to other algorithms. More...

#include <SCT_ReadCalibChipDataTool.h>

Inheritance diagram for SCT_ReadCalibChipDataTool:
Collaboration diagram for SCT_ReadCalibChipDataTool:

Public Member Functions

 SCT_ReadCalibChipDataTool (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor.
virtual ~SCT_ReadCalibChipDataTool ()=default
 Destructor.
virtual StatusCode initialize () override
 Gaudi initialiser.
virtual StatusCode finalize () override
 Gaudi finaliser.

Methods to be implemented from virtual baseclass methods, when introduced

Return whether this service can report on the hierarchy level (e.g.

module, chip...)

enum  FolderType { NPTGAIN , NOISEOCC , UNKNOWN_FOLDER , N_FOLDERTYPES }
const SCT_IDm_id_sct {nullptr}
 Handle to SCT ID helper.
SG::ReadCondHandleKey< SCT_GainCalibDatam_condKeyGain {this, "CondKeyGain", "SCT_GainCalibData", "SCT calibration data of gains of chips"}
SG::ReadCondHandleKey< SCT_NoiseCalibDatam_condKeyNoise {this, "CondKeyNoise", "SCT_NoiseCalibData", "SCT calibration data of noises of chips"}
FloatProperty m_noiseLevel {this, "NoiseLevel", 1800.0, "Noise Level for isGood if ever used"}
virtual bool canReportAbout (InDetConditions::Hierarchy h) const override
virtual bool isGood (const Identifier &elementId, const EventContext &ctx, InDetConditions::Hierarchy h=InDetConditions::DEFAULT) const override
 Summarise the result from the service as good/bad.
virtual bool isGood (const IdentifierHash &hashId, const EventContext &ctx) const override
 same thing with id hash, introduced by shaun with dummy method for now
virtual void getDetectorElementStatus (const EventContext &ctx, InDet::SiDetectorElementStatus &element_status, SG::WriteCondHandle< InDet::SiDetectorElementStatus > *whandle) const override
virtual std::vector< float > getNPtGainData (const Identifier &moduleId, const int side, const std::string &datatype, const EventContext &ctx) const override
 Get NPtGain data per wafer.
virtual std::vector< float > getNoiseOccupancyData (const Identifier &moduleId, const int side, const std::string &datatype, const EventContext &ctx) const override
 Get NoiseOccupancy data wafer.
static int nPtGainIndex (const std::string &dataName)
static int noiseOccIndex (const std::string &dataName)
const SCT_GainCalibDatagetCondDataGain (const EventContext &ctx) const
const SCT_NoiseCalibDatagetCondDataNoise (const EventContext &ctx) const

Detailed Description

This class contains a Tool that reads SCT calibration data and makes it available to other algorithms.

The current implementation reads the data from a COOL database.

Definition at line 34 of file SCT_ReadCalibChipDataTool.h.

Member Enumeration Documentation

◆ FolderType

Constructor & Destructor Documentation

◆ SCT_ReadCalibChipDataTool()

SCT_ReadCalibChipDataTool::SCT_ReadCalibChipDataTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Constructor.

Definition at line 26 of file SCT_ReadCalibChipDataTool.cxx.

26 :
27 base_class(type, name, parent)
28{
29}

◆ ~SCT_ReadCalibChipDataTool()

virtual SCT_ReadCalibChipDataTool::~SCT_ReadCalibChipDataTool ( )
virtualdefault

Destructor.

Member Function Documentation

◆ canReportAbout()

bool SCT_ReadCalibChipDataTool::canReportAbout ( InDetConditions::Hierarchy h) const
overridevirtual

Definition at line 54 of file SCT_ReadCalibChipDataTool.cxx.

54 {
55 return (h==InDetConditions::SCT_SIDE);
56}

◆ finalize()

StatusCode SCT_ReadCalibChipDataTool::finalize ( )
overridevirtual

Gaudi finaliser.

Definition at line 46 of file SCT_ReadCalibChipDataTool.cxx.

46 {
47 // Print where you are
48 return StatusCode::SUCCESS;
49} // SCT_ReadCalibChipDataTool::finalize()

◆ getCondDataGain()

const SCT_GainCalibData * SCT_ReadCalibChipDataTool::getCondDataGain ( const EventContext & ctx) const
private

Definition at line 264 of file SCT_ReadCalibChipDataTool.cxx.

264 {
265 SG::ReadCondHandle<SCT_GainCalibData> condData{m_condKeyGain, ctx};
266 return condData.retrieve();
267}
SG::ReadCondHandleKey< SCT_GainCalibData > m_condKeyGain
const_pointer_type retrieve()

◆ getCondDataNoise()

const SCT_NoiseCalibData * SCT_ReadCalibChipDataTool::getCondDataNoise ( const EventContext & ctx) const
private

Definition at line 270 of file SCT_ReadCalibChipDataTool.cxx.

270 {
271 SG::ReadCondHandle<SCT_NoiseCalibData> condData{m_condKeyNoise, ctx};
272 return condData.retrieve();
273}
SG::ReadCondHandleKey< SCT_NoiseCalibData > m_condKeyNoise

◆ getDetectorElementStatus()

void SCT_ReadCalibChipDataTool::getDetectorElementStatus ( const EventContext & ctx,
InDet::SiDetectorElementStatus & element_status,
SG::WriteCondHandle< InDet::SiDetectorElementStatus > * whandle ) const
overridevirtual

Definition at line 105 of file SCT_ReadCalibChipDataTool.cxx.

106 {
107 SG::ReadCondHandle<SCT_NoiseCalibData> condDataHandle{m_condKeyNoise, ctx};
108 if (not condDataHandle.isValid() ) {
109 ATH_MSG_ERROR("Invalid cond data handle " << m_condKeyNoise.key() );
110 return;
111 }
112 if (whandle) {
113 whandle->addDependency (condDataHandle);
114 }
115 const SCT_NoiseCalibData* condDataNoise{condDataHandle.cptr() };
116 std::vector<bool> &status = element_status.getElementStatus();
117 if (status.empty()) {
118 status.resize(m_id_sct->wafer_hash_max(),true);
119 }
120 unsigned int element_i=0;
121 const int occ_index{noiseOccIndex("NoiseByChip")};
122 for (const SCT_ModuleNoiseCalibData& noiseOccData : *condDataNoise) {
123 if (occ_index<0) {
124 ATH_MSG_ERROR("This NoiseOccupancy noise data does not exist");
125 return;
126 }
127 const SCT_ModuleCalibParameter& moduleNoiseData{noiseOccData[occ_index]};
128
129 for (unsigned int side_i=0; side_i<2; ++side_i) {
130 unsigned int chip{side_i*CHIPS_PER_SIDE};
131 const unsigned int endChip{CHIPS_PER_SIDE+chip};
132 unsigned int nChips{0};
133 float sum{0.0};
134
135 for (; chip!=endChip; ++chip) {
136 float chipNoise{moduleNoiseData[chip]};
137 if (chipNoise!=0.0) {
138 sum+=chipNoise;
139 ++nChips;
140 }
141 }
142 const float meanNoiseValue{ nChips>0 ? sum/nChips : 0.f};
143 status.at(element_i) = status.at(element_i) && (meanNoiseValue < m_noiseLevel);
144
145 ++element_i;
146 }
147 }
148}
#define ATH_MSG_ERROR(x)
std::array< float, SCT_ConditionsData::CHIPS_PER_MODULE > SCT_ModuleCalibParameter
typedef for SCT_ReadCalibChipGainCondAlg, SCT_ReadCalibChipNoiseCondAlg, SCT_ReadCalibChipDataTool.
std::array< SCT_ModuleCalibParameter, SCT_ConditionsData::N_NOISEOCC > SCT_ModuleNoiseCalibData
Typedef for data object used in SCT_ReadCalibChipNoiseCondAlg and SCT_ReadCalibChipDataTool.
std::array< SCT_ModuleNoiseCalibData, SCT_ConditionsData::NUMBER_OF_MODULES > SCT_NoiseCalibData
Class for data object used in SCT_ReadCalibChipNoiseCondAlg and SCT_ReadCalibChipDataTool.
const std::vector< bool > & getElementStatus() const
static int noiseOccIndex(const std::string &dataName)
const SCT_ID * m_id_sct
Handle to SCT ID helper.
const_pointer_type cptr()
void addDependency(const EventIDRange &range)
status
Definition merge.py:16

◆ getNoiseOccupancyData()

std::vector< float > SCT_ReadCalibChipDataTool::getNoiseOccupancyData ( const Identifier & moduleId,
const int side,
const std::string & datatype,
const EventContext & ctx ) const
overridevirtual

Get NoiseOccupancy data wafer.

Definition at line 209 of file SCT_ReadCalibChipDataTool.cxx.

209 {
210 // Print where you are
211 ATH_MSG_DEBUG("in getNoiseOccupancyData()");
212 std::vector<float> waferData;
213
214 // Retrieve SCT_NoiseCalibData pointer
215 const SCT_NoiseCalibData* condDataNoise{getCondDataNoise(ctx)};
216 if (condDataNoise==nullptr) {
217 ATH_MSG_ERROR("In getNPtNoiseData, SCT_NoiseCalibData cannot be retrieved");
218 return waferData;
219 }
220
221 //find hash
222 const IdentifierHash hashId{m_id_sct->wafer_hash(moduleId)};
223 //make index
224 const unsigned int idx{hashId/SIDES_PER_MODULE};
225 try {
226 //Retrieve defect data from array
227 const SCT_ModuleNoiseCalibData& wantedNoiseData{condDataNoise->at(idx)};
228
229 //find the correct index for the required data
230 const int dataIdx{noiseOccIndex(datatype)};
231 if (dataIdx<0) {
232 ATH_MSG_ERROR("This Noise Occupancy data: " << datatype << " does not exist");
233 return waferData;
234 }
235 const SCT_ModuleCalibParameter& moduleNoise{wantedNoiseData[dataIdx]};
236 const int startOffset{side*CHIPS_PER_SIDE};
237 const int endOffset{CHIPS_PER_SIDE+startOffset};
238 SCT_ModuleCalibParameter::const_iterator it{moduleNoise.begin() + startOffset};
239 SCT_ModuleCalibParameter::const_iterator end{moduleNoise.begin() + endOffset};
240 // Returns the data for the wanted wafer
241 if (*it != *it) return waferData;
242 waferData.assign(it, end);
243 return waferData;
244 } catch (const std::out_of_range& e) {
245 return waferData;
246 }
247} // SCT_ReadCalibChipDataTool::getNoiseOccupancyData()
#define ATH_MSG_DEBUG(x)
const SCT_NoiseCalibData * getCondDataNoise(const EventContext &ctx) const

◆ getNPtGainData()

std::vector< float > SCT_ReadCalibChipDataTool::getNPtGainData ( const Identifier & moduleId,
const int side,
const std::string & datatype,
const EventContext & ctx ) const
overridevirtual

Get NPtGain data per wafer.

Definition at line 166 of file SCT_ReadCalibChipDataTool.cxx.

166 {
167 // Print where you are
168 ATH_MSG_DEBUG("in getNPtGainData()");
169 std::vector<float> waferData;
170
171 // Retrieve SCT_GainCalibData pointer
172 const SCT_GainCalibData* condDataGain{getCondDataGain(ctx)};
173 if (condDataGain==nullptr) {
174 ATH_MSG_ERROR("In getNPtGainData, SCT_GainCalibData cannot be retrieved");
175 return waferData;
176 }
177
178 //find hash
179 const IdentifierHash hashId{m_id_sct->wafer_hash(moduleId)};
180 //make index
181 const unsigned int idx{hashId/SIDES_PER_MODULE};
182 //Retrieve defect data from map
183 try {
184 const SCT_ModuleGainCalibData& wantedNPGData{condDataGain->at(idx)};
185 //find the correct index for the required data
186 const int dataIdx{nPtGainIndex(datatype)};
187 if (dataIdx<0) {
188 ATH_MSG_ERROR("This N-point gain data: " << datatype << " does not exist");
189 return waferData;
190 }
191 const SCT_ModuleCalibParameter& moduleGains{wantedNPGData[dataIdx]};
192 const int startOffset{side*CHIPS_PER_SIDE};
193 const int endOffset{CHIPS_PER_SIDE+startOffset};
194 SCT_ModuleCalibParameter::const_iterator it{moduleGains.begin() + startOffset};
195 SCT_ModuleCalibParameter::const_iterator end{moduleGains.begin() + endOffset};
196 // Returns the data for the wanted wafer
197 if (*it != *it) return waferData;
198 //could use signaling NaN here and catch the exception instead, would be quicker: NO!
199 //see: http://stackoverflow.com/questions/235386/using-nan-in-c
200 waferData.assign(it, end);
201 return waferData;
202 } catch (const std::out_of_range& e) {
203 return waferData;
204 }
205} //SCT_ReadCalibChipDataTool::getNPtGainData()
std::array< SCT_ModuleGainCalibData, SCT_ConditionsData::NUMBER_OF_MODULES > SCT_GainCalibData
Typedef for data object used in SCT_ReadCalibChipGainCondAlg and SCT_ReadCalibChipDataTool.
std::array< SCT_ModuleCalibParameter, SCT_ConditionsData::N_NPTGAIN > SCT_ModuleGainCalibData
Typedef for data object used in SCT_ReadCalibChipGainCondAlg and SCT_ReadCalibChipDataTool.
const SCT_GainCalibData * getCondDataGain(const EventContext &ctx) const
static int nPtGainIndex(const std::string &dataName)

◆ initialize()

StatusCode SCT_ReadCalibChipDataTool::initialize ( )
overridevirtual

Gaudi initialiser.

Definition at line 33 of file SCT_ReadCalibChipDataTool.cxx.

33 {
34 // Get SCT helper
35 ATH_CHECK(detStore()->retrieve(m_id_sct, "SCT_ID"));
36
37 // Read Cond Handle Key
38 ATH_CHECK(m_condKeyGain.initialize());
39 ATH_CHECK(m_condKeyNoise.initialize());
40
41 return StatusCode::SUCCESS;
42} // SCT_ReadCalibChipDataTool::initialize()
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ isGood() [1/2]

bool SCT_ReadCalibChipDataTool::isGood ( const Identifier & elementId,
const EventContext & ctx,
InDetConditions::Hierarchy h = InDetConditions::DEFAULT ) const
overridevirtual

Summarise the result from the service as good/bad.

Definition at line 153 of file SCT_ReadCalibChipDataTool.cxx.

153 {
154 if (h==InDetConditions::SCT_SIDE) { //Could do by chip too
155 const IdentifierHash elementIdHash{m_id_sct->wafer_hash(elementId)};
156 return isGood(elementIdHash, ctx);
157 } else{
158 // Not applicable for Calibration data
159 ATH_MSG_WARNING("summary(): " << h << "good/bad is not applicable for Calibration data");
160 return true;
161 }
162}
#define ATH_MSG_WARNING(x)
virtual bool isGood(const Identifier &elementId, const EventContext &ctx, InDetConditions::Hierarchy h=InDetConditions::DEFAULT) const override
Summarise the result from the service as good/bad.

◆ isGood() [2/2]

bool SCT_ReadCalibChipDataTool::isGood ( const IdentifierHash & hashId,
const EventContext & ctx ) const
overridevirtual

same thing with id hash, introduced by shaun with dummy method for now

Definition at line 61 of file SCT_ReadCalibChipDataTool.cxx.

61 {
62 // Retrieve SCT_NoiseCalibData pointer
63 const SCT_NoiseCalibData* condDataNoise{getCondDataNoise(ctx)};
64 if (condDataNoise==nullptr) {
65 ATH_MSG_ERROR("In isGood, SCT_NoiseCalibData cannot be retrieved");
66 return true;
67 }
68
69 const unsigned int moduleIdx{elementHashId/SIDES_PER_MODULE};
70 // Retrieve defect data from map
71 const SCT_ModuleNoiseCalibData& noiseOccData{(*condDataNoise)[moduleIdx]};
72
73 // Retrieve the data
74 const int i{noiseOccIndex("NoiseByChip")};
75 if (i<0) {
76 ATH_MSG_ERROR("This NoiseOccupancy noise data does not exist");
77 return true;
78 }
79 const SCT_ModuleCalibParameter& moduleNoiseData{noiseOccData[i]};
80
81 // Calcuate module status
82 // For now just simple check NO mean noise level
83 // Chip could be 0 if bypassed, need to check
84 const int side{static_cast<int>(elementHashId%2)};
85 int chip{side*CHIPS_PER_SIDE};
86 const int endChip{CHIPS_PER_SIDE+chip};
87 int nChips{0};
88 float sum{0.0};
89 for (; chip!=endChip; ++chip) {
90 float chipNoise{moduleNoiseData[chip]};
91 if (chipNoise!=0.0) {
92 sum+=chipNoise;
93 ++nChips;
94 }
95 }
96 if (nChips == 0)[[unlikely]]{
97 throw std::runtime_error("SCT_ReadCalibChipDataTool::isGood: nChips is zero.");
98 }
99 const float meanNoiseValue{sum/nChips};
100 ATH_MSG_DEBUG("Module mean noise: " << meanNoiseValue);
101 return (meanNoiseValue < m_noiseLevel);
102} //SCT_ReadCalibChipDataTool::summary()
#define unlikely(x)

◆ noiseOccIndex()

int SCT_ReadCalibChipDataTool::noiseOccIndex ( const std::string & dataName)
staticprivate

Definition at line 257 of file SCT_ReadCalibChipDataTool.cxx.

257 {
258 int i{N_NOISEOCC};
259 while (i--) if (dataName==noiseOccParameterNames[i]) break;
260 return i;
261}
const std::array< std::string, SCT_ConditionsData::N_NOISEOCC > noiseOccParameterNames

◆ nPtGainIndex()

int SCT_ReadCalibChipDataTool::nPtGainIndex ( const std::string & dataName)
staticprivate

Definition at line 250 of file SCT_ReadCalibChipDataTool.cxx.

250 {
251 int i{N_NPTGAIN};
252 while (i--) if (dataName==nPtGainParameterNames[i]) break;
253 return i;
254}
const std::array< std::string, SCT_ConditionsData::N_NPTGAIN > nPtGainParameterNames

Member Data Documentation

◆ m_condKeyGain

SG::ReadCondHandleKey<SCT_GainCalibData> SCT_ReadCalibChipDataTool::m_condKeyGain {this, "CondKeyGain", "SCT_GainCalibData", "SCT calibration data of gains of chips"}
private

Definition at line 76 of file SCT_ReadCalibChipDataTool.h.

76{this, "CondKeyGain", "SCT_GainCalibData", "SCT calibration data of gains of chips"};

◆ m_condKeyNoise

SG::ReadCondHandleKey<SCT_NoiseCalibData> SCT_ReadCalibChipDataTool::m_condKeyNoise {this, "CondKeyNoise", "SCT_NoiseCalibData", "SCT calibration data of noises of chips"}
private

Definition at line 77 of file SCT_ReadCalibChipDataTool.h.

77{this, "CondKeyNoise", "SCT_NoiseCalibData", "SCT calibration data of noises of chips"};

◆ m_id_sct

const SCT_ID* SCT_ReadCalibChipDataTool::m_id_sct {nullptr}
private

Handle to SCT ID helper.

Definition at line 73 of file SCT_ReadCalibChipDataTool.h.

73{nullptr};

◆ m_noiseLevel

FloatProperty SCT_ReadCalibChipDataTool::m_noiseLevel {this, "NoiseLevel", 1800.0, "Noise Level for isGood if ever used"}
private

Definition at line 80 of file SCT_ReadCalibChipDataTool.h.

80{this, "NoiseLevel", 1800.0, "Noise Level for isGood if ever used"};

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