ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HFmon2012/test/HistogramManager.h
Revision: 1.1
Committed: Mon Aug 13 14:56:06 2012 UTC (12 years, 8 months ago) by yilmaz
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
update

File Contents

# Content
1 #include <string>
2 #include <vector>
3 #include <iostream>
4 #include <map>
5 #include <utility>
6
7
8 #include "TFile.h"
9 #include "TTree.h"
10 #include "TH1I.h"
11 #include "TH1F.h"
12 #include "TH1D.h"
13 #include "TH2F.h"
14 #include "TH2D.h"
15 #include "TProfile.h"
16 #include "TString.h"
17
18 class HistogramManager{
19
20 public:
21
22
23 HistogramManager();
24 ~HistogramManager();
25 static HistogramManager* getInstance();
26 static void dispose();
27 void print();
28 void openFile(TString name,TString option);
29 void openTree(std::string name);
30 TTree* getTree(){return fTree;}
31 void closeFile();
32 void fillHisto(TString name, double x, double y, double weight);
33 void addBinContent(TString name, int bin, double x);
34 void scale(TString name, double x);
35 void fillTree();
36 void printTree();
37
38 // return histograms by using their names
39 TH1* getHisto1F(TString name);
40 TH1* getHisto1D(TString name);
41 TH2* getHisto2D(TString name);
42 TH2* getHisto2F(TString name);
43 TH1* getHisto1I(TString name);
44 TProfile* getHistoProfile(TString name);
45 // add branches to the tree
46 void addTreeD(TString branchName, double branchVariable);
47 void addTreeDArray(TString branchName, double* branchVariable, int size);
48 void addTreeFArray(TString branchName, float* branchVariable, int size);
49 void addTreeF(TString branchName, float branchVariable);
50 void addTreeI(TString branchName, int branchVariable);
51 // add histograms to the file
52 void addHisto1F(TString name, TString title, int nbinsX, float xMin, float xMax, bool setError);
53 void addHisto1D(TString name, TString title, int nbinsX, double xMin, double xMax, bool setError);
54 void addHisto2F(TString name, TString title, int nbinsX, float xMin, float xMax,int nbinsY, float yMin, float yMax, bool setError);
55 void addHisto2D(TString name, TString title, int nbinsX, double xMin, double xMax,int nbinsY, float yMin, float yMax, bool setError);
56 void addHistoProfile(TString name, TString title, int nbinsX, double xMin, double xMax, bool setError);
57 void setTitles(TString name, TString xAxis, TString yAxis);
58
59
60 private:
61 static HistogramManager* instance;
62 TFile* fOutFile;
63 TTree* fTree;
64 std::map<TString, TH1*> fHists1I;
65 std::map<TString, TH1*> fHists1F;
66 std::map<TString, TH1*> fHists1D;
67 std::map<TString, TH2*> fHists2F;
68 std::map<TString, TH2*> fHists2D;
69 std::map<TString, TProfile*> fHistsTProfile;
70 };
71
72 using namespace std;
73 HistogramManager* HistogramManager::instance = 0;
74 HistogramManager* HistogramManager::getInstance(){
75 if (instance == 0) instance = new HistogramManager();
76 return instance;
77 }
78
79 void HistogramManager::dispose(){
80 if (instance != 0){
81 delete instance;
82 instance = 0;
83 }
84 }
85
86 HistogramManager::HistogramManager()
87 : fOutFile(0)
88 {
89
90 }
91 HistogramManager::~HistogramManager()
92 {
93
94 }
95 void HistogramManager::openFile(TString name,TString option){
96 fOutFile = new TFile(name.Data(), option);
97 }
98
99 void HistogramManager::openTree(std::string name){
100 fTree = new TTree(name.c_str(), "analysis tree");
101 }
102
103 void HistogramManager::printTree(){
104 fTree->Print();
105 }
106 void HistogramManager::closeFile(){
107 fOutFile->Write("", TObject::kOverwrite);
108 fOutFile->Close();
109 }
110 void HistogramManager::addTreeD(TString branchName, double branchVariable){
111 TString branchType = branchName+"/D";//this is wrong, must be changed
112 fTree->Branch(branchName.Data(),&branchVariable,branchType.Data());
113 return;
114 // fTree->Branch("response2", response,"response[size]/F");
115
116 }
117 void HistogramManager::addTreeDArray(TString branchName, double* branchVariable, int size){
118
119 TString branchType = branchName+"[size]/D";
120 fTree->Branch(branchName.Data(),branchVariable,branchType.Data());
121 return;
122 }
123 void HistogramManager::addTreeFArray(TString branchName, float* branchVariable, int size){
124
125 TString branchType = branchName+"[size]/F";
126 fTree->Branch(branchName.Data(),branchVariable,branchType.Data());
127 return;
128 }
129 void HistogramManager::addTreeF(TString branchName, float branchVariable){
130 TString branchType = branchName+"/F";
131 fTree->Branch(branchName.Data(),&branchVariable,branchType.Data());
132 return;
133 }
134 void HistogramManager::addTreeI(TString branchName, int branchVariable){
135 TString branchType = branchName+"/I";
136 fTree->Branch(branchName.Data(),&branchVariable,branchType.Data());
137 return;
138 }
139
140 void HistogramManager::addHisto1F(TString name, TString title, int nbinsX, float xMin, float xMax, bool setError){
141 fHists1F[name] = new TH1F(name.Data(),title.Data(),nbinsX, xMin, xMax);
142 if(setError)fHists1F[name]->Sumw2();
143 return;
144 }
145 void HistogramManager::addHisto1D(TString name, TString title, int nbinsX, double xMin, double xMax, bool setError){
146 fHists1D[name] = new TH1D(name.Data(),title.Data(),nbinsX, xMin, xMax);
147 if(setError)fHists1D[name]->Sumw2();
148 return;
149 }
150 void HistogramManager::addHisto2F(TString name, TString title, int nbinsX, float xMin, float xMax,int nbinsY, float yMin, float yMax, bool setError){
151 fHists2F[name] = new TH2F(name.Data(),title.Data(),nbinsX, xMin, xMax,nbinsY , yMin, yMax);
152 if(setError)fHists2F[name]->Sumw2();
153 return;
154 }
155 void HistogramManager::addHisto2D(TString name, TString title, int nbinsX, double xMin, double xMax,int nbinsY, float yMin, float yMax, bool setError){
156 fHists2F[name] = new TH2D(name.Data(),title.Data(),nbinsX, xMin, xMax,nbinsY , yMin, yMax);
157 if(setError)fHists2D[name]->Sumw2();
158 return;
159 }
160 ////////////////////////
161
162 void HistogramManager::addHistoProfile(TString name, TString title, int nbinsX, double xMin, double xMax, bool setError) {
163 fHistsTProfile[name] = new TProfile(name.Data(),title.Data(),nbinsX, xMin,xMax);
164 //char title[1024];
165 //sprintf(title, "%s [RUN:%i]", fTitle.c_str(), fRunno);
166 //return fDir.make < TProfile > (fName.c_str(), title, fNbins, fXmin, fXmax);
167 }
168 //TProfile(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Double_t ylow, Double_t yup, Option_t* option = "")
169
170 /////////////////////////77
171
172 void HistogramManager::fillHisto(TString name, double x, double y, double weight){
173 bool found = false;
174 std::map<TString, TH1*>::iterator iter = fHists1I.find(name);
175 // this is wrong! fix it
176 if(iter != fHists1I.end()){//key is found
177 found = true;
178 iter->second->Fill(x,weight);
179 }
180 if(!found){
181 std::map<TString, TH1*>::iterator iter = fHists1F.find(name);
182 if(iter != fHists1F.end()){//key is found
183 found = true;
184 if(name == "FiredTriggerBits"){
185 if(y==1){//bit is fired
186 iter->second->Fill(x,weight);
187 }
188 }else{
189 iter->second->Fill(x,weight);
190 }
191 }
192 }
193 if(!found){
194 std::map<TString, TH2*>::iterator iter = fHists2F.find(name);
195 if(iter != fHists2F.end()){//key is found
196 found = true;
197 iter->second->Fill(x,y,weight);
198
199 }
200 }
201 if(!found){
202 std::map<TString, TH1*>::iterator iter = fHists1D.find(name);
203 if(iter != fHists1D.end()){//key is found
204 found = true;
205 if(name == "FiredTriggerBits"){
206 if(y==1){//bit is fired
207 iter->second->Fill(x,weight);
208 }
209 }else{
210 iter->second->Fill(x,weight);
211 }
212 }
213 }
214 if(!found){
215 std::map<TString, TH2*>::iterator iter = fHists2D.find(name);
216 if(iter != fHists2D.end()){//key is found
217 found = true;
218 iter->second->Fill(x,y,weight);
219 }
220 }
221 if(!found){
222 std::map<TString, TProfile*>::iterator iter = fHistsTProfile.find(name);
223 if(iter != fHistsTProfile.end()){//key is found
224 found = true;
225 iter->second->Fill(x,y);
226 }
227 }
228
229
230 }
231 void HistogramManager::scale(TString name, double x){
232 bool found = false;
233 std::map<TString, TH1*>::iterator iter = fHists1I.find(name);
234 // this is wrong! fix it
235 if(iter != fHists1I.end()){//key is found
236 found = true;
237 iter->second->Scale(x);
238 }
239 if(!found){
240 std::map<TString, TH1*>::iterator iter = fHists1F.find(name);
241 if(iter != fHists1F.end()){//key is found
242 found = true;
243 iter->second->Scale(x);
244 }
245 }
246 if(!found){
247 std::map<TString, TH1*>::iterator iter = fHists1D.find(name);
248 if(iter != fHists1D.end()){//key is found
249 found = true;
250 iter->second->Scale(x);
251 }
252 }
253 }
254 void HistogramManager::addBinContent(TString name, int bin, double x){
255 bool found = false;
256 std::map<TString, TH1*>::iterator iter = fHists1I.find(name);
257 // this is wrong! fix it
258 if(iter != fHists1I.end()){//key is found
259 found = true;
260 iter->second->AddBinContent(bin,x);
261 }
262 if(!found){
263 std::map<TString, TH1*>::iterator iter = fHists1F.find(name);
264 if(iter != fHists1F.end()){//key is found
265 found = true;
266 iter->second->AddBinContent(bin,x);
267 }
268 }
269 if(!found){
270 std::map<TString, TH1*>::iterator iter = fHists1D.find(name);
271 if(iter != fHists1D.end()){//key is found
272 found = true;
273 iter->second->AddBinContent(bin,x);
274 }
275 }
276 }
277 void HistogramManager::fillTree(){
278 fTree->Fill();
279 }
280 //////////////////////////
281 TProfile* HistogramManager::getHistoProfile(TString name){
282 //string name = getName(id, type);
283 bool found = false;
284 std::map<TString, TProfile*>::iterator iter = fHistsTProfile.find(name);
285 if (iter != fHistsTProfile.end()) { // key is found
286 found = true;
287 //iter->second->Fill(x, y);
288 return (iter->second);
289 } else {
290 cout << name << " was not found!" << endl;
291 }
292 return 0;
293 }
294 //////////////////////////////7
295 TH1* HistogramManager::getHisto1F(TString name){
296 bool found = false;
297 std::map<TString, TH1*>::iterator iter = fHists1F.find(name);
298 if(iter != fHists1F.end()){//key is found
299 found = true;
300 return (iter->second);
301 }
302 return 0;
303 }
304 TH1* HistogramManager::getHisto1D(TString name){
305 bool found = false;
306 std::map<TString, TH1*>::iterator iter = fHists1D.find(name);
307 if(iter != fHists1D.end()){//key is found
308 found = true;
309 return (iter->second);
310 }else{
311 cout << name << " not found" << endl;
312 }
313 return 0;
314 }
315 TH2* HistogramManager::getHisto2F(TString name){
316 bool found = false;
317 std::map<TString, TH2*>::iterator iter = fHists2F.find(name);
318 if(iter != fHists2F.end()){//key is found
319 found = true;
320 return (iter->second);
321 }
322 return 0;
323 }
324 TH2* HistogramManager::getHisto2D(TString name){
325 bool found = false;
326 std::map<TString, TH2*>::iterator iter = fHists2D.find(name);
327 if(iter != fHists2D.end()){//key is found
328 found = true;
329 return (iter->second);
330 }
331 return 0;
332 }
333 void HistogramManager::setTitles(TString name, TString xAxis, TString yAxis){
334 bool found = false;
335 std::map<TString, TH1*>::iterator iter = fHists1I.find(name);
336 if(iter != fHists1I.end()){//key is found
337 found = true;
338 iter->second->SetXTitle(xAxis);
339 iter->second->SetYTitle(yAxis);
340 }
341 if(!found){
342 std::map<TString, TH1*>::iterator iter = fHists1F.find(name);
343 if(iter != fHists1F.end()){//key is found
344 found = true;
345 iter->second->SetXTitle(xAxis);
346 iter->second->SetYTitle(yAxis);
347 }
348 }
349 if(!found){
350 std::map<TString, TH2*>::iterator iter = fHists2F.find(name);
351 if(iter != fHists2F.end()){//key is found
352 found = true;
353 iter->second->SetXTitle(xAxis);
354 iter->second->SetYTitle(yAxis);
355 }
356 }
357 if(!found){
358 std::map<TString, TH1*>::iterator iter = fHists1D.find(name);
359 if(iter != fHists1D.end()){//key is found
360 found = true;
361 iter->second->SetXTitle(xAxis);
362 iter->second->SetYTitle(yAxis);
363 }
364 }
365 if(!found){
366 std::map<TString, TH2*>::iterator iter = fHists2D.find(name);
367 if(iter != fHists2D.end()){//key is found
368 found = true;
369 iter->second->SetXTitle(xAxis);
370 iter->second->SetYTitle(yAxis);
371 }
372 }
373 return;
374 }
375
376 TH1* HistogramManager::getHisto1I(TString name){
377 bool found = false;
378 std::map<TString, TH1*>::iterator iter = fHists1I.find(name);
379 if(iter != fHists1I.end()){//key is found
380 found = true;
381 return (iter->second);
382 }
383 return 0;
384 }
385 void HistogramManager::print(){
386 cout << "====================== HISTOGRAMS =======================" << endl;
387 for (std::map<TString, TH1*>::iterator iter = fHists1I.begin(); iter != fHists1I.end(); ++iter) {
388 cout << iter->first << endl;
389 }
390 for (std::map<TString, TH1*>::iterator iter = fHists1F.begin(); iter != fHists1F.end(); ++iter) {
391 cout << iter->first << endl;
392 }
393 for (std::map<TString, TH2*>::iterator iter = fHists2F.begin(); iter != fHists2F.end(); ++iter) {
394 cout << iter->first << endl;
395 }
396 for (std::map<TString, TH1*>::iterator iter = fHists1D.begin(); iter != fHists1D.end(); ++iter) {
397 cout << iter->first << endl;
398 }
399 for (std::map<TString, TH2*>::iterator iter = fHists2D.begin(); iter != fHists2D.end(); ++iter) {
400 cout << iter->first << endl;
401 }
402 for (std::map<TString, TProfile*>::iterator iter = fHistsTProfile.begin(); iter != fHistsTProfile.end(); ++iter) {
403 cout << iter->first << endl;
404 }
405
406 cout << "=========================================================" << endl;
407 }
408
409