Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JPrintFit.cc
Go to the documentation of this file.
1#include <string>
2#include <iomanip>
3#include <iostream>
4#include <vector>
5#include <set>
6
7#include "TROOT.h"
8#include "TFile.h"
9#include "TH1.h"
10#include "TGraph.h"
11#include "TGraph2D.h"
12#include "TF1.h"
13
14#include "JTools/JRange.hh"
17
18#include "Jeep/JPrint.hh"
19#include "Jeep/JParser.hh"
20#include "Jeep/JMessage.hh"
21
22
23/**
24 * Read formula from input stream.
25 *
26 * \param in input stream
27 * \param object formula
28 * \return input stream
29 */
30inline std::istream& operator>>(std::istream& in, TString& object)
31{
32 return object.ReadLine(in);
33}
34
35/**
36 * Write formula to output stream.
37 *
38 * \param out output stream
39 * \param object formula
40 * \return output stream
41 */
42inline std::ostream& operator<<(std::ostream& out, const TString& object)
43{
44 return out << object.Data();
45}
46
47
48/**
49 * \file
50 * Auxiliary program to print ROOT fit results.
51 * \author mdejong
52 */
53int main(int argc, char **argv)
54{
55 using namespace std;
56 using namespace JPP;
57
58 JRootObjectID inputFile;
59 string fcn;
61 set<string> parameter;
62 TString formula;
63 int debug;
64
65 try {
66
67 JParser<> zap("Auxiliary program to print ROOT fit results.");
68
69 zap['f'] = make_field(inputFile, "histogram, e.g: <file name>:<object name>");
70 zap['='] = make_field(fcn, "function name") = ".*";
71 zap['x'] = make_field(x, "(x)+, evaluate function at given point") = JPARSER::initialised();
72 zap['@'] = make_field(parameter, "(parameter)+, e.g. \"p0\"") = JPARSER::initialised();
73 zap['F'] = make_field(formula, "ROOT TFormula (may contain method names of TF1)") = JPARSER::initialised();
74 zap['d'] = make_field(debug) = 1;
75
76 zap(argc, argv);
77 }
78 catch(const exception &error) {
79 FATAL(error.what() << endl);
80 }
81
82
83 TObject* p = getObject(inputFile);
84
85 if (p == NULL) {
86 FATAL("No object at " << inputFile << endl);
87 }
88
89 TF1* f1 = NULL;
90
91 if (f1 == NULL && dynamic_cast<TF1*> (p) != NULL) { f1 = dynamic_cast<TF1*>(p); }
92 if (f1 == NULL && dynamic_cast<TH1*> (p) != NULL) { f1 = getFunction(dynamic_cast<TH1*> (p), fcn.c_str()); };
93 if (f1 == NULL && dynamic_cast<TGraph*> (p) != NULL) { f1 = getFunction(dynamic_cast<TGraph*> (p), fcn.c_str()); };
94 if (f1 == NULL && dynamic_cast<TGraph2D*>(p) != NULL) { f1 = getFunction(dynamic_cast<TGraph2D*>(p), fcn.c_str()); };
95
96 if (f1 == NULL) {
97 FATAL("No function at " << inputFile << " " << fcn << endl);
98 };
99
100 for (int i = 0; i != f1->GetNpar(); ++i) {
101 if (parameter.count(f1->GetParName(i)) != 0) {
102 cout << FIXED(20,10) << f1->GetParameter(i) << ' '
103 << FIXED(20,10) << f1->GetParError (i) << endl;
104 }
105 }
106
107 if (!x.empty()) {
108 cout << f1->EvalPar(x.data()) << endl;
109 }
110
111 if (formula != "") {
112 cout << SCIENTIFIC(15,5) << getResult(formula, f1) << endl;
113 }
114}
General purpose messaging.
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
int main(int argc, char **argv)
Definition JPrintFit.cc:53
std::istream & operator>>(std::istream &in, TString &object)
Read formula from input stream.
Definition JPrintFit.cc:30
std::ostream & operator<<(std::ostream &out, const TString &object)
Write formula to output stream.
Definition JPrintFit.cc:42
I/O formatting auxiliaries.
Auxiliary class to define a range between two values.
Auxiliary class to handle file name, ROOT directory and object name.
Utility class to parse command line options.
Definition JParser.hh:1698
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
Auxiliary data structure for floating point format specification.
Definition JManip.hh:488