ATLAS Offline Software
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 
37 namespace 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
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
TH2F
Definition: rootspy.cxx:420
test_pyathena.pt
pt
Definition: test_pyathena.py:11
DQPostProcessTest.mf
mf
Definition: DQPostProcessTest.py:19
dqutils::MonitoringFile::TGCRawHistogramDivision
static void TGCRawHistogramDivision(const std::string &inFilename)
Definition: MonitoringFile_TgcHistogramDivision.cxx:39
dqutils::MonitoringFile::PostProcessorFileWrapper
Definition: MonitoringFile.h:213
dqutils::MonitoringFile::TGCResetContents
static void TGCResetContents(TH1 *h)
Definition: MonitoringFile_TGCPostProcess.cxx:1121
dqutils
Definition: CoolMdt.h:76
beamspotman.dir
string dir
Definition: beamspotman.py:623
dqutils::MonitoringFile::TGCLV1HistogramDivision
static void TGCLV1HistogramDivision(const std::string &inFilename)
Definition: MonitoringFile_TgcHistogramDivision.cxx:202
MonitoringFile.h
TH1F
Definition: rootspy.cxx:320
MooRTT_summarizeCPU.muid
int muid
Definition: MooRTT_summarizeCPU.py:44