202 {
203 ATH_MSG_DEBUG(
"calling the fillPhysicsDataHistograms function");
204
205
206
207
208 bool cur_event_ZDC_available = true;
209 bool cur_event_RPD_available = true;
210 bool cur_event_RPDCentroid_available = true;
211
212
213
214
215
216
218
219
222 uint32_t eventTime = eventInfo->timeStamp();
223 uint32_t runNumber = eventInfo->runNumber();
224
225
226
227
230 std::array<float, m_nDecodingErrorBits> decodingErrorBitsArr = {0, 0, 0};
231
232 cur_event_ZDC_available &= !zdcDecodingError;
233 cur_event_RPD_available &= !rpdDecodingError;
234
235 if (!zdcDecodingError && !rpdDecodingError){
236 decodingErrorBitsArr[0] += 1;
237 } else if (zdcDecodingError){
239 decodingErrorBitsArr[1] += 1;
240 } else {
242 decodingErrorBitsArr[2] += 1;
243 }
244
245 auto zdcTool =
getGroup(
"genZdcMonTool");
246
248 fill(zdcTool, decodingErrorBits, lumiBlock);
249
250
251
252
253
254
255
256
257 auto passTrigSideA = Monitored::Scalar<bool>("passTrigSideA",false);
258 auto passTrigSideC = Monitored::Scalar<bool>("passTrigSideC",false);
259
260 if(m_EnableZDCSingleSideTriggers && m_enableZDCPhysics){
266 }
267
268
269
270 auto passUCCTrig_HELT15 = Monitored::Scalar<bool>("passUCCTrig_HELT15",false);
271 auto passUCCTrig_HELT20 = Monitored::Scalar<bool>("passUCCTrig_HELT20",false);
272 auto passUCCTrig_HELT25 = Monitored::Scalar<bool>("passUCCTrig_HELT25",false);
273 auto passUCCTrig_HELT35 = Monitored::Scalar<bool>("passUCCTrig_HELT35",false);
274 auto passUCCTrig_HELT50 = Monitored::Scalar<bool>("passUCCTrig_HELT50",false);
275
276 std::array<float, m_nUCCTrigBits> uccTrigBitsArr = {0};
277
278 if(m_EnableUCCTriggers && m_enableZDCPhysics){
280
282 passUCCTrig_HELT15 = trigDecTool->isPassed(m_UCCtriggerHELT15);
283 passUCCTrig_HELT20 = trigDecTool->isPassed(m_UCCtriggerHELT20);
284 passUCCTrig_HELT25 = trigDecTool->isPassed(m_UCCtriggerHELT25);
285 passUCCTrig_HELT35 = trigDecTool->isPassed(m_UCCtriggerHELT35);
286 passUCCTrig_HELT50 = trigDecTool->isPassed(m_UCCtriggerHELT50);
287
288 if (passUCCTrig_HELT15){
291 }
292 if (passUCCTrig_HELT20){
295 }
296 if (passUCCTrig_HELT25){
299 }
300 if (passUCCTrig_HELT35){
303 }
304 if (passUCCTrig_HELT50){
307 }
308 }else{
310 }
311
313 fill(zdcTool, uccTrigBits, lumiBlock);
314
315
318 std::vector<float> oopoTrigBitsArr(nOOpOTriggers+2, 0.);
319
320 std::vector<Monitored::Scalar<bool>> oopoTrigPassBoolVec;
321 oopoTrigPassBoolVec.reserve(nOOpOTriggers);
322
323 if(m_EnableOOpOTriggers && m_enableZDCPhysics) {
324 oopoTrigBitsArr[0] += 1;
325
327
328 for (
int i = 0;
i < nOOpOTriggers - nOOpOL1TriggersFromCTP; ++
i) {
329 const bool pass = (trigDecTool->isPassed( m_OOpOtriggerChains[i] ));
330
331
333
335 [](char c){ return c=='-'; }, '_' );
336
337 oopoTrigPassBoolVec.emplace_back( varName, pass );
338 oopoTrigBitsArr[
i+1] += pass;
339 }
340
341 try {
344
345 if (!trigDecision){
346 throw std::runtime_error("Trigger decision NOT retrieved for PEB stream!");
347 }
348 std::vector<uint32_t> tbp = trigDecision->
tbp();
349
350 for (const auto& [ctp_id, trig_name] : m_OOpOL1TriggerFromCTPIDMap) {
351 int ind = ctp_id / 32;
352 int bit = ctp_id % 32;
353 const bool pass = ((tbp.at(ind) >> bit) & 1);
354 ATH_MSG_INFO(
"what's the size of xAOD::TrigDecision::tbp()? " << tbp.size());
355 std::string
varName =
"pass" + trig_name;
356 oopoTrigPassBoolVec.emplace_back( varName, pass );
357 oopoTrigBitsArr.at(oopoTrigPassBoolVec.size()) += pass;
358 }
359 } catch (const std::out_of_range& e) {
360 ATH_MSG_WARNING(
"Out of range error captured when fetching L1 trigger bits from CTP ID: " <<
e.what());
361 } catch (const std::runtime_error& e) {
362 ATH_MSG_WARNING(
"Runtime error captured when fetching L1 trigger bits from CTP ID: " <<
e.what());
363 } catch (const std::exception& e) {
364 ATH_MSG_WARNING(
"Other std::exception captured when fetching L1 trigger bits from CTP ID: " <<
e.what());
365 } catch (...) {
366 ATH_MSG_WARNING(
"Error captured when fetching L1 trigger bits from CTP ID. Likely either no L1 trigger looked at or no L1 trigger will show to be passed.");
367 }
368 }else{
369 oopoTrigBitsArr[nOOpOTriggers + 1] += 1;
370 }
371
373
374 fill(zdcTool, oopoTrigBits, lumiBlock);
375
376
377
378
379
380 SG::ReadHandle<xAOD::ZdcModuleContainer> zdcSums(m_ZdcSumContainerKey, ctx);
381
382 auto zdcEnergySumTwoSidesTeV = Monitored::Scalar<float>("zdcEnergySumTwoSidesTeV",0.0);
383 auto zdcHadronicEnergySumTwoSidesTeV = Monitored::Scalar<float>("zdcHadronicEnergySumTwoSidesTeV",0.0);
384 auto zdcEnergySumA = Monitored::Scalar<float>("zdcEnergySumA",-1000.0);
385 auto zdcEnergySumC = Monitored::Scalar<float>("zdcEnergySumC",-1000.0);
386 auto zdcUncalibSumA = Monitored::Scalar<float>("zdcUncalibSumA",-1000.0);
387 auto zdcUncalibSumC = Monitored::Scalar<float>("zdcUncalibSumC",-1000.0);
388 auto rpdCosDeltaReactionPlaneAngle = Monitored::Scalar<float>("rpdCosDeltaReactionPlaneAngle",-1000.0);
389 auto bothReactionPlaneAngleValid = Monitored::Scalar<bool>("bothReactionPlaneAngleValid",true);
390 auto bothHasCentroid = Monitored::Scalar<bool>("bothHasCentroid",true);
391
392 std::array<bool, 2> centroidSideValidArr;
393 std::array<bool, 2> rpdSideValidArr = {false, false};
394 std::array<std::vector<float>,2> rpdSubAmpVecs;
395 auto rpdSubAmpSumCurSide = Monitored::Scalar<float>("rpdSubAmpSum",-1000.0);
396 auto rpdXCentroidCurSide = Monitored::Scalar<float>("xCentroid",-1000.0);
397 auto rpdYCentroidCurSide = Monitored::Scalar<float>("yCentroid",-1000.0);
398 auto rpdReactionPlaneAngleCurSide = Monitored::Scalar<float>("ReactionPlaneAngle",-1000.0);
399 auto centroidValid = Monitored::Scalar<bool>("centroidValid",false);
400 auto centroidValidBitFloat = Monitored::Scalar<float>("centroidValidBitFloat", -1000.0);
401 auto passMinZDCEnergyCutForCentroidValidEvaluation = Monitored::Scalar<bool>("passMinZDCEnergyCutForCentroidValidEvaluation",false);
402
403
404
405
406 std::array<float, 2> zdcEMModuleEnergyArr = {-1000.,-1000.};
407 std::array<float, 2> zdcEnergySumArr = {-1000,-1000.};
408 std::array<float, 2> zdcUncalibSumArr = {-1000.,-1000.};
409 std::array<float, 2> zdcAvgTimeArr = {-1000.,-1000.};
410 std::array<bool, 2> zdcModuleMaskArr = {false, false};
411 std::array<bool, 2> passTrigOppSideArr = {false, false};
412 std::array<float, 2> rpdAmplitudeCalibSum = {-1000.,-1000.};
413 std::array<float, 2> rpdMaxADCSum = {-1000.,-1000.};
414
415 std::array<float, m_nRpdCentroidStatusBits> centroidStatusBitsCountCurSide;
416
417 if (! zdcSums.isValid() ) {
418 ATH_MSG_WARNING(
"evtStore() does not contain Collection with name "<< m_ZdcSumContainerKey);
419 return StatusCode::SUCCESS;
420 }
421
422 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> ZdcSumCalibEnergyHandle(m_ZdcSumCalibEnergyKey, ctx);
423 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> ZdcSumUncalibSumHandle(m_ZdcSumUncalibSumKey, ctx);
424 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> ZdcSumAverageTimeHandle(m_ZdcSumAverageTimeKey, ctx);
425 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, unsigned int> ZdcSumModuleMaskHandle(m_ZdcSumModuleMaskKey, ctx);
426
427
428
429 if (cur_event_ZDC_available){
430 for (const auto zdcSum : *zdcSums) {
431 if (zdcSum->zdcSide() != 0){
432 int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
433 zdcModuleMaskArr[iside] = ZdcSumModuleMaskHandle(*zdcSum);
434 }
435 }
436 }
437
438
439 zdcEnergySumTwoSidesTeV = 0.;
440
441 if (m_enableZDCPhysics){
442 cur_event_ZDC_available &= ZdcSumCalibEnergyHandle.isAvailable();
443
444 if (cur_event_ZDC_available){
445 for (const auto zdcSum : *zdcSums) {
446 if (zdcSum->zdcSide() != 0){
447 int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
448
449 zdcEnergySumArr[iside] = ZdcSumCalibEnergyHandle(*zdcSum);
450 zdcUncalibSumArr[iside] = ZdcSumUncalibSumHandle(*zdcSum);
451 zdcAvgTimeArr[iside] = ZdcSumAverageTimeHandle(*zdcSum);
452
453 passTrigOppSideArr[iside] = (iside == 0)? passTrigSideA : passTrigSideC;
454
455 zdcEnergySumTwoSidesTeV += (ZdcSumCalibEnergyHandle(*zdcSum)) / 1000.;
456
457 if (zdcSum->zdcSide() == 1){
458 zdcEnergySumA = ZdcSumCalibEnergyHandle(*zdcSum);
459 zdcUncalibSumA = ZdcSumUncalibSumHandle(*zdcSum);
460 }
461 else {
462 zdcEnergySumC = ZdcSumCalibEnergyHandle(*zdcSum);
463 zdcUncalibSumC = ZdcSumUncalibSumHandle(*zdcSum);
464 }
465 }
466 }
467 }
468 } else if (m_enableZDC){
469 cur_event_ZDC_available &= ZdcSumUncalibSumHandle.isAvailable();
470 if (cur_event_ZDC_available){
471 for (const auto zdcSum : *zdcSums) {
472 if (zdcSum->zdcSide() != 0){
473 int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
474 zdcUncalibSumArr[iside] = ZdcSumUncalibSumHandle(*zdcSum);
475 }
476 }
477 }
478 }
479
480
481 if (m_enableRPDAmp){
482 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, unsigned int> RPDsideStatusHandle(m_RPDSideStatusKey, ctx);
483 cur_event_RPD_available &= RPDsideStatusHandle.isAvailable();
484 if (cur_event_RPD_available){
485 for (const auto zdcSum : *zdcSums) {
486 if (zdcSum->zdcSide() != 0){
487 int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
488 unsigned int rpdStatusCurSide = RPDsideStatusHandle(*zdcSum);
490 }
491 }
492 }
493 }
494
495
496 if (m_enableCentroid){
497 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, std::vector<float>> RPDsubAmpHandle(m_RPDChannelSubtrAmpKey, ctx);
498 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDsubAmpSumHandle(m_RPDSubtrAmpSumKey, ctx);
499 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDxCentroidHandle(m_RPDxCentroidKey, ctx);
500 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDyCentroidHandle(m_RPDyCentroidKey, ctx);
501 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDreactionPlaneAngleHandle(m_RPDreactionPlaneAngleKey, ctx);
502 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDcosDeltaReactionPlaneAngleHandle(m_RPDcosDeltaReactionPlaneAngleKey, ctx);
503 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, unsigned int> RPDcentroidStatusHandle(m_RPDcentroidStatusKey, ctx);
504
505 cur_event_RPDCentroid_available &= RPDcentroidStatusHandle.isAvailable();
506 if (cur_event_RPDCentroid_available){
507 for (const auto zdcSum : *zdcSums) {
508
509 if (zdcSum->zdcSide() == 0){
510 rpdCosDeltaReactionPlaneAngle = RPDcosDeltaReactionPlaneAngleHandle(*zdcSum);
511 }else{
512 int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
513 std::string side_str = (iside == 0)? "C" : "A";
514
515 rpdSubAmpVecs[iside] = RPDsubAmpHandle(*zdcSum);
516 rpdSubAmpSumCurSide = RPDsubAmpSumHandle(*zdcSum);
517 rpdXCentroidCurSide = RPDxCentroidHandle(*zdcSum);
518 rpdYCentroidCurSide = RPDyCentroidHandle(*zdcSum);
519 rpdReactionPlaneAngleCurSide = RPDreactionPlaneAngleHandle(*zdcSum);
520
521 unsigned int rpdCentroidStatusCurSide = RPDcentroidStatusHandle(*zdcSum);
522
523
524
525
526
527
528
529
530
531
533
534 centroidValidBitFloat = (centroidValid)? 0.5 : 1.5;
535
538
539 bothReactionPlaneAngleValid &= centroidValid;
540 bothHasCentroid &= curSideHasCentroid;
541
543 for (int bit = 0; bit < m_nRpdCentroidStatusBits; bit++){
544 if (rpdCentroidStatusCurSide & 1 << bit){
545 centroidStatusBitsCountCurSide[bit] += 1;
546 }
547 }
548 auto centroidStatusBits =
Monitored::Collection(
"centroidStatusBits", centroidStatusBitsCountCurSide);
549
550 if (curSideHasCentroid){
551 if (m_enableZDCPhysics){
553 }
554 fill(m_tools[
m_ZDCSideToolIndices.at(side_str)], rpdSubAmpSumCurSide, centroidValid, passMinZDCEnergyCutForCentroidValidEvaluation, centroidValidBitFloat, rpdXCentroidCurSide, rpdYCentroidCurSide, rpdReactionPlaneAngleCurSide, centroidStatusBits, lumiBlock, bcid);
555 }else{
557 }
558 }
559 }
560 }
561 }
562
563
564
565
566
567
568
569 SG::ReadHandle<xAOD::ZdcModuleContainer> zdcModules(m_ZdcModuleContainerKey, ctx);
570
571 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, unsigned int> zdcModuleStatusHandle(m_ZdcModuleStatusKey, ctx);
572 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleAmplitudeHandle(m_ZdcModuleAmplitudeKey, ctx);
573 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleTimeHandle(m_ZdcModuleTimeKey, ctx);
574 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleAmpNoNonLinHandle(m_ZdcModuleAmpNoNonLinKey, ctx);
575 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleFitAmpHandle(m_ZdcModuleFitAmpKey, ctx);
576 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleFitT0Handle(m_ZdcModuleFitT0Key, ctx);
577 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleChisqHandle(m_ZdcModuleChisqKey, ctx);
578 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleCalibEnergyHandle(m_ZdcModuleCalibEnergyKey, ctx);
579 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleCalibTimeHandle(m_ZdcModuleCalibTimeKey, ctx);
580 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleMaxADCHandle(m_ZdcModuleMaxADCKey, ctx);
581 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleMaxADCHGHandle(m_ZdcModuleMaxADCHGKey, ctx);
582 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleMaxADCLGHandle(m_ZdcModuleMaxADCLGKey, ctx);
583
584 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleFitAmpLGRefitHandle(m_ZdcModuleFitAmpLGRefitKey, ctx);
585 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleAmpLGRefitHandle(m_ZdcModuleAmpLGRefitKey, ctx);
586 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleT0LGRefitHandle(m_ZdcModuleT0LGRefitKey, ctx);
587 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleT0SubLGRefitHandle(m_ZdcModuleT0SubLGRefitKey, ctx);
588 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> zdcModuleChisqLGRefitHandle(m_ZdcModuleChisqLGRefitKey, ctx);
589
590 auto zdcModuleAmp = Monitored::Scalar<float>("zdcModuleAmp", -1000.0);
591 auto zdcModuleFitAmp = Monitored::Scalar<float>("zdcModuleFitAmp", -1000.0);
592 auto zdcModuleMaxADC = Monitored::Scalar<float>("zdcModuleMaxADC", -1000.0);
593 auto zdcModuleMaxADCHG = Monitored::Scalar<float>("zdcModuleMaxADCHG", -1000.0);
594 auto zdcModuleMaxADCLG = Monitored::Scalar<float>("zdcModuleMaxADCLG", -1000.0);
595 auto zdcModuleAmpToMaxADCRatio = Monitored::Scalar<float>("zdcModuleAmpToMaxADCRatio", -1000.0);
596 auto zdcModuleFract = Monitored::Scalar<float>("zdcModuleFract", -1000.0);
597 auto zdcUncalibSumCurrentSide = Monitored::Scalar<float>("zdcUncalibSumCurrentSide", -1000.0);
598 auto zdcEnergySumCurrentSide = Monitored::Scalar<float>("zdcEnergySumCurrentSide", -1000.0);
599 auto zdcAbove20NCurrentSide = Monitored::Scalar<bool>("zdcAbove20NCurrentSide", false);
600 auto zdcEnergyAboveModuleFractCut = Monitored::Scalar<bool>("zdcEnergyAboveModuleFractCut", false);
601 auto zdcModuleTime = Monitored::Scalar<float>("zdcModuleTime", -1000.0);
602 auto zdcModuleFitT0 = Monitored::Scalar<float>("zdcModuleFitT0", -1000.0);
603 auto zdcModuleChisq = Monitored::Scalar<float>("zdcModuleChisq", -1000.0);
604 auto zdcModuleChisqEventWeight = Monitored::Scalar<float>("zdcModuleChisqEventWeight", -1000.0);
605 auto zdcModuleChisqOverAmp = Monitored::Scalar<float>("zdcModuleChisqOverAmp", -1000.0);
606 auto zdcModuleChisqOverAmpEventWeight = Monitored::Scalar<float>("zdcModuleChisqOverAmpEventWeight", -1000.0);
607 auto zdcModuleCalibAmp = Monitored::Scalar<float>("zdcModuleCalibAmp", -1000.0);
608 auto zdcModuleCalibTime = Monitored::Scalar<float>("zdcModuleCalibTime", -1000.0);
609 auto zdcModuleLG = Monitored::Scalar<bool>("zdcModuleLG", false);
610 auto zdcModuleHG = Monitored::Scalar<bool>("zdcModuleHG", false);
611
612 auto injectedPulseInputVoltage = Monitored::Scalar<float>("injectedPulseInputVoltage", -1000.0);
613 auto zdcInjInputVoltagePassMinThrsh = Monitored::Scalar<bool>("zdcInjInputVoltagePassMinThrsh", false);
614 auto zdcHGInjPulseValid = Monitored::Scalar<bool>("zdcHGInjPulseValid", true);
615 auto zdcLGInjPulseValid = Monitored::Scalar<bool>("zdcLGInjPulseValid", true);
616
617 auto zdcModuleFractionValid = Monitored::Scalar<bool>("zdcModuleFractionValid", false);
618 auto zdcModuleTimeValid = Monitored::Scalar<bool>("zdcModuleTimeValid", false);
619 auto zdcModuleHGTimeValid = Monitored::Scalar<bool>("zdcModuleHGTimeValid", false);
620 auto zdcModuleLGTimeValid = Monitored::Scalar<bool>("zdcModuleLGTimeValid", false);
621
622 auto zdcModuleLGFitAmp = Monitored::Scalar<float>("zdcModuleLGFitAmp", -1000.0);
623 auto zdcModuleFitAmpLGRefit = Monitored::Scalar<float>("zdcModuleFitAmpLGRefit", -1000.0);
624 auto zdcModuleAmpLGRefit = Monitored::Scalar<float>("zdcModuleAmpLGRefit", -1000.0);
625 auto zdcModuleT0LGRefit = Monitored::Scalar<float>("zdcModuleT0LGRefit", -1000.0);
626 auto zdcModuleT0SubLGRefit = Monitored::Scalar<float>("zdcModuleT0SubLGRefit", -1000.0);
627 auto zdcModuleChisqLGRefit = Monitored::Scalar<float>("zdcModuleChisqLGRefit", -1000.0);
628
629 auto zdcModuleHGtoLGAmpRatio = Monitored::Scalar<float>("zdcModuleHGtoLGAmpRatio", -1000.0);
630 auto zdcModuleHGtoLGAmpRatioNoNonlinCorr = Monitored::Scalar<float>("zdcModuleHGtoLGAmpRatioNoNonlinCorr", -1000.0);
631 auto zdcModuleHGtoLGT0Diff = Monitored::Scalar<float>("zdcModuleHGtoLGT0Diff", -1000.0);
632
633 auto zdcModuleMaskCurSide = Monitored::Scalar<bool>("zdcModuleMaskCurSide", false);
634
635 auto rpdChannelSubAmp = Monitored::Scalar<float>("RPDChannelSubAmp", -1000.0);
636 auto rpdChannelAmplitude = Monitored::Scalar<float>("RPDChannelAmplitude", -1000.0);
637 auto rpdChannelMaxADC = Monitored::Scalar<float>("RPDChannelMaxADC", -1000.0);
638 auto rpdChannelMaxSample = Monitored::Scalar<unsigned int>("RPDChannelMaxSample", 1000);
639 auto rpdChannelAmplitudeCalib = Monitored::Scalar<float>("RPDChannelAmplitudeCalib", -1000.0);
640 auto rpdChannelStatus = Monitored::Scalar<unsigned int>("RPDChannelStatus", 1000);
641 auto rpdChannelPileupFitSlope = Monitored::Scalar<float>("RPDChannelPileupFitSlope", -1000);
642 auto absRpdChannelAmplitude = Monitored::Scalar<float>("absRPDChannelAmplitude", -1000.);
643 auto rpdChannelValid = Monitored::Scalar<bool>("RPDChannelValid", false);
644 auto rpdChannelValidBitFloat = Monitored::Scalar<float>("RPDChannelValidBitFloat", -1000.0);
645 auto rpdChannelCentroidValid = Monitored::Scalar<bool>("RPDChannelCentroidValid", false);
646 auto rpdChannelPileupFrac = Monitored::Scalar<float>("RPDChannelPileupFrac", -1000.);
647 auto zdcEMModuleEnergySameSide = Monitored::Scalar<float>("zdcEMModuleEnergySameSide", -1000.);
648 auto zdcEnergySumSameSide = Monitored::Scalar<float>("zdcEnergySumSameSide", -1000.);
649
650 std::array<float, m_nZdcStatusBits> zdcStatusBitsCount;
651 std::array<float, m_nRpdStatusBits> rpdStatusBitsCount;
652
653 if (! zdcModules.isValid() ) {
654 ATH_MSG_WARNING(
"evtStore() does not contain Collection with name "<< m_ZdcModuleContainerKey);
655 return StatusCode::SUCCESS;
656 }
657
658 if (m_isInjectedPulse && (!m_isStandalone)){
659
660 if (runNumber != m_runNumber) {
661 ATH_MSG_WARNING(
"The event run number differs from the fixed run number read from the input-file metadata!");
662 ATH_MSG_WARNING(
"The event run number is " << runNumber <<
"; the fixed run number is " << m_runNumber);
663 }
664
667 }
668
669
670
671
672
673 zdcHadronicEnergySumTwoSidesTeV = 0.;
674 if (m_enableZDC){
675 cur_event_ZDC_available &= zdcModuleStatusHandle.isAvailable();
676 if (cur_event_ZDC_available){
677 for (const auto zdcMod : *zdcModules){
678 int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
679 std::string side_str = (iside == 0)? "C" : "A";
680
681 zdcModuleMaskCurSide = zdcModuleMaskArr[iside];
682
683 if (zdcMod->zdcType() == 0){
684 int imod = zdcMod->zdcModule();
685 std::string module_str = std::to_string(imod);
686
687 int status = zdcModuleStatusHandle(*zdcMod);
688
689 for (
int bit = 0; bit <
m_nZdcStatusBits; bit++) zdcStatusBitsCount[bit] = 0;
690 for (int bit = 0; bit < m_nZdcStatusBits; bit++){
691 if (status & 1 << bit){
692 zdcStatusBitsCount[bit] += 1;
693 }
694 }
695
698
700 zdcModuleAmp = zdcModuleAmplitudeHandle(*zdcMod);
701
702 float zdcModuleAmpNoNonLin = zdcModuleAmpNoNonLinHandle(*zdcMod);
703 zdcModuleFitAmp = zdcModuleFitAmpHandle(*zdcMod);
704 zdcModuleMaxADC = zdcModuleMaxADCHandle(*zdcMod);
705 zdcModuleMaxADCHG = zdcModuleMaxADCHGHandle(*zdcMod);
706 zdcModuleMaxADCLG = zdcModuleMaxADCLGHandle(*zdcMod);
707 zdcModuleAmpToMaxADCRatio = (zdcModuleMaxADC == 0)? -1000. : zdcModuleFitAmp / zdcModuleMaxADC;
708 zdcModuleTime = zdcModuleTimeHandle(*zdcMod);
709 zdcModuleFitT0 = zdcModuleFitT0Handle(*zdcMod);
710 zdcModuleChisq = zdcModuleChisqHandle(*zdcMod);
711 zdcModuleCalibAmp = zdcModuleCalibEnergyHandle(*zdcMod);
712 zdcModuleCalibTime = zdcModuleCalibTimeHandle(*zdcMod);
713 zdcUncalibSumCurrentSide = zdcUncalibSumArr[iside];
714 zdcEnergySumCurrentSide = zdcEnergySumArr[iside];
715 zdcAbove20NCurrentSide = (zdcUncalibSumCurrentSide > 20 *
m_expected1N);
717
718 if (m_enableZDCPhysics){
719 zdcModuleFract = (zdcEnergySumCurrentSide == 0)? -1000. : zdcModuleCalibAmp / zdcEnergySumCurrentSide;
720 }else{
721 zdcModuleFract = (zdcUncalibSumCurrentSide == 0)? -1000. : zdcModuleAmp / zdcUncalibSumCurrentSide;
722 }
723
724
725 zdcModuleChisqOverAmp = (zdcModuleFitAmp == 0)? -1000. : zdcModuleChisq / zdcModuleFitAmp;
727 zdcModuleHG = !zdcModuleLG;
728
729 zdcModuleFractionValid = (zdcModuleFract >= 0 && zdcModuleFract <= 1);
730
731 zdcModuleTimeValid = (zdcModuleTime > -100.);
732 zdcModuleHGTimeValid = zdcModuleHG && zdcModuleTimeValid;
733 zdcModuleLGTimeValid = zdcModuleLG && zdcModuleTimeValid;
734
735
736 zdcModuleFitAmpLGRefit = zdcModuleFitAmpLGRefitHandle(*zdcMod);
737 zdcModuleAmpLGRefit = zdcModuleAmpLGRefitHandle(*zdcMod);
738 zdcModuleT0LGRefit = zdcModuleT0LGRefitHandle(*zdcMod);
739 zdcModuleT0SubLGRefit = zdcModuleT0SubLGRefitHandle(*zdcMod);
740 zdcModuleChisqLGRefit = zdcModuleChisqLGRefitHandle(*zdcMod);
741
742 zdcModuleLGFitAmp = (zdcModuleHG)? zdcModuleFitAmpLGRefit * 1. : zdcModuleFitAmp * 1.;
743
744 zdcModuleHGtoLGAmpRatio = (zdcModuleLG || zdcModuleAmpLGRefit == 0)? -1000. : zdcModuleAmp * 1. / zdcModuleAmpLGRefit;
745 zdcModuleHGtoLGAmpRatioNoNonlinCorr = (zdcModuleLG || zdcModuleAmpLGRefit == 0)? -1000. : zdcModuleAmpNoNonLin * 1. / zdcModuleAmpLGRefit;
746 zdcModuleHGtoLGT0Diff = (zdcModuleLG)? -1000. : zdcModuleFitT0 - zdcModuleT0LGRefit;
747
749 zdcModuleChisqOverAmpEventWeight =
calculate_inverse_bin_width(zdcModuleChisqOverAmp,
"module chisq over amplitude", m_ZdcModuleChisqOverAmpBinEdges);
750
751 if (imod == 0) zdcEMModuleEnergyArr[iside] = zdcModuleCalibAmp;
752 else zdcHadronicEnergySumTwoSidesTeV += zdcModuleCalibAmp / 1000.;
753
754 fill(m_tools[
m_ZDCModuleToolIndices.at(side_str).at(module_str)], zdcModuleChisq, zdcModuleChisqOverAmp, zdcModuleChisqLGRefit, zdcModuleChisqEventWeight, zdcModuleChisqOverAmpEventWeight, zdcModuleAmp);
755
757
758 if (m_isInjectedPulse){
759
760 zdcHGInjPulseValid = true;
761 zdcLGInjPulseValid = true;
762
763 bool pass_first3s = true;
764
765
766
767
768
769 if (!m_isSim && !m_isOnline) {
772 bool retrievedLumiBlockTimes = false;
773
774 SG::ReadCondHandle<AthenaAttributeList>
lblb(m_LBLBFolderInputKey, ctx);
775 const AthenaAttributeList* lblbattrList{*
lblb};
776 if (lblbattrList==nullptr) {
778 }
779 else {
780 retrievedLumiBlockTimes = true;
781 auto lb_stime_loc = (*lblbattrList)["StartTime"].data<cool::UInt63>();
782 auto lb_etime_loc = (*lblbattrList)["EndTime"].data<cool::UInt63>();
783 lb_stime = lb_stime_loc;
784 lb_etime = lb_etime_loc;
785 ATH_MSG_DEBUG(
"lb_stime: " << lb_stime <<
" lb_etime: " << lb_etime );
786 }
787
788 lb_stime /= 1000000000;
789 lb_etime /= 1000000000;
790
791 if (lb_etime <= lb_stime || !retrievedLumiBlockTimes){
792 ATH_MSG_WARNING(
"The LB start + end time for current event is not retrieved.");
793 ATH_MSG_WARNING(
"No event rejection at beginning of LB is implemented.");
794 }else if(eventTime < lb_stime){
795 ATH_MSG_WARNING(
"Event time is before the start time of the current LB");
796 ATH_MSG_WARNING(
"Event time: " << eventTime <<
"; current LB: " << lumiBlock <<
"; start time of current LB: " << lb_stime);
797 }else if (eventTime > lb_etime){
799 ATH_MSG_WARNING(
"Event time: " << eventTime <<
"; current LB: " << lumiBlock <<
"; end time of current LB: " << lb_etime);
800 }else{
804 }
805 }
806
807
808
809 zdcHGInjPulseValid &= zdcModuleHG;
815 if (m_minVInjToImposeAmpRequirementHGInjectorPulse > 0 && injectedPulseInputVoltage >= m_minVInjToImposeAmpRequirementHGInjectorPulse){
817 }
818
825 if (m_minVInjToImposeAmpRequirementLGInjectorPulse > 0 && injectedPulseInputVoltage >= m_minVInjToImposeAmpRequirementLGInjectorPulse){
827 }
828
829 if (injectedPulseInputVoltage > 0){
830 if (injectedPulseInputVoltage > 1 && !zdcLGInjPulseValid &&pass_first3s){
831
832 std::ostringstream fails;
833 std::vector<std::pair<std::string, bool>> checks = {
840 };
841
842 for (const auto& [name, pass] : checks) {
843 if (!pass) fails <<
"fail " <<
name <<
"; ";
844 }
845
847 << "; input voltage: " << injectedPulseInputVoltage
848 << "; LG amp: " << zdcModuleLGFitAmp
849 << "; side" << side_str << ", mod" << module_str
850 << "; " << fails.str());
851
852 }
854 ATH_MSG_WARNING(
"Lumi block: " << lumiBlock <<
", yet input voltage is negative!! input voltage: " << injectedPulseInputVoltage);
855 }
856
857
858
859
861
862 int voltage_index = -1;
863 auto voltage_iter = std::find_if(injPulseVoltageSteps.begin(), injPulseVoltageSteps.end(),
864 [&](float num) { return check_equal_within_rounding(num, injectedPulseInputVoltage); });
865
866 if (voltage_iter != injPulseVoltageSteps.end()) {
867 voltage_index = std::distance(injPulseVoltageSteps.begin(), voltage_iter);
868 ATH_MSG_DEBUG(
"Found injected-pulse input voltage " << injectedPulseInputVoltage <<
" at index " << std::distance(injPulseVoltageSteps.begin(), voltage_iter));
869 } else {
870 ATH_MSG_WARNING(
"Injected-pulse input voltage " << injectedPulseInputVoltage <<
"(Lumi block: " << lumiBlock <<
") NOT found in voltage steps read from json.");
872 ATH_MSG_WARNING(
"Single-voltage lucrod response histograms NOT filled.");
873 }
874
875
876
877 auto VoltageIndex = Monitored::Scalar<float>("VoltageIndex", voltage_index+0.5);
878
879 if (m_isStandalone) injectedPulseInputVoltage = zdcModuleAmp * 1. / 25000.;
880 fill(m_tools[
m_ZDCModuleToolIndices.at(side_str).at(module_str)], VoltageIndex, zdcModuleAmp, zdcModuleFitAmp, zdcModuleMaxADC, zdcModuleMaxADCHG, zdcModuleMaxADCLG, zdcModuleAmpToMaxADCRatio, zdcModuleFract, zdcInjInputVoltagePassMinThrsh, zdcModuleMaskCurSide, zdcUncalibSumCurrentSide, zdcEnergySumCurrentSide, zdcModuleTime, zdcModuleFitT0, zdcModuleCalibAmp, zdcModuleCalibTime, zdcModuleLG, zdcModuleHG, zdcModuleAmpLGRefit, zdcModuleT0LGRefit, zdcModuleT0SubLGRefit, zdcModuleChisqLGRefit, zdcModuleLGFitAmp, zdcModuleHGtoLGAmpRatio, zdcModuleHGtoLGAmpRatioNoNonlinCorr, zdcModuleHGtoLGT0Diff, zdcModuleFractionValid, zdcModuleTimeValid, zdcModuleHGTimeValid, zdcModuleLGTimeValid, injectedPulseInputVoltage, zdcHGInjPulseValid, zdcLGInjPulseValid, lumiBlock, bcid);
881 if (voltage_index >= 0 && (!m_isOnline)){
883 }
884 }
885 else{
886 fill(m_tools[
m_ZDCModuleToolIndices.at(side_str).at(module_str)], zdcModuleAmp, zdcModuleMaxADC, zdcModuleMaxADCHG, zdcModuleMaxADCLG, zdcModuleAmpToMaxADCRatio, zdcModuleFract, zdcModuleMaskCurSide, zdcUncalibSumCurrentSide, zdcEnergySumCurrentSide, zdcAbove20NCurrentSide, zdcEnergyAboveModuleFractCut, zdcModuleTime, zdcModuleFitT0, zdcModuleCalibAmp, zdcModuleCalibTime, zdcModuleLG, zdcModuleHG, zdcModuleAmpLGRefit, zdcModuleT0LGRefit, zdcModuleT0SubLGRefit, zdcModuleChisqLGRefit, zdcModuleHGtoLGAmpRatio, zdcModuleHGtoLGAmpRatioNoNonlinCorr, zdcModuleHGtoLGT0Diff, zdcModuleFractionValid, zdcModuleTimeValid, zdcModuleHGTimeValid, zdcModuleLGTimeValid, lumiBlock, bcid);
887 }
888 }
889 }
890 }
891 }
892 }
893
894
895
896
897 if (m_enableRPDAmp){
898 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, unsigned int> RPDChannelStatusHandle(m_RPDChannelStatusKey, ctx);
899 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDChannelAmplitudeHandle(m_RPDChannelAmplitudeKey, ctx);
900 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDChannelMaxADCHandle(m_RPDChannelMaxADCKey, ctx);
901 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, unsigned int> RPDChannelMaxSampleHandle(m_RPDChannelMaxSampleKey, ctx);
902 SG::ReadDecorHandle<xAOD::ZdcModuleContainer, float> RPDChannelAmplitudeCalibHandle(m_RPDChannelAmplitudeCalibKey, ctx);
903 SG::ReadDecorHandle<xAOD::ZdcModuleContainer,std::vector<float>> RPDChannelPileupExpFitParamsHandle(m_RPDChannelPileupExpFitParamsKey, ctx);
904 SG::ReadDecorHandle<xAOD::ZdcModuleContainer,float> RPDChannelPileupFracHandle(m_RPDChannelPileupFracKey, ctx);
905
906 cur_event_RPD_available &= RPDChannelStatusHandle.isAvailable();
907 if (cur_event_RPD_available){
908 for (const auto zdcMod : *zdcModules){
909 int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
910 std::string side_str = (iside == 0)? "C" : "A";
911
912 if (zdcMod->zdcType() == 1) {
913
914
915 int ichannel = zdcMod->zdcChannel();
916 std::string channel_str = std::to_string(ichannel);
917
918 int status = RPDChannelStatusHandle(*zdcMod);
919
920 for (
int bit = 0; bit <
m_nRpdStatusBits; bit++) rpdStatusBitsCount[bit] = 0;
921 for (int bit = 0; bit < m_nRpdStatusBits; bit++){
922 if (status & 1 << bit){
923 rpdStatusBitsCount[bit] += 1;
924 }
925 }
926
928
929 rpdChannelSubAmp = rpdSubAmpVecs[iside][ichannel];
930 rpdChannelAmplitude = RPDChannelAmplitudeHandle(*zdcMod);
931 rpdChannelMaxADC = RPDChannelMaxADCHandle(*zdcMod);
932 rpdChannelMaxSample = RPDChannelMaxSampleHandle(*zdcMod);
933 rpdChannelAmplitudeCalib = RPDChannelAmplitudeCalibHandle(*zdcMod);
934 std::vector<float> rpdChannelPileupFitParams = RPDChannelPileupExpFitParamsHandle(*zdcMod);
935 rpdChannelPileupFitSlope = rpdChannelPileupFitParams[1];
936 rpdChannelPileupFrac = RPDChannelPileupFracHandle(*zdcMod);
937
938 absRpdChannelAmplitude = abs(rpdChannelAmplitude);
939 zdcEMModuleEnergySameSide = zdcEMModuleEnergyArr[iside];
940 zdcEnergySumSameSide = zdcEnergySumArr[iside];
942 rpdChannelValid = curRpdChannelValid;
943 rpdChannelValidBitFloat = (curRpdChannelValid)? 0.5 : 1.5;
944 rpdChannelCentroidValid = centroidSideValidArr.at(iside);
945
946 rpdAmplitudeCalibSum[iside] += rpdChannelAmplitudeCalib;
947 rpdMaxADCSum[iside] += rpdChannelMaxADC;
948
949 fill(m_tools[
m_RPDChannelToolIndices.at(side_str).at(channel_str)], rpdChannelSubAmp, rpdChannelAmplitude, rpdChannelAmplitudeCalib, rpdChannelMaxADC, rpdChannelMaxSample, rpdStatusBits, rpdChannelPileupFitSlope, absRpdChannelAmplitude, rpdChannelPileupFrac, zdcEMModuleEnergySameSide, zdcEnergySumSameSide, rpdChannelValid, rpdChannelValidBitFloat, rpdChannelCentroidValid, lumiBlock, bcid);
950 }
951 }
952 }
953 }
954
955
956
957
958
959
960 auto totalEt24 = Monitored::Scalar<double>("totalEt24", 0.0);
961 auto fcalEtA = Monitored::Scalar<double>("fcalEtA", 0.0);
962 auto fcalEtC = Monitored::Scalar<double>("fcalEtC", 0.0);
963 auto fcalEtSumTwoSides = Monitored::Scalar<double>("fcalEtSumTwoSides", 0.0);
964 std::array<double,2> fcalEtArr = {0.,0.};
965
966 if (m_enableZDCPhysics && m_CalInfoOn){
967 SG::ReadHandle<xAOD::HIEventShapeContainer> eventShapes(m_HIEventShapeContainerKey, ctx);
968 if (! eventShapes.isValid()) {
969 ATH_MSG_WARNING(
"evtStore() does not contain Collection with name "<< m_HIEventShapeContainerKey);
970 }
971 else{
972 for (const auto eventShape : *eventShapes){
973 int layer = eventShape->layer();
974 float eta = eventShape->etaMin();
975 float et = eventShape->et();
976 if (layer == 21 || layer == 22 || layer == 23){
977 fcalEtSumTwoSides +=
et / 1000000.;
979 fcalEtA +=
et / 1000000.;
980 fcalEtArr[1] +=
et / 1000000.;
981 }
983 fcalEtC +=
et / 1000000.;
984 fcalEtArr[0] +=
et / 1000000.;
985 }
986 }
987
988 if (TMath::Abs(
eta) < 2.4) {
989 totalEt24 +=
et / 1000000.;
990 }
991 }
992 }
993 }
994
995
996
997
998 if (!cur_event_ZDC_available && !zdcDecodingError){
999 ATH_MSG_WARNING(
"Current event has no ZDC decoding error but ZDC aux data is not available!");
1000 }
1001 if (!cur_event_RPD_available && !rpdDecodingError){
1002 ATH_MSG_WARNING(
"Current event has no RPD decoding error but RPD aux data is not available!");
1003 }
1004
1005
1006
1007 if (!cur_event_ZDC_available && !cur_event_RPD_available){
1008 ATH_MSG_WARNING(
"For current event, neither ZDC nor RPD data are available!");
1009 return StatusCode::SUCCESS;
1010 }
1011
1012
1013
1014
1015
1016 if ((m_enableZDCPhysics && cur_event_ZDC_available) || (m_enableCentroid && cur_event_RPD_available)) {
1017
1018 if (m_enableZDCPhysics && cur_event_ZDC_available){
1019
1020 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> vars_global = {
1021 std::ref(lumiBlock),
1022 std::ref(bcid),
1023 std::ref(passTrigSideA),
1024 std::ref(passTrigSideC),
1025 std::ref(zdcEnergySumA),
1026 std::ref(zdcEnergySumC),
1027 std::ref(zdcUncalibSumA),
1028 std::ref(zdcUncalibSumC),
1029 std::ref(zdcEnergySumTwoSidesTeV),
1030 };
1031
1032
1033 if (m_CalInfoOn){
1034 vars_global.insert(vars_global.end(), {
1035 std::ref(fcalEtA),
1036 std::ref(fcalEtC),
1037 std::ref(zdcHadronicEnergySumTwoSidesTeV),
1038 std::ref(fcalEtSumTwoSides),
1039 std::ref(totalEt24)
1040 });
1041 }
1042
1043 if (m_EnableUCCTriggers){
1044 vars_global.insert(vars_global.end(), {
1045 std::ref(passUCCTrig_HELT15),
1046 std::ref(passUCCTrig_HELT20),
1047 std::ref(passUCCTrig_HELT25),
1048 std::ref(passUCCTrig_HELT35),
1049 std::ref(passUCCTrig_HELT50)
1050 });
1051 }
1052
1053 if (m_EnableOOpOTriggers){
1054 for (auto& m : oopoTrigPassBoolVec) vars_global.push_back( std::ref(m) );
1055 }
1056
1057 auto monitor_globals = Monitored::Group(zdcTool, vars_global);
1058 }
1059
1060 if (m_enableCentroid && cur_event_RPD_available){
1061 fill(zdcTool, rpdCosDeltaReactionPlaneAngle, bothReactionPlaneAngleValid, bothHasCentroid);
1062 }
1063 }
1064
1065
1066
1067
1068
1069
1070 if (m_enableZDCPhysics && cur_event_ZDC_available && m_enableRPDAmp && cur_event_RPD_available){
1071 for (
int iside = 0; iside <
m_nSides; iside++){
1072 std::string side_str = (iside == 0)? "C" : "A";
1073
1074 auto passTrigOppSide = Monitored::Scalar<bool>("passTrigOppSide",passTrigOppSideArr[iside]);
1075 auto zdcEnergySumCurSide = Monitored::Scalar<float>("zdcEnergySum",zdcEnergySumArr[iside]);
1076 auto zdcEnergySumCurSideTeV = Monitored::Scalar<float>("zdcEnergySumTeV",zdcEnergySumArr[iside]/1000.);
1077 auto zdcUncalibSumCurSide = Monitored::Scalar<float>("zdcUncalibSum",zdcUncalibSumArr[iside]);
1078 auto zdcEMModuleEnergyCurSide = Monitored::Scalar<float>("zdcEMModuleEnergy",zdcEMModuleEnergyArr[iside]);
1079 auto zdcAvgTimeCurSide = Monitored::Scalar<float>("zdcAvgTime",zdcAvgTimeArr[iside]);
1080
1081 zdcModuleMaskCurSide = zdcModuleMaskArr[iside];
1082
1083 auto fcalEtCurSide = Monitored::Scalar<float>("fCalEt",fcalEtArr[iside]);
1085
1086 auto rpdAmplitudeCalibSumCurSide = Monitored::Scalar<float>("rpdAmplitudeCalibSum",rpdAmplitudeCalibSum[iside]);
1087 auto rpdMaxADCSumCurSide = Monitored::Scalar<float>("rpdMaxADCSum",rpdMaxADCSum[iside]);
1088 auto rpdCurSideValid = Monitored::Scalar<bool>("RPDSideValid",rpdSideValidArr[iside]);
1089
1090 fill(m_tools[
m_ZDCSideToolIndices.at(side_str)], passTrigOppSide, zdcEnergySumCurSide, zdcEnergySumCurSideTeV, zdcUncalibSumCurSide, zdcEMModuleEnergyCurSide, zdcAvgTimeCurSide, zdcModuleMaskCurSide, rpdAmplitudeCalibSumCurSide, rpdMaxADCSumCurSide, rpdCurSideValid, fcalEtCurSide, lumiBlock, bcid);
1091 }
1092 }else if (m_enableZDCPhysics && cur_event_ZDC_available){
1093 for (
int iside = 0; iside <
m_nSides; iside++){
1094 std::string side_str = (iside == 0)? "C" : "A";
1095
1096 auto passTrigOppSide = Monitored::Scalar<bool>("passTrigOppSide",passTrigOppSideArr[iside]);
1097 auto zdcEnergySumCurSide = Monitored::Scalar<float>("zdcEnergySum",zdcEnergySumArr[iside]);
1098 auto zdcEnergySumCurSideTeV = Monitored::Scalar<float>("zdcEnergySum",zdcEnergySumArr[iside]/1000.);
1099 auto zdcUncalibSumCurSide = Monitored::Scalar<float>("zdcUncalibSum",zdcUncalibSumArr[iside]);
1100 auto zdcEMModuleEnergyCurSide = Monitored::Scalar<float>("zdcEMModuleEnergy",zdcEMModuleEnergyArr[iside]);
1101 auto zdcAvgTimeCurSide = Monitored::Scalar<float>("zdcAvgTime",zdcAvgTimeArr[iside]);
1102 zdcModuleMaskCurSide = zdcModuleMaskArr[iside];
1103 auto fcalEtCurSide = Monitored::Scalar<float>("fCalEt",fcalEtArr[iside]);
1104
1105 fill(m_tools[
m_ZDCSideToolIndices.at(side_str)], passTrigOppSide, zdcEnergySumCurSide, zdcEnergySumCurSideTeV, zdcUncalibSumCurSide, zdcEMModuleEnergyCurSide, zdcAvgTimeCurSide, zdcModuleMaskCurSide, fcalEtCurSide, lumiBlock, bcid);
1106 }
1107 }else if (m_enableRPDAmp && cur_event_RPD_available){
1108 for (
int iside = 0; iside <
m_nSides; iside++){
1109 std::string side_str = (iside == 0)? "C" : "A";
1110
1111 auto rpdAmplitudeCalibSumCurSide = Monitored::Scalar<float>("rpdAmplitudeCalibSum",rpdAmplitudeCalibSum[iside]);
1112 auto rpdMaxADCSumCurSide = Monitored::Scalar<float>("rpdMaxADCSum",rpdMaxADCSum[iside]);
1113 auto rpdCurSideValid = Monitored::Scalar<bool>("RPDSideValid",rpdSideValidArr[iside]);
1114
1115 fill(m_tools[
m_ZDCSideToolIndices.at(side_str)], rpdAmplitudeCalibSumCurSide, rpdMaxADCSumCurSide, rpdCurSideValid, lumiBlock, bcid);
1116 }
1117 }
1118
1119 return StatusCode::SUCCESS;
1120}
Scalar eta() const
pseudorapidity method
float et(const xAOD::jFexSRJetRoI *j)
ServiceHandle< StoreGateSvc > & evtStore()
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
Declare a monitored scalar variable.
const std::string & key() const
Return the StoreGate ID for the referenced object.
float getPulserAmplitude(const Token &token, unsigned int lumiBlock) const
unsigned int getFirstLumiBlock(const Token &token) const
static const int m_nRpdStatusBits
Gaudi::Property< float > m_energyCutForModuleFractMonitor
Gaudi::Property< std::vector< std::string > > m_OOpOtriggerChains
Gaudi::Property< std::vector< std::string > > m_injPulseVoltageStepsStr
std::map< std::string, std::map< std::string, int > > m_RPDChannelToolIndices
Gaudi::Property< unsigned int > m_nSecondsRejectStartofLBInjectorPulse
Gaudi::Property< float > m_minVInjToEvaluateLowAmpPercentageDQInjectorPulse
std::map< std::string, int > m_ZDCSideToolIndices
Gaudi::Property< std::vector< float > > m_injPulseVoltageSteps
std::shared_ptr< ZdcInjPulserAmpMap > m_zdcInjPulserAmpMap
Gaudi::Property< float > m_minAmpRequiredHGInjectorPulse
std::map< std::string, std::map< std::string, std::map< std::string, int > > > m_LucrodResponseSingleVoltageToolIndices
Gaudi::Property< float > m_ZDCEnergyCutForCentroidValidBitMonitor
Gaudi::Property< float > m_minAmpRequiredLGInjectorPulse
Gaudi::Property< float > m_expected1N
Gaudi::Property< std::map< int, std::string > > m_OOpOL1TriggerFromCTPIDMap
std::map< std::string, std::map< std::string, int > > m_ZDCModuleToolIndices
static const int m_nZdcStatusBits
static const int m_nSides
static const int m_nRpdCentroidStatusBits
SG::ReadCondHandleKey< AthenaAttributeList > m_LBLBFolderInputKey
float calculate_inverse_bin_width(float event_value, const std::string &variable_name, const std::vector< float > &bin_edges) const
@ ForwardDet
The forward detectors.
const std::vector< uint32_t > & tbp() const
Get the Trigger Before Prescale bits.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
str varName
end cluster ToT and charge
static const unsigned int Physics
retrieve(aClass, aKey=None)
TrigDecision_v1 TrigDecision
Define the latest version of the trigger decision class.
void fill(H5::Group &out_file, size_t iterations)