The changes w.r.t. the previous version:
[u/mrichter/AliRoot.git] / TPC / AliTPCParam.h
1 #ifndef TPCParam_H
2 #define TPCParam_H
3 ////////////////////////////////////////////////
4 //  Manager class for TPC parameters          //
5 ////////////////////////////////////////////////
6
7 #include "TObject.h"
8
9 // the last things from AliTPCSecGeo
10 //const Float_t z_end = 250.; 
11 //const Float_t alpha_low=0.523598775; // 30 degrees
12 //const Float_t alpha_up=0.261799387; //  15 degrees
13 //const Float_t q_el = 1.602e-19; // elementary charge
14 //const Float_t adc_sat = 1023; // dynamic range (10 bits)
15 //const Float_t dyn_range = 2000.; // output dynamic range (mV)
16
17
18
19 class AliTPCParam : public TObject {
20   //////////////////////////////////////////////////////
21   //////////////////////////////////////////////////////
22   //ALITPCParam object to be possible change 
23   //geometry and some other parameters of TPC   
24   //used by AliTPC and AliTPCSector  
25 public:
26   AliTPCParam(); 
27   virtual ~AliTPCParam() {;}  //dummy destructor
28   
29   void XYZtoCRXYZ(Float_t *xyz, 
30                   Int_t &sector, Int_t &padrow, Int_t option=3);
31   //transform global position to the position relative to the sector padrow
32   //if option=0  X calculate absolute            calculate sector
33   //if option=1  X           absolute            use input sector
34   //if option=2  X           relative to pad row calculate sector
35   //if option=3  X           relative            use input sector
36
37   void CRXYZtoXYZ(Float_t *xyz,
38             const Int_t &sector, const Int_t & padrow, Int_t option=3) const;  
39   //transform relative position  to the gloabal position
40
41   void CRTimePadtoYZ(Float_t &y, Float_t &z, 
42                      const Float_t &time, const Float_t &pad,
43                      Int_t sector, Int_t padrow );
44   //transform position in digit  units (time slices and pads)  to "normal" 
45   //units (cm)   
46   void CRYZtoTimePad(const Float_t &y, const Float_t &z, 
47                      Float_t &time, Float_t &pad,
48                      Int_t sector, Int_t padrow);
49   //transform position in cm to position in digit unit  
50   Double_t GetLowMaxY(Int_t irow) const {return irow*0.;}
51   Double_t GetUpMaxY(Int_t irow) const {return irow*0;}
52   //additional geometrical function
53   Int_t GetPadRow(Int_t isec, Float_t &x);
54   //return pad row for given sector and position x
55   //if res=-1 it is out of sector
56   
57   Int_t GetWire(Float_t &x);      
58   Int_t GetIndex(Int_t sector, Int_t row);  //give index of the given sector and pad row 
59   Bool_t   AdjustSectorRow(Int_t index, Int_t & sector, Int_t &row); //return sector and padrow
60   //for given index
61   Int_t GetNRowsTotal(){return fNtRows;}  //get total nuber of rows
62   void SetDefault();          //set defaut TPCparam
63   Bool_t Update();            //recalculate and check geometric parameters 
64   Bool_t GetStatus();         //get information about object consistency  
65
66
67   void  AdjustAngles(Int_t isec, Float_t &cos, Float_t &sin) const;
68   //set cosinus and sinus of rotation angles for sector isec
69   Int_t GetNRowLow() const;   //get the number of pad rows in low sector
70   Int_t GetNRowUp() const;    //get the number of pad rows in up sector
71   Int_t GetNRow(Int_t isec) {return  ((isec<fNInnerSector) ?  fnRowLow:fnRowUp);}
72   //get the nuber of pad row in given sector
73   Float_t GetPadRowRadiiLow(Int_t irow) const; //get the pad row (irow) radii
74   Float_t GetPadRowRadiiUp(Int_t irow) const;  //get the pad row (irow) radii
75   Float_t GetPadRowRadii(Int_t isec,Int_t irow) const {
76     return ( (isec < fNInnerSector) ?GetPadRowRadiiLow(irow):GetPadRowRadiiUp(irow));}
77     //retrun raii of the pad row irow in sector i
78   Int_t GetNPadsLow(Int_t irow) const;    //get the number of pads in row irow 
79   Int_t GetNPadsUp(Int_t irow) const;     //get the number of pads in row irow
80   Int_t GetNPads(Int_t isector,Int_t irow){
81      return ( (isector < fNInnerSector) ?GetNPadsLow(irow) : GetNPadsUp(irow));}
82     //get the number of pads  in given sector and row
83   //  Int_t GetNPads(Int_t isector, Int_t irow) const;         
84    //get the number of pads in sector isector and row irow
85
86   void  SetInnerRadiusLow(Float_t InnerRadiusLow ) { fInnerRadiusLow=InnerRadiusLow;}
87   void  SetOuterRadiusLow(Float_t OuterRadiusLow ){  fOuterRadiusLow=OuterRadiusLow;} 
88   void  SetInnerRadiusUp(Float_t InnerRadiusUp){  fInnerRadiusUp= InnerRadiusUp;} 
89   void  SetOuterRadiusUp(Float_t OuterRadiusUp){  fOuterRadiusUp= OuterRadiusUp;} 
90   
91   void  SetSectorAngles(Float_t innerangle, Float_t innershift, Float_t outerangle,
92                         Float_t outershift,Bool_t inDegree=kTRUE);
93
94   void    SetInSecLowEdge(Float_t isle){fInSecLowEdge=isle;}
95   void    SetInSecUpEdge(Float_t isue){fInSecUpEdge=isue;}
96   void    SetOuSecLowEdge(Float_t osle){fOuSecLowEdge=osle;}
97   void    SetOuSecUpEdge(Float_t osue){fOuSecUpEdge=osue;}
98
99   void    SetEdge(Float_t edge){fEdge = edge;}
100   void    SetDeadZone(Float_t zone){fDeadZone = zone;} 
101
102
103   void  SetPadPitchLength(Float_t PadPitchLength){  fPadPitchLength=PadPitchLength;}
104   void  SetPadPitchWidth(Float_t PadPitchWidth){  fPadPitchWidth = PadPitchWidth;}
105   void  SetPadLength(Float_t PadLength){  fPadLength=PadLength;}
106   void  SetPadWidth(Float_t PadWidth) {  fPadWidth=PadWidth;}  
107   void  SetDiffT(Float_t DiffT){  fDiffT= DiffT;}
108   void  SetDiffL(Float_t DiffL){  fDiffL=DiffL;}
109   void  SetDriftV(Float_t DriftV){  fDriftV= DriftV;}
110   void  SetOmegaTau(Float_t OmegaTau){  fOmegaTau=OmegaTau;}
111   void  SetAttCoef(Float_t AttCoef){  fAttCoef=AttCoef;}
112   void  SetOxyCont(Float_t OxyCont){  fOxyCont=OxyCont;}
113
114   void  SetNoise(Float_t Noise ){  fNoise= Noise;}
115   void  SetChipGain(Float_t ChipGain){  fChipGain= ChipGain;}
116   void  SetGasGain(Float_t GasGain){  fGasGain=GasGain;}
117   void  SetTSample(Float_t TSample){  fTSample=TSample;}
118   void  SetTSigma(Float_t Sigma){  fTSigma=Sigma;}
119   void  SetPadCoupling(Float_t PadCoupling){  fPadCoupling=PadCoupling;}
120   void  SetNWires(Int_t nWires){  fnWires=nWires;}
121   void  SetWWPitch(Float_t WWPitch){  fWWPitch=WWPitch;}
122   void  SetZeroSup(Int_t ZeroSup){  fZeroSup=ZeroSup;}
123
124   Float_t  GetInnerRadiusLow(){return fInnerRadiusLow;}
125   Float_t  GetOuterRadiusLow(){return fOuterRadiusLow;} 
126   Float_t  GetInnerRadiusUp(){return fInnerRadiusUp;} 
127   Float_t  GetOuterRadiusUp(){return fOuterRadiusUp;} 
128
129   Float_t  GetInnerAngle(){return fInnerAngle;}
130   Float_t  GetInnerAngleShift(){return fInnerAngleShift;}
131   Float_t  GetOuterAngle(){return fOuterAngle;} 
132   Float_t  GetOuterAngleShift(){return fOuterAngleShift;} 
133   Int_t    GetNInnerSector(){return fNInnerSector;}
134   Int_t    GetNOuterSector(){return fNOuterSector;}
135   Int_t    GetNSector(){return fNSector;}
136
137   Float_t    GetInSecLowEdge(){return fInSecLowEdge;}
138   Float_t    GetInSecUpEdge(){return fInSecUpEdge;}
139   Float_t    GetOuSecLowEdge(){return fOuSecLowEdge;}
140   Float_t    GetOuSecUpEdge(){return fOuSecUpEdge;}  
141
142   Float_t    GetEdge(){return fEdge;}
143   Float_t    GetDeadZone(){return fDeadZone;}
144
145   Float_t  GetPadPitchLength(){return fPadPitchLength;}
146   Float_t  GetPadPitchWidth(){return fPadPitchWidth;}
147   Float_t  GetPadLength(){return fPadLength;}
148   Float_t  GetPadWidth() {return fPadWidth;}  
149   Float_t  GetDiffT(){return fDiffT;}
150   Float_t  GetDiffL(){return fDiffL;}
151   Float_t  GetDriftV(){return fDriftV;}
152   Float_t  GetOmegaTau(){return fOmegaTau;}
153   Float_t  GetAttCoef(){return fAttCoef;}
154   Float_t  GetOxyCont(){return fOxyCont;}
155
156   Float_t  GetNoise(){return fNoise;}
157   Float_t  GetChipGain(){return fChipGain;}
158   Float_t  GetGasGain(){return fGasGain;}
159   Float_t  GetTSample(){return fTSample;}
160   Float_t  GetTSigma(){return fTSigma;}
161   Float_t  GetZWidth(){return fZWidth;}
162   Float_t  GetZSigma(){return fTSigma*fDriftV;}  
163   Float_t  GetPadCoupling(){return fPadCoupling;}
164   Int_t    GetNWires(){return fnWires;}
165   Float_t  GetWWPitch(){return fWWPitch;}
166   Int_t    GetZeroSup(){return fZeroSup;}
167   Int_t    GetMaxTBin(){return fMaxTBin;}
168
169 private :
170   Bool_t fbStatus;  //indicates consistency of the data
171   //---------------------------------------------------------------------
172   //   ALICE TPC sector geometry
173   //--------------------------------------------------------------------
174   
175   Float_t fInnerRadiusLow;  // lower radius of inner sector
176   Float_t fOuterRadiusLow;  // lower radius of outer sector
177   Float_t fInnerRadiusUp;   // upper radius of inner  sector
178   Float_t fOuterRadiusUp;   // upper radius of outer  sector
179
180   Float_t fInnerAngle;       //opening angle of Inner sector
181   Float_t fInnerAngleShift;  //shift of first inner sector center to the 0
182   Float_t fOuterAngle;       //opening angle of outer sector
183   Float_t fOuterAngleShift;  //shift of first sector center to the 0
184  
185   Int_t   fNInnerSector;      //!number of inner sectors
186   Int_t   fNOuterSector;      //!number of outer sectors
187   Int_t   fNSector;           //! total number of sectors
188
189   Float_t   fInSecLowEdge;      // inner sector lower edge
190   Float_t   fInSecUpEdge;       // inner sector upper edge
191   Float_t   fOuSecLowEdge;      // outer sector lower edge
192   Float_t   fOuSecUpEdge;       // outer sector upper edge
193   
194   Float_t   fEdge;              // thickness of the sector edge
195   Float_t   fDeadZone;          // dead zone due to the sector mounting etc.
196  
197   //---------------------------------------------------------------------
198   //   ALICE TPC pad parameters
199   //--------------------------------------------------------------------
200   Float_t   fPadPitchLength;    //pad pitch length
201   Float_t   fPadPitchWidth;     //pad pitch width
202   Float_t   fPadLength;         //pad  length
203   Float_t   fPadWidth;          //pad  width
204   
205   
206   Int_t fnRowLow;           //  number of pad rows per low sector 
207   Int_t fnRowUp;            //  number of pad rows per sector up 
208   Float_t  fPadRowLow[600]; // Lower sector, pad row radii
209   Float_t  fPadRowUp[600];  // Upper sector, pad row radii
210   Int_t    fnPadsLow[600];     // Lower sector, number of pads per row
211   Int_t    fnPadsUp[600];      //  Upper sector, number of pads per row
212   Float_t fRotAngle[200];      //  sin and cos of rotation angles for 
213                                  //  diferent sectors
214
215   Int_t fnWires;            //  Number of wires per pad
216   Float_t fWWPitch;         // pitch between wires   
217   //---------------------------------------------------------------------
218   //   ALICE TPC Gas Parameters
219   //--------------------------------------------------------------------
220   Float_t  fDiffT;          //tangencial diffusion constant
221   Float_t  fDiffL;          //longutudinal diffusion constant
222   Float_t  fGasGain;        //gas gain constant
223   Float_t  fDriftV;          //drift velocity constant
224   Float_t  fOmegaTau;       //omega tau ExB coeficient
225   Float_t  fAttCoef;        //attachment coefitients
226   Float_t  fOxyCont;        //oxygen content
227   //---------------------------------------------------------------------
228   //   ALICE TPC  Electronics Parameters
229   //--------------------------------------------------------------------
230   Float_t fPadCoupling;     //coupling factor ration of  anode signal 
231                             //and total pads signal  
232   Int_t fZeroSup;         //zero suppresion constant
233   Float_t fNoise;         //noise sigma constant
234   Float_t fChipGain;      //preamp shaper constant
235   Float_t fTSample; // sampling time
236   Float_t fZWidth;  //derived value calculated using TSample and driftw 
237   Float_t fTSigma;  // width of the Preamp/Shaper function
238   Int_t   fMaxTBin; //maximum time bin number
239   //--------------------------------------------------------
240   //
241   Int_t fNtRows;  //total number of rows in TPC  
242   ClassDef(AliTPCParam,2)  //parameter  object for set:TPC
243 };
244
245
246 /////////////////////////////////////////////////////////////////////////////
247 //
248 //---------------------------------------------------------------------
249 //   ALICE TPC Cluster Parameters
250 //--------------------------------------------------------------------
251 //
252 //
253 // Sigma rphi
254 /*const Float_t a_rphi=0.41818e-2;
255 const Float_t b_rphi=0.17460e-4;
256 const Float_t c_rphi=0.30993e-2;
257 const Float_t d_rphi=0.41061e-3;
258 // Sigma z
259 const Float_t a_z=0.39614e-2;
260 const Float_t b_z=0.22443e-4;
261 const Float_t c_z=0.51504e-1;
262 // Cluster width in rphi
263 const Float_t ac_rphi=0.18322;
264 const Float_t bc_rphi=0.59551e-3;
265 const Float_t cc_rphi=0.60952e-1;
266 // Cluster width in z
267 const Float_t ac_z=0.19081;
268 const Float_t bc_z=0.55938e-3;
269 const Float_t cc_z=0.30428;
270 */
271
272
273
274 #endif