97 int main(
int argc,
char **argv)
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;
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);
315 event->mc_run_id = mc_run_id;
317 DEBUG(*event << endl);
319 bool trigger =
false;
321 if (!event->mc_hits.empty()) {
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);
371 for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
373 if (moduleRouter.
hasModule(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)) {
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.
int main(int argc, char *argv[])
ROOT TTree parameter settings of various packages.
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
Default implementation of the simulation of K40 background.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
Data structure for a composite optical module.
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
void configure(const JDAQTimeslice ×lice)
Configure.
Recording of objects on file according a format that follows from the file name extension.
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.
const JPMTSimulator & getPMTSimulator() const
Get PMT simulator.
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer.
Basic data structure for time and time over threshold information of hit.
Data structure for UTC time.
Data structure for detector geometry and calibration.
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.
Basic data structure for L0 hit.
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.
I/O formatting auxiliaries.
Auxiliaries for creation of summary data.
virtual bool hasNext() override
Check availability of next element.
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.
double getFrameTime()
Get frame time duration.
JAANET::start_run start_run
Auxiliary class to create summary data.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
Auxiliary class to build JDAQEvent for a triggered event.
Auxiliary class for map of PMT parameters.
Direct access to PMT in detector data structure.
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...
General purpose messaging.
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Scanning of objects from multiple files according a format that follows from the extension of each fi...
void reset(JK40Simulator *k40Simulator)
Reset K40 simulator.
PMT simulation based on run-by-run information.
void setCounter(const JTriggerCounter_t counter)
Set trigger counter.
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.
Utility class to parse command line options.
Map of associated modules in detector.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
virtual const pointer_type & next() override
Get next element.
bool hasModule(const JObjectID &id) const
Has module.
2-dimensional frame with time calibrated data from one optical module.
counter_type getCounter() const
Get counter.
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.
Basic data structure for L1 hit.
Auxiliary class for K40 rates.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
virtual skip_type skip(const skip_type ns) override
Skip items.
Time slice with calibrated data.
then usage $script< string identifier >< detectorfile > event file(toashort file)+" "\nNote that the event files and toashort files should be one-to-one related." fi if (( $