Jpp 20.0.0-27-g39925593c-D
the software that should make you happy
Loading...
Searching...
No Matches
Functions
JTriggerEfficiency2D.cc File Reference

Example program to histogram trigger efficiency. More...

#include <string>
#include <iostream>
#include "TROOT.h"
#include "TFile.h"
#include "TH2D.h"
#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JAAnet/JAAnetToolkit.hh"
#include "JTools/JAbstractHistogram.hh"
#include "JSupport/JTriggeredFileScanner.hh"
#include "JSupport/JMonteCarloFileSupportkit.hh"
#include "JSupport/JSupport.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to histogram trigger efficiency.

Author
mdejong, bjjung

Definition in file JTriggerEfficiency2D.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 32 of file JTriggerEfficiency2D.cc.

33{
34 using namespace std;
35 using namespace JPP;
36 using namespace KM3NETDAQ;
37
39
41 string outputFile;
44 int debug;
45
46 try {
47
48 JParser<> zap("Example program to histogram trigger efficiency.");
49
50 zap['f'] = make_field(inputFile);
51 zap['o'] = make_field(outputFile) = "efficiency.root";
52 zap['X'] = make_field(X, "Energy binning") = JAbstractHistogram_t(20, 1e-3, 100.0);
53 zap['Y'] = make_field(Y, "Zenith-angle binning") = JAbstractHistogram_t(20, -1.0, 1.0);
54 zap['d'] = make_field(debug) = 1;
55
56 zap(argc, argv);
57 }
58 catch(const exception &error) {
59 FATAL(error.what() << endl);
60 }
61
62
63 // output
64
65 TFile out(outputFile.c_str(), "recreate");
66
67 TH2D h0("h0", NULL,
68 X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit(),
69 Y.getNumberOfBins(), Y.getLowerLimit(), Y.getUpperLimit());
70 TH2D h1("h1", NULL,
71 X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit(),
72 Y.getNumberOfBins(), Y.getLowerLimit(), Y.getUpperLimit());
73 TH2D h2("h2", NULL,
74 X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit(),
75 Y.getNumberOfBins(), Y.getLowerLimit(), Y.getUpperLimit());
76
77 h2.Sumw2();
78
79
80 while (inputFile.hasNext()) {
81
82 STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
83
85
86 const Evt* event = ps;
87
88 vector<Hit>::const_iterator hit = find_if_not(event->mc_hits.cbegin(), event->mc_hits.cend(), &is_noise);
89
90 vector<Trk>::const_iterator primary = find_if(event->mc_trks.cbegin(), event->mc_trks.cend(), &is_initialstate);
91
92 if (hit != event->mc_hits.cend() && primary != event->mc_trks.cend()) {
93 h1.Fill(primary->E, primary->dir.z, 1.0);
94 }
95 }
96 STATUS(endl);
97
98
99 for (JMultipleFileScanner<Evt> in(inputFile); in.hasNext(); ) {
100
101 STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
102
103 const Evt* event = in.next();
104
105 vector<Hit>::const_iterator hit = find_if_not(event->mc_hits.cbegin(), event->mc_hits.cend(), &is_noise);
106
107 vector<Trk>::const_iterator primary = find_if(event->mc_trks.cbegin(), event->mc_trks.cend(), &is_initialstate);
108
109 if (hit != event->mc_hits.cend() && primary != event->mc_trks.cend()) {
110 h0.Fill(primary->E, primary->dir.z, 1.0);
111 }
112 }
113 STATUS(endl);
114
115
116 for (Int_t i = 1; i <= h1.GetNbinsX(); ++i) {
117 for (Int_t j = 1; j <= h1.GetNbinsY(); ++j) {
118
119 const Double_t z1 = h1.GetBinContent(i,j);
120 const Double_t z0 = h0.GetBinContent(i,j);
121
122 if (z0 != 0.0) {
123
124 const Double_t z3 = z1 / z0;
125 const Double_t w3 = sqrt(z1 * (z0 - z1) / (z0*z0*z0));
126
127 h2.SetBinContent(i, j, z3);
128 h2.SetBinError (i, j, w3);
129
130 } else {
131 ERROR("Bin " << h0.GetName() << "[" << i << "," << j << "] empty." << endl);
132 }
133 }
134 }
135
136 out.Write();
137 out.Close();
138}
string outputFile
#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
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Template definition of a multi-dimensional oscillation probability interpolation table.
bool is_initialstate(const Trk &track)
Test whether given track corresponds to an initial state particle.
bool is_noise(const Hit &hit)
Verify hit origin.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
int j
Definition JPolint.hh:801
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
Primary particle.
Definition JHead.hh:1174
General purpose class for multiple pointers.