Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
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 */
21int main(int argc, char **argv)
22{
23 using namespace std;
24 using namespace JPP;
25
26 int numberOfHits;
27 JPMTParametersMap parameters;
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;
38 zap['P'] = make_field(parameters) = JPARSER::initialised();
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
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}
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define ASSERT(A,...)
Assert macro.
Definition JMessage.hh:90
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define WARNING(A)
Definition JMessage.hh:65
PMT analogue signal processor.
int main(int argc, char **argv)
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
I/O formatting auxiliaries.
Auxiliary class for map of PMT parameters.
const JPMTParameters & getPMTParameters(const JPMTIdentifier &id) const
Get PMT parameters.
Data structure for PMT parameters.
double QE
relative quantum efficiency
JProperties getProperties(const JEquationParameters &equation=JPMTParameters::getEquationParameters())
Get properties of this class.
Simple data structure to support I/O of equations (see class JLANG::JEquation).
Exception for accessing a value in a collection that is outside of its range.
Utility class to parse command line options.
Definition JParser.hh:1698
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68