1 #ifndef ALIDNDPTCORRECTION_H
2 #define ALIDNDPTCORRECTION_H
4 //------------------------------------------------------------------------------
5 // AlidNdPtCorrection class to correct and
6 // normalised dNdPt spectra.
8 // Author: J.Otwinowski 04/11/2008
9 //------------------------------------------------------------------------------
19 class AliESDtrackCuts;
20 class AliVertexerTracks;
23 class AliESDfriendTrack;
25 class AlidNdPtEventCuts;
26 class AlidNdPtAcceptanceCuts;
27 class AlidNdPtCorrection;
33 class AlidNdPtCorrection : public AlidNdPt {
36 AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName="ala.root");
37 ~AlidNdPtCorrection();
43 virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
45 // Merge output objects (needed by PROOF)
46 virtual Long64_t Merge(TCollection* const list);
48 // Analyse output histograms
49 virtual void Analyse();
51 // Export objects to folder
52 virtual TFolder *ExportToFolder(TObjArray * const array=0);
54 // Get analysis folder
55 TFolder* GetCorrectionFolder() const {return fCorrectionFolder;}
57 // Create folder for analysed histograms
58 TFolder *CreateFolder(TString folder = "folderdNdPtCorrection",TString title = "Analysed dNdPt 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;
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;
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;};
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;};
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];}
88 THnSparseF *GetPtvsPt(Int_t i) const {return fPtvsPt[i];}
91 void SetEventMultCorrelationMatrix(THnSparseF *const matrix=0) {fEventMultCorrelationMatrix = matrix;}
92 THnSparseF *GetEventMultCorrelationMatrix() const {return fEventMultCorrelationMatrix;}
95 void SetZvNorm(TH1D *const matrix=0) {fZvNorm = matrix;}
96 TH1D *GetZvNorm() const {return fZvNorm;}
98 void SetZvEmptyEventsNorm(TH1D *const matrix=0) {fZvEmptyEventsNorm = matrix;}
99 TH1D *GetZvEmptyEventsNorm() const {return fZvEmptyEventsNorm;}
102 void SetCorrEventMatrix(THnSparseF *const matrix=0) {fCorrEventMatrix = matrix;}
103 THnSparseF *GetCorrEventMatrix() const {return fCorrEventMatrix;}
105 void SetCorrTriggerMBtoInelEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelEventMatrix = matrix;}
106 THnSparseF *GetCorrTriggerMBtoInelEventMatrix() const {return fCorrTriggerMBtoInelEventMatrix;}
108 void SetCorrTriggerMBtoNDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDEventMatrix = matrix;}
109 THnSparseF *GetCorrTriggerMBtoNDEventMatrix() const {return fCorrTriggerMBtoNDEventMatrix;}
111 void SetCorrTriggerMBtoNSDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDEventMatrix = matrix;}
112 THnSparseF *GetCorrTriggerMBtoNSDEventMatrix() const {return fCorrTriggerMBtoNSDEventMatrix;}
115 void SetCorrTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTrackEventMatrix = matrix;}
116 THnSparseF *GetCorrTrackEventMatrix() const {return fCorrTrackEventMatrix;}
118 void SetCorrTriggerMBtoInelTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelTrackEventMatrix = matrix;}
119 THnSparseF *GetCorrTriggerMBtoInelTrackEventMatrix() const {return fCorrTriggerMBtoInelTrackEventMatrix;}
121 void SetCorrTriggerMBtoNDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDTrackEventMatrix = matrix;}
122 THnSparseF *GetCorrTriggerMBtoNDTrackEventMatrix() const {return fCorrTriggerMBtoNDTrackEventMatrix;}
124 void SetCorrTriggerMBtoNSDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDTrackEventMatrix = matrix;}
125 THnSparseF *GetCorrTriggerMBtoNSDTrackEventMatrix() const {return fCorrTriggerMBtoNSDTrackEventMatrix;}
127 void SetCorrTrackMatrix(THnSparseF *const matrix=0) {fCorrTrackMatrix = matrix;}
128 THnSparseF *GetCorrTrackMatrix() const {return fCorrTrackMatrix;}
130 void SetContTrackMatrix(THnSparseF *const matrix=0) {fContTrackMatrix = matrix;}
131 THnSparseF *GetContTrackMatrix() const {return fContTrackMatrix;}
133 void SetContMultTrackMatrix(THnSparseF *const matrix=0) {fContMultTrackMatrix = matrix;}
134 THnSparseF *GetContMultTrackMatrix() const {return fContMultTrackMatrix;}
136 void SetCorrMatrixFileName(TString name="") { fCorrMatrixFileName = name; }
138 Int_t GetTrueMult(THnSparse *const hist=0, Int_t mult=0) const;
143 TFolder *fCorrectionFolder; // folder for analysed histograms
148 THnSparseF *fMCEventHist1; //-> mcXv:mcYv:mcZv
149 THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv
152 THnSparseF *fMCAllEventMultHist1; //-> mcZv:multiplicity
155 THnSparseF *fMCAllNDEventMultHist1; //-> mcZv:multiplicity
158 THnSparseF *fMCAllNSDEventMultHist1; //-> mcZv:multiplicity
160 // MC triggered events
161 THnSparseF *fMCTriggerMultHist1; //-> mcZv:multiplicity
163 // MC triggered and event vertex
164 THnSparseF *fMCEventMultHist1; //-> mcZv:multiplicity
170 // all mc primary tracks in acceptance (INEL)
171 THnSparseF *fMCAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
173 // all mc primary tracks in acceptance (ND events)
174 THnSparseF *fMCNDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
176 // all mc primary tracks in acceptance (NSD events)
177 THnSparseF *fMCNSDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
179 //all mc primary tracks in acceptance (triggered events)
180 THnSparseF *fMCTriggerPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
182 //mc primary tracks in acceptance (triggered and event vertex reconstructed)
183 THnSparseF *fMCEventPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
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
192 // corrected track histograms
193 // ([0]-not corrected,
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
203 // pt vs pt to get proper pt bin (center of gravity)
204 THnSparseF *fPtvsPt[8]; //-> pt:pt
206 // corrected event histograms
207 // [0]-not corrected,
209 // [2]=[1]+trigger MBtoInel,
210 // [3]=[1]+trigger MBtoND,
211 // [4]=[1]+trigger MBtoNSD
212 THnSparseF *fCorrRecEventHist1[5]; //-> mcZv:multMB
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
225 // correction matrices (histograms)
229 // event rec. track vs true track multiplicity correlation matrix
230 THnSparseF *fEventMultCorrelationMatrix; //-> mult:mult_true_tracks
232 // histograms needed for empty events corrections
233 TH1D *fZvNorm; //-> normalised reconstructed zv distribution
234 TH1D *fZvEmptyEventsNorm; //-> trigger/trigger+vertex empty event correction
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)
241 // event vertex corrections
242 THnSparseF *fCorrEventMatrix; //-> mcVz:mcPt:mcEta (fRecEventMatrix/fTriggerEventMatrix)
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)
249 // track-event vertex corrections
250 THnSparseF *fCorrTrackEventMatrix; //-> mcVz:mcPt:mcEta (fRecTrackEventMatrix/fTriggerTrackEventMatrix)
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)
257 TString fCorrMatrixFileName; // file with efficiency correction matrices
259 // deta, dphi, pt1 for cosmics
260 THnSparseF *fCosmicsHisto; //-> deta:dphi:pt
262 AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
263 AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
265 ClassDef(AlidNdPtCorrection,1);