0d6f52975125f82bd5b1a5f95be1be67ea94b529
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtCorrection.h
1 #ifndef ALIDNDPTCORRECTION_H
2 #define ALIDNDPTCORRECTION_H
3
4 //------------------------------------------------------------------------------
5 // AlidNdPtCorrection class to correct and
6 // normalised dNdPt spectra. 
7 //
8 // Author: J.Otwinowski 04/11/2008 
9 //------------------------------------------------------------------------------
10
11 class iostream;
12 class TFile;
13 class TCint;
14 class TFolder;
15 class TObjArray;
16 class TString;
17 class THnSparse;
18
19 class AliESDtrackCuts;
20 class AliVertexerTracks;
21 class AliESD;
22 class AliESDfriend;
23 class AliESDfriendTrack;
24
25 class AlidNdPtEventCuts;
26 class AlidNdPtAcceptanceCuts;
27 class AlidNdPtCorrection;
28 class AlidNdPt;
29 class AlidNdPtHelper;
30
31 #include "AlidNdPt.h"
32
33 class AlidNdPtCorrection : public AlidNdPt {
34 public :
35   AlidNdPtCorrection(); 
36   AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName="ala.root");
37   ~AlidNdPtCorrection();
38
39   // Init data members
40   virtual void Init();
41
42   // Process events
43   virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
44
45   // Merge output objects (needed by PROOF) 
46   virtual Long64_t Merge(TCollection* const list);
47
48   // Analyse output histograms 
49   virtual void Analyse();
50
51   // Export objects to folder
52   virtual TFolder *ExportToFolder(TObjArray * const array=0);
53
54   // Get analysis folder
55   TFolder* GetCorrectionFolder() const {return fCorrectionFolder;}
56
57   // Create folder for analysed histograms
58   TFolder *CreateFolder(TString folder = "folderdNdPtCorrection",TString title = "Analysed dNdPt histograms");
59
60   // Fill histograms
61   void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t multRec) const;
62   void FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj, Int_t multRec) const;
63   void FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBRec) const;
64
65   // Get correction factors
66   Double_t GetCorrFactZvPtEta(THnSparse *const hist=0, Double_t zv =0, Double_t pt=0, Double_t eta=0) const;
67   Double_t GetContFactZvPtEta(THnSparse *const hist=0, Double_t zv =0, Double_t pt=0, Double_t eta=0) const;
68   Double_t GetCorrFactZvMult(THnSparse *const hist=0, Double_t zv =0, Int_t mult=0) const;
69   Double_t GetContFactZvMult(THnSparse *const hist=0, Double_t zv =0, Int_t mult=0) const;
70
71   // Getters
72   THnSparseF *GetMCAllEventMultHist1() const {return fMCAllEventMultHist1;}; 
73   THnSparseF *GetMCAllNDEventMultHist1() const {return fMCAllNDEventMultHist1;}; 
74   THnSparseF *GetMCAllNSDEventMultHist1() const {return fMCAllNSDEventMultHist1;}; 
75   THnSparseF *GetMCTriggerMultHist1() const {return fMCTriggerMultHist1;}; 
76   THnSparseF *GetMCEventMultHist1() const {return fMCEventMultHist1;}; 
77
78   THnSparseF *GetMCAllPrimTrackMultHist1() const {return fMCAllPrimTrackMultHist1;}; 
79   THnSparseF *GetMCNDEventAllPrimTrackMultHist1() const {return fMCNDEventAllPrimTrackMultHist1;}; 
80   THnSparseF *GetMCNSDEventAllPrimTrackMultHist1() const {return fMCNSDEventAllPrimTrackMultHist1;}; 
81   THnSparseF *GetMCTriggerPrimTrackMultHist1() const {return fMCTriggerPrimTrackMultHist1;}; 
82   THnSparseF *GetMCEventPrimTrackMultHist1() const {return fMCEventPrimTrackMultHist1;}; 
83
84   THnSparseF *GetCorrRecTrackMultHist1(Int_t i) const {return fCorrRecTrackMultHist1[i];}
85   THnSparseF *GetCorrRecEventHist1(Int_t i) const {return fCorrRecEventHist1[i];}
86   THnSparseF *GetCorrRecEventHist2(Int_t i) const {return fCorrRecEventHist2[i];}
87
88   THnSparseF *GetPtvsPt(Int_t i) const {return fPtvsPt[i];}
89
90   // correlation matrix
91   void SetEventMultCorrelationMatrix(THnSparseF *const matrix=0) {fEventMultCorrelationMatrix = matrix;}
92   THnSparseF *GetEventMultCorrelationMatrix() const {return fEventMultCorrelationMatrix;}
93
94   //
95   void SetZvNorm(TH1D *const matrix=0) {fZvNorm = matrix;}
96   TH1D *GetZvNorm() const {return fZvNorm;}
97
98   void SetZvEmptyEventsNorm(TH1D *const matrix=0) {fZvEmptyEventsNorm = matrix;}
99   TH1D *GetZvEmptyEventsNorm() const {return fZvEmptyEventsNorm;}
100
101   // 
102   void SetCorrEventMatrix(THnSparseF *const matrix=0) {fCorrEventMatrix = matrix;}
103   THnSparseF *GetCorrEventMatrix() const {return fCorrEventMatrix;}
104
105   void SetCorrTriggerMBtoInelEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelEventMatrix = matrix;}
106   THnSparseF *GetCorrTriggerMBtoInelEventMatrix() const {return fCorrTriggerMBtoInelEventMatrix;}
107
108   void SetCorrTriggerMBtoNDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDEventMatrix = matrix;}
109   THnSparseF *GetCorrTriggerMBtoNDEventMatrix() const {return fCorrTriggerMBtoNDEventMatrix;}
110
111   void SetCorrTriggerMBtoNSDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDEventMatrix = matrix;}
112   THnSparseF *GetCorrTriggerMBtoNSDEventMatrix() const {return fCorrTriggerMBtoNSDEventMatrix;}
113
114   // 
115   void SetCorrTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTrackEventMatrix = matrix;}
116   THnSparseF *GetCorrTrackEventMatrix() const {return fCorrTrackEventMatrix;}
117
118   void SetCorrTriggerMBtoInelTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelTrackEventMatrix = matrix;}
119   THnSparseF *GetCorrTriggerMBtoInelTrackEventMatrix() const {return fCorrTriggerMBtoInelTrackEventMatrix;}
120
121   void SetCorrTriggerMBtoNDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDTrackEventMatrix = matrix;}
122   THnSparseF *GetCorrTriggerMBtoNDTrackEventMatrix() const {return fCorrTriggerMBtoNDTrackEventMatrix;}
123
124   void SetCorrTriggerMBtoNSDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDTrackEventMatrix = matrix;}
125   THnSparseF *GetCorrTriggerMBtoNSDTrackEventMatrix() const {return fCorrTriggerMBtoNSDTrackEventMatrix;}
126
127   void SetCorrTrackMatrix(THnSparseF *const matrix=0) {fCorrTrackMatrix = matrix;}
128   THnSparseF *GetCorrTrackMatrix() const {return fCorrTrackMatrix;}
129
130   void SetContTrackMatrix(THnSparseF *const matrix=0) {fContTrackMatrix = matrix;}
131   THnSparseF *GetContTrackMatrix() const {return fContTrackMatrix;}
132
133   void SetContMultTrackMatrix(THnSparseF *const matrix=0) {fContMultTrackMatrix = matrix;}
134   THnSparseF *GetContMultTrackMatrix() const {return fContMultTrackMatrix;}
135
136   void SetCorrMatrixFileName(TString name="")    { fCorrMatrixFileName = name; }
137
138   Int_t GetTrueMult(THnSparse *const hist=0, Int_t mult=0) const;
139
140 private:
141
142   // analysis folder 
143   TFolder *fCorrectionFolder; // folder for analysed histograms
144
145   //
146   // event histograms
147   //
148   THnSparseF *fMCEventHist1;  //-> mcXv:mcYv:mcZv
149   THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv
150
151   // all MC events
152   THnSparseF *fMCAllEventMultHist1; //-> mcZv:multiplicity
153
154   // all ND MC events
155   THnSparseF *fMCAllNDEventMultHist1; //-> mcZv:multiplicity
156
157   // all NSD MC events
158   THnSparseF *fMCAllNSDEventMultHist1; //-> mcZv:multiplicity
159
160   // MC triggered events
161   THnSparseF *fMCTriggerMultHist1; //-> mcZv:multiplicity
162
163   // MC triggered and event vertex
164   THnSparseF *fMCEventMultHist1; //-> mcZv:multiplicity
165
166   //
167   // track histograms
168   //
169   
170   // all mc primary tracks in acceptance (INEL)
171   THnSparseF *fMCAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
172
173   // all mc primary tracks in acceptance (ND events)
174   THnSparseF *fMCNDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
175
176   // all mc primary tracks in acceptance (NSD events)
177   THnSparseF *fMCNSDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
178
179   //all mc primary tracks in acceptance (triggered events)
180   THnSparseF *fMCTriggerPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
181
182   //mc primary tracks in acceptance (triggered and event vertex reconstructed)
183   THnSparseF *fMCEventPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
184
185
186   // track histograms 
187   // [0]=all charged tracks, 
188   // [1]=[0]+fiducual volume, 
189   // [2]=[1]+after esd track cuts 
190   THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:Eta:Phi
191
192   // corrected track histograms 
193   // ([0]-not corrected,
194   // [1]=track cont.,
195   // [2]=[1]+track eff.,
196   // [3]=[2]+multple track,
197   // [4]=[3]+event vertex,
198   // [5]=[4]+trigger MBtoInel,
199   // [6]=[4]+trigger MBtoND, 
200   // [7]=[4]+trigger MBToNSD)
201   THnSparseF *fCorrRecTrackMultHist1[8]; //-> Pt:Eta:mult corrected histograms 
202
203   // pt vs pt to get proper pt bin (center of gravity)
204   THnSparseF *fPtvsPt[8]; //-> pt:pt 
205
206   // corrected event histograms
207   // [0]-not corrected, 
208   // [1]=event vertex, 
209   // [2]=[1]+trigger MBtoInel, 
210   // [3]=[1]+trigger MBtoND, 
211   // [4]=[1]+trigger MBtoNSD 
212   THnSparseF *fCorrRecEventHist1[5]; //-> mcZv:multMB 
213
214
215   // corrected event histograms (empty events)
216   // [0]=not corrected,
217   // [1]=trigger/trigger+vertex correction,
218   // [2]=[1]+trigger MBtoInel,
219   // [3]=[1]+trigger MBtoND,
220   // [4]=[1]+trigger MBtoNSD
221   THnSparseF *fCorrRecEventHist2[5]; //-> mcZv:multMB
222
223
224   // 
225   // correction matrices (histograms)
226   // must be loaded
227   //
228
229   // event rec. track vs true track multiplicity correlation matrix 
230   THnSparseF *fEventMultCorrelationMatrix; //-> mult:mult_true_tracks
231
232   // histograms needed for empty events corrections
233   TH1D *fZvNorm; //-> normalised reconstructed zv distribution
234   TH1D *fZvEmptyEventsNorm; //-> trigger/trigger+vertex empty event correction
235
236   // trigger bias corrections
237   THnSparseF *fCorrTriggerMBtoInelEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenEventMatrix)
238   THnSparseF *fCorrTriggerMBtoNDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNDEventMatrix)
239   THnSparseF *fCorrTriggerMBtoNSDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNSDEventMatrix)
240
241   // event vertex corrections
242   THnSparseF *fCorrEventMatrix;  //-> mcVz:mcPt:mcEta   (fRecEventMatrix/fTriggerEventMatrix)
243
244   // track-event trigger bias corrections
245   THnSparseF *fCorrTriggerMBtoInelTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventMatrix)
246   THnSparseF *fCorrTriggerMBtoNDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNDMatrix)
247   THnSparseF *fCorrTriggerMBtoNSDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNSDMatrix)
248
249   // track-event vertex corrections
250   THnSparseF *fCorrTrackEventMatrix;  //-> mcVz:mcPt:mcEta   (fRecTrackEventMatrix/fTriggerTrackEventMatrix)
251
252   // track-level corrections
253   THnSparseF *fCorrTrackMatrix;  //-> mcVz:mcPt:mcEta (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
254   THnSparseF *fContTrackMatrix;  //-> mcVz:mcPt:mcEta (fRecSecTrackMatrix / fRecTrackMatrix)
255   THnSparseF *fContMultTrackMatrix; //-> mcVz:mcPt:mcEta (fRecMultTrackMatrix / fRecTrackMatrix)
256   
257   TString fCorrMatrixFileName; // file with efficiency correction matrices
258
259   //  deta, dphi, pt1 for cosmics
260   THnSparseF *fCosmicsHisto; //-> deta:dphi:pt
261   
262   AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
263   AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
264
265   ClassDef(AlidNdPtCorrection,1);
266 };
267
268 #endif