ROOT logo
// $Id$
// Author: Matevz Tadel 2009

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

#include "AliEveTrack.h"

#include "AliESDtrack.h"
#include "AliAODTrack.h"

#include <TROOT.h>
#include <TMath.h>

//______________________________________________________________________________
// Full description of AliEveTrack
//

ClassImp(AliEveTrack)

//______________________________________________________________________________
AliEveTrack::AliEveTrack() :
  TEveTrack()
{
  // Constructor.
}

//______________________________________________________________________________
AliEveTrack::AliEveTrack(TParticle* t, Int_t label, TEveTrackPropagator* prop) :
  TEveTrack(t, label, prop)
{
  // Constructor.
}

//______________________________________________________________________________
AliEveTrack::AliEveTrack(TEveMCTrack*  t, TEveTrackPropagator* prop) :
  TEveTrack(t, prop)
{
  // Constructor.
}

//______________________________________________________________________________
AliEveTrack::AliEveTrack(TEveRecTrack* t, TEveTrackPropagator* prop) :
  TEveTrack(t, prop)
{
  // Constructor.
}

//______________________________________________________________________________
AliEveTrack::AliEveTrack(AliESDtrack* t, TEveTrackPropagator* prop) :
  TEveTrack()
{
  // Constructor.

  Double_t buf[3];
  t->GetXYZ(buf);    fV.Set(buf);
  t->GetPxPyPz(buf); fP.Set(buf);

  Double_t ep = t->GetP(), mc = t->GetMass();
  fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
  // fPdg = 0; // ??? Use PID ?
  fCharge = TMath::Nint(t->GetSign());
  
  fLabel = t->GetLabel();
  fIndex = t->GetID();
  // fStatus = (Int_t) t->GetStatus(); // RRRR Uncomment for root-5.26.

  SetPropagator(prop);
}

//______________________________________________________________________________
AliEveTrack::AliEveTrack(AliAODTrack* t, TEveTrackPropagator* prop) :
  TEveTrack()
{
  // Constructor.

  Double_t buf[3];

  t->GetXYZ(buf); fV.Set(buf);
  t->PxPyPz(buf); fP.Set(buf);

  // fBeta = 0; // Unknown, no mass function
  // fPdg = 0;  // ??? Use PID ?
  fCharge= t->Charge();
  
  fLabel = t->GetLabel();
  fIndex = t->GetID();
  // fStatus = (Int_t) t->GetStatus(); // RRRR Uncomment for root-5.26.

  SetPropagator(prop);
}

//______________________________________________________________________________
AliEveTrack::AliEveTrack(const AliEveTrack& t) :
  TEveTrack(t)
{
  // Copy constructor.
}

//______________________________________________________________________________
AliEveTrack::~AliEveTrack()
{
  // Destructor.
}

//______________________________________________________________________________
void AliEveTrack::SetStartParams(const AliExternalTrackParam* tp)
{
  // Set the initial vertex / momentum of eve track from 'tp'.

  Double_t buf[3];

  tp->GetXYZ(buf); fV.Set(buf);
  tp->PxPyPz(buf); fP.Set(buf);
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveTrack::ImportHits()
{
  // Import hits with same label as the track.
  // Uses macro "hits_from_label.C".

  TEveUtil::LoadMacro("hits_from_label.C");
  gROOT->ProcessLine(Form("hits_from_label(%d, (TEveElement*)%p);",
                          fLabel, this));
}

//______________________________________________________________________________
void AliEveTrack::ImportClustersFromLabel()
{
  // Import clusters with same label as the track.
  // Uses macro "clusters_from_label.C".

  TEveUtil::LoadMacro("clusters_from_label.C");
  gROOT->ProcessLine(Form("clusters_from_label(%d, (TEveElement*)%p);",
                          fLabel, this));
}

//______________________________________________________________________________
void AliEveTrack::ImportClustersFromIndex()
{
  // Import clusters marked with same reconstructed track index as the track.
  // Uses macro "clusters_from_index.C".

  static const TEveException kEH("AliEveTrack::ImportClustersFromIndex ");

  if (fIndex == kMinInt)
    throw kEH + "index not set.";

  TEveUtil::LoadMacro("clusters_from_index.C");
  gROOT->ProcessLine(Form("clusters_from_index(%d, (TEveElement*)%p);",
                          fIndex, this));
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveTrack::ImportKine()
{
   // Import kinematics of the track's label recursively.
   // Uses macro "kine_tracks.C".

   static const TEveException kEH("AliEveTrack::ImportKine ");

   if (fLabel == kMinInt)
      throw kEH + "label not set.";

   Int_t label;
   if (fLabel < 0) {
      Warning(kEH, "label negative, taking absolute value.");
      label = -fLabel;
   } else {
      label = fLabel;
   }

   TEveUtil::LoadMacro("kine_tracks.C");
   gROOT->ProcessLine(Form("kine_track(%d, kTRUE, kTRUE, kTRUE, kTRUE, (TEveElement*)%p);",
                           label, this));

}

//______________________________________________________________________________
void AliEveTrack::ImportKineWithArgs(Bool_t importMother, Bool_t importDaugters,
                                     Bool_t colorPdg,     Bool_t recurse)
{
  // Import kinematics of the track's label. Arguments steer the
  // import process:
  //   importMother     import particle with track's label
  //   importDaugters   import direct daughters of label
  //   colorPdg         color kinematics by PDG code
  //   recurse          recursive import of daughters' daughters
  // Uses macro "kine_tracks.C".

  static const TEveException kEH("AliEveTrack::ImportKineWithArgs ");

  if (fLabel == kMinInt)
    throw kEH + "label not set.";

  Int_t label;
  if (fLabel < 0) {
    Warning(kEH, "label negative, taking absolute value.");
    label = -fLabel;
  } else {
    label = fLabel;
  }

  TEveUtil::LoadMacro("kine_tracks.C");
  gROOT->ProcessLine(Form("kine_track(%d, %d, %d, %d, %d, (TEveElement*)%p);",
                          label, importMother, importDaugters, colorPdg, recurse, this));
}

//______________________________________________________________________________
void AliEveTrack::PrintKineStack()
{
  // Print kinematics pertaining to track's label.
  // Uses macro "print_kine_from_label.C".

  static const TEveException kEH("AliEveTrack::PrintKineStack ");

  if (fLabel == kMinInt)
    throw kEH + "label not set.";

  Int_t label;
  if (fLabel < 0) {
    Warning(kEH, "label negative, taking absolute value.");
    label = -fLabel;
  } else {
    label = fLabel;
  }

  TEveUtil::LoadMacro("print_kine_from_label.C");
  gROOT->ProcessLine(Form("print_kine_from_label(%d);", label));
}

//______________________________________________________________________________
void AliEveTrack::SecSelected(TEveTrack* track)
{
  // Emits "SecSelected(TEveTrack*)" signal.
  // Called from TEveTrackGL on secondary-selection.

  Emit("SecSelected(TEveTrack*)", (Long_t)track);
  SecSelectedTrack((AliEveTrack*) track);
}

//______________________________________________________________________________
void AliEveTrack::SecSelectedTrack(AliEveTrack* track)
{
  // Emits "SecSelectedTrack(AliEveTrack*)" signal.

  Emit("SecSelectedTrack(AliEveTrack*)", (Long_t)track);
}

//______________________________________________________________________________
AliESDtrack* AliEveTrack::GetESDTrack() const
{
  // Return source object dyn-casted to AliESDtrack.

  return dynamic_cast<AliESDtrack*>(GetSourceObject());
}

//______________________________________________________________________________
AliAODTrack* AliEveTrack::GetAODTrack() const
{
  // Return source object dyn-casted to AliAODTrack.

  return dynamic_cast<AliAODTrack*>(GetSourceObject());
}
 AliEveTrack.cxx:1
 AliEveTrack.cxx:2
 AliEveTrack.cxx:3
 AliEveTrack.cxx:4
 AliEveTrack.cxx:5
 AliEveTrack.cxx:6
 AliEveTrack.cxx:7
 AliEveTrack.cxx:8
 AliEveTrack.cxx:9
 AliEveTrack.cxx:10
 AliEveTrack.cxx:11
 AliEveTrack.cxx:12
 AliEveTrack.cxx:13
 AliEveTrack.cxx:14
 AliEveTrack.cxx:15
 AliEveTrack.cxx:16
 AliEveTrack.cxx:17
 AliEveTrack.cxx:18
 AliEveTrack.cxx:19
 AliEveTrack.cxx:20
 AliEveTrack.cxx:21
 AliEveTrack.cxx:22
 AliEveTrack.cxx:23
 AliEveTrack.cxx:24
 AliEveTrack.cxx:25
 AliEveTrack.cxx:26
 AliEveTrack.cxx:27
 AliEveTrack.cxx:28
 AliEveTrack.cxx:29
 AliEveTrack.cxx:30
 AliEveTrack.cxx:31
 AliEveTrack.cxx:32
 AliEveTrack.cxx:33
 AliEveTrack.cxx:34
 AliEveTrack.cxx:35
 AliEveTrack.cxx:36
 AliEveTrack.cxx:37
 AliEveTrack.cxx:38
 AliEveTrack.cxx:39
 AliEveTrack.cxx:40
 AliEveTrack.cxx:41
 AliEveTrack.cxx:42
 AliEveTrack.cxx:43
 AliEveTrack.cxx:44
 AliEveTrack.cxx:45
 AliEveTrack.cxx:46
 AliEveTrack.cxx:47
 AliEveTrack.cxx:48
 AliEveTrack.cxx:49
 AliEveTrack.cxx:50
 AliEveTrack.cxx:51
 AliEveTrack.cxx:52
 AliEveTrack.cxx:53
 AliEveTrack.cxx:54
 AliEveTrack.cxx:55
 AliEveTrack.cxx:56
 AliEveTrack.cxx:57
 AliEveTrack.cxx:58
 AliEveTrack.cxx:59
 AliEveTrack.cxx:60
 AliEveTrack.cxx:61
 AliEveTrack.cxx:62
 AliEveTrack.cxx:63
 AliEveTrack.cxx:64
 AliEveTrack.cxx:65
 AliEveTrack.cxx:66
 AliEveTrack.cxx:67
 AliEveTrack.cxx:68
 AliEveTrack.cxx:69
 AliEveTrack.cxx:70
 AliEveTrack.cxx:71
 AliEveTrack.cxx:72
 AliEveTrack.cxx:73
 AliEveTrack.cxx:74
 AliEveTrack.cxx:75
 AliEveTrack.cxx:76
 AliEveTrack.cxx:77
 AliEveTrack.cxx:78
 AliEveTrack.cxx:79
 AliEveTrack.cxx:80
 AliEveTrack.cxx:81
 AliEveTrack.cxx:82
 AliEveTrack.cxx:83
 AliEveTrack.cxx:84
 AliEveTrack.cxx:85
 AliEveTrack.cxx:86
 AliEveTrack.cxx:87
 AliEveTrack.cxx:88
 AliEveTrack.cxx:89
 AliEveTrack.cxx:90
 AliEveTrack.cxx:91
 AliEveTrack.cxx:92
 AliEveTrack.cxx:93
 AliEveTrack.cxx:94
 AliEveTrack.cxx:95
 AliEveTrack.cxx:96
 AliEveTrack.cxx:97
 AliEveTrack.cxx:98
 AliEveTrack.cxx:99
 AliEveTrack.cxx:100
 AliEveTrack.cxx:101
 AliEveTrack.cxx:102
 AliEveTrack.cxx:103
 AliEveTrack.cxx:104
 AliEveTrack.cxx:105
 AliEveTrack.cxx:106
 AliEveTrack.cxx:107
 AliEveTrack.cxx:108
 AliEveTrack.cxx:109
 AliEveTrack.cxx:110
 AliEveTrack.cxx:111
 AliEveTrack.cxx:112
 AliEveTrack.cxx:113
 AliEveTrack.cxx:114
 AliEveTrack.cxx:115
 AliEveTrack.cxx:116
 AliEveTrack.cxx:117
 AliEveTrack.cxx:118
 AliEveTrack.cxx:119
 AliEveTrack.cxx:120
 AliEveTrack.cxx:121
 AliEveTrack.cxx:122
 AliEveTrack.cxx:123
 AliEveTrack.cxx:124
 AliEveTrack.cxx:125
 AliEveTrack.cxx:126
 AliEveTrack.cxx:127
 AliEveTrack.cxx:128
 AliEveTrack.cxx:129
 AliEveTrack.cxx:130
 AliEveTrack.cxx:131
 AliEveTrack.cxx:132
 AliEveTrack.cxx:133
 AliEveTrack.cxx:134
 AliEveTrack.cxx:135
 AliEveTrack.cxx:136
 AliEveTrack.cxx:137
 AliEveTrack.cxx:138
 AliEveTrack.cxx:139
 AliEveTrack.cxx:140
 AliEveTrack.cxx:141
 AliEveTrack.cxx:142
 AliEveTrack.cxx:143
 AliEveTrack.cxx:144
 AliEveTrack.cxx:145
 AliEveTrack.cxx:146
 AliEveTrack.cxx:147
 AliEveTrack.cxx:148
 AliEveTrack.cxx:149
 AliEveTrack.cxx:150
 AliEveTrack.cxx:151
 AliEveTrack.cxx:152
 AliEveTrack.cxx:153
 AliEveTrack.cxx:154
 AliEveTrack.cxx:155
 AliEveTrack.cxx:156
 AliEveTrack.cxx:157
 AliEveTrack.cxx:158
 AliEveTrack.cxx:159
 AliEveTrack.cxx:160
 AliEveTrack.cxx:161
 AliEveTrack.cxx:162
 AliEveTrack.cxx:163
 AliEveTrack.cxx:164
 AliEveTrack.cxx:165
 AliEveTrack.cxx:166
 AliEveTrack.cxx:167
 AliEveTrack.cxx:168
 AliEveTrack.cxx:169
 AliEveTrack.cxx:170
 AliEveTrack.cxx:171
 AliEveTrack.cxx:172
 AliEveTrack.cxx:173
 AliEveTrack.cxx:174
 AliEveTrack.cxx:175
 AliEveTrack.cxx:176
 AliEveTrack.cxx:177
 AliEveTrack.cxx:178
 AliEveTrack.cxx:179
 AliEveTrack.cxx:180
 AliEveTrack.cxx:181
 AliEveTrack.cxx:182
 AliEveTrack.cxx:183
 AliEveTrack.cxx:184
 AliEveTrack.cxx:185
 AliEveTrack.cxx:186
 AliEveTrack.cxx:187
 AliEveTrack.cxx:188
 AliEveTrack.cxx:189
 AliEveTrack.cxx:190
 AliEveTrack.cxx:191
 AliEveTrack.cxx:192
 AliEveTrack.cxx:193
 AliEveTrack.cxx:194
 AliEveTrack.cxx:195
 AliEveTrack.cxx:196
 AliEveTrack.cxx:197
 AliEveTrack.cxx:198
 AliEveTrack.cxx:199
 AliEveTrack.cxx:200
 AliEveTrack.cxx:201
 AliEveTrack.cxx:202
 AliEveTrack.cxx:203
 AliEveTrack.cxx:204
 AliEveTrack.cxx:205
 AliEveTrack.cxx:206
 AliEveTrack.cxx:207
 AliEveTrack.cxx:208
 AliEveTrack.cxx:209
 AliEveTrack.cxx:210
 AliEveTrack.cxx:211
 AliEveTrack.cxx:212
 AliEveTrack.cxx:213
 AliEveTrack.cxx:214
 AliEveTrack.cxx:215
 AliEveTrack.cxx:216
 AliEveTrack.cxx:217
 AliEveTrack.cxx:218
 AliEveTrack.cxx:219
 AliEveTrack.cxx:220
 AliEveTrack.cxx:221
 AliEveTrack.cxx:222
 AliEveTrack.cxx:223
 AliEveTrack.cxx:224
 AliEveTrack.cxx:225
 AliEveTrack.cxx:226
 AliEveTrack.cxx:227
 AliEveTrack.cxx:228
 AliEveTrack.cxx:229
 AliEveTrack.cxx:230
 AliEveTrack.cxx:231
 AliEveTrack.cxx:232
 AliEveTrack.cxx:233
 AliEveTrack.cxx:234
 AliEveTrack.cxx:235
 AliEveTrack.cxx:236
 AliEveTrack.cxx:237
 AliEveTrack.cxx:238
 AliEveTrack.cxx:239
 AliEveTrack.cxx:240
 AliEveTrack.cxx:241
 AliEveTrack.cxx:242
 AliEveTrack.cxx:243
 AliEveTrack.cxx:244
 AliEveTrack.cxx:245
 AliEveTrack.cxx:246
 AliEveTrack.cxx:247
 AliEveTrack.cxx:248
 AliEveTrack.cxx:249
 AliEveTrack.cxx:250
 AliEveTrack.cxx:251
 AliEveTrack.cxx:252
 AliEveTrack.cxx:253
 AliEveTrack.cxx:254
 AliEveTrack.cxx:255
 AliEveTrack.cxx:256
 AliEveTrack.cxx:257
 AliEveTrack.cxx:258
 AliEveTrack.cxx:259
 AliEveTrack.cxx:260
 AliEveTrack.cxx:261
 AliEveTrack.cxx:262
 AliEveTrack.cxx:263
 AliEveTrack.cxx:264
 AliEveTrack.cxx:265
 AliEveTrack.cxx:266
 AliEveTrack.cxx:267
 AliEveTrack.cxx:268
 AliEveTrack.cxx:269
 AliEveTrack.cxx:270
 AliEveTrack.cxx:271
 AliEveTrack.cxx:272