Jpp 20.0.0-27-g39925593c-D
the software that should make you happy
Loading...
Searching...
No Matches
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
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 */
29int main(int argc, char **argv)
30{
31 using namespace std;
32 using namespace JPP;
33 using namespace KM3NETDAQ;
34
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 FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
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).
Template definition of a multi-dimensional oscillation probability interpolation table.
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:791
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
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.