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
10 void set_momentum_vectors()
18 TEveElement::List_i i = gEve->GetEventScene()->FirstChild()->BeginChildren();
19 TEveElement::List_i j = gEve->GetEventScene()->FirstChild()->EndChildren();
20 TEveElement::List_i k;
22 TEveElementList* momentumVectorList = new TEveElementList("Momentum Vectors");
24 Double_t maxMomentum = 0;
25 Double_t vectorLength = 600.0;
35 //==============================================
36 // find highest momentum (to normalize)
37 //==============================================
39 for(k = i; k != j; k++)
41 TEveElement* element = (TEveElement*) *k;
43 str1 = element->GetElementName();
45 if(str1.Contains("Tracks") || str1.Contains("tracks"))
48 TEveElement::List_i m = element->BeginChildren();
49 TEveElement::List_i n = element->EndChildren();
50 TEveElement::List_i l;
52 for(l = m; l != n; l++)
54 TEveElement* trackType = (TEveElement*) *l;
55 str2 = trackType->GetElementName();
57 if(str2.Contains("Sigma < 3"))
59 if(trackType->HasChildren())
62 TEveElement::List_i x = trackType->BeginChildren();
63 TEveElement::List_i y = trackType->EndChildren();
64 TEveElement::List_i z;
66 for(z = x; z != y; z++)
69 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
71 if(trackSingle1->GetESDTrack()->P() > maxMomentum)
72 maxMomentum = trackSingle1->GetESDTrack()->P();
79 if(str2.Contains("3 < Sigma < 5"))
82 if(trackType->HasChildren())
85 TEveElement::List_i x = trackType->BeginChildren();
86 TEveElement::List_i y = trackType->EndChildren();
87 TEveElement::List_i z;
89 for(z = x; z != y; z++)
92 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
94 if(trackSingle1->GetESDTrack()->P() > maxMomentum)
95 maxMomentum = trackSingle1->GetESDTrack()->P();
101 if(str2.Contains("5 < Sigma"))
104 if(trackType->HasChildren())
107 TEveElement::List_i x = trackType->BeginChildren();
108 TEveElement::List_i y = trackType->EndChildren();
109 TEveElement::List_i z;
111 for(z = x; z != y; z++)
114 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
116 if(trackSingle1->GetESDTrack()->P() > maxMomentum)
117 maxMomentum = trackSingle1->GetESDTrack()->P();
127 //==============================================
129 //==============================================
133 for(k = i; k != j; k++)
135 TEveElement* element = (TEveElement*) *k;
137 str1 = element->GetElementName();
139 element->SetRnrSelf(kFALSE);
141 if(element->HasChildren())
142 element->SetRnrChildren(kFALSE);
148 //==============================================
149 // draw momentum vectors
150 //==============================================
153 vectorLength = vectorLength/maxMomentum;
154 // vectorLength = vectorLength/TMath::Log(maxMomentum);
156 for(k = i; k != j; k++)
158 TEveElement* element = (TEveElement*) *k;
160 str1 = element->GetElementName();
162 if(str1.Contains("Tracks") || str1.Contains("tracks"))
165 TEveElement::List_i m = element->BeginChildren();
166 TEveElement::List_i n = element->EndChildren();
167 TEveElement::List_i l;
169 for(l = m; l != n; l++)
171 TEveElement* trackType = (TEveElement*) *l;
172 str2 = trackType->GetElementName();
174 trackType->SetRnrSelf(kFALSE);
176 if(trackType->HasChildren())
177 trackType->SetRnrChildren(kFALSE);
179 if(str2.Contains("Sigma < 3"))
182 if(trackType->HasChildren())
185 TEveElementList* momentumVectorList1 = new TEveElementList("sigma < 3");
187 TEveElement::List_i x = trackType->BeginChildren();
188 TEveElement::List_i y = trackType->EndChildren();
189 TEveElement::List_i z;
191 for(z = x; z != y; z++)
194 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
196 TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));
198 x1 = trackSingle1->GetESDTrack()->Xv();
199 y1 = trackSingle1->GetESDTrack()->Yv();
200 z1 = trackSingle1->GetESDTrack()->Zv();
202 momentumVector->SetPoint(0, x1, y1, z1);
204 x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
205 y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
206 z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();
208 momentumVector->SetPoint(1, x2, y2, z2);
211 if(trackSingle1->GetESDTrack()->Charge() == -1)
212 momentumVector->SetLineColor(kGreen);
214 momentumVector->SetLineColor(kRed);
216 momentumVector->SetLineColor(kRed);
218 momentumVector->SetLineWidth(1);
219 momentumVector->SetLineStyle(0);
220 momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));
222 momentumVectorList1->AddElement(momentumVector);
226 // gEve->AddElement(momentumVectorList1);
227 momentumVectorList->AddElement(momentumVectorList1);
235 if(str2.Contains("3 < Sigma < 5"))
238 if(trackType->HasChildren())
241 TEveElement::List_i x = trackType->BeginChildren();
242 TEveElement::List_i y = trackType->EndChildren();
243 TEveElement::List_i z;
245 TEveElementList* momentumVectorList2 = new TEveElementList("3 < sigma < 5");
247 for(z = x; z != y; z++)
250 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
252 TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));
254 x1 = trackSingle1->GetESDTrack()->Xv();
255 y1 = trackSingle1->GetESDTrack()->Yv();
256 z1 = trackSingle1->GetESDTrack()->Zv();
258 momentumVector->SetPoint(0, x1, y1, z1);
260 x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
261 y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
262 z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();
264 momentumVector->SetPoint(1, x2, y2, z2);
266 if(trackSingle1->GetESDTrack()->Charge() == -1)
267 momentumVector->SetLineColor(kGreen+2);
269 momentumVector->SetLineColor(kRed+2);
271 momentumVector->SetLineColor(kRed+2);
273 momentumVector->SetLineWidth(1);
274 momentumVector->SetLineStyle(0);
275 momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));
277 momentumVectorList2->AddElement(momentumVector);
281 // gEve->AddElement(momentumVectorList2);
282 momentumVectorList->AddElement(momentumVectorList2);
289 if(str2.Contains("5 < Sigma"))
292 if(trackType->HasChildren())
295 TEveElementList* momentumVectorList3 = new TEveElementList("5 < sigma");
297 TEveElement::List_i x = trackType->BeginChildren();
298 TEveElement::List_i y = trackType->EndChildren();
299 TEveElement::List_i z;
301 for(z = x; z != y; z++)
304 AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);
306 TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));
308 x1 = trackSingle1->GetESDTrack()->Xv();
309 y1 = trackSingle1->GetESDTrack()->Yv();
310 z1 = trackSingle1->GetESDTrack()->Zv();
312 momentumVector->SetPoint(0, x1, y1, z1);
314 x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
315 y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
316 z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();
318 momentumVector->SetPoint(1, x2, y2, z2);
320 if(trackSingle1->GetESDTrack()->Charge() == -1)
321 momentumVector->SetLineColor(kGreen+3);
323 momentumVector->SetLineColor(kRed+3);
325 momentumVector->SetLineColor(kRed+3);
327 momentumVector->SetLineWidth(1);
328 momentumVector->SetLineStyle(0);
329 momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));
331 momentumVectorList3->AddElement(momentumVector);
335 //gEve->AddElement(momentumVectorList3);
336 momentumVectorList->AddElement(momentumVectorList3);
346 gEve->AddElement(momentumVectorList);
348 TEveElement* top = gEve->GetCurrentEvent();
350 AliEveMultiView *mv = AliEveMultiView::Instance();
352 mv->DestroyEventRPhi();
353 mv->DestroyEventRhoZ();
355 mv->ImportEventRPhi(top);
356 mv->ImportEventRhoZ(top);
358 gEve->FullRedraw3D(kFALSE, kTRUE);