Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
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 
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 ERROR(A)
Definition: JMessage.hh:66
#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.
Definition: JProperties.hh:501
General exception.
Definition: JException.hh:24
Utility class to parse command line options.
Definition: JParser.hh:1698
ROOT file.
Definition: JRootFile.hh:48
TFile * getFile() const
Get file.
Definition: JRootFile.hh:66
Class dedicated to the analysis of KM3NeT runs.
Definition: JRunAnalyzer.hh:37
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:162
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.