]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 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 |