New TPC files from M.Kowalski.
[u/mrichter/AliRoot.git] / TPC / AliTPCParam.h
1 #ifndef TPCParam_H
2 #define TPCParam_H
3 ////////////////////////////////////////////////
4 //  Manager class for TPC parameters          //
5 ////////////////////////////////////////////////
6 #include"TObject.h"
7
8 const Int_t kMaxRows=600;
9
10 class AliTPCParam : public TObject {
11   //////////////////////////////////////////////////////
12   //////////////////////////////////////////////////////
13   //ALITPCParam object to be possible change 
14   //geometry and some other parameters of TPC   
15   //used by AliTPC and AliTPCSector  
16 public:
17   AliTPCParam(); 
18   virtual ~AliTPCParam() {;}  //dummy destructor
19   
20   void XYZtoCRXYZ(Float_t *xyz, 
21                   Int_t &sector, Int_t &padrow, Int_t option=3);
22   //transform global position to the position relative to the sector padrow
23   //if option=0  X calculate absolute            calculate sector
24   //if option=1  X           absolute            use input sector
25   //if option=2  X           relative to pad row calculate sector
26   //if option=3  X           relative            use input sector
27
28   void CRXYZtoXYZ(Float_t *xyz,
29             const Int_t &sector, const Int_t & padrow, Int_t option=3) const;  
30   //transform relative position  to the gloabal position
31
32   void CRTimePadtoYZ(Float_t &y, Float_t &z, 
33                      const Float_t &time, const Float_t &pad,
34                      Int_t sector, Int_t padrow );
35   //transform position in digit  units (time slices and pads)  to "normal" 
36   //units (cm)   
37   void CRYZtoTimePad(const Float_t &y, const Float_t &z, 
38                      Float_t &time, Float_t &pad,
39                      Int_t sector, Int_t padrow);
40   //transform position in cm to position in digit unit  
41   Double_t GetLowMaxY(Int_t irow) const {return irow*0.;}
42   Double_t GetUpMaxY(Int_t irow) const {return irow*0;}
43   //additional geometrical function
44   Int_t GetPadRow(Int_t isec, Float_t &x);
45   //return pad row for given sector and position x
46   //if res=-1 it is out of sector
47   
48   Int_t GetWire(Float_t &x);      
49   Int_t GetIndex(Int_t sector, Int_t row);  //give index of the given sector and pad row 
50   Bool_t   AdjustSectorRow(Int_t index, Int_t & sector, Int_t &row); //return sector and padrow
51   //for given index
52   Int_t GetNRowsTotal(){return fNtRows;}  //get total nuber of rows
53   void SetDefault();          //set defaut TPCparam
54   Bool_t Update();            //recalculate and check geometric parameters 
55   Bool_t GetStatus();         //get information about object consistency  
56
57
58   void  AdjustAngles(Int_t isec, Float_t &cos, Float_t &sin) const;
59   //set cosinus and sinus of rotation angles for sector isec
60   Int_t GetNRowLow() const;   //get the number of pad rows in low sector
61   Int_t GetNRowUp() const;    //get the number of pad rows in up sector
62   Int_t GetNRow(Int_t isec) {return  ((isec<25) ?  fnRowLow:fnRowUp);}
63   //get the nuber of pad row in given sector
64   Float_t GetPadRowRadiiLow(Int_t irow) const; //get the pad row (irow) radii
65   Float_t GetPadRowRadiiUp(Int_t irow) const;  //get the pad row (irow) radii
66   Float_t GetPadRowRadii(Int_t isec,Int_t irow) const {
67     return ( (isec < 25) ?GetPadRowRadiiLow(irow):GetPadRowRadiiUp(irow));}
68     //retrun raii of the pad row irow in sector i
69   Int_t GetNPadsLow(Int_t irow) const;    //get the number of pads in row irow 
70   Int_t GetNPadsUp(Int_t irow) const;     //get the number of pads in row irow
71   Int_t GetNPads(Int_t isector,Int_t irow){
72      return ( (isector < 25) ?GetNPadsLow(irow) : GetNPadsUp(irow));}
73     //get the number of pads  in given sector and row
74   //  Int_t GetNPads(Int_t isector, Int_t irow) const;         
75    //get the number of pads in sector isector and row irow
76
77   void  SetInnerRadiusLow(Float_t InnerRadiusLow ) { fInnerRadiusLow=InnerRadiusLow;}
78   void  SetOuterRadiusLow(Float_t OuterRadiusLow ){  fOuterRadiusLow=OuterRadiusLow;} 
79   void  SetInnerRadiusUp(Float_t InnerRadiusUp){  fInnerRadiusUp= InnerRadiusUp;} 
80   void  SetOuterRadiusUp(Float_t OuterRadiusUp){  fOuterRadiusUp= OuterRadiusUp;} 
81
82   void  SetPadPitchLength(Float_t PadPitchLength){  fPadPitchLength=PadPitchLength;}
83   void  SetPadPitchWidth(Float_t PadPitchWidth){  fPadPitchWidth = PadPitchWidth;}
84   void  SetPadLength(Float_t PadLength){  fPadLength=PadLength;}
85   void  SetPadWidth(Float_t PadWidth) {  fPadWidth=PadWidth;}  
86   void  SetDiffT(Float_t DiffT){  fDiffT= DiffT;}
87   void  SetDiffL(Float_t DiffL){  fDiffL=DiffL;}
88   void  SetDriftV(Float_t DriftV){  fDriftV= DriftV;}
89   void  SetOmegaTau(Float_t OmegaTau){  fOmegaTau=OmegaTau;}
90   void  SetAttCoef(Float_t AttCoef){  fAttCoef=AttCoef;}
91   void  SetOxyCont(Float_t OxyCont){  fOxyCont=OxyCont;}
92
93   void  SetNoise(Float_t Noise ){  fNoise= Noise;}
94   void  SetChipGain(Float_t ChipGain){  fChipGain= ChipGain;}
95   void  SetGasGain(Float_t GasGain){  fGasGain=GasGain;}
96   void  SetTSample(Float_t TSample){  fTSample=TSample;}
97   void  SetTSigma(Float_t Sigma){  fTSigma=Sigma;}
98   void  SetPadCoupling(Float_t PadCoupling){  fPadCoupling=PadCoupling;}
99   void  SetNWires(Int_t nWires){  fnWires=nWires;}
100   void  SetWWPitch(Float_t WWPitch){  fWWPitch=WWPitch;}
101   void  SetZeroSup(Int_t ZeroSup){  fZeroSup=ZeroSup;}
102
103   Float_t  GetInnerRadiusLow(){return fInnerRadiusLow;}
104   Float_t  GetOuterRadiusLow(){return fOuterRadiusLow;} 
105   Float_t  GetInnerRadiusUp(){return fInnerRadiusUp;} 
106   Float_t  GetOuterRadiusUp(){return fOuterRadiusUp;} 
107
108   Float_t  GetPadPitchLength(){return fPadPitchLength;}
109   Float_t  GetPadPitchWidth(){return fPadPitchWidth;}
110   Float_t  GetPadLength(){return fPadLength;}
111   Float_t  GetPadWidth() {return fPadWidth;}  
112   Float_t  GetDiffT(){return fDiffT;}
113   Float_t  GetDiffL(){return fDiffL;}
114   Float_t  GetDriftV(){return fDriftV;}
115   Float_t  GetOmegaTau(){return fOmegaTau;}
116   Float_t  GetAttCoef(){return fAttCoef;}
117   Float_t  GetOxyCont(){return fOxyCont;}
118
119   Float_t  GetNoise(){return fNoise;}
120   Float_t  GetChipGain(){return fChipGain;}
121   Float_t  GetGasGain(){return fGasGain;}
122   Float_t  GetTSample(){return fTSample;}
123   Float_t  GetTSigma(){return fTSigma;}
124   Float_t  GetZWidth(){return fZWidth;}
125   Float_t  GetZSigma(){return fTSigma*fDriftV;}  
126   Float_t  GetPadCoupling(){return fPadCoupling;}
127   Int_t    GetNWires(){return fnWires;}
128   Float_t  GetWWPitch(){return fWWPitch;}
129   Int_t    GetZeroSup(){return fZeroSup;}
130
131
132 private :
133   Bool_t fbStatus;  //indicates consistency of the data
134   //---------------------------------------------------------------------
135   //   ALICE TPC sector geometry
136   //--------------------------------------------------------------------
137   
138   Float_t fInnerRadiusLow;  // lower radius of inner sector
139   Float_t fOuterRadiusLow;  // lower radius of outer sector
140   Float_t fInnerRadiusUp;   // upper radius of inner  sector
141   Float_t fOuterRadiusUp;   // upper radius of outer  sector
142
143   Float_t   fPadPitchLength;    //pad pitch length
144   Float_t   fPadPitchWidth;     //pad pitch width
145   Float_t   fPadLength;         //pad  length
146   Float_t   fPadWidth;          //pad  width
147   
148   
149   Int_t fnRowLow;           //  number of pad rows per low sector 
150   Int_t fnRowUp;            //  number of pad rows per sector up 
151   Float_t  fPadRowLow[600]; // Lower sector, pad row radii
152   Float_t  fPadRowUp[600];  // Upper sector, pad row radii
153   Int_t    fnPadsLow[600];     // Lower sector, number of pads per row
154   Int_t    fnPadsUp[600];      //  Upper sector, number of pads per row
155   Float_t fRotAngle[200];      //  sin and cos of rotation angles for 
156                                  //  diferent sectors
157
158   Int_t fnWires;            //  Number of wires per pad
159   Float_t fWWPitch;         // pitch between wires   
160   //---------------------------------------------------------------------
161   //   ALICE TPC Gas Parameters
162   //--------------------------------------------------------------------
163   Float_t  fDiffT;          //tangencial diffusion constant
164   Float_t  fDiffL;          //longutudinal diffusion constant
165   Float_t  fGasGain;        //gas gain constant
166   Float_t  fDriftV;          //drift velocity constant
167   Float_t  fOmegaTau;       //omega tau ExB coeficient
168   Float_t  fAttCoef;        //attachment coefitients
169   Float_t  fOxyCont;        //oxygen content
170   //---------------------------------------------------------------------
171   //   ALICE TPC  Electronics Parameters
172   //--------------------------------------------------------------------
173   Float_t fPadCoupling;     //coupling factor ration of  anode signal 
174                             //and total pads signal  
175   Int_t fZeroSup;         //zero suppresion constant
176   Float_t fNoise;         //noise sigma constant
177   Float_t fChipGain;      //preamp shaper constant
178   Float_t fTSample; // sampling time
179   Float_t fZWidth;  //derived value calculated using TSample and driftw 
180   Float_t fTSigma;  // width of the Preamp/Shaper function
181   //--------------------------------------------------------
182   //
183   Int_t fNtRows;  //total number of rows in TPC  
184   ClassDef(AliTPCParam,2)  //parameter  object for set:TPC
185 };
186
187
188
189
190
191 #endif