41 if (!(rdocontainer.isValid())) {
44 fill(hitGroup, dataread_err);
45 return StatusCode::RECOVERABLE;
47 ATH_MSG_DEBUG(
"Pixel Monitoring: Pixel RDO container " << rdocontainer.name() <<
" is found.");
57 bool copyFEval(
false);
59 AccumulatorArrays hitsPerEventArray = {{{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}};
67 if (pixlayer == 99)
continue;
72 hitsPerEventArray.DA[phiMod][etaMod] = -1;
76 hitsPerEventArray.DC[phiMod][etaMod] = -1;
80 hitsPerEventArray.B0[phiMod][etaMod] = -1;
84 hitsPerEventArray.B1[phiMod][etaMod] = -1;
88 hitsPerEventArray.B2[phiMod][etaMod] = -1;
92 hitsPerEventArray.IBL[phiMod][etaMod] = -1;
93 if (copyFEval) hitsPerEventArray.IBL[phiMod][++etaMod] = -1;
117 for (; idIt != idItEnd; ++idIt) {
121 if (pixlayer == 99)
continue;
129 for (
int iFE=0; iFE<nFE; iFE++) {
135 if (not is_active)
continue;
136 nActive_layer[iblsublayer]++;
137 if (is_good) nGood_layer[iblsublayer]++;
147 nActive_layer[pixlayer]++;
148 if (is_good) nGood_layer[pixlayer]++;
154 46080, 46080, 46080, 46080, 46080, 26880, 26880
159 nGoodChannels_layer[i] = 1.0 * nChannels_mod[i] * nGood_layer[i];
160 nActiveChannels_layer[i] = 1.0 * nChannels_mod[i] * nActive_layer[i];
167 ATH_MSG_DEBUG(
"Filling Raw Hit (RDO) Monitoring Histograms");
170 VecAccumulator2DMap HitMap(*
this,
"HitMap");
171 VecAccumulator2DMap HitFEMap(*
this,
"HitFEMap");
172 std::vector<int> hitLvl1a;
173 std::unordered_map<int, std::vector<int> > hitLvl1aLayer;
174 std::unordered_map<int, std::vector<int> > hitToTLayer;
178 for (
auto colNext: *rdocontainer) {
180 if (!HitCollection) {
181 ATH_MSG_DEBUG(
"Pixel Monitoring: Pixel Hit container is empty.");
183 fill(hitGroup, dataread_err);
187 for (
auto p_rdo: *HitCollection) {
188 rdoID = p_rdo->identify();
190 if (pixlayer == 99)
continue;
192 HitMap.add(pixlayer, rdoID, 1.0);
196 hitLvl1a.push_back(p_rdo->getLVL1A());
200 hitsPerEventArray.DA[phiMod][etaMod]++;
204 hitsPerEventArray.DC[phiMod][etaMod]++;
208 hitsPerEventArray.B0[phiMod][etaMod]++;
212 hitsPerEventArray.B1[phiMod][etaMod]++;
216 hitsPerEventArray.B2[phiMod][etaMod]++;
220 hitsPerEventArray.IBL[phiMod][etaMod]++;
227 nhits_layer[pixlayer]++;
228 hitLvl1aLayer[pixlayer].push_back(p_rdo->getLVL1A());
229 hitToTLayer[pixlayer].push_back(p_rdo->getToT());
237 fill(hitGroup, vals);
238 for (
const auto& itr : hitLvl1aLayer) {
239 int layer = itr.first;
244 }
catch (std::out_of_range& e) {
245 ATH_MSG_ERROR(
"Out of range access in PixelAthHitMonAlg::fillHistograms");
248 for (
const auto& itr : hitToTLayer) {
249 int layer = itr.first;
254 }
catch (std::out_of_range& e) {
255 ATH_MSG_ERROR(
"Out of range access in PixelAthHitMonAlg::fillHistograms");
261 fill(hitGroup, lbval, nhitsval);
264 fillFromArrays(
"HitOccupancyPP0", hitsPerEventArray,
"OccupancyPerPixelEvent");
267 if (nGoodChannels_layer[i] > 0) avgocc_good_layer[i] = nhits_layer[i] / nGoodChannels_layer[i];
270 if (nActiveChannels_layer[i] > 0) avgocc_active_layer[i] = nhits_layer[i] / nActiveChannels_layer[i];
277 float avgocc_good_ibl(0);
279 if (avgocc_good_ibl > 0) {
281 avgocc_ratio_toIBL_layer[i] = avgocc_good_layer[i] / avgocc_good_ibl;
288 fill(hitGroup, dataread_err);
294 return StatusCode::SUCCESS;