Jpp  master_rocky-43-ge265d140c
the software that should make you happy
JTriggerEfficiency1D.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 
5 #include "TROOT.h"
6 #include "TFile.h"
7 #include "TH1D.h"
8 
10 
11 #include "JDAQ/JDAQEventIO.hh"
12 
13 #include "JAAnet/JAAnetToolkit.hh"
14 
17 #include "JSupport/JSupport.hh"
18 
19 #include "Jeep/JParser.hh"
20 #include "Jeep/JMessage.hh"
21 
22 
23 /**
24  * \file
25  *
26  * Example program to histogram trigger efficiency.
27  * \author mdejong
28  */
29 int main(int argc, char **argv)
30 {
31  using namespace std;
32  using namespace JPP;
33  using namespace KM3NETDAQ;
34 
35  JTriggeredFileScanner<> inputFile;
36  string outputFile;
37  int debug;
38 
39  try {
40 
41  JParser<> zap("Example program to histogram trigger efficiency.");
42 
43  zap['f'] = make_field(inputFile);
44  zap['o'] = make_field(outputFile) = "efficiency.root";
45  zap['d'] = make_field(debug) = 1;
46 
47  zap(argc, argv);
48  }
49  catch(const exception &error) {
50  FATAL(error.what() << endl);
51  }
52 
53 
54  // output
55 
56  TFile out(outputFile.c_str(), "recreate");
57 
58  TH1D h0("h0", NULL, 100, 0.5, 100.5);
59  TH1D h1("h1", NULL, 100, 0.5, 100.5);
60  TH1D h2("h2", NULL, 100, 0.5, 100.5);
61 
62  h2.Sumw2();
63 
64 
65  while (inputFile.hasNext()) {
66 
67  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
68 
70 
71  const Evt* event = ps;
72 
73  const int n = event->mc_hits.size() - count_if(event->mc_hits.begin(), event->mc_hits.cend(), &is_noise);
74 
75  h1.Fill((Double_t) n, 1.0);
76  }
77  STATUS(endl);
78 
79 
80  for (JMultipleFileScanner<Evt> in(inputFile); in.hasNext(); ) {
81 
82  STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
83 
84  const Evt* event = in.next();
85 
86  const int n = event->mc_hits.size() - count_if(event->mc_hits.begin(), event->mc_hits.cend(), &is_noise);
87 
88  h0.Fill((Double_t) n, 1.0);
89  }
90  STATUS(endl);
91 
92 
93  for (Int_t i = 1; i <= h1.GetNbinsX(); ++i) {
94 
95  const Double_t y1 = h1.GetBinContent(i);
96  const Double_t y0 = h0.GetBinContent(i);
97 
98  if (y0 != 0.0) {
99 
100  const Double_t y3 = y1 / y0;
101  const Double_t w3 = sqrt(y1 * (y0 - y1) / (y0*y0*y0));
102 
103  h2.SetBinContent(i, y3);
104  h2.SetBinError (i, w3);
105 
106  } else {
107  ERROR("Bin " << h0.GetName() << "[" << i << "] empty." << endl);
108  }
109  }
110 
111  out.Write();
112  out.Close();
113 }
114 
115 
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
string outputFile
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define STATUS(A)
Definition: JMessage.hh:63
#define ERROR(A)
Definition: JMessage.hh:66
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
ROOT TTree parameter settings of various packages.
int main(int argc, char **argv)
Synchronously read DAQ events and Monte Carlo events (and optionally other events).
Utility class to parse command line options.
Definition: JParser.hh:1698
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
bool is_noise(const Hit &hit)
Verify hit origin.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const int n
Definition: JPolint.hh:786
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
Definition: JSTDTypes.hh:14
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition: Evt.hh:21
General purpose class for multiple pointers.
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
virtual bool hasNext() override
Check availability of next element.
virtual const multi_pointer_type & next() override
Get next element.