Jpp 20.0.0-27-g39925593c-D
the software that should make you happy
Loading...
Searching...
No Matches
Functions
JRunAnalyzer.cc File Reference
#include <iostream>
#include <iomanip>
#include "km3net-dataformat/offline/Head.hh"
#include "JAAnet/JAAnetDictionary.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JModuleRouter.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JTools/JRange.hh"
#include "JSupport/JSupport.hh"
#include "JSupport/JMeta.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JTreeScanner.hh"
#include "JSupport/JMonteCarloFileSupportkit.hh"
#include "JSupport/JFileRecorder.hh"
#include "JReconstruction/JEvt.hh"
#include "JReconstruction/JEvtToolkit.hh"
#include "Jeep/JProperties.hh"
#include "Jeep/JParser.hh"
#include "km3net-dataformat/online/JDAQ.hh"
#include "km3net-dataformat/online/JDAQHeader.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JLang/JObjectReader.hh"
#include "TROOT.h"
#include "JROOT/JRootFileReader.hh"
#include "JROOT/JROOTClassSelector.hh"
#include "JROOT/JRootToolkit.hh"
#include "JROOT/JRootFileWriter.hh"
#include "JROOT/JTreeParameters.hh"
#include "JSupport/JSupportToolkit.hh"
#include "JRunAnalyzer/JRunInfo.hh"
#include "JRunAnalyzer.hh"
#include "JRunHistograms.hh"
#include <TSystem.h>
#include "TTree.h"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int argc,
char ** argv )
Author
rgruiz, adomi

Definition at line 61 of file JRunAnalyzer.cc.

61 {
62
63 using namespace KM3NETDAQ;
64 using namespace JPP;
65
66 JSingleFileScanner<> inputFile;
68 string detectorFile;
69 JLimit_t numberOfTimeslices = JLimit::max();
70 JLimit_t numberOfSummaryslices = JLimit::max();
71 JLimit_t numberOfEvents = JLimit::max();
72 int analysis_level;
73
74
75 try {
76
77 JProperties properties;
78
79 properties.insert(gmake_property(numberOfTimeslices));
80 properties.insert(gmake_property(numberOfSummaryslices));
81 properties.insert(gmake_property(numberOfEvents));
82
84
85 zap['f'] = make_field(inputFile , "input file " );
86 zap['o'] = make_field(outputFile , "output file" ) = "out.root";
87 zap['a'] = make_field(detectorFile , "detector file" );
88 zap['@'] = make_field(properties) = JPARSER::initialised();
89 zap['L'] = make_field(analysis_level , "analysis level") = 0, 1, 2;
90
91 zap(argc,argv);
92 }
93 catch(const exception &error) {
94 ERROR(error.what() << endl);
95 }
96
98
99 try {
101 }
102 catch(const JException & error) {
103 FATAL( "FATAL ERROR. Could not open detector file '" << detectorFile << "'." << endl);
104 }
105
106 if(analysis_level == 1){
107 cout << "ANALYSIS OF ALL AVAILABLE PMTs INFORMATION. It may take a while!" << endl;
108 } else if (analysis_level == 2){
109 cout << "BASIC ANALYSIS AT TRIGGER AND RECONSTRUCTION LEVEL." << endl;
110 } else {
111 cout << "JRUNANALYZER RUNNING WITH A REDUCED NUMBER OF PLOTS." << endl;
112 }
113
115
116 Head head;
117
118 try{
119 head = getHeader(in);
120 }catch(const exception&){}
121
122 JHead buffer(head);
123
124 buffer.DAQ.livetime_s = getLivetime(inputFile);
125
126 buffer.push(& JAANET::JHead::DAQ);
127
128 copy(buffer, head);
129
130 cout << "START\n";
131
132 outputFile.open();
133
134 JRootFile* p = dynamic_cast<JRootFile*>(outputFile.get());
135
136 if (p == NULL) {
137 FATAL("WRONG FILE TYPE");
138 }
139
140 TFile* out = p->getFile();
141
142 cout << out->GetName() << endl;
143
144 outputFile.put(JMeta(argc, argv));
145
146 JDAQHeader header;
147
148 for(JTreeScanner<JDAQEvent> in(inputFile); in.hasNext();){
149
150 const JDAQEvent* event = in.next();
151
152 if (header.getDetectorID() != event->getDetectorID() ||
153 header.getRunNumber () != event->getRunNumber ()) {
154
155 header = event->getDAQHeader();
156
157 putObject(out, header);
158
159 break;
160 }
161 }
162
163 const run_info runinfo(header.getDetectorID(),
164 header.getRunNumber(),
165 buffer.DAQ.livetime_s,
166 buffer.livetime.numberOfSeconds);
167
168 outputFile.put(runinfo);
169
170 JRunAnalyzer Analyzer (inputFile, detector, out, numberOfTimeslices, numberOfSummaryslices, numberOfEvents, analysis_level);
171
172 cout << "read events\n";
173 Analyzer.readEvents ();
174 cout << "read summarydata\n";
175 Analyzer.readSummaryData ();
176 cout << "read timeslices\n";
177 Analyzer.readTimesliceData<JDAQTimeslice> ();
178 Analyzer.readTimesliceData<JDAQTimesliceL0>();
179 Analyzer.readTimesliceData<JDAQTimesliceL1>();
180 Analyzer.readTimesliceData<JDAQTimesliceL2>();
181 Analyzer.readTimesliceData<JDAQTimesliceSN>();
182
183 if(analysis_level == 2){
184 cout << "read reconstructed events\n";
185 Analyzer.readRecoEvents ();
186 }
187
188 Analyzer.writeToFile(out, analysis_level);
189
190 outputFile.close();
191}
string outputFile
#define FATAL(A)
Definition JMessage.hh:67
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
Monte Carlo run header.
Definition JHead.hh:1236
JAANET::DAQ DAQ
Definition JHead.hh:1625
Detector data structure.
Definition JDetector.hh:96
Utility class to parse parameter values.
General exception.
Definition JException.hh:24
Template definition of a multi-dimensional oscillation probability interpolation table.
ROOT file.
Definition JRootFile.hh:48
Class dedicated to the analysis of KM3NeT runs.
int getDetectorID() const
Get detector identifier.
int getRunNumber() const
Get run number.
const JDAQHeader & getDAQHeader() const
Get DAQ header.
Definition JDAQHeader.hh:49
JTriggerCounter_t next()
Increment trigger counter.
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition JHead.cc:163
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).
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
double getLivetime(const std::string &file_name)
Get data taking live time.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Definition Head.hh:65
Detector file.
Definition JHead.hh:227
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
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
Timeslice data structure for L0 data.
Timeslice data structure for L1 data.
Timeslice data structure for L2 data.
Timeslice data structure for SN data.