]>
Commit | Line | Data |
---|---|---|
b594a020 | 1 | // $Id$ |
2 | // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 | |
3 | ||
4 | /************************************************************************** | |
5 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * | |
6 | * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * | |
7 | * full copyright notice. * | |
8 | **************************************************************************/ | |
9 | ||
b594a020 | 10 | #include "AliEveV0.h" |
11 | ||
b594a020 | 12 | #include <TEveTrackPropagator.h> |
13 | #include <TEveManager.h> | |
14 | ||
15 | #include <TPolyLine3D.h> | |
b594a020 | 16 | #include <TColor.h> |
17 | ||
d4dbbb43 | 18 | #include <TDatabasePDG.h> |
19 | #include <TParticlePDG.h> | |
20 | ||
b594a020 | 21 | #include <vector> |
22 | ||
ea47a1d6 | 23 | //______________________________________________________________________________ |
24 | // Representation of a reconstructed V0. | |
b594a020 | 25 | |
26 | ClassImp(AliEveV0) | |
27 | ||
e6e8b28b | 28 | //______________________________________________________________________________ |
b594a020 | 29 | AliEveV0::AliEveV0() : |
30 | TEvePointSet(), | |
31 | ||
32 | fRecBirthV(), | |
33 | fRecDecayV(), | |
34 | fRecDecayP(), | |
35 | fNegTrack(0), | |
36 | fPosTrack(0), | |
37 | fRnrStyle(0), | |
e6e8b28b | 38 | fPointingLine(0), |
b594a020 | 39 | fESDIndex(-1), |
ca8a6926 | 40 | fOnFlyStatus(kFALSE), |
b594a020 | 41 | fDaughterDCA(999), |
2c7d7ac0 | 42 | fChi2V0(-1), |
43 | fNegMaxProbPdg(0), | |
44 | fPosMaxProbPdg(0), | |
45 | fNegMaxProbPid(0), | |
46 | fPosMaxProbPid(0) | |
ca8a6926 | 47 | { |
48 | // Default constructor. | |
b594a020 | 49 | |
ca8a6926 | 50 | // Override from TEveElement. |
51 | fPickable = kTRUE; | |
e6e8b28b | 52 | fMainColorPtr = &fMarkerColor; |
ca8a6926 | 53 | } |
b594a020 | 54 | |
e6e8b28b | 55 | //______________________________________________________________________________ |
b594a020 | 56 | AliEveV0::AliEveV0(TEveRecTrack* tNeg, TEveRecTrack* tPos, |
57 | TEveRecV0* v0, TEveTrackPropagator* rs) : | |
58 | TEvePointSet(), | |
59 | ||
60 | fRecBirthV(v0->fV0Birth), | |
61 | fRecDecayV(v0->fVCa), | |
62 | fRecDecayP(v0->fPNeg + v0->fPPos), | |
63 | ||
0e33c639 | 64 | fNegTrack(new AliEveTrack(tNeg, rs)), |
65 | fPosTrack(new AliEveTrack(tPos, rs)), | |
b594a020 | 66 | |
67 | fRnrStyle(rs), | |
e6e8b28b | 68 | fPointingLine(new TEveLine("Pointing line")), |
b594a020 | 69 | fESDIndex(-1), |
ca8a6926 | 70 | fOnFlyStatus(kFALSE), |
b594a020 | 71 | fDaughterDCA(999), |
2c7d7ac0 | 72 | fChi2V0(-1), |
73 | fNegMaxProbPdg(0), | |
74 | fPosMaxProbPdg(0), | |
75 | fNegMaxProbPid(0), | |
76 | fPosMaxProbPid(0) | |
b594a020 | 77 | { |
e6e8b28b | 78 | // Constructor with full V0 specification. |
79 | ||
ca8a6926 | 80 | // Override from TEveElement. |
81 | fPickable = kTRUE; | |
e6e8b28b | 82 | fMainColorPtr = &fMarkerColor; |
83 | ||
84 | fMarkerStyle = 2; | |
85 | fMarkerColor = kSpring + 6; | |
86 | fMarkerSize = 1; | |
87 | ||
88 | fPointingLine->SetLineColor(fMarkerColor); | |
89 | fPointingLine->SetLineWidth(2); | |
90 | fPointingLine->IncDenyDestroy(); | |
91 | AddElement(fPointingLine); | |
ca8a6926 | 92 | |
b594a020 | 93 | fPosTrack->SetLineColor(2); // red |
e6e8b28b | 94 | fPosTrack->SetStdTitle(); |
b594a020 | 95 | fNegTrack->SetLineColor(7); // light blue |
e6e8b28b | 96 | fNegTrack->SetStdTitle(); |
b594a020 | 97 | |
e6e8b28b | 98 | fNegTrack->IncDenyDestroy(); |
b594a020 | 99 | AddElement(fNegTrack); |
e6e8b28b | 100 | fPosTrack->IncDenyDestroy(); |
b594a020 | 101 | AddElement(fPosTrack); |
102 | } | |
103 | ||
e6e8b28b | 104 | //______________________________________________________________________________ |
b594a020 | 105 | AliEveV0::~AliEveV0() |
b594a020 | 106 | { |
e6e8b28b | 107 | // Destructor. Dereferences pos/neg tracks and pointing-line objects. |
b594a020 | 108 | |
e6e8b28b | 109 | fNegTrack->DecDenyDestroy(); |
110 | fPosTrack->DecDenyDestroy(); | |
111 | fPointingLine->DecDenyDestroy(); | |
b594a020 | 112 | } |
113 | ||
d4dbbb43 | 114 | //______________________________________________________________________________ |
2c7d7ac0 | 115 | void AliEveV0::SetMaxProbPdgPid(Int_t iDaughter, Int_t rPdg, Float_t rPid) |
116 | { | |
117 | // Sets the maximum probability Pdg value and Pid for one daughter | |
0e33c639 | 118 | // Should be moved to AliEveTrack property eventually (or AliEveTrack creation) |
2c7d7ac0 | 119 | |
120 | if(iDaughter==0){ | |
121 | fNegMaxProbPdg = rPdg; | |
122 | fNegMaxProbPid = rPid; | |
123 | } | |
124 | else if (iDaughter==1){ | |
125 | fPosMaxProbPdg = rPdg; | |
126 | fPosMaxProbPid = rPid; | |
127 | } | |
128 | ||
129 | } | |
130 | //______________________________________________________________________________ | |
131 | Float_t AliEveV0::GetInvMass(Int_t nPdgCode, Int_t pPdgCode) const | |
d4dbbb43 | 132 | { |
133 | // Returns Invariant Mass assuming the masses of the daughter particles | |
134 | TEveVector lNegMomentum = fNegTrack->GetMomentum(); | |
135 | // Does not work properly because momenta at the primary vertex !!!!!!! | |
136 | TEveVector lPosMomentum = fPosTrack->GetMomentum(); | |
137 | Double_t nMass=TDatabasePDG::Instance()->GetParticle(nPdgCode)->Mass(); | |
138 | Double_t pMass=TDatabasePDG::Instance()->GetParticle(pPdgCode)->Mass(); | |
139 | ||
140 | printf("\n check the mass of the particle negative %.5f positive %.5f \n",nMass,pMass); | |
141 | ||
142 | Double_t eNeg = TMath::Sqrt(nMass*nMass + lNegMomentum.Mag2()); | |
143 | Double_t ePos = TMath::Sqrt(pMass*pMass + lPosMomentum.Mag2()); | |
144 | ||
145 | return TMath::Sqrt( (eNeg+ePos)*(eNeg+ePos) - fRecDecayP.Mag2() ); | |
146 | } | |
147 | ||
b594a020 | 148 | //______________________________________________________________________________ |
149 | void AliEveV0::MakeV0() | |
150 | { | |
e6e8b28b | 151 | // Set all dependant components for drawing. |
152 | ||
b594a020 | 153 | SetPoint(0, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ); |
154 | ||
155 | fNegTrack->MakeTrack(); | |
156 | fPosTrack->MakeTrack(); | |
e6e8b28b | 157 | |
158 | fPointingLine->SetPoint(0, fRecBirthV.fX, fRecBirthV.fY, fRecBirthV.fZ); | |
159 | fPointingLine->SetPoint(1, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ); | |
b594a020 | 160 | } |
161 | ||
162 | ||
ea47a1d6 | 163 | //============================================================================== |
164 | //============================================================================== | |
165 | ||
166 | //______________________________________________________________________________ | |
167 | // | |
168 | // Container for AliEveV0s. | |
169 | // | |
170 | // Allows runtime selection by pT and DCA of daughters, radius of V0 | |
171 | // creation and PID priobabilities | |
b594a020 | 172 | |
173 | ClassImp(AliEveV0List) | |
174 | ||
175 | //______________________________________________________________________________ | |
176 | AliEveV0List::AliEveV0List() : | |
177 | TEveElementList(), | |
178 | fTitle(), | |
179 | fRnrStyle(0), | |
180 | fRnrDaughters(kTRUE), | |
181 | fRnrV0vtx(kTRUE), | |
182 | fRnrV0path(kTRUE), | |
183 | fNegColor(0), | |
ca8a6926 | 184 | fPosColor(0), |
185 | fMinRCut(0), | |
e1bb28b4 | 186 | fMaxRCut(250), |
187 | fMinDaughterDCA(0), | |
188 | fMaxDaughterDCA(1), | |
189 | fMinPt(0), | |
2c7d7ac0 | 190 | fMaxPt(20), |
191 | fNegCheckedPid(211), | |
192 | fPosCheckedPid(211), | |
193 | fNegCheckedProb(0.5), | |
194 | fPosCheckedProb(0.5), | |
195 | fMinInvariantMass(0), | |
196 | fMaxInvariantMass(1.2) | |
b594a020 | 197 | { |
e6e8b28b | 198 | // Default constructor. |
199 | ||
b594a020 | 200 | fChildClass = AliEveV0::Class(); // override member from base TEveElementList |
201 | } | |
202 | ||
203 | //______________________________________________________________________________ | |
204 | AliEveV0List::AliEveV0List(TEveTrackPropagator* rs) : | |
205 | TEveElementList(), | |
206 | fTitle(), | |
207 | fRnrStyle(rs), | |
208 | fRnrDaughters(kTRUE), | |
209 | fRnrV0vtx(kTRUE), | |
210 | fRnrV0path(kTRUE), | |
211 | fNegColor(0), | |
ca8a6926 | 212 | fPosColor(0), |
213 | fMinRCut(0), | |
e1bb28b4 | 214 | fMaxRCut(250), |
215 | fMinDaughterDCA(0), | |
216 | fMaxDaughterDCA(1), | |
217 | fMinPt(0), | |
2c7d7ac0 | 218 | fMaxPt(20), |
219 | fNegCheckedPid(211), | |
220 | fPosCheckedPid(211), | |
221 | fNegCheckedProb(0.5), | |
222 | fPosCheckedProb(0.5), | |
223 | fMinInvariantMass(0), | |
224 | fMaxInvariantMass(1.2) | |
b594a020 | 225 | { |
e6e8b28b | 226 | // Constructor with given track-propagator.. |
227 | ||
b594a020 | 228 | fChildClass = AliEveV0::Class(); // override member from base TEveElementList |
229 | ||
230 | Init(); | |
231 | } | |
232 | ||
233 | //______________________________________________________________________________ | |
234 | AliEveV0List::AliEveV0List(const Text_t* name, TEveTrackPropagator* rs) : | |
235 | TEveElementList(), | |
236 | fTitle(), | |
237 | fRnrStyle(rs), | |
238 | fRnrDaughters(kTRUE), | |
239 | fRnrV0vtx(kTRUE), | |
240 | fRnrV0path(kTRUE), | |
241 | fNegColor(0), | |
ca8a6926 | 242 | fPosColor(0), |
243 | fMinRCut(0), | |
e1bb28b4 | 244 | fMaxRCut(100), |
245 | fMinDaughterDCA(0), | |
246 | fMaxDaughterDCA(1), | |
247 | fMinPt(0), | |
2c7d7ac0 | 248 | fMaxPt(20), |
249 | fNegCheckedPid(211), | |
250 | fPosCheckedPid(211), | |
251 | fNegCheckedProb(0.5), | |
252 | fPosCheckedProb(0.5), | |
253 | fMinInvariantMass(0), | |
254 | fMaxInvariantMass(1.2) | |
b594a020 | 255 | { |
e6e8b28b | 256 | // Standard constructor. |
257 | ||
b594a020 | 258 | fChildClass = AliEveV0::Class(); // override member from base TEveElementList |
259 | ||
260 | Init(); | |
261 | SetName(name); | |
262 | } | |
263 | ||
264 | //______________________________________________________________________________ | |
265 | void AliEveV0List::Init() | |
266 | { | |
e6e8b28b | 267 | // Initialize members needed for drawing operations. |
b594a020 | 268 | |
e6e8b28b | 269 | if (fRnrStyle== 0) fRnrStyle = new TEveTrackPropagator; |
b594a020 | 270 | } |
271 | ||
ca8a6926 | 272 | /******************************************************************************/ |
b594a020 | 273 | |
e6e8b28b | 274 | //______________________________________________________________________________ |
b594a020 | 275 | void AliEveV0List::MakeV0s() |
276 | { | |
e6e8b28b | 277 | // Call MakeV0() for all elements. |
278 | ||
b594a020 | 279 | for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
280 | ((AliEveV0*)(*i))->MakeV0(); | |
281 | } | |
282 | gEve->Redraw3D(); | |
283 | } | |
284 | ||
ca8a6926 | 285 | /******************************************************************************/ |
286 | ||
e6e8b28b | 287 | //______________________________________________________________________________ |
ca8a6926 | 288 | void AliEveV0List::FilterByRadius(Float_t minR, Float_t maxR) |
289 | { | |
e6e8b28b | 290 | // Select visibility of elements based on their axial radius. |
291 | ||
ca8a6926 | 292 | fMinRCut = minR; |
293 | fMaxRCut = maxR; | |
294 | ||
295 | for(List_i i = fChildren.begin(); i != fChildren.end(); ++i) | |
296 | { | |
297 | AliEveV0* v0 = (AliEveV0*) *i; | |
298 | Float_t rad = v0->GetRadius(); | |
299 | Bool_t show = rad >= fMinRCut && rad <= fMaxRCut; | |
300 | v0->SetRnrState(show); | |
301 | } | |
302 | ElementChanged(); | |
303 | gEve->Redraw3D(); | |
304 | } | |
e1bb28b4 | 305 | |
306 | /******************************************************************************/ | |
307 | ||
308 | //______________________________________________________________________________ | |
309 | void AliEveV0List::FilterByDaughterDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA) | |
310 | { | |
311 | // Select visibility of elements based on the DCA between daughters. | |
312 | ||
313 | fMinDaughterDCA = minDaughterDCA; | |
314 | fMaxDaughterDCA = maxDaughterDCA; | |
315 | ||
316 | for(List_i i = fChildren.begin(); i != fChildren.end(); ++i) | |
317 | { | |
318 | AliEveV0* v0 = (AliEveV0*) *i; | |
319 | Float_t dca = v0->GetDaughterDCA(); | |
320 | Bool_t show = dca >= fMinDaughterDCA && dca <= fMaxDaughterDCA; | |
321 | v0->SetRnrState(show); | |
322 | } | |
323 | ElementChanged(); | |
324 | gEve->Redraw3D(); | |
325 | } | |
326 | ||
327 | /******************************************************************************/ | |
328 | ||
329 | //______________________________________________________________________________ | |
330 | void AliEveV0List::FilterByPt(Float_t minPt, Float_t maxPt) | |
331 | { | |
332 | // Select visibility of elements based on the V0 pt. | |
333 | ||
334 | fMinPt = minPt; | |
335 | fMaxPt = maxPt; | |
336 | ||
337 | for(List_i i = fChildren.begin(); i != fChildren.end(); ++i) | |
338 | { | |
339 | AliEveV0* v0 = (AliEveV0*) *i; | |
340 | Float_t pt = v0->GetPt(); | |
341 | Bool_t show = pt >= fMinPt && pt <= fMaxPt; | |
342 | v0->SetRnrState(show); | |
343 | } | |
344 | ElementChanged(); | |
345 | gEve->Redraw3D(); | |
346 | } | |
2c7d7ac0 | 347 | |
348 | //______________________________________________________________________________ | |
349 | void AliEveV0List::FilterByCheckedPidMinProb(Int_t rFlag,Int_t rDaughter, Int_t rPid, Float_t rProb) | |
350 | { | |
ea47a1d6 | 351 | // Select visibility of elements based on one of the V0 daughters PID |
2c7d7ac0 | 352 | |
353 | if (!rDaughter){ | |
354 | fNegCheckedPid = rPid; | |
355 | fNegCheckedProb = rProb; | |
356 | } | |
357 | else { | |
358 | fPosCheckedPid = rPid; | |
359 | fPosCheckedProb = rProb; | |
360 | } | |
361 | ||
2c7d7ac0 | 362 | for(List_i i = fChildren.begin(); i != fChildren.end(); ++i) |
363 | { | |
364 | AliEveV0* v0 = (AliEveV0*) *i; | |
365 | Int_t pid = 0; | |
366 | Float_t prob = 0.0; | |
367 | Bool_t show = 0; | |
368 | if (!rDaughter) {// Negative daughter checked | |
369 | pid = v0->GetNegMaxProbPdg(); | |
370 | prob = v0->GetNegMaxProbPid(); | |
371 | show = (pid == fNegCheckedPid && prob > fNegCheckedProb) || !rFlag ; | |
372 | } | |
373 | else if (rDaughter) {// Positive daughter checked | |
374 | pid = v0->GetPosMaxProbPdg(); | |
375 | prob = v0->GetPosMaxProbPid(); | |
376 | show = (pid == fPosCheckedPid && prob > fPosCheckedProb) || !rFlag ; | |
377 | } | |
378 | v0->SetRnrState(show); | |
379 | } | |
380 | ElementChanged(); | |
381 | gEve->Redraw3D(); | |
382 | } | |
383 | ||
384 | //______________________________________________________________________________ | |
385 | void AliEveV0List::FilterByInvariantMass(Float_t minInvariantMass, Float_t maxInvariantMass, Int_t nPdgCode, Int_t pPdgCode) | |
386 | { | |
387 | // Select visibility of elements based on the V0 invariant mass. | |
388 | ||
389 | fMinInvariantMass = minInvariantMass; | |
390 | fMaxInvariantMass = maxInvariantMass; | |
391 | ||
392 | for(List_i i = fChildren.begin(); i != fChildren.end(); ++i) | |
393 | { | |
394 | AliEveV0* v0 = (AliEveV0*) *i; | |
395 | Float_t invMass = v0->GetInvMass(nPdgCode, pPdgCode); | |
396 | Bool_t show = invMass >= fMinInvariantMass && invMass <= fMaxInvariantMass; | |
397 | v0->SetRnrState(show); | |
398 | } | |
399 | ElementChanged(); | |
400 | gEve->Redraw3D(); | |
401 | } |