1 |
|
2 |
#include <iostream>
|
3 |
#include <iomanip>
|
4 |
#include <vector>
|
5 |
#include <map>
|
6 |
// #include <fstream>
|
7 |
// #include <sstream>
|
8 |
// #include <stdio.h>
|
9 |
// #include <stdlib.h>
|
10 |
|
11 |
// #include <Rtypes.h>
|
12 |
// #include "TChain.h"
|
13 |
// #include "TFile.h"
|
14 |
#include "TString.h"
|
15 |
// #include "TStopwatch.h"
|
16 |
// #include "TCanvas.h"
|
17 |
// #include "TH1D.h"
|
18 |
// #include "TLeafC.h"
|
19 |
// #include "TSystem.h"
|
20 |
|
21 |
|
22 |
using namespace std;
|
23 |
|
24 |
#ifndef tools_h
|
25 |
#define tools_h
|
26 |
namespace tools{
|
27 |
//================================================================================= progress
|
28 |
void progress(Long64_t cnt){
|
29 |
static Long64_t step(1),next(1);
|
30 |
++cnt;
|
31 |
if(cnt==next || cnt%10000==0){
|
32 |
cout << "=========================================================== " << "Enter event " << cnt << endl;
|
33 |
next+=step;
|
34 |
}
|
35 |
if((cnt+1)/step==10)step*=10;
|
36 |
}
|
37 |
|
38 |
|
39 |
// //================================================================================= progressReset
|
40 |
// void progressReset(){
|
41 |
// static Long64_t step(1),next(1);
|
42 |
// step=next;
|
43 |
// next=step;
|
44 |
// }
|
45 |
|
46 |
|
47 |
|
48 |
//================================================================================= printVector
|
49 |
template <typename T>
|
50 |
void printVector(TString name, vector<T> v, Int_t length=40, ostream& os=cout){
|
51 |
TString nameSize = name;
|
52 |
nameSize += ".size() ";
|
53 |
// os << setw(length) << name << ".size() = " << v.size() << endl;
|
54 |
//os << setw(length) << nameSize << "------> " << v.size() << endl;
|
55 |
os << setw(length) << "size " << "------> " << name << ": " << v.size() << endl;
|
56 |
|
57 |
if(v.size()>0){
|
58 |
for(Int_t i=0,N=v.size(); i<N; ++i){
|
59 |
TString temp_name = name;
|
60 |
temp_name += "[";
|
61 |
temp_name += i;
|
62 |
temp_name += "] = ";
|
63 |
os << setw(length) << temp_name << v[i] << endl;
|
64 |
}
|
65 |
}
|
66 |
os<<endl;
|
67 |
}
|
68 |
|
69 |
|
70 |
//================================================================================= printVector
|
71 |
template <typename T>
|
72 |
void printVector(TString name, vector<T> v, ostream& os, Int_t length=40){
|
73 |
printVector<T>(name, v, length, os);
|
74 |
}
|
75 |
|
76 |
|
77 |
//================================================================================= printMap
|
78 |
template<typename T1, typename T2, typename T3>
|
79 |
void printMap(TString name, map<T1, map<T2, T3> > m, Int_t width1=10, Int_t width2=10){
|
80 |
cout<<"size = " << m.size() << endl;
|
81 |
for(typename map<T1, map<T2, T3> >::iterator it=m.begin(); it !=m.end(); ++it){
|
82 |
for(typename map<T2, T3>::iterator it2=m[it->first].begin(); it2!=m[it->first].end(); ++it2){
|
83 |
cout<<name<<"["
|
84 |
<<setw(width1)<<it ->first << "]["
|
85 |
<<setw(width2)<<it2->first << "] = "
|
86 |
<<it2->second
|
87 |
<<endl;
|
88 |
}
|
89 |
}
|
90 |
}
|
91 |
|
92 |
|
93 |
//================================================================================= printMap
|
94 |
template<typename T1, typename T2>
|
95 |
void printMap(map<T1, T2> m, Int_t setWidth){
|
96 |
cout<<"size = " << m.size() << endl;
|
97 |
for(typename map<T1, T2>::iterator it=m.begin(); it !=m.end(); ++it){
|
98 |
cout<<setw(setWidth)<<left<<it->first << " = " << it->second << endl;
|
99 |
}
|
100 |
}
|
101 |
|
102 |
|
103 |
//================================================================================= splitToWords
|
104 |
vector<TString> splitToWords(TString rawString, TString newWord){
|
105 |
vector<TString> words;
|
106 |
int pos_beg = 0;
|
107 |
int pos_end = 0;
|
108 |
while(pos_beg < rawString.Sizeof()){
|
109 |
int i;
|
110 |
for(i=pos_beg; i<rawString.Sizeof(); ++i){
|
111 |
if(rawString(i,1) == newWord) break;
|
112 |
}
|
113 |
pos_end = i;
|
114 |
words.push_back(rawString(pos_beg, pos_end-pos_beg));
|
115 |
pos_beg = pos_end+1;
|
116 |
}
|
117 |
return words;
|
118 |
}
|
119 |
|
120 |
|
121 |
//================================================================================= splitToWords
|
122 |
map<TString, TString> splitToWords(TString rawString, TString newWord, TString newValue){
|
123 |
map<TString, TString> wordsAndValues;
|
124 |
vector<TString> words;
|
125 |
int pos_beg = 0;
|
126 |
int pos_end = 0;
|
127 |
while(pos_beg < rawString.Sizeof()){
|
128 |
int i;
|
129 |
for(i=pos_beg; i<rawString.Sizeof(); ++i){
|
130 |
if(rawString(i,1) == newWord) break;
|
131 |
}
|
132 |
pos_end = i;
|
133 |
words.push_back(rawString(pos_beg, pos_end-pos_beg));
|
134 |
pos_beg = pos_end+1;
|
135 |
vector<TString> temp_words = splitToWords(words.back(), newValue);
|
136 |
if(temp_words.size()==2)
|
137 |
wordsAndValues[temp_words[0]] = temp_words[1];
|
138 |
else if(words[0]!=""){
|
139 |
cout<<"ERROR: Something is wrong with the String: " << rawString << " here: " << words.back() << endl;
|
140 |
}
|
141 |
}
|
142 |
return wordsAndValues;
|
143 |
}
|
144 |
|
145 |
|
146 |
//================================================================================= GetHistFromFile
|
147 |
//Usage: TH1D* h = myplots.GetHistFromFile<TH1D*>("evaluation.root", "Multiplicity");
|
148 |
template <typename T>
|
149 |
T* GetHistFromFile(TString fileName, TString histName){
|
150 |
T *hist = new T();
|
151 |
|
152 |
// TFile f(fileName);
|
153 |
// if (f.IsZombie()) {
|
154 |
// cout << "Error opening file" << endl;
|
155 |
// exit(-1);
|
156 |
// }
|
157 |
TFile *file = new TFile(fileName,"READ");
|
158 |
if(file->FindObjectAny(histName)) hist = (T*) file->FindObjectAny(histName)->Clone();
|
159 |
else cout<<"Histogram does not exist! Creating empty histogram: "<< histName << endl;
|
160 |
//file->Close();
|
161 |
//delete file;
|
162 |
return hist;
|
163 |
}
|
164 |
|
165 |
|
166 |
//================================================================================= GetHistFromFile
|
167 |
template <typename T>
|
168 |
T* GetHistFromFile(TFile *file, TString histName){
|
169 |
file->cd();
|
170 |
T *hist = new T();
|
171 |
if(file->FindObjectAny(histName)) hist = (T*) file->FindObjectAny(histName);
|
172 |
else cout<<"Histogram does not exist! Creating empty histogram: "<< histName << endl;
|
173 |
//file->Close();
|
174 |
return hist;
|
175 |
}
|
176 |
|
177 |
|
178 |
//================================================================================= createRatioPlot
|
179 |
template <typename T>
|
180 |
T* createRatioPlot(T* h1, T* h2, TString name="", TString yTitle=""){
|
181 |
T* ratioPlot = (T*)h1->Clone();
|
182 |
ratioPlot->Divide(h2);
|
183 |
if(name !=""){
|
184 |
ratioPlot->SetName(name);
|
185 |
ratioPlot->SetTitle(name);
|
186 |
}
|
187 |
if(yTitle!=""){
|
188 |
ratioPlot->GetYaxis()->SetTitle(yTitle);
|
189 |
}
|
190 |
return ratioPlot;
|
191 |
}
|
192 |
|
193 |
|
194 |
|
195 |
|
196 |
}
|
197 |
|
198 |
|
199 |
|
200 |
|
201 |
|
202 |
#endif
|
203 |
|
204 |
|
205 |
|
206 |
|
207 |
|
208 |
|
209 |
|
210 |
|
211 |
|
212 |
|
213 |
|
214 |
|
215 |
|
216 |
|
217 |
|
218 |
|
219 |
|