25 #include "RooRealVar.h"
26 #include "RooDataHist.h"
27 #include "RooArgList.h"
29 #include "RooBreitWigner.h"
30 #include "RooCBShape.h"
31 #include "RooFFTConvPdf.h"
32 #include "RooGlobalFunc.h"
33 #include "RooFitResult.h"
41 TFile*
f = TFile::Open(inFilename.c_str(),
"UPDATE");
43 if (
f == 0 || !
f->IsOpen()) {
48 if (
f->GetSize() < 1000.) {
54 TIter next_run(
f->GetListOfKeys());
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);
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());
65 while ((key_perf =
dynamic_cast<TKey*
>(next_perf())) != 0) {
66 std::string perf_name(key_perf->GetName());
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);
72 run_dir = run_dir +
'/';
73 TIter next_module(tdir_perf->GetListOfKeys());
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());
83 while ((key_trigger =
dynamic_cast<TKey*
>(next_trigger())) != 0) {
84 std::string TriggerName = key_trigger->GetName();
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);
96 TIter next_trigger(tdir_Jpsi->GetListOfKeys());
98 while ((key_trigger =
dynamic_cast<TKey*
>(next_trigger())) != 0) {
99 std::string TriggerName = key_trigger->GetName();
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();
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);
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();
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();
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);
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();
175 else if (tdir_run_name.find(
"IDPerfMon") != std::string::npos) {
177 TObject* obj_perf = key_run->ReadObj();
178 TDirectory* tdir_perf =
dynamic_cast<TDirectory*
>(obj_perf);
179 if (tdir_perf != 0) {
181 TIter next_module(tdir_perf->GetListOfKeys());
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();
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();
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();
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);
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();
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();
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);
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();
297 path = run_dir +
"IDPerfMon/Kshort/" + TriggerName;
298 if (
f->cd(
path.c_str()) == 0) {
304 Double_t myPi = TMath::Pi();
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];
390 TH1F* h_mass = (
TH1F*) (
f->Get((
path +
"/ks_mass").c_str())->Clone());
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);
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());
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);
458 func->SetLineColor(4);
459 func->SetParameters(10., 0.500, 0.010, 2., -.001);
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");
467 TCanvas* myCanvas =
new TCanvas(
"MyCanvas");
470 h_mass->Fit(func,
"lmhqnr");
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
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);
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;
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);
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);
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
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);
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;
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);
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);
559 -2.5, -2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5
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);
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);
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);
592 Double_t phiBins[11] = {
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);
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);
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);
636 Double_t curvatureDiffBins[7] = {
637 -0.0012, -0.0008, -0.0004, 0.0000, 0.0004, 0.0008, 0.0012
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);
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);
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);
672 if (
f->cd(
path.c_str()) == 0) {
680 h_mass->Write(
"", TObject::kOverwrite);
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);
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);
747 path = run_dir +
"IDPerfMon/Jpsi/" + TriggerName;
749 if (
f->cd(
path.c_str()) == 0) {
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.,
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,
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,
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,
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,
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.,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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.,
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,
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,
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.,
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.,
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}]",
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,
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,
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,
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.,
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,
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}]",
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,
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,
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,
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,
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,
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,
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,
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,
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.,
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,
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}]",
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.,
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);
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^{+}}",
907 TH1F* h_mass = (
TH1F*) (
f->Get((
path +
"/Jpsi_invmass").c_str())->Clone());
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);
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);
943 TH1F* h_probe_all_pt = (
TH1F*) (
f->Get((
path +
"/probe_all_pt").c_str())->Clone());
946 TH1F* h_probe_match_pt = (
TH1F*) (
f->Get((
path +
"/probe_match_pt").c_str())->Clone());
949 TH1F* h_probe_all_eta = (
TH1F*) (
f->Get((
path +
"/probe_all_eta").c_str())->Clone());
952 TH1F* h_probe_match_eta = (
TH1F*) (
f->Get((
path +
"/probe_match_eta").c_str())->Clone());
955 TH1F* h_probe_all_phi = (
TH1F*) (
f->Get((
path +
"/probe_all_phi").c_str())->Clone());
958 TH1F* h_probe_match_phi = (
TH1F*) (
f->Get((
path +
"/probe_match_phi").c_str())->Clone());
961 TH1F* h_ptplus = (
TH1F*) (
f->Get((
path +
"/Muonplus_pt").c_str())->Clone());
964 TH1F* h_ptminus = (
TH1F*) (
f->Get((
path +
"/Muonminus_pt").c_str())->Clone());
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];
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);
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());
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);
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());
1055 h_mass->SetMarkerStyle(21);
1057 TCanvas* myCanvas =
new TCanvas(
"MyCanvas");
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);
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");
1091 h_chargeasym_vs_pt->Write(
"", TObject::kOverwrite);
1094 if (
f->cd(
path.c_str()) == 0) {
1100 h_mass->Write(
"", TObject::kOverwrite);
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);
1120 heta_b[
i]->Write(
"", TObject::kOverwrite);
1121 heta_ecc[
i]->Write(
"", TObject::kOverwrite);
1122 heta_eca[
i]->Write(
"", TObject::kOverwrite);
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);
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);
1168 h_eff_pt->Write(
"", TObject::kOverwrite);
1169 h_eff_eta->Write(
"", TObject::kOverwrite);
1170 h_eff_phi->Write(
"", TObject::kOverwrite);
1187 path = run_dir +
"IDPerfMon/Upsilon/" + TriggerName;
1189 if (
f->cd(
path.c_str()) == 0) {
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.,
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.,
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,
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,
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,
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.,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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.,
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}]",
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.,
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,
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}]",
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}]",
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.,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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.,
1299 const int nbins = 6;
1320 TH1F* h_mass = (
TH1F*) (
f->Get((
path +
"/Upsilon_invmass").c_str())->Clone());
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);
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);
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],
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);
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());
1414 sprintf(ceta_b, (
path +
"/eta_b_bin%d").c_str(),
i);
1417 heta_b[
i] = (
TH1F*) (
f->Get(ceta_b)->Clone());
1420 sprintf(ceta_ecc, (
path +
"/eta_ecc_bin%d").c_str(),
i);
1421 sprintf(ceta_eca, (
path +
"/eta_eca_bin%d").c_str(),
i);
1426 heta_ecc[
i] = (
TH1F*) (
f->Get(ceta_ecc)->Clone());
1427 heta_eca[
i] = (
TH1F*) (
f->Get(ceta_eca)->Clone());
1430 for (
int i = 0;
i < 8;
i++) {
1431 sprintf(ceta, (
path +
"/eta_bin%d").c_str(),
i);
1434 heta[
i] = (
TH1F*) (
f->Get(ceta)->Clone());
1442 h_mass->SetMarkerStyle(21);
1444 TCanvas* myCanvas =
new TCanvas(
"MyCanvas");
1457 fitUpsilonHistograms(h_upsilon_invmass_vs_eta_barrel, h_upsilon_width_vs_eta_barrel, heta_b, 2);
1470 if (
f->cd(
path.c_str()) == 0) {
1476 h_mass->Write(
"", TObject::kOverwrite);
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);
1492 heta_b[
i]->Write(
"", TObject::kOverwrite);
1495 heta_ecc[
i]->Write(
"", TObject::kOverwrite);
1496 heta_eca[
i]->Write(
"", TObject::kOverwrite);
1499 for (
int i = 0;
i < 8;
i++) {
1500 heta[
i]->Write(
"", TObject::kOverwrite);
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);
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);
1550 path = run_dir +
"IDPerfMon/Zee/" + TriggerName;
1551 if (
f->cd(
path.c_str()) == 0) {
1557 f->cd(
path.c_str());
1561 TH1F* h_mass = (
TH1F*) (
f->Get((
path +
"/Zee_invmass").c_str())->Clone());
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);
1587 incl, barrel, eca, ecc, Nregions
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");
1595 std::vector<TH1F*> h_Zee_Eopdiff;
1596 std::vector<TH1F*> h_Zee_Eop_plus;
1597 std::vector<TH1F*> h_Zee_Eop_minus;
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;
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;
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;
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;
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;
1621 for (
int region = 0; region != Nregions; ++region) {
1622 str =
path +
"/Zee_Eop_plus_" + region_strings[region];
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];
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];
1635 h_Zee_Eopdiff.push_back((
TH1F*) (
f->Get(
str.c_str())));
1636 h_Zee_Eopdiff[region]->SetTitle(h_Zee_Eopdiff[region]->GetTitle());
1638 h_Zee_Eopdiff[region]->Add(h_Zee_Eop_plus[region], h_Zee_Eop_minus[region], 1., -1);
1640 if (region == incl) {
1641 str =
path +
"/Zee_meanEop_vs_p_plus";
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";
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";
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());
1657 str =
path +
"/Zee_meanEop_vs_invp_plus";
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";
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";
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());
1673 str =
path +
"/Zee_meanEop_vs_E_plus";
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";
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";
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());
1689 str =
path +
"/Zee_meanEop_vs_phi_plus";
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";
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";
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());
1705 str =
path +
"/Zee_meanEop_vs_eta_plus";
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";
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";
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());
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.,
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.,
1727 h_Zee_Eopdiff_vs_eta[region]->Add(h_Zee_meanEop_vs_eta_plus[region], h_Zee_meanEop_vs_eta_minus[region], 1.,
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);
1750 path = run_dir +
"IDPerfMon/Wenu/" + TriggerName;
1751 if (
f->cd(
path.c_str()) == 0) {
1757 f->cd(
path.c_str());
1761 TH1F* h_mass = (
TH1F*) (
f->Get((
path +
"/Wenu_trk_transmass_sel").c_str())->Clone());
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);
1788 incl, barrel, eca, ecc, Nregions
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");
1796 std::vector<TH1F*> h_Wenu_Eopdiff;
1797 std::vector<TH1F*> h_Wenu_Eop_plus;
1798 std::vector<TH1F*> h_Wenu_Eop_minus;
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;
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;
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;
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;
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;
1822 for (
int region = 0; region != Nregions; ++region) {
1823 str =
path +
"/Wenu_Eop_plus_" + region_strings[region];
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];
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];
1836 h_Wenu_Eopdiff.push_back((
TH1F*) (
f->Get(
str.c_str())));
1837 h_Wenu_Eopdiff[region]->SetTitle(h_Wenu_Eopdiff[region]->GetTitle());
1839 h_Wenu_Eopdiff[region]->Add(h_Wenu_Eop_plus[region], h_Wenu_Eop_minus[region], 1., -1);
1841 if (region == incl) {
1842 str =
path +
"/Wenu_meanEop_vs_p_plus";
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";
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";
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());
1858 str =
path +
"/Wenu_meanEop_vs_invp_plus";
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";
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";
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());
1874 str =
path +
"/Wenu_meanEop_vs_E_plus";
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";
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";
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());
1890 str =
path +
"/Wenu_meanEop_vs_phi_plus";
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";
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";
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());
1906 str =
path +
"/Wenu_meanEop_vs_eta_plus";
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";
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";
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());
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],
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.,
1928 h_Wenu_Eopdiff_vs_eta[region]->Add(h_Wenu_meanEop_vs_eta_plus[region], h_Wenu_meanEop_vs_eta_minus[region], 1.,
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);
1951 std::vector<TH1F*> hvec;
1952 gROOT->SetStyle(
"Plain");
1954 path = run_dir +
"IDPerfMon/ZMM/" + TriggerName;
1956 if (
f->cd(
path.c_str()) == 0) {
1961 f->cd(
path.c_str());
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,
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,
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()));
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);
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,
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,
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()));
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);
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,
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,
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()));
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);
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,
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,
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()));
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);
2059 TH1F* h_ZMass_ID = (
TH1F*) (
f->Get((
path +
"/z-mass_trks").c_str())->Clone());
2060 h_ZMass_ID->SetTitle(
"Z Mass ID Tracks");
2066 TH1F* h_ZMass_CB = (
TH1F*) (
f->Get((
path +
"/z-mass_comb").c_str())->Clone());
2067 h_ZMass_CB->SetTitle(
"Z Mass CB Tracks");
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;
2080 h_rate->SetBinContent(1, rate);
2081 h_rate->SetBinError(1, rate_error);
2082 h_rate->Write(
"rate", TObject::kOverwrite);
2091 double jpsiPDGmass = 3.097;
2093 double mass_error = 0;
2095 double width_error = 0;
2096 double maxmass = 0.;
2097 double maxwidth = 0.;
2098 double minwidth = 999;
2100 hmass->SetMarkerStyle(21);
2101 hwidth->SetMarkerStyle(21);
2104 TF1* fitjpsi =
new TF1(
"fitjpsi",
"gaus", 2.6, 3.6);
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;
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");
2139 if (minwidth < maxwidth) hwidth->SetAxisRange(minwidth * 0.9, maxwidth * 1.05,
"Y");
2147 double upsilonPDGmass = 9.46;
2149 double mass_error = 0;
2151 double width_error = 0;
2152 double maxmass = 0.;
2153 double maxwidth = 0.;
2154 double minwidth = 999;
2156 hmass->SetMarkerStyle(21);
2157 hwidth->SetMarkerStyle(21);
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++) {
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;
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");
2196 const double ZPDGmass = 91.1876;
2197 const int size = (
int) hvec.size();
2199 for (
int i = 0;
i <
size;
i++) {
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");
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");
2221 RooAbsPdf::verboseEval(-100);
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);
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);
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));
2239 RooArgSet*
params = bxc.getVariables();
2241 RooRealVar* fit_bwm0 = (RooRealVar*)
params->find(
"bw_#mu");
2242 RooRealVar* fit_cbsg = (RooRealVar*)
params->find(
"cb_#sigma");
2247 delete resourceToDelete;
2248 return std::make_pair(*fit_bwm0, *fit_cbsg);
2254 RooAbsPdf::verboseEval(-100);
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);
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);
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));
2274 bxc.plotOn(frame, RooFit::LineColor(kYellow));
2275 cb.plotOn(frame, RooFit::LineColor(kRed));
2276 bw.plotOn(frame, RooFit::LineStyle(kDashed));
2278 delete resourceToDelete;