Possibility to keep only D mesons that have a c or b quark as a grandmother (Francesc...
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEdca.h
1 #ifndef ALIHFEDCA_H
2 #define ALIHFEDCA_H
3
4 /**************************************************************************
5 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 *                                                                        *
7 * Author: The ALICE Off-line Project.                                    *
8 * Contributors are mentioned in the code where appropriate.              *
9 *                                                                        *
10 * Permission to use, copy, modify and distribute this software and its   *
11 * documentation strictly for non-commercial purposes is hereby granted   *
12 * without fee, provided that the above copyright notice appears in all   *
13 * copies and that both the copyright notice and this permission notice   *
14 * appear in the supporting documentation. The authors make no claims     *
15 * about the suitability of this software for any purpose. It is          *
16 * provided "as is" without express or implied warranty.                  *
17 **************************************************************************/
18
19 /* $Id$ */ 
20
21 //
22 // Class for checking impact parameter (DCA) study 
23 // + study DCA in rphi (xy) and z
24 // + resolution and pull
25 // + handle both MC and data 
26 // + add plugin for primary vertex 
27 //
28
29 #ifndef ROOT_TObject
30 #include <TObject.h>
31 #endif
32
33 class TChain;
34 class TTree;
35 class TFile;
36
37 class TString;
38 class TList;
39
40 class TObjArray;
41 class AliStack;
42 class AliMCEvent;
43 class AliMCVertex;
44
45 class AliESDEvent;
46 class AliESDtrack;
47 class AliESDVertex;
48
49 class AliHFEdca : public TObject{
50
51  public:  
52   enum{
53     kPDGelectron = 11,
54     kPDGmuon = 13,
55     kPDGpion = 211,
56     kPDGkaon = 321,
57     kPDGproton = 2212
58   };
59  
60   enum{
61     kNParticles = 12,
62     kNPtBins = 50,   
63     kNDcaVar = 2, 
64     kNVertexVar = 3,  
65     kNPullVar = 2
66   };
67
68   AliHFEdca(); // default constructor
69   AliHFEdca(const AliHFEdca &ref); // copy constructor
70   AliHFEdca &operator=(const AliHFEdca &ref); // assignment operator
71   virtual ~AliHFEdca(); // destructor
72
73   void Initialize();
74   void CreateHistogramsPull(TList *pullList);  
75   void CreateHistogramsResidual(TList *residualList);  
76   void CreateHistogramsDca(TList *dcaList);  
77
78   void CreateHistogramsKfDca(TList *kfDcaList);  
79
80   void CreateHistogramsDataDca(TList *dataDcaList);  
81   void CreateHistogramsDataPull(TList *dataPullList);  
82
83   void CreateHistogramsVertex(TList *vertexList);  
84   void CreateHistogramsDataVertex(TList *vertexList);  
85
86   void CreateHistogramsPid(TList *pidList);
87   void CreateHistogramsDataPid(TList *pidList);
88
89   void CreateHistogramsHfeDca(TList *hfeDcaList);
90   void CreateHistogramsHfeDataDca(TList *hfeDataDcaList);
91
92   
93   void InitAnalysis();  
94   void FillHistogramsDca(AliESDEvent *esdEvent,  AliESDtrack *track,  AliMCEvent *mcEvent);
95   void FillHistogramsVtx(AliESDEvent *esdEvent,  AliMCEvent *mcEvent);
96   void FillHistogramsPid(AliESDtrack *track, const  AliMCEvent *mcEvent);
97
98   void FillHistogramsKfDca(AliESDEvent *esdEvent,  AliESDtrack *track,  const AliMCEvent *mcEvent);
99
100   void FillHistogramsDataDca(AliESDEvent *esdEvent,  AliESDtrack *track, AliESDVertex *vtxESDSkip);
101   void FillHistogramsDataVtx(AliESDEvent *esdEvent);
102   void FillHistogramsDataPid(AliESDtrack *track);
103
104   void FillHistogramsHfeDca(AliESDEvent *esdEvent,  AliESDtrack *track,  AliMCEvent *mcEvent);
105   void FillHistogramsHfeDataDca(AliESDEvent *esdEvent,AliESDtrack *track,AliESDVertex *vtxESDSkip);
106
107
108   void ApplyExtraCuts(AliESDEvent * const esdEvent, Int_t nMinPrimVtxContributor);
109
110   void PostAnalysis() const;
111
112   Int_t GetCombinedPid(AliESDtrack *track);
113
114  private:   
115
116
117   static const Char_t* fgkParticles[kNParticles];  // particle names
118   static const Int_t fgkPdgParticle[kNParticles-2]; // identified particle's name
119   static const Int_t fgkColorPart[kNParticles]; // colors for particles
120
121   static const Float_t fgkPtIntv[kNPtBins+1];  // pt intervals
122
123   static const Char_t* fgkDcaVar[kNDcaVar];  // dca variables
124   static const Char_t* fgkDcaVarTitle[kNDcaVar]; // titles for dca variables
125
126   static const Char_t* fgkVertexVar[kNVertexVar];  // dca variables
127   static const Char_t* fgkVertexVarTitle[kNVertexVar]; // titles for dca variables
128
129   static const Char_t* fgkResDcaVar[kNDcaVar];  // dca variables
130   static const Char_t* fgkResDcaVarTitle[kNDcaVar]; // titles for dca variables
131
132   static const Char_t* fgkPullDcaVar[kNPullVar];  // pull variables
133   static const Char_t* fgkPullDcaVarTitle[kNPullVar]; // titles for pull variables
134   static const Char_t* fgkPullDataDcaVarTitle[kNPullVar]; // titles for pull variables
135
136   TH1F* fHistDcaXYRes[kNParticles][kNPtBins];  //! residuals in XY
137   TH1F* fHistDcaZRes[kNParticles][kNPtBins];   //! residuals in Z
138
139   TH1F* fHistDcaXYPull[kNParticles][kNPtBins]; //! pulls XY
140   TH1F* fHistDcaZPull[kNParticles][kNPtBins];  //! pulls Z
141
142   TH1F* fHistDcaXY[kNParticles][kNPtBins]; //! dca XY
143   TH1F* fHistDcaZ[kNParticles][kNPtBins];  //! dca Z
144
145   TH1F* fHistEPDcaXYRes[kNParticles-2][kNPtBins];  //! residuals in XY with esd pid
146   TH1F* fHistEPDcaZRes[kNParticles-2][kNPtBins];   //! residuals in Z with esd pid
147
148   TH1F* fHistEPDcaXYPull[kNParticles-2][kNPtBins]; //! pulls XY with esd pid
149   TH1F* fHistEPDcaZPull[kNParticles-2][kNPtBins];  //! pulls Z with esd pid
150
151   TH1F* fHistEPDcaXY[kNParticles-2][kNPtBins]; //! dca XY with esd pid
152   TH1F* fHistEPDcaZ[kNParticles-2][kNPtBins];  //! dca Z with esd pid
153
154   TH1F* fHistKFDcaXY[kNParticles][kNPtBins]; //! KF dca XY
155   TH1F* fHistKFDcaZ[kNParticles][kNPtBins];  //! KF dca Z
156   
157   TH1F* fHistDataDcaXY[kNParticles][kNPtBins]; //! data dca XY
158   TH1F* fHistDataDcaZ[kNParticles][kNPtBins];  //! data dca Z
159   TH1F* fHistDataWoDcaXY[kNParticles][kNPtBins]; //! data dca XY w/o current trk
160   TH1F* fHistDataWoDcaZ[kNParticles][kNPtBins];  //! data dca Z w/o current trk
161
162   TH1F* fHistDataDcaXYPull[kNParticles][kNPtBins]; //! data pull dca XY
163   TH1F* fHistDataDcaZPull[kNParticles][kNPtBins];  //! data pull dca Z 
164   TH1F* fHistDataWoDcaXYPull[kNParticles][kNPtBins]; //! data pull dca XY w/o current trk
165   TH1F* fHistDataWoDcaZPull[kNParticles][kNPtBins];  //! data pull dca Z  w/o current trk
166
167   TH1F* fHistMCvertex[kNVertexVar];    //! vertex MC
168   TH1F* fHistESDvertex[kNVertexVar];   //! vertex ESD
169   TH1F* fHistDatavertex[kNVertexVar];  //! vertex Data
170   
171   TH1F* fHistMcPid[kNParticles];      //! MC pid pt spectra
172   TH1F* fHistEsdPid[kNParticles];     //! ESD pid pt spectra
173
174   TH1F *fHistDataEsdPid[kNParticles];    //! Data ESD pid
175
176   // HFE pid part
177   // MC
178   TH1F* fHistHPDcaXYRes[2][kNPtBins];  //! residuals in XY
179   TH1F* fHistHPDcaZRes[2][kNPtBins];   //! residuals in Z
180   TH1F* fHistHPDcaXYPull[2][kNPtBins]; //! pulls XY
181   TH1F* fHistHPDcaZPull[2][kNPtBins];  //! pulls Z
182   TH1F* fHistHPDcaXY[2][kNPtBins];     //! dca XY
183   TH1F* fHistHPDcaZ[2][kNPtBins];      //! dca Z
184
185   TH1F* fHistHfePid[2][2];             // ! HFE pid pt spectra only for electrons
186
187   // Data
188   TH1F* fHistHPDataDcaXY[2][kNPtBins];     //! data dca XY with HFE pid
189   TH1F* fHistHPDataDcaZ[2][kNPtBins];      //! data dca Z with HFE pid
190   TH1F* fHistHPDataDcaXYPull[2][kNPtBins]; //! data pull dca XY
191   TH1F* fHistHPDataDcaZPull[2][kNPtBins];  //! data pull dca Z 
192
193   TH1F *fHistDataHfePid[2];            //! Data HFE pid
194
195   TH1I* fStat;                         //! counting diff of dca calculated from HF particle and ESD
196   ClassDef(AliHFEdca, 1);
197 };
198
199 #endif