ATLAS Offline Software
ZdcMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 
10 ZdcMonitorAlgorithm::ZdcMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
11 :AthMonitorAlgorithm(name,pSvcLocator){
12  ATH_MSG_DEBUG("calling the constructor of ZdcMonitorAlgorithm");
13 }
14 
15 
17 
18 
20 
21  ATH_MSG_DEBUG("initializing for the monitoring algorithm");
22 
23  using namespace Monitored;
24  ATH_CHECK( m_ZdcSumContainerKey.initialize() );
25  ATH_CHECK( m_ZdcModuleContainerKey.initialize() );
26  ATH_CHECK( m_HIEventShapeContainerKey.initialize() );
27 
28  ATH_CHECK( m_eventTypeKey.initialize() );
29  // ATH_CHECK( m_ZdcBCIDKey.initialize() );
30  ATH_CHECK( m_DAQModeKey.initialize() );
31 
32  ATH_CHECK( m_ZdcSumCalibEnergyKey.initialize() );
33  ATH_CHECK( m_ZdcSumUncalibSumKey.initialize() );
34  ATH_CHECK( m_ZdcSumAverageTimeKey.initialize() );
35  ATH_CHECK( m_ZdcSumModuleMaskKey.initialize() );
36 
37  ATH_CHECK( m_ZdcModuleStatusKey.initialize() );
38  ATH_CHECK( m_ZdcModuleAmplitudeKey.initialize() );
39  ATH_CHECK( m_ZdcModuleTimeKey.initialize() );
40  ATH_CHECK( m_ZdcModuleChisqKey.initialize() );
41  ATH_CHECK( m_ZdcModuleCalibEnergyKey.initialize() );
42  ATH_CHECK( m_ZdcModuleCalibTimeKey.initialize() );
43 
44  ATH_CHECK( m_RPDrowKey.initialize() );
45  ATH_CHECK( m_RPDcolKey.initialize() );
46  ATH_CHECK( m_RPDChannelAmplitudeKey.initialize() );
48  ATH_CHECK( m_RPDChannelMaxADCKey.initialize() );
49  ATH_CHECK( m_RPDChannelStatusKey.initialize() );
51  ATH_CHECK( m_RPDChannelPileupFracKey.initialize() );
52 
53  ATH_CHECK( m_RPDChannelSubtrAmpKey.initialize() );
54  ATH_CHECK( m_RPDSubtrAmpSumKey.initialize() );
55  ATH_CHECK( m_RPDxCentroidKey.initialize() );
56  ATH_CHECK( m_RPDyCentroidKey.initialize() );
57  ATH_CHECK( m_RPDreactionPlaneAngleKey.initialize() );
59  ATH_CHECK( m_RPDcentroidStatusKey.initialize() );
60  ATH_CHECK( m_RPDSideStatusKey.initialize() );
61 
62 
63  m_ZDCSideToolIndices = buildToolMap<int>(m_tools,"ZdcSideMonitor",m_nSides);
64  m_ZDCModuleToolIndices = buildToolMap<std::vector<int>>(m_tools,"ZdcModuleMonitor",m_nSides,m_nModules);
65  m_RPDChannelToolIndices = buildToolMap<std::vector<int>>(m_tools,"RpdChannelMonitor",m_nSides,m_nChannels);
66 
67  //---------------------------------------------------
68  // initialize superclass
69 
71  //---------------------------------------------------
72 
73 }
74 
75 
77  ATH_MSG_DEBUG("calling the fillPhysicsDataHistograms function");
78 
79  auto zdcTool = getGroup("genZdcMonTool"); // get the tool for easier group filling
80 // ______________________________________________________________________________
81  // declaring & obtaining event-level information of interest
82 // ______________________________________________________________________________
84  // already checked in fillHistograms that eventInfo is valid
85  auto lumiBlock = Monitored::Scalar<uint32_t>("lumiBlock", eventInfo->lumiBlock());
86  auto bcid = Monitored::Scalar<unsigned int>("bcid", eventInfo->bcid());
87 
88  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)
89  auto passTrigSideC = Monitored::Scalar<bool>("passTrigSideC",false);
90 
91  if(m_enableTrigger){
92  const auto &trigDecTool = getTrigDecisionTool();
93  passTrigSideA = trigDecTool->isPassed(m_triggerSideA, TrigDefs::Physics);
94  passTrigSideC = trigDecTool->isPassed(m_triggerSideC, TrigDefs::Physics);
95  if (passTrigSideA) ATH_MSG_DEBUG("passing trig on side A!");
96  if (passTrigSideC) ATH_MSG_DEBUG("passing trig on side C!");
97  }
98 
99 
100 // ______________________________________________________________________________
101  // declaring & obtaining variables of interest for the ZDC sums
102  // including the RPD x,y positions, reaction plane and status
103 // ______________________________________________________________________________
105 
110 
119 
120  auto zdcEnergySumA = Monitored::Scalar<float>("zdcEnergySumA",-1000.0);
121  auto zdcEnergySumC = Monitored::Scalar<float>("zdcEnergySumC",-1000.0);
122  auto zdcUncalibSumA = Monitored::Scalar<float>("zdcUncalibSumA",-1000.0);
123  auto zdcUncalibSumC = Monitored::Scalar<float>("zdcUncalibSumC",-1000.0);
124  auto rpdCosDeltaReactionPlaneAngle = Monitored::Scalar<float>("rpdCosDeltaReactionPlaneAngle",-1000.0);
125  auto bothReactionPlaneAngleValid = Monitored::Scalar<bool>("bothReactionPlaneAngleValid",true);
126  auto bothHasCentroid = Monitored::Scalar<bool>("bothHasCentroid",true); // the looser requirement that both centroids were calculated (ignore valid)
127 
128  std::array<bool, 2> centroidSideValid;
129  std::array<bool, 2> rpdSideValid = {false, false};
130  std::array<std::vector<float>,2> rpdSubAmpVecs;
131  auto zdcAvgTimeCurSide = Monitored::Scalar<float>("zdcAvgTime",-1000.0);
132  auto zdcModuleMaskCurSide = Monitored::Scalar<bool>("zdcModuleMask",false);
133  auto rpdSubAmpSumCurSide = Monitored::Scalar<float>("rpdSubAmpSum",-1000.0);
134  auto rpdXCentroidCurSide = Monitored::Scalar<float>("xCentroid",-1000.0);
135  auto rpdYCentroidCurSide = Monitored::Scalar<float>("yCentroid",-1000.0);
136  auto rpdReactionPlaneAngleCurSide = Monitored::Scalar<float>("ReactionPlaneAngle",-1000.0);
137  auto centroidValid = Monitored::Scalar<bool>("centroidValid",false);
138 
139  // need to recognize same-side correlation among the following observables
140  // since they are filled differently, it is helpful to store each of their values in the 2-dimension array first
141  // and fill the side monitoring tool in the same "monitoring group"
142  std::array<float, 2> zdcEMModuleEnergy = {-100,-100};
143  std::array<float, 2> zdcEnergySum = {0,0};
144  std::array<float, 2> rpdAmplitudeCalibSum = {0,0};
145  std::array<float, 2> rpdMaxADCSum = {0,0};
146 
147  std::array<float, m_nRpdCentroidStatusBits> centroidStatusBitsCountCurSide;
148 
149  if (! zdcSums.isValid() ) {
150  ATH_MSG_WARNING("evtStore() does not contain Collection with name "<< m_ZdcSumContainerKey);
151  return StatusCode::SUCCESS;
152  }
153  else{
154  for (const auto& zdcSum : *zdcSums) { // side -1: C; side 1: A
155 
156  if (zdcSum->zdcSide() == 0){ // contains the RPD Cos Delta reaction plane
157  rpdCosDeltaReactionPlaneAngle = RPDcosDeltaReactionPlaneAngleHandle(*zdcSum);
158  }else{
159  int iside = (zdcSum->zdcSide() > 0)? 1 : 0; // already exclude the possibility of global sum
160 
161  zdcAvgTimeCurSide = ZdcSumAverageTimeHandle(*zdcSum);
162  zdcModuleMaskCurSide = (ZdcSumModuleMaskHandle(*zdcSum) > 0);
163  zdcEnergySum[iside] = ZdcSumCalibEnergyHandle(*zdcSum);
164 
165  rpdSubAmpVecs[iside] = RPDsubAmpHandle(*zdcSum);
166  rpdSubAmpSumCurSide = RPDsubAmpSumHandle(*zdcSum);
167  rpdXCentroidCurSide = RPDxCentroidHandle(*zdcSum);
168  rpdYCentroidCurSide = RPDyCentroidHandle(*zdcSum);
169  rpdReactionPlaneAngleCurSide = RPDreactionPlaneAngleHandle(*zdcSum);
170 
171  unsigned int rpdCentroidStatusCurSide = RPDcentroidStatusHandle(*zdcSum);
172  unsigned int rpdStatusCurSide = RPDsideStatusHandle(*zdcSum);
173 
174  centroidValid = (rpdCentroidStatusCurSide & 1 << ZDC::RpdSubtractCentroidTool::ValidBit);
175  centroidSideValid.at(iside) = rpdCentroidStatusCurSide & 1 << ZDC::RpdSubtractCentroidTool::ValidBit;
176  rpdSideValid.at(iside) = rpdStatusCurSide & 1 << RPDDataAnalyzer::ValidBit;
177  bool curSideHasCentroid = (rpdCentroidStatusCurSide & 1 << ZDC::RpdSubtractCentroidTool::HasCentroidBit);
178 
179  bothReactionPlaneAngleValid &= centroidValid;
180  bothHasCentroid &= curSideHasCentroid;
181 
182 
183  for (int bit = 0; bit < m_nRpdCentroidStatusBits; bit++) centroidStatusBitsCountCurSide[bit] = 0; // reset
184  for (int bit = 0; bit < m_nRpdCentroidStatusBits; bit++){
185  if (rpdCentroidStatusCurSide & 1 << bit){
186  centroidStatusBitsCountCurSide[bit] += 1;
187  }
188  }
189  auto centroidStatusBits = Monitored::Collection("centroidStatusBits", centroidStatusBitsCountCurSide);
190 
191  if (curSideHasCentroid){ // only impose the looser requirement that this side has centroid; have a set of histograms for the more stringent centroid-valid requirement
192  fill(m_tools[m_ZDCSideToolIndices[iside]], zdcAvgTimeCurSide, zdcModuleMaskCurSide, rpdSubAmpSumCurSide, centroidValid, rpdXCentroidCurSide, rpdYCentroidCurSide, rpdReactionPlaneAngleCurSide, centroidStatusBits, lumiBlock, bcid);
193  }else{
194  fill(m_tools[m_ZDCSideToolIndices[iside]], zdcAvgTimeCurSide, zdcModuleMaskCurSide, rpdSubAmpSumCurSide, centroidStatusBits, lumiBlock, bcid);
195  }
196 
197 
198  ATH_MSG_DEBUG("The current side is " << iside << ", the module mask is " << zdcModuleMaskCurSide);
199 
200  if (zdcSum->zdcSide() == 1){
201  zdcEnergySumA = ZdcSumCalibEnergyHandle(*zdcSum);
202  zdcUncalibSumA = ZdcSumUncalibSumHandle(*zdcSum);
203  }
204  else {
205  zdcEnergySumC = ZdcSumCalibEnergyHandle(*zdcSum);
206  zdcUncalibSumC = ZdcSumUncalibSumHandle(*zdcSum);
207  }
208  }
209  } // having filled both sides
210 
211  }
212 
213 // ______________________________________________________________________________
214  // declaring & obtaining variables of interest for the ZDC modules & RPD channels
215  // filling arrays of monitoring tools (module/channel-level)
216  // updating status bits
217 // ______________________________________________________________________________
218 
220 
227 
230 
237 
238 
239  auto zdcModuleAmp = Monitored::Scalar<float>("zdcModuleAmp", -1000.0);
240  auto zdcModuleFract = Monitored::Scalar<float>("zdcModuleFract", -1000.0);
241  auto zdcUncalibSumCurrentSide = Monitored::Scalar<float>("zdcUncalibSumCurrentSide", -1000.0);
242  auto zdcAbove20NCurrentSide = Monitored::Scalar<bool>("zdcAbove20NCurrentSide", false);
243  auto zdcModuleTime = Monitored::Scalar<float>("zdcModuleTime", -1000.0);
244  auto zdcModuleChisq = Monitored::Scalar<float>("zdcModuleChisq", -1000.0);
245  auto zdcModuleChisqOverAmp = Monitored::Scalar<float>("zdcModuleChisqOverAmp", -1000.0);
246  auto zdcModuleCalibAmp = Monitored::Scalar<float>("zdcModuleCalibAmp", -1000.0);
247  auto zdcModuleCalibTime = Monitored::Scalar<float>("zdcModuleCalibTime", -1000.0);
248  auto zdcModuleLG = Monitored::Scalar<bool>("zdcModuleLG", false);
249  auto zdcModuleHG = Monitored::Scalar<bool>("zdcModuleHG", false);
250 
251  auto rpdChannelSubAmp = Monitored::Scalar<float>("RPDChannelSubAmp", -1000.0);
252  auto rpdChannelAmplitude = Monitored::Scalar<float>("RPDChannelAmplitude", -1000.0);
253  auto rpdChannelMaxADC = Monitored::Scalar<float>("RPDChannelMaxADC", -1000.0);
254  auto rpdChannelAmplitudeCalib = Monitored::Scalar<float>("RPDChannelAmplitudeCalib", -1000.0);
255  auto rpdChannelStatus = Monitored::Scalar<unsigned int>("RPDChannelStatus", 1000);
256  auto rpdChannelPileupFitSlope = Monitored::Scalar<float>("RPDChannelPileupFitSlope", -1000);
257  auto absRpdChannelAmplitude = Monitored::Scalar<float>("absRPDChannelAmplitude", -1000.); // EM module energy on the same side (assuming filled already)
258  auto rpdChannelValid = Monitored::Scalar<bool>("RPDChannelValid", false);
259  auto rpdChannelCentroidValid = Monitored::Scalar<bool>("RPDChannelCentroidValid", false);
260  auto rpdChannelNegativeAmp = Monitored::Scalar<bool>("RPDChannelNegativeAmp", false); // negative amplitude
261  auto rpdChannelNegativePileup = Monitored::Scalar<bool>("RPDChannelNegativePileup", false); // negative amplitude & performed pileup fitting
262  auto rpdChannelNoPileup = Monitored::Scalar<bool>("RPDChannelNoPileup", false); // no pileup fitting performed
263  auto rpdChannelPileupFrac = Monitored::Scalar<float>("RPDChannelPileupFrac", -1000.);
264  auto zdcEMModuleEnergySameSide = Monitored::Scalar<float>("zdcEMModuleEnergySameSide", -1000.); // EM module energy on the same side (assuming filled already)
265  auto zdcEMModuleSameSideHasPulse = Monitored::Scalar<bool>("zdcEMModuleSameSideHasPulse", false);
266  auto rpdValidZdcEMModuleEnergySameSideBelow0 = Monitored::Scalar<bool>("rpdValidZdcEMModuleEnergySameSideBelow0", false);
267  auto rpdValidZdcEMModuleEnergySameSideBelow70 = Monitored::Scalar<bool>("rpdValidZdcEMModuleEnergySameSideBelow70", false);
268 
269  std::array<float, m_nZdcStatusBits> zdcStatusBitsCount;
270  std::array<float, m_nRpdStatusBits> rpdStatusBitsCount;
271 
272  if (! zdcModules.isValid() ) {
273  ATH_MSG_WARNING("evtStore() does not contain Collection with name "<< m_ZdcModuleContainerKey);
274  return StatusCode::SUCCESS;
275  }
276 
277 
278  for (const auto zdcMod : *zdcModules){ // separate ZDC and RPD variable retrieval into two for loops to make sure the EM module energy array is properly filled before being filled into RPD channel monitoring
279  int iside = (zdcMod->zdcSide() > 0)? 1 : 0; // in this way, a negative (default-value) EM module energy indicates no pulse (since filling happens within an if statement)
280 
281  if (zdcMod->zdcType() == 0){
282  int imod = zdcMod->zdcModule();
283  int status = zdcModuleStatusHandle(*zdcMod);
284 
285  for (int bit = 0; bit < m_nZdcStatusBits; bit++) zdcStatusBitsCount[bit] = 0; // reset
286  for (int bit = 0; bit < m_nZdcStatusBits; bit++){
287  if (status & 1 << bit){
288  zdcStatusBitsCount[bit] += 1;
289  }
290  }
291 
292  auto zdcStatusBits = Monitored::Collection("zdcStatusBits", zdcStatusBitsCount);
293  fill(m_tools[m_ZDCModuleToolIndices[iside][imod]], zdcStatusBits, lumiBlock, bcid);
294 
295  if ((status & 1 << ZDCPulseAnalyzer::PulseBit) != 0){
296  zdcModuleAmp = zdcModuleAmplitudeHandle(*zdcMod);
297  zdcModuleTime = zdcModuleTimeHandle(*zdcMod);
298  zdcModuleChisq = zdcModuleChisqHandle(*zdcMod);
299  zdcModuleCalibAmp = zdcModuleCalibEnergyHandle(*zdcMod);
300  zdcModuleCalibTime = zdcModuleCalibTimeHandle(*zdcMod);
301  zdcUncalibSumCurrentSide = (zdcMod->zdcSide() > 0)? 1. * zdcUncalibSumA : 1. * zdcUncalibSumC;
302  zdcAbove20NCurrentSide = (zdcUncalibSumCurrentSide > 20 * m_expected1N);
303  zdcModuleFract = (zdcUncalibSumCurrentSide == 0)? -1000. : zdcModuleAmp / zdcUncalibSumCurrentSide;
304  zdcModuleChisqOverAmp = (zdcModuleAmp == 0)? -1000. : zdcModuleChisq / zdcModuleAmp;
305  zdcModuleLG = (status & 1 << ZDCPulseAnalyzer::LowGainBit);
306  zdcModuleHG = !(zdcModuleLG);
307 
308  if (imod == 0) zdcEMModuleEnergy[iside] = zdcModuleCalibAmp;
309 
310  fill(m_tools[m_ZDCModuleToolIndices[iside][imod]], zdcModuleAmp, zdcModuleFract, zdcUncalibSumCurrentSide, zdcAbove20NCurrentSide, zdcModuleTime, zdcModuleChisq, zdcModuleChisqOverAmp, zdcModuleCalibAmp, zdcModuleCalibTime, zdcModuleLG, zdcModuleHG, lumiBlock, bcid);
311  }
312  }
313  }
314 
315  ATH_MSG_DEBUG("After one loop over all zdc modules, the current values in zdcEMModuleEnergy is : " << zdcEMModuleEnergy[0] << ", " << zdcEMModuleEnergy[1]);
316 
317  for (const auto zdcMod : *zdcModules){
318  int iside = (zdcMod->zdcSide() > 0)? 1 : 0;
319  if (zdcMod->zdcType() == 1) {
320  // this is the RPD
321 
322  int ichannel = zdcMod->zdcChannel(); // zero-based
323  int status = RPDChannelStatusHandle(*zdcMod);
324 
325  for (int bit = 0; bit < m_nRpdStatusBits; bit++) rpdStatusBitsCount[bit] = 0; // reset
326  for (int bit = 0; bit < m_nRpdStatusBits; bit++){
327  if (status & 1 << bit){
328  rpdStatusBitsCount[bit] += 1;
329  }
330  }
331 
332  auto rpdStatusBits = Monitored::Collection("RPDStatusBits", rpdStatusBitsCount);
333 
334  rpdChannelSubAmp = rpdSubAmpVecs[iside][ichannel];
335  rpdChannelAmplitude = RPDChannelAmplitudeHandle(*zdcMod);
336  rpdChannelMaxADC = RPDChannelMaxADCHandle(*zdcMod);
337  rpdChannelAmplitudeCalib = RPDChannelAmplitudeCalibHandle(*zdcMod);
338  std::vector<float> rpdChannelPileupFitParams = RPDChannelPileupExpFitParamsHandle(*zdcMod);
339  rpdChannelPileupFitSlope = rpdChannelPileupFitParams[1];
340  rpdChannelPileupFrac = RPDChannelPileupFracHandle(*zdcMod);
341 
342  absRpdChannelAmplitude = abs(rpdChannelAmplitude);
343  zdcEMModuleEnergySameSide = zdcEMModuleEnergy[iside];
344  zdcEMModuleSameSideHasPulse = (zdcEMModuleEnergySameSide >= 0); // default negative value indicates no pulse in the EM module
345  bool curRpdChannelValid = status & 1 << RPDDataAnalyzer::ValidBit;
346  rpdValidZdcEMModuleEnergySameSideBelow0 = (zdcEMModuleEnergySameSide == 0) && curRpdChannelValid;
347  rpdValidZdcEMModuleEnergySameSideBelow70 = (zdcEMModuleEnergySameSide < 70) && curRpdChannelValid;
348  rpdChannelValid = curRpdChannelValid;
349  rpdChannelCentroidValid = centroidSideValid.at(iside);
350  rpdChannelNegativeAmp = (rpdChannelAmplitude < 0);
351  rpdChannelNegativePileup = (rpdChannelPileupFrac == -1);
352  rpdChannelNoPileup = (rpdChannelPileupFrac == 0);
353 
354  rpdAmplitudeCalibSum[iside] += rpdChannelAmplitudeCalib;
355  rpdMaxADCSum[iside] += rpdChannelMaxADC;
356 
357  fill(m_tools[m_RPDChannelToolIndices[iside][ichannel]], rpdChannelSubAmp, rpdChannelAmplitude, rpdChannelAmplitudeCalib, rpdChannelMaxADC, rpdStatusBits, rpdChannelPileupFitSlope, absRpdChannelAmplitude, rpdChannelPileupFrac, zdcEMModuleEnergySameSide, zdcEMModuleSameSideHasPulse, rpdValidZdcEMModuleEnergySameSideBelow0, rpdValidZdcEMModuleEnergySameSideBelow70, rpdChannelValid, rpdChannelCentroidValid, rpdChannelNegativeAmp, rpdChannelNegativePileup, rpdChannelNoPileup, lumiBlock, bcid);
358  }
359  }
360 
361 // ______________________________________________________________________________
362  // obtaining fCalEt on A,C side
363 // ______________________________________________________________________________
364 
366  auto fcalEtA = Monitored::Scalar<float>("fcalEtA", -1000.0);
367  auto fcalEtC = Monitored::Scalar<float>("fcalEtC", -1000.0);
368  if (! eventShapes.isValid()) {
369  // we often don't expect calorimeter info to be on (e.g, when using the ZDC calibration stream)
370  // only print out warning if we expect the calorimeter info to be on
371  // not returning since the ZDC side-sum & module info is more important and yet need to be filled
372  if (m_CalInfoOn) ATH_MSG_WARNING("evtStore() does not contain Collection with name "<< m_HIEventShapeContainerKey);
373  }
374  else{
375  ATH_MSG_DEBUG("Able to retrieve container "<< m_HIEventShapeContainerKey);
376  ATH_MSG_DEBUG("Used to obtain fCalEtA, fCalEtC");
377 
378  for (const auto eventShape : *eventShapes){
379  int layer = eventShape->layer();
380  float eta = eventShape->etaMin();
381  float et = eventShape->et();
382  if (layer == 21 || layer == 22 || layer == 23){
383  if (eta > 0) fcalEtA += et;
384  if (eta < 0) fcalEtC += et;
385  }
386  }
387  }
388 
389 // ______________________________________________________________________________
390  // filling generic ZDC tool (within the same Monitored::Group, so that any possible correlation is recognized)
391 // ______________________________________________________________________________
392 
393  if (m_CalInfoOn){ // calorimeter information is turned on
394  fill(zdcTool, lumiBlock, bcid, passTrigSideA, passTrigSideC, zdcEnergySumA, zdcEnergySumC, zdcUncalibSumA, zdcUncalibSumC, rpdCosDeltaReactionPlaneAngle, bothReactionPlaneAngleValid, bothHasCentroid, fcalEtA, fcalEtC);
395  } else{
396  fill(zdcTool, lumiBlock, bcid, passTrigSideA, passTrigSideC, zdcEnergySumA, zdcEnergySumC, zdcUncalibSumA, zdcUncalibSumC, rpdCosDeltaReactionPlaneAngle, bothReactionPlaneAngleValid, bothHasCentroid);
397  }
398 
399 
400  for (int iside = 0; iside < m_nSides; iside++){
401  auto zdcEnergySumCurSide = Monitored::Scalar<float>("zdcEnergySum",zdcEnergySum[iside]); // this is duplicate information as A,C but convenient for filling per-side histograms
402  auto zdcEMModuleEnergyCurSide = Monitored::Scalar<float>("zdcEMModuleEnergy",zdcEMModuleEnergy[iside]);
403  auto rpdAmplitudeCalibSumCurSide = Monitored::Scalar<float>("rpdAmplitudeCalibSum",rpdAmplitudeCalibSum[iside]);
404  auto rpdMaxADCSumCurSide = Monitored::Scalar<float>("rpdMaxADCSum",rpdMaxADCSum[iside]);
405  auto rpdCurSideValid = Monitored::Scalar<bool>("RPDSideValid",rpdSideValid[iside]);
406  fill(m_tools[m_ZDCSideToolIndices[iside]], zdcEnergySumCurSide, zdcEMModuleEnergyCurSide, rpdAmplitudeCalibSumCurSide, rpdMaxADCSumCurSide, rpdCurSideValid, lumiBlock, bcid);
407  }
408  return StatusCode::SUCCESS;
409 }
410 
411 
412 StatusCode ZdcMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
413 
414  ATH_MSG_DEBUG("calling the fillHistograms function");
415 
417  if (! eventInfo.isValid() ) {
418  ATH_MSG_WARNING("cannot retrieve event info from evtStore()!");
419  return StatusCode::SUCCESS;
420  }
421 
422  unsigned int eventType = ZdcEventInfo::ZdcEventUnknown;
423  unsigned int DAQMode = ZdcEventInfo::DAQModeUndef;
424 
427 
429 
430  if (! zdcSums.isValid() ) {
431  ATH_MSG_WARNING("evtStore() does not contain Collection with name "<< m_ZdcSumContainerKey);
432  return StatusCode::SUCCESS;
433  }
434  for (const auto& zdcSum : *zdcSums) {
435  if (zdcSum->zdcSide() == 0){
436  if (!eventTypeHandle.isAvailable()){
437  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!");
438  return StatusCode::SUCCESS;
439  }
440 
441  if (!DAQModeHandle.isAvailable()){
442  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!");
443  return StatusCode::SUCCESS;
444  }
445 
446  eventType = eventTypeHandle(*zdcSum);
447  DAQMode = DAQModeHandle(*zdcSum);
448  }
449  }
450 
451  ATH_MSG_DEBUG("The event type is: " << eventType);
452 
454  ATH_MSG_WARNING("The zdc sum container can be retrieved from the evtStore() but");
455  ATH_MSG_WARNING("Either the event type or the DAQ mode is the default unknown value");
456  ATH_MSG_WARNING("Most likely, there is no global sum (side == 0) entry in the zdc sum container");
457  return StatusCode::SUCCESS;
458  }
459 
460  if (eventType == ZdcEventInfo::ZdcEventPhysics || eventType == ZdcEventInfo::ZdcSimulation){
461  return fillPhysicsDataHistograms(ctx);
462  }
463 
464  ATH_MSG_WARNING("Event type should be PhysicsData/Simulation but it is NOT");
465  return StatusCode::SUCCESS;
466 }
467 
ZdcMonitorAlgorithm::fillPhysicsDataHistograms
StatusCode fillPhysicsDataHistograms(const EventContext &ctx) const
Definition: ZdcMonitorAlgorithm.cxx:76
ZdcMonitorAlgorithm::m_RPDcolKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDcolKey
Definition: ZdcMonitorAlgorithm.h:94
ZdcEventInfo::ZdcEventPhysics
@ ZdcEventPhysics
Definition: ZdcEventInfo.h:16
ZdcMonitorAlgorithm::m_ZdcSumAverageTimeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumAverageTimeKey
Definition: ZdcMonitorAlgorithm.h:73
et
Extra patterns decribing particle interation process.
ZdcMonitorAlgorithm::m_ZdcModuleChisqKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleChisqKey
Definition: ZdcMonitorAlgorithm.h:80
ZdcMonitorAlgorithm::m_nRpdStatusBits
static const int m_nRpdStatusBits
Definition: ZdcMonitorAlgorithm.h:52
ZdcMonitorAlgorithm::m_RPDSideStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDSideStatusKey
Definition: ZdcMonitorAlgorithm.h:127
ZdcMonitorAlgorithm::m_ZdcSumUncalibSumKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumUncalibSumKey
Definition: ZdcMonitorAlgorithm.h:74
xAOD::et
et
Definition: TrigEMCluster_v1.cxx:25
ZdcMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: ZdcMonitorAlgorithm.cxx:412
ZdcMonitorAlgorithm::m_RPDChannelPileupFracKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelPileupFracKey
Definition: ZdcMonitorAlgorithm.h:102
ZDCPulseAnalyzer.h
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
ZdcMonitorAlgorithm::m_ZDCSideToolIndices
std::vector< int > m_ZDCSideToolIndices
Definition: ZdcMonitorAlgorithm.h:57
ZdcMonitorAlgorithm::m_RPDyCentroidKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDyCentroidKey
Definition: ZdcMonitorAlgorithm.h:114
ZdcMonitorAlgorithm.h
AthMonitorAlgorithm::m_EventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Key for retrieving EventInfo from StoreGate.
Definition: AthMonitorAlgorithm.h:362
ZdcMonitorAlgorithm::m_RPDChannelAmplitudeCalibKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelAmplitudeCalibKey
Definition: ZdcMonitorAlgorithm.h:85
AthMonitorAlgorithm::getTrigDecisionTool
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
Definition: AthMonitorAlgorithm.cxx:189
ZdcMonitorAlgorithm::m_ZdcModuleContainerKey
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleContainerKey
Definition: ZdcMonitorAlgorithm.h:65
ZdcEventInfo::ZdcEventUnknown
@ ZdcEventUnknown
Definition: ZdcEventInfo.h:16
ZdcMonitorAlgorithm::m_RPDChannelToolIndices
std::vector< std::vector< int > > m_RPDChannelToolIndices
Definition: ZdcMonitorAlgorithm.h:59
ZdcEventInfo::DAQMode
DAQMode
Definition: ZdcEventInfo.h:17
ZdcMonitorAlgorithm::m_nSides
static const int m_nSides
Definition: ZdcMonitorAlgorithm.h:48
ZDC::RpdSubtractCentroidTool::HasCentroidBit
@ HasCentroidBit
Definition: RpdSubtractCentroidTool.h:31
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:44
ZdcMonitorAlgorithm::m_RPDChannelMaxADCKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelMaxADCKey
Definition: ZdcMonitorAlgorithm.h:86
ZdcMonitorAlgorithm::m_ZdcModuleCalibTimeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleCalibTimeKey
Definition: ZdcMonitorAlgorithm.h:82
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
ZdcMonitorAlgorithm::m_triggerSideC
Gaudi::Property< std::string > m_triggerSideC
Definition: ZdcMonitorAlgorithm.h:45
ZdcMonitorAlgorithm::m_expected1N
Gaudi::Property< float > m_expected1N
Definition: ZdcMonitorAlgorithm.h:41
ZdcMonitorAlgorithm::m_HIEventShapeContainerKey
SG::ReadHandleKey< xAOD::HIEventShapeContainer > m_HIEventShapeContainerKey
Definition: ZdcMonitorAlgorithm.h:66
ZdcMonitorAlgorithm::m_RPDSubtrAmpSumKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDSubtrAmpSumKey
Definition: ZdcMonitorAlgorithm.h:108
ZDC::RpdSubtractCentroidTool::ValidBit
@ ValidBit
Definition: RpdSubtractCentroidTool.h:30
ZdcMonitorAlgorithm::m_ZdcModuleStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleStatusKey
Definition: ZdcMonitorAlgorithm.h:77
ZdcMonitorAlgorithm::m_RPDxCentroidKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDxCentroidKey
Definition: ZdcMonitorAlgorithm.h:111
ZdcMonitorAlgorithm::m_DAQModeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_DAQModeKey
Definition: ZdcMonitorAlgorithm.h:70
ZdcMonitorAlgorithm::m_nModules
static const int m_nModules
Definition: ZdcMonitorAlgorithm.h:49
ZdcMonitorAlgorithm::m_ZdcSumModuleMaskKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumModuleMaskKey
Definition: ZdcMonitorAlgorithm.h:75
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
ZdcMonitorAlgorithm::m_CalInfoOn
Gaudi::Property< bool > m_CalInfoOn
Definition: ZdcMonitorAlgorithm.h:35
ZdcMonitorAlgorithm::m_RPDChannelStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelStatusKey
Definition: ZdcMonitorAlgorithm.h:87
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
ZdcMonitorAlgorithm::m_RPDChannelSubtrAmpKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelSubtrAmpKey
Definition: ZdcMonitorAlgorithm.h:105
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
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
ZDCPulseAnalyzer::PulseBit
@ PulseBit
Definition: ZDCPulseAnalyzer.h:26
ZdcEventInfo::ZdcSimulation
@ ZdcSimulation
Definition: ZdcEventInfo.h:16
ZdcMonitorAlgorithm::~ZdcMonitorAlgorithm
virtual ~ZdcMonitorAlgorithm()
Definition: ZdcMonitorAlgorithm.cxx:16
ZdcMonitorAlgorithm::m_RPDChannelAmplitudeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDChannelAmplitudeKey
Definition: ZdcMonitorAlgorithm.h:84
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
RPDDataAnalyzer::ValidBit
@ ValidBit
Definition: RPDDataAnalyzer.h:39
ZdcMonitorAlgorithm::m_ZdcModuleCalibEnergyKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleCalibEnergyKey
Definition: ZdcMonitorAlgorithm.h:81
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:99
ZdcMonitorAlgorithm::m_ZdcSumContainerKey
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumContainerKey
Definition: ZdcMonitorAlgorithm.h:64
ZdcMonitorAlgorithm::m_ZDCModuleToolIndices
std::vector< std::vector< int > > m_ZDCModuleToolIndices
Definition: ZdcMonitorAlgorithm.h:58
ZdcMonitorAlgorithm::m_nRpdCentroidStatusBits
static const int m_nRpdCentroidStatusBits
Definition: ZdcMonitorAlgorithm.h:53
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
RPDDataAnalyzer.h
ZDCPulseAnalyzer::LowGainBit
@ LowGainBit
Definition: ZDCPulseAnalyzer.h:27
ZdcMonitorAlgorithm::m_eventTypeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_eventTypeKey
Definition: ZdcMonitorAlgorithm.h:68
ZdcMonitorAlgorithm::m_ZdcModuleTimeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleTimeKey
Definition: ZdcMonitorAlgorithm.h:79
ZdcEventInfo::DAQModeUndef
@ DAQModeUndef
Definition: ZdcEventInfo.h:17
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
ZdcMonitorAlgorithm::ZdcMonitorAlgorithm
ZdcMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ZdcMonitorAlgorithm.cxx:10
ZdcMonitorAlgorithm::m_ZdcModuleAmplitudeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcModuleAmplitudeKey
Definition: ZdcMonitorAlgorithm.h:78
ZdcMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: ZdcMonitorAlgorithm.cxx:19
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ZdcMonitorAlgorithm::m_nChannels
static const int m_nChannels
Definition: ZdcMonitorAlgorithm.h:50
ZdcMonitorAlgorithm::m_RPDreactionPlaneAngleKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDreactionPlaneAngleKey
Definition: ZdcMonitorAlgorithm.h:118
ZdcMonitorAlgorithm::m_RPDrowKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDrowKey
Definition: ZdcMonitorAlgorithm.h:90
merge.status
status
Definition: merge.py:17
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
SG::ReadDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
RpdSubtractCentroidTool.h
ZdcMonitorAlgorithm::m_RPDcosDeltaReactionPlaneAngleKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDcosDeltaReactionPlaneAngleKey
Definition: ZdcMonitorAlgorithm.h:121
ZdcMonitorAlgorithm::m_ZdcSumCalibEnergyKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcSumCalibEnergyKey
Definition: ZdcMonitorAlgorithm.h:72
ZdcMonitorAlgorithm::m_enableTrigger
Gaudi::Property< bool > m_enableTrigger
Definition: ZdcMonitorAlgorithm.h:36
AthMonitorAlgorithm::getGroup
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
Definition: AthMonitorAlgorithm.cxx:164
ZdcMonitorAlgorithm::m_RPDcentroidStatusKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_RPDcentroidStatusKey
Definition: ZdcMonitorAlgorithm.h:124
ZdcMonitorAlgorithm::m_nZdcStatusBits
static const int m_nZdcStatusBits
Definition: ZdcMonitorAlgorithm.h:51