]>
Commit | Line | Data |
---|---|---|
80977d68 | 1 | #ifndef ALIV0READER_H |
2 | #define ALIV0READER_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | ||
7 | // --- ROOT system --- | |
8 | #include "TObject.h" | |
9 | #include "TChain.h" | |
10 | #include "AliESDv0.h" | |
11 | #include "AliESDVertex.h" | |
12 | #include "AliESDInputHandler.h" | |
13 | #include "AliMCEventHandler.h" | |
14 | #include "AliESDEvent.h" | |
15 | #include "AliESDtrack.h" | |
16 | #include "AliKFParticle.h" | |
17 | #include "TParticle.h" | |
18 | #include "AliStack.h" | |
19 | #include "AliGammaConversionHistograms.h" | |
20 | #include <vector> | |
21 | ||
22 | class TClonesArray ; | |
23 | class TFormula ; | |
24 | class TParticle ; | |
25 | class Riostream ; | |
26 | class TChain; | |
27 | //--- AliRoot system --- | |
28 | ||
29 | class AliStack ; | |
30 | class AliESDEvent ; | |
31 | class AliMCEventHandler; | |
32 | class AliLog ; | |
33 | ||
34 | class AliV0Reader : public TObject { | |
35 | ||
36 | public: | |
37 | ||
38 | AliV0Reader(); //constructor | |
39 | AliV0Reader(const AliV0Reader & g); //copy constructor | |
40 | AliV0Reader & operator = (const AliV0Reader & g); //assignment operator | |
41 | virtual ~AliV0Reader() {;} //virtual destructor | |
42 | /* | |
43 | *Initialize the reader | |
44 | */ | |
45 | void Initialize(); | |
46 | ||
47 | /* | |
48 | *Returns the number of v0s in the event, no cuts applied. | |
49 | */ | |
50 | Int_t GetNumberOfV0s(){return fESDEvent->GetNumberOfV0s();} | |
51 | ||
52 | /* | |
53 | * Check if there are any more good v0s left in the v0 stack | |
54 | * if so, fCurrent v0 is set to this v0 and can be retrieved | |
55 | * by GetCurrentV0 function. | |
56 | * returns kFALSE if there is no more good v0s in the v0 stack | |
57 | */ | |
58 | Bool_t NextV0(); | |
59 | ||
60 | /* | |
61 | * Returns the v0 at the given index, no checks are done on the v0. | |
62 | */ | |
63 | AliESDv0* GetV0(Int_t index); | |
64 | ||
65 | /* | |
66 | * Returns the current v0 | |
67 | */ | |
68 | AliESDv0* GetCurrentV0(){return fCurrentV0;} | |
69 | ||
70 | /* | |
71 | * Returns the negative ESD track which belongs to fCurrentV0 | |
72 | */ | |
73 | AliESDtrack* GetNegativeESDTrack(){return fESDEvent->GetTrack(fCurrentV0->GetNindex());} | |
74 | ||
75 | /* | |
76 | * Returns the positive ESD track which belongs to fCurrentV0 | |
77 | */ | |
78 | AliESDtrack* GetPositiveESDTrack(){return fESDEvent->GetTrack(fCurrentV0->GetPindex());} | |
79 | ||
80 | /* | |
81 | * Returns the negative KF particle which belongs to fCurrentV0 | |
82 | */ | |
83 | AliKFParticle* GetNegativeKFParticle(); | |
84 | ||
85 | /* | |
86 | * Returns the positive KF particle which belongs to fCurrentV0 | |
87 | */ | |
88 | AliKFParticle* GetPositiveKFParticle(); | |
89 | /* | |
90 | * Returns the KFParticle object of the 2 tracks. | |
91 | */ | |
92 | AliKFParticle* GetMotherCandidateKFCombination(); | |
93 | /* | |
94 | * Checks the probablity that the PID of the particle is what we want it to be. | |
95 | */ | |
96 | Bool_t CheckPIDProbability(Double_t negProbCut, Double_t posProbCut); | |
97 | ||
98 | /* | |
99 | *Get the negative MC TParticle from the stack | |
100 | */ | |
101 | TParticle * GetNegativeMCParticle(){return fNegativeMCParticle;}//fMCStack->Particle(TMath::Abs(fESDEvent->GetTrack(fCurrentV0->GetNindex())->GetLabel()));} | |
102 | ||
103 | /* | |
104 | *Get the positive MC TParticle from the stack | |
105 | */ | |
106 | TParticle * GetPositiveMCParticle(){return fPositiveMCParticle;}//{return fMCStack->Particle(TMath::Abs(fESDEvent->GetTrack(fCurrentV0->GetPindex())->GetLabel()));} | |
107 | ||
108 | /* | |
109 | *Get the mother MC TParticle from the stack | |
110 | */ | |
111 | TParticle * GetMotherMCParticle(){return fMotherMCParticle;} | |
112 | ||
113 | Bool_t HasSameMCMother(); | |
114 | ||
115 | /* | |
116 | *Get the MC stack | |
117 | */ | |
118 | AliStack* GetMCStack(){return fMCStack;} | |
119 | ||
120 | /* | |
121 | *Get the magnetic field from the ESD event | |
122 | */ | |
123 | Double_t GetMagneticField(){return fESDEvent->GetMagneticField();} | |
124 | ||
125 | /* | |
126 | *Get the primary vertex from the esd event | |
127 | */ | |
128 | const AliESDVertex *GetPrimaryVertex() const {return fESDEvent->GetPrimaryVertex();} | |
129 | ||
130 | /* | |
131 | * Set the PID of the negative track | |
132 | */ | |
133 | void SetNegativeTrackPID(Int_t negTrackPID){fNegativeTrackPID=negTrackPID;} | |
134 | ||
135 | /* | |
136 | * Set the PID of the positive track | |
137 | */ | |
138 | void SetPositiveTrackPID(Int_t posTrackPID){fPositiveTrackPID=posTrackPID;} | |
139 | ||
140 | /* | |
141 | * Set the flag to use the kfparticle class. Will also disable the use of esd tracks | |
142 | */ | |
143 | void UseKFParticle(){fUseKFParticle = kTRUE; fUseESDTrack = kFALSE;} | |
144 | ||
145 | /* | |
146 | * Set the flag to use the esd track class. Will also disable the use of kf particles | |
147 | */ | |
148 | void UseESDTrack(){fUseESDTrack = kTRUE; fUseKFParticle = kFALSE;} | |
149 | ||
150 | /* | |
151 | * Set the flag to use improved vertex or not | |
152 | */ | |
153 | void SetUseImprovedVertex(Bool_t useImprovedVertex){fUseImprovedVertex=useImprovedVertex;} | |
154 | ||
155 | /* | |
156 | * Return the number in the species array belonging to the negative or positive track pid. | |
157 | */ | |
158 | Int_t GetSpeciesIndex(Int_t chargeOfTrack); | |
159 | ||
160 | /* | |
161 | * Return the x coordinate of the v0 | |
162 | */ | |
163 | Double_t GetX(){return fCurrentXValue;} | |
164 | ||
165 | /* | |
166 | * Return the y coordinate of the v0 | |
167 | */ | |
168 | Double_t GetY(){return fCurrentYValue;} | |
169 | ||
170 | /* | |
171 | * Return the Z coordinate of the v0 | |
172 | */ | |
173 | Double_t GetZ(){return fCurrentZValue;} | |
174 | ||
175 | /* | |
176 | * Return the radius of the v0 | |
177 | */ | |
178 | Double_t GetXYRadius(){return sqrt((Double_t)(fCurrentXValue*fCurrentXValue + fCurrentYValue*fCurrentYValue));} | |
179 | ||
180 | /* | |
181 | * Get the opening angle between the two tracks | |
182 | */ | |
183 | Double_t GetOpeningAngle(){return fNegativeTrackLorentzVector->Angle(fPositiveTrackLorentzVector->Vect());} | |
184 | ||
185 | Double_t GetNegativeTrackEnergy(){return fCurrentNegativeKFParticle->E();} | |
186 | Double_t GetPositiveTrackEnergy(){return fCurrentPositiveKFParticle->E();} | |
187 | Double_t GetMotherCandidateEnergy(){return fCurrentMotherKFCandidate->E();} | |
188 | ||
189 | Double_t GetNegativeTrackPt(){return fNegativeTrackLorentzVector->Pt();} | |
190 | Double_t GetPositiveTrackPt(){return fPositiveTrackLorentzVector->Pt();} | |
191 | Double_t GetMotherCandidatePt(){return fMotherCandidateLorentzVector->Pt();} | |
192 | ||
193 | Double_t GetNegativeTrackEta(){return fNegativeTrackLorentzVector->Eta();} | |
194 | Double_t GetPositiveTrackEta(){return fPositiveTrackLorentzVector->Eta();} | |
195 | Double_t GetMotherCandidateEta(){return fMotherCandidateLorentzVector->Eta();} | |
196 | ||
197 | Double_t GetMotherCandidateNDF(){return fCurrentMotherKFCandidate->GetNDF();} | |
198 | Double_t GetMotherCandidateChi2(){return fCurrentMotherKFCandidate->GetChi2();} | |
199 | Double_t GetMotherCandidateMass(){return fMotherCandidateKFMass;} | |
200 | Double_t GetMotherCandidateWidth(){return fMotherCandidateKFWidth;} | |
201 | ||
202 | Double_t GetNegativeTrackPhi(); | |
203 | Double_t GetPositiveTrackPhi(); | |
204 | Double_t GetMotherCandidatePhi(); | |
205 | ||
206 | void UpdateEventByEventData(); | |
207 | ||
208 | Double_t GetMaxRCut(){return fMaxR;} | |
209 | Double_t GetEtaCut(){return fEtaCut;} | |
210 | Double_t GetPtCut(){return fPtCut;} | |
211 | Double_t GetChi2Cut(){return fChi2Cut;} | |
212 | ||
213 | void SetMaxRCut(Double_t maxR){fMaxR=maxR;} | |
214 | void SetEtaCut(Double_t etaCut){fEtaCut=etaCut;} | |
215 | void SetPtCut(Double_t ptCut){fPtCut=ptCut;} | |
216 | void SetChi2Cut(Double_t chi2){fChi2Cut=chi2;} | |
217 | ||
218 | void SetXVertexCut(Double_t xVtx){fCurrentXValue=xVtx;} | |
219 | void SetYVertexCut(Double_t yVtx){fCurrentYValue=yVtx;} | |
220 | void SetZVertexCut(Double_t zVtx){fCurrentZValue=zVtx;} | |
221 | void SetPIDProbability(Double_t pidProb){fPIDProbabilityCutPositiveParticle=pidProb; fPIDProbabilityCutNegativeParticle=pidProb;} | |
222 | void SetPIDProbabilityNegativeParticle(Double_t pidProb){fPIDProbabilityCutNegativeParticle=pidProb;} | |
223 | void SetPIDProbabilityPositiveParticle(Double_t pidProb){fPIDProbabilityCutPositiveParticle=pidProb;} | |
224 | void SetSigmaMass(Double_t sigmaMass){fNSigmaMass=sigmaMass;} | |
225 | void UpdateV0Information(); | |
226 | ||
227 | void SetHistograms(AliGammaConversionHistograms *histograms){fHistograms=histograms;} | |
228 | ||
229 | std::vector<AliKFParticle> fCurrentEventGoodV0s; | |
230 | std::vector<AliKFParticle> fPreviousEventGoodV0s; | |
231 | ||
232 | private: | |
233 | AliStack * fMCStack; // pointer to MonteCarlo particle stack | |
234 | AliMCEventHandler* fMCTruth; // pointer to the MC event handler | |
235 | TChain * fChain; // pointer to the TChain | |
236 | ||
237 | AliESDInputHandler* fESDHandler; //! pointer to esd object | |
238 | AliESDEvent *fESDEvent; //! pointer to esd object | |
239 | ||
240 | AliGammaConversionHistograms *fHistograms; | |
241 | ||
242 | Int_t fCurrentV0IndexNumber; | |
243 | AliESDv0 * fCurrentV0; //! pointer to the current v0 | |
244 | AliKFParticle * fCurrentNegativeKFParticle; //! pointer to the negative KF particle | |
245 | AliKFParticle * fCurrentPositiveKFParticle; //! pointer to the positive KF particle | |
246 | AliKFParticle * fCurrentMotherKFCandidate; //! pointer to the positive KF particle | |
247 | ||
248 | AliESDtrack * fCurrentNegativeESDTrack; //! pointer to the negative ESD track | |
249 | AliESDtrack * fCurrentPositiveESDTrack; //! pointer to the positive ESD track | |
250 | ||
251 | TLorentzVector * fNegativeTrackLorentzVector; //! pointer to the negative Track Lorentz Vector | |
252 | TLorentzVector * fPositiveTrackLorentzVector; //! pointer to the positive Track Lorentz Vector | |
253 | TLorentzVector * fMotherCandidateLorentzVector; //! pointer to the mother candidate Track Lorentz Vector | |
254 | ||
255 | Double_t fCurrentXValue; | |
256 | Double_t fCurrentYValue; | |
257 | Double_t fCurrentZValue; | |
258 | ||
259 | Int_t fPositiveTrackPID; | |
260 | Int_t fNegativeTrackPID; | |
261 | ||
262 | TParticle *fNegativeMCParticle; //! | |
263 | TParticle *fPositiveMCParticle; //! | |
264 | TParticle *fMotherMCParticle; //! | |
265 | ||
266 | Double_t fMotherCandidateKFMass; | |
267 | Double_t fMotherCandidateKFWidth; | |
268 | ||
269 | Bool_t fUseKFParticle; | |
270 | Bool_t fUseESDTrack; | |
271 | Bool_t fDoMC; | |
272 | ||
273 | //cuts | |
274 | Double_t fMaxR; | |
275 | Double_t fEtaCut; | |
276 | Double_t fPtCut; | |
277 | Double_t fChi2Cut; | |
278 | Double_t fPIDProbabilityCutNegativeParticle; | |
279 | Double_t fPIDProbabilityCutPositiveParticle; | |
280 | Double_t fXVertexCut; | |
281 | Double_t fYVertexCut; | |
282 | Double_t fZVertexCut; | |
283 | ||
284 | Double_t fNSigmaMass; | |
285 | ||
286 | Bool_t fUseImprovedVertex; | |
287 | ||
288 | ClassDef(AliV0Reader,0) | |
289 | }; | |
290 | ||
291 | ||
292 | #endif | |
293 | ||
294 | ||
295 |