1 const Int_t numberOfCentralityBins = 14;
2 TString centralityArray[numberOfCentralityBins] = {"0-80","10-20","20-30","30-40","40-50","50-60","60-70","70-80","0-100","0-1","1-2","2-3","92-8500","0-10000"};
4 const Int_t gRebin = 1;
6 void drawCorrelationFunctionPsi(const char* filename = "AnalysisResultsPsi_train_06feb.root",
9 const char* gCentralityEstimator = 0x0,
10 Bool_t kShowShuffled = kFALSE,
11 Bool_t kShowMixed = kTRUE,
12 Double_t psiMin = -0.5,
13 Double_t psiMax = 3.5,
14 Double_t vertexZMin = -10.,
15 Double_t vertexZMax = 10.,
16 Double_t ptTriggerMin = -1.,
17 Double_t ptTriggerMax = -1.,
18 Double_t ptAssociatedMin = -1.,
19 Double_t ptAssociatedMax = -1.,
20 Bool_t normToTrig = kTRUE,
21 Double_t normalizationRangePhi = TMath::Pi()/6.,
22 Bool_t kUseVzBinning = kTRUE,
25 TString eventClass = "EventPlane", //Can be "EventPlane", "Centrality", "Multiplicity"
27 TString listNameAdd = "")
29 //Macro that draws the correlation functions from the balance function
30 //analysis vs the reaction plane
31 //Author: Panos.Christakoglou@nikhef.nl
32 //gROOT->LoadMacro("~/SetPlotStyle.C");
34 gStyle->SetPalette(1,0);
36 //Load the PWG2ebye library
37 gSystem->Load("libCore");
38 gSystem->Load("libGeom");
39 gSystem->Load("libVMC");
40 gSystem->Load("libPhysics");
41 gSystem->Load("libTree");
42 gSystem->Load("libSTEERBase");
43 gSystem->Load("libESD");
44 gSystem->Load("libAOD");
46 gSystem->Load("libANALYSIS");
47 gSystem->Load("libANALYSISalice");
48 gSystem->Load("libEventMixing");
49 gSystem->Load("libCORRFW");
50 gSystem->Load("libPWGTools");
51 gSystem->Load("libPWGCFebye");
53 //Prepare the objects and return them
55 TList *list = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,0,bToy,listNameAdd);
56 TList *listShuffled = NULL;
57 if(kShowShuffled) listShuffled = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,1,bToy,listNameAdd);
58 TList *listMixed = NULL;
59 if(kShowMixed) listMixed = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,2,bToy,listNameAdd);
61 //get the QA histograms (for convolution)
64 TFile *f = TFile::Open(filename,"UPDATE");
65 if((!f)||(!f->IsOpen())) {
66 Printf("The file %s is not found.",filename);
70 TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionPsiAnalysis"));
72 Printf("The TDirectoryFile is not found.",filename);
75 TString listQAName = "listQAPsi_";
77 listQAName += centralityArray[gCentrality-1];
79 listQAName += "_Bit"; listQAName += gBit; }
80 if(gCentralityEstimator) {
81 listQAName += "_"; listQAName += gCentralityEstimator;}
82 listQAName += listNameAdd;
85 listQA = (TList*)dir->Get(Form("%s",listQAName.Data()));
87 Printf("TList %s not found!!!",listQAName.Data());
92 Printf("The TList object was not created");
96 draw(list,listShuffled,listMixed,listQA,
97 gCentralityEstimator,gCentrality,psiMin,psiMax,vertexZMin,vertexZMax,
98 ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,normToTrig, normalizationRangePhi,
99 kUseVzBinning,rebinEta,rebinPhi,eventClass,bToy);
102 //______________________________________________________//
103 TList *GetListOfObjects(const char* filename,
106 const char *gCentralityEstimator,
108 Bool_t bToy = kFALSE,
109 TString listNameAdd = "") {
110 //Get the TList objects (QA, bf, bf shuffled)
114 TFile *f = TFile::Open(filename,"UPDATE");
115 if((!f)||(!f->IsOpen())) {
116 Printf("The file %s is not found. Aborting...",filename);
121 TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionPsiAnalysis"));
123 Printf("The TDirectoryFile is not found. Aborting...",filename);
130 //cout<<"no shuffling - no mixing"<<endl;
131 listBFName = "listBFPsi";
133 else if(kData == 1) {
134 //cout<<"shuffling - no mixing"<<endl;
135 listBFName = "listBFPsiShuffled";
137 else if(kData == 2) {
138 //cout<<"no shuffling - mixing"<<endl;
139 listBFName = "listBFPsiMixed";
142 // different list names in case of toy model
145 listBFName += centralityArray[gCentrality-1];
147 listBFName += "_Bit"; listBFName += gBit; }
148 if(gCentralityEstimator) {
149 listBFName += "_"; listBFName += gCentralityEstimator;}
152 listBFName.ReplaceAll("Psi","");
154 listBFName += listNameAdd;
156 // histograms were already retrieved (in first iteration)
157 if(dir->Get(Form("%s_histograms",listBFName.Data()))){
158 listBF = dynamic_cast<TList *>(dir->Get(Form("%s_histograms",listBFName.Data())));
161 // histograms were not yet retrieved (this is the first iteration)
164 listBF = dynamic_cast<TList *>(dir->Get(listBFName.Data()));
165 if(!listBF) dir->ls();
166 cout<<"======================================================="<<endl;
167 cout<<"List name (control): "<<listBFName.Data()<<endl;
168 cout<<"List name: "<<listBF->GetName()<<endl;
174 histoName = "fHistP";
176 histoName = "fHistP_shuffle";
178 histoName = "fHistP";
179 if(gCentralityEstimator)
180 histoName += gCentralityEstimator;
181 AliTHn *fHistP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
183 Printf("fHistP %s not found!!!",histoName.Data());
186 fHistP->FillParent(); fHistP->DeleteContainers();
189 histoName = "fHistN";
191 histoName = "fHistN_shuffle";
193 histoName = "fHistN";
194 if(gCentralityEstimator)
195 histoName += gCentralityEstimator;
196 AliTHn *fHistN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
198 Printf("fHistN %s not found!!!",histoName.Data());
201 fHistN->FillParent(); fHistN->DeleteContainers();
204 histoName = "fHistPN";
206 histoName = "fHistPN_shuffle";
208 histoName = "fHistPN";
209 if(gCentralityEstimator)
210 histoName += gCentralityEstimator;
211 AliTHn *fHistPN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
213 Printf("fHistPN %s not found!!!",histoName.Data());
216 fHistPN->FillParent(); fHistPN->DeleteContainers();
219 histoName = "fHistNP";
221 histoName = "fHistNP_shuffle";
223 histoName = "fHistNP";
224 if(gCentralityEstimator)
225 histoName += gCentralityEstimator;
226 AliTHn *fHistNP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
228 Printf("fHistNP %s not found!!!",histoName.Data());
231 fHistNP->FillParent(); fHistNP->DeleteContainers();
234 histoName = "fHistPP";
236 histoName = "fHistPP_shuffle";
238 histoName = "fHistPP";
239 if(gCentralityEstimator)
240 histoName += gCentralityEstimator;
241 AliTHn *fHistPP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
243 Printf("fHistPP %s not found!!!",histoName.Data());
246 fHistPP->FillParent(); fHistPP->DeleteContainers();
249 histoName = "fHistNN";
251 histoName = "fHistNN_shuffle";
253 histoName = "fHistNN";
254 if(gCentralityEstimator)
255 histoName += gCentralityEstimator;
256 AliTHn *fHistNN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
258 Printf("fHistNN %s not found!!!",histoName.Data());
261 fHistNN->FillParent(); fHistNN->DeleteContainers();
264 listBF->Write(Form("%s_histograms",listBFName.Data()), TObject::kSingleKey);
273 //______________________________________________________//
274 void draw(TList *list, TList *listBFShuffled, TList *listBFMixed,
276 const char *gCentralityEstimator,
277 Int_t gCentrality, Double_t psiMin, Double_t psiMax,
278 Double_t vertexZMin,Double_t vertexZMax,
279 Double_t ptTriggerMin, Double_t ptTriggerMax,
280 Double_t ptAssociatedMin, Double_t ptAssociatedMax,
282 Double_t normalizationRangePhi,
283 Bool_t kUseVzBinning,
284 Int_t rebinEta, Int_t rebinPhi,TString eventClass,Bool_t bToy) {
285 //Draws the correlation functions for every centrality bin
286 //(+-), (-+), (++), (--)
294 TString gHistPname = "fHistP";
295 if(gCentralityEstimator) gHistPname += gCentralityEstimator;
296 TString gHistNname = "fHistN";
297 if(gCentralityEstimator) gHistNname += gCentralityEstimator;
298 TString gHistPNname = "fHistPN";
299 if(gCentralityEstimator) gHistPNname += gCentralityEstimator;
300 TString gHistNPname = "fHistNP";
301 if(gCentralityEstimator) gHistNPname += gCentralityEstimator;
302 TString gHistPPname = "fHistPP";
303 if(gCentralityEstimator) gHistPPname += gCentralityEstimator;
304 TString gHistNNname = "fHistNN";
305 if(gCentralityEstimator) gHistNNname += gCentralityEstimator;
307 hP = (AliTHn*) list->FindObject(gHistPname.Data());
308 hN = (AliTHn*) list->FindObject(gHistNname.Data());
309 hPN = (AliTHn*) list->FindObject(gHistPNname.Data());
310 hNP = (AliTHn*) list->FindObject(gHistNPname.Data());
311 hPP = (AliTHn*) list->FindObject(gHistPPname.Data());
312 hNN = (AliTHn*) list->FindObject(gHistNNname.Data());
316 //Create the AliBalancePsi object and fill it with the AliTHn objects
317 AliBalancePsi *b = new AliBalancePsi();
318 b->SetEventClass(eventClass);
325 if(kUseVzBinning) b->SetVertexZBinning(kTRUE);
327 //balance function shuffling
328 AliTHn *hPShuffled = NULL;
329 AliTHn *hNShuffled = NULL;
330 AliTHn *hPNShuffled = NULL;
331 AliTHn *hNPShuffled = NULL;
332 AliTHn *hPPShuffled = NULL;
333 AliTHn *hNNShuffled = NULL;
335 //listBFShuffled->ls();
337 gHistPname = "fHistP_shuffle";
338 if(gCentralityEstimator) gHistPname += gCentralityEstimator;
339 gHistNname = "fHistN_shuffle";
340 if(gCentralityEstimator) gHistNname += gCentralityEstimator;
341 gHistPNname = "fHistPN_shuffle";
342 if(gCentralityEstimator) gHistPNname += gCentralityEstimator;
343 gHistNPname = "fHistNP_shuffle";
344 if(gCentralityEstimator) gHistNPname += gCentralityEstimator;
345 gHistPPname = "fHistPP_shuffle";
346 if(gCentralityEstimator) gHistPPname += gCentralityEstimator;
347 gHistNNname = "fHistNN_shuffle";
348 if(gCentralityEstimator) gHistNNname += gCentralityEstimator;
350 hPShuffled = (AliTHn*) listBFShuffled->FindObject(gHistPname.Data());
351 hPShuffled->SetName("gHistPShuffled");
352 hNShuffled = (AliTHn*) listBFShuffled->FindObject(gHistNname.Data());
353 hNShuffled->SetName("gHistNShuffled");
354 hPNShuffled = (AliTHn*) listBFShuffled->FindObject(gHistPNname.Data());
355 hPNShuffled->SetName("gHistPNShuffled");
356 hNPShuffled = (AliTHn*) listBFShuffled->FindObject(gHistNPname.Data());
357 hNPShuffled->SetName("gHistNPShuffled");
358 hPPShuffled = (AliTHn*) listBFShuffled->FindObject(gHistPPname.Data());
359 hPPShuffled->SetName("gHistPPShuffled");
360 hNNShuffled = (AliTHn*) listBFShuffled->FindObject(gHistNNname.Data());
361 hNNShuffled->SetName("gHistNNShuffled");
363 AliBalancePsi *bShuffled = new AliBalancePsi();
364 bShuffled->SetEventClass(eventClass);
365 bShuffled->SetHistNp(hPShuffled);
366 bShuffled->SetHistNn(hNShuffled);
367 bShuffled->SetHistNpn(hPNShuffled);
368 bShuffled->SetHistNnp(hNPShuffled);
369 bShuffled->SetHistNpp(hPPShuffled);
370 bShuffled->SetHistNnn(hNNShuffled);
371 if(kUseVzBinning) bShuffled->SetVertexZBinning(kTRUE);
374 //balance function mixing
375 AliTHn *hPMixed = NULL;
376 AliTHn *hNMixed = NULL;
377 AliTHn *hPNMixed = NULL;
378 AliTHn *hNPMixed = NULL;
379 AliTHn *hPPMixed = NULL;
380 AliTHn *hNNMixed = NULL;
385 gHistPname = "fHistP";
386 if(gCentralityEstimator) gHistPname += gCentralityEstimator;
387 gHistNname = "fHistN";
388 if(gCentralityEstimator) gHistNname += gCentralityEstimator;
389 gHistPNname = "fHistPN";
390 if(gCentralityEstimator) gHistPNname += gCentralityEstimator;
391 gHistNPname = "fHistNP";
392 if(gCentralityEstimator) gHistNPname += gCentralityEstimator;
393 gHistPPname = "fHistPP";
394 if(gCentralityEstimator) gHistPPname += gCentralityEstimator;
395 gHistNNname = "fHistNN";
396 if(gCentralityEstimator) gHistNNname += gCentralityEstimator;
397 hPMixed = (AliTHn*) listBFMixed->FindObject(gHistPname.Data());
398 hPMixed->SetName("gHistPMixed");
399 hNMixed = (AliTHn*) listBFMixed->FindObject(gHistNname.Data());
400 hNMixed->SetName("gHistNMixed");
401 hPNMixed = (AliTHn*) listBFMixed->FindObject(gHistPNname.Data());
402 hPNMixed->SetName("gHistPNMixed");
403 hNPMixed = (AliTHn*) listBFMixed->FindObject(gHistNPname.Data());
404 hNPMixed->SetName("gHistNPMixed");
405 hPPMixed = (AliTHn*) listBFMixed->FindObject(gHistPPname.Data());
406 hPPMixed->SetName("gHistPPMixed");
407 hNNMixed = (AliTHn*) listBFMixed->FindObject(gHistNNname.Data());
408 hNNMixed->SetName("gHistNNMixed");
410 AliBalancePsi *bMixed = new AliBalancePsi();
411 bMixed->SetEventClass(eventClass);
412 bMixed->SetHistNp(hPMixed);
413 bMixed->SetHistNn(hNMixed);
414 bMixed->SetHistNpn(hPNMixed);
415 bMixed->SetHistNnp(hNPMixed);
416 bMixed->SetHistNpp(hPPMixed);
417 bMixed->SetHistNnn(hNNMixed);
418 if(kUseVzBinning) bMixed->SetVertexZBinning(kTRUE);
431 TString histoTitle, pngName;
433 // if no mixing then divide by convoluted histograms
434 if(!listBFMixed && listQA){
436 if(!listQA->FindObject("fHistEtaPhiPos") || !listQA->FindObject("fHistEtaPhiNeg")){
438 Printf("fHistEtaPhiPos or fHistEtaPhiNeg not found! --> no convolution");
444 TH2D* fHistPos = (TH2D*)((TH3D*)listQA->FindObject("fHistEtaPhiPos"))->Project3D("xy");
445 fHistPos->GetYaxis()->SetRangeUser(-0.79,0.79);
447 TH2D* fHistNeg = (TH2D*)((TH3D*)listQA->FindObject("fHistEtaPhiNeg"))->Project3D("xy");
448 fHistNeg->GetYaxis()->SetRangeUser(-0.79,0.79);
450 gHistPN[2] = convolute2D(fHistPos, fHistNeg, "hConvPN");
451 gHistPN[2]->Scale(1./gHistPN[2]->GetBinContent(gHistPN[2]->FindBin(0,0)));
453 gHistNP[2] = convolute2D(fHistNeg, fHistPos, "hConvNP");
454 gHistNP[2]->Scale(1./gHistNP[2]->GetBinContent(gHistNP[2]->FindBin(0,0)));
456 gHistNN[2] = convolute2D(fHistNeg, fHistNeg, "hConvNN");
457 gHistNN[2]->Scale(1./gHistNN[2]->GetBinContent(gHistNN[2]->FindBin(0,0)));
459 gHistPP[2] = convolute2D(fHistPos, fHistPos, "hConvPP");
460 gHistPP[2]->Scale(1./gHistPP[2]->GetBinContent(gHistPP[2]->FindBin(0,0)));
465 if(eventClass == "Centrality"){
466 histoTitle = "(+-) | Centrality: ";
467 histoTitle += psiMin;
469 histoTitle += psiMax;
471 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
473 else if(eventClass == "Multiplicity"){
474 histoTitle = "(+-) | Multiplicity: ";
475 histoTitle += psiMin;
477 histoTitle += psiMax;
478 histoTitle += " tracks";
479 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
481 else{ // "EventPlane" (default)
482 histoTitle = "(+-) | Centrality: ";
483 histoTitle += centralityArray[gCentrality-1];
485 if((psiMin == -0.5)&&(psiMax == 0.5))
486 histoTitle += " (-7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o})";
487 else if((psiMin == 0.5)&&(psiMax == 1.5))
488 histoTitle += " (37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o})";
489 else if((psiMin == 1.5)&&(psiMax == 2.5))
490 histoTitle += " (82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o})";
492 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
494 gHistPN[0] = b->GetCorrelationFunctionPN(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
495 if(rebinEta > 1 || rebinPhi > 1){
496 gHistPN[0]->Rebin2D(rebinEta,rebinPhi);
497 gHistPN[0]->Scale(1./(Double_t)(rebinEta*rebinPhi));
499 gHistPN[0]->GetYaxis()->SetTitleOffset(1.5);
500 gHistPN[0]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
501 gHistPN[0]->SetTitle(histoTitle.Data());
502 cPN[0] = new TCanvas("cPN0","",0,0,600,500);
503 cPN[0]->SetFillColor(10); cPN[0]->SetHighLightColor(10);
504 gHistPN[0]->DrawCopy("surf1fb");
505 gPad->SetTheta(30); // default is 30
506 //gPad->SetPhi(130); // default is 30
507 gPad->SetPhi(-60); // default is 30
509 pngName = "DeltaPhiDeltaEta.Centrality";
510 pngName += centralityArray[gCentrality-1];
511 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
512 pngName += ".PositiveNegative.png";
513 //cPN[0]->SaveAs(pngName.Data());
517 histoTitle.ReplaceAll("(+-)","(+-) shuffled");
519 gHistPN[1] = bShuffled->GetCorrelationFunctionPN(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
520 if(rebinEta > 1 || rebinPhi > 1){
521 gHistPN[1]->Rebin2D(rebinEta,rebinPhi);
522 gHistPN[1]->Scale(1./(Double_t)(rebinEta*rebinPhi));
524 gHistPN[1]->GetYaxis()->SetTitleOffset(1.5);
525 gHistPN[1]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
526 gHistPN[1]->SetTitle(histoTitle.Data());
527 cPN[1] = new TCanvas("cPN1","",0,100,600,500);
528 cPN[1]->SetFillColor(10);
529 cPN[1]->SetHighLightColor(10);
530 gHistPN[1]->DrawCopy("surf1fb");
531 gPad->SetTheta(30); // default is 30
532 //gPad->SetPhi(130); // default is 30
533 gPad->SetPhi(-60); // default is 30
535 pngName = "DeltaPhiDeltaEtaShuffled.Centrality";
536 pngName += centralityArray[gCentrality-1];
537 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
538 pngName += ".PositiveNegative.png";
539 //cPN[1]->SaveAs(pngName.Data());
544 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(+-) shuffled","(+-) mixed");
545 else histoTitle.ReplaceAll("(+-)","(+-) mixed");
547 // if normalization to trigger then do not divide Event mixing by number of trigger particles
548 gHistPN[2] = bMixed->GetCorrelationFunctionPN(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
549 if(rebinEta > 1 || rebinPhi > 1){
550 gHistPN[2]->Rebin2D(rebinEta,rebinPhi);
551 gHistPN[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
554 // normalization to 1 at (0,0) --> Jan Fietes method
556 Double_t mixedNorm = gHistPN[2]->Integral(gHistPN[2]->GetXaxis()->FindBin(0-10e-5),gHistPN[2]->GetXaxis()->FindBin(0+10e-5),gHistPN[2]->GetNbinsY()/2 + 1,gHistPN[2]->GetNbinsY());
557 mixedNorm /= 0.5 * gHistPN[2]->GetNbinsY()*(gHistPN[2]->GetXaxis()->FindBin(0.01) - gHistPN[2]->GetXaxis()->FindBin(-0.01) + 1);
559 // finite bin correction
560 Double_t binWidthEta = gHistPN[2]->GetXaxis()->GetBinWidth(gHistPN[2]->GetNbinsX());
561 Double_t maxEta = gHistPN[2]->GetXaxis()->GetBinUpEdge(gHistPN[2]->GetNbinsX());
563 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
564 //Printf("Finite bin correction: %f", finiteBinCorrection);
565 mixedNorm /= finiteBinCorrection;
567 gHistPN[2]->Scale(1./mixedNorm);
570 gHistPN[2]->GetYaxis()->SetTitleOffset(1.5);
571 gHistPN[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
572 gHistPN[2]->SetTitle(histoTitle.Data());
573 cPN[2] = new TCanvas("cPN2","",0,200,600,500);
574 cPN[2]->SetFillColor(10);
575 cPN[2]->SetHighLightColor(10);
576 gHistPN[2]->DrawCopy("surf1fb");
577 gPad->SetTheta(30); // default is 30
578 //gPad->SetPhi(130); // default is 30
579 gPad->SetPhi(-60); // default is 30
581 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
582 pngName += centralityArray[gCentrality-1];
583 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
584 pngName += ".PositiveNegative.png";
585 //cPN[2]->SaveAs(pngName.Data());
587 //Correlation function (+-)
588 gHistPN[3] = b->GetCorrelationFunction("PN",psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed,normToTrig,normalizationRangePhi);
589 //gHistPN[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
592 gHistPN[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
594 gHistPN[3]->GetZaxis()->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
595 //gHistPN[3]->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
596 cPN[3] = new TCanvas("cPN3","",0,300,600,500);
597 cPN[3]->SetFillColor(10);
598 cPN[3]->SetHighLightColor(10);
599 gHistPN[3]->DrawCopy("surf1fb");
600 gPad->SetTheta(30); // default is 30
601 //gPad->SetPhi(130); // default is 30
602 gPad->SetPhi(-60); // default is 30
604 pngName = "CorrelationFunction.Centrality";
605 pngName += centralityArray[gCentrality-1];
606 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
607 pngName += ".PositiveNegative.png";
608 //cPN[3]->SaveAs(pngName.Data());
610 // if no mixing then divide by convoluted histograms
613 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(+-) shuffled","(+-) convoluted");
614 else histoTitle.ReplaceAll("(+-)","(+-) convoluted");
616 if(rebinEta > 1 || rebinPhi > 1){
617 gHistPN[2]->Rebin2D(rebinEta,rebinPhi);
618 gHistPN[0]->Scale(1./(Double_t)(rebinEta*rebinPhi));
621 // normalization to 1 at (0,0) --> Jan Fietes method
623 Double_t mixedNorm = gHistPN[2]->Integral(gHistPN[2]->GetXaxis()->FindBin(0-10e-5),gHistPN[2]->GetXaxis()->FindBin(0+10e-5),gHistPN[2]->GetNbinsY()/2 + 1,gHistPN[2]->GetNbinsY());
624 mixedNorm /= 0.5 * gHistPN[2]->GetNbinsY()*(gHistPN[2]->GetXaxis()->FindBin(0.01) - gHistPN[2]->GetXaxis()->FindBin(-0.01) + 1);
626 // finite bin correction
627 Double_t binWidthEta = gHistPN[2]->GetXaxis()->GetBinWidth(gHistPN[2]->GetNbinsX());
628 Double_t maxEta = gHistPN[2]->GetXaxis()->GetBinUpEdge(gHistPN[2]->GetNbinsX());
630 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
631 //Printf("Finite bin correction: %f", finiteBinCorrection);
632 mixedNorm /= finiteBinCorrection;
634 gHistPN[2]->Scale(1./mixedNorm);
637 gHistPN[2]->GetYaxis()->SetTitleOffset(1.5);
638 gHistPN[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
639 gHistPN[2]->SetTitle(histoTitle.Data());
640 cPN[2] = new TCanvas("cPN2","",0,200,600,500);
641 cPN[2]->SetFillColor(10);
642 cPN[2]->SetHighLightColor(10);
643 gHistPN[2]->DrawCopy("surf1fb");
644 gPad->SetTheta(30); // default is 30
645 //gPad->SetPhi(130); // default is 30
646 gPad->SetPhi(-60); // default is 30
648 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
649 pngName += centralityArray[gCentrality-1];
650 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
651 pngName += ".PositiveNegative.png";
652 //cPN[2]->SaveAs(pngName.Data());
654 //Correlation function (+-)
655 gHistPN[3] = dynamic_cast<TH2D *>(gHistPN[0]->Clone());
656 gHistPN[3]->Divide(gHistPN[2]);
657 //gHistPN[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
659 gHistPN[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
661 gHistPN[3]->GetZaxis()->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
662 //gHistPN[3]->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
663 cPN[3] = new TCanvas("cPN3","",0,300,600,500);
664 cPN[3]->SetFillColor(10);
665 cPN[3]->SetHighLightColor(10);
666 gHistPN[3]->DrawCopy("surf1fb");
667 gPad->SetTheta(30); // default is 30
668 //gPad->SetPhi(130); // default is 30
669 gPad->SetPhi(-60); // default is 30
671 pngName = "CorrelationFunction.Centrality";
672 pngName += centralityArray[gCentrality-1];
673 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
674 pngName += ".PositiveNegative.png";
675 //cPN[3]->SaveAs(pngName.Data());
679 if(eventClass == "Centrality"){
680 histoTitle = "(-+) | Centrality: ";
681 histoTitle += psiMin;
683 histoTitle += psiMax;
685 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
687 else if(eventClass == "Multiplicity"){
688 histoTitle = "(-+) | Multiplicity: ";
689 histoTitle += psiMin;
691 histoTitle += psiMax;
692 histoTitle += " tracks";
693 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
695 else{ // "EventPlane" (default)
696 histoTitle = "(-+) | Centrality: ";
697 histoTitle += centralityArray[gCentrality-1];
699 if((psiMin == -0.5)&&(psiMax == 0.5))
700 histoTitle += " (-7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o})";
701 else if((psiMin == 0.5)&&(psiMax == 1.5))
702 histoTitle += " (37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o})";
703 else if((psiMin == 1.5)&&(psiMax == 2.5))
704 histoTitle += " (82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o})";
706 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
709 gHistNP[0] = b->GetCorrelationFunctionNP(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
710 if(rebinEta > 1 || rebinPhi > 1){
711 gHistNP[0]->Rebin2D(rebinEta,rebinPhi);
712 gHistNP[0]->Scale(1./(Double_t)(rebinEta*rebinPhi));
714 gHistNP[0]->GetYaxis()->SetTitleOffset(1.5);
715 gHistNP[0]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
716 gHistNP[0]->SetTitle(histoTitle.Data());
717 cNP[0] = new TCanvas("cNP0","",100,0,600,500);
718 cNP[0]->SetFillColor(10);
719 cNP[0]->SetHighLightColor(10);
720 gHistNP[0]->DrawCopy("surf1fb");
721 gPad->SetTheta(30); // default is 30
722 //gPad->SetPhi(130); // default is 30
723 gPad->SetPhi(-60); // default is 30
725 pngName = "DeltaPhiDeltaEta.Centrality";
726 pngName += centralityArray[gCentrality-1];
727 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
728 pngName += ".NegativePositive.png";
729 //cNP[0]->SaveAs(pngName.Data());
733 histoTitle.ReplaceAll("(-+)","(-+) shuffled");
735 gHistNP[1] = bShuffled->GetCorrelationFunctionNP(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
736 if(rebinEta > 1 || rebinPhi > 1){
737 gHistNP[1]->Rebin2D(rebinEta,rebinPhi);
738 gHistNP[1]->Scale(1./(Double_t)(rebinEta*rebinPhi));
740 gHistNP[1]->GetYaxis()->SetTitleOffset(1.5);
741 gHistNP[1]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
742 gHistNP[1]->SetTitle(histoTitle.Data());
743 cNP[1] = new TCanvas("cNP1","",100,100,600,500);
744 cNP[1]->SetFillColor(10);
745 cNP[1]->SetHighLightColor(10);
746 gHistNP[1]->DrawCopy("surf1fb");
747 gPad->SetTheta(30); // default is 30
748 //gPad->SetPhi(130); // default is 30
749 gPad->SetPhi(-60); // default is 30
751 pngName = "DeltaPhiDeltaEtaShuffled.Centrality";
752 pngName += centralityArray[gCentrality-1];
753 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
754 pngName += ".NegativePositive.png";
755 //cNP[1]->SaveAs(pngName.Data());
760 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(-+) shuffled","(-+) mixed");
761 else histoTitle.ReplaceAll("(-+)","(-+) mixed");
763 // if normalization to trigger then do not divide Event mixing by number of trigger particles
764 gHistNP[2] = bMixed->GetCorrelationFunctionNP(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
765 if(rebinEta > 1 || rebinPhi > 1){
766 gHistNP[2]->Rebin2D(rebinEta,rebinPhi);
767 gHistNP[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
769 // normalization to 1 at (0,0) --> Jan Fietes method
771 Double_t mixedNorm = gHistNP[2]->Integral(gHistNP[2]->GetXaxis()->FindBin(0-10e-5),gHistNP[2]->GetXaxis()->FindBin(0+10e-5),gHistNP[2]->GetNbinsY()/2 + 1,gHistNP[2]->GetNbinsY());
772 mixedNorm /= 0.5 * gHistNP[2]->GetNbinsY()*(gHistNP[2]->GetXaxis()->FindBin(0.01) - gHistNP[2]->GetXaxis()->FindBin(-0.01) + 1);
774 // finite bin correction
775 Double_t binWidthEta = gHistNP[2]->GetXaxis()->GetBinWidth(gHistNP[2]->GetNbinsX());
776 Double_t maxEta = gHistNP[2]->GetXaxis()->GetBinUpEdge(gHistNP[2]->GetNbinsX());
778 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
779 //Printf("Finite bin correction: %f", finiteBinCorrection);
780 mixedNorm /= finiteBinCorrection;
782 gHistNP[2]->Scale(1./mixedNorm);
785 gHistNP[2]->GetYaxis()->SetTitleOffset(1.5);
786 gHistNP[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
787 gHistNP[2]->SetTitle(histoTitle.Data());
788 cNP[2] = new TCanvas("cNP2","",100,200,600,500);
789 cNP[2]->SetFillColor(10);
790 cNP[2]->SetHighLightColor(10);
791 gHistNP[2]->DrawCopy("surf1fb");
792 gPad->SetTheta(30); // default is 30
793 //gPad->SetPhi(130); // default is 30
794 gPad->SetPhi(-60); // default is 30
796 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
797 pngName += centralityArray[gCentrality-1];
798 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
799 pngName += ".NegativePositive.png";
800 //cNP[2]->SaveAs(pngName.Data());
802 //Correlation function (-+)
803 gHistNP[3] = b->GetCorrelationFunction("NP",psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed,normToTrig,normalizationRangePhi);
804 //gHistNP[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
806 gHistNP[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
808 gHistNP[3]->GetZaxis()->SetTitle("C_{-+}(#Delta#eta,#Delta#varphi)");
809 //gHistNP[3]->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
810 cNP[3] = new TCanvas("cNP3","",100,300,600,500);
811 cNP[3]->SetFillColor(10);
812 cNP[3]->SetHighLightColor(10);
813 gHistNP[3]->DrawCopy("surf1fb");
814 gPad->SetTheta(30); // default is 30
815 //gPad->SetPhi(130); // default is 30
816 gPad->SetPhi(-60); // default is 30
818 pngName = "CorrelationFunction.Centrality";
819 pngName += centralityArray[gCentrality-1];
820 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
821 pngName += ".NegativePositive.png";
822 //cNP[3]->SaveAs(pngName.Data());
824 // if no mixing then divide by convoluted histograms
827 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(-+) shuffled","(-+) convoluted");
828 else histoTitle.ReplaceAll("(-+)","(-+) convoluted");
830 if(rebinEta > 1 || rebinPhi > 1){
831 gHistNP[2]->Rebin2D(rebinEta,rebinPhi);
832 gHistNP[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
835 // normalization to 1 at (0,0) --> Jan Fietes method
837 Double_t mixedNorm = gHistNP[2]->Integral(gHistNP[2]->GetXaxis()->FindBin(0-10e-5),gHistNP[2]->GetXaxis()->FindBin(0+10e-5),gHistNP[2]->GetNbinsY()/2 + 1,gHistNP[2]->GetNbinsY());
838 mixedNorm /= 0.5 * gHistNP[2]->GetNbinsY()*(gHistNP[2]->GetXaxis()->FindBin(0.01) - gHistNP[2]->GetXaxis()->FindBin(-0.01) + 1);
840 // finite bin correction
841 Double_t binWidthEta = gHistNP[2]->GetXaxis()->GetBinWidth(gHistNP[2]->GetNbinsX());
842 Double_t maxEta = gHistNP[2]->GetXaxis()->GetBinUpEdge(gHistNP[2]->GetNbinsX());
844 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
845 //Printf("Finite bin correction: %f", finiteBinCorrection);
846 mixedNorm /= finiteBinCorrection;
848 gHistNP[2]->Scale(1./mixedNorm);
851 gHistNP[2]->GetYaxis()->SetTitleOffset(1.5);
852 gHistNP[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
853 gHistNP[2]->SetTitle(histoTitle.Data());
854 cNP[2] = new TCanvas("cNP2","",100,200,600,500);
855 cNP[2]->SetFillColor(10);
856 cNP[2]->SetHighLightColor(10);
857 gHistNP[2]->DrawCopy("surf1fb");
858 gPad->SetTheta(30); // default is 30
859 //gPad->SetPhi(130); // default is 30
860 gPad->SetPhi(-60); // default is 30
862 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
863 pngName += centralityArray[gCentrality-1];
864 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
865 pngName += ".NegativePositive.png";
866 //cNP[2]->SaveAs(pngName.Data());
868 //Correlation function (-+)
869 gHistNP[3] = dynamic_cast<TH2D *>(gHistNP[0]->Clone());
870 gHistNP[3]->Divide(gHistNP[2]);
871 //gHistNP[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
873 gHistNP[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
875 gHistNP[3]->GetZaxis()->SetTitle("C_{-+}(#Delta#eta,#Delta#varphi)");
876 //gHistNP[3]->SetTitle("C_{-+}(#Delta#eta,#Delta#varphi)");
877 cNP[3] = new TCanvas("cNP3","",100,300,600,500);
878 cNP[3]->SetFillColor(10);
879 cNP[3]->SetHighLightColor(10);
880 gHistNP[3]->DrawCopy("surf1fb");
881 gPad->SetTheta(30); // default is 30
882 //gPad->SetPhi(130); // default is 30
883 gPad->SetPhi(-60); // default is 30
885 pngName = "CorrelationFunction.Centrality";
886 pngName += centralityArray[gCentrality-1];
887 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
888 pngName += ".NegativePositive.png";
889 //cNP[3]->SaveAs(pngName.Data());
894 if(eventClass == "Centrality"){
895 histoTitle = "(++) | Centrality: ";
896 histoTitle += psiMin;
898 histoTitle += psiMax;
900 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
902 else if(eventClass == "Multiplicity"){
903 histoTitle = "(++) | Multiplicity: ";
904 histoTitle += psiMin;
906 histoTitle += psiMax;
907 histoTitle += " tracks";
908 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
910 else{ // "EventPlane" (default)
911 histoTitle = "(++) | Centrality: ";
912 histoTitle += centralityArray[gCentrality-1];
914 if((psiMin == -0.5)&&(psiMax == 0.5))
915 histoTitle += " (-7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o})";
916 else if((psiMin == 0.5)&&(psiMax == 1.5))
917 histoTitle += " (37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o})";
918 else if((psiMin == 1.5)&&(psiMax == 2.5))
919 histoTitle += " (82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o})";
921 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
924 gHistPP[0] = b->GetCorrelationFunctionPP(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
925 if(rebinEta > 1 || rebinPhi > 1){
926 gHistPP[0]->Rebin2D(rebinEta,rebinPhi);
927 gHistPP[0]->Scale(1./(Double_t)(rebinEta*rebinPhi));
929 gHistPP[0]->GetYaxis()->SetTitleOffset(1.5);
930 gHistPP[0]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
931 gHistPP[0]->SetTitle(histoTitle.Data());
932 cPP[0] = new TCanvas("cPP0","",200,0,600,500);
933 cPP[0]->SetFillColor(10);
934 cPP[0]->SetHighLightColor(10);
935 gHistPP[0]->DrawCopy("surf1fb");
936 gPad->SetTheta(30); // default is 30
937 //gPad->SetPhi(130); // default is 30
938 gPad->SetPhi(-60); // default is 30
940 pngName = "DeltaPhiDeltaEta.Centrality";
941 pngName += centralityArray[gCentrality-1];
942 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
943 pngName += ".PositivePositive.png";
944 //cPP[0]->SaveAs(pngName.Data());
948 histoTitle.ReplaceAll("(++)","(++) shuffled");
950 gHistPP[1] = bShuffled->GetCorrelationFunctionPP(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
951 if(rebinEta > 1 || rebinPhi > 1){
952 gHistPP[1]->Rebin2D(rebinEta,rebinPhi);
953 gHistPP[1]->Scale(1./(Double_t)(rebinEta*rebinPhi));
955 gHistPP[1]->GetYaxis()->SetTitleOffset(1.5);
956 gHistPP[1]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
957 gHistPP[1]->SetTitle(histoTitle.Data());
958 cPP[1] = new TCanvas("cPP1","",200,100,600,500);
959 cPP[1]->SetFillColor(10);
960 cPP[1]->SetHighLightColor(10);
961 gHistPP[1]->DrawCopy("surf1fb");
962 gPad->SetTheta(30); // default is 30
963 //gPad->SetPhi(130); // default is 30
964 gPad->SetPhi(-60); // default is 30
966 pngName = "DeltaPhiDeltaEtaShuffled.Centrality";
967 pngName += centralityArray[gCentrality-1];
968 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
969 pngName += ".PositivePositive.png";
970 //cPP[1]->SaveAs(pngName.Data());
975 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(++) shuffled","(++) mixed");
976 else histoTitle.ReplaceAll("(++)","(++) mixed");
978 // if normalization to trigger then do not divide Event mixing by number of trigger particles
979 gHistPP[2] = bMixed->GetCorrelationFunctionPP(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
980 if(rebinEta > 1 || rebinPhi > 1){
981 gHistPP[2]->Rebin2D(rebinEta,rebinPhi);
982 gHistPP[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
984 // normalization to 1 at (0,0) --> Jan Fietes method
986 Double_t mixedNorm = gHistPP[2]->Integral(gHistPP[2]->GetXaxis()->FindBin(0-10e-5),gHistPP[2]->GetXaxis()->FindBin(0+10e-5),gHistPP[2]->GetNbinsY()/2 + 1,gHistPP[2]->GetNbinsY());
987 mixedNorm /= 0.5 * gHistPP[2]->GetNbinsY()*(gHistPP[2]->GetXaxis()->FindBin(0.01) - gHistPP[2]->GetXaxis()->FindBin(-0.01) + 1);
989 // finite bin correction
990 Double_t binWidthEta = gHistPP[2]->GetXaxis()->GetBinWidth(gHistPP[2]->GetNbinsX());
991 Double_t maxEta = gHistPP[2]->GetXaxis()->GetBinUpEdge(gHistPP[2]->GetNbinsX());
993 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
994 //Printf("Finite bin correction: %f", finiteBinCorrection);
995 mixedNorm /= finiteBinCorrection;
997 gHistPP[2]->Scale(1./mixedNorm);
1000 gHistPP[2]->GetYaxis()->SetTitleOffset(1.5);
1001 gHistPP[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
1002 gHistPP[2]->SetTitle(histoTitle.Data());
1003 cPP[2] = new TCanvas("cPP2","",200,200,600,500);
1004 cPP[2]->SetFillColor(10);
1005 cPP[2]->SetHighLightColor(10);
1006 gHistPP[2]->DrawCopy("surf1fb");
1007 gPad->SetTheta(30); // default is 30
1008 //gPad->SetPhi(130); // default is 30
1009 gPad->SetPhi(-60); // default is 30
1011 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
1012 pngName += centralityArray[gCentrality-1];
1013 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1014 pngName += ".PositivePositive.png";
1015 //cPP[2]->SaveAs(pngName.Data());
1017 //Correlation function (++)
1018 gHistPP[3] = b->GetCorrelationFunction("PP",psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed,normToTrig,normalizationRangePhi);
1019 //gHistPP[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
1021 gHistPP[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
1023 gHistPP[3]->GetZaxis()->SetTitle("C_{++}(#Delta#eta,#Delta#varphi)");
1024 // gHistPP[3]->SetTitle("C_{++}(#Delta#eta,#Delta#varphi)");
1025 cPP[3] = new TCanvas("cPP3","",200,300,600,500);
1026 cPP[3]->SetFillColor(10);
1027 cPP[3]->SetHighLightColor(10);
1028 gHistPP[3]->DrawCopy("surf1fb");
1029 gPad->SetTheta(30); // default is 30
1030 //gPad->SetPhi(130); // default is 30
1031 gPad->SetPhi(-60); // default is 30
1033 pngName = "CorrelationFunction.Centrality";
1034 pngName += centralityArray[gCentrality-1];
1035 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1036 pngName += ".PositivePositive.png";
1037 //cPP[3]->SaveAs(pngName.Data());
1039 // if no mixing then divide by convoluted histograms
1042 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(++) shuffled","(++) convoluted");
1043 else histoTitle.ReplaceAll("(++)","(++) convoluted");
1045 if(rebinEta > 1 || rebinPhi > 1){
1046 gHistPP[2]->Rebin2D(rebinEta,rebinPhi);
1047 gHistPP[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
1049 // normalization to 1 at (0,0) --> Jan Fietes method
1051 Double_t mixedNorm = gHistPP[2]->Integral(gHistPP[2]->GetXaxis()->FindBin(0-10e-5),gHistPP[2]->GetXaxis()->FindBin(0+10e-5),gHistPP[2]->GetNbinsY()/2 + 1,gHistPP[2]->GetNbinsY());
1052 mixedNorm /= 0.5 * gHistPP[2]->GetNbinsY()*(gHistPP[2]->GetXaxis()->FindBin(0.01) - gHistPP[2]->GetXaxis()->FindBin(-0.01) + 1);
1054 // finite bin correction
1055 Double_t binWidthEta = gHistPP[2]->GetXaxis()->GetBinWidth(gHistPP[2]->GetNbinsX());
1056 Double_t maxEta = gHistPP[2]->GetXaxis()->GetBinUpEdge(gHistPP[2]->GetNbinsX());
1058 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
1059 //Printf("Finite bin correction: %f", finiteBinCorrection);
1060 mixedNorm /= finiteBinCorrection;
1062 gHistPP[2]->Scale(1./mixedNorm);
1065 gHistPP[2]->GetYaxis()->SetTitleOffset(1.5);
1066 gHistPP[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
1067 gHistPP[2]->SetTitle(histoTitle.Data());
1068 cPP[2] = new TCanvas("cPP2","",200,200,600,500);
1069 cPP[2]->SetFillColor(10);
1070 cPP[2]->SetHighLightColor(10);
1071 gHistPP[2]->DrawCopy("surf1fb");
1072 gPad->SetTheta(30); // default is 30
1073 //gPad->SetPhi(130); // default is 30
1074 gPad->SetPhi(-60); // default is 30
1076 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
1077 pngName += centralityArray[gCentrality-1];
1078 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1079 pngName += ".PositivePositive.png";
1080 //cPP[2]->SaveAs(pngName.Data());
1082 //Correlation function (++)
1083 gHistPP[3] = dynamic_cast<TH2D *>(gHistPP[0]->Clone());
1084 gHistPP[3]->Divide(gHistPP[2]);
1085 //gHistPP[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
1087 gHistPP[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
1089 gHistPP[3]->GetZaxis()->SetTitle("C_{++}(#Delta#eta,#Delta#varphi)");
1090 //gHistPP[3]->SetTitle("C_{++}(#Delta#eta,#Delta#varphi)");
1091 cPP[3] = new TCanvas("cPP3","",200,300,600,500);
1092 cPP[3]->SetFillColor(10);
1093 cPP[3]->SetHighLightColor(10);
1094 gHistPP[3]->DrawCopy("surf1fb");
1095 gPad->SetTheta(30); // default is 30
1096 //gPad->SetPhi(130); // default is 30
1097 gPad->SetPhi(-60); // default is 30
1099 pngName = "CorrelationFunction.Centrality";
1100 pngName += centralityArray[gCentrality-1];
1101 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1102 pngName += ".PositivePositive.png";
1103 //cPP[3]->SaveAs(pngName.Data());
1107 if(eventClass == "Centrality"){
1108 histoTitle = "(--) | Centrality: ";
1109 histoTitle += psiMin;
1110 histoTitle += " - ";
1111 histoTitle += psiMax;
1112 histoTitle += " % ";
1113 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
1115 else if(eventClass == "Multiplicity"){
1116 histoTitle = "(--) | Multiplicity: ";
1117 histoTitle += psiMin;
1118 histoTitle += " - ";
1119 histoTitle += psiMax;
1120 histoTitle += " tracks";
1121 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
1123 else{ // "EventPlane" (default)
1124 histoTitle = "(--) | Centrality: ";
1125 histoTitle += centralityArray[gCentrality-1];
1127 if((psiMin == -0.5)&&(psiMax == 0.5))
1128 histoTitle += " (-7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o})";
1129 else if((psiMin == 0.5)&&(psiMax == 1.5))
1130 histoTitle += " (37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o})";
1131 else if((psiMin == 1.5)&&(psiMax == 2.5))
1132 histoTitle += " (82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o})";
1134 histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})";
1137 gHistNN[0] = b->GetCorrelationFunctionNN(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
1138 if(rebinEta > 1 || rebinPhi > 1){
1139 gHistNN[0]->Rebin2D(rebinEta,rebinPhi);
1140 gHistNN[0]->Scale(1./(Double_t)(rebinEta*rebinPhi));
1142 gHistNN[0]->GetYaxis()->SetTitleOffset(1.5);
1143 gHistNN[0]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
1144 gHistNN[0]->SetTitle(histoTitle.Data());
1145 cNN[0] = new TCanvas("cNN0","",300,0,600,500);
1146 cNN[0]->SetFillColor(10);
1147 cNN[0]->SetHighLightColor(10);
1148 gHistNN[0]->DrawCopy("surf1fb");
1149 gPad->SetTheta(30); // default is 30
1150 gPad->SetPhi(-60); // default is 30
1151 //gPad->SetPhi(-60); // default is 30
1153 pngName = "DeltaPhiDeltaEta.Centrality";
1154 pngName += centralityArray[gCentrality-1];
1155 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1156 pngName += ".NegativeNegative.png";
1157 //cNN[0]->SaveAs(pngName.Data());
1159 if(listBFShuffled) {
1161 histoTitle.ReplaceAll("(--)","(--) shuffled");
1163 gHistNN[1] = bShuffled->GetCorrelationFunctionNN(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
1164 if(rebinEta > 1 || rebinPhi > 1){
1165 gHistNN[1]->Rebin2D(rebinEta,rebinPhi);
1166 gHistNN[1]->Scale(1./(Double_t)(rebinEta*rebinPhi));
1168 gHistNN[1]->GetYaxis()->SetTitleOffset(1.5);
1169 gHistNN[1]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
1170 gHistNN[1]->SetTitle(histoTitle.Data());
1171 cNN[1] = new TCanvas("cNN1","",300,100,600,500);
1172 cNN[1]->SetFillColor(10);
1173 cNN[1]->SetHighLightColor(10);
1174 gHistNN[1]->DrawCopy("surf1fb");
1175 gPad->SetTheta(30); // default is 30
1176 //gPad->SetPhi(130); // default is 30
1177 gPad->SetPhi(-60); // default is 30
1179 pngName = "DeltaPhiDeltaEtaShuffled.Centrality";
1180 pngName += centralityArray[gCentrality-1];
1181 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1182 pngName += ".NegativeNegative.png";
1183 //cNN[1]->SaveAs(pngName.Data());
1188 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(--) shuffled","(--) mixed");
1189 else histoTitle.ReplaceAll("(--)","(--) mixed");
1191 // if normalization to trigger then do not divide Event mixing by number of trigger particles
1192 gHistNN[2] = bMixed->GetCorrelationFunctionNN(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
1193 if(rebinEta > 1 || rebinPhi > 1){
1194 gHistNN[2]->Rebin2D(rebinEta,rebinPhi);
1195 gHistNN[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
1197 // normalization to 1 at (0,0) --> Jan Fietes method
1199 Double_t mixedNorm = gHistNN[2]->Integral(gHistNN[2]->GetXaxis()->FindBin(0-10e-5),gHistNN[2]->GetXaxis()->FindBin(0+10e-5),gHistNN[2]->GetNbinsY()/2 + 1,gHistNN[2]->GetNbinsY());
1200 mixedNorm /= 0.5 * gHistNN[2]->GetNbinsY()*(gHistNN[2]->GetXaxis()->FindBin(0.01) - gHistNN[2]->GetXaxis()->FindBin(-0.01) + 1);
1202 // finite bin correction
1203 Double_t binWidthEta = gHistNN[2]->GetXaxis()->GetBinWidth(gHistNN[2]->GetNbinsX());
1204 Double_t maxEta = gHistNN[2]->GetXaxis()->GetBinUpEdge(gHistNN[2]->GetNbinsX());
1206 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
1207 //Printf("Finite bin correction: %f", finiteBinCorrection);
1208 mixedNorm /= finiteBinCorrection;
1210 gHistNN[2]->Scale(1./mixedNorm);
1213 gHistNN[2]->GetYaxis()->SetTitleOffset(1.5);
1214 gHistNN[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
1215 gHistNN[2]->SetTitle(histoTitle.Data());
1216 cNN[2] = new TCanvas("cNN2","",300,200,600,500);
1217 cNN[2]->SetFillColor(10);
1218 cNN[2]->SetHighLightColor(10);
1219 gHistNN[2]->DrawCopy("surf1fb");
1220 gPad->SetTheta(30); // default is 30
1221 //gPad->SetPhi(130); // default is 30
1222 gPad->SetPhi(-60); // default is 30
1224 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
1225 pngName += centralityArray[gCentrality-1];
1226 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1227 pngName += ".NegativeNegative.png";
1228 //cNN[2]->SaveAs(pngName.Data());
1230 //Correlation function (--)
1231 gHistNN[3] = b->GetCorrelationFunction("NN",psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed,normToTrig,normalizationRangePhi);
1232 //gHistNN[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
1234 gHistNN[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
1236 gHistNN[3]->GetZaxis()->SetTitle("C_{--}(#Delta#eta,#Delta#varphi)");
1237 // gHistNN[3]->SetTitle("C_{--}(#Delta#eta,#Delta#varphi)");
1238 cNN[3] = new TCanvas("cNN3","",300,300,600,500);
1239 cNN[3]->SetFillColor(10);
1240 cNN[3]->SetHighLightColor(10);
1241 gHistNN[3]->DrawCopy("surf1fb");
1242 gPad->SetTheta(30); // default is 30
1243 //gPad->SetPhi(130); // default is 30
1244 gPad->SetPhi(-60); // default is 30
1246 pngName = "CorrelationFunction.Centrality";
1247 pngName += centralityArray[gCentrality-1];
1248 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1249 pngName += ".NegativeNegative.png";
1250 //cNN[3]->SaveAs(pngName.Data());
1252 // if no mixing then divide by convoluted histograms
1255 if(histoTitle.Contains("shuffled")) histoTitle.ReplaceAll("(--) shuffled","(--) convoluted");
1256 else histoTitle.ReplaceAll("(--)","(--) convoluted");
1258 if(rebinEta > 1 || rebinPhi > 1){
1259 gHistNN[2]->Rebin2D(rebinEta,rebinPhi);
1260 gHistNN[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
1262 // normalization to 1 at (0,0) --> Jan Fietes method
1264 Double_t mixedNorm = gHistNN[2]->Integral(gHistNN[2]->GetXaxis()->FindBin(0-10e-5),gHistNN[2]->GetXaxis()->FindBin(0+10e-5),gHistNN[2]->GetNbinsY()/2 + 1,gHistNN[2]->GetNbinsY());
1265 mixedNorm /= 0.5 * gHistNN[2]->GetNbinsY()*(gHistNN[2]->GetXaxis()->FindBin(0.01) - gHistNN[2]->GetXaxis()->FindBin(-0.01) + 1);
1267 // finite bin correction
1268 Double_t binWidthEta = gHistNN[2]->GetXaxis()->GetBinWidth(gHistNN[2]->GetNbinsX());
1269 Double_t maxEta = gHistNN[2]->GetXaxis()->GetBinUpEdge(gHistNN[2]->GetNbinsX());
1271 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
1272 //Printf("Finite bin correction: %f", finiteBinCorrection);
1273 mixedNorm /= finiteBinCorrection;
1275 gHistNN[2]->Scale(1./mixedNorm);
1278 gHistNN[2]->GetYaxis()->SetTitleOffset(1.5);
1279 gHistNN[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
1280 gHistNN[2]->SetTitle(histoTitle.Data());
1281 cNN[2] = new TCanvas("cNN2","",300,200,600,500);
1282 cNN[2]->SetFillColor(10);
1283 cNN[2]->SetHighLightColor(10);
1284 gHistNN[2]->DrawCopy("surf1fb");
1285 gPad->SetTheta(30); // default is 30
1286 //gPad->SetPhi(130); // default is 30
1287 gPad->SetPhi(-60); // default is 30
1289 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
1290 pngName += centralityArray[gCentrality-1];
1291 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1292 pngName += ".NegativeNegative.png";
1293 //cNN[2]->SaveAs(pngName.Data());
1295 //Correlation function (--)
1296 gHistNN[3] = dynamic_cast<TH2D *>(gHistNN[0]->Clone());
1297 gHistNN[3]->Divide(gHistNN[2]);
1298 //gHistNN[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
1300 gHistNN[3]->GetZaxis()->SetTitle("#frac{1}{N_{trig}}#frac{d^{2}N_{assoc}}{d#Delta#eta#Delta#varphi} (rad^{-1})");
1302 gHistNN[3]->GetZaxis()->SetTitle("C_{--}(#Delta#eta,#Delta#varphi)");
1303 //gHistNN[3]->SetTitle("C_{--}(#Delta#eta,#Delta#varphi)");
1304 cNN[3] = new TCanvas("cNN3","",300,300,600,500);
1305 cNN[3]->SetFillColor(10);
1306 cNN[3]->SetHighLightColor(10);
1307 gHistNN[3]->DrawCopy("surf1fb");
1308 gPad->SetTheta(30); // default is 30
1309 //gPad->SetPhi(130); // default is 30
1310 gPad->SetPhi(-60); // default is 30
1312 pngName = "CorrelationFunction.Centrality";
1313 pngName += centralityArray[gCentrality-1];
1314 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
1315 pngName += ".NegativeNegative.png";
1316 //cNN[3]->SaveAs(pngName.Data());
1319 //Write to output file
1320 TString newFileName = "correlationFunction.";
1321 if(eventClass == "Centrality"){
1322 newFileName += Form("Centrality%.1fTo%.1f",psiMin,psiMax);
1323 newFileName += ".PsiAll.PttFrom";
1325 else if(eventClass == "Multiplicity"){
1326 newFileName += Form("Multiplicity%.0fTo%.0f",psiMin,psiMax);
1327 newFileName += ".PsiAll.PttFrom";
1329 else{ // "EventPlane" (default)
1330 newFileName += "Centrality";
1331 newFileName += gCentrality; newFileName += ".Psi";
1332 if((psiMin == -0.5)&&(psiMax == 0.5)) newFileName += "InPlane.Ptt";
1333 else if((psiMin == 0.5)&&(psiMax == 1.5)) newFileName += "Intermediate.Ptt";
1334 else if((psiMin == 1.5)&&(psiMax == 2.5)) newFileName += "OutOfPlane.Ptt";
1335 else if((psiMin == 2.5)&&(psiMax == 3.5)) newFileName += "Rest.PttFrom";
1336 else newFileName += "All.PttFrom";
1338 newFileName += Form("%.1f",ptTriggerMin); newFileName += "To";
1339 newFileName += Form("%.1f",ptTriggerMax); newFileName += "PtaFrom";
1340 newFileName += Form("%.1f",ptAssociatedMin); newFileName += "To";
1341 newFileName += Form("%.1f",ptAssociatedMax);
1344 newFileName += Form("%.1f",psiMin);
1346 newFileName += Form("%.1f",psiMax);
1347 newFileName += ".root";
1349 TFile *newFile = TFile::Open(newFileName.Data(),"recreate");
1350 gHistPN[0]->SetName("gHistPNRaw"); gHistPN[0]->Write();
1351 gHistNP[0]->SetName("gHistNPRaw"); gHistNP[0]->Write();
1352 gHistPP[0]->SetName("gHistPPRaw"); gHistPP[0]->Write();
1353 gHistNN[0]->SetName("gHistNNRaw"); gHistNN[0]->Write();
1354 if(listBFShuffled) {
1355 gHistPN[1]->SetName("gHistPNShuffled"); gHistPN[1]->Write();
1356 gHistNP[1]->SetName("gHistNPShuffled"); gHistNP[1]->Write();
1357 gHistPP[1]->SetName("gHistPPShuffled"); gHistPP[1]->Write();
1358 gHistNN[1]->SetName("gHistNNShuffled"); gHistNN[1]->Write();
1360 if(listBFMixed || (!listBFMixed&&listQA)) {
1361 gHistPN[2]->SetName("gHistPNMixed"); gHistPN[2]->Write();
1362 gHistNP[2]->SetName("gHistNPMixed"); gHistNP[2]->Write();
1363 gHistPP[2]->SetName("gHistPPMixed"); gHistPP[2]->Write();
1364 gHistNN[2]->SetName("gHistNNMixed"); gHistNN[2]->Write();
1366 gHistPN[3]->SetName("gHistPNCorrelationFunctions"); gHistPN[3]->Write();
1367 gHistNP[3]->SetName("gHistNPCorrelationFunctions"); gHistNP[3]->Write();
1368 gHistPP[3]->SetName("gHistPPCorrelationFunctions"); gHistPP[3]->Write();
1369 gHistNN[3]->SetName("gHistNNCorrelationFunctions"); gHistNN[3]->Write();
1374 for(Int_t i = 0; i < 4; i++){
1376 if(!listBFShuffled && i == 1) continue;
1377 if(!listBFMixed && (i == 2 || i == 3)) continue;
1379 if(gHistPP[i]) delete gHistPP[i];
1380 if(gHistPN[i]) delete gHistPN[i];
1381 if(gHistNP[i]) delete gHistNP[i];
1382 if(gHistNN[i]) delete gHistNN[i];
1384 if(cPN[i]) delete cPN[i];
1385 if(cNP[i]) delete cNP[i];
1386 if(cPP[i]) delete cPP[i];
1387 if(cNN[i]) delete cNN[i];
1413 //____________________________________________________________//
1414 void drawCorrelationFunctions(const char* lhcPeriod = "LHC10h",
1415 const char* gCentralityEstimator = "V0M",
1417 const char* gEventPlaneEstimator = "VZERO",
1418 Int_t gCentrality = 1,
1419 Double_t psiMin = -0.5, Double_t psiMax = 3.5,
1420 Double_t vertexZMin = -10.,
1421 Double_t vertexZMax = 10.,
1422 Double_t ptTriggerMin = -1.,
1423 Double_t ptTriggerMax = -1.,
1424 Double_t ptAssociatedMin = -1.,
1425 Double_t ptAssociatedMax = -1.,
1426 Bool_t kFit = kFALSE) {
1427 //Macro that draws the charge dependent correlation functions
1428 //for each centrality bin for the different pT of trigger and
1429 //associated particles
1430 //Author: Panos.Christakoglou@nikhef.nl
1431 TGaxis::SetMaxDigits(3);
1433 //Get the input file
1434 /* TString filename = lhcPeriod;
1435 filename += "/Centrality"; filename += gCentralityEstimator;
1436 filename += "_Bit"; filename += gBit;
1437 filename += "_"; filename += gEventPlaneEstimator;
1438 filename +="/PttFrom";
1439 filename += Form("%.1f",ptTriggerMin); filename += "To";
1440 filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
1441 filename += Form("%.1f",ptAssociatedMin); filename += "To";
1442 filename += Form("%.1f",ptAssociatedMax); */
1444 TString filename = "correlationFunction.Centrality";
1445 filename += gCentrality; filename += ".Psi";
1446 if((psiMin == -0.5)&&(psiMax == 0.5)) filename += "InPlane.Ptt";
1447 else if((psiMin == 0.5)&&(psiMax == 1.5)) filename += "Intermediate.Ptt";
1448 else if((psiMin == 1.5)&&(psiMax == 2.5)) filename += "OutOfPlane.Ptt";
1449 else if((psiMin == 2.5)&&(psiMax == 3.5)) filename += "Rest.Ptt";
1450 else filename += "All.PttFrom";
1451 filename += Form("%.1f",ptTriggerMin); filename += "To";
1452 filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
1453 filename += Form("%.1f",ptAssociatedMin); filename += "To";
1454 filename += Form("%.1f",ptAssociatedMax);
1457 filename += Form("%.1f",psiMin);
1459 filename += Form("%.1f",psiMax);
1460 filename += ".root";
1463 TFile *f = TFile::Open(filename.Data());
1464 if((!f)||(!f->IsOpen())) {
1465 Printf("The file %s is not found. Aborting...",filename);
1471 TString centralityLatex = "Centrality: ";
1472 centralityLatex += centralityArray[gCentrality-1];
1473 centralityLatex += "%";
1476 if((psiMin == -0.5)&&(psiMax == 0.5))
1477 psiLatex = " -7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o}";
1478 else if((psiMin == 0.5)&&(psiMax == 1.5))
1479 psiLatex = " 37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o}";
1480 else if((psiMin == 1.5)&&(psiMax == 2.5))
1481 psiLatex = " 82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o}";
1483 psiLatex = " 0^{o} < #varphi^{t} - #Psi_{2} < 180^{o}";
1485 TString pttLatex = Form("%.1f",ptTriggerMin);
1486 pttLatex += " < p_{T,trig} < "; pttLatex += Form("%.1f",ptTriggerMax);
1487 pttLatex += " GeV/c";
1489 TString ptaLatex = Form("%.1f",ptAssociatedMin);
1490 ptaLatex += " < p_{T,assoc} < "; ptaLatex += Form("%.1f",ptAssociatedMax);
1491 ptaLatex += " GeV/c";
1493 TLatex *latexInfo1 = new TLatex();
1494 latexInfo1->SetNDC();
1495 latexInfo1->SetTextSize(0.045);
1496 latexInfo1->SetTextColor(1);
1500 //============================================================//
1501 //Get the +- correlation function
1502 TH2D *gHistPN = dynamic_cast<TH2D *>(f->Get("gHistPNCorrelationFunctions"));
1503 gHistPN->SetStats(kFALSE);
1504 gHistPN->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
1505 //gHistPN->GetXaxis()->SetRangeUser(-1.4,1.4);
1506 gHistPN->GetXaxis()->CenterTitle();
1507 gHistPN->GetXaxis()->SetTitleOffset(1.2);
1508 gHistPN->GetYaxis()->CenterTitle();
1509 gHistPN->GetYaxis()->SetTitleOffset(1.2);
1510 gHistPN->GetZaxis()->SetTitleOffset(1.5);
1511 TCanvas *cPN = new TCanvas("cPN","",0,0,600,500);
1512 cPN->SetFillColor(10); cPN->SetHighLightColor(10);
1513 cPN->SetLeftMargin(0.15);
1514 gHistPN->DrawCopy("surf1fb");
1516 gPad->SetTheta(30); // default is 30
1517 gPad->SetPhi(-60); // default is 30
1520 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
1521 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
1522 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
1523 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
1525 pngName = "CorrelationFunction.Centrality";
1526 pngName += centralityArray[gCentrality-1];
1528 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
1529 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
1530 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
1531 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
1532 else pngName += "All.PttFrom";
1533 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
1534 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
1535 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
1536 pngName += Form("%.1f",ptAssociatedMax);
1537 pngName += ".PositiveNegative.png";
1538 cPN->SaveAs(pngName.Data());
1540 fitCorrelationFunctions(gCentrality, psiMin, psiMax,vertexZMin, vertexZMax,
1541 ptTriggerMin,ptTriggerMax,
1542 ptAssociatedMin, ptAssociatedMax,gHistPN);
1544 //============================================================//
1545 //Get the -+ correlation function
1546 TH2D *gHistNP = dynamic_cast<TH2D *>(f->Get("gHistNPCorrelationFunctions"));
1547 gHistNP->SetStats(kFALSE);
1548 gHistNP->SetTitle("C_{-+}(#Delta#eta,#Delta#varphi)");
1549 //gHistNP->GetXaxis()->SetRangeUser(-1.4,1.4);
1550 gHistNP->GetXaxis()->CenterTitle();
1551 gHistNP->GetXaxis()->SetTitleOffset(1.2);
1552 gHistNP->GetYaxis()->CenterTitle();
1553 gHistNP->GetYaxis()->SetTitleOffset(1.2);
1554 gHistNP->GetZaxis()->SetTitleOffset(1.5);
1555 TCanvas *cNP = new TCanvas("cNP","",50,50,600,500);
1556 cNP->SetFillColor(10); cNP->SetHighLightColor(10);
1557 cNP->SetLeftMargin(0.15);
1558 gHistNP->DrawCopy("surf1fb");
1560 gPad->SetTheta(30); // default is 30
1561 gPad->SetPhi(-60); // default is 30
1564 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
1565 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
1566 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
1567 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
1569 pngName = "CorrelationFunction.Centrality";
1570 pngName += centralityArray[gCentrality-1];
1572 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
1573 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
1574 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
1575 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
1576 else pngName += "All.PttFrom";
1577 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
1578 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
1579 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
1580 pngName += Form("%.1f",ptAssociatedMax);
1581 pngName += ".NegativePositive.png";
1582 cNP->SaveAs(pngName.Data());
1585 fitCorrelationFunctions(gCentrality, psiMin, psiMax,vertexZMin, vertexZMax,
1586 ptTriggerMin,ptTriggerMax,
1587 ptAssociatedMin, ptAssociatedMax,gHistNP);
1589 //============================================================//
1590 //Get the ++ correlation function
1591 TH2D *gHistPP = dynamic_cast<TH2D *>(f->Get("gHistPPCorrelationFunctions"));
1592 gHistPP->SetStats(kFALSE);
1593 gHistPP->SetTitle("C_{++}(#Delta#eta,#Delta#varphi)");
1594 //gHistPP->GetXaxis()->SetRangeUser(-1.4,1.4);
1595 gHistPP->GetXaxis()->CenterTitle();
1596 gHistPP->GetXaxis()->SetTitleOffset(1.2);
1597 gHistPP->GetYaxis()->CenterTitle();
1598 gHistPP->GetYaxis()->SetTitleOffset(1.2);
1599 gHistPP->GetZaxis()->SetTitleOffset(1.5);
1600 TCanvas *cPP = new TCanvas("cPP","",100,100,600,500);
1601 cPP->SetFillColor(10); cPP->SetHighLightColor(10);
1602 cPP->SetLeftMargin(0.15);
1603 gHistPP->DrawCopy("surf1fb");
1605 gPad->SetTheta(30); // default is 30
1606 gPad->SetPhi(-60); // default is 30
1609 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
1610 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
1611 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
1612 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
1614 pngName = "CorrelationFunction.Centrality";
1615 pngName += centralityArray[gCentrality-1];
1617 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
1618 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
1619 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
1620 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
1621 else pngName += "All.PttFrom";
1622 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
1623 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
1624 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
1625 pngName += Form("%.1f",ptAssociatedMax);
1626 pngName += ".PositivePositive.png";
1627 cPP->SaveAs(pngName.Data());
1630 fitCorrelationFunctions(gCentrality, psiMin, psiMax,vertexZMin, vertexZMax,
1631 ptTriggerMin,ptTriggerMax,
1632 ptAssociatedMin, ptAssociatedMax,gHistPP);
1634 //============================================================//
1635 //Get the -- correlation function
1636 TH2D *gHistNN = dynamic_cast<TH2D *>(f->Get("gHistNNCorrelationFunctions"));
1637 gHistNN->SetStats(kFALSE);
1638 gHistNN->SetTitle("C_{--}(#Delta#eta,#Delta#varphi)");
1639 //gHistNN->GetXaxis()->SetRangeUser(-1.4,1.4);
1640 gHistNN->GetXaxis()->CenterTitle();
1641 gHistNN->GetXaxis()->SetTitleOffset(1.2);
1642 gHistNN->GetYaxis()->CenterTitle();
1643 gHistNN->GetYaxis()->SetTitleOffset(1.2);
1644 gHistNN->GetZaxis()->SetTitleOffset(1.5);
1645 TCanvas *cNN = new TCanvas("cNN","",150,150,600,500);
1646 cNN->SetFillColor(10); cNN->SetHighLightColor(10);
1647 cNN->SetLeftMargin(0.15);
1648 gHistNN->DrawCopy("surf1fb");
1650 gPad->SetTheta(30); // default is 30
1651 gPad->SetPhi(-60); // default is 30
1654 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
1655 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
1656 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
1657 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
1659 pngName = "CorrelationFunction.Centrality";
1660 pngName += centralityArray[gCentrality-1];
1662 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
1663 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
1664 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
1665 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
1666 else pngName += "All.PttFrom";
1667 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
1668 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
1669 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
1670 pngName += Form("%.1f",ptAssociatedMax);
1671 pngName += ".NegativeNegative.png";
1672 cNN->SaveAs(pngName.Data());
1675 fitCorrelationFunctions(gCentrality, psiMin, psiMax,vertexZMin, vertexZMax,
1676 ptTriggerMin,ptTriggerMax,
1677 ptAssociatedMin, ptAssociatedMax,gHistNN);
1680 //____________________________________________________________//
1681 void drawProjections(Bool_t kProjectInEta = kFALSE,
1684 Int_t gCentrality = 1,
1685 Double_t psiMin = -0.5,
1686 Double_t psiMax = 3.5,
1687 Double_t ptTriggerMin = -1.,
1688 Double_t ptTriggerMax = -1.,
1689 Double_t ptAssociatedMin = -1.,
1690 Double_t ptAssociatedMax = -1.,
1691 Bool_t kUseZYAM = kFALSE,
1692 TString eventClass = "Centrality") {
1693 //Macro that draws the charge dependent correlation functions PROJECTIONS
1694 //for each centrality bin for the different pT of trigger and
1695 //associated particles
1696 TGaxis::SetMaxDigits(3);
1698 //Get the input file
1699 /*TString filename = lhcPeriod;
1700 filename += "/Centrality"; filename += gCentralityEstimator;
1701 filename += "_Bit"; filename += gBit;
1702 filename += "_"; filename += gEventPlaneEstimator;
1703 filename +="/PttFrom";
1704 filename += Form("%.1f",ptTriggerMin); filename += "To";
1705 filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
1706 filename += Form("%.1f",ptAssociatedMin); filename += "To";
1707 filename += Form("%.1f",ptAssociatedMax); */
1709 TString filename = "correlationFunction.";
1710 if(eventClass == "Centrality"){
1711 filename += Form("Centrality%.1fTo%.1f",psiMin,psiMax);
1712 filename += ".PsiAll.PttFrom";
1714 else if(eventClass == "Multiplicity"){
1715 filename += Form("Multiplicity%.0fTo%.0f",psiMin,psiMax);
1716 filename += ".PsiAll.PttFrom";
1718 else{ // "EventPlane" (default)
1719 filename += "Centrality";
1720 filename += gCentrality; filename += ".Psi";
1721 if((psiMin == -0.5)&&(psiMax == 0.5)) filename += "InPlane.Ptt";
1722 else if((psiMin == 0.5)&&(psiMax == 1.5)) filename += "Intermediate.Ptt";
1723 else if((psiMin == 1.5)&&(psiMax == 2.5)) filename += "OutOfPlane.Ptt";
1724 else if((psiMin == 2.5)&&(psiMax == 3.5)) filename += "Rest.PttFrom";
1725 else filename += "All.PttFrom";
1727 filename += Form("%.1f",ptTriggerMin); filename += "To";
1728 filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
1729 filename += Form("%.1f",ptAssociatedMin); filename += "To";
1730 filename += Form("%.1f",ptAssociatedMax);
1731 //if(k2pMethod) filename += "_2pMethod";
1734 filename += Form("%.1f",psiMin);
1736 filename += Form("%.1f",psiMax);
1738 filename += ".root";
1741 TFile *f = TFile::Open(filename.Data());
1742 if((!f)||(!f->IsOpen())) {
1743 Printf("The file %s is not found. Aborting...",filename);
1749 TString centralityLatex = "Centrality: ";
1750 if(eventClass == "Centrality")
1751 centralityLatex += Form("%.0f - %.0f",psiMin,psiMax);
1753 centralityLatex += centralityArray[gCentrality-1];
1754 centralityLatex += " %";
1757 if((psiMin == -0.5)&&(psiMax == 0.5))
1758 psiLatex = " -7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o}";
1759 else if((psiMin == 0.5)&&(psiMax == 1.5))
1760 psiLatex = " 37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o}";
1761 else if((psiMin == 1.5)&&(psiMax == 2.5))
1762 psiLatex = " 82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o}";
1764 psiLatex = " 0^{o} < #varphi^{t} - #Psi_{2} < 180^{o}";
1766 TString pttLatex = Form("%.1f",ptTriggerMin);
1767 pttLatex += " < p_{T,trig} < "; pttLatex += Form("%.1f",ptTriggerMax);
1768 pttLatex += " GeV/c";
1770 TString ptaLatex = Form("%.1f",ptAssociatedMin);
1771 ptaLatex += " < p_{T,assoc} < "; ptaLatex += Form("%.1f",ptAssociatedMax);
1772 ptaLatex += " GeV/c";
1774 TLatex *latexInfo1 = new TLatex();
1775 latexInfo1->SetNDC();
1776 latexInfo1->SetTextSize(0.045);
1777 latexInfo1->SetTextColor(1);
1781 //============================================================//
1782 //Get the +- correlation function
1783 TH2D *gHistPN = dynamic_cast<TH2D *>(f->Get("gHistPNCorrelationFunctions"));
1784 gHistPN->SetStats(kFALSE);
1785 gHistPN->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
1786 //gHistPN->GetXaxis()->SetRangeUser(-1.4,1.4);
1787 gHistPN->GetXaxis()->CenterTitle();
1788 gHistPN->GetXaxis()->SetTitleOffset(1.2);
1789 gHistPN->GetYaxis()->CenterTitle();
1790 gHistPN->GetYaxis()->SetTitleOffset(1.2);
1791 gHistPN->GetZaxis()->SetTitleOffset(1.5);
1792 TCanvas *cPN = new TCanvas("cPN","",0,0,600,500);
1793 cPN->SetFillColor(10);
1794 cPN->SetHighLightColor(10);
1795 cPN->SetLeftMargin(0.15);
1797 //================//
1798 TH1D* gHistPNprojection = 0x0;
1800 Double_t gError = 0.0;
1802 //projection in delta eta
1804 gHistPNprojection = new TH1D("gHistPNprojection","",gHistPN->GetNbinsX(),gHistPN->GetXaxis()->GetXmin(),gHistPN->GetXaxis()->GetXmax());
1805 for(Int_t iBinX = 1; iBinX <= gHistPN->GetNbinsX(); iBinX++) {
1806 sum = 0.; gError = 0.0; nCounter = 0;
1807 for(Int_t iBinY = binMin; iBinY <= binMax; iBinY++) {
1808 sum += gHistPN->GetBinContent(iBinX,iBinY);
1809 if(gHistPN->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
1810 Double_t exy = gHistPN->GetCellError(iBinX,iBinY);
1815 gError = TMath::Sqrt(gError)/nCounter;
1817 gHistPNprojection->SetBinContent(iBinX,sum);
1818 gHistPNprojection->SetBinError(iBinX,gError);
1820 //gHistPNprojection->GetXaxis()->SetRangeUser(-1.4,1.4);
1822 gHistPNprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#eta} - b_{ZYAM}");
1824 gHistPNprojection->GetYaxis()->SetTitle("C_{+-}(#Delta#eta)");
1825 gHistPNprojection->GetXaxis()->SetTitle("#Delta#eta");
1826 }//projection in delta eta
1827 //projection in delta phi
1829 gHistPNprojection = new TH1D("gHistPNprojection","",gHistPN->GetNbinsY(),gHistPN->GetYaxis()->GetXmin(),gHistPN->GetYaxis()->GetXmax());
1830 for(Int_t iBinY = 1; iBinY <= gHistPN->GetNbinsY(); iBinY++) {
1831 sum = 0.; gError = 0.0; nCounter = 0;
1832 for(Int_t iBinX = binMin; iBinX <= binMax; iBinX++) {
1833 //for(Int_t iBinX = 1; iBinX <= gHistPN->GetNbinsX(); iBinX++) {
1834 sum += gHistPN->GetBinContent(iBinX,iBinY);
1835 if(gHistPN->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
1836 Double_t exy = gHistPN->GetCellError(iBinX,iBinY);
1841 gError = TMath::Sqrt(gError)/nCounter;
1843 gHistPNprojection->SetBinContent(iBinY,sum);
1844 gHistPNprojection->SetBinError(iBinY,gError);
1847 gHistPNprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#varphi} - b_{ZYAM} (rad^{-1})");
1849 gHistPNprojection->GetYaxis()->SetTitle("C_{+-}(#Delta#varphi)");
1850 gHistPNprojection->GetXaxis()->SetTitle("#Delta#varphi (rad)");
1855 Double_t reference = gHistPNprojection->GetBinContent(gHistPNprojection->GetMinimumBin());
1856 for(Int_t iBinX = 1; iBinX <= gHistPNprojection->GetNbinsX(); iBinX++)
1857 gHistPNprojection->SetBinContent(iBinX,gHistPNprojection->GetBinContent(iBinX) - reference);
1860 gHistPNprojection->GetYaxis()->SetTitleOffset(1.5);
1861 gHistPNprojection->SetMarkerStyle(20);
1862 gHistPNprojection->SetStats(kFALSE);
1863 gHistPNprojection->DrawCopy("E");
1864 //=================//
1866 gPad->SetTheta(30); // default is 30
1867 gPad->SetPhi(-60); // default is 30
1870 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
1871 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
1872 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
1873 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
1876 if(kProjectInEta) pngName.ReplaceAll(".root","_DeltaEtaProjection");
1877 else pngName.ReplaceAll(".root","_DeltaPhiProjection");
1878 pngName += ".PositiveNegative.png";
1879 cPN->SaveAs(pngName.Data());
1881 //============================================================//
1882 //Get the -+ correlation function
1883 TH2D *gHistNP = dynamic_cast<TH2D *>(f->Get("gHistNPCorrelationFunctions"));
1884 gHistNP->SetStats(kFALSE);
1885 gHistNP->SetTitle("C_{-+}(#Delta#eta,#Delta#varphi)");
1886 //gHistNP->GetXaxis()->SetRangeUser(-1.4,1.4);
1887 gHistNP->GetXaxis()->CenterTitle();
1888 gHistNP->GetXaxis()->SetTitleOffset(1.2);
1889 gHistNP->GetYaxis()->CenterTitle();
1890 gHistNP->GetYaxis()->SetTitleOffset(1.2);
1891 gHistNP->GetZaxis()->SetTitleOffset(1.5);
1892 TCanvas *cNP = new TCanvas("cNP","",50,50,600,500);
1893 cNP->SetFillColor(10); cNP->SetHighLightColor(10);
1894 cNP->SetLeftMargin(0.15);
1896 //================//
1897 TH1D* gHistNPprojection = 0x0;
1899 Double_t gError = 0.0;
1902 gHistNPprojection = new TH1D("gHistNPprojection","",gHistNP->GetNbinsX(),gHistNP->GetXaxis()->GetXmin(),gHistNP->GetXaxis()->GetXmax());
1903 for(Int_t iBinX = 1; iBinX <= gHistNP->GetNbinsX(); iBinX++) {
1904 sum = 0.; gError = 0.0; nCounter = 0;
1905 for(Int_t iBinY = binMin; iBinY <= binMax; iBinY++) {
1906 //for(Int_t iBinY = 1; iBinY <= gHistNP->GetNbinsY(); iBinY++) {
1907 sum += gHistNP->GetBinContent(iBinX,iBinY);
1908 if(gHistNP->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
1909 Double_t exy = gHistNP->GetCellError(iBinX,iBinY);
1914 gError = TMath::Sqrt(gError)/nCounter;
1916 gHistNPprojection->SetBinContent(iBinX,sum);
1917 gHistNPprojection->SetBinError(iBinX,gError);
1919 //gHistNPprojection->GetXaxis()->SetRangeUser(-1.4,1.4);
1921 gHistNPprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#eta} - b_{ZYAM}");
1923 gHistNPprojection->GetYaxis()->SetTitle("C_{-+}(#Delta#eta)");
1924 gHistNPprojection->GetXaxis()->SetTitle("#Delta#eta");
1927 gHistNPprojection = new TH1D("gHistNPprojection","",gHistNP->GetNbinsY(),gHistNP->GetYaxis()->GetXmin(),gHistNP->GetYaxis()->GetXmax());
1928 for(Int_t iBinY = 1; iBinY <= gHistNP->GetNbinsY(); iBinY++) {
1929 sum = 0.; gError = 0.0; nCounter = 0;
1930 for(Int_t iBinX = binMin; iBinX <= binMax; iBinX++) {
1931 //for(Int_t iBinX = 1; iBinX <= gHistNP->GetNbinsX(); iBinX++) {
1932 sum += gHistNP->GetBinContent(iBinX,iBinY);
1933 if(gHistNP->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
1934 Double_t exy = gHistNP->GetCellError(iBinX,iBinY);
1939 gError = TMath::Sqrt(gError)/nCounter;
1941 gHistNPprojection->SetBinContent(iBinY,sum);
1942 gHistNPprojection->SetBinError(iBinY,gError);
1945 gHistNPprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#varphi} - b_{ZYAM} (rad^{-1})");
1947 gHistNPprojection->GetYaxis()->SetTitle("C_{-+}(#Delta#varphi)");
1948 gHistNPprojection->GetXaxis()->SetTitle("#Delta#varphi (rad)");
1952 Double_t reference = gHistNPprojection->GetBinContent(gHistNPprojection->GetMinimumBin());
1953 for(Int_t iBinX = 1; iBinX <= gHistNPprojection->GetNbinsX(); iBinX++)
1954 gHistNPprojection->SetBinContent(iBinX,gHistNPprojection->GetBinContent(iBinX) - reference);
1957 gHistNPprojection->GetYaxis()->SetTitleOffset(1.5);
1958 gHistNPprojection->SetMarkerStyle(20);
1959 gHistNPprojection->SetStats(kFALSE);
1960 gHistNPprojection->DrawCopy("E");
1961 //================//
1963 gPad->SetTheta(30); // default is 30
1964 gPad->SetPhi(-60); // default is 30
1967 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
1968 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
1969 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
1970 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
1973 if(kProjectInEta) pngName.ReplaceAll(".root","_DeltaEtaProjection");
1974 else pngName.ReplaceAll(".root","_DeltaPhiProjection");
1975 pngName += ".NegativePositive.png";
1976 cNP->SaveAs(pngName.Data());
1978 //============================================================//
1979 //Get the ++ correlation function
1980 TH2D *gHistPP = dynamic_cast<TH2D *>(f->Get("gHistPPCorrelationFunctions"));
1981 gHistPP->SetStats(kFALSE);
1982 gHistPP->SetTitle("C_{++}(#Delta#eta,#Delta#varphi)");
1983 //gHistPP->GetXaxis()->SetRangeUser(-1.4,1.4);
1984 gHistPP->GetXaxis()->CenterTitle();
1985 gHistPP->GetXaxis()->SetTitleOffset(1.2);
1986 gHistPP->GetYaxis()->CenterTitle();
1987 gHistPP->GetYaxis()->SetTitleOffset(1.2);
1988 gHistPP->GetZaxis()->SetTitleOffset(1.5);
1989 TCanvas *cPP = new TCanvas("cPP","",100,100,600,500);
1990 cPP->SetFillColor(10); cPP->SetHighLightColor(10);
1991 cPP->SetLeftMargin(0.15);
1993 //=================//
1994 TH1D* gHistPPprojection = 0x0;
1996 Double_t gError = 0.0;
1999 gHistPPprojection = new TH1D("gHistPPprojection","",gHistPP->GetNbinsX(),gHistPP->GetXaxis()->GetXmin(),gHistPP->GetXaxis()->GetXmax());
2000 for(Int_t iBinX = 1; iBinX <= gHistPP->GetNbinsX(); iBinX++) {
2001 sum = 0.; gError = 0.0; nCounter = 0;
2002 for(Int_t iBinY = binMin; iBinY <= binMax; iBinY++) {
2003 //for(Int_t iBinY = 1; iBinY <= gHistPP->GetNbinsY(); iBinY++) {
2004 sum += gHistPP->GetBinContent(iBinX,iBinY);
2005 if(gHistPP->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
2006 Double_t exy = gHistPP->GetCellError(iBinX,iBinY);
2011 gError = TMath::Sqrt(gError)/nCounter;
2013 gHistPPprojection->SetBinContent(iBinX,sum);
2014 gHistPPprojection->SetBinError(iBinX,gError);
2016 //gHistPPprojection->GetXaxis()->SetRangeUser(-1.4,1.4);
2018 gHistPPprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#eta} - b_{ZYAM}");
2020 gHistPPprojection->GetYaxis()->SetTitle("C_{++}(#Delta#eta)");
2021 gHistPPprojection->GetXaxis()->SetTitle("#Delta#eta");
2024 gHistPPprojection = new TH1D("gHistPPprojection","",gHistPP->GetNbinsY(),gHistPP->GetYaxis()->GetXmin(),gHistPP->GetYaxis()->GetXmax());
2025 for(Int_t iBinY = 1; iBinY <= gHistPP->GetNbinsY(); iBinY++) {
2026 sum = 0.; gError = 0.0; nCounter = 0;
2027 for(Int_t iBinX = binMin; iBinX <= binMax; iBinX++) {
2028 //for(Int_t iBinX = 1; iBinX <= gHistPP->GetNbinsX(); iBinX++) {
2029 sum += gHistPP->GetBinContent(iBinX,iBinY);
2030 if(gHistPP->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
2031 Double_t exy = gHistPP->GetCellError(iBinX,iBinY);
2036 gError = TMath::Sqrt(gError)/nCounter;
2038 gHistPPprojection->SetBinContent(iBinY,sum);
2039 gHistPPprojection->SetBinError(iBinY,gError);
2042 gHistPPprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#varphi} - b_{ZYAM} (rad^{-1})");
2044 gHistPPprojection->GetYaxis()->SetTitle("C_{++}(#Delta#varphi)");
2045 gHistPPprojection->GetXaxis()->SetTitle("#Delta#varphi (rad)");
2049 Double_t reference = gHistPPprojection->GetBinContent(gHistPPprojection->GetMinimumBin());
2050 for(Int_t iBinX = 1; iBinX <= gHistPPprojection->GetNbinsX(); iBinX++)
2051 gHistPPprojection->SetBinContent(iBinX,gHistPPprojection->GetBinContent(iBinX) - reference);
2054 gHistPPprojection->GetYaxis()->SetTitleOffset(1.5);
2055 gHistPPprojection->SetMarkerStyle(20);
2056 gHistPPprojection->SetStats(kFALSE);
2057 gHistPPprojection->DrawCopy("E");
2058 //================//
2060 gPad->SetTheta(30); // default is 30
2061 gPad->SetPhi(-60); // default is 30
2064 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
2065 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
2066 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
2067 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
2070 if(kProjectInEta) pngName.ReplaceAll(".root","_DeltaEtaProjection");
2071 else pngName.ReplaceAll(".root","_DeltaPhiProjection");
2072 pngName += ".PositivePositive.png";
2073 cPP->SaveAs(pngName.Data());
2075 //============================================================//
2076 //Get the -- correlation function
2077 TH2D *gHistNN = dynamic_cast<TH2D *>(f->Get("gHistNNCorrelationFunctions"));
2078 gHistNN->SetStats(kFALSE);
2079 gHistNN->SetTitle("C_{--}(#Delta#eta,#Delta#varphi)");
2080 //gHistNN->GetXaxis()->SetRangeUser(-1.4,1.4);
2081 gHistNN->GetXaxis()->CenterTitle();
2082 gHistNN->GetXaxis()->SetTitleOffset(1.2);
2083 gHistNN->GetYaxis()->CenterTitle();
2084 gHistNN->GetYaxis()->SetTitleOffset(1.2);
2085 gHistNN->GetZaxis()->SetTitleOffset(1.5);
2086 TCanvas *cNN = new TCanvas("cNN","",150,150,600,500);
2087 cNN->SetFillColor(10); cNN->SetHighLightColor(10);
2088 cNN->SetLeftMargin(0.15);
2090 //=================//
2091 TH1D* gHistNNprojection = 0x0;
2093 Double_t gError = 0.0;
2096 gHistNNprojection = new TH1D("gHistNNprojection","",gHistNN->GetNbinsX(),gHistNN->GetXaxis()->GetXmin(),gHistNN->GetXaxis()->GetXmax());
2097 for(Int_t iBinX = 1; iBinX <= gHistNN->GetNbinsX(); iBinX++) {
2098 sum = 0.; gError = 0.0; nCounter = 0;
2099 for(Int_t iBinY = binMin; iBinY <= binMax; iBinY++) {
2100 //for(Int_t iBinY = 1; iBinY <= gHistNN->GetNbinsY(); iBinY++) {
2101 sum += gHistNN->GetBinContent(iBinX,iBinY);
2102 if(gHistNN->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
2103 Double_t exy = gHistNN->GetCellError(iBinX,iBinY);
2108 gError = TMath::Sqrt(gError)/nCounter;
2110 gHistNNprojection->SetBinContent(iBinX,sum);
2111 gHistNNprojection->SetBinError(iBinX,gError);
2113 //gHistNNprojection->GetXaxis()->SetRangeUser(-1.4,1.4);
2115 gHistNNprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#eta} - b_{ZYAM}");
2117 gHistNNprojection->GetYaxis()->SetTitle("C_{--}(#Delta#eta)");
2118 gHistNNprojection->GetXaxis()->SetTitle("#Delta#eta");
2121 gHistNNprojection = new TH1D("gHistNNprojection","",gHistNN->GetNbinsY(),gHistNN->GetYaxis()->GetXmin(),gHistNN->GetYaxis()->GetXmax());
2122 for(Int_t iBinY = 1; iBinY <= gHistNN->GetNbinsY(); iBinY++) {
2123 sum = 0.; gError = 0.0; nCounter = 0;
2124 for(Int_t iBinX = binMin; iBinX <= binMax; iBinX++) {
2125 //for(Int_t iBinX = 1; iBinX <= gHistNN->GetNbinsX(); iBinX++) {
2126 sum += gHistNN->GetBinContent(iBinX,iBinY);
2127 if(gHistNN->GetBinContent(iBinX,iBinY) != 0.) nCounter += 1;
2128 Double_t exy = gHistNN->GetCellError(iBinX,iBinY);
2133 gError = TMath::Sqrt(gError)/nCounter;
2135 gHistNNprojection->SetBinContent(iBinY,sum);
2136 gHistNNprojection->SetBinError(iBinY,gError);
2139 gHistNNprojection->GetYaxis()->SetTitle("#frac{1}{N_{trig}}#frac{dN_{assoc}}{#Delta#varphi} - b_{ZYAM} (rad^{-1})");
2141 gHistNNprojection->GetYaxis()->SetTitle("C_{--}(#Delta#varphi)");
2142 gHistNNprojection->GetXaxis()->SetTitle("#Delta#varphi (rad)");
2146 Double_t reference = gHistNNprojection->GetBinContent(gHistNNprojection->GetMinimumBin());
2147 for(Int_t iBinX = 1; iBinX <= gHistNNprojection->GetNbinsX(); iBinX++)
2148 gHistNNprojection->SetBinContent(iBinX,gHistNNprojection->GetBinContent(iBinX) - reference);
2151 gHistNNprojection->GetYaxis()->SetTitleOffset(1.5);
2152 gHistNNprojection->SetMarkerStyle(20);
2153 gHistNNprojection->SetStats(kFALSE);
2154 gHistNNprojection->DrawCopy("E");
2155 //=================//
2157 gPad->SetTheta(30); // default is 30
2158 gPad->SetPhi(-60); // default is 30
2161 latexInfo1->DrawLatex(0.6,0.95,centralityLatex.Data());
2162 latexInfo1->DrawLatex(0.6,0.89,psiLatex.Data());
2163 latexInfo1->DrawLatex(0.6,0.83,pttLatex.Data());
2164 latexInfo1->DrawLatex(0.6,0.77,ptaLatex.Data());
2167 if(kProjectInEta) pngName.ReplaceAll(".root","_DeltaEtaProjection");
2168 else pngName.ReplaceAll(".root","_DeltaPhiProjection");
2169 pngName += ".NegativeNegative.png";
2170 cNN->SaveAs(pngName.Data());
2172 TString outFileName = filename;
2173 if(kProjectInEta) outFileName.ReplaceAll(".root","_DeltaEtaProjection.root");
2174 else outFileName.ReplaceAll(".root","_DeltaPhiProjection.root");
2175 TFile *fProjection = TFile::Open(outFileName.Data(),"recreate");
2176 gHistNPprojection->Write();
2177 gHistPNprojection->Write();
2178 gHistNNprojection->Write();
2179 gHistPPprojection->Write();
2180 fProjection->Close();
2183 //____________________________________________________________//
2184 void fitCorrelationFunctions(Int_t gCentrality = 1,
2185 Double_t psiMin = -0.5, Double_t psiMax = 3.5,
2186 Double_t vertexZMin = -10.,Double_t vertexZMax = 10.,
2187 Double_t ptTriggerMin = -1.,
2188 Double_t ptTriggerMax = -1.,
2189 Double_t ptAssociatedMin = -1.,
2190 Double_t ptAssociatedMax = -1.,
2193 cout<<"FITTING FUNCTION"<<endl;
2195 //near side peak: [1]*TMath::Exp(-TMath::Power((0.5*TMath::Power((x/[2]),2)+0.5*TMath::Power((y/[3]),2)),[4]))
2196 //away side ridge: [5]*TMath::Exp(-TMath::Power((0.5*TMath::Power(((y-TMath::Pi())/[6]),2)),[7]))
2197 //longitudinal ridge: [8]*TMath::Exp(-TMath::Power((0.5*TMath::Power((x/[9]),2)),[10]))
2198 //wing structures: [11]*TMath::Power(x,2)
2199 //flow contribution (v1 up to v4): 2.*([12]*TMath::Cos(y) + [13]*TMath::Cos(2.*y) + [14]*TMath::Cos(3.*y) + [15]*TMath::Cos(4.*y))
2200 TF2 *gFitFunction = new TF2("gFitFunction","[0]+[1]*TMath::Exp(-TMath::Power((0.5*TMath::Power((x/[2]),2)+0.5*TMath::Power((y/[3]),2)),[4]))+[5]*TMath::Exp(-TMath::Power((0.5*TMath::Power(((y-TMath::Pi())/[6]),2)),[7]))+[8]*TMath::Exp(-TMath::Power((0.5*TMath::Power(((x+[17])/[9]),2)),[10]))+[8]*TMath::Exp(-TMath::Power((0.5*TMath::Power(((x-[17])/[9]),2)),[10]))+[11]*TMath::Power(x,2)+2.*[12]*([13]*TMath::Cos(y) + [14]*TMath::Cos(2.*y) + [15]*TMath::Cos(3.*y) + [16]*TMath::Cos(4.*y))",-2.0,2.0,-TMath::Pi()/2.,3.*TMath::Pi()/2.);
2201 gFitFunction->SetName("gFitFunction");
2205 gFitFunction->SetParName(0,"N1");
2207 gFitFunction->SetParName(1,"N_{near side}");gFitFunction->FixParameter(1,0.0);
2208 gFitFunction->SetParName(2,"Sigma_{near side}(delta eta)"); gFitFunction->FixParameter(2,0.0);
2209 gFitFunction->SetParName(3,"Sigma_{near side}(delta phi)"); gFitFunction->FixParameter(3,0.0);
2210 gFitFunction->SetParName(4,"Exponent_{near side}"); gFitFunction->FixParameter(4,1.0);
2212 gFitFunction->SetParName(5,"N_{away side}"); gFitFunction->FixParameter(5,0.0);
2213 gFitFunction->SetParName(6,"Sigma_{away side}(delta phi)"); gFitFunction->FixParameter(6,0.0);
2214 gFitFunction->SetParName(7,"Exponent_{away side}"); gFitFunction->FixParameter(7,1.0);
2215 //longitudinal ridge
2216 gFitFunction->SetParName(8,"N_{long. ridge}"); gFitFunction->SetParameter(8,0.05);//
2217 gFitFunction->FixParameter(8,0.0);
2218 gFitFunction->SetParName(9,"Sigma_{long. ridge}(delta eta)"); gFitFunction->FixParameter(9,0.0);
2219 gFitFunction->SetParName(10,"Exponent_{long. ridge}"); gFitFunction->FixParameter(10,1.0);
2221 gFitFunction->SetParName(11,"N_{wing}"); gFitFunction->FixParameter(11,0.0);
2223 gFitFunction->SetParName(12,"N_{flow}"); gFitFunction->SetParameter(12,0.2);gFitFunction->SetParLimits(12,0.0,10);
2224 gFitFunction->SetParName(13,"V1"); gFitFunction->SetParameter(13,0.005);gFitFunction->SetParLimits(13,0.0,10);
2225 gFitFunction->SetParName(14,"V2"); gFitFunction->SetParameter(14,0.1);gFitFunction->SetParLimits(14,0.0,10);
2226 gFitFunction->SetParName(15,"V3"); gFitFunction->SetParameter(15,0.05);gFitFunction->SetParLimits(15,0.0,10);
2227 gFitFunction->SetParName(16,"V4"); gFitFunction->SetParameter(16,0.005);gFitFunction->SetParLimits(16,0.0,10);
2228 gFitFunction->SetParName(17,"Offset"); gFitFunction->FixParameter(17,0.0);
2237 //Fitting the correlation function (first the edges to extract flow)
2238 gHist->Fit("gFitFunction","nm","",1.0,1.6);
2240 fNV += gFitFunction->GetParameter(12);
2241 fV1 += gFitFunction->GetParameter(13);
2242 fV2 += gFitFunction->GetParameter(14);
2243 fV3 += gFitFunction->GetParameter(15);
2244 fV4 += gFitFunction->GetParameter(16);
2246 gHist->Fit("gFitFunction","nm","",-1.6,-1.0);
2248 fNV += gFitFunction->GetParameter(12);
2249 fV1 += gFitFunction->GetParameter(13);
2250 fV2 += gFitFunction->GetParameter(14);
2251 fV3 += gFitFunction->GetParameter(15);
2252 fV4 += gFitFunction->GetParameter(16);
2254 // Now fit the whole with fixed flow
2255 gFitFunction->FixParameter(12,fNV/2.);
2256 gFitFunction->FixParameter(13,fV1/2.);
2257 gFitFunction->FixParameter(14,fV2/2.);
2258 gFitFunction->FixParameter(15,fV3/2.);
2259 gFitFunction->FixParameter(16,fV4/2.);
2261 gFitFunction->ReleaseParameter(0);gFitFunction->SetParameter(0,1.0);
2262 gFitFunction->ReleaseParameter(1);gFitFunction->SetParameter(1,0.3);
2263 gFitFunction->ReleaseParameter(2);gFitFunction->SetParameter(2,0.3);gFitFunction->SetParLimits(2,0.05,0.7);
2264 gFitFunction->ReleaseParameter(3);gFitFunction->SetParameter(3,0.3);gFitFunction->SetParLimits(3,0.05,1.7);
2265 //gFitFunction->ReleaseParameter(4);gFitFunction->SetParameter(4,1.0);gFitFunction->SetParLimits(4,0.0,2.0);
2266 gFitFunction->ReleaseParameter(5);gFitFunction->SetParameter(5,1.0);//gFitFunction->SetParLimits(5,0.0,10);
2267 gFitFunction->ReleaseParameter(6);gFitFunction->SetParameter(6,0.5);//gFitFunction->SetParLimits(6,0.0,10);
2268 //gFitFunction->ReleaseParameter(7);gFitFunction->SetParameter(7,1.0);gFitFunction->SetParLimits(7,0.0,2.0);
2269 //gFitFunction->ReleaseParameter(8);gFitFunction->SetParameter(8,0.05);
2270 //gFitFunction->ReleaseParameter(9);gFitFunction->SetParameter(9,0.6);gFitFunction->SetParLimits(9,0.1,10.0);
2271 //gFitFunction->ReleaseParameter(10);gFitFunction->SetParameter(10,1.0);gFitFunction->SetParLimits(10,0.0,2.0);
2272 gFitFunction->ReleaseParameter(17);gFitFunction->SetParameter(17,0.7);gFitFunction->SetParLimits(17,0.0,0.9);
2274 gHist->Fit("gFitFunction","nm");
2277 //Cloning the histogram
2278 TString histoName = gHist->GetName(); histoName += "Fit";
2279 TH2D *gHistFit = new TH2D(histoName.Data(),";#Delta#eta;#Delta#varphi (rad);C(#Delta#eta,#Delta#varphi)",gHist->GetNbinsX(),gHist->GetXaxis()->GetXmin(),gHist->GetXaxis()->GetXmax(),gHist->GetNbinsY(),gHist->GetYaxis()->GetXmin(),gHist->GetYaxis()->GetXmax());
2280 TH2D *gHistResidual = dynamic_cast<TH2D *>(gHist->Clone());
2281 gHistResidual->SetName("gHistResidual");
2282 gHistResidual->Sumw2();
2284 for(Int_t iBinDeltaEta = 1; iBinDeltaEta <= gHist->GetNbinsX(); iBinDeltaEta++) {
2285 for(Int_t iBinDeltaPhi = 1; iBinDeltaPhi <= gHist->GetNbinsY(); iBinDeltaPhi++) {
2286 gHistFit->SetBinContent(iBinDeltaEta,iBinDeltaPhi,gFitFunction->Eval(gHist->GetXaxis()->GetBinCenter(iBinDeltaEta),gHist->GetYaxis()->GetBinCenter(iBinDeltaPhi)));
2289 gHistResidual->Add(gHistFit,-1);
2291 //Write to output file
2292 TString newFileName = "correlationFunctionFit";
2293 if(histoName.Contains("PN")) newFileName += "PN";
2294 else if(histoName.Contains("NP")) newFileName += "NP";
2295 else if(histoName.Contains("PP")) newFileName += "PP";
2296 else if(histoName.Contains("NN")) newFileName += "NN";
2297 newFileName += ".Centrality";
2298 newFileName += gCentrality; newFileName += ".Psi";
2299 if((psiMin == -0.5)&&(psiMax == 0.5)) newFileName += "InPlane.Ptt";
2300 else if((psiMin == 0.5)&&(psiMax == 1.5)) newFileName += "Intermediate.Ptt";
2301 else if((psiMin == 1.5)&&(psiMax == 2.5)) newFileName += "OutOfPlane.Ptt";
2302 else if((psiMin == 2.5)&&(psiMax == 3.5)) newFileName += "Rest.PttFrom";
2303 else newFileName += "All.PttFrom";
2304 newFileName += Form("%.1f",ptTriggerMin); newFileName += "To";
2305 newFileName += Form("%.1f",ptTriggerMax); newFileName += "PtaFrom";
2306 newFileName += Form("%.1f",ptAssociatedMin); newFileName += "To";
2307 newFileName += Form("%.1f",ptAssociatedMax);
2310 newFileName += Form("%.1f",psiMin);
2312 newFileName += Form("%.1f",psiMax);
2314 newFileName += ".root";
2315 TFile *newFile = TFile::Open(newFileName.Data(),"recreate");
2318 gHistResidual->Write();
2319 gFitFunction->Write();
2325 //____________________________________________________________//
2326 TH2D *convolute2D(TH2D* h1, TH2D* h2, TString hname) {
2328 // this function does the convolution of 2 eta or phi "efficiencies" in a deta or dphi "efficiency"
2329 // and returns a new histogram which is normalized to the number of bin combinations
2331 // histogram definition
2333 hConv = new TH2D(hname.Data(),hname.Data(), h1->GetNbinsY(),-2,2,h1->GetNbinsX(),-TMath::Pi()/2.,3*TMath::Pi()/2.);
2347 for(Int_t i = 0; i < h1->GetNbinsX(); i ++){
2348 cout<<"CONVOLUTING BIN = "<<i<<" of "<<h1->GetNbinsX()<<endl;
2349 for(Int_t j = 0; j < h1->GetNbinsY(); j ++){
2350 for(Int_t k = 0; k < h2->GetNbinsX(); k ++){
2351 for(Int_t l = 0; l < h2->GetNbinsY(); l ++){
2353 x1 = (Double_t)h1->GetXaxis()->GetBinCenter(i+1);
2354 y1 = (Double_t)h1->GetYaxis()->GetBinCenter(j+1);
2355 x2 = (Double_t)h2->GetXaxis()->GetBinCenter(k+1);
2356 y2 = (Double_t)h2->GetYaxis()->GetBinCenter(l+1);
2358 z1 = (Double_t)h1->GetBinContent(i+1,j+1);
2359 z2 = (Double_t)h2->GetBinContent(k+1,l+1);
2361 // need the gymnastics to keep the same binning
2362 dx = x1 - x2 - (h1->GetXaxis()->GetBinWidth(1)/2.);
2363 if(gRandom->Gaus() > 0) dy = y1 - y2 + (h1->GetYaxis()->GetBinWidth(1)/2.);
2364 else dy = y1 - y2 - (h1->GetYaxis()->GetBinWidth(1)/2.);
2366 if(dx>3./2.*TMath::Pi()) dx = dx - 2.*TMath::Pi();
2367 if(dx<-1./2.*TMath::Pi()) dx = 2*TMath::Pi() + dx;
2371 hConv->Fill(dy,dx,dz);