Jpp 20.0.0-27-g39925593c-D
the software that should make you happy
Loading...
Searching...
No Matches
JGizmo/JHistogram1D.cc
Go to the documentation of this file.
1#include <string>
2#include <iostream>
3#include <fstream>
4#include <vector>
5
6#include "TROOT.h"
7#include "TFile.h"
8#include "TH1D.h"
9#include "TF1.h"
10#include "TRandom3.h"
11
12#include "JLang/JToken.hh"
15
16#include "Jeep/JParser.hh"
17#include "Jeep/JMessage.hh"
18
19
20/**
21 * \file
22 *
23 * Program to create TH1D and fill according given formula.
24 * \author mdejong
25 */
26int main(int argc, char **argv)
27{
28 using namespace std;
29 using namespace JPP;
30
31 typedef JLANG::JToken<';'> JToken_t;
33
34 string outputFile;
35 string inputFile;
36 string formula;
37 vector<JToken_t> parameters;
38 size_t numberOfEvents;
39 string title;
41 bool logx;
42 bool sumw2;
44 int debug;
45
46 try {
47
48 JParser<> zap("Program to create TH1D and fill according given formula.");
49
51 zap['f'] = make_field(inputFile) = "";
52 zap['F'] = make_field(formula) = "";
53 zap['@'] = make_field(parameters) = JPARSER::initialised();
54 zap['n'] = make_field(numberOfEvents) = 0;
55 zap['T'] = make_field(title) = "h0";
56 zap['x'] = make_field(X) = JHistogram_t(100, -1.0, +1.0);
57 zap['X'] = make_field(logx);
58 zap['s'] = make_field(sumw2);
59 zap['S'] = make_field(seed) = 0;
60 zap['d'] = make_field(debug) = 1;
61
62 zap(argc, argv);
63 }
64 catch(const exception &error) {
65 FATAL(error.what() << endl);
66 }
67
68
69 if ((formula != "" && inputFile != "") ||
70 (formula == "" && inputFile == "")) {
71 FATAL("Specify input file or formula." << endl);
72 }
73
74 gRandom->SetSeed(seed);
75
76 TFile out(outputFile.c_str(), "recreate");
77
78 const string::size_type pos = title.rfind('/');
79
80 if (pos != string::npos) {
81
82 const string dir = title.substr(0, pos);
83
84 out.mkdir(dir.c_str());
85 out.cd (dir.c_str());
86
87 title = title.substr(pos + 1);
88 }
89
90 TH1D h0(title.c_str(), NULL,
91 X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit());
92
93 if (formula != "") {
94
95 TF1 f1("f1", formula.c_str(),
96 logx ? pow(10.0, X.getLowerLimit()) : X.getLowerLimit(),
97 logx ? pow(10.0, X.getUpperLimit()) : X.getUpperLimit());
98
99 for (vector<JToken_t>::const_iterator i = parameters.begin(); i != parameters.end(); ++i) {
100 f1.FixParameter(getParameter(*i), getValue(*i));
101 }
102
103 if (numberOfEvents > 0) {
104
105 h0.Sumw2();
106
107 for (size_t i = 0; i != numberOfEvents; ++i) {
108
109 const double x = f1.GetRandom(gRandom);
110
111 h0.Fill(logx ? log10(x) : x);
112 }
113
114 } else {
115
116 for (Int_t ix = 1; ix <= h0.GetXaxis()->GetNbins(); ++ix) {
117 h0.SetBinContent(ix, f1.Eval(h0.GetXaxis()->GetBinCenter(ix)));
118 }
119 }
120
121 } else if (inputFile != "") {
122
123 if (sumw2) {
124 h0.Sumw2();
125 }
126
127 ifstream in(inputFile.c_str());
128
129 for (double x; in >> x; ) {
130 h0.Fill(x);
131 }
132
133 in.close();
134 }
135
136 out.Write();
137 out.Close();
138}
string outputFile
int main(int argc, char **argv)
General purpose messaging.
#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
Wrapper class around string.
Definition JToken.hh:26
Template definition of a multi-dimensional oscillation probability interpolation table.
Utility class to parse command line options.
Definition JParser.hh:1698
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68