Jpp  18.3.0-209-g56ce19a
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
10 
14 
15 #include "JAAnet/JVolume.hh"
16 #include "JAAnet/JHeadToolkit.hh"
17 #include "JAAnet/JAAnetToolkit.hh"
18 
19 #include "JSupport/JSupport.hh"
22 
23 #include "JROOT/JManager.hh"
24 
25 #include "Jeep/JParser.hh"
26 #include "Jeep/JMessage.hh"
27 
28 namespace {
29 
30  const char* const Mass_t = "Mass";
31  const char* const Volume_t = "Volume";
32 }
33 
34 /**
35  * \file
36  *
37  * Example program to histogram neutrino effective mass for triggered events for offline reconstruction files, using the event weights only.\n
38  * The unit of the contents of the histogram is \f$Mton\f$ or \f$km^{3}\f$.
39  * \author bjung, mdejong
40  */
41 int main(int argc, char **argv)
42 {
43  using namespace std;
44  using namespace JPP;
45  using namespace KM3NETDAQ;
46 
47  JMultipleFileScanner_t inputFiles;
48  string outputFile;
49  bool logx;
50  int numberOfBins;
51  std::string option;
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['d'] = make_field(debug) = 2;
65 
66  zap(argc, argv);
67  }
68  catch(const exception &error) {
69  FATAL(error.what() << endl);
70  }
71 
72  try {
73 
74  double Xmin = numeric_limits<double>::max();
75  double Xmax = numeric_limits<double>::lowest();
76 
77  JEvtWeightFileScannerSet<> scanners(inputFiles);
78 
79  for (JEvtWeightFileScannerSet<>::const_iterator scanner = scanners.cbegin(); scanner != scanners.cend(); ++scanner) {
80 
81  const JHead header = scanner->getHeader();
82 
83  if (!is_gseagen(header)) {
84  ERROR("Not a gSeaGen file; you may want to use JVolume1D" << endl);
85  }
86 
87  const JVolume volume(header, logx);
88 
89  if (volume.getXmin() < Xmin) { Xmin = volume.getXmin(); }
90  if (volume.getXmax() > Xmax) { Xmax = volume.getXmax(); }
91  }
92 
93  JManager<int, TH1D> hm(new TH1D("hm[%]", option.c_str(), numberOfBins, Xmin, Xmax));
94 
95  for (JEvtWeightFileScannerSet<>::iterator scanner = scanners.begin(); scanner != scanners.end(); ++scanner) {
96 
97  const JHead header = scanner->getHeader();
98 
99  const double Wnorm = header.genvol.numberOfEvents * log(10) * hm->GetBinWidth(1) * 4*M_PI;
100 
101  NOTICE("Scanning file type " << distance(scanners.begin(), scanner) << endl);
102  DEBUG (header << endl);
103 
104  while (scanner->hasNext()) {
105 
106  STATUS("event: " << setw(10) << scanner->getCounter() << '\r'); DEBUG(endl);
107 
108  const Evt* event = scanner->next();
109  const Trk& primary = get_primary(*event);
110 
111  const double weight = (event->w[WEIGHTLIST_DIFFERENTIAL_EVENT_RATE] *
112  event->w2list[W2LIST_GSEAGEN_WATER_INT_LEN] /
113  event->w2list[W2LIST_GSEAGEN_P_EARTH] /
114  primary.E /
115  Wnorm); // cm^3
116 
117  const double x = logx ? log10(primary.E) : primary.E;
118 
119  double y = 0.0;
120 
121  if (option == Mass_t) {
122  y = weight * DENSITY_SEA_WATER * 1e-6; // Mton
123  } else if (option == Volume_t) {
124  y = weight * 1e-15; // km^3
125  }
126 
127  hm[primary.type]->Fill(x, y);
128  }
129  STATUS(endl);
130  }
131 
132  TFile out(outputFile.c_str(), "recreate");
133 
134  out << hm;
135 
136  out.Close();
137  }
138  catch(const JException& error) {
139  FATAL(error << endl << "You may want to use \"offline\" formatted file.");
140  }
141 }
Utility class to parse command line options.
Definition: JParser.hh:1711
General exception.
Definition: JException.hh:24
Double_t getXmin() const
Get minimal abscissa value.
Definition: JVolume.hh:91
int main(int argc, char *argv[])
Definition: Main.cc:15
ROOT TTree parameter settings of various packages.
bool is_gseagen(const JHead &header)
Check for generator.
Definition: JHeadToolkit.hh:61
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
#define STATUS(A)
Definition: JMessage.hh:63
double numberOfEvents
Number of events.
Definition: JHead.hh:721
Double_t getXmax() const
Get maximal abscissa value.
Definition: JVolume.hh:102
const Trk & get_primary(const Evt &evt)
Get primary.
static const double DENSITY_SEA_WATER
Fixed environment values.
Dynamic ROOT object management.
string outputFile
double E
Energy [GeV] (either MC truth or reconstructed)
Definition: Trk.hh:20
Auxiliary class for histogramming of effective volume.
Definition: JVolume.hh:29
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
Definition: JManager.hh:43
Monte Carlo run header.
Definition: JHead.hh:1234
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2158
set_variable E_E log10(E_{fit}/E_{#mu})"
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
#define NOTICE(A)
Definition: JMessage.hh:64
#define ERROR(A)
Definition: JMessage.hh:66
then awk string
General purpose messaging.
JAANET::genvol genvol
Definition: JHead.hh:1597
#define FATAL(A)
Definition: JMessage.hh:67
int type
MC: particle type in PDG encoding.
Definition: Trk.hh:24
static const int W2LIST_GSEAGEN_WATER_INT_LEN
Interaction length in pure water in m.
Auxiliary base class for list of file names.
std::vector< filescanner_type >::iterator iterator
static const int W2LIST_GSEAGEN_P_EARTH
Transmission probability in the Earth (XSEC_MEAN and COLUMN_DEPTH used to compute PEarth) ...
Utility class to parse command line options.
static const int WEIGHTLIST_DIFFERENTIAL_EVENT_RATE
Event rate per unit of flux (c.f. taglist document) [GeV m2 sr].
Definition: weightlist.hh:14
Primary particle.
Definition: JHead.hh:1174
const JHead & getHeader() const
Get header.
Definition: JHead.hh:1270
Auxiliary class for organising Monte Carlo file scanners associated with event weighters.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
Definition: Trk.hh:14
std::vector< filescanner_type >::const_iterator const_iterator
int numberOfBins
number of bins for average CDF integral of optical module
Definition: JSirene.cc:69
int debug
debug level
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition: Evt.hh:20
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62