54{
58
60
62 string detectorFile;
63 Long64_t numberOfSlices;
68 int run;
71 double sigma_ns;
72 bool fast;
75
76 try {
77
78 JParser<> zap(
"Auxiliary program to write time slices with random data.");
79
82 zap[
'a'] =
make_field(detectorFile,
"detector.");
88 zap[
'T'] =
make_field(TCLB_ns,
"CLB state-machine time jitter") = 256;
89 zap[
'N'] =
make_field(recycling,
"number of recycles / time interval for sampling data [ns]") = make_pair(0, 0.0);
91 zap[
'F'] =
make_field(fast,
"fast - disable PMT simulation");
94
95 zap(argc, argv);
96 }
97 catch(const exception &error) {
98 FATAL(error.what() << endl);
99 }
100
101
104 FATAL(
"Invalid number of output files; should be 1 or 2." << endl);
105 }
106
107 seed.set(gRandom);
108
110
111
113
114 if (pmtParameters.
getQE() != 1.0) {
115
116 WARNING(
"Correct background rates with global efficiency " << pmtParameters.
getQE() << endl);
117
119 }
120
121 DEBUG(
"PMT parameters: " << endl << pmtParameters << endl);
122 DEBUG(
"K40 rates: " << endl << rates_Hz << endl);
123
125
126 try {
128 }
131 }
132
134
137
139
141
142 NOTICE(
"Using run-by-run:" << endl << runbyrun << endl);
143
145 FATAL(
"Run-by-run simulation yields no input." << endl);
146 }
147
148 try {
152 }
155 }
156
157 } else {
158
159 NOTICE(
"Using fixed rates [Hz]: " << rates_Hz << endl);
160
161 try {
163 simbad.reset(fast ?
167 }
170 }
171 }
172
173
174 JTimer timerco(
"constructor");
175 JTimer timerrc(
"recycle");
177
178 for (
size_t i = 0; i !=
outputFile.size(); ++i) {
179
181
184 }
185 }
186
189
190 int counter = 0;
191
192 for ( ; counter != numberOfSlices; ) {
193
194 STATUS(
"slice: " << setw(10) << counter <<
'\r');
DEBUG(endl);
195
196 int frame_index = counter + 1;
197
199
201
203
205
209 }
210
212
213 timerco.start();
214
216
217 timerco.stop();
218
219 timerIO.start();
220
221 outputFile.rbegin()->put(timeslice); ++counter;
222
223 timerIO.stop();
224
225 for (size_t i = 1; i <= recycling.first && counter != numberOfSlices; ++i) {
226
227 STATUS(
"slice: " << setw(10) << counter <<
'\r');
DEBUG(endl);
228
229 timerrc.start();
230
231 timeslice.recycle(recycling.second);
232
233 timerrc.stop();
234
235 timerIO.start();
236
237 outputFile.rbegin()->put(timeslice); ++counter;
238
239 timerIO.stop();
240 }
241 }
243
245 timerco.print(cout, true);
246 timerrc.print(cout, true);
247 timerIO.print(cout, true);
248 }
249
251
252 {
254
257
260
261 copy(buffer, header);
262 }
263
266
267 for (
size_t i = 0; i !=
outputFile.size(); ++i) {
269 }
270}
#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.
CLB simulation based on run-by-run information.
K40 simulation based on run-by-run information.
int getRunNumber() const
Get run number.
JDAQUTCExtended getTimesliceStart() const
Get start of timeslice.
int getFrameIndex() const
Get frame index.
unsigned int JTDC_t
leading edge [ns]
Data structure for UTC time.
static const JDAQUTCExtended & getInstance()
Get arbitrary offset (e.g.
double getTimeNanoSecond() const
Get time (limited to 16 ns cycles).
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.
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].
Template definition of random value generator.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary class for K40 rates.
void correct(const double QE)
Correct rates for global efficiency,.
Auxiliary class for mixed-L1/L0 K40 rates.
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.