ATLAS Offline Software
MonitoringFile_BJetTaggingNormalise.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3  */
4 
5 /* Methods to perform post-processing on "run_nnnnnn/JetTagging/ *2D" histograms
6  * Mainly to normalise the z axis range to the total number of tracks/jets.
7  *
8  *
9  *
10  * Based on the HLTJetCalcEfficiencyAndRate code of Venkatesh Kaushik (venkat.kaushik@cern.ch).
11  *
12  * Author : Manuel Neumann (mneumann@cern.ch)
13  * Date : Aug 2011
14  */
15 
17 
18 #include <vector>
19 
20 #include "TH2F.h"
21 #include "TFile.h"
22 #include "TKey.h"
23 
24 namespace dqutils {
27 
28  if (debugLevel > 1) {
29  std::cout << "--> BJetTaggingNormalise: Adjusting ranges of d0, z0 and d0Sig, z0Sig"
30  << std::endl;
31  }
32 
33  f->cd("/");
34  // get run directory name
35  TIter nextcd0(gDirectory->GetListOfKeys());
36  TKey* key0 = (TKey*) nextcd0();
37 
38  TDirectory* dir0 = dynamic_cast<TDirectory*> (key0->ReadObj());
39  if (dir0 != 0) {
40  dir0->cd();
41 
42  TIter next_run(f->GetListOfKeys());
43  TKey* key_run(0);
44 
45  // loop through the runs
46  while ((key_run = dynamic_cast<TKey*> (next_run())) != 0) {
47  if (debugLevel > 1) {
48  std::cout << "--> BJetTaggingNormalise: Getting run " << key_run << std::endl;
49  }
50  TObject* obj_run = key_run->ReadObj();
51  TDirectory* tdir_run = dynamic_cast<TDirectory*> (obj_run);
52 
53  // Some checks of the run number
54  if (tdir_run != 0) {
55  //std::cerr << "--> BJetTaggingNormalise: directory " << tdir_run << " not found."
56  // << std::endl;
57  //return;
58  //}
59 
60  TString run_dir = tdir_run->GetName();
61  if (!run_dir.Contains("run")) {
62  std::cerr << "--> BJetTaggingNormalise: no run found" << std::endl;
63  return;
64  }
65  if (debugLevel > 1) {
66  std::cout << "--> BJetTaggingNormalise: Getting run no. " << run_dir << std::endl;
67  }
68 
69  // Setting the branch for JetTagging
70  TString diag_dir = run_dir + "/JetTagging";
71 
72  TDirectory* dir(0);
73  if (debugLevel > 1) {
74  std::cout << "--> BJetTaggingNormalise: directory " << diag_dir << std::endl;
75  }
76  if (!(dir = f->GetDirectory(diag_dir))) {
77  std::cerr << "--> BJetTaggingNormalise: directory " << diag_dir << " not found."
78  << std::endl;
79  return;
80  }
81  if (debugLevel > 1) {
82  std::cout << "--> BJetTaggingNormalise: Setting the to process histgrams"
83  << std::endl;
84  }
85 
86  // 2D histograms
87 
88  std::vector < TString > nomHistosNames;
89  std::vector < TString > denHistosNames;
90 
91  nomHistosNames.push_back("track_selector_eff");
92  nomHistosNames.push_back("track_selector_eff_LS"); // added by SARA
93  //nomHistosNames.push_back("jet_2D_kinematic"); // removed by SARA
94  nomHistosNames.push_back("ip3d_tag_def_rate_2D");
95  //nomHistosNames.push_back("ip2d_tag_pos_rate_2D");
96  nomHistosNames.push_back("ip3d_tag_neg_rate_2D");
97  nomHistosNames.push_back("ip3d_tag_pos_rate_2D");
98  //nomHistosNames.push_back("sv1_tag_neg_rate_2D");
99  //nomHistosNames.push_back("sv1_tag_pos_rate_2D");
100  //nomHistosNames.push_back("sv2_tag_neg_rate_2D");
101  //nomHistosNames.push_back("sv2_tag_pos_rate_2D");
102  nomHistosNames.push_back("tracks_pTMin_2D");
103  nomHistosNames.push_back("tracks_d0Max_2D");
104  nomHistosNames.push_back("tracks_z0Max_2D");
105  nomHistosNames.push_back("tracks_sigd0Max_2D");
106  nomHistosNames.push_back("tracks_sigz0Max_2D");
107  nomHistosNames.push_back("tracks_etaMax_2D");
108  nomHistosNames.push_back("tracks_nHitBLayer_2D");
109  nomHistosNames.push_back("tracks_deadBLayer_2D");
110  nomHistosNames.push_back("tracks_nHitPix_2D");
111  nomHistosNames.push_back("tracks_nHitSct_2D");
112  nomHistosNames.push_back("tracks_nHitSi_2D");
113  nomHistosNames.push_back("tracks_nHitTrt_2D");
114  nomHistosNames.push_back("tracks_nHitTrtHighE_2D");
115  nomHistosNames.push_back("tracks_fitChi2_2D");
116  nomHistosNames.push_back("tracks_fitProb_2D");
117  nomHistosNames.push_back("tracks_fitChi2OnNdfMax_2D");
118 
119  denHistosNames.push_back("track_selector_all");
120  denHistosNames.push_back("track_selector_all_LS"); // added by SARA
121  //denHistosNames.push_back("jet_2D_all"); // removed by SARA
122  denHistosNames.push_back("jet_2D_all");
123  denHistosNames.push_back("jet_2D_all");
124  denHistosNames.push_back("jet_2D_all");
125  //denHistosNames.push_back("track_selector_all");
126  //denHistosNames.push_back("track_selector_all");
127  //denHistosNames.push_back("track_selector_all");
128  //denHistosNames.push_back("track_selector_all");
129  //denHistosNames.push_back("track_selector_all");
130  //denHistosNames.push_back("track_selector_all");
131  //denHistosNames.push_back("track_selector_all");
132  //denHistosNames.push_back("track_selector_all");
133  denHistosNames.push_back("tracks_all_2D");
134  denHistosNames.push_back("tracks_all_2D");
135  denHistosNames.push_back("tracks_all_2D");
136  denHistosNames.push_back("tracks_all_2D");
137  denHistosNames.push_back("tracks_all_2D");
138  denHistosNames.push_back("tracks_all_2D");
139  denHistosNames.push_back("tracks_all_2D");
140  denHistosNames.push_back("tracks_all_2D");
141  denHistosNames.push_back("tracks_all_2D");
142  denHistosNames.push_back("tracks_all_2D");
143  denHistosNames.push_back("tracks_all_2D");
144  denHistosNames.push_back("tracks_all_2D");
145  denHistosNames.push_back("tracks_all_2D");
146  denHistosNames.push_back("tracks_all_2D");
147  denHistosNames.push_back("tracks_all_2D");
148  denHistosNames.push_back("tracks_all_2D");
149  //denHistosNames.push_back("tracks_all_2D"); // removed by SARA (was orphen)
150 
151  TH2F* workingHistogramNom(0);
152  TH2F* workingHistogramDen(0);
153 
154  TString nomHistos, workingHistogramNameNom;
155  TString denHistos, workingHistogramNameDen;
156 
157  for (unsigned int i = 0; i < nomHistosNames.size(); i++) {
158  workingHistogramNameNom = (nomHistosNames[i]);
159  workingHistogramNameDen = (denHistosNames[i]);
160  nomHistos = diag_dir + "/" + workingHistogramNameNom;
161  denHistos = diag_dir + "/" + workingHistogramNameDen;
162  //std::cout << "--> BJetTaggingNormalise: histogram " << nomHistos << std::endl;
163 
164 
165  // std::cout << "--> BJetTaggingNormalise: Doing the normalisation" << std::endl;
166  if (!f->Get(nomHistos)) {
167  if (debugLevel > 0) {
168  std::cerr << "--> BBJetTaggingNormalise: no such histogram " << nomHistos
169  << std::endl;
170  }
171  continue;
172  }
173  if (!f->Get(denHistos)) {
174  if (debugLevel > 0) {
175  std::cerr << "--> BJetTaggingNormalise: no such histogram " << denHistos
176  << std::endl;
177  }
178  continue;
179  }
180 
181  workingHistogramNom = dynamic_cast<TH2F*> (f->Get(nomHistos));
182  workingHistogramDen = dynamic_cast<TH2F*> (f->Get(denHistos));
183 
184  if (workingHistogramNom == 0 || workingHistogramDen == 0) {
185  continue;
186  }
187 
188  /*
189  * Here the bins are initialised and the upper and lower end from the histogram data
190  * are used as new borders of the updated histogram.
191  * */
192 
193  {
194  if (debugLevel > 1) {
195  std::cout << nomHistos << "/" << denHistos << " integral before "
196  << workingHistogramNom->Integral() << std::endl;
197  }
198  workingHistogramNom->Divide(workingHistogramDen);
199 
200  if (debugLevel > 1) {
201  std::cout << "integral after " << workingHistogramNom->Integral() << std::endl;
202  }
203  }
204  dir->cd();
205  workingHistogramNom->Write("", TObject::kOverwrite);
206 
207  // for eta/Pt range
208  } // end loop over 2D histograms
209 
210  // 1D histograms
211 
212  std::vector < TString > nom1DHistosNames; // added by SARA
213  std::vector < TString > den1DHistosNames; // added by SARA
214  std::vector < TString > eff1DHistosNames; // added by SARA
215 
216  nom1DHistosNames.push_back("jet_top_tagged"); // added by SARA
217  nom1DHistosNames.push_back("jet_pt_top_tagged"); // added by SARA
218  nom1DHistosNames.push_back("tag_MV_w_phi_sum60OP"); // added by SARA
219  nom1DHistosNames.push_back("tag_MV_w_phi_sum70OP"); // added by SARA
220  nom1DHistosNames.push_back("tag_MV_w_phi_sum77OP"); // added by SARA
221  nom1DHistosNames.push_back("tag_MV_w_phi_sum85OP"); // added by SARA
222  nom1DHistosNames.push_back("tag_MV_w_eta_sum60OP"); // added by SARA
223  nom1DHistosNames.push_back("tag_MV_w_eta_sum70OP"); // added by SARA
224  nom1DHistosNames.push_back("tag_MV_w_eta_sum77OP"); // added by SARA
225  nom1DHistosNames.push_back("tag_MV_w_eta_sum85OP"); // added by SARA
226  nom1DHistosNames.push_back("tag_MV_w_sj_phi_sum60OP"); // added by SARA
227  nom1DHistosNames.push_back("tag_MV_w_sj_phi_sum70OP"); // added by SARA
228  nom1DHistosNames.push_back("tag_MV_w_sj_phi_sum77OP"); // added by SARA
229  nom1DHistosNames.push_back("tag_MV_w_sj_phi_sum85OP"); // added by SARA
230  nom1DHistosNames.push_back("tag_MV_w_sj_eta_sum60OP"); // added by SARA
231  nom1DHistosNames.push_back("tag_MV_w_sj_eta_sum70OP"); // added by SARA
232  nom1DHistosNames.push_back("tag_MV_w_sj_eta_sum77OP"); // added by SARA
233  nom1DHistosNames.push_back("tag_MV_w_sj_eta_sum85OP"); // added by SARA
234 
235  den1DHistosNames.push_back("jet_top"); // added by SARA
236  den1DHistosNames.push_back("jet_pt_top"); // added by SARA
237  den1DHistosNames.push_back("tag_MV_w_phi_sumAll"); // added by SARA
238  den1DHistosNames.push_back("tag_MV_w_phi_sumAll"); // added by SARA
239  den1DHistosNames.push_back("tag_MV_w_phi_sumAll"); // added by SARA
240  den1DHistosNames.push_back("tag_MV_w_phi_sumAll"); // added by SARA
241  den1DHistosNames.push_back("tag_MV_w_eta_sumAll"); // added by SARA
242  den1DHistosNames.push_back("tag_MV_w_eta_sumAll"); // added by SARA
243  den1DHistosNames.push_back("tag_MV_w_eta_sumAll"); // added by SARA
244  den1DHistosNames.push_back("tag_MV_w_eta_sumAll"); // added by SARA
245  den1DHistosNames.push_back("tag_MV_w_sj_phi_sumAll"); // added by SARA
246  den1DHistosNames.push_back("tag_MV_w_sj_phi_sumAll"); // added by SARA
247  den1DHistosNames.push_back("tag_MV_w_sj_phi_sumAll"); // added by SARA
248  den1DHistosNames.push_back("tag_MV_w_sj_phi_sumAll"); // added by SARA
249  den1DHistosNames.push_back("tag_MV_w_sj_eta_sumAll"); // added by SARA
250  den1DHistosNames.push_back("tag_MV_w_sj_eta_sumAll"); // added by SARA
251  den1DHistosNames.push_back("tag_MV_w_sj_eta_sumAll"); // added by SARA
252  den1DHistosNames.push_back("tag_MV_w_sj_eta_sumAll"); // added by SARA
253 
254  eff1DHistosNames.push_back("jet_top_eff"); // added by SARA
255  eff1DHistosNames.push_back("jet_pt_top_eff"); // added by SARA
256  eff1DHistosNames.push_back("tag_MV_w_phi_frac60OP"); // added by SARA
257  eff1DHistosNames.push_back("tag_MV_w_phi_frac70OP"); // added by SARA
258  eff1DHistosNames.push_back("tag_MV_w_phi_frac77OP"); // added by SARA
259  eff1DHistosNames.push_back("tag_MV_w_phi_frac85OP"); // added by SARA
260  eff1DHistosNames.push_back("tag_MV_w_eta_frac60OP"); // added by SARA
261  eff1DHistosNames.push_back("tag_MV_w_eta_frac70OP"); // added by SARA
262  eff1DHistosNames.push_back("tag_MV_w_eta_frac77OP"); // added by SARA
263  eff1DHistosNames.push_back("tag_MV_w_eta_frac85OP"); // added by SARA
264  eff1DHistosNames.push_back("tag_MV_w_sj_phi_frac60OP"); // added by SARA
265  eff1DHistosNames.push_back("tag_MV_w_sj_phi_frac70OP"); // added by SARA
266  eff1DHistosNames.push_back("tag_MV_w_sj_phi_frac77OP"); // added by SARA
267  eff1DHistosNames.push_back("tag_MV_w_sj_phi_frac85OP"); // added by SARA
268  eff1DHistosNames.push_back("tag_MV_w_sj_eta_frac60OP"); // added by SARA
269  eff1DHistosNames.push_back("tag_MV_w_sj_eta_frac70OP"); // added by SARA
270  eff1DHistosNames.push_back("tag_MV_w_sj_eta_frac77OP"); // added by SARA
271  eff1DHistosNames.push_back("tag_MV_w_sj_eta_frac85OP"); // added by SARA
272 
273  TH1F* working1DHistogramNom(0);
274  TH1F* working1DHistogramDen(0);
275  TH1F* working1DHistogramEff(0);
276 
277  TString nom1DHistos, working1DHistogramNameNom;
278  TString den1DHistos, working1DHistogramNameDen;
279  TString eff1DHistos, working1DHistogramNameEff;
280 
281  for (unsigned int i = 0; i < nom1DHistosNames.size(); i++) {
282  working1DHistogramNameNom = (nom1DHistosNames[i]);
283  working1DHistogramNameDen = (den1DHistosNames[i]);
284  working1DHistogramNameEff = (eff1DHistosNames[i]);
285  nom1DHistos = diag_dir + "/" + working1DHistogramNameNom;
286  den1DHistos = diag_dir + "/" + working1DHistogramNameDen;
287  eff1DHistos = diag_dir + "/" + working1DHistogramNameEff;
288  //std::cout << "--> BJetTaggingNormalise: 1D histogram " << nom1DHistos << std::endl;
289 
290 
291  // std::cout << "--> BJetTaggingNormalise: Doing the 1D normalisation" << std::endl;
292  if (!f->Get(nom1DHistos)) {
293  if (debugLevel > 0) {
294  std::cerr << "--> BBJetTaggingNormalise: no such 1D histogram " << nom1DHistos
295  << std::endl;
296  }
297  continue;
298  }
299  if (!f->Get(den1DHistos)) {
300  if (debugLevel > 0) {
301  std::cerr << "--> BJetTaggingNormalise: no such 1D histogram " << den1DHistos
302  << std::endl;
303  }
304  continue;
305  }
306  if (!f->Get(eff1DHistos)) {
307  if (debugLevel > 0) {
308  std::cerr << "--> BJetTaggingNormalise: no such 1D histogram " << eff1DHistos
309  << std::endl;
310  }
311  continue;
312  }
313 
314  working1DHistogramNom = dynamic_cast<TH1F*> (f->Get(nom1DHistos));
315  working1DHistogramDen = dynamic_cast<TH1F*> (f->Get(den1DHistos));
316  working1DHistogramEff = dynamic_cast<TH1F*> (f->Get(eff1DHistos));
317  //if xomething goes wrong, do nothing and loop around
318  if (!working1DHistogramNom or !working1DHistogramDen or !working1DHistogramEff) {
319  continue;
320  }
321 
322  /*
323  * Here the bins are initialised and the upper and lower end from the histogram data
324  * are used as new borders of the updated histogram.
325  * */
326 
327  {
328  if (debugLevel > 1) {
329  std::cout << nom1DHistos << "/" << den1DHistos << " integral before "
330  << working1DHistogramNom->Integral() << std::endl;
331  }
332  working1DHistogramEff->Divide(working1DHistogramNom, working1DHistogramDen, 1., 1., "B");
333 
334  if (debugLevel > 1) {
335  std::cout << "integral after " << working1DHistogramEff->Integral() << std::endl;
336  }
337  }
338  dir->cd();
339  working1DHistogramEff->Write("", TObject::kOverwrite);
340 
341  // for eta/Pt range
342  } // end loop over 1D histograms
343 
344  if (debugLevel > 1) {
345  std::cout << "--> BJetTaggingNormalise: Finished" << std::endl;
346  }
347  }//tdir_run != 0
348  }//while
349  }//MonitoringFile::BJetTaggingNormalise
350  }
351 }//namespace
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
TH2F
Definition: rootspy.cxx:420
dqutils::MonitoringFile::getDebugLevel
static int getDebugLevel()
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
lumiFormat.i
int i
Definition: lumiFormat.py:92
DQHistogramMerge.debugLevel
debugLevel
Definition: DQHistogramMerge.py:40
dqutils
Definition: CoolMdt.h:76
beamspotman.dir
string dir
Definition: beamspotman.py:623
MonitoringFile.h
TH1F
Definition: rootspy.cxx:320
dqutils::MonitoringFile::BJetTaggingNormalise
static void BJetTaggingNormalise(TFile *f)
Definition: MonitoringFile_BJetTaggingNormalise.cxx:25