72 std::array<float, m_nDecodingErrorBits> decodingErrorBitsArr = {0, 0, 0};
73 if (!zdcDecodingError && !rpdDecodingError){
74 decodingErrorBitsArr[0] += 1;
75 }
else if (zdcDecodingError){
77 decodingErrorBitsArr[1] += 1;
80 decodingErrorBitsArr[2] += 1;
84 fill(
"ZdcLEDAllEventsDiagnosis", decodingErrorBits, lumiBlock);
87 ATH_MSG_WARNING(
"Neither ZDC nor RPD are enabled! Quit LED histogram filling!");
90 if (zdcDecodingError && rpdDecodingError){
91 ATH_MSG_WARNING(
"Both ZDC and RPD have decoding errors! Quit LED histogram filling!");
100 if (!robBCIDHandle.isValid())
return StatusCode::FAILURE;
105 for (
const auto zdcSum : *zdcSums) {
106 if (zdcSum->zdcSide() == 0){
107 moduleSumEventInfo_ptr = zdcSum;
111 const std::vector<uint16_t>& robBCIDvec = robBCIDHandle(*moduleSumEventInfo_ptr);
112 if (robBCIDHandle->size() == 0)
return StatusCode::FAILURE;
114 unsigned int checkBCID = robBCIDvec[0];
115 for (
unsigned int bcid : robBCIDvec) {
116 if (bcid != checkBCID) {
117 ATH_MSG_ERROR(
"Inconsistent BCIDs in rob header, cannot continue in standalone mode");
118 return StatusCode::FAILURE;
129 unsigned int iLEDType = 1000;
130 std::string led_type_str;
134 return StatusCode::SUCCESS;
139 for (
const auto zdcSum : *zdcSums) {
140 if (zdcSum->zdcSide() == 0){
141 iLEDType = zdcLEDTypeHandle(*zdcSum);
146 if (iLEDType == 1000){
148 return StatusCode::SUCCESS;
151 ATH_MSG_WARNING(
"The retrieved LED type is incorrect (larger than 2)!");
152 return StatusCode::SUCCESS;
185 return StatusCode::SUCCESS;
190 return StatusCode::SUCCESS;
197 for (
const auto zdcMod : *zdcModules){
198 if (zdcMod->zdcType() == 0)
continue;
200 int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
201 std::string side_str = (iside == 0)?
"C" :
"A";
203 int ichannel = zdcMod->zdcChannel();
204 std::string channel_str = std::to_string(ichannel);
221 for (
const auto zdcMod : *zdcModules){
222 int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
223 std::string side_str = (iside == 0)?
"C" :
"A";
225 if (zdcMod->zdcType() == 0){
226 int imod = zdcMod->zdcModule();
227 std::string module_str = std::to_string(imod);
229 zdcLEDADCSum = LEDADCSumHandle(*zdcMod);
230 zdcLEDMaxADC = LEDMaxADCHandle(*zdcMod);
231 zdcLEDMaxSample = LEDMaxSampleHandle(*zdcMod);
232 zdcLEDAvgTime = LEDAvgTimeHandle(*zdcMod);
234 zdcLEDMaxADCtoADCSumRatio = (zdcLEDADCSum == 0)? -1000. : zdcLEDMaxADC * 1. / zdcLEDADCSum;
236 fill(
m_tools[
m_ZDCModuleLEDToolIndices.at(led_type_str).at(side_str).at(module_str)], lumiBlock, bcid, zdcLEDADCSum, zdcLEDMaxADC, zdcLEDMaxSample, zdcLEDAvgTime, zdcLEDMaxADCtoADCSumRatio);
238 else if (zdcMod->zdcType() == 1) {
239 int ichannel = zdcMod->zdcChannel();
240 std::string channel_str = std::to_string(ichannel);
243 ATH_MSG_WARNING(
"The current channel number exceeds the zero-based limit (15): it is " << ichannel);
246 rpdLEDADCSum = LEDADCSumHandle(*zdcMod);
247 rpdLEDMaxADC = LEDMaxADCHandle(*zdcMod);
248 rpdLEDMaxSample = LEDMaxSampleHandle(*zdcMod);
249 rpdLEDAvgTime = LEDAvgTimeHandle(*zdcMod);
251 rpdLEDMaxADCtoADCSumRatio = (rpdLEDADCSum == 0)? -1000. : rpdLEDMaxADC * 1. / rpdLEDADCSum;
253 fill(
m_tools[
m_RPDChannelLEDToolIndices.at(led_type_str).at(side_str).at(channel_str)], lumiBlock, bcid, rpdLEDPassFireCriteria, rpdLEDADCSum, rpdLEDMaxADC, rpdLEDMaxSample, rpdLEDAvgTime, rpdLEDMaxADCtoADCSumRatio);
257 return StatusCode::SUCCESS;