Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
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
83 JParser<> zap;
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 {
100 load (detectorFile, detector);
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:1607
Detector data structure.
Definition JDetector.hh:96
Utility class to parse parameter values.
General exception.
Definition JException.hh:24
Utility class to parse command line options.
Definition JParser.hh:1698
ROOT file.
Definition JRootFile.hh:48
Class dedicated to the analysis of KM3NeT runs.
Object writing to file.
Template definition for direct access of elements in ROOT TChain.
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.