Jpp  debug
the software that should make you happy
JDomAnalyser.cc
Go to the documentation of this file.
1 // c++ standard library
2 #include <iostream>
3 #include <iomanip>
4 
5 #include "JSupport/JSupport.hh"
7 #include "JSupport/JMeta.hh"
10 
13 
14 #include "JROOT/JManager.hh"
15 
16 #include "Jeep/JParser.hh"
19 #include "JDAQ/JDAQTimesliceIO.hh"
20 
21 #include "TH1D.h"
22 #include "TMath.h"
23 
24 using namespace KM3NETDAQ;
25 using namespace JLANG;
26 using namespace JPP;
27 using namespace std;
28 
29 /*
30  * Rebins a histogram with constant bin width in a linear scale, so that the bins will have constant width in log10 scale.
31  *
32  * \param h The histogram.
33  */
34 inline void BinLogX (TH1* h){
35 
36  TAxis *axis = h->GetXaxis();
37  int bins = axis->GetNbins();
38  Axis_t min = axis->GetXmin();
39  Axis_t max = axis->GetXmax();
40  Axis_t width = (max - min) / bins;
41  Axis_t *new_bins = new Axis_t[bins + 1];
42 
43  for (int i = 0; i <= bins; i++) {
44  new_bins[i] = TMath::Power(10, min + i * width);
45  }
46 
47  axis->Set(bins, new_bins);
48  delete[] new_bins;
49 }
50 
51 
52 int main(int argc, char **argv) {
53 
55  JLimit_t& nSlices = inputFile.getLimit();
56  JROOTClassSelector selector;
57  string outputFile;
58  string detectorFile;
59 
60  try {
61 
62  JParser<> zap;
63 
64  zap['f'] = make_field(inputFile , "Path to input file ");
65  zap['o'] = make_field(outputFile , "Path to output file") = "out.root";
66  zap['C'] = make_field(selector , "timeslice selector, e.g. JDAQTimesliceL1.") = getROOTClassSelection<JDAQTimesliceTypes_t>();
67  zap['s'] = make_field(nSlices , "number of slices" ) = JLimit::max();
68 
69  zap(argc,argv);
70  }
71  catch(const exception &error) {
72  ERROR(error.what() << endl);
73  }
74 
75  const double factor = 1./(1.0e-6 * getFrameTime()); // [kHz]
76 
77  TH1D* h1 = new TH1D("rate_%", NULL, 100, -2, 2);
78  TH1D* h2 = new TH1D("time_%", NULL, 1, -0.5, 0.5);
79 
82  s->configure(inputFile);
83 
84  if (s->hasNext()){
85  JFrameIndexRange range (s->begin()->getFrameIndex() , s->rbegin()->getFrameIndex());
86  h2->SetBins(range.second - range.first + 1, range.first - 0.5, range.second + 0.5);
87  }
88 
89  BinLogX(h1);
90 
93 
95 
96  counter_type counter = 0;
97 
98  for ( ; scanner.hasNext() && counter != inputFile.getLimit(); ++counter) {
99 
100  JDAQTimeslice* slice = scanner.next();
101 
102  for(JDAQTimeslice::const_iterator frame = slice->begin() ; frame != slice->end() ; ++frame) {
103 
104  vector <int> pmt_hit_count (NUMBER_OF_PMTS , 0) ;
105 
106  for (JDAQSuperFrame::const_iterator hit = frame->begin() ; hit != frame->end() ; ++hit){
107  pmt_hit_count[hit->getPMT()]++;
108  }
109 
110  for (int pmt = 0 ; pmt != NUMBER_OF_PMTS ; ++pmt) {
111  r[JDAQPMTIdentifier(frame->getModuleID(),pmt)]->Fill(pmt_hit_count[pmt]*factor);
112  t[JDAQPMTIdentifier(frame->getModuleID(),pmt)]->Fill(slice->getFrameIndex(), pmt_hit_count[pmt]*factor);
113  }
114  }
115  }
116 
117  for (typename JManager < JDAQPMTIdentifier , TH1D >::const_iterator i = r.begin() ; i != r.end() ; ++i){
118 
119  for(int j=1 ; j < i -> second -> GetNbinsX() ; ++j){
120 
121  double width = i->second->GetXaxis()->GetBinWidth(j);
122  i -> second->SetBinContent(j ,i->second->GetBinContent(j)/width);
123  i -> second->SetBinError (j ,i->second->GetBinError (j)/width);
124  }
125  }
126 
127  TFile out(outputFile.c_str(), "recreate");
128 
129  putObject(out, JMeta(argc, argv));
130 
131  r.Write(out);
132  t.Write(out);
133 }
string outputFile
KM3NeT DAQ constants, bit handling, etc.
int main(int argc, char **argv)
Definition: JDomAnalyser.cc:52
void BinLogX(TH1 *h)
Definition: JDomAnalyser.cc:34
Dynamic ROOT object management.
#define ERROR(A)
Definition: JMessage.hh:66
ROOT I/O of application specific meta data.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2158
Support methods.
ROOT TTree parameter settings of various packages.
Auxiliary class for multiplexing object iterators.
virtual bool hasNext() override
Check availability of next element.
virtual const pointer_type & next() override
Get next element.
Utility class to parse command line options.
Definition: JParser.hh:1714
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
Definition: JManager.hh:47
void Write(TDirectory &out, const bool wm=false)
Write objects to file.
Definition: JManager.hh:304
General purpose class for object reading from a list of file names.
Auxiliary interface for direct access of elements in ROOT TChain.
JKey_t first
Definition: JPair.hh:128
JValue_t second
Definition: JPair.hh:129
int getFrameIndex() const
Get frame index.
Hit data structure.
Definition: JDAQHit.hh:35
Auxiliary classes and methods for language specific functionality.
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.
Long64_t counter_type
Type definition for counter.
data_type r[M+1]
Definition: JPolint.hh:868
int j
Definition: JPolint.hh:792
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
Definition: JSTDTypes.hh:14
Auxiliary class for a type holder.
Definition: JType.hh:19
Auxiliary class to select ROOT class based on class name.
Auxiliary class to select JTreeScanner based on ROOT class name.
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