-// ----------------------------------------------------------------------------
-// Header file.
-// ----------------------------------------------------------------------------
-// Last Rev.: Mar. 2nd 2012. (v 8.00)
-// ----------------------------------------------------------------------------
-
-#ifndef ALIANALYSISTASKDIHADRONPID_H
-#define ALIANALYSISTASKDIHADRONPID_H
-
-#include "AliAnalysisTaskSE.h"
-#include "THnSparse.h"
-
-class TH1F;
-class TH2F;
-class TH3F;
-//class THnSparseF;
-class TList;
-class TObjArray;
-class TString;
-
-class AliAODTrack;
-class AliAODEvent;
-class AliAODVertex;
-
-class AliPIDResponse;
-
-class AliAnalysisTaskDiHadronPID: public AliAnalysisTaskSE {
-
-public:
- // Required functions.
- AliAnalysisTaskDiHadronPID();
- AliAnalysisTaskDiHadronPID(const char *name);
- virtual ~AliAnalysisTaskDiHadronPID();
-
- virtual void UserCreateOutputObjects();
- virtual void UserExec(Option_t *option);
- virtual void Terminate(Option_t *);
-
- // Setters
- void SetVerbose(Bool_t verbose=kTRUE) {fVerbose=verbose;}
- void SetCalculateMixedEvents(Bool_t mixedevents=kTRUE) {fCalculateMixedEvents=mixedevents;}
-
- // Getters
- Bool_t GetVerbose() {return fVerbose;}
- Bool_t GetCalculateMixedEvents() {return fCalculateMixedEvents;}
-
-private:
- // Private Functions.
- AliAnalysisTaskDiHadronPID(const AliAnalysisTaskDiHadronPID&); // NOT IMPLEMENTED.
- AliAnalysisTaskDiHadronPID& operator=(const AliAnalysisTaskDiHadronPID&); // NOT IMPLEMENTED.
-
- Bool_t SelectTrack(AliAODTrack *track, Int_t cuts=0);
- Bool_t SelectEvent(AliAODVertex *vertex);
-
- void FillPIDPartnersArray();
- AliAODTrack* GetTrackPartner(AliAODTrack* track);
-
- Double_t PhiRange(Double_t DPhi);
-
-private:
- // PID object.
- AliPIDResponse *fPIDResponse; //! PID Response Handler.
-
- // Event and Track related objects.
- AliAODEvent *fAODEvent; //! The AOD Event.
- AliAODHeader *fAODHeader; //! The AOD Header.
- AliAODVertex *fAODVertex; //! The AOD Vertex.
-
- AliAODTrack *fAODTrack; //! Current AOD Track.
-
- TObjArray *fPIDPartners; //! Partner Tracks.
-
- // HISTOGRAMS.
-
- // Event Sample Plots.
- TH1F *fCentrality; //! Centrality Histogram.
- TH1F *fVertexZ; //! Vertex Z position.
-
- // Track cuts counts.
- TH1F *fTrackCuts; //! Different Track cuts.
-
- // Unidentified Spectra.
- TH1F *fPtSpectrum; //! Unidentified Pt-spectrum (after standard track cuts).
- TH3F *fAssociatedDistribution; //! Associated distribution.
-
- // QA plots PID.
- TH2F *fTPCnSigmaProton; //! TPC nSigma plot for Protons.
- TH2F *fTOFnSigmaProton; //! TOF nSigma plot for Protons.
- TH2F *fTPCnSigmaPion; //! TPC nSigma plot for Pions.
- TH2F *fTOFnSigmaPion; //! TOF nSigma plot for Pions.
- TH2F *fTPCnSigmaKaon; //! TPC nSigma plot for Kaons.
- TH2F *fTOFnSigmaKaon; //! TOF nSigma plot for Kaons.
-
- // PID signals as function of pT and Eta
- TH3F *fTPCSignal; //! TPC signal (pt,eta).
- TH3F *fTOFSignal; //! TOF signal (pT,eta).
-
- // Unidentified Di-Hadron Correlations & Mixed Events.
- TH3F *fDiHadron; //! Di-Hadron correlations.
- TH3F *fMixedEvents; //! Mixed Events.
-
- // Di-Hadron Correlations with TPC and TOF signals.
- TH3F *fDiHadronTPC[3][10]; //! Di-Hadron correlations with TPC signal.
- TH3F *fDiHadronTOF[3][10]; //! Di-Hadron correlations with TOF signal.
- THnSparseF *fDiHadronTPCTOF[3][10]; //! Di-Hadron correlations with both TPC and TOF signal.
-
- // List of Histograms.
- TList *fHistoList; //! List of Histograms.
-
- // Other data members.
- Bool_t fVerbose; // Generates verbal output if kTRUE.
- UInt_t fMask; // PID efficiency graphs will be made for this mask.
- Bool_t fCalculateMixedEvents; //
-
- // Trigger buffer.
- Double_t fTrigBuffer[25000][4]; //!
- Int_t fTrigBufferIndex; //!
- Int_t fTrigBufferSize; //!
-
-
- ClassDef(AliAnalysisTaskDiHadronPID,1);
-
-};
-
-#endif
-
+// ----------------------------------------------------------------------------\r
+// AliAnalysisTaskDiHadronPID.h\r
+// ----------------------------------------------------------------------------\r
+// Author: Misha Veldhoen (misha.veldhoen@cern.ch)\r
+// Last Rev.: Apr. 12th 2012. (v 8.00)\r
+// ----------------------------------------------------------------------------\r
+\r
+#ifndef ALIANALYSISTASKDIHADRONPID_H\r
+#define ALIANALYSISTASKDIHADRONPID_H\r
+\r
+#include <iostream>\r
+#include "AliAnalysisTaskSE.h"\r
+#include "THnSparse.h"\r
+#include "TMath.h"\r
+\r
+using namespace std;\r
+\r
+class TH1F;\r
+class TH2F;\r
+class TH3F;\r
+class TList;\r
+class TObjArray;\r
+class TString;\r
+\r
+class AliAODTrack;\r
+class AliAODEvent;\r
+class AliAODVertex;\r
+\r
+class AliPIDResponse;\r
+\r
+class AliAnalysisTaskDiHadronPID: public AliAnalysisTaskSE {\r
+\r
+public:\r
+ // Required functions.\r
+ AliAnalysisTaskDiHadronPID();\r
+ AliAnalysisTaskDiHadronPID(const char *name);\r
+ virtual ~AliAnalysisTaskDiHadronPID();\r
+ \r
+ virtual void UserCreateOutputObjects();\r
+ virtual void UserExec(Option_t *option);\r
+ virtual void Terminate(Option_t *);\r
+ \r
+ // Setters\r
+ void SetVerbose(Int_t verbose) {fVerbose=verbose;}\r
+ void SetPrintBufferSize(Bool_t printbuffersize=kTRUE) {fPrintBufferSize=printbuffersize;}\r
+ void SetCalculateMixedEvents(Bool_t mixedevents=kTRUE) {fCalculateMixedEvents=mixedevents;}\r
+ void SetBeamType(TString beamtype) {\r
+ if ((beamtype!="pp")&&(beamtype!="PbPb")) {\r
+ cout<<"SetBeamType -> Beamtype must be pp or PbPb"<<endl;\r
+ return;\r
+ }\r
+ fBeamType=beamtype;\r
+ }\r
+ \r
+ void SetMaxEta(Double_t maxeta) {\r
+ if (TMath::Abs(maxeta)>0.9) {\r
+ cout<<"SetMaxEta -> |eta| must be < 0.9"<<endl;\r
+ return;\r
+ }\r
+ fMaxEta = maxeta;\r
+ }\r
+ \r
+ void SetMaxPlotEta(Double_t maxploteta) {\r
+ if (TMath::Abs(maxploteta)>1.0) {\r
+ cout<<"SetMaxPlotEta -> |eta| must be < 1.0"<<endl;\r
+ return;\r
+ }\r
+ fMaxPlotEta = maxploteta;\r
+ }\r
+ \r
+ void SetMaxPt(Double_t maxpt) {\r
+ if (maxpt<5.) {\r
+ cout<<"SetMaxPt -> Maximum pT must be > 5.0 GeV/c."<<endl;\r
+ return;\r
+ }\r
+ fMaxPt = maxpt;\r
+ }\r
+ \r
+ void SetNEtaBins(Int_t netabins) {\r
+ if (netabins<1||netabins>72) {\r
+ cout<<"SetNEtaBins -> Number of bins must be between 1 and 72"<<endl;\r
+ return;\r
+ }\r
+ fNEtaBins = netabins;\r
+ }\r
+ \r
+ void SetNPhiBins(Int_t nphibins) {\r
+ if (nphibins<1||nphibins>72) {\r
+ cout<<"SetNPhiBins -> Number of bins must be between 1 and 72"<<endl;\r
+ return;\r
+ }\r
+ fNPhiBins = nphibins;\r
+\r
+ }\r
+ \r
+ void SetVertexZMixedEvents(Double_t vertexzmixedevents) {\r
+ if (vertexzmixedevents<0.||vertexzmixedevents>10.) {\r
+ cout<<"SetVertexZMixedEvents -> must be 0 < z < 10"<<endl;\r
+ return;\r
+ } \r
+ fVertexZMixedEvents=vertexzmixedevents;\r
+ } \r
+ \r
+ void SetZoomed(Bool_t zoomed=kTRUE) {fZoomed=zoomed;}\r
+ void SetDoDCACut(Bool_t dodcacut=kTRUE) {fDoDCACut=dodcacut;}\r
+ void SetDoITSCut(Bool_t doitscut=kTRUE) {fDoITSCut=doitscut;}\r
+ void SetDemandNoMismatch(Bool_t demandnomismatch=kTRUE) {fDemandNoMismatch=demandnomismatch;}\r
+ void SetTrigBufferMaxSize(Int_t trigbuffermaxsize) {\r
+ if (trigbuffermaxsize<10||trigbuffermaxsize>25000) {\r
+ cout<<"SetTrigBufferMaxSize -> Max buffer size must be between 10 and 25000."<<endl;\r
+ return;\r
+ }\r
+ fTrigBufferMaxSize=trigbuffermaxsize;\r
+ }\r
+ \r
+ void SetCentralityCut(Double_t centralitycutmax, Double_t centralitycutmin) {\r
+ if (centralitycutmax<0.) {\r
+ cout<<"SetCentralityCut -> Centrality cannot be lower than 0."<<endl;\r
+ return;\r
+ }\r
+ if (centralitycutmin<centralitycutmax) {\r
+ cout<<"SetCentralityCut -> Maximum centrality needs to be smaller than the minimum centrality. (It's confusing I know)"<<endl;\r
+ return;\r
+ }\r
+ if (centralitycutmin>100.) {\r
+ cout<<"SetCentralityCut -> Minimum centrality cannot exceed 100%."<<endl;\r
+ return;\r
+ }\r
+ fCentralityCutMax=centralitycutmax;\r
+ fCentralityCutMin=centralitycutmin;\r
+ \r
+ }\r
+ \r
+ // Getters\r
+ Bool_t GetVerbose() {return fVerbose;}\r
+ Bool_t GetPrintBufferSize() {return fPrintBufferSize;}\r
+ Bool_t GetCalculateMixedEvents() {return fCalculateMixedEvents;}\r
+ TString GetBeamType() {return fBeamType;}\r
+ Double_t GetMaxEta() {return fMaxEta;}\r
+ Double_t GetMaxPlotEta() {return fMaxPlotEta;}\r
+ Double_t GetMaxPt() {return fMaxPt;}\r
+ Int_t GetNEtaBins() {return fNEtaBins;}\r
+ Int_t GetNPhiBins() {return fNPhiBins;}\r
+ Double_t GetVertexZMixedEvents() {return fVertexZMixedEvents;}\r
+ Bool_t GetZoomed() {return fZoomed;}\r
+ Bool_t GetDoDCACut() {return fDoDCACut;}\r
+ Bool_t GetDoITSCut() {return fDoITSCut;}\r
+ Bool_t GetDemandNoMismatch() {return fDemandNoMismatch;}\r
+ Int_t GetTrigBufferMaxSize() {return fTrigBufferMaxSize;}\r
+ Double_t GetCentralityCutMax() {return fCentralityCutMax;}\r
+ Double_t GetCentralityCutMin() {return fCentralityCutMin;}\r
+ \r
+private:\r
+ // Private Functions. \r
+ AliAnalysisTaskDiHadronPID(const AliAnalysisTaskDiHadronPID&); // NOT IMPLEMENTED.\r
+ AliAnalysisTaskDiHadronPID& operator=(const AliAnalysisTaskDiHadronPID&); // NOT IMPLEMENTED.\r
+\r
+ void FillGlobalTracksArray();\r
+ AliAODTrack* GetGlobalTrack(AliAODTrack* track);\r
+ \r
+ Bool_t SelectEvent(AliAODVertex *vertex);\r
+ Int_t ClassifyTrack(AliAODTrack* track);\r
+\r
+ Double_t PhiRange(Double_t DPhi);\r
+ \r
+private:\r
+ // PID object.\r
+ AliPIDResponse *fPIDResponse; //! PID Response Handler.\r
+ \r
+ // Event and Track related objects.\r
+ AliAODEvent *fAODEvent; //! The AOD Event.\r
+ AliAODHeader *fAODHeader; //! The AOD Header.\r
+ AliAODVertex *fAODVertex; //! The AOD Vertex.\r
+ \r
+ AliAODTrack *fAODTrack; //! Current AOD Track.\r
+\r
+ TObjArray *fGlobalTracks; //! Partner Tracks.\r
+ \r
+ // HISTOGRAMS.\r
+\r
+ // Event QA plots.\r
+ TH1F *fCentrality; //! Centrality Histogram.\r
+ TH1F *fVertexZ; //! Vertex Z position.\r
+\r
+ // Track QA plots.\r
+ TH2F *fDCA; //! DCA XY vs Z before DCA cut.\r
+ TH2F *fDCAZoomed; //!\r
+ TH2F *fDCAZoomedTwice; //!\r
+ TH2F *fDCACut; //! DCA XY vs Z after DCA cut (if performed!).\r
+ TH2F *fDCAZoomedCut; //!\r
+ TH2F *fDCAZoomedTwiceCut; //!\r
+ \r
+ TH1F *fITSHits; //! 3 bins, [no hits in first 2 layers, 1 hit, 2 hits]\r
+ \r
+ TH1F *fTrackCutsCount; //! Counts of used tracks after cuts\r
+ TH2F *fTrackCutsPt; //! pT spectrum after cuts.\r
+ TH2F *fTrackCutsEta; //! eta spectrum after cuts.\r
+ TH2F *fTrackCutsPhi; //! phi spectrum after cuts.\r
+ \r
+ TH1F *fEtaSpectrumTrig; //! eta spectrum of triggers (pT > 5.0 tracks, trigger track cuts.)\r
+ TH2F *fEtaSpectrumAssoc; //! eta spectrum of associateds as a function of pT\r
+ TH2F *fPhiSpectrumAssoc; //! phi spectrum of associateds as a function of pT\r
+\r
+ // PID QA plots.\r
+ TH2F *fTPCnSigmaProton; //! TPC nSigma plot for Protons.\r
+ TH2F *fTOFnSigmaProton; //! TOF nSigma plot for Protons.\r
+ TH2F *fTPCnSigmaPion; //! TPC nSigma plot for Pions.\r
+ TH2F *fTOFnSigmaPion; //! TOF nSigma plot for Pions. \r
+ TH2F *fTPCnSigmaKaon; //! TPC nSigma plot for Kaons.\r
+ TH2F *fTOFnSigmaKaon; //! TOF nSigma plot for Kaons.\r
+ \r
+ TH3F *fTPCSignal; //! TPC signal (pt,eta).\r
+ TH3F *fTOFSignal; //! TOF signal (pt,eta).\r
+ \r
+ // Di-Hadron Correlations with TPC and TOF signals.\r
+ THnSparseF *fDiHadronTPCTOF[3][10]; //! Di-Hadron correlations with both TPC and TOF signal.\r
+\r
+ // Mixed Events.\r
+ TH3F *fMixedEvents; //! Mixed Events, associated track cuts.\r
+ \r
+ // List of Histograms.\r
+ TList *fHistoList; //! List of Histograms.\r
+ \r
+ // Analysis Task Configuration Variables.\r
+ Bool_t fCalculateMixedEvents; // \r
+ TString fBeamType; // pp or PbPb\r
+ Double_t fMaxEta; // Q: Do we need to take extra care of the binning?\r
+ Double_t fMaxPlotEta; //\r
+ Double_t fMaxPt; //\r
+ Int_t fNEtaBins; // Number of bins in eta\r
+ Int_t fNPhiBins; // Number of bins in phi\r
+ Double_t fVertexZMixedEvents; // Events with a vertex z difference smaller than \r
+ // this number (standard 2cm) will be mixed.\r
+ \r
+ Double_t fCentralityCutMax; // Maximum centrality (standard 0%)\r
+ Double_t fCentralityCutMin; // Minimum centrality (standard 10%)\r
+ Bool_t fZoomed; //\r
+ Bool_t fDoITSCut; // Cut the tracks with not at least one SPD hit.\r
+ Bool_t fDoDCACut; // Perform a DCA cut to get rid of secondaries.\r
+ Bool_t fDemandNoMismatch; // \r
+ \r
+ Int_t fTrackCutLabelNumbers[8]; // Track Cut labels.\r
+ \r
+ // Level of verbal output.\r
+ // 0 -> No output.\r
+ // 1 -> Only error messages.\r
+ // 2 -> Information about output creation (beginning of the job)\r
+ // 3 -> Event information.\r
+ // 4 -> Track information.\r
+ Int_t fVerbose; //\r
+ Bool_t fPrintBufferSize; //\r
+\r
+ // Trigger buffer.\r
+ Double_t fTrigBuffer[25000][4]; //!\r
+ Int_t fTrigBufferIndex; //!\r
+ Int_t fTrigBufferSize; //!\r
+ Int_t fTrigBufferMaxSize; //!\r
+ \r
+ \r
+ ClassDef(AliAnalysisTaskDiHadronPID,1);\r
+ \r
+};\r
+\r
+#endif\r
+\r