]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/Correlations/DPhi/AliAnalysisTaskDiHadronPID.h
changes from Misha
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliAnalysisTaskDiHadronPID.h
index 2f7bda731143ad4b95e91a3995403edb7ebe4f17..8a9ab4ecdfb24c92f2d76b09b4be64284b9ff56d 100644 (file)
-// ----------------------------------------------------------------------------
-// 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