]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding the pt_trigger and pt_associated option in the drawing macros
authorpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 24 Jul 2012 22:28:50 +0000 (22:28 +0000)
committerpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 24 Jul 2012 22:28:50 +0000 (22:28 +0000)
PWGCF/EBYE/BalanceFunctions/AliBalancePsi.cxx
PWGCF/EBYE/BalanceFunctions/AliBalancePsi.h
PWGCF/EBYE/macros/drawBalanceFunction2DPsi.C [new file with mode: 0644]
PWGCF/EBYE/macros/drawBalanceFunctionPsi.C
PWGCF/EBYE/macros/drawCorrelationFunctionPsi.C

index a791217b0aaa9c8c0f08e47d09cf5cc7407b2bd4..227028c485143d9882e5778160f0b32e33e916c1 100644 (file)
@@ -113,9 +113,9 @@ void AliBalancePsi::InitHistograms() {
   dBinsPair[0]      = centralityBins;
   axisTitlePair[0]  = "Centrality percentile [%]"; */
 
-  //Psi_2
-  const Int_t kNPsi2Bins = 3;
-  Double_t psi2Bins[kNPsi2Bins+1] = {-0.5,0.5,1.5,2.5};
+  //Psi_2: -0.5->0.5 (in plane), 0.5->1.5 (intermediate), 1.5->2.5 (out of plane), 2.5->3.5 (all)
+  const Int_t kNPsi2Bins = 4;
+  Double_t psi2Bins[kNPsi2Bins+1] = {-0.5,0.5,1.5,2.5,3.5};
   iBinSingle[0]       = kNPsi2Bins;
   dBinsSingle[0]      = psi2Bins;
   axisTitleSingle[0]  = "#phi - #Psi_{2} (a.u.)";
@@ -265,93 +265,92 @@ void AliBalancePsi::CalculateBalance(Double_t gReactionPlane,
   }
   
   // 1st particle loop
-  for (Int_t i=0; i<iMax; i++)
-    {
+  for (Int_t i=0; i<iMax; i++) {
+    AliVParticle* firstParticle = (AliVParticle*) particles->At(i);
+    
+    // some optimization
+    Float_t firstEta = firstParticle->Eta();
+    Float_t firstPhi = firstParticle->Phi();
+    Float_t firstPt  = firstParticle->Pt();
+    
+    // Event plane (determine psi bin)
+    Double_t gPsiMinusPhi    =   0.;
+    Double_t gPsiMinusPhiBin = -10.;
+    gPsiMinusPhi   = TMath::Abs(firstPhi - gReactionPlane);
+    //in-plane
+    if((gPsiMinusPhi <= 7.5)||
+       ((172.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 187.5)))
+      gPsiMinusPhiBin = 0.0;
+    //intermediate
+    else if(((37.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 52.5))||
+           ((127.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 142.5))||
+           ((217.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 232.5))||
+           ((307.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 322.5)))
+      gPsiMinusPhiBin = 1.0;
+    //out of plane
+    else if(((82.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 97.5))||
+           ((262.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 277.5)))
+      gPsiMinusPhiBin = 2.0;
+    //everything else
+    else 
+      gPsiMinusPhiBin = 3.0;
+    
+    Short_t  charge = (Short_t) firstParticle->Charge();
+    
+    trackVariablesSingle[0]    =  gPsiMinusPhiBin;
+    trackVariablesSingle[1]    =  firstPt;  
+    
+    //fill single particle histograms
+    if(charge > 0)      fHistP->Fill(trackVariablesSingle,0,1.); 
+    else if(charge < 0) fHistN->Fill(trackVariablesSingle,0,1.);  
+    
+    // 2nd particle loop (only for j < i for non double counting in the same pT region)
+    // --> SAME pT region for trigger and assoc: NO double counting with this
+    // --> DIFF pT region for trigger and assoc: Missing assoc. particles with j > i to a trigger i 
+    //                          --> can be handled afterwards by using assoc. as trigger as well ?!     
+    for(Int_t j = 0; j < i; j++) {   // or go to full here (everything prepared)?
+      if (particlesMixed && jMax < i)  // if the mixed track number is smaller than the main event one (could be done better if one loops over all tracks)
+       break;
       
-      AliVParticle* firstParticle = (AliVParticle*) particles->At(i);
+      AliVParticle* secondParticle = (AliVParticle*) particlesSecond->At(j);
       
-      // some optimization
-      Float_t firstEta = firstParticle->Eta();
-      Float_t firstPhi = firstParticle->Phi();
-      Float_t firstPt  = firstParticle->Pt();
-
-      // Event plane (determine psi bin)
-      Double_t gPsiMinusPhi    =   0.;
-      Double_t gPsiMinusPhiBin = -10.;
-      gPsiMinusPhi   = TMath::Abs(firstPhi - gReactionPlane);
-      if((gPsiMinusPhi <= 7.5)||
-        ((172.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 187.5)))
-       gPsiMinusPhiBin = 0.0;
-      else if(((37.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 52.5))||
-             ((127.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 142.5))||
-             ((217.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 232.5))||
-             ((307.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 322.5)))
-       gPsiMinusPhiBin = 1.0;
-      else if(((82.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 97.5))||
-             ((262.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 277.5)))
-       gPsiMinusPhiBin = 2.0;
-      else continue;
-
+      Short_t charge2 = (Short_t) secondParticle->Charge();
       
-      Short_t  charge = (Short_t) firstParticle->Charge();
-
-      trackVariablesSingle[0]    =  gPsiMinusPhiBin;
-      trackVariablesSingle[1]    =  firstPt;  
+      trackVariablesPair[0]    =  gPsiMinusPhiBin;
+      trackVariablesPair[1]    =  firstEta - secondEta[j];  // delta eta
+      trackVariablesPair[2]    =  firstPhi - secondPhi[j];  // delta phi
+      if (trackVariablesPair[2] > 180.)   // delta phi between -180 and 180 
+       trackVariablesPair[2] -= 360.;
+      if (trackVariablesPair[2] <  - 180.) 
+       trackVariablesPair[2] += 360.;
       
-      //fill single particle histograms
-      if(charge > 0)      fHistP->Fill(trackVariablesSingle,0,1.); 
-      else if(charge < 0) fHistN->Fill(trackVariablesSingle,0,1.);  
+      trackVariablesPair[3]    =  firstPt;      // pt trigger
+      trackVariablesPair[4]    =  secondPt[j];  // pt
+      //       trackVariablesPair[5]    =  fCentrality;  // centrality
       
-
+      if( charge > 0 && charge2 < 0)  fHistPN->Fill(trackVariablesPair,0,1.); 
+      else if( charge < 0 && charge2 > 0)  fHistNP->Fill(trackVariablesPair,0,1.); 
+      else if( charge > 0 && charge2 > 0)  fHistPP->Fill(trackVariablesPair,0,1.); 
+      else if( charge < 0 && charge2 < 0)  fHistNN->Fill(trackVariablesPair,0,1.); 
+      else AliWarning(Form("Wrong charge combination: charge1 = %d and charge2 = %d",charge,charge2));
       
-      // 2nd particle loop (only for j < i for non double counting in the same pT region)
-      // --> SAME pT region for trigger and assoc: NO double counting with this
-      // --> DIFF pT region for trigger and assoc: Missing assoc. particles with j > i to a trigger i 
-      //                          --> can be handled afterwards by using assoc. as trigger as well ?!     
-      for(Int_t j = 0; j < i; j++) {   // or go to full here (everything prepared)?
-       
-       if (particlesMixed && jMax < i)  // if the mixed track number is smaller than the main event one (could be done better if one loops over all tracks)
-         break;
-
-       AliVParticle* secondParticle = (AliVParticle*) particlesSecond->At(j);
-
-       Short_t charge2 = (Short_t) secondParticle->Charge();
-       
-       trackVariablesPair[0]    =  gPsiMinusPhiBin;
-       trackVariablesPair[1]    =  firstEta - secondEta[j];  // delta eta
-       trackVariablesPair[2]    =  firstPhi - secondPhi[j];  // delta phi
-       if (trackVariablesPair[2] > 180.)   // delta phi between -180 and 180 
-         trackVariablesPair[2] -= 360.;
-       if (trackVariablesPair[2] <  - 180.) 
-         trackVariablesPair[2] += 360.;
-       
-       trackVariablesPair[3]    =  firstPt;      // pt trigger
-       trackVariablesPair[4]    =  secondPt[j];  // pt
-       //      trackVariablesPair[5]    =  fCentrality;  // centrality
-       
-       if( charge > 0 && charge2 < 0)  fHistPN->Fill(trackVariablesPair,0,1.); 
-       else if( charge < 0 && charge2 > 0)  fHistNP->Fill(trackVariablesPair,0,1.); 
-       else if( charge > 0 && charge2 > 0)  fHistPP->Fill(trackVariablesPair,0,1.); 
-       else if( charge < 0 && charge2 < 0)  fHistNN->Fill(trackVariablesPair,0,1.); 
-       else AliWarning(Form("Wrong charge combination: charge1 = %d and charge2 = %d",charge,charge2));
-       
-      }//end of 2nd particle loop
-    }//end of 1st particle loop
+    }//end of 2nd particle loop
+  }//end of 1st particle loop
 }  
 
 //____________________________________________________________________//
 TH1D *AliBalancePsi::GetBalanceFunctionHistogram(Int_t iVariableSingle,
                                                 Int_t iVariablePair,
                                                 Double_t psiMin, 
-                                                Double_t psiMax) {
+                                                Double_t psiMax,
+                                                Double_t ptTriggerMin,
+                                                Double_t ptTriggerMax,
+                                                Double_t ptAssociatedMin,
+                                                Double_t ptAssociatedMax) {
   //Returns the BF histogram, extracted from the 6 AliTHn objects 
   //(private members) of the AliBalancePsi class.
   //iVariableSingle: 0(phi-Psi), 1(pt-trigger)
   //iVariablePair: 0(phi-Psi) 1(Delta eta), 2(Delta phi), 3(pt-trigger), 4(pt-associated
-  TString gAnalysisType[ANALYSIS_TYPES] = {"y","eta","phi","qlong","qout","qside","qinv"};
-  TString histName = "gHistBalanceFunctionHistogram";
-  histName += gAnalysisType[iVariablePair];
-
   // Psi_2
   fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
   fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
@@ -360,6 +359,24 @@ TH1D *AliBalancePsi::GetBalanceFunctionHistogram(Int_t iVariableSingle,
   fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
   fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
 
+  // pt trigger
+  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
+    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+  }
+
+  // pt associated
+  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
+    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+  }
+
   //Printf("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0));
 
   // Project into the wanted space (1st: analysis step, 2nd: axis)
@@ -405,7 +422,11 @@ TH1D *AliBalancePsi::GetBalanceFunctionHistogram(Int_t iVariableSingle,
 
 //____________________________________________________________________//
 TH2D *AliBalancePsi::GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin, 
-                                                       Double_t psiMax) {
+                                                       Double_t psiMax,
+                                                       Double_t ptTriggerMin,
+                                                       Double_t ptTriggerMax,
+                                                       Double_t ptAssociatedMin,
+                                                       Double_t ptAssociatedMax) {
   //Returns the BF histogram in Delta eta vs Delta phi, 
   //extracted from the 6 AliTHn objects 
   //(private members) of the AliBalancePsi class.
@@ -421,7 +442,25 @@ TH2D *AliBalancePsi::GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin,
   fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
   fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
 
-  AliInfo(Form("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0)));
+  // pt trigger
+  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
+    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+  }
+
+  // pt associated
+  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
+    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+  }
+
+  //AliInfo(Form("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0)));
 
   // Project into the wanted space (1st: analysis step, 2nd: axis)
   TH2D* hTemp1 = (TH2D*)fHistPN->Project(0,1,2);
@@ -456,39 +495,54 @@ TH2D *AliBalancePsi::GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin,
 
 //____________________________________________________________________//
 TH2D *AliBalancePsi::GetCorrelationFunctionPN(Double_t psiMin, 
-                                             Double_t psiMax) {
+                                             Double_t psiMax,
+                                             Double_t ptTriggerMin,
+                                             Double_t ptTriggerMax,
+                                             Double_t ptAssociatedMin,
+                                             Double_t ptAssociatedMax) {
   //Returns the 2D correlation function for (+-) pairs
   // Psi_2: axis 0
   fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
   fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
-  //fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(-0.5,2.5); 
-  //fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(-0.5,2.5); 
 
-  TH2D *gHistTest = dynamic_cast<TH2D *>(fHistP->Project(0,0,1));
-  TCanvas *c1 = new TCanvas("c1","");
-  c1->cd();
-  if(!gHistTest){
-    AliError("Projection of fHistP = NULL");
-    return gHistTest;
-  }
-  else{
-    gHistTest->DrawCopy("colz");
+  // pt trigger
+  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
+    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
   }
 
-  //0:step, 2: Delta eta, 3: Delta phi
+  // pt associated
+  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
+    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+
+  //fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(-0.5,2.5); 
+  //fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(-0.5,2.5); 
+
+  //TH2D *gHistTest = dynamic_cast<TH2D *>(fHistP->Project(0,0,1));
+  //TCanvas *c1 = new TCanvas("c1","");
+  //c1->cd();
+  //if(!gHistTest){
+  //AliError("Projection of fHistP = NULL");
+  //return gHistTest;
+  //}
+  //else{
+  //gHistTest->DrawCopy("colz");
+  //}
+
+  //0:step, 1: Delta eta, 2: Delta phi
   TH2D *gHist = dynamic_cast<TH2D *>(fHistPN->Project(0,1,2));
   if(!gHist){
     AliError("Projection of fHistPN = NULL");
     return gHist;
   }
 
-  AliInfo(Form("Entries (test): %lf",(Double_t)(gHistTest->GetEntries())));
-  AliInfo(Form("Entries (1D): %lf",(Double_t)(fHistP->Project(0,1)->GetEntries())));
-  AliInfo(Form("Entries (2D): %lf",(Double_t)(fHistPN->Project(0,1,2)->GetEntries())));
+  //AliInfo(Form("Entries (test): %lf",(Double_t)(gHistTest->GetEntries())));
+  //AliInfo(Form("Entries (1D): %lf",(Double_t)(fHistP->Project(0,1)->GetEntries())));
+  //AliInfo(Form("Entries (2D): %lf",(Double_t)(fHistPN->Project(0,1,2)->GetEntries())));
   
-  TCanvas *c2 = new TCanvas("c2","");
-  c2->cd();
-  fHistPN->Project(0,1,2)->DrawCopy("colz");
+  //TCanvas *c2 = new TCanvas("c2","");
+  //c2->cd();
+  //fHistPN->Project(0,1,2)->DrawCopy("colz");
 
   if((Double_t)(fHistP->Project(0,1)->GetEntries())!=0)
     gHist->Scale(1./(Double_t)(fHistP->Project(0,1)->GetEntries()));
@@ -498,13 +552,27 @@ TH2D *AliBalancePsi::GetCorrelationFunctionPN(Double_t psiMin,
 
 //____________________________________________________________________//
 TH2D *AliBalancePsi::GetCorrelationFunctionNP(Double_t psiMin, 
-                                             Double_t psiMax) {
+                                             Double_t psiMax,
+                                             Double_t ptTriggerMin,
+                                             Double_t ptTriggerMax,
+                                             Double_t ptAssociatedMin,
+                                             Double_t ptAssociatedMax) {
   //Returns the 2D correlation function for (+-) pairs
   // Psi_2: axis 0
   fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
   fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
     
-  //0:step, 2: Delta eta, 3: Delta phi
+  // pt trigger
+  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
+    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+  }
+
+  // pt associated
+  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
+    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
+
+  //0:step, 1: Delta eta, 2: Delta phi
   TH2D *gHist = dynamic_cast<TH2D *>(fHistNP->Project(0,1,2));
   if(!gHist){
     AliError("Projection of fHistPN = NULL");
@@ -521,13 +589,27 @@ TH2D *AliBalancePsi::GetCorrelationFunctionNP(Double_t psiMin,
 
 //____________________________________________________________________//
 TH2D *AliBalancePsi::GetCorrelationFunctionPP(Double_t psiMin, 
-                                             Double_t psiMax) {
+                                             Double_t psiMax,
+                                             Double_t ptTriggerMin,
+                                             Double_t ptTriggerMax,
+                                             Double_t ptAssociatedMin,
+                                             Double_t ptAssociatedMax) {
   //Returns the 2D correlation function for (+-) pairs
   // Psi_2: axis 0
   fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
   fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
+
+  // pt trigger
+  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
+    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+  }
+
+  // pt associated
+  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
+    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
       
-  //0:step, 2: Delta eta, 3: Delta phi
+  //0:step, 1: Delta eta, 2: Delta phi
   TH2D *gHist = dynamic_cast<TH2D *>(fHistPP->Project(0,1,2));
   if(!gHist){
     AliError("Projection of fHistPN = NULL");
@@ -544,13 +626,27 @@ TH2D *AliBalancePsi::GetCorrelationFunctionPP(Double_t psiMin,
 
 //____________________________________________________________________//
 TH2D *AliBalancePsi::GetCorrelationFunctionNN(Double_t psiMin, 
-                                             Double_t psiMax) {
+                                             Double_t psiMax,
+                                             Double_t ptTriggerMin,
+                                             Double_t ptTriggerMax,
+                                             Double_t ptAssociatedMin,
+                                             Double_t ptAssociatedMax) {
   //Returns the 2D correlation function for (+-) pairs
   // Psi_2: axis 0
   fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
   fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax); 
+
+  // pt trigger
+  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
+    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax);
+  }
+
+  // pt associated
+  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
+    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax);
     
-  //0:step, 2: Delta eta, 3: Delta phi
+  //0:step, 1: Delta eta, 2: Delta phi
   TH2D *gHist = dynamic_cast<TH2D *>(fHistNN->Project(0,1,2));
   if(!gHist){
     AliError("Projection of fHistPN = NULL");
index 190ebcc4da1cbfa7951440406a9ed94c79412744..08c866ad54d6dd15a21e80a5b177bd4aebc7cb4e 100644 (file)
@@ -65,10 +65,26 @@ class AliBalancePsi : public TObject {
                        TObjArray* particles,
                        TObjArray* particlesMixed);
   
-  TH2D   *GetCorrelationFunctionPN(Double_t psiMin, Double_t psiMax);
-  TH2D   *GetCorrelationFunctionNP(Double_t psiMin, Double_t psiMax);
-  TH2D   *GetCorrelationFunctionPP(Double_t psiMin, Double_t psiMax);
-  TH2D   *GetCorrelationFunctionNN(Double_t psiMin, Double_t psiMax);
+  TH2D   *GetCorrelationFunctionPN(Double_t psiMin, Double_t psiMax,
+                                  Double_t ptTriggerMin=-1.,
+                                  Double_t ptTriggerMax=-1.,
+                                  Double_t ptAssociatedMin=-1.,
+                                  Double_t ptAssociatedMax=-1);
+  TH2D   *GetCorrelationFunctionNP(Double_t psiMin, Double_t psiMax,
+                                  Double_t ptTriggerMin=-1.,
+                                  Double_t ptTriggerMax=-1.,
+                                  Double_t ptAssociatedMin=-1.,
+                                  Double_t ptAssociatedMax=-1);
+  TH2D   *GetCorrelationFunctionPP(Double_t psiMin, Double_t psiMax,
+                                  Double_t ptTriggerMin=-1.,
+                                  Double_t ptTriggerMax=-1.,
+                                  Double_t ptAssociatedMin=-1.,
+                                  Double_t ptAssociatedMax=-1);
+  TH2D   *GetCorrelationFunctionNN(Double_t psiMin, Double_t psiMax,
+                                  Double_t ptTriggerMin=-1.,
+                                  Double_t ptTriggerMax=-1.,
+                                  Double_t ptAssociatedMin=-1.,
+                                  Double_t ptAssociatedMax=-1);
 
   AliTHn *GetHistNp() {return fHistP;}
   AliTHn *GetHistNn() {return fHistN;}
@@ -92,9 +108,17 @@ class AliBalancePsi : public TObject {
 
   TH1D *GetBalanceFunctionHistogram(Int_t iVariableSingle,
                                    Int_t iVariablePair,
-                                   Double_t psiMin, Double_t psiMax);
-
-  TH2D *GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin, Double_t psiMax);
+                                   Double_t psiMin, Double_t psiMax,
+                                   Double_t ptTriggerMin=-1.,
+                                   Double_t ptTriggerMax=-1.,
+                                   Double_t ptAssociatedMin=-1.,
+                                   Double_t ptAssociatedMax=-1);
+
+  TH2D *GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin, Double_t psiMax,
+                                          Double_t ptTriggerMin=-1.,
+                                          Double_t ptTriggerMax=-1.,
+                                          Double_t ptAssociatedMin=-1.,
+                                          Double_t ptAssociatedMax=-1);
   
  private:
   Bool_t fShuffle; //shuffled balance function object
diff --git a/PWGCF/EBYE/macros/drawBalanceFunction2DPsi.C b/PWGCF/EBYE/macros/drawBalanceFunction2DPsi.C
new file mode 100644 (file)
index 0000000..94b53fa
--- /dev/null
@@ -0,0 +1,288 @@
+const Int_t numberOfCentralityBins = 9;
+TString centralityArray[numberOfCentralityBins] = {"0-5","5-10","10-20","20-30","30-40","40-50","50-60","60-70","70-80"};
+Double_t gMinCentrality[numberOfCentralityBins] = {0.,5.,10.,20.,30.,40.,50.,60.,70.};
+Double_t gMaxCentrality[numberOfCentralityBins] = {5.,10.,20.,30.,40.,50.,60.,70.,80.};
+TString gAnalysisType[7] = {"y","eta","qlong","qout","qside","qinv","phi"};
+
+const Int_t gRebin = 1;
+void drawBalanceFunction2DPsi(const char* filename = "AnalysisResultsPsi.root", 
+                             Double_t psiMin = 0., Double_t psiMax = 7.5,
+                             Double_t ptTriggerMin = -1.,
+                             Double_t ptTriggerMax = -1.,
+                             Double_t ptAssociatedMin = -1.,
+                             Double_t ptAssociatedMax = -1.) {
+  //Macro that draws the BF distributions for each centrality bin
+  //for reaction plane dependent analysis
+  //Author: Panos.Christakoglou@nikhef.nl
+  //Load the PWG2ebye library
+  gSystem->Load("libANALYSIS.so");
+  gSystem->Load("libANALYSISalice.so");
+  gSystem->Load("libEventMixing.so");
+  gSystem->Load("libCORRFW.so");
+  gSystem->Load("libPWGTools.so");
+  gSystem->Load("libPWGCFebye.so");
+
+  //Prepare the objects and return them
+  TList *listBF = GetListOfObjects(filename);
+  TList *listBFShuffled = GetListOfObjects(filename,kTRUE);
+  if(!listBF) {
+    Printf("The TList object was not created");
+    return;
+  }
+  else 
+    draw(listBF,listBFShuffled,psiMin,psiMax,
+        ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);  
+}
+
+//______________________________________________________//
+TList *GetListOfObjects(const char* filename, Bool_t kShuffling = kFALSE) {
+  //Get the TList objects (QA, bf, bf shuffled)
+  TList *listQA = 0x0;
+  TList *listBF = 0x0;
+  TList *listBFShuffling = 0x0;
+  
+  //Open the file
+  TFile *f = TFile::Open(filename);
+  if((!f)||(!f->IsOpen())) {
+    Printf("The file %s is not found. Aborting...",filename);
+    return listBF;
+  }
+  //f->ls();
+  
+  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionPsiAnalysis"));
+  if(!dir) {   
+    Printf("The TDirectoryFile is not found. Aborting...",filename);
+    return listBF;
+  }
+  //dir->ls();
+  
+  TString listBFName;
+  if(!kShuffling) 
+    listBFName = "listBFPsi";
+  else if(kShuffling)
+    listBFName = "listBFPsiShuffled";
+  listBF = dynamic_cast<TList *>(dir->Get(listBFName.Data()));
+  //listBF->ls();
+
+  //Get the histograms
+  TString histoName;
+  if(!kShuffling)
+    histoName = "fHistPV0M";
+  else if(kShuffling)
+    histoName = "fHistP_shuffleV0M";
+  AliTHn *fHistP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));  
+  if(!fHistP) {
+    Printf("fHistP %s not found!!!",histoName.Data());
+    break;
+  }
+  fHistP->FillParent(); fHistP->DeleteContainers();
+
+  if(!kShuffling)
+    histoName = "fHistNV0M";
+  else if(kShuffling)
+    histoName = "fHistN_shuffleV0M";
+  AliTHn *fHistN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
+  if(!fHistN) {
+    Printf("fHistN %s not found!!!",histoName.Data());
+    break;
+  }
+  fHistN->FillParent(); fHistN->DeleteContainers();
+    
+  if(!kShuffling)
+    histoName = "fHistPNV0M";
+  else if(kShuffling)
+    histoName = "fHistPN_shuffleV0M";
+  AliTHn *fHistPN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
+  if(!fHistPN) {
+    Printf("fHistPN %s not found!!!",histoName.Data());
+    break;
+  }
+  fHistPN->FillParent(); fHistPN->DeleteContainers();
+  
+  if(!kShuffling)
+    histoName = "fHistNPV0M";
+  else if(kShuffling)
+    histoName = "fHistNP_shuffleV0M";
+  AliTHn *fHistNP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
+  if(!fHistNP) {
+    Printf("fHistNP %s not found!!!",histoName.Data());
+    break;
+  }
+  fHistNP->FillParent(); fHistNP->DeleteContainers();
+
+  if(!kShuffling)
+    histoName = "fHistPPV0M";
+  else if(kShuffling)
+    histoName = "fHistPP_shuffleV0M";
+  AliTHn *fHistPP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
+  if(!fHistPP) {
+    Printf("fHistPP %s not found!!!",histoName.Data());
+    break;
+  }
+  fHistPP->FillParent(); fHistPP->DeleteContainers();
+
+  if(!kShuffling)
+    histoName = "fHistNNV0M";
+  else if(kShuffling)
+    histoName = "fHistNN_shuffleV0M";
+  AliTHn *fHistNN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
+  if(!fHistNN) {
+    Printf("fHistNN %s not found!!!",histoName.Data());
+    break;
+  }
+  fHistNN->FillParent(); fHistNN->DeleteContainers();
+  
+  return listBF;
+}
+
+//______________________________________________________//
+void draw(TList *listBF, TList *listBFShuffled,
+         Double_t psiMin, Double_t psiMax,
+         Double_t ptTriggerMin, Double_t ptTriggerMax,
+         Double_t ptAssociatedMin, Double_t ptAssociatedMax) {
+  gROOT->LoadMacro("~/SetPlotStyle.C");
+  SetPlotStyle();
+  gStyle->SetPalette(1,0);
+  
+  //balance function
+  AliTHn *hP = NULL;
+  AliTHn *hN = NULL;
+  AliTHn *hPN = NULL;
+  AliTHn *hNP = NULL;
+  AliTHn *hPP = NULL;
+  AliTHn *hNN = NULL;
+  //listBF->ls();
+  //Printf("=================");
+  hP = (AliTHn*) listBF->FindObject("fHistPV0M");
+  hN = (AliTHn*) listBF->FindObject("fHistNV0M");
+  hPN = (AliTHn*) listBF->FindObject("fHistPNV0M");
+  hNP = (AliTHn*) listBF->FindObject("fHistNPV0M");
+  hPP = (AliTHn*) listBF->FindObject("fHistPPV0M");
+  hNN = (AliTHn*) listBF->FindObject("fHistNNV0M");
+
+  AliBalancePsi *b = new AliBalancePsi();
+  b->SetHistNp(hP);
+  b->SetHistNn(hN);
+  b->SetHistNpn(hPN);
+  b->SetHistNnp(hNP);
+  b->SetHistNpp(hPP);
+  b->SetHistNnn(hNN);
+
+  //balance function shuffling
+  AliTHn *hPShuffled = NULL;
+  AliTHn *hNShuffled = NULL;
+  AliTHn *hPNShuffled = NULL;
+  AliTHn *hNPShuffled = NULL;
+  AliTHn *hPPShuffled = NULL;
+  AliTHn *hNNShuffled = NULL;
+  //listBFShuffled->ls();
+  hPShuffled = (AliTHn*) listBFShuffled->FindObject("fHistP_shuffleV0M");
+  hNShuffled = (AliTHn*) listBFShuffled->FindObject("fHistN_shuffleV0M");
+  hPNShuffled = (AliTHn*) listBFShuffled->FindObject("fHistPN_shuffleV0M");
+  hNPShuffled = (AliTHn*) listBFShuffled->FindObject("fHistNP_shuffleV0M");
+  hPPShuffled = (AliTHn*) listBFShuffled->FindObject("fHistPP_shuffleV0M");
+  hNNShuffled = (AliTHn*) listBFShuffled->FindObject("fHistNN_shuffleV0M");
+
+  AliBalancePsi *bShuffled = new AliBalancePsi();
+  bShuffled->SetHistNp(hPShuffled);
+  bShuffled->SetHistNn(hNShuffled);
+  bShuffled->SetHistNpn(hPNShuffled);
+  bShuffled->SetHistNnp(hNPShuffled);
+  bShuffled->SetHistNpp(hPPShuffled);
+  bShuffled->SetHistNnn(hNNShuffled);
+
+  TH2D *gHistBalanceFunction;
+  TH2D *gHistBalanceFunctionShuffled;
+  TCanvas *c1;
+  TString histoTitle, pngName;
+  TLegend *legend;
+  
+  //loop over the centrality bins
+  //for(Int_t iCentralityBin = 0; iCentralityBin < numberOfCentralityBins; iCentralityBin++) {  
+  histoTitle = "Centrality: "; 
+  histoTitle += centralityArray[6]; 
+  histoTitle += "%";
+  histoTitle += " | "; histoTitle += psiMin; 
+  histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
+  
+  gHistBalanceFunction = b->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  gHistBalanceFunction->SetTitle(histoTitle.Data());
+  gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.3);
+  
+  gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionDeltaEtaDeltaPhi(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  
+  c1 = new TCanvas(histoTitle.Data(),"",0,0,600,500);
+  c1->SetFillColor(10); 
+  c1->SetHighLightColor(10);
+  c1->SetLeftMargin(0.15);
+  gHistBalanceFunction->Draw("lego2");
+  //gHistBalanceFunctionShuffled->Draw("ESAME");
+  
+  legend = new TLegend(0.18,0.6,0.45,0.82,"","brNDC");
+  legend->SetTextSize(0.045); 
+  legend->SetTextFont(42); 
+  legend->SetBorderSize(0);
+  legend->SetFillStyle(0); 
+  legend->SetFillColor(10);
+  legend->SetMargin(0.25); 
+  legend->SetShadowColor(10);
+  legend->AddEntry(gHistBalanceFunction,"Data","lp");
+  legend->AddEntry(gHistBalanceFunctionShuffled,"Shuffled data","lp");
+  legend->Draw();
+  
+  pngName = "BalanceFunctionDeltaEta.Centrality"; 
+  pngName += centralityArray[6]; 
+  pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
+  pngName += ".png";
+  c1->SaveAs(pngName.Data());
+}
+
+//____________________________________________________________________//
+void GetWeightedMean(TH1D *gHistBalance, Int_t fStartBin = 1) {
+  //Prints the calculated width of the BF and its error
+  Double_t gSumXi = 0.0, gSumBi = 0.0, gSumBiXi = 0.0;
+  Double_t gSumBiXi2 = 0.0, gSumBi2Xi2 = 0.0;
+  Double_t gSumDeltaBi2 = 0.0, gSumXi2DeltaBi2 = 0.0;
+  Double_t deltaBalP2 = 0.0, integral = 0.0;
+  Double_t deltaErrorNew = 0.0;
+
+  //Retrieve this variables from Histogram
+  Int_t fNumberOfBins = gHistBalance->GetNbinsX();
+  Double_t fP2Step    = gHistBalance->GetBinWidth(1); // assume equal binning!
+  
+  cout<<"=================================================="<<endl;
+  cout<<"RECALCULATION OF BF WIDTH (StartBin = "<<fStartBin<<")"<<endl;
+  cout<<"HISTOGRAM has "<<fNumberOfBins<<" bins with bin size of "<<fP2Step<<endl;
+  cout<<"=================================================="<<endl;
+  for(Int_t i = 1; i <= fNumberOfBins; i++) {
+
+    // this is to simulate |Delta eta| or |Delta phi|
+    if(fNumberOfBins/2 - fStartBin + 1 < i && i < fNumberOfBins/2 + fStartBin ) continue;
+
+    cout<<"B: "<<gHistBalance->GetBinContent(i)<<"\t Error: "<<gHistBalance->GetBinError(i)<<"\t bin: "<<TMath::Abs(gHistBalance->GetBinCenter(i))<<endl;
+
+    gSumXi += TMath::Abs(gHistBalance->GetBinCenter(i)); // this is to simulate |Delta eta| or |Delta phi|
+    gSumBi += gHistBalance->GetBinContent(i); 
+    gSumBiXi += gHistBalance->GetBinContent(i)*TMath::Abs(gHistBalance->GetBinCenter(i));
+    gSumBiXi2 += gHistBalance->GetBinContent(i)*TMath::Power(TMath::Abs(gHistBalance->GetBinCenter(i)),2);
+    gSumBi2Xi2 += TMath::Power(gHistBalance->GetBinContent(i),2)*TMath::Power(TMath::Abs(gHistBalance->GetBinCenter(i)),2);
+    gSumDeltaBi2 +=  TMath::Power(gHistBalance->GetBinError(i),2);
+    gSumXi2DeltaBi2 += TMath::Power(TMath::Abs(gHistBalance->GetBinCenter(i)),2) * TMath::Power(gHistBalance->GetBinError(i),2);
+    
+    deltaBalP2 += fP2Step*TMath::Power(gHistBalance->GetBinError(i),2);
+    integral += fP2Step*gHistBalance->GetBinContent(i);
+  }
+  for(Int_t i = fStartBin; i < fNumberOfBins; i++)
+    deltaErrorNew += gHistBalance->GetBinError(i)*(TMath::Abs(gHistBalance->GetBinCenter(i))*gSumBi - gSumBiXi)/TMath::Power(gSumBi,2);
+  
+  Double_t integralError = TMath::Sqrt(deltaBalP2);
+  
+  Double_t delta = gSumBiXi / gSumBi;
+  Double_t deltaError = (gSumBiXi / gSumBi) * TMath::Sqrt(TMath::Power((TMath::Sqrt(gSumXi2DeltaBi2)/gSumBiXi),2) + TMath::Power((gSumDeltaBi2/gSumBi),2) );
+  cout<<"=================================================="<<endl;
+  cout<<"Width: "<<delta<<"\t Error: "<<deltaError<<endl;
+  cout<<"New error: "<<deltaErrorNew<<endl;
+  cout<<"Integral: "<<integral<<"\t Error: "<<integralError<<endl;
+  cout<<"=================================================="<<endl;
+  cout<<endl;
+}
index 00c0bc4e0419a69cedf9c090c35b1daf4a293670..5f010dc9c1bc69f2b1bf9bebf57a3cc3cf76e0ee 100644 (file)
@@ -6,7 +6,11 @@ TString gAnalysisType[7] = {"y","eta","qlong","qout","qside","qinv","phi"};
 
 const Int_t gRebin = 1;
 void drawBalanceFunctionPsi(const char* filename = "AnalysisResultsPsi.root", 
-                           Double_t psiMin = 0., Double_t psiMax = 7.5) {
+                           Double_t psiMin = -0.5, Double_t psiMax = 0.5,
+                           Double_t ptTriggerMin = -1.,
+                           Double_t ptTriggerMax = -1.,
+                           Double_t ptAssociatedMin = -1.,
+                           Double_t ptAssociatedMax = -1.) {
   //Macro that draws the BF distributions for each centrality bin
   //for reaction plane dependent analysis
   //Author: Panos.Christakoglou@nikhef.nl
@@ -26,7 +30,8 @@ void drawBalanceFunctionPsi(const char* filename = "AnalysisResultsPsi.root",
     return;
   }
   else 
-    draw(listBF,listBFShuffled,psiMin,psiMax);  
+    draw(listBF,listBFShuffled,psiMin,psiMax,
+        ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);  
 }
 
 //______________________________________________________//
@@ -44,7 +49,7 @@ TList *GetListOfObjects(const char* filename, Bool_t kShuffling = kFALSE) {
   }
   //f->ls();
   
-  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionAnalysis"));
+  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionPsiAnalysis"));
   if(!dir) {   
     Printf("The TDirectoryFile is not found. Aborting...",filename);
     return listBF;
@@ -53,9 +58,9 @@ TList *GetListOfObjects(const char* filename, Bool_t kShuffling = kFALSE) {
   
   TString listBFName;
   if(!kShuffling) 
-    listBFName = "listBF_0-100_V0M_vZ10.0_DCAxy-1.0_DCAz-1.0_Pt0.3-5.0_Eta-0.8-0.8_Chi-1.0_nClus-1_Bit1_withCentralTrigger";
+    listBFName = "listBFPsi";
   else if(kShuffling)
-    listBFName = "listBFShuffled_0-100_V0M_vZ10.0_DCAxy-1.0_DCAz-1.0_Pt0.3-5.0_Eta-0.8-0.8_Chi-1.0_nClus-1_Bit1_withCentralTrigger";
+    listBFName = "listBFPsiShuffled";
   listBF = dynamic_cast<TList *>(dir->Get(listBFName.Data()));
   //listBF->ls();
 
@@ -132,7 +137,9 @@ TList *GetListOfObjects(const char* filename, Bool_t kShuffling = kFALSE) {
 
 //______________________________________________________//
 void draw(TList *listBF, TList *listBFShuffled,
-         Double_t psiMin, Double_t psiMax) {
+         Double_t psiMin, Double_t psiMax,
+         Double_t ptTriggerMin, Double_t ptTriggerMax,
+         Double_t ptAssociatedMin, Double_t ptAssociatedMax) {
   gROOT->LoadMacro("~/SetPlotStyle.C");
   SetPlotStyle();
   gStyle->SetPalette(1,0);
@@ -184,92 +191,90 @@ void draw(TList *listBF, TList *listBFShuffled,
   bShuffled->SetHistNpp(hPPShuffled);
   bShuffled->SetHistNnn(hNNShuffled);
 
-  TH1D *gHistBalanceFunction[numberOfCentralityBins];
-  TH1D *gHistBalanceFunctionShuffled[numberOfCentralityBins];
-  TCanvas *c1[numberOfCentralityBins];
+  TH1D *gHistBalanceFunction;
+  TH1D *gHistBalanceFunctionShuffled;
+  TCanvas *c1;
   TString histoTitle, pngName;
-  TLegend *legend[numberOfCentralityBins];
+  TLegend *legend;
   
   //loop over the centrality bins
-  for(Int_t iCentralityBin = 0; iCentralityBin < numberOfCentralityBins; iCentralityBin++) {  
-    histoTitle = "Centrality: "; 
-    histoTitle += centralityArray[iCentralityBin]; 
-    histoTitle += "%";
-    histoTitle += " | "; histoTitle += psiMin; 
-    histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
-
-    gHistBalanceFunction[iCentralityBin] = b->GetBalanceFunctionHistogram(2,2,gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    //gHistBalanceFunction[iCentralityBin] = b->GetBalanceFunctionHistogram(3,3,gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    gHistBalanceFunction[iCentralityBin]->SetMarkerStyle(20);
-    gHistBalanceFunction[iCentralityBin]->SetTitle(histoTitle.Data());
-    gHistBalanceFunction[iCentralityBin]->GetYaxis()->SetTitleOffset(1.3);
-
-    gHistBalanceFunctionShuffled[iCentralityBin] = bShuffled->GetBalanceFunctionHistogram(2,2,gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    //gHistBalanceFunctionShuffled[iCentralityBin] = b->GetBalanceFunctionHistogram(3,3,gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    gHistBalanceFunctionShuffled[iCentralityBin]->SetMarkerStyle(24);
-
-    c1[iCentralityBin] = new TCanvas(histoTitle.Data(),"",0,0,600,500);
-    c1[iCentralityBin]->SetFillColor(10); 
-    c1[iCentralityBin]->SetHighLightColor(10);
-    c1[iCentralityBin]->SetLeftMargin(0.15);
-    gHistBalanceFunction[iCentralityBin]->Draw("E");
-    gHistBalanceFunctionShuffled[iCentralityBin]->Draw("ESAME");
-
-    legend[iCentralityBin] = new TLegend(0.18,0.6,0.45,0.82,"","brNDC");
-    legend[iCentralityBin]->SetTextSize(0.045); 
-    legend[iCentralityBin]->SetTextFont(42); 
-    legend[iCentralityBin]->SetBorderSize(0);
-    legend[iCentralityBin]->SetFillStyle(0); 
-    legend[iCentralityBin]->SetFillColor(10);
-    legend[iCentralityBin]->SetMargin(0.25); 
-    legend[iCentralityBin]->SetShadowColor(10);
-    legend[iCentralityBin]->AddEntry(gHistBalanceFunction[iCentralityBin],"Data","lp");
-    legend[iCentralityBin]->AddEntry(gHistBalanceFunctionShuffled[iCentralityBin],"Shuffled data","lp");
-    legend[iCentralityBin]->Draw();
-
-    pngName = "BalanceFunctionDeltaEta.Centrality"; 
-    pngName += centralityArray[iCentralityBin]; 
-    pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
-    pngName += ".png";
-    c1[iCentralityBin]->SaveAs(pngName.Data());
-
-    GetWeightedMean(gHistBalanceFunction[iCentralityBin]);
-    GetWeightedMean(gHistBalanceFunctionShuffled[iCentralityBin]);
-
-    TString meanLatex, rmsLatex, skewnessLatex, kurtosisLatex;
-    meanLatex = "#mu = "; 
-    meanLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetMean());
-    meanLatex += " #pm "; 
-    meanLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetMeanError());
-
-    rmsLatex = "#sigma = "; 
-    rmsLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetRMS());
-    rmsLatex += " #pm "; 
-    rmsLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetRMSError());
-
-    skewnessLatex = "S = "; 
-    skewnessLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetSkewness(1));
-    skewnessLatex += " #pm "; 
-    skewnessLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetSkewness(11));
-    kurtosisLatex = "K = "; 
-    kurtosisLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetKurtosis(1));
-    kurtosisLatex += " #pm "; 
-    kurtosisLatex += Form("%.3f",gHistBalanceFunction[iCentralityBin]->GetKurtosis(11));
-
-    TLatex *latex = new TLatex();
-    latex->SetNDC();
-    latex->SetTextSize(0.035);
-    latex->SetTextColor(1);
-    latex->DrawLatex(0.64,0.85,meanLatex.Data());
-    latex->DrawLatex(0.64,0.81,rmsLatex.Data());
-    latex->DrawLatex(0.64,0.77,skewnessLatex.Data());
-    latex->DrawLatex(0.64,0.73,kurtosisLatex.Data());
-    Printf("Mean: %lf - Error: %lf",gHistBalanceFunction[iCentralityBin]->GetMean(),gHistBalanceFunction[iCentralityBin]->GetMeanError());
-    Printf("RMS: %lf - Error: %lf",gHistBalanceFunction[iCentralityBin]->GetRMS(),gHistBalanceFunction[iCentralityBin]->GetRMSError());
-    Printf("Skeweness: %lf - Error: %lf",gHistBalanceFunction[iCentralityBin]->GetSkewness(1),gHistBalanceFunction[iCentralityBin]->GetSkewness(11));
-    Printf("Kurtosis: %lf - Error: %lf",gHistBalanceFunction[iCentralityBin]->GetKurtosis(1),gHistBalanceFunction[iCentralityBin]->GetKurtosis(11));
-  }
+  //for(Int_t iCentralityBin = 0; iCentralityBin < numberOfCentralityBins; iCentralityBin++) {  
+  histoTitle = "Centrality: "; 
+  histoTitle += centralityArray[6]; 
+  histoTitle += "%";
+  histoTitle += " | "; histoTitle += psiMin; 
+  histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
+  
+  gHistBalanceFunction = b->GetBalanceFunctionHistogram(0,2,psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  gHistBalanceFunction->SetMarkerStyle(20);
+  gHistBalanceFunction->SetTitle(histoTitle.Data());
+  gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.3);
+  
+  gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionHistogram(0,2,psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  gHistBalanceFunctionShuffled->SetMarkerStyle(24);
+  
+  c1 = new TCanvas(histoTitle.Data(),"",0,0,600,500);
+  c1->SetFillColor(10); 
+  c1->SetHighLightColor(10);
+  c1->SetLeftMargin(0.15);
+  gHistBalanceFunction->DrawCopy("E");
+  gHistBalanceFunctionShuffled->DrawCopy("ESAME");
+  
+  legend = new TLegend(0.18,0.6,0.45,0.82,"","brNDC");
+  legend->SetTextSize(0.045); 
+  legend->SetTextFont(42); 
+  legend->SetBorderSize(0);
+  legend->SetFillStyle(0); 
+  legend->SetFillColor(10);
+  legend->SetMargin(0.25); 
+  legend->SetShadowColor(10);
+  legend->AddEntry(gHistBalanceFunction,"Data","lp");
+  legend->AddEntry(gHistBalanceFunctionShuffled,"Shuffled data","lp");
+  legend->Draw();
+  
+  pngName = "BalanceFunctionDeltaEta.Centrality"; 
+  pngName += centralityArray[6]; 
+  pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
+  pngName += ".png";
+  c1->SaveAs(pngName.Data());
+  
+  GetWeightedMean(gHistBalanceFunction);
+  GetWeightedMean(gHistBalanceFunctionShuffled);
+  
+  TString meanLatex, rmsLatex, skewnessLatex, kurtosisLatex;
+  meanLatex = "#mu = "; 
+  meanLatex += Form("%.3f",gHistBalanceFunction->GetMean());
+  meanLatex += " #pm "; 
+  meanLatex += Form("%.3f",gHistBalanceFunction->GetMeanError());
+  
+  rmsLatex = "#sigma = "; 
+  rmsLatex += Form("%.3f",gHistBalanceFunction->GetRMS());
+  rmsLatex += " #pm "; 
+  rmsLatex += Form("%.3f",gHistBalanceFunction->GetRMSError());
+  
+  skewnessLatex = "S = "; 
+  skewnessLatex += Form("%.3f",gHistBalanceFunction->GetSkewness(1));
+  skewnessLatex += " #pm "; 
+  skewnessLatex += Form("%.3f",gHistBalanceFunction->GetSkewness(11));
+  
+  kurtosisLatex = "K = "; 
+  kurtosisLatex += Form("%.3f",gHistBalanceFunction->GetKurtosis(1));
+  kurtosisLatex += " #pm "; 
+  kurtosisLatex += Form("%.3f",gHistBalanceFunction->GetKurtosis(11));
+  
+  TLatex *latex = new TLatex();
+  latex->SetNDC();
+  latex->SetTextSize(0.035);
+  latex->SetTextColor(1);
+  latex->DrawLatex(0.64,0.85,meanLatex.Data());
+  latex->DrawLatex(0.64,0.81,rmsLatex.Data());
+  latex->DrawLatex(0.64,0.77,skewnessLatex.Data());
+  latex->DrawLatex(0.64,0.73,kurtosisLatex.Data());
+  Printf("Mean: %lf - Error: %lf",gHistBalanceFunction->GetMean(),gHistBalanceFunction->GetMeanError());
+  Printf("RMS: %lf - Error: %lf",gHistBalanceFunction->GetRMS(),gHistBalanceFunction->GetRMSError());
+  Printf("Skeweness: %lf - Error: %lf",gHistBalanceFunction->GetSkewness(1),gHistBalanceFunction->GetSkewness(11));
+  Printf("Kurtosis: %lf - Error: %lf",gHistBalanceFunction->GetKurtosis(1),gHistBalanceFunction->GetKurtosis(11));
+  //}
 }
 
 //____________________________________________________________________//
@@ -290,7 +295,6 @@ void GetWeightedMean(TH1D *gHistBalance, Int_t fStartBin = 1) {
   cout<<"HISTOGRAM has "<<fNumberOfBins<<" bins with bin size of "<<fP2Step<<endl;
   cout<<"=================================================="<<endl;
   for(Int_t i = 1; i <= fNumberOfBins; i++) {
-
     // this is to simulate |Delta eta| or |Delta phi|
     if(fNumberOfBins/2 - fStartBin + 1 < i && i < fNumberOfBins/2 + fStartBin ) continue;
 
index a61b3ad6dfb68357c09c211d99474bcbbd791abd..65deeab54198b4d313b838be8b80d38ae527514e 100644 (file)
@@ -6,7 +6,12 @@ TString gAnalysisType[7] = {"y","eta","qlong","qout","qside","qinv","phi"};
 
 const Int_t gRebin = 1;
 void drawCorrelationFunctionPsi(const char* filename = "AnalysisResults.root", 
-                               Double_t psiMin = 0., Double_t psiMax = 7.5) {
+                               Double_t psiMin = -0.5, 
+                               Double_t psiMax = 0.5,
+                               Double_t ptTriggerMin = -1.,
+                               Double_t ptTriggerMax = -1.,
+                               Double_t ptAssociatedMin = -1.,
+                               Double_t ptAssociatedMax = -1.) {
   //Macro that draws the correlation functions from the balance function
   //analysis vs the reaction plane
   //Author: Panos.Christakoglou@nikhef.nl
@@ -25,7 +30,8 @@ void drawCorrelationFunctionPsi(const char* filename = "AnalysisResults.root",
     return;
   }
   else 
-    draw(list,psiMin,psiMax);
+    draw(list,psiMin,psiMax,
+        ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
 }
 
 //______________________________________________________//
@@ -43,14 +49,14 @@ TList *GetListOfObjects(const char* filename) {
   }
   //f->ls();
   
-  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionAnalysis"));
+  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionPsiAnalysis"));
   if(!dir) {   
     Printf("The TDirectoryFile is not found. Aborting...",filename);
     return listBF;
   }
   //dir->ls();
   
-  TString listBFName = "listBF_0-100_V0M_vZ10.0_DCAxy-1.0_DCAz-1.0_Pt0.3-5.0_Eta-0.8-0.8_Chi-1.0_nClus-1_Bit1_withCentralTrigger";
+  TString listBFName = "listBFPsi";
   listBF = dynamic_cast<TList *>(dir->Get(listBFName.Data()));
   //listBF->ls();
 
@@ -107,7 +113,9 @@ TList *GetListOfObjects(const char* filename) {
 }
 
 //______________________________________________________//
-void draw(TList *list, Double_t psiMin, Double_t psiMax) {
+void draw(TList *list, Double_t psiMin, Double_t psiMax,
+         Double_t ptTriggerMin, Double_t ptTriggerMax,
+         Double_t ptAssociatedMin, Double_t ptAssociatedMax) {
   //Draws the correlation functions for every centrality bin
   //(+-), (-+), (++), (--)
   gROOT->LoadMacro("~/SetPlotStyle.C");
@@ -136,89 +144,90 @@ void draw(TList *list, Double_t psiMin, Double_t psiMax) {
   b->SetHistNnp(hNP);
   b->SetHistNpp(hPP);
   b->SetHistNnn(hNN);
-  TH2D *gHistPN[numberOfCentralityBins];
-  TH2D *gHistNP[numberOfCentralityBins];
-  TH2D *gHistPP[numberOfCentralityBins];
-  TH2D *gHistNN[numberOfCentralityBins];
+  TH2D *gHistPN;
+  TH2D *gHistNP;
+  TH2D *gHistPP;
+  TH2D *gHistNN;
   
-  TCanvas *cPN[numberOfCentralityBins];
-  TCanvas *cNP[numberOfCentralityBins];
-  TCanvas *cPP[numberOfCentralityBins];
-  TCanvas *cNN[numberOfCentralityBins];
+  TCanvas *cPN;
+  TCanvas *cNP;
+  TCanvas *cPP;
+  TCanvas *cNN;
   TString histoTitle, pngName;
   //loop over the centrality bins
-  for(Int_t iCentralityBin = 0; iCentralityBin < numberOfCentralityBins; iCentralityBin++) {
-    histoTitle = "(+-) | Centrality: "; 
-    histoTitle += centralityArray[iCentralityBin]; 
-    histoTitle += "%";
-    histoTitle += " | "; histoTitle += psiMin; 
-    histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
-    gHistPN[iCentralityBin] = b->GetCorrelationFunctionPN(gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    gHistPN[iCentralityBin]->GetYaxis()->SetTitleOffset(1.5);
-    gHistPN[iCentralityBin]->SetTitle(histoTitle.Data());
-    cPN[iCentralityBin] = new TCanvas(histoTitle.Data(),"",0,0,400,400);
-    cPN[iCentralityBin]->SetFillColor(10); 
-    cPN[iCentralityBin]->SetHighLightColor(10);
-    gHistPN[iCentralityBin]->DrawCopy("lego2");
-    pngName = "DeltaPhiDeltaEta.Centrality"; 
-    pngName += centralityArray[iCentralityBin]; 
-    pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
-    pngName += ".PositiveNegative.png";
-    cPN[iCentralityBin]->SaveAs(pngName.Data());
-
-    histoTitle = "(-+) | Centrality: "; 
-    histoTitle += centralityArray[iCentralityBin]; 
-    histoTitle += "%";
-    histoTitle += " | "; histoTitle += psiMin; 
-    histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
-   gHistNP[iCentralityBin] = b->GetCorrelationFunctionNP(gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    gHistNP[iCentralityBin]->GetYaxis()->SetTitleOffset(1.5);
-    gHistNP[iCentralityBin]->SetTitle(histoTitle.Data());
-    cNP[iCentralityBin] = new TCanvas(histoTitle.Data(),"",400,0,400,400);
-    cNP[iCentralityBin]->SetFillColor(10); 
-    cNP[iCentralityBin]->SetHighLightColor(10);
-    gHistNP[iCentralityBin]->DrawCopy("lego2");
-    pngName = "DeltaPhiDeltaEta.Centrality"; 
-    pngName += centralityArray[iCentralityBin]; 
-    pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
-    pngName += ".NegativePositive.png";
-    cNP[iCentralityBin]->SaveAs(pngName.Data());
-
-    histoTitle = "(++) | Centrality: "; 
-    histoTitle += centralityArray[iCentralityBin]; 
-    histoTitle += "%";
-    histoTitle += " | "; histoTitle += psiMin; 
-    histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
-    gHistPP[iCentralityBin] = b->GetCorrelationFunctionPP(gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    gHistPP[iCentralityBin]->GetYaxis()->SetTitleOffset(1.5);
-    gHistPP[iCentralityBin]->SetTitle(histoTitle.Data());
-    cPP[iCentralityBin] = new TCanvas(histoTitle.Data(),"",0,400,400,400);
-    cPP[iCentralityBin]->SetFillColor(10); 
-    cPP[iCentralityBin]->SetHighLightColor(10);
-    gHistPP[iCentralityBin]->DrawCopy("lego2");
-    pngName = "DeltaPhiDeltaEta.Centrality"; 
-    pngName += centralityArray[iCentralityBin]; 
-    pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
-    pngName += ".PositivePositive.png";
-    cPP[iCentralityBin]->SaveAs(pngName.Data());
-
-    histoTitle = "(--) | Centrality: "; 
-    histoTitle += centralityArray[iCentralityBin]; 
-    histoTitle += "%";
-    histoTitle += " | "; histoTitle += psiMin; 
-    histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
-    gHistNN[iCentralityBin] = b->GetCorrelationFunctionNN(gMinCentrality[iCentralityBin],gMaxCentrality[iCentralityBin],psiMin,psiMax);
-    gHistNN[iCentralityBin]->GetYaxis()->SetTitleOffset(1.5);
-    gHistNN[iCentralityBin]->SetTitle(histoTitle.Data());
-    cNN[iCentralityBin] = new TCanvas(histoTitle.Data(),"",400,400,400,400);
-    cNN[iCentralityBin]->SetFillColor(10); 
-    cNN[iCentralityBin]->SetHighLightColor(10);
-    gHistNN[iCentralityBin]->DrawCopy("lego2");
-    pngName = "DeltaPhiDeltaEta.Centrality"; 
-    pngName += centralityArray[iCentralityBin]; 
-    pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
-    pngName += ".NegativeNegative.png";
-    cNN[iCentralityBin]->SaveAs(pngName.Data());
-  }//end of loop over centralities
+  //for(Int_t iCentralityBin = 0; iCentralityBin < numberOfCentralityBins; iCentralityBin++) {
+  
+  histoTitle = "(+-) | Centrality: "; 
+  histoTitle += centralityArray[6]; 
+  histoTitle += "%";
+  histoTitle += " | "; histoTitle += psiMin; 
+  histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
+  gHistPN = b->GetCorrelationFunctionPN(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  gHistPN->GetYaxis()->SetTitleOffset(1.5);
+  gHistPN->SetTitle(histoTitle.Data());
+  cPN = new TCanvas(histoTitle.Data(),"",0,0,400,400);
+  cPN->SetFillColor(10); 
+  cPN->SetHighLightColor(10);
+  gHistPN->DrawCopy("lego2");
+  pngName = "DeltaPhiDeltaEta.Centrality"; 
+  pngName += centralityArray[6]; 
+  pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
+  pngName += ".PositiveNegative.png";
+  cPN->SaveAs(pngName.Data());
+  
+  histoTitle = "(-+) | Centrality: "; 
+  histoTitle += centralityArray[6]; 
+  histoTitle += "%";
+  histoTitle += " | "; histoTitle += psiMin; 
+  histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
+  gHistNP = b->GetCorrelationFunctionNP(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  gHistNP->GetYaxis()->SetTitleOffset(1.5);
+  gHistNP->SetTitle(histoTitle.Data());
+  cNP = new TCanvas(histoTitle.Data(),"",400,0,400,400);
+  cNP->SetFillColor(10); 
+  cNP->SetHighLightColor(10);
+  gHistNP->DrawCopy("lego2");
+  pngName = "DeltaPhiDeltaEta.Centrality"; 
+  pngName += centralityArray[6]; 
+  pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
+  pngName += ".NegativePositive.png";
+  cNP->SaveAs(pngName.Data());
+  
+  histoTitle = "(++) | Centrality: "; 
+  histoTitle += centralityArray[6]; 
+  histoTitle += "%";
+  histoTitle += " | "; histoTitle += psiMin; 
+  histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
+  gHistPP = b->GetCorrelationFunctionPP(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  gHistPP->GetYaxis()->SetTitleOffset(1.5);
+  gHistPP->SetTitle(histoTitle.Data());
+  cPP = new TCanvas(histoTitle.Data(),"",0,400,400,400);
+  cPP->SetFillColor(10); 
+  cPP->SetHighLightColor(10);
+  gHistPP->DrawCopy("lego2");
+  pngName = "DeltaPhiDeltaEta.Centrality"; 
+  pngName += centralityArray[6]; 
+  pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
+  pngName += ".PositivePositive.png";
+  cPP->SaveAs(pngName.Data());
+  
+  histoTitle = "(--) | Centrality: "; 
+  histoTitle += centralityArray[6]; 
+  histoTitle += "%";
+  histoTitle += " | "; histoTitle += psiMin; 
+  histoTitle += " < #phi - #Psi_{2} < "; histoTitle += psiMax;
+  gHistNN = b->GetCorrelationFunctionNN(psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
+  gHistNN->GetYaxis()->SetTitleOffset(1.5);
+  gHistNN->SetTitle(histoTitle.Data());
+  cNN = new TCanvas(histoTitle.Data(),"",400,400,400,400);
+  cNN->SetFillColor(10); 
+  cNN->SetHighLightColor(10);
+  gHistNN->DrawCopy("lego2");
+  pngName = "DeltaPhiDeltaEta.Centrality"; 
+  pngName += centralityArray[6]; 
+  pngName += ".Psi"; pngName += psiMin; pngName += "To"; pngName += psiMax;
+  pngName += ".NegativeNegative.png";
+  cNN->SaveAs(pngName.Data());
+  //}//end of loop over centralities
 }