27 static const char*
const first_t =
"first";
44 int main(
int argc,
char **argv)
49 typedef JAbstractHistogram<Double_t> JHistogram_t;
61 JParser<> zap(
"Auxiliary program to histogram bin-by-bin deviations of a set of 1D histograms.");
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");
67 zap[
'F'] =
make_field(formula,
"ROOT TFormula (may contain method names of object)") =
"0";
68 zap[
'R'] =
make_field(reverse,
"reverse sign");
73 catch(
const exception &error) {
74 FATAL(error.what() << endl);
82 TH1* h1 =
dynamic_cast<TH1*
>(
getObject(*input));
85 listOfHistograms.push_back(h1);
89 if (listOfHistograms.empty()) {
90 FATAL(
"No histograms." << endl);
94 FATAL(
"Empty formula." << endl);
104 h0 =
new TH1D(
"h0", NULL,
105 X.getNumberOfBins(),
X.getLowerLimit(),
X.getUpperLimit());
109 TH1* h1 = listOfHistograms[0];
111 if (listOfHistograms.size() == 1) {
113 const double y1 =
getResult(formula, h1);
115 DEBUG(h1->GetName() <<
' ' << formula <<
' ' << y1 << endl);
117 for (Int_t
i = 1;
i <= h1->GetNbinsX(); ++
i) {
119 const Double_t yp = h1->GetBinContent(
i);
121 h0->Fill(reverse ? y1 - yp : yp - y1);
126 if (formula == first_t) {
128 for (Int_t
i = 1;
i <= h1->GetNbinsX(); ++
i) {
130 const double y1 = h1->GetBinContent(
i);
134 const Double_t yp = (*p)->GetBinContent(
i);
136 h0->Fill(reverse ? y1 - yp : yp - y1);
144 for (Int_t
i = 1;
i <= h1->GetNbinsX(); ++
i) {
148 const Double_t yp = (*p)->GetBinContent(
i);
150 h0->Fill(reverse ? y1 - yp : yp - y1);
Utility class to parse command line options.
TObject * getObject(const JRootObjectID &id)
Get first TObject with given identifier.
int main(int argc, char *argv[])
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Double_t getResult(const TString &text, TObject *object=NULL)
Get result of given textual formula.
General purpose messaging.
Utility class to parse command line options.
no fit printf nominal n $STRING awk v X
#define DEBUG(A)
Message macros.