]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliTrackReference.cxx
AliStack.h not needed.
[u/mrichter/AliRoot.git] / STEER / AliTrackReference.cxx
index ffd513bc276a71ebc15fa92c250c7f0b3ee602a9..bb4ee0d605ca6ee92743cbc77417e6dbad13828b 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
 
-#include "AliTrackReference.h"
+#include "TVirtualMC.h"
 #include "TParticle.h"
-#include "AliRun.h"
-#include "TLorentzVector.h"
+
+#include "AliTrackReference.h"
+#include "AliExternalTrackParam.h"
+#include "AliKalmanTrack.h"
+#include <Riostream.h>
 
 // 
 // Track Reference object is created every time particle is 
@@ -36,6 +40,7 @@ ClassImp(AliTrackReference)
 
 //_______________________________________________________________________
  AliTrackReference::AliTrackReference():
+   TObject(),
    fTrack(0),
    fX(0),
    fY(0),
@@ -43,7 +48,10 @@ ClassImp(AliTrackReference)
    fPx(0),
    fPy(0),
    fPz(0),
-   fLength(0)
+   fLength(0),
+   fTime(0),
+   fUserId(0),
+   fDetectorId(-999)
 {
   //
   // Default constructor
@@ -52,8 +60,38 @@ ClassImp(AliTrackReference)
   for(Int_t i=0; i<16; i++) ResetBit(BIT(i));
 }
 
+AliTrackReference::AliTrackReference(const AliTrackReference &tr) :
+  TObject(),
+  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, TVirtualMC *vMC) {
+AliTrackReference::AliTrackReference(Int_t label, Int_t id) :
+  TObject(),
+  fTrack(label),
+  fX(0),
+  fY(0),
+  fZ(0),
+  fPx(0),
+  fPy(0),
+  fPz(0),
+  fLength(gMC->TrackLength()),
+  fTime(gMC->TrackTime()),
+  fUserId(0),
+  fDetectorId(id)
+{
   //
   // Create Reference object out of label and
   // data in TVirtualMC object
@@ -64,20 +102,16 @@ AliTrackReference::AliTrackReference(Int_t label, TVirtualMC *vMC) {
   // Sylwester Radomski, (S.Radomski@gsi.de)
   // GSI, Jan 31, 2003
   //
-
-  TLorentzVector vec;
+    
+  Double_t vec[4];
   
-  fTrack = label;
-  fLength = vMC->TrackLength();
-  fTime = vMC->TrackTime();
-
-  vMC->TrackPosition(vec);
+  gMC->TrackPosition(vec[0],vec[1],vec[2]);
 
   fX = vec[0];
   fY = vec[1];
   fZ = vec[2];
   
-  vMC->TrackMomentum(vec);
+  gMC->TrackMomentum(vec[0],vec[1],vec[2],vec[3]);
   
   fPx = vec[0];
   fPy = vec[1];
@@ -88,13 +122,51 @@ AliTrackReference::AliTrackReference(Int_t label, TVirtualMC *vMC) {
 
   for(Int_t i=0; i<16; i++) ResetBit(BIT(i));
 
-  SetBit(BIT(0), vMC->IsNewTrack());
-  SetBit(BIT(1), vMC->IsTrackAlive());
-  SetBit(BIT(2), vMC->IsTrackDisappeared());
-  SetBit(BIT(3), vMC->IsTrackEntering());
-  SetBit(BIT(4), vMC->IsTrackExiting());
-  SetBit(BIT(5), vMC->IsTrackInside());
-  SetBit(BIT(6), vMC->IsTrackOut());
-  SetBit(BIT(7), vMC->IsTrackStop()); 
+  SetBit(BIT(0), gMC->IsNewTrack());
+  SetBit(BIT(1), gMC->IsTrackAlive());
+  SetBit(BIT(2), gMC->IsTrackDisappeared());
+  SetBit(BIT(3), gMC->IsTrackEntering());
+  SetBit(BIT(4), gMC->IsTrackExiting());
+  SetBit(BIT(5), gMC->IsTrackInside());
+  SetBit(BIT(6), gMC->IsTrackOut());
+  SetBit(BIT(7), gMC->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 (X,Y,Z)=(%7.2f,%7.2f,%7.2f) (PX,PY,PZ)=(%7.2f,%7.2f,%7.2f)"
+               " Length=%7.2f Time=%7.2f UserId=%d",
+               Label(),P(),Px(),Py(),Pz(),X(),Y(),Z(),GetLength(),GetTime()) << endl;
+}
+