49{
53
55
57 string detectorFile;
58 Long64_t numberOfSlices;
62 int run;
65 double sigma_ns;
66 bool fast;
67 UInt_t seed;
69
70 try {
71
72 JParser<> zap(
"Auxiliary program to write time slices with random data.");
73
76 zap[
'a'] =
make_field(detectorFile,
"detector.");
81 zap[
'T'] =
make_field(TCLB_ns,
"CLB state-machine time jitter") = 256;
82 zap[
'N'] =
make_field(recycling,
"number of recycles / time interval for sampling data [ns]") = make_pair(0, 0.0);
84 zap[
'F'] =
make_field(fast,
"fast - disable PMT simulation");
87
88 zap(argc, argv);
89 }
90 catch(const exception &error) {
91 FATAL(error.what() << endl);
92 }
93
94
97 FATAL(
"Invalid number of output files; should be 1 or 2." << endl);
98 }
99
100 gRandom->SetSeed(seed);
101
103
104
106
107 if (pmtParameters.
getQE() != 1.0) {
108
109 WARNING(
"Correct background rates with global efficiency " << pmtParameters.
getQE() << endl);
110
112 }
113
114 DEBUG(
"PMT parameters: " << endl << pmtParameters << endl);
115 DEBUG(
"K40 rates: " << endl << rates_Hz << endl);
116
118
119 try {
121 }
124 }
125
127
130
132
133 NOTICE(
"Using run-by-run:" << endl << runbyrun << endl);
134
136 FATAL(
"Run-by-run simulation yields no input." << endl);
137 }
138
141 }
142
143 try {
147 }
150 }
151
152 } else {
153
154 NOTICE(
"Using fixed rates [Hz]: " << rates_Hz << endl);
155
156 try {
158 simbad.reset(fast ?
162 }
165 }
166 }
167
168
169 JTimer timerco(
"constructor");
170 JTimer timerrc(
"recycle");
172
173 for (
size_t i = 0; i !=
outputFile.size(); ++i) {
174
176
179 }
180 }
181
184
185 int counter = 0;
186
187 for ( ; counter != numberOfSlices; ) {
188
189 STATUS(
"slice: " << setw(10) << counter <<
'\r');
DEBUG(endl);
190
191 int frame_index = counter + 1;
192
194
196
198
199 frame_index = summaryRouter.getFrameIndex();
200 run = summaryRouter.getRunNumber();
201 }
202
205
207
208 timerco.start();
209
211
212 timerco.stop();
213
214 timerIO.start();
215
216 outputFile.rbegin()->put(timeslice); ++counter;
217
218 timerIO.stop();
219
220 for (size_t i = 1; i <= recycling.first && counter != numberOfSlices; ++i) {
221
222 STATUS(
"slice: " << setw(10) << counter <<
'\r');
DEBUG(endl);
223
224 timerrc.start();
225
226 timeslice.recycle(recycling.second);
227
228 timerrc.stop();
229
230 timerIO.start();
231
232 outputFile.rbegin()->put(timeslice); ++counter;
233
234 timerIO.stop();
235 }
236 }
238
240 timerco.print(cout, true);
241 timerrc.print(cout, true);
242 timerIO.print(cout, true);
243 }
244
246
247 {
249
252
255
256 copy(buffer, header);
257 }
258
261
262 for (
size_t i = 0; i !=
outputFile.size(); ++i) {
264 }
265}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
void push(T JHead::*pd)
Push given data member to Head.
static double getSigma()
Get intrinsic time smearing of K40 coincidences.
static void setSigma(const double sigma)
Set intrinsic time smearing of K40 coincidences.
Default implementation of the simulation of K40 background.
Default PMT simulation interface.
Auxiliary class for map of PMT parameters.
double getQE(const JPMTIdentifier &id) const
Get QE of given PMT.
Auxiliary class for CPU timing and usage.
virtual const char * what() const override
Get error message.
virtual bool hasNext() override
Check availability of next element.
virtual const pointer_type & next() override
Get next element.
static void Throw(const bool option)
Enable/disable throw option.
Utility class to parse command line options.
Router for fast addressing of summary data in KM3NETDAQ::JDAQSummaryslice data structure as a functio...
void update(const JDAQSummaryslice *ps)
Update router.
K40 simulation based on run-by-run information.
unsigned int JTDC_t
leading edge [ns]
Data structure for UTC time.
static const JDAQUTCExtended & getInstance()
Get arbitrary offset (e.g.
void copy(const Head &from, JHead &to)
Copy header from from to to.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double getLivetime(const std::string &file_name)
Get data taking live time.
KM3NeT DAQ data structures and auxiliaries.
double getFrameTime()
Get frame time duration.
void setDAQLongprint(const bool option)
Set DAQ print option.
double getTimeOfFrame(const int frame_index)
Get start time of frame in ns since start of run for a given frame index.
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
double livetime_s
Live time [s].
double livetime_s
Live time [s].
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary class for K40 rates.
double getSinglesRate() const
Get singles rate.
void correct(const double QE)
Correct rates for global efficiency,.
Auxiliary class to select summary data (KM3NETDAQ::JDAQSummaryslice) from the specified raw data file...
bool is_valid() const
Check validity of run by run options.
Timeslice with random data.