1 const Int_t numberOfCentralityBins = 13;
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"};
4 const Int_t gRebin = 1;
6 void drawCorrelationFunctionPsiChargeIndependent(const char* filename = "AnalysisResults.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 = kFALSE,
23 //Macro that draws the correlation functions from the balance function
24 //analysis vs the reaction plane
25 //Author: Panos.Christakoglou@nikhef.nl
26 gROOT->LoadMacro("~/SetPlotStyle.C");
28 gStyle->SetPalette(1,0);
30 //Load the PWG2ebye library
31 gSystem->Load("libANALYSIS");
32 gSystem->Load("libANALYSISalice");
33 gSystem->Load("libEventMixing");
34 gSystem->Load("libCORRFW");
35 gSystem->Load("libPWGTools");
36 gSystem->Load("libPWGCFebye");
38 //Prepare the objects and return them
39 TList *list = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,0);
40 TList *listShuffled = NULL;
41 if(kShowShuffled) listShuffled = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,1);
42 TList *listMixed = NULL;
43 if(kShowMixed) listMixed = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,2);
46 Printf("The TList object was not created");
50 draw(list,listShuffled,listMixed,
51 gCentralityEstimator,gCentrality,psiMin,psiMax,vertexZMin,vertexZMax,
52 ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,normToTrig,rebinEta,rebinPhi);
55 //______________________________________________________//
56 TList *GetListOfObjects(const char* filename,
59 const char *gCentralityEstimator,
61 //Get the TList objects (QA, bf, bf shuffled)
65 TFile *f = TFile::Open(filename,"UPDATE");
66 if((!f)||(!f->IsOpen())) {
67 Printf("The file %s is not found. Aborting...",filename);
72 TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionPsiAnalysis"));
74 Printf("The TDirectoryFile is not found. Aborting...",filename);
81 //cout<<"no shuffling - no mixing"<<endl;
82 listBFName = "listBFPsi_";
85 //cout<<"shuffling - no mixing"<<endl;
86 listBFName = "listBFPsiShuffled_";
89 //cout<<"no shuffling - mixing"<<endl;
90 listBFName = "listBFPsiMixed_";
92 listBFName += centralityArray[gCentrality-1];
94 listBFName += "_Bit"; listBFName += gBit; }
95 if(gCentralityEstimator) {
96 listBFName += "_"; listBFName += gCentralityEstimator;}
98 // histograms were already retrieved (in first iteration)
99 if(dir->Get(Form("%s_histograms",listBFName.Data()))){
100 listBF = dynamic_cast<TList *>(dir->Get(Form("%s_histograms",listBFName.Data())));
103 // histograms were not yet retrieved (this is the first iteration)
106 listBF = dynamic_cast<TList *>(dir->Get(listBFName.Data()));
107 cout<<"======================================================="<<endl;
108 cout<<"List name (control): "<<listBFName.Data()<<endl;
109 cout<<"List name: "<<listBF->GetName()<<endl;
115 histoName = "fHistP";
117 histoName = "fHistP_shuffle";
119 histoName = "fHistP";
120 if(gCentralityEstimator)
121 histoName += gCentralityEstimator;
122 AliTHn *fHistP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
124 Printf("fHistP %s not found!!!",histoName.Data());
127 fHistP->FillParent(); fHistP->DeleteContainers();
130 histoName = "fHistN";
132 histoName = "fHistN_shuffle";
134 histoName = "fHistN";
135 if(gCentralityEstimator)
136 histoName += gCentralityEstimator;
137 AliTHn *fHistN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
139 Printf("fHistN %s not found!!!",histoName.Data());
142 fHistN->FillParent(); fHistN->DeleteContainers();
145 histoName = "fHistPN";
147 histoName = "fHistPN_shuffle";
149 histoName = "fHistPN";
150 if(gCentralityEstimator)
151 histoName += gCentralityEstimator;
152 AliTHn *fHistPN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
154 Printf("fHistPN %s not found!!!",histoName.Data());
157 fHistPN->FillParent(); fHistPN->DeleteContainers();
160 histoName = "fHistNP";
162 histoName = "fHistNP_shuffle";
164 histoName = "fHistNP";
165 if(gCentralityEstimator)
166 histoName += gCentralityEstimator;
167 AliTHn *fHistNP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
169 Printf("fHistNP %s not found!!!",histoName.Data());
172 fHistNP->FillParent(); fHistNP->DeleteContainers();
175 histoName = "fHistPP";
177 histoName = "fHistPP_shuffle";
179 histoName = "fHistPP";
180 if(gCentralityEstimator)
181 histoName += gCentralityEstimator;
182 AliTHn *fHistPP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
184 Printf("fHistPP %s not found!!!",histoName.Data());
187 fHistPP->FillParent(); fHistPP->DeleteContainers();
190 histoName = "fHistNN";
192 histoName = "fHistNN_shuffle";
194 histoName = "fHistNN";
195 if(gCentralityEstimator)
196 histoName += gCentralityEstimator;
197 AliTHn *fHistNN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
199 Printf("fHistNN %s not found!!!",histoName.Data());
202 fHistNN->FillParent(); fHistNN->DeleteContainers();
205 listBF->Write(Form("%s_histograms",listBFName.Data()), TObject::kSingleKey);
214 //______________________________________________________//
215 void draw(TList *list, TList *listBFShuffled, TList *listBFMixed,
216 const char *gCentralityEstimator,
217 Int_t gCentrality, Double_t psiMin, Double_t psiMax,
220 Double_t ptTriggerMin, Double_t ptTriggerMax,
221 Double_t ptAssociatedMin, Double_t ptAssociatedMax,
222 Bool_t normToTrig, Int_t rebinEta, Int_t rebinPhi) {
223 //Draws the correlation functions for every centrality bin
224 //(+-), (-+), (++), (--)
232 TString gHistPname = "fHistP";
233 if(gCentralityEstimator) gHistPname += gCentralityEstimator;
234 TString gHistNname = "fHistN";
235 if(gCentralityEstimator) gHistNname += gCentralityEstimator;
236 TString gHistPNname = "fHistPN";
237 if(gCentralityEstimator) gHistPNname += gCentralityEstimator;
238 TString gHistNPname = "fHistNP";
239 if(gCentralityEstimator) gHistNPname += gCentralityEstimator;
240 TString gHistPPname = "fHistPP";
241 if(gCentralityEstimator) gHistPPname += gCentralityEstimator;
242 TString gHistNNname = "fHistNN";
243 if(gCentralityEstimator) gHistNNname += gCentralityEstimator;
245 hP = (AliTHn*) list->FindObject(gHistPname.Data());
246 hN = (AliTHn*) list->FindObject(gHistNname.Data());
247 hPN = (AliTHn*) list->FindObject(gHistPNname.Data());
248 hNP = (AliTHn*) list->FindObject(gHistNPname.Data());
249 hPP = (AliTHn*) list->FindObject(gHistPPname.Data());
250 hNN = (AliTHn*) list->FindObject(gHistNNname.Data());
252 //Create the AliBalancePsi object and fill it with the AliTHn objects
253 AliBalancePsi *b = new AliBalancePsi();
261 //balance function shuffling
262 AliTHn *hPShuffled = NULL;
263 AliTHn *hNShuffled = NULL;
264 AliTHn *hPNShuffled = NULL;
265 AliTHn *hNPShuffled = NULL;
266 AliTHn *hPPShuffled = NULL;
267 AliTHn *hNNShuffled = NULL;
269 //listBFShuffled->ls();
271 gHistPname = "fHistP_shuffle";
272 if(gCentralityEstimator) gHistPname += gCentralityEstimator;
273 gHistNname = "fHistN_shuffle";
274 if(gCentralityEstimator) gHistNname += gCentralityEstimator;
275 gHistPNname = "fHistPN_shuffle";
276 if(gCentralityEstimator) gHistPNname += gCentralityEstimator;
277 gHistNPname = "fHistNP_shuffle";
278 if(gCentralityEstimator) gHistNPname += gCentralityEstimator;
279 gHistPPname = "fHistPP_shuffle";
280 if(gCentralityEstimator) gHistPPname += gCentralityEstimator;
281 gHistNNname = "fHistNN_shuffle";
282 if(gCentralityEstimator) gHistNNname += gCentralityEstimator;
284 hPShuffled = (AliTHn*) listBFShuffled->FindObject(gHistPname.Data());
285 hPShuffled->SetName("gHistPShuffled");
286 hNShuffled = (AliTHn*) listBFShuffled->FindObject(gHistNname.Data());
287 hNShuffled->SetName("gHistNShuffled");
288 hPNShuffled = (AliTHn*) listBFShuffled->FindObject(gHistPNname.Data());
289 hPNShuffled->SetName("gHistPNShuffled");
290 hNPShuffled = (AliTHn*) listBFShuffled->FindObject(gHistNPname.Data());
291 hNPShuffled->SetName("gHistNPShuffled");
292 hPPShuffled = (AliTHn*) listBFShuffled->FindObject(gHistPPname.Data());
293 hPPShuffled->SetName("gHistPPShuffled");
294 hNNShuffled = (AliTHn*) listBFShuffled->FindObject(gHistNNname.Data());
295 hNNShuffled->SetName("gHistNNShuffled");
297 AliBalancePsi *bShuffled = new AliBalancePsi();
298 bShuffled->SetHistNp(hPShuffled);
299 bShuffled->SetHistNn(hNShuffled);
300 bShuffled->SetHistNpn(hPNShuffled);
301 bShuffled->SetHistNnp(hNPShuffled);
302 bShuffled->SetHistNpp(hPPShuffled);
303 bShuffled->SetHistNnn(hNNShuffled);
306 //balance function mixing
307 AliTHn *hPMixed = NULL;
308 AliTHn *hNMixed = NULL;
309 AliTHn *hPNMixed = NULL;
310 AliTHn *hNPMixed = NULL;
311 AliTHn *hPPMixed = NULL;
312 AliTHn *hNNMixed = NULL;
317 gHistPname = "fHistP";
318 if(gCentralityEstimator) gHistPname += gCentralityEstimator;
319 gHistNname = "fHistN";
320 if(gCentralityEstimator) gHistNname += gCentralityEstimator;
321 gHistPNname = "fHistPN";
322 if(gCentralityEstimator) gHistPNname += gCentralityEstimator;
323 gHistNPname = "fHistNP";
324 if(gCentralityEstimator) gHistNPname += gCentralityEstimator;
325 gHistPPname = "fHistPP";
326 if(gCentralityEstimator) gHistPPname += gCentralityEstimator;
327 gHistNNname = "fHistNN";
328 if(gCentralityEstimator) gHistNNname += gCentralityEstimator;
329 hPMixed = (AliTHn*) listBFMixed->FindObject(gHistPname.Data());
330 hPMixed->SetName("gHistPMixed");
331 hNMixed = (AliTHn*) listBFMixed->FindObject(gHistNname.Data());
332 hNMixed->SetName("gHistNMixed");
333 hPNMixed = (AliTHn*) listBFMixed->FindObject(gHistPNname.Data());
334 hPNMixed->SetName("gHistPNMixed");
335 hNPMixed = (AliTHn*) listBFMixed->FindObject(gHistNPname.Data());
336 hNPMixed->SetName("gHistNPMixed");
337 hPPMixed = (AliTHn*) listBFMixed->FindObject(gHistPPname.Data());
338 hPPMixed->SetName("gHistPPMixed");
339 hNNMixed = (AliTHn*) listBFMixed->FindObject(gHistNNname.Data());
340 hNNMixed->SetName("gHistNNMixed");
342 AliBalancePsi *bMixed = new AliBalancePsi();
343 bMixed->SetHistNp(hPMixed);
344 bMixed->SetHistNn(hNMixed);
345 bMixed->SetHistNpn(hPNMixed);
346 bMixed->SetHistNnp(hNPMixed);
347 bMixed->SetHistNpp(hPPMixed);
348 bMixed->SetHistNnn(hNNMixed);
354 TString histoTitle, pngName;
356 // all charges together
357 histoTitle = "(+-) | Centrality: ";
358 histoTitle += centralityArray[gCentrality-1];
360 if((psiMin == -0.5)&&(psiMax == 0.5))
361 histoTitle += " (-7.5^{o} < #varphi - #Psi_{2} < 7.5^{o})";
362 else if((psiMin == 0.5)&&(psiMax == 1.5))
363 histoTitle += " (37.5^{o} < #varphi - #Psi_{2} < 52.5^{o})";
364 else if((psiMin == 1.5)&&(psiMax == 2.5))
365 histoTitle += " (82.5^{o} < #varphi - #Psi_{2} < 97.5^{o})";
367 histoTitle += " (0^{o} < #varphi - #Psi_{2} < 180^{o})";
369 gHist[0] = b->GetCorrelationFunctionChargeIndependent(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
370 if(rebinEta > 1 || rebinPhi > 1){
371 gHist[0]->Rebin2D(rebinEta,rebinPhi);
372 gHist[0]->Scale(1./(Double_t)(rebinEta*rebinPhi));
374 gHist[0]->GetYaxis()->SetTitleOffset(1.5);
375 gHist[0]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
376 gHist[0]->SetTitle(histoTitle.Data());
377 c[0] = new TCanvas("c0","",0,0,600,500);
378 c[0]->SetFillColor(10); c[0]->SetHighLightColor(10);
379 gHist[0]->DrawCopy("surf1fb");
380 gPad->SetTheta(30); // default is 30
381 //gPad->SetPhi(130); // default is 30
382 gPad->SetPhi(-60); // default is 30
384 pngName = "DeltaPhiDeltaEta.Centrality";
385 pngName += centralityArray[gCentrality-1];
386 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
387 pngName += ".PositiveNegative.png";
388 //c[0]->SaveAs(pngName.Data());
391 histoTitle = "(+-) shuffled | Centrality: ";
392 histoTitle += centralityArray[gCentrality-1];
394 if((psiMin == -0.5)&&(psiMax == 0.5))
395 histoTitle += " (-7.5^{o} < #varphi - #Psi_{2} < 7.5^{o})";
396 else if((psiMin == 0.5)&&(psiMax == 1.5))
397 histoTitle += " (37.5^{o} < #varphi - #Psi_{2} < 52.5^{o})";
398 else if((psiMin == 1.5)&&(psiMax == 2.5))
399 histoTitle += " (82.5^{o} < #varphi - #Psi_{2} < 97.5^{o})";
401 histoTitle += " (0^{o} < #varphi - #Psi_{2} < 180^{o})";
403 gHist[1] = bShuffled->GetCorrelationFunctionChargeIndependent(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
404 if(rebinEta > 1 || rebinPhi > 1){
405 gHist[1]->Rebin2D(rebinEta,rebinPhi);
406 gHist[1]->Scale(1./(Double_t)(rebinEta*rebinPhi));
408 gHist[1]->GetYaxis()->SetTitleOffset(1.5);
409 gHist[1]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
410 gHist[1]->SetTitle(histoTitle.Data());
411 c[1] = new TCanvas("c1","",0,100,600,500);
412 c[1]->SetFillColor(10);
413 c[1]->SetHighLightColor(10);
414 gHist[1]->DrawCopy("surf1fb");
415 gPad->SetTheta(30); // default is 30
416 //gPad->SetPhi(130); // default is 30
417 gPad->SetPhi(-60); // default is 30
419 pngName = "DeltaPhiDeltaEtaShuffled.Centrality";
420 pngName += centralityArray[gCentrality-1];
421 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
422 pngName += ".PositiveNegative.png";
423 //c[1]->SaveAs(pngName.Data());
427 histoTitle = "(+-) mixed | Centrality: ";
428 histoTitle += centralityArray[gCentrality-1];
430 if((psiMin == -0.5)&&(psiMax == 0.5))
431 histoTitle += " (-7.5^{o} < #varphi - #Psi_{2} < 7.5^{o})";
432 else if((psiMin == 0.5)&&(psiMax == 1.5))
433 histoTitle += " (37.5^{o} < #varphi - #Psi_{2} < 52.5^{o})";
434 else if((psiMin == 1.5)&&(psiMax == 2.5))
435 histoTitle += " (82.5^{o} < #varphi - #Psi_{2} < 97.5^{o})";
437 histoTitle += " (0^{o} < #varphi - #Psi_{2} < 180^{o})";
439 // if normalization to trigger then do not divide Event mixing by number of trigger particles
440 gHist[2] = bMixed->GetCorrelationFunctionChargeIndependent(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
441 if(rebinEta > 1 || rebinPhi > 1){
442 gHist[2]->Rebin2D(rebinEta,rebinPhi);
443 gHist[2]->Scale(1./(Double_t)(rebinEta*rebinPhi));
446 // normalization to 1 at (0,0) --> Jan Fietes method
448 Double_t mixedNorm = gHist[2]->Integral(gHist[2]->GetXaxis()->FindBin(0-10e-5),gHist[2]->GetXaxis()->FindBin(0+10e-5),gHist[2]->GetNbinsY()/2 + 1,gHist[2]->GetNbinsY());
449 mixedNorm /= 0.5 * gHist[2]->GetNbinsY()*(gHist[2]->GetXaxis()->FindBin(0.01) - gHist[2]->GetXaxis()->FindBin(-0.01) + 1);
451 // finite bin correction
452 Double_t binWidthEta = gHist[2]->GetXaxis()->GetBinWidth(gHist[2]->GetNbinsX());
453 Double_t maxEta = gHist[2]->GetXaxis()->GetBinUpEdge(gHist[2]->GetNbinsX());
455 Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
456 //Printf("Finite bin correction: %f", finiteBinCorrection);
457 mixedNorm /= finiteBinCorrection;
459 gHist[2]->Scale(1./mixedNorm);
462 gHist[2]->GetYaxis()->SetTitleOffset(1.5);
463 gHist[2]->GetYaxis()->SetTitle("#Delta #varphi (rad)");
464 gHist[2]->SetTitle(histoTitle.Data());
465 c[2] = new TCanvas("c2","",0,200,600,500);
466 c[2]->SetFillColor(10);
467 c[2]->SetHighLightColor(10);
468 gHist[2]->DrawCopy("surf1fb");
469 gPad->SetTheta(30); // default is 30
470 //gPad->SetPhi(130); // default is 30
471 gPad->SetPhi(-60); // default is 30
473 pngName = "DeltaPhiDeltaEtaMixed.Centrality";
474 pngName += centralityArray[gCentrality-1];
475 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
476 pngName += ".PositiveNegative.png";
477 //c[2]->SaveAs(pngName.Data());
479 //Correlation function (+-)
480 gHist[3] = b->GetCorrelationFunction("ALL",psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed,normToTrig);
481 gHist[3]->GetXaxis()->SetRangeUser(-1.5,1.5);
482 gHist[3]->GetZaxis()->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
483 c[3] = new TCanvas("c3","",0,300,600,500);
484 c[3]->SetFillColor(10);
485 c[3]->SetHighLightColor(10);
486 gHist[3]->DrawCopy("surf1fb");
487 gPad->SetTheta(30); // default is 30
488 //gPad->SetPhi(130); // default is 30
489 gPad->SetPhi(-60); // default is 30
491 pngName = "CorrelationFunction.Centrality";
492 pngName += centralityArray[gCentrality-1];
493 pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
494 pngName += ".PositiveNegative.png";
495 //c[3]->SaveAs(pngName.Data());
497 //Correlation function subtracted awayside (+-)
498 gHist[4] = dynamic_cast<TH2D *>(gHist[3]->Clone()); // this will be used to imitate twice the away-side
499 gHist[4]->GetXaxis()->SetRangeUser(-1.5,1.5);
500 gHist[4]->GetZaxis()->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
501 gHist[5] = dynamic_cast<TH2D *>(gHist[3]->Clone()); // this will be the subtracted one
502 gHist[5]->GetXaxis()->SetRangeUser(-1.5,1.5);
503 gHist[5]->GetZaxis()->SetTitle("C_{+-}(#Delta#eta,#Delta#varphi)");
505 //prepare the double away side histo
506 for(Int_t ix = 0; ix < gHist[4]->GetNbinsX(); ix++ ){
507 for(Int_t iy = 0; iy < gHist[4]->GetNbinsX(); iy++ ){
508 if(iy<gHist[4]->GetNbinsY()/2) gHist[4]->SetBinContent(ix+1,iy+1,gHist[4]->GetBinContent(ix+1,iy+1+gHist[4]->GetNbinsY()/2));
511 gHist[5]->Add(gHist[4],-1);
513 c[4] = new TCanvas("c3","",0,300,600,500);
514 c[4]->SetFillColor(10);
515 c[4]->SetHighLightColor(10);
516 gHist[5]->DrawCopy("surf1fb");
517 gPad->SetTheta(30); // default is 30
518 //gPad->SetPhi(130); // default is 30
519 gPad->SetPhi(-60); // default is 30
523 //Write to output file
524 TString newFileName = "correlationFunctionChargeIndependent.Centrality";
525 newFileName += gCentrality; newFileName += ".Psi";
526 if((psiMin == -0.5)&&(psiMax == 0.5)) newFileName += "InPlane.Ptt";
527 else if((psiMin == 0.5)&&(psiMax == 1.5)) newFileName += "Intermediate.Ptt";
528 else if((psiMin == 1.5)&&(psiMax == 2.5)) newFileName += "OutOfPlane.Ptt";
529 else if((psiMin == 2.5)&&(psiMax == 3.5)) newFileName += "Rest.PttFrom";
530 else newFileName += "All.PttFrom";
531 newFileName += Form("%.1f",ptTriggerMin); newFileName += "To";
532 newFileName += Form("%.1f",ptTriggerMax); newFileName += "PtaFrom";
533 newFileName += Form("%.1f",ptAssociatedMin); newFileName += "To";
534 newFileName += Form("%.1f",ptAssociatedMax);
535 newFileName += ".root";
536 TFile *newFile = TFile::Open(newFileName.Data(),"recreate");
537 gHist[0]->SetName("gHistRaw"); gHist[0]->Write();
539 gHist[1]->SetName("gHistShuffled"); gHist[1]->Write();
542 gHist[2]->SetName("gHistMixed"); gHist[2]->Write();
544 gHist[3]->SetName("gHistCorrelationFunctions");gHist[3]->Write();
545 gHist[4]->SetName("gHistCorrelationFunctionsAwaySide"); gHist[4]->Write();
546 gHist[5]->SetName("gHistCorrelationFunctionsSubtracted"); gHist[5]->Write();
551 // for(Int_t i = 0; i < 6; i++){
553 // if(!listBFShuffled && i == 1) continue;
554 // if(!listBFMixed && (i == 2 || i == 3 || i == 4 || i == 5)) continue;
556 // if(gHist[i]) delete gHist[i];
558 // if(c[i]) delete c[i];
584 //____________________________________________________________//
585 void drawCorrelationFunctions(const char* lhcPeriod = "LHC11h",
586 Int_t gTrainID = 208,
587 Int_t gCentrality = 1,
588 Double_t psiMin = -0.5, Double_t psiMax = 3.5,
589 Double_t ptTriggerMin = -1.,
590 Double_t ptTriggerMax = -1.,
591 Double_t ptAssociatedMin = -1.,
592 Double_t ptAssociatedMax = -1.) {
593 //Macro that draws the charge dependent correlation functions
594 //for each centrality bin for the different pT of trigger and
595 //associated particles
596 //Author: Panos.Christakoglou@nikhef.nl
597 TGaxis::SetMaxDigits(3);
600 TString filename = "PbPb/"; filename += lhcPeriod;
601 filename +="/Train"; filename += gTrainID;
602 filename +="/Centrality"; filename += gCentrality;
603 filename += "/correlationFunction.Centrality";
604 filename += gCentrality; filename += ".Psi";
605 if((psiMin == -0.5)&&(psiMax == 0.5)) filename += "InPlane.Ptt";
606 else if((psiMin == 0.5)&&(psiMax == 1.5)) filename += "Intermediate.Ptt";
607 else if((psiMin == 1.5)&&(psiMax == 2.5)) filename += "OutOfPlane.Ptt";
608 else if((psiMin == 2.5)&&(psiMax == 3.5)) filename += "Rest.Ptt";
609 else filename += "All.PttFrom";
610 filename += Form("%.1f",ptTriggerMin); filename += "To";
611 filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
612 filename += Form("%.1f",ptAssociatedMin); filename += "To";
613 filename += Form("%.1f",ptAssociatedMax);
617 TFile *f = TFile::Open(filename.Data());
618 if((!f)||(!f->IsOpen())) {
619 Printf("The file %s is not found. Aborting...",filename);
625 TString centralityLatex = "Centrality: ";
626 centralityLatex += centralityArray[gCentrality-1];
627 centralityLatex += "%";
630 if((psiMin == -0.5)&&(psiMax == 0.5))
631 psiLatex = " -7.5^{o} < #varphi - #Psi_{2} < 7.5^{o}";
632 else if((psiMin == 0.5)&&(psiMax == 1.5))
633 psiLatex = " 37.5^{o} < #varphi - #Psi_{2} < 52.5^{o}";
634 else if((psiMin == 1.5)&&(psiMax == 2.5))
635 psiLatex = " 82.5^{o} < #varphi - #Psi_{2} < 97.5^{o}";
637 psiLatex = " 0^{o} < #varphi - #Psi_{2} < 180^{o}";
639 TString pttLatex = Form("%.1f",ptTriggerMin);
640 pttLatex += " < p_{T,trig} < "; pttLatex += Form("%.1f",ptTriggerMax);
641 pttLatex += " GeV/c";
643 TString ptaLatex = Form("%.1f",ptAssociatedMin);
644 ptaLatex += " < p_{T,assoc} < "; ptaLatex += Form("%.1f",ptAssociatedMax);
645 ptaLatex += " GeV/c";
647 TLatex *latexInfo1 = new TLatex();
648 latexInfo1->SetNDC();
649 latexInfo1->SetTextSize(0.045);
650 latexInfo1->SetTextColor(1);
654 //============================================================//
655 //Get the +- correlation function
656 TH2D *gHistPN = dynamic_cast<TH2D *>(f->Get("gHistPNCorrelationFunctions"));
657 gHistPN->SetStats(kFALSE);
658 gHistPN->SetTitle("");
659 gHistPN->GetXaxis()->SetRangeUser(-1.45,1.45);
660 gHistPN->GetXaxis()->CenterTitle();
661 gHistPN->GetXaxis()->SetTitleOffset(1.2);
662 gHistPN->GetYaxis()->CenterTitle();
663 gHistPN->GetYaxis()->SetTitleOffset(1.2);
664 gHistPN->GetZaxis()->SetTitleOffset(1.2);
665 TCanvas *cPN = new TCanvas("cPN","",0,0,600,500);
666 cPN->SetFillColor(10); cPN->SetHighLightColor(10);
667 cPN->SetLeftMargin(0.15);
668 gHistPN->DrawCopy("surf1fb");
669 gPad->SetTheta(30); // default is 30
670 gPad->SetPhi(-60); // default is 30
673 latexInfo1->DrawLatex(0.44,0.88,centralityLatex.Data());
674 //latexInfo1->DrawLatex(0.44,0.82,psiLatex.Data());
675 latexInfo1->DrawLatex(0.44,0.82,pttLatex.Data());
676 latexInfo1->DrawLatex(0.44,0.76,ptaLatex.Data());
678 pngName = "CorrelationFunctionChargeIndependent.Centrality";
679 pngName += centralityArray[gCentrality-1];
681 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
682 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
683 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
684 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
685 else pngName += "All.PttFrom";
686 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
687 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
688 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
689 pngName += Form("%.1f",ptAssociatedMax);
690 pngName += ".PositiveNegative.png";
691 cPN->SaveAs(pngName.Data());
692 fitCorrelationFunctions(gCentrality, psiMin, psiMax,
693 ptTriggerMin,ptTriggerMax,
694 ptAssociatedMin, ptAssociatedMax,gHistPN);
695 //============================================================//
696 //Get the -+ correlation function
697 TH2D *gHistNP = dynamic_cast<TH2D *>(f->Get("gHistNPCorrelationFunctions"));
698 gHistNP->SetStats(kFALSE);
699 gHistNP->SetTitle("");
700 gHistNP->GetXaxis()->SetRangeUser(-1.45,1.45);
701 gHistNP->GetXaxis()->CenterTitle();
702 gHistNP->GetXaxis()->SetTitleOffset(1.2);
703 gHistNP->GetYaxis()->CenterTitle();
704 gHistNP->GetYaxis()->SetTitleOffset(1.2);
705 gHistNP->GetZaxis()->SetTitleOffset(1.2);
706 TCanvas *cNP = new TCanvas("cNP","",50,50,600,500);
707 cNP->SetFillColor(10); cNP->SetHighLightColor(10);
708 cNP->SetLeftMargin(0.15);
709 gHistNP->DrawCopy("surf1fb");
710 gPad->SetTheta(30); // default is 30
711 gPad->SetPhi(-60); // default is 30
714 latexInfo1->DrawLatex(0.44,0.88,centralityLatex.Data());
715 //latexInfo1->DrawLatex(0.44,0.82,psiLatex.Data());
716 latexInfo1->DrawLatex(0.44,0.82,pttLatex.Data());
717 latexInfo1->DrawLatex(0.44,0.76,ptaLatex.Data());
719 pngName = "CorrelationFunction.Centrality";
720 pngName += centralityArray[gCentrality-1];
722 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
723 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
724 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
725 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
726 else pngName += "All.PttFrom";
727 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
728 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
729 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
730 pngName += Form("%.1f",ptAssociatedMax);
731 pngName += ".NegativePositive.png";
732 cNP->SaveAs(pngName.Data());
734 fitCorrelationFunctions(gCentrality, psiMin, psiMax,
735 ptTriggerMin,ptTriggerMax,
736 ptAssociatedMin, ptAssociatedMax,gHistNP);
737 //============================================================//
738 //Get the ++ correlation function
739 TH2D *gHistPP = dynamic_cast<TH2D *>(f->Get("gHistPPCorrelationFunctions"));
740 gHistPP->SetStats(kFALSE);
741 gHistPP->SetTitle("");
742 gHistPP->GetXaxis()->SetRangeUser(-1.45,1.45);
743 gHistPP->GetXaxis()->CenterTitle();
744 gHistPP->GetXaxis()->SetTitleOffset(1.2);
745 gHistPP->GetYaxis()->CenterTitle();
746 gHistPP->GetYaxis()->SetTitleOffset(1.2);
747 gHistPP->GetZaxis()->SetTitleOffset(1.2);
748 TCanvas *cPP = new TCanvas("cPP","",100,100,600,500);
749 cPP->SetFillColor(10); cPP->SetHighLightColor(10);
750 cPP->SetLeftMargin(0.15);
751 gHistPP->DrawCopy("surf1fb");
752 gPad->SetTheta(30); // default is 30
753 gPad->SetPhi(-60); // default is 30
756 latexInfo1->DrawLatex(0.44,0.88,centralityLatex.Data());
757 //latexInfo1->DrawLatex(0.44,0.82,psiLatex.Data());
758 latexInfo1->DrawLatex(0.44,0.82,pttLatex.Data());
759 latexInfo1->DrawLatex(0.44,0.76,ptaLatex.Data());
761 pngName = "CorrelationFunction.Centrality";
762 pngName += centralityArray[gCentrality-1];
764 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
765 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
766 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
767 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
768 else pngName += "All.PttFrom";
769 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
770 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
771 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
772 pngName += Form("%.1f",ptAssociatedMax);
773 pngName += ".PositivePositive.png";
774 cPP->SaveAs(pngName.Data());
776 fitCorrelationFunctions(gCentrality, psiMin, psiMax,
777 ptTriggerMin,ptTriggerMax,
778 ptAssociatedMin, ptAssociatedMax,gHistPP);
779 //============================================================//
780 //Get the -- correlation function
781 TH2D *gHistNN = dynamic_cast<TH2D *>(f->Get("gHistNNCorrelationFunctions"));
782 gHistNN->SetStats(kFALSE);
783 gHistNN->SetTitle("");
784 gHistNN->GetXaxis()->SetRangeUser(-1.45,1.45);
785 gHistNN->GetXaxis()->CenterTitle();
786 gHistNN->GetXaxis()->SetTitleOffset(1.2);
787 gHistNN->GetYaxis()->CenterTitle();
788 gHistNN->GetYaxis()->SetTitleOffset(1.2);
789 gHistNN->GetZaxis()->SetTitleOffset(1.2);
790 TCanvas *cNN = new TCanvas("cNN","",150,150,600,500);
791 cNN->SetFillColor(10); cNN->SetHighLightColor(10);
792 cNN->SetLeftMargin(0.15);
793 gHistNN->DrawCopy("surf1fb");
794 gPad->SetTheta(30); // default is 30
795 gPad->SetPhi(-60); // default is 30
798 latexInfo1->DrawLatex(0.44,0.88,centralityLatex.Data());
799 //latexInfo1->DrawLatex(0.44,0.82,psiLatex.Data());
800 latexInfo1->DrawLatex(0.44,0.82,pttLatex.Data());
801 latexInfo1->DrawLatex(0.44,0.76,ptaLatex.Data());
803 pngName = "CorrelationFunction.Centrality";
804 pngName += centralityArray[gCentrality-1];
806 if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
807 else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
808 else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
809 else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.Ptt";
810 else pngName += "All.PttFrom";
811 pngName += Form("%.1f",ptTriggerMin); pngName += "To";
812 pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
813 pngName += Form("%.1f",ptAssociatedMin); pngName += "To";
814 pngName += Form("%.1f",ptAssociatedMax);
815 pngName += ".NegativeNegative.png";
816 cNN->SaveAs(pngName.Data());
818 fitCorrelationFunctions(gCentrality, psiMin, psiMax,
819 ptTriggerMin,ptTriggerMax,
820 ptAssociatedMin, ptAssociatedMax,gHistNN);
823 // //____________________________________________________________//
824 // void fitCorrelationFunctions(Int_t gCentrality = 1,
825 // Double_t psiMin = -0.5, Double_t psiMax = 3.5,
826 // Double_t ptTriggerMin = -1.,
827 // Double_t ptTriggerMax = -1.,
828 // Double_t ptAssociatedMin = -1.,
829 // Double_t ptAssociatedMax = -1.,
832 // cout<<"FITTING FUNCTION (MW style)"<<endl;
834 // //near side peak(s): [1]*(TMath::Exp(-TMath::Power((0.5*TMath::Power(((x-[5])/[2]),2)+0.5*TMath::Power((y/[3]),2)),[4])) +
835 // // TMath::Exp(-TMath::Power((0.5*TMath::Power(((x+[5])/[6]),2)+0.5*TMath::Power((y/[3]),2)),[4])))
836 // //away side peak(s): [7]*(TMath::Exp(-TMath::Power((0.5*TMath::Power(((x-[11])/[8]),2)+0.5*TMath::Power((y/[9]),2)),[10])) +
837 // // TMath::Exp(-TMath::Power((0.5*TMath::Power(((x+[11])/[12]),2)+0.5*TMath::Power((y/[9]),2)),[10])))
838 // //flow contribution (v1 up to v4): 2.*[13]*([14]*TMath::Cos(y) + [15]*TMath::Cos(2.*y) + [16]*TMath::Cos(3.*y) + [17]*TMath::Cos(4.*y))
842 // TF2 *gFitFunction = new TF2("gFitFunction","[0]+[1]*(TMath::Exp(-TMath::Power((0.5*TMath::Power(((x-[5])/[2]),2)+0.5*TMath::Power((y/[3]),2)),[4])) + TMath::Exp(-TMath::Power((0.5*TMath::Power(((x+[5])/[6]),2)+0.5*TMath::Power((y/[3]),2)),[4]))) + [7]*(TMath::Exp(-TMath::Power((0.5*TMath::Power(((x-[11])/[8]),2)+0.5*TMath::Power(((y-TMath::Pi())/[9]),2)),[10])) + TMath::Exp(-TMath::Power((0.5*TMath::Power(((x+[11])/[12]),2)+0.5*TMath::Power(((y-TMath::Pi())/[9]),2)),[10]))) + 2.*[13]*([14]*TMath::Cos(y) + [15]*TMath::Cos(2.*y) + [16]*TMath::Cos(3.*y) + [17]*TMath::Cos(4.*y))",-2.0,2.0,-TMath::Pi()/2.,3.*TMath::Pi()/2.);
843 // gFitFunction->SetName("gFitFunction");
847 // gFitFunction->SetParName(0,"N1");
848 // //near side peak(s)
849 // gFitFunction->SetParName(1,"N_{near side}");gFitFunction->FixParameter(1,0.0);
850 // gFitFunction->SetParName(2,"Sigma_{near side}(delta eta 1)"); gFitFunction->FixParameter(2,0.0);
851 // gFitFunction->SetParName(3,"Sigma_{near side}(delta phi)"); gFitFunction->FixParameter(3,0.0);
852 // gFitFunction->SetParName(4,"Exponent_{near side}"); gFitFunction->FixParameter(4,1.0);
853 // gFitFunction->SetParName(5,"Offset_{near side}"); gFitFunction->FixParameter(5,0.0);
854 // gFitFunction->SetParName(6,"Sigma_{near side}(delta eta 2)"); gFitFunction->FixParameter(6,0.0);
856 // //away side peak(s)
857 // gFitFunction->SetParName(7,"N_{near side}");gFitFunction->FixParameter(7,0.0);
858 // gFitFunction->SetParName(8,"Sigma_{near side}(delta eta 1)"); gFitFunction->FixParameter(8,0.0);
859 // gFitFunction->SetParName(9,"Sigma_{near side}(delta phi)"); gFitFunction->FixParameter(9,0.0);
860 // gFitFunction->SetParName(10,"Exponent_{near side}"); gFitFunction->FixParameter(10,1.0);
861 // gFitFunction->SetParName(11,"Offset_{near side}"); gFitFunction->FixParameter(11,0.0);
862 // gFitFunction->SetParName(12,"Sigma_{near side}(delta eta 2)"); gFitFunction->FixParameter(12,0.0);
864 // //flow contribution
865 // gFitFunction->SetParName(13,"N_{flow}"); gFitFunction->SetParameter(13,0.2);
866 // gFitFunction->SetParName(14,"V1"); gFitFunction->SetParameter(14,0.005);
867 // gFitFunction->SetParName(15,"V2"); gFitFunction->SetParameter(15,0.1);
868 // gFitFunction->SetParName(16,"V3"); gFitFunction->SetParameter(16,0.05);
869 // gFitFunction->SetParName(17,"V4"); gFitFunction->SetParameter(17,0.005);
871 // // flow parameters
872 // Double_t fNV = 0.;
873 // Double_t fV1 = 0.;
874 // Double_t fV2 = 0.;
875 // Double_t fV3 = 0.;
876 // Double_t fV4 = 0.;
878 // //Fitting the correlation function (first the edges to extract flow)
879 // gHist->Fit("gFitFunction","nm","",1.0,1.6);
881 // fNV += gFitFunction->GetParameter(13);
882 // fV1 += gFitFunction->GetParameter(14);
883 // fV2 += gFitFunction->GetParameter(15);
884 // fV3 += gFitFunction->GetParameter(16);
885 // fV4 += gFitFunction->GetParameter(17);
887 // gHist->Fit("gFitFunction","nm","",-1.6,-1.0);
889 // fNV += gFitFunction->GetParameter(13);
890 // fV1 += gFitFunction->GetParameter(14);
891 // fV2 += gFitFunction->GetParameter(15);
892 // fV3 += gFitFunction->GetParameter(16);
893 // fV4 += gFitFunction->GetParameter(17);
895 // // Now fit the whole with fixed flow
896 // gFitFunction->FixParameter(13,fNV/2.);
897 // gFitFunction->FixParameter(14,fV1/2.);
898 // gFitFunction->FixParameter(15,fV2/2.);
899 // gFitFunction->FixParameter(16,fV3/2.);
900 // gFitFunction->FixParameter(17,fV4/2.);
902 // gFitFunction->ReleaseParameter(1);gFitFunction->SetParameter(1,0.3);
903 // gFitFunction->ReleaseParameter(2);gFitFunction->SetParameter(2,0.3);gFitFunction->SetParLimits(2,0.05,0.7);
904 // gFitFunction->ReleaseParameter(3);gFitFunction->SetParameter(3,0.3);gFitFunction->SetParLimits(3,0.05,1.7);
905 // gFitFunction->ReleaseParameter(5);gFitFunction->SetParameter(5,0.7);gFitFunction->SetParLimits(5,0.0,0.9);
906 // gFitFunction->ReleaseParameter(6);gFitFunction->SetParameter(6,0.3);gFitFunction->SetParLimits(6,0.01,1.7);
908 // gFitFunction->ReleaseParameter(7);gFitFunction->SetParameter(1,0.3);
909 // gFitFunction->ReleaseParameter(8);gFitFunction->SetParameter(2,0.3);gFitFunction->SetParLimits(2,0.05,0.7);
910 // gFitFunction->ReleaseParameter(9);gFitFunction->SetParameter(3,0.3);gFitFunction->SetParLimits(3,0.05,1.7);
911 // gFitFunction->ReleaseParameter(11);gFitFunction->SetParameter(5,0.7);gFitFunction->SetParLimits(5,0.0,0.9);
912 // gFitFunction->ReleaseParameter(12);gFitFunction->SetParameter(6,0.3);gFitFunction->SetParLimits(6,0.01,1.7);
914 // gHist->Fit("gFitFunction","nm");
917 // //Cloning the histogram
918 // TString histoName = gHist->GetName(); histoName += "Fit";
919 // 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());
920 // TH2D *gHistResidual = dynamic_cast<TH2D *>(gHist->Clone());
921 // gHistResidual->SetName("gHistResidual");
922 // gHistResidual->Sumw2();
924 // for(Int_t iBinDeltaEta = 1; iBinDeltaEta <= gHist->GetNbinsX(); iBinDeltaEta++) {
925 // for(Int_t iBinDeltaPhi = 1; iBinDeltaPhi <= gHist->GetNbinsY(); iBinDeltaPhi++) {
926 // gHistFit->SetBinContent(iBinDeltaEta,iBinDeltaPhi,gFitFunction->Eval(gHist->GetXaxis()->GetBinCenter(iBinDeltaEta),gHist->GetYaxis()->GetBinCenter(iBinDeltaPhi)));
929 // gHistResidual->Add(gHistFit,-1);
931 // //Write to output file
932 // TString newFileName = "correlationFunctionFit";
933 // if(histoName.Contains("PN")) newFileName += "PN";
934 // else if(histoName.Contains("NP")) newFileName += "NP";
935 // else if(histoName.Contains("PP")) newFileName += "PP";
936 // else if(histoName.Contains("NN")) newFileName += "NN";
937 // newFileName += ".Centrality";
938 // newFileName += gCentrality; newFileName += ".Psi";
939 // if((psiMin == -0.5)&&(psiMax == 0.5)) newFileName += "InPlane.Ptt";
940 // else if((psiMin == 0.5)&&(psiMax == 1.5)) newFileName += "Intermediate.Ptt";
941 // else if((psiMin == 1.5)&&(psiMax == 2.5)) newFileName += "OutOfPlane.Ptt";
942 // else if((psiMin == 2.5)&&(psiMax == 3.5)) newFileName += "Rest.PttFrom";
943 // else newFileName += "All.PttFrom";
944 // newFileName += Form("%.1f",ptTriggerMin); newFileName += "To";
945 // newFileName += Form("%.1f",ptTriggerMax); newFileName += "PtaFrom";
946 // newFileName += Form("%.1f",ptAssociatedMin); newFileName += "To";
947 // newFileName += Form("%.1f",ptAssociatedMax);
948 // newFileName += ".root";
949 // TFile *newFile = TFile::Open(newFileName.Data(),"recreate");
951 // gHistFit->Write();
952 // gHistResidual->Write();
953 // gFitFunction->Write();
959 //____________________________________________________________//
960 void fitCorrelationFunctions(Int_t gCentrality = 1,
961 Double_t psiMin = -0.5, Double_t psiMax = 3.5,
962 Double_t ptTriggerMin = -1.,
963 Double_t ptTriggerMax = -1.,
964 Double_t ptAssociatedMin = -1.,
965 Double_t ptAssociatedMax = -1.,
968 cout<<"FITTING FUNCTION"<<endl;
970 //near side peak: [1]*TMath::Exp(-TMath::Power((0.5*TMath::Power((x/[2]),2)+0.5*TMath::Power((y/[3]),2)),[4]))
971 //away side ridge: [5]*TMath::Exp(-TMath::Power((0.5*TMath::Power(((y-TMath::Pi())/[6]),2)),[7]))
972 //longitudinal ridge: [8]*TMath::Exp(-TMath::Power((0.5*TMath::Power((x/[9]),2)),[10]))
973 //wing structures: [11]*TMath::Power(x,2)
974 //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))
975 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.);
976 gFitFunction->SetName("gFitFunction");
980 gFitFunction->SetParName(0,"N1");
982 gFitFunction->SetParName(1,"N_{near side}");gFitFunction->FixParameter(1,0.0);
983 gFitFunction->SetParName(2,"Sigma_{near side}(delta eta)"); gFitFunction->FixParameter(2,0.0);
984 gFitFunction->SetParName(3,"Sigma_{near side}(delta phi)"); gFitFunction->FixParameter(3,0.0);
985 gFitFunction->SetParName(4,"Exponent_{near side}"); gFitFunction->FixParameter(4,1.0);
987 gFitFunction->SetParName(5,"N_{away side}"); gFitFunction->FixParameter(5,0.0);
988 gFitFunction->SetParName(6,"Sigma_{away side}(delta phi)"); gFitFunction->FixParameter(6,0.0);
989 gFitFunction->SetParName(7,"Exponent_{away side}"); gFitFunction->FixParameter(7,1.0);
991 gFitFunction->SetParName(8,"N_{long. ridge}"); gFitFunction->SetParameter(8,0.05);//
992 gFitFunction->FixParameter(8,0.0);
993 gFitFunction->SetParName(9,"Sigma_{long. ridge}(delta eta)"); gFitFunction->FixParameter(9,0.0);
994 gFitFunction->SetParName(10,"Exponent_{long. ridge}"); gFitFunction->FixParameter(10,1.0);
996 gFitFunction->SetParName(11,"N_{wing}"); gFitFunction->FixParameter(11,0.0);
998 gFitFunction->SetParName(12,"N_{flow}"); gFitFunction->SetParameter(12,0.2);gFitFunction->SetParLimits(12,0.0,10);
999 gFitFunction->SetParName(13,"V1"); gFitFunction->SetParameter(13,0.005);gFitFunction->SetParLimits(13,0.0,10);
1000 gFitFunction->SetParName(14,"V2"); gFitFunction->SetParameter(14,0.1);gFitFunction->SetParLimits(14,0.0,10);
1001 gFitFunction->SetParName(15,"V3"); gFitFunction->SetParameter(15,0.05);gFitFunction->SetParLimits(15,0.0,10);
1002 gFitFunction->SetParName(16,"V4"); gFitFunction->SetParameter(16,0.005);gFitFunction->SetParLimits(16,0.0,10);
1003 gFitFunction->SetParName(17,"Offset"); gFitFunction->FixParameter(17,0.0);
1012 //Fitting the correlation function (first the edges to extract flow)
1013 gHist->Fit("gFitFunction","nm","",1.0,1.6);
1015 fNV += gFitFunction->GetParameter(12);
1016 fV1 += gFitFunction->GetParameter(13);
1017 fV2 += gFitFunction->GetParameter(14);
1018 fV3 += gFitFunction->GetParameter(15);
1019 fV4 += gFitFunction->GetParameter(16);
1021 gHist->Fit("gFitFunction","nm","",-1.6,-1.0);
1023 fNV += gFitFunction->GetParameter(12);
1024 fV1 += gFitFunction->GetParameter(13);
1025 fV2 += gFitFunction->GetParameter(14);
1026 fV3 += gFitFunction->GetParameter(15);
1027 fV4 += gFitFunction->GetParameter(16);
1029 // Now fit the whole with fixed flow
1030 gFitFunction->FixParameter(12,fNV/2.);
1031 gFitFunction->FixParameter(13,fV1/2.);
1032 gFitFunction->FixParameter(14,fV2/2.);
1033 gFitFunction->FixParameter(15,fV3/2.);
1034 gFitFunction->FixParameter(16,fV4/2.);
1036 gFitFunction->ReleaseParameter(0);gFitFunction->SetParameter(0,1.0);
1037 gFitFunction->ReleaseParameter(1);gFitFunction->SetParameter(1,0.3);
1038 gFitFunction->ReleaseParameter(2);gFitFunction->SetParameter(2,0.3);gFitFunction->SetParLimits(2,0.05,0.7);
1039 gFitFunction->ReleaseParameter(3);gFitFunction->SetParameter(3,0.3);gFitFunction->SetParLimits(3,0.05,1.7);
1040 //gFitFunction->ReleaseParameter(4);gFitFunction->SetParameter(4,1.0);gFitFunction->SetParLimits(4,0.0,2.0);
1041 gFitFunction->ReleaseParameter(5);gFitFunction->SetParameter(5,1.0);//gFitFunction->SetParLimits(5,0.0,10);
1042 gFitFunction->ReleaseParameter(6);gFitFunction->SetParameter(6,0.5);//gFitFunction->SetParLimits(6,0.0,10);
1043 //gFitFunction->ReleaseParameter(7);gFitFunction->SetParameter(7,1.0);gFitFunction->SetParLimits(7,0.0,2.0);
1044 gFitFunction->ReleaseParameter(8);gFitFunction->SetParameter(8,0.05);
1045 gFitFunction->ReleaseParameter(9);gFitFunction->SetParameter(9,0.6);gFitFunction->SetParLimits(9,0.1,10.0);
1046 //gFitFunction->ReleaseParameter(10);gFitFunction->SetParameter(10,1.0);gFitFunction->SetParLimits(10,0.0,2.0);
1047 gFitFunction->ReleaseParameter(17);gFitFunction->SetParameter(17,0.7);gFitFunction->SetParLimits(17,0.0,0.9);
1049 gHist->Fit("gFitFunction","nm");
1052 //Cloning the histogram
1053 TString histoName = gHist->GetName(); histoName += "Fit";
1054 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());
1055 TH2D *gHistResidual = dynamic_cast<TH2D *>(gHist->Clone());
1056 gHistResidual->SetName("gHistResidual");
1057 gHistResidual->Sumw2();
1059 for(Int_t iBinDeltaEta = 1; iBinDeltaEta <= gHist->GetNbinsX(); iBinDeltaEta++) {
1060 for(Int_t iBinDeltaPhi = 1; iBinDeltaPhi <= gHist->GetNbinsY(); iBinDeltaPhi++) {
1061 gHistFit->SetBinContent(iBinDeltaEta,iBinDeltaPhi,gFitFunction->Eval(gHist->GetXaxis()->GetBinCenter(iBinDeltaEta),gHist->GetYaxis()->GetBinCenter(iBinDeltaPhi)));
1064 gHistResidual->Add(gHistFit,-1);
1066 //Write to output file
1067 TString newFileName = "correlationFunctionFit";
1068 if(histoName.Contains("PN")) newFileName += "PN";
1069 else if(histoName.Contains("NP")) newFileName += "NP";
1070 else if(histoName.Contains("PP")) newFileName += "PP";
1071 else if(histoName.Contains("NN")) newFileName += "NN";
1072 newFileName += ".Centrality";
1073 newFileName += gCentrality; newFileName += ".Psi";
1074 if((psiMin == -0.5)&&(psiMax == 0.5)) newFileName += "InPlane.Ptt";
1075 else if((psiMin == 0.5)&&(psiMax == 1.5)) newFileName += "Intermediate.Ptt";
1076 else if((psiMin == 1.5)&&(psiMax == 2.5)) newFileName += "OutOfPlane.Ptt";
1077 else if((psiMin == 2.5)&&(psiMax == 3.5)) newFileName += "Rest.PttFrom";
1078 else newFileName += "All.PttFrom";
1079 newFileName += Form("%.1f",ptTriggerMin); newFileName += "To";
1080 newFileName += Form("%.1f",ptTriggerMax); newFileName += "PtaFrom";
1081 newFileName += Form("%.1f",ptAssociatedMin); newFileName += "To";
1082 newFileName += Form("%.1f",ptAssociatedMax);
1083 newFileName += ".root";
1084 TFile *newFile = TFile::Open(newFileName.Data(),"recreate");
1087 gHistResidual->Write();
1088 gFitFunction->Write();
1096 // //____________________________________________________________//
1097 // void fitCorrelationFunctions(Int_t gCentrality = 1,
1098 // Double_t psiMin = -0.5, Double_t psiMax = 3.5,
1099 // Double_t ptTriggerMin = -1.,
1100 // Double_t ptTriggerMax = -1.,
1101 // Double_t ptAssociatedMin = -1.,
1102 // Double_t ptAssociatedMax = -1.,
1105 // cout<<"FITTING FUNCTION (HOUSTON)"<<endl;
1108 // //x axis = delta_eta
1109 // //y axis = delta_phi
1110 // // [9]*exp(-1*pow(((x/[10])^2 + (y/[10])^2),0.5)) Hyper expo
1111 // TF2 *fit1 = new TF2("fit1","[0] + [1]*cos(y) + [2]*cos(2*y) + [3]*cos(3*y) + [4]*cos(4*y) +[5]*cos(5*y)+ [6]*exp(-0.5*pow(((x/[7])^2 + (y/[8])^2),[11])) + [6]*exp(-0.5*pow(((x/[7])^2 + ((y-6.283)/[8])^2),[11]))+ [9]*exp(-1*((x/[10])^2 + (y/[10])^2)) ",-2.0,2.0,-TMath::Pi()/2.,3.*TMath::Pi()/2.);
1115 // Double_t Parameters[] = {0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.3,0.3,1.0,0.1,0.1};
1117 // fit1->SetParameters(Parameters); // input pars from macro arguments
1119 // fit1->SetParName(0,"offset");
1120 // fit1->SetParName(1,"v1");
1121 // fit1->SetParName(2,"v2");
1122 // fit1->SetParName(3,"v3");
1123 // fit1->SetParName(4,"v4");
1124 // fit1->SetParName(5,"v5");
1125 // fit1->SetParName(6,"Ridgeamp");
1126 // fit1->SetParName(7,"Ridgesigx");
1127 // fit1->SetParName(8,"Ridgesigy");
1128 // fit1->SetParName(9,"Expoamp");
1129 // fit1->SetParName(10,"Exposig");
1130 // fit1->SetParName(11,"Gausspara");
1133 // //Fit Parameter Ranges
1134 // fit1->SetParLimits(0,-2.0,2.0); //offset
1135 // fit1->SetParLimits(1,-1.0,0.1); //v1
1136 // fit1->SetParLimits(2,-1.6,0.9); //v2
1137 // fit1->SetParLimits(3,0.0,0.5); //v3
1138 // fit1->SetParLimits(4,0.0,0.9); //v4
1139 // fit1->SetParLimits(5,0.0,0.9); //v5
1140 // fit1->SetParLimits(6,0.0,1.5); //Ridgeamp
1141 // fit1->SetParLimits(7,0.1,3.0); //Ridgesigx
1142 // fit1->SetParLimits(8,0.1,2.0); //Ridgesigy
1143 // fit1->SetParLimits(9,0.0,6.0); //Expoamp
1144 // fit1->SetParLimits(10,0.05,0.5); //Exposig
1145 // fit1->SetParLimits(11,0.0,2.0); //Gausspara
1147 // //Fitting the correlation function
1148 // gHist->Fit("fit1","nm");
1150 // //Cloning the histogram
1151 // TString histoName = gHist->GetName(); histoName += "Fit";
1152 // 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());
1153 // TH2D *gHistResidual = dynamic_cast<TH2D *>(gHist->Clone());
1154 // gHistResidual->SetName("gHistResidual");
1155 // gHistResidual->Sumw2();
1157 // for(Int_t iBinDeltaEta = 1; iBinDeltaEta <= gHist->GetNbinsX(); iBinDeltaEta++) {
1158 // for(Int_t iBinDeltaPhi = 1; iBinDeltaPhi <= gHist->GetNbinsY(); iBinDeltaPhi++) {
1159 // gHistFit->SetBinContent(iBinDeltaEta,iBinDeltaPhi,fit1->Eval(gHist->GetXaxis()->GetBinCenter(iBinDeltaEta),gHist->GetYaxis()->GetBinCenter(iBinDeltaPhi)));
1162 // gHistResidual->Add(gHistFit,-1);
1164 // //Write to output file
1165 // TString newFileName = "correlationFunctionFit";
1166 // if(histoName.Contains("PN")) newFileName += "PN";
1167 // else if(histoName.Contains("NP")) newFileName += "NP";
1168 // else if(histoName.Contains("PP")) newFileName += "PP";
1169 // else if(histoName.Contains("NN")) newFileName += "NN";
1170 // newFileName += ".Centrality";
1171 // newFileName += gCentrality; newFileName += ".Psi";
1172 // if((psiMin == -0.5)&&(psiMax == 0.5)) newFileName += "InPlane.Ptt";
1173 // else if((psiMin == 0.5)&&(psiMax == 1.5)) newFileName += "Intermediate.Ptt";
1174 // else if((psiMin == 1.5)&&(psiMax == 2.5)) newFileName += "OutOfPlane.Ptt";
1175 // else if((psiMin == 2.5)&&(psiMax == 3.5)) newFileName += "Rest.PttFrom";
1176 // else newFileName += "All.PttFrom";
1177 // newFileName += Form("%.1f",ptTriggerMin); newFileName += "To";
1178 // newFileName += Form("%.1f",ptTriggerMax); newFileName += "PtaFrom";
1179 // newFileName += Form("%.1f",ptAssociatedMin); newFileName += "To";
1180 // newFileName += Form("%.1f",ptAssociatedMax);
1181 // newFileName += ".root";
1182 // TFile *newFile = TFile::Open(newFileName.Data(),"recreate");
1184 // gHistFit->Write();
1185 // gHistResidual->Write();
1187 // newFile->Close();