First preliminary tasks for PWGLF production QA (cont'd)
[u/mrichter/AliRoot.git] / PWGLF / QATasks / AliAnalysisTaskQAHighPtDeDx.h
1 #ifndef ALIANALYSISTASKQAHIGHPTDEDX_H
2 #define ALIANALYSISTASKQAHIGHPTDEDX_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5 /* $Id$ */
6
7
8 // ROOT includes
9 #include <TList.h>
10 #include <TH1.h>
11 #include <TProfile.h>
12 #include <TTreeStream.h>
13 #include <TRandom.h>
14 #include <TObject.h>
15
16 // AliRoot includes
17 #include <AliAnalysisTaskSE.h>
18 #include <AliESDEvent.h>
19 #include <AliAODEvent.h>
20 #include <AliMCEvent.h>
21 #include <AliAnalysisFilter.h>
22 #include <AliStack.h>
23 #include <AliGenEventHeader.h>
24 #include <AliVHeader.h>
25 #include <AliAODMCParticle.h> 
26 #include <AliESDtrackCuts.h>
27
28
29
30 class AliAnalysisTaskQAHighPtDeDx : public AliAnalysisTaskSE {
31  public:
32  
33   //AliAnalysisTaskQAHighPtDeDx();
34   //AliAnalysisTaskQAHighPtDeDx(const char *name);
35   //virtual ~AliAnalysisTaskQAHighPtDeDx();
36   AliAnalysisTaskQAHighPtDeDx(const char *name="<default name>");
37   virtual ~AliAnalysisTaskQAHighPtDeDx() { /*if (fOutputList) delete fOutputList;*/}//;
38
39   virtual void   UserCreateOutputObjects();
40   virtual void   UserExec(Option_t *option);
41
42   Bool_t   GetAnalysisMC() { return fAnalysisMC; }   
43   Double_t GetVtxCut() { return fVtxCut; }   
44   Double_t GetEtaCut() { return fEtaCut; }     
45   //Double_t GetMinPt() { return fMinPt; }   
46   //Int_t    GetTreeOption() { return fTreeOption; }  
47
48   virtual void  SetTrigger(UInt_t ktriggerInt) {ftrigBit = ktriggerInt;}
49   virtual void  SetTrackFilterGolden(AliAnalysisFilter* trackF) {fTrackFilterGolden = trackF;}
50   virtual void  SetTrackFilterTPC(AliAnalysisFilter* trackF) {fTrackFilterTPC = trackF;}
51   virtual void  SetCentralityEstimator(const char * centEst) {fCentEst = centEst;}
52   virtual void  SetAnalysisType(const char* analysisType) {fAnalysisType = analysisType;}
53   virtual void  SetAnalysisMC(Bool_t isMC) {fAnalysisMC = isMC;}
54   virtual void  SetVtxCut(Double_t vtxCut){fVtxCut = vtxCut;}
55   virtual void  SetEtaCut(Double_t etaCut){fEtaCut = etaCut;}
56   virtual void  SetPileUpRej(Bool_t isrej) {fPileUpRej = isrej;}   
57   virtual void  SetMinCent(Float_t minvalc) {fMinCent = minvalc;}
58   virtual void  SetMaxCent(Float_t maxvalc) {fMaxCent = maxvalc;}
59   virtual void  SetStoreMcIn(Bool_t value) {fStoreMcIn = value;}
60   virtual void  SetAnalysisPbPb(Bool_t isanaPbPb) {fAnalysisPbPb = isanaPbPb;}
61
62  private:
63   virtual Float_t GetVertex(const AliVEvent* event) const;
64   virtual void AnalyzeESD(AliESDEvent* esd); 
65   virtual void AnalyzeAOD(AliAODEvent* aod); 
66   virtual void ProduceArrayTrksESD(AliESDEvent* event);
67   virtual void ProduceArrayV0ESD(AliESDEvent* event);
68   virtual void ProduceArrayTrksAOD(AliAODEvent* event);
69   virtual void ProduceArrayV0AOD(AliAODEvent* event);
70   Short_t   GetPidCode(Int_t pdgCode) const;
71   void      ProcessMCTruthESD();
72   void      ProcessMCTruthAOD(); 
73
74   Short_t   GetPythiaEventProcessType(Int_t pythiaType);
75   Short_t   GetDPMjetEventProcessType(Int_t dpmJetType);
76   ULong64_t GetEventIdAsLong(AliVHeader* header) const;
77
78   TParticle* FindPrimaryMother(AliStack* stack, Int_t label);
79   Int_t      FindPrimaryMotherLabel(AliStack* stack, Int_t label);
80
81   AliAODMCParticle* FindPrimaryMotherAOD(AliAODMCParticle* startParticle);
82
83   TParticle* FindPrimaryMotherV0(AliStack* stack, Int_t label);
84   Int_t      FindPrimaryMotherLabelV0(AliStack* stack, Int_t label, Int_t& nSteps);
85   Bool_t PhiCut(Double_t pt, Double_t phi, Double_t q, Float_t   mag, TF1* phiCutLow, TF1* phiCutHigh);
86
87
88   AliAODMCParticle* FindPrimaryMotherAODV0(AliAODMCParticle* startParticle, Int_t& nSteps);
89
90
91
92   static const Double_t fgkClight;   // Speed of light (cm/ps)
93
94   AliESDEvent* fESD;                  //! ESD object
95   AliAODEvent* fAOD;                  //! AOD object
96   AliMCEvent*  fMC;                   //! MC object
97   AliStack*    fMCStack;              //! MC ESD stack
98   TClonesArray* fMCArray;             //! MC array for AOD
99   AliAnalysisFilter* fTrackFilterGolden;    //  Track Filter, set 2010 with golden cuts
100   AliAnalysisFilter* fTrackFilterTPC; // track filter for TPC only tracks
101   TString       fCentEst;             // V0A , V0M, 
102   TString       fAnalysisType;        //  "ESD" or "AOD"
103   Bool_t        fAnalysisMC;          //  Real(kFALSE) or MC(kTRUE) flag
104   Bool_t        fAnalysisPbPb;        //  true you want to analyze PbPb data, false for pp
105   UInt_t       ftrigBit;
106   TRandom*      fRandom;              //! random number generator
107   Bool_t        fPileUpRej;           // kTRUE is pile-up is rejected
108  
109
110
111   //
112   // Cuts and options
113   //
114
115   Double_t     fVtxCut;             // Vtx cut on z position in cm
116   Double_t     fEtaCut;             // Eta cut used to select particles
117   Float_t      fMinCent; //minimum centrality
118   Float_t      fMaxCent; //maximum centrality
119   Bool_t       fStoreMcIn;          // Store MC input tracks
120   //
121   // Help variables
122   //
123   Short_t      fMcProcessType;      // -1=invalid, 0=data, 1=ND, 2=SD, 3=DD
124   Short_t      fTriggeredEventMB;   // 1 = triggered, 0 = not trigged (MC only)
125   Short_t      fVtxStatus;          // -1 = no vtx, 0 = outside cut, 1 = inside cut
126   Float_t      fZvtx;               // z vertex
127   Float_t      fZvtxMC;             // z vertex MC (truth)
128   Int_t        fRun;                // run no
129   ULong64_t    fEventId;            // unique event id
130               
131   //
132   // Output objects
133   //
134   TList*        fListOfObjects;     //! Output list of objects
135   TH1I*         fEvents;            //! No of accepted events
136   TH1I*         fVtx;               //! Event vertex info
137   TH1F*         fVtxMC;             //! Event vertex info for ALL MC events
138   TH1F*         fVtxBeforeCuts;     //! Vertex z dist before cuts
139   TH1F*         fVtxAfterCuts;      //! Vertex z dist after cuts
140   TH1F* fn1;
141   TH1F* fcent;
142
143   TH2D *hMIPVsEta;
144   TProfile *pMIPVsEta;
145   TH2D *hMIPVsEtaV0s;
146   TProfile *pMIPVsEtaV0s;
147   TH2D *hPlateauVsEta;
148   TProfile *pPlateauVsEta;
149   TH2D *hPhi;
150
151   TH2D     *hMIPVsNch[9];
152   TProfile *pMIPVsNch[9];
153
154   TH2D     *hMIPVsPhi[9];
155   TProfile *pMIPVsPhi[9];
156   TH2D     *hPlateauVsPhi[9];
157   TProfile *pPlateauVsPhi[9];
158
159   TH2D* histPiV0[9];
160   TH2D* histPV0[9];
161
162   TH2D* histAllCh[9];
163   TH2D* histPiTof[9];
164   TH2D* histEV0[9];
165   TH1D* hMcIn[7][9];
166   TH1D* hMcOut[7][9];
167
168
169
170   //TTree*        fTree;              //! Debug tree 
171
172   ClassDef(AliAnalysisTaskQAHighPtDeDx, 1);    //Analysis task for high pt analysis 
173 };
174
175 #endif