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

260 {
261 SG::ReadCondHandle<SCT_GainCalibData> condData{m_condKeyGain, ctx};
262 return condData.retrieve();
263}
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 266 of file SCT_ReadCalibChipDataTool.cxx.

266 {
267 SG::ReadCondHandle<SCT_NoiseCalibData> condData{m_condKeyNoise, ctx};
268 return condData.retrieve();
269}
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()

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

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

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

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

149 {
150 if (h==InDetConditions::SCT_SIDE) { //Could do by chip too
151 const IdentifierHash elementIdHash{m_id_sct->wafer_hash(elementId)};
152 return isGood(elementIdHash, ctx);
153 } else{
154 // Not applicable for Calibration data
155 ATH_MSG_WARNING("summary(): " << h << "good/bad is not applicable for Calibration data");
156 return true;
157 }
158}
#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 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 253 of file SCT_ReadCalibChipDataTool.cxx.

253 {
254 int i{N_NOISEOCC};
255 while (i--) if (dataName==noiseOccParameterNames[i]) break;
256 return i;
257}
const std::array< std::string, SCT_ConditionsData::N_NOISEOCC > noiseOccParameterNames

◆ nPtGainIndex()

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

Definition at line 246 of file SCT_ReadCalibChipDataTool.cxx.

246 {
247 int i{N_NPTGAIN};
248 while (i--) if (dataName==nPtGainParameterNames[i]) break;
249 return i;
250}
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: