100 int main(
int argc, 
char **argv)
 
  110   JLimit_t&              numberOfEvents = inputFile.getLimit();
 
  111   string                 detectorFileA;
 
  112   string                 detectorFileB;
 
  115   bool                   triggeredEventsOnly;
 
  125     JParser<> zap(
"Auxiliary program to trigger Monte Carlo events.");
 
  127     zap[
'f'] = 
make_field(inputFile,           
"input file (output of detector simulation)");
 
  129     zap[
'n'] = 
make_field(numberOfEvents)                     = JLimit::max();
 
  130     zap[
'a'] = 
make_field(detectorFileA,       
"detector used for conversion from Monte Carlo truth to raw data.");
 
  131     zap[
'b'] = 
make_field(detectorFileB,       
"detector used for conversion of raw data to calibrated data.")     = 
"";
 
  132     zap[
'R'] = 
make_field(run,                 
"run number")  = -1;
 
  135     zap[
'O'] = 
make_field(triggeredEventsOnly, 
"optionally write only triggered events.");
 
  144   catch(
const exception &error) {
 
  145     FATAL(error.what() << endl);
 
  148   gRandom->SetSeed(seed);
 
  150   JK40DefaultSimulatorInterface::setSigma(sigma_ns);
 
  154   if (detectorFileB == 
"") {
 
  155     detectorFileB = detectorFileA;
 
  163     load(detectorFileA, detectorA);
 
  164     load(detectorFileB, detectorB);
 
  170   JPMTParametersMap::Throw(
true);
 
  173     FATAL(
"Invalid PMT parameters " << pmtParameters << endl);
 
  176   if (pmtParameters.
getQE() != 1.0) {
 
  178     WARNING(
"Correct background rates with global efficiency " << pmtParameters.
getQE() << endl);
 
  198     NOTICE(
"Using run-by-run:" << endl << runbyrun << endl);
 
  201       FATAL(
"Run-by-run simulation yields no input." << endl);
 
  221       NOTICE(
"Set trigger parameters from run-by-run input." << endl);
 
  224       WARNING(
"No trigger parameters from run-by-run input;\nrun with default/user input." << endl);
 
  229     JHead buffer(header);
 
  232     buffer.
push(&JHead::DAQ);
 
  234     copy(buffer, header);
 
  238     NOTICE(
"Using fixed rates [Hz]: " << rates_Hz << endl);
 
  252   if (parameters.disableHighRateVeto) {
 
  254     NOTICE(
"Disabling high-rate veto of all PMTs." << endl);
 
  261   DEBUG(
"Trigger:"        << endl << parameters   << endl);
 
  262   DEBUG(
"PMT parameters:" << endl << pmtParameters << endl); 
 
  267   const JTimeRange period(-(Tmax + parameters.TMaxLocal_ns), 
 
  268                           +(Tmax + parameters.TMaxLocal_ns));
 
  278   const JBuildL1_t buildL1(parameters);
 
  279   const JBuildL2_t buildL2(parameters.L2);
 
  280   const JBuildL2_t buildSN(parameters.SN);
 
  303   JLimit_t     limit            = inputFile.getLimit();
 
  305   int          trigger_counter  = 0;
 
  325     for ( ; in.
hasNext() && number_of_events != limit; ++number_of_events) {
 
  327       STATUS(
"event: " << setw(10) << number_of_events << 
'\r'); 
DEBUG(endl);
 
  331       event->mc_run_id = mc_run_id;
 
  333       DEBUG(*event << endl);
 
  337       if (!event->mc_hits.empty()) {
 
  347           frame_index = summaryRouter.getFrameIndex();
 
  348           run         = summaryRouter.getRunNumber();
 
  364         timeRange.
add(event->mc_t);
 
  365         timeRange.
add(period);
 
  370         if (event->mc_event_time != TTimeStamp(0)) {
 
  374         const JDAQChronometer chronometer(detectorB.
getID(), (run != -1 ? run : mc_run_id), frame_index, utc);
 
  378         DEBUG(timeslice << endl);
 
  388         for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
 
  390           if (moduleRouter.
hasModule(super_frame->getModuleID())) {
 
  395             const JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
 
  399             timesliceL0.push_back(JSuperFrame1D_t(buffer));
 
  403             timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  404                                                   super_frame->getModuleIdentifier(),
 
  407             buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
 
  411             timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  412                                                   super_frame->getModuleIdentifier(),
 
  415             buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
 
  419             timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  420                                                   super_frame->getModuleIdentifier(),
 
  423             buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
 
  425             DEBUG(
"L0 " << setw(8) << timesliceL0.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceL0.rbegin()->size() << endl);
 
  426             DEBUG(
"L1 " << setw(8) << timesliceL1.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceL1.rbegin()->size() << endl);
 
  427             DEBUG(
"L2 " << setw(8) << timesliceL2.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceL2.rbegin()->size() << endl);
 
  428             DEBUG(
"SN " << setw(8) << timesliceSN.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceSN.rbegin()->size() << endl);
 
  438         trigger3DMuon  (trigger_input, back_inserter(trigger_output));
 
  439         trigger3DShower(trigger_input, back_inserter(trigger_output));
 
  440         triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
 
  444         for (JTriggerOutput::const_iterator to = trigger_output.begin(); to != trigger_output.end(); ++to) {
 
  446           for (
int i = 0; i != h1.GetNbinsX(); ++i) {
 
  447             if (to->hasTriggerBit(i)) {
 
  455                 << to->getFrameIndex() << 
' '  
  457                 << timeRange           << endl);
 
  459           if (timeRange.
overlap(eventTime)) {
 
  464                                 parameters.TMaxLocal_ns, 
 
  478         if (!triggeredEventsOnly || 
trigger) {
 
  480           if (parameters.writeL0()) {
 
  484           if (parameters.writeL1()) {
 
  488           if (parameters.writeL2()) {
 
  492           if (parameters.writeSN()) {
 
  496           if (parameters.writeSummary()) {
 
  502       if (!triggeredEventsOnly || 
trigger) {
 
double getSigma(vector< double > &v)
get standard deviation of vector content
 
Data structure for detector geometry and calibration.
 
Recording of objects on file according a format that follows from the file name extension.
 
Basic data structure for L0 hit.
 
Basic data structure for L1 hit.
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Map of associated modules in detector.
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
Direct access to PMT in detector data structure.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
I/O formatting auxiliaries.
 
Auxiliaries for creation of summary data.
 
ROOT TTree parameter settings of various packages.
 
int main(int argc, char **argv)
 
Basic data structure for time and time over threshold information of hit.
 
JAANET::start_run start_run
 
void push(T JHead::*pd)
Push given data member to Head.
 
void merge(const JMatch_t &match)
Merge events.
 
void reset(JK40Simulator *k40Simulator)
Reset K40 simulator.
 
const JPMTSimulator & getPMTSimulator() const
Get PMT simulator.
 
void setPMTStatus(const int bit)
Set status of all PMTs.
 
Default implementation of the simulation of K40 background.
 
Router for direct addressing of module data in detector data structure.
 
const JModule & getModule(const JObjectID &id) const
Get module parameters.
 
bool hasModule(const JObjectID &id) const
Has module.
 
Data structure for a composite optical module.
 
Default PMT simulation interface.
 
Auxiliary class for map of PMT parameters.
 
double getQE(const JPMTIdentifier &id) const
Get QE of given PMT.
 
bool is_valid() const
Check validity of PMT parameters.
 
const JPosition3D & getPosition() const
Get position.
 
virtual const char * what() const override
Get error message.
 
int getID() const
Get identifier.
 
virtual const pointer_type & next() override
Get next element.
 
virtual bool hasNext() override
Check availability of next element.
 
Utility class to parse command line options.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
virtual const pointer_type & next() override
Get next element.
 
virtual skip_type skip(const skip_type ns) override
Skip items.
 
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.
 
PMT simulation based on run-by-run information.
 
1-dimensional frame with time calibrated data from one optical module.
 
2-dimensional frame with time calibrated data from one optical module.
 
Auxiliary class to build JDAQTimeslice for L1 timeslice.
 
Time slice with calibrated data.
 
Auxiliary class to build JDAQEvent for a triggered event.
 
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
 
void setCounter(const JTriggerCounter_t counter)
Set trigger counter.
 
Data structure for UTC time.
 
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event.
 
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.
 
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector.
 
T & getInstance(const T &object)
Get static instance from temporary object.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Long64_t counter_type
Type definition for counter.
 
double getLivetime(const std::string &file_name)
Get data taking live time.
 
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
 
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.
 
double getMaximalTime(const double R_Hz)
Get maximal time for given rate.
 
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer.
 
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
 
JDAQUTCExtended getDAQUTCExtended(const TTimeStamp &t0, const double t1=0.0)
Get DAQ UTC time.
 
static const int HIGH_RATE_VETO_DISABLE
Enable (disable) use of high-rate veto test if this status bit is 0 (1);.
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
 
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
 
double livetime_s
Live time [s].
 
Match of two events considering overlap in time.
 
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 for defining the range of iterations of objects.
 
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.
 
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
 
void configure(const JDAQTimeslice ×lice)
Configure.
 
Timeslice with Monte Carlo event.
 
Auxiliary class to create summary data.