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