]>
Commit | Line | Data |
---|---|---|
4c039060 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* | |
17 | $Log$ | |
e0a1f962 | 18 | Revision 1.17 2002/10/23 07:17:33 alibrary |
19 | Introducing Riostream.h | |
20 | ||
19364939 | 21 | Revision 1.16 2002/10/14 14:57:42 hristov |
22 | Merging the VirtualMC branch to the main development branch (HEAD) | |
23 | ||
b9d0a01d | 24 | Revision 1.13.4.1 2002/06/10 15:26:11 hristov |
25 | Merged with v3-08-02 | |
26 | ||
27 | Revision 1.15 2002/05/07 17:24:02 kowal2 | |
28 | Updated wires positions | |
29 | ||
134da240 | 30 | Revision 1.14 2002/03/29 06:57:45 kowal2 |
31 | Restored backward compatibility to use the hits from Dec. 2000 production. | |
32 | ||
7a09f434 | 33 | Revision 1.13 2002/03/18 17:59:13 kowal2 |
34 | Chnges in the pad geometry - 3 pad lengths introduced. | |
35 | ||
f03e3423 | 36 | Revision 1.12 2002/02/05 09:12:26 hristov |
37 | Small mods for gcc 3.02 | |
38 | ||
bcc5d57d | 39 | Revision 1.11 2000/11/02 07:33:48 kowal2 |
40 | Automatic streamer generation. | |
41 | ||
0bbae0f2 | 42 | Revision 1.10 2000/07/10 20:57:39 hristov |
43 | Update of TPC code and macros by M.Kowalski | |
44 | ||
37831078 | 45 | Revision 1.9 2000/06/30 12:07:50 kowal2 |
46 | Updated from the TPC-PreRelease branch | |
47 | ||
73042f01 | 48 | Revision 1.8.4.4 2000/06/26 07:39:42 kowal2 |
49 | Changes to obey the coding rules | |
50 | ||
51 | Revision 1.8.4.3 2000/06/25 08:38:41 kowal2 | |
52 | Splitted from AliTPCtracking | |
53 | ||
54 | Revision 1.8.4.2 2000/06/14 16:48:24 kowal2 | |
55 | Parameter setting improved. Removed compiler warnings | |
56 | ||
57 | Revision 1.8.4.1 2000/06/09 07:12:21 kowal2 | |
58 | ||
59 | Updated defaults | |
60 | ||
61 | Revision 1.8 2000/04/17 09:37:33 kowal2 | |
62 | removed obsolete AliTPCDigitsDisplay.C | |
63 | ||
cc80f89e | 64 | Revision 1.7.8.2 2000/04/10 08:44:51 kowal2 |
65 | ||
66 | New transformations added | |
67 | Different pad and pad-rows geometries for different sectors | |
68 | ||
69 | Revision 1.7.8.1 2000/04/10 07:56:53 kowal2 | |
70 | Not used anymore - removed | |
71 | ||
72 | Revision 1.7 1999/10/08 13:10:35 fca | |
73 | Values in SetDefault are in radiants | |
74 | ||
4d89658a | 75 | Revision 1.6 1999/10/08 06:27:59 fca |
76 | Defaults updated | |
77 | ||
683f9fec | 78 | Revision 1.5 1999/10/05 17:18:27 fca |
79 | Correct GetWire check on even/odd fnWires | |
80 | ||
ae4cbe70 | 81 | Revision 1.4 1999/09/29 09:24:34 fca |
82 | Introduction of the Copyright and cvs Log | |
83 | ||
4c039060 | 84 | */ |
85 | ||
8c555625 | 86 | /////////////////////////////////////////////////////////////////////// |
87 | // Manager and of geomety classes for set: TPC // | |
88 | // // | |
1283eee5 | 89 | // !sectors are numbered from 0 // |
90 | // !pad rows are numbered from 0 // | |
91 | // | |
92 | // 12.6. changed z relative | |
8c555625 | 93 | // Origin: Marian Ivanov, Uni. of Bratislava, ivanov@fmph.uniba.sk // |
94 | // // | |
95 | /////////////////////////////////////////////////////////////////////// | |
96 | ||
73042f01 | 97 | // |
8c555625 | 98 | |
19364939 | 99 | #include <Riostream.h> |
8c555625 | 100 | #include <TMath.h> |
1283eee5 | 101 | #include <TObject.h> |
cc80f89e | 102 | #include <TRandom.h> |
1283eee5 | 103 | #include <AliTPCParam.h> |
8c555625 | 104 | |
105 | ||
cc80f89e | 106 | |
8c555625 | 107 | |
73042f01 | 108 | ClassImp(AliTPCParam) |
8c555625 | 109 | |
110 | ||
111 | //___________________________________________ | |
112 | AliTPCParam::AliTPCParam() | |
113 | { | |
cc80f89e | 114 | // |
115 | //constructor sets the default parameters | |
116 | // | |
117 | ||
118 | fResponseBin = 0; | |
119 | fResponseWeight = 0; | |
120 | fRotAngle = 0; | |
7a09f434 | 121 | SetTitle("75x40_100x60_150x60"); |
8c555625 | 122 | SetDefault(); |
123 | } | |
124 | ||
cc80f89e | 125 | AliTPCParam::~AliTPCParam() |
1283eee5 | 126 | { |
127 | // | |
cc80f89e | 128 | //destructor deletes some dynamicaly alocated variables |
129 | // | |
130 | ||
131 | if (fResponseBin!=0) delete [] fResponseBin; | |
132 | if (fResponseWeight!=0) delete [] fResponseWeight; | |
133 | if (fRotAngle !=0) delete [] fRotAngle; | |
134 | ||
1283eee5 | 135 | } |
136 | ||
137 | ||
cc80f89e | 138 | |
139 | ||
140 | Int_t AliTPCParam::Transform0to1(Float_t *xyz, Int_t * index) const | |
141 | { | |
142 | // | |
143 | // calculates sector number (index[1], undefined on input) | |
144 | // xyz intact | |
145 | // | |
146 | ||
147 | Float_t angle,x1; | |
148 | Int_t sector; | |
149 | Float_t r = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]); | |
150 | if ((xyz[0]==0)&&(xyz[1]==0)) angle = 0.; | |
151 | else | |
8c555625 | 152 | { |
cc80f89e | 153 | angle =TMath::ASin(xyz[1]/r); |
154 | if (xyz[0]<0) angle=TMath::Pi()-angle; | |
155 | if ( (xyz[0]>0) && (xyz[1]<0) ) angle=2*TMath::Pi()+angle; | |
156 | } | |
3c0f9266 | 157 | |
e0a1f962 | 158 | sector=Int_t(TMath::Nint((angle-fInnerAngleShift)/fInnerAngle)); |
cc80f89e | 159 | |
8c555625 | 160 | Float_t cos,sin; |
cc80f89e | 161 | AdjustCosSin(sector,cos,sin); |
162 | x1=xyz[0]*cos + xyz[1]*sin; | |
8c555625 | 163 | |
cc80f89e | 164 | if (x1>fOuterRadiusLow) |
165 | { | |
e0a1f962 | 166 | sector=Int_t(TMath::Nint((angle-fOuterAngleShift)/fOuterAngle))+fNInnerSector; |
cc80f89e | 167 | if (xyz[2]<0) sector+=(fNOuterSector>>1); |
168 | } | |
8c555625 | 169 | else |
1283eee5 | 170 | if (xyz[2]<0) sector+=(fNInnerSector>>1); |
cc80f89e | 171 | index[1]=sector; // calculated sector number |
172 | index[0]=1; // indicates system after transformation | |
173 | return sector; | |
174 | } | |
1283eee5 | 175 | |
cc80f89e | 176 | Bool_t AliTPCParam::Transform(Float_t *xyz, Int_t *index, Int_t* oindex) |
177 | { | |
178 | //transformation from input coodination system to output coordination system | |
179 | switch (index[0]){ | |
180 | case 0: | |
181 | break; | |
182 | }; | |
183 | ||
184 | return kFALSE; | |
185 | ||
186 | } | |
187 | ||
188 | Int_t AliTPCParam::GetPadRow(Float_t *xyz, Int_t *index) const | |
189 | { | |
190 | // | |
191 | //calculates pad row of point xyz - transformation to system 8 (digit system) | |
192 | // | |
193 | Int_t system = index[0]; | |
194 | if (0==system) { | |
195 | Transform0to1(xyz,index); | |
196 | system=1; | |
197 | } | |
198 | if (1==system) { | |
199 | Transform1to2(xyz,index); | |
200 | system=2; | |
201 | } | |
202 | ||
203 | if (fGeometryType==0){ //straight row | |
204 | if (2==system) { | |
205 | Transform2to3(xyz,index); | |
206 | system=3; | |
207 | } | |
208 | if (3==system) { | |
209 | Transform3to4(xyz,index); | |
210 | system=4; | |
8c555625 | 211 | } |
cc80f89e | 212 | if (4==system) { |
213 | Transform4to8(xyz,index); | |
214 | system=8; | |
8c555625 | 215 | } |
cc80f89e | 216 | if (8==system) { |
217 | index[0]=8; | |
218 | return index[2]; | |
219 | } | |
8c555625 | 220 | } |
cc80f89e | 221 | |
222 | if (fGeometryType==1){ //cylindrical geometry | |
223 | if (2==system) { | |
224 | Transform2to5(xyz,index); | |
225 | system=5; | |
226 | } | |
227 | if (5==system) { | |
228 | Transform2to3(xyz,index); | |
229 | system=6; | |
230 | } | |
231 | if (6==system) { | |
232 | Transform3to4(xyz,index); | |
233 | system=7; | |
234 | } | |
235 | if (8==system) { | |
236 | index[0]=8; | |
237 | return index[2]; | |
238 | } | |
239 | } | |
240 | index[0]=system; | |
241 | return -1; //if no reasonable system | |
8c555625 | 242 | } |
243 | ||
cc80f89e | 244 | void AliTPCParam::SetSectorAngles(Float_t innerangle, Float_t innershift, Float_t outerangle, |
245 | Float_t outershift) | |
8c555625 | 246 | { |
cc80f89e | 247 | // |
248 | // set opening angles | |
73042f01 | 249 | const static Float_t kDegtoRad = 0.01745329251994; |
cc80f89e | 250 | fInnerAngle = innerangle; //opening angle of Inner sector |
251 | fInnerAngleShift = innershift; //shift of first inner sector center to the 0 | |
252 | fOuterAngle = outerangle; //opening angle of outer sector | |
253 | fOuterAngleShift = outershift; //shift of first sector center to the 0 | |
254 | fInnerAngle *=kDegtoRad; | |
255 | fInnerAngleShift *=kDegtoRad; | |
256 | fOuterAngle *=kDegtoRad; | |
257 | fOuterAngleShift *=kDegtoRad; | |
8c555625 | 258 | } |
cc80f89e | 259 | |
260 | Float_t AliTPCParam::GetInnerAngle() const | |
8c555625 | 261 | { |
cc80f89e | 262 | //return angle |
263 | return fInnerAngle; | |
264 | ||
8c555625 | 265 | } |
266 | ||
cc80f89e | 267 | Float_t AliTPCParam::GetInnerAngleShift() const |
268 | { | |
269 | //return angle | |
270 | return fInnerAngleShift; | |
8c555625 | 271 | } |
cc80f89e | 272 | Float_t AliTPCParam::GetOuterAngle() const |
273 | { | |
274 | //return angle | |
275 | return fOuterAngle; | |
276 | } | |
277 | Float_t AliTPCParam::GetOuterAngleShift() const | |
278 | { | |
279 | //return angle | |
280 | ||
281 | return fOuterAngleShift; | |
282 | } | |
283 | ||
8c555625 | 284 | |
285 | Int_t AliTPCParam::GetIndex(Int_t sector, Int_t row) | |
286 | { | |
287 | // | |
288 | //give index of the given sector and pad row | |
289 | //no control if the sectors and rows are reasonable !!! | |
290 | // | |
cc80f89e | 291 | if (sector<fNInnerSector) return sector*fNRowLow+row; |
292 | return (fNInnerSector*fNRowLow)+(sector-fNInnerSector)*fNRowUp+row; | |
8c555625 | 293 | } |
294 | ||
cc80f89e | 295 | Bool_t AliTPCParam::AdjustSectorRow(Int_t index, Int_t & sector, Int_t &row) const |
8c555625 | 296 | { |
297 | // | |
298 | //return sector and padrow for given index | |
cc80f89e | 299 | //if index is reasonable returns true else return false |
8c555625 | 300 | // |
301 | if ( (index<0) || (index>fNtRows)) return kFALSE; | |
cc80f89e | 302 | Int_t outindex = fNInnerSector*fNRowLow; |
8c555625 | 303 | if (index<outindex) { |
cc80f89e | 304 | sector = index/fNRowLow; |
305 | row = index - sector*fNRowLow; | |
8c555625 | 306 | return kTRUE; |
307 | } | |
308 | index-= outindex; | |
cc80f89e | 309 | sector = index/fNRowUp; |
310 | row = index - sector*fNRowUp; | |
311 | sector += fNInnerSector; | |
8c555625 | 312 | return kTRUE; |
313 | } | |
314 | ||
cc80f89e | 315 | void AliTPCParam::SetDefault() |
8c555625 | 316 | { |
317 | // | |
cc80f89e | 318 | //set default parameters |
8c555625 | 319 | // |
37831078 | 320 | //const static Int_t kMaxRows=600; |
73042f01 | 321 | // |
322 | //sector default parameters | |
323 | // | |
7a09f434 | 324 | const static Float_t kInnerRadiusLow = 82.97; |
325 | const static Float_t kInnerRadiusUp = 133.17; | |
326 | const static Float_t kOuterRadiusLow = 133.58; | |
327 | const static Float_t kOuterRadiusUp = 247.78; | |
73042f01 | 328 | const static Float_t kInnerAngle = 20; // 20 degrees |
329 | const static Float_t kInnerAngleShift = 10; | |
330 | const static Float_t kOuterAngle = 20; // 20 degrees | |
331 | const static Float_t kOuterAngleShift = 10; | |
332 | const static Float_t kInnerFrameSpace = 1.5; | |
333 | const static Float_t kOuterFrameSpace = 1.5; | |
37831078 | 334 | const static Float_t kInnerWireMount = 1.370825926; |
335 | const static Float_t kOuterWireMount = 1.370825926; | |
73042f01 | 336 | const static Float_t kZLength =250.; |
337 | const static Int_t kGeometryType = 0; //straight rows | |
f03e3423 | 338 | const static Int_t kNRowLow = 63; |
339 | const static Int_t kNRowUp1 = 64; | |
340 | const static Int_t kNRowUp2 = 32; | |
341 | const static Int_t kNRowUp = 96; | |
73042f01 | 342 | // |
343 | //wires default parameters | |
344 | // | |
345 | const static Int_t kNInnerWiresPerPad = 3; | |
346 | const static Int_t kInnerDummyWire = 2; | |
f03e3423 | 347 | const static Float_t kInnerWWPitch = 0.25; |
134da240 | 348 | const static Float_t kRInnerFirstWire = 84.445; |
349 | const static Float_t kRInnerLastWire = 132.445; | |
73042f01 | 350 | const static Float_t kInnerOffWire = 0.5; |
f03e3423 | 351 | const static Int_t kNOuter1WiresPerPad = 4; |
352 | const static Int_t kNOuter2WiresPerPad = 6; | |
353 | const static Float_t kOuterWWPitch = 0.25; | |
134da240 | 354 | const static Float_t kROuterFirstWire = 134.305; |
355 | const static Float_t kROuterLastWire = 247.055; | |
73042f01 | 356 | const static Int_t kOuterDummyWire = 2; |
357 | const static Float_t kOuterOffWire = 0.5; | |
358 | // | |
359 | //pad default parameters | |
360 | // | |
361 | const static Float_t kInnerPadPitchLength = 0.75; | |
362 | const static Float_t kInnerPadPitchWidth = 0.40; | |
363 | const static Float_t kInnerPadLength = 0.75; | |
364 | const static Float_t kInnerPadWidth = 0.40; | |
f03e3423 | 365 | const static Float_t kOuter1PadPitchLength = 1.0; |
73042f01 | 366 | const static Float_t kOuterPadPitchWidth = 0.6; |
f03e3423 | 367 | const static Float_t kOuter1PadLength = 1.0; |
73042f01 | 368 | const static Float_t kOuterPadWidth = 0.6; |
f03e3423 | 369 | const static Float_t kOuter2PadPitchLength = 1.5; |
370 | const static Float_t kOuter2PadLength = 1.5; | |
371 | ||
73042f01 | 372 | const static Bool_t kBMWPCReadout = kTRUE; //MWPC readout - another possibility GEM |
373 | const static Int_t kNCrossRows = 1; //number of rows to cross-talk | |
374 | ||
375 | // | |
376 | //gas default parameters | |
377 | // | |
378 | const static Float_t kDiffT = 2.2e-2; | |
379 | const static Float_t kDiffL = 2.2e-2; | |
380 | const static Float_t kGasGain = 2.e4; | |
381 | const static Float_t kDriftV =2.83e6; | |
382 | const static Float_t kOmegaTau = 0.145; | |
383 | const static Float_t kAttCoef = 250.; | |
384 | const static Float_t kOxyCont = 5.e-6; | |
385 | // | |
386 | //electronic default parameters | |
387 | // | |
388 | const static Float_t kPadCoupling=0.5; | |
389 | const static Int_t kZeroSup=2; | |
390 | const static Float_t kNoise = 1000; | |
391 | const static Float_t kChipGain = 12; | |
392 | const static Float_t kChipNorm = 0.4; | |
393 | const static Float_t kTSample = 2.e-7; | |
394 | const static Float_t kTFWHM = 1.9e-7; //fwhm of charge distribution | |
395 | const static Int_t kMaxTBin =445; | |
396 | const static Int_t kADCSat =1024; | |
397 | const static Float_t kADCDynRange =2000.; | |
398 | // | |
399 | // | |
400 | // | |
401 | const static Float_t kBField =0.2; | |
402 | const static Float_t kNPrimLoss =10.9; | |
403 | const static Float_t kNTotalLoss =39.9; | |
404 | // | |
405 | //response constants | |
406 | // | |
407 | const static Int_t kNResponseMax=100; | |
408 | const static Float_t kResponseThreshold=0.01; | |
8c555625 | 409 | fbStatus = kFALSE; |
8c555625 | 410 | // |
cc80f89e | 411 | //set sector parameters |
412 | // | |
413 | SetInnerRadiusLow(kInnerRadiusLow); | |
414 | SetOuterRadiusLow(kOuterRadiusLow); | |
415 | SetInnerRadiusUp(kInnerRadiusUp); | |
416 | SetOuterRadiusUp(kOuterRadiusUp); | |
417 | SetInnerFrameSpace(kInnerFrameSpace); | |
418 | SetOuterFrameSpace(kOuterFrameSpace); | |
419 | SetInnerWireMount(kInnerWireMount); | |
420 | SetOuterWireMount(kOuterWireMount); | |
421 | SetSectorAngles(kInnerAngle,kInnerAngleShift,kOuterAngle,kOuterAngleShift); | |
422 | SetZLength(kZLength); | |
423 | SetGeometryType(kGeometryType); | |
f03e3423 | 424 | SetRowNLow(kNRowLow); |
425 | SetRowNUp1 (kNRowUp1); | |
426 | SetRowNUp2(kNRowUp2); | |
427 | SetRowNUp(kNRowUp); | |
cc80f89e | 428 | // |
429 | //set wire parameters | |
430 | // | |
431 | SetInnerNWires(kNInnerWiresPerPad); | |
432 | SetInnerDummyWire(kInnerDummyWire); | |
433 | SetInnerOffWire(kInnerOffWire); | |
f03e3423 | 434 | SetOuter1NWires(kNOuter1WiresPerPad); |
435 | SetOuter2NWire(kNOuter2WiresPerPad); | |
cc80f89e | 436 | SetOuterDummyWire(kOuterDummyWire); |
437 | SetOuterOffWire(kOuterOffWire); | |
f03e3423 | 438 | SetInnerWWPitch(kInnerWWPitch); |
439 | SetRInnerFirstWire(kRInnerFirstWire); | |
440 | SetRInnerLastWire(kRInnerLastWire); | |
441 | SetOuterWWPitch(kOuterWWPitch); | |
442 | SetROuterFirstWire(kROuterFirstWire); | |
443 | SetROuterLastWire(kROuterLastWire); | |
cc80f89e | 444 | // |
445 | //set pad parameter | |
1283eee5 | 446 | // |
cc80f89e | 447 | SetInnerPadPitchLength(kInnerPadPitchLength); |
448 | SetInnerPadPitchWidth(kInnerPadPitchWidth); | |
449 | SetInnerPadLength(kInnerPadLength); | |
450 | SetInnerPadWidth(kInnerPadWidth); | |
f03e3423 | 451 | SetOuter1PadPitchLength(kOuter1PadPitchLength); |
452 | SetOuter2PadPitchLength(kOuter2PadPitchLength); | |
cc80f89e | 453 | SetOuterPadPitchWidth(kOuterPadPitchWidth); |
f03e3423 | 454 | SetOuter1PadLength(kOuter1PadLength); |
455 | SetOuter2PadLength(kOuter2PadLength); | |
cc80f89e | 456 | SetOuterPadWidth(kOuterPadWidth); |
457 | SetMWPCReadout(kBMWPCReadout); | |
458 | SetNCrossRows(kNCrossRows); | |
1283eee5 | 459 | // |
cc80f89e | 460 | //set gas paremeters |
461 | // | |
462 | SetDiffT(kDiffT); | |
463 | SetDiffL(kDiffL); | |
464 | SetGasGain(kGasGain); | |
465 | SetDriftV(kDriftV); | |
466 | SetOmegaTau(kOmegaTau); | |
467 | SetAttCoef(kAttCoef); | |
468 | SetOxyCont(kOxyCont); | |
469 | // | |
470 | //set electronivc parameters | |
471 | // | |
472 | SetPadCoupling(kPadCoupling); | |
473 | SetZeroSup(kZeroSup); | |
474 | SetNoise(kNoise); | |
475 | SetChipGain(kChipGain); | |
476 | SetChipNorm(kChipNorm); | |
477 | SetTSample(kTSample); | |
478 | SetTFWHM(kTFWHM); | |
479 | SetMaxTBin(kMaxTBin); | |
480 | SetADCSat(kADCSat); | |
481 | SetADCDynRange(kADCDynRange); | |
482 | //set magnetic field | |
483 | SetBField(kBField); | |
484 | SetNPrimLoss(kNPrimLoss); | |
485 | SetNTotalLoss(kNTotalLoss); | |
486 | // | |
487 | //set response parameters | |
488 | // | |
489 | SetNResponseMax(kNResponseMax); | |
bcc5d57d | 490 | SetResponseThreshold(static_cast<int>(kResponseThreshold)); |
8c555625 | 491 | } |
cc80f89e | 492 | |
8c555625 | 493 | |
494 | Bool_t AliTPCParam::Update() | |
495 | { | |
1283eee5 | 496 | // |
497 | // update some calculated parameter which must be updated after changing "base" | |
498 | // parameters | |
499 | // for example we can change size of pads and according this recalculate number | |
500 | // of pad rows, number of of pads in given row .... | |
501 | // | |
73042f01 | 502 | const Float_t kQel = 1.602e-19; // elementary charge |
8c555625 | 503 | fbStatus = kFALSE; |
1283eee5 | 504 | |
505 | Int_t i,j; //loop variables because HP | |
506 | //-----------------Sector section------------------------------------------ | |
507 | //calclulate number of sectors | |
cc80f89e | 508 | fNInnerSector = Int_t(4*TMath::Pi()/fInnerAngle+0.2); |
509 | // number of inner sectors - factor 0.2 to don't be influnced by inprecision | |
1283eee5 | 510 | if (fNInnerSector%2) return kFALSE; |
511 | fNOuterSector = Int_t(4*TMath::Pi()/fOuterAngle+0.2); | |
512 | if (fNOuterSector%2) return kFALSE; | |
513 | fNSector = fNInnerSector+fNOuterSector; | |
cc80f89e | 514 | |
515 | if (fRotAngle!=0) delete [] fRotAngle; | |
516 | fRotAngle = new Float_t[4*fNSector]; | |
1283eee5 | 517 | //calculate sin and cosine of rotations angle |
518 | //sectors angles numbering from 0 | |
cc80f89e | 519 | |
520 | j=fNInnerSector*2; | |
1283eee5 | 521 | Float_t angle = fInnerAngleShift; |
cc80f89e | 522 | for (i=0; j<fNInnerSector*4; i+=4, j+=4 , angle +=fInnerAngle){ |
1283eee5 | 523 | fRotAngle[i]=TMath::Cos(angle); |
524 | fRotAngle[i+1]=TMath::Sin(angle); | |
525 | fRotAngle[j] = fRotAngle[i]; | |
526 | fRotAngle[j+1] = fRotAngle[i+1]; | |
cc80f89e | 527 | fRotAngle[i+2] =angle; |
528 | fRotAngle[j+2] =angle; | |
1283eee5 | 529 | } |
530 | angle = fOuterAngleShift; | |
cc80f89e | 531 | j=(fNInnerSector+fNOuterSector/2)*4; |
532 | for (i=fNInnerSector*4; j<fNSector*4; i+=4,j+=4, angle +=fOuterAngle){ | |
1283eee5 | 533 | fRotAngle[i]=TMath::Cos(angle); |
534 | fRotAngle[i+1]=TMath::Sin(angle); | |
535 | fRotAngle[j] = fRotAngle[i]; | |
536 | fRotAngle[j+1] = fRotAngle[i+1]; | |
cc80f89e | 537 | fRotAngle[i+2] =angle; |
538 | fRotAngle[j+2] =angle; | |
1283eee5 | 539 | } |
cc80f89e | 540 | fZWidth = fTSample*fDriftV; |
73042f01 | 541 | fTotalNormFac = fPadCoupling*fChipNorm*kQel*1.e15*fChipGain*fADCSat/fADCDynRange; |
542 | fNoiseNormFac = kQel*1.e15*fChipGain*fADCSat/fADCDynRange; | |
cc80f89e | 543 | //wire section |
f03e3423 | 544 | /* Int_t nwire; |
cc80f89e | 545 | Float_t wspace; //available space for wire |
546 | Float_t dummyspace; //dummyspace for wire | |
f03e3423 | 547 | |
cc80f89e | 548 | wspace =fInnerRadiusUp-fInnerRadiusLow-2*fInnerOffWire; |
549 | nwire = Int_t(wspace/fInnerWWPitch); | |
550 | wspace = Float_t(nwire)*fInnerWWPitch; | |
f03e3423 | 551 | dummyspace =(fInnerRadiusUp-fInnerRadiusLow-wspace)/2.; |
cc80f89e | 552 | wspace =fOuterRadiusUp-fOuterRadiusLow-2*fOuterOffWire; |
553 | nwire = Int_t(wspace/fOuterWWPitch); | |
554 | wspace = Float_t(nwire)*fOuterWWPitch; | |
555 | dummyspace =(fOuterRadiusUp-fOuterRadiusLow-wspace)/2.; | |
556 | fROuterFirstWire = fOuterRadiusLow+dummyspace; | |
557 | fROuterLastWire = fROuterFirstWire+fOuterWWPitch*(Float_t)(nwire); | |
f03e3423 | 558 | */ |
1283eee5 | 559 | |
8c555625 | 560 | // |
cc80f89e | 561 | //response data |
562 | // | |
563 | if (fResponseBin==0) delete [] fResponseBin; | |
564 | if (fResponseWeight==0) delete [] fResponseBin; | |
565 | fResponseBin = new Int_t[3*fNResponseMax]; | |
566 | fResponseWeight = new Float_t[fNResponseMax]; | |
567 | ||
8c555625 | 568 | fbStatus = kTRUE; |
569 | return kTRUE; | |
570 | } | |
571 | ||
572 | ||
573 | ||
574 | Bool_t AliTPCParam::GetStatus() | |
575 | { | |
576 | //get information about object consistency | |
577 | return fbStatus; | |
578 | } | |
579 | ||
580 | Int_t AliTPCParam::GetNRowLow() const | |
581 | { | |
582 | //get the number of pad rows in low sector | |
cc80f89e | 583 | return fNRowLow; |
8c555625 | 584 | } |
585 | Int_t AliTPCParam::GetNRowUp() const | |
586 | { | |
587 | //get the number of pad rows in up sector | |
cc80f89e | 588 | return fNRowUp; |
8c555625 | 589 | } |
f03e3423 | 590 | Int_t AliTPCParam::GetNRowUp1() const |
591 | { | |
592 | //get the number of pad rows in up1 sector | |
593 | return fNRowUp1; | |
594 | } | |
595 | Int_t AliTPCParam::GetNRowUp2() const | |
596 | { | |
597 | //get the number of pad rows in up2 sector | |
598 | return fNRowUp2; | |
599 | } | |
8c555625 | 600 | Float_t AliTPCParam::GetPadRowRadiiLow(Int_t irow) const |
601 | { | |
602 | //get the pad row (irow) radii | |
cc80f89e | 603 | if ( !(irow<0) && (irow<fNRowLow) ) |
8c555625 | 604 | return fPadRowLow[irow]; |
605 | else | |
606 | return 0; | |
607 | } | |
608 | ||
609 | Float_t AliTPCParam::GetPadRowRadiiUp(Int_t irow) const | |
610 | { | |
611 | //get the pad row (irow) radii | |
cc80f89e | 612 | if ( !(irow<0) && (irow<fNRowUp) ) |
8c555625 | 613 | return fPadRowUp[irow]; |
614 | else | |
615 | return 0; | |
616 | } | |
617 | ||
618 | Int_t AliTPCParam::GetNPadsLow(Int_t irow) const | |
619 | { | |
620 | //get the number of pads in row irow | |
cc80f89e | 621 | if ( !(irow<0) && (irow<fNRowLow) ) |
622 | return fNPadsLow[irow]; | |
8c555625 | 623 | else |
624 | return 0; | |
625 | } | |
626 | ||
627 | ||
628 | Int_t AliTPCParam::GetNPadsUp(Int_t irow) const | |
629 | { | |
630 | //get the number of pads in row irow | |
cc80f89e | 631 | if ( !(irow<0) && (irow<fNRowUp) ) |
632 | return fNPadsUp[irow]; | |
8c555625 | 633 | else |
634 | return 0; | |
635 | } | |
f03e3423 | 636 | Float_t AliTPCParam::GetYInner(Int_t irow) const |
637 | { | |
638 | return fYInner[irow]; | |
639 | } | |
640 | ||
641 | ||
642 | Float_t AliTPCParam::GetYOuter(Int_t irow) const | |
643 | { | |
644 | return fYOuter[irow]; | |
645 | } | |
646 | ||
647 | ||
648 | ||
649 | ||
650 | ||
651 | ||
652 | ||
8c555625 | 653 |