]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysisPbPbAOD.h
added new geometric cut, updated setters and getters accordingly
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / ChargedHadrons / dNdPt / AlidNdPtAnalysisPbPbAOD.h
index bbb1bd85fb35f584cccd88a86d666ff7f761e11d..4ffc50c9c04b232f337b5771209515601e5ec1d0 100644 (file)
@@ -46,19 +46,19 @@ class THnSparse;
 #include "AliGenHijingEventHeader.h"
 #include "AliGenPythiaEventHeader.h"
 #include "AliExternalTrackParam.h"
+#include "AliESDtrack.h"
 
 #include "TSystem.h"
 #include "TROOT.h"
 
 class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
   public :
-    enum CheckQuantity { cqCrossedRows = 0, cqNcluster = 1, cqChi = 2 };
+    enum CheckQuantity { cqCrossedRows = 0, cqNcluster = 1, cqChi = 2, cqLength = 3 };
     enum KinematicQuantity { kqPt = 0, kqEta = 1, kqPhi = 2 };
-    enum MaxCheckQuantity { cqMax = 3 };
+    enum MaxCheckQuantity { cqMax = 4 };
     enum MaxKinematicQuantity { kqMax = 3 };
     
-    AlidNdPtAnalysisPbPbAOD(); 
-    AlidNdPtAnalysisPbPbAOD(const char *name);
+    AlidNdPtAnalysisPbPbAOD(const char *name = "dNdPtPbPbAOD");
     ~AlidNdPtAnalysisPbPbAOD();
     
     virtual void UserCreateOutputObjects();
@@ -77,51 +77,81 @@ class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
     void SetBinsPhi(Int_t nbins, Double_t* edges)              { Printf("[I] Setting Phi Bins"); fPhiNbins = nbins; fBinsPhi = GetArrayClone(nbins,edges); }
     
     // set event cut variables
-    void SetCutMaxZVertex( Double_t d)                                 { dCutMaxZVertex = d; }
+    void SetCutMaxZVertex( Double_t d)                                 { fCutMaxZVertex = d; }
+    Double_t GetCutMaxZVertex()                                                { return fCutMaxZVertex; }
     
     // set track kinematic cut parameters
-    void SetCutPtRange(Double_t ptmin, Double_t ptmax)                 { dCutPtMin = ptmin; dCutPtMax = ptmax; }
-    void SetCutEtaRange(Double_t etamin, Double_t etamax)              { dCutEtaMin = etamin; dCutEtaMax = etamax; }
-    
-    // set track quality cut parameters
-    void SetCutRequireTPCRefit(Bool_t *b)                              { bCutRequireTPCRefit = b; } 
-    void SetCutMinNCrossedRowsTPC(Double_t d)                          { dCutMinNumberOfCrossedRows = d; }    
-    void SetCutMinRatioCrossedRowsOverFindableClustersTPC(Double_t d)  { dCutMinRatioCrossedRowsOverFindableClustersTPC = d; }
-    void SetCutMaxChi2PerClusterTPC(Double_t d)                        { dCutMaxChi2PerClusterTPC = d; }
-    void SetCutMaxFractionSharedTPCClusters(Double_t d)                { dCutMaxFractionSharedTPCClusters = d; }
-    void SetCutMaxDCAToVertexZ(Double_t d)                             { dCutMaxDCAToVertexZ = d; }
-    void SetCutMaxDCAToVertexXY(Double_t d)                            { dCutMaxDCAToVertexXY = d; }
-    void SetCutRequireITSRefit(Bool_t *b)                              { bCutRequireITSRefit = b; } 
-    void SetCutMaxChi2PerClusterITS(Double_t d)                        { dCutMaxChi2PerClusterITS = d; }
-    void SetCutDCAToVertex2D(Bool_t *b)                                { dCutDCAToVertex2D = b; } 
-    void SetCutRequireSigmaToVertex(Bool_t *b)                                 { dCutRequireSigmaToVertex = b; } 
+    void SetCutPtRange(Double_t ptmin, Double_t ptmax)                 { fCutPtMin = ptmin; fCutPtMax = ptmax; }
+    Double_t GetCutPtMin()                                             { return fCutPtMin; }
+    Double_t GetCutPtMax()                                             { return fCutPtMax; }
+    
+    void SetCutEtaRange(Double_t etamin, Double_t etamax)              { fCutEtaMin = etamin; fCutEtaMax = etamax; }
+    Double_t GetCutEtaMin()                                            { return fCutEtaMin; }
+    Double_t GetCutEtaMax()                                            { return fCutEtaMax; }
+    
+    void EnableRelativeCuts()                                          { Printf("[I] Relative Cuts enabled"); fUseRelativeCuts = kTRUE; }
+    Bool_t AreRelativeCutsEnabled()                                    { return fUseRelativeCuts; }
+    
+    // setter and getter track quality cut parameters
+    void SetCutRequireTPCRefit(Bool_t *b)                              { fCutRequireTPCRefit = b; } 
+    Bool_t IsTPCRefitRequired()                                        { return fCutRequireTPCRefit; } 
+    
+    void SetCutMinNClustersTPC(Double_t d)                             { fCutMinNumberOfClusters = d; }
+    Double_t GetCutMinNClustersTPC()                                   { return fCutMinNumberOfClusters; }
+    
+    void SetCutPercMinNClustersTPC(Double_t d)                         { Printf("[I] Take only %.2f%% tracks with most clusters", d*100.); fCutPercMinNumberOfClusters = d; }
+    Double_t GetCutPercMinNClustersTPC()                               { return fCutPercMinNumberOfClusters; }
+    
+    void SetCutMinNCrossedRowsTPC(Double_t d)                          { fCutMinNumberOfCrossedRows = d; }    
+    Double_t GetCutMinNCrossedRowsTPC()                                        { return fCutMinNumberOfCrossedRows; }
+    
+    void SetCutPercMinNCrossedRowsTPC(Double_t d)                      { Printf("[I] Take only %.2f%% tracks with most crossedRows", d*100.); fCutPercMinNumberOfCrossedRows = d; }    
+    Double_t GetCutPercMinNCrossedRowsTPC()                            { return fCutPercMinNumberOfCrossedRows; }
+    
+    void SetCutMinRatioCrossedRowsOverFindableClustersTPC(Double_t d)  { fCutMinRatioCrossedRowsOverFindableClustersTPC = d; }
+    Double_t GetCutMinRatioCrossedRowsOverFindableClustersTPC()                { return fCutMinRatioCrossedRowsOverFindableClustersTPC; }
+    
+    void SetCutLengthInTPCPtDependent()                                        { fCutLengthInTPCPtDependent = kTRUE; }
+    Bool_t DoCutLengthInTPCPtDependent()                               { return fCutLengthInTPCPtDependent; }
+    
+    void SetPrefactorLengthInTPCPtDependent(Double_t d)                        { fPrefactorLengthInTPCPtDependent = d; }
+    Double_t GetPrefactorLengthInTPCPtDependent()                      { return fPrefactorLengthInTPCPtDependent; }
+     
+    void SetCutMaxChi2PerClusterTPC(Double_t d)                        { fCutMaxChi2PerClusterTPC = d; }
+    void SetCutMaxFractionSharedTPCClusters(Double_t d)                { fCutMaxFractionSharedTPCClusters = d; }
+    void SetCutMaxDCAToVertexZ(Double_t d)                             { fCutMaxDCAToVertexZ = d; }
+    void SetCutMaxDCAToVertexXY(Double_t d)                            { fCutMaxDCAToVertexXY = d; }
+    void SetCutRequireITSRefit(Bool_t *b)                              { fCutRequireITSRefit = b; } 
+    void SetCutMaxChi2PerClusterITS(Double_t d)                        { fCutMaxChi2PerClusterITS = d; }
+    void SetCutDCAToVertex2D(Bool_t *b)                                { fCutDCAToVertex2D = b; } 
+    void SetCutRequireSigmaToVertex(Bool_t *b)                                 { fCutRequireSigmaToVertex = b; } 
     void SetCutMaxDCAToVertexXYPtDep(Double_t d0, Double_t d1, Double_t d2)
     {
-      dCutMaxDCAToVertexXYPtDepPar0 = d0;
-      dCutMaxDCAToVertexXYPtDepPar1 = d1;
-      dCutMaxDCAToVertexXYPtDepPar2 = d2;
+      fCutMaxDCAToVertexXYPtDepPar0 = d0;
+      fCutMaxDCAToVertexXYPtDepPar1 = d1;
+      fCutMaxDCAToVertexXYPtDepPar2 = d2;
     }
-    void SetCutAcceptKinkDaughters(Bool_t *b)                          { bCutAcceptKinkDaughters = b; } 
-    void SetCutMaxChi2TPCConstrainedGlobal(Double_t d)                         { dCutMaxChi2TPCConstrainedGlobal = d; }
-    
-    // getter for qualtiy track cuts
-    Double_t GetCutMinNCrossedRowsTPC()                                        { return dCutMinNumberOfCrossedRows; }
-    
+    void SetCutAcceptKinkDaughters(Bool_t *b)                          { fCutAcceptKinkDaughters = b; } 
+    void SetCutMaxChi2TPCConstrainedGlobal(Double_t d)                         { fCutMaxChi2TPCConstrainedGlobal = d; }
+       
     // fill function for cross check histos
     Bool_t FillDebugHisto(Double_t *dCrossCheckVar, Double_t *dKineVar, Double_t dCentrality, Bool_t bIsAccepted);
     
     // getter for DCA
     Bool_t GetDCA(const AliAODTrack *track, AliAODEvent *evt, Double_t d0z0[2]);
     
-    THnSparseF *GetHistZvPtEtaCent() const { return hnZvPtEtaCent; }
-    TH1F *GetHistEventStatistics() const { return hEventStatistics; }
+    THnSparseF *GetHistZvPtEtaCent() const { return fZvPtEtaCent; }
+    TH1F *GetHistEventStatistics() const { return fEventStatistics; }
     
     const char * GetParticleName(Int_t pdg);
     
     AliGenHijingEventHeader* GetHijingEventHeader(AliAODMCHeader *header);
     AliGenPythiaEventHeader* GetPythiaEventHeader(AliAODMCHeader *header);
     
-    Bool_t IsTrackAccepted(AliAODTrack *tr, Double_t dCentrality);
+    
+    Bool_t SetRelativeCuts(AliAODEvent *event);
+    
+    Bool_t IsTrackAccepted(AliAODTrack *tr, Double_t dCentrality, Double_t bMagZ);
     Bool_t IsMCTrackAccepted(AliAODMCParticle *part);
     
     Bool_t IsHijingParticle(const AliAODMCParticle *part, AliGenHijingEventHeader* hijingGenHeader);
@@ -135,62 +165,74 @@ class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
     TList      *fOutputList;
     
     // Histograms
-    TH1F       *hPt; // simple pT histogramm
-    TH1F       *hMCPt; // simple pT truth histogramm
-    THnSparseF         *hnZvPtEtaCent; //-> Zv:Pt:Eta:Cent
-    THnSparseF         *hnMCRecPrimZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent
-    THnSparseF         *hnMCGenZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent
-    THnSparseF         *hnMCRecSecZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent, only secondaries
-    TH1F       *hEventStatistics; // contains statistics of number of events after each cut
-    TH1F       *hEventStatisticsCentrality; // contains number of events vs centrality, events need to have a track in kinematic range
-    TH1F       *hMCEventStatisticsCentrality; // contains MC number of events vs centrality, events need to have a track in kinematic range
-    TH1F       *hAllEventStatisticsCentrality; // contains number of events vs centrality, events need to be triggered
-    TH2F       *hEventStatisticsCentralityTrigger; // contains number of events vs centrality in 1% bins vs trigger
-    THnSparseF *hnZvMultCent; // Zv:Mult:Cent
-    TH1F       *hTriggerStatistics; // contains number of events per trigger
-    TH1F       *hMCTrackPdgCode; // contains statistics of pdg codes of tracks
-    TH1F       *hMCTrackStatusCode; // contains statistics of status codes of tracks
-    TH1F       *hCharge; // charge distribution in data
-    TH1F       *hMCCharge; // charge distribution in MC
-    TH2F       *hMCPdgPt; // PDGvs PT for MC Particles
-    TH1F       *hMCHijingPrim; // number of particles, which are Hijing particles and primaries
-    THnSparseF *hDCAPtAll; //control histo: DCAz:DCAxy:pT:eta:phi for all reconstructed tracks
-    THnSparseF *hDCAPtAccepted; //control histo: DCAz:DCAxy:pT:eta:phi for all accepted reco tracks
-    THnSparseF *hMCDCAPtSecondary; //control histo: DCAz:DCAxy:pT:eta:phi for all accepted reco track, which are secondaries (using MC info)
-    THnSparseF *hMCDCAPtPrimary; //control histo: DCAz:DCAxy:pT:eta:phi for all accepted reco track, which are primaries (using MC info)
-    THnF       *hCrossCheckAll[3]; //control histo: {CrossedRows,Ncluster,Chi} vs pT,eta,phi,Centrality for all tracks
-    THnF       *hCrossCheckAcc[3]; //control histo: {CrossedRows,Ncluster,Chi} vs pT,eta,phi,Centrality after cuts
+    TH1F       *fPt; // simple pT histogramm
+    TH1F       *fMCPt; // simple pT truth histogramm
+    THnSparseF         *fZvPtEtaCent; //-> Zv:Pt:Eta:Cent
+    THnSparseF         *fMCRecPrimZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent
+    THnSparseF         *fMCGenZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent
+    THnSparseF         *fMCRecSecZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent, only secondaries
+    TH1F       *fEventStatistics; // contains statistics of number of events after each cut
+    TH1F       *fEventStatisticsCentrality; // contains number of events vs centrality, events need to have a track in kinematic range
+    TH1F       *fMCEventStatisticsCentrality; // contains MC number of events vs centrality, events need to have a track in kinematic range
+    TH1F       *fAllEventStatisticsCentrality; // contains number of events vs centrality, events need to be triggered
+    TH2F       *fEventStatisticsCentralityTrigger; // contains number of events vs centrality in 1% bins vs trigger
+    THnSparseF *fZvMultCent; // Zv:Mult:Cent
+    TH1F       *fTriggerStatistics; // contains number of events per trigger
+    TH1F       *fMCTrackPdgCode; // contains statistics of pdg codes of tracks
+    TH1F       *fMCTrackStatusCode; // contains statistics of status codes of tracks
+    TH1F       *fCharge; // charge distribution in data
+    TH1F       *fMCCharge; // charge distribution in MC
+    TH2F       *fMCPdgPt; // PDGvs PT for MC Particles
+    TH1F       *fMCHijingPrim; // number of particles, which are Hijing particles and primaries
+    THnSparseF *fDCAPtAll; //control histo: DCAz:DCAxy:pT:eta:phi for all reconstructed tracks
+    THnSparseF *fDCAPtAccepted; //control histo: DCAz:DCAxy:pT:eta:phi for all accepted reco tracks
+    THnSparseF *fMCDCAPtSecondary; //control histo: DCAz:DCAxy:pT:eta:phi for all accepted reco track, which are secondaries (using MC info)
+    THnSparseF *fMCDCAPtPrimary; //control histo: DCAz:DCAxy:pT:eta:phi for all accepted reco track, which are primaries (using MC info)
+    THnF       *fCrossCheckAll[4]; //control histo: {CrossedRows,Ncluster,Chi} vs pT,eta,phi,Centrality for all tracks
+    THnF       *fCrossCheckAcc[4]; //control histo: {CrossedRows,Ncluster,Chi} vs pT,eta,phi,Centrality after cuts
+    TH1F       *fCutPercClusters; // control histo: number of clusters, where the relative cut has been set e-by-e
+    TH1F       *fCutPercCrossed; // control histo: number of crossed rows, where the relative cut has been set e-by-e
+    TH2F       *fCrossCheckRowsLength; // control histo: number of crossed rows vs length in TPC
+    TH2F       *fCrossCheckClusterLength; // control histo: number of clusters vs length in TPC
+    TH2F       *fCrossCheckRowsLengthAcc; // control histo: number of crossed rows vs length in TPC for all accepted tracks
+    TH2F       *fCrossCheckClusterLengthAcc; // control histo: number of clusters vs length in TPC for all accepted tracks
     
     
     // global variables
-    Bool_t bIsMonteCarlo;
+    Bool_t fIsMonteCarlo;
     
     // event cut variables
-    Double_t dCutMaxZVertex;
+    Double_t fCutMaxZVertex;
     
     // track kinematic cut variables
-    Double_t dCutPtMin;
-    Double_t dCutPtMax;
-    Double_t dCutEtaMin;
-    Double_t dCutEtaMax;
+    Double_t fCutPtMin;
+    Double_t fCutPtMax;
+    Double_t fCutEtaMin;
+    Double_t fCutEtaMax;
     
     // track quality cut variables
-    Bool_t     bCutRequireTPCRefit;
-    Double_t   dCutMinNumberOfCrossedRows;
-    Double_t   dCutMinRatioCrossedRowsOverFindableClustersTPC;
-    Double_t   dCutMaxChi2PerClusterTPC;
-    Double_t   dCutMaxFractionSharedTPCClusters;
-    Double_t   dCutMaxDCAToVertexZ;
-    Double_t   dCutMaxDCAToVertexXY;
-    Bool_t     bCutRequireITSRefit;
-    Double_t   dCutMaxChi2PerClusterITS;
-    Bool_t     dCutDCAToVertex2D;
-    Bool_t     dCutRequireSigmaToVertex;
-    Double_t   dCutMaxDCAToVertexXYPtDepPar0;
-    Double_t   dCutMaxDCAToVertexXYPtDepPar1;
-    Double_t   dCutMaxDCAToVertexXYPtDepPar2;
-    Bool_t     bCutAcceptKinkDaughters;
-    Double_t   dCutMaxChi2TPCConstrainedGlobal;
+    Bool_t     fUseRelativeCuts;
+    Bool_t     fCutRequireTPCRefit;
+    Double_t   fCutMinNumberOfClusters;
+    Double_t   fCutPercMinNumberOfClusters;
+    Double_t   fCutMinNumberOfCrossedRows;
+    Double_t   fCutPercMinNumberOfCrossedRows;
+    Double_t   fCutMinRatioCrossedRowsOverFindableClustersTPC;
+    Double_t   fCutMaxChi2PerClusterTPC;
+    Double_t   fCutMaxFractionSharedTPCClusters;
+    Double_t   fCutMaxDCAToVertexZ;
+    Double_t   fCutMaxDCAToVertexXY;
+    Bool_t     fCutRequireITSRefit;
+    Double_t   fCutMaxChi2PerClusterITS;
+    Bool_t     fCutDCAToVertex2D;
+    Bool_t     fCutRequireSigmaToVertex;
+    Double_t   fCutMaxDCAToVertexXYPtDepPar0;
+    Double_t   fCutMaxDCAToVertexXYPtDepPar1;
+    Double_t   fCutMaxDCAToVertexXYPtDepPar2;
+    Bool_t     fCutAcceptKinkDaughters;
+    Double_t   fCutMaxChi2TPCConstrainedGlobal;
+    Bool_t     fCutLengthInTPCPtDependent;
+    Double_t   fPrefactorLengthInTPCPtDependent;
     
     //binning for THNsparse
     Int_t fMultNbins;
@@ -215,7 +257,7 @@ class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
     AlidNdPtAnalysisPbPbAOD(const AlidNdPtAnalysisPbPbAOD&); // not implemented
     AlidNdPtAnalysisPbPbAOD& operator=(const AlidNdPtAnalysisPbPbAOD&); // not implemented  
     
-    ClassDef(AlidNdPtAnalysisPbPbAOD,3); // has to be at least 1, otherwise not streamable...
+    ClassDef(AlidNdPtAnalysisPbPbAOD,4); // has to be at least 1, otherwise not streamable...
 };
 
 #endif