ROOT logo
// $Id: esd_tracks.C 35148 2009-10-01 11:21:06Z mtadel $
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#if !defined(__CINT__) || defined(__MAKECINT__)

#include "TString.h"
#include "TMath.h"
#include "TGListTree.h"
#include "TEveVSDStructs.h"
#include "TEveManager.h"
#include "TEveTrackPropagator.h"

#include "AliESDEvent.h"
#include "AliESDtrackCuts.h"
#include "AliESDtrack.h"
#include "AliExternalTrackParam.h"

#include "EVE/EveBase/AliEveTrack.h"
#include "EVE/EveBase/AliEveMagField.h"
#include "EVE/EveBase/AliEveEventManager.h"

#include "AliHLTTPCCATrackParam.h"
#include "AliHLTTPCCATrackConvertor.h"

#endif

AliEveTrack* hlt_esd_make_track(AliESDtrack *at, TEveTrackList* cont)
{
  // Make a standard track representation and put it into given container.

  // Choose which parameters to use a track's starting point.
  // If gkFixFailedITSExtr is TRUE (FALSE by default) and
  // if ITS refit failed, take track parameters at inner TPC radius.

  const double kCLight = 0.000299792458;
  double bz = - kCLight*10.*( cont->GetPropagator()->GetMagField(0,0,0).fZ);

  Bool_t innerTaken = kFALSE;
  if ( ! at->IsOn(AliESDtrack::kITSrefit) && g_esd_tracks_use_ip_on_failed_its_refit)
  {
    //tp = at->GetInnerParam();
    innerTaken = kTRUE;
  }

  // Add inner/outer track parameters as path-marks.

  Double_t     pbuf[3], vbuf[3];

  AliExternalTrackParam trackParam = *at;

  // take parameters constrained to vertex (if they are)

  if( at->GetConstrainedParam() ){
    trackParam = *at->GetConstrainedParam();
  }
  else if( at->GetInnerParam() ){
    trackParam = *(at->GetInnerParam());
  }
  if( at->GetStatus()&AliESDtrack::kTRDin ){
    // transport to TRD in
    trackParam = *at;
    trackParam.PropagateTo( 290.45, -10.*( cont->GetPropagator()->GetMagField(0,0,0).fZ) );
  }

  TEveRecTrack rt;
  {
    rt.fLabel  = at->GetLabel();
    rt.fIndex  = (Int_t) at->GetID();
    rt.fStatus = (Int_t) at->GetStatus();
    rt.fSign   = (Int_t) trackParam.GetSign();  
    trackParam.GetXYZ(vbuf);
    trackParam.GetPxPyPz(pbuf);    
    rt.fV.Set(vbuf);
    rt.fP.Set(pbuf);
    Double_t ep = at->GetP(), mc = at->GetMass();
    rt.fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
  }

  AliEveTrack* track = new AliEveTrack(&rt, cont->GetPropagator());
  track->SetAttLineAttMarker(cont);
  track->SetName(Form("AliEveTrack %d", at->GetID()));
  track->SetElementTitle(esd_track_title(at));
  track->SetSourceObject(at);


  // Set reference points along the trajectory
  // and the last point

  { 
    TEvePathMark startPoint(TEvePathMark::kReference);
    trackParam.GetXYZ(vbuf);
    trackParam.GetPxPyPz(pbuf);    
    startPoint.fV.Set(vbuf);
    startPoint.fP.Set(pbuf);
    rt.fV.Set(vbuf);
    rt.fP.Set(pbuf);
    Double_t ep = at->GetP(), mc = at->GetMass();
    rt.fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);

    track->AddPathMark( startPoint );    
  }


  if( at->GetTPCPoints(2)>80 ){
  
    //
    // use AliHLTTPCCATrackParam propagator 
    // since AliExternalTrackParam:PropagateTo()
    // has an offset at big distances
    //
    
    AliHLTTPCCATrackParam t;
    AliHLTTPCCATrackConvertor::SetExtParam( t, trackParam );
    
    Double_t x0 = trackParam.GetX();
    Double_t dx = at->GetTPCPoints(2) - x0;
    
    //
    // set a reference at the half of trajectory for better drawing
    //
    
    for( double dxx=dx/2; TMath::Abs(dxx)>=1.; dxx*=.9 ){
      if( !t.TransportToX(x0+dxx, bz, .99 ) ) continue;
      AliHLTTPCCATrackConvertor::GetExtParam( t, trackParam, trackParam.GetAlpha() ); 
      trackParam.GetXYZ(vbuf);
      trackParam.GetPxPyPz(pbuf);
      TEvePathMark midPoint(TEvePathMark::kReference);
      midPoint.fV.Set(vbuf);
      midPoint.fP.Set(pbuf);    
      track->AddPathMark( midPoint );
      break;
    }
    
    //
    // Set a reference at the end of the trajectory
    // and a "decay point", to let the event display know where the track ends
    //
    
    for( ; TMath::Abs(dx)>=1.; dx*=.9 ){
      if( !t.TransportToX(x0+dx, bz, .99 ) ) continue;
      AliHLTTPCCATrackConvertor::GetExtParam( t, trackParam, trackParam.GetAlpha() ); 
      trackParam.GetXYZ(vbuf);
      trackParam.GetPxPyPz(pbuf);
      TEvePathMark endPoint(TEvePathMark::kReference);
      TEvePathMark decPoint(TEvePathMark::kDecay);
      endPoint.fV.Set(vbuf);
      endPoint.fP.Set(pbuf);
      decPoint.fV.Set(vbuf);
      decPoint.fP.Set(pbuf);
      track->AddPathMark( endPoint );
      track->AddPathMark( decPoint );
      break;
    }  
  }

  if (at->IsOn(AliESDtrack::kTPCrefit))
  {
    if ( ! innerTaken)
    {
      esd_track_add_param(track, at->GetInnerParam());
    }
    esd_track_add_param(track, at->GetOuterParam());
  }


  return track;
}

 hlt_esd_tracks.C:1
 hlt_esd_tracks.C:2
 hlt_esd_tracks.C:3
 hlt_esd_tracks.C:4
 hlt_esd_tracks.C:5
 hlt_esd_tracks.C:6
 hlt_esd_tracks.C:7
 hlt_esd_tracks.C:8
 hlt_esd_tracks.C:9
 hlt_esd_tracks.C:10
 hlt_esd_tracks.C:11
 hlt_esd_tracks.C:12
 hlt_esd_tracks.C:13
 hlt_esd_tracks.C:14
 hlt_esd_tracks.C:15
 hlt_esd_tracks.C:16
 hlt_esd_tracks.C:17
 hlt_esd_tracks.C:18
 hlt_esd_tracks.C:19
 hlt_esd_tracks.C:20
 hlt_esd_tracks.C:21
 hlt_esd_tracks.C:22
 hlt_esd_tracks.C:23
 hlt_esd_tracks.C:24
 hlt_esd_tracks.C:25
 hlt_esd_tracks.C:26
 hlt_esd_tracks.C:27
 hlt_esd_tracks.C:28
 hlt_esd_tracks.C:29
 hlt_esd_tracks.C:30
 hlt_esd_tracks.C:31
 hlt_esd_tracks.C:32
 hlt_esd_tracks.C:33
 hlt_esd_tracks.C:34
 hlt_esd_tracks.C:35
 hlt_esd_tracks.C:36
 hlt_esd_tracks.C:37
 hlt_esd_tracks.C:38
 hlt_esd_tracks.C:39
 hlt_esd_tracks.C:40
 hlt_esd_tracks.C:41
 hlt_esd_tracks.C:42
 hlt_esd_tracks.C:43
 hlt_esd_tracks.C:44
 hlt_esd_tracks.C:45
 hlt_esd_tracks.C:46
 hlt_esd_tracks.C:47
 hlt_esd_tracks.C:48
 hlt_esd_tracks.C:49
 hlt_esd_tracks.C:50
 hlt_esd_tracks.C:51
 hlt_esd_tracks.C:52
 hlt_esd_tracks.C:53
 hlt_esd_tracks.C:54
 hlt_esd_tracks.C:55
 hlt_esd_tracks.C:56
 hlt_esd_tracks.C:57
 hlt_esd_tracks.C:58
 hlt_esd_tracks.C:59
 hlt_esd_tracks.C:60
 hlt_esd_tracks.C:61
 hlt_esd_tracks.C:62
 hlt_esd_tracks.C:63
 hlt_esd_tracks.C:64
 hlt_esd_tracks.C:65
 hlt_esd_tracks.C:66
 hlt_esd_tracks.C:67
 hlt_esd_tracks.C:68
 hlt_esd_tracks.C:69
 hlt_esd_tracks.C:70
 hlt_esd_tracks.C:71
 hlt_esd_tracks.C:72
 hlt_esd_tracks.C:73
 hlt_esd_tracks.C:74
 hlt_esd_tracks.C:75
 hlt_esd_tracks.C:76
 hlt_esd_tracks.C:77
 hlt_esd_tracks.C:78
 hlt_esd_tracks.C:79
 hlt_esd_tracks.C:80
 hlt_esd_tracks.C:81
 hlt_esd_tracks.C:82
 hlt_esd_tracks.C:83
 hlt_esd_tracks.C:84
 hlt_esd_tracks.C:85
 hlt_esd_tracks.C:86
 hlt_esd_tracks.C:87
 hlt_esd_tracks.C:88
 hlt_esd_tracks.C:89
 hlt_esd_tracks.C:90
 hlt_esd_tracks.C:91
 hlt_esd_tracks.C:92
 hlt_esd_tracks.C:93
 hlt_esd_tracks.C:94
 hlt_esd_tracks.C:95
 hlt_esd_tracks.C:96
 hlt_esd_tracks.C:97
 hlt_esd_tracks.C:98
 hlt_esd_tracks.C:99
 hlt_esd_tracks.C:100
 hlt_esd_tracks.C:101
 hlt_esd_tracks.C:102
 hlt_esd_tracks.C:103
 hlt_esd_tracks.C:104
 hlt_esd_tracks.C:105
 hlt_esd_tracks.C:106
 hlt_esd_tracks.C:107
 hlt_esd_tracks.C:108
 hlt_esd_tracks.C:109
 hlt_esd_tracks.C:110
 hlt_esd_tracks.C:111
 hlt_esd_tracks.C:112
 hlt_esd_tracks.C:113
 hlt_esd_tracks.C:114
 hlt_esd_tracks.C:115
 hlt_esd_tracks.C:116
 hlt_esd_tracks.C:117
 hlt_esd_tracks.C:118
 hlt_esd_tracks.C:119
 hlt_esd_tracks.C:120
 hlt_esd_tracks.C:121
 hlt_esd_tracks.C:122
 hlt_esd_tracks.C:123
 hlt_esd_tracks.C:124
 hlt_esd_tracks.C:125
 hlt_esd_tracks.C:126
 hlt_esd_tracks.C:127
 hlt_esd_tracks.C:128
 hlt_esd_tracks.C:129
 hlt_esd_tracks.C:130
 hlt_esd_tracks.C:131
 hlt_esd_tracks.C:132
 hlt_esd_tracks.C:133
 hlt_esd_tracks.C:134
 hlt_esd_tracks.C:135
 hlt_esd_tracks.C:136
 hlt_esd_tracks.C:137
 hlt_esd_tracks.C:138
 hlt_esd_tracks.C:139
 hlt_esd_tracks.C:140
 hlt_esd_tracks.C:141
 hlt_esd_tracks.C:142
 hlt_esd_tracks.C:143
 hlt_esd_tracks.C:144
 hlt_esd_tracks.C:145
 hlt_esd_tracks.C:146
 hlt_esd_tracks.C:147
 hlt_esd_tracks.C:148
 hlt_esd_tracks.C:149
 hlt_esd_tracks.C:150
 hlt_esd_tracks.C:151
 hlt_esd_tracks.C:152
 hlt_esd_tracks.C:153
 hlt_esd_tracks.C:154
 hlt_esd_tracks.C:155
 hlt_esd_tracks.C:156
 hlt_esd_tracks.C:157
 hlt_esd_tracks.C:158
 hlt_esd_tracks.C:159
 hlt_esd_tracks.C:160
 hlt_esd_tracks.C:161
 hlt_esd_tracks.C:162
 hlt_esd_tracks.C:163
 hlt_esd_tracks.C:164
 hlt_esd_tracks.C:165
 hlt_esd_tracks.C:166
 hlt_esd_tracks.C:167
 hlt_esd_tracks.C:168
 hlt_esd_tracks.C:169
 hlt_esd_tracks.C:170
 hlt_esd_tracks.C:171
 hlt_esd_tracks.C:172
 hlt_esd_tracks.C:173
 hlt_esd_tracks.C:174
 hlt_esd_tracks.C:175