Jpp  17.0.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JPMTSignalProcessor.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 
9 
10 #include "Jeep/JPrint.hh"
11 #include "Jeep/JParser.hh"
12 #include "Jeep/JMessage.hh"
13 
14 
15 /**
16  * \file
17  *
18  * Example program to test PMT signal processor probability.
19  * \author mdejong
20  */
21 int main(int argc, char **argv)
22 {
23  using namespace std;
24  using namespace JPP;
25 
26  int numberOfHits;
27  JPMTParametersMap parameters;
28  JPMTIdentifier pmt;
29  int NPE;
30  double precision;
31  int debug;
32 
33  try {
34 
35  JParser<> zap("Example program to test PMT signal processor probability.");
36 
37  zap['n'] = make_field(numberOfHits) = 10000;
39  zap['p'] = make_field(pmt) = JPMTIdentifier(-1,0);
40  zap['N'] = make_field(NPE) = 1;
41  zap['e'] = make_field(precision) = 0.02;
42  zap['d'] = make_field(debug) = 3;
43 
44  zap(argc, argv);
45  }
46  catch(const exception &error) {
47  FATAL(error.what() << endl);
48  }
49 
50 
51  const double QEmax = 1.0;
52 
53  JPMTParameters buffer = parameters.getPMTParameters(pmt);
54 
55  DEBUG("PMT parameters:" << endl);
56  DEBUG(buffer.getProperties(JEquationParameters("=", "\n", "", "")) << endl);
57 
58  if (buffer.QE > QEmax) {
59 
60  WARNING("PMT QE set to " << QEmax << endl);
61 
62  buffer.QE = QEmax;
63  }
64 
65  ASSERT(numberOfHits > 0);
66 
67  for (JPMTSignalProcessorInterface* cpu : {
68  (JPMTSignalProcessorInterface*) new JPMTSignalProcessorInterface(),
69  (JPMTSignalProcessorInterface*) new JPMTAnalogueSignalProcessor(buffer) }) {
70 
71  int number_of_hits = 0;
72 
73  for (int i = 0; i != numberOfHits; ++i) {
74 
75  int npe = 0;
76 
77  for (int __i = 0; __i != NPE; ++__i) {
78  if (cpu->applyQE()) {
79  ++npe;
80  }
81  }
82 
83  double x = cpu->getRandomCharge(npe);
84 
85  try {
86 
87  if (cpu->applyThreshold(x)) {
88  ++number_of_hits;
89  }
90 
91  } catch (const JValueOutOfRange& exception) {
92 
93  DEBUG(exception.what());
94  continue;
95  }
96 
97  }
98 
99  const double P = (double) number_of_hits / (double) numberOfHits;
100 
101  DEBUG("Number of generated hits " << setw(8) << right << numberOfHits << endl);
102  DEBUG("Number of accepted hits " << setw(8) << right << number_of_hits << endl);
103  DEBUG("Probability (real) " << FIXED(8,5) << P << endl);
104  DEBUG("Probability (calc) " << FIXED(8,5) << cpu->getSurvivalProbability(NPE) << endl);
105 
106  ASSERT(fabs(P - cpu->getSurvivalProbability(NPE)) < precision * cpu->getSurvivalProbability(NPE));
107 
108  delete cpu;
109  }
110 
111  return 0;
112 }
Utility class to parse command line options.
Definition: JParser.hh:1500
#define WARNING(A)
Definition: JMessage.hh:65
int main(int argc, char *argv[])
Definition: Main.cc:15
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
Simple data structure to support I/O of equations (see class JLANG::JEquation).
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:66
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
I/O formatting auxiliaries.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
int debug
debug level
Definition: JSirene.cc:66
General purpose messaging.
#define FATAL(A)
Definition: JMessage.hh:67
Utility class to parse command line options.
PMT analogue signal processor.
then $DIR JPlotNPE PDG P
Definition: JPlotNPE-PDG.sh:62
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62