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 Identifier &elementId, InDetConditions::Hierarchy h=InDetConditions::DEFAULT) const override
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 bool isGood (const IdentifierHash &hashId) const override
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 > getNPtGainData (const Identifier &moduleId, const int side, const std::string &datatype) 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.
virtual std::vector< float > getNoiseOccupancyData (const Identifier &moduleId, const int side, const std::string &datatype) 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 25 of file SCT_ReadCalibChipDataTool.cxx.

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

◆ ~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 53 of file SCT_ReadCalibChipDataTool.cxx.

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

◆ finalize()

StatusCode SCT_ReadCalibChipDataTool::finalize ( )
overridevirtual

Gaudi finaliser.

Definition at line 45 of file SCT_ReadCalibChipDataTool.cxx.

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

◆ getCondDataGain()

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

Definition at line 286 of file SCT_ReadCalibChipDataTool.cxx.

286 {
287 SG::ReadCondHandle<SCT_GainCalibData> condData{m_condKeyGain, ctx};
288 return condData.retrieve();
289}
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 292 of file SCT_ReadCalibChipDataTool.cxx.

292 {
293 SG::ReadCondHandle<SCT_NoiseCalibData> condData{m_condKeyNoise, ctx};
294 return condData.retrieve();
295}
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 101 of file SCT_ReadCalibChipDataTool.cxx.

102 {
103 SG::ReadCondHandle<SCT_NoiseCalibData> condDataHandle{m_condKeyNoise, ctx};
104 if (not condDataHandle.isValid() ) {
105 ATH_MSG_ERROR("Invalid cond data handle " << m_condKeyNoise.key() );
106 return;
107 }
108 if (whandle) {
109 whandle->addDependency (condDataHandle);
110 }
111 const SCT_NoiseCalibData* condDataNoise{condDataHandle.cptr() };
112 std::vector<bool> &status = element_status.getElementStatus();
113 if (status.empty()) {
114 status.resize(m_id_sct->wafer_hash_max(),true);
115 }
116 unsigned int element_i=0;
117 for (const SCT_ModuleNoiseCalibData& noiseOccData : *condDataNoise) {
118 const int occ_index{noiseOccIndex("NoiseByChip")};
119 if (occ_index<0) {
120 ATH_MSG_ERROR("This NoiseOccupancy noise data does not exist");
121 return;
122 }
123 const SCT_ModuleCalibParameter& moduleNoiseData{noiseOccData[occ_index]};
124
125 for (unsigned int side_i=0; side_i<2; ++side_i) {
126 unsigned int chip{side_i*CHIPS_PER_SIDE};
127 const unsigned int endChip{CHIPS_PER_SIDE+chip};
128 unsigned int nChips{0};
129 float sum{0.0};
130
131 for (; chip!=endChip; ++chip) {
132 float chipNoise{moduleNoiseData[chip]};
133 if (chipNoise!=0.0) {
134 sum+=chipNoise;
135 ++nChips;
136 }
137 }
138 const float meanNoiseValue{ nChips>0 ? sum/nChips : 0.f};
139 status.at(element_i) = status.at(element_i) && (meanNoiseValue < m_noiseLevel);
140
141 ++element_i;
142 }
143 }
144}
#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() [1/2]

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

Get NoiseOccupancy data wafer.

Definition at line 266 of file SCT_ReadCalibChipDataTool.cxx.

266 {
267 const EventContext& ctx{Gaudi::Hive::currentContext()};
268 return getNoiseOccupancyData(moduleId, side, datatype, ctx);
269}
virtual std::vector< float > getNoiseOccupancyData(const Identifier &moduleId, const int side, const std::string &datatype, const EventContext &ctx) const override
Get NoiseOccupancy data wafer.

◆ getNoiseOccupancyData() [2/2]

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 225 of file SCT_ReadCalibChipDataTool.cxx.

225 {
226 // Print where you are
227 ATH_MSG_DEBUG("in getNoiseOccupancyData()");
228 std::vector<float> waferData;
229
230 // Retrieve SCT_NoiseCalibData pointer
231 const SCT_NoiseCalibData* condDataNoise{getCondDataNoise(ctx)};
232 if (condDataNoise==nullptr) {
233 ATH_MSG_ERROR("In getNPtNoiseData, SCT_NoiseCalibData cannot be retrieved");
234 return waferData;
235 }
236
237 //find hash
238 const IdentifierHash hashId{m_id_sct->wafer_hash(moduleId)};
239 //make index
240 const unsigned int idx{hashId/SIDES_PER_MODULE};
241 try {
242 //Retrieve defect data from array
243 const SCT_ModuleNoiseCalibData& wantedNoiseData{condDataNoise->at(idx)};
244
245 //find the correct index for the required data
246 const int dataIdx{noiseOccIndex(datatype)};
247 if (dataIdx<0) {
248 ATH_MSG_ERROR("This Noise Occupancy data: " << datatype << " does not exist");
249 return waferData;
250 }
251 const SCT_ModuleCalibParameter& moduleNoise{wantedNoiseData[dataIdx]};
252 const int startOffset{side*CHIPS_PER_SIDE};
253 const int endOffset{CHIPS_PER_SIDE+startOffset};
254 SCT_ModuleCalibParameter::const_iterator it{moduleNoise.begin() + startOffset};
255 SCT_ModuleCalibParameter::const_iterator end{moduleNoise.begin() + endOffset};
256 // Returns the data for the wanted wafer
257 if (*it != *it) return waferData;
258 waferData.assign(it, end);
259 return waferData;
260 } catch (const std::out_of_range& e) {
261 return waferData;
262 }
263} // SCT_ReadCalibChipDataTool::getNoiseOccupancyData()
#define ATH_MSG_DEBUG(x)
const SCT_NoiseCalibData * getCondDataNoise(const EventContext &ctx) const

◆ getNPtGainData() [1/2]

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

Get NPtGain data per wafer.

Definition at line 218 of file SCT_ReadCalibChipDataTool.cxx.

218 {
219 const EventContext& ctx{Gaudi::Hive::currentContext()};
220 return getNPtGainData(moduleId, side, datatype, ctx);
221}
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.

◆ getNPtGainData() [2/2]

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 176 of file SCT_ReadCalibChipDataTool.cxx.

176 {
177 // Print where you are
178 ATH_MSG_DEBUG("in getNPtGainData()");
179 std::vector<float> waferData;
180
181 // Retrieve SCT_GainCalibData pointer
182 const SCT_GainCalibData* condDataGain{getCondDataGain(ctx)};
183 if (condDataGain==nullptr) {
184 ATH_MSG_ERROR("In getNPtGainData, SCT_GainCalibData cannot be retrieved");
185 return waferData;
186 }
187
188 //find hash
189 const IdentifierHash hashId{m_id_sct->wafer_hash(moduleId)};
190 //make index
191 const unsigned int idx{hashId/SIDES_PER_MODULE};
192 //Retrieve defect data from map
193 try {
194 const SCT_ModuleGainCalibData& wantedNPGData{condDataGain->at(idx)};
195 //find the correct index for the required data
196 const int dataIdx{nPtGainIndex(datatype)};
197 if (dataIdx<0) {
198 ATH_MSG_ERROR("This N-point gain data: " << datatype << " does not exist");
199 return waferData;
200 }
201 const SCT_ModuleCalibParameter& moduleGains{wantedNPGData[dataIdx]};
202 const int startOffset{side*CHIPS_PER_SIDE};
203 const int endOffset{CHIPS_PER_SIDE+startOffset};
204 SCT_ModuleCalibParameter::const_iterator it{moduleGains.begin() + startOffset};
205 SCT_ModuleCalibParameter::const_iterator end{moduleGains.begin() + endOffset};
206 // Returns the data for the wanted wafer
207 if (*it != *it) return waferData;
208 //could use signaling NaN here and catch the exception instead, would be quicker: NO!
209 //see: http://stackoverflow.com/questions/235386/using-nan-in-c
210 waferData.assign(it, end);
211 return waferData;
212 } catch (const std::out_of_range& e) {
213 return waferData;
214 }
215} //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 32 of file SCT_ReadCalibChipDataTool.cxx.

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

◆ isGood() [1/4]

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 156 of file SCT_ReadCalibChipDataTool.cxx.

156 {
157 if (h==InDetConditions::SCT_SIDE) { //Could do by chip too
158 const IdentifierHash elementIdHash{m_id_sct->wafer_hash(elementId)};
159 return isGood(elementIdHash, ctx);
160 } else{
161 // Not applicable for Calibration data
162 ATH_MSG_WARNING("summary(): " << h << "good/bad is not applicable for Calibration data");
163 return true;
164 }
165}
#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/4]

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

Definition at line 168 of file SCT_ReadCalibChipDataTool.cxx.

168 {
169 const EventContext& ctx{Gaudi::Hive::currentContext()};
170
171 return isGood(elementId, ctx, h);
172}

◆ isGood() [3/4]

bool SCT_ReadCalibChipDataTool::isGood ( const IdentifierHash & hashId) const
overridevirtual

Definition at line 147 of file SCT_ReadCalibChipDataTool.cxx.

147 {
148 const EventContext& ctx{Gaudi::Hive::currentContext()};
149
150 return isGood(elementHashId, ctx);
151}

◆ isGood() [4/4]

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 60 of file SCT_ReadCalibChipDataTool.cxx.

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

◆ noiseOccIndex()

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

Definition at line 279 of file SCT_ReadCalibChipDataTool.cxx.

279 {
280 int i{N_NOISEOCC};
281 while (i--) if (dataName==noiseOccParameterNames[i]) break;
282 return i;
283}
const std::array< std::string, SCT_ConditionsData::N_NOISEOCC > noiseOccParameterNames

◆ nPtGainIndex()

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

Definition at line 272 of file SCT_ReadCalibChipDataTool.cxx.

272 {
273 int i{N_NPTGAIN};
274 while (i--) if (dataName==nPtGainParameterNames[i]) break;
275 return i;
276}
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 80 of file SCT_ReadCalibChipDataTool.h.

80{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 81 of file SCT_ReadCalibChipDataTool.h.

81{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 77 of file SCT_ReadCalibChipDataTool.h.

77{nullptr};

◆ m_noiseLevel

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

Definition at line 84 of file SCT_ReadCalibChipDataTool.h.

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

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