ATLAS Offline Software
Loading...
Searching...
No Matches
MonitoringFile_TgcHistogramDivision.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4
6//Methods to Divide TGC Histograms to calculate efficiency and occupancy after merging.
7//Author: Akimasa Ishikawa (akimasa.ishikawa@cern.ch)
8//Date: Aug 2009
10
12
13#include <iostream>
14#include <iomanip>
15#include <algorithm>
16#include <fstream>
17#include <cmath>
18#include <cstdlib>
19#include <sstream>
20#include <vector>
21#include <utility>
22#include <map>
23#include <string>
24
25#include "TH1F.h"
26#include "TH2F.h"
27#include "TFile.h"
28#include "TClass.h"
29#include "TKey.h"
30#include "TMath.h"
31#include "TF1.h"
32#include "TTree.h"
33#include "TCanvas.h"
34#include "TBranch.h"
35#include "TGraphAsymmErrors.h"
36
37namespace dqutils {
38 void
39 MonitoringFile::TGCRawHistogramDivision(const std::string& inFilename) {
40 PostProcessorFileWrapper mf(inFilename, "TGC Raw Histogram Division");
41
42 if (!mf.IsOpen()) {
43 //std::cerr << "TGCPostProcess(): "
44 // << "Input file not opened \n";
45 return;
46 }
47 if (mf.GetSize() < 1000.) {
48 //std::cerr << "TGCPostProcess(): "
49 // << "Input file empty \n";
50 return;
51 }
52
53 std::stringstream ss;
54 TString sac[2] = {
55 "_A", "_C"
56 };
57 TString sws[2] = {
58 "Wire_", "Strip_"
59 };
60
61 TIter next_run(mf.GetListOfKeys());
62 TKey* key_run(0);
63
64 while ((key_run = dynamic_cast<TKey*> (next_run())) != 0) {
65 if (!key_run->IsFolder()) continue;
66 TString run_dir = key_run->GetName();
67 if (!run_dir.Contains("run")) continue;
68
69 std::string run_dir2 = run_dir.Data();
70 //int run_number = atoi( (run_dir2.substr(4, run_dir2.size()-4 )).c_str() );
71
72 TString seff;
73 TString snum;
74 TString sden;
75
76 TH1F* h1eff(0);
77 TH1F* h1num(0);
78 TH1F* h1den(0);
79 TH2F* h2eff(0);
80 TH2F* h2num(0);
81 TH2F* h2den(0);
82
83 //===TGCRaw
84 TString tgc_dir = run_dir + "/Muon/MuonRawDataMonitoring/TGC/";
85
86 TString tgc_global_dir = tgc_dir + "Global/";
87 TString tgc_sub_dir[2] = {
88 tgc_dir + "TGCEA/", tgc_dir + "TGCEC/"
89 };
90
91 for (int ac = 0; ac < 2; ac++) {
92 TString eff_dir = tgc_sub_dir[ac] + "Efficiency/";
93 TDirectory* dir = mf.GetDirectory(eff_dir);
94 if (!dir) {
95 //std::cerr<< "TGCHistogramDivision: directory "<<eff_dir<<" not found"<<std::endl;
96 return;
97 }
98
99 ss.str("");
100 ss << "Efficiency" << sac[ac];
101 seff = eff_dir + ss.str();
102 ss.str("");
103 ss << "Efficiency" << sac[ac] << "_Numerator";
104 snum = eff_dir + "NumDenom/" + ss.str();
105 ss.str("");
106 ss << "Efficiency" << sac[ac] << "_Denominator";
107 sden = eff_dir + "NumDenom/" + ss.str();
108
109 h1eff = 0;
110 mf.get(seff, h1eff);
111 h1num = 0;
112 mf.get(snum, h1num);
113 h1den = 0;
114 mf.get(sden, h1den);
115
116 if (h1eff && h1num && h1den) {
117 TGCResetContents(h1eff);
118 h1eff->Divide(h1num, h1den, 1., 1., "B");
119
120 // save the summary histogram
121 dir->cd();
122 h1eff->Write("", TObject::kOverwrite);
123 } else {
124 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
125 continue;
126 }
127
128 for (int ws = 0; ws < 2; ws++) {
129 ss.str("");
130 ss << sws[ws] << "Efficiency" << sac[ac];
131 seff = eff_dir + ss.str();
132 ss.str("");
133 ss << sws[ws] << "Efficiency" << sac[ac] << "_Numerator";
134 snum = eff_dir + "NumDenom/" + ss.str();
135 ss.str("");
136 ss << sws[ws] << "Efficiency" << sac[ac] << "_Denominator";
137 sden = eff_dir + "NumDenom/" + ss.str();
138
139 h1eff = 0;
140 mf.get(seff, h1eff);
141 h1num = 0;
142 mf.get(snum, h1num);
143 h1den = 0;
144 mf.get(sden, h1den);
145
146 if (h1eff && h1num && h1den) {
147 TGCResetContents(h1eff);
148 h1eff->Divide(h1num, h1den, 1., 1., "B");
149
150 // save the summary histogram
151 dir->cd();
152 h1eff->Write("", TObject::kOverwrite);
153 } else {
154 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
155 continue;
156 }
157 mf.Write();
158
159 //efficiency map for current, previous and next.
160 std::string sbc[3] = {
161 "_Previous", "", "_Next"
162 };
163 for (int bc = 0; bc < 3; bc++) {
164 ss.str("");
165 ss << sws[ws] << "Efficiency_Map" << sbc[bc] << sac[ac];
166 seff = eff_dir + ss.str();
167 ss.str("");
168 ss << sws[ws] << "Efficiency_Map" << sbc[bc] << sac[ac] << "_Numerator";
169 snum = eff_dir + "NumDenom/" + ss.str();
170 ss.str("");
171 ss << sws[ws] << "Efficiency_Map" << sac[ac] << "_Denominator";
172 sden = eff_dir + "NumDenom/" + ss.str();
173
174 h2eff = 0;
175 mf.get(seff, h2eff);
176 h2num = 0;
177 mf.get(snum, h2num);
178 h2den = 0;
179 mf.get(sden, h2den);
180
181 if (h2eff && h2num && h2den) {
182 TGCResetContents(h2eff);
183 h2eff->Divide(h2num, h2den, 1., 1., "B");
184
185 // save the summary histogram
186 dir->cd();
187 h2eff->Write("", TObject::kOverwrite);
188 } else {
189 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
190 continue;
191 }
192 }//bc
193 }//ws
194 }//ac
195 //===End TGCRaw
196 }// run_dir loop
197
198 mf.Write();
199 }
200
201 void
202 MonitoringFile::TGCLV1HistogramDivision(const std::string& inFilename) {
203 PostProcessorFileWrapper mf(inFilename, "TGC LV1 Histogram Division");
204
205 if (!mf.IsOpen()) {
206 //std::cerr << "TGCPostProcess(): "
207 // << "Input file not opened \n";
208 return;
209 }
210 if (mf.GetSize() < 1000.) {
211 //std::cerr << "TGCPostProcess(): "
212 // << "Input file empty \n";
213 return;
214 }
215 /*
216 // get run directory name
217 //Seemingly unnecessary lines are necessary
218 TIter nextcd0(gDirectory->GetListOfKeys());
219 TKey *key0 = (TKey*)nextcd0();
220 TDirectory *dir0= dynamic_cast<TDirectory*> (key0->ReadObj());
221 dir0->cd();
223 */
224 std::stringstream ss;
225 TString sac[2] = {
226 "_A", "_C"
227 };
228 //TString sws[2]={"Wire_","Strip_"};
229
230 TIter next_run(mf.GetListOfKeys());
231 TKey* key_run(0);
232 while ((key_run = dynamic_cast<TKey*> (next_run())) != 0) {
233 if (!key_run->IsFolder()) continue;
234 TString run_dir = key_run->GetName();
235 if (!run_dir.Contains("run")) continue;
236
237 std::string run_dir2 = run_dir.Data();
238 //int run_number = atoi( (run_dir2.substr(4, run_dir2.size()-4 )).c_str() );
239
240 TString seff;
241 TString snum;
242 TString sden;
243 TString seffg;
244
245 TH1F* h1eff(0);
246 TH1F* h1num(0);
247 TH1F* h1den(0);
248 TH2F* h2eff(0);
249 TH2F* h2num(0);
250 TH2F* h2den(0);
251 TGraphAsymmErrors* geff(0);
252
253 //===TGCLV1
254 TString tgc_dir = run_dir + "/Muon/MuonRawDataMonitoring/TGCLV1/";
255
256 TString tgc_global_dir = tgc_dir + "Global/";
257 TString tgc_sub_dir[2] = {
258 tgc_dir + "TGCEA/", tgc_dir + "TGCEC/"
259 };
260
261 std::string smuid[2] = {
262 "_Muid", "_Staco"
263 };
264 std::string spna[3] = {
265 "_Posi", "_Nega", ""
266 };
267
268 std::string sbc[3] = {
269 "_Previous", "", "_Next"
270 };
271
272 for (int ac = 0; ac < 2; ac++) {
273 TString eff_dir = tgc_sub_dir[ac] + "Eff/";
274 TDirectory* dir = mf.GetDirectory(eff_dir);
275 if (!dir) {
276 //std::cerr<< "TGCHistogramDivision: directory "<<eff_dir<<" not found"<<std::endl;
277 return;
278 }
279
280 for (int pt = 1; pt <= 6; pt++) {
281 for (int pna = 0; pna < 3; pna++) {
282 for (int muid = 0; muid < 2; muid++) {
283 for (int pcn = 0; pcn < 3; pcn++) {
284 std::string tempeff, tempnum, tempden;
285 //Efficiency
286 ss.str("");
287 ss << "Trigger_Efficiency" << spna[pna] << sbc[pcn] << "_PT" << pt << smuid[muid] << sac[ac];
288 seff = eff_dir + ss.str();
289 tempeff = ss.str();
290 ss.str("");
291 ss << "Trigger_Efficiency" << spna[pna] << sbc[pcn] << "_PT" << pt << smuid[muid] << sac[ac] <<
292 "_Numerator";
293 snum = eff_dir + "NumDenom/" + ss.str();
294 tempnum = ss.str();
295 ss.str("");
296 ss << "Trigger_Efficiency" << spna[pna] << "_PT" << pt << smuid[muid] << sac[ac] << "_Denominator";
297 sden = eff_dir + "NumDenom/" + ss.str();
298 tempden = ss.str();
299
300 h2eff = 0;
301 mf.get(seff, h2eff);
302 h2num = 0;
303 mf.get(snum, h2num);
304 h2den = 0;
305 mf.get(sden, h2den);
306 if (h2eff && h2num && h2den) {
307 TGCResetContents(h2eff);
308 h2eff->Divide(h2num, h2den, 1., 1., "B");
309
310 // save the summary histogram
311 dir = mf.GetDirectory(eff_dir);
312 dir->cd();
313 h2eff->Write("", TObject::kOverwrite);
314 } else {
315 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
316 continue;
317 }
318 mf.Write();
319 }//pcn
320
321 //Turn on
322 ss.str("");
323 ss << "Trigger_Turn_On_Curve" << spna[pna] << "_PT" << pt << smuid[muid] << sac[ac];
324 seff = eff_dir + ss.str();
325 ss << "_Fit";
326 seffg = eff_dir + ss.str();
327 ss.str("");
328 ss << "Trigger_Turn_On_Curve" << spna[pna] << "_PT" << pt << smuid[muid] << sac[ac] << "_Numerator";
329 snum = eff_dir + "NumDenom/" + ss.str();
330 ss.str("");
331 ss << "Trigger_Turn_On_Curve" << spna[pna] << "_PT" << pt << smuid[muid] << sac[ac] << "_Denominator";
332 sden = eff_dir + "NumDenom/" + ss.str();
333
334 h1eff = 0;
335 mf.get(seff, h1eff);
336 h1num = 0;
337 mf.get(snum, h1num);
338 h1den = 0;
339 mf.get(sden, h1den);
340 geff = 0;
341 mf.get(seffg, geff);
342
343 if (h1eff && h1num && h1den) {
344 TGCResetContents(h1eff);
345 h1eff->Divide(h1num, h1den, 1., 1., "B");
346
347 // save the summary histogram
348 dir = mf.GetDirectory(eff_dir);
349 dir->cd();
350 h1eff->Write("", TObject::kOverwrite);
351
352 if (geff) {
353 geff->BayesDivide(h1num, h1den);
354
355 // save the summary histogram
356 dir = mf.GetDirectory(eff_dir);
357 dir->cd();
358 geff->Write("", TObject::kOverwrite);
359 }
360 } else {
361 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
362 continue;
363 }
364 mf.Write();
365 }//muid
366 }//pna
367 mf.Write();
368
369 //Rate Ratio
370 TString grate_dir = tgc_global_dir + "Rate/";
371 TString rate_dir = tgc_sub_dir[ac] + "Rate/";
372 TString rr_dir = tgc_sub_dir[ac] + "Rate/Ratio/";
373 dir = mf.GetDirectory(rr_dir);
374 if (!dir) {
375 //std::cerr<< "TGCHistogramDivision: directory "<<rr_dir<<" not found"<<std::endl;
376 return;
377 }
378
379 // trigger/10BCID
380 ss.str("");
381 ss << "Number_Of_PT" << pt << "_Triggers_Per_Event_Vs_10BCID" << sac[ac];
382 seff = rr_dir + ss.str();
383 ss.str("");
384 ss << "Number_Of_PT" << pt << "_Triggers_In_10BCID" << sac[ac];
385 snum = rate_dir + ss.str();
386 ss.str("");
387 ss << "Number_Of_Events_In_10BCID";
388 sden = grate_dir + ss.str();
389
390 h1eff = 0;
391 mf.get(seff, h1eff);
392 h1num = 0;
393 mf.get(snum, h1num);
394 h1den = 0;
395 mf.get(sden, h1den);
396
397 if (h1eff && h1num && h1den) {
398 TGCResetContents(h1eff);
399 h1eff->Divide(h1num, h1den);
400
401 // save the summary histogram
402 dir->cd();
403 h1eff->Write("", TObject::kOverwrite);
404 } else {
405 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
406 continue;
407 }
408
409 //trigger/2LB
410 ss.str("");
411 ss << "Number_Of_PT" << pt << "_Triggers_Per_Event_Vs_2LB" << sac[ac];
412 seff = rr_dir + ss.str();
413 ss.str("");
414 ss << "Number_Of_PT" << pt << "_Triggers_In_2LB" << sac[ac];
415 snum = rate_dir + ss.str();
416 ss.str("");
417 ss << "Number_Of_Events_In_2LB";
418 sden = grate_dir + ss.str();
419
420 h1eff = 0;
421 mf.get(seff, h1eff);
422 h1num = 0;
423 mf.get(snum, h1num);
424 h1den = 0;
425 mf.get(sden, h1den);
426
427 if (h1eff && h1num && h1den) {
428 TGCResetContents(h1eff);
429 h1eff->Divide(h1num, h1den);
430
431 // save the summary histogram
432 dir->cd();
433 h1eff->Write("", TObject::kOverwrite);
434 } else {
435 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
436 continue;
437 }
438 mf.Write();
439 }//pt
440
441 //Rate Ratio
442 TString grate_dir = tgc_global_dir + "Rate/";
443 TString rate_dir = tgc_sub_dir[ac] + "Rate/";
444 TString rr_dir = tgc_sub_dir[ac] + "Rate/Ratio/";
445
446 // trigger/10BCID
447 ss.str("");
448 ss << "Number_Of_SL_Triggers_Per_Event_Vs_10BCID" << sac[ac];
449 seff = rr_dir + ss.str();
450 ss.str("");
451 ss << "Number_Of_SL_Triggers_In_10BCID" << sac[ac];
452 snum = rate_dir + ss.str();
453 ss.str("");
454 ss << "Number_Of_Events_In_10BCID";
455 sden = grate_dir + ss.str();
456
457 h1eff = 0;
458 mf.get(seff, h1eff);
459 h1num = 0;
460 mf.get(snum, h1num);
461 h1den = 0;
462 mf.get(sden, h1den);
463
464 if (h1eff && h1num && h1den) {
465 TGCResetContents(h1eff);
466 h1eff->Divide(h1num, h1den);
467
468 // save the summary histogram
469 dir = mf.GetDirectory(rr_dir);
470 dir->cd();
471 h1eff->Write("", TObject::kOverwrite);
472 } else {
473 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
474 continue;
475 }
476
477 //trigger/2LB
478 ss.str("");
479 ss << "Number_Of_SL_Triggers_Per_Event_Vs_2LB" << sac[ac];
480 seff = rr_dir + ss.str();
481 ss.str("");
482 ss << "Number_Of_SL_Triggers_In_2LB" << sac[ac];
483 snum = rate_dir + ss.str();
484 ss.str("");
485 ss << "Number_Of_Events_In_2LB";
486 sden = grate_dir + ss.str();
487
488 h1eff = 0;
489 mf.get(seff, h1eff);
490 h1num = 0;
491 mf.get(snum, h1num);
492 h1den = 0;
493 mf.get(sden, h1den);
494
495 if (h1eff && h1num && h1den) {
496 TGCResetContents(h1eff);
497 h1eff->Divide(h1num, h1den);
498
499 // save the summary histogram
500 dir->cd();
501 h1eff->Write("", TObject::kOverwrite);
502 } else {
503 //std::cerr <<"TGC PostProcessing: no such histogram (or num/denom)!! "<< seff << std::endl;
504 continue;
505 }
506 mf.Write();
507 }//ac
508 //====End TGCLV1
509 }
510
511 mf.Write();
512 }
513}//namespace
static Double_t ss
static void TGCLV1HistogramDivision(const std::string &inFilename)
static void TGCRawHistogramDivision(const std::string &inFilename)