ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

#include "TVirtualMC.h"
#include "TParticle.h"

#include "AliTrackReference.h"
#include <Riostream.h>

// 
// Track Reference object is created every time particle is 
// crossing detector bounds. The object is created by Step Manager
//
// The class stores the following informations:
// track label, 
// track position: X,Y,X
// track momentum px, py, pz
// track length and time of fligth: both in cm
// status bits from Monte Carlo
//


using std::endl;
using std::cout;
ClassImp(AliTrackReference)

//_______________________________________________________________________
 AliTrackReference::AliTrackReference():
   TObject(),
   fTrack(0),
   fX(0),
   fY(0),
   fZ(0),
   fPx(0),
   fPy(0),
   fPz(0),
   fLength(0),
   fTime(0),
   fUserId(0),
   fDetectorId(-999)
{
  //
  // Default constructor
  // Creates empty object

  for(Int_t i=0; i<16; i++) ResetBit(BIT(i));
}

AliTrackReference::AliTrackReference(const AliTrackReference &tr) :
  TObject(tr),
  fTrack(tr.fTrack),
  fX(tr.fX),
  fY(tr.fY),
  fZ(tr.fZ),
  fPx(tr.fPx),
  fPy(tr.fPy),
  fPz(tr.fPz),
  fLength(tr.fLength),
  fTime(tr.fTime),
  fUserId(tr.fUserId),
  fDetectorId(tr.fDetectorId)
{
    // Copy Constructor
}

//_______________________________________________________________________
AliTrackReference::AliTrackReference(Int_t label, Int_t id) :
  TObject(),
  fTrack(label),
  fX(0),
  fY(0),
  fZ(0),
  fPx(0),
  fPy(0),
  fPz(0),
  fLength(TVirtualMC::GetMC()->TrackLength()),
  fTime(TVirtualMC::GetMC()->TrackTime()),
  fUserId(0),
  fDetectorId(id)
{
  //
  // Create Reference object out of label and
  // data in TVirtualMC object
  //
  // Creates an object and fill all parameters 
  // from data in VirtualMC
  //
  // Sylwester Radomski, (S.Radomski@gsi.de)
  // GSI, Jan 31, 2003
  //
    
  Double_t vec[4];
  
  TVirtualMC::GetMC()->TrackPosition(vec[0],vec[1],vec[2]);

  fX = vec[0];
  fY = vec[1];
  fZ = vec[2];
  
  TVirtualMC::GetMC()->TrackMomentum(vec[0],vec[1],vec[2],vec[3]);
  
  fPx = vec[0];
  fPy = vec[1];
  fPz = vec[2];

  // Set Up status code 
  // Copy Bits from virtual MC

  for(Int_t i=14; i<22; i++) ResetBit(BIT(i));

  SetBit(BIT(14), TVirtualMC::GetMC()->IsNewTrack());
  SetBit(BIT(15), TVirtualMC::GetMC()->IsTrackAlive());
  SetBit(BIT(16), TVirtualMC::GetMC()->IsTrackDisappeared());
  SetBit(BIT(17), TVirtualMC::GetMC()->IsTrackEntering());
  SetBit(BIT(18), TVirtualMC::GetMC()->IsTrackExiting());
  SetBit(BIT(19), TVirtualMC::GetMC()->IsTrackInside());
  SetBit(BIT(20), TVirtualMC::GetMC()->IsTrackOut());
  SetBit(BIT(21), TVirtualMC::GetMC()->IsTrackStop()); 
  //
  // This particle has to be kept

}
/*
AliExternalTrackParam * AliTrackReference::MakeTrack(const AliTrackReference *ref, Double_t mass)
{
  //
  // Make dummy track from the track reference 
  // negative mass means opposite charge 
  //
  Double_t xx[5];
  Double_t cc[15];
  for (Int_t i=0;i<15;i++) cc[i]=0;
  Double_t x = ref->X(), y = ref->Y(), z = ref->Z();
  Double_t alpha = TMath::ATan2(y,x);
  Double_t xr = TMath::Sqrt(x*x+y*y);
  xx[0] = ref->LocalY();
  xx[1] = z;
  xx[3] = ref->Pz()/ref->Pt();
  xx[4] = 1./ref->Pt(); 
  if (mass<0) xx[4]*=-1.;  // negative mass - negative direction
  Double_t alphap = TMath::ATan2(ref->Py(),ref->Px())-alpha;
  if (alphap> TMath::Pi()) alphap-=TMath::Pi();
  if (alphap<-TMath::Pi()) alphap+=TMath::Pi();
  xx[2] = TMath::Sin(alphap);

  AliExternalTrackParam * track = new  AliExternalTrackParam(xr,alpha,xx,cc);
  return track;
}
*/
//_______________________________________________________________________
void
AliTrackReference::Print(Option_t* /*opt*/) const
{
  cout << Form("Label %d P=%7.2f (PX,PY,PZ)=(%7.2f,%7.2f,%7.2f) (X,Y,Z)=(%7.2f,%7.2f,%7.2f)"
               " Length=%7.2f Time=%7.2f UserId=%d",
	       Label(),P(),Px(),Py(),Pz(),X(),Y(),Z(),GetLength(),GetTime(),UserId()) << endl;
}

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