Jpp  master_rocky-37-gf0c5bc59d
the software that should make you happy
Functions
JVariance2D.cc File Reference

Auxiliary program to histogram bin-by-bin deviations of the contents of one (or more) 1D histogram(s). More...

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include "TROOT.h"
#include "TFile.h"
#include "TKey.h"
#include "TH1D.h"
#include "TH2.h"
#include "TString.h"
#include "TRegexp.h"
#include "JTools/JAbstractHistogram.hh"
#include "JGizmo/JRootObjectID.hh"
#include "JGizmo/JGizmoToolkit.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to histogram bin-by-bin deviations of the contents of one (or more) 1D histogram(s).

The option -f corresponds to <file name>:<object name>.

The formula (option -F <formula>) refers to a ROOT TFormula. The expression may contain member methods of the corresponding object.

In case of multiple histograms, the formula is evaluated stand alone (i.e. without ROOT histogram). If formula equals "first", the bin-by-bin deviations of the contents of the histograms are evaluated with respect to the first histogram.

Author
mdejong

Definition in file JVariance2D.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 44 of file JVariance2D.cc.

45 {
46  using namespace std;
47  using namespace JPP;
48 
50 
51  vector<JRootObjectID> inputFile;
52  string outputFile;
53  bool reuse;
54  JHistogram_t X;
55  TString formula;
56  bool reverse;
57  int debug;
58 
59  try {
60 
61  JParser<> zap("Auxiliary program to histogram bin-by-bin deviations of a set of 2D histograms.");
62 
63  zap['f'] = make_field(inputFile, "<input file>:<object name>");
64  zap['o'] = make_field(outputFile, "ROOT file with histogram (possibly I/O, option -r)") = "variance.root";
65  zap['r'] = make_field(reuse, "reuse histogram from existing output file");
66  zap['x'] = make_field(X, "histogram binning");
67  zap['F'] = make_field(formula, "ROOT TFormula (may contain method names of object)") = "0";
68  zap['R'] = make_field(reverse, "reverse sign");
69  zap['d'] = make_field(debug) = 1;
70 
71  zap(argc, argv);
72  }
73  catch(const exception &error) {
74  FATAL(error.what() << endl);
75  }
76 
77 
78  vector<TH2*> listOfHistograms;
79 
80  for (vector<JRootObjectID>::const_iterator input = inputFile.begin(); input != inputFile.end(); ++input) {
81 
82  TH2* h2 = dynamic_cast<TH2*>(getObject(*input));
83 
84  if (h2 != NULL) {
85  listOfHistograms.push_back(h2);
86  }
87  }
88 
89  if (listOfHistograms.empty()) {
90  FATAL("No histograms." << endl);
91  }
92 
93  if (formula == "") {
94  FATAL("Empty formula." << endl);
95  }
96 
97  TH1* h0 = NULL;
98 
99  if (reuse) {
100  h0 = dynamic_cast<TH1*>(getObject(JRootObjectID(outputFile, "h0")));
101  }
102 
103  if (h0 == NULL) {
104  h0 = new TH1D("h0", NULL,
106  }
107 
108 
109  TH2* h2 = listOfHistograms[0];
110 
111  if (listOfHistograms.size() == 1) {
112 
113  const double y1 = getResult(formula, h2);
114 
115  DEBUG(h2->GetName() << ' ' << formula << ' ' << y1 << endl);
116 
117  for (Int_t ix = 1; ix <= h2->GetNbinsX(); ++ix) {
118  for (Int_t iy = 1; iy <= h2->GetNbinsY(); ++iy) {
119 
120  const Double_t yp = h2->GetBinContent(ix,iy);
121 
122  h0->Fill(reverse ? y1 - yp : yp - y1);
123  }
124  }
125 
126  } else {
127 
128  if (formula == first_t) {
129 
130  for (Int_t ix = 1; ix <= h2->GetNbinsX(); ++ix) {
131  for (Int_t iy = 1; iy <= h2->GetNbinsY(); ++iy) {
132 
133  const double y1 = h2->GetBinContent(ix,iy);
134 
135  for (vector<TH2*>::const_iterator p = listOfHistograms.begin(); ++p != listOfHistograms.end(); ) {
136 
137  const Double_t yp = (*p)->GetBinContent(ix,iy);
138 
139  h0->Fill(reverse ? y1 - yp : yp - y1);
140  }
141  }
142  }
143 
144  } else {
145 
146  const double y1 = getResult(formula);
147 
148  for (Int_t ix = 1; ix <= h2->GetNbinsX(); ++ix) {
149  for (Int_t iy = 1; iy <= h2->GetNbinsY(); ++iy) {
150 
151  for (vector<TH2*>::const_iterator p = listOfHistograms.begin(); p != listOfHistograms.end(); ++p) {
152 
153  const Double_t yp = (*p)->GetBinContent(ix,iy);
154 
155  h0->Fill(reverse ? y1 - yp : yp - y1);
156  }
157  }
158  }
159  }
160  }
161 
162 
163  TFile out(outputFile.c_str(), "recreate");
164 
165  h0->Write();
166 
167  out.Write();
168  out.Close();
169 }
string outputFile
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
Auxiliary class to handle file name, ROOT directory and object name.
Utility class to parse command line options.
Definition: JParser.hh:1698
T getLowerLimit() const
Get lower limit.
Definition: JRange.hh:202
T getUpperLimit() const
Get upper limit.
Definition: JRange.hh:213
JAbstractHistogram< double > JHistogram_t
Type definition for scan along axis.
Definition: JBillabong.cc:61
TObject * getObject(const JRootObjectID &id)
Get first TObject with given identifier.
Double_t getResult(const TString &text, TObject *object=NULL)
Get result of given textual formula.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JSTDTypes.hh:14
Simple data structure for histogram binning.
int getNumberOfBins() const
Get number of bins.