#ifndef ALITPCEXBEXACT_H
#define ALITPCEXBEXACT_H
#include "AliTPCExB.h"
class AliMagF;
class AliTPCExBExact:public AliTPCExB {
public:
AliTPCExBExact();
AliTPCExBExact(const AliMagF *bField,Double_t driftVelocity,Int_t n=100,
Int_t nx=30,Int_t ny=30,Int_t nz=100);
virtual ~AliTPCExBExact();
virtual void Correct(const Double_t *position,Double_t *corrected);
void TestThisBeautifulObject(const AliMagF *bField,const char* fileName);
protected:
Double_t fDriftVelocity;
private:
AliTPCExBExact& operator=(const AliTPCExBExact&);
AliTPCExBExact(const AliTPCExBExact&);
void TestThisBeautifulObjectGeneric(const char* fileName);
void CreateLookupTable();
void GetE(Double_t *e,const Double_t *x) const;
void GetB(Double_t *b,const Double_t *x) const;
void Motion(const Double_t *x,Double_t t,Double_t *dxdt) const;
void CalculateDistortion(const Double_t *x,Double_t *dist) const;
void DGLStep(Double_t *x,Double_t t,Double_t h) const;
const AliMagF *fkField;
Int_t fkN;
Int_t fkNX;
Int_t fkNY;
Int_t fkNZ;
Double_t fkXMin;
Double_t fkXMax;
Double_t fkYMin;
Double_t fkYMax;
Double_t fkZMin;
Double_t fkZMax;
Int_t fkNLook;
Double_t *fkLook;
static const Double_t fgkEM;
static const Double_t fgkDriftField;
ClassDef(AliTPCExBExact,1)
};
#endif