doxy: do not show whitespace diffs on bulk edit
[u/mrichter/AliRoot.git] / EVE / hlt-macros / hlt_esd_tracks.C
1 // $Id: esd_tracks.C 35148 2009-10-01 11:21:06Z mtadel $
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
10 #if !defined(__CINT__) || defined(__MAKECINT__)
11
12 #include "TString.h"
13 #include "TMath.h"
14 #include "TGListTree.h"
15 #include "TEveVSDStructs.h"
16 #include "TEveManager.h"
17 #include "TEveTrackPropagator.h"
18
19 #include "AliESDEvent.h"
20 #include "AliESDtrackCuts.h"
21 #include "AliESDtrack.h"
22 #include "AliExternalTrackParam.h"
23
24 #include "EVE/EveBase/AliEveTrack.h"
25 #include "EVE/EveBase/AliEveMagField.h"
26 #include "EVE/EveBase/AliEveEventManager.h"
27
28 #include "AliHLTTPCCATrackParam.h"
29 #include "AliHLTTPCCATrackConvertor.h"
30
31 #endif
32
33 AliEveTrack* hlt_esd_make_track(AliESDtrack *at, TEveTrackList* cont)
34 {
35   // Make a standard track representation and put it into given container.
36
37   // Choose which parameters to use a track's starting point.
38   // If gkFixFailedITSExtr is TRUE (FALSE by default) and
39   // if ITS refit failed, take track parameters at inner TPC radius.
40
41   const double kCLight = 0.000299792458;
42   double bz = - kCLight*10.*( cont->GetPropagator()->GetMagField(0,0,0).fZ);
43
44   Bool_t innerTaken = kFALSE;
45   if ( ! at->IsOn(AliESDtrack::kITSrefit) && g_esd_tracks_use_ip_on_failed_its_refit)
46   {
47     //tp = at->GetInnerParam();
48     innerTaken = kTRUE;
49   }
50
51   // Add inner/outer track parameters as path-marks.
52
53   Double_t     pbuf[3], vbuf[3];
54
55   AliExternalTrackParam trackParam = *at;
56
57   // take parameters constrained to vertex (if they are)
58
59   if( at->GetConstrainedParam() ){
60     trackParam = *at->GetConstrainedParam();
61   }
62   else if( at->GetInnerParam() ){
63     trackParam = *(at->GetInnerParam());
64   }
65   if( at->GetStatus()&AliESDtrack::kTRDin ){
66     // transport to TRD in
67     trackParam = *at;
68     trackParam.PropagateTo( 290.45, -10.*( cont->GetPropagator()->GetMagField(0,0,0).fZ) );
69   }
70
71   TEveRecTrack rt;
72   {
73     rt.fLabel  = at->GetLabel();
74     rt.fIndex  = (Int_t) at->GetID();
75     rt.fStatus = (Int_t) at->GetStatus();
76     rt.fSign   = (Int_t) trackParam.GetSign();  
77     trackParam.GetXYZ(vbuf);
78     trackParam.GetPxPyPz(pbuf);    
79     rt.fV.Set(vbuf);
80     rt.fP.Set(pbuf);
81     Double_t ep = at->GetP(), mc = at->GetMass();
82     rt.fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
83   }
84
85   AliEveTrack* track = new AliEveTrack(&rt, cont->GetPropagator());
86   track->SetAttLineAttMarker(cont);
87   track->SetName(Form("AliEveTrack %d", at->GetID()));
88   track->SetElementTitle(esd_track_title(at));
89   track->SetSourceObject(at);
90
91
92   // Set reference points along the trajectory
93   // and the last point
94
95   { 
96     TEvePathMark startPoint(TEvePathMark::kReference);
97     trackParam.GetXYZ(vbuf);
98     trackParam.GetPxPyPz(pbuf);    
99     startPoint.fV.Set(vbuf);
100     startPoint.fP.Set(pbuf);
101     rt.fV.Set(vbuf);
102     rt.fP.Set(pbuf);
103     Double_t ep = at->GetP(), mc = at->GetMass();
104     rt.fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
105
106     track->AddPathMark( startPoint );    
107   }
108
109
110   if( at->GetTPCPoints(2)>80 ){
111   
112     //
113     // use AliHLTTPCCATrackParam propagator 
114     // since AliExternalTrackParam:PropagateTo()
115     // has an offset at big distances
116     //
117     
118     AliHLTTPCCATrackParam t;
119     AliHLTTPCCATrackConvertor::SetExtParam( t, trackParam );
120     
121     Double_t x0 = trackParam.GetX();
122     Double_t dx = at->GetTPCPoints(2) - x0;
123     
124     //
125     // set a reference at the half of trajectory for better drawing
126     //
127     
128     for( double dxx=dx/2; TMath::Abs(dxx)>=1.; dxx*=.9 ){
129       if( !t.TransportToX(x0+dxx, bz, .99 ) ) continue;
130       AliHLTTPCCATrackConvertor::GetExtParam( t, trackParam, trackParam.GetAlpha() ); 
131       trackParam.GetXYZ(vbuf);
132       trackParam.GetPxPyPz(pbuf);
133       TEvePathMark midPoint(TEvePathMark::kReference);
134       midPoint.fV.Set(vbuf);
135       midPoint.fP.Set(pbuf);    
136       track->AddPathMark( midPoint );
137       break;
138     }
139     
140     //
141     // Set a reference at the end of the trajectory
142     // and a "decay point", to let the event display know where the track ends
143     //
144     
145     for( ; TMath::Abs(dx)>=1.; dx*=.9 ){
146       if( !t.TransportToX(x0+dx, bz, .99 ) ) continue;
147       AliHLTTPCCATrackConvertor::GetExtParam( t, trackParam, trackParam.GetAlpha() ); 
148       trackParam.GetXYZ(vbuf);
149       trackParam.GetPxPyPz(pbuf);
150       TEvePathMark endPoint(TEvePathMark::kReference);
151       TEvePathMark decPoint(TEvePathMark::kDecay);
152       endPoint.fV.Set(vbuf);
153       endPoint.fP.Set(pbuf);
154       decPoint.fV.Set(vbuf);
155       decPoint.fP.Set(pbuf);
156       track->AddPathMark( endPoint );
157       track->AddPathMark( decPoint );
158       break;
159     }  
160   }
161
162   if (at->IsOn(AliESDtrack::kTPCrefit))
163   {
164     if ( ! innerTaken)
165     {
166       esd_track_add_param(track, at->GetInnerParam());
167     }
168     esd_track_add_param(track, at->GetOuterParam());
169   }
170
171
172   return track;
173 }
174