26{
29
32
34 string inputFile;
35 string formula;
37 Int_t numberOfEvents;
38 string title;
40 bool sumw2;
42
43 try {
44
45 JParser<> zap(
"Program to create TH1D and fill according given formula.");
46
56
57 zap(argc, argv);
58 }
59 catch(const exception &error) {
60 FATAL(error.what() << endl);
61 }
62
63
64 if ((formula != "" && inputFile != "") ||
65 (formula == "" && inputFile == "")) {
66 FATAL(
"Specify input file or formula." << endl);
67 }
68
69
71
72 const string::size_type pos = title.rfind('/');
73
74 if (pos != string::npos) {
75
76 const string dir = title.substr(0, pos);
77
78 out.mkdir(dir.c_str());
79 out.cd (dir.c_str());
80
81 title = title.substr(pos + 1);
82 }
83
84 TH1D h0(title.c_str(), NULL,
86
87 if (formula != "") {
88
89 TF1
f1(
"f1", formula.c_str());
90
91 for (vector<JToken_t>::const_iterator i = parameters.begin(); i != parameters.end(); ++i) {
92 f1.FixParameter(getParameter(*i),
getValue(*i));
93 }
94
95 if (numberOfEvents > 0) {
96
97 h0.Sumw2();
98 h0.FillRandom(
f1.GetName(), numberOfEvents);
99
100 } else {
101
102 for (Int_t ix = 1; ix <= h0.GetXaxis()->GetNbins(); ++ix) {
103 h0.SetBinContent(ix,
f1.Eval(h0.GetXaxis()->GetBinCenter(ix)));
104 }
105 }
106
107 } else if (inputFile != "") {
108
109 if (sumw2) {
110 h0.Sumw2();
111 }
112
113 ifstream in(inputFile.c_str());
114
115 for (
double x; in >>
x; ) {
116 h0.Fill(x);
117 }
118
119 in.close();
120 }
121
122 out.Write();
123 out.Close();
124}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Wrapper class around string.
Utility class to parse command line options.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
double getValue(const JScale_t scale)
Get numerical value corresponding to scale.
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)...