50{
54
56 JLimit_t& numberOfEvents = inputFile.getLimit();
58 string detectorFile;
59 Double_t TMax_ns;
60 double R;
62 ULong_t seed;
64
69
70 try {
71
73
74 JParser<> zap(
"Auxiliary program to determine PMT parameters from OMGsim data.");
75
76 zap[
'f'] =
make_field(inputFile,
"input file.");
79 zap[
'a'] =
make_field(detectorFile,
"detector file.");
80 zap[
'T'] =
make_field(TMax_ns,
"time window [ns].") = 20.0;
81 zap[
'R'] =
make_field(R,
"radioactivity [Bq]");
85
86 zap(argc, argv);
87 }
88 catch(const exception &error) {
89 FATAL(error.what() << endl);
90 }
91
92
93 gRandom->SetSeed(seed);
94
95
97
98 try {
100 }
103 }
104
106 FATAL(
"Wrong number of modules " <<
detector.size() << endl);
107 }
108
109
111
113
115
116 const Int_t nx = combinatorics.getNumberOfPairs();
117 const Double_t
xmin = -0.5;
118 const Double_t
xmax = nx - 0.5;
119
120 const Double_t ymin = -floor(TMax_ns) + 0.125;
121 const Double_t ymax = +floor(TMax_ns) - 0.125;
122 const Int_t ny = (Int_t) ((ymax - ymin) / 0.25);
123
125
126 h2s.Sumw2();
127
128
130
131 for (size_t i = 0; i != module.size(); ++i) {
132 router.put(module[i].getID(), i);
133 }
134
135 double numberOfPrimaries = 0.0;
136
138
139 try {
140
141 STATUS(
"Extracting header data... " << flush);
142
144
145 const JHead buffer(header);
146
148 numberOfPrimaries = buffer.norma.numberOfPrimaries;
149 else
151
153
154 } catch(const exception& error) {
155 FATAL(error.what() << endl);
156 }
157
158 if (numberOfPrimaries == 0.0) {
159 FATAL(
"Number of primaries " << numberOfPrimaries << endl);
160 }
161
162
164
167
169 int pmt;
170 double t1;
171 };
172
174
175
177
179
181
184 }
185
186 const Evt* evt = inputFile.
next();
187
188 if (evt->
mc_hits.size() >= 2u) {
189
190 buffer.clear();
191
192 for (
const auto& hit : evt->
mc_hits) {
193
194 if (router.has(hit.pmt_id)) {
195
196 const int pmt = router.get(hit.pmt_id);
197
198 input .clear();
199 output.clear();
200
202
204
205 for (const auto& hit : output) {
206 buffer.push_back({pmt, hit.t_ns});
207 }
208 }
209 }
210
211
212 for (vector<hit_type>::const_iterator p = buffer.begin(); p != buffer.end(); ++p) {
213 for (vector<hit_type>::const_iterator q = buffer.begin(); p != q; ++q) {
214 h2s.Fill((double) combinatorics.getIndex(p->pmt,q->pmt),
216 }
217 }
218 }
219 }
221
222
223 const double W = R / numberOfPrimaries;
224
225 h2s.Scale(W);
226
227 out << h2s;
228
229 out.Write();
230 out.Close();
231}
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Data structure for a composite optical module.
Template data structure for PMT I/O.
Data structure for PMT parameters.
double gainSpread
gain spread [unit]
double TTS_ns
transition time spread [ns]
JProperties getProperties(const JEquationParameters &equation=JPMTParameters::getEquationParameters())
Get properties of this class.
double PunderAmplified
probability of underamplified hit
bool slewing
time slewing of analogue signal
Utility class to parse parameter values.
int getID() const
Get identifier.
Utility class to parse command line options.
General purpose class for object reading from a list of file names.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
static const char *const _2S
Name extension for 2D counts.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JCalibration getCalibration(const JCalibration &first, const JCalibration &second)
Get calibration to go from first to second calibration.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
KM3NeT DAQ data structures and auxiliaries.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
std::vector< Hit > mc_hits
MC: list of MC truth hits.
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Auxiliary class to sort pairs of PMT addresses within optical module.
PMT analogue signal processor.
Data structure for PMT analogue signal.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.