Line data Source code
1 : /// \class AliTPCExB
2 :
3 : #ifndef ALITPCEXB_H
4 : #define ALITPCEXB_H
5 :
6 : class AliMagF;
7 : #include "TObject.h"
8 : #include "TVectorDfwd.h"
9 :
10 : class AliTPCExB:public TObject {
11 : public:
12 : AliTPCExB();
13 : AliTPCExB& operator=(const AliTPCExB &exb);
14 : AliTPCExB(const AliTPCExB& exb);
15 0 : virtual ~AliTPCExB() {};
16 : virtual void Correct(const Double_t *position,Double_t *corrected)=0;
17 : virtual void CorrectInverse(const Double_t *position,Double_t *corrected) {
18 3382744 : Correct(position,corrected);
19 13530976 : for (Int_t i=0;i<3;++i)
20 5074116 : corrected[i]=position[i]-(corrected[i]-position[i]);
21 1691372 : }
22 : //
23 : // Test and visualization
24 : //
25 : void TestExB(const char* fileName);
26 : static Double_t GetDr(Double_t r, Double_t phi, Double_t z, Double_t bz=5);
27 : static Double_t GetDrphi(Double_t r, Double_t phi, Double_t z, Double_t bz=5);
28 : static Double_t GetDphi(Double_t r, Double_t phi, Double_t z, Double_t bz=5);
29 : static Double_t GetDz(Double_t r, Double_t phi, Double_t z, Double_t bz=5);
30 0 : static AliTPCExB* Instance(){return fgInstance;}
31 12 : static void SetInstance(AliTPCExB *const param){fgInstance = param;}
32 : //
33 : // Mag field scans
34 : //
35 : static void RegisterField(Int_t index, AliMagF * magf);
36 : static Double_t GetBx(Double_t r, Double_t phi, Double_t z,Int_t index=0);
37 : static Double_t GetBy(Double_t r, Double_t phi, Double_t z,Int_t index=0);
38 : static Double_t GetBz(Double_t r, Double_t phi, Double_t z,Int_t index=0);
39 : static Double_t GetBr(Double_t r, Double_t phi, Double_t z,Int_t index=0);
40 : static Double_t GetBrfi(Double_t r, Double_t phi, Double_t z,Int_t index=0);
41 : //
42 : static Double_t GetBxI(Double_t r, Double_t phi, Double_t z,Int_t index=0);
43 : static Double_t GetByI(Double_t r, Double_t phi, Double_t z,Int_t index=0);
44 : static Double_t GetBzI(Double_t r, Double_t phi, Double_t z,Int_t index=0);
45 : static Double_t GetBrI(Double_t r, Double_t phi, Double_t z,Int_t index=0);
46 : static Double_t GetBrfiI(Double_t r, Double_t phi, Double_t z,Int_t index=0);
47 : //
48 : //
49 : Double_t Eval(Int_t type, Double_t r, Double_t phi, Double_t z);
50 0 : Double_t SEval(Int_t type, Double_t r, Double_t phi, Double_t z){return Instance()->Eval(type,r,phi,z);}
51 : static Double_t EvalMat(const TVectorD &vec, Double_t r, Double_t phi, Double_t z); // evalute parameterization
52 :
53 : private:
54 : TVectorD * fMatBrBz; ///< param matrix Br/Bz
55 : TVectorD * fMatBrfiBz; ///< param matrix Br/Bz
56 : TVectorD * fMatBrBzI0; ///< param matrix Br/Bz integral z>0
57 : TVectorD * fMatBrBzI1; ///< param matrix Br/Bz integral z<0
58 : TVectorD * fMatBrfiBzI0; ///< param matrix Br/Bz integral z>0
59 : TVectorD * fMatBrfiBzI1; ///< param matrix Br/Bz integral z<0
60 :
61 : static AliTPCExB* fgInstance; //!<! Instance of this class (singleton implementation)
62 : static TObjArray fgArray; //!<! array of magnetic fields
63 : //
64 : /// \cond CLASSIMP
65 24 : ClassDef(AliTPCExB,2)
66 : /// \endcond
67 : };
68 :
69 : #endif
|