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