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