ROOT logo
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

////
// An exact implementation of the ExB effect.
////

#ifndef ALITPCEXBEXACT_H
#define ALITPCEXBEXACT_H

#include "AliTPCExB.h"

class AliMagF;

class AliTPCExBExact:public AliTPCExB  {
public:
  AliTPCExBExact(); // just for the I/O stuff
  //AliTPCExBExact(const AliMagF *bFieldMap,Double_t driftVelocity,Int_t n=100);
  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 AliFieldMap *bFieldMap,const char* fileName);
  void TestThisBeautifulObject(const AliMagF *bField,const char* fileName);
protected:
  Double_t fDriftVelocity; // The electron drift velocity.
private:
  AliTPCExBExact& operator=(const AliTPCExBExact&); // don't assign me
  AliTPCExBExact(const AliTPCExBExact&); // don't copy me
  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 AliFieldMap *fkMap; //! the magnetic field map as supplied by the user
  const AliMagF *fkField;   //! the magnetic field as supplied by the user
  Int_t fkN;        // max number of integration steps
  Int_t fkNX;       // field mesh points in x direction
  Int_t fkNY;       // field mesh points in y direction
  Int_t fkNZ;       // field mesh points in z direction
  Double_t fkXMin;  // the first grid point in x direction
  Double_t fkXMax;  // the last grid point in x direction
  Double_t fkYMin;  // the first grid point in y direction
  Double_t fkYMax;  // the last grid point in y direction
  Double_t fkZMin;  // the first grid point in z direction
  Double_t fkZMax;  // the last grid point in z direction
  Int_t fkNLook;    // size of the lookup table
  Double_t *fkLook; //[fkNLook] the great lookup table
  static const Double_t fgkEM; //! elementary charge over electron mass (C/kg)
  static const Double_t fgkDriftField; //! the TPC drift field (V/m) (modulus)

  ClassDef(AliTPCExBExact,1)
};

#endif
 AliTPCExBExact.h:1
 AliTPCExBExact.h:2
 AliTPCExBExact.h:3
 AliTPCExBExact.h:4
 AliTPCExBExact.h:5
 AliTPCExBExact.h:6
 AliTPCExBExact.h:7
 AliTPCExBExact.h:8
 AliTPCExBExact.h:9
 AliTPCExBExact.h:10
 AliTPCExBExact.h:11
 AliTPCExBExact.h:12
 AliTPCExBExact.h:13
 AliTPCExBExact.h:14
 AliTPCExBExact.h:15
 AliTPCExBExact.h:16
 AliTPCExBExact.h:17
 AliTPCExBExact.h:18
 AliTPCExBExact.h:19
 AliTPCExBExact.h:20
 AliTPCExBExact.h:21
 AliTPCExBExact.h:22
 AliTPCExBExact.h:23
 AliTPCExBExact.h:24
 AliTPCExBExact.h:25
 AliTPCExBExact.h:26
 AliTPCExBExact.h:27
 AliTPCExBExact.h:28
 AliTPCExBExact.h:29
 AliTPCExBExact.h:30
 AliTPCExBExact.h:31
 AliTPCExBExact.h:32
 AliTPCExBExact.h:33
 AliTPCExBExact.h:34
 AliTPCExBExact.h:35
 AliTPCExBExact.h:36
 AliTPCExBExact.h:37
 AliTPCExBExact.h:38
 AliTPCExBExact.h:39
 AliTPCExBExact.h:40
 AliTPCExBExact.h:41
 AliTPCExBExact.h:42
 AliTPCExBExact.h:43
 AliTPCExBExact.h:44
 AliTPCExBExact.h:45
 AliTPCExBExact.h:46
 AliTPCExBExact.h:47
 AliTPCExBExact.h:48
 AliTPCExBExact.h:49
 AliTPCExBExact.h:50
 AliTPCExBExact.h:51
 AliTPCExBExact.h:52
 AliTPCExBExact.h:53
 AliTPCExBExact.h:54
 AliTPCExBExact.h:55
 AliTPCExBExact.h:56
 AliTPCExBExact.h:57