two extra histos (M. Verweij)
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliPWG4HighPtTrackQA.h
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //-----------------------------------------------------------------------
17 // This class stores QA variables as function of pT for different type
18 // of tracks and track selection criteria
19 // Author : Marta Verweij - UU
20 //-----------------------------------------------------------------------
21
22 #ifndef ALIPWG4HIGHPTTRACKQA_H
23 #define ALIPWG4HIGHPTTRACKQA_H
24
25 #include "AliAnalysisTaskSE.h"
26
27 class TH1F;
28 class TH2F;
29 class TH3F;
30 class TProfile;
31 class TList;
32 class TArrayF;
33
34 class AliVEvent;
35 class AliESDEvent;
36 class AliESDtrackCuts;
37 class AliESDVertex;
38 class AliAODTrack;
39 class AliESDtrack;
40
41 class AliGenPythiaEventHeader;
42 class AliMCEvent;
43 //class AliAnalysisHelperJetTasks;
44
45 class AliPWG4HighPtTrackQA: public AliAnalysisTaskSE {
46
47  public:
48   AliPWG4HighPtTrackQA();
49   AliPWG4HighPtTrackQA(const char *name);
50   virtual ~AliPWG4HighPtTrackQA() {;}
51  
52   //  virtual void   ConnectInputData(Option_t *);
53   virtual void   UserCreateOutputObjects();
54   virtual void   UserExec(Option_t *option);
55   virtual void   Terminate(Option_t *);
56   virtual Bool_t Notify(); //Copied from AliAnalysisTaskJetSpectrum2
57
58   enum DataType {kESD,kAOD};
59
60   Bool_t IsPbPb() {return fIsPbPb;}  //is PbPb data?
61   Bool_t SelectEvent();              //decides if event is used for analysis
62   Int_t CalculateCentrality(AliVEvent *ev);
63   Int_t CalculateCentrality(AliESDEvent *esd);
64   Int_t CalculateCentrality(AliAODEvent *aod);
65   Int_t GetCentralityClass(Float_t cent=-1.);
66   void DoAnalysisESD();
67   void DoAnalysisAOD();
68   void FillHistograms();
69
70   void FillSystematicCutHist(AliESDtrack *track);
71
72   //Setters
73   void SetDataType(DataType d)             {fDataType = d;}
74   void SetIsPbPb(Bool_t cs)                {fIsPbPb = cs;}
75   void SetCentralityClass(int cent)        {fCentClass=cent;}
76   void SetCuts(AliESDtrackCuts* trackCuts) {fTrackCuts = trackCuts;}
77   void SetCutsITSLoose(AliESDtrackCuts* trackCuts) {fTrackCutsITSLoose = trackCuts;}
78   void SetCutsTPConly(AliESDtrackCuts* trackCuts) {fTrackCutsTPConly = trackCuts;}
79   void SetTrackType(Int_t trackType) {fTrackType = trackType;}
80   void SetFilterMask(UInt_t filterMask)    {fFilterMask = filterMask;}
81
82   void SetSigmaConstrainedMax(Double_t sigma) {fSigmaConstrainedMax=sigma;}
83   void SetPtMax(Float_t ptmax) {fPtMax = ptmax;}
84   void SetPtBinEdges(Int_t region, Double_t ptmax, Double_t ptBinWidth);
85   void SetNVariables(Int_t nv) {fNVariables = nv;}
86
87   Float_t GetPtMax()           {return fPtMax;}
88   Float_t GetTPCClusterInfo(AliAODTrack *tr,Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159) const;
89   Int_t   GetTrackLengthTPC(AliESDtrack *track);
90
91   static AliGenPythiaEventHeader*  GetPythiaEventHeader(AliMCEvent *mcEvent);
92   static Bool_t PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials);// get the cross section and the trails either from pyxsec.root or from pysec_hists.root
93
94  protected:
95
96  private:
97   AliPWG4HighPtTrackQA(const AliPWG4HighPtTrackQA&);
98   AliPWG4HighPtTrackQA& operator=(const AliPWG4HighPtTrackQA&);
99
100   DataType fDataType;             //! kESD or kAOD
101
102   AliVEvent   *fEvent;            //! AliVEvent object
103   AliESDEvent *fESD;              //! ESD object
104   const AliESDVertex   *fVtx;     //! vertex object
105
106   AliESDtrackCuts *fTrackCuts;         // TrackCuts
107   AliESDtrackCuts *fTrackCutsITSLoose; // Loose ITS track cuts
108   AliESDtrackCuts *fTrackCutsTPConly;  // TPC track cuts
109   Int_t   fTrackType;                  // 0: global track; 1:TPConly track 2: TPConly constrained track 3: global ITSrefit 4: TPConly constrained track with QA selection based on global track
110   UInt_t fFilterMask;                  //! Select tracks from specific track cuts belonging to certain filter mask for AOD analysis
111
112   Double_t fSigmaConstrainedMax;  // max sigma on constrained fit
113   Float_t fPtMax;                 // Maximum pT for histograms
114   Float_t fPtBinEdges[3][2];      // 3 regions total with different binning for pT axis of histos
115
116   Bool_t   fIsPbPb;               // kTRUE if PbPb
117   Int_t fCentClass;               // Select only events from predefined centrality class
118
119   /*
120   0: pt
121   1: phi
122   2: eta
123   3: dca2D
124   4: dcaZ 
125   5: nClustersTPC
126   6: nPointITS   
127   7: chi2C       
128   8: nSigmaToVertex
129   9: relUncertainty1Pt
130   10: chi2PerClusterTPC
131   11: #crossed rows
132   12: (#crossed rows)/(#findable clusters)
133   */
134   Int_t fNVariables;             // Number of variables
135   TArrayF *fVariables;           // QA variables
136
137   Float_t fAvgTrials;             // Average number of trials
138   
139   TH1F *fNEventAll;                            //! Event counter
140   TH1F *fNEventSel;                            //! Event counter
141   TH1F *fNEventReject;                         //! Book keeping of reason of rejecting events
142  
143   TH1F *fh1Centrality;                         //! Centrality
144
145   TProfile*     fh1Xsec;                       //! pythia cross section and trials
146   TH1F*         fh1Trials;                     //! trials which are added
147   TH1F*         fh1PtHard;                     //! pt hard of the event
148   TH1F*         fh1PtHardTrials;               //! pt hard of the event
149
150   TH1F *fh1NTracksAll;                         //! All tracks
151   TH1F *fh1NTracksReject;                      //! Reason why track was rejected
152   TH1F *fh1NTracksSel;                         //! Number of accepted tracks
153
154   TH1F *fPtAll;                                //! Pt spectrum all charged particles
155   TH1F *fPtSel;                                //! Pt spectrum all selected charged particles by fTrackCuts
156   TH2F *fPtPhi;                                //! Pt vs Phi
157   TH2F *fPtEta;                                //! Pt vs Eta
158   TH2F *fPtDCA2D;                              //! Pt vs DCA2D
159   TH2F *fPtDCAZ;                               //! Pt vs DCAZ
160   TH2F *fPtNClustersTPC;                       //! Pt vs nClustersTPC
161   TH2F *fPtNPointITS;                          //! Pt vs nPointITS
162   TH2F *fPtChi2C;                              //! Pt vs Chi2C
163   TH2F *fPtNSigmaToVertex;                     //! Pt vs nSigmaToVertex
164   TH2F *fPtRelUncertainty1Pt;                  //! Pt vs relUncertainty1Pt
165   TH3F *fPtRelUncertainty1PtNClus;             //! Pt vs relUncertainty1Pt vs NClustersTPC
166   TH3F *fPtRelUncertainty1PtChi2;              //! Pt vs relUncertainty1Pt vs Chi2TPC/NClus
167   TH3F *fPtRelUncertainty1PtTrkLength;         //! Pt vs relUncertainty1Pt vs track length in TPC
168   TH2F *fPtUncertainty1Pt;                     //! Pt vs Uncertainty1Pt
169   TH2F *fPtChi2PerClusterTPC;                  //! Pt vs Chi2PerClusterTPC
170   TH2F *fPtNCrossedRows;                       //! Pt vs NCrossedRows
171   TH2F *fPtNCrossedRowsNClusF;                 //! Pt vs NCrossedRows/NClusF
172   TH3F *fPtNCrRNCrRNClusF;                     //! Pt vs NCrossedRows vs NCrossedRows/NClusF 
173
174   //histos for covariance matrix elements
175   TH2F *fPtSigmaY2;                            //! 1/Pt vs sigma(y) extCov[0]
176   TH2F *fPtSigmaZ2;                            //! 1/Pt vs sigma(z) extCov[2]
177   TH2F *fPtSigmaSnp2;                          //! 1/Pt vs sigma(Snp) extCov[5]
178   TH2F *fPtSigmaTgl2;                          //! 1/Pt vs sigma(Tgl) extCov[9]
179   TH2F *fPtSigma1Pt2;                          //! 1/Pt vs sigma(1/pT) extCov[14]
180
181   //profiles for covariance matrix elements
182   TProfile *fProfPtSigmaY2;                    //! 1/Pt vs sigma(y) extCov[0]
183   TProfile *fProfPtSigmaZ2;                    //! 1/Pt vs sigma(z) extCov[2]
184   TProfile *fProfPtSigmaSnp2;                  //! 1/Pt vs sigma(Snp) extCov[5]
185   TProfile *fProfPtSigmaTgl2;                  //! 1/Pt vs sigma(Tgl) extCov[9]
186   TProfile *fProfPtSigma1Pt2;                  //! 1/Pt vs sigma(1/pT) extCov[14]
187
188   TProfile *fProfPtSigma1Pt;                   //! pT vs sigma(1/Pt)
189   TProfile *fProfPtPtSigma1Pt;                 //! pT vs pT*sigma(1/Pt)
190
191   TH1F *fSystTrackCuts;                        //! Bookkeeping for track cuts
192
193   TList *fHistList; //! List of Histograms
194   
195  
196   ClassDef(AliPWG4HighPtTrackQA,1) 
197   
198 };
199 #endif