2 // Author: Matevz Tadel 2009
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 **************************************************************************/
10 #include "AliEveTrack.h"
12 #include "AliESDtrack.h"
13 #include "AliAODTrack.h"
17 //______________________________________________________________________________
18 // Full description of AliEveTrack
23 //______________________________________________________________________________
24 AliEveTrack::AliEveTrack() :
30 //______________________________________________________________________________
31 AliEveTrack::AliEveTrack(TParticle* t, Int_t label, TEveTrackPropagator* prop) :
32 TEveTrack(t, label, prop)
37 //______________________________________________________________________________
38 AliEveTrack::AliEveTrack(TEveMCTrack* t, TEveTrackPropagator* prop) :
44 //______________________________________________________________________________
45 AliEveTrack::AliEveTrack(TEveRecTrack* t, TEveTrackPropagator* prop) :
51 //______________________________________________________________________________
52 AliEveTrack::AliEveTrack(AliESDtrack* t, TEveTrackPropagator* prop) :
58 t->GetXYZ(buf); fV.Set(buf);
59 t->GetPxPyPz(buf); fP.Set(buf);
61 Double_t ep = t->GetP(), mc = t->GetMass();
62 fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
63 // fPdg = 0; // ??? Use PID ?
64 fCharge= t->GetSign();
66 fLabel = t->GetLabel();
68 // fStatus = (Int_t) t->GetStatus(); // RRRR Uncomment for root-5.26.
73 //______________________________________________________________________________
74 AliEveTrack::AliEveTrack(AliAODTrack* t, TEveTrackPropagator* prop) :
81 t->GetXYZ(buf); fV.Set(buf);
82 t->PxPyPz(buf); fP.Set(buf);
84 // fBeta = 0; // Unknown, no mass function
85 // fPdg = 0; // ??? Use PID ?
88 fLabel = t->GetLabel();
90 // fStatus = (Int_t) t->GetStatus(); // RRRR Uncomment for root-5.26.
95 //______________________________________________________________________________
96 AliEveTrack::AliEveTrack(const AliEveTrack& t) :
102 //______________________________________________________________________________
103 AliEveTrack::~AliEveTrack()
108 //______________________________________________________________________________
109 void AliEveTrack::SetStartParams(const AliExternalTrackParam* tp)
111 // Set the initial vertex / momentum of eve track from 'tp'.
115 tp->GetXYZ(buf); fV.Set(buf);
116 tp->PxPyPz(buf); fP.Set(buf);
119 /******************************************************************************/
121 //______________________________________________________________________________
122 void AliEveTrack::ImportHits()
124 // Import hits with same label as the track.
125 // Uses macro "hits_from_label.C".
127 TEveUtil::LoadMacro("hits_from_label.C");
128 gROOT->ProcessLine(Form("hits_from_label(%d, (TEveElement*)%p);",
132 //______________________________________________________________________________
133 void AliEveTrack::ImportClustersFromLabel()
135 // Import clusters with same label as the track.
136 // Uses macro "clusters_from_label.C".
138 TEveUtil::LoadMacro("clusters_from_label.C");
139 gROOT->ProcessLine(Form("clusters_from_label(%d, (TEveElement*)%p);",
143 //______________________________________________________________________________
144 void AliEveTrack::ImportClustersFromIndex()
146 // Import clusters marked with same reconstructed track index as the track.
147 // Uses macro "clusters_from_index.C".
149 static const TEveException kEH("AliEveTrack::ImportClustersFromIndex ");
151 if (fIndex == kMinInt)
152 throw kEH + "index not set.";
154 TEveUtil::LoadMacro("clusters_from_index.C");
155 gROOT->ProcessLine(Form("clusters_from_index(%d, (TEveElement*)%p);",
159 /******************************************************************************/
161 //______________________________________________________________________________
162 void AliEveTrack::ImportKine()
164 // Import kinematics of the track's label recursively.
165 // Uses macro "kine_tracks.C".
167 static const TEveException kEH("AliEveTrack::ImportKine ");
169 if (fLabel == kMinInt)
170 throw kEH + "label not set.";
174 Warning(kEH, "label negative, taking absolute value.");
180 TEveUtil::LoadMacro("kine_tracks.C");
181 gROOT->ProcessLine(Form("kine_track(%d, kTRUE, kTRUE, kTRUE, kTRUE, (TEveElement*)%p);",
186 //______________________________________________________________________________
187 void AliEveTrack::ImportKineWithArgs(Bool_t importMother, Bool_t importDaugters,
188 Bool_t colorPdg, Bool_t recurse)
190 // Import kinematics of the track's label. Arguments steer the
192 // importMother import particle with track's label
193 // importDaugters import direct daughters of label
194 // colorPdg color kinematics by PDG code
195 // recurse recursive import of daughters' daughters
196 // Uses macro "kine_tracks.C".
198 static const TEveException kEH("AliEveTrack::ImportKineWithArgs ");
200 if (fLabel == kMinInt)
201 throw kEH + "label not set.";
205 Warning(kEH, "label negative, taking absolute value.");
211 TEveUtil::LoadMacro("kine_tracks.C");
212 gROOT->ProcessLine(Form("kine_track(%d, %d, %d, %d, %d, (TEveElement*)%p);",
213 label, importMother, importDaugters, colorPdg, recurse, this));
216 //______________________________________________________________________________
217 void AliEveTrack::PrintKineStack()
219 // Print kinematics pertaining to track's label.
220 // Uses macro "print_kine_from_label.C".
222 static const TEveException kEH("AliEveTrack::PrintKineStack ");
224 if (fLabel == kMinInt)
225 throw kEH + "label not set.";
229 Warning(kEH, "label negative, taking absolute value.");
235 TEveUtil::LoadMacro("print_kine_from_label.C");
236 gROOT->ProcessLine(Form("print_kine_from_label(%d);", label));
239 //______________________________________________________________________________
240 void AliEveTrack::SecSelected(TEveTrack* track)
242 // Emits "SecSelected(TEveTrack*)" signal.
243 // Called from TEveTrackGL on secondary-selection.
245 Emit("SecSelected(TEveTrack*)", (Long_t)track);
246 SecSelectedTrack((AliEveTrack*) track);
249 //______________________________________________________________________________
250 void AliEveTrack::SecSelectedTrack(AliEveTrack* track)
252 // Emits "SecSelectedTrack(AliEveTrack*)" signal.
254 Emit("SecSelectedTrack(AliEveTrack*)", (Long_t)track);
257 //______________________________________________________________________________
258 AliESDtrack* AliEveTrack::GetESDTrack() const
260 // Return source object dyn-casted to AliESDtrack.
262 return dynamic_cast<AliESDtrack*>(GetSourceObject());
265 //______________________________________________________________________________
266 AliAODTrack* AliEveTrack::GetAODTrack() const
268 // Return source object dyn-casted to AliAODTrack.
270 return dynamic_cast<AliAODTrack*>(GetSourceObject());