* 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
//_______________________________________________________________________
AliTrackReference::AliTrackReference():
+ TObject(),
fTrack(0),
fX(0),
fY(0),
fPx(0),
fPy(0),
fPz(0),
- fLength(0)
+ fLength(0),
+ fTime(0),
+ fUserId(0)
{
//
// Default constructor
}
//_______________________________________________________________________
-AliTrackReference::AliTrackReference(Int_t label) {
+AliTrackReference::AliTrackReference(Int_t label) :
+ TObject(),
+ fTrack(label),
+ fX(0),
+ fY(0),
+ fZ(0),
+ fPx(0),
+ fPy(0),
+ fPz(0),
+ fLength(gMC->TrackLength()),
+ fTime(gMC->TrackTime()),
+ fUserId(0)
+{
//
// Create Reference object out of label and
// data in TVirtualMC object
// GSI, Jan 31, 2003
//
- TLorentzVector vec;
+ Double_t vec[4];
- fTrack = label;
- fLength = gMC->TrackLength();
- fTime = gMC->TrackTime();
-
- gMC->TrackPosition(vec);
+ gMC->TrackPosition(vec[0],vec[1],vec[2]);
fX = vec[0];
fY = vec[1];
fZ = vec[2];
- gMC->TrackMomentum(vec);
+ gMC->TrackMomentum(vec[0],vec[1],vec[2],vec[3]);
fPx = vec[0];
fPy = vec[1];
SetBit(BIT(7), gMC->IsTrackStop());
}
//_______________________________________________________________________
+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;
+}
+