101   using namespace KM3NETDAQ;
 
  108   string                 detectorFileA;
 
  109   string                 detectorFileB;
 
  112   bool                   triggeredEventsOnly;
 
  121     JParser<> zap(
"Auxiliary program to trigger Monte Carlo events.");
 
  123     zap[
'f'] = 
make_field(inputFile,           
"input file (output of detector simulation)");
 
  125     zap[
'n'] = 
make_field(numberOfEvents)                     = JLimit::max();
 
  126     zap[
'a'] = 
make_field(detectorFileA,       
"detector used for conversion from Monte Carlo truth to raw data.");
 
  127     zap[
'b'] = 
make_field(detectorFileB,       
"detector used for conversion of raw data to calibrated data.")     = 
"";
 
  128     zap[
'R'] = 
make_field(run,                 
"run number")  = -1;
 
  131     zap[
'O'] = 
make_field(triggeredEventsOnly, 
"optionally write only triggered events.");
 
  139   catch(
const exception &error) {
 
  140     FATAL(error.what() << endl);
 
  143   gRandom->SetSeed(seed);
 
  149   if (detectorFileB == 
"") {
 
  150     detectorFileB = detectorFileA;
 
  158     load(detectorFileA, detectorA);
 
  159     load(detectorFileB, detectorB);
 
  165   JPMTParametersMap::Throw(
true);
 
  167   if (!pmtParameters.is_valid()) {
 
  168     FATAL(
"Invalid PMT parameters " << pmtParameters << endl);
 
  171   if (pmtParameters.getQE() != 1.0) {
 
  173     WARNING(
"Correct background rates with global efficiency " << pmtParameters.getQE() << endl);
 
  175     rates_Hz.correct(pmtParameters.getQE());
 
  182   if (runbyrun.is_valid()) {
 
  184     NOTICE(
"Using run-by-run:" << endl << runbyrun << endl);
 
  186     if (!runbyrun.hasNext()) {
 
  187       FATAL(
"Run-by-run simulation yields no input." << endl);
 
  190     if (rates_Hz.getSinglesRate() != 0.0) {
 
  191       WARNING(
"Run-by-run simulation discards singles rate [Hz] " << rates_Hz.getSinglesRate() << endl);
 
  207       NOTICE(
"Set trigger parameters from run-by-run input." << endl);
 
  210       WARNING(
"No trigger parameters from run-by-run input;\nrun with default/user input." << endl);
 
  215     NOTICE(
"Using fixed rates [Hz]: " << rates_Hz << endl);
 
  230   DEBUG(
"PMT parameters:" << endl << pmtParameters << endl); 
 
  266   const JPosition3D center = get<JPosition3D>(header);
 
  268   NOTICE(
"Apply detector offset from Monte Carlo run header (" << center << 
")" << endl);
 
  289   int          trigger_counter  = 0;
 
  299       mc_run_id = head.start_run.run_id;
 
  307     limit.setLowerLimit(limit.getLowerLimit() - 
in.skip(limit.getLowerLimit()));
 
  309     for ( ; 
in.hasNext() && number_of_events != limit; ++number_of_events) {
 
  311       STATUS(
"event: " << setw(10) << number_of_events << 
'\r'); 
DEBUG(endl);
 
  313       Evt* 
event = 
in.next();
 
  315       event->mc_run_id = mc_run_id;
 
  317       DEBUG(*event << endl);
 
  319       bool trigger = 
false;
 
  321       if (!event->mc_hits.empty()) {
 
  323         int frame_index = (int) 
in.getCounter() + 1;                        
 
  325         if (runbyrun.is_valid() && runbyrun.hasNext()) {
 
  327           summaryRouter.update(runbyrun.next());
 
  329           summaryRouter.correct(dynamic_cast<const JPMTDefaultSimulatorInterface&>(simbad.getPMTSimulator()));
 
  331           frame_index = summaryRouter.getFrameIndex();
 
  332           run         = summaryRouter.getRunNumber();
 
  348         timeRange.
add(event->mc_t);
 
  349         timeRange.
add(period);
 
  353         if (event->mc_event_time != TTimeStamp(0)) {
 
  357         const JDAQChronometer chronometer(detectorB.getID(), (run != -1 ? run : mc_run_id), frame_index, utc);
 
  361         DEBUG(timeslice << endl);
 
  364         timesliceRouter.configure(timeslice);
 
  366         JTimeslice_t    timesliceL0(timeslice.getDAQChronometer());
 
  367         JTimeslice_t    timesliceL1(timeslice.getDAQChronometer());
 
  368         JTimeslice_t    timesliceL2(timeslice.getDAQChronometer());
 
  369         JTimeslice_t    timesliceSN(timeslice.getDAQChronometer());
 
  371         for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
 
  373           if (moduleRouter.hasModule(super_frame->getModuleID())) {
 
  377             const JModule&         module = moduleRouter.getModule(super_frame->getModuleID()); 
 
  378             const JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
 
  382             timesliceL0.push_back(JSuperFrame1D_t(buffer));
 
  386             timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  387                                                   super_frame->getModuleIdentifier(),
 
  390             buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
 
  394             timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  395                                                   super_frame->getModuleIdentifier(),
 
  398             buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
 
  402             timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  403                                                   super_frame->getModuleIdentifier(),
 
  406             buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
 
  408             DEBUG(
"L0 " << setw(8) << timesliceL0.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceL0.rbegin()->size() << endl);
 
  409             DEBUG(
"L1 " << setw(8) << timesliceL1.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceL1.rbegin()->size() << endl);
 
  410             DEBUG(
"L2 " << setw(8) << timesliceL2.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceL2.rbegin()->size() << endl);
 
  411             DEBUG(
"SN " << setw(8) << timesliceSN.rbegin()->getModuleID() << 
' ' << setw(8) << timesliceSN.rbegin()->size() << endl);
 
  421         trigger3DMuon  (trigger_input, back_inserter(trigger_output));
 
  422         trigger3DShower(trigger_input, back_inserter(trigger_output));
 
  423         triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
 
  427         for (JTriggerOutput::const_iterator to = trigger_output.begin(); to != trigger_output.end(); ++to) {
 
  429           for (
int i = 0; i != 
h1.GetNbinsX(); ++i) {
 
  430             if (to->hasTriggerBit(i)) {
 
  438                 << to->getFrameIndex() << 
' '  
  440                 << timeRange           << endl);
 
  442           if (timeRange.
overlap(eventTime)) {
 
  452             tev.setCounter(trigger_counter);
 
  461         if (!triggeredEventsOnly || trigger) {
 
  485       if (!triggeredEventsOnly || trigger) {
 
Auxiliary class to select summary data (KM3NETDAQ::JDAQSummaryslice) from the specified raw data file...
 
Utility class to parse command line options. 
 
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits. 
 
Default implementation of the simulation of K40 background. 
 
Data structure for a composite optical module. 
 
Router for direct addressing of module data in detector data structure. 
 
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
 
then for HISTOGRAM in h0 h1
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Long64_t counter_type
Type definition for counter. 
 
then usage $script< string identifier >< detectorfile > input file(toashort file)+" "\nNote that the input files and toashort files should be one-to-one related." fi if (( $
 
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer. 
 
Data structure for UTC time. 
 
double getTimeOfFrame(const int frame_index)
Get start time of frame in ns since start of run for a given frame index. 
 
1-dimensional frame with time calibrated data from one optical module. 
 
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event. 
 
K40 simulation based on run-by-run information. 
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header. 
 
void setDAQLongprint(const bool option)
Set DAQ print option. 
 
Auxiliary class for defining the range of iterations of objects. 
 
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector. 
 
void merge(const JMatch_t &match)
Merge events. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
CLB simulation based on run-by-run information. 
 
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
 
double getFrameTime()
Get frame time duration. 
 
Auxiliary class to create summary data. 
 
Auxiliary class to build JDAQEvent for a triggered event. 
 
Auxiliary class for map of PMT parameters. 
 
const JPosition3D & getPosition() const 
Get position. 
 
double getMaximalTime(const double R_Hz)
Get maximal time for given rate. 
 
Router for fast addressing of summary data in JDAQSummaryslice data structure as a function of the op...
 
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
 
PMT simulation based on run-by-run information. 
 
virtual const char * what() const override
Get error message. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
Auxiliary class to build JDAQTimeslice for L1 timeslice. 
 
2-dimensional frame with time calibrated data from one optical module. 
 
Data structure for position in three dimensions. 
 
const JLimit & getLimit() const 
Get limit. 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
 
JDAQUTCExtended getDAQUTCExtended(const TTimeStamp &t0, const double t1=0.0)
Get DAQ UTC time. 
 
Match of two events considering overlap in time. 
 
Timeslice with Monte Carlo event. 
 
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters. 
 
Auxiliary class for K40 rates. 
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event. 
 
Time slice with calibrated data. 
 
#define DEBUG(A)
Message macros.