#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();
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);
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;
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