Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
JORCAReconstruction.cc File Reference

Program to perform reconstruction of muon trajectory and shower for ORCA detector. More...

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Program to perform reconstruction of muon trajectory and shower for ORCA detector.

Author
mdejong

Definition in file JORCAReconstruction.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 47 of file JORCAReconstruction.cc.

48{
49 using namespace std;
50 using namespace JPP;
51 using namespace KM3NETDAQ;
52
56 JACOUSTICS::JEvt>::typelist calibration_types;
57 typedef JMultipleFileScanner<calibration_types> JCalibration_t;
58 typedef JORCAReconstruction JReconstruction_t;
59 typedef JReconstruction_t::JEnergyCorrection_t JEnergyCorrection_t;
60 typedef JReconstruction_t::JParameters_t JParameters_t;
61 typedef JReconstruction_t::JStorage_t JStorage_t;
62
63 JSingleFileScanner_t inputFile;
65 JLimit_t& numberOfEvents = inputFile.getLimit();
66 string detectorFile;
67 JCalibration_t calibrationFile;
68 double Tmax_s;
69 JEnergyCorrection_t correct;
70 JParameters_t parameters;
71 string pdfFile;
72 JK40Rates rates_Hz;
73 size_t threads; // number of parallel threads
74 int debug;
75
76 try {
77
78 JParser<> zap("Program to perform reconstruction of muon trajectory and shower for ORCA detector.");
79
80 zap['f'] = make_field(inputFile);
81 zap['o'] = make_field(outputFile) = "jpp.root";
82 zap['a'] = make_field(detectorFile);
83 zap['+'] = make_field(calibrationFile) = JPARSER::initialised();
84 zap['T'] = make_field(Tmax_s) = 100.0;
85 zap['n'] = make_field(numberOfEvents) = JLimit::max();
86 zap['P'] = make_field(pdfFile);
87 zap['E'] = make_field(correct .properties) = JPARSER::initialised(); // off
88 zap['@'] = make_field(parameters.properties) = JPARSER::initialised();
89 zap['B'] = make_field(rates_Hz) = KM3NET::getK40Rates();
90 zap['N'] = make_field(threads, "number of threads") = 0;
91 zap['d'] = make_field(debug) = 1;
92
93 zap(argc, argv);
94 }
95 catch(const exception& error) {
96 FATAL(error.what() << endl);
97 }
98
99
101
103
104 try {
105 load(detectorFile, detector);
106 }
107 catch(const JException& error) {
108 FATAL(error);
109 }
110
111 unique_ptr<JDynamics> dynamics;
112
113 if (!calibrationFile.empty()) {
114
115 try {
116
117 dynamics.reset(new JDynamics(detector, Tmax_s));
118
119 dynamics->load(calibrationFile);
120 }
121 catch(const exception& error) {
122 FATAL(error.what());
123 }
124 }
125
126 outputFile.open();
127 outputFile.put(JMeta(argc, argv));
128
129 JTreeScanner<JDAQEvent, JDAQEvaluator> in(inputFile, inputFile.getLimit());
130
131 {
132 const JModuleRouter router(dynamics ? dynamics->getDetector() : detector);
133
134 JSummaryFileRouter summary(inputFile);
135
136 const JStorage_t storage(pdfFile, parameters);
137
138 JReconstruction_t fit(parameters, storage, rates_Hz, correct, debug);
139
140 JMultiThreadedReconstruction<JReconstruction_t> fits(fit, outputFile, threads, 2 * threads);
141
142 while (in.hasNext()) {
143
144 STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
145
146 const JDAQEvent* tev = in.next();
147
148 summary.update(*tev);
149
150 if (dynamics) {
151 dynamics->update(*tev);
152 }
153
154 auto input = fit.getInput(router, summary, *tev, dynamics ? dynamics->getCoverage() : coverage_type());
155
156 if (threads > 0)
157 fits.enqueue(input);
158 else
159 outputFile.put(fit(input));
160
161 outputFile.put(*tev);
162 }
163 STATUS(endl);
164 }
165
167
168 io >> outputFile;
169
170 outputFile.close();
171}
string outputFile
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Detector data structure.
Definition JDetector.hh:96
Router for direct addressing of module data in detector data structure.
Data structure for set of track fit results.
General exception.
Definition JException.hh:24
Utility class to parse command line options.
Definition JParser.hh:1698
Thread pool for event-by-event reconstruction.
void setSplitLevel(int value)
Set split level.
Object writing to file.
General purpose class for object reading from a list of file names.
Object reading from a list of files.
File router for fast addressing of summary data.
Template definition for direct access of elements in ROOT TChain.
JTriggerCounter_t next()
Increment trigger counter.
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).
JTreeParameters & getTreeParameters()
Template definition for method returning TTree parameters.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
const JK40Rates & getK40Rates()
Get K40 rates.
Definition KM3NeT.hh:36
Detector file.
Definition JHead.hh:227
Acoustic event fit.
Orientation of module.
Dynamic detector calibration.
Definition JDynamics.hh:86
Data structure for coverage of detector by dynamical calibrations.
Definition JCoverage.hh:19
Auxiliary class for recursive type list generation.
Definition JTypeList.hh:351
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
Auxiliary class for K40 rates.
Definition JK40Rates.hh:41
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72
Auxiliary base class for file name.