]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/EBYE/macros/drawBalanceFunction2DPsi.C
new task MK
[u/mrichter/AliRoot.git] / PWGCF / EBYE / macros / drawBalanceFunction2DPsi.C
index 5b529d23f25051f7d1c3d990e210cb6afb690fc7..8a8beda4027ec750dcaec269805fd1a7796ad6c9 100644 (file)
@@ -1,5 +1,6 @@
-const Int_t numberOfCentralityBins = 11;
-TString centralityArray[numberOfCentralityBins] = {"0-10","10-20","20-30","30-40","40-50","50-60","60-70","70-80","0-1","1-2","0-100"};
+const Int_t numberOfCentralityBins = 12;
+TString centralityArray[numberOfCentralityBins] = {"0-10","10-20","20-30","30-40","40-50","50-60","60-70","70-80","0-100","0-1","1-2","2-3"};
+
 
 const Int_t gRebin = 1;
 void drawBalanceFunction2DPsi(const char* filename = "AnalysisResultsPsi.root", 
@@ -9,6 +10,8 @@ void drawBalanceFunction2DPsi(const char* filename = "AnalysisResultsPsi.root",
                              Bool_t kShowShuffled = kFALSE, 
                              Bool_t kShowMixed = kTRUE, 
                              Double_t psiMin = -0.5, Double_t psiMax = 0.5,
+                             Double_t vertexZMin = -10.,
+                             Double_t vertexZMax = 10.,
                              Double_t ptTriggerMin = -1.,
                              Double_t ptTriggerMax = -1.,
                              Double_t ptAssociatedMin = -1.,
@@ -42,7 +45,8 @@ void drawBalanceFunction2DPsi(const char* filename = "AnalysisResultsPsi.root",
     return;
   }
   else 
-    draw(listBF,listBFShuffled,listBFMixed,gCentrality,psiMin,psiMax,
+    draw(listBF,listBFShuffled,listBFMixed,gCentrality,gCentralityEstimator,
+        psiMin,psiMax,vertexZMin,vertexZMax,
         ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,
         k2pMethod,eventClass);  
 }
@@ -101,18 +105,18 @@ TList *GetListOfObjects(const char* filename,
 
     listBF = dynamic_cast<TList *>(dir->Get(listBFName.Data()));
     cout<<"======================================================="<<endl;
-    cout<<"List name (check): "<<listBFName.Data()<<endl;
     cout<<"List name: "<<listBF->GetName()<<endl;
     //listBF->ls();
     
     //Get the histograms
     TString histoName;
     if(kData == 0)
-      histoName = "fHistPV0M";
+      histoName = "fHistP";
     else if(kData == 1)
-      histoName = "fHistP_shuffleV0M";
+      histoName = "fHistP_shuffle";
     else if(kData == 2)
-      histoName = "fHistPV0M";
+      histoName = "fHistP";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
     AliTHn *fHistP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));  
     if(!fHistP) {
       Printf("fHistP %s not found!!!",histoName.Data());
@@ -121,11 +125,12 @@ TList *GetListOfObjects(const char* filename,
     fHistP->FillParent(); fHistP->DeleteContainers();
     
     if(kData == 0)
-      histoName = "fHistNV0M";
+      histoName = "fHistN";
     if(kData == 1)
-      histoName = "fHistN_shuffleV0M";
+      histoName = "fHistN_shuffle";
     if(kData == 2)
-      histoName = "fHistNV0M";
+      histoName = "fHistN";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
     AliTHn *fHistN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
     if(!fHistN) {
       Printf("fHistN %s not found!!!",histoName.Data());
@@ -134,11 +139,12 @@ TList *GetListOfObjects(const char* filename,
     fHistN->FillParent(); fHistN->DeleteContainers();
     
     if(kData == 0)
-      histoName = "fHistPNV0M";
+      histoName = "fHistPN";
     if(kData == 1)
-      histoName = "fHistPN_shuffleV0M";
+      histoName = "fHistPN_shuffle";
     if(kData == 2)
-      histoName = "fHistPNV0M";
+      histoName = "fHistPN";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
     AliTHn *fHistPN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
     if(!fHistPN) {
       Printf("fHistPN %s not found!!!",histoName.Data());
@@ -147,11 +153,12 @@ TList *GetListOfObjects(const char* filename,
     fHistPN->FillParent(); fHistPN->DeleteContainers();
     
     if(kData == 0)
-      histoName = "fHistNPV0M";
+      histoName = "fHistNP";
     if(kData == 1)
-      histoName = "fHistNP_shuffleV0M";
+      histoName = "fHistNP_shuffle";
     if(kData == 2)
-      histoName = "fHistNPV0M";
+      histoName = "fHistNP";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
     AliTHn *fHistNP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
     if(!fHistNP) {
       Printf("fHistNP %s not found!!!",histoName.Data());
@@ -160,11 +167,12 @@ TList *GetListOfObjects(const char* filename,
     fHistNP->FillParent(); fHistNP->DeleteContainers();
     
     if(kData == 0)
-      histoName = "fHistPPV0M";
+      histoName = "fHistPP";
     if(kData == 1)
-      histoName = "fHistPP_shuffleV0M";
+      histoName = "fHistPP_shuffle";
     if(kData == 2)
-      histoName = "fHistPPV0M";
+      histoName = "fHistPP";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
     AliTHn *fHistPP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
     if(!fHistPP) {
       Printf("fHistPP %s not found!!!",histoName.Data());
@@ -173,11 +181,12 @@ TList *GetListOfObjects(const char* filename,
     fHistPP->FillParent(); fHistPP->DeleteContainers();
     
     if(kData == 0)
-      histoName = "fHistNNV0M";
+      histoName = "fHistNN";
     if(kData == 1)
-      histoName = "fHistNN_shuffleV0M";
+      histoName = "fHistNN_shuffle";
     if(kData == 2)
-      histoName = "fHistNNV0M";
+      histoName = "fHistNN";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
     AliTHn *fHistNN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
     if(!fHistNN) {
       Printf("fHistNN %s not found!!!",histoName.Data());
@@ -197,7 +206,10 @@ TList *GetListOfObjects(const char* filename,
 
 //______________________________________________________//
 void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
-         Int_t gCentrality, Double_t psiMin, Double_t psiMax,
+         Int_t gCentrality, const char* gCentralityEstimator,
+         Double_t psiMin, Double_t psiMax,
+         Double_t vertexZMin,
+         Double_t vertexZMax,
          Double_t ptTriggerMin, Double_t ptTriggerMax,
          Double_t ptAssociatedMin, Double_t ptAssociatedMax,
          Bool_t k2pMethod = kFALSE, TString eventClass) {  
@@ -210,17 +222,29 @@ void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
   AliTHn *hNN = NULL;
   //listBF->ls();
   //Printf("=================");
-  hP = (AliTHn*) listBF->FindObject("fHistPV0M");
+  TString histoName = "fHistP";
+  if(gCentralityEstimator) histoName += gCentralityEstimator;
+  hP = (AliTHn*) listBF->FindObject(histoName.Data());
   hP->SetName("gHistP");
-  hN = (AliTHn*) listBF->FindObject("fHistNV0M");
+  histoName = "fHistN";
+  if(gCentralityEstimator) histoName += gCentralityEstimator;
+  hN = (AliTHn*) listBF->FindObject(histoName.Data());
   hN->SetName("gHistN");
-  hPN = (AliTHn*) listBF->FindObject("fHistPNV0M");
+  histoName = "fHistPN";
+  if(gCentralityEstimator) histoName += gCentralityEstimator;
+  hPN = (AliTHn*) listBF->FindObject(histoName.Data());
   hPN->SetName("gHistPN");
-  hNP = (AliTHn*) listBF->FindObject("fHistNPV0M");
+  histoName = "fHistNP";
+  if(gCentralityEstimator) histoName += gCentralityEstimator;
+  hNP = (AliTHn*) listBF->FindObject(histoName.Data());
   hNP->SetName("gHistNP");
-  hPP = (AliTHn*) listBF->FindObject("fHistPPV0M");
+  histoName = "fHistPP";
+  if(gCentralityEstimator) histoName += gCentralityEstimator;
+  hPP = (AliTHn*) listBF->FindObject(histoName.Data());
   hPP->SetName("gHistPP");
-  hNN = (AliTHn*) listBF->FindObject("fHistNNV0M");
+  histoName = "fHistNN";
+  if(gCentralityEstimator) histoName += gCentralityEstimator;
+  hNN = (AliTHn*) listBF->FindObject(histoName.Data());
   hNN->SetName("gHistNN");
 
   AliBalancePsi *b = new AliBalancePsi();
@@ -241,18 +265,29 @@ void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
   AliTHn *hNNShuffled = NULL;
   if(listBFShuffled) {
     //listBFShuffled->ls();
-    
-    hPShuffled = (AliTHn*) listBFShuffled->FindObject("fHistP_shuffleV0M");
+    histoName = "fHistP_shuffle";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hPShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
     hPShuffled->SetName("gHistPShuffled");
-    hNShuffled = (AliTHn*) listBFShuffled->FindObject("fHistN_shuffleV0M");
+    histoName = "fHistN_shuffle";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hNShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
     hNShuffled->SetName("gHistNShuffled");
-    hPNShuffled = (AliTHn*) listBFShuffled->FindObject("fHistPN_shuffleV0M");
+    histoName = "fHistPN_shuffle";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hPNShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
     hPNShuffled->SetName("gHistPNShuffled");
-    hNPShuffled = (AliTHn*) listBFShuffled->FindObject("fHistNP_shuffleV0M");
+    histoName = "fHistNP_shuffle";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hNPShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
     hNPShuffled->SetName("gHistNPShuffled");
-    hPPShuffled = (AliTHn*) listBFShuffled->FindObject("fHistPP_shuffleV0M");
+    histoName = "fHistPP_shuffle";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hPPShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
     hPPShuffled->SetName("gHistPPShuffled");
-    hNNShuffled = (AliTHn*) listBFShuffled->FindObject("fHistNN_shuffleV0M");
+    histoName = "fHistNN_shuffle";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hNNShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
     hNNShuffled->SetName("gHistNNShuffled");
     
     AliBalancePsi *bShuffled = new AliBalancePsi();
@@ -275,18 +310,31 @@ void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
 
   if(listBFMixed) {
     //listBFMixed->ls();
-
-    hPMixed = (AliTHn*) listBFMixed->FindObject("fHistPV0M");
+    histoName = "fHistP";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hPMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
     hPMixed->SetName("gHistPMixed");
-    hNMixed = (AliTHn*) listBFMixed->FindObject("fHistNV0M");
+    histoName = "fHistN";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hNMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
     hNMixed->SetName("gHistNMixed");
-    hPNMixed = (AliTHn*) listBFMixed->FindObject("fHistPNV0M");
+    histoName = "fHistPN";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hPNMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
     hPNMixed->SetName("gHistPNMixed");
-    hNPMixed = (AliTHn*) listBFMixed->FindObject("fHistNPV0M");
+    histoName = "fHistNP";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hNPMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
+    histoName = "fHistNP";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
     hNPMixed->SetName("gHistNPMixed");
-    hPPMixed = (AliTHn*) listBFMixed->FindObject("fHistPPV0M");
+    histoName = "fHistPP";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hPPMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
     hPPMixed->SetName("gHistPPMixed");
-    hNNMixed = (AliTHn*) listBFMixed->FindObject("fHistNNV0M");
+    histoName = "fHistNN";
+    if(gCentralityEstimator) histoName += gCentralityEstimator;
+    hNNMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
     hNNMixed->SetName("gHistNNMixed");
     
     AliBalancePsi *bMixed = new AliBalancePsi();
@@ -337,13 +385,13 @@ void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
 
   if(k2pMethod) 
     if(bMixed)
-      gHistBalanceFunction = b->GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
+      gHistBalanceFunction = b->GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
     else{
       cerr<<"NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
       return;
     }
   else
-    gHistBalanceFunction = b->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+    gHistBalanceFunction = b->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
   gHistBalanceFunction->SetTitle(histoTitle.Data());
   gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.3);
   gHistBalanceFunction->SetName("gHistBalanceFunction");
@@ -352,13 +400,13 @@ void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
     
     if(k2pMethod) 
       if(bMixed)
-       gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
+       gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
       else{
        cerr<<"NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
        return;
       }
     else
-      gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+      gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
     gHistBalanceFunctionShuffled->SetTitle(histoTitle.Data());
     gHistBalanceFunctionShuffled->GetYaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionShuffled->SetName("gHistBalanceFunctionShuffled");
@@ -367,13 +415,13 @@ void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
   if(listBFMixed) {
     if(k2pMethod) 
       if(bMixed)
-       gHistBalanceFunctionMixed = bMixed->GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
+       gHistBalanceFunctionMixed = bMixed->GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
       else{
        cerr<<"NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
        return;
       }
     else
-      gHistBalanceFunctionMixed = bMixed->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+      gHistBalanceFunctionMixed = bMixed->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
     gHistBalanceFunctionMixed->SetTitle(histoTitle.Data());
     gHistBalanceFunctionMixed->GetYaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionMixed->SetName("gHistBalanceFunctionMixed");
@@ -445,7 +493,7 @@ void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
     c4a->SetLeftMargin(0.15);
     gHistBalanceFunctionSubtracted->DrawCopy("colz");
 
-    fitbalanceFunction(gCentrality, psiMin = -0.5, psiMax,
+    fitbalanceFunction(gCentrality, psiMin , psiMax,
                       ptTriggerMin, ptTriggerMax,
                       ptAssociatedMin, ptAssociatedMax,
                       gHistBalanceFunctionSubtracted,k2pMethod, eventClass);
@@ -506,66 +554,69 @@ void fitbalanceFunction(Int_t gCentrality = 1,
                        TH2D *gHist,
                        Bool_t k2pMethod = kFALSE, 
                        TString eventClass="EventPlane") {
-
+  //balancing charges: [1]*TMath::Exp(-0.5*TMath::Power(((x - [3])/[2]),2)-0.5*TMath::Power(((y - [5])/[4]),2)) 
+  //short range correlations: [6]*TMath::Exp(-0.5*TMath::Power(((x - [8])/[7]),2)-0.5*TMath::Power(((y - [10])/[9]),2))
   cout<<"FITTING FUNCTION"<<endl;
 
-  //near side peak: [1]*TMath::Exp(-TMath::Power((0.5*TMath::Power((x/[2]),2)+0.5*TMath::Power((y/[3]),2)),[4]))
-  //away side ridge: [5]*TMath::Exp(-TMath::Power((0.5*TMath::Power(((y-TMath::Pi())/[6]),2)),[7]))
-  //longitudinal ridge: [8]*TMath::Exp(-TMath::Power((0.5*TMath::Power((x/[9]),2)),[10]))
-  //wing structures: [11]*TMath::Power(x,2)
-  //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))
-  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.); 
+  TF2 *gFitFunction = new TF2("gFitFunction","[0] + [1]*TMath::Exp(-0.5*TMath::Power(((x - [3])/[2]),2)-0.5*TMath::Power(((y - [5])/[4]),2)) + [6]*TMath::Exp(-0.5*TMath::Power(((x - [8])/[7]),2)-0.5*TMath::Power(((y - [10])/[9]),2))",-1.2,1.2,-TMath::Pi()/2.,3.*TMath::Pi()/2.); 
   gFitFunction->SetName("gFitFunction");
 
-
   //Normalization
   gFitFunction->SetParName(0,"N1"); 
-  //near side peak
-  gFitFunction->SetParName(1,"N_{near side}");gFitFunction->FixParameter(1,0.0);
-  gFitFunction->SetParName(2,"Sigma_{near side}(delta eta)"); gFitFunction->FixParameter(2,0.0);
-  gFitFunction->SetParName(3,"Sigma_{near side}(delta phi)"); gFitFunction->FixParameter(3,0.0);
-  gFitFunction->SetParName(4,"Exponent_{near side}"); gFitFunction->FixParameter(4,1.0);
-  //away side ridge
-  gFitFunction->SetParName(5,"N_{away side}"); gFitFunction->FixParameter(5,0.0);
-  gFitFunction->SetParName(6,"Sigma_{away side}(delta phi)"); gFitFunction->FixParameter(6,0.0);
-  gFitFunction->SetParName(7,"Exponent_{away side}"); gFitFunction->FixParameter(7,1.0);
-  //longitudinal ridge
-  gFitFunction->SetParName(8,"N_{long. ridge}"); gFitFunction->SetParameter(8,0.05);//
-  gFitFunction->FixParameter(8,0.0);
-  gFitFunction->SetParName(9,"Sigma_{long. ridge}(delta eta)"); gFitFunction->FixParameter(9,0.0);
-  gFitFunction->SetParName(10,"Exponent_{long. ridge}"); gFitFunction->FixParameter(10,1.0);
-  //wing structures
-  gFitFunction->SetParName(11,"N_{wing}"); gFitFunction->FixParameter(11,0.0);
-  //flow contribution
-  gFitFunction->SetParName(12,"N_{flow}"); gFitFunction->FixParameter(12,0.0);
-  gFitFunction->SetParName(13,"V1"); gFitFunction->FixParameter(13,0.0);
-  gFitFunction->SetParName(14,"V2"); gFitFunction->FixParameter(14,0.0);
-  gFitFunction->SetParName(15,"V3"); gFitFunction->FixParameter(15,0.0);
-  gFitFunction->SetParName(16,"V4"); gFitFunction->FixParameter(16,0.0);
-  gFitFunction->SetParName(17,"Offset"); gFitFunction->FixParameter(17,0.0);
-
-  // just release the near side peak
-  gFitFunction->ReleaseParameter(0);gFitFunction->SetParameter(0,1.0);
-  gFitFunction->ReleaseParameter(1);gFitFunction->SetParameter(1,0.3);gFitFunction->SetParLimits(1,0.0,100);
-  gFitFunction->ReleaseParameter(2);gFitFunction->SetParameter(2,0.3);gFitFunction->SetParLimits(2,0.05,0.7);
-  gFitFunction->ReleaseParameter(3);gFitFunction->SetParameter(3,0.3);gFitFunction->SetParLimits(3,0.05,1.7);
-
-  gHist->Fit("gFitFunction","nm");
+  gFitFunction->SetParameter(0,1.0);
+
+  //2D balance function
+  gFitFunction->SetParName(1,"N_{BF}");
+  gFitFunction->SetParameter(1,1.0);
+  gFitFunction->SetParLimits(1, 0., 100.);
+  gFitFunction->SetParName(2,"Sigma_{BF}(delta eta)"); 
+  gFitFunction->SetParameter(2,0.6);
+  gFitFunction->SetParLimits(2, 0., 1.);
+  gFitFunction->SetParName(3,"Mean_{BF}(delta eta)"); 
+  gFitFunction->SetParameter(3,0.0);
+  gFitFunction->SetParLimits(3, -0.2, 0.2);
+  gFitFunction->SetParName(4,"Sigma_{BF}(delta phi)"); 
+  gFitFunction->SetParameter(4,0.6);
+  gFitFunction->SetParLimits(4, 0., 1.);
+  gFitFunction->SetParName(5,"Mean_{BF}(delta phi)"); 
+  gFitFunction->SetParameter(5,0.0);
+  gFitFunction->SetParLimits(5, -0.2, 0.2);
+
+  //short range structure
+  gFitFunction->SetParName(6,"N_{SR}");
+  gFitFunction->SetParameter(6,5.0);
+  gFitFunction->SetParLimits(6, 0., 100.);
+  gFitFunction->SetParName(7,"Sigma_{SR}(delta eta)"); 
+  gFitFunction->SetParameter(7,0.01);
+  gFitFunction->SetParLimits(7, 0.0, 0.1);
+  gFitFunction->SetParName(8,"Mean_{SR}(delta eta)"); 
+  gFitFunction->SetParameter(8,0.0);
+  gFitFunction->SetParLimits(8, -0.01, 0.01);
+  gFitFunction->SetParName(9,"Sigma_{SR}(delta phi)"); 
+  gFitFunction->SetParameter(9,0.01);
+  gFitFunction->SetParLimits(9, 0.0, 0.1);
+  gFitFunction->SetParName(10,"Mean_{SR}(delta phi)"); 
+  gFitFunction->SetParameter(10,0.0);
+  gFitFunction->SetParLimits(10, -0.01, 0.01);
 
 
   //Cloning the histogram
-  TString histoName = gHist->GetName(); histoName += "Fit"; 
-  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());
   TH2D *gHistResidual = dynamic_cast<TH2D *>(gHist->Clone());
   gHistResidual->SetName("gHistResidual");
   gHistResidual->Sumw2();
 
-  for(Int_t iBinDeltaEta = 1; iBinDeltaEta <= gHist->GetNbinsX(); iBinDeltaEta++) {
-    for(Int_t iBinDeltaPhi = 1; iBinDeltaPhi <= gHist->GetNbinsY(); iBinDeltaPhi++) {
-      gHistFit->SetBinContent(iBinDeltaEta,iBinDeltaPhi,gFitFunction->Eval(gHist->GetXaxis()->GetBinCenter(iBinDeltaEta),gHist->GetYaxis()->GetBinCenter(iBinDeltaPhi)));
-    }
+  //Fitting the 2D bf
+  for(Int_t iAttempt = 0; iAttempt < 10; iAttempt++) {
+    gHist->Fit("gFitFunction","nm");
+    for(Int_t iParam = 0; iParam < 11; iParam++) 
+      gFitFunction->SetParameter(iParam,gFitFunction->GetParameter(iParam));
   }
-  gHistResidual->Add(gHistFit,-1);
+  cout<<"======================================================"<<endl;
+  cout<<"Fit chi2/ndf: "<<gFitFunction->GetChisquare()/gFitFunction->GetNDF()<<" - chi2: "<<gFitFunction->GetChisquare()<<" - ndf: "<<gFitFunction->GetNDF()<<endl;
+  cout<<"======================================================"<<endl;
+
+  //Getting the residual
+  gHistResidual->Add(gFitFunction,-1);
 
   //Write to output file
   TString newFileName = "balanceFunctionFit2D.";
@@ -594,18 +645,16 @@ void fitbalanceFunction(Int_t gCentrality = 1,
   newFileName += ".root";
   TFile *newFile = TFile::Open(newFileName.Data(),"recreate");
   gHist->Write();
-  gHistFit->Write();
   gHistResidual->Write();
   gFitFunction->Write();
   newFile->Close();
-  
-
 }
 
-
-
 //____________________________________________________________//
 void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
+                const char* gCentralityEstimator = "V0M",
+                Int_t gBit = 128,
+                const char* gEventPlaneEstimator = "VZERO",
                 Int_t gCentrality = 1,
                 Bool_t kShowShuffled = kFALSE, 
                 Bool_t kShowMixed = kFALSE, 
@@ -613,14 +662,19 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
                 Double_t ptTriggerMin = -1.,
                 Double_t ptTriggerMax = -1.,
                 Double_t ptAssociatedMin = -1.,
-                Double_t ptAssociatedMax = -1.) {
+                Double_t ptAssociatedMax = -1.,
+                Bool_t k2pMethod = kTRUE) {
   //Macro that draws the BF distributions for each centrality bin
   //for reaction plane dependent analysis
   //Author: Panos.Christakoglou@nikhef.nl
   TGaxis::SetMaxDigits(3);
 
   //Get the input file
-  TString filename = lhcPeriod; filename +="/PttFrom";
+  TString filename = lhcPeriod; 
+  filename += "/Centrality"; filename += gCentralityEstimator;
+  filename += "_Bit"; filename += gBit;
+  filename += "_"; filename += gEventPlaneEstimator;
+  filename +="/PttFrom";
   filename += Form("%.1f",ptTriggerMin); filename += "To"; 
   filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
   filename += Form("%.1f",ptAssociatedMin); filename += "To"; 
@@ -635,7 +689,9 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
   filename += Form("%.1f",ptTriggerMin); filename += "To"; 
   filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
   filename += Form("%.1f",ptAssociatedMin); filename += "To"; 
-  filename += Form("%.1f",ptAssociatedMax);  filename += ".root";  
+  filename += Form("%.1f",ptAssociatedMax);  
+  if(k2pMethod) filename += "_2pMethod";
+  filename += ".root";  
 
   //Open the file
   TFile *f = TFile::Open(filename.Data());
@@ -655,7 +711,7 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
   gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.3);
   gHistBalanceFunction->GetZaxis()->SetTitleOffset(1.3);
   gHistBalanceFunction->GetXaxis()->SetTitle("#Delta #eta");
-  gHistBalanceFunction->GetYaxis()->SetTitle("#Delta #varphi (deg.)");
+  gHistBalanceFunction->GetYaxis()->SetTitle("#Delta #varphi (rad)");
   gHistBalanceFunction->GetZaxis()->SetTitle("B(#Delta #eta, #Delta #varphi)");
 
   //Shuffled balance function
@@ -669,7 +725,7 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
     gHistBalanceFunctionShuffled->GetYaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionShuffled->GetZaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionShuffled->GetXaxis()->SetTitle("#Delta #eta");
-    gHistBalanceFunctionShuffled->GetYaxis()->SetTitle("#Delta #varphi (deg.)");
+    gHistBalanceFunctionShuffled->GetYaxis()->SetTitle("#Delta #varphi (rad)");
     gHistBalanceFunctionShuffled->GetZaxis()->SetTitle("B(#Delta #eta, #Delta #varphi)");
   }
 
@@ -684,7 +740,7 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
     gHistBalanceFunctionMixed->GetYaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionMixed->GetZaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionMixed->GetXaxis()->SetTitle("#Delta #eta");
-    gHistBalanceFunctionMixed->GetYaxis()->SetTitle("#Delta #varphi (deg.)");
+    gHistBalanceFunctionMixed->GetYaxis()->SetTitle("#Delta #varphi (rad)");
     gHistBalanceFunctionMixed->GetZaxis()->SetTitle("B(#Delta #eta, #Delta #varphi)");
   }
 
@@ -699,7 +755,7 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
     gHistBalanceFunctionSubtracted->GetYaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionSubtracted->GetZaxis()->SetTitleOffset(1.3);
     gHistBalanceFunctionSubtracted->GetXaxis()->SetTitle("#Delta #eta");
-    gHistBalanceFunctionSubtracted->GetYaxis()->SetTitle("#Delta #varphi (deg.)");
+    gHistBalanceFunctionSubtracted->GetYaxis()->SetTitle("#Delta #varphi (rad)");
     gHistBalanceFunctionSubtracted->GetZaxis()->SetTitle("B(#Delta #eta, #Delta #varphi)");
   }
 
@@ -736,10 +792,12 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
   TCanvas *c1 = new TCanvas("c1","Raw balance function 2D",0,0,600,500);
   c1->SetFillColor(10); c1->SetHighLightColor(10);
   c1->SetLeftMargin(0.17); c1->SetTopMargin(0.05);
-  gHistBalanceFunction->SetTitle("Raw balance function");
+  gHistBalanceFunction->SetTitle("");
   gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.4);
   gHistBalanceFunction->GetYaxis()->SetNdivisions(10);
+  gHistBalanceFunction->GetXaxis()->SetRangeUser(-1.4,1.4); 
   gHistBalanceFunction->GetXaxis()->SetNdivisions(10);
+  gHistBalanceFunction->GetYaxis()->SetTitle("#Delta #varphi (rad)");
   gHistBalanceFunction->DrawCopy("lego2");
   gPad->SetTheta(30); // default is 30
   gPad->SetPhi(-60); // default is 30
@@ -750,6 +808,23 @@ void drawBFPsi2D(const char* lhcPeriod = "LHC11h",
   latexInfo1->DrawLatex(0.64,0.76,pttLatex.Data());
   latexInfo1->DrawLatex(0.64,0.70,ptaLatex.Data());
 
+  TString pngName = "BalanceFunction2D."; 
+  pngName += "Centrality";
+  pngName += gCentrality; 
+  if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
+  else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
+  else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
+  else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.PttFrom";
+  else pngName += "All.PttFrom";  
+  pngName += Form("%.1f",ptTriggerMin); pngName += "To"; 
+  pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
+  pngName += Form("%.1f",ptAssociatedMin); pngName += "To"; 
+  pngName += Form("%.1f",ptAssociatedMax); 
+  if(k2pMethod) pngName += "_2pMethod";
+  pngName += ".png";
+
+  c1->SaveAs(pngName.Data());
+
   if(kShowShuffled) {
     TCanvas *c2 = new TCanvas("c2","Shuffled balance function 2D",100,100,600,500);
     c2->SetFillColor(10); c2->SetHighLightColor(10);