Jpp in_tag_pdf_generation
the software that should make you happy
Loading...
Searching...
No Matches
JEffectiveMassOffline1D.cc
Go to the documentation of this file.
1#include <string>
2#include <iostream>
3
4#include "TROOT.h"
5#include "TFile.h"
6#include "TH1D.h"
7
11
12#include "JAAnet/JVolume.hh"
15
16#include "JSupport/JSupport.hh"
19
20#include "JROOT/JManager.hh"
21
23
24#include "Jeep/JParser.hh"
25#include "Jeep/JMessage.hh"
26
27namespace {
28
29 const char* const Mass_t = "Mass";
30 const char* const Volume_t = "Volume";
31}
32
33/**
34 * \file
35 *
36 * Example program to histogram neutrino effective mass for triggered events for offline reconstruction files, using the event weights only.\n
37 * The unit of the contents of the histogram is \f$Mton\f$ or \f$km^{3}\f$.
38 * \author bjung, mdejong
39 */
40int main(int argc, char **argv)
41{
42 using namespace std;
43 using namespace JPP;
44 using namespace KM3NETDAQ;
45
46 JMultipleFileScanner_t inputFiles;
47 string outputFile;
48 bool logx;
49 int numberOfBins;
50 std::string option;
51 JDAQTriggerMask trigger_mask;
52 int debug;
53
54
55 try {
56
57 JParser<> zap("Example program to histogram neutrino effective mass for triggered events.");
58
59 zap['f'] = make_field(inputFiles);
60 zap['o'] = make_field(outputFile) = "Meff.root";
61 zap['X'] = make_field(logx, "Use logarithm of energy");
62 zap['N'] = make_field(numberOfBins, "Number of bins in the energy range of the MC simulation") = 10;
63 zap['O'] = make_field(option, "Result option") = Mass_t, Volume_t;
64 zap['T'] = make_field(trigger_mask, "Trigger mask") = TRIGGER_MASK_ON;
65 zap['d'] = make_field(debug) = 2;
66
67 zap(argc, argv);
68 }
69 catch(const exception &error) {
70 FATAL(error.what() << endl);
71 }
72
73 try {
74
75 double Xmin = numeric_limits<double>::max();
76 double Xmax = numeric_limits<double>::lowest();
77
78 JEvtWeightFileScannerSet<> scanners(inputFiles);
79
80 for (JEvtWeightFileScannerSet<>::const_iterator scanner = scanners.cbegin(); scanner != scanners.cend(); ++scanner) {
81
82 const JVolume volume(scanner->getHeader(), logx);
83
84 if (volume.getXmin() < Xmin) { Xmin = volume.getXmin(); }
85 if (volume.getXmax() > Xmax) { Xmax = volume.getXmax(); }
86 }
87
88 JManager<int, TH1D> hm(new TH1D("hm[%]", option.c_str(), numberOfBins, Xmin, Xmax));
89
90 for (JEvtWeightFileScannerSet<>::iterator scanner = scanners.begin(); scanner != scanners.end(); ++scanner) {
91
92 const JHead header = scanner->getHeader();
93
94 NOTICE("Scanning file type " << scanner->getName() << endl);
95 DEBUG (header << endl);
96
97 const JEvtWeight& weighter = scanner->getEvtWeighter();
98
99 if (!header.is_valid(&JHead::genvol)) {
100 FATAL("Mising normalisation in header." << endl);
101 }
102
103 double Wnorm = header.genvol.numberOfEvents;
104
105 if (header.is_valid(&JHead::cut_nu))
106 Wnorm *= 2*PI * (header.cut_nu.cosT.getUpperLimit() - header.cut_nu.cosT.getLowerLimit());
107 else
108 Wnorm *= 4*PI;
109
110 while (scanner->hasNext()) {
111
112 STATUS("event: " << setw(10) << scanner->getCounter() << '\r'); DEBUG(endl);
113
114 const Evt* event = scanner->next();
115 const Trk& primary = get_primary(*event);
116
117 if (trigger_mask.hasTriggerMask(event->trigger_mask)) {
118
119 double x = logx ? log10(primary.E) : primary.E;
120 double y = 0.0;
121 double w = (getVolume(weighter, *event) /
122 (logx ? log(10.0) * primary.E * hm->GetBinWidth(1) : hm->GetBinWidth(1)) /
123 Wnorm);
124
125 if (option == Mass_t) {
126 y = w * DENSITY_SEA_WATER * 1e-6; // Mton
127 } else if (option == Volume_t) {
128 y = w * 1e-9; // km^3
129 }
130
131 hm[primary.type]->Fill(x, y);
132 }
133 }
134 STATUS(endl);
135 }
136
137 TFile out(outputFile.c_str(), "recreate");
138
139 out << hm;
140
141 out.Close();
142 }
143 catch(const JException& error) {
144 FATAL(error << endl);
145 }
146}
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
string outputFile
int main(int argc, char **argv)
Dynamic ROOT object management.
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define NOTICE(A)
Definition JMessage.hh:64
#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
Physics constants.
int numberOfBins
number of bins for average CDF integral of optical module
Definition JSirene.cc:73
ROOT TTree parameter settings of various packages.
Monte Carlo run header.
Definition JHead.hh:1236
JAANET::cut_nu cut_nu
Definition JHead.hh:1596
const JHead & getHeader() const
Get header.
Definition JHead.hh:1270
JAANET::genvol genvol
Definition JHead.hh:1600
bool is_valid(T JHead::*pd) const
Check validity of given data member in JHead.
Definition JHead.hh:1319
General exception.
Definition JException.hh:24
Utility class to parse command line options.
Definition JParser.hh:1698
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
Definition JManager.hh:47
T getLowerLimit() const
Get lower limit.
Definition JRange.hh:202
T getUpperLimit() const
Get upper limit.
Definition JRange.hh:213
Auxiliary class for trigger mask.
bool hasTriggerMask(const JDAQTriggerMask &mask) const
Has trigger bit pattern.
double getVolume(const JType< JEvtWeightGSeaGen > &type, const Evt &evt)
Get volume of given event according given weighter.
const Trk & get_primary(const Evt &evt)
Auxiliary function to retrieve the primary track of an event.
static const double PI
Mathematical constants.
static const double DENSITY_SEA_WATER
Fixed environment values.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
static const JDAQTriggerMask TRIGGER_MASK_ON
Trigger mask on;.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition Evt.hh:21
Abstract base class for event weighing.
Definition JEvtWeight.hh:31
Auxiliary class for histogramming of effective volume.
Definition JVolume.hh:29
Double_t getXmax() const
Get maximal abscissa value.
Definition JVolume.hh:102
Double_t getXmin() const
Get minimal abscissa value.
Definition JVolume.hh:91
JRange_t cosT
Cosine zenith angle range
Definition JHead.hh:420
double numberOfEvents
Number of events.
Definition JHead.hh:721
Primary particle.
Definition JHead.hh:1174
int type
Particle type.
Definition JHead.hh:1204
Auxiliary class for organising Monte Carlo file scanners associated with event weighters.
std::vector< filescanner_type >::const_iterator const_iterator
std::vector< filescanner_type >::iterator iterator
Auxiliary base class for list of file names.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
Definition Trk.hh:15