ATLAS Offline Software
MonitoringFile_IDPerfPostProcess.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3  */
4 
5 // **********************************************************************
6 // $Id: MonitoringFile_IDPerfPostProcess.cxx,v 1.2 2009-04-16 17:49:23 weina Exp $
7 // **********************************************************************
8 
10 
11 #include <cmath>
12 #include <vector>
13 
14 #include <TCanvas.h>
15 #include <TF1.h>
16 #include <TFile.h>
17 #include <TH1.h>
18 #include <TH2.h>
19 #include <TKey.h>
20 #include <TMath.h>
21 #include <TProfile.h>
22 #include <TTree.h>
23 #include <TROOT.h>
24 
25 #include "RooRealVar.h"
26 #include "RooDataHist.h"
27 #include "RooArgList.h"
28 #include "RooPlot.h"
29 #include "RooBreitWigner.h"
30 #include "RooCBShape.h"
31 #include "RooFFTConvPdf.h"
32 #include "RooGlobalFunc.h"
33 #include "RooFitResult.h"
34 
35 namespace dqutils {
36  void
38  fitMergedFile_IDPerfMonManager(const std::string& inFilename, bool /* isIncremental */) {
39 
40 
41  TFile* f = TFile::Open(inFilename.c_str(), "UPDATE");
42 
43  if (f == 0 || !f->IsOpen()) {
44 
45  delete f;
46  return;
47  }
48  if (f->GetSize() < 1000.) {
49 
50  delete f;
51  return;
52  }
53  std::string run_dir;
54  TIter next_run(f->GetListOfKeys());
55  TKey* key_run(0);
56  while ((key_run = dynamic_cast<TKey*>(next_run())) != 0) {
57  TObject* obj_run = key_run->ReadObj();
58  TDirectory* tdir_run = dynamic_cast<TDirectory*>(obj_run);
59  if (tdir_run != 0) {
60  std::string tdir_run_name(tdir_run->GetName());
61  if (tdir_run_name.find("run") != std::string::npos) {
62  run_dir = std::move(tdir_run_name);
63  TIter next_perf(tdir_run->GetListOfKeys());
64  TKey* key_perf(0);
65  while ((key_perf = dynamic_cast<TKey*>(next_perf())) != 0) {
66  std::string perf_name(key_perf->GetName());
67  // for hist file with run_directory
68  if (perf_name.find("IDPerfMon") != std::string::npos) {
69  TObject* obj_perf = key_perf->ReadObj();
70  TDirectory* tdir_perf = dynamic_cast<TDirectory*>(obj_perf);
71  if (tdir_perf != 0) {
72  run_dir = run_dir + '/';
73  TIter next_module(tdir_perf->GetListOfKeys());
74  TKey* key_module(0);
75  while ((key_module = dynamic_cast<TKey*>(next_module())) != 0) {
76  std::string module_name(key_module->GetName());
77  if (module_name.find("Kshort") != std::string::npos) {
78  TObject* obj_Kshort = key_module->ReadObj();
79  TDirectory* tdir_Kshort = dynamic_cast<TDirectory*>(obj_Kshort);
80  if (tdir_Kshort != 0) {
81  TIter next_trigger(tdir_Kshort->GetListOfKeys());
82  TKey* key_trigger(0);
83  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
84  std::string TriggerName = key_trigger->GetName();
85  fitMergedFile_IDPerfMonKshort(f, run_dir, TriggerName);
86  }
87  } else {
88  delete obj_Kshort;
89  }
90  }
91 
92  if (module_name.find("Jpsi") != std::string::npos) {
93  TObject* obj_Jpsi = key_module->ReadObj();
94  TDirectory* tdir_Jpsi = dynamic_cast<TDirectory*>(obj_Jpsi);
95  if (tdir_Jpsi != 0) {
96  TIter next_trigger(tdir_Jpsi->GetListOfKeys());
97  TKey* key_trigger(0);
98  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
99  std::string TriggerName = key_trigger->GetName();
100  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
101  fitMergedFile_IDPerfMonJpsi(f, run_dir, TriggerName);
102  }
103  } else {
104  delete obj_Jpsi;
105  }
106  }
107  if (module_name.find("Upsilon") != std::string::npos) {
108  TObject* obj_Upsilon = key_module->ReadObj();
109  TDirectory* tdir_Upsilon = dynamic_cast<TDirectory*>(obj_Upsilon);
110  if (tdir_Upsilon != 0) {
111  TIter next_trigger(tdir_Upsilon->GetListOfKeys());
112  TKey* key_trigger(0);
113  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
114  std::string TriggerName = key_trigger->GetName();
115  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
116  fitMergedFile_IDPerfMonUpsilon(f, run_dir, TriggerName);
117  }
118  } else {
119  delete obj_Upsilon;
120  }
121  }
122  if (module_name.find("Zee") != std::string::npos) {
123  TObject* obj_Zee = key_module->ReadObj();
124  TDirectory* tdir_Zee = dynamic_cast<TDirectory*>(obj_Zee);
125  if (tdir_Zee != 0) {
126  TIter next_trigger(tdir_Zee->GetListOfKeys());
127  TKey* key_trigger(0);
128  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
129  std::string TriggerName = key_trigger->GetName();
130  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
131  fitMergedFile_IDPerfMonZee(f, run_dir, TriggerName);
132  }
133  } else {
134  delete obj_Zee;
135  }
136  }
137  if (module_name.find("Wenu") != std::string::npos) {
138  TObject* obj_Wenu = key_module->ReadObj();
139  TDirectory* tdir_Wenu = dynamic_cast<TDirectory*>(obj_Wenu);
140  if (tdir_Wenu != 0) {
141  TIter next_trigger(tdir_Wenu->GetListOfKeys());
142  TKey* key_trigger(0);
143  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
144  std::string TriggerName = key_trigger->GetName();
145  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
146  fitMergedFile_IDPerfMonWenu(f, run_dir, TriggerName);
147  }
148  } else {
149  delete obj_Wenu;
150  }
151  }
152  if (module_name.find("ZMM") != std::string::npos) {
153  TObject* obj_ZMM = key_module->ReadObj();
154  TDirectory* tdir_ZMM = dynamic_cast<TDirectory*>(obj_ZMM);
155  if (tdir_ZMM != 0) {
156  TIter next_trigger(tdir_ZMM->GetListOfKeys());
157  TKey* key_trigger(0);
158  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
159  std::string TriggerName = key_trigger->GetName();
160  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
161  fitMergedFile_IDPerfMonZMM(f, run_dir, TriggerName);
162  }
163  } else {
164  delete obj_ZMM;
165  }
166  }
167  }
168  } else {
169  delete obj_perf;
170  }
171  }
172  }
173  }
174  // if without top run_directory
175  else if (tdir_run_name.find("IDPerfMon") != std::string::npos) {
176  //std::cout<<"without run_directory"<<std::endl;
177  TObject* obj_perf = key_run->ReadObj();
178  TDirectory* tdir_perf = dynamic_cast<TDirectory*>(obj_perf);
179  if (tdir_perf != 0) {
180  run_dir = '/';
181  TIter next_module(tdir_perf->GetListOfKeys());
182  TKey* key_module(0);
183  while ((key_module = dynamic_cast<TKey*>(next_module())) != 0) {
184  std::string module_name(key_module->GetName());
185  if (module_name.find("Kshort") != std::string::npos) {
186  TObject* obj_Kshort = key_module->ReadObj();
187  TDirectory* tdir_Kshort = dynamic_cast<TDirectory*>(obj_Kshort);
188  if (tdir_Kshort != 0) {
189  TIter next_trigger(tdir_Kshort->GetListOfKeys());
190  TKey* key_trigger(0);
191  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
192  std::string TriggerName = key_trigger->GetName();
193  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
194  fitMergedFile_IDPerfMonKshort(f, run_dir, TriggerName);
195  }
196  } else {
197  delete obj_Kshort;
198  }
199  }
200  if (module_name.find("Jpsi") != std::string::npos) {
201  TObject* obj_Jpsi = key_module->ReadObj();
202  TDirectory* tdir_Jpsi = dynamic_cast<TDirectory*>(obj_Jpsi);
203  if (tdir_Jpsi != 0) {
204  TIter next_trigger(tdir_Jpsi->GetListOfKeys());
205  TKey* key_trigger(0);
206  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
207  std::string TriggerName = key_trigger->GetName();
208  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
209  fitMergedFile_IDPerfMonJpsi(f, run_dir, TriggerName);
210  }
211  } else {
212  delete obj_Jpsi;
213  }
214  }
215  if (module_name.find("Upsilon") != std::string::npos) {
216  TObject* obj_Upsilon = key_module->ReadObj();
217  TDirectory* tdir_Upsilon = dynamic_cast<TDirectory*>(obj_Upsilon);
218  if (tdir_Upsilon != 0) {
219  TIter next_trigger(tdir_Upsilon->GetListOfKeys());
220  TKey* key_trigger(0);
221  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
222  std::string TriggerName = key_trigger->GetName();
223  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
224  fitMergedFile_IDPerfMonUpsilon(f, run_dir, TriggerName);
225  }
226  } else {
227  delete obj_Upsilon;
228  }
229  }
230  if (module_name.find("Zee") != std::string::npos) {
231  TObject* obj_Zee = key_module->ReadObj();
232  TDirectory* tdir_Zee = dynamic_cast<TDirectory*>(obj_Zee);
233  if (tdir_Zee != 0) {
234  TIter next_trigger(tdir_Zee->GetListOfKeys());
235  TKey* key_trigger(0);
236  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
237  std::string TriggerName = key_trigger->GetName();
238  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
239  fitMergedFile_IDPerfMonZee(f, run_dir, TriggerName);
240  }
241  } else {
242  delete obj_Zee;
243  }
244  }
245  if (module_name.find("Wenu") != std::string::npos) {
246  TObject* obj_Wenu = key_module->ReadObj();
247  TDirectory* tdir_Wenu = dynamic_cast<TDirectory*>(obj_Wenu);
248  if (tdir_Wenu != 0) {
249  TIter next_trigger(tdir_Wenu->GetListOfKeys());
250  TKey* key_trigger(0);
251  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
252  std::string TriggerName = key_trigger->GetName();
253  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
254  fitMergedFile_IDPerfMonWenu(f, run_dir, TriggerName);
255  }
256  } else {
257  delete obj_Wenu;
258  }
259  }
260  if (module_name.find("ZMM") != std::string::npos) {
261  TObject* obj_ZMM = key_module->ReadObj();
262  TDirectory* tdir_ZMM = dynamic_cast<TDirectory*>(obj_ZMM);
263  if (tdir_ZMM != 0) {
264  TIter next_trigger(tdir_ZMM->GetListOfKeys());
265  TKey* key_trigger(0);
266  while ((key_trigger = dynamic_cast<TKey*>(next_trigger())) != 0) {
267  std::string TriggerName = key_trigger->GetName();
268  // std::cout<<"Find Module: "<<module_name<<" Trigger: "<<TriggerName<<std::endl;
269  fitMergedFile_IDPerfMonZMM(f, run_dir, TriggerName);
270  }
271  } else {
272  delete obj_ZMM;
273  }
274  }
275  }
276  } else {
277  delete obj_perf;
278  }
279  }
280  // else
281  //std::cerr<<"directory IDPerfMon doesn't exist !"<<std::endl;
282  } else {
283  delete obj_run;
284  }
285  }
286 
287  f->Close();
288  delete f;
289  // std::cout << "\n";
290  //std::cout << "Finish Inner-Detector performance-monitoring analysis"<<std::endl;
291  }
292 
293  void
295  fitMergedFile_IDPerfMonKshort(TFile* f, const std::string& run_dir, const std::string& TriggerName) {
296  std::string path;
297  path = run_dir + "IDPerfMon/Kshort/" + TriggerName;
298  if (f->cd(path.c_str()) == 0) {
299  //std::cerr << "MonitoringFile::fitMergedFile_IDPerfMonKshort(): "
300  //<< "No such directory \"" << path << "\"\n";
301  return;
302  }
303 
304  Double_t myPi = TMath::Pi();
305 
306  TH1F* h_massVPtBinFittedHistos[5];
307  TH1F* h_massVRadiusBinFittedHistos[7];
308  TH1F* h_massVEtaBinHistos[10];
309  TH1F* h_massVPhiBinHistos[10];
310  TH1F* h_massVCurvatureDiffBinHistos[6];
311 
312  if (!CheckHistogram(f, (path + "/ks_mass").c_str())) return;
313 
314  if (!CheckHistogram(f, (path + "/MassVptBinFitted0").c_str())) return;
315 
316  if (!CheckHistogram(f, (path + "/MassVptBinFitted1").c_str())) return;
317 
318  if (!CheckHistogram(f, (path + "/MassVptBinFitted2").c_str())) return;
319 
320  if (!CheckHistogram(f, (path + "/MassVptBinFitted3").c_str())) return;
321 
322  if (!CheckHistogram(f, (path + "/MassVptBinFitted4").c_str())) return;
323 
324  if (!CheckHistogram(f, (path + "/MassVradiusBinFitted0").c_str())) return;
325 
326  if (!CheckHistogram(f, (path + "/MassVradiusBinFitted1").c_str())) return;
327 
328  if (!CheckHistogram(f, (path + "/MassVradiusBinFitted2").c_str())) return;
329 
330  if (!CheckHistogram(f, (path + "/MassVradiusBinFitted3").c_str())) return;
331 
332  if (!CheckHistogram(f, (path + "/MassVradiusBinFitted4").c_str())) return;
333 
334  if (!CheckHistogram(f, (path + "/MassVradiusBinFitted5").c_str())) return;
335 
336  if (!CheckHistogram(f, (path + "/MassVradiusBinFitted6").c_str())) return;
337 
338  if (!CheckHistogram(f, (path + "/MassVEtaBin0").c_str())) return;
339 
340  if (!CheckHistogram(f, (path + "/MassVEtaBin1").c_str())) return;
341 
342  if (!CheckHistogram(f, (path + "/MassVEtaBin2").c_str())) return;
343 
344  if (!CheckHistogram(f, (path + "/MassVEtaBin3").c_str())) return;
345 
346  if (!CheckHistogram(f, (path + "/MassVEtaBin4").c_str())) return;
347 
348  if (!CheckHistogram(f, (path + "/MassVEtaBin5").c_str())) return;
349 
350  if (!CheckHistogram(f, (path + "/MassVEtaBin6").c_str())) return;
351 
352  if (!CheckHistogram(f, (path + "/MassVEtaBin7").c_str())) return;
353 
354  if (!CheckHistogram(f, (path + "/MassVEtaBin8").c_str())) return;
355 
356  if (!CheckHistogram(f, (path + "/MassVEtaBin9").c_str())) return;
357 
358  if (!CheckHistogram(f, (path + "/MassVPhiBin0").c_str())) return;
359 
360  if (!CheckHistogram(f, (path + "/MassVPhiBin1").c_str())) return;
361 
362  if (!CheckHistogram(f, (path + "/MassVPhiBin2").c_str())) return;
363 
364  if (!CheckHistogram(f, (path + "/MassVPhiBin3").c_str())) return;
365 
366  if (!CheckHistogram(f, (path + "/MassVPhiBin4").c_str())) return;
367 
368  if (!CheckHistogram(f, (path + "/MassVPhiBin5").c_str())) return;
369 
370  if (!CheckHistogram(f, (path + "/MassVPhiBin6").c_str())) return;
371 
372  if (!CheckHistogram(f, (path + "/MassVPhiBin7").c_str())) return;
373 
374  if (!CheckHistogram(f, (path + "/MassVPhiBin8").c_str())) return;
375 
376  if (!CheckHistogram(f, (path + "/MassVPhiBin9").c_str())) return;
377 
378  if (!CheckHistogram(f, (path + "/MassVCurvatureDiffBin0").c_str())) return;
379 
380  if (!CheckHistogram(f, (path + "/MassVCurvatureDiffBin1").c_str())) return;
381 
382  if (!CheckHistogram(f, (path + "/MassVCurvatureDiffBin2").c_str())) return;
383 
384  if (!CheckHistogram(f, (path + "/MassVCurvatureDiffBin3").c_str())) return;
385 
386  if (!CheckHistogram(f, (path + "/MassVCurvatureDiffBin4").c_str())) return;
387 
388  if (!CheckHistogram(f, (path + "/MassVCurvatureDiffBin5").c_str())) return;
389 
390  TH1F* h_mass = (TH1F*) (f->Get((path + "/ks_mass").c_str())->Clone());
391  if (CheckHistogram(f, (path + "/Nevents").c_str())) {
392  TH1F* h_Nevents = (TH1F*) f->Get((path + "/Nevents").c_str());
393  TH1F* h_rate = new TH1F("rate", "production rate", 1, 0, 1);
394  double Ntot = h_Nevents->GetEntries();
395  double yield = h_mass->Integral(h_mass->FindBin(0.487), h_mass->FindBin(0.507));
396  double rate = yield / Ntot;
397  double rate_error = sqrt(1 / yield + 1 / Ntot) * yield / Ntot;
398  h_rate->SetBinContent(1, rate);
399  h_rate->SetBinError(1, rate_error);
400  h_rate->Write("", TObject::kOverwrite);
401  }
402 // TH1F* h_mass_scaled = (TH1F*)(f->Get((path+"/ks_mass").c_str())->Clone("ks_mass_scaled_copy"));
403 // TString title(h_mass_scaled->GetTitle());
404 // if (CheckHistogram(f,(path+"/ks_mass_scaled").c_str())) {
405 // if (CheckHistogram(f,(path+"/Nevents").c_str())) {
406 // TH1F* h_Nevents=(TH1F*)f->Get((path+"/Nevents").c_str());
407 // double Ntot =h_Nevents->GetEntries();
408 // if (Ntot!=0.) h_mass_scaled->Scale(1./Ntot);
409 // h_mass_scaled->SetTitle(title+" (per event)");
410 // h_mass_scaled->Write("ks_mass_scaled",TObject::kOverwrite);
411 // }
412 // }
413 // delete h_mass_scaled;
414 
415  h_massVPtBinFittedHistos[0] = (TH1F*) (f->Get((path + "/MassVptBinFitted0").c_str())->Clone());
416  h_massVPtBinFittedHistos[1] = (TH1F*) (f->Get((path + "/MassVptBinFitted1").c_str())->Clone());
417  h_massVPtBinFittedHistos[2] = (TH1F*) (f->Get((path + "/MassVptBinFitted2").c_str())->Clone());
418  h_massVPtBinFittedHistos[3] = (TH1F*) (f->Get((path + "/MassVptBinFitted3").c_str())->Clone());
419  h_massVPtBinFittedHistos[4] = (TH1F*) (f->Get((path + "/MassVptBinFitted4").c_str())->Clone());
420  h_massVRadiusBinFittedHistos[0] = (TH1F*) (f->Get((path + "/MassVradiusBinFitted0").c_str())->Clone());
421  h_massVRadiusBinFittedHistos[1] = (TH1F*) (f->Get((path + "/MassVradiusBinFitted1").c_str())->Clone());
422  h_massVRadiusBinFittedHistos[2] = (TH1F*) (f->Get((path + "/MassVradiusBinFitted2").c_str())->Clone());
423  h_massVRadiusBinFittedHistos[3] = (TH1F*) (f->Get((path + "/MassVradiusBinFitted3").c_str())->Clone());
424  h_massVRadiusBinFittedHistos[4] = (TH1F*) (f->Get((path + "/MassVradiusBinFitted4").c_str())->Clone());
425  h_massVRadiusBinFittedHistos[5] = (TH1F*) (f->Get((path + "/MassVradiusBinFitted5").c_str())->Clone());
426  h_massVRadiusBinFittedHistos[6] = (TH1F*) (f->Get((path + "/MassVradiusBinFitted6").c_str())->Clone());
427  h_massVEtaBinHistos[0] = (TH1F*) (f->Get((path + "/MassVEtaBin0").c_str())->Clone());
428  h_massVEtaBinHistos[1] = (TH1F*) (f->Get((path + "/MassVEtaBin1").c_str())->Clone());
429  h_massVEtaBinHistos[2] = (TH1F*) (f->Get((path + "/MassVEtaBin2").c_str())->Clone());
430  h_massVEtaBinHistos[3] = (TH1F*) (f->Get((path + "/MassVEtaBin3").c_str())->Clone());
431  h_massVEtaBinHistos[4] = (TH1F*) (f->Get((path + "/MassVEtaBin4").c_str())->Clone());
432  h_massVEtaBinHistos[5] = (TH1F*) (f->Get((path + "/MassVEtaBin5").c_str())->Clone());
433  h_massVEtaBinHistos[6] = (TH1F*) (f->Get((path + "/MassVEtaBin6").c_str())->Clone());
434  h_massVEtaBinHistos[7] = (TH1F*) (f->Get((path + "/MassVEtaBin7").c_str())->Clone());
435  h_massVEtaBinHistos[8] = (TH1F*) (f->Get((path + "/MassVEtaBin8").c_str())->Clone());
436  h_massVEtaBinHistos[9] = (TH1F*) (f->Get((path + "/MassVEtaBin9").c_str())->Clone());
437  h_massVPhiBinHistos[0] = (TH1F*) (f->Get((path + "/MassVPhiBin0").c_str())->Clone());
438  h_massVPhiBinHistos[1] = (TH1F*) (f->Get((path + "/MassVPhiBin1").c_str())->Clone());
439  h_massVPhiBinHistos[2] = (TH1F*) (f->Get((path + "/MassVPhiBin2").c_str())->Clone());
440  h_massVPhiBinHistos[3] = (TH1F*) (f->Get((path + "/MassVPhiBin3").c_str())->Clone());
441  h_massVPhiBinHistos[4] = (TH1F*) (f->Get((path + "/MassVPhiBin4").c_str())->Clone());
442  h_massVPhiBinHistos[5] = (TH1F*) (f->Get((path + "/MassVPhiBin5").c_str())->Clone());
443  h_massVPhiBinHistos[6] = (TH1F*) (f->Get((path + "/MassVPhiBin6").c_str())->Clone());
444  h_massVPhiBinHistos[7] = (TH1F*) (f->Get((path + "/MassVPhiBin7").c_str())->Clone());
445  h_massVPhiBinHistos[8] = (TH1F*) (f->Get((path + "/MassVPhiBin8").c_str())->Clone());
446  h_massVPhiBinHistos[9] = (TH1F*) (f->Get((path + "/MassVPhiBin9").c_str())->Clone());
447  h_massVCurvatureDiffBinHistos[0] = (TH1F*) (f->Get((path + "/MassVCurvatureDiffBin0").c_str())->Clone());
448  h_massVCurvatureDiffBinHistos[1] = (TH1F*) (f->Get((path + "/MassVCurvatureDiffBin1").c_str())->Clone());
449  h_massVCurvatureDiffBinHistos[2] = (TH1F*) (f->Get((path + "/MassVCurvatureDiffBin2").c_str())->Clone());
450  h_massVCurvatureDiffBinHistos[3] = (TH1F*) (f->Get((path + "/MassVCurvatureDiffBin3").c_str())->Clone());
451  h_massVCurvatureDiffBinHistos[4] = (TH1F*) (f->Get((path + "/MassVCurvatureDiffBin4").c_str())->Clone());
452  h_massVCurvatureDiffBinHistos[5] = (TH1F*) (f->Get((path + "/MassVCurvatureDiffBin5").c_str())->Clone());
453 
454  TF1* func1 = new TF1("func1", "gaus", 0.460, 0.540);
455  TF1* func2 = new TF1("func2", "expo", 0.460, 0.540);
456  TF1* func = new TF1("func", "func1+func2", 0.460, 0.540);
457 
458  func->SetLineColor(4);
459  func->SetParameters(10., 0.500, 0.010, 2., -.001);
460  // func->SetParLimits(0,0.,10000.);
461  func->SetParLimits(1, 0.460, 0.540);
462  func->SetParLimits(2, 0., 0.100);
463  func->SetParLimits(3, 0., 10000.);
464  func->SetParLimits(4, -1000., 0.);
465  func->SetParNames("Constant", "Mean", "Sigma", "Constant", "Slope");
466 
467  TCanvas* myCanvas = new TCanvas("MyCanvas");
468  myCanvas->cd();
469 
470  h_mass->Fit(func, "lmhqnr");
471 
472  Double_t massBins[5], massErrorBins[5], widthBins[5], widthErrorBins[5];
473  const Int_t nPtBinsHisto = 5 + 1;
474  Double_t ptBins[nPtBinsHisto] = {
475  0.5, 1.6, 2.1, 2.8, 3.9, 5.1
476  };
477  for (int binFill = 0; binFill < 5; binFill++) {
478  double max = h_massVPtBinFittedHistos[binFill]->GetBinContent(h_massVPtBinFittedHistos[binFill]->GetMaximumBin());
479  func->SetParLimits(0, 0, 2 * max);
480  h_massVPtBinFittedHistos[binFill]->Fit(func, "lmhqr");
481  massBins[binFill] = func->GetParameter(1);
482  massErrorBins[binFill] = func->GetParError(1);
483  widthBins[binFill] = func->GetParameter(2);
484  widthErrorBins[binFill] = func->GetParError(2);
485  }
486 
487  const Double_t* ptBinsFinal = ptBins;
488  const Double_t* massBinsFinal = massBins;
489  const Double_t* massErrorBinsFinal = massErrorBins;
490  const Double_t* widthBinsFinal = widthBins;
491  const Double_t* widthErrorBinsFinal = widthErrorBins;
492 
493  TH1F* h_massVersusPt = new TH1F("KsMassVersusPt_Merged", "", 5, ptBinsFinal);
494  h_massVersusPt->SetXTitle("p_{T} (Gev / c)");
495  h_massVersusPt->SetYTitle("Mass (Gev / c^{2})");
496  h_massVersusPt->SetMarkerStyle(20);
497  for (int binFill = 0; binFill < 5; binFill++) {
498  Double_t binContent = massBinsFinal[binFill];
499  Double_t binError = massErrorBinsFinal[binFill];
500  h_massVersusPt->SetBinContent(binFill + 1, binContent);
501  h_massVersusPt->SetBinError(binFill + 1, binError);
502  }
503 
504  TH1F* h_widthVersusPt = new TH1F("KsWidthVersusPt_Merged", "", 5, ptBinsFinal);
505  h_widthVersusPt->SetXTitle("p_{T} (Gev / c)");
506  h_widthVersusPt->SetYTitle("Width (Gev / c^{2})");
507  h_widthVersusPt->SetMarkerStyle(20);
508  for (int binFill = 0; binFill < 5; binFill++) {
509  Double_t binContent = widthBinsFinal[binFill];
510  Double_t binError = widthErrorBinsFinal[binFill];
511  h_widthVersusPt->SetBinContent(binFill + 1, binContent);
512  h_widthVersusPt->SetBinError(binFill + 1, binError);
513  }
514 
515  Double_t massVradiusBins[7], massVradiusErrorBins[7], widthVradiusBins[7], widthVradiusErrorBins[7];
516  const Int_t nRadiusBinsHisto = 7 + 1;
517  Double_t radiusBins[nRadiusBinsHisto] = {
518  0., 30., 40., 60., 80., 100., 140., 230
519  };
520  for (int binFill = 0; binFill < 7; binFill++) {
521  double max = h_massVRadiusBinFittedHistos[binFill]->GetBinContent(
522  h_massVRadiusBinFittedHistos[binFill]->GetMaximumBin());
523  func->SetParLimits(0, 0, 2 * max);
524  h_massVRadiusBinFittedHistos[binFill]->Fit(func, "lmhqr");
525  massVradiusBins[binFill] = func->GetParameter(1);
526  massVradiusErrorBins[binFill] = func->GetParError(1);
527  widthVradiusBins[binFill] = func->GetParameter(2);
528  widthVradiusErrorBins[binFill] = func->GetParError(2);
529  }
530 
531  const Double_t* radiusBinsFinal = radiusBins;
532  const Double_t* massVradiusBinsFinal = massVradiusBins;
533  const Double_t* massVradiusErrorBinsFinal = massVradiusErrorBins;
534  const Double_t* widthVradiusBinsFinal = widthVradiusBins;
535  const Double_t* widthVradiusErrorBinsFinal = widthVradiusErrorBins;
536 
537  TH1F* h_massVersusRadius = new TH1F("KsMassVersusRadius_Merged", "", 7, radiusBinsFinal);
538  h_massVersusRadius->SetXTitle("Decay Radius (mm)");
539  h_massVersusRadius->SetYTitle("Mass (Gev / c^{2})");
540  h_massVersusRadius->SetMarkerStyle(20);
541  for (int binFill = 0; binFill < 7; binFill++) {
542  Double_t binContent = massVradiusBinsFinal[binFill];
543  Double_t binError = massVradiusErrorBinsFinal[binFill];
544  h_massVersusRadius->SetBinContent(binFill + 1, binContent);
545  h_massVersusRadius->SetBinError(binFill + 1, binError);
546  }
547  TH1F* h_widthVersusRadius = new TH1F("KsWidthVersusRadius_Merged", "", 7, radiusBinsFinal);
548  h_widthVersusRadius->SetXTitle("Decay Radius (mm)");
549  h_widthVersusRadius->SetYTitle("Width (Gev / c^{2})");
550  h_widthVersusRadius->SetMarkerStyle(20);
551  for (int binFill = 0; binFill < 7; binFill++) {
552  Double_t binContent = widthVradiusBinsFinal[binFill];
553  Double_t binError = widthVradiusErrorBinsFinal[binFill];
554  h_widthVersusRadius->SetBinContent(binFill + 1, binContent);
555  h_widthVersusRadius->SetBinError(binFill + 1, binError);
556  }
557 
558  Double_t etaBins[11] = {
559  -2.5, -2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5
560  };
561  Double_t massVetaBins[10], massVetaErrorBins[10], widthVetaBins[10], widthVetaErrorBins[10];
562  for (int binFill = 0; binFill < 10; binFill++) {
563  double max = h_massVEtaBinHistos[binFill]->GetBinContent(h_massVEtaBinHistos[binFill]->GetMaximumBin());
564  func->SetParLimits(0, 0, 2 * max);
565  h_massVEtaBinHistos[binFill]->Fit(func, "lmhqr");
566  massVetaBins[binFill] = func->GetParameter(1);
567  massVetaErrorBins[binFill] = func->GetParError(1);
568  widthVetaBins[binFill] = func->GetParameter(2);
569  widthVetaErrorBins[binFill] = func->GetParError(2);
570  }
571  TH1F* h_massVersusEta = new TH1F("KsMassVersusEta_Merged", "", 10, etaBins);
572  h_massVersusEta->SetXTitle("#eta");
573  h_massVersusEta->SetYTitle("Mass (Gev / c^{2})");
574  h_massVersusEta->SetMarkerStyle(20);
575  for (int binFill = 0; binFill < 10; binFill++) {
576  Double_t binContent = massVetaBins[binFill];
577  Double_t binError = massVetaErrorBins[binFill];
578  h_massVersusEta->SetBinContent(binFill + 1, binContent);
579  h_massVersusEta->SetBinError(binFill + 1, binError);
580  }
581  TH1F* h_widthVersusEta = new TH1F("KsWidthVersusEta_Merged", "", 10, etaBins);
582  h_widthVersusEta->SetXTitle("#eta");
583  h_widthVersusEta->SetYTitle("Width (Gev / c^{2})");
584  h_widthVersusEta->SetMarkerStyle(20);
585  for (int binFill = 0; binFill < 10; binFill++) {
586  Double_t binContent = widthVetaBins[binFill];
587  Double_t binError = widthVetaErrorBins[binFill];
588  h_widthVersusEta->SetBinContent(binFill + 1, binContent);
589  h_widthVersusEta->SetBinError(binFill + 1, binError);
590  }
591 
592  Double_t phiBins[11] = {
593  (-5.0 * myPi / 5),
594  (-4.0 * myPi / 5),
595  (-3.0 * myPi / 5),
596  (-2.0 * myPi / 5),
597  (-1.0 * myPi / 5),
598  (0.0 * myPi / 5),
599  (1.0 * myPi / 5),
600  (2.0 * myPi / 5),
601  (3.0 * myPi / 5),
602  (4.0 * myPi / 5),
603  (5.0 * myPi / 5)
604  };
605  Double_t massVphiBins[10], massVphiErrorBins[10], widthVphiBins[10], widthVphiErrorBins[10];
606  for (int binFill = 0; binFill < 10; binFill++) {
607  double max = h_massVPhiBinHistos[binFill]->GetBinContent(h_massVPhiBinHistos[binFill]->GetMaximumBin());
608  func->SetParLimits(0, 0, 2 * max);
609  h_massVPhiBinHistos[binFill]->Fit(func, "lmhqr");
610  massVphiBins[binFill] = func->GetParameter(1);
611  massVphiErrorBins[binFill] = func->GetParError(1);
612  widthVphiBins[binFill] = func->GetParameter(2);
613  widthVphiErrorBins[binFill] = func->GetParError(2);
614  }
615  TH1F* h_massVersusPhi = new TH1F("KsMassVersusPhi_Merged", "", 10, phiBins);
616  h_massVersusPhi->SetXTitle("#phi");
617  h_massVersusPhi->SetYTitle("Mass (Gev / c^{2})");
618  h_massVersusPhi->SetMarkerStyle(20);
619  for (int binFill = 0; binFill < 10; binFill++) {
620  Double_t binContent = massVphiBins[binFill];
621  Double_t binError = massVphiErrorBins[binFill];
622  h_massVersusPhi->SetBinContent(binFill + 1, binContent);
623  h_massVersusPhi->SetBinError(binFill + 1, binError);
624  }
625  TH1F* h_widthVersusPhi = new TH1F("KsWidthVersusPhi_Merged", "", 10, phiBins);
626  h_widthVersusPhi->SetXTitle("#phi");
627  h_widthVersusPhi->SetYTitle("Width (Gev / c^{2})");
628  h_widthVersusPhi->SetMarkerStyle(20);
629  for (int binFill = 0; binFill < 10; binFill++) {
630  Double_t binContent = widthVphiBins[binFill];
631  Double_t binError = widthVphiErrorBins[binFill];
632  h_widthVersusPhi->SetBinContent(binFill + 1, binContent);
633  h_widthVersusPhi->SetBinError(binFill + 1, binError);
634  }
635 
636  Double_t curvatureDiffBins[7] = {
637  -0.0012, -0.0008, -0.0004, 0.0000, 0.0004, 0.0008, 0.0012
638  };
639  Double_t massVcurvatureDiffBins[6], massVcurvatureDiffErrorBins[6], widthVcurvatureDiffBins[6],
640  widthVcurvatureDiffErrorBins[6];
641  for (int binFill = 0; binFill < 6; binFill++) {
642  double max = h_massVCurvatureDiffBinHistos[binFill]->GetBinContent(
643  h_massVCurvatureDiffBinHistos[binFill]->GetMaximumBin());
644  func->SetParLimits(0, 0, 2 * max);
645  h_massVCurvatureDiffBinHistos[binFill]->Fit(func, "lmhqr");
646  massVcurvatureDiffBins[binFill] = func->GetParameter(1);
647  massVcurvatureDiffErrorBins[binFill] = func->GetParError(1);
648  widthVcurvatureDiffBins[binFill] = func->GetParameter(2);
649  widthVcurvatureDiffErrorBins[binFill] = func->GetParError(2);
650  }
651  TH1F* h_massVersusCurvatureDiff = new TH1F("KsMassVersusCurvatureDiff_Merged", "", 6, curvatureDiffBins);
652  h_massVersusCurvatureDiff->SetXTitle("1/p_{T}(#pi^{+}) - 1/p_{T}(#pi^{-}) [GeV^{-1}]");
653  h_massVersusCurvatureDiff->SetYTitle("Mass (Gev / c^{2})");
654  h_massVersusCurvatureDiff->SetMarkerStyle(20);
655  for (int binFill = 0; binFill < 6; binFill++) {
656  Double_t binContent = massVcurvatureDiffBins[binFill];
657  Double_t binError = massVcurvatureDiffErrorBins[binFill];
658  h_massVersusCurvatureDiff->SetBinContent(binFill + 1, binContent);
659  h_massVersusCurvatureDiff->SetBinError(binFill + 1, binError);
660  }
661  TH1F* h_widthVersusCurvatureDiff = new TH1F("KsWidthVersusCurvatureDiff_Merged", "", 6, curvatureDiffBins);
662  h_widthVersusCurvatureDiff->SetXTitle("1/p_{T}(#pi^{+}) - 1/p_{T}(#pi^{-}) [GeV^{-1}]");
663  h_widthVersusCurvatureDiff->SetYTitle("Width (Gev / c^{2})");
664  h_widthVersusCurvatureDiff->SetMarkerStyle(20);
665  for (int binFill = 0; binFill < 6; binFill++) {
666  Double_t binContent = widthVcurvatureDiffBins[binFill];
667  Double_t binError = widthVcurvatureDiffErrorBins[binFill];
668  h_widthVersusCurvatureDiff->SetBinContent(binFill + 1, binContent);
669  h_widthVersusCurvatureDiff->SetBinError(binFill + 1, binError);
670  }
671 
672  if (f->cd(path.c_str()) == 0) {
673  //std::cerr << "MonitoringFile::fitMergedFile_IDPerfMonKshort(): "
674  //<< "No such directory \"" << path << "\"\n";
675  return;
676  }
677 
678  // f->cd(path.c_str());
679 
680  h_mass->Write("", TObject::kOverwrite);
681 
682  h_massVPtBinFittedHistos[0]->Write("", TObject::kOverwrite);
683  h_massVPtBinFittedHistos[1]->Write("", TObject::kOverwrite);
684  h_massVPtBinFittedHistos[2]->Write("", TObject::kOverwrite);
685  h_massVPtBinFittedHistos[3]->Write("", TObject::kOverwrite);
686  h_massVPtBinFittedHistos[4]->Write("", TObject::kOverwrite);
687  h_massVRadiusBinFittedHistos[0]->Write("", TObject::kOverwrite);
688  h_massVRadiusBinFittedHistos[1]->Write("", TObject::kOverwrite);
689  h_massVRadiusBinFittedHistos[2]->Write("", TObject::kOverwrite);
690  h_massVRadiusBinFittedHistos[3]->Write("", TObject::kOverwrite);
691  h_massVRadiusBinFittedHistos[4]->Write("", TObject::kOverwrite);
692  h_massVRadiusBinFittedHistos[5]->Write("", TObject::kOverwrite);
693  h_massVRadiusBinFittedHistos[6]->Write("", TObject::kOverwrite);
694  h_massVEtaBinHistos[0]->Write("", TObject::kOverwrite);
695  h_massVEtaBinHistos[1]->Write("", TObject::kOverwrite);
696  h_massVEtaBinHistos[2]->Write("", TObject::kOverwrite);
697  h_massVEtaBinHistos[3]->Write("", TObject::kOverwrite);
698  h_massVEtaBinHistos[4]->Write("", TObject::kOverwrite);
699  h_massVEtaBinHistos[5]->Write("", TObject::kOverwrite);
700  h_massVEtaBinHistos[6]->Write("", TObject::kOverwrite);
701  h_massVEtaBinHistos[7]->Write("", TObject::kOverwrite);
702  h_massVEtaBinHistos[8]->Write("", TObject::kOverwrite);
703  h_massVEtaBinHistos[9]->Write("", TObject::kOverwrite);
704  h_massVPhiBinHistos[0]->Write("", TObject::kOverwrite);
705  h_massVPhiBinHistos[1]->Write("", TObject::kOverwrite);
706  h_massVPhiBinHistos[2]->Write("", TObject::kOverwrite);
707  h_massVPhiBinHistos[3]->Write("", TObject::kOverwrite);
708  h_massVPhiBinHistos[4]->Write("", TObject::kOverwrite);
709  h_massVPhiBinHistos[5]->Write("", TObject::kOverwrite);
710  h_massVPhiBinHistos[6]->Write("", TObject::kOverwrite);
711  h_massVPhiBinHistos[7]->Write("", TObject::kOverwrite);
712  h_massVPhiBinHistos[8]->Write("", TObject::kOverwrite);
713  h_massVPhiBinHistos[9]->Write("", TObject::kOverwrite);
714  h_massVCurvatureDiffBinHistos[0]->Write("", TObject::kOverwrite);
715  h_massVCurvatureDiffBinHistos[1]->Write("", TObject::kOverwrite);
716  h_massVCurvatureDiffBinHistos[2]->Write("", TObject::kOverwrite);
717  h_massVCurvatureDiffBinHistos[3]->Write("", TObject::kOverwrite);
718  h_massVCurvatureDiffBinHistos[4]->Write("", TObject::kOverwrite);
719  h_massVCurvatureDiffBinHistos[5]->Write("", TObject::kOverwrite);
720 
721  h_massVersusPt->Write("", TObject::kOverwrite);
722  h_widthVersusPt->Write("", TObject::kOverwrite);
723  h_massVersusRadius->Write("", TObject::kOverwrite);
724  h_widthVersusRadius->Write("", TObject::kOverwrite);
725  h_massVersusEta->Write("", TObject::kOverwrite);
726  h_widthVersusEta->Write("", TObject::kOverwrite);
727  h_massVersusPhi->Write("", TObject::kOverwrite);
728  h_widthVersusPhi->Write("", TObject::kOverwrite);
729  h_massVersusCurvatureDiff->Write("", TObject::kOverwrite);
730  h_widthVersusCurvatureDiff->Write("", TObject::kOverwrite);
731 
732  myCanvas->Close();
733  delete myCanvas;
734 
735  f->Write();
736 
737  delete func;
738  delete func1;
739  delete func2;
740  }
741 
742 //Jpsi plots merging
743  void
745  fitMergedFile_IDPerfMonJpsi(TFile* f, const std::string& run_dir, const std::string& TriggerName) {
746  std::string path;
747  path = run_dir + "IDPerfMon/Jpsi/" + TriggerName;
748 
749  if (f->cd(path.c_str()) == 0) {
750  //std::cerr//<< "MonitoringFile::fitMergedFile_IDPerfMonJpsi(): "
751  //<<"No such directory \""<< path << "\"\n";
752  return;
753  }
754 
755  TH1F* h_jpsi_invmass_vs_pt = new TH1F("Jpsi_invmass_vs_pt",
756  "Jpsi invmass-PDGmass vs. Jpsi Pt; p_{T}(J/#psi) [GeV/c]; Mass Shift [GeV/c^{2}]", 6, 10.,
757  20.);
758  TH1F* h_jpsi_invmass_vs_z0 = new TH1F("Jpsi_invmass_vs_z0",
759  "Jpsi invmass-PDGmass vs. muon z0; z0(#mu) [mm]; Mass Shift [GeV/c^{2}]", 6,
760  -100., 100.);
761  TH1F* h_jpsi_invmass_vs_phi = new TH1F("Jpsi_invmass_vs_phi",
762  "Jpsi invmass-PDGmass vs. Jpsi phi; #phi(J/#psi) [rad]; Mass Shift [GeV/c^{2}]", 6, -3.15,
763  3.15);
764  TH1F* h_jpsi_invmass_vs_phiplus = new TH1F("Jpsi_invmass_vs_phiplus",
765  "Jpsi invmass-PDGmass vs. Muon+ phi; #phi(#mu^{+}) [rad]; Mass Shift [GeV/c^{2}]", 6, -3.15,
766  3.15);
767  TH1F* h_jpsi_invmass_vs_phiminus = new TH1F("Jpsi_invmass_vs_phiminus",
768  "Jpsi invmass-PDGmass vs. Muon- phi; #phi(#mu^{-}) [rad]; Mass Shift [GeV/c^{2}]", 6, -3.15,
769  3.15);
770  TH1F* h_jpsi_invmass_vs_phidiff = new TH1F("Jpsi_invmass_vs_phidiff",
771  "Jpsi invmass-PDGmass vs. |phi(+)-phi(-)|; |#phi(#mu^{+})-#phi(#mu^{-})| [rad]; Mass Shift [GeV/c^{2}]", 6, 0.,
772  0.4);
773  TH1F* h_jpsi_invmass_vs_phisum = new TH1F("Jpsi_invmass_vs_phisum",
774  "Jpsi invmass-PDGmass vs. phi(+)+phi(-);#phi(#mu^{+})+#phi(#mu^{-}) [rad];Mass Shift [GeV/c^{2}]", 6, -3.15,
775  3.15);
776  TH1F* h_jpsi_invmass_vs_eta = new TH1F("Jpsi_invmass_vs_eta",
777  "Jpsi invmass-PDGmass vs. Jpsi eta; #eta(J/#psi); Mass Shift [GeV/c^{2}]", 6,
778  -2.4, 2.4);
779  TH1F* h_jpsi_invmass_vs_eta_barrel = new TH1F("Jpsi_invmass_vs_eta_barrel",
780  "Jpsi invmass-PDGmass vs. Jpsi eta (barrel); #eta(J/#psi); Mass Shift [GeV/c^{2}]", 2, -0.8,
781  0.8);
782  TH1F* h_jpsi_invmass_vs_eta_ecc = new TH1F("Jpsi_invmass_vs_eta_ecc",
783  "Jpsi invmass-PDGmass vs. Jpsi eta (endcap C); #eta(J/#psi); Mass Shift [GeV/c^{2}]", 2, -2.4,
784  -0.8);
785  TH1F* h_jpsi_invmass_vs_eta_eca = new TH1F("Jpsi_invmass_vs_eta_eca",
786  "Jpsi invmass-PDGmass vs. Jpsi eta (endcap A); #eta(J/#psi); Mass Shift [GeV/c^{2}]", 2, 0.8,
787  2.4);
788  TH1F* h_jpsi_invmass_vs_etaplus = new TH1F("Jpsi_invmass_vs_etaplus",
789  "Jpsi invmass-PDGmass vs. Muon+ eta; #eta(#mu^{+}); Mass Shift [GeV/c^{2}]", 6, -2.4,
790  2.4);
791  TH1F* h_jpsi_invmass_vs_etaminus = new TH1F("Jpsi_invmass_vs_etaminus",
792  "Jpsi invmass-PDGmass vs. Muon- eta; #eta(#mu^{-}); Mass Shift [GeV/c^{2}]", 6, -2.4,
793  2.4);
794  TH1F* h_jpsi_invmass_vs_maxeta = new TH1F("Jpsi_invmass_vs_maxeta",
795  "Jpsi invmass-PDGmass vs. max Muon |eta|; max|#eta(#mu)|; Mass Shift [GeV/c^{2}]", 6, -2.4,
796  2.4);
797  TH1F* h_jpsi_invmass_vs_etadiff = new TH1F("Jpsi_invmass_vs_etadiff",
798  "Jpsi invmass-PDGmass vs. eta(+)-eta(-); #eta(#mu^{+})-#eta(#mu^{-}); Mass Shift [GeV/c^{2}]", 6, -0.5,
799  0.5);
800  TH1F* h_jpsi_invmass_vs_sumeta = new TH1F("Jpsi_invmass_vs_sumeta",
801  "Jpsi invmass-PDGmass vs. eta(+)+eta(-); #eta(#mu^{+})+#eta(#mu^{-});Mass Shift [GeV/c^{2}]", 6, -4.8,
802  4.8);
803  TH1F* h_jpsi_invmass_vs_sumabseta = new TH1F("Jpsi_invmass_vs_sumabseta",
804  "Jpsi invmass-PDGmass vs. |eta(+)|+|eta(-)|;|#eta(#mu^{+})|+|#eta(#mu^{-})|;Mass Shift [GeV/c^{2}]", 6, 0.,
805  4.8);
806  TH1F* h_jpsi_invmass_vs_crt = new TH1F("Jpsi_invmass_vs_curvature",
807  "Jpsi invmass-PDGmass vs. crt(+)-|crt(-)|; 1/p_{T}(#mu^{+})-1/p_{T}(#mu^{-}) [GeV^{-1}]; Mass Shift [GeV/c^{2}]", 6, -0.15,
808  0.15);
809  TH1F* h_jpsi_invmass_vs_invpt = new TH1F("Jpsi_invmass_vs_invpt",
810  "Jpsi invmass-PDGmass vs. muon 1/Pt; 1/p_{T}(#mu) [(GeV/c)^{-1}]; Mass Shift [GeV/c^{2}]", 6, 0.05,
811  0.25);
812  TH1F* h_jpsi_invmass_vs_angle_eta = new TH1F("Jpsi_invmass_vs_angle_eta",
813  "Jpsi invmass-PDGmass vs. arccos(#Delta#eta/#DeltaR);arccos(#Delta#eta/#DeltaR); Mass Shift [GeV/c^{2}]", 6, 0.,
814  90.);
815 
816  TH1F* h_jpsi_width_vs_pt = new TH1F("Jpsi_width_vs_pt",
817  "Jpsi width vs. Jpsi Pt; p_{T}(J/#psi) [GeV/c]; Width [GeV/c^{2}]", 6, 10.,
818  20.);
819  TH1F* h_jpsi_width_vs_z0 = new TH1F("Jpsi_width_vs_z0", "Jpsi width vs. muon z0; z0(#mu) [mm]; Width [GeV/c^{2}]",
820  6, -100., 100.);
821  TH1F* h_jpsi_width_vs_phi = new TH1F("Jpsi_width_vs_phi",
822  "Jpsi width vs. Jpsi phi; #phi(J/#psi) [rad]; Width [GeV/c^{2}]", 6, -3.15,
823  3.15);
824  TH1F* h_jpsi_width_vs_phiplus = new TH1F("Jpsi_width_vs_phiplus",
825  "Jpsi width vs. Muon+ phi; #phi(#mu^{+}) [rad]; Width [GeV/c^{2}]", 6,
826  -3.15, 3.15);
827  TH1F* h_jpsi_width_vs_phiminus = new TH1F("Jpsi_width_vs_phiminus",
828  "Jpsi width vs. Muon- phi; #phi(#mu^{-}) [rad]; Width [GeV/c^{2}]", 6,
829  -3.15, 3.15);
830  TH1F* h_jpsi_width_vs_phidiff = new TH1F("Jpsi_width_vs_phidiff",
831  "Jpsi width vs. |phi(+)-phi(-)|; |#phi(#mu^{+})-#phi(#mu^{-})| [rad]; Width [GeV/c^{2}]", 6, 0.,
832  0.4);
833  TH1F* h_jpsi_width_vs_phisum = new TH1F("Jpsi_width_vs_phisum",
834  "Jpsi width vs. phi(+)+phi(-);#phi(#mu^{+})+#phi(#mu^{-}) [rad];Width [GeV/c^{2}]", 6, -3.15,
835  3.15);
836  TH1F* h_jpsi_width_vs_eta = new TH1F("Jpsi_width_vs_eta", "Jpsi width vs. Jpsi eta; #eta(J/#psi); Width[GeV/c^{2}]",
837  6, -2.4, 2.4);
838  TH1F* h_jpsi_width_vs_eta_barrel = new TH1F("Jpsi_width_vs_eta_barrel",
839  "Jpsi width vs. Jpsi eta (barrel); #eta(J/#psi); Width [GeV/c^{2}]", 2,
840  -0.8, 0.8);
841  TH1F* h_jpsi_width_vs_eta_ecc = new TH1F("Jpsi_width_vs_eta_ecc",
842  "Jpsi width vs. Jpsi eta (endcap C); #eta(J/#psi); Width [GeV/c^{2}]", 2,
843  -2.4, -0.8);
844  TH1F* h_jpsi_width_vs_eta_eca = new TH1F("Jpsi_width_vs_eta_eca",
845  "Jpsi width vs. Jpsi eta (endcap A); #eta(J/#psi); Width [GeV/c^{2}]", 2,
846  0.8, 2.4);
847  TH1F* h_jpsi_width_vs_etaplus = new TH1F("Jpsi_width_vs_etaplus",
848  "Jpsi width vs. Muon+ eta; #eta(#mu^{+}); Width [GeV/c^{2}]", 6, -2.4,
849  2.4);
850  TH1F* h_jpsi_width_vs_etaminus = new TH1F("Jpsi_width_vs_etaminus",
851  "Jpsi width vs. Muon- eta; #eta(#mu^{-}); Width [GeV/c^{2}]", 6, -2.4,
852  2.4);
853  TH1F* h_jpsi_width_vs_maxeta = new TH1F("Jpsi_width_vs_maxeta",
854  "Jpsi width vs. max Muon |eta|; max|#eta(#mu)|; Width[GeV/c^{2}]", 6, -2.4,
855  2.4);
856  TH1F* h_jpsi_width_vs_etadiff = new TH1F("Jpsi_width_vs_etadiff",
857  "Jpsi width vs. eta(+)-eta(-); #eta(#mu^{+})-#eta(#mu^{-}); Width [GeV/c^{2}]", 6, -0.5,
858  0.5);
859  TH1F* h_jpsi_width_vs_sumeta = new TH1F("Jpsi_width_vs_sumeta",
860  "Jpsi width vs. eta(+)+eta(-); #eta(#mu^{+})+#eta(#mu^{-});Width [GeV/c^{2}]", 6, -4.8,
861  4.8);
862  TH1F* h_jpsi_width_vs_sumabseta = new TH1F("Jpsi_width_vs_sumabseta",
863  "Jpsi width vs. |eta(+)|+|eta(-)|;|#eta(#mu^{+})|+|#eta(#mu^{-})|;Width [GeV/c^{2}]", 6, 0.,
864  4.8);
865  TH1F* h_jpsi_width_vs_crt = new TH1F("Jpsi_width_vs_curvature",
866  "Jpsi width vs. crt(+)-|crt(-)|; 1/p_{T}(#mu^{+})-1/p_{T}(#mu^{-}) [GeV^{-1}]; Width [GeV/c^{2}]", 6, -0.15,
867  0.15);
868  TH1F* h_jpsi_width_vs_invpt = new TH1F("Jpsi_width_vs_invpt",
869  "Jpsi width vs. muon 1/Pt; 1/p_{T}(#mu) [(GeV/c)^{-1}]; Width [GeV/c^{2}]",
870  6, 0.05, 0.25);
871  TH1F* h_jpsi_width_vs_angle_eta = new TH1F("Jpsi_width_vs_angle_eta",
872  "Jpsi width vs. arccos(#Delta#eta/#DeltaR);arccos(#Delta#eta/#DeltaR); Width [GeV/c^{2}]", 6, 0.,
873  90.);
874 
875  TH1F* h_eff_pt = new TH1F("eff_pt", "ID tracking efficiency vs p_{T} (tag-and-probe);p_{T} [GeV]", 9, 2., 20.);
876  TH1F* h_eff_eta = new TH1F("eff_eta", "ID tracking efficiency vs #eta (tag-and-probe);#eta", 10, -2.5, 2.5);
877  TH1F* h_eff_phi = new TH1F("eff_phi", "ID tracking efficiency vs #phi (tag-and-probe);#phi [rad]", 8, -3.15, 3.15);
878 
879  TH1F* h_chargeasym_vs_pt = new TH1F("chargeAsym_vs_pt",
880  "Charge asymmetry vs. p_{T};p_{T}(#mu) [GeV];#frac{N^{-}-N^{+}}{N^{-}+N^{+}}",
881  10, 0., 20.);
882 
883  const int nbins = 6;
884  TH1F* hpt[nbins];
885  TH1F* hz0[nbins];
886  TH1F* hphi[nbins];
887  TH1F* hphiplus[nbins];
888  TH1F* hphiminus[nbins];
889  TH1F* hphidiff[nbins];
890  TH1F* heta[nbins];
891  TH1F* heta_b[2];
892  TH1F* heta_ecc[2];
893  TH1F* heta_eca[2];
894  TH1F* hetadiff[nbins];
895  TH1F* hmaxeta[nbins];
896  TH1F* hinvpt[nbins];
897  TH1F* hcrt[nbins];
898  TH1F* hetaplus[nbins];
899  TH1F* hetaminus[nbins];
900  TH1F* hangle_eta[nbins];
901  TH1F* hsumphi[nbins];
902  TH1F* hsumeta[nbins];
903  TH1F* hsumabseta[nbins];
904 
905  if (!CheckHistogram(f, (path + "/Jpsi_invmass").c_str())) return;
906 
907  TH1F* h_mass = (TH1F*) (f->Get((path + "/Jpsi_invmass").c_str())->Clone());
908  if (CheckHistogram(f, (path + "/Nevents").c_str())) {
909  TH1F* h_Nevents = (TH1F*) f->Get((path + "/Nevents").c_str());
910  TH1F* h_rate = new TH1F("rate", "production rate", 1, 0, 1);
911  double Ntot = h_Nevents->GetEntries();
912  double yield = h_mass->Integral(h_mass->FindBin(2.95), h_mass->FindBin(3.25));
913  double rate = yield / Ntot;
914  double rate_error = sqrt(1 / yield + 1 / Ntot) * yield / Ntot;
915  h_rate->SetBinContent(1, rate);
916  h_rate->SetBinError(1, rate_error);
917  h_rate->Write("", TObject::kOverwrite);
918  }
919 // TH1F* h_mass_scaled = (TH1F*)(f->Get((path+"/Jpsi_invmass").c_str())->Clone("Jpsi_invmass_scaled_copy"));
920 // h_mass_scaled->SetMarkerStyle(21);
921 // TString title(h_mass_scaled->GetTitle());
922 // if (CheckHistogram(f,(path+"/Jpsi_invmass_scaled").c_str())) {
923 // if (CheckHistogram(f,(path+"/Nevents").c_str())) {
924 // TH1F* h_Nevents=(TH1F*)f->Get((path+"/Nevents").c_str());
925 // double Ntot =h_Nevents->GetEntries();
926 // if (Ntot!=0.) h_mass_scaled->Scale(1./Ntot);
927 // h_mass_scaled->SetTitle(title+" (per event)");
928 // h_mass_scaled->Write("Jpsi_invmass_scaled",TObject::kOverwrite);
929 // }
930 // }
931 // delete h_mass_scaled;
932  if (CheckHistogram(f, (path + "/Jpsi_invmass").c_str())) {
933  TH1F* h_mass_rebin = (TH1F*) (f->Get((path + "/Jpsi_invmass").c_str())->Clone("Jpsi_invmass_rebin"));
934  TString title = h_mass_rebin->GetTitle();
935  h_mass_rebin->SetMarkerStyle(21);
936  h_mass_rebin->Rebin(2);
937  h_mass_rebin->SetTitle(title + " (larger binning for low Stats.)");
938  h_mass_rebin->Write("Jpsi_invmass_rebin", TObject::kOverwrite);
939  }
940 
941  if (!CheckHistogram(f, (path + "/probe_all_pt").c_str())) return;
942 
943  TH1F* h_probe_all_pt = (TH1F*) (f->Get((path + "/probe_all_pt").c_str())->Clone());
944  if (!CheckHistogram(f, (path + "/probe_match_pt").c_str())) return;
945 
946  TH1F* h_probe_match_pt = (TH1F*) (f->Get((path + "/probe_match_pt").c_str())->Clone());
947  if (!CheckHistogram(f, (path + "/probe_all_eta").c_str())) return;
948 
949  TH1F* h_probe_all_eta = (TH1F*) (f->Get((path + "/probe_all_eta").c_str())->Clone());
950  if (!CheckHistogram(f, (path + "/probe_match_eta").c_str())) return;
951 
952  TH1F* h_probe_match_eta = (TH1F*) (f->Get((path + "/probe_match_eta").c_str())->Clone());
953  if (!CheckHistogram(f, (path + "/probe_all_phi").c_str())) return;
954 
955  TH1F* h_probe_all_phi = (TH1F*) (f->Get((path + "/probe_all_phi").c_str())->Clone());
956  if (!CheckHistogram(f, (path + "/probe_match_phi").c_str())) return;
957 
958  TH1F* h_probe_match_phi = (TH1F*) (f->Get((path + "/probe_match_phi").c_str())->Clone());
959  if (!CheckHistogram(f, (path + "/Muonplus_pt").c_str())) return;
960 
961  TH1F* h_ptplus = (TH1F*) (f->Get((path + "/Muonplus_pt").c_str())->Clone());
962  if (!CheckHistogram(f, (path + "/Muonminus_pt").c_str())) return;
963 
964  TH1F* h_ptminus = (TH1F*) (f->Get((path + "/Muonminus_pt").c_str())->Clone());
965 
966  char cpt[100], cz0[100], cphi[100], cphidiff[100], ceta[100], cetadiff[100], cmaxeta[100], ccrt[100], cinvpt[100],
967  cphiplus[100], cphiminus[100], cetaplus[100], cetaminus[100], ceta_b[100], ceta_ecc[100], ceta_eca[100],
968  cangle_eta[100], csumeta[100], csumabseta[100], csumphi[100];
969  for (int i = 0; i < nbins; i++) {
970  sprintf(cpt, (path + "/pt_bin%d").c_str(), i);
971  sprintf(cz0, (path + "/z0_bin%d").c_str(), i);
972  sprintf(cphi, (path + "/phi_bin%d").c_str(), i);
973  sprintf(cphiplus, (path + "/phiplus_bin%d").c_str(), i);
974  sprintf(cphiminus, (path + "/phiminus_bin%d").c_str(), i);
975  sprintf(cphidiff, (path + "/phidiff_bin%d").c_str(), i);
976  sprintf(ceta, (path + "/eta_bin%d").c_str(), i);
977  sprintf(cetaplus, (path + "/etaplus_bin%d").c_str(), i);
978  sprintf(cetaminus, (path + "/etaminus_bin%d").c_str(), i);
979  sprintf(cmaxeta, (path + "/maxeta_bin%d").c_str(), i);
980  sprintf(cetadiff, (path + "/etadiff_bin%d").c_str(), i);
981  sprintf(ccrt, (path + "/crt_bin%d").c_str(), i);
982  sprintf(cinvpt, (path + "/invpt_bin%d").c_str(), i);
983  sprintf(cangle_eta, (path + "/angle_eta_bin%d").c_str(), i);
984  sprintf(csumphi, (path + "/phi_sum%d").c_str(), i);
985  sprintf(csumeta, (path + "/eta_sum%d").c_str(), i);
986  sprintf(csumabseta, (path + "/eta_AbsSum%d").c_str(), i);
987 
988  if (!CheckHistogram(f, cpt)) return;
989 
990  if (!CheckHistogram(f, cz0)) return;
991 
992  if (!CheckHistogram(f, cphi)) return;
993 
994  if (!CheckHistogram(f, cphiplus)) return;
995 
996  if (!CheckHistogram(f, cphiminus)) return;
997 
998  if (!CheckHistogram(f, cphidiff)) return;
999 
1000  if (!CheckHistogram(f, ceta)) return;
1001 
1002  if (!CheckHistogram(f, cetaplus)) return;
1003 
1004  if (!CheckHistogram(f, cetaminus)) return;
1005 
1006  if (!CheckHistogram(f, cmaxeta)) return;
1007 
1008  if (!CheckHistogram(f, cetadiff)) return;
1009 
1010  if (!CheckHistogram(f, ccrt)) return;
1011 
1012  if (!CheckHistogram(f, cinvpt)) return;
1013 
1014  if (!CheckHistogram(f, cangle_eta)) return;
1015 
1016  if (!CheckHistogram(f, csumphi)) return;
1017 
1018  if (!CheckHistogram(f, csumeta)) return;
1019 
1020  if (!CheckHistogram(f, csumabseta)) return;
1021 
1022  hpt[i] = (TH1F*) (f->Get(cpt)->Clone());
1023  hz0[i] = (TH1F*) (f->Get(cz0)->Clone());
1024  hphi[i] = (TH1F*) (f->Get(cphi)->Clone());
1025  hphiplus[i] = (TH1F*) (f->Get(cphiplus)->Clone());
1026  hphiminus[i] = (TH1F*) (f->Get(cphiminus)->Clone());
1027  hphidiff[i] = (TH1F*) (f->Get(cphidiff)->Clone());
1028  heta[i] = (TH1F*) (f->Get(ceta)->Clone());
1029  hetaplus[i] = (TH1F*) (f->Get(cetaplus)->Clone());
1030  hetaminus[i] = (TH1F*) (f->Get(cetaminus)->Clone());
1031  hetadiff[i] = (TH1F*) (f->Get(cetadiff)->Clone());
1032  hmaxeta[i] = (TH1F*) (f->Get(cmaxeta)->Clone());
1033  hcrt[i] = (TH1F*) (f->Get(ccrt)->Clone());
1034  hinvpt[i] = (TH1F*) (f->Get(cinvpt)->Clone());
1035  hangle_eta[i] = (TH1F*) (f->Get(cangle_eta)->Clone());
1036  hsumphi[i] = (TH1F*) (f->Get(csumphi)->Clone());
1037  hsumeta[i] = (TH1F*) (f->Get(csumeta)->Clone());
1038  hsumabseta[i] = (TH1F*) (f->Get(csumabseta)->Clone());
1039 
1040  if (i < 2) {
1041  sprintf(ceta_b, (path + "/eta_b_bin%d").c_str(), i);
1042  sprintf(ceta_eca, (path + "/eta_eca_bin%d").c_str(), i);
1043  sprintf(ceta_ecc, (path + "/eta_ecc_bin%d").c_str(), i);
1044  if (!CheckHistogram(f, ceta_b)) return;
1045 
1046  if (!CheckHistogram(f, ceta_eca)) return;
1047 
1048  if (!CheckHistogram(f, ceta_ecc)) return;
1049 
1050  heta_b[i] = (TH1F*) (f->Get(ceta_b)->Clone());
1051  heta_ecc[i] = (TH1F*) (f->Get(ceta_ecc)->Clone());
1052  heta_eca[i] = (TH1F*) (f->Get(ceta_eca)->Clone());
1053  }
1054  }
1055  h_mass->SetMarkerStyle(21);
1056 
1057  TCanvas* myCanvas = new TCanvas("MyCanvas");
1058  myCanvas->cd();
1059 
1060 // h_mass->Fit(f1,"RQMN");
1061 
1062  fitJpsiHistograms(h_jpsi_invmass_vs_pt, h_jpsi_width_vs_pt, hpt, nbins);
1063  fitJpsiHistograms(h_jpsi_invmass_vs_z0, h_jpsi_width_vs_z0, hz0, nbins);
1064  fitJpsiHistograms(h_jpsi_invmass_vs_phi, h_jpsi_width_vs_phi, hphi, nbins);
1065  fitJpsiHistograms(h_jpsi_invmass_vs_phiplus, h_jpsi_width_vs_phiplus, hphiplus, nbins);
1066  fitJpsiHistograms(h_jpsi_invmass_vs_phiminus, h_jpsi_width_vs_phiminus, hphiminus, nbins);
1067  fitJpsiHistograms(h_jpsi_invmass_vs_phidiff, h_jpsi_width_vs_phidiff, hphidiff, nbins);
1068  fitJpsiHistograms(h_jpsi_invmass_vs_eta, h_jpsi_width_vs_eta, heta, nbins);
1069  fitJpsiHistograms(h_jpsi_invmass_vs_etaplus, h_jpsi_width_vs_etaplus, hetaplus, nbins);
1070  fitJpsiHistograms(h_jpsi_invmass_vs_etaminus, h_jpsi_width_vs_etaminus, hetaminus, nbins);
1071  fitJpsiHistograms(h_jpsi_invmass_vs_maxeta, h_jpsi_width_vs_maxeta, hmaxeta, nbins);
1072  fitJpsiHistograms(h_jpsi_invmass_vs_etadiff, h_jpsi_width_vs_etadiff, hetadiff, nbins);
1073  fitJpsiHistograms(h_jpsi_invmass_vs_crt, h_jpsi_width_vs_crt, hcrt, nbins);
1074  fitJpsiHistograms(h_jpsi_invmass_vs_invpt, h_jpsi_width_vs_invpt, hinvpt, nbins);
1075  fitJpsiHistograms(h_jpsi_invmass_vs_eta_barrel, h_jpsi_width_vs_eta_barrel, heta_b, 2);
1076  fitJpsiHistograms(h_jpsi_invmass_vs_eta_eca, h_jpsi_width_vs_eta_eca, heta_eca, 2);
1077  fitJpsiHistograms(h_jpsi_invmass_vs_eta_ecc, h_jpsi_width_vs_eta_ecc, heta_ecc, 2);
1078  fitJpsiHistograms(h_jpsi_invmass_vs_angle_eta, h_jpsi_width_vs_angle_eta, hangle_eta, nbins);
1079  fitJpsiHistograms(h_jpsi_invmass_vs_phisum, h_jpsi_width_vs_phisum, hsumphi, nbins);
1080  fitJpsiHistograms(h_jpsi_invmass_vs_sumeta, h_jpsi_width_vs_sumeta, hsumeta, nbins);
1081  fitJpsiHistograms(h_jpsi_invmass_vs_sumabseta, h_jpsi_width_vs_sumabseta, hsumabseta, nbins);
1082  if (h_eff_pt->GetNbinsX() == h_probe_match_pt->GetNbinsX()) {
1083  h_eff_pt->SetMarkerStyle(21);
1084  h_eff_eta->SetMarkerStyle(21);
1085  h_eff_phi->SetMarkerStyle(21);
1086  h_eff_pt->Divide(h_probe_match_pt, h_probe_all_pt, 1, 1, "B");
1087  h_eff_eta->Divide(h_probe_match_eta, h_probe_all_eta, 1, 1, "B");
1088  h_eff_phi->Divide(h_probe_match_phi, h_probe_all_phi, 1, 1, "B");
1089  }
1090  ProcessAsymHistograms(h_ptminus, h_ptplus, h_chargeasym_vs_pt);
1091  h_chargeasym_vs_pt->Write("", TObject::kOverwrite);
1092 
1093  // f->cd(path.c_str());
1094  if (f->cd(path.c_str()) == 0) {
1095  //std::cerr<< "MonitoringFile::fitMergedFile_IDPerfMonJpsi(): "
1096  //<<"No such directory \""<< path << "\"\n";
1097  return;
1098  }
1099 
1100  h_mass->Write("", TObject::kOverwrite);
1101  for (int i = 0; i < nbins; i++) {
1102  hpt[i]->Write("", TObject::kOverwrite);
1103  hz0[i]->Write("", TObject::kOverwrite);
1104  hphi[i]->Write("", TObject::kOverwrite);
1105  hphiplus[i]->Write("", TObject::kOverwrite);
1106  hphiminus[i]->Write("", TObject::kOverwrite);
1107  hphidiff[i]->Write("", TObject::kOverwrite);
1108  heta[i]->Write("", TObject::kOverwrite);
1109  hetadiff[i]->Write("", TObject::kOverwrite);
1110  hmaxeta[i]->Write("", TObject::kOverwrite);
1111  hinvpt[i]->Write("", TObject::kOverwrite);
1112  hcrt[i]->Write("", TObject::kOverwrite);
1113  hetaplus[i]->Write("", TObject::kOverwrite);
1114  hetaminus[i]->Write("", TObject::kOverwrite);
1115  hangle_eta[i]->Write("", TObject::kOverwrite);
1116  hsumphi[i]->Write("", TObject::kOverwrite);
1117  hsumeta[i]->Write("", TObject::kOverwrite);
1118  hsumabseta[i]->Write("", TObject::kOverwrite);
1119  if (i < 2) {
1120  heta_b[i]->Write("", TObject::kOverwrite);
1121  heta_ecc[i]->Write("", TObject::kOverwrite);
1122  heta_eca[i]->Write("", TObject::kOverwrite);
1123  }
1124  }
1125 
1126  h_jpsi_invmass_vs_pt->Write("", TObject::kOverwrite);
1127  h_jpsi_invmass_vs_z0->Write("", TObject::kOverwrite);
1128  h_jpsi_invmass_vs_phi->Write("", TObject::kOverwrite);
1129  h_jpsi_invmass_vs_phiplus->Write("", TObject::kOverwrite);
1130  h_jpsi_invmass_vs_phiminus->Write("", TObject::kOverwrite);
1131  h_jpsi_invmass_vs_phidiff->Write("", TObject::kOverwrite);
1132  h_jpsi_invmass_vs_eta->Write("", TObject::kOverwrite);
1133  h_jpsi_invmass_vs_eta_barrel->Write("", TObject::kOverwrite);
1134  h_jpsi_invmass_vs_eta_ecc->Write("", TObject::kOverwrite);
1135  h_jpsi_invmass_vs_eta_eca->Write("", TObject::kOverwrite);
1136  h_jpsi_invmass_vs_etadiff->Write("", TObject::kOverwrite);
1137  h_jpsi_invmass_vs_etaplus->Write("", TObject::kOverwrite);
1138  h_jpsi_invmass_vs_etaminus->Write("", TObject::kOverwrite);
1139  h_jpsi_invmass_vs_maxeta->Write("", TObject::kOverwrite);
1140  h_jpsi_invmass_vs_crt->Write("", TObject::kOverwrite);
1141  h_jpsi_invmass_vs_invpt->Write("", TObject::kOverwrite);
1142  h_jpsi_invmass_vs_angle_eta->Write("", TObject::kOverwrite);
1143  h_jpsi_invmass_vs_phisum->Write("", TObject::kOverwrite);
1144  h_jpsi_invmass_vs_sumeta->Write("", TObject::kOverwrite);
1145  h_jpsi_invmass_vs_sumabseta->Write("", TObject::kOverwrite);
1146 
1147  h_jpsi_width_vs_pt->Write("", TObject::kOverwrite);
1148  h_jpsi_width_vs_z0->Write("", TObject::kOverwrite);
1149  h_jpsi_width_vs_phi->Write("", TObject::kOverwrite);
1150  h_jpsi_width_vs_phiplus->Write("", TObject::kOverwrite);
1151  h_jpsi_width_vs_phiminus->Write("", TObject::kOverwrite);
1152  h_jpsi_width_vs_phidiff->Write("", TObject::kOverwrite);
1153  h_jpsi_width_vs_eta->Write("", TObject::kOverwrite);
1154  h_jpsi_width_vs_eta_barrel->Write("", TObject::kOverwrite);
1155  h_jpsi_width_vs_eta_ecc->Write("", TObject::kOverwrite);
1156  h_jpsi_width_vs_eta_eca->Write("", TObject::kOverwrite);
1157  h_jpsi_width_vs_etadiff->Write("", TObject::kOverwrite);
1158  h_jpsi_width_vs_etaplus->Write("", TObject::kOverwrite);
1159  h_jpsi_width_vs_etaminus->Write("", TObject::kOverwrite);
1160  h_jpsi_width_vs_maxeta->Write("", TObject::kOverwrite);
1161  h_jpsi_width_vs_crt->Write("", TObject::kOverwrite);
1162  h_jpsi_width_vs_invpt->Write("", TObject::kOverwrite);
1163  h_jpsi_width_vs_angle_eta->Write("", TObject::kOverwrite);
1164  h_jpsi_width_vs_phisum->Write("", TObject::kOverwrite);
1165  h_jpsi_width_vs_sumeta->Write("", TObject::kOverwrite);
1166  h_jpsi_width_vs_sumabseta->Write("", TObject::kOverwrite);
1167 
1168  h_eff_pt->Write("", TObject::kOverwrite);
1169  h_eff_eta->Write("", TObject::kOverwrite);
1170  h_eff_phi->Write("", TObject::kOverwrite);
1171 
1172 
1173 
1174  myCanvas->Close();
1175  delete myCanvas;
1176 
1177  f->Write();
1178 
1179 // delete f1;
1180  }
1181 
1182 //Upsilon
1183  void
1185  fitMergedFile_IDPerfMonUpsilon(TFile* f, const std::string& run_dir, const std::string& TriggerName) {
1186  std::string path;
1187  path = run_dir + "IDPerfMon/Upsilon/" + TriggerName;
1188 
1189  if (f->cd(path.c_str()) == 0) {
1190  //std::cerr<< "MonitoringFile::fitMergedFile_IDPerfMonUpsilon(): "
1191  //<<"No such directory \""<< path << "\"\n";
1192  return;
1193  }
1194 
1195  TH1F* h_upsilon_invmass_vs_pt = new TH1F("Upsilon_invmass_vs_pt",
1196  "Upsilon invmass-PDGmass vs. Upsilon Pt; p_{T}(#Upsilon) [GeV/c]; Mass Shift [GeV/c^{2}]", 6, 4.,
1197  20.);
1198  TH1F* h_upsilon_invmass_vs_z0 = new TH1F("Upsilon_invmass_vs_z0",
1199  "Upsilon invmass-PDGmass vs. muon z0; z0(#mu) [mm]; Mass Shift [GeV/c^{2}]", 6, -100.,
1200  100.);
1201  TH1F* h_upsilon_invmass_vs_phi = new TH1F("Upsilon_invmass_vs_phi",
1202  "Upsilon invmass-PDGmass vs. Upsilon phi; #phi(#Upsilon) [rad]; Mass Shift [GeV/c^{2}]", 6, -3.15,
1203  3.15);
1204  TH1F* h_upsilon_invmass_vs_phiplus = new TH1F("Upsilon_invmass_vs_phiplus",
1205  "Upsilon invmass-PDGmass vs. Muon+ phi; #phi(#mu^{+}) [rad]; Mass Shift [GeV/c^{2}]", 6, -3.15,
1206  3.15);
1207  TH1F* h_upsilon_invmass_vs_phiminus = new TH1F("Upsilon_invmass_vs_phiminus",
1208  "Upsilon invmass-PDGmass vs. Muon- phi; #phi(#mu^{-}) [rad]; Mass Shift [GeV/c^{2}]", 6, -3.15,
1209  3.15);
1210  TH1F* h_upsilon_invmass_vs_phidiff = new TH1F("Upsilon_invmass_vs_phidiff",
1211  "Upsilon invmass-PDGmass vs. |phi(+)-phi(-)|; |#phi(#mu^{+})-#phi(#mu^{-})| [rad]; Mass Shift [GeV/c^{2}]", 6, 0.,
1212  2.5);
1213  TH1F* h_upsilon_invmass_vs_eta = new TH1F("Upsilon_invmass_vs_eta",
1214  "Upsilon invmass-PDGmass vs. Upsilon eta; #eta(#Upsilon); Mass Shift [GeV/c^{2}]", 8, -3.2,
1215  3.2);
1216  TH1F* h_upsilon_invmass_vs_eta_barrel = new TH1F("Upsilon_invmass_vs_eta_barrel",
1217  "Upsilon invmass-PDGmass vs. Upsilon eta (barrel); #eta(#Upsilon); Mass Shift [GeV/c^{2}]", 2, -0.8,
1218  0.8);
1219  TH1F* h_upsilon_invmass_vs_eta_eca = new TH1F("Upsilon_invmass_vs_eta_eca",
1220  "Upsilon invmass-PDGmass vs. Upsilon eta (endcap A); #eta(#Upsilon); Mass Shift [GeV/c^{2}]", 3, 0.8,
1221  3.2);
1222  TH1F* h_upsilon_invmass_vs_eta_ecc = new TH1F("Upsilon_invmass_vs_eta_ecc",
1223  "Upsilon invmass-PDGmass vs. Upsilon eta (endcap C); #eta(#Upsilon); Mass Shift [GeV/c^{2}]", 3, -3.2,
1224  -0.8);
1225  TH1F* h_upsilon_invmass_vs_etaplus = new TH1F("Upsilon_invmass_vs_etaplus",
1226  "Upsilon invmass-PDGmass vs. Muon+ eta; #eta(#mu^{+}); Mass Shift [GeV/c^{2}]", 6, -2.4,
1227  2.4);
1228  TH1F* h_upsilon_invmass_vs_etaminus = new TH1F("Upsilon_invmass_vs_etaminus",
1229  "Upsilon invmass-PDGmass vs. Muon- eta; #eta(#mu^{-}); Mass Shift [GeV/c^{2}]", 6, -2.4,
1230  2.4);
1231  TH1F* h_upsilon_invmass_vs_maxeta = new TH1F("Upsilon_invmass_vs_maxeta",
1232  "Upsilon invmass-PDGmass vs. max Muon |eta|; max|#eta(#mu)|; Mass Shift [GeV/c^{2}]", 6, -2.4,
1233  2.4);
1234  TH1F* h_upsilon_invmass_vs_etadiff = new TH1F("Upsilon_invmass_vs_etadiff",
1235  "Upsilon invmass-PDGmass vs. eta(+)-eta(-); #eta(#mu^{+})-#eta(#mu^{-}); Mass Shift [GeV/c^{2}]", 6, -1.5,
1236  1.5);
1237  TH1F* h_upsilon_invmass_vs_crt = new TH1F("Upsilon_invmass_vs_curvature",
1238  "Upsilon invmass-PDGmass vs. crt(+)-|crt(-)|; 1/p_{T}(#mu^{+})-1/p_{T}(#mu^{-}) [GeV^{-1}]; Mass Shift [GeV/c^{2}]", 6, -0.15,
1239  0.15);
1240  TH1F* h_upsilon_invmass_vs_invpt = new TH1F("Upsilon_invmass_vs_invpt",
1241  "Upsilon invmass-PDGmass vs. muon 1/Pt; 1/p_{T}(#mu) [(GeV/c)^{-1}]; Mass Shift [GeV/c^{2}]", 6, 0.05,
1242  0.25);
1243  TH1F* h_upsilon_invmass_vs_angle_eta = new TH1F("Upsilon_invmass_vs_angle_eta",
1244  "Upsilon invmass-PDGmass vs. arccos(#Delta#eta/#DeltaR);arccos(#Delta#eta/#DeltaR); Mass Shift [GeV/c^{2}]", 6, 0.,
1245  90.);
1246 
1247  TH1F* h_upsilon_width_vs_pt = new TH1F("Upsilon_width_vs_pt",
1248  "Upsilon width vs. Upsilon Pt; p_{T}(#Upsilon) [GeV/c]; Width [GeV/c^{2}]",
1249  6, 4., 20.);
1250  TH1F* h_upsilon_width_vs_z0 = new TH1F("Upsilon_width_vs_z0",
1251  "Upsilon width vs. muon z0; z0(#mu) [mm]; Width [GeV/c^{2}]", 6, -100.,
1252  100.);
1253  TH1F* h_upsilon_width_vs_phi = new TH1F("Upsilon_width_vs_phi",
1254  "Upsilon width vs. Upsilon phi; #phi(#Upsilon) [rad]; Width [GeV/c^{2}]", 6,
1255  -3.15, 3.15);
1256  TH1F* h_upsilon_width_vs_phiplus = new TH1F("Upsilon_width_vs_phiplus",
1257  "Upsilon width vs. Muon+ phi; #phi(#mu^{+}) [rad]; Width [GeV/c^{2}]",
1258  6, -3.15, 3.15);
1259  TH1F* h_upsilon_width_vs_phiminus = new TH1F("Upsilon_width_vs_phiminus",
1260  "Upsilon width vs. Muon- phi; #phi(#mu^{-}) [rad]; Width [GeV/c^{2}]",
1261  6, -3.15, 3.15);
1262  TH1F* h_upsilon_width_vs_phidiff = new TH1F("Upsilon_width_vs_phidiff",
1263  "Upsilon width vs. |phi(+)-phi(-)|; |#phi(#mu^{+})-#phi(#mu^{-})| [rad]; Width [GeV/c^{2}]", 6, 0.,
1264  2.5);
1265  TH1F* h_upsilon_width_vs_eta = new TH1F("Upsilon_width_vs_eta",
1266  "Upsilon width vs. Upsilon eta; #eta(#Upsilon); Width [GeV/c^{2}]", 8, -3.2,
1267  3.2);
1268  TH1F* h_upsilon_width_vs_eta_barrel = new TH1F("Upsilon_width_vs_eta_barrel",
1269  "Upsilon width vs. Upsilon eta (barrel); #eta(#Upsilon); Width [GeV/c^{2}]", 2, -0.8,
1270  0.8);
1271  TH1F* h_upsilon_width_vs_eta_eca = new TH1F("Upsilon_width_vs_eta_eca",
1272  "Upsilon width vs. Upsilon eta (endcap A); #eta(#Upsilon); Width [GeV/c^{2}]", 3, 0.8,
1273  3.2);
1274  TH1F* h_upsilon_width_vs_eta_ecc = new TH1F("Upsilon_width_vs_eta_ecc",
1275  "Upsilon width vs. Upsilon eta (endcap C); #eta(#Upsilon); Width [GeV/c^{2}]", 3, -3.2,
1276  -0.8);
1277  TH1F* h_upsilon_width_vs_etaplus = new TH1F("Upsilon_width_vs_etaplus",
1278  "Upsilon width vs. Muon+ eta; #eta(#mu^{+}); Width [GeV/c^{2}]", 6,
1279  -2.4, 2.4);
1280  TH1F* h_upsilon_width_vs_etaminus = new TH1F("Upsilon_width_vs_etaminus",
1281  "Upsilon width vs. Muon- eta; #eta(#mu^{-}); Width [GeV/c^{2}]", 6,
1282  -2.4, 2.4);
1283  TH1F* h_upsilon_width_vs_maxeta = new TH1F("Upsilon_width_vs_maxeta",
1284  "Upsilon width vs. max Muon |eta|; max|#eta(#mu)|; Width [GeV/c^{2}]", 6,
1285  -2.4, 2.4);
1286  TH1F* h_upsilon_width_vs_etadiff = new TH1F("Upsilon_width_vs_etadiff",
1287  "Upsilon width vs. eta(+)-eta(-); #eta(#mu^{+})-#eta(#mu^{-}); Width [GeV/c^{2}]", 6, -1.5,
1288  1.5);
1289  TH1F* h_upsilon_width_vs_crt = new TH1F("Upsilon_width_vs_curvature",
1290  "Upsilon width vs. crt(+)-|crt(-)|; 1/p_{T}(#mu^{+})-1/p_{T}(#mu^{-}) [GeV^{-1}]; Width [GeV/c^{2}]", 6, -0.15,
1291  0.15);
1292  TH1F* h_upsilon_width_vs_invpt = new TH1F("Upsilon_width_vs_invpt",
1293  "Upsilon width vs. muon 1/Pt; 1/p_{T}(#mu) [(GeV/c)^{-1}]; Width [GeV/c^{2}]", 6, 0.05,
1294  0.25);
1295  TH1F* h_upsilon_width_vs_angle_eta = new TH1F("Upsilon_width_vs_angle_eta",
1296  "Upsilon width vs. arccos(#Delta#eta/#DeltaR);arccos(#Delta#eta/#DeltaR); width [GeV/c^{2}]", 6, 0.,
1297  90.);
1298 
1299  const int nbins = 6;
1300  TH1F* hpt[nbins];
1301  TH1F* hz0[nbins];
1302  TH1F* hphi[nbins];
1303  TH1F* hphiplus[nbins];
1304  TH1F* hphiminus[nbins];
1305  TH1F* hphidiff[nbins];
1306  TH1F* heta[8];
1307  TH1F* heta_b[2];
1308  TH1F* heta_ecc[3];
1309  TH1F* heta_eca[3];
1310  TH1F* hetadiff[nbins];
1311  TH1F* hmaxeta[nbins];
1312  TH1F* hinvpt[nbins];
1313  TH1F* hcrt[nbins];
1314  TH1F* hetaplus[nbins];
1315  TH1F* hetaminus[nbins];
1316  TH1F* hangle_eta[nbins];
1317 
1318  if (!CheckHistogram(f, (path + "/Upsilon_invmass").c_str())) return;
1319 
1320  TH1F* h_mass = (TH1F*) (f->Get((path + "/Upsilon_invmass").c_str())->Clone());
1321  if (CheckHistogram(f, (path + "/Nevents").c_str())) {
1322  TH1F* h_Nevents = (TH1F*) f->Get((path + "/Nevents").c_str());
1323  TH1F* h_rate = new TH1F("rate", "production rate", 1, 0, 1);
1324  double Ntot = h_Nevents->GetEntries();
1325  double yield = h_mass->Integral(h_mass->FindBin(9.1), h_mass->FindBin(9.8));
1326  double rate = yield / Ntot;
1327  double rate_error = sqrt(1 / yield + 1 / Ntot) * yield / Ntot;
1328  h_rate->SetBinContent(1, rate);
1329  h_rate->SetBinError(1, rate_error);
1330  h_rate->Write("", TObject::kOverwrite);
1331  }
1332 // TH1F* h_mass_scaled = (TH1F*)(f->Get((path+"/Upsilon_invmass").c_str())->Clone("Upsilon_invmass_scaled_copy"));
1333 // h_mass_scaled->SetMarkerStyle(21);
1334 // TString title(h_mass_scaled->GetTitle());
1335 // if (CheckHistogram(f,(path+"/Upsilon_invmass_scaled").c_str())) {
1336 // if (CheckHistogram(f,(path+"/Nevents").c_str())) {
1337 // TH1F* h_Nevents=(TH1F*)f->Get((path+"/Nevents").c_str());
1338 // double Ntot =h_Nevents->GetEntries();
1339 // if (Ntot!=0.) h_mass_scaled->Scale(1./Ntot);
1340 // h_mass_scaled->SetTitle(title+" (per event)");
1341 // h_mass_scaled->Write("Upsilon_invmass_scaled",TObject::kOverwrite);
1342 // }
1343 // }
1344 // delete h_mass_scaled;
1345  if (CheckHistogram(f, (path + "/Upsilon_invmass").c_str())) {
1346  TH1F* h_mass_rebin = (TH1F*) (f->Get((path + "/Upsilon_invmass").c_str())->Clone("Upsilon_invmass_rebin"));
1347  TString title = h_mass_rebin->GetTitle();
1348  h_mass_rebin->SetMarkerStyle(21);
1349  h_mass_rebin->Rebin(8);
1350  h_mass_rebin->SetTitle(title + " (larger binning for low Stats.)");
1351  h_mass_rebin->Write("Upsilon_invmass_rebin", TObject::kOverwrite);
1352  }
1353 
1354  char cpt[100], cz0[100], cphi[100], cphidiff[100], ceta[100], cetadiff[100], cmaxeta[100], ccrt[100], cinvpt[100],
1355  cphiplus[100], cphiminus[100], cetaplus[100], cetaminus[100], ceta_b[100], ceta_ecc[100], ceta_eca[100],
1356  cangle_eta[100];
1357 
1358  for (int i = 0; i < nbins; i++) {
1359  sprintf(cpt, (path + "/pt_bin%d").c_str(), i);
1360  sprintf(cz0, (path + "/z0_bin%d").c_str(), i);
1361  sprintf(cphi, (path + "/phi_bin%d").c_str(), i);
1362  sprintf(cphiplus, (path + "/phiplus_bin%d").c_str(), i);
1363  sprintf(cphiminus, (path + "/phiminus_bin%d").c_str(), i);
1364  sprintf(cphidiff, (path + "/phidiff_bin%d").c_str(), i);
1365  sprintf(cetaplus, (path + "/etaplus_bin%d").c_str(), i);
1366  sprintf(cetaminus, (path + "/etaminus_bin%d").c_str(), i);
1367  sprintf(cmaxeta, (path + "/maxeta_bin%d").c_str(), i);
1368  sprintf(cetadiff, (path + "/etadiff_bin%d").c_str(), i);
1369  sprintf(ccrt, (path + "/crt_bin%d").c_str(), i);
1370  sprintf(cinvpt, (path + "/invpt_bin%d").c_str(), i);
1371  sprintf(cangle_eta, (path + "/angle_eta_bin%d").c_str(), i);
1372 
1373  if (!CheckHistogram(f, cpt)) return;
1374 
1375  if (!CheckHistogram(f, cz0)) return;
1376 
1377  if (!CheckHistogram(f, cphi)) return;
1378 
1379  if (!CheckHistogram(f, cphiplus)) return;
1380 
1381  if (!CheckHistogram(f, cphiminus)) return;
1382 
1383  if (!CheckHistogram(f, cphidiff)) return;
1384 
1385  if (!CheckHistogram(f, cetaplus)) return;
1386 
1387  if (!CheckHistogram(f, cetaminus)) return;
1388 
1389  if (!CheckHistogram(f, cmaxeta)) return;
1390 
1391  if (!CheckHistogram(f, cetadiff)) return;
1392 
1393  if (!CheckHistogram(f, ccrt)) return;
1394 
1395  if (!CheckHistogram(f, cinvpt)) return;
1396 
1397  if (!CheckHistogram(f, cangle_eta)) return;
1398 
1399  hpt[i] = (TH1F*) (f->Get(cpt)->Clone());
1400  hz0[i] = (TH1F*) (f->Get(cz0)->Clone());
1401  hphi[i] = (TH1F*) (f->Get(cphi)->Clone());
1402  hphiplus[i] = (TH1F*) (f->Get(cphiplus)->Clone());
1403  hphiminus[i] = (TH1F*) (f->Get(cphiminus)->Clone());
1404  hphidiff[i] = (TH1F*) (f->Get(cphidiff)->Clone());
1405  hetaplus[i] = (TH1F*) (f->Get(cetaplus)->Clone());
1406  hetaminus[i] = (TH1F*) (f->Get(cetaminus)->Clone());
1407  hetadiff[i] = (TH1F*) (f->Get(cetadiff)->Clone());
1408  hmaxeta[i] = (TH1F*) (f->Get(cmaxeta)->Clone());
1409  hcrt[i] = (TH1F*) (f->Get(ccrt)->Clone());
1410  hinvpt[i] = (TH1F*) (f->Get(cinvpt)->Clone());
1411  hangle_eta[i] = (TH1F*) (f->Get(cangle_eta)->Clone());
1412 
1413  if (i < 2) {
1414  sprintf(ceta_b, (path + "/eta_b_bin%d").c_str(), i);
1415  if (!CheckHistogram(f, ceta_b)) return;
1416 
1417  heta_b[i] = (TH1F*) (f->Get(ceta_b)->Clone());
1418  }
1419  if (i < 3) {
1420  sprintf(ceta_ecc, (path + "/eta_ecc_bin%d").c_str(), i);
1421  sprintf(ceta_eca, (path + "/eta_eca_bin%d").c_str(), i);
1422  if (!CheckHistogram(f, ceta_ecc)) return;
1423 
1424  if (!CheckHistogram(f, ceta_eca)) return;
1425 
1426  heta_ecc[i] = (TH1F*) (f->Get(ceta_ecc)->Clone());
1427  heta_eca[i] = (TH1F*) (f->Get(ceta_eca)->Clone());
1428  }
1429  }
1430  for (int i = 0; i < 8; i++) {
1431  sprintf(ceta, (path + "/eta_bin%d").c_str(), i);
1432  if (!CheckHistogram(f, ceta)) return;
1433 
1434  heta[i] = (TH1F*) (f->Get(ceta)->Clone());
1435  }
1436 
1437 // TF1 *f1 = new TF1("f1","gaus",9.,10.);
1438 // f1->SetParameter(1,9.046);
1439 // f1->SetParameter(2,0.15);
1440 // f1->SetLineColor(2);
1441 // f1->SetParNames("Constant","Mean","Width");
1442  h_mass->SetMarkerStyle(21);
1443 
1444  TCanvas* myCanvas = new TCanvas("MyCanvas");
1445  myCanvas->cd();
1446 
1447 // h_mass->Fit(f1,"RQMN");
1448 
1449 
1450  fitUpsilonHistograms(h_upsilon_invmass_vs_pt, h_upsilon_width_vs_pt, hpt, nbins);
1451  fitUpsilonHistograms(h_upsilon_invmass_vs_z0, h_upsilon_width_vs_z0, hz0, nbins);
1452  fitUpsilonHistograms(h_upsilon_invmass_vs_phi, h_upsilon_width_vs_phi, hphi, nbins);
1453  fitUpsilonHistograms(h_upsilon_invmass_vs_phiplus, h_upsilon_width_vs_phiplus, hphiplus, nbins);
1454  fitUpsilonHistograms(h_upsilon_invmass_vs_phiminus, h_upsilon_width_vs_phiminus, hphiminus, nbins);
1455  fitUpsilonHistograms(h_upsilon_invmass_vs_phidiff, h_upsilon_width_vs_phidiff, hphidiff, nbins);
1456  fitUpsilonHistograms(h_upsilon_invmass_vs_eta, h_upsilon_width_vs_eta, heta, 8);
1457  fitUpsilonHistograms(h_upsilon_invmass_vs_eta_barrel, h_upsilon_width_vs_eta_barrel, heta_b, 2);
1458  fitUpsilonHistograms(h_upsilon_invmass_vs_eta_eca, h_upsilon_width_vs_eta_eca, heta_eca, 3);
1459  fitUpsilonHistograms(h_upsilon_invmass_vs_eta_ecc, h_upsilon_width_vs_eta_ecc, heta_ecc, 3);
1460  fitUpsilonHistograms(h_upsilon_invmass_vs_etaplus, h_upsilon_width_vs_etaplus, hetaplus, nbins);
1461  fitUpsilonHistograms(h_upsilon_invmass_vs_etaminus, h_upsilon_width_vs_etaminus, hetaminus, nbins);
1462  fitUpsilonHistograms(h_upsilon_invmass_vs_maxeta, h_upsilon_width_vs_maxeta, hmaxeta, nbins);
1463  fitUpsilonHistograms(h_upsilon_invmass_vs_etadiff, h_upsilon_width_vs_etadiff, hetadiff, nbins);
1464  fitUpsilonHistograms(h_upsilon_invmass_vs_crt, h_upsilon_width_vs_crt, hcrt, nbins);
1465  fitUpsilonHistograms(h_upsilon_invmass_vs_invpt, h_upsilon_width_vs_invpt, hinvpt, nbins);
1466  fitUpsilonHistograms(h_upsilon_invmass_vs_angle_eta, h_upsilon_width_vs_angle_eta, hangle_eta, nbins);
1467 
1468 
1469  // f->cd(path.c_str());
1470  if (f->cd(path.c_str()) == 0) {
1471  //std::cerr<< "MonitoringFile::fitMergedFile_IDPerfMonUpsilon(): "
1472  //<<"No such directory \""<< path << "\"\n";
1473  return;
1474  }
1475 
1476  h_mass->Write("", TObject::kOverwrite);
1477  for (int i = 0; i < nbins; i++) {
1478  hpt[i]->Write("", TObject::kOverwrite);
1479  hz0[i]->Write("", TObject::kOverwrite);
1480  hphi[i]->Write("", TObject::kOverwrite);
1481  hphiplus[i]->Write("", TObject::kOverwrite);
1482  hphiminus[i]->Write("", TObject::kOverwrite);
1483  hphidiff[i]->Write("", TObject::kOverwrite);
1484  hetadiff[i]->Write("", TObject::kOverwrite);
1485  hmaxeta[i]->Write("", TObject::kOverwrite);
1486  hinvpt[i]->Write("", TObject::kOverwrite);
1487  hcrt[i]->Write("", TObject::kOverwrite);
1488  hetaplus[i]->Write("", TObject::kOverwrite);
1489  hetaminus[i]->Write("", TObject::kOverwrite);
1490  hangle_eta[i]->Write("", TObject::kOverwrite);
1491  if (i < 2) {
1492  heta_b[i]->Write("", TObject::kOverwrite);
1493  }
1494  if (i < 3) {
1495  heta_ecc[i]->Write("", TObject::kOverwrite);
1496  heta_eca[i]->Write("", TObject::kOverwrite);
1497  }
1498  }
1499  for (int i = 0; i < 8; i++) {
1500  heta[i]->Write("", TObject::kOverwrite);
1501  }
1502  h_upsilon_invmass_vs_pt->Write("", TObject::kOverwrite);
1503  h_upsilon_invmass_vs_z0->Write("", TObject::kOverwrite);
1504  h_upsilon_invmass_vs_phi->Write("", TObject::kOverwrite);
1505  h_upsilon_invmass_vs_phiplus->Write("", TObject::kOverwrite);
1506  h_upsilon_invmass_vs_phiminus->Write("", TObject::kOverwrite);
1507  h_upsilon_invmass_vs_phidiff->Write("", TObject::kOverwrite);
1508  h_upsilon_invmass_vs_eta->Write("", TObject::kOverwrite);
1509  h_upsilon_invmass_vs_eta_barrel->Write("", TObject::kOverwrite);
1510  h_upsilon_invmass_vs_eta_ecc->Write("", TObject::kOverwrite);
1511  h_upsilon_invmass_vs_eta_eca->Write("", TObject::kOverwrite);
1512  h_upsilon_invmass_vs_etadiff->Write("", TObject::kOverwrite);
1513  h_upsilon_invmass_vs_etaplus->Write("", TObject::kOverwrite);
1514  h_upsilon_invmass_vs_etaminus->Write("", TObject::kOverwrite);
1515  h_upsilon_invmass_vs_maxeta->Write("", TObject::kOverwrite);
1516  h_upsilon_invmass_vs_crt->Write("", TObject::kOverwrite);
1517  h_upsilon_invmass_vs_invpt->Write("", TObject::kOverwrite);
1518  h_upsilon_invmass_vs_angle_eta->Write("", TObject::kOverwrite);
1519 
1520  h_upsilon_width_vs_pt->Write("", TObject::kOverwrite);
1521  h_upsilon_width_vs_z0->Write("", TObject::kOverwrite);
1522  h_upsilon_width_vs_phi->Write("", TObject::kOverwrite);
1523  h_upsilon_width_vs_phiplus->Write("", TObject::kOverwrite);
1524  h_upsilon_width_vs_phiminus->Write("", TObject::kOverwrite);
1525  h_upsilon_width_vs_phidiff->Write("", TObject::kOverwrite);
1526  h_upsilon_width_vs_eta->Write("", TObject::kOverwrite);
1527  h_upsilon_width_vs_eta_barrel->Write("", TObject::kOverwrite);
1528  h_upsilon_width_vs_eta_ecc->Write("", TObject::kOverwrite);
1529  h_upsilon_width_vs_eta_eca->Write("", TObject::kOverwrite);
1530  h_upsilon_width_vs_etadiff->Write("", TObject::kOverwrite);
1531  h_upsilon_width_vs_etaplus->Write("", TObject::kOverwrite);
1532  h_upsilon_width_vs_etaminus->Write("", TObject::kOverwrite);
1533  h_upsilon_width_vs_maxeta->Write("", TObject::kOverwrite);
1534  h_upsilon_width_vs_crt->Write("", TObject::kOverwrite);
1535  h_upsilon_width_vs_invpt->Write("", TObject::kOverwrite);
1536  h_upsilon_width_vs_angle_eta->Write("", TObject::kOverwrite);
1537 
1538  myCanvas->Close();
1539  delete myCanvas;
1540 
1541  f->Write();
1542 
1543 // delete f1;
1544  }
1545 
1546  void
1548  fitMergedFile_IDPerfMonZee(TFile* f, const std::string& run_dir, const std::string& TriggerName) {
1549  std::string path;
1550  path = run_dir + "IDPerfMon/Zee/" + TriggerName;
1551  if (f->cd(path.c_str()) == 0) {
1552  //std::cerr << "MonitoringFile::fitMergedFile_IDPerfMonZee(): "
1553  //<< "No such directory \"" << path << "\"\n";
1554  return;
1555  }
1556 
1557  f->cd(path.c_str());
1558 
1559  if (!CheckHistogram(f, (path + "/Zee_invmass").c_str())) return;
1560 
1561  TH1F* h_mass = (TH1F*) (f->Get((path + "/Zee_invmass").c_str())->Clone());
1562  if (CheckHistogram(f, (path + "/Nevents").c_str())) {
1563  TH1F* h_Nevents = (TH1F*) f->Get((path + "/Nevents").c_str());
1564  TH1F* h_rate = new TH1F("rate", "production rate", 1, 0, 1);
1565  double Ntot = h_Nevents->GetEntries();
1566  double yield = h_mass->Integral(h_mass->FindBin(80), h_mass->FindBin(105));
1567  double rate = yield / Ntot;
1568  double rate_error = sqrt(1 / yield + 1 / Ntot) * yield / Ntot;
1569  h_rate->SetBinContent(1, rate);
1570  h_rate->SetBinError(1, rate_error);
1571  h_rate->Write("", TObject::kOverwrite);
1572  }
1573 // TH1F* h_mass_scaled = (TH1F*)(f->Get((path+"/Zee_trk_invmass").c_str())->Clone("Zee_trk_invmass_scaled_copy"));
1574 // TString title(h_mass_scaled->GetTitle());
1575 // if (CheckHistogram(f,(path+"/Zee_trk_invmass_scaled").c_str())) {
1576 // if (CheckHistogram(f,(path+"/Nevents").c_str())) {
1577 // TH1F* h_Nevents=(TH1F*)f->Get((path+"/Nevents").c_str());
1578 // double Ntot =h_Nevents->GetEntries();
1579 // if (Ntot!=0.) h_mass_scaled->Scale(1./Ntot);
1580 // h_mass_scaled->SetTitle(title+" (per event)");
1581 // h_mass_scaled->Write("Zee_trk_invmass_scaled",TObject::kOverwrite);
1582 // }
1583 // }
1584 // delete h_mass_scaled;
1585 
1586  enum eta_region {
1587  incl, barrel, eca, ecc, Nregions
1588  };
1589  std::vector<std::string> region_strings;
1590  region_strings.push_back("incl");
1591  region_strings.push_back("barrel");
1592  region_strings.push_back("eca");
1593  region_strings.push_back("ecc");
1594 
1595  std::vector<TH1F*> h_Zee_Eopdiff;
1596  std::vector<TH1F*> h_Zee_Eop_plus;
1597  std::vector<TH1F*> h_Zee_Eop_minus;
1598 
1599  std::vector<TProfile*> h_Zee_Eopdiff_vs_p;
1600  std::vector<TProfile*> h_Zee_meanEop_vs_p_plus;
1601  std::vector<TProfile*> h_Zee_meanEop_vs_p_minus;
1602 
1603  std::vector<TProfile*> h_Zee_Eopdiff_vs_invp;
1604  std::vector<TProfile*> h_Zee_meanEop_vs_invp_plus;
1605  std::vector<TProfile*> h_Zee_meanEop_vs_invp_minus;
1606 
1607  std::vector<TProfile*> h_Zee_Eopdiff_vs_E;
1608  std::vector<TProfile*> h_Zee_meanEop_vs_E_plus;
1609  std::vector<TProfile*> h_Zee_meanEop_vs_E_minus;
1610 
1611  std::vector<TProfile*> h_Zee_Eopdiff_vs_phi;
1612  std::vector<TProfile*> h_Zee_meanEop_vs_phi_plus;
1613  std::vector<TProfile*> h_Zee_meanEop_vs_phi_minus;
1614 
1615  std::vector<TProfile*> h_Zee_Eopdiff_vs_eta;
1616  std::vector<TProfile*> h_Zee_meanEop_vs_eta_plus;
1617  std::vector<TProfile*> h_Zee_meanEop_vs_eta_minus;
1618 
1619  std::string str;
1620 
1621  for (int region = 0; region != Nregions; ++region) {
1622  str = path + "/Zee_Eop_plus_" + region_strings[region];
1623  if (!CheckHistogram(f, str.c_str())) return;
1624 
1625  h_Zee_Eop_plus.push_back((TH1F*) (f->Get(str.c_str())));
1626  h_Zee_Eop_plus[region]->SetTitle(h_Zee_Eop_plus[region]->GetTitle());
1627  str = path + "/Zee_Eop_minus_" + region_strings[region];
1628  if (!CheckHistogram(f, str.c_str())) return;
1629 
1630  h_Zee_Eop_minus.push_back((TH1F*) (f->Get(str.c_str())));
1631  h_Zee_Eop_minus[region]->SetTitle(h_Zee_Eop_minus[region]->GetTitle());
1632  str = path + "/Zee_Eopdiff_" + region_strings[region];
1633  if (!CheckHistogram(f, str.c_str())) return;
1634 
1635  h_Zee_Eopdiff.push_back((TH1F*) (f->Get(str.c_str())));
1636  h_Zee_Eopdiff[region]->SetTitle(h_Zee_Eopdiff[region]->GetTitle());
1637 
1638  h_Zee_Eopdiff[region]->Add(h_Zee_Eop_plus[region], h_Zee_Eop_minus[region], 1., -1);
1639 
1640  if (region == incl) {
1641  str = path + "/Zee_meanEop_vs_p_plus";
1642  if (!CheckHistogram(f, str.c_str())) return;
1643 
1644  h_Zee_meanEop_vs_p_plus.push_back((TProfile*) (f->Get(str.c_str())));
1645  h_Zee_meanEop_vs_p_plus[region]->SetTitle(h_Zee_meanEop_vs_p_plus[region]->GetTitle());
1646  str = path + "/Zee_meanEop_vs_p_minus";
1647  if (!CheckHistogram(f, str.c_str())) return;
1648 
1649  h_Zee_meanEop_vs_p_minus.push_back((TProfile*) (f->Get(str.c_str())));
1650  h_Zee_meanEop_vs_p_minus[region]->SetTitle(h_Zee_meanEop_vs_p_minus[region]->GetTitle());
1651  str = path + "/Zee_Eopdiff_vs_p";
1652  if (!CheckHistogram(f, str.c_str())) return;
1653 
1654  h_Zee_Eopdiff_vs_p.push_back((TProfile*) (f->Get(str.c_str())));
1655  h_Zee_Eopdiff_vs_p[region]->SetTitle(h_Zee_Eopdiff_vs_p[region]->GetTitle());
1656 
1657  str = path + "/Zee_meanEop_vs_invp_plus";
1658  if (!CheckHistogram(f, str.c_str())) return;
1659 
1660  h_Zee_meanEop_vs_invp_plus.push_back((TProfile*) (f->Get(str.c_str())));
1661  h_Zee_meanEop_vs_invp_plus[region]->SetTitle(h_Zee_meanEop_vs_invp_plus[region]->GetTitle());
1662  str = path + "/Zee_meanEop_vs_invp_minus";
1663  if (!CheckHistogram(f, str.c_str())) return;
1664 
1665  h_Zee_meanEop_vs_invp_minus.push_back((TProfile*) (f->Get(str.c_str())));
1666  h_Zee_meanEop_vs_invp_minus[region]->SetTitle(h_Zee_meanEop_vs_invp_minus[region]->GetTitle());
1667  str = path + "/Zee_Eopdiff_vs_invp";
1668  if (!CheckHistogram(f, str.c_str())) return;
1669 
1670  h_Zee_Eopdiff_vs_invp.push_back((TProfile*) (f->Get(str.c_str())));
1671  h_Zee_Eopdiff_vs_invp[region]->SetTitle(h_Zee_Eopdiff_vs_invp[region]->GetTitle());
1672 
1673  str = path + "/Zee_meanEop_vs_E_plus";
1674  if (!CheckHistogram(f, str.c_str())) return;
1675 
1676  h_Zee_meanEop_vs_E_plus.push_back((TProfile*) (f->Get(str.c_str())));
1677  h_Zee_meanEop_vs_E_plus[region]->SetTitle(h_Zee_meanEop_vs_E_plus[region]->GetTitle());
1678  str = path + "/Zee_meanEop_vs_E_minus";
1679  if (!CheckHistogram(f, str.c_str())) return;
1680 
1681  h_Zee_meanEop_vs_E_minus.push_back((TProfile*) (f->Get(str.c_str())));
1682  h_Zee_meanEop_vs_E_minus[region]->SetTitle(h_Zee_meanEop_vs_E_minus[region]->GetTitle());
1683  str = path + "/Zee_Eopdiff_vs_E";
1684  if (!CheckHistogram(f, str.c_str())) return;
1685 
1686  h_Zee_Eopdiff_vs_E.push_back((TProfile*) (f->Get(str.c_str())));
1687  h_Zee_Eopdiff_vs_E[region]->SetTitle(h_Zee_Eopdiff_vs_E[region]->GetTitle());
1688 
1689  str = path + "/Zee_meanEop_vs_phi_plus";
1690  if (!CheckHistogram(f, str.c_str())) return;
1691 
1692  h_Zee_meanEop_vs_phi_plus.push_back((TProfile*) (f->Get(str.c_str())));
1693  h_Zee_meanEop_vs_phi_plus[region]->SetTitle(h_Zee_meanEop_vs_phi_plus[region]->GetTitle());
1694  str = path + "/Zee_meanEop_vs_phi_minus";
1695  if (!CheckHistogram(f, str.c_str())) return;
1696 
1697  h_Zee_meanEop_vs_phi_minus.push_back((TProfile*) (f->Get(str.c_str())));
1698  h_Zee_meanEop_vs_phi_minus[region]->SetTitle(h_Zee_meanEop_vs_phi_minus[region]->GetTitle());
1699  str = path + "/Zee_Eopdiff_vs_phi";
1700  if (!CheckHistogram(f, str.c_str())) return;
1701 
1702  h_Zee_Eopdiff_vs_phi.push_back((TProfile*) (f->Get(str.c_str())));
1703  h_Zee_Eopdiff_vs_phi[region]->SetTitle(h_Zee_Eopdiff_vs_phi[region]->GetTitle());
1704 
1705  str = path + "/Zee_meanEop_vs_eta_plus";
1706  if (!CheckHistogram(f, str.c_str())) return;
1707 
1708  h_Zee_meanEop_vs_eta_plus.push_back((TProfile*) (f->Get(str.c_str())));
1709  h_Zee_meanEop_vs_eta_plus[region]->SetTitle(h_Zee_meanEop_vs_eta_plus[region]->GetTitle());
1710  str = path + "/Zee_meanEop_vs_eta_minus";
1711  if (!CheckHistogram(f, str.c_str())) return;
1712 
1713  h_Zee_meanEop_vs_eta_minus.push_back((TProfile*) (f->Get(str.c_str())));
1714  h_Zee_meanEop_vs_eta_minus[region]->SetTitle(h_Zee_meanEop_vs_eta_minus[region]->GetTitle());
1715  str = path + "/Zee_Eopdiff_vs_eta";
1716  if (!CheckHistogram(f, str.c_str())) return;
1717 
1718  h_Zee_Eopdiff_vs_eta.push_back((TProfile*) (f->Get(str.c_str())));
1719  h_Zee_Eopdiff_vs_eta[region]->SetTitle(h_Zee_Eopdiff_vs_eta[region]->GetTitle());
1720 
1721  h_Zee_Eopdiff_vs_p[region]->Add(h_Zee_meanEop_vs_p_plus[region], h_Zee_meanEop_vs_p_minus[region], 1., -1);
1722  h_Zee_Eopdiff_vs_invp[region]->Add(h_Zee_meanEop_vs_invp_plus[region], h_Zee_meanEop_vs_invp_minus[region], 1.,
1723  -1);
1724  h_Zee_Eopdiff_vs_E[region]->Add(h_Zee_meanEop_vs_E_plus[region], h_Zee_meanEop_vs_E_minus[region], 1., -1);
1725  h_Zee_Eopdiff_vs_phi[region]->Add(h_Zee_meanEop_vs_phi_plus[region], h_Zee_meanEop_vs_phi_minus[region], 1.,
1726  -1);
1727  h_Zee_Eopdiff_vs_eta[region]->Add(h_Zee_meanEop_vs_eta_plus[region], h_Zee_meanEop_vs_eta_minus[region], 1.,
1728  -1);
1729  }
1730  }
1731 
1732  for (int region = 0; region != Nregions; ++region) {
1733  h_Zee_Eopdiff[region]->Write("", TObject::kOverwrite);
1734  if (region == incl) {
1735  h_Zee_Eopdiff_vs_p[region]->Write("", TObject::kOverwrite);
1736  h_Zee_Eopdiff_vs_invp[region]->Write("", TObject::kOverwrite);
1737  h_Zee_Eopdiff_vs_E[region]->Write("", TObject::kOverwrite);
1738  h_Zee_Eopdiff_vs_phi[region]->Write("", TObject::kOverwrite);
1739  h_Zee_Eopdiff_vs_eta[region]->Write("", TObject::kOverwrite);
1740  }
1741  }
1742 
1743  f->Write();
1744  }
1745 
1746  void
1748  fitMergedFile_IDPerfMonWenu(TFile* f, const std::string& run_dir, const std::string& TriggerName) {
1749  std::string path;
1750  path = run_dir + "IDPerfMon/Wenu/" + TriggerName;
1751  if (f->cd(path.c_str()) == 0) {
1752  //std::cerr << "MonitoringFile::fitMergedFile_IDPerfMonWenu(): "
1753  //<< "No such directory \"" << path << "\"\n";
1754  return;
1755  }
1756 
1757  f->cd(path.c_str());
1758 
1759  if (!CheckHistogram(f, (path + "/Wenu_trk_transmass_sel").c_str())) return;
1760 
1761  TH1F* h_mass = (TH1F*) (f->Get((path + "/Wenu_trk_transmass_sel").c_str())->Clone());
1762  if (CheckHistogram(f, (path + "/Nevents").c_str())) {
1763  TH1F* h_Nevents = (TH1F*) f->Get((path + "/Nevents").c_str());
1764  TH1F* h_rate = new TH1F("rate", "production rate", 1, 0, 1);
1765  double Ntot = h_Nevents->GetEntries();
1766  double yield = h_mass->Integral(h_mass->FindBin(50), h_mass->FindBin(80));
1767  double rate = yield / Ntot;
1768  double rate_error = sqrt(1 / yield + 1 / Ntot) * yield / Ntot;
1769  h_rate->SetBinContent(1, rate);
1770  h_rate->SetBinError(1, rate_error);
1771  h_rate->Write("", TObject::kOverwrite);
1772  }
1773 // TH1F* h_mass_scaled =
1774 // (TH1F*)(f->Get((path+"/Wenu_trk_transmass_sel").c_str())->Clone("Wenu_trk_transmass_sel_scaled_copy"));
1775 // TString title(h_mass_scaled->GetTitle());
1776 // if (CheckHistogram(f,(path+"/Wenu_trk_transmass_sel_scaled").c_str())) {
1777 // if (CheckHistogram(f,(path+"/Nevents").c_str())) {
1778 // TH1F* h_Nevents=(TH1F*)f->Get((path+"/Nevents").c_str());
1779 // double Ntot =h_Nevents->GetEntries();
1780 // if (Ntot!=0.) h_mass_scaled->Scale(1./Ntot);
1781 // h_mass_scaled->SetTitle(title+" (per event)");
1782 // h_mass_scaled->Write("Wenu_trk_transmass_sel_scaled",TObject::kOverwrite);
1783 // }
1784 // }
1785 // delete h_mass_scaled;
1786 
1787  enum eta_region {
1788  incl, barrel, eca, ecc, Nregions
1789  };
1790  std::vector<std::string> region_strings;
1791  region_strings.push_back("incl");
1792  region_strings.push_back("barrel");
1793  region_strings.push_back("eca");
1794  region_strings.push_back("ecc");
1795 
1796  std::vector<TH1F*> h_Wenu_Eopdiff;
1797  std::vector<TH1F*> h_Wenu_Eop_plus;
1798  std::vector<TH1F*> h_Wenu_Eop_minus;
1799 
1800  std::vector<TProfile*> h_Wenu_Eopdiff_vs_p;
1801  std::vector<TProfile*> h_Wenu_meanEop_vs_p_plus;
1802  std::vector<TProfile*> h_Wenu_meanEop_vs_p_minus;
1803 
1804  std::vector<TProfile*> h_Wenu_Eopdiff_vs_invp;
1805  std::vector<TProfile*> h_Wenu_meanEop_vs_invp_plus;
1806  std::vector<TProfile*> h_Wenu_meanEop_vs_invp_minus;
1807 
1808  std::vector<TProfile*> h_Wenu_Eopdiff_vs_E;
1809  std::vector<TProfile*> h_Wenu_meanEop_vs_E_plus;
1810  std::vector<TProfile*> h_Wenu_meanEop_vs_E_minus;
1811 
1812  std::vector<TProfile*> h_Wenu_Eopdiff_vs_phi;
1813  std::vector<TProfile*> h_Wenu_meanEop_vs_phi_plus;
1814  std::vector<TProfile*> h_Wenu_meanEop_vs_phi_minus;
1815 
1816  std::vector<TProfile*> h_Wenu_Eopdiff_vs_eta;
1817  std::vector<TProfile*> h_Wenu_meanEop_vs_eta_plus;
1818  std::vector<TProfile*> h_Wenu_meanEop_vs_eta_minus;
1819 
1820  std::string str;
1821 
1822  for (int region = 0; region != Nregions; ++region) {
1823  str = path + "/Wenu_Eop_plus_" + region_strings[region];
1824  if (!CheckHistogram(f, str.c_str())) return;
1825 
1826  h_Wenu_Eop_plus.push_back((TH1F*) (f->Get(str.c_str())));
1827  h_Wenu_Eop_plus[region]->SetTitle(h_Wenu_Eop_plus[region]->GetTitle());
1828  str = path + "/Wenu_Eop_minus_" + region_strings[region];
1829  if (!CheckHistogram(f, str.c_str())) return;
1830 
1831  h_Wenu_Eop_minus.push_back((TH1F*) (f->Get(str.c_str())));
1832  h_Wenu_Eop_minus[region]->SetTitle(h_Wenu_Eop_minus[region]->GetTitle());
1833  str = path + "/Wenu_Eopdiff_" + region_strings[region];
1834  if (!CheckHistogram(f, str.c_str())) return;
1835 
1836  h_Wenu_Eopdiff.push_back((TH1F*) (f->Get(str.c_str())));
1837  h_Wenu_Eopdiff[region]->SetTitle(h_Wenu_Eopdiff[region]->GetTitle());
1838 
1839  h_Wenu_Eopdiff[region]->Add(h_Wenu_Eop_plus[region], h_Wenu_Eop_minus[region], 1., -1);
1840 
1841  if (region == incl) {
1842  str = path + "/Wenu_meanEop_vs_p_plus";
1843  if (!CheckHistogram(f, str.c_str())) return;
1844 
1845  h_Wenu_meanEop_vs_p_plus.push_back((TProfile*) (f->Get(str.c_str())));
1846  h_Wenu_meanEop_vs_p_plus[region]->SetTitle(h_Wenu_meanEop_vs_p_plus[region]->GetTitle());
1847  str = path + "/Wenu_meanEop_vs_p_minus";
1848  if (!CheckHistogram(f, str.c_str())) return;
1849 
1850  h_Wenu_meanEop_vs_p_minus.push_back((TProfile*) (f->Get(str.c_str())));
1851  h_Wenu_meanEop_vs_p_minus[region]->SetTitle(h_Wenu_meanEop_vs_p_minus[region]->GetTitle());
1852  str = path + "/Wenu_Eopdiff_vs_p";
1853  if (!CheckHistogram(f, str.c_str())) return;
1854 
1855  h_Wenu_Eopdiff_vs_p.push_back((TProfile*) (f->Get(str.c_str())));
1856  h_Wenu_Eopdiff_vs_p[region]->SetTitle(h_Wenu_Eopdiff_vs_p[region]->GetTitle());
1857 
1858  str = path + "/Wenu_meanEop_vs_invp_plus";
1859  if (!CheckHistogram(f, str.c_str())) return;
1860 
1861  h_Wenu_meanEop_vs_invp_plus.push_back((TProfile*) (f->Get(str.c_str())));
1862  h_Wenu_meanEop_vs_invp_plus[region]->SetTitle(h_Wenu_meanEop_vs_invp_plus[region]->GetTitle());
1863  str = path + "/Wenu_meanEop_vs_invp_minus";
1864  if (!CheckHistogram(f, str.c_str())) return;
1865 
1866  h_Wenu_meanEop_vs_invp_minus.push_back((TProfile*) (f->Get(str.c_str())));
1867  h_Wenu_meanEop_vs_invp_minus[region]->SetTitle(h_Wenu_meanEop_vs_invp_minus[region]->GetTitle());
1868  str = path + "/Wenu_Eopdiff_vs_invp";
1869  if (!CheckHistogram(f, str.c_str())) return;
1870 
1871  h_Wenu_Eopdiff_vs_invp.push_back((TProfile*) (f->Get(str.c_str())));
1872  h_Wenu_Eopdiff_vs_invp[region]->SetTitle(h_Wenu_Eopdiff_vs_invp[region]->GetTitle());
1873 
1874  str = path + "/Wenu_meanEop_vs_E_plus";
1875  if (!CheckHistogram(f, str.c_str())) return;
1876 
1877  h_Wenu_meanEop_vs_E_plus.push_back((TProfile*) (f->Get(str.c_str())));
1878  h_Wenu_meanEop_vs_E_plus[region]->SetTitle(h_Wenu_meanEop_vs_E_plus[region]->GetTitle());
1879  str = path + "/Wenu_meanEop_vs_E_minus";
1880  if (!CheckHistogram(f, str.c_str())) return;
1881 
1882  h_Wenu_meanEop_vs_E_minus.push_back((TProfile*) (f->Get(str.c_str())));
1883  h_Wenu_meanEop_vs_E_minus[region]->SetTitle(h_Wenu_meanEop_vs_E_minus[region]->GetTitle());
1884  str = path + "/Wenu_Eopdiff_vs_E";
1885  if (!CheckHistogram(f, str.c_str())) return;
1886 
1887  h_Wenu_Eopdiff_vs_E.push_back((TProfile*) (f->Get(str.c_str())));
1888  h_Wenu_Eopdiff_vs_E[region]->SetTitle(h_Wenu_Eopdiff_vs_E[region]->GetTitle());
1889 
1890  str = path + "/Wenu_meanEop_vs_phi_plus";
1891  if (!CheckHistogram(f, str.c_str())) return;
1892 
1893  h_Wenu_meanEop_vs_phi_plus.push_back((TProfile*) (f->Get(str.c_str())));
1894  h_Wenu_meanEop_vs_phi_plus[region]->SetTitle(h_Wenu_meanEop_vs_phi_plus[region]->GetTitle());
1895  str = path + "/Wenu_meanEop_vs_phi_minus";
1896  if (!CheckHistogram(f, str.c_str())) return;
1897 
1898  h_Wenu_meanEop_vs_phi_minus.push_back((TProfile*) (f->Get(str.c_str())));
1899  h_Wenu_meanEop_vs_phi_minus[region]->SetTitle(h_Wenu_meanEop_vs_phi_minus[region]->GetTitle());
1900  str = path + "/Wenu_Eopdiff_vs_phi";
1901  if (!CheckHistogram(f, str.c_str())) return;
1902 
1903  h_Wenu_Eopdiff_vs_phi.push_back((TProfile*) (f->Get(str.c_str())));
1904  h_Wenu_Eopdiff_vs_phi[region]->SetTitle(h_Wenu_Eopdiff_vs_phi[region]->GetTitle());
1905 
1906  str = path + "/Wenu_meanEop_vs_eta_plus";
1907  if (!CheckHistogram(f, str.c_str())) return;
1908 
1909  h_Wenu_meanEop_vs_eta_plus.push_back((TProfile*) (f->Get(str.c_str())));
1910  h_Wenu_meanEop_vs_eta_plus[region]->SetTitle(h_Wenu_meanEop_vs_eta_plus[region]->GetTitle());
1911  str = path + "/Wenu_meanEop_vs_eta_minus";
1912  if (!CheckHistogram(f, str.c_str())) return;
1913 
1914  h_Wenu_meanEop_vs_eta_minus.push_back((TProfile*) (f->Get(str.c_str())));
1915  h_Wenu_meanEop_vs_eta_minus[region]->SetTitle(h_Wenu_meanEop_vs_eta_minus[region]->GetTitle());
1916  str = path + "/Wenu_Eopdiff_vs_eta";
1917  if (!CheckHistogram(f, str.c_str())) return;
1918 
1919  h_Wenu_Eopdiff_vs_eta.push_back((TProfile*) (f->Get(str.c_str())));
1920  h_Wenu_Eopdiff_vs_eta[region]->SetTitle(h_Wenu_Eopdiff_vs_eta[region]->GetTitle());
1921 
1922  h_Wenu_Eopdiff_vs_p[region]->Add(h_Wenu_meanEop_vs_p_plus[region], h_Wenu_meanEop_vs_p_minus[region], 1., -1);
1923  h_Wenu_Eopdiff_vs_invp[region]->Add(h_Wenu_meanEop_vs_invp_plus[region], h_Wenu_meanEop_vs_invp_minus[region],
1924  1., -1);
1925  h_Wenu_Eopdiff_vs_E[region]->Add(h_Wenu_meanEop_vs_E_plus[region], h_Wenu_meanEop_vs_E_minus[region], 1., -1);
1926  h_Wenu_Eopdiff_vs_phi[region]->Add(h_Wenu_meanEop_vs_phi_plus[region], h_Wenu_meanEop_vs_phi_minus[region], 1.,
1927  -1);
1928  h_Wenu_Eopdiff_vs_eta[region]->Add(h_Wenu_meanEop_vs_eta_plus[region], h_Wenu_meanEop_vs_eta_minus[region], 1.,
1929  -1);
1930  }
1931  }
1932 
1933  for (int region = 0; region != Nregions; ++region) {
1934  h_Wenu_Eopdiff[region]->Write("", TObject::kOverwrite);
1935  if (region == incl) {
1936  h_Wenu_Eopdiff_vs_p[region]->Write("", TObject::kOverwrite);
1937  h_Wenu_Eopdiff_vs_invp[region]->Write("", TObject::kOverwrite);
1938  h_Wenu_Eopdiff_vs_E[region]->Write("", TObject::kOverwrite);
1939  h_Wenu_Eopdiff_vs_phi[region]->Write("", TObject::kOverwrite);
1940  h_Wenu_Eopdiff_vs_eta[region]->Write("", TObject::kOverwrite);
1941  }
1942  }
1943 
1944  f->Write();
1945  }
1946 
1947  void
1949  fitMergedFile_IDPerfMonZMM(TFile* f, const std::string& run_dir, const std::string& TriggerName) {
1950  std::string path;
1951  std::vector<TH1F*> hvec;
1952  gROOT->SetStyle("Plain");
1953 
1954  path = run_dir + "IDPerfMon/ZMM/" + TriggerName;
1955  //std::cout <<" ZMM path: "<< path << std::endl;
1956  if (f->cd(path.c_str()) == 0) {
1957  //std::cerr << "MonitoringFile::fitMergedFile_IDPerfMonZMM(): "
1958  //<< "No such directory \"" << path << "\"\n";
1959  return;
1960  }
1961  f->cd(path.c_str());
1962 
1963 
1964 
1965  // CB ---------
1966  TH1F* h_ZMass_CB_Shift_vs_Regions = new TH1F("Z_Mass_CB_Shift_vs_Regions", "Z_Mass_CB Shift vs. Regions", 4, 0.5,
1967  4.5);
1968  TH1F* h_ZMass_CB_Width_vs_Regions = new TH1F("Z_Mass_CB_Width_vs_Regions", "Z_Mass_CB Width vs. Regions", 4, 0.5,
1969  4.5);
1970 
1971  if (!CheckHistogram(f, (path + "/Z_Mass_CB_All").c_str()) ||
1972  !CheckHistogram(f, (path + "/Z_Mass_CB_BB").c_str()) ||
1973  !CheckHistogram(f, (path + "/Z_Mass_CB_BE").c_str()) ||
1974  !CheckHistogram(f, (path + "/Z_Mass_CB_EE").c_str())) return;
1975 
1976  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_CB_All").c_str())->Clone()));
1977  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_CB_BB").c_str())->Clone()));
1978  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_CB_BE").c_str())->Clone()));
1979  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_CB_EE").c_str())->Clone()));
1980  fitZmumuHistograms(h_ZMass_CB_Shift_vs_Regions, h_ZMass_CB_Width_vs_Regions, hvec);
1981  hvec.clear();
1982  h_ZMass_CB_Shift_vs_Regions->SetStats(0);
1983  h_ZMass_CB_Width_vs_Regions->SetStats(0);
1984  h_ZMass_CB_Shift_vs_Regions->Write("", TObject::kOverwrite);
1985  h_ZMass_CB_Width_vs_Regions->Write("", TObject::kOverwrite);
1986 
1987  // ID ----------
1988  TH1F* h_ZMass_ID_Shift_vs_Regions = new TH1F("Z_Mass_ID_Shift_vs_Regions", "Z_Mass_ID Shift vs. Regions", 4, 0.5,
1989  4.5);
1990  TH1F* h_ZMass_ID_Width_vs_Regions = new TH1F("Z_Mass_ID_Width_vs_Regions", "Z_Mass_ID Width vs. Regions", 4, 0.5,
1991  4.5);
1992 
1993  if (!CheckHistogram(f, (path + "/Z_Mass_ID_All").c_str()) ||
1994  !CheckHistogram(f, (path + "/Z_Mass_ID_BB").c_str()) ||
1995  !CheckHistogram(f, (path + "/Z_Mass_ID_BE").c_str()) ||
1996  !CheckHistogram(f, (path + "/Z_Mass_ID_EE").c_str())) return;
1997 
1998  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ID_All").c_str())->Clone()));
1999  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ID_BB").c_str())->Clone()));
2000  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ID_BE").c_str())->Clone()));
2001  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ID_EE").c_str())->Clone()));
2002  fitZmumuHistograms(h_ZMass_ID_Shift_vs_Regions, h_ZMass_ID_Width_vs_Regions, hvec);
2003  hvec.clear();
2004  h_ZMass_ID_Shift_vs_Regions->SetStats(0);
2005  h_ZMass_ID_Width_vs_Regions->SetStats(0);
2006  h_ZMass_ID_Shift_vs_Regions->Write("", TObject::kOverwrite);
2007  h_ZMass_ID_Width_vs_Regions->Write("", TObject::kOverwrite);
2008 
2009  // ME -----------
2010  TH1F* h_ZMass_ME_Shift_vs_Regions = new TH1F("Z_Mass_ME_Shift_vs_Regions", "Z_Mass_ME Shift vs. Regions", 4, 0.5,
2011  4.5);
2012  TH1F* h_ZMass_ME_Width_vs_Regions = new TH1F("Z_Mass_ME_Width_vs_Regions", "Z_Mass_ME Width vs. Regions", 4, 0.5,
2013  4.5);
2014 
2015  if (!CheckHistogram(f, (path + "/Z_Mass_ME_All").c_str()) ||
2016  !CheckHistogram(f, (path + "/Z_Mass_ME_BB").c_str()) ||
2017  !CheckHistogram(f, (path + "/Z_Mass_ME_BE").c_str()) ||
2018  !CheckHistogram(f, (path + "/Z_Mass_ME_EE").c_str())) return;
2019 
2020  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ME_All").c_str())->Clone()));
2021  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ME_BB").c_str())->Clone()));
2022  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ME_BE").c_str())->Clone()));
2023  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_ME_EE").c_str())->Clone()));
2024  fitZmumuHistograms(h_ZMass_ME_Shift_vs_Regions, h_ZMass_ME_Width_vs_Regions, hvec);
2025  hvec.clear();
2026  h_ZMass_ME_Shift_vs_Regions->SetStats(0);
2027  h_ZMass_ME_Width_vs_Regions->SetStats(0);
2028  h_ZMass_ME_Shift_vs_Regions->Write("", TObject::kOverwrite);
2029  h_ZMass_ME_Width_vs_Regions->Write("", TObject::kOverwrite);
2030 
2031  // MS -----------
2032  TH1F* h_ZMass_MS_Shift_vs_Regions = new TH1F("Z_Mass_MS_Shift_vs_Regions", "Z_Mass_MS Shift vs. Regions", 4, 0.5,
2033  4.5);
2034  TH1F* h_ZMass_MS_Width_vs_Regions = new TH1F("Z_Mass_MS_Width_vs_Regions", "Z_Mass_MS Width vs. Regions", 4, 0.5,
2035  4.5);
2036 
2037 
2038  if (!CheckHistogram(f, (path + "/Z_Mass_MS_All").c_str()) ||
2039  !CheckHistogram(f, (path + "/Z_Mass_MS_BB").c_str()) ||
2040  !CheckHistogram(f, (path + "/Z_Mass_MS_BE").c_str()) ||
2041  !CheckHistogram(f, (path + "/Z_Mass_MS_EE").c_str())) return;
2042 
2043  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_MS_All").c_str())->Clone()));
2044  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_MS_BB").c_str())->Clone()));
2045  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_MS_BE").c_str())->Clone()));
2046  hvec.push_back((TH1F*) (f->Get((path + "/Z_Mass_MS_EE").c_str())->Clone()));
2047  fitZmumuHistograms(h_ZMass_MS_Shift_vs_Regions, h_ZMass_MS_Width_vs_Regions, hvec);
2048  hvec.clear();
2049  h_ZMass_MS_Shift_vs_Regions->SetStats(0);
2050  h_ZMass_MS_Width_vs_Regions->SetStats(0);
2051  h_ZMass_MS_Shift_vs_Regions->Write("", TObject::kOverwrite);
2052  h_ZMass_MS_Width_vs_Regions->Write("", TObject::kOverwrite);
2053 
2054 
2055 
2056  // OLD naming style plots
2057  if (!CheckHistogram(f, (path + "/z-mass_trks").c_str())) return;
2058 
2059  TH1F* h_ZMass_ID = (TH1F*) (f->Get((path + "/z-mass_trks").c_str())->Clone());
2060  h_ZMass_ID->SetTitle("Z Mass ID Tracks");
2061  //fitZmumuMassPlot(h_ZMass_ID);
2062  //h_ZMass_ID->Write("",TObject::kOverwrite);
2063 
2064  if (!CheckHistogram(f, (path + "/z-mass_comb").c_str())) return;
2065 
2066  TH1F* h_ZMass_CB = (TH1F*) (f->Get((path + "/z-mass_comb").c_str())->Clone());
2067  h_ZMass_CB->SetTitle("Z Mass CB Tracks");
2068  //fitZmumuMassPlot(h_ZMass_CB);
2069  //h_ZMass_CB->Write("",TObject::kOverwrite);
2070 
2071 
2072  if (CheckHistogram(f, (path + "/Nevents").c_str())) {
2073  TH1F* h_Nevents = (TH1F*) f->Get((path + "/Nevents").c_str());
2074  TH1F* h_rate = new TH1F("rate", "production rate", 1, 0, 1);
2075  double Ntot = h_Nevents->GetEntries();
2076  double yield = h_ZMass_ID->Integral(h_ZMass_ID->FindBin(80), h_ZMass_ID->FindBin(105));
2077  double rate = yield / Ntot;
2078  double rate_error = sqrt(1 / yield + 1 / Ntot) * yield / Ntot;
2079  //std::cout <<" rate: "<< rate <<" rate_error: "<< rate_error <<std::endl;
2080  h_rate->SetBinContent(1, rate);
2081  h_rate->SetBinError(1, rate_error);
2082  h_rate->Write("rate", TObject::kOverwrite);
2083  }
2084 
2085  f->Write();
2086  }
2087 
2088  void
2090  fitJpsiHistograms(TH1F* hmass, TH1F* hwidth, TH1F* h1[], int n) {
2091  double jpsiPDGmass = 3.097;
2092  double mass = 0.;
2093  double mass_error = 0;
2094  double width = 0;
2095  double width_error = 0;
2096  double maxmass = 0.;
2097  double maxwidth = 0.;
2098  double minwidth = 999;
2099 
2100  hmass->SetMarkerStyle(21);
2101  hwidth->SetMarkerStyle(21);
2102 // TF1 *fitjpsi = new TF1("fitjpsi","gaus",2.9,3.3);
2103 // fitjpsi->SetParNames("Constant","Mean","Width");
2104  TF1* fitjpsi = new TF1("fitjpsi", "gaus", 2.6, 3.6);
2105  // fitjpsi->SetParNames("Constant","Mean","Sigma","Constant","Slope");
2106  fitjpsi->SetLineColor(2);
2107  for (int i = 0; i < n; i++) {
2108  int h1entries = h1[i]->GetEntries();
2109  if (h1entries > 50) {
2110  double mean = h1[i]->GetMean();
2111  double spread = 2 * (h1[i]->GetRMS());
2112  double constantGuess = double(h1entries) / 10.;
2113  fitjpsi->SetParameters(constantGuess, jpsiPDGmass, 0.05);
2114  fitjpsi->SetRange(mean - spread, mean + spread);
2115  h1[i]->Fit("fitjpsi", "RQM");
2116  mean = fitjpsi->GetParameter(1);
2117  spread = 1.2 * (fitjpsi->GetParameter(2));
2118  fitjpsi->SetRange(mean - spread, mean + spread);
2119  h1[i]->Fit("fitjpsi", "RQM");
2120  h1[i]->SetMarkerStyle(21);
2121  mass = fitjpsi->GetParameter(1) - jpsiPDGmass;
2122  mass_error = fitjpsi->GetParError(1);
2123  width = fitjpsi->GetParameter(2);
2124  width_error = fitjpsi->GetParError(2);
2125  hmass->SetBinContent(i + 1, mass);
2126  hmass->SetBinError(i + 1, mass_error);
2127  hwidth->SetBinContent(i + 1, width);
2128  hwidth->SetBinError(i + 1, width_error);
2129  if ((fabs(mass) + mass_error) > maxmass) maxmass = fabs(mass) + mass_error;
2130  if ((fabs(width) + width_error) > maxwidth) maxwidth = fabs(width) + width_error;
2131  if ((fabs(width) - width_error) < minwidth) minwidth = fabs(width) - width_error;
2132  }
2133  }
2134  if (maxmass > 0.1) maxmass = 0.1;
2135  if (maxwidth > 0.2) maxwidth = 0.2;
2136  if (minwidth < 0.) minwidth = 0.;
2137  hmass->SetAxisRange(-maxmass * 1.05, maxmass * 1.05, "Y");
2138 // hwidth->SetAxisRange(0.,maxwidth*1.05,"Y");
2139  if (minwidth < maxwidth) hwidth->SetAxisRange(minwidth * 0.9, maxwidth * 1.05, "Y");
2140 
2141  delete fitjpsi;
2142  }
2143 
2144  void
2146  fitUpsilonHistograms(TH1F* hmass, TH1F* hwidth, TH1F* h1[], int n) {
2147  double upsilonPDGmass = 9.46;
2148  double mass = 0;
2149  double mass_error = 0;
2150  double width = 0;
2151  double width_error = 0;
2152  double maxmass = 0.;
2153  double maxwidth = 0.;
2154  double minwidth = 999;
2155 
2156  hmass->SetMarkerStyle(21);
2157  hwidth->SetMarkerStyle(21);
2158 // TF1 *fitupsi = new TF1("fitupsi","gaus",9.,10.);
2159 // fitupsi->SetParNames("Constant","Mean","Width");
2160  TF1* fitupsi = new TF1("fitupsi", "gaus(0)+pol1(3)", 8.5, 10.5);
2161  fitupsi->SetParNames("Constant", "Mean", "Sigma", "Constant", "Slope");
2162  fitupsi->SetLineColor(2);
2163  for (int i = 0; i < n; i++) {
2164  if (h1[i]->GetEntries() > 20) {
2165  double max = h1[i]->GetBinContent(h1[i]->GetMaximumBin());
2166  fitupsi->SetParameter(1, 9.46);
2167  fitupsi->SetParameter(2, 0.15);
2168  fitupsi->SetParLimits(1, 8., 11.);
2169  fitupsi->SetParLimits(2, 0., 0.5);
2170  fitupsi->SetParameter(0, max);
2171  h1[i]->SetMarkerStyle(21);
2172  h1[i]->Fit("fitupsi", "RQM");
2173  mass = fitupsi->GetParameter(1) - upsilonPDGmass;
2174  mass_error = fitupsi->GetParError(1);
2175  width = fitupsi->GetParameter(2);
2176  width_error = fitupsi->GetParError(2);
2177  hmass->SetBinContent(i + 1, mass);
2178  hmass->SetBinError(i + 1, mass_error);
2179  hwidth->SetBinContent(i + 1, width);
2180  hwidth->SetBinError(i + 1, width_error);
2181  if ((fabs(mass) + mass_error) > maxmass) maxmass = fabs(mass) + mass_error;
2182  if ((fabs(width) + width_error) > maxwidth) maxwidth = fabs(width) + width_error;
2183  if ((fabs(width) - width_error) < minwidth) minwidth = fabs(width) - width_error;
2184  }
2185  }
2186  if (maxmass > 0.1) maxmass = 0.1;
2187  if (maxwidth > 0.4) maxwidth = 0.4;
2188  if (minwidth < 0.) minwidth = 0.;
2189  hmass->SetAxisRange(-maxmass * 1.05, maxmass * 1.05, "Y");
2190  if (minwidth < maxwidth) hwidth->SetAxisRange(minwidth * 0.9, maxwidth * 1.05, "Y");
2191 
2192  delete fitupsi;
2193  }
2194 
2195  void MonitoringFile::fitZmumuHistograms(TH1F* hmass, TH1F* hwidth, std::vector<TH1F*> hvec) {
2196  const double ZPDGmass = 91.1876;
2197  const int size = (int) hvec.size();
2198 
2199  for (int i = 0; i < size; i++) {
2200  double mass = fitZmumuMass(hvec[i]).first.getVal() - ZPDGmass;
2201  double mass_err = fitZmumuMass(hvec[i]).first.getError();
2202  double width = fitZmumuMass(hvec[i]).second.getVal();
2203  double width_err = fitZmumuMass(hvec[i]).second.getError();
2204 
2205  hmass->SetBinContent(i + 1, mass);
2206  hmass->SetBinError(i + 1, mass_err);
2207  hmass->GetXaxis()->SetBinLabel(i + 1, hvec[i]->GetName());
2208  hmass->GetXaxis()->SetTitle("Different Detector Regions");
2209  hmass->SetAxisRange(-3.0, 3.0, "Y");
2210 
2211  hwidth->SetBinContent(i + 1, width);
2212  hwidth->SetBinError(i + 1, width_err);
2213  hwidth->GetXaxis()->SetBinLabel(i + 1, hvec[i]->GetName());
2214  hwidth->GetXaxis()->SetTitle("Different Detector Regions");
2215  hwidth->SetAxisRange(0, 8, "Y");
2216  }
2217  }
2218 
2219  std::pair<RooRealVar, RooRealVar> MonitoringFile::fitZmumuMass(TH1F* hmass) {
2220  // gROOT->ProcessLine("gErrorIgnoreLevel=1001;");
2221  RooAbsPdf::verboseEval(-100); //sami in order to make roofit quiet
2222  RooRealVar m("mass", "dimuon invariable mass", 91.2, 60., 120., "GeV");
2223  RooDataHist* data = 0;
2224  data = new RooDataHist("data", "data", m, hmass);
2225  RooRealVar bwm0("bw_#mu", "bw_#mu", 91.2, 85., 95.);
2226  RooRealVar bwsg("bw_#sigma", "bw_#sigma", 2.4952);
2227  RooBreitWigner bw("bw", "bw", m, bwm0, bwsg);
2228 
2229  RooRealVar cbm0("cb_#mu", "cb_#mu", 0);
2230  RooRealVar cbsg("cb_#sigma", "cb_#sigma", 5., 0.1, 10.);
2231  RooRealVar cbal("cb_#alpha", "cb_#alpha", 1.5, 0.1, 10.);
2232  RooRealVar cbn("cb_n", "cb_n", 1.5, 0.01, 10.);
2233  RooCBShape cb("cb", "cb", m, cbm0, cbsg, cbal, cbn);
2234 
2235  m.setBins(5000);
2236  RooFFTConvPdf bxc("bxc", "BW (X) CB", m, bw, cb);
2237  auto resourceToDelete = bxc.fitTo(*data, RooFit::PrintLevel(-1), RooFit::PrintEvalErrors(-1), RooFit::Warnings(kFALSE));
2238 
2239  RooArgSet* params = bxc.getVariables();
2240  //params->Print("v");
2241  RooRealVar* fit_bwm0 = (RooRealVar*) params->find("bw_#mu");
2242  RooRealVar* fit_cbsg = (RooRealVar*) params->find("cb_#sigma");
2243  //double vfit_bwm0 = fit_bwm0->getVal();
2244  //double vfit_cbsg = fit_cbsg->getVal();
2245  //std::cout <<" vfit_bwm0: "<< vfit_bwm0 << " vfit_cbsg: " << vfit_cbsg << std::endl;
2246  delete data;
2247  delete resourceToDelete;
2248  return std::make_pair(*fit_bwm0, *fit_cbsg);
2249  }
2250 
2251 //void MonitoringFile::fitZmumuMass(TH1F* hmass , RooPlot* frame ){
2253  // gROOT->ProcessLine("gErrorIgnoreLevel=1001;");
2254  RooAbsPdf::verboseEval(-100); //sami in order to make roofit quiet
2255  RooRealVar m("mass", "dimuon invariable mass", 91.2, 60., 120., "GeV");
2256  RooDataHist* data = 0;
2257  data = new RooDataHist("data", "data", m, hmass);
2258  RooRealVar bwm0("bw_#mu", "bw_#mu", 91.2, 85., 95.);
2259  RooRealVar bwsg("bw_#sigma", "bw_#sigma", 2.4952);
2260  RooBreitWigner bw("bw", "bw", m, bwm0, bwsg);
2261 
2262  RooRealVar cbm0("cb_#mu", "cb_#mu", 0);
2263  RooRealVar cbsg("cb_#sigma", "cb_#sigma", 5., 0.1, 10.);
2264  RooRealVar cbal("cb_#alpha", "cb_#alpha", 1.5, 0.1, 10.);
2265  RooRealVar cbn("cb_n", "cb_n", 1.5, 0.01, 10.);
2266  RooCBShape cb("cb", "cb", m, cbm0, cbsg, cbal, cbn);
2267 
2268  m.setBins(5000);
2269  RooFFTConvPdf bxc("bxc", "BW (X) CB", m, bw, cb);
2270  auto resourceToDelete = bxc.fitTo(*data, RooFit::PrintLevel(-1), RooFit::PrintEvalErrors(-1), RooFit::Warnings(kFALSE));
2271  RooPlot* frame = m.frame();
2272  data->plotOn(frame, RooFit::MarkerSize(0.9));
2273  bxc.paramOn(frame, RooFit::Format("NELU", RooFit::AutoPrecision(2)), RooFit::Layout(0.1, 0.4, 0.9));
2274  bxc.plotOn(frame, RooFit::LineColor(kYellow));
2275  cb.plotOn(frame, RooFit::LineColor(kRed));
2276  bw.plotOn(frame, RooFit::LineStyle(kDashed));
2277  delete data;
2278  delete resourceToDelete;
2279  }
2280 }
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
dqutils::MonitoringFile::fitMergedFile_IDPerfMonManager
static void fitMergedFile_IDPerfMonManager(const std::string &inFileName, bool isIncremental=false)
Methods for creating ID Alignment summary plots on merged files.
Definition: MonitoringFile_IDPerfPostProcess.cxx:38
mean
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
Definition: dependence.cxx:254
dqutils::MonitoringFile::fitZmumuMassPlot
static void fitZmumuMassPlot(TH1F *hmass)
Definition: MonitoringFile_IDPerfPostProcess.cxx:2252
athena.path
path
python interpreter configuration --------------------------------------—
Definition: athena.py:128
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
dqutils::MonitoringFile::CheckHistogram
static bool CheckHistogram(TFile *f, const char *HistoName)
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
StateLessPT_NewConfig.Format
Format
Definition: StateLessPT_NewConfig.py:149
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
dqutils::MonitoringFile::fitMergedFile_IDPerfMonJpsi
static void fitMergedFile_IDPerfMonJpsi(TFile *f, const std::string &run_dir, const std::string &TriggerName)
Definition: MonitoringFile_IDPerfPostProcess.cxx:745
GetEntries
TGraphErrors * GetEntries(TH2F *histo)
Definition: TRTCalib_makeplots.cxx:4025
read_hist_ntuple.h1
h1
Definition: read_hist_ntuple.py:21
dqutils::MonitoringFile::fitMergedFile_IDPerfMonZee
static void fitMergedFile_IDPerfMonZee(TFile *f, const std::string &run_dir, const std::string &TriggerName)
Definition: MonitoringFile_IDPerfPostProcess.cxx:1548
dqutils::MonitoringFile::fitMergedFile_IDPerfMonZMM
static void fitMergedFile_IDPerfMonZMM(TFile *f, const std::string &run_dir, const std::string &TriggerName)
Definition: MonitoringFile_IDPerfPostProcess.cxx:1949
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
dqutils::MonitoringFile::fitZmumuMass
static std::pair< RooRealVar, RooRealVar > fitZmumuMass(TH1F *hmass)
Definition: MonitoringFile_IDPerfPostProcess.cxx:2219
dqutils::MonitoringFile::fitZmumuHistograms
static void fitZmumuHistograms(TH1F *hmass, TH1F *hwidth, std::vector< TH1F * > hvec)
Definition: MonitoringFile_IDPerfPostProcess.cxx:2195
lumiFormat.i
int i
Definition: lumiFormat.py:85
python.TrigEgammaMonitorHelper.TProfile
def TProfile(*args, **kwargs)
Definition: TrigEgammaMonitorHelper.py:81
beamspotman.n
n
Definition: beamspotman.py:727
python.CaloAddPedShiftConfig.str
str
Definition: CaloAddPedShiftConfig.py:42
covarianceTool.title
title
Definition: covarianceTool.py:542
hist_file_dump.f
f
Definition: hist_file_dump.py:140
dqutils::MonitoringFile::fitMergedFile_IDPerfMonUpsilon
static void fitMergedFile_IDPerfMonUpsilon(TFile *f, const std::string &run_dir, const std::string &TriggerName)
Definition: MonitoringFile_IDPerfPostProcess.cxx:1185
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
dqutils
Definition: CoolMdt.h:76
dqutils::MonitoringFile::ProcessAsymHistograms
static void ProcessAsymHistograms(TH1F *m_neg, TH1F *m_pos, TH1F *m_asym)
Definition: MonitoringFile_IDAlignPostProcess.cxx:3107
MonitoringFile.h
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
StateLessPT_NewConfig.Layout
Layout
Definition: StateLessPT_NewConfig.py:162
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
dqutils::MonitoringFile::fitUpsilonHistograms
static void fitUpsilonHistograms(TH1F *hmass, TH1F *hwidth, TH1F *h1[], int n)
Definition: MonitoringFile_IDPerfPostProcess.cxx:2146
dqutils::MonitoringFile::fitJpsiHistograms
static void fitJpsiHistograms(TH1F *hmass, TH1F *hwidth, TH1F *h1[], int n)
Definition: MonitoringFile_IDPerfPostProcess.cxx:2090
str
Definition: BTagTrackIpAccessor.cxx:11
python.TrigEgammaMonitorHelper.TH1F
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:24
dqutils::MonitoringFile::fitMergedFile_IDPerfMonKshort
static void fitMergedFile_IDPerfMonKshort(TFile *f, const std::string &run_dir, const std::string &TriggerName)
Definition: MonitoringFile_IDPerfPostProcess.cxx:295
dqutils::MonitoringFile::fitMergedFile_IDPerfMonWenu
static void fitMergedFile_IDPerfMonWenu(TFile *f, const std::string &run_dir, const std::string &TriggerName)
Definition: MonitoringFile_IDPerfPostProcess.cxx:1748
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106