Go to the documentation of this file.
45 int main(
int argc,
char **argv)
54 JLimit_t& numberOfEvents = inputFile.getLimit();
65 JParser<> zap(
"Auxiliary program to convert multiple Monte Carlo events to time slices.");
69 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
80 catch(
const exception &error) {
81 FATAL(error.what() << endl);
84 gRandom->SetSeed(seed);
90 if (pmtParameters.
getQE() != 1.0) {
92 WARNING(
"Correct background rates with global efficiency " << pmtParameters.
getQE() << endl);
99 DEBUG(
"PMT paramaters: " << endl << pmtParameters << endl);
100 DEBUG(
"K40 rates: " << endl << rates_Hz << endl);
102 if (eventRate_Hz < 0.0) {
103 FATAL(
"Invalid event rate " << eventRate_Hz <<
"; consider using JRandomTimesliceWriter." << endl);
125 FATAL(
"MC header is invalid");
130 if (liveTimeMC < 0) {
131 FATAL(
"MC live time is negative; input file may be corrupted.");
136 JPMTParametersMap::Throw(
false);
156 bool absTime =
false;
160 if (eventRate_Hz == 0.0 && liveTimeMC == 0.0) {
162 NOTICE(
"Event will be timed according to absolute MC time." << endl);
176 if (eventRate_Hz == 0.0 && liveTimeMC > 0.0) {
177 int nEntries = scan->getEntries();
178 eventRate_Hz = nEntries / liveTimeMC;
179 DEBUG(nEntries <<
" events to be written." << endl);
180 NOTICE(
"MC live time is " << liveTimeMC <<
" s" << endl);
181 NOTICE(
"Event rate set to " << eventRate_Hz <<
" Hz from MC header." << endl);
188 bool pendingEvt =
false;
189 bool pendingTimeslice =
false;
203 while (pendingEvt || scan->hasNext()) {
205 if (!pendingTimeslice) {
210 DEBUG(
"evt count: " << setw(10) << evtCount << endl);
211 STATUS(
"frame index: " << setw(10) << frame_index <<
" | evt count: " << setw(10) << evtCount <<
"\r");
DEBUG(endl);
212 pendingTimeslice =
true;
217 event = scan->next();
224 tDAQ += gRandom->Exp(1.0e9 / eventRate_Hz);
226 DEBUG(
"event time [s] " << setprecision(5) << tDAQ * 1.0e-9 << endl);
235 DEBUG(*event << endl);
237 event->mc_t = tDAQ - tOff;
246 DEBUG(timeslice << endl);
248 pendingTimeslice =
false;
253 if (pendingTimeslice) {
254 DEBUG(timeslice << endl);
256 pendingTimeslice =
false;
264 NOTICE(evtCount <<
" events written over " << frame_index <<
" timeslices. " << endl);
Default implementation of the simulation of K40 background.
Timeslice with Monte Carlo event.
Auxiliary class for defining the range of iterations of objects.
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e.
JAANET::livetime livetime
Data structure for UTC time.
double getQE(const JPMTIdentifier &id) const
Get QE of given PMT.
Empty structure for specification of parser element that is initialised (i.e.
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
Exception for null pointer operation.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary class for K40 rates.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
Template definition for direct access of elements in ROOT TChain.
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Auxiliary interface for direct access of elements in ROOT TChain.
Auxiliary class for map of PMT parameters.
double numberOfSeconds
Live time [s].
Timeslice with random data.
JDAQTimeslice & add(const JDAQTimeslice ×lice)
Add another timeslice.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
General purpose class for object reading from a list of file names.
#define DEBUG(A)
Message macros.
void correct(const double QE)
Correct rates for global efficiency,.
KM3NeT DAQ data structures and auxiliaries.
void setDAQLongprint(const bool option)
Set DAQ print option.
static const JEvtEvaluator getEvtValue
Function object for evaluation of DAQ objects.
Long64_t counter_type
Type definition for counter.
int main(int argc, char **argv)
void reset(JK40Simulator *k40Simulator)
Reset K40 simulator.
double getTimeOfFrame(const int frame_index)
Get start time of frame in ns since start of run for a given frame index.
int getFrameIndex(const double t_ns)
Get frame index for a given time in ns.