]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/src/AliL3Transform.h
Moved from AliTransbit to AliL3Transbit.
[u/mrichter/AliRoot.git] / HLT / src / AliL3Transform.h
1 #ifndef ALIL3TRANSFORM_H
2 #define ALIL3TRANSFORM_H
3
4 #include "AliL3RootTypes.h"
5
6 class AliL3Transform {
7
8  private:
9   const static Double_t fBFACT;
10   
11   static Double_t fBField;
12   static Int_t fBFieldFactor;
13   static Int_t fNTimeBins;
14   static Int_t fNRowLow;
15   static Int_t fNRowUp;
16   static Int_t fNRowUp1;
17   static Int_t fNRowUp2;
18   static Int_t fNSectorLow;
19   static Int_t fNSectorUp;
20   static Double_t fPadPitchWidthLow;
21   static Double_t fPadPitchWidthUp;
22   static Double_t fZWidth;
23   static Double_t fZSigma;
24   static Int_t fNSector;
25   static Int_t fNSlice;
26   static Int_t fNRow;
27   static Double_t fPi;
28   static Double_t fNRotShift;
29   static Double_t fZLength;
30   static Double_t fZOffset;
31   static Int_t fNPads[159]; //fill this following Init
32   static Double_t fX[159];  //fill this following Init
33   static Int_t fVersion;    //flags the version
34   static Int_t fRows[6][2];
35   static Int_t fNRows[6];
36   static Int_t fNPatches;
37   static Double_t fDiffT; //Transversal diffusion constant
38   static Double_t fDiffL; //Longitudinal diffusion constant
39   static Double_t fAnodeWireSpacing; 
40   static Double_t fInnerPadLength;
41   static Double_t fOuter1PadLength;
42   static Double_t fOuter2PadLength;
43   static Double_t fInnerPRFSigma;
44   static Double_t fOuter1PRFSigma;
45   static Double_t fOuter2PRFSigma;
46   static Double_t fTimeSigma; //Minimal longitudinal width
47
48  public:
49
50   static Bool_t Init(Char_t* path,Bool_t UseAliTPCParam=kFALSE); //init for different AliRoot versions
51   static Bool_t MakeInitFile(Char_t *filename,Char_t *path);     //create the init file in path
52   static Bool_t ReadInit(Char_t *path);                          //read it possibly from root file 
53
54   static void SetBField(Double_t f) {fBField = f;}
55
56   static const Char_t* GetParamName() {return "75x40_100x60_150x60";}
57
58   static Int_t GetFirstRow(Int_t patch) {return fRows[patch][0];}
59   static Int_t GetLastRow(Int_t patch) {return fRows[patch][1];}
60   static Int_t GetNRows(Int_t patch) {return fNRows[patch];}
61   static Int_t GetNRows() {return fNRow;}
62   static Int_t GetNPatches() {return fNPatches;}
63   static Double_t GetBField() {return fBField;}
64   static Double_t GetBFact() {return fBFACT;}
65   static Double_t GetBFieldValue() {return (fBField*fBFACT);}
66   static Double_t Pi() {return fPi;}
67   static Int_t GetVersion(){return fVersion;}
68   static Double_t GetPadPitchWidthLow() {return fPadPitchWidthLow;}
69   static Double_t GetPadPitchWidthUp() {return fPadPitchWidthUp;}
70   static Double_t GetPadPitchWidth(Int_t patch) {return patch < 2 ? fPadPitchWidthLow : fPadPitchWidthUp;}  
71   static Double_t GetZWidth() {return fZWidth;}
72   static Double_t GetZLength() {return fZLength;}
73   static Double_t GetZOffset() {return fZOffset;}
74   static Double_t GetDiffT() {return fDiffT;}
75   static Double_t GetDiffL() {return fDiffL;}
76   static Double_t GetAnodeWireSpacing() {return fAnodeWireSpacing;}
77   static Double_t GetPadLength(Int_t padrow);
78   static Double_t GetPRFSigma(Int_t padrow);
79   static Double_t GetTimeSigma() {return fTimeSigma;}
80   static Int_t GetNSectorLow() {return fNSectorLow;}
81   static Int_t GetNSectorUp() {return fNSectorUp;}
82   
83   static Bool_t Slice2Sector(Int_t slice, Int_t slicerow, Int_t &sector, Int_t &row);
84   static Bool_t Sector2Slice(Int_t &slice, Int_t sector);
85   static Bool_t Sector2Slice(Int_t &slice, Int_t &slicerow, Int_t sector, Int_t row);
86
87   static Int_t GetNPads(Int_t row){return (row<fNRow)?fNPads[row]:0;}
88   static Int_t GetNTimeBins(){return fNTimeBins;}
89   static Double_t Row2X(Int_t slicerow);
90   static Double_t GetMaxY(Int_t slicerow);
91   static Double_t GetEta(Float_t *xyz);
92   static Double_t GetEta(Int_t row, Int_t pad, Int_t time);
93   static Double_t GetPhi(Float_t *xyz);
94
95   static void XYZtoRPhiEta(Float_t *rpe, Float_t *xyz);
96   static void Local2Global(Float_t *xyz, Int_t slice);
97   static void Local2GlobalAngle(Float_t *angle, Int_t slice);
98   static void Global2LocalAngle(Float_t *angle, Int_t slice);
99
100   static void Raw2Local(Float_t *xyz, Int_t sector, Int_t row, Float_t pad, Float_t time);
101   static void Local2Global(Float_t *xyz, Int_t sector, Int_t row);
102   static void Global2Local(Float_t *xyz, Int_t sector, Bool_t isSlice=kFALSE);
103   static void Raw2Global(Float_t *xyz, Int_t sector, Int_t row, Float_t pad, Float_t time);
104   static void Local2Raw(Float_t *xyz, Int_t sector, Int_t row);
105   static void Global2Raw(Float_t *xyz, Int_t sector, Int_t row);
106   
107   ClassDef(AliL3Transform,1)
108 };
109 #endif