ATLAS Offline Software
ZDCDataAnalyzer.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
8 #include <utility>
9 
10 #include "CxxUtils/trapping_fp.h"
11 
12 
14  {"moduleEnabled", {JSON::value_t::array, 4, true, false}},
15  {"iterativeCalibCorr", {JSON::value_t::array, 4, true, false}}
16 };
17 
18 
19 ZDCDataAnalyzer::ZDCDataAnalyzer(ZDCMsg::MessageFunctionPtr msgFunc_p, int nSample, float deltaTSample, size_t preSampleIdx, std::string fitFunction,
20  const ZDCModuleIntArray& peak2ndDerivMinSamples,
21  const ZDCModuleFloatArray& peak2ndDerivMinThresholdsHG,
22  const ZDCModuleFloatArray& peak2ndDerivMinThresholdsLG,
23  unsigned int LGMode) :
24  m_msgFunc_p(std::move(msgFunc_p))
25 {
26  m_moduleEnabled[0] = {{true, true, true, true}};
27  m_moduleEnabled[1] = {{true, true, true, true}};
28 
29  m_moduleAnalyzers[0] = {{0, 0, 0, 0}};
30  m_moduleAnalyzers[1] = {{0, 0, 0, 0}};
31 
32  m_calibAmplitude[0] = {{0, 0, 0, 0}};
33  m_calibAmplitude[1] = {{0, 0, 0, 0}};
34 
35  m_calibTime[0] = {{0, 0, 0, 0}};
36  m_calibTime[1] = {{0, 0, 0, 0}};
37 
38  m_dataLoaded[0] = {{false, false, false, false}};
39  m_dataLoaded[1] = {{false, false, false, false}};
40 
41  m_delayedOrder[0] = {0, 0, 0, 0};
42  m_delayedOrder[1] = {0, 0, 0, 0};
43 
44  // For now we are using hard-coded gain factors and pedestals
45  //
46  m_HGGains[0] = {{10, 10, 10, 10}};
47  m_HGGains[1] = {{10, 10, 10, 10}};
48 
49  m_pedestals[0] = {{100, 100, 100, 100}};
50  m_pedestals[1] = {{100, 100, 100, 100}};
51 
52  // Construct the per-module pulse analyzers
53  //
54  for (size_t side : {0, 1}) {
55  for (size_t module : {0, 1, 2, 3}) {
56  std::string moduleTag= "_s" + std::to_string(side) + "_m" +std::to_string(module);
57  m_moduleAnalyzers[side][module] = make_unique<ZDCPulseAnalyzer>(m_msgFunc_p, std::move(moduleTag), nSample, deltaTSample, preSampleIdx,
58  m_pedestals[side][module], fitFunction,
59  peak2ndDerivMinSamples[side][module],
60  peak2ndDerivMinThresholdsHG[side][module],
61  peak2ndDerivMinThresholdsLG[side][module]);
62  m_moduleAnalyzers[side][module]->setLGMode(LGMode);
63  }
64  }
65 }
66 
68  m_msgFunc_p(msgFunc_p)
69 {
70  init();
71 
72  // Construct the object that will extract the data and pulse analyzer
73  // configurations from the input JSON configuration
74  //
75  // For the data anlyzer we use 1 channel since the relevant
76  // configurations will all be per-side
77  //
78  m_dataAnalyzerConfig = std::make_unique<ZDCJSONConfig>(std::vector<std::string>{"C", "A"}, 1);
79  m_pulseAnalyzerConfig = std::make_unique<ZDCJSONConfig>(std::vector<std::string>{"C", "A"}, 4);
80 
81 
82  // Extract the JSON object for the pulse analyzer(s)
83  //
84  JSON DAconfig = configJSON["DataAnalyzer"];
85  if (DAconfig.is_null()) {
86  (*m_msgFunc_p)(ZDCMsg::Fatal, "JSON configuration object for ZDCDataAnalyzer not found");
87  return;
88  }
89 
90  auto [result, resultStr] = m_dataAnalyzerConfig->ParseConfig(DAconfig, ZDCDataAnalyzer::JSONConfigParams);
91  if (!result) {
92  (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCDataAnalyzer JSON config, error = " + resultStr);
93  return;
94  }
95 
96  // The data analyzer configuration is simple enough we handle it inline
97  //
98  for (size_t side : {0, 1}) {
99  for (size_t module : {0, 1, 2, 3}) {
100  m_moduleEnabled[side][module] = true;
101  }
102 
103  // Now extract information from ZDCDataAnalyzer-specific configuration
104  //
105  JSON sideConfig = m_pulseAnalyzerConfig->getChannelConfig(side, 0);
106  JSON modEnable = sideConfig["moduleEnabled"];
107  if (!modEnable.is_null()) {
108  if (modEnable.size() != 4) {
109  (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCDataAnalyzer JSON config, incorrect size of moduleEnabled");
110  return;
111  }
112 
113  for (size_t module : {0, 1, 2, 3}) {
114  m_moduleEnabled[side][module] = modEnable[module];
115  }
116  }
117  }
118 
119  // Extract the JSON object for the pulse analyzer(s)
120  //
121  JSON PAconfig = configJSON["PulseAnalyzer"];
122  if (PAconfig.is_null()) {
123  (*m_msgFunc_p)(ZDCMsg::Fatal, "JSON configuration object for ZDCPulseAnalyzer not found");
124  return;
125  }
126 
127  // Do the parsing of the pulse analyzer JSON configuration
128  //
129  auto [result2, resultStr2] = m_pulseAnalyzerConfig->ParseConfig(PAconfig, ZDCPulseAnalyzer::JSONConfigParams);
130  if (!result2) {
131  (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCPulseAnalyzer JSON config, error = " + resultStr2);
132  return;
133  }
134 
135  // Now set up each of the pulse analyzers
136  //
137  for (size_t side : {0, 1}) {
138  for (size_t module : {0, 1, 2, 3}) {
139 
140  (*m_msgFunc_p)(ZDCMsg::Info, "Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
141  ", module " + std::to_string(module));
142 
143  //
144  // Get the parsed configuration JSON object for this module
145  //
146  JSON moduleConfig = m_pulseAnalyzerConfig->getChannelConfig(side, module);
147 
148  std::ostringstream ostr;
149  ostr << "JSON configuration for ZDC pulse analyyzer for side " << std::to_string(side)
150  << ", module " << std::to_string(module) << "\n" << moduleConfig.dump(2);
151  (*m_msgFunc_p)(ZDCMsg::Verbose, ostr.str().c_str());
152 
153  // Construct the ZDCPulseAnalyzer object
154  //
155  m_moduleAnalyzers[side][module] = std::make_unique<ZDCPulseAnalyzer>(msgFunc_p, moduleConfig);
156 
157  (*m_msgFunc_p)(ZDCMsg::Info, "Finished constructing ZDCPulseAnalyzer for side " + std::to_string(side) +
158  ", module " + std::to_string(module));
159 
160  }
161  }
162 
163  // Check for the enabling of re-pass
164  //
166 
167  (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer construction complete");
168 }
169 
171 {
172  for (size_t side : {0, 1}) {
173  m_moduleSum[side] = 0;
174  m_moduleSumErrSq[side] = 0;
176  m_calibModuleSum[side] = 0;
178 
181  m_averageTime[side] = 0;
182  m_fail[side] = 0;
183 
184  for (size_t module : {0, 1, 2, 3}) {
185  m_moduleEnabled[side][module] = true;
187  m_calibTime[side][module] = 0;
188 
189  m_dataLoaded[side][module] = false;
190  m_delayedOrder[side][module] = 0;
191 
192  // Default "calibrations"
193  //
197 
198  }
199  }
200 
201  m_NLcalibFactors = {{
202  {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }},
203  {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }} }};
204 
205 }
206 
208 {
209  if (side < 2 && module < 4) {
210  //
211  // Can't disable in the middle of analysis
212  //
213  if (m_dataLoaded[side][module]) return false;
214  else {
215  m_moduleEnabled[side][module] = false;
216  return true;
217  }
218  }
219  else {
220  return false;
221  }
222 }
223 
224 void ZDCDataAnalyzer::enableDelayed(float deltaT, const ZDCModuleFloatArray& undelayedDelayedPedestalDiff)
225 {
226  int delayedOrder = deltaT < 0 ? -1 : 1;
227  for (size_t side : {0, 1}) {
228  for (size_t module : {0, 1, 2, 3}) {
229  m_delayedOrder[side][module] = delayedOrder;
230  m_moduleAnalyzers[side][module]->enableDelayed(std::abs(deltaT), undelayedDelayedPedestalDiff[side][module]);
231  }
232  }
233 }
234 
235 void ZDCDataAnalyzer::enableDelayed(const ZDCModuleFloatArray& delayDeltaTArray, const ZDCModuleFloatArray& undelayedDelayedPedestalDiff)
236 {
237  for (size_t side : {0, 1}) {
238  for (size_t module : {0, 1, 2, 3}) {
239  if (delayDeltaTArray[side][module] < 0) m_delayedOrder[side][module] = -1;
240  else m_delayedOrder[side][module] = 1;
241 
242  (*m_msgFunc_p)(ZDCMsg::Verbose, "Enabling use of delayed samples on side, module = " + std::to_string(side) + ", " +
243  std::to_string(module) + ", delta t = " + std::to_string(delayDeltaTArray[side][module]));
244 
245  m_moduleAnalyzers[side][module]->enableDelayed(std::abs(delayDeltaTArray[side][module]), undelayedDelayedPedestalDiff[side][module]);
246  }
247  }
248 }
249 
250 void ZDCDataAnalyzer::enablePreExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray& HGADCThresh, const ZDCModuleIntArray& LGADCThresh)
251 {
252  for (size_t side : {0, 1}) {
253  for (size_t module : {0, 1, 2, 3}) {
254  m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
255  }
256  }
257 }
258 
259 void ZDCDataAnalyzer::enablePreExclusion(unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh)
260 {
261  for (size_t side : {0, 1}) {
262  for (size_t module : {0, 1, 2, 3}) {
263  m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
264  }
265  }
266 }
267 
268 void ZDCDataAnalyzer::enablePostExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray& HGADCThresh, const ZDCModuleIntArray& LGADCThresh)
269 {
270  for (size_t side : {0, 1}) {
271  for (size_t module : {0, 1, 2, 3}) {
272  m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
273  }
274  }
275 }
276 
277 void ZDCDataAnalyzer::enablePostExclusion(unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh)
278 {
279  for (size_t side : {0, 1}) {
280  for (size_t module : {0, 1, 2, 3}) {
281  m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
282  }
283  }
284 }
285 
286 
287 void ZDCDataAnalyzer::enableRepass(const ZDCModuleFloatArray& peak2ndDerivMinRepassHG, const ZDCModuleFloatArray& peak2ndDerivMinRepassLG)
288 {
289  m_repassEnabled = true;
290  for (size_t side : {0, 1}) {
291  for (size_t module : {0, 1, 2, 3}) {
292  m_moduleAnalyzers[side][module]->enableRepass(peak2ndDerivMinRepassHG[side][module], peak2ndDerivMinRepassLG[side][module]);
293  }
294  }
295 }
296 
297 void ZDCDataAnalyzer::setMinimumSignificance(float sigMinHG, float sigMinLG)
298 {
299  for (size_t side : {0, 1}) {
300  for (size_t module : {0, 1, 2, 3}) {
301  m_moduleAnalyzers[side][module]->setMinimumSignificance(sigMinHG, sigMinLG);
302  }
303  }
304 }
305 
307 {
308  for (size_t side : {0, 1}) {
309  for (size_t module : {0, 1, 2, 3}) {
310  m_moduleAnalyzers[side][module]->set2ndDerivStep(step);
311  }
312  }
313 }
314 
315 void ZDCDataAnalyzer::SetGainFactorsHGLG(float gainFactorHG, float gainFactorLG)
316 {
317  for (size_t side : {0, 1}) {
318  for (size_t module : {0, 1, 2, 3}) {
319  m_moduleAnalyzers[side][module]->SetGainFactorsHGLG(gainFactorHG, gainFactorLG);
320  }
321  }
322 }
323 
324 void ZDCDataAnalyzer::SetGainFactorsHGLG(const ZDCModuleFloatArray& gainFactorsHG, const ZDCModuleFloatArray& gainFactorsLG)
325 {
326  for (size_t side : {0, 1}) {
327  for (size_t module : {0, 1, 2, 3}) {
328  m_moduleAnalyzers[side][module]->SetGainFactorsHGLG(gainFactorsHG[side][module], gainFactorsLG[side][module]);
329  }
330  }
331 }
332 
334  for (size_t side : {0, 1}) {
335  for (size_t module : {0, 1, 2, 3}) {
336  m_moduleAnalyzers[side][module]->SetPeak2ndDerivMinTolerance(tolerance);
337  }
338  }
339 }
340 
341 
343  for (size_t side : {0, 1}) {
344  for (size_t module : {0, 1, 2, 3}) {
345  m_moduleAnalyzers[side][module]->SetFitTimeMax(tmax);
346  }
347  }
348 }
349 
350 
351 
353  const ZDCModuleFloatArray& tau1, const ZDCModuleFloatArray& tau2,
354  const ZDCModuleFloatArray& t0HG, const ZDCModuleFloatArray& t0LG)
355 {
356  for (size_t side : {0, 1}) {
357  for (size_t module : {0, 1, 2, 3}) {
358  m_moduleAnalyzers[side][module]->SetTauT0Values(fixTau1[side][module], fixTau2[side][module],
359  tau1[side][module], tau2[side][module], t0HG[side][module], t0LG[side][module]);
360  }
361  }
362 }
363 
364 void ZDCDataAnalyzer::SetNoiseSigmas(const ZDCModuleFloatArray& noiseSigmasHG, const ZDCModuleFloatArray& noiseSigmasLG)
365 {
366  for (size_t side : {0, 1}) {
367  for (size_t module : {0, 1, 2, 3}) {
368  m_moduleAnalyzers[side][module]->SetNoiseSigmas(noiseSigmasHG[side][module], noiseSigmasLG[side][module]);
369  }
370  }
371 }
372 
374  for (size_t side : {0, 1}) {
375  for (size_t module : {0, 1, 2, 3}) {
376  m_moduleAmpFractionLG[side][module] = moduleAmpFractionLG[side][module];
377  }
378  }
379 }
380 
382  const ZDCModuleFloatArray& maxAmpHG, const ZDCModuleFloatArray& maxAmpLG)
383 {
384  for (size_t side : {0, 1}) {
385  for (size_t module : {0, 1, 2, 3}) {
386  m_moduleAnalyzers[side][module]->SetFitMinMaxAmp(minAmpHG[side][module], minAmpLG[side][module],
387  maxAmpHG[side][module], maxAmpLG[side][module]);
388 
389  }
390  }
391 }
392 
393 void ZDCDataAnalyzer::SetFitMinMaxAmpValues(float minHG, float minLG, float maxHG, float maxLG)
394 {
395  for (size_t side : {0, 1}) {
396  for (size_t module : {0, 1, 2, 3}) {
397  m_moduleAnalyzers[side][module]->SetFitMinMaxAmp(minHG, minLG, maxHG, maxLG);
398  }
399  }
400 }
401 
403  const ZDCModuleFloatArray& LGOverflowADC)
404 {
405  for (size_t side : {0, 1}) {
406  for (size_t module : {0, 1, 2, 3}) {
407  m_moduleAnalyzers[side][module]->SetADCOverUnderflowValues(HGOverflowADC[side][module], HGUnderflowADC[side][module], LGOverflowADC[side][module]);
408  }
409  }
410 }
411 
412 void ZDCDataAnalyzer::SetCutValues(const ZDCModuleFloatArray& chisqDivAmpCutHG, const ZDCModuleFloatArray& chisqDivAmpCutLG,
413  const ZDCModuleFloatArray& deltaT0MinHG, const ZDCModuleFloatArray& deltaT0MaxHG,
414  const ZDCModuleFloatArray& deltaT0MinLG, const ZDCModuleFloatArray& deltaT0MaxLG)
415 {
416  for (size_t side : {0, 1}) {
417  for (size_t module : {0, 1, 2, 3}) {
418  m_moduleAnalyzers[side][module]->SetCutValues(chisqDivAmpCutHG[side][module], chisqDivAmpCutLG[side][module],
419  deltaT0MinHG[side][module], deltaT0MaxHG[side][module],
420  deltaT0MinLG[side][module], deltaT0MaxLG[side][module]);
421  }
422  }
423 }
424 
426  const std::array<std::array<std::vector<float>, 4>, 2>& HGParamArr,
427  const std::array<std::array<std::vector<float>, 4>, 2>& LGParamArr)
428 {
429  for (size_t side : {0, 1}) {
430  for (size_t module : {0, 1, 2, 3}) {
431  m_moduleAnalyzers[side][module]->SetTimingCorrParams(mode, refADC, refScale,
432  HGParamArr.at(side).at(module), LGParamArr.at(side).at(module));
433  }
434  }
435 
436 }
437 
438 void ZDCDataAnalyzer::SetNonlinCorrParams(float refADC, float refScale,
439  const std::array<std::array<std::vector<float>, 4>, 2>& HGNonlinCorrParams,
440  const std::array<std::array<std::vector<float>, 4>, 2>& LGNonlinCorrParams)
441 {
442  for (size_t side : {0, 1}) {
443  for (size_t module : {0, 1, 2, 3}) {
444  m_moduleAnalyzers[side][module]->SetNonlinCorrParams(refADC, refScale,
445  HGNonlinCorrParams[side][module],
446  LGNonlinCorrParams[side][module]);
447  }
448  }
449 }
450 
451 void ZDCDataAnalyzer::SetNLcalibParams(std::array< std::array< std::array<float,6>, 3>, 2>& nlcalibParams)
452 {
453  for (size_t side: {0,1})
454  {
455  for (size_t module: {0,1,2})
456  {
457  for (size_t val: {0,1,2,3,4,5})
458  {
459  m_NLcalibFactors[side][module][val] = nlcalibParams[side][module][val];
460  }
461  }
462  }
463  m_haveNLcalib = true;
464 }
465 
466 void ZDCDataAnalyzer::enableFADCCorrections(bool correctPerSample,
467  std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& corrHistHG,
468  std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& corrHistLG)
469 {
470  if (correctPerSample)
471  (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer::enabling FADC Corrections per sample");
472  else
473  (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer::enabling FADC Corrections per amplitude");
474 
475  for (size_t side : {0, 1}) {
476  for (size_t module : {0, 1, 2, 3}) {
477  m_moduleAnalyzers[side][module]->enableFADCCorrections(correctPerSample, corrHistHG[side][module], corrHistLG[side][module]);
478  }
479  }
480 }
481 
483 {
484  for (size_t side : {0, 1}) {
485  for (size_t module : {0, 1, 2, 3}) {
486  m_moduleAnalyzers[side][module]->disableFADCCorrections();
487  }
488  }
489 }
490 
491 void ZDCDataAnalyzer::enableTimeSigCut(bool AND, float sigCut, const std::string& TF1String,
492  const std::array<std::array<std::vector<double>, 4>, 2>& parsHGArr,
493  const std::array<std::array<std::vector<double>, 4>, 2>& parsLGArr)
494 {
495  for (size_t side : {0, 1}) {
496  for (size_t module : {0, 1, 2, 3}) {
497  m_moduleAnalyzers[side][module]->enableTimeSigCut(AND, sigCut, TF1String, parsHGArr[side][module], parsLGArr[side][module]);
498  }
499  }
500 }
501 
503 {
504  (*m_msgFunc_p)(ZDCMsg::Verbose, ("Starting new event, event index = " + std::to_string(m_eventCount)));
505 
506  // By default we perform quiet pulse fits
507  //
508  /*
509  if ((*m_msgFunc_p)(ZDCMsg::Verbose, "")) {
510  invokeAll([](ZDCPulseAnalyzer* pa){pa->setQuietFits();});
511  }
512  else {
513  invokeAll([](ZDCPulseAnalyzer* pa){pa->setQuietFits();});
514  }
515  */
516 
517  // See if we have to load up new calibrations
518  //
519  if (lumiBlock != m_currentLB) {
520  (*m_msgFunc_p)(ZDCMsg::Verbose, ("Starting new luminosity block " + std::to_string(lumiBlock)));
521 
522  if (m_haveECalib) {
523  (*m_msgFunc_p)(ZDCMsg::Verbose, ("Loading energy calibrations for event " + std::to_string(m_eventCount) + ", lumi block " +
525 
526  for (size_t side : {0, 1}) {
527  for (size_t module : {0, 1, 2, 3}) {
528  float splineLBMin = m_LBDepEcalibSplines[side][module]->GetXmin();
529  float splineLBMax = m_LBDepEcalibSplines[side][module]->GetXmax();
530 
531  if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
533  }
534  else if (lumiBlock < splineLBMin) {
536  }
537  else {
539  }
540  }
541  }
542  } // end of if (_haveEcalib) {
543 
544  if (m_haveT0Calib) {
545  (*m_msgFunc_p)(ZDCMsg::Verbose, ("Loading timing calibrations for event " + std::to_string(m_eventCount) + ", lumi block " + std::to_string(lumiBlock)));
546 
547  for (size_t side : {0, 1}) {
548  for (size_t module : {0, 1, 2, 3}) {
549  float splineLBMin = m_T0HGOffsetSplines[side][module]->GetXmin();
550  float splineLBMax = m_T0HGOffsetSplines[side][module]->GetXmax();
551 
552  if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
555  }
556  else if (lumiBlock < splineLBMin) {
559  }
560  else {
563  }
564  }
565  }
566  } // end of if (m_haveT0Calib)
567  }
568 
569  // Initialize transient results
570  //
571  for (size_t side : {0, 1}) {
572  for (size_t module : {0, 1, 2, 3}) {
573  m_dataLoaded[side][module] = false;
574  m_moduleStatus[side][module] = 0;
576  m_calibTime[side][module] = 0;
577  // _moduleFail[side][module] = false;
578  }
579 
580  m_moduleSum[side] = 0;
581  m_moduleSumErrSq[side] = 0;
584 
585  m_calibModuleSum[side] = 0;
588 
592 
593  m_averageTime[side] = 0;
594  m_fail[side] = false;
595  }
596 
597  m_moduleMask = 0;
599 }
600 
601 void ZDCDataAnalyzer::LoadAndAnalyzeData(size_t side, size_t module, const std::vector<float>& HGSamples, const std::vector<float>& LGSamples)
602 {
603 
604  // We immediately return if this module is disabled
605  //
606  if (!m_moduleEnabled[side][module]) {
607  (*m_msgFunc_p)(ZDCMsg::Verbose, ("Skipping analysis of disabled module for event index " + std::to_string(m_eventCount) + ", side, module = " + std::to_string(side) + ", " + std::to_string(module)));
608 
609  return;
610  }
611 
612  (*m_msgFunc_p)(ZDCMsg::Verbose, ("/n Loading data for event index " + std::to_string(m_eventCount) + ", side, module = " + std::to_string(side) + ", " + std::to_string(module)));
613 
614  ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
615  pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples);
616  m_dataLoaded[side][module] = true;
617 
618  if (pulseAna_p->failed()) {
619  (*m_msgFunc_p)(ZDCMsg::Debug, ("ZDCPulseAnalyzer::LoadData() returned fail for event " + std::to_string(m_eventCount) + ", side, module = " + std::to_string(side) + ", " + std::to_string(module)));
620 
621  m_fail[side] = true;
622  }
623 
624  m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
625 }
626 
627 void ZDCDataAnalyzer::LoadAndAnalyzeData(size_t side, size_t module, const std::vector<float>& HGSamples, const std::vector<float>& LGSamples,
628  const std::vector<float>& HGSamplesDelayed, const std::vector<float>& LGSamplesDelayed)
629 {
630  // We immediately return if this module is disabled
631  //
632  if (!m_moduleEnabled[side][module]) {
633  (*m_msgFunc_p)(ZDCMsg::Debug, ("Skipping analysis of disabled mofule for event index " + std::to_string(m_eventCount) + ", side, module = " + std::to_string(side) + ", " + std::to_string(module)));
634 
635  return;
636  }
637 
638  if (m_delayedOrder[side][module] == 0) {
639  (*m_msgFunc_p)(ZDCMsg::Error, ("Handling of delayed pulses not enabled, on side, module = " + std::to_string(side) + ", " + std::to_string(module) + ", skipping processing for event index " + std::to_string(m_eventCount)));
640  return;
641  }
642 
643  (*m_msgFunc_p)(ZDCMsg::Verbose, ("Loading undelayed and delayed data for event index " + std::to_string(m_eventCount) + ", side, module = " + std::to_string(side) + ", " + std::to_string(module)));
644 
645  ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
646  if (m_delayedOrder[side][module] > 0) {
647  pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples, HGSamplesDelayed, LGSamplesDelayed);
648  }
649  else {
650  pulseAna_p->LoadAndAnalyzeData(HGSamplesDelayed, LGSamplesDelayed, HGSamples, LGSamples);
651  }
652  m_dataLoaded[side][module] = true;
653 
654  if (pulseAna_p->failed()) {
655  (*m_msgFunc_p)(ZDCMsg::Debug, ("ZDCPulseAnalyzer::LoadData() returned fail for event " + std::to_string(m_eventCount) + ", side, module = " + std::to_string(side) + ", " + std::to_string(module)));
656 
657  m_fail[side] = true;
658  }
659 
660  m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
661 }
662 
664 {
665  // First make sure that all data is loaded. while we're at it, count how many modules on each side have a pulse
666  //
667  unsigned int sideNPulsesMod[2] = {0, 0};
668 
669  for (size_t side : {0, 1}) {
670  for (size_t module : {0, 1, 2, 3}) {
671  if (!m_dataLoaded[side][module] && m_moduleEnabled[side][module]) {return false;}
672  if (m_moduleAnalyzers[side][module]->armSumInclude()) {sideNPulsesMod[side]++;}
673  }
674  }
675 
676  // Are we doing a repass? If so, reanalyze modules for which no pulse was found the first time
677  // as long as we have one module with a pulse on the given side
678  //
679  if (m_repassEnabled) {
680  for (size_t side : {0, 1}) {
681  if (sideNPulsesMod[side] == 0) continue;
682 
683  for (size_t module : {0, 1, 2, 3}) {
684  if (!m_moduleEnabled[side][module]) continue;
685 
686  ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
687 
688  // If this module had no pulse the first time, reanalyze it (with a lower 2nd derivative threshold)
689  //
690  if (!pulseAna_p->havePulse()) {
691  (*m_msgFunc_p)(ZDCMsg::Debug, ("ZDCPulseAnalyzer:: performing a repass on data for side, module = " + std::to_string(side) + ", " + std::to_string(module)));
692  pulseAna_p->ReanalyzeData();
693  m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
694  }
695  }
696  }
697  }
698 
699  // Now sum up amplitudes etc
700  //
701  for (size_t side : {0, 1}) {
702  float tempFraction = 1.0;
703  double sumAmpTimesBkgdFrac = 0.0;
704  double sumCalibAmpTimesBkgdFrac = 0.0;
705 
706  for (size_t module : {0, 1, 2, 3}) {
707  ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
708 
709  if (pulseAna_p->armSumInclude()) {
710  int moduleMaskBit = 4 * side + module;
711  m_moduleMask |= 1 << moduleMaskBit;
712 
713  float amplitude = pulseAna_p->GetAmplitude();
714  float ampError = pulseAna_p->GetAmpError();
715  float bkgdFraction = pulseAna_p->GetBkgdMaxFraction();
716 
718 
719  float calibAmpError = ampError * m_currentECalibCoeff[side][module];
720 
721  float timeCalib = pulseAna_p->GetT0Corr();
722  if (pulseAna_p->useLowGain()) {timeCalib -= m_currentT0OffsetsLG[side][module];}
723  else {timeCalib -= m_currentT0OffsetsHG[side][module];}
724 
725  m_calibTime[side][module] = timeCalib;
726 
727  m_moduleSum[side] += amplitude;
728  m_moduleSumErrSq[side] += ampError * ampError;
729  sumAmpTimesBkgdFrac += amplitude*bkgdFraction;
730 
731  m_moduleSumPreSample[side] += pulseAna_p->GetPreSampleAmp();
732 
734  m_calibModuleSumErrSq[side] += calibAmpError * calibAmpError;
735 
737  sumCalibAmpTimesBkgdFrac += amplitude*bkgdFraction;
738  }
739 
740  // subtract the fraction of LGOverflow events if we have fraction available (<0 means unavailable)
741  if (pulseAna_p->LGOverflow() && m_moduleAmpFractionLG[side][module] > 0) {tempFraction -= m_moduleAmpFractionLG[side][module];}
742  }
743 
744  {
746  if (m_moduleSum[side] > 0) m_moduleSumBkgdFrac[side] = sumAmpTimesBkgdFrac/m_moduleSum[side];
747  else m_moduleSumBkgdFrac[side] = 0;
748  }
749 
750  if (m_calibModuleSum[side] > 1e-6) {
752  m_calibModSumBkgdFrac[side] = sumCalibAmpTimesBkgdFrac/m_calibModuleSum[side];
753  }
754  else {
755  m_averageTime[side] = 0;
757  }
758 
759  if (tempFraction < 1.0) {m_moduleSum[side] /= tempFraction;}
760  }
761 
763 
764  m_eventCount++;
765  return true;
766 }
767 
769 {
770  if (!m_haveNLcalib) return;
771 
772  for (int iside:{0,1})
773  {
774  if (m_calibModuleSum[iside]>0.)
775  {
776  float fEM = m_calibAmplitude[iside][0] / m_calibModuleSum[iside];
777  float fHad1 = m_calibAmplitude[iside][1] / m_calibModuleSum[iside];
778  float fHad2 = m_calibAmplitude[iside][2] / m_calibModuleSum[iside];
779 
780  float EMCorrFact = 0;
781 
782  for (size_t i=0;i<m_NLcalibFactors[iside][0].size()-1;i++)
783  {
784  EMCorrFact += std::pow(fEM - m_NLcalibFactors[iside][0][0],i)*m_NLcalibFactors[iside][0][i+1];
785  }
786 
787  float Had1CorrFact = 0;
788  for (size_t i=0;i<m_NLcalibFactors[iside][1].size()-1;i++)
789  {
790  Had1CorrFact += std::pow(fHad1 - m_NLcalibFactors[iside][1][0],i)*m_NLcalibFactors[iside][1][i+1];
791  }
792 
793  float Had2CorrFact = 0;
794  for (size_t i=0;i<m_NLcalibFactors[iside][2].size()-1;i++)
795  {
796  Had2CorrFact += std::pow(fHad2 - m_NLcalibFactors[iside][2][0],i)*m_NLcalibFactors[iside][2][i+1];
797  }
798 
799  std::ostringstream ostr;
800  ostr << "ZDCDataAnalyzer: " << m_calibModuleSum[iside] << " " << EMCorrFact << " " << Had1CorrFact << " " << Had2CorrFact << std::endl;
801  (*m_msgFunc_p)(ZDCMsg::Debug,ostr.str().c_str());
802 
803  float ECorrEM = m_calibModuleSum[iside]/EMCorrFact;
804  float ECorrEMHad1 = ECorrEM/Had1CorrFact;
805  float ECorrEMHad1Had2 = ECorrEMHad1/Had2CorrFact;
806 
807 
808  m_NLcalibModuleSum[iside] = ECorrEMHad1Had2;
809  m_NLcalibModuleSumErrSq[iside] = 0.; // no error for now
810  }
811  else
812  {
813  (*m_msgFunc_p)(ZDCMsg::Info,"SUM = 0!!");
814  m_NLcalibModuleSum[iside] = 0.;
815  m_NLcalibModuleSumErrSq[iside] = 0.; // no error for now
816  }
817  }
818 
819 }
ZDCDataAnalyzer::m_T0LGOffsetSplines
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0LGOffsetSplines
Definition: ZDCDataAnalyzer.h:53
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
ZDCDataAnalyzer::m_calibAmplitude
std::array< std::array< float, 4 >, 2 > m_calibAmplitude
Definition: ZDCDataAnalyzer.h:67
ZDCDataAnalyzer::m_dataLoaded
std::array< std::array< bool, 4 >, 2 > m_dataLoaded
Definition: ZDCDataAnalyzer.h:62
ZDCDataAnalyzer::m_moduleMask
unsigned int m_moduleMask
Definition: ZDCDataAnalyzer.h:64
get_generator_info.result
result
Definition: get_generator_info.py:21
ZDCDataAnalyzer::enableTimeSigCut
void enableTimeSigCut(bool AND, float sigCut, const std::string &TF1String, const std::array< std::array< std::vector< double >, 4 >, 2 > &parsHGArr, const std::array< std::array< std::vector< double >, 4 >, 2 > &parsLGArr)
Definition: ZDCDataAnalyzer.cxx:491
ZDCPulseAnalyzer::ReanalyzeData
bool ReanalyzeData()
Definition: ZDCPulseAnalyzer.cxx:835
ZDCDataAnalyzer::m_moduleAnalyzers
std::array< std::array< std::unique_ptr< ZDCPulseAnalyzer >, 4 >, 2 > m_moduleAnalyzers
Definition: ZDCDataAnalyzer.h:42
ZDCPulseAnalyzer.h
ZDCDataAnalyzer::m_moduleEnabled
ZDCModuleBoolArray m_moduleEnabled
Definition: ZDCDataAnalyzer.h:41
ZDCDataAnalyzer::ZDCModuleFloatArray
std::array< std::array< float, 4 >, 2 > ZDCModuleFloatArray
Definition: ZDCDataAnalyzer.h:25
ZDCPulseAnalyzer::GetAmpError
float GetAmpError() const
Definition: ZDCPulseAnalyzer.h:654
ZDCPulseAnalyzer::LGOverflow
bool LGOverflow() const
Definition: ZDCPulseAnalyzer.h:613
ZDCPulseAnalyzer::GetStatusMask
unsigned int GetStatusMask() const
Definition: ZDCPulseAnalyzer.cxx:2251
ZDCDataAnalyzer::m_repassEnabled
bool m_repassEnabled
Definition: ZDCDataAnalyzer.h:37
ZDCDataAnalyzer::m_moduleSum
std::array< float, 2 > m_moduleSum
Definition: ZDCDataAnalyzer.h:70
ZDCDataAnalyzer::m_T0HGOffsetSplines
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0HGOffsetSplines
Definition: ZDCDataAnalyzer.h:52
ZDCDataAnalyzer::ZDCModuleIntArray
std::array< std::array< int, 4 >, 2 > ZDCModuleIntArray
Definition: ZDCDataAnalyzer.h:27
Root::AND
@ AND
Definition: TGRLCollection.h:32
ZDCDataAnalyzer::setMinimumSignificance
void setMinimumSignificance(float sigMinHG, float sigMinLG)
Definition: ZDCDataAnalyzer.cxx:297
ZDCPulseAnalyzer::useLowGain
bool useLowGain() const
Definition: ZDCPulseAnalyzer.h:607
ZDCPulseAnalyzer::armSumInclude
bool armSumInclude() const
Definition: ZDCPulseAnalyzer.h:627
ZDCPulseAnalyzer
Definition: ZDCPulseAnalyzer.h:24
ZDCPulseAnalyzer::GetAmplitude
float GetAmplitude() const
Definition: ZDCPulseAnalyzer.h:653
ZDCDataAnalyzer::m_NLcalibModuleSum
std::array< float, 2 > m_NLcalibModuleSum
Definition: ZDCDataAnalyzer.h:82
ZDCJSONConfig::JSONParamList
std::map< std::string, JSONParamDescr > JSONParamList
Definition: ZDCJSONConfig.h:20
MuonR4::to_string
std::string to_string(const SectorProjector proj)
Definition: MsTrackSeeder.cxx:66
ZDCMsg::Info
@ Info
Definition: ZDCMsg.h:20
ZDCDataAnalyzer::m_haveNLcalib
bool m_haveNLcalib
Definition: ZDCDataAnalyzer.h:79
ZDCDataAnalyzer::m_msgFunc_p
ZDCMsg::MessageFunctionPtr m_msgFunc_p
Definition: ZDCDataAnalyzer.h:33
ZDCPulseAnalyzer::GetT0Corr
float GetT0Corr() const
Definition: ZDCPulseAnalyzer.h:640
ZDCDataAnalyzer::JSON
ZDCJSONConfig::JSON JSON
Definition: ZDCDataAnalyzer.h:29
ZDCDataAnalyzer::set2ndDerivStep
void set2ndDerivStep(size_t step)
Definition: ZDCDataAnalyzer.cxx:306
ZDCDataAnalyzer::SetCutValues
void SetCutValues(const ZDCModuleFloatArray &chisqDivAmpCutHG, const ZDCModuleFloatArray &chisqDivAmpCutLG, const ZDCModuleFloatArray &deltaT0MinHG, const ZDCModuleFloatArray &deltaT0MaxHG, const ZDCModuleFloatArray &deltaT0MinLG, const ZDCModuleFloatArray &deltaT0MaxLG)
Definition: ZDCDataAnalyzer.cxx:412
TRT::Hit::side
@ side
Definition: HitInfo.h:83
ZDCPulseAnalyzer::LoadAndAnalyzeData
bool LoadAndAnalyzeData(const std::vector< float > &ADCSamplesHG, const std::vector< float > &ADCSamplesLG)
Definition: ZDCPulseAnalyzer.cxx:758
ZDCDataAnalyzer::m_calibTime
std::array< std::array< float, 4 >, 2 > m_calibTime
Definition: ZDCDataAnalyzer.h:68
ZDCDataAnalyzer::enableFADCCorrections
void enableFADCCorrections(bool correctPerSample, std::array< std::array< std::unique_ptr< const TH1 >, 4 >, 2 > &correHistHG, std::array< std::array< std::unique_ptr< const TH1 >, 4 >, 2 > &correHistLG)
Definition: ZDCDataAnalyzer.cxx:466
ZDCDataAnalyzer.h
python.PyAthena.module
module
Definition: PyAthena.py:131
ZDCDataAnalyzer::m_haveECalib
bool m_haveECalib
Definition: ZDCDataAnalyzer.h:49
ZDCMsg::Verbose
@ Verbose
Definition: ZDCMsg.h:18
ZDCDataAnalyzer::m_eventCount
int m_eventCount
Definition: ZDCDataAnalyzer.h:44
ZDCDataAnalyzer::m_moduleSumBkgdFrac
std::array< float, 2 > m_moduleSumBkgdFrac
Definition: ZDCDataAnalyzer.h:73
ZDCDataAnalyzer::m_haveT0Calib
bool m_haveT0Calib
Definition: ZDCDataAnalyzer.h:50
ZDCDataAnalyzer::LoadAndAnalyzeData
void LoadAndAnalyzeData(size_t side, size_t module, const std::vector< float > &HGSamples, const std::vector< float > &LGSamples)
Definition: ZDCDataAnalyzer.cxx:601
ZDCDataAnalyzer::m_fail
std::array< bool, 2 > m_fail
Definition: ZDCDataAnalyzer.h:87
ZDCDataAnalyzer::m_calibModuleSumErrSq
std::array< float, 2 > m_calibModuleSumErrSq
Definition: ZDCDataAnalyzer.h:76
ZDCDataAnalyzer::SetNoiseSigmas
void SetNoiseSigmas(const ZDCModuleFloatArray &noiseSigmasHG, const ZDCModuleFloatArray &noiseSigmasLG)
Definition: ZDCDataAnalyzer.cxx:364
ZDCDataAnalyzer::SetNLcalibParams
void SetNLcalibParams(std::array< std::array< std::array< float, 6 >, 3 >, 2 > &nlcalibParams)
Definition: ZDCDataAnalyzer.cxx:451
ZDCDataAnalyzer::m_averageTime
std::array< float, 2 > m_averageTime
Definition: ZDCDataAnalyzer.h:86
ZDCDataAnalyzer::m_dataAnalyzerConfig
std::unique_ptr< ZDCJSONConfig > m_dataAnalyzerConfig
Definition: ZDCDataAnalyzer.h:34
lumiFormat.i
int i
Definition: lumiFormat.py:85
ZDCDataAnalyzer::m_pedestals
ZDCModuleFloatArray m_pedestals
Definition: ZDCDataAnalyzer.h:47
ZDCDataAnalyzer::SetADCOverUnderflowValues
void SetADCOverUnderflowValues(const ZDCModuleFloatArray &HGOverflowADC, const ZDCModuleFloatArray &HGUnderflowADC, const ZDCModuleFloatArray &LGOverflowADC)
Definition: ZDCDataAnalyzer.cxx:402
ZDCDataAnalyzer::m_currentLB
int m_currentLB
Definition: ZDCDataAnalyzer.h:57
ZDCDataAnalyzer::m_moduleSumPreSample
std::array< float, 2 > m_moduleSumPreSample
Definition: ZDCDataAnalyzer.h:72
Preparation.mode
mode
Definition: Preparation.py:107
ZDCPulseAnalyzer::TimingCorrMode
TimingCorrMode
Definition: ZDCPulseAnalyzer.h:62
ZDCDataAnalyzer::m_calibModuleSum
std::array< float, 2 > m_calibModuleSum
Definition: ZDCDataAnalyzer.h:75
ZDCDataAnalyzer::SetFitMinMaxAmpValues
void SetFitMinMaxAmpValues(const ZDCModuleFloatArray &minAmpHG, const ZDCModuleFloatArray &minAmpLG, const ZDCModuleFloatArray &maxAmpHG, const ZDCModuleFloatArray &maxAmpLG)
Definition: ZDCDataAnalyzer.cxx:381
ZDCDataAnalyzer::SetTauT0Values
void SetTauT0Values(const ZDCModuleBoolArray &fxiTau1, const ZDCModuleBoolArray &fxiTau2, const ZDCModuleFloatArray &tau1, const ZDCModuleFloatArray &tau2, const ZDCModuleFloatArray &t0HG, const ZDCModuleFloatArray &t0LG)
Definition: ZDCDataAnalyzer.cxx:352
ZDCDataAnalyzer::m_NLcalibFactors
std::array< std::array< std::array< float, 6 >, 3 >, 2 > m_NLcalibFactors
Definition: ZDCDataAnalyzer.h:80
ZDCPulseAnalyzer::JSONConfigParams
static const ZDCJSONConfig::JSONParamList JSONConfigParams
Definition: ZDCPulseAnalyzer.h:72
ZDCDataAnalyzer::enableDelayed
void enableDelayed(float deltaT, const ZDCModuleFloatArray &undelayedDelayedPedestalDiff)
Definition: ZDCDataAnalyzer.cxx:224
ZDCDataAnalyzer::m_calibModSumBkgdFrac
std::array< float, 2 > m_calibModSumBkgdFrac
Definition: ZDCDataAnalyzer.h:77
ZDCDataAnalyzer::init
void init()
Definition: ZDCDataAnalyzer.cxx:170
lumiFormat.array
array
Definition: lumiFormat.py:91
ZDCMsg::Error
@ Error
Definition: ZDCMsg.h:22
tolerance
Definition: suep_shower.h:17
ZDCDataAnalyzer::m_NLcalibModSumBkgdFrac
std::array< float, 2 > m_NLcalibModSumBkgdFrac
Definition: ZDCDataAnalyzer.h:84
trapping_fp.h
Tell the compiler to optimize assuming that FP may trap.
ZDCDataAnalyzer::enablePostExclusion
void enablePostExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray &HGADCThresh, const ZDCModuleIntArray &LGADCThresh)
Definition: ZDCDataAnalyzer.cxx:268
ZDCDataAnalyzer::ZDCDataAnalyzer
ZDCDataAnalyzer(ZDCMsg::MessageFunctionPtr messageFunc_p, int nSample, float deltaTSample, size_t preSampleIdx, std::string fitFunction, const ZDCModuleIntArray &peak2ndDerivMinSamples, const ZDCModuleFloatArray &peak2ndDerivMinThresholdsHG, const ZDCModuleFloatArray &peak2ndDerivMinThresholdsLG, unsigned int LGMode=ZDCPulseAnalyzer::LGModeNormal)
Definition: ZDCDataAnalyzer.cxx:19
ZDCDataAnalyzer::m_moduleSumErrSq
std::array< float, 2 > m_moduleSumErrSq
Definition: ZDCDataAnalyzer.h:71
ZDCMsg::MessageFunctionPtr
std::shared_ptr< MessageFunction > MessageFunctionPtr
Definition: ZDCMsg.h:14
ZDCDataAnalyzer::m_currentT0OffsetsHG
ZDCModuleFloatArray m_currentT0OffsetsHG
Definition: ZDCDataAnalyzer.h:59
ZDCPulseAnalyzer::failed
bool failed() const
Definition: ZDCPulseAnalyzer.h:608
ZDCDataAnalyzer::disableFADCCorrections
void disableFADCCorrections()
Definition: ZDCDataAnalyzer.cxx:482
ZDCDataAnalyzer::enablePreExclusion
void enablePreExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray &HGADCThresh, const ZDCModuleIntArray &LGADCThresh)
Definition: ZDCDataAnalyzer.cxx:250
ZDCDataAnalyzer::SetNonlinCorrParams
void SetNonlinCorrParams(float refADC, float refScale, const std::array< std::array< std::vector< float >, 4 >, 2 > &HGNonlinCorrParams, const std::array< std::array< std::vector< float >, 4 >, 2 > &LHGNonlinCorrParams)
Definition: ZDCDataAnalyzer.cxx:438
ZDCDataAnalyzer::m_moduleStatus
std::array< std::array< unsigned int, 4 >, 2 > m_moduleStatus
Definition: ZDCDataAnalyzer.h:66
ZDCDataAnalyzer::DoNLcalibModuleSum
void DoNLcalibModuleSum()
Definition: ZDCDataAnalyzer.cxx:768
CXXUTILS_TRAPPING_FP
CXXUTILS_TRAPPING_FP
Definition: SegmentLineFitter.cxx:8
ZDCPulseAnalyzer::GetBkgdMaxFraction
float GetBkgdMaxFraction() const
Definition: ZDCPulseAnalyzer.h:732
ZDCDataAnalyzer::disableModule
bool disableModule(size_t side, size_t module)
Definition: ZDCDataAnalyzer.cxx:207
ZDCDataAnalyzer::FinishEvent
bool FinishEvent()
Definition: ZDCDataAnalyzer.cxx:663
ZDCDataAnalyzer::ZDCModuleBoolArray
std::array< std::array< bool, 4 >, 2 > ZDCModuleBoolArray
Definition: ZDCDataAnalyzer.h:26
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
ZDCDataAnalyzer::m_currentECalibCoeff
ZDCModuleFloatArray m_currentECalibCoeff
Definition: ZDCDataAnalyzer.h:58
ZDCDataAnalyzer::m_NLcalibModuleSumErrSq
std::array< float, 2 > m_NLcalibModuleSumErrSq
Definition: ZDCDataAnalyzer.h:83
ZDCDataAnalyzer::m_currentT0OffsetsLG
ZDCModuleFloatArray m_currentT0OffsetsLG
Definition: ZDCDataAnalyzer.h:60
ZDCDataAnalyzer::getPulseAnalyzerGlobalPar
bool getPulseAnalyzerGlobalPar(const std::string &key, T &value)
Definition: ZDCDataAnalyzer.h:106
ZDCDataAnalyzer::m_LBDepEcalibSplines
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_LBDepEcalibSplines
Definition: ZDCDataAnalyzer.h:51
ZDCDataAnalyzer::SetFitTimeMax
void SetFitTimeMax(float tmax)
Definition: ZDCDataAnalyzer.cxx:342
LArCellBinning.step
step
Definition: LArCellBinning.py:158
ZDCMsg::Debug
@ Debug
Definition: ZDCMsg.h:19
ZDCMsg::Fatal
@ Fatal
Definition: ZDCMsg.h:23
ZDCDataAnalyzer::enableRepass
void enableRepass(const ZDCModuleFloatArray &peak2ndDerivMinRepassHG, const ZDCModuleFloatArray &peak2ndDerivMinRepassLG)
Definition: ZDCDataAnalyzer.cxx:287
ZDCDataAnalyzer::SetPeak2ndDerivMinTolerances
void SetPeak2ndDerivMinTolerances(size_t tolerance)
Definition: ZDCDataAnalyzer.cxx:333
ZDCDataAnalyzer::m_HGGains
ZDCModuleFloatArray m_HGGains
Definition: ZDCDataAnalyzer.h:46
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:328
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
ZDCDataAnalyzer::SetGainFactorsHGLG
void SetGainFactorsHGLG(float gainFactorHG, float gainFactorLG)
Definition: ZDCDataAnalyzer.cxx:315
ZDCDataAnalyzer::SetTimingCorrParams
void SetTimingCorrParams(ZDCPulseAnalyzer::TimingCorrMode mode, float refADC, float refScale, const std::array< std::array< std::vector< float >, 4 >, 2 > &HGParamArr, const std::array< std::array< std::vector< float >, 4 >, 2 > &LGParamArr)
Definition: ZDCDataAnalyzer.cxx:425
ZDCPulseAnalyzer::havePulse
bool havePulse() const
Definition: ZDCPulseAnalyzer.h:606
ZDCDataAnalyzer::StartEvent
void StartEvent(int lumiBlock)
Definition: ZDCDataAnalyzer.cxx:502
ZDCDataAnalyzer::m_pulseAnalyzerConfig
std::unique_ptr< ZDCJSONConfig > m_pulseAnalyzerConfig
Definition: ZDCDataAnalyzer.h:35
ZDCDataAnalyzer::JSONConfigParams
static const ZDCJSONConfig::JSONParamList JSONConfigParams
Definition: ZDCDataAnalyzer.h:30
ZDCDataAnalyzer::m_moduleAmpFractionLG
std::array< std::array< float, 4 >, 2 > m_moduleAmpFractionLG
Definition: ZDCDataAnalyzer.h:89
ZDCDataAnalyzer::m_delayedOrder
std::array< std::array< int, 4 >, 2 > m_delayedOrder
Definition: ZDCDataAnalyzer.h:39
ZDCPulseAnalyzer::GetPreSampleAmp
float GetPreSampleAmp() const
Definition: ZDCPulseAnalyzer.h:731
ZDCDataAnalyzer::SetModuleAmpFractionLG
void SetModuleAmpFractionLG(const ZDCDataAnalyzer::ZDCModuleFloatArray &moduleAmpFractionLG)
Definition: ZDCDataAnalyzer.cxx:373