#ifndef ALITRACKERBASE_H
#define ALITRACKERBASE_H
#include <TObject.h>
#include <TGeoGlobalMagField.h>
#include "AliMagF.h"
class AliExternalTrackParam;
class AliTrackPoint;
class AliTrackPointArray;
class AliTrackerBase : public TObject {
public:
AliTrackerBase();
virtual ~AliTrackerBase(){}
void SetVertex(const Double_t *xyz, const Double_t *ers=0) {
fX=xyz[0]; fY=xyz[1]; fZ=xyz[2];
if (ers) { fSigmaX=ers[0]; fSigmaY=ers[1]; fSigmaZ=ers[2]; }
}
Double_t GetX() const {return fX;}
Double_t GetY() const {return fY;}
Double_t GetZ() const {return fZ;}
Double_t GetSigmaX() const {return fSigmaX;}
Double_t GetSigmaY() const {return fSigmaY;}
Double_t GetSigmaZ() const {return fSigmaZ;}
static Double_t GetTrackPredictedChi2(AliExternalTrackParam *track,
Double_t mass, Double_t step,
const AliExternalTrackParam *backup);
static void UpdateTrack(AliExternalTrackParam&,
const AliExternalTrackParam&);
static
Double_t MeanMaterialBudget(const Double_t *start, const Double_t *end,
Double_t *mparam);
static
Bool_t PropagateTrackTo(AliExternalTrackParam *track, Double_t x, Double_t m,
Double_t maxStep, Bool_t rotateTo=kTRUE, Double_t maxSnp=0.8, Int_t sign=0, Bool_t addTimeStep=kFALSE, Bool_t correctMaterialBudget=kTRUE);
static Int_t PropagateTrackTo2(AliExternalTrackParam *track, Double_t x, Double_t m,
Double_t maxStep, Bool_t rotateTo=kTRUE, Double_t maxSnp=0.8, Int_t sign=0, Bool_t addTimeStep=kFALSE, Bool_t correctMaterialBudget=kTRUE);
static Bool_t PropagateTrackToBxByBz(AliExternalTrackParam *track, Double_t x,
Double_t m,Double_t maxStep, Bool_t rotateTo=kTRUE, Double_t maxSnp=0.8,Int_t sign=0, Bool_t addTimeStep=kFALSE);
static Double_t GetBz(const Double_t *r);
static void GetBxByBz(const Double_t r[3], Double_t b[3]);
static Double_t GetBz();
static Bool_t UniformField();
static Double_t MakeC(Double_t x1,Double_t y1,
Double_t x2,Double_t y2,
Double_t x3,Double_t y3);
static Double_t MakeSnp(Double_t x1,Double_t y1,
Double_t x2,Double_t y2,
Double_t x3,Double_t y3);
static Double_t MakeTgl(Double_t x1,Double_t y1,
Double_t x2,Double_t y2,
Double_t z1,Double_t z2);
static Double_t MakeTgl(Double_t x1,Double_t y1,
Double_t x2,Double_t y2,
Double_t z1,Double_t z2,Double_t c);
static AliExternalTrackParam *MakeSeed(AliTrackPoint &point0,
AliTrackPoint &point1,
AliTrackPoint &point2);
static Double_t FitTrack(AliExternalTrackParam *trackParam,
AliTrackPointArray *pointArray,
Double_t mass, Double_t maxStep);
protected:
AliTrackerBase(const AliTrackerBase &atr);
private:
AliTrackerBase & operator=(const AliTrackerBase & atr);
Double_t fX;
Double_t fY;
Double_t fZ;
Double_t fSigmaX;
Double_t fSigmaY;
Double_t fSigmaZ;
ClassDef(AliTrackerBase,1)
};
inline Bool_t AliTrackerBase::UniformField()
{
AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
return fld ? fld->IsUniform():kTRUE;
}
#endif