]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliMagF.h
const enum changed to enum.
[u/mrichter/AliRoot.git] / STEER / AliMagF.h
1 #ifndef AliMagF_H
2 #define AliMagF_H
3
4 #include "TNamed.h"
5 #include "TVector.h"
6
7 enum Field_t {Undef=1, Const=1, ConMesh=2};
8
9 class AliMagF : public TNamed {
10
11 protected:
12   Int_t     fMap;    // Field Map identifier
13   Int_t     fType;   // Mag Field type
14   Int_t     fInteg;  // Integration method as indicated in Geant
15   Float_t   fFactor; // Multiplicative factor
16   Float_t   fMax;    // Max Field as indicated in Geant
17
18 public:
19   AliMagF(){}
20   AliMagF(const char *name, const char *title, const Int_t integ, const Int_t map, 
21           const Float_t factor, const Float_t fmax);
22   virtual ~AliMagF() {}
23   virtual void Field(Float_t *x, Float_t *b);
24   virtual Int_t Type() {return fType;}
25   virtual Float_t Max() const {return fMax;}
26   virtual Int_t Map() const {return fMap;}
27   virtual Int_t Integ() const {return fInteg;}
28   virtual Float_t Factor() const {return fFactor;}
29   virtual void ReadField() {}
30   
31   ClassDef(AliMagF,1)  //Base class for all Alice MagField
32 };
33
34 class AliMagFC  : public AliMagF
35 {
36   //Alice Constant Magnetic Field
37 private:
38
39 public:
40   AliMagFC(){}
41   AliMagFC(const char *name, const char *title, const Int_t integ, const Int_t map, 
42            const Float_t factor, const Float_t fmax);
43   virtual ~AliMagFC() {}
44   virtual void Field(Float_t *x, Float_t *b);
45   virtual void ReadField() {}
46   
47   ClassDef(AliMagFC,1)  //Class for all Alice Constant MagField 
48 };
49
50 class AliMagFCM : public AliMagF
51 {
52   //Alice Magnetic Field with constan mesh
53 protected:
54
55   Float_t    fXbeg;  // Start of mesh in x
56   Float_t    fYbeg;  // Start of mesh in y
57   Float_t    fZbeg;  // Start of mesh in z
58   Float_t    fXdel;  // Mesh step in x
59   Float_t    fYdel;  // Mesh step in y
60   Float_t    fZdel;  // Mesh step in z
61   Double_t   fXdeli; // Inverse of Mesh step in x
62   Double_t   fYdeli; // Inverse of Mesh step in y
63   Double_t   fZdeli; // Inverse of Mesh step in z
64   Int_t      fXn;    // Number of mesh points in x
65   Int_t      fYn;    // Number of mesh points in y
66   Int_t      fZn;    // Number of mesh points in z
67   TVector   *fB;     // Field map
68 public:
69   AliMagFCM(){}
70   AliMagFCM(const char *name, const char *title, const Int_t integ, const Int_t map, 
71            const Float_t factor, const Float_t fmax);
72   virtual ~AliMagFCM() {delete fB;}
73   virtual void Field(Float_t *x, Float_t *b);
74   virtual void ReadField();
75
76   inline Float_t Bx(const Int_t ix, const Int_t iy, const Int_t iz) {
77     return (*fB)(3*(iz*(fXn*fYn)+iy*fXn+ix));
78   }
79   inline Float_t By(const Int_t ix, const Int_t iy, const Int_t iz) {
80     return (*fB)(3*(iz*(fXn*fYn)+iy*fXn+ix)+1);
81   }
82   inline Float_t Bz(const Int_t ix, const Int_t iy, const Int_t iz) {
83     return (*fB)(3*(iz*(fXn*fYn)+iy*fXn+ix)+2);
84   }
85   
86   ClassDef(AliMagFCM,1)  //Class for all Alice MagField with Constant Mesh
87 };
88
89 #endif