Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
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;
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:72
#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
Double_t getResult(const TString &text, TObject *object=NULL)
Get result of given textual formula.
TObject * getObject(const JRootObjectID &id)
Get first TObject with given identifier.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Simple data structure for histogram binning.
int getNumberOfBins() const
Get number of bins.