ATLAS Offline Software
HTcalculator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
5 
6 #include <cmath>
7 #include <iostream>
8 
10 #include "GaudiKernel/MsgStream.h"
11 
12 float HTcalculator::Limit(float prob) {
13  if (prob > 1.0) {
14  return 1.0;
15  } else if (prob < 0.0) {
16  return 0.0;
17  }
18  return prob;
19 }
20 
21 /*****************************************************************************\
22 |*%%% Get The Pobability of this hit being a Hight THreshold hit %%%%%%%%%%*|
23 \*****************************************************************************/
24 
25 // TrtPart: 0 = Barrel, 1 = EndcapA, 2 = EndcapB
26 // GasType: 0 = Xenon, 1 = Argon, 2 = Krypton
27 float HTcalculator::getProbHT(float pTrk, Trk::ParticleHypothesis hypothesis,
28  int TrtPart, int GasType, int StrawLayer,
29  float ZR, float rTrkWire, float Occupancy,
30  bool hasTrackPars = true) const {
31 
32  float pHT = 1.0; // Default/unit value, which ensures that unusable hits does
33  // not change probability product!
34  // Make sure that the information passed makes sense:
35  // --------------------------------------------------
36  if (pTrk < 250.0 || pTrk > 7000000.0)
37  return pHT;
38 
39  if (TrtPart < 0 || TrtPart > 2)
40  return pHT;
41  if (GasType < 0 || GasType > 2)
42  return pHT;
43 
44  if ((TrtPart == 0 && (StrawLayer < 0 || StrawLayer > 72)) ||
45  (TrtPart == 1 && (StrawLayer < 0 || StrawLayer > 95)) ||
46  (TrtPart == 2 && (StrawLayer < 0 || StrawLayer > 63)))
47  return pHT;
48 
49  if ((TrtPart == 0 && (ZR > 720.0)) ||
50  (TrtPart > 0 && (ZR < 630.0 || ZR > 1030.0)))
51  return pHT;
52 
53  if (rTrkWire < 0.0 || rTrkWire > 2.2)
54  return pHT;
55 
56  // Calculate the High Threshold probability, pHT:
57  // ----------------------------------------------
58  float correctionSL, correctionZR, correctionTW;
59  float mass = Trk::ParticleMasses::mass[hypothesis];
60  float correctionPGOG = -999.;
61  if (GasType == 1 && TrtPart == 2) {
62  // estimate EB argon straws as follows:
63  // estimate pHT using EA argon straws (GasType=1, TrtPart=1)
64  // estimate correction factors using EB xenon straws (GasType=0, TrtPart=2)
65  correctionPGOG = pHTvsPGOG(1, GasType, pTrk, mass, Occupancy);
66  GasType = 0;
67  } else {
68  correctionPGOG = pHTvsPGOG(TrtPart, GasType, pTrk, mass, Occupancy);
69  }
70 
71  // Jared -- Change this ugly check, use hypothesis!
72  if (fabs(mass - 0.511) < 0.1) { // Electron! OK, ugly way but works...
73  correctionSL = m_CpHT_B_Zee_SL_new[GasType][TrtPart].GetValue(StrawLayer);
74  correctionZR = m_CpHT_B_Zee_ZR_new[GasType][TrtPart].GetValue(ZR);
75  correctionTW = m_CpHT_B_Zee_TW_new[GasType][TrtPart].GetValue(rTrkWire);
76  } else { // Non-electron!
77  correctionSL = m_CpHT_B_Zmm_SL_new[GasType][TrtPart].GetValue(StrawLayer);
78  correctionZR = m_CpHT_B_Zmm_ZR_new[GasType][TrtPart].GetValue(ZR);
79  correctionTW = m_CpHT_B_Zmm_TW_new[GasType][TrtPart].GetValue(rTrkWire);
80  }
81 
82  // Jared - In absence of track pars, no ZR or TW information -- disable
83  // correction factors
84  if (not hasTrackPars) {
85  correctionZR = 1.0;
86  correctionTW = 1.0;
87  }
88 
89  // Jared - Temporarily disable ZR corrections, reproducibility issues with
90  // calibration
91  // correctionZR = 1.0;
92 
93  return correctionPGOG * correctionSL * correctionZR * correctionTW;
94 }
95 
96 // ------------------------------------------------------------------------------------------------------------
97 // // PART, GAMMA, OCCUPANCY, and GAS dependence functions:
98 // ------------------------------------------------------------------------------------------------------------
99 // //
100 
101 float HTcalculator::pHTvsPGOG(int TrtPart, int GasType, float p, float mass,
102  float occ) const {
103 
104  const float gamma = std::sqrt(p * p + mass * mass) / mass;
105 
106  const StorePIDinfo& entry = m_par_pHTvsPGOG_new[GasType][TrtPart];
107  const auto bin0 = entry.GetBinValue(0);
108  const auto bin1 = entry.GetBinValue(1);
109  const auto bin2 = entry.GetBinValue(2);
110  const auto bin3 = entry.GetBinValue(3);
111  const auto bin4 = entry.GetBinValue(4);
112  const auto bin5 = entry.GetBinValue(5);
113  const auto bin6 = entry.GetBinValue(6);
114  const auto bin7 = entry.GetBinValue(7);
115  const auto bin8 = entry.GetBinValue(8);
116  const auto bin9 = entry.GetBinValue(9);
117 
118  // The position of the upper point of linearity varies with occupancy!
119  const double par1 = bin1 + bin6 * occ;
120  // The position of the onset varies with occupancy!
121  const double par4 = bin4 + bin7 * occ;
122 
123  const auto log10_gamma = std::log10(gamma);
124  // TR onset part (main part):
125  const double exp_term = std::exp(-(log10_gamma - par4) / bin5);
126  const double pHT_TR = bin2 + bin3 / (1.0 + exp_term);
127 
128  // dE/dx part (linear at low gamma):
129  const double exp_term0 = std::exp(-(bin0 - par4) / bin5);
130  const double alpha0 = bin2 + bin3 / (1.0 + exp_term0);
131  const double beta0 =
132  bin3 / ((1.0 + exp_term0) * (1.0 + exp_term0)) * exp_term0 / bin5;
133  const double pHT_dEdx = alpha0 + beta0 * (log10_gamma - bin0);
134 
135  // High-gamma part (linear at high gamma):
136  const double exp_term1 = std::exp(-(par1 - par4) / bin5);
137  const double alpha1 = bin2 + bin3 / (1.0 + exp_term1);
138  const double beta1 =
139  bin3 / ((1.0 + exp_term1) * (1.0 + exp_term1)) * exp_term1 / bin5;
140  double pHT_HG = alpha1 + beta1 * (std::log10(gamma) - par1);
141 
142  double pHT_OccZero = pHT_TR;
143  if (log10_gamma < bin0) {
144  pHT_OccZero = pHT_dEdx;
145  } else if (log10_gamma > par1) {
146  pHT_OccZero = pHT_HG;
147  }
148 
149  // The occupancy dependency is included through the Anatoli formula and a
150  // quadratic fit from the muon plateau:
151  const double DeltaOcc = bin8 * occ + bin9 * occ * occ;
152  return pHT_OccZero + (1.0 - pHT_OccZero) * DeltaOcc;
153 }
154 
156  if (channel_values->size() < 1) {
157  MsgStream log(Athena::getMessageSvc(), "HTcalculator");
158  log << MSG::WARNING << " There are no Pid channels available!!" << endmsg;
159  log << MSG::WARNING
160  << "The HTcalculator is about to be used uninitialized - Loading "
161  "default"
162  << endmsg;
164  return StatusCode::SUCCESS;
165  }
166 
167  CondAttrListVec::const_iterator first_channel = channel_values->begin();
168  CondAttrListVec::const_iterator last_channel = channel_values->end();
169 
170  for (; first_channel != last_channel; ++first_channel) {
171  switch (first_channel->first) {
172  case 0: // gamma_All_Xenon_All_Barrel
174  first_channel->second["array_value"].data<float>());
175  break;
176  case 1: // gamma_All_Xenon_All_EndcapA
178  first_channel->second["array_value"].data<float>());
179  break;
180  case 2: // gamma_All_Xenon_All_EndcapB
182  first_channel->second["array_value"].data<float>());
183  break;
184  case 3: // gamma_All_Argon_All_Barrel
186  first_channel->second["array_value"].data<float>());
187  break;
188  case 4: // gamma_All_Argon_All_EndcapA
190  first_channel->second["array_value"].data<float>());
191  break;
192  case 5: // gamma_All_Argon_All_EndcapB
194  first_channel->second["array_value"].data<float>());
195  break;
196  case 6: // gamma_All_Krypton_All_Barrel
198  first_channel->second["array_value"].data<float>());
199  break;
200  case 7: // gamma_All_Krypton_All_EndcapA
202  first_channel->second["array_value"].data<float>());
203  break;
204  case 8: // gamma_All_Krypton_All_EndcapB
206  first_channel->second["array_value"].data<float>());
207  break;
208 
209  // Xenon Corrections:
210  case 9: // SL_Zee_Xenon_Electrons_Barrel
212  first_channel->second["array_value"].data<float>());
213  break;
214  case 10: // SL_Zee_Xenon_Electrons_EndcapA
216  first_channel->second["array_value"].data<float>());
217  break;
218  case 11: // SL_Zee_Xenon_Electrons_EndcapB
220  first_channel->second["array_value"].data<float>());
221  break;
222  case 12: // ZR_Zee_Xenon_Electrons_Barrel
224  first_channel->second["array_value"].data<float>());
225  break;
226  case 13: // ZR_Zee_Xenon_Electrons_EndcapA
228  first_channel->second["array_value"].data<float>());
229  break;
230  case 14: // ZR_Zee_Xenon_Electrons_EndcapB
232  first_channel->second["array_value"].data<float>());
233  break;
234  case 15: // TW_Zee_Xenon_Electrons_Barrel
236  first_channel->second["array_value"].data<float>());
237  break;
238  case 16: // TW_Zee_Xenon_Electrons_EndcapA
240  first_channel->second["array_value"].data<float>());
241  break;
242  case 17: // TW_Zee_Xenon_Electrons_EndcapB
244  first_channel->second["array_value"].data<float>());
245  break;
246  case 18: // OR_Zee_Xenon_Electrons_Barrel
248  first_channel->second["array_value"].data<float>());
249  break;
250  case 19: // OR_Zee_Xenon_Electrons_EndcapA
252  first_channel->second["array_value"].data<float>());
253  break;
254  case 20: // OR_Zee_Xenon_Electrons_EndcapB
256  first_channel->second["array_value"].data<float>());
257  break;
258  case 21: // SL_Zmm_Xenon_NonElecs_Barrel
260  first_channel->second["array_value"].data<float>());
261  break;
262  case 22: // SL_Zmm_Xenon_NonElecs_EndcapA
264  first_channel->second["array_value"].data<float>());
265  break;
266  case 23: // SL_Zmm_Xenon_NonElecs_EndcapB
268  first_channel->second["array_value"].data<float>());
269  break;
270  case 24: // ZR_Zmm_Xenon_NonElecs_Barrel
272  first_channel->second["array_value"].data<float>());
273  break;
274  case 25: // ZR_Zmm_Xenon_NonElecs_EndcapA
276  first_channel->second["array_value"].data<float>());
277  break;
278  case 26: // ZR_Zmm_Xenon_NonElecs_EndcapB
280  first_channel->second["array_value"].data<float>());
281  break;
282  case 27: // TW_Zmm_Xenon_NonElecs_Barrel
284  first_channel->second["array_value"].data<float>());
285  break;
286  case 28: // TW_Zmm_Xenon_NonElecs_EndcapA
288  first_channel->second["array_value"].data<float>());
289  break;
290  case 29: // TW_Zmm_Xenon_NonElecs_EndcapB
292  first_channel->second["array_value"].data<float>());
293  break;
294  case 30: // OR_Zmm_Xenon_NonElecs_Barrel
296  first_channel->second["array_value"].data<float>());
297  break;
298  case 31: // OR_Zmm_Xenon_NonElecs_EndcapA
300  first_channel->second["array_value"].data<float>());
301  break;
302  case 32: // OR_Zmm_Xenon_NonElecs_EndcapB
304  first_channel->second["array_value"].data<float>());
305  break;
306 
307  // Argon Corrections:
308  case 33: // SL_Zee_Xenon_Electrons_Barrel
310  first_channel->second["array_value"].data<float>());
311  break;
312  case 34: // SL_Zee_Xenon_Electrons_EndcapA
314  first_channel->second["array_value"].data<float>());
315  break;
316  case 35: // SL_Zee_Xenon_Electrons_EndcapB
318  first_channel->second["array_value"].data<float>());
319  break;
320  case 36: // ZR_Zee_Xenon_Electrons_Barrel
322  first_channel->second["array_value"].data<float>());
323  break;
324  case 37: // ZR_Zee_Xenon_Electrons_EndcapA
326  first_channel->second["array_value"].data<float>());
327  break;
328  case 38: // ZR_Zee_Xenon_Electrons_EndcapB
330  first_channel->second["array_value"].data<float>());
331  break;
332  case 39: // TW_Zee_Xenon_Electrons_Barrel
334  first_channel->second["array_value"].data<float>());
335  break;
336  case 40: // TW_Zee_Xenon_Electrons_EndcapA
338  first_channel->second["array_value"].data<float>());
339  break;
340  case 41: // TW_Zee_Xenon_Electrons_EndcapB
342  first_channel->second["array_value"].data<float>());
343  break;
344  case 42: // OR_Zee_Xenon_Electrons_Barrel
346  first_channel->second["array_value"].data<float>());
347  break;
348  case 43: // OR_Zee_Xenon_Electrons_EndcapA
350  first_channel->second["array_value"].data<float>());
351  break;
352  case 44: // OR_Zee_Xenon_Electrons_EndcapB
354  first_channel->second["array_value"].data<float>());
355  break;
356  case 45: // SL_Zmm_Xenon_NonElecs_Barrel
358  first_channel->second["array_value"].data<float>());
359  break;
360  case 46: // SL_Zmm_Xenon_NonElecs_EndcapA
362  first_channel->second["array_value"].data<float>());
363  break;
364  case 47: // SL_Zmm_Xenon_NonElecs_EndcapB
366  first_channel->second["array_value"].data<float>());
367  break;
368  case 48: // ZR_Zmm_Xenon_NonElecs_Barrel
370  first_channel->second["array_value"].data<float>());
371  break;
372  case 49: // ZR_Zmm_Xenon_NonElecs_EndcapA
374  first_channel->second["array_value"].data<float>());
375  break;
376  case 50: // ZR_Zmm_Xenon_NonElecs_EndcapB
378  first_channel->second["array_value"].data<float>());
379  break;
380  case 51: // TW_Zmm_Xenon_NonElecs_Barrel
382  first_channel->second["array_value"].data<float>());
383  break;
384  case 52: // TW_Zmm_Xenon_NonElecs_EndcapA
386  first_channel->second["array_value"].data<float>());
387  break;
388  case 53: // TW_Zmm_Xenon_NonElecs_EndcapB
390  first_channel->second["array_value"].data<float>());
391  break;
392  case 54: // OR_Zmm_Xenon_NonElecs_Barrel
394  first_channel->second["array_value"].data<float>());
395  break;
396  case 55: // OR_Zmm_Xenon_NonElecs_EndcapA
398  first_channel->second["array_value"].data<float>());
399  break;
400  case 56: // OR_Zmm_Xenon_NonElecs_EndcapB
402  first_channel->second["array_value"].data<float>());
403  break;
404 
405  // Krypton Corrections:
406  case 57: // SL_Zee_Xenon_Electrons_Barrel
408  first_channel->second["array_value"].data<float>());
409  break;
410  case 58: // SL_Zee_Xenon_Electrons_EndcapA
412  first_channel->second["array_value"].data<float>());
413  break;
414  case 59: // SL_Zee_Xenon_Electrons_EndcapB
416  first_channel->second["array_value"].data<float>());
417  break;
418  case 60: // ZR_Zee_Xenon_Electrons_Barrel
420  first_channel->second["array_value"].data<float>());
421  break;
422  case 61: // ZR_Zee_Xenon_Electrons_EndcapA
424  first_channel->second["array_value"].data<float>());
425  break;
426  case 62: // ZR_Zee_Xenon_Electrons_EndcapB
428  first_channel->second["array_value"].data<float>());
429  break;
430  case 63: // TW_Zee_Xenon_Electrons_Barrel
432  first_channel->second["array_value"].data<float>());
433  break;
434  case 64: // TW_Zee_Xenon_Electrons_EndcapA
436  first_channel->second["array_value"].data<float>());
437  break;
438  case 65: // TW_Zee_Xenon_Electrons_EndcapB
440  first_channel->second["array_value"].data<float>());
441  break;
442  case 66: // OR_Zee_Xenon_Electrons_Barrel
444  first_channel->second["array_value"].data<float>());
445  break;
446  case 67: // OR_Zee_Xenon_Electrons_EndcapA
448  first_channel->second["array_value"].data<float>());
449  break;
450  case 68: // OR_Zee_Xenon_Electrons_EndcapB
452  first_channel->second["array_value"].data<float>());
453  break;
454  case 69: // SL_Zmm_Xenon_NonElecs_Barrel
456  first_channel->second["array_value"].data<float>());
457  break;
458  case 70: // SL_Zmm_Xenon_NonElecs_EndcapA
460  first_channel->second["array_value"].data<float>());
461  break;
462  case 71: // SL_Zmm_Xenon_NonElecs_EndcapB
464  first_channel->second["array_value"].data<float>());
465  break;
466  case 72: // ZR_Zmm_Xenon_NonElecs_Barrel
468  first_channel->second["array_value"].data<float>());
469  break;
470  case 73: // ZR_Zmm_Xenon_NonElecs_EndcapA
472  first_channel->second["array_value"].data<float>());
473  break;
474  case 74: // ZR_Zmm_Xenon_NonElecs_EndcapB
476  first_channel->second["array_value"].data<float>());
477  break;
478  case 75: // TW_Zmm_Xenon_NonElecs_Barrel
480  first_channel->second["array_value"].data<float>());
481  break;
482  case 76: // TW_Zmm_Xenon_NonElecs_EndcapA
484  first_channel->second["array_value"].data<float>());
485  break;
486  case 77: // TW_Zmm_Xenon_NonElecs_EndcapB
488  first_channel->second["array_value"].data<float>());
489  break;
490  case 78: // OR_Zmm_Xenon_NonElecs_Barrel
492  first_channel->second["array_value"].data<float>());
493  break;
494  case 79: // OR_Zmm_Xenon_NonElecs_EndcapA
496  first_channel->second["array_value"].data<float>());
497  break;
498  case 80: // OR_Zmm_Xenon_NonElecs_EndcapB
500  first_channel->second["array_value"].data<float>());
501  break;
502  }
503  }
504 
505  for (int i = 0; i < N_DET; i++) {
506  for (int j = 0; j < N_GAS; j++) {
507  if (m_par_pHTvsPGOG_new[j][i].check(j, i) != StatusCode::SUCCESS)
508  return StatusCode::FAILURE;
509  if (m_CpHT_B_Zee_SL_new[j][i].check(j, i) != StatusCode::SUCCESS)
510  return StatusCode::FAILURE;
511  if (m_CpHT_B_Zmm_SL_new[j][i].check(j, i) != StatusCode::SUCCESS)
512  return StatusCode::FAILURE;
513  if (m_CpHT_B_Zee_ZR_new[j][i].check(j, i) != StatusCode::SUCCESS)
514  return StatusCode::FAILURE;
515  if (m_CpHT_B_Zmm_ZR_new[j][i].check(j, i) != StatusCode::SUCCESS)
516  return StatusCode::FAILURE;
517  if (m_CpHT_B_Zee_TW_new[j][i].check(j, i) != StatusCode::SUCCESS)
518  return StatusCode::FAILURE;
519  if (m_CpHT_B_Zmm_TW_new[j][i].check(j, i) != StatusCode::SUCCESS)
520  return StatusCode::FAILURE;
521  if (m_CpHT_B_Zee_OR_new[j][i].check(j, i) != StatusCode::SUCCESS)
522  return StatusCode::FAILURE;
523  if (m_CpHT_B_Zmm_OR_new[j][i].check(j, i) != StatusCode::SUCCESS)
524  return StatusCode::FAILURE;
525  }
526  }
527 
528  return StatusCode::SUCCESS;
529 }
530 
531 /*****************************************************************************\
532 |*%%% Hard-coded HT Calibration Constants %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*|
533 \*****************************************************************************/
534 
536  /*****************************************************************************\
537 
538  This code is never called in production. It is used to set all
539  constants in the positions in the HTBlob where they are needed, and
540  finally print out the blob as an array of numbers. This is far easier and
541  less error prone than having a separate setter-script which might itself
542  have a version mismatch with this code.
543 
544  PLEASE REMEMBER to increment the version number precisely when you change
545  the addresses of the various arrays inside the HTBlob, and NEVER otherwise!
546 
547  \*****************************************************************************/
548 
549  MsgStream log(Athena::getMessageSvc(), "HTcalculator");
550  log << MSG::WARNING
551  << " HT PID DB is NOT available. Set hard-coded PID calibration "
552  "constants. Derived from Run1 Data Zee and Zmumu 50 ns."
553  << endmsg;
554 
555  // Expanding to a 2D fit (gamma,occupancy) for three types of gases: Xenon,
556  // Argon, Krypton:
557  // ----------------------------------------------------------------------------------------
558  constexpr float par2[N_GAS][N_DET][N_PAR2] = {
559  // Xenon Gas Parameters
560  {{1.0000, 3.7204, 0.0260, 0.1445, 3.0461, 0.2206, 0.0000, 0.0078, 0.0918,
561  0.0744}, // Barrel Prob: 0.9992
562  {1.0000, 3.5836, 0.0468, 0.1475, 3.0943, 0.1303, 0.0000, 0.0089, 0.1054,
563  0.0472}, // EndcapA Prob: 1.0000
564  {1.0000, 3.4798, 0.0433, 0.1824, 3.0730, 0.1244, 0.0000, 0.0300, 0.1007,
565  0.1261}}, // EndcapB Prob: 0.8536
566  // Argon Gas Parameters
567  {{1.0000, 2.8342, 0.0384, 0.0185, 2.7161, 0.0366, 0.0000, 0.0013, 0.1261,
568  0.1241}, // Barrel Prob: 1.0000
569  {1.0000, 3.2551, 0.0388, 0.0338, 2.9090, 0.1663, 0.0000, 0.1604, 0.1100,
570  0.0521}, // EndcapA Prob: 0.9970
571  {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
572  0.0000}}, // EndcapB ------------
573  // Krypton Gas Parameters (Place Holder)
574  {{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
575  0.0000}, // Barrel ------------
576  {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
577  0.0000}, // EndcapA ------------
578  {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
579  0.0000}}}; // EndcapB ------------
580 
581  for (int i = 0; i < N_GAS; i++) {
582  for (int j = 0; j < N_DET; j++) {
584  10, 50, 1000000.0,
585  std::vector<float>(
586  par2[i][j],
587  par2[i][j] + sizeof par2[i][j] / sizeof par2[i][j][0]));
588  }
589  }
590 
591  constexpr int N_SL_B = 73;
592  constexpr int N_SL_EA = 96;
593  constexpr int N_SL_EB = 64;
594  constexpr int N_ZR_B = 36;
595  constexpr int N_ZR_EA = 40;
596  constexpr int N_ZR_EB = 40;
597  constexpr int N_TW_B = 44;
598  constexpr int N_TW_EA = 44;
599  constexpr int N_TW_EB = 44;
600 
601  // ---------------------------------------
602  // Electrons:
603  // ---------------------------------------
604  // Straw Layer (SL):
605  constexpr double CpHT_Zee_Barrel_SL[N_SL_B] = {
606  0.637, 0.887, 0.966, 1.034, 1.059, 1.009, 1.131, 1.073, 1.086, 0.925,
607  0.890, 0.987, 0.937, 0.964, 0.976, 0.929, 1.006, 0.979, 0.992, 0.812,
608  0.935, 0.950, 0.984, 0.994, 1.011, 0.952, 1.051, 0.997, 1.026, 1.018,
609  0.978, 1.066, 1.016, 1.039, 1.040, 0.979, 1.057, 1.018, 1.032, 1.052,
610  0.994, 1.055, 1.023, 0.823, 1.013, 0.977, 1.051, 1.031, 0.973, 1.077,
611  1.025, 1.056, 1.047, 0.992, 1.085, 1.032, 1.061, 1.054, 0.998, 1.093,
612  1.039, 1.058, 1.056, 0.988, 1.090, 1.057, 1.046, 1.053, 0.994, 1.081,
613  1.041, 1.040, 1.061};
614  constexpr double CpHT_Zee_EndcapA_SL[N_SL_EA] = {
615  0.671, 0.802, 0.890, 0.918, 0.946, 0.963, 0.974, 0.979, 1.030, 1.023,
616  1.029, 1.004, 1.030, 1.037, 1.033, 1.013, 0.913, 0.968, 0.998, 0.994,
617  1.036, 1.032, 1.043, 1.044, 1.042, 1.009, 1.026, 1.007, 1.032, 1.046,
618  1.020, 1.032, 0.913, 0.955, 0.974, 0.995, 1.035, 1.042, 1.039, 1.047,
619  1.032, 1.036, 1.033, 1.010, 1.047, 1.049, 1.055, 1.046, 0.877, 0.938,
620  0.968, 0.983, 1.004, 1.010, 1.013, 1.014, 1.038, 1.031, 1.042, 1.018,
621  1.016, 1.049, 1.023, 1.025, 0.923, 0.978, 0.995, 1.001, 1.038, 1.042,
622  1.026, 1.037, 1.042, 1.062, 1.041, 1.039, 1.078, 1.058, 1.036, 1.049,
623  0.897, 0.965, 0.993, 0.985, 1.040, 1.068, 1.053, 1.049, 1.037, 1.050,
624  1.043, 1.065, 1.026, 1.058, 1.058, 1.070};
625  constexpr double CpHT_Zee_EndcapB_SL[N_SL_EB] = {
626  0.494, 0.771, 0.887, 0.931, 0.939, 0.989, 0.994, 1.005, 0.866, 0.971,
627  1.027, 1.057, 1.021, 1.056, 1.046, 1.073, 0.901, 0.992, 1.043, 1.055,
628  1.034, 1.087, 1.094, 1.087, 0.920, 0.995, 1.048, 1.068, 1.042, 1.075,
629  1.086, 1.126, 0.920, 0.987, 1.062, 1.072, 1.059, 1.096, 1.070, 1.082,
630  0.927, 1.020, 1.068, 1.083, 1.054, 1.089, 1.078, 1.103, 0.961, 1.050,
631  1.100, 1.107, 1.098, 1.124, 1.101, 1.141, 0.988, 1.106, 1.127, 1.174,
632  1.109, 1.134, 1.134, 1.182};
633 
634  // ZR-position (ZR - Z in Barrel, R in Endcaps):
635  constexpr double CpHT_Zee_Barrel_ZR[N_ZR_B] = {
636  0.861, 0.901, 0.909, 0.915, 0.919, 0.924, 0.922, 0.931, 0.928,
637  0.937, 0.945, 0.908, 0.921, 0.959, 0.970, 0.988, 0.986, 0.999,
638  1.010, 1.005, 0.996, 1.005, 1.018, 0.992, 1.042, 1.076, 1.101,
639  1.116, 1.134, 1.157, 1.170, 1.196, 1.208, 1.230, 1.230, 1.039};
640  constexpr double CpHT_Zee_EndcapA_ZR[N_ZR_EA] = {
641  0.458, 0.621, 0.694, 0.758, 0.798, 0.838, 0.871, 0.900, 0.956, 0.980,
642  1.001, 1.006, 1.016, 1.027, 1.019, 1.038, 1.046, 1.045, 1.054, 1.064,
643  1.064, 1.077, 1.081, 1.089, 1.101, 1.113, 1.102, 1.113, 1.107, 1.113,
644  1.098, 1.105, 1.083, 1.054, 1.036, 0.994, 0.965, 0.887, 0.771, 0.575};
645  constexpr double CpHT_Zee_EndcapB_ZR[N_ZR_EB] = {
646  1.000, 0.754, 0.926, 0.941, 1.001, 1.001, 0.987, 1.033, 1.054, 1.060,
647  1.057, 1.064, 1.061, 1.067, 1.052, 1.062, 1.045, 1.057, 1.053, 1.047,
648  1.053, 1.050, 1.042, 1.073, 1.050, 1.050, 1.028, 0.972, 0.928, 0.896,
649  0.881, 0.854, 0.828, 0.793, 0.755, 0.652, 0.511, 0.291, 0.481, 1.000};
650 
651  // Track-to-Wire distance (TW):
652  constexpr double CpHT_Zee_Barrel_TW[44] = {
653  1.233, 1.261, 1.276, 1.296, 1.307, 1.338, 1.349, 1.386, 1.395,
654  1.434, 1.441, 1.448, 1.440, 1.439, 1.425, 1.406, 1.388, 1.363,
655  1.334, 1.320, 1.295, 1.269, 1.240, 1.212, 1.183, 1.144, 1.109,
656  1.073, 1.028, 0.981, 0.938, 0.879, 0.817, 0.752, 0.678, 0.606,
657  0.531, 0.465, 0.428, 0.443, 0.504, 0.553, 0.579, 0.766};
658  constexpr double CpHT_Zee_EndcapA_TW[44] = {
659  1.236, 1.260, 1.291, 1.292, 1.304, 1.325, 1.354, 1.363, 1.387,
660  1.394, 1.409, 1.415, 1.407, 1.414, 1.405, 1.394, 1.385, 1.357,
661  1.345, 1.331, 1.309, 1.282, 1.252, 1.226, 1.197, 1.176, 1.135,
662  1.097, 1.047, 1.013, 0.946, 0.892, 0.834, 0.756, 0.696, 0.610,
663  0.547, 0.480, 0.444, 0.445, 0.469, 0.513, 0.584, 0.892};
664  constexpr double CpHT_Zee_EndcapB_TW[44] = {
665  1.186, 1.202, 1.219, 1.246, 1.257, 1.270, 1.291, 1.297, 1.307,
666  1.319, 1.333, 1.338, 1.340, 1.326, 1.314, 1.327, 1.321, 1.310,
667  1.289, 1.279, 1.266, 1.240, 1.222, 1.194, 1.168, 1.153, 1.125,
668  1.091, 1.033, 1.009, 0.963, 0.917, 0.846, 0.802, 0.746, 0.690,
669  0.615, 0.560, 0.514, 0.485, 0.478, 0.473, 0.523, 0.726};
670 
671  // ---------------------------------------
672  // Non-Electrons (here muons):
673  // ---------------------------------------
674 
675  // Straw Layer (SL):
676  constexpr double CpHT_Zmm_Barrel_SL[N_SL_B] = {
677  1.100, 1.186, 1.209, 1.241, 1.199, 1.174, 1.209, 1.178, 1.150, 1.053,
678  1.033, 1.054, 1.033, 1.029, 1.041, 1.021, 1.027, 0.992, 0.988, 0.983,
679  0.998, 1.022, 1.043, 1.023, 1.027, 1.016, 1.034, 1.009, 1.014, 1.022,
680  1.001, 1.024, 1.003, 1.010, 1.004, 0.983, 0.992, 0.978, 0.981, 1.000,
681  0.984, 0.974, 0.953, 0.941, 0.982, 0.990, 1.005, 0.993, 0.966, 0.997,
682  1.000, 0.988, 0.992, 0.969, 1.003, 0.964, 0.989, 0.961, 0.956, 0.971,
683  0.948, 0.963, 0.951, 0.943, 0.964, 0.965, 0.925, 0.919, 0.918, 0.928,
684  0.919, 0.912, 0.906};
685  constexpr double CpHT_Zmm_EndcapA_SL[N_SL_EA] = {
686  0.883, 0.898, 0.923, 0.899, 0.892, 0.909, 0.893, 0.925, 0.964, 0.964,
687  0.979, 0.949, 0.944, 0.998, 0.940, 0.937, 0.950, 0.976, 0.972, 0.950,
688  0.998, 1.005, 1.007, 1.028, 1.018, 0.995, 1.006, 0.998, 1.031, 1.047,
689  1.031, 1.015, 1.017, 0.983, 1.018, 1.018, 1.025, 1.033, 1.046, 1.069,
690  1.033, 1.027, 1.006, 0.982, 1.066, 1.080, 1.048, 1.058, 0.955, 0.971,
691  0.973, 0.992, 1.013, 1.046, 1.022, 1.029, 1.040, 1.016, 1.077, 1.024,
692  1.011, 1.095, 1.019, 1.045, 1.001, 1.057, 1.043, 1.022, 1.033, 1.108,
693  1.062, 1.110, 1.090, 1.058, 1.060, 1.099, 1.065, 1.120, 1.077, 1.060,
694  1.024, 1.006, 1.022, 1.007, 1.051, 1.118, 1.079, 1.118, 1.070, 1.064,
695  1.108, 1.127, 1.039, 1.107, 1.088, 1.154};
696  constexpr double CpHT_Zmm_EndcapB_SL[N_SL_EB] = {
697  0.828, 0.961, 0.941, 0.991, 0.986, 1.015, 0.993, 0.957, 0.892, 1.005,
698  1.100, 1.054, 0.995, 1.042, 1.022, 1.007, 0.918, 1.019, 1.056, 1.034,
699  0.978, 0.981, 1.014, 1.026, 0.988, 0.978, 1.062, 1.085, 1.029, 0.989,
700  1.067, 1.054, 0.978, 0.971, 1.051, 1.114, 1.152, 1.172, 1.034, 1.170,
701  1.055, 0.990, 1.112, 1.047, 1.068, 1.013, 1.089, 1.141, 0.903, 0.960,
702  1.138, 1.218, 0.991, 1.087, 0.997, 1.028, 1.042, 1.155, 1.060, 1.130,
703  1.077, 1.186, 1.006, 1.054};
704 
705  // ZR-position (ZR - Z in Barrel, R in Endcaps):
706  constexpr double CpHT_Zmm_Barrel_ZR[N_ZR_B] = {
707  0.846, 0.874, 0.880, 0.882, 0.876, 0.887, 0.901, 0.894, 0.894,
708  0.903, 0.902, 0.907, 0.918, 0.934, 0.941, 0.948, 0.963, 0.969,
709  0.990, 0.991, 1.012, 1.019, 1.029, 1.033, 1.072, 1.088, 1.111,
710  1.144, 1.164, 1.192, 1.225, 1.242, 1.271, 1.314, 1.309, 1.078};
711  constexpr double CpHT_Zmm_EndcapA_ZR[N_ZR_EA] = {
712  0.613, 0.757, 0.783, 0.849, 0.866, 0.886, 0.915, 0.939, 0.930, 0.976,
713  0.969, 0.984, 0.992, 0.979, 1.006, 1.000, 1.005, 1.022, 1.020, 1.030,
714  1.031, 1.036, 1.053, 1.050, 1.050, 1.048, 1.065, 1.071, 1.060, 1.077,
715  1.067, 1.072, 1.070, 1.067, 1.090, 1.059, 1.032, 1.081, 1.011, 0.984};
716  constexpr double CpHT_Zmm_EndcapB_ZR[N_ZR_EB] = {
717  1.000, 1.375, 0.962, 0.702, 0.869, 0.899, 0.953, 0.905, 1.052, 1.025,
718  1.016, 1.009, 1.033, 0.920, 1.056, 1.031, 1.070, 1.042, 1.052, 1.066,
719  1.024, 1.023, 1.046, 1.046, 1.007, 1.009, 1.009, 1.024, 1.007, 0.993,
720  0.968, 0.997, 0.911, 0.922, 0.938, 0.921, 0.883, 0.653, 0.917, 1.000};
721 
722  // Track-to-Wire distance (TWdist):
723  constexpr double CpHT_Zmm_Barrel_TW[N_TW_B] = {
724  1.124, 1.058, 1.065, 1.079, 1.094, 1.124, 1.141, 1.173, 1.207,
725  1.226, 1.250, 1.250, 1.258, 1.249, 1.258, 1.243, 1.229, 1.211,
726  1.206, 1.180, 1.165, 1.138, 1.123, 1.100, 1.074, 1.052, 1.014,
727  0.981, 0.953, 0.896, 0.866, 0.809, 0.776, 0.736, 0.690, 0.644,
728  0.609, 0.615, 0.680, 0.854, 1.094, 1.274, 1.208, 1.219};
729  constexpr double CpHT_Zmm_EndcapA_TW[N_TW_EA] = {
730  1.210, 1.161, 1.177, 1.201, 1.221, 1.244, 1.279, 1.300, 1.319,
731  1.341, 1.362, 1.372, 1.376, 1.378, 1.384, 1.361, 1.349, 1.334,
732  1.325, 1.284, 1.264, 1.250, 1.223, 1.183, 1.121, 1.104, 1.077,
733  1.016, 0.969, 0.912, 0.863, 0.815, 0.753, 0.662, 0.604, 0.555,
734  0.513, 0.490, 0.511, 0.627, 0.843, 1.019, 0.932, 0.922};
735  constexpr double CpHT_Zmm_EndcapB_TW[N_TW_EB] = {
736  1.132, 1.150, 1.125, 1.174, 1.170, 1.282, 1.165, 1.244, 1.287,
737  1.293, 1.270, 1.366, 1.317, 1.285, 1.319, 1.291, 1.304, 1.239,
738  1.256, 1.279, 1.212, 1.221, 1.200, 1.174, 1.143, 1.120, 1.022,
739  0.983, 0.938, 0.895, 0.906, 0.826, 0.766, 0.765, 0.664, 0.566,
740  0.553, 0.556, 0.541, 0.626, 0.780, 0.964, 0.817, 0.542};
741 
742  // --------------------------------------------------------------
743 
744  // Same corrections for all gases:
745 
746  for (int j = 0; j < N_GAS; j++) {
748  N_SL_B, -0.5, 72.5,
749  std::vector<float>(
750  CpHT_Zee_Barrel_SL,
751  CpHT_Zee_Barrel_SL +
752  sizeof CpHT_Zee_Barrel_SL / sizeof CpHT_Zee_Barrel_SL[0]));
754  N_SL_EA, -0.5, 95.5,
755  std::vector<float>(
756  CpHT_Zee_EndcapA_SL,
757  CpHT_Zee_EndcapA_SL +
758  sizeof CpHT_Zee_EndcapA_SL / sizeof CpHT_Zee_EndcapA_SL[0]));
760  N_SL_EB, -0.5, 63.5,
761  std::vector<float>(
762  CpHT_Zee_EndcapB_SL,
763  CpHT_Zee_EndcapB_SL +
764  sizeof CpHT_Zee_EndcapB_SL / sizeof CpHT_Zee_EndcapB_SL[0]));
765 
767  N_SL_B, -0.5, 72.5,
768  std::vector<float>(
769  CpHT_Zmm_Barrel_SL,
770  CpHT_Zmm_Barrel_SL +
771  sizeof CpHT_Zmm_Barrel_SL / sizeof CpHT_Zmm_Barrel_SL[0]));
773  N_SL_EA, -0.5, 95.5,
774  std::vector<float>(
775  CpHT_Zmm_EndcapA_SL,
776  CpHT_Zmm_EndcapA_SL +
777  sizeof CpHT_Zmm_EndcapA_SL / sizeof CpHT_Zmm_EndcapA_SL[0]));
779  N_SL_EB, -0.5, 63.5,
780  std::vector<float>(
781  CpHT_Zmm_EndcapB_SL,
782  CpHT_Zmm_EndcapB_SL +
783  sizeof CpHT_Zmm_EndcapB_SL / sizeof CpHT_Zmm_EndcapB_SL[0]));
784 
786  N_ZR_B, 0.0, 720.0,
787  std::vector<float>(
788  CpHT_Zee_Barrel_ZR,
789  CpHT_Zee_Barrel_ZR +
790  sizeof CpHT_Zee_Barrel_ZR / sizeof CpHT_Zee_Barrel_ZR[0]));
792  N_ZR_EA, 630.0, 1030.0,
793  std::vector<float>(
794  CpHT_Zee_EndcapA_ZR,
795  CpHT_Zee_EndcapA_ZR +
796  sizeof CpHT_Zee_EndcapA_ZR / sizeof CpHT_Zee_EndcapA_ZR[0]));
798  N_ZR_EB, 630.0, 1030.0,
799  std::vector<float>(
800  CpHT_Zee_EndcapB_ZR,
801  CpHT_Zee_EndcapB_ZR +
802  sizeof CpHT_Zee_EndcapB_ZR / sizeof CpHT_Zee_EndcapB_ZR[0]));
803 
805  N_ZR_B, 0.0, 720.0,
806  std::vector<float>(
807  CpHT_Zmm_Barrel_ZR,
808  CpHT_Zmm_Barrel_ZR +
809  sizeof CpHT_Zmm_Barrel_ZR / sizeof CpHT_Zmm_Barrel_ZR[0]));
811  N_ZR_EA, 630.0, 1030.0,
812  std::vector<float>(
813  CpHT_Zmm_EndcapA_ZR,
814  CpHT_Zmm_EndcapA_ZR +
815  sizeof CpHT_Zmm_EndcapA_ZR / sizeof CpHT_Zmm_EndcapA_ZR[0]));
817  N_ZR_EB, 630.0, 1030.0,
818  std::vector<float>(
819  CpHT_Zmm_EndcapB_ZR,
820  CpHT_Zmm_EndcapB_ZR +
821  sizeof CpHT_Zmm_EndcapB_ZR / sizeof CpHT_Zmm_EndcapB_ZR[0]));
822 
824  N_TW_B, 0.0, 2.2,
825  std::vector<float>(
826  CpHT_Zee_Barrel_TW,
827  CpHT_Zee_Barrel_TW +
828  sizeof CpHT_Zee_Barrel_TW / sizeof CpHT_Zee_Barrel_TW[0]));
830  N_TW_EA, 0.0, 2.2,
831  std::vector<float>(
832  CpHT_Zee_EndcapA_TW,
833  CpHT_Zee_EndcapA_TW +
834  sizeof CpHT_Zee_EndcapA_TW / sizeof CpHT_Zee_EndcapA_TW[0]));
836  N_TW_EB, 0.0, 2.2,
837  std::vector<float>(
838  CpHT_Zee_EndcapB_TW,
839  CpHT_Zee_EndcapB_TW +
840  sizeof CpHT_Zee_EndcapB_TW / sizeof CpHT_Zee_EndcapB_TW[0]));
841 
843  N_TW_B, 0.0, 2.2,
844  std::vector<float>(
845  CpHT_Zmm_Barrel_TW,
846  CpHT_Zmm_Barrel_TW +
847  sizeof CpHT_Zmm_Barrel_TW / sizeof CpHT_Zmm_Barrel_TW[0]));
849  N_TW_EA, 0.0, 2.2,
850  std::vector<float>(
851  CpHT_Zmm_EndcapA_TW,
852  CpHT_Zmm_EndcapA_TW +
853  sizeof CpHT_Zmm_EndcapA_TW / sizeof CpHT_Zmm_EndcapA_TW[0]));
855  N_TW_EB, 0.0, 2.2,
856  std::vector<float>(
857  CpHT_Zmm_EndcapB_TW,
858  CpHT_Zmm_EndcapB_TW +
859  sizeof CpHT_Zmm_EndcapB_TW / sizeof CpHT_Zmm_EndcapB_TW[0]));
860  }
861 }
HTcalculator::m_CpHT_B_Zee_TW_new
StorePIDinfo m_CpHT_B_Zee_TW_new[N_GAS][N_DET]
Definition: HTcalculator.h:62
HTcalculator::setDefaultCalibrationConstants
void setDefaultCalibrationConstants()
Definition: HTcalculator.cxx:535
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
HTcalculator::m_CpHT_B_Zee_ZR_new
StorePIDinfo m_CpHT_B_Zee_ZR_new[N_GAS][N_DET]
Definition: HTcalculator.h:59
HTcalculator::m_CpHT_B_Zee_OR_new
StorePIDinfo m_CpHT_B_Zee_OR_new[N_GAS][N_DET]
Definition: HTcalculator.h:65
HTcalculator::N_PAR2
static constexpr int N_PAR2
Definition: HTcalculator.h:51
HTcalculator.h
HTcalculator::m_CpHT_B_Zmm_SL_new
StorePIDinfo m_CpHT_B_Zmm_SL_new[N_GAS][N_DET]
Definition: HTcalculator.h:57
HTcalculator::Limit
static float Limit(float prob)
Definition: HTcalculator.cxx:12
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
covarianceTool.prob
prob
Definition: covarianceTool.py:678
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
CondAttrListVec::size
size_type size() const
Definition: CondAttrListVec.h:216
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
TrigVtx::gamma
@ gamma
Definition: TrigParticleTable.h:26
HTcalculator::m_par_pHTvsPGOG_new
StorePIDinfo m_par_pHTvsPGOG_new[N_GAS][N_DET]
Definition: HTcalculator.h:53
CondAttrListVec
Definition: CondAttrListVec.h:31
lumiFormat.i
int i
Definition: lumiFormat.py:85
StorePIDinfo
Definition: StorePIDinfo.h:13
StorePIDinfo::update
void update(int nbins, float min, float max, const std::vector< float > &values)
Definition: StorePIDinfo.cxx:16
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
HTcalculator::m_CpHT_B_Zee_SL_new
StorePIDinfo m_CpHT_B_Zee_SL_new[N_GAS][N_DET]
Definition: HTcalculator.h:56
HTcalculator::N_GAS
static constexpr int N_GAS
Definition: HTcalculator.h:49
CondAttrListVec::end
const_iterator end() const
Definition: CondAttrListVec.h:213
bin2
Definition: KillBinsByStrip.h:34
HTcalculator::N_DET
static constexpr int N_DET
Definition: HTcalculator.h:50
HTcalculator::m_CpHT_B_Zmm_ZR_new
StorePIDinfo m_CpHT_B_Zmm_ZR_new[N_GAS][N_DET]
Definition: HTcalculator.h:60
HTcalculator::m_CpHT_B_Zmm_OR_new
StorePIDinfo m_CpHT_B_Zmm_OR_new[N_GAS][N_DET]
Definition: HTcalculator.h:66
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
Trk::ParticleMasses::mass
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:53
CondAttrListVec::const_iterator
AttrListVec::const_iterator const_iterator
Definition: CondAttrListVec.h:36
HTcalculator::m_CpHT_B_Zmm_TW_new
StorePIDinfo m_CpHT_B_Zmm_TW_new[N_GAS][N_DET]
Definition: HTcalculator.h:63
LArNewCalib_Delay_OFC_Cali.check
check
Definition: LArNewCalib_Delay_OFC_Cali.py:267
HTcalculator::pHTvsPGOG
float pHTvsPGOG(int TrtPart, int GasType, float p, float mass, float occ) const
Definition: HTcalculator.cxx:101
dqt_zlumi_pandas.bin4
bin4
Definition: dqt_zlumi_pandas.py:352
dqt_zlumi_pandas.bin1
bin1
Definition: dqt_zlumi_pandas.py:336
CondAttrListVec::begin
const_iterator begin() const
Definition: CondAttrListVec.h:210
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
bin3
Definition: BinsOutOfRange.h:33
HTcalculator::ReadVectorDB
StatusCode ReadVectorDB(const CondAttrListVec *channel_values)
Definition: HTcalculator.cxx:155
HTcalculator::getProbHT
float getProbHT(float pTrk, Trk::ParticleHypothesis hypothesis, int TrtPart, int GasType, int StrawLayer, float ZR, float rTrkAnode, float Occupancy, bool hasTrackPars) const
Definition: HTcalculator.cxx:27
StorePIDinfo::GetValue
float GetValue(float input) const
Definition: StorePIDinfo.h:27
StorePIDinfo::push_back
void push_back(float value)
Definition: StorePIDinfo.cxx:31