Added Eventplane Dependence in dPhi Correlations code
authorlmilano <lmilano@cern.ch>
Fri, 1 Aug 2014 14:15:25 +0000 (16:15 +0200)
committerlmilano <lmilano@cern.ch>
Fri, 1 Aug 2014 14:15:25 +0000 (16:15 +0200)
PWGCF/Correlations/Base/AliAnalyseLeadingTrackUE.cxx
PWGCF/Correlations/Base/AliAnalyseLeadingTrackUE.h
PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx
PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.h

index f0554d2..e95f868 100644 (file)
@@ -61,6 +61,8 @@ AliAnalyseLeadingTrackUE::AliAnalyseLeadingTrackUE() :
   fCheckMotherPDG(kTRUE),
   fTrackEtaCut(0.8),
   fTrackEtaCutMin(-1.),
+  fTrackPhiCutEvPlMin(0.),
+  fTrackPhiCutEvPlMax(0.),
   fTrackPtMin(0),
   fEventSelection(AliVEvent::kMB|AliVEvent::kUserDefined),
   fDCAXYCut(0),
@@ -360,12 +362,13 @@ void AliAnalyseLeadingTrackUE::RemoveWeakDecays(TObjArray* tracks, TObject* mcOb
 }
 
 //-------------------------------------------------------------------
-TObjArray* AliAnalyseLeadingTrackUE::GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries, Int_t particleSpecies, Bool_t useEtaPtCuts, Bool_t speciesOnTracks)
+TObjArray* AliAnalyseLeadingTrackUE::GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries, Int_t particleSpecies, Bool_t useEtaPtCuts, Bool_t speciesOnTracks, Double_t evtPlane)
 {
   // Returns an array of particles that pass the cuts, if arrayMC is given each reconstructed particle is replaced by its corresponding MC particles, depending on the parameter onlyprimaries only for primaries 
   // particleSpecies: -1 all particles are returned
   //                  0 (pions) 1 (kaons) 2 (protons) 3 (others) particles
   // speciesOnTracks if kFALSE, particleSpecies is only applied on the matched MC particle (not on the track itself)
+  // Passing down the Double_t* evtPlane (range [-pi/2,pi/2]) will apply a phi cut with respect to the eventplane between fTrackPhiCutEvPlMin and fTrackPhiCutEvPlMax. For values outside [-pi/2,pi/2], this will be ignored.
   
   Int_t nTracks = NParticles(obj);
   TObjArray* tracks = new TObjArray;
@@ -383,6 +386,23 @@ TObjArray* AliAnalyseLeadingTrackUE::GetAcceptedParticles(TObject* obj, TObject*
     AliVParticle* part = ParticleWithCuts( obj, ipart, onlyprimaries, (speciesOnTracks) ? particleSpecies : -1);
     if (!part) continue;
     
+    if (TMath::Abs(evtPlane)<=TMath::Pi()/2) { //evtPlane range: (-pi/2,pi/2)
+      Double_t phiPart = part->Phi(); //range: [0,2*pi)
+      if(phiPart>TMath::Pi()) phiPart-=2*TMath::Pi();
+
+      Double_t dPhi = 0; //range: [0,pi/2], i.e. the difference over the shortest angle.
+      Double_t diff = TMath::Abs(phiPart-evtPlane);
+      if(diff<=TMath::Pi()/2) dPhi = diff;
+      else if(diff<=TMath::Pi()) dPhi = TMath::Pi()-diff;
+      else dPhi = diff-TMath::Pi();
+      
+      if(dPhi<fTrackPhiCutEvPlMin || dPhi>fTrackPhiCutEvPlMax) {
+        if (hasOwnership)
+          delete part;
+        continue;
+      }
+    }
+    
     if (useEtaPtCuts)
       if (TMath::Abs(part->Eta()) > fTrackEtaCut || TMath::Abs(part->Eta()) < fTrackEtaCutMin || part->Pt() < fTrackPtMin)
       {
index f7a9bdf..5979e14 100644 (file)
@@ -59,7 +59,7 @@ class AliAnalyseLeadingTrackUE : public TObject {
   AliVParticle*  ParticleWithCuts(TObject* obj, Int_t ipart, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1);                     // Returns track or MC particle at position "ipart" if passes selection criteria
   void          QSortTracks(TObjArray &a, Int_t first, Int_t last);               // Sort by pT an array of AliVParticles 
   TObjArray*     SortRegions(const AliVParticle* leading, TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE); // Assign particles to towards, away or transverse regions
-  TObjArray*     GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1, Bool_t useEtaPtCuts = kFALSE, Bool_t speciesOnTracks = kTRUE); 
+  TObjArray*     GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1, Bool_t useEtaPtCuts = kFALSE, Bool_t speciesOnTracks = kTRUE, Double_t evtPlane = -999.); 
   TObjArray*     GetFakeParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries, Int_t particleSpecies, Bool_t useEtaPtCuts);
   Bool_t         TriggerSelection(const TObject* obj);                                   // Select good triggers with AliPhysicsSelection class
   Bool_t         VertexSelection(const TObject* obj, Int_t ntracks, Double_t zed);       // Vertex selection: see implementation
@@ -77,6 +77,7 @@ class AliAnalyseLeadingTrackUE : public TObject {
   void          SetSharedClusterCut(Double_t value) { fSharedClusterCut = value; }
   void          SetCrossedRowsCut(Int_t value) { fCrossedRowsCut = value; }
   void          SetFoundFractionCut(Double_t value) { fFoundFractionCut = value; }
+  void           SetParticlePhiCutEventPlane(Double_t min, Double_t max) { fTrackPhiCutEvPlMin = min; fTrackPhiCutEvPlMax = max; }
 
 protected:
   Bool_t CheckTrack(AliVParticle * part);
@@ -89,6 +90,8 @@ private:
   Bool_t         fCheckMotherPDG;     // Check the PDG code of mother for secondaries 
   Double_t       fTrackEtaCut;       // pseudo-rapidity limit of transverse regions     
   Double_t       fTrackEtaCutMin;       // minimum of the pseudo-rapidity limit of transverse regions     
+  Double_t       fTrackPhiCutEvPlMin;   // Minimum Phi cut on particles with respect to the Event Plane (values between 0 and Pi/2)
+  Double_t       fTrackPhiCutEvPlMax;   // Maximum Phi cut on particles with respect to the Event Plane (values between 0 and Pi/2)
   Double_t       fTrackPtMin;        // pt limit for selecting particles
   UInt_t         fEventSelection;    // bit for physics selection
   TFormula*      fDCAXYCut;          // additional pt dependent cut on DCA XY (only for AOD)
index 8caa6fd..d5c3c60 100644 (file)
@@ -41,6 +41,7 @@
 #include "AliMCEventHandler.h"
 #include "AliVParticle.h"
 #include "AliCFContainer.h"
+#include "AliEventplane.h"
 
 #include "AliESDEvent.h"
 #include "AliESDInputHandler.h"
@@ -130,6 +131,8 @@ fCentralityMethod("V0M"),
 // track cuts
 fTrackEtaCut(0.8),
 fTrackEtaCutMin(-1.),
+fTrackPhiCutEvPlMin(0.),
+fTrackPhiCutEvPlMax(0.),
 fOnlyOneEtaSide(0),
 fPtMin(0.5),
 fDCAXYCut(0),
@@ -247,6 +250,8 @@ void  AliAnalysisTaskPhiCorrelations::CreateOutputObjects()
   fAnalyseUE->DefineESDCuts(fFilterBit);
   fAnalyseUE->SetEventSelection(fSelectBit);
   fAnalyseUE->SetHelperPID(fHelperPID);
+  if(fTrackPhiCutEvPlMax!=0.)
+    fAnalyseUE->SetParticlePhiCutEventPlane(fTrackPhiCutEvPlMin,fTrackPhiCutEvPlMax);
   if ((fParticleSpeciesTrigger != -1 || fParticleSpeciesAssociated != -1) && !fHelperPID)
     AliFatal("HelperPID object should be set in the steering macro");
 
@@ -1166,9 +1171,18 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
     return;
 
   TObjArray* tracks = 0;
-  
+  Double_t evtPlanePhi = -999.; //A value outside [-pi/2,pi/2] will be ignored
+  if(fTrackPhiCutEvPlMax!=0.) {
+    AliEventplane* evtPlane = inputEvent->GetEventplane();
+    Double_t qx = 0; Double_t qy = 0;
+    if(evtPlane) evtPlanePhi = evtPlane->CalculateVZEROEventPlane(inputEvent, 10, 2, qx, qy);
+    //Reject event if the plane is not available
+    else return; 
+  }
   if (fTriggersFromDetector == 0)
-    tracks = fAnalyseUE->GetAcceptedParticles(inputEvent, 0, kTRUE, fParticleSpeciesTrigger, kTRUE);
+    tracks = fAnalyseUE->GetAcceptedParticles(inputEvent, 0, kTRUE, fParticleSpeciesTrigger, kTRUE, kTRUE, evtPlanePhi);
   else if (fTriggersFromDetector <= 4)
     tracks=GetParticlesFromDetector(inputEvent,fTriggersFromDetector);
   else
@@ -1221,7 +1235,7 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
   // correlate particles with...
   TObjArray* tracksCorrelate = 0;
   if(fAssociatedFromDetector==0){
-    if (fParticleSpeciesAssociated != fParticleSpeciesTrigger || fTriggersFromDetector > 0 )
+    if (fParticleSpeciesAssociated != fParticleSpeciesTrigger || fTriggersFromDetector > 0 || fTrackPhiCutEvPlMax != 0.)
       tracksCorrelate = fAnalyseUE->GetAcceptedParticles(inputEvent, 0, kTRUE, fParticleSpeciesAssociated, kTRUE);
   }
   else if (fAssociatedFromDetector <= 4){
index b02d1ea..09c9d15 100644 (file)
@@ -93,6 +93,8 @@ class  AliAnalysisTaskPhiCorrelations : public AliAnalysisTask
     void   SetTrackEtaCut( Double_t val )    { fTrackEtaCut = val; }
     void   SetTrackEtaCutMin( Double_t val )    { fTrackEtaCutMin = val; }
     void   SetOnlyOneEtaSide(Int_t flag)     { fOnlyOneEtaSide = flag; }
+    void   SetTrackPhiCutEvPlMin(Double_t val)  { fTrackPhiCutEvPlMin = val; }
+    void   SetTrackPhiCutEvPlMax(Double_t val)  { fTrackPhiCutEvPlMax = val; }
     void   SetPtMin(Double_t val)            { fPtMin = val; }
     void   SetFilterBit( UInt_t val )        { fFilterBit = val;  }
     void   SetDCAXYCut(TFormula* value)      { fDCAXYCut = value; }
@@ -207,6 +209,8 @@ class  AliAnalysisTaskPhiCorrelations : public AliAnalysisTask
     // Track cuts
     Double_t           fTrackEtaCut;          // Maximum Eta cut on particles
     Double_t           fTrackEtaCutMin;          // Minimum Eta cut on particles
+    Double_t            fTrackPhiCutEvPlMin;   // Minimum Phi cut on particles with respect to the Event Plane (values between 0 and Pi/2)
+    Double_t            fTrackPhiCutEvPlMax;   // Maximum Phi cut on particles with respect to the Event Plane (values between 0 and Pi/2), if = 0, then no cut is performed
     Int_t              fOnlyOneEtaSide;       // decides that only trigger particle from one eta side are considered (0 = all; -1 = negative, 1 = positive)
     Double_t            fPtMin;                // Min pT to start correlations
     TFormula*           fDCAXYCut;             // additional pt dependent cut on DCA XY (only for AOD)
@@ -234,7 +238,7 @@ class  AliAnalysisTaskPhiCorrelations : public AliAnalysisTask
     Int_t fRejectResonanceDaughters; // reject all daughters of all resonance candidates (1: test method (cut at m_inv=0.9); 2: k0; 3: lambda)
     Bool_t fFillOnlyStep0;        // fill only step 0
     Bool_t fSkipStep6;            // skip step 6 when filling
-    Bool_t fRejectCentralityOutliers;  // enable rejection of outliers in centrality vs no track correlation
+    Bool_t fRejectCentralityOutliers;  // enable rejection of outliers in centrality vs no track correlation. Interferes with the event plane dependence code
     Bool_t fRejectZeroTrackEvents;  // reject events which have no tracks (using the eta, pT cuts defined)
     Bool_t fRemoveWeakDecays;     // remove secondaries from weak decays from tracks and particles
     Bool_t fRemoveDuplicates;      // remove particles with the same label (double reconstruction)
@@ -248,7 +252,7 @@ class  AliAnalysisTaskPhiCorrelations : public AliAnalysisTask
     
     Bool_t fFillpT;                // fill sum pT instead of number density
     
-    ClassDef(AliAnalysisTaskPhiCorrelations, 46); // Analysis task for delta phi correlations
+    ClassDef(AliAnalysisTaskPhiCorrelations, 47); // Analysis task for delta phi correlations
   };
 
 class AliDPhiBasicParticle : public AliVParticle