AliRoot Core  v5-06-30 (35d6c57)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliTPCFCVoltError3D.h
Go to the documentation of this file.
1 #ifndef ALITPCFCVOLTERROR3D_H
2 #define ALITPCFCVOLTERROR3D_H
3 
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice */
6 
11 
12 #include "AliTPCCorrection.h"
13 
14 
16 public:
18  virtual ~AliTPCFCVoltError3D();
19  virtual Bool_t AddCorrectionCompact(AliTPCCorrection* corr, Double_t weight);
20  // initialization and update functions
21  virtual void Init();
22  virtual void Update(const TTimeStamp &timeStamp);
23 
24  // common setters and getters for tangled ExB effect
25  virtual void SetOmegaTauT1T2(Float_t omegaTau,Float_t t1,Float_t t2) {
26  fT1=t1; fT2=t2;
27  const Double_t wt0=t2*omegaTau; fC0=1./(1.+wt0*wt0);
28  const Double_t wt1=t1*omegaTau; fC1=wt1/(1.+wt1*wt1);
29  };
30  void SetC0C1(Float_t c0,Float_t c1) {fC0=c0;fC1=c1;} // CAUTION: USE WITH CARE
31  Float_t GetC0() const {return fC0;}
32  Float_t GetC1() const {return fC1;}
33 
34  // setters and getters
35 
36  // Set rod shift in Voltage equivalents (40V ~ 1mm)
37  // rod numbers: 0-17 (IFC), 18-35 (OFC)
38  // note: strips move accordingly
39  void SetRodVoltShiftA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE) {fRodVoltShiftA[rod]=voltOffset; fInitLookUp=doInit;}
40  void SetRodVoltShiftC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE) {fRodVoltShiftC[rod]=voltOffset; fInitLookUp=doInit;}
41  Float_t GetRodVoltShiftA(Int_t i) const {return fRodVoltShiftA[i];}// 0-17: IFC, 18-35; OFC
42  Float_t GetRodVoltShiftC(Int_t i) const {return fRodVoltShiftC[i];}// 0-17: IFC, 18-35; OFC
43 
44  // Set rotated clip (just at High Voltage RODs) in Voltage equivalents (40V ~ 1mm)
45  // rod number: 0 (IFC), 1 (OFC)
46  void SetRotatedClipVoltA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE) {fRotatedClipVoltA[rod]=voltOffset; fInitLookUp=doInit;}
47  void SetRotatedClipVoltC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE) {fRotatedClipVoltC[rod]=voltOffset; fInitLookUp=doInit;}
48  Float_t GetRotatedClipVoltA(Int_t i) const {return fRotatedClipVoltA[i];}// (0,1):(IFC,OFC)
49  Float_t GetRotatedClipVoltC(Int_t i) const {return fRotatedClipVoltC[i];}// (0,1):(IFC,OFC)
50 
51  // Set rod shift in Voltage equivalents (40V ~ 1mm)
52  // rod numbers: 0-17 (OFC)
53  // note: strips DO NOT move, only the copper rods do ...
54  void SetCopperRodShiftA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE) {fCopperRodShiftA[rod]=voltOffset; fInitLookUp=doInit;}
55  void SetCopperRodShiftC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE) {fCopperRodShiftC[rod]=voltOffset; fInitLookUp=doInit;}
56  Float_t GetCopperRodShiftA(Int_t i) const {return fCopperRodShiftA[i];}// 0-17: IFC, 18-35; OFC
57  Float_t GetCopperRodShiftC(Int_t i) const {return fCopperRodShiftC[i];}// 0-17: IFC, 18-35; OFC
58 
59 
60  void InitFCVoltError3D(); // Fill the lookup tables
62 
63  virtual void Print(const Option_t* option="") const;
64 
65 
66 
67 protected:
68  virtual void GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]);
69 
70 private:
71 
72  AliTPCFCVoltError3D(const AliTPCFCVoltError3D &); // not implemented
73  AliTPCFCVoltError3D &operator=(const AliTPCFCVoltError3D &); // not implemented
74 
75  Float_t fC0;
76  Float_t fC1;
77  Float_t fRodVoltShiftA[36];
78  Float_t fRodVoltShiftC[36];
79  Float_t fRotatedClipVoltA[2];
80  Float_t fRotatedClipVoltC[2];
81  Float_t fCopperRodShiftA[36];
82  Float_t fCopperRodShiftC[36];
83 
84  Bool_t fInitLookUp;
85  Bool_t fInitLookUpBasic[6];
86 
87 
88  TMatrixF *fLookUpErOverEz[kNPhi];
89  TMatrixF *fLookUpEphiOverEz[kNPhi];
90  TMatrixF *fLookUpDeltaEz[kNPhi];
91 
92  // basic numbers for the poisson relaxation //can be set individually in each class
93  enum {kRows =257}; // grid size in r direction used in the poisson relaxation // ( 2**n + 1 ) eg. 65, 129, 257 etc.
94  enum {kColumns=129}; // grid size in z direction used in the poisson relaxation // ( 2**m + 1 ) eg. 65, 129, 257 etc.
95  enum {kPhiSlicesPerSector = 10 }; // number of points in phi slices
96  enum {kPhiSlices = 1+kPhiSlicesPerSector*3 }; // number of points in phi for the basic lookup tables
97  enum {kIterations=100}; // Number of iterations within the poisson relaxation
98 
99  // ugly way to store "partial" look up tables
100  // needed for the faster calculation of the final distortion table
101 
102  // for Rod and Strip shift
106 
110 
111  // for rotated clips
115 
119 
120  // for (only rod) shift (copper rods)
124 
128 
129 
131  ClassDef(AliTPCFCVoltError3D,3); //
133 };
134 
135 #endif
TMatrixD * fLookUpBasic6EphiOverEz[kPhiSlices]
! Array to store electric field integral
void SetC0C1(Float_t c0, Float_t c1)
Float_t fRodVoltShiftC[36]
Rod (&strips) shift in Volt (40V~1mm)
void SetCopperRodShiftA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
Float_t GetCopperRodShiftA(Int_t i) const
Float_t GetRotatedClipVoltC(Int_t i) const
AliTPCFCVoltError3D class.
TMatrixD * fLookUpBasic5DeltaEz[kPhiSlices]
! Array to store electric field integral
TMatrixD * fLookUpBasic3DeltaEz[kPhiSlices]
! Array to store electric field integral
virtual void SetOmegaTauT1T2(Float_t omegaTau, Float_t t1, Float_t t2)
TMatrixD * fLookUpBasic2EphiOverEz[kPhiSlices]
! Array to store electric field integral
virtual void Print(const Option_t *option="") const
TMatrixD * fLookUpBasic6DeltaEz[kPhiSlices]
! Array to store electric field integral
Float_t fRotatedClipVoltA[2]
rotated clips at HV rod
Float_t GetRodVoltShiftC(Int_t i) const
virtual Bool_t AddCorrectionCompact(AliTPCCorrection *corr, Double_t weight)
Float_t GetRotatedClipVoltA(Int_t i) const
Float_t GetC1() const
Float_t fCopperRodShiftC[36]
only Rod shift
virtual void GetCorrection(const Float_t x[], const Short_t roc, Float_t dx[])
Double_t fT1
tensor term of wt - T1
TMatrixD * fLookUpBasic3EphiOverEz[kPhiSlices]
! Array to store electric field integral
Float_t GetC0() const
TMatrixD * fLookUpBasic3ErOverEz[kPhiSlices]
! Array to store electric field integral
void SetRodVoltShiftC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
TMatrixD * fLookUpBasic4EphiOverEz[kPhiSlices]
! Array to store electric field integral
AliTPCCorrection class.
void SetCopperRodShiftC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
virtual void Update(const TTimeStamp &timeStamp)
TMatrixD * fLookUpBasic6ErOverEz[kPhiSlices]
! Array to store electric field integral
Float_t fRotatedClipVoltC[2]
rotated clips at HV rod
TMatrixD * fLookUpBasic4ErOverEz[kPhiSlices]
! Array to store electric field integral
Bool_t fInitLookUpBasic[6]
! flag if the basic lookup was created (shifted Rod (IFC,OFC) or rotated clip (IFC,OFC))
Bool_t fInitLookUp
flag to check if the Look Up table was created (SUM)
TMatrixF * fLookUpEphiOverEz[kNPhi]
Array to store electric field integral (int Er/Ez)
Float_t fCopperRodShiftA[36]
only Rod shift
TMatrixD * fLookUpBasic5ErOverEz[kPhiSlices]
! Array to store electric field integral
TMatrixD * fLookUpBasic2ErOverEz[kPhiSlices]
! Array to store electric field integral
TMatrixD * fLookUpBasic2DeltaEz[kPhiSlices]
! Array to store electric field integral
void SetRotatedClipVoltA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
TMatrixD * fLookUpBasic1DeltaEz[kPhiSlices]
! Array to store electric field integral (int Ez)
void SetRodVoltShiftA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
TMatrixD * fLookUpBasic1ErOverEz[kPhiSlices]
! Array to store electric field integral (int Er/Ez)
Float_t fRodVoltShiftA[36]
Rod (&strips) shift in Volt (40V~1mm)
Float_t fC1
coefficient C1 (compare Jim Thomas's notes for definitions)
Double_t fT2
tensor term of wt - T2
TMatrixD * fLookUpBasic1EphiOverEz[kPhiSlices]
! Array to store electric field integral (int Ephi/Ez)
AliTPCFCVoltError3D & operator=(const AliTPCFCVoltError3D &)
TMatrixF * fLookUpDeltaEz[kNPhi]
Array to store electric field integral (int Er/Ez)
TMatrixF * fLookUpErOverEz[kNPhi]
Array to store electric field integral (int Er/Ez)
TMatrixD * fLookUpBasic4DeltaEz[kPhiSlices]
! Array to store electric field integral
Float_t fC0
coefficient C0 (compare Jim Thomas's notes for definitions)
Float_t GetRodVoltShiftA(Int_t i) const
void SetRotatedClipVoltC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
Float_t GetCopperRodShiftC(Int_t i) const
TMatrixD * fLookUpBasic5EphiOverEz[kPhiSlices]
! Array to store electric field integral