]>
Commit | Line | Data |
---|---|---|
8c555625 | 1 | #ifndef TPCParam_H |
2 | #define TPCParam_H | |
3da30618 | 3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
8c555625 | 8 | //////////////////////////////////////////////// |
9 | // Manager class for TPC parameters // | |
10 | //////////////////////////////////////////////// | |
8c555625 | 11 | |
1283eee5 | 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 | ||
8c555625 | 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 §or, 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 §or, 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 | |
1283eee5 | 76 | Int_t GetNRow(Int_t isec) {return ((isec<fNInnerSector) ? fnRowLow:fnRowUp);} |
8c555625 | 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 { | |
1283eee5 | 81 | return ( (isec < fNInnerSector) ?GetPadRowRadiiLow(irow):GetPadRowRadiiUp(irow));} |
8c555625 | 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){ | |
1283eee5 | 86 | return ( (isector < fNInnerSector) ?GetNPadsLow(irow) : GetNPadsUp(irow));} |
8c555625 | 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;} | |
1283eee5 | 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 | ||
8c555625 | 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 | ||
1283eee5 | 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 | ||
8c555625 | 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;} | |
1283eee5 | 172 | Int_t GetMaxTBin(){return fMaxTBin;} |
8c555625 | 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 | ||
1283eee5 | 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 | //-------------------------------------------------------------------- | |
8c555625 | 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 | |
1283eee5 | 243 | Int_t fMaxTBin; //maximum time bin number |
8c555625 | 244 | //-------------------------------------------------------- |
245 | // | |
246 | Int_t fNtRows; //total number of rows in TPC | |
247 | ClassDef(AliTPCParam,2) //parameter object for set:TPC | |
248 | }; | |
249 | ||
250 | ||
1283eee5 | 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 | */ | |
8c555625 | 276 | |
277 | ||
278 | ||
279 | #endif |