Jpp  19.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JGizmo/JHistogram3D.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 "TH3D.h"
9 #include "TF3.h"
10 
11 #include "JLang/JToken.hh"
13 #include "JGizmo/JGizmoToolkit.hh"
14 
15 #include "Jeep/JParser.hh"
16 #include "Jeep/JMessage.hh"
17 
18 
19 /**
20  * \file
21  *
22  * Program to create TH2D and fill according given formula.
23  * \author mdejong
24  */
25 int main(int argc, char **argv)
26 {
27  using namespace std;
28  using namespace JPP;
29 
30  typedef JToken<';'> JToken_t;
31  typedef JAbstractHistogram<Double_t> JHistogram_t;
32 
33  string outputFile;
34  string inputFile;
35  string formula;
37  Int_t numberOfEvents;
38  string title;
41  JHistogram_t Z;
42  bool sumw2;
43  int debug;
44 
45  try {
46 
47  JParser<> zap("Program to create TH2D and fill according given formula.");
48 
49  zap['o'] = make_field(outputFile);
50  zap['f'] = make_field(inputFile) = "";
51  zap['F'] = make_field(formula) = "";
53  zap['n'] = make_field(numberOfEvents) = 0;
54  zap['T'] = make_field(title) = "h0";
55  zap['x'] = make_field(X) = JHistogram_t(100, -1.0, +1.0);
56  zap['y'] = make_field(Y) = JHistogram_t(100, -1.0, +1.0);
57  zap['z'] = make_field(Z) = JHistogram_t(100, -1.0, +1.0);
58  zap['s'] = make_field(sumw2);
59  zap['d'] = make_field(debug) = 1;
60 
61  zap(argc, argv);
62  }
63  catch(const exception &error) {
64  FATAL(error.what() << endl);
65  }
66 
67 
68  if ((formula != "" && inputFile != "") ||
69  (formula == "" && inputFile == "")) {
70  FATAL("Specify input file or formula." << endl);
71  }
72 
73 
74  TFile out(outputFile.c_str(), "recreate");
75 
76  const string::size_type pos = title.rfind('/');
77 
78  if (pos != string::npos) {
79 
80  const string dir = title.substr(0, pos);
81 
82  out.mkdir(dir.c_str());
83  out.cd (dir.c_str());
84 
85  title = title.substr(pos + 1);
86  }
87 
88  TH3D h0(title.c_str(), NULL,
89  X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit(),
90  Y.getNumberOfBins(), Y.getLowerLimit(), Y.getUpperLimit(),
91  Z.getNumberOfBins(), Z.getLowerLimit(), Z.getUpperLimit());
92 
93  if (formula != "") {
94 
95  TF3 f3("f3", formula.c_str());
96 
97  for (vector<JToken_t>::const_iterator i = parameters.begin(); i != parameters.end(); ++i) {
98  f3.FixParameter(getParameter(*i), getValue(*i));
99  }
100 
101  if (numberOfEvents > 0) {
102 
103  h0.Sumw2();
104  h0.FillRandom(f3.GetName(), numberOfEvents);
105 
106  } else {
107 
108  for (Int_t ix = 1; ix <= h0.GetXaxis()->GetNbins(); ++ix) {
109  for (Int_t iy = 1; iy <= h0.GetYaxis()->GetNbins(); ++iy) {
110  for (Int_t iz = 1; iz <= h0.GetZaxis()->GetNbins(); ++iz) {
111 
112  h0.SetBinContent(ix, iy, iz, f3.Eval(h0.GetXaxis()->GetBinCenter(ix),
113  h0.GetYaxis()->GetBinCenter(iy),
114  h0.GetZaxis()->GetBinCenter(iz)));
115  }
116  }
117  }
118  }
119  } else if (inputFile != "") {
120 
121  if (sumw2) {
122  h0.Sumw2();
123  }
124 
125  ifstream in(inputFile.c_str());
126 
127  for (double x, y, z; in >> x >> y >> z; ) {
128  h0.Fill(x, y, z);
129  }
130 
131  in.close();
132  }
133 
134  out.Write();
135  out.Close();
136 }
Utility class to parse command line options.
Definition: JParser.hh:1711
double getValue(const JScale_t scale)
Get numerical value corresponding to scale.
Definition: JScale.hh:47
int main(int argc, char *argv[])
Definition: Main.cc:15
int getParameter(const std::string &text)
Get parameter number from text string.
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:84
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
string outputFile
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2158
General purpose messaging.
#define FATAL(A)
Definition: JMessage.hh:67
then usage $script[energy[distance[z of PMT]]] fi case set_variable z
Definition: JDrawPDF.sh:45
then fatal The output file must have the wildcard in the e g root fi eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:48
Utility class to parse command line options.
no fit printf nominal n $STRING awk v X
do set_variable MODULE getModule a $WORKDIR detector_a datx L $STRING JEditDetector a $WORKDIR detector_a datx M $MODULE setz o $WORKDIR detector_a datx JEditDetector a $WORKDIR detector_b datx M $MODULE setz o $WORKDIR detector_b datx done echo Output stored at $WORKDIR detector_a datx and $WORKDIR tripod_a txt JDrawDetector2D a $WORKDIR detector_a datx a $WORKDIR detector_b datx L BL o detector $FORMAT $BATCH JDrawDetector2D T $WORKDIR tripod_a txt T $WORKDIR tripod_b txt L BL o tripod $FORMAT $BATCH JCompareDetector a $WORKDIR detector_a datx b $WORKDIR detector_b datx o $WORKDIR abc root &dev null for KEY in X Y Z
double f3(const double x, const double y, const double z)
3D function.
Definition: JPolynome3D.cc:23
int debug
debug level
JAbstractHistogram< double > JHistogram_t
Type definition for scan along axis.
Definition: JBillabong.cc:61