ATLAS Offline Software
ZdcMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
11 #include <sstream> // for std::ostringstream
12 #include <utility> // for std::pair (if not already included indirectly)
13 
14 
15 ZdcMonitorAlgorithm::ZdcMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
16 :AthMonitorAlgorithm(name,pSvcLocator){
17  ATH_MSG_DEBUG("calling the constructor of ZdcMonitorAlgorithm");
18 }
19 
20 
22 
23 
25  return std::fabs(a - b) < epsilon;
26 }
27 
28 void ZdcMonitorAlgorithm::calculate_log_bin_edges(float min_value, float max_value, int num_bins, std::vector<float>& bin_edges) {
29  // Clear the vector to ensure it's empty
30  bin_edges.clear();
31 
32  // Calculate the logarithmic bin edges
33  float log_min = std::log10(min_value);
34  float log_max = std::log10(max_value);
35 
36  // Linear space between log_min and log_max with num_bins+1 points
37  float step = (log_max - log_min) / num_bins;
38 
39  // Populate the vector with the bin edges
40  for (int i = 0; i <= num_bins; ++i) {
41  float edge = log_min + i * step;
42  bin_edges.push_back(std::pow(10, edge));
43  }
44 }
45 
46 
47 float ZdcMonitorAlgorithm::calculate_inverse_bin_width(float event_value, const std::string& variable_name, const std::vector<float>& bin_edges) const {
48  // Check if the event_value is out of range
49  if (event_value < bin_edges.front() || event_value > bin_edges.back()) { // changed output level to debug: this is not uncommon
50  ATH_MSG_DEBUG("In calculation of inverse-bin-width event weight for the variable " << variable_name << ", the current event value " << event_value << " is out of the bin range.");
51  ATH_MSG_DEBUG("Assign zero weight for the current event (event not filled).");
52  return 0.0; // event weight is zero
53  }
54 
55  // Find the bin in which event_value falls
56  for (size_t i = 0; i < bin_edges.size() - 1; ++i) {
57  if (event_value >= bin_edges[i] && event_value < bin_edges[i + 1]) {
58  float bin_width = bin_edges[i + 1] - bin_edges[i];
59  if (bin_width != 0) {
60  return 1.0f / bin_width; // Return the inverse of bin width
61  } else {
62  ATH_MSG_WARNING("Warning: in calculation of inverse-bin-width event weight for the variable " << variable_name << ", bin width containing the event value " << event_value << " is zero.");
63  ATH_MSG_WARNING("Assign zero weight for the current event (event not filled).");
64  return 0.0; // event weight is zero
65  }
66  }
67  }
68 
69  // Handle edge case where event_value == bin_edges.back()
70  if (event_value == bin_edges.back()) {
71  size_t last_bin_index = bin_edges.size() - 2;
72  float bin_width = bin_edges[last_bin_index + 1] - bin_edges[last_bin_index];
73  return 1.0 / bin_width;
74  }
75 
76  // If no bin is found (should not reach here)
77  ATH_MSG_WARNING("Warning: in calculation of inverse-bin-width event weight for the variable " << variable_name << ", no valid bin found for the event value " << event_value << ".");
78  ATH_MSG_WARNING("Assign zero weight for the current event (event not filled).");
79  return 0.0; // event weight is zero
80 }
81 
82 
84 
85  ATH_MSG_DEBUG("initializing for the monitoring algorithm");
86  ATH_MSG_DEBUG("Is online? " << m_isOnline);
87  ATH_MSG_DEBUG("Is calorimeter info turned on? " << m_CalInfoOn);
88  ATH_MSG_DEBUG("Is single-side ZDC trigger info turned on? " << m_EnableZDCSingleSideTriggers);
89  ATH_MSG_DEBUG("Is UCC trigger info turned on? " << m_EnableUCCTriggers);
90  ATH_MSG_DEBUG("Is injected pulse? " << m_isInjectedPulse);
91  ATH_MSG_DEBUG("Is Standalone? " << m_isStandalone);
92  ATH_MSG_DEBUG("Enable ZDC? " << m_enableZDC);
93  ATH_MSG_DEBUG("Enable ZDC Physics? " << m_enableZDCPhysics);
94  ATH_MSG_DEBUG("Enable RPD Amp? " << m_enableRPDAmp);
95  ATH_MSG_DEBUG("Enable Centroid? " << m_enableCentroid);
96 
97  using namespace Monitored;
98  ATH_CHECK( m_ZdcSumContainerKey.initialize() );
99  ATH_CHECK( m_ZdcModuleContainerKey.initialize() );
101 
102  ATH_CHECK( m_eventTypeKey.initialize() );
103  // ATH_CHECK( m_ZdcBCIDKey.initialize() );
104  ATH_CHECK( m_DAQModeKey.initialize() );
105 
110 
111  // access to conditions in cool database
113 
126 
132 
140 
149 
150  // calculate log binnings
153 
154  // read json file for LB-to-injector-pulse-amplitude mapping and fill the mapping vector
155  m_zdcInjPulserAmpMap = std::make_shared<ZdcInjPulserAmpMap>();
156  ATH_MSG_DEBUG( "Using JSON file for injector-pulse voltage at path " << m_zdcInjPulserAmpMap->getFilePath() );
157  ATH_MSG_DEBUG("CALIBPATH: " << std::getenv("CALIBPATH"));
158 
159  // create monitoring tools and map the strings to the tools
160  std::vector<std::string> sides = {"C","A"};
161  std::vector<std::string> modules = {"0","1","2","3"};
162  std::vector<std::string> channels = {"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"};
163 
164  m_ZDCModuleToolIndices = buildToolMap<std::map<std::string,int>>(m_tools,"ZdcModuleMonitor",sides,modules);
165  if (m_enableZDCPhysics || m_enableRPDAmp || m_enableCentroid){ // none is true for injector pulse --> no Per-side monitoring tool
166  m_ZDCSideToolIndices = buildToolMap<int>(m_tools,"ZdcSideMonitor",sides);
167  }
168  if (m_enableRPDAmp){
169  m_RPDChannelToolIndices = buildToolMap<std::map<std::string,int>>(m_tools,"RpdChannelMonitor",sides,channels);
170  }
171  if (m_isInjectedPulse && (!m_isStandalone) && (!m_isOnline)) {
172  m_LucrodResponseSingleVoltageToolIndices = buildToolMap<std::map<std::string,std::map<std::string,int>>>(m_tools,"LucrodResponseSingleVoltageMonitor",sides,modules,m_injPulseVoltageStepsStr.value());
173  }
174 
175  //---------------------------------------------------
176 
177  // Get access to the injector pulse steps for (fixed) run number for current job
178  //
180 
182  if (!m_injMapRunToken.isValid()) {
183  ATH_MSG_ERROR("Unable to obtain injector pulse steps for run " << m_runNumber);
184  }
185  else {
186  unsigned int startLB = m_zdcInjPulserAmpMap->getFirstLumiBlock(m_injMapRunToken);
187  unsigned int nsteps = m_zdcInjPulserAmpMap->getNumSteps(m_injMapRunToken);
188  ATH_MSG_INFO("Successfully obtained injector pulse steps for run " << m_runNumber
189  << ", first LB = " << startLB << ", number of steps = " << nsteps);
190  }
191  }
192 
193  //---------------------------------------------------
194  // initialize superclass
195 
197  //---------------------------------------------------
198 
199 }
200 
201 
203  ATH_MSG_DEBUG("calling the fillPhysicsDataHistograms function");
204 
205 // ______________________________________________________________________________
206  // EVENT-level flags for whether ZDC, RPD and RPDCentroid data is available
207  // needed for events with LUCROD decoding error - will have missing aux data
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  // declaring & obtaining event-level information of interest
216 // ______________________________________________________________________________
218 
219  // already checked in fillHistograms that eventInfo is valid
220  auto lumiBlock = Monitored::Scalar<uint32_t>("lumiBlock", eventInfo->lumiBlock());
221  auto bcid = Monitored::Scalar<unsigned int>("bcid", eventInfo->bcid());
222  uint32_t eventTime = eventInfo->timeStamp();
223  uint32_t runNumber = eventInfo->runNumber();
224 
225 // ______________________________________________________________________________
226  // check for decoding errors
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){
238  ATH_MSG_WARNING("ZDC Decoding error!");
239  decodingErrorBitsArr[1] += 1;
240  } else { // RPD decoding error
241  ATH_MSG_WARNING("RPD Decoding error!");
242  decodingErrorBitsArr[2] += 1;
243  }
244 
245  auto zdcTool = getGroup("genZdcMonTool"); // get the tool for easier group filling
246 
247  auto decodingErrorBits = Monitored::Collection("decodingErrorBits", decodingErrorBitsArr);
248  fill(zdcTool, decodingErrorBits, lumiBlock);
249 
250 // ______________________________________________________________________________
251  // does event pass trigger selections?
252 // ______________________________________________________________________________
253 
254 
255 // ----------------------- ZDC single-sided triggers -----------------------
256 
257  auto passTrigSideA = Monitored::Scalar<bool>("passTrigSideA",false); // if trigger isn't enabled (e.g, MC) the with-trigger histograms are never filled (cut mask never satisfied)
258  auto passTrigSideC = Monitored::Scalar<bool>("passTrigSideC",false);
259 
260  if(m_EnableZDCSingleSideTriggers && m_enableZDCPhysics){ // if not enable trigger, the pass-trigger booleans will still be defined but with value always set to false
261  const auto &trigDecTool = getTrigDecisionTool();
262  passTrigSideA = trigDecTool->isPassed(m_triggerSideA, TrigDefs::Physics);
263  passTrigSideC = trigDecTool->isPassed(m_triggerSideC, TrigDefs::Physics);
264  if (passTrigSideA) ATH_MSG_DEBUG("passing trig on side A!");
265  if (passTrigSideC) ATH_MSG_DEBUG("passing trig on side C!");
266  }
267 
268 // ----------------------- UCC triggers -----------------------
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){ // if not enable trigger, the pass-trigger booleans will still be defined but with value always set to false
279  uccTrigBitsArr[UCCTrigEnabledBit] += 1;
280 
281  const auto &trigDecTool = getTrigDecisionTool();
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){
289  uccTrigBitsArr[TrigHELT15Bit] += 1;
290  ATH_MSG_DEBUG("passing UCC trigger L1_ZDC_HELT15_jTE4000!");
291  }
292  if (passUCCTrig_HELT20){
293  uccTrigBitsArr[TrigHELT20Bit] += 1;
294  ATH_MSG_DEBUG("passing UCC trigger L1_ZDC_HELT20_jTE4000!");
295  }
296  if (passUCCTrig_HELT25){
297  uccTrigBitsArr[TrigHELT25Bit] += 1;
298  ATH_MSG_DEBUG("passing UCC trigger L1_ZDC_HELT25_jTE4000!");
299  }
300  if (passUCCTrig_HELT35){
301  uccTrigBitsArr[TrigHELT35Bit] += 1;
302  ATH_MSG_DEBUG("passing UCC trigger L1_ZDC_HELT35_jTE4000!");
303  }
304  if (passUCCTrig_HELT50){
305  uccTrigBitsArr[TrigHELT50Bit] += 1;
306  ATH_MSG_DEBUG("passing UCC trigger L1_ZDC_HELT50_jTE4000!");
307  }
308  }else{
309  uccTrigBitsArr[UCCTrigDisabledBit] += 1;
310  }
311 
312  auto uccTrigBits = Monitored::Collection("uccTrigBits", uccTrigBitsArr);
313  fill(zdcTool, uccTrigBits, lumiBlock);
314 
315 // ----------------------- OOpO triggers -----------------------
316  int nOOpOTriggers = m_OOpOtriggerChains.size();
317  int nOOpOL1TriggersFromCTP = m_OOpOL1TriggerFromCTPIDMap.size();
318  std::vector<float> oopoTrigBitsArr(nOOpOTriggers+2, 0.); // enabled, trigger bits, disabled
319 
320  std::vector<Monitored::Scalar<bool>> oopoTrigPassBoolVec;
321  oopoTrigPassBoolVec.reserve(nOOpOTriggers);
322 
323  if(m_EnableOOpOTriggers && m_enableZDCPhysics) { // if not enable trigger, the pass-trigger booleans will still be defined but with value always set to false
324  oopoTrigBitsArr[0] += 1; // OOpO trigger enabled
325 
326  const auto &trigDecTool = getTrigDecisionTool();
327 
328  for (int i = 0; i < nOOpOTriggers - nOOpOL1TriggersFromCTP; ++i) {
329  const bool pass = (trigDecTool->isPassed( m_OOpOtriggerChains[i] ));
330 
331  // Histogram variable name: “pass<L1-name>”
332  std::string varName = "pass" + m_OOpOtriggerChains[i];
333  // *Optionally sanitise if you have funky characters*
334  std::replace_if( varName.begin(), varName.end(),
335  [](char c){ return c=='-'; }, '_' );
336 
337  oopoTrigPassBoolVec.emplace_back( varName, pass );
338  oopoTrigBitsArr[i+1] += pass;
339  }
340 
341  try {
342  const xAOD::TrigDecision* trigDecision = nullptr;
343  ANA_CHECK(evtStore()->retrieve( trigDecision, "xTrigDecision"));
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; // index in vector tbp
352  int bit = ctp_id % 32; // bit in tax[ind]
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; // OOpO trigger disabled
370  }
371 
372  auto oopoTrigBits = Monitored::Collection("OOpOTrigBits", oopoTrigBitsArr);
373 
374  fill(zdcTool, oopoTrigBits, lumiBlock);
375 
376 // ______________________________________________________________________________
377  // declaring & obtaining variables of interest for the ZDC sums
378  // including the RPD x,y positions, reaction plane and status
379 // ______________________________________________________________________________
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); // the looser requirement that both centroids were calculated (ignore valid)
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); // 0.5 if valid, 1.5 if invalid --> needed for DQ
401  auto passMinZDCEnergyCutForCentroidValidEvaluation = Monitored::Scalar<bool>("passMinZDCEnergyCutForCentroidValidEvaluation",false);
402 
403  // need to recognize same-side correlation among the following observables
404  // since they are filled differently, it is helpful to store each of their values in the 2-dimension array first
405  // and fill the side monitoring tool in the same "monitoring group"
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 
426 
427  // write ZDC per-arm information to arrays
428  zdcEnergySumTwoSidesTeV = 0.;
429 
430  if (m_enableZDCPhysics){ // write down energy sum, uncalib sum, average time, and module mask if we enable ZDC physics
431  cur_event_ZDC_available &= ZdcSumCalibEnergyHandle.isAvailable();
432 
433  if (cur_event_ZDC_available){
434  for (const auto zdcSum : *zdcSums) { // side -1: C; side 1: A
435  if (zdcSum->zdcSide() != 0){
436  int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
437 
438  zdcEnergySumArr[iside] = ZdcSumCalibEnergyHandle(*zdcSum);
439  zdcUncalibSumArr[iside] = ZdcSumUncalibSumHandle(*zdcSum);
440  zdcAvgTimeArr[iside] = ZdcSumAverageTimeHandle(*zdcSum);
441  zdcModuleMaskArr[iside] = ZdcSumModuleMaskHandle(*zdcSum);
442 
443  passTrigOppSideArr[iside] = (iside == 0)? passTrigSideA : passTrigSideC;
444 
445  zdcEnergySumTwoSidesTeV += (ZdcSumCalibEnergyHandle(*zdcSum)) / 1000.;
446 
447  if (zdcSum->zdcSide() == 1){
448  zdcEnergySumA = ZdcSumCalibEnergyHandle(*zdcSum);
449  zdcUncalibSumA = ZdcSumUncalibSumHandle(*zdcSum);
450  }
451  else {
452  zdcEnergySumC = ZdcSumCalibEnergyHandle(*zdcSum);
453  zdcUncalibSumC = ZdcSumUncalibSumHandle(*zdcSum);
454  }
455  }
456  } // having filled both sides
457  }
458  } else if (m_enableZDC){ // enable ZDC but not physics - for now, the only case is injector pulse --> no energy, only record uncalib sum
459  cur_event_ZDC_available &= ZdcSumUncalibSumHandle.isAvailable();
460  if (cur_event_ZDC_available){
461  for (const auto zdcSum : *zdcSums) { // side -1: C; side 1: A
462  if (zdcSum->zdcSide() != 0){
463  int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
464  zdcUncalibSumArr[iside] = ZdcSumUncalibSumHandle(*zdcSum);
465  }
466  }
467  }
468  }
469 
470  // write RPD per-arm status to arrays
471  if (m_enableRPDAmp){
473  cur_event_RPD_available &= RPDsideStatusHandle.isAvailable();
474  if (cur_event_RPD_available){
475  for (const auto zdcSum : *zdcSums) { // side -1: C; side 1: A
476  if (zdcSum->zdcSide() != 0){ // contains the RPD Cos Delta reaction plane
477  int iside = (zdcSum->zdcSide() > 0)? 1 : 0;
478  unsigned int rpdStatusCurSide = RPDsideStatusHandle(*zdcSum);
479  rpdSideValidArr.at(iside) = rpdStatusCurSide & 1 << ZDC::RPDDataAnalyzer::ValidBit;
480  }
481  }
482  }
483  }
484 
485  // fill RPD centroid information to monitoring tools
486  if (m_enableCentroid){
494 
495  cur_event_RPDCentroid_available &= RPDcentroidStatusHandle.isAvailable();
496  if (cur_event_RPDCentroid_available){
497  for (const auto zdcSum : *zdcSums) { // side -1: C; side 1: A
498 
499  if (zdcSum->zdcSide() == 0){ // contains the RPD Cos Delta reaction plane
500  rpdCosDeltaReactionPlaneAngle = RPDcosDeltaReactionPlaneAngleHandle(*zdcSum);
501  }else{
502  int iside = (zdcSum->zdcSide() > 0)? 1 : 0; // already exclude the possibility of global sum
503  std::string side_str = (iside == 0)? "C" : "A";
504 
505  rpdSubAmpVecs[iside] = RPDsubAmpHandle(*zdcSum);
506  rpdSubAmpSumCurSide = RPDsubAmpSumHandle(*zdcSum);
507  rpdXCentroidCurSide = RPDxCentroidHandle(*zdcSum);
508  rpdYCentroidCurSide = RPDyCentroidHandle(*zdcSum);
509  rpdReactionPlaneAngleCurSide = RPDreactionPlaneAngleHandle(*zdcSum);
510 
511  unsigned int rpdCentroidStatusCurSide = RPDcentroidStatusHandle(*zdcSum);
512 
513  // Remarks - Oct 2024
514  // HasCentroidBit is false if RPD on the current side is invalid
515  // The centroid ValidBit, compared with Has HasCentroidBit, also checks that ZDC is valid
516  // and has the infrastruture to require (1) ZDC total energy to be in given range
517  // (2) EM-module energy to be in given range
518  // (3) pile up fraction is below a threshold
519  // but these are currently NOT implemented
520  // for online, we only monitor the ones requiring valid bit
521  // for offline, we plot both sets, with the expectation that they are the same for now
522  centroidValid = (rpdCentroidStatusCurSide & 1 << ZDC::RpdSubtractCentroidTool::ValidBit);
523 
524  centroidValidBitFloat = (centroidValid)? 0.5 : 1.5;
525 
526  centroidSideValidArr.at(iside) = rpdCentroidStatusCurSide & 1 << ZDC::RpdSubtractCentroidTool::ValidBit;
527  bool curSideHasCentroid = (rpdCentroidStatusCurSide & 1 << ZDC::RpdSubtractCentroidTool::HasCentroidBit);
528 
529  bothReactionPlaneAngleValid &= centroidValid;
530  bothHasCentroid &= curSideHasCentroid;
531 
532  for (int bit = 0; bit < m_nRpdCentroidStatusBits; bit++) centroidStatusBitsCountCurSide[bit] = 0; // reset
533  for (int bit = 0; bit < m_nRpdCentroidStatusBits; bit++){
534  if (rpdCentroidStatusCurSide & 1 << bit){
535  centroidStatusBitsCountCurSide[bit] += 1;
536  }
537  }
538  auto centroidStatusBits = Monitored::Collection("centroidStatusBits", centroidStatusBitsCountCurSide);
539 
540  if (curSideHasCentroid){ // only impose the looser requirement that this side has centroid; have a set of histograms for the more stringent centroid-valid requirement
541  if (m_enableZDCPhysics){ // if not enable ZDC physics, no ZDC energy --> the boolean requiring minimum ZDC energy will always be set to false
542  passMinZDCEnergyCutForCentroidValidEvaluation = (zdcEnergySumArr[iside] > m_ZDCEnergyCutForCentroidValidBitMonitor);
543  }
544  fill(m_tools[m_ZDCSideToolIndices.at(side_str)], rpdSubAmpSumCurSide, centroidValid, passMinZDCEnergyCutForCentroidValidEvaluation, centroidValidBitFloat, rpdXCentroidCurSide, rpdYCentroidCurSide, rpdReactionPlaneAngleCurSide, centroidStatusBits, lumiBlock, bcid);
545  }else{
546  fill(m_tools[m_ZDCSideToolIndices.at(side_str)], rpdSubAmpSumCurSide, centroidStatusBits, lumiBlock, bcid);
547  }
548  }
549  } // having filled both sides
550  }
551  }
552 
553 // ______________________________________________________________________________
554  // declaring & obtaining variables of interest for the ZDC modules & RPD channels
555  // filling arrays of monitoring tools (module/channel-level)
556  // updating status bits
557 // ______________________________________________________________________________
558 
560 
573 
579 
580  auto zdcModuleAmp = Monitored::Scalar<float>("zdcModuleAmp", -1000.0);
581  auto zdcModuleFitAmp = Monitored::Scalar<float>("zdcModuleFitAmp", -1000.0);
582  auto zdcModuleMaxADC = Monitored::Scalar<float>("zdcModuleMaxADC", -1000.0);
583  auto zdcModuleMaxADCHG = Monitored::Scalar<float>("zdcModuleMaxADCHG", -1000.0);
584  auto zdcModuleMaxADCLG = Monitored::Scalar<float>("zdcModuleMaxADCLG", -1000.0);
585  auto zdcModuleAmpToMaxADCRatio = Monitored::Scalar<float>("zdcModuleAmpToMaxADCRatio", -1000.0);
586  auto zdcModuleFract = Monitored::Scalar<float>("zdcModuleFract", -1000.0);
587  auto zdcUncalibSumCurrentSide = Monitored::Scalar<float>("zdcUncalibSumCurrentSide", -1000.0);
588  auto zdcEnergySumCurrentSide = Monitored::Scalar<float>("zdcEnergySumCurrentSide", -1000.0);
589  auto zdcAbove20NCurrentSide = Monitored::Scalar<bool>("zdcAbove20NCurrentSide", false);
590  auto zdcEnergyAboveModuleFractCut = Monitored::Scalar<bool>("zdcEnergyAboveModuleFractCut", false);
591  auto zdcModuleTime = Monitored::Scalar<float>("zdcModuleTime", -1000.0);
592  auto zdcModuleFitT0 = Monitored::Scalar<float>("zdcModuleFitT0", -1000.0);
593  auto zdcModuleChisq = Monitored::Scalar<float>("zdcModuleChisq", -1000.0);
594  auto zdcModuleChisqEventWeight = Monitored::Scalar<float>("zdcModuleChisqEventWeight", -1000.0);
595  auto zdcModuleChisqOverAmp = Monitored::Scalar<float>("zdcModuleChisqOverAmp", -1000.0);
596  auto zdcModuleChisqOverAmpEventWeight = Monitored::Scalar<float>("zdcModuleChisqOverAmpEventWeight", -1000.0);
597  auto zdcModuleCalibAmp = Monitored::Scalar<float>("zdcModuleCalibAmp", -1000.0);
598  auto zdcModuleCalibTime = Monitored::Scalar<float>("zdcModuleCalibTime", -1000.0);
599  auto zdcModuleLG = Monitored::Scalar<bool>("zdcModuleLG", false);
600  auto zdcModuleHG = Monitored::Scalar<bool>("zdcModuleHG", false);
601  auto injectedPulseInputVoltage = Monitored::Scalar<float>("injectedPulseInputVoltage", -1000.0);
602  auto zdcHGInjPulseValid = Monitored::Scalar<bool>("zdcHGInjPulseValid", true);
603  auto zdcLGInjPulseValid = Monitored::Scalar<bool>("zdcLGInjPulseValid", true);
604 
605  auto zdcModuleFractionValid = Monitored::Scalar<bool>("zdcModuleFractionValid", false);
606  auto zdcModuleTimeValid = Monitored::Scalar<bool>("zdcModuleTimeValid", false);
607  auto zdcModuleHGTimeValid = Monitored::Scalar<bool>("zdcModuleHGTimeValid", false);
608  auto zdcModuleLGTimeValid = Monitored::Scalar<bool>("zdcModuleLGTimeValid", false);
609 
610  auto zdcModuleLGFitAmp = Monitored::Scalar<float>("zdcModuleLGFitAmp", -1000.0);
611  auto zdcModuleFitAmpLGRefit = Monitored::Scalar<float>("zdcModuleFitAmpLGRefit", -1000.0);
612  auto zdcModuleAmpLGRefit = Monitored::Scalar<float>("zdcModuleAmpLGRefit", -1000.0);
613  auto zdcModuleT0LGRefit = Monitored::Scalar<float>("zdcModuleT0LGRefit", -1000.0);
614  auto zdcModuleT0SubLGRefit = Monitored::Scalar<float>("zdcModuleT0SubLGRefit", -1000.0);
615  auto zdcModuleChisqLGRefit = Monitored::Scalar<float>("zdcModuleChisqLGRefit", -1000.0);
616 
617  auto zdcModuleHGtoLGAmpRatio = Monitored::Scalar<float>("zdcModuleHGtoLGAmpRatio", -1000.0);
618  auto zdcModuleHGtoLGAmpRatioNoNonlinCorr = Monitored::Scalar<float>("zdcModuleHGtoLGAmpRatioNoNonlinCorr", -1000.0);
619  auto zdcModuleHGtoLGT0Diff = Monitored::Scalar<float>("zdcModuleHGtoLGT0Diff", -1000.0);
620 
621  auto rpdChannelSubAmp = Monitored::Scalar<float>("RPDChannelSubAmp", -1000.0);
622  auto rpdChannelAmplitude = Monitored::Scalar<float>("RPDChannelAmplitude", -1000.0);
623  auto rpdChannelMaxADC = Monitored::Scalar<float>("RPDChannelMaxADC", -1000.0);
624  auto rpdChannelMaxSample = Monitored::Scalar<unsigned int>("RPDChannelMaxSample", 1000);
625  auto rpdChannelAmplitudeCalib = Monitored::Scalar<float>("RPDChannelAmplitudeCalib", -1000.0);
626  auto rpdChannelStatus = Monitored::Scalar<unsigned int>("RPDChannelStatus", 1000);
627  auto rpdChannelPileupFitSlope = Monitored::Scalar<float>("RPDChannelPileupFitSlope", -1000);
628  auto absRpdChannelAmplitude = Monitored::Scalar<float>("absRPDChannelAmplitude", -1000.); // EM module energy on the same side (assuming filled already)
629  auto rpdChannelValid = Monitored::Scalar<bool>("RPDChannelValid", false);
630  auto rpdChannelValidBitFloat = Monitored::Scalar<float>("RPDChannelValidBitFloat", -1000.0); // 0.5 if valid, 1.5 if invalid --> needed for DQ
631  auto rpdChannelCentroidValid = Monitored::Scalar<bool>("RPDChannelCentroidValid", false);
632  auto rpdChannelPileupFrac = Monitored::Scalar<float>("RPDChannelPileupFrac", -1000.);
633  auto zdcEMModuleEnergySameSide = Monitored::Scalar<float>("zdcEMModuleEnergySameSide", -1000.); // EM module energy on the same side (assuming filled already)
634  auto zdcEnergySumSameSide = Monitored::Scalar<float>("zdcEnergySumSameSide", -1000.); // EM module energy on the same side (assuming filled already)
635 
636  std::array<float, m_nZdcStatusBits> zdcStatusBitsCount;
637  std::array<float, m_nRpdStatusBits> rpdStatusBitsCount;
638 
639  if (! zdcModules.isValid() ) {
640  ATH_MSG_WARNING("evtStore() does not contain Collection with name "<< m_ZdcModuleContainerKey);
641  return StatusCode::SUCCESS;
642  }
643 
645  // Check the event run number agrees with fixed run number
646  if (runNumber != m_runNumber) {
647  ATH_MSG_WARNING("The event run number differs from the fixed run number read from the input-file metadata!");
648  ATH_MSG_WARNING("The event run number is " << runNumber << "; the fixed run number is " << m_runNumber);
649  }
650 
651  injectedPulseInputVoltage = m_zdcInjPulserAmpMap->getPulserAmplitude(m_injMapRunToken, lumiBlock);
652  }
653 
654  // first loop over zdcModules - read ZDC-module information & fill in ZDC histograms
655  // separate ZDC and RPD variable retrieval into two for loops to make sure
656  // essential ZDC information (e.g, the EM module energy and total energy sum on both sides) is properly filled
657  // before they are required in RPD channel monitoring
658  zdcHadronicEnergySumTwoSidesTeV = 0.;
659  if (m_enableZDC){
660  cur_event_ZDC_available &= zdcModuleStatusHandle.isAvailable();
661  if (cur_event_ZDC_available){
662  for (const auto zdcMod : *zdcModules){
663  int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
664  std::string side_str = (iside == 0)? "C" : "A";
665 
666  if (zdcMod->zdcType() == 0){
667  int imod = zdcMod->zdcModule();
668  std::string module_str = std::to_string(imod);
669 
670  int status = zdcModuleStatusHandle(*zdcMod);
671 
672  for (int bit = 0; bit < m_nZdcStatusBits; bit++) zdcStatusBitsCount[bit] = 0; // reset
673  for (int bit = 0; bit < m_nZdcStatusBits; bit++){
674  if (status & 1 << bit){
675  zdcStatusBitsCount[bit] += 1;
676  }
677  }
678 
679  auto zdcStatusBits = Monitored::Collection("zdcStatusBits", zdcStatusBitsCount);
680  fill(m_tools[m_ZDCModuleToolIndices.at(side_str).at(module_str)], zdcStatusBits, lumiBlock, bcid);
681 
682  if ((status & 1 << ZDCPulseAnalyzer::PulseBit) != 0){ // has pulse
683  zdcModuleAmp = zdcModuleAmplitudeHandle(*zdcMod);
684  float zdcModuleAmpNoNonLin = zdcModuleAmpNoNonLinHandle(*zdcMod); // module fit amplitude (without gain factor or nonlinear corrections applied)
685  zdcModuleFitAmp = zdcModuleFitAmpHandle(*zdcMod); // module fit amplitude (without gain factor or nonlinear corrections applied)
686  zdcModuleMaxADC = zdcModuleMaxADCHandle(*zdcMod);
687  zdcModuleMaxADCHG = zdcModuleMaxADCHGHandle(*zdcMod);
688  zdcModuleMaxADCLG = zdcModuleMaxADCLGHandle(*zdcMod);
689  zdcModuleAmpToMaxADCRatio = (zdcModuleMaxADC == 0)? -1000. : zdcModuleFitAmp / zdcModuleMaxADC; // use fit amplitude: no gain factor applied to either
690  zdcModuleTime = zdcModuleTimeHandle(*zdcMod);
691  zdcModuleFitT0 = zdcModuleFitT0Handle(*zdcMod);
692  zdcModuleChisq = zdcModuleChisqHandle(*zdcMod);
693  zdcModuleCalibAmp = zdcModuleCalibEnergyHandle(*zdcMod);
694  zdcModuleCalibTime = zdcModuleCalibTimeHandle(*zdcMod);
695  zdcUncalibSumCurrentSide = zdcUncalibSumArr[iside];
696  zdcEnergySumCurrentSide = zdcEnergySumArr[iside];
697  zdcAbove20NCurrentSide = (zdcUncalibSumCurrentSide > 20 * m_expected1N);
698  zdcEnergyAboveModuleFractCut = (zdcEnergySumCurrentSide > m_energyCutForModuleFractMonitor);
699 
700  if (m_enableZDCPhysics){
701  zdcModuleFract = (zdcEnergySumCurrentSide == 0)? -1000. : zdcModuleCalibAmp / zdcEnergySumCurrentSide; // use calibrated amplitudes + energy sum
702  }else{
703  zdcModuleFract = (zdcUncalibSumCurrentSide == 0)? -1000. : zdcModuleAmp / zdcUncalibSumCurrentSide; // use uncalibrated amplitudes + amplitude sum
704  }
705 
706  // use fit amplitude for chisq over amplitude: neither fit amplitude nor chisq has gain factor applied
707  zdcModuleChisqOverAmp = (zdcModuleFitAmp == 0)? -1000. : zdcModuleChisq / zdcModuleFitAmp;
708  zdcModuleLG = (status & 1 << ZDCPulseAnalyzer::LowGainBit);
709  zdcModuleHG = !zdcModuleLG;
710 
711  zdcModuleFractionValid = (zdcModuleFract >= 0 && zdcModuleFract <= 1);
712  zdcModuleTimeValid = (zdcModuleTime > -100.);
713  zdcModuleHGTimeValid = zdcModuleHG && zdcModuleTimeValid;
714  zdcModuleLGTimeValid = zdcModuleLG && zdcModuleTimeValid;
715 
716 
717  zdcModuleFitAmpLGRefit = zdcModuleFitAmpLGRefitHandle(*zdcMod);
718  zdcModuleAmpLGRefit = zdcModuleAmpLGRefitHandle(*zdcMod);
719  zdcModuleT0LGRefit = zdcModuleT0LGRefitHandle(*zdcMod);
720  zdcModuleT0SubLGRefit = zdcModuleT0SubLGRefitHandle(*zdcMod);
721  zdcModuleChisqLGRefit = zdcModuleChisqLGRefitHandle(*zdcMod);
722 
723  zdcModuleLGFitAmp = (zdcModuleHG)? zdcModuleFitAmpLGRefit * 1. : zdcModuleFitAmp * 1.;
724 
725  zdcModuleHGtoLGAmpRatio = (zdcModuleLG || zdcModuleAmpLGRefit == 0)? -1000. : zdcModuleAmp * 1. / zdcModuleAmpLGRefit; // HG/LG ratio if HG is valid and LG-refit amplitude is nonzero (shouldn't be)
726  zdcModuleHGtoLGAmpRatioNoNonlinCorr = (zdcModuleLG || zdcModuleAmpLGRefit == 0)? -1000. : zdcModuleAmpNoNonLin * 1. / zdcModuleAmpLGRefit; // HG/LG ratio if HG is valid and LG-refit amplitude is nonzero (shouldn't be)
727  zdcModuleHGtoLGT0Diff = (zdcModuleLG)? -1000. : zdcModuleFitT0 - zdcModuleT0LGRefit;
728 
729  zdcModuleChisqEventWeight = calculate_inverse_bin_width(zdcModuleChisq, "module chisq", m_ZdcModuleChisqBinEdges);
730  zdcModuleChisqOverAmpEventWeight = calculate_inverse_bin_width(zdcModuleChisqOverAmp, "module chisq over amplitude", m_ZdcModuleChisqOverAmpBinEdges);
731 
732  if (imod == 0) zdcEMModuleEnergyArr[iside] = zdcModuleCalibAmp; // EM module energy
733  else zdcHadronicEnergySumTwoSidesTeV += zdcModuleCalibAmp / 1000.; // hadronic module energy
734 
735 
736 
737  if (m_isInjectedPulse){
738 
739  zdcHGInjPulseValid = true;
740  zdcLGInjPulseValid = true;
741 
742  bool pass_first3s = true;
743 
744  // ------------ throw away the first few seconds of each LB ------------
745  // get the start + end time of the event LB from the cool data
746  // copied from Trigger/TrigT1/TrigT1CTMonitoring/src/BSMonitoringAlg.cxx
747 
748  if (!m_isSim && !m_isOnline) {
749  uint64_t lb_stime = 0; // LB POSIX start time in seconds
750  uint64_t lb_etime = 0; // LB POSIX end time in seconds
751  bool retrievedLumiBlockTimes = false;
752 
754  const AthenaAttributeList* lblbattrList{*lblb};
755  if (lblbattrList==nullptr) {
756  ATH_MSG_WARNING("Failed to retrieve /TRIGGER/LUMI/LBLB " << m_LBLBFolderInputKey.key() << " not found");
757  }
758  else {
759  retrievedLumiBlockTimes = true;
760  auto lb_stime_loc = (*lblbattrList)["StartTime"].data<cool::UInt63>();
761  auto lb_etime_loc = (*lblbattrList)["EndTime"].data<cool::UInt63>();
762  lb_stime = lb_stime_loc;
763  lb_etime = lb_etime_loc;
764  ATH_MSG_DEBUG("lb_stime: " << lb_stime << " lb_etime: " << lb_etime );
765  }
766 
767  lb_stime /= 1000000000;
768  lb_etime /= 1000000000;
769 
770  if (lb_etime <= lb_stime || !retrievedLumiBlockTimes){
771  ATH_MSG_WARNING("The LB start + end time for current event is not retrieved.");
772  ATH_MSG_WARNING("No event rejection at beginning of LB is implemented.");
773  }else if(eventTime < lb_stime){
774  ATH_MSG_WARNING("Event time is before the start time of the current LB");
775  ATH_MSG_WARNING("Event time: " << eventTime << "; current LB: " << lumiBlock << "; start time of current LB: " << lb_stime);
776  }else if (eventTime > lb_etime){
777  ATH_MSG_WARNING("Event time is after the end time of the current LB");
778  ATH_MSG_WARNING("Event time: " << eventTime << "; current LB: " << lumiBlock << "; end time of current LB: " << lb_etime);
779  }else{ // require event time to be at least X seconds after start time of the current LB
780  pass_first3s = (eventTime > lb_stime + m_nSecondsRejectStartofLBInjectorPulse);
781  zdcHGInjPulseValid &= (eventTime > lb_stime + m_nSecondsRejectStartofLBInjectorPulse);
782  zdcLGInjPulseValid &= (eventTime > lb_stime + m_nSecondsRejectStartofLBInjectorPulse);
783  }
784  }
785 
786  // ------------ impose the rest of HG/LG injector-pulse validity requirements ------------
787 
788  zdcHGInjPulseValid &= zdcModuleHG;
789  zdcHGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::ExcludeEarlyLGBit);
790  zdcHGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::BadChisqBit);
791  zdcHGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::FailBit);
792  zdcHGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::FitMinAmpBit);
793  zdcHGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::BadT0Bit);
795  zdcHGInjPulseValid &= (zdcModuleAmp > m_minAmpRequiredHGInjectorPulse);
796  }
797 
798  zdcLGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::LGOverflowBit);
799  zdcLGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::ExcludeEarlyLGBit);
800  zdcLGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::BadChisqBit);
801  zdcLGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::FailBit);
802  zdcLGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::FitMinAmpBit);
803  zdcLGInjPulseValid &= !(status & 1 << ZDCPulseAnalyzer::BadT0Bit);
805  zdcLGInjPulseValid &= (zdcModuleLGFitAmp > m_minAmpRequiredLGInjectorPulse);
806  }
807 
808  if (injectedPulseInputVoltage > 0){ // LB > startLB
809  if (injectedPulseInputVoltage > 1 && !zdcLGInjPulseValid &&pass_first3s){ // problematic range && LG not valid && not failing first 3s
810 
811  std::ostringstream fails;
812  std::vector<std::pair<std::string, bool>> checks = {
813  {"LGOverflowBit", !(status & (1 << ZDCPulseAnalyzer::LGOverflowBit))},
814  {"ExcludeEarlyLGBit", !(status & (1 << ZDCPulseAnalyzer::ExcludeEarlyLGBit))},
815  {"BadChisqBit", !(status & (1 << ZDCPulseAnalyzer::BadChisqBit))},
816  {"FailBit", !(status & (1 << ZDCPulseAnalyzer::FailBit))},
817  {"FitMinAmpBit", !(status & (1 << ZDCPulseAnalyzer::FitMinAmpBit))},
818  {"BadT0Bit", !(status & (1 << ZDCPulseAnalyzer::BadT0Bit))}
819  };
820 
821  for (const auto& [name, pass] : checks) {
822  if (!pass) fails << "fail " << name << "; ";
823  }
824 
825  ATH_MSG_DEBUG("[LG NOT valid] Lumi block: " << lumiBlock
826  << "; input voltage: " << injectedPulseInputVoltage
827  << "; LG amp: " << zdcModuleLGFitAmp
828  << "; side" << side_str << ", mod" << module_str
829  << "; " << fails.str());
830 
831  }
832  } else if (lumiBlock > m_zdcInjPulserAmpMap->getFirstLumiBlock(m_injMapRunToken)){ // LB > startLB but injectedPulseInputVoltage < 0!
833  ATH_MSG_WARNING("Lumi block: " << lumiBlock << ", yet input voltage is negative!! input voltage: " << injectedPulseInputVoltage);
834  }
835 
836 
837  // ------------ find the voltage index & fill per-voltage HG&LG cut masks ------------
838 
839  std::vector<float> injPulseVoltageSteps = m_injPulseVoltageSteps.value();
840 
841  int voltage_index = -1;
842  auto voltage_iter = std::find_if(injPulseVoltageSteps.begin(), injPulseVoltageSteps.end(),
843  [&](float num) { return check_equal_within_rounding(num, injectedPulseInputVoltage); });
844 
845  if (voltage_iter != injPulseVoltageSteps.end()) {
846  voltage_index = std::distance(injPulseVoltageSteps.begin(), voltage_iter);
847  ATH_MSG_DEBUG("Found injected-pulse input voltage " << injectedPulseInputVoltage << " at index " << std::distance(injPulseVoltageSteps.begin(), voltage_iter));
848  } else {
849  ATH_MSG_WARNING("Injected-pulse input voltage " << injectedPulseInputVoltage << "(Lumi block: " << lumiBlock << ") NOT found in voltage steps read from json.");
850  ATH_MSG_WARNING("Possibly a problem with json file reading.");
851  ATH_MSG_WARNING("Single-voltage lucrod response histograms NOT filled.");
852  }
853 
854  // ------------ fill the histograms ------------
855 
856  auto VoltageIndex = Monitored::Scalar<float>("VoltageIndex", voltage_index+0.5);
857 
858  if (m_isStandalone) injectedPulseInputVoltage = zdcModuleAmp * 1. / 25000.; // no LB in standalone --> fill dummy histograms
859  fill(m_tools[m_ZDCModuleToolIndices.at(side_str).at(module_str)], VoltageIndex, zdcModuleAmp, zdcModuleFitAmp, zdcModuleMaxADC, zdcModuleMaxADCHG, zdcModuleMaxADCLG, zdcModuleAmpToMaxADCRatio, zdcModuleFract, zdcUncalibSumCurrentSide, zdcEnergySumCurrentSide, zdcModuleTime, zdcModuleFitT0, zdcModuleChisq, zdcModuleChisqOverAmp, zdcModuleChisqEventWeight, zdcModuleChisqOverAmpEventWeight, zdcModuleCalibAmp, zdcModuleCalibTime, zdcModuleLG, zdcModuleHG, zdcModuleAmpLGRefit, zdcModuleT0LGRefit, zdcModuleT0SubLGRefit, zdcModuleChisqLGRefit, zdcModuleLGFitAmp, zdcModuleHGtoLGAmpRatio, zdcModuleHGtoLGAmpRatioNoNonlinCorr, zdcModuleHGtoLGT0Diff, zdcModuleFractionValid, zdcModuleTimeValid, zdcModuleHGTimeValid, zdcModuleLGTimeValid, injectedPulseInputVoltage, zdcHGInjPulseValid, zdcLGInjPulseValid, lumiBlock, bcid);
860  if (voltage_index >= 0 && (!m_isOnline)){
861  fill(m_tools[m_LucrodResponseSingleVoltageToolIndices.at(side_str).at(module_str).at(m_injPulseVoltageStepsStr.value().at(voltage_index))], zdcModuleFitAmp, zdcModuleLGFitAmp, zdcModuleMaxADCHG, zdcModuleMaxADCLG, zdcHGInjPulseValid, zdcLGInjPulseValid);
862  }
863  }else{
864  fill(m_tools[m_ZDCModuleToolIndices.at(side_str).at(module_str)], zdcModuleAmp, zdcModuleMaxADC, zdcModuleMaxADCHG, zdcModuleMaxADCLG, zdcModuleAmpToMaxADCRatio, zdcModuleFract, zdcUncalibSumCurrentSide, zdcEnergySumCurrentSide, zdcAbove20NCurrentSide, zdcEnergyAboveModuleFractCut, zdcModuleTime, zdcModuleFitT0, zdcModuleChisq, zdcModuleChisqOverAmp, zdcModuleChisqEventWeight, zdcModuleChisqOverAmpEventWeight, zdcModuleCalibAmp, zdcModuleCalibTime, zdcModuleLG, zdcModuleHG, zdcModuleAmpLGRefit, zdcModuleT0LGRefit, zdcModuleT0SubLGRefit, zdcModuleChisqLGRefit, zdcModuleHGtoLGAmpRatio, zdcModuleHGtoLGAmpRatioNoNonlinCorr, zdcModuleHGtoLGT0Diff, zdcModuleFractionValid, zdcModuleTimeValid, zdcModuleHGTimeValid, zdcModuleLGTimeValid, lumiBlock, bcid);
865  }
866  }
867  }
868  }
869  }
870  }
871 
872 
873  // second loop over zdcModules - read RPD-channel information & fill in RPD histograms
874  // only run if NOT injector pulse
875  if (m_enableRPDAmp){
883 
884  cur_event_RPD_available &= RPDChannelStatusHandle.isAvailable();
885  if (cur_event_RPD_available){
886  for (const auto zdcMod : *zdcModules){
887  int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
888  std::string side_str = (iside == 0)? "C" : "A";
889 
890  if (zdcMod->zdcType() == 1) {
891  // this is the RPD
892 
893  int ichannel = zdcMod->zdcChannel(); // zero-based
894  std::string channel_str = std::to_string(ichannel);
895 
896  int status = RPDChannelStatusHandle(*zdcMod);
897 
898  for (int bit = 0; bit < m_nRpdStatusBits; bit++) rpdStatusBitsCount[bit] = 0; // reset
899  for (int bit = 0; bit < m_nRpdStatusBits; bit++){
900  if (status & 1 << bit){
901  rpdStatusBitsCount[bit] += 1;
902  }
903  }
904 
905  auto rpdStatusBits = Monitored::Collection("RPDStatusBits", rpdStatusBitsCount);
906 
907  rpdChannelSubAmp = rpdSubAmpVecs[iside][ichannel];
908  rpdChannelAmplitude = RPDChannelAmplitudeHandle(*zdcMod);
909  rpdChannelMaxADC = RPDChannelMaxADCHandle(*zdcMod);
910  rpdChannelMaxSample = RPDChannelMaxSampleHandle(*zdcMod);
911  rpdChannelAmplitudeCalib = RPDChannelAmplitudeCalibHandle(*zdcMod);
912  std::vector<float> rpdChannelPileupFitParams = RPDChannelPileupExpFitParamsHandle(*zdcMod);
913  rpdChannelPileupFitSlope = rpdChannelPileupFitParams[1];
914  rpdChannelPileupFrac = RPDChannelPileupFracHandle(*zdcMod);
915 
916  absRpdChannelAmplitude = abs(rpdChannelAmplitude);
917  zdcEMModuleEnergySameSide = zdcEMModuleEnergyArr[iside];
918  zdcEnergySumSameSide = zdcEnergySumArr[iside];
919  bool curRpdChannelValid = status & 1 << ZDC::RPDDataAnalyzer::ValidBit;
920  rpdChannelValid = curRpdChannelValid;
921  rpdChannelValidBitFloat = (curRpdChannelValid)? 0.5 : 1.5;
922  rpdChannelCentroidValid = centroidSideValidArr.at(iside);
923 
924  rpdAmplitudeCalibSum[iside] += rpdChannelAmplitudeCalib;
925  rpdMaxADCSum[iside] += rpdChannelMaxADC;
926 
927  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);
928  }
929  }
930  }
931  }
932 
933 
934 // ______________________________________________________________________________
935  // obtaining fCalEt on A,C side
936 // ______________________________________________________________________________
937 
938  auto totalEt24 = Monitored::Scalar<double>("totalEt24", 0.0); // total ET within |eta| < 2.4
939  auto fcalEtA = Monitored::Scalar<double>("fcalEtA", 0.0);
940  auto fcalEtC = Monitored::Scalar<double>("fcalEtC", 0.0);
941  auto fcalEtSumTwoSides = Monitored::Scalar<double>("fcalEtSumTwoSides", 0.0);
942  std::array<double,2> fcalEtArr = {0.,0.};
943 
946  if (! eventShapes.isValid()) {
947  ATH_MSG_WARNING("evtStore() does not contain Collection with name "<< m_HIEventShapeContainerKey);
948  }
949  else{
950  for (const auto eventShape : *eventShapes){
951  int layer = eventShape->layer();
952  float eta = eventShape->etaMin();
953  float et = eventShape->et();
954  if (layer == 21 || layer == 22 || layer == 23){ // FCal
955  fcalEtSumTwoSides += et / 1000000.;
956  if (eta > 0){
957  fcalEtA += et / 1000000.;
958  fcalEtArr[1] += et / 1000000.;
959  }
960  if (eta < 0){
961  fcalEtC += et / 1000000.;
962  fcalEtArr[0] += et / 1000000.;
963  }
964  }
965 
966  if (TMath::Abs(eta) < 2.4) {
967  totalEt24 += et / 1000000.;
968  }
969  }
970  }
971  }
972 
973 // ______________________________________________________________________________
974  // give warning if there is missing aux data but no decoding error
975 // ______________________________________________________________________________
976  if (!cur_event_ZDC_available && !zdcDecodingError){
977  ATH_MSG_WARNING("Current event has no ZDC decoding error but ZDC aux data is not available!");
978  }
979  if (!cur_event_RPD_available && !rpdDecodingError){
980  ATH_MSG_WARNING("Current event has no RPD decoding error but RPD aux data is not available!");
981  }
982 // ______________________________________________________________________________
983  // give warning and return if neither ZDC nor RPD are available
984 // ______________________________________________________________________________
985  if (!cur_event_ZDC_available && !cur_event_RPD_available){
986  ATH_MSG_WARNING("For current event, neither ZDC nor RPD data are available!");
987  return StatusCode::SUCCESS;
988  }
989 
990 // ______________________________________________________________________________
991  // filling generic ZDC monitoring tool for A-C side correlations & cos(reaction plane angle)
992 // ______________________________________________________________________________
993 
994  if ((m_enableZDCPhysics && cur_event_ZDC_available) || (m_enableCentroid && cur_event_RPD_available)) {
995 
996  if (m_enableZDCPhysics && cur_event_ZDC_available){
997  // ZDC-only global variables
998  std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> vars_global = {
1000  std::ref(bcid),
1001  std::ref(passTrigSideA),
1002  std::ref(passTrigSideC),
1003  std::ref(zdcEnergySumA),
1004  std::ref(zdcEnergySumC),
1005  std::ref(zdcUncalibSumA),
1006  std::ref(zdcUncalibSumC),
1007  std::ref(zdcEnergySumTwoSidesTeV),
1008  };
1009 
1010  // calo-based global variables
1011  if (m_CalInfoOn){ // calorimeter information is turned on
1012  vars_global.insert(vars_global.end(), {
1013  std::ref(fcalEtA),
1014  std::ref(fcalEtC),
1015  std::ref(zdcHadronicEnergySumTwoSidesTeV),
1016  std::ref(fcalEtSumTwoSides),
1017  std::ref(totalEt24)
1018  });
1019  }
1020 
1021  if (m_EnableUCCTriggers){
1022  vars_global.insert(vars_global.end(), {
1023  std::ref(passUCCTrig_HELT15),
1024  std::ref(passUCCTrig_HELT20),
1025  std::ref(passUCCTrig_HELT25),
1026  std::ref(passUCCTrig_HELT35),
1027  std::ref(passUCCTrig_HELT50)
1028  });
1029  }
1030 
1031  if (m_EnableOOpOTriggers){
1032  for (auto& m : oopoTrigPassBoolVec) vars_global.push_back( std::ref(m) );
1033  }
1034 
1035  auto monitor_globals = Monitored::Group(zdcTool, vars_global);
1036  }
1037 
1038  if (m_enableCentroid && cur_event_RPD_available){
1039  fill(zdcTool, rpdCosDeltaReactionPlaneAngle, bothReactionPlaneAngleValid, bothHasCentroid);
1040  }
1041  }
1042 
1043 // ______________________________________________________________________________
1044  // filling per-side tools
1045 // ______________________________________________________________________________
1046 
1047 
1048  if (m_enableZDCPhysics && cur_event_ZDC_available && m_enableRPDAmp && cur_event_RPD_available){
1049  for (int iside = 0; iside < m_nSides; iside++){
1050  std::string side_str = (iside == 0)? "C" : "A";
1051 
1052  auto passTrigOppSide = Monitored::Scalar<bool>("passTrigOppSide",passTrigOppSideArr[iside]); // this is duplicate information as A,C but convenient for filling per-side histograms
1053  auto zdcEnergySumCurSide = Monitored::Scalar<float>("zdcEnergySum",zdcEnergySumArr[iside]); // this is duplicate information as A,C but convenient for filling per-side histograms
1054  auto zdcEnergySumCurSideTeV = Monitored::Scalar<float>("zdcEnergySumTeV",zdcEnergySumArr[iside]/1000.); // this is duplicate information as A,C but convenient for filling per-side histograms
1055  auto zdcUncalibSumCurSide = Monitored::Scalar<float>("zdcUncalibSum",zdcUncalibSumArr[iside]); // this is duplicate information as A,C but convenient for filling per-side histograms
1056  auto zdcEMModuleEnergyCurSide = Monitored::Scalar<float>("zdcEMModuleEnergy",zdcEMModuleEnergyArr[iside]);
1057  auto zdcAvgTimeCurSide = Monitored::Scalar<float>("zdcAvgTime",zdcAvgTimeArr[iside]);
1058  auto zdcModuleMaskCurSide = Monitored::Scalar<bool>("zdcModuleMask",zdcModuleMaskArr[iside]);
1059 
1060  auto fcalEtCurSide = Monitored::Scalar<float>("fCalEt",fcalEtArr[iside]);
1061 
1062  ATH_MSG_DEBUG("fcalEtCurSide: " << fcalEtCurSide);
1063  auto rpdAmplitudeCalibSumCurSide = Monitored::Scalar<float>("rpdAmplitudeCalibSum",rpdAmplitudeCalibSum[iside]);
1064  auto rpdMaxADCSumCurSide = Monitored::Scalar<float>("rpdMaxADCSum",rpdMaxADCSum[iside]);
1065  auto rpdCurSideValid = Monitored::Scalar<bool>("RPDSideValid",rpdSideValidArr[iside]);
1066 
1067  fill(m_tools[m_ZDCSideToolIndices.at(side_str)], passTrigOppSide, zdcEnergySumCurSide, zdcEnergySumCurSideTeV, zdcUncalibSumCurSide, zdcEMModuleEnergyCurSide, zdcAvgTimeCurSide, zdcModuleMaskCurSide, rpdAmplitudeCalibSumCurSide, rpdMaxADCSumCurSide, rpdCurSideValid, fcalEtCurSide, lumiBlock, bcid);
1068  }
1069  }else if (m_enableZDCPhysics && cur_event_ZDC_available){
1070  for (int iside = 0; iside < m_nSides; iside++){
1071  std::string side_str = (iside == 0)? "C" : "A";
1072 
1073  auto passTrigOppSide = Monitored::Scalar<bool>("passTrigOppSide",passTrigOppSideArr[iside]); // this is duplicate information as A,C but convenient for filling per-side histograms
1074  auto zdcEnergySumCurSide = Monitored::Scalar<float>("zdcEnergySum",zdcEnergySumArr[iside]); // this is duplicate information as A,C but convenient for filling per-side histograms
1075  auto zdcEnergySumCurSideTeV = Monitored::Scalar<float>("zdcEnergySum",zdcEnergySumArr[iside]/1000.); // this is duplicate information as A,C but convenient for filling per-side histograms
1076  auto zdcUncalibSumCurSide = Monitored::Scalar<float>("zdcUncalibSum",zdcUncalibSumArr[iside]); // this is duplicate information as A,C but convenient for filling per-side histograms
1077  auto zdcEMModuleEnergyCurSide = Monitored::Scalar<float>("zdcEMModuleEnergy",zdcEMModuleEnergyArr[iside]);
1078  auto zdcAvgTimeCurSide = Monitored::Scalar<float>("zdcAvgTime",zdcAvgTimeArr[iside]);
1079  auto zdcModuleMaskCurSide = Monitored::Scalar<bool>("zdcModuleMask",zdcModuleMaskArr[iside]);
1080  auto fcalEtCurSide = Monitored::Scalar<float>("fCalEt",fcalEtArr[iside]);
1081 
1082  fill(m_tools[m_ZDCSideToolIndices.at(side_str)], passTrigOppSide, zdcEnergySumCurSide, zdcEnergySumCurSideTeV, zdcUncalibSumCurSide, zdcEMModuleEnergyCurSide, zdcAvgTimeCurSide, zdcModuleMaskCurSide, fcalEtCurSide, lumiBlock, bcid);
1083  }
1084  }else if (m_enableRPDAmp && cur_event_RPD_available){
1085  for (int iside = 0; iside < m_nSides; iside++){
1086  std::string side_str = (iside == 0)? "C" : "A";
1087 
1088  auto rpdAmplitudeCalibSumCurSide = Monitored::Scalar<float>("rpdAmplitudeCalibSum",rpdAmplitudeCalibSum[iside]);
1089  auto rpdMaxADCSumCurSide = Monitored::Scalar<float>("rpdMaxADCSum",rpdMaxADCSum[iside]);
1090  auto rpdCurSideValid = Monitored::Scalar<bool>("RPDSideValid",rpdSideValidArr[iside]);
1091 
1092  fill(m_tools[m_ZDCSideToolIndices.at(side_str)], rpdAmplitudeCalibSumCurSide, rpdMaxADCSumCurSide, rpdCurSideValid, lumiBlock, bcid);
1093  }
1094  }
1095 
1096  return StatusCode::SUCCESS;
1097 }
1098 
1099 
1100 StatusCode ZdcMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
1101 
1102  ATH_MSG_DEBUG("calling the fillHistograms function");
1103 
1105  if (! eventInfo.isValid() || eventInfo.cptr() == nullptr) {
1106  ATH_MSG_WARNING("EventInfo handle is not valid or has null pointer!");
1107  return StatusCode::SUCCESS;
1108  }
1109 
1110  unsigned int eventType = ZdcEventInfo::ZdcEventUnknown;
1111  unsigned int DAQMode = ZdcEventInfo::DAQModeUndef;
1112 
1115 
1117 
1118  if (! zdcSums.isValid() ) {
1119  ATH_MSG_WARNING("evtStore() does not contain Collection with name "<< m_ZdcSumContainerKey);
1120  return StatusCode::SUCCESS;
1121  }
1122  for (const auto zdcSum : *zdcSums) {
1123  if (zdcSum->zdcSide() == 0){
1124  if (!eventTypeHandle.isAvailable()){
1125  ATH_MSG_WARNING("The global sum entry in zdc sum container can be retrieved; but it does NOT have the variable eventType written as a decoration!");
1126  return StatusCode::SUCCESS;
1127  }
1128 
1129  if (!DAQModeHandle.isAvailable()){
1130  ATH_MSG_WARNING("The global sum entry in zdc sum container can be retrieved; but it does NOT have the variable DAQMode written as a decoration!");
1131  return StatusCode::SUCCESS;
1132  }
1133 
1134  eventType = eventTypeHandle(*zdcSum);
1135  DAQMode = DAQModeHandle(*zdcSum);
1136  }
1137  }
1138 
1139  ATH_MSG_DEBUG("The event type is: " << eventType);
1140 
1142  ATH_MSG_WARNING("The zdc sum container can be retrieved from the evtStore() but");
1143  ATH_MSG_WARNING("Either the event type or the DAQ mode is the default unknown value");
1144  ATH_MSG_WARNING("Most likely, there is no global sum (side == 0) entry in the zdc sum container");
1145  return StatusCode::SUCCESS;
1146  }
1147 
1148  if (eventType == ZdcEventInfo::ZdcEventPhysics || eventType == ZdcEventInfo::ZdcSimulation){
1149  return fillPhysicsDataHistograms(ctx);
1150  }
1151 
1152  ATH_MSG_WARNING("Event type should be PhysicsData/Simulation but it is NOT");
1153  return StatusCode::SUCCESS;
1154 }
1155 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
ZdcMonitorAlgorithm::fillPhysicsDataHistograms
StatusCode fillPhysicsDataHistograms(const EventContext &ctx) const
Definition: ZdcMonitorAlgorithm.cxx:202
ZdcMonitorAlgorithm::m_nSecondsRejectStartofLBInjectorPulse
Gaudi::Property< unsigned int > m_nSecondsRejectStartofLBInjectorPulse
Definition: ZdcMonitorAlgorithm.h:86
ZDC::RpdSubtractCentroidTool::HasCentroidBit
@ HasCentroidBit
Definition: RpdSubtractCentroidTool.h:33
ZdcEventInfo::ZdcEventPhysics
@ ZdcEventPhysics
Definition: ZdcEventInfo.h:16
ZdcMonitorAlgorithm::m_ZdcSumAverageTimeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumAverageTimeKey
Definition: ZdcMonitorAlgorithm.h:157
et
Extra patterns decribing particle interation process.
ZdcMonitorAlgorithm::m_ZdcModuleChisqKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleChisqKey
Definition: ZdcMonitorAlgorithm.h:168
ZdcMonitorAlgorithm::m_ZDCEnergyCutForCentroidValidBitMonitor
Gaudi::Property< float > m_ZDCEnergyCutForCentroidValidBitMonitor
Definition: ZdcMonitorAlgorithm.h:66
ZdcMonitorAlgorithm::m_minAmpRequiredLGInjectorPulse
Gaudi::Property< float > m_minAmpRequiredLGInjectorPulse
Definition: ZdcMonitorAlgorithm.h:88
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
ZdcMonitorAlgorithm::UCCTrigDisabledBit
@ UCCTrigDisabledBit
Definition: ZdcMonitorAlgorithm.h:42
ZdcMonitorAlgorithm::TrigHELT35Bit
@ TrigHELT35Bit
Definition: ZdcMonitorAlgorithm.h:38
ZdcMonitorAlgorithm::m_moduleChisqHistMaxvalue
Gaudi::Property< float > m_moduleChisqHistMaxvalue
Definition: ZdcMonitorAlgorithm.h:69
SG::ReadCondHandle
Definition: ReadCondHandle.h:40
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ZdcMonitorAlgorithm::m_RPDChannelToolIndices
std::map< std::string, std::map< std::string, int > > m_RPDChannelToolIndices
Definition: ZdcMonitorAlgorithm.h:110
ZdcMonitorAlgorithm::m_nRpdStatusBits
static const int m_nRpdStatusBits
Definition: ZdcMonitorAlgorithm.h:104
ZdcMonitorAlgorithm::m_RPDSideStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDSideStatusKey
Definition: ZdcMonitorAlgorithm.h:218
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
ZdcMonitorAlgorithm::m_UCCtriggerHELT35
Gaudi::Property< std::string > m_UCCtriggerHELT35
Definition: ZdcMonitorAlgorithm.h:83
ZdcMonitorAlgorithm::m_ZdcSumUncalibSumKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumUncalibSumKey
Definition: ZdcMonitorAlgorithm.h:158
ZdcMonitorAlgorithm::m_ZdcModuleT0SubLGRefitKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleT0SubLGRefitKey
Definition: ZdcMonitorAlgorithm.h:179
ZdcMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: ZdcMonitorAlgorithm.cxx:1100
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ZdcMonitorAlgorithm::m_RPDChannelPileupFracKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelPileupFracKey
Definition: ZdcMonitorAlgorithm.h:193
ZDCPulseAnalyzer.h
RPDUtils::sides
constexpr std::initializer_list< unsigned int > sides
Definition: RPDUtils.h:17
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
ZdcMonitorAlgorithm::m_ZdcModuleMaxADCHGKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleMaxADCHGKey
Definition: ZdcMonitorAlgorithm.h:172
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
CheckAppliedSFs.bin_width
bin_width
Definition: CheckAppliedSFs.py:242
ZdcMonitorAlgorithm::m_RPDyCentroidKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDyCentroidKey
Definition: ZdcMonitorAlgorithm.h:205
ZdcMonitorAlgorithm.h
AthMonitorAlgorithm::m_EventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Key for retrieving EventInfo from StoreGate.
Definition: AthMonitorAlgorithm.h:367
CaloClusterMLCalib::epsilon
constexpr float epsilon
Definition: CaloClusterMLGaussianMixture.h:16
ZDCPulseAnalyzer::LGOverflowBit
@ LGOverflowBit
Definition: ZDCPulseAnalyzer.h:35
ZdcMonitorAlgorithm::m_RPDChannelAmplitudeCalibKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelAmplitudeCalibKey
Definition: ZdcMonitorAlgorithm.h:184
AthMonitorAlgorithm::getTrigDecisionTool
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
Definition: AthMonitorAlgorithm.cxx:198
ZdcMonitorAlgorithm::m_ZdcModuleContainerKey
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleContainerKey
Definition: ZdcMonitorAlgorithm.h:146
ZdcMonitorAlgorithm::TrigHELT50Bit
@ TrigHELT50Bit
Definition: ZdcMonitorAlgorithm.h:37
ZdcMonitorAlgorithm::m_ZdcModuleFitT0Key
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleFitT0Key
Definition: ZdcMonitorAlgorithm.h:167
ZdcEventInfo::ZdcEventUnknown
@ ZdcEventUnknown
Definition: ZdcEventInfo.h:16
ZdcMonitorAlgorithm::m_isOnline
Gaudi::Property< bool > m_isOnline
Definition: ZdcMonitorAlgorithm.h:123
ZdcMonitorAlgorithm::m_ZdcModuleChisqLGRefitKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleChisqLGRefitKey
Definition: ZdcMonitorAlgorithm.h:180
ZdcMonitorAlgorithm::m_isSim
Gaudi::Property< bool > m_isSim
Definition: ZdcMonitorAlgorithm.h:124
TrigDecisionTool.h
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
ZDCPulseAnalyzer::BadChisqBit
@ BadChisqBit
Definition: ZDCPulseAnalyzer.h:41
ZdcMonitorAlgorithm::TrigHELT25Bit
@ TrigHELT25Bit
Definition: ZdcMonitorAlgorithm.h:39
ZdcMonitorAlgorithm::m_ZdcModuleAmpNoNonLinKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleAmpNoNonLinKey
Definition: ZdcMonitorAlgorithm.h:165
ZdcMonitorAlgorithm::m_moduleChisqHistMinValue
Gaudi::Property< float > m_moduleChisqHistMinValue
Definition: ZdcMonitorAlgorithm.h:68
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
MuonR4::to_string
std::string to_string(const SectorProjector proj)
Definition: MsTrackSeeder.cxx:66
ZdcEventInfo::DAQMode
DAQMode
Definition: ZdcEventInfo.h:17
ZdcMonitorAlgorithm::m_injPulseVoltageSteps
Gaudi::Property< std::vector< float > > m_injPulseVoltageSteps
Definition: ZdcMonitorAlgorithm.h:141
ZdcMonitorAlgorithm::m_ZdcModuleAmpLGRefitKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleAmpLGRefitKey
Definition: ZdcMonitorAlgorithm.h:177
ZdcMonitorAlgorithm::m_nSides
static const int m_nSides
Definition: ZdcMonitorAlgorithm.h:98
ZdcMonitorAlgorithm::m_enableCentroid
Gaudi::Property< bool > m_enableCentroid
Definition: ZdcMonitorAlgorithm.h:139
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
compute_lumi.lblb
lblb
Definition: compute_lumi.py:45
ZdcMonitorAlgorithm::m_ZdcModuleFitAmpKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleFitAmpKey
Definition: ZdcMonitorAlgorithm.h:166
dq_defect_copy_defect_database.channels
def channels
Definition: dq_defect_copy_defect_database.py:56
ZdcMonitorAlgorithm::m_ZdcModuleChisqOverAmpBinEdges
std::vector< float > m_ZdcModuleChisqOverAmpBinEdges
Definition: ZdcMonitorAlgorithm.h:114
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
ZdcMonitorAlgorithm::m_triggerSideA
Gaudi::Property< std::string > m_triggerSideA
Definition: ZdcMonitorAlgorithm.h:76
ZdcMonitorAlgorithm::m_RPDChannelMaxADCKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelMaxADCKey
Definition: ZdcMonitorAlgorithm.h:185
ZDCPulseAnalyzer::PulseBit
@ PulseBit
Definition: ZDCPulseAnalyzer.h:28
ZdcMonitorAlgorithm::m_ZdcModuleCalibTimeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleCalibTimeKey
Definition: ZdcMonitorAlgorithm.h:170
ZdcMonitorAlgorithm::m_UCCtriggerHELT50
Gaudi::Property< std::string > m_UCCtriggerHELT50
Definition: ZdcMonitorAlgorithm.h:84
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:39
ZdcMonitorAlgorithm::m_triggerSideC
Gaudi::Property< std::string > m_triggerSideC
Definition: ZdcMonitorAlgorithm.h:77
ZdcMonitorAlgorithm::m_zdcInjPulserAmpMap
std::shared_ptr< ZdcInjPulserAmpMap > m_zdcInjPulserAmpMap
Definition: ZdcMonitorAlgorithm.h:116
ZdcMonitorAlgorithm::m_expected1N
Gaudi::Property< float > m_expected1N
Definition: ZdcMonitorAlgorithm.h:63
ZdcMonitorAlgorithm::m_HIEventShapeContainerKey
SG::ReadHandleKey< xAOD::HIEventShapeContainer > m_HIEventShapeContainerKey
Definition: ZdcMonitorAlgorithm.h:147
ZdcMonitorAlgorithm::m_moduleChisqOverAmpHistMaxvalue
Gaudi::Property< float > m_moduleChisqOverAmpHistMaxvalue
Definition: ZdcMonitorAlgorithm.h:72
ZdcMonitorAlgorithm::m_RPDSubtrAmpSumKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDSubtrAmpSumKey
Definition: ZdcMonitorAlgorithm.h:199
ZdcInjPulserAmpMap::Token::isValid
bool isValid() const
Definition: ZdcInjPulserAmpMap.h:48
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ZdcMonitorAlgorithm::m_ZdcModuleStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleStatusKey
Definition: ZdcMonitorAlgorithm.h:162
ZdcMonitorAlgorithm::m_RPDxCentroidKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDxCentroidKey
Definition: ZdcMonitorAlgorithm.h:202
ZDC::RpdSubtractCentroidTool::ValidBit
@ ValidBit
Definition: RpdSubtractCentroidTool.h:32
ZdcMonitorAlgorithm::m_DAQModeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_DAQModeKey
Definition: ZdcMonitorAlgorithm.h:153
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ZdcMonitorAlgorithm::m_ZdcSumModuleMaskKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumModuleMaskKey
Definition: ZdcMonitorAlgorithm.h:159
ZdcMonitorAlgorithm::m_EnableZDCSingleSideTriggers
Gaudi::Property< bool > m_EnableZDCSingleSideTriggers
Definition: ZdcMonitorAlgorithm.h:126
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
ZdcEventInfo::ZDCDECODINGERROR
@ ZDCDECODINGERROR
Definition: ZdcEventInfo.h:19
ZdcMonitorAlgorithm::m_CalInfoOn
Gaudi::Property< bool > m_CalInfoOn
Definition: ZdcMonitorAlgorithm.h:125
ZdcMonitorAlgorithm::m_RPDChannelStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelStatusKey
Definition: ZdcMonitorAlgorithm.h:187
lumiFormat.i
int i
Definition: lumiFormat.py:85
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:28
ZdcMonitorAlgorithm::m_RPDChannelSubtrAmpKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelSubtrAmpKey
Definition: ZdcMonitorAlgorithm.h:196
ZdcMonitorAlgorithm::m_ZdcModuleMaxADCLGKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleMaxADCLGKey
Definition: ZdcMonitorAlgorithm.h:173
PixelAthClusterMonAlgCfg.varName
string varName
end cluster ToT and charge
Definition: PixelAthClusterMonAlgCfg.py:125
ZdcMonitorAlgorithm::UCCTrigEnabledBit
@ UCCTrigEnabledBit
Definition: ZdcMonitorAlgorithm.h:36
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ZdcMonitorAlgorithm::m_RPDChannelMaxSampleKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelMaxSampleKey
Definition: ZdcMonitorAlgorithm.h:186
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
ZdcEventInfo::ZdcSimulation
@ ZdcSimulation
Definition: ZdcEventInfo.h:16
ZdcMonitorAlgorithm::m_injMapRunToken
ZdcInjPulserAmpMap::Token m_injMapRunToken
Definition: ZdcMonitorAlgorithm.h:57
ZdcMonitorAlgorithm::m_enableZDC
Gaudi::Property< bool > m_enableZDC
Definition: ZdcMonitorAlgorithm.h:135
ZdcMonitorAlgorithm::~ZdcMonitorAlgorithm
virtual ~ZdcMonitorAlgorithm()
Definition: ZdcMonitorAlgorithm.cxx:21
ZdcMonitorAlgorithm::m_RPDChannelAmplitudeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelAmplitudeKey
Definition: ZdcMonitorAlgorithm.h:183
calibdata.exception
exception
Definition: calibdata.py:495
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthenaAttributeList
An AttributeList represents a logical row of attributes in a metadata table. The name and type of eac...
Definition: PersistentDataModel/PersistentDataModel/AthenaAttributeList.h:45
ZdcMonitorAlgorithm::m_isStandalone
Gaudi::Property< bool > m_isStandalone
Definition: ZdcMonitorAlgorithm.h:134
ZdcMonitorAlgorithm::m_ZdcModuleCalibEnergyKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleCalibEnergyKey
Definition: ZdcMonitorAlgorithm.h:169
ZdcMonitorAlgorithm::m_minVInjToImposeAmpRequirementLGInjectorPulse
Gaudi::Property< float > m_minVInjToImposeAmpRequirementLGInjectorPulse
Definition: ZdcMonitorAlgorithm.h:90
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
ZdcMonitorAlgorithm::m_RPDChannelPileupExpFitParamsKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelPileupExpFitParamsKey
Definition: ZdcMonitorAlgorithm.h:190
ZdcMonitorAlgorithm::m_ZdcSumContainerKey
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumContainerKey
Definition: ZdcMonitorAlgorithm.h:145
ZdcMonitorAlgorithm::check_equal_within_rounding
bool check_equal_within_rounding(float a, float b, float epsilon=1e-6f) const
Definition: ZdcMonitorAlgorithm.cxx:24
ZdcMonitorAlgorithm::m_nRpdCentroidStatusBits
static const int m_nRpdCentroidStatusBits
Definition: ZdcMonitorAlgorithm.h:105
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
xAOD::EventInfo_v1::ForwardDet
@ ForwardDet
The forward detectors.
Definition: EventInfo_v1.h:338
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ZdcMonitorAlgorithm::m_enableRPDAmp
Gaudi::Property< bool > m_enableRPDAmp
Definition: ZdcMonitorAlgorithm.h:138
ZdcMonitorAlgorithm::m_minVInjToImposeAmpRequirementHGInjectorPulse
Gaudi::Property< float > m_minVInjToImposeAmpRequirementHGInjectorPulse
Definition: ZdcMonitorAlgorithm.h:89
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:341
ZdcMonitorAlgorithm::m_ZDCSideToolIndices
std::map< std::string, int > m_ZDCSideToolIndices
Definition: ZdcMonitorAlgorithm.h:108
ZDCPulseAnalyzer::LowGainBit
@ LowGainBit
Definition: ZDCPulseAnalyzer.h:29
ZdcMonitorAlgorithm::m_ZdcModuleFitAmpLGRefitKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleFitAmpLGRefitKey
Definition: ZdcMonitorAlgorithm.h:176
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
ZdcMonitorAlgorithm::m_OOpOL1TriggerFromCTPIDMap
Gaudi::Property< std::map< int, std::string > > m_OOpOL1TriggerFromCTPIDMap
Definition: ZdcMonitorAlgorithm.h:93
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
ZdcMonitorAlgorithm::m_ZDCModuleToolIndices
std::map< std::string, std::map< std::string, int > > m_ZDCModuleToolIndices
Definition: ZdcMonitorAlgorithm.h:109
RPDDataAnalyzer.h
ZDC::RPDDataAnalyzer::ValidBit
@ ValidBit
Definition: RPDDataAnalyzer.h:37
ZdcMonitorAlgorithm::m_ZdcModuleT0LGRefitKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleT0LGRefitKey
Definition: ZdcMonitorAlgorithm.h:178
ZdcMonitorAlgorithm::m_eventTypeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_eventTypeKey
Definition: ZdcMonitorAlgorithm.h:151
ZdcMonitorAlgorithm::m_ZdcModuleTimeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleTimeKey
Definition: ZdcMonitorAlgorithm.h:164
ZdcEventInfo::DAQModeUndef
@ DAQModeUndef
Definition: ZdcEventInfo.h:17
ZDCPulseAnalyzer::BadT0Bit
@ BadT0Bit
Definition: ZDCPulseAnalyzer.h:43
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:22
ZdcMonitorAlgorithm::m_ZdcModuleMaxADCKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleMaxADCKey
Definition: ZdcMonitorAlgorithm.h:171
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
ZDCPulseAnalyzer::ExcludeEarlyLGBit
@ ExcludeEarlyLGBit
Definition: ZDCPulseAnalyzer.h:44
ZdcMonitorAlgorithm::m_injPulseVoltageStepsStr
Gaudi::Property< std::vector< std::string > > m_injPulseVoltageStepsStr
Definition: ZdcMonitorAlgorithm.h:142
ZdcMonitorAlgorithm::m_EnableUCCTriggers
Gaudi::Property< bool > m_EnableUCCTriggers
Definition: ZdcMonitorAlgorithm.h:127
ZdcMonitorAlgorithm::TrigHELT15Bit
@ TrigHELT15Bit
Definition: ZdcMonitorAlgorithm.h:41
a
TList * a
Definition: liststreamerinfos.cxx:10
ZdcMonitorAlgorithm::ZdcMonitorAlgorithm
ZdcMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ZdcMonitorAlgorithm.cxx:15
SCT_ConditionsAlgorithms::CoveritySafe::getenv
std::string getenv(const std::string &variableName)
get an environment variable
Definition: SCT_ConditionsUtilities.cxx:17
ZdcMonitorAlgorithm::m_ZdcModuleAmplitudeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleAmplitudeKey
Definition: ZdcMonitorAlgorithm.h:163
ZdcMonitorAlgorithm::m_EnableOOpOTriggers
Gaudi::Property< bool > m_EnableOOpOTriggers
Definition: ZdcMonitorAlgorithm.h:128
ZdcMonitorAlgorithm::calculate_inverse_bin_width
float calculate_inverse_bin_width(float event_value, const std::string &variable_name, const std::vector< float > &bin_edges) const
Definition: ZdcMonitorAlgorithm.cxx:47
ZdcMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: ZdcMonitorAlgorithm.cxx:83
ZdcMonitorAlgorithm::m_LBLBFolderInputKey
SG::ReadCondHandleKey< AthenaAttributeList > m_LBLBFolderInputKey
Definition: ZdcMonitorAlgorithm.h:149
ZdcMonitorAlgorithm::m_UCCtriggerHELT15
Gaudi::Property< std::string > m_UCCtriggerHELT15
Definition: ZdcMonitorAlgorithm.h:80
ZdcMonitorAlgorithm::m_UCCtriggerHELT20
Gaudi::Property< std::string > m_UCCtriggerHELT20
Definition: ZdcMonitorAlgorithm.h:81
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ref
const boost::regex ref(r_ef)
ZdcMonitorAlgorithm::m_moduleChisqHistNumBins
Gaudi::Property< float > m_moduleChisqHistNumBins
Definition: ZdcMonitorAlgorithm.h:70
ZdcMonitorAlgorithm::m_moduleChisqOverAmpHistMinValue
Gaudi::Property< float > m_moduleChisqOverAmpHistMinValue
Definition: ZdcMonitorAlgorithm.h:71
ZdcMonitorAlgorithm::m_moduleChisqOverAmpHistNumBins
Gaudi::Property< float > m_moduleChisqOverAmpHistNumBins
Definition: ZdcMonitorAlgorithm.h:73
ZdcMonitorAlgorithm::m_ZdcModuleChisqBinEdges
std::vector< float > m_ZdcModuleChisqBinEdges
Definition: ZdcMonitorAlgorithm.h:113
ZdcMonitorAlgorithm::m_RPDreactionPlaneAngleKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDreactionPlaneAngleKey
Definition: ZdcMonitorAlgorithm.h:209
ZdcMonitorAlgorithm::m_isInjectedPulse
Gaudi::Property< bool > m_isInjectedPulse
Definition: ZdcMonitorAlgorithm.h:133
xAOD::EventInfo_v1::timeStamp
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
LArCellBinning.step
step
Definition: LArCellBinning.py:158
xAOD::EventInfo_v1::isEventFlagBitSet
bool isEventFlagBitSet(EventFlagSubDet subDet, size_t bit) const
Check one particular bit of one particular sub-detector.
Definition: EventInfo_v1.cxx:703
ZDCPulseAnalyzer::FitMinAmpBit
@ FitMinAmpBit
Definition: ZDCPulseAnalyzer.h:48
xAOD::TrigDecision_v1::tbp
const std::vector< uint32_t > & tbp() const
Get the Trigger Before Prescale bits.
merge.status
status
Definition: merge.py:16
ZdcMonitorAlgorithm::m_runNumber
Gaudi::Property< unsigned int > m_runNumber
Definition: ZdcMonitorAlgorithm.h:56
ZdcMonitorAlgorithm::calculate_log_bin_edges
void calculate_log_bin_edges(float min_value, float max_value, int num_bins, std::vector< float > &bin_edges)
Definition: ZdcMonitorAlgorithm.cxx:28
ZdcMonitorAlgorithm::m_LucrodResponseSingleVoltageToolIndices
std::map< std::string, std::map< std::string, std::map< std::string, int > > > m_LucrodResponseSingleVoltageToolIndices
Definition: ZdcMonitorAlgorithm.h:111
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
ZdcMonitorAlgorithm::TrigHELT20Bit
@ TrigHELT20Bit
Definition: ZdcMonitorAlgorithm.h:40
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:328
ZdcMonitorAlgorithm::m_minAmpRequiredHGInjectorPulse
Gaudi::Property< float > m_minAmpRequiredHGInjectorPulse
Definition: ZdcMonitorAlgorithm.h:87
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
SG::ReadDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
RpdSubtractCentroidTool.h
python.compressB64.c
def c
Definition: compressB64.py:93
ZdcMonitorAlgorithm::m_RPDcosDeltaReactionPlaneAngleKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDcosDeltaReactionPlaneAngleKey
Definition: ZdcMonitorAlgorithm.h:212
ZdcMonitorAlgorithm::m_ZdcSumCalibEnergyKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumCalibEnergyKey
Definition: ZdcMonitorAlgorithm.h:156
ZdcMonitorAlgorithm::m_OOpOtriggerChains
Gaudi::Property< std::vector< std::string > > m_OOpOtriggerChains
Definition: ZdcMonitorAlgorithm.h:92
ZdcMonitorAlgorithm::m_UCCtriggerHELT25
Gaudi::Property< std::string > m_UCCtriggerHELT25
Definition: ZdcMonitorAlgorithm.h:82
xAOD::TrigDecision_v1
Interface to the raw trigger decision information of the event.
Definition: TrigDecision_v1.h:44
AthMonitorAlgorithm::getGroup
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
Definition: AthMonitorAlgorithm.cxx:168
ZDCPulseAnalyzer::FailBit
@ FailBit
Definition: ZDCPulseAnalyzer.h:30
ZdcMonitorAlgorithm::m_enableZDCPhysics
Gaudi::Property< bool > m_enableZDCPhysics
Definition: ZdcMonitorAlgorithm.h:136
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
ZdcEventInfo::RPDDECODINGERROR
@ RPDDECODINGERROR
Definition: ZdcEventInfo.h:19
ZdcMonitorAlgorithm::m_RPDcentroidStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDcentroidStatusKey
Definition: ZdcMonitorAlgorithm.h:215
ZdcMonitorAlgorithm::m_nZdcStatusBits
static const int m_nZdcStatusBits
Definition: ZdcMonitorAlgorithm.h:103
ZdcMonitorAlgorithm::m_energyCutForModuleFractMonitor
Gaudi::Property< float > m_energyCutForModuleFractMonitor
Definition: ZdcMonitorAlgorithm.h:65