ATLAS Offline Software
Loading...
Searching...
No Matches
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
35namespace 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}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
TGraphErrors * GetEntries(TH2F *histo)
const double width
#define max(a, b)
Definition cfImp.cxx:41
static void fitMergedFile_IDPerfMonZee(TFile *f, const std::string &run_dir, const std::string &TriggerName)
static void fitUpsilonHistograms(TH1F *hmass, TH1F *hwidth, TH1F *h1[], int n)
static void fitMergedFile_IDPerfMonZMM(TFile *f, const std::string &run_dir, const std::string &TriggerName)
static void fitMergedFile_IDPerfMonJpsi(TFile *f, const std::string &run_dir, const std::string &TriggerName)
static void fitMergedFile_IDPerfMonKshort(TFile *f, const std::string &run_dir, const std::string &TriggerName)
static void ProcessAsymHistograms(TH1F *m_neg, TH1F *m_pos, TH1F *m_asym)
static void fitJpsiHistograms(TH1F *hmass, TH1F *hwidth, TH1F *h1[], int n)
static void fitMergedFile_IDPerfMonWenu(TFile *f, const std::string &run_dir, const std::string &TriggerName)
static void fitZmumuHistograms(TH1F *hmass, TH1F *hwidth, std::vector< TH1F * > hvec)
static void fitMergedFile_IDPerfMonUpsilon(TFile *f, const std::string &run_dir, const std::string &TriggerName)
static bool CheckHistogram(TFile *f, const char *HistoName)
static std::pair< RooRealVar, RooRealVar > fitZmumuMass(TH1F *hmass)
static void fitMergedFile_IDPerfMonManager(const std::string &inFileName, bool isIncremental=false)
Methods for creating ID Alignment summary plots on merged files.
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="")