1 /**************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
3 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
4 * full copyright notice. *
5 **************************************************************************/
7 // Author: Pawel Debski 2010
9 #if !defined(__CINT__) || defined(__MAKECINT__)
10 #include <TPolyMarker3D.h>
13 #include <TEveManager.h>
14 #include <TEveEventManager.h>
15 #include <TEveElement.h>
18 #include <AliESDtrack.h>
19 #include <AliEveTrack.h>
20 #include <AliEveMultiView.h>
23 void set_momentum_vectors()
31 TEveElement::List_i i = gEve->GetEventScene()->FirstChild()->BeginChildren();
32 TEveElement::List_i j = gEve->GetEventScene()->FirstChild()->EndChildren();
33 TEveElement::List_i k;
35 TEveElementList* momentumVectorList = new TEveElementList("Momentum Vectors");
37 Double_t maxMomentum = 0;
38 Double_t vectorLength = 600.0;
48 //==============================================
49 // find highest momentum (to normalize)
50 //==============================================
52 for(k = i; k != j; k++)
54 TEveElement* element = (TEveElement*) *k;
56 str1 = element->GetElementName();
58 if(str1.Contains("Tracks") || str1.Contains("tracks"))
61 TEveElement::List_i m = element->BeginChildren();
62 TEveElement::List_i n = element->EndChildren();
63 TEveElement::List_i l;
65 for(l = m; l != n; l++)
67 TEveElement* trackType = (TEveElement*) *l;
68 str2 = trackType->GetElementName();
70 if(str2.Contains("Sigma < 3"))
72 if(trackType->HasChildren())
75 TEveElement::List_i x = trackType->BeginChildren();
76 TEveElement::List_i y = trackType->EndChildren();
77 TEveElement::List_i z;
79 for(z = x; z != y; z++)
82 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
84 if(trackSingle1->GetESDTrack()->P() > maxMomentum)
85 maxMomentum = trackSingle1->GetESDTrack()->P();
92 if(str2.Contains("3 < Sigma < 5"))
95 if(trackType->HasChildren())
98 TEveElement::List_i x = trackType->BeginChildren();
99 TEveElement::List_i y = trackType->EndChildren();
100 TEveElement::List_i z;
102 for(z = x; z != y; z++)
105 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
107 if(trackSingle1->GetESDTrack()->P() > maxMomentum)
108 maxMomentum = trackSingle1->GetESDTrack()->P();
114 if(str2.Contains("5 < Sigma"))
117 if(trackType->HasChildren())
120 TEveElement::List_i x = trackType->BeginChildren();
121 TEveElement::List_i y = trackType->EndChildren();
122 TEveElement::List_i z;
124 for(z = x; z != y; z++)
127 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
129 if(trackSingle1->GetESDTrack()->P() > maxMomentum)
130 maxMomentum = trackSingle1->GetESDTrack()->P();
140 //==============================================
142 //==============================================
146 for(k = i; k != j; k++)
148 TEveElement* element = (TEveElement*) *k;
150 str1 = element->GetElementName();
152 element->SetRnrSelf(kFALSE);
154 if(element->HasChildren())
155 element->SetRnrChildren(kFALSE);
161 //==============================================
162 // draw momentum vectors
163 //==============================================
166 vectorLength = vectorLength/maxMomentum;
167 // vectorLength = vectorLength/TMath::Log(maxMomentum);
169 for(k = i; k != j; k++)
171 TEveElement* element = (TEveElement*) *k;
173 str1 = element->GetElementName();
175 if(str1.Contains("Tracks") || str1.Contains("tracks"))
178 TEveElement::List_i m = element->BeginChildren();
179 TEveElement::List_i n = element->EndChildren();
180 TEveElement::List_i l;
182 for(l = m; l != n; l++)
184 TEveElement* trackType = (TEveElement*) *l;
185 str2 = trackType->GetElementName();
187 trackType->SetRnrSelf(kFALSE);
189 if(trackType->HasChildren())
190 trackType->SetRnrChildren(kFALSE);
192 if(str2.Contains("Sigma < 3"))
195 if(trackType->HasChildren())
198 TEveElementList* momentumVectorList1 = new TEveElementList("sigma < 3");
200 TEveElement::List_i x = trackType->BeginChildren();
201 TEveElement::List_i y = trackType->EndChildren();
202 TEveElement::List_i z;
204 for(z = x; z != y; z++)
207 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
209 TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));
211 x1 = trackSingle1->GetESDTrack()->Xv();
212 y1 = trackSingle1->GetESDTrack()->Yv();
213 z1 = trackSingle1->GetESDTrack()->Zv();
215 momentumVector->SetPoint(0, x1, y1, z1);
217 x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
218 y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
219 z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();
221 momentumVector->SetPoint(1, x2, y2, z2);
224 if(trackSingle1->GetESDTrack()->Charge() == -1)
225 momentumVector->SetLineColor(kGreen);
227 momentumVector->SetLineColor(kRed);
229 momentumVector->SetLineColor(kRed);
231 momentumVector->SetLineWidth(1);
232 momentumVector->SetLineStyle(0);
233 momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));
235 momentumVectorList1->AddElement(momentumVector);
239 // gEve->AddElement(momentumVectorList1);
240 momentumVectorList->AddElement(momentumVectorList1);
248 if(str2.Contains("3 < Sigma < 5"))
251 if(trackType->HasChildren())
254 TEveElement::List_i x = trackType->BeginChildren();
255 TEveElement::List_i y = trackType->EndChildren();
256 TEveElement::List_i z;
258 TEveElementList* momentumVectorList2 = new TEveElementList("3 < sigma < 5");
260 for(z = x; z != y; z++)
263 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
265 TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));
267 x1 = trackSingle1->GetESDTrack()->Xv();
268 y1 = trackSingle1->GetESDTrack()->Yv();
269 z1 = trackSingle1->GetESDTrack()->Zv();
271 momentumVector->SetPoint(0, x1, y1, z1);
273 x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
274 y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
275 z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();
277 momentumVector->SetPoint(1, x2, y2, z2);
279 if(trackSingle1->GetESDTrack()->Charge() == -1)
280 momentumVector->SetLineColor(kGreen+2);
282 momentumVector->SetLineColor(kRed+2);
284 momentumVector->SetLineColor(kRed+2);
286 momentumVector->SetLineWidth(1);
287 momentumVector->SetLineStyle(0);
288 momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));
290 momentumVectorList2->AddElement(momentumVector);
294 // gEve->AddElement(momentumVectorList2);
295 momentumVectorList->AddElement(momentumVectorList2);
302 if(str2.Contains("5 < Sigma"))
305 if(trackType->HasChildren())
308 TEveElementList* momentumVectorList3 = new TEveElementList("5 < sigma");
310 TEveElement::List_i x = trackType->BeginChildren();
311 TEveElement::List_i y = trackType->EndChildren();
312 TEveElement::List_i z;
314 for(z = x; z != y; z++)
317 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
319 TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));
321 x1 = trackSingle1->GetESDTrack()->Xv();
322 y1 = trackSingle1->GetESDTrack()->Yv();
323 z1 = trackSingle1->GetESDTrack()->Zv();
325 momentumVector->SetPoint(0, x1, y1, z1);
327 x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
328 y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
329 z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();
331 momentumVector->SetPoint(1, x2, y2, z2);
333 if(trackSingle1->GetESDTrack()->Charge() == -1)
334 momentumVector->SetLineColor(kGreen+3);
336 momentumVector->SetLineColor(kRed+3);
338 momentumVector->SetLineColor(kRed+3);
340 momentumVector->SetLineWidth(1);
341 momentumVector->SetLineStyle(0);
342 momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));
344 momentumVectorList3->AddElement(momentumVector);
348 //gEve->AddElement(momentumVectorList3);
349 momentumVectorList->AddElement(momentumVectorList3);
359 gEve->AddElement(momentumVectorList);
361 TEveElement* top = gEve->GetCurrentEvent();
363 AliEveMultiView *mv = AliEveMultiView::Instance();
365 mv->DestroyEventRPhi();
366 mv->DestroyEventRhoZ();
368 mv->ImportEventRPhi(top);
369 mv->ImportEventRhoZ(top);
371 gEve->FullRedraw3D(kFALSE, kTRUE);