BackEndSiPM.cc
Go to the documentation of this file.
1 #include <mdet/BackEndSiPM.h>
2 
3 #include <mdet/MHierarchyInfo.h>
4 //
5 #include <utl/AugerUnits.h>
6 #include <utl/MathConstants.h>
7 //
8 #include <fwk/RandomEngineRegistry.h>
9 #include <CLHEP/Random/RandGauss.h>
10 
11 #include <algorithm>
12 #include <vector>
13 #include <sstream>
14 #include <iostream>
15 #include <string>
16 #include <TFormula.h>
17 #include <complex>
18 
19 //
20 
21 namespace mdet {
22 
23  const char* const
25 
26  const char* const
28 
30  (int cId, const det::VManager::IndexMap& parentMap, const Module& parent) :
32  fModule(parent)
33  {
34  Register(fFirstAdderPar1);
35  Register(fFirstAdderPar2);
36  Register(fFirstAdderPar3);
37  Register(fFirstAdderPar4);
38  Register(fFirstAdderPar5);
39  Register(fFirstAdderSaturationUp);
40  Register(fFirstAdderSaturationDown);
41  Register(fFirstAdderOffset);
42  Register(fSecondAdderPar1);
43  Register(fSecondAdderPar2);
44  Register(fSecondAdderPar3);
45  Register(fSecondAdderPar4);
46  Register(fSecondAdderPar5);
47  Register(fSecondAdderSaturationUp);
48  Register(fSecondAdderSaturationDown);
49  Register(fSecondAdderOffset);
50  Register(fLowGainAmplifierPar1);
51  Register(fLowGainAmplifierPar2);
52  Register(fLowGainAmplifierPar3);
53  Register(fLowGainAmplifierPar4);
54  Register(fLowGainAmplifierPar5);
55  Register(fLowGainAmplifierPar6);
56  Register(fLowGainAmplifierPar7);
57  Register(fLowGainAmplifierPar8);
58  Register(fLowGainAmplifierPar9);
59  Register(fLowGainAmplifierAdjustmentFactor);
60  Register(fLowGainAmplifierSaturationUp);
61  Register(fLowGainAmplifierSaturationDown);
62  Register(fLowGainAmplifierOffset);
63  Register(fHighGainAmplifierPar1);
64  Register(fHighGainAmplifierPar2);
65  Register(fHighGainAmplifierPar3);
66  Register(fHighGainAmplifierPar4);
67  Register(fHighGainAmplifierPar5);
68  Register(fHighGainAmplifierPar6);
69  Register(fHighGainAmplifierPar7);
70  Register(fHighGainAmplifierPar8);
71  Register(fHighGainAmplifierPar9);
72  Register(fHighGainAmplifierAdjustmentFactor);
73  Register(fHighGainAmplifierSaturationUp);
74  Register(fHighGainAmplifierSaturationDown);
75  Register(fHighGainAmplifierOffset);
76  Register(fADCPar1);
77  Register(fADCPar2);
78  Register(fADCPar3);
79  Register(fADCPar4);
80  Register(fADCPar5);
81  Register(fADCPar6);
82  Register(fADCSaturationUp);
83  Register(fADCSaturationDown);
84  Register(fADCOffset);
85  Register(fSimplifiedGainLG);
86  Register(fSimplifiedGainHG);
87  Register(fSimplifiedTime);
88  Register(fNumberOfChannelsToGroup);
89  }
90 
91 
92  /******************************
93  * First Adder Getters *
94  ******************************/
95 
96  double
98  const
99  {
100  return GetData(fFirstAdderPar1, "firstAdderPar1");
101  }
102  double
104  const
105  {
106  return GetData(fFirstAdderPar2, "firstAdderPar2");
107  }
108  double
110  const
111  {
112  return GetData(fFirstAdderPar3, "firstAdderPar3");
113  }
114  double
116  const
117  {
118  return GetData(fFirstAdderPar4, "firstAdderPar4");
119  }
120  double
122  const
123  {
124  return GetData(fFirstAdderPar5, "firstAdderPar5");
125  }
126  double
128  const
129  {
130  return GetData(fFirstAdderSaturationUp, "firstAdderSaturationUp");
131  }
132  double
134  const
135  {
136  return GetData(fFirstAdderSaturationDown, "firstAdderSaturationDown");
137  }
138  double
140  const
141  {
142  return GetData(fFirstAdderOffset, "firstAdderOffset");
143  }
144 
145  /******************************
146  * Second Adder Getters *
147  ******************************/
148 
149  double
151  const
152  {
153  return GetData(fSecondAdderPar1, "secondAdderPar1");
154  }
155  double
157  const
158  {
159  return GetData(fSecondAdderPar2, "secondAdderPar2");
160  }
161  double
163  const
164  {
165  return GetData(fSecondAdderPar3, "secondAdderPar3");
166  }
167  double
169  const
170  {
171  return GetData(fSecondAdderPar4, "secondAdderPar4");
172  }
173  double
175  const
176  {
177  return GetData(fSecondAdderPar5, "secondAdderPar5");
178  }
179  double
181  const
182  {
183  return GetData(fSecondAdderSaturationUp, "secondAdderSaturationUp");
184  }
185  double
187  const
188  {
189  return GetData(fSecondAdderSaturationDown, "secondAdderSaturationDown");
190  }
191  double
193  const
194  {
195  return GetData(fSecondAdderOffset, "secondAdderOffset");
196  }
197 
198  /**********************************
199  * Low Gain Amplifier Getters *
200  *********************************/
201 
202  double
204  const
205  {
206  return GetData(fLowGainAmplifierPar1, "lowGainAmplifierPar1");
207  }
208  double
210  const
211  {
212  return GetData(fLowGainAmplifierPar2, "lowGainAmplifierPar2");
213  }
214  double
216  const
217  {
218  return GetData(fLowGainAmplifierPar3, "lowGainAmplifierPar3");
219  }
220  double
222  const
223  {
224  return GetData(fLowGainAmplifierPar4, "lowGainAmplifierPar4");
225  }
226  double
228  const
229  {
230  return GetData(fLowGainAmplifierPar5, "lowGainAmplifierPar5");
231  }
232  double
234  const
235  {
236  return GetData(fLowGainAmplifierPar6, "lowGainAmplifierPar6");
237  }
238  double
240  const
241  {
242  return GetData(fLowGainAmplifierPar7, "lowGainAmplifierPar7");
243  }
244  double
246  const
247  {
248  return GetData(fLowGainAmplifierPar8, "lowGainAmplifierPar8");
249  }
250  double
252  const
253  {
254  return GetData(fLowGainAmplifierPar9, "lowGainAmplifierPar9");
255  }
256  double
258  const
259  {
260  return GetData(fLowGainAmplifierSaturationUp, "lowGainAmplifierSaturationUp");
261  }
262  double
264  const
265  {
266  return GetData(fLowGainAmplifierSaturationDown, "lowGainAmplifierSaturationDown");
267  }
268  double
270  const
271  {
272  return GetData(fLowGainAmplifierOffset, "lowGainAmplifierOffset");
273  }
274  double
276  const
277  {
278  return GetData(fLowGainAmplifierAdjustmentFactor, "lowGainAmplifierAdjustmentFactor");
279  }
280 
281  /**********************************
282  * High Gain Amplifier Getters *
283  *********************************/
284 
285  double
287  const
288  {
289  return GetData(fHighGainAmplifierPar1, "highGainAmplifierPar1");
290  }
291  double
293  const
294  {
295  return GetData(fHighGainAmplifierPar2, "highGainAmplifierPar2");
296  }
297  double
299  const
300  {
301  return GetData(fHighGainAmplifierPar3, "highGainAmplifierPar3");
302  }
303  double
305  const
306  {
307  return GetData(fHighGainAmplifierPar4, "highGainAmplifierPar4");
308  }
309  double
311  const
312  {
313  return GetData(fHighGainAmplifierPar5, "highGainAmplifierPar5");
314  }
315  double
317  const
318  {
319  return GetData(fHighGainAmplifierPar6, "highGainAmplifierPar6");
320  }
321  double
323  const
324  {
325  return GetData(fHighGainAmplifierPar7, "highGainAmplifierPar7");
326  }
327  double
329  const
330  {
331  return GetData(fHighGainAmplifierPar8, "highGainAmplifierPar8");
332  }
333  double
335  const
336  {
337  return GetData(fHighGainAmplifierPar9, "highGainAmplifierPar9");
338  }
339  double
341  const
342  {
343  return GetData(fHighGainAmplifierSaturationUp, "highGainAmplifierSaturationUp");
344  }
345  double
347  const
348  {
349  return GetData(fHighGainAmplifierSaturationDown, "highGainAmplifierSaturationDown");
350  }
351  double
353  const
354  {
355  return GetData(fHighGainAmplifierOffset, "highGainAmplifierOffset");
356  }
357  double
359  const
360  {
361  return GetData(fHighGainAmplifierAdjustmentFactor, "highGainAmplifierAdjustmentFactor");
362  }
363 
364  /******************************
365  * ADC Getters *
366  ******************************/
367 
368  double
370  const
371  {
372  return GetData(fADCPar1, "ADCPar1");
373  }
374  double
376  const
377  {
378  return GetData(fADCPar2, "ADCPar2");
379  }
380  double
382  const
383  {
384  return GetData(fADCPar3, "ADCPar3");
385  }
386  double
388  const
389  {
390  return GetData(fADCPar4, "ADCPar4");
391  }
392  double
394  const
395  {
396  return GetData(fADCPar5, "ADCPar5");
397  }
398  double
400  const
401  {
402  return GetData(fADCPar6, "ADCPar6");
403  }
404  double
406  const
407  {
408  return GetData(fADCSaturationUp, "ADCSaturationUp");
409  }
410  double
412  const
413  {
414  return GetData(fADCSaturationDown, "ADCSaturationDown");
415  }
416  double
418  const
419  {
420  return GetData(fADCOffset, "ADCOffset");
421  }
422 
424  return GetData(fNumberOfChannelsToGroup, "numberOfChannelsToGroup");
425  }
426 
427  /**********************************
428  * High Gain Amplifier Getters *
429  *********************************/
430 
431  double
433  const
434  {
435  return GetData(fSimplifiedGainLG, "simplifiedGainLG");
436  }
437  double
439  const
440  {
441  return GetData(fSimplifiedGainHG, "simplifiedGainHG");
442  }
443  double
445  const
446  {
447  return GetData(fSimplifiedTime, "simplifiedTime");
448  }
449 
450  /*********************************
451  * Get Transfer factors *
452  *********************************/
453 
454  std::complex<double>
456  const{
457 
458  std::complex<double> value;
459  switch(step){
460  case eFirstAdder:
461  value = ComputeTransferFirstAdder(freq);
462  break;
463  case eSecondAdder:
464  value = ComputeTransferSecondAdder(freq);
465  break;
466  case eLowGainAmplifier:
467  value = ComputeTransferLowGainAmplifier(freq);
468  break;
469  case eHighGainAmplifier:
470  value = ComputeTransferHighGainAmplifier(freq);
471  break;
472  case eADC:
473  value = ComputeTransferADC(freq);
474  break;
475  case eSimplifiedLG:
476  value = ComputeTransferSimplifiedLG(freq);
477  break;
478  case eSimplifiedHG:
479  value = ComputeTransferSimplifiedHG(freq);
480  break;
481  }
482  return value;
483  }
484 
485  double BackEndSiPM::ApplySaturation (double value, BackEndSiPM::TransferStep step) const {
486  // return value;
487  switch(step){
488  case eFirstAdder:
489  value = ApplySaturationFirstAdder(value);
490  break;
491  case eSecondAdder:
492  value = ApplySaturationSecondAdder(value);
493  break;
494  case eLowGainAmplifier:
495  value = ApplySaturationLowGainAmplifier(value);
496  break;
497  case eHighGainAmplifier:
498  value = ApplySaturationHighGainAmplifier(value);
499  break;
500  case eADC:
501  value = ApplySaturationADC(value);
502  break;
503  case eSimplifiedLG:
504  value = ApplySaturationLowGainAmplifier(value);
505  break;
506  case eSimplifiedHG:
507  value = ApplySaturationHighGainAmplifier(value);
508  break;
509  }
510  return value;
511  }
512 
513  std::complex<double>
515  const
516  {
517  TFormula transferReFirstAdder("transferReFirstAdder",Get1stAdderFunctionReal()); //Transfer RE for Pre Amplifier in MHz
518  transferReFirstAdder.SetParameter(0, GetFirstAdderPar1());
519  transferReFirstAdder.SetParameter(1, GetFirstAdderPar2());
520  transferReFirstAdder.SetParameter(2, GetFirstAdderPar3());
521  transferReFirstAdder.SetParameter(3, GetFirstAdderPar4());
522  transferReFirstAdder.SetParameter(4, GetFirstAdderPar5());
523 
524  TFormula transferImFirstAdder("transferImFirstAdder",Get1stAdderFunctionIm()); //Transfer RE for Fast Shaper in MHz
525  transferImFirstAdder.SetParameter(0, GetFirstAdderPar1());
526  transferImFirstAdder.SetParameter(1, GetFirstAdderPar2());
527  transferImFirstAdder.SetParameter(2, GetFirstAdderPar3());
528  transferImFirstAdder.SetParameter(3, GetFirstAdderPar4());
529  transferImFirstAdder.SetParameter(4, GetFirstAdderPar5());
530 
531  /* cout << "transfer function first adder integrator: " << endl;
532  cout << GetAdderFunctionReal() << endl;
533  cout << GetFirstAdderPar1() << " " << GetFirstAdderPar2() << " " << GetFirstAdderPar3() << " " << GetFirstAdderPar4() << " " << GetFirstAdderPar5() << endl;*/
534 
535  const std::complex<double> totalTransfer(transferReFirstAdder.Eval(freq), transferImFirstAdder.Eval(freq));
536 
537  return totalTransfer;
538  }
539 
540  std::complex<double>
542  const
543  {
544  TFormula transferReSecondAdder("transferReSecondAdder",Get2ndAdderFunctionReal()); //Transfer RE for Pre Amplifier in MHz
545  transferReSecondAdder.SetParameter(0, GetSecondAdderPar1());
546  transferReSecondAdder.SetParameter(1, GetSecondAdderPar2());
547  transferReSecondAdder.SetParameter(2, GetSecondAdderPar3());
548  transferReSecondAdder.SetParameter(3, GetSecondAdderPar4());
549  transferReSecondAdder.SetParameter(4, GetSecondAdderPar5());
550 
551  TFormula transferImSecondAdder("transferImSecondAdder",Get2ndAdderFunctionIm()); //Transfer RE for Fast Shaper in MHz
552  transferImSecondAdder.SetParameter(0, GetSecondAdderPar1());
553  transferImSecondAdder.SetParameter(1, GetSecondAdderPar2());
554  transferImSecondAdder.SetParameter(2, GetSecondAdderPar3());
555  transferImSecondAdder.SetParameter(3, GetSecondAdderPar4());
556  transferImSecondAdder.SetParameter(4, GetSecondAdderPar5());
557 
558  /*cout << "transfer function second adder integrator: " << endl;
559  cout << GetAdderFunctionReal() << endl;
560  cout << GetSecondAdderPar1() << " " << GetSecondAdderPar2() << " " << GetSecondAdderPar3() << " " << GetSecondAdderPar4() << " " << GetSecondAdderPar5() << endl;*/
561 
562  const std::complex<double> totalTransfer(transferReSecondAdder.Eval(freq), transferImSecondAdder.Eval(freq));
563 
564  return totalTransfer;
565  }
566 
567  std::complex<double>
569  const
570  {
571  TFormula transferReLowGainAmplifier("transferReLowGainAmplifier", GetAmplifierLGFunctionReal()); //Transfer RE for Pre Amplifier in MHz
572  transferReLowGainAmplifier.SetParameter(0, GetLowGainAmplifierPar1());
573  transferReLowGainAmplifier.SetParameter(1, GetLowGainAmplifierPar2());
574  transferReLowGainAmplifier.SetParameter(2, GetLowGainAmplifierPar3());
575  transferReLowGainAmplifier.SetParameter(3, GetLowGainAmplifierPar4());
576  transferReLowGainAmplifier.SetParameter(4, GetLowGainAmplifierPar5());
577  transferReLowGainAmplifier.SetParameter(5, GetLowGainAmplifierPar6());
578  transferReLowGainAmplifier.SetParameter(6, GetLowGainAmplifierPar7());
579  transferReLowGainAmplifier.SetParameter(7, GetLowGainAmplifierPar8());
580  transferReLowGainAmplifier.SetParameter(8, GetLowGainAmplifierPar9());
581  transferReLowGainAmplifier.SetParameter(9, GetLowGainAmplifierAdjustmentFactor());
582 
583  TFormula transferImLowGainAmplifier("transferImLowGainAmplifier", GetAmplifierLGFunctionIm()); //Transfer RE for Fast Shaper in MHz
584  transferImLowGainAmplifier.SetParameter(0, GetLowGainAmplifierPar1());
585  transferImLowGainAmplifier.SetParameter(1, GetLowGainAmplifierPar2());
586  transferImLowGainAmplifier.SetParameter(2, GetLowGainAmplifierPar3());
587  transferImLowGainAmplifier.SetParameter(3, GetLowGainAmplifierPar4());
588  transferImLowGainAmplifier.SetParameter(4, GetLowGainAmplifierPar5());
589  transferImLowGainAmplifier.SetParameter(5, GetLowGainAmplifierPar6());
590  transferImLowGainAmplifier.SetParameter(6, GetLowGainAmplifierPar7());
591  transferImLowGainAmplifier.SetParameter(7, GetLowGainAmplifierPar8());
592  transferImLowGainAmplifier.SetParameter(8, GetLowGainAmplifierPar9());
593  transferImLowGainAmplifier.SetParameter(9, GetLowGainAmplifierAdjustmentFactor());
594 
595 /* cout << "transfer function Low gain integrator: " << endl;
596  cout << GetAmplifierFunctionReal() << endl;
597  cout << GetLowGainAmplifierPar1() << " " << GetLowGainAmplifierPar2() << " " << GetLowGainAmplifierPar3() << " " << GetLowGainAmplifierPar4() << " " << GetLowGainAmplifierPar5();
598  cout << " " << GetLowGainAmplifierPar6() << " " << GetLowGainAmplifierPar7() << " " << GetLowGainAmplifierPar8() << " " << GetLowGainAmplifierPar9() << endl;*/
599 
600  const std::complex<double> totalTransfer(transferReLowGainAmplifier.Eval(freq), transferImLowGainAmplifier.Eval(freq));
601 
602  return totalTransfer;
603  }
604 
605  std::complex<double>
607  const
608  {
609  TFormula transferReHighGainAmplifier("transferReHighGainAmplifier", GetAmplifierHGFunctionReal()); //Transfer RE for Pre Amplifier in MHz
610  transferReHighGainAmplifier.SetParameter(0, GetHighGainAmplifierPar1());
611  transferReHighGainAmplifier.SetParameter(1, GetHighGainAmplifierPar2());
612  transferReHighGainAmplifier.SetParameter(2, GetHighGainAmplifierPar3());
613  transferReHighGainAmplifier.SetParameter(3, GetHighGainAmplifierPar4());
614  transferReHighGainAmplifier.SetParameter(4, GetHighGainAmplifierPar5());
615  transferReHighGainAmplifier.SetParameter(5, GetHighGainAmplifierPar6());
616  transferReHighGainAmplifier.SetParameter(6, GetHighGainAmplifierPar7());
617  transferReHighGainAmplifier.SetParameter(7, GetHighGainAmplifierPar8());
618  transferReHighGainAmplifier.SetParameter(8, GetHighGainAmplifierPar9());
619  transferReHighGainAmplifier.SetParameter(9, GetHighGainAmplifierAdjustmentFactor());
620 
621  TFormula transferImHighGainAmplifier("transferImHighGainAmplifier", GetAmplifierHGFunctionIm()); //Transfer RE for Fast Shaper in MHz
622  transferImHighGainAmplifier.SetParameter(0, GetHighGainAmplifierPar1());
623  transferImHighGainAmplifier.SetParameter(1, GetHighGainAmplifierPar2());
624  transferImHighGainAmplifier.SetParameter(2, GetHighGainAmplifierPar3());
625  transferImHighGainAmplifier.SetParameter(3, GetHighGainAmplifierPar4());
626  transferImHighGainAmplifier.SetParameter(4, GetHighGainAmplifierPar5());
627  transferImHighGainAmplifier.SetParameter(5, GetHighGainAmplifierPar6());
628  transferImHighGainAmplifier.SetParameter(6, GetHighGainAmplifierPar7());
629  transferImHighGainAmplifier.SetParameter(7, GetHighGainAmplifierPar8());
630  transferImHighGainAmplifier.SetParameter(8, GetHighGainAmplifierPar9());
631  transferImHighGainAmplifier.SetParameter(9, GetHighGainAmplifierAdjustmentFactor());
632 
633  /*cout << "transfer function High gain integrator: " << endl;
634  cout << GetAmplifierFunctionReal() << endl;
635  cout << GetHighGainAmplifierPar1() << " " << GetHighGainAmplifierPar2() << " " << GetHighGainAmplifierPar3() << " " << GetHighGainAmplifierPar4() << " " << GetHighGainAmplifierPar5();
636  cout << " " << GetHighGainAmplifierPar6() << " " << GetHighGainAmplifierPar7() << " " << GetHighGainAmplifierPar8() << " " << GetHighGainAmplifierPar9() << endl;*/
637 
638  const std::complex<double> totalTransfer(transferReHighGainAmplifier.Eval(freq), transferImHighGainAmplifier.Eval(freq));
639 
640  return totalTransfer;
641  }
642 
643  std::complex<double>
645  const
646  {
647  TFormula transferReADC("transferReADC",GetADCFunctionReal()); //Transfer RE for Pre Amplifier in MHz
648  transferReADC.SetParameter(0, GetADCPar1());
649  transferReADC.SetParameter(1, GetADCPar2());
650  transferReADC.SetParameter(2, GetADCPar3());
651  transferReADC.SetParameter(3, GetADCPar4());
652  transferReADC.SetParameter(4, GetADCPar5());
653  transferReADC.SetParameter(5, GetADCPar6());
654 
655  TFormula transferImADC("transferImADC",GetADCFunctionIm()); //Transfer RE for Fast Shaper in MHz
656  transferImADC.SetParameter(0, GetADCPar1());
657  transferImADC.SetParameter(1, GetADCPar2());
658  transferImADC.SetParameter(2, GetADCPar3());
659  transferImADC.SetParameter(3, GetADCPar4());
660  transferImADC.SetParameter(4, GetADCPar5());
661  transferImADC.SetParameter(5, GetADCPar6());
662 
663  /* cout << "transfer function ADC integrator: " << endl;
664  cout << GetAmplifierFunctionReal() << endl;
665  cout << GetADCPar1() << " " << GetADCPar2() << " " << GetADCPar3() << " " << GetADCPar4() << " " << GetADCPar5();
666  cout << " " << GetADCPar6() << endl;*/
667 
668  const std::complex<double> totalTransfer(transferReADC.Eval(freq), transferImADC.Eval(freq));
669 
670  return totalTransfer;
671  }
672 
673 
674 
675  std::complex<double>
677  const
678  {
679 
680  double totalGain = GetSimplifiedGainLG();
681  double totalTime = GetSimplifiedTime();
682 
683  const std::complex<double> totalTransfer(-(totalGain/(1+pow(freq*utl::kTwoPi*totalTime,2))),
684  (totalGain*(freq*utl::kTwoPi*totalTime)/(1+pow(freq*utl::kTwoPi*totalTime,2))));
685 
686  return totalTransfer;
687  }
688 
689  std::complex<double>
691  const
692  {
693 
694  double totalGain = GetSimplifiedGainHG();
695  double totalTime = GetSimplifiedTime();
696 
697  const std::complex<double> totalTransfer(-(totalGain/(1+pow(freq*3.1416*2*totalTime,2))),
698  (totalGain*(freq*2*3.1416*totalTime)/(1+pow(freq*2*3.1416*totalTime,2))));
699 
700  return totalTransfer;
701  }
702 
703  /*
704  *********************************
705  ***** Apply Saturation *****
706  *********************************
707  */
708 
709  double
711  const
712  {
713 
714  v += GetFirstAdderOffset();
715  if (v > GetFirstAdderSaturationUp())
716  return GetFirstAdderSaturationUp();
717  else if (v < GetFirstAdderSaturationDown())
719  else
720  return v;
721  }
722 
723  double
725  const
726  {
727 
728  v += GetSecondAdderOffset();
729  if (v > GetSecondAdderSaturationUp())
731  else if (v < GetSecondAdderSaturationDown())
733  else
734  return v;
735  }
736 
737  double
739  const
740  {
741 
745  else if (v < GetLowGainAmplifierSaturationDown())
747  else
748  return v;
749  }
750 
751  double
753  const
754  {
755 
759  else if (v < GetHighGainAmplifierSaturationDown())
761  else
762  return v;
763  }
764 
765  double
767  const
768  {
769 
770  v += GetADCOffset();
771  if (v > GetADCSaturationUp())
772  return GetADCSaturationUp();
773  else if (v < GetADCSaturationDown())
774  return GetADCSaturationDown();
775  else
776  return v;
777  }
778 
779 }
double GetLowGainAmplifierPar9() const
Definition: BackEndSiPM.cc:251
const char * GetADCFunctionIm() const
Definition: BackEndSiPM.h:234
double GetHighGainAmplifierPar4() const
Definition: BackEndSiPM.cc:304
utl::Validated< double > fADCSaturationUp
Definition: BackEndSiPM.h:362
utl::Validated< double > fSecondAdderOffset
Definition: BackEndSiPM.h:323
double GetADCPar3() const
Definition: BackEndSiPM.cc:381
double GetADCPar2() const
Definition: BackEndSiPM.cc:375
double GetSecondAdderOffset() const
Definition: BackEndSiPM.cc:192
double GetSimplifiedGainLG() const
Simplified transfer functions (low-passs active filter)
Definition: BackEndSiPM.cc:432
const char * Get2ndAdderFunctionReal() const
Definition: BackEndSiPM.h:126
utl::Validated< double > fADCPar2
Definition: BackEndSiPM.h:357
utl::Validated< double > fFirstAdderPar4
Definition: BackEndSiPM.h:310
const char * Get2ndAdderFunctionIm() const
Definition: BackEndSiPM.h:132
double GetSecondAdderPar3() const
Definition: BackEndSiPM.cc:162
utl::Validated< double > fFirstAdderSaturationUp
Definition: BackEndSiPM.h:312
double GetLowGainAmplifierPar5() const
Definition: BackEndSiPM.cc:227
utl::Validated< double > fADCPar3
Definition: BackEndSiPM.h:358
double GetHighGainAmplifierPar1() const
Definition: BackEndSiPM.cc:286
utl::Validated< double > fADCPar1
Definition: BackEndSiPM.h:356
utl::Validated< double > fLowGainAmplifierPar6
Definition: BackEndSiPM.h:331
double GetHighGainAmplifierOffset() const
Definition: BackEndSiPM.cc:352
double GetFirstAdderPar4() const
Definition: BackEndSiPM.cc:115
double GetLowGainAmplifierPar7() const
Definition: BackEndSiPM.cc:239
utl::Validated< double > fSecondAdderSaturationDown
Definition: BackEndSiPM.h:322
utl::Validated< double > fLowGainAmplifierPar8
Definition: BackEndSiPM.h:333
int freq
Definition: dump1090.h:244
const char * GetAmplifierHGFunctionIm() const
Definition: BackEndSiPM.h:197
double ApplySaturation(double value, TransferStep step) const
Definition: BackEndSiPM.cc:485
static const char *const kComponentsNames[13]
double GetADCPar5() const
Definition: BackEndSiPM.cc:393
det::DetectorComponent< C, MManagerProvider > Type
Type specializing det::DetectorComponent for Muon hierarchy.
utl::Validated< double > fLowGainAmplifierSaturationDown
Definition: BackEndSiPM.h:338
double GetHighGainAmplifierPar2() const
Definition: BackEndSiPM.cc:292
utl::Validated< double > fSecondAdderPar5
Definition: BackEndSiPM.h:320
double GetHighGainAmplifierSaturationUp() const
Definition: BackEndSiPM.cc:340
double GetLowGainAmplifierPar2() const
Definition: BackEndSiPM.cc:209
double GetHighGainAmplifierPar5() const
Definition: BackEndSiPM.cc:310
const char * GetAmplifierHGFunctionReal() const
Definition: BackEndSiPM.h:187
std::complex< double > ComputeTransfer(double freq, TransferStep step) const
Definition: BackEndSiPM.cc:455
double GetFirstAdderPar3() const
Definition: BackEndSiPM.cc:109
static const char *const kComponentsIds[13]
double GetADCSaturationDown() const
Definition: BackEndSiPM.cc:411
static const char *const kComponentName
Definition: BackEndSiPM.h:41
double GetLowGainAmplifierSaturationDown() const
Definition: BackEndSiPM.cc:263
double GetFirstAdderSaturationDown() const
Definition: BackEndSiPM.cc:133
double pow(const double x, const unsigned int i)
double ApplySaturationSecondAdder(double v) const
Definition: BackEndSiPM.cc:724
double GetADCPar6() const
Definition: BackEndSiPM.cc:399
utl::Validated< double > fHighGainAmplifierOffset
Definition: BackEndSiPM.h:353
static const char *const kComponentId
Definition: BackEndSiPM.h:43
const char * GetADCFunctionReal() const
ADC transfer function.
Definition: BackEndSiPM.h:228
T & GetData(P< T > &d, const std::string &p) const
Common utility function for configuration.
utl::Validated< double > fHighGainAmplifierSaturationUp
Definition: BackEndSiPM.h:351
double GetLowGainAmplifierPar4() const
Definition: BackEndSiPM.cc:221
const char * Get1stAdderFunctionReal() const
First and second adder transfer function:
Definition: BackEndSiPM.h:104
double GetLowGainAmplifierOffset() const
Definition: BackEndSiPM.cc:269
utl::Validated< double > fLowGainAmplifierPar7
Definition: BackEndSiPM.h:332
double GetHighGainAmplifierPar6() const
Definition: BackEndSiPM.cc:316
double GetHighGainAmplifierPar3() const
Definition: BackEndSiPM.cc:298
double GetHighGainAmplifierPar8() const
Definition: BackEndSiPM.cc:328
utl::Validated< double > fNumberOfChannelsToGroup
Definition: BackEndSiPM.h:366
utl::Validated< double > fHighGainAmplifierPar8
Definition: BackEndSiPM.h:348
short GetNumberOfChannelsToGroup() const
Definition: BackEndSiPM.cc:423
utl::Validated< double > fHighGainAmplifierPar9
Definition: BackEndSiPM.h:349
double GetFirstAdderOffset() const
Definition: BackEndSiPM.cc:139
utl::Validated< double > fLowGainAmplifierSaturationUp
Definition: BackEndSiPM.h:337
utl::Validated< double > fADCPar5
Definition: BackEndSiPM.h:360
utl::Validated< double > fSimplifiedGainLG
Definition: BackEndSiPM.h:368
utl::Validated< double > fHighGainAmplifierPar5
Definition: BackEndSiPM.h:345
const char * GetAmplifierLGFunctionIm() const
Definition: BackEndSiPM.h:162
double GetLowGainAmplifierPar3() const
Definition: BackEndSiPM.cc:215
utl::Validated< double > fFirstAdderPar2
Definition: BackEndSiPM.h:308
Array of Scintillator.
constexpr double kTwoPi
Definition: MathConstants.h:27
utl::Validated< double > fADCOffset
Definition: BackEndSiPM.h:364
utl::Validated< double > fHighGainAmplifierSaturationDown
Definition: BackEndSiPM.h:352
double GetLowGainAmplifierAdjustmentFactor() const
Definition: BackEndSiPM.cc:275
utl::Validated< double > fLowGainAmplifierPar9
Definition: BackEndSiPM.h:334
double GetSecondAdderSaturationDown() const
Definition: BackEndSiPM.cc:186
utl::Validated< double > fSecondAdderPar2
Definition: BackEndSiPM.h:317
double GetLowGainAmplifierPar6() const
Definition: BackEndSiPM.cc:233
utl::Validated< double > fSecondAdderSaturationUp
Definition: BackEndSiPM.h:321
utl::Validated< double > fSimplifiedGainHG
Definition: BackEndSiPM.h:369
double GetADCOffset() const
Definition: BackEndSiPM.cc:417
std::complex< double > ComputeTransferLowGainAmplifier(double freq) const
Definition: BackEndSiPM.cc:568
utl::Validated< double > fHighGainAmplifierPar7
Definition: BackEndSiPM.h:347
std::complex< double > ComputeTransferSimplifiedLG(double freq) const
Definition: BackEndSiPM.cc:676
utl::Validated< double > fFirstAdderOffset
Definition: BackEndSiPM.h:314
utl::Validated< double > fLowGainAmplifierAdjustmentFactor
Definition: BackEndSiPM.h:336
utl::Validated< double > fADCPar4
Definition: BackEndSiPM.h:359
utl::Validated< double > fSecondAdderPar3
Definition: BackEndSiPM.h:318
utl::Validated< double > fFirstAdderSaturationDown
Definition: BackEndSiPM.h:313
double GetLowGainAmplifierPar1() const
Definition: BackEndSiPM.cc:203
double GetLowGainAmplifierPar8() const
Definition: BackEndSiPM.cc:245
std::complex< double > ComputeTransferFirstAdder(double freq) const
Definition: BackEndSiPM.cc:514
utl::Validated< double > fLowGainAmplifierOffset
Definition: BackEndSiPM.h:339
double GetSecondAdderPar4() const
Definition: BackEndSiPM.cc:168
double GetSimplifiedGainHG() const
Definition: BackEndSiPM.cc:438
utl::Validated< double > fHighGainAmplifierPar2
Definition: BackEndSiPM.h:342
std::map< std::string, std::string > IndexMap
Definition: VManager.h:133
utl::Validated< double > fHighGainAmplifierPar4
Definition: BackEndSiPM.h:344
double GetFirstAdderPar5() const
Definition: BackEndSiPM.cc:121
utl::Validated< double > fHighGainAmplifierAdjustmentFactor
Definition: BackEndSiPM.h:350
double GetHighGainAmplifierPar7() const
Definition: BackEndSiPM.cc:322
std::complex< double > ComputeTransferHighGainAmplifier(double freq) const
Definition: BackEndSiPM.cc:606
double GetADCPar4() const
Definition: BackEndSiPM.cc:387
double GetFirstAdderSaturationUp() const
Definition: BackEndSiPM.cc:127
utl::Validated< double > fLowGainAmplifierPar5
Definition: BackEndSiPM.h:330
std::complex< double > ComputeTransferSecondAdder(double freq) const
Definition: BackEndSiPM.cc:541
utl::Validated< double > fLowGainAmplifierPar3
Definition: BackEndSiPM.h:328
double ApplySaturationADC(double v) const
Definition: BackEndSiPM.cc:766
utl::Validated< double > fHighGainAmplifierPar1
Definition: BackEndSiPM.h:341
double GetHighGainAmplifierPar9() const
Definition: BackEndSiPM.cc:334
double ApplySaturationLowGainAmplifier(double v) const
Definition: BackEndSiPM.cc:738
const char * Get1stAdderFunctionIm() const
Definition: BackEndSiPM.h:110
std::complex< double > ComputeTransferADC(double freq) const
Definition: BackEndSiPM.cc:644
double GetSecondAdderPar1() const
Definition: BackEndSiPM.cc:150
utl::Validated< double > fADCPar6
Definition: BackEndSiPM.h:361
utl::Validated< double > fADCSaturationDown
Definition: BackEndSiPM.h:363
double GetSecondAdderPar5() const
Definition: BackEndSiPM.cc:174
utl::Validated< double > fSimplifiedTime
Definition: BackEndSiPM.h:370
double GetSecondAdderSaturationUp() const
Definition: BackEndSiPM.cc:180
utl::Validated< double > fLowGainAmplifierPar4
Definition: BackEndSiPM.h:329
double GetSecondAdderPar2() const
Definition: BackEndSiPM.cc:156
std::complex< double > ComputeTransferSimplifiedHG(double freq) const
Definition: BackEndSiPM.cc:690
double GetLowGainAmplifierSaturationUp() const
Definition: BackEndSiPM.cc:257
double GetADCSaturationUp() const
Definition: BackEndSiPM.cc:405
double GetFirstAdderPar2() const
Definition: BackEndSiPM.cc:103
utl::Validated< double > fHighGainAmplifierPar6
Definition: BackEndSiPM.h:346
double ApplySaturationHighGainAmplifier(double v) const
Definition: BackEndSiPM.cc:752
utl::Validated< double > fFirstAdderPar5
Definition: BackEndSiPM.h:311
double GetHighGainAmplifierAdjustmentFactor() const
Definition: BackEndSiPM.cc:358
utl::Validated< double > fLowGainAmplifierPar2
Definition: BackEndSiPM.h:327
double GetADCPar1() const
Definition: BackEndSiPM.cc:369
double GetHighGainAmplifierSaturationDown() const
Definition: BackEndSiPM.cc:346
double GetFirstAdderPar1() const
Definition: BackEndSiPM.cc:97
BackEndSiPM(int cId, const det::VManager::IndexMap &parentMap, const Module &parent)
Constructs the electronic BackEndSiPM.
Definition: BackEndSiPM.cc:30
utl::Validated< double > fFirstAdderPar3
Definition: BackEndSiPM.h:309
utl::Validated< double > fSecondAdderPar1
Definition: BackEndSiPM.h:316
utl::Validated< double > fSecondAdderPar4
Definition: BackEndSiPM.h:319
utl::Validated< double > fFirstAdderPar1
Definition: BackEndSiPM.h:307
double ApplySaturationFirstAdder(double v) const
Definition: BackEndSiPM.cc:710
utl::Validated< double > fLowGainAmplifierPar1
Definition: BackEndSiPM.h:326
const char * GetAmplifierLGFunctionReal() const
High gain and low gain Amplifier transfer function.
Definition: BackEndSiPM.h:152
utl::Validated< double > fHighGainAmplifierPar3
Definition: BackEndSiPM.h:343
double GetSimplifiedTime() const
Definition: BackEndSiPM.cc:444

, generated on Tue Sep 26 2023.