AliRoot Core  a565103 (a565103)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliTPCParam.cxx
Go to the documentation of this file.
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 
26 
27 //
28 
29 #include <AliTPCParam.h>
30 
31 #include <TGeoManager.h>
32 #include <TGeoPhysicalNode.h>
33 #include <TString.h>
34 #include "AliAlignObj.h"
35 #include "AliAlignObjParams.h"
36 #include "AliLog.h"
37 #include "TGraphErrors.h"
38 #include "AliTPCcalibDB.h"
39 #include "AliTPCROC.h"
40 #include "AliMathBase.h"
41 
43 
47 
48 
49 //___________________________________________
52  fbStatus(kFALSE),
53  fInnerRadiusLow(0.),
54  fInnerRadiusUp(0.),
55  fOuterRadiusUp(0.),
56  fOuterRadiusLow(0.),
57  fInnerAngle(0.),
58  fInnerAngleShift(0.),
59  fOuterAngle(0.),
60  fOuterAngleShift(0.),
61  fInnerFrameSpace(0.),
62  fOuterFrameSpace(0.),
63  fInnerWireMount(0.),
64  fOuterWireMount(0.),
65  fNInnerSector(0),
66  fNOuterSector(0),
67  fNSector(0),
68  fZLength(0),
69  fRotAngle(),
70  fGeometryType(0),
71  fTrackingMatrix(0),
72  fClusterMatrix(0),
73  fGlobalMatrix(0),
74  fNInnerWiresPerPad(0),
75  fInnerWWPitch(0),
76  fInnerDummyWire(0),
77  fInnerOffWire(0.),
78  fRInnerFirstWire(0.),
79  fRInnerLastWire(0.),
80  fLastWireUp1(0.),
81  fNOuter1WiresPerPad(0),
82  fNOuter2WiresPerPad(0),
83  fOuterWWPitch(0.),
84  fOuterDummyWire(0),
85  fOuterOffWire(0.),
86  fROuterFirstWire(0.),
87  fROuterLastWire(0.),
88  fInnerPadPitchLength(0.),
89  fInnerPadPitchWidth(0.),
90  fInnerPadLength(0.),
91  fInnerPadWidth(0.),
92  fOuter1PadPitchLength(0.),
93  fOuter2PadPitchLength(0.),
94  fOuterPadPitchWidth(0.),
95  fOuter1PadLength(0.),
96  fOuter2PadLength(0.),
97  fOuterPadWidth(0.),
98  fBMWPCReadout(kFALSE),
99  fNCrossRows(0),
100  fNRowLow(0),
101  fNRowUp1(0),
102  fNRowUp2(0),
103  fNRowUp(0),
104  fNtRows(0),
105  fDiffT(0.),
106  fDiffL(0.),
107  fGasGain(0.),
108  fDriftV(0.),
109  fOmegaTau(0.),
110  fAttCoef(0.),
111  fOxyCont(0.),
112  fFpot(0.),
113  fNprim(0.),
114  fNtot(0.),
115  fWmean(0.),
116  fExp(0.),
117  fEend(0.),
118  fBetheBloch(0x0), // dE/dx:BG - used in the reconstruction
119  fBetheBlochMC(0x0), // dN_{prim}/dx:BG - used for the simulation of energy loss
120  fGainSlopesHV(0), // graph with the gain slope as function of HV - per chamber
121  fGainSlopesPT(0), // graph with the gain slope as function of P/T - per chamber
122  fPadCoupling(0.),
123  fZeroSup(0),
124  fNoise(0.),
125  fChipGain(0.),
126  fChipNorm(0.),
127  fTSample(0.),
128  fZWidth(0.),
129  fTSigma(0.),
130  fMaxTBin(0),
131  fADCSat(0),
132  fADCDynRange(0.),
133  fTotalNormFac(0.),
134  fNoiseNormFac(0.),
135  fUseGlitchFilter(kTRUE),
136  fNominalVoltage(),
137  fMaxVoltageDeviation(40.),
138  fMaxDipVoltage(2.),
139  fMaxHVfractionBad(.4),
140  fVoltageDipScanPeriod(1.),
141  fNResponseMax(0),
142  fResponseThreshold(0.),
143  fCurrentMax(0),
144  fResponseBin(0),
145  fResponseWeight(0),
146  fGateDelay(0.),
147  fL1Delay(0.),
148  fNTBinsBeforeL1(0),
149  fNTBinsL1(0.)
150 {
151  //
152  //constructor sets the default parameters
153  //
154 
155  SetTitle("75x40_100x60_150x60");
156  SetDefault();
157  if (!fBBParam) fBBParam= new TObjArray(1000);
158  fRegionGain[0]=fRegionGain[1]=fRegionGain[2]=0.;
159 }
160 
162 {
164 
165  if (fResponseBin!=0) delete [] fResponseBin;
166  if (fResponseWeight!=0) delete [] fResponseWeight;
167  if (fRotAngle !=0) delete [] fRotAngle;
168 
170 
171 }
172 
173 Int_t AliTPCParam::Transform0to1(Float_t *xyz, Int_t * index) const
174 {
177 
178  Float_t angle,x1;
179  Int_t sector;
180  Float_t r = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]);
181  if ((xyz[0]==0)&&(xyz[1]==0)) angle = 0.;
182  else
183  {
184  angle =TMath::ASin(xyz[1]/r);
185  if (xyz[0]<0) angle=TMath::Pi()-angle;
186  if ( (xyz[0]>0) && (xyz[1]<0) ) angle=2*TMath::Pi()+angle;
187  }
188 
189  sector=Int_t(TMath::Nint((angle-fInnerAngleShift)/fInnerAngle));
190 
191  Float_t cos,sin;
192  AdjustCosSin(sector,cos,sin);
193  x1=xyz[0]*cos + xyz[1]*sin;
194 
195  if (x1>fOuterRadiusLow)
196  {
197  sector=Int_t(TMath::Nint((angle-fOuterAngleShift)/fOuterAngle))+fNInnerSector;
198  if (xyz[2]<0) sector+=(fNOuterSector>>1);
199  }
200  else
201  if (xyz[2]<0) sector+=(fNInnerSector>>1);
202  if (sector<0 || sector>=fNSector) AliError(Form("Wrong sector %d",sector));
203  index[1]=sector; // calculated sector number
204  index[0]=1; // indicates system after transformation
205  return sector;
206 }
207 
208 Bool_t AliTPCParam::Transform(Float_t */*xyz*/, Int_t *index, Int_t* /*oindex*/)
209 {
211 
212  switch (index[0]){
213  case 0:
214  break;
215  };
216 
217  return kFALSE;
218 
219 }
220 
221 Int_t AliTPCParam::GetPadRow(Float_t *xyz, Int_t *index) const
222 {
224 
225  Int_t system = index[0];
226  if (0==system) {
227  Transform0to1(xyz,index);
228  system=1;
229  }
230  if (1==system) {
231  Transform1to2(xyz,index);
232  system=2;
233  }
234 
235  if (fGeometryType==0){ //straight row
236  if (2==system) {
237  Transform2to3(xyz,index);
238  system=3;
239  }
240  if (3==system) {
241  Transform3to4(xyz,index);
242  system=4;
243  }
244  if (4==system) {
245  Transform4to8(xyz,index);
246  system=8;
247  }
248  if (8==system) {
249  index[0]=8;
250  return index[2];
251  }
252  }
253 
254  if (fGeometryType==1){ //cylindrical geometry
255  if (2==system) {
256  Transform2to5(xyz,index);
257  system=5;
258  }
259  if (5==system) {
260  Transform2to3(xyz,index);
261  system=6;
262  }
263  if (6==system) {
264  Transform3to4(xyz,index);
265  system=7;
266  }
267  if (8==system) {
268  index[0]=8;
269  return index[2];
270  }
271  }
272  index[0]=system;
273  return -1; //if no reasonable system
274 }
275 
276 void AliTPCParam::SetSectorAngles(Float_t innerangle, Float_t innershift, Float_t outerangle,
277  Float_t outershift)
278 {
280 
281  static const Float_t kDegtoRad = 0.01745329251994;
282  fInnerAngle = innerangle; //opening angle of Inner sector
283  fInnerAngleShift = innershift; //shift of first inner sector center to the 0
284  fOuterAngle = outerangle; //opening angle of outer sector
285  fOuterAngleShift = outershift; //shift of first sector center to the 0
286  fInnerAngle *=kDegtoRad;
287  fInnerAngleShift *=kDegtoRad;
288  fOuterAngle *=kDegtoRad;
289  fOuterAngleShift *=kDegtoRad;
290 }
291 
293 {
295 
296  return fInnerAngle;
297 
298 }
299 
301 {
303 
304  return fInnerAngleShift;
305 }
307 {
309 
310  return fOuterAngle;
311 }
313 {
315 
316  return fOuterAngleShift;
317 }
318 
319 
320 Int_t AliTPCParam::GetIndex(Int_t sector, Int_t row) const
321 {
324 
325  if (sector<fNInnerSector) return sector*fNRowLow+row;
326  return (fNInnerSector*fNRowLow)+(sector-fNInnerSector)*fNRowUp+row;
327 }
328 
329 Bool_t AliTPCParam::AdjustSectorRow(Int_t index, Int_t & sector, Int_t &row) const
330 {
333 
334  if ( (index<0) || (index>fNtRows)) return kFALSE;
335  Int_t outindex = fNInnerSector*fNRowLow;
336  if (index<outindex) {
337  sector = index/fNRowLow;
338  row = index - sector*fNRowLow;
339  return kTRUE;
340  }
341  index-= outindex;
342  sector = index/fNRowUp;
343  row = index - sector*fNRowUp;
344  sector += fNInnerSector;
345  return kTRUE;
346 }
347 
349 {
355 
356  static const Float_t kInnerRadiusLow = 83.65;
357  static const Float_t kInnerRadiusUp = 133.3;
358  static const Float_t kOuterRadiusLow = 133.5;
359  static const Float_t kOuterRadiusUp = 247.7;
360  static const Float_t kInnerAngle = 20; // 20 degrees
361  static const Float_t kInnerAngleShift = 10;
362  static const Float_t kOuterAngle = 20; // 20 degrees
363  static const Float_t kOuterAngleShift = 10;
364  static const Float_t kInnerFrameSpace = 1.5;
365  static const Float_t kOuterFrameSpace = 1.5;
366  static const Float_t kInnerWireMount = 1.2;
367  static const Float_t kOuterWireMount = 1.4;
368  static const Float_t kZLength =250.;
369  static const Int_t kGeometryType = 0; //straight rows
370  static const Int_t kNRowLow = 63;
371  static const Int_t kNRowUp1 = 64;
372  static const Int_t kNRowUp2 = 32;
373  static const Int_t kNRowUp = 96;
374  //
375  //wires default parameters
376  //
377  static const Int_t kNInnerWiresPerPad = 3;
378  static const Int_t kInnerDummyWire = 2;
379  static const Float_t kInnerWWPitch = 0.25;
380  static const Float_t kRInnerFirstWire = 84.475;
381  static const Float_t kRInnerLastWire = 132.475;
382  static const Float_t kInnerOffWire = 0.5;
383  static const Int_t kNOuter1WiresPerPad = 4;
384  static const Int_t kNOuter2WiresPerPad = 6;
385  static const Float_t kOuterWWPitch = 0.25;
386  static const Float_t kROuterFirstWire = 134.225;
387  static const Float_t kROuterLastWire = 246.975;
388  static const Int_t kOuterDummyWire = 2;
389  static const Float_t kOuterOffWire = 0.5;
390  //
391  //pad default parameters
392  //
393  static const Float_t kInnerPadPitchLength = 0.75;
394  static const Float_t kInnerPadPitchWidth = 0.40;
395  static const Float_t kInnerPadLength = 0.75;
396  static const Float_t kInnerPadWidth = 0.40;
397  static const Float_t kOuter1PadPitchLength = 1.0;
398  static const Float_t kOuterPadPitchWidth = 0.6;
399  static const Float_t kOuter1PadLength = 1.0;
400  static const Float_t kOuterPadWidth = 0.6;
401  static const Float_t kOuter2PadPitchLength = 1.5;
402  static const Float_t kOuter2PadLength = 1.5;
403 
404  static const Bool_t kBMWPCReadout = kTRUE; //MWPC readout - another possibility GEM
405  static const Int_t kNCrossRows = 1; //number of rows to cross-talk
406 
407  //
408  //gas default parameters
409  //
410  static const Float_t kDiffT = 2.2e-2;
411  static const Float_t kDiffL = 2.2e-2;
412  static const Float_t kGasGain = 2.e4;
413  static const Float_t kDriftV =2.83e6;
414  static const Float_t kOmegaTau = 0.145;
415  static const Float_t kAttCoef = 250.;
416  static const Float_t kOxyCont = 5.e-6;
417  static const Float_t kFpot = 22.77e-9;
418  static const Float_t kNprim=14.35;
419  static const Float_t kNtot=42.66;
420  static const Float_t kWmean = 35.97e-9;
421  static const Float_t kExp = 2.2;
422  static const Float_t kEend = 10.e-6;
423  //
424  //electronic default parameters
425  //
426  static const Float_t kPadCoupling=0.5;
427  static const Int_t kZeroSup=2;
428  static const Float_t kNoise = 1000;
429  static const Float_t kChipGain = 12;
430  static const Float_t kChipNorm = 0.4;
431  static const Float_t kTSample = 2.e-7;
432  static const Float_t kTFWHM = 1.9e-7; //fwhm of charge distribution
433  static const Int_t kMaxTBin =445;
434  static const Int_t kADCSat =1024;
435  static const Float_t kADCDynRange =2000.;
436  //
437  //response constants
438  //
439  static const Int_t kNResponseMax=100;
440  static const Float_t kResponseThreshold=0.01;
441  //L1 constants
442  // static const Float_t kGateDelay=6.1e-6; //In s
443  static const Float_t kGateDelay=0.; //For the moment no gating
444  // static const Float_t kL1Delay=6.5e-6; //In s
445  static const Float_t kL1Delay=0.; //For the moment no delay
446  // static const UShort_t kNTBinsBeforeL1=14;
447  static const UShort_t kNTBinsBeforeL1=0; //For the moment no shift
448  fbStatus = kFALSE;
449  //
450  //set sector parameters
451  //
452  SetInnerRadiusLow(kInnerRadiusLow);
453  SetOuterRadiusLow(kOuterRadiusLow);
454  SetInnerRadiusUp(kInnerRadiusUp);
455  SetOuterRadiusUp(kOuterRadiusUp);
456  SetInnerFrameSpace(kInnerFrameSpace);
457  SetOuterFrameSpace(kOuterFrameSpace);
458  SetInnerWireMount(kInnerWireMount);
459  SetOuterWireMount(kOuterWireMount);
460  SetSectorAngles(kInnerAngle,kInnerAngleShift,kOuterAngle,kOuterAngleShift);
461  SetZLength(kZLength);
462  SetGeometryType(kGeometryType);
463  SetRowNLow(kNRowLow);
464  SetRowNUp1 (kNRowUp1);
465  SetRowNUp2(kNRowUp2);
466  SetRowNUp(kNRowUp);
467  //
468  //set wire parameters
469  //
470  SetInnerNWires(kNInnerWiresPerPad);
471  SetInnerDummyWire(kInnerDummyWire);
472  SetInnerOffWire(kInnerOffWire);
473  SetOuter1NWires(kNOuter1WiresPerPad);
474  SetOuter2NWire(kNOuter2WiresPerPad);
475  SetOuterDummyWire(kOuterDummyWire);
476  SetOuterOffWire(kOuterOffWire);
477  SetInnerWWPitch(kInnerWWPitch);
478  SetRInnerFirstWire(kRInnerFirstWire);
479  SetRInnerLastWire(kRInnerLastWire);
480  SetOuterWWPitch(kOuterWWPitch);
481  SetROuterFirstWire(kROuterFirstWire);
482  SetROuterLastWire(kROuterLastWire);
483  //
484  //set pad parameter
485  //
486  SetInnerPadPitchLength(kInnerPadPitchLength);
487  SetInnerPadPitchWidth(kInnerPadPitchWidth);
488  SetInnerPadLength(kInnerPadLength);
489  SetInnerPadWidth(kInnerPadWidth);
490  SetOuter1PadPitchLength(kOuter1PadPitchLength);
491  SetOuter2PadPitchLength(kOuter2PadPitchLength);
492  SetOuterPadPitchWidth(kOuterPadPitchWidth);
493  SetOuter1PadLength(kOuter1PadLength);
494  SetOuter2PadLength(kOuter2PadLength);
495  SetOuterPadWidth(kOuterPadWidth);
496  SetMWPCReadout(kBMWPCReadout);
497  SetNCrossRows(kNCrossRows);
498  //
499  //set gas paremeters
500  //
501  SetDiffT(kDiffT);
502  SetDiffL(kDiffL);
503  SetGasGain(kGasGain);
504  SetDriftV(kDriftV);
505  SetOmegaTau(kOmegaTau);
506  SetAttCoef(kAttCoef);
507  SetOxyCont(kOxyCont);
508  SetFpot(kFpot);
509  SetNprim(kNprim);
510  SetNtot(kNtot);
511  SetWmean(kWmean);
512  SetExp(kExp);
513  SetEend(kEend);
514  //
515  SetComposition(0.9,0.,0.1,0.,0.,0.);// Ne-CO2 90/10
516  //
519  //
520  //set electronivc parameters
521  //
522  SetPadCoupling(kPadCoupling);
523  SetZeroSup(kZeroSup);
524  SetNoise(kNoise);
525  SetChipGain(kChipGain);
526  SetChipNorm(kChipNorm);
527  SetTSample(kTSample);
528  SetTFWHM(kTFWHM);
529  SetMaxTBin(kMaxTBin);
530  SetADCSat(kADCSat);
531  SetADCDynRange(kADCDynRange);
532  for (UInt_t i=0; i<36; i++)
533  {
534  SetNominalVoltage(1196.0, i);
535  }
536  for (UInt_t i=36; i<72; i++)
537  {
538  SetNominalVoltage(1417.0, i);
539  }
540 // //set magnetic field
541 // SetBField(kBField);
542 // SetNPrimLoss(kNPrimLoss);
543 // SetNTotalLoss(kNTotalLoss);
544  //
545  //set response parameters
546  //
547  SetNResponseMax(kNResponseMax);
548  SetResponseThreshold(static_cast<int>(kResponseThreshold));
549  //L1 data
550  SetGateDelay(kGateDelay);
551  SetL1Delay(kL1Delay);
552  SetNTBinsBeforeL1(kNTBinsBeforeL1);
554 }
555 
556 
558 {
563 
564  const Float_t kQel = 1.602e-19; // elementary charge
565  fbStatus = kFALSE;
566 
567  Int_t i,j; //loop variables because HP
568  //-----------------Sector section------------------------------------------
569  //calclulate number of sectors
570  fNInnerSector = Int_t(4*TMath::Pi()/fInnerAngle+0.2);
571  // number of inner sectors - factor 0.2 to don't be influnced by inprecision
572  if (fNInnerSector%2) return kFALSE;
573  fNOuterSector = Int_t(4*TMath::Pi()/fOuterAngle+0.2);
574  if (fNOuterSector%2) return kFALSE;
576 
577  if (fRotAngle!=0) delete [] fRotAngle;
578  fRotAngle = new Float_t[4*fNSector];
579  //calculate sin and cosine of rotations angle
580  //sectors angles numbering from 0
581 
582  j=fNInnerSector*2;
583  Float_t angle = fInnerAngleShift;
584  for (i=0; j<fNInnerSector*4; i+=4, j+=4 , angle +=fInnerAngle){
585  fRotAngle[i]=TMath::Cos(angle);
586  fRotAngle[i+1]=TMath::Sin(angle);
587  fRotAngle[j] = fRotAngle[i];
588  fRotAngle[j+1] = fRotAngle[i+1];
589  fRotAngle[i+2] =angle;
590  fRotAngle[j+2] =angle;
591  fRotAngle[i+3] =angle;
592  fRotAngle[j+3] =angle;
593  }
594  angle = fOuterAngleShift;
595  j=(fNInnerSector+fNOuterSector/2)*4;
596  for (i=fNInnerSector*4; j<fNSector*4; i+=4,j+=4, angle +=fOuterAngle){
597  fRotAngle[i]=TMath::Cos(angle);
598  fRotAngle[i+1]=TMath::Sin(angle);
599  fRotAngle[j] = fRotAngle[i];
600  fRotAngle[j+1] = fRotAngle[i+1];
601  fRotAngle[i+2] =angle;
602  fRotAngle[j+2] =angle;
603  fRotAngle[i+3] =angle;
604  fRotAngle[j+3] =angle;
605  }
606 
610  //wire section
611  /* Int_t nwire;
612  Float_t wspace; //available space for wire
613  Float_t dummyspace; //dummyspace for wire
614 
615  wspace =fInnerRadiusUp-fInnerRadiusLow-2*fInnerOffWire;
616  nwire = Int_t(wspace/fInnerWWPitch);
617  wspace = Float_t(nwire)*fInnerWWPitch;
618  dummyspace =(fInnerRadiusUp-fInnerRadiusLow-wspace)/2.;
619  wspace =fOuterRadiusUp-fOuterRadiusLow-2*fOuterOffWire;
620  nwire = Int_t(wspace/fOuterWWPitch);
621  wspace = Float_t(nwire)*fOuterWWPitch;
622  dummyspace =(fOuterRadiusUp-fOuterRadiusLow-wspace)/2.;
623  fROuterFirstWire = fOuterRadiusLow+dummyspace;
624  fROuterLastWire = fROuterFirstWire+fOuterWWPitch*(Float_t)(nwire);
625  */
626 
627  //
628  //response data
629  //
630  if (fResponseBin) delete [] fResponseBin;
631  if (fResponseWeight) delete [] fResponseWeight;
632  fResponseBin = new Int_t[3*fNResponseMax];
633  fResponseWeight = new Float_t[fNResponseMax];
634 
635  //L1 data
637  fbStatus = kTRUE;
638  return kTRUE;
639 }
640 
643 
644  if (fTrackingMatrix) {
645  for(Int_t i = 0; i < fNSector; i++)
646  delete fTrackingMatrix[i];
647  delete [] fTrackingMatrix;
648  }
649 
650  if (fClusterMatrix) {
651  for(Int_t i = 0; i < fNSector; i++)
652  delete fClusterMatrix[i];
653  delete [] fClusterMatrix;
654  }
655 
656  if (fGlobalMatrix) {
657  for(Int_t i = 0; i < fNSector; i++)
658  delete fGlobalMatrix[i];
659  delete [] fGlobalMatrix;
660  }
661 
662  return;
663 }
664 
667 
668  if (!gGeoManager){
669  AliFatal("Geo manager not initialized\n");
670  }
671  AliAlignObjParams o;
672  //
673 
674  // clean geo matrices
676 
677  // create new geo matrices
678  fTrackingMatrix = new TGeoHMatrix*[fNSector];
679  fClusterMatrix = new TGeoHMatrix*[fNSector];
680  fGlobalMatrix = new TGeoHMatrix*[fNSector];
681  for (Int_t isec=0; isec<fNSector; isec++) {
682  fGlobalMatrix[isec] = 0;
683  fClusterMatrix[isec]= 0;
684  fTrackingMatrix[isec]=0;
685  }
686  //
687  for (Int_t isec=0; isec<fNSector; isec++) {
688  fGlobalMatrix[isec] = 0;
689  fClusterMatrix[isec]= 0;
690  fTrackingMatrix[isec]=0;
691  AliGeomManager::ELayerID iLayer;
692  Int_t iModule;
693 
694  if(isec<fNInnerSector) {
695  iLayer = AliGeomManager::kTPC1;
696  iModule = isec;
697  }
698  else {
699  iLayer = AliGeomManager::kTPC2;
700  iModule = isec - fNInnerSector;
701  }
702 
703  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iModule);
704  TGeoPNEntry* pne = gGeoManager->GetAlignableEntryByUID(volid);
705  if(!pne)
706  {
707  AliError(Form("Alignable entry for volume ID %d not in geometry. Exiting!",volid));
708  return kFALSE;
709  }
710  const char *path = pne->GetTitle();
711  if (!gGeoManager->cd(path)) return kFALSE;
712  TGeoHMatrix *m = gGeoManager->GetCurrentMatrix();
713  // Since GEANT4 does not allow reflections, in this case the reflection
714  // component if the matrix is embedded by TGeo inside TGeoScaledShape
715  if (gGeoManager->GetCurrentVolume()->GetShape()->IsReflected())
716  m->ReflectZ(kFALSE, kTRUE);
717  //
718  TGeoRotation mchange;
719  mchange.RotateY(90); mchange.RotateX(90);
720  Float_t ROCcenter[3];
721  GetChamberCenter(isec,ROCcenter);
722  //
723  // Convert to global coordinate system
724  //
725  fGlobalMatrix[isec] = new TGeoHMatrix(*m);
726  fGlobalMatrix[isec]->Multiply(&(mchange.Inverse()));
727  TGeoTranslation center("center",-ROCcenter[0],-ROCcenter[1],-ROCcenter[2]);
728  fGlobalMatrix[isec]->Multiply(&center);
729  //
730  // cluster correction matrix
731  //
732  fClusterMatrix[isec] = new TGeoHMatrix;
733  Double_t sectorAngle = 20.*(isec%18)+10;
734  TGeoHMatrix rotMatrix;
735  rotMatrix.RotateZ(sectorAngle);
736  if (GetGlobalMatrix(isec)->GetTranslation()[2]>0){
737  //
738  // mirrored system
739  //
740  TGeoRotation mirrorZ;
741  mirrorZ.SetAngles(90,0,90,90,180,0);
742  fClusterMatrix[isec]->Multiply(&mirrorZ);
743  }
744  TGeoTranslation trans(0,0,GetZLength(isec));
745  fClusterMatrix[isec]->MultiplyLeft(&trans);
746  fClusterMatrix[isec]->MultiplyLeft((GetGlobalMatrix(isec)));
747  fClusterMatrix[isec]->MultiplyLeft(&(rotMatrix.Inverse()));
748  }
749  return kTRUE;
750 }
751 
752 TGeoHMatrix * AliTPCParam::Tracking2LocalMatrix(const TGeoHMatrix * geoMatrix, Int_t sector) const{
754 
755  Double_t sectorAngle = 20.*(sector%18)+10;
756  TGeoHMatrix *newMatrix = new TGeoHMatrix();
757  newMatrix->RotateZ(sectorAngle);
758  newMatrix->MultiplyLeft(&(geoMatrix->Inverse()));
759  return newMatrix;
760 }
761 
762 
763 
764 
766 {
768 
769  return fbStatus;
770 }
771 
773 {
775 
776  return fNRowLow;
777 }
779 {
781 
782  return fNRowUp;
783 }
785 {
787 
788  return fNRowUp1;
789 }
791 {
793 
794  return fNRowUp2;
795 }
796 Float_t AliTPCParam::GetPadRowRadiiLow(Int_t irow) const
797 {
799 
800  if ( !(irow<0) && (irow<fNRowLow) )
801  return fPadRowLow[irow];
802  else
803  return 0;
804 }
805 
806 Float_t AliTPCParam::GetPadRowRadiiUp(Int_t irow) const
807 {
809 
810  if ( !(irow<0) && (irow<fNRowUp) )
811  return fPadRowUp[irow];
812  else
813  return 0;
814 }
815 
816 Int_t AliTPCParam::GetNPadsLow(Int_t irow) const
817 {
819 
820  if ( !(irow<0) && (irow<fNRowLow) )
821  return fNPadsLow[irow];
822  else
823  return 0;
824 }
825 
826 
827 Int_t AliTPCParam::GetNPadsUp(Int_t irow) const
828 {
830 
831  if ( !(irow<0) && (irow<fNRowUp) )
832  return fNPadsUp[irow];
833  else
834  return 0;
835 }
836 
837 Int_t AliTPCParam::GetWireSegment(Int_t sector, Int_t row) const
838 {
842 
843  Int_t wireIndex = -1;
844  // check if the given set of sector and row is OK
845  if ( (sector<0 || sector>=72) || (row<0 || row>95) || (sector<36 && row>64) ){
846  AliError("No matching anode wire segment for this set of sector-row \n");
847  return wireIndex;
848  }
849  // find the wire index for given sector-row
850  if ( sector<36 ){ // IROC anode wire segments
851  if (row<16) wireIndex=0;
852  else if (row>=16 && row<32) wireIndex=1;
853  else if (row>=32 && row<48) wireIndex=2;
854  else wireIndex=3;
855  } else { // OROC anode wire segments
856  if (row<16) wireIndex=4;
857  else if ( row>=16 && row<32) wireIndex=5;
858  else if ( row>=32 && row<48) wireIndex=6;
859  else if ( row>=48 && row<64) wireIndex=7;
860  else if ( row>=64 && row<75) wireIndex=8;
861  else if ( row>=75 && row<85) wireIndex=9;
862  else wireIndex=10;
863  }
864  return wireIndex;
865 }
866 
867 Int_t AliTPCParam::GetNPadsPerSegment(Int_t wireSegmentID) const
868 {
873 
874  if ( wireSegmentID<0 || wireSegmentID>10 ){
875  AliError("Wrong anode wire segment index. it should be [0,10] \n");
876  return -1;
877  }
878  // get sector type from wireSegmentID
879  Int_t sector = (wireSegmentID<4) ? 0 : 36; // ROC [0,35] --> IROC, ROC [36,71] --> OROC
880  // get the upper and lower row number for the given wireSegmentID
881  Int_t segRowDown = 0;
882  Int_t segRowUp = 0;
883 
884  if ( wireSegmentID == 0 || wireSegmentID == 4 ) {
885  segRowDown = 0;
886  segRowUp = 16;
887  } else if ( wireSegmentID == 1 || wireSegmentID == 5 ) {
888  segRowDown = 16;
889  segRowUp = 32;
890  } else if ( wireSegmentID == 2 || wireSegmentID == 6 ) {
891  segRowDown = 32;
892  segRowUp = 48;
893  } else if ( wireSegmentID == 3 || wireSegmentID == 7 ) {
894  segRowDown = 48;
895  segRowUp = 63;
896  } else if ( wireSegmentID == 8 ) {
897  segRowDown = 64;
898  segRowUp = 75;
899  } else if ( wireSegmentID == 9 ) {
900  segRowDown = 75;
901  segRowUp = 85;
902  } else {
903  segRowDown = 85;
904  segRowUp = 95;
905  }
906  // count the number of pads on the given segment
908  Int_t nPads=0;
909  for (Int_t irow = segRowDown; irow < segRowUp ; irow++){
910  nPads += r->GetNPads(sector,irow);
911  }
912  return nPads;
913 }
914 
915 Float_t AliTPCParam::GetYInner(Int_t irow) const
916 {
917  return fYInner[irow];
918 }
919 
920 
921 Float_t AliTPCParam::GetYOuter(Int_t irow) const
922 {
923  return fYOuter[irow];
924 }
925 
926 Int_t AliTPCParam::GetSectorIndex(Float_t angle, Int_t row, Float_t z) const
927 {
930 
931  if(row<0) return -1;
932 
933  if (angle > 2.*TMath::Pi()) angle -= 2.*TMath::Pi();
934  if (angle < 0. ) angle += 2.*TMath::Pi();
935 
936  Int_t sector;
937  if(row<fNRowLow) {
938  sector=Int_t(TMath::Nint((angle-fInnerAngleShift)/fInnerAngle));
939  if (z<0) sector += (fNInnerSector>>1);
940  }
941  else {
942  sector=Int_t(TMath::Nint((angle-fOuterAngleShift)/fOuterAngle))+fNInnerSector;
943  if (z<0) sector += (fNOuterSector>>1);
944  }
945 
946  return sector;
947 }
948 
949 Float_t AliTPCParam::GetChamberCenter(Int_t isec, Float_t * center) const
950 {
953 
954  const Float_t kROCcenterIn = 110.2;
955  const Float_t kROCcenterOut = 188.45;
956 
957  if (isec<fNInnerSector){
958  if (center){
959  center[0] = kROCcenterIn;
960  center[1] = 0;
961  center[2] = -5.51-0.08;
962  }
963  return kROCcenterIn;
964  }
965  else{
966  if (center){
967  center[0] = kROCcenterOut;
968  center[1] = 0;
969  center[2] = -5.61-0.08;
970  }
971  return kROCcenterOut;
972  }
973 }
974 
979 
980  Float_t sector[72]={0};
981  Float_t gainHV[72]={0};
982  Float_t gainPT[72]={0};
983  //
984  for (Int_t isec=0; isec<72; isec++){
985  sector[isec]=isec;
986  gainHV[isec]=0.0115; // change of the Gain dG/G per 1 Volt of voltage change(1/V) - it is roughly the same for IROC and OROC
987  gainPT[isec]=2.2; // change of the Gains dG/G per P/T change ()
988  }
989  fGainSlopesHV = new TGraphErrors(72,sector,gainHV,0,0);
990  fGainSlopesPT = new TGraphErrors(72,sector,gainPT,0,0);
991  fGainSlopesHV->SetName("GainSlopesHV");
992  fGainSlopesPT->SetName("GainSlopesPT");
993 }
994 
995 
1000 
1001  TVectorD v(5);
1002  v(0)=0.76176e-1;
1003  v(1)=10.632;
1004  v(2)=0.13279e-4;
1005  v(3)=1.8631;
1006  v(4)=1.9479;
1007  return new TVectorD(v);
1008 }
1009 
1015 
1016  TVectorD v(5);
1017  v[0] = 0.0851148;
1018  v[1] = 9.25771;
1019  v[2] = 2.6558e-05;
1020  v[3] = 2.32742;
1021  v[4] = 1.83039;
1022  return new TVectorD(v);
1023 }
1024 
1028 
1029  TVectorD v(5);
1030  v[0] =0.0820172 ;
1031  v[1] =9.94795 ;
1032  v[2] =8.97292e-05;
1033  v[3] =2.05873 ;
1034  v[4] =1.65272 ;
1035 
1036  return new TVectorD(v);
1037 }
1038 
1039 
1040 Double_t AliTPCParam::BetheBlochAleph(Double_t bg, Int_t type){
1043  if (bg<=0) return 0;
1044  TVectorD * paramBB =0;
1045  if (type==0) {
1047  if (param) paramBB=param->GetBetheBlochParameters();
1048  }
1049  if (type==1){
1050  paramBB = (TVectorD*)fBBParam->At(type);
1051  }
1052  if (!paramBB) return 0;
1053  //
1054  return AliMathBase::BetheBlochAleph(bg,(*paramBB)(0),(*paramBB)(1),(*paramBB)(2),(*paramBB)(3),(*paramBB)(4));
1055 }
1056 
1057 
1058 void AliTPCParam::RegisterBBParam(TVectorD* param, Int_t position){
1060 
1061  fBBParam->AddAt(param,position);
1062 }
Int_t * fResponseBin
! array with bins -calulated
Definition: AliTPCParam.h:538
static AliTPCcalibDB * Instance()
TGraphErrors * fGainSlopesHV
graph with the gain slope as function of HV - per chamber
Definition: AliTPCParam.h:502
Float_t fTSample
sampling time
Definition: AliTPCParam.h:513
static Double_t BetheBlochAleph(Double_t bb, Int_t type=0)
Float_t fPadCoupling
coupling factor ration of anode signal
Definition: AliTPCParam.h:507
Int_t Transform0to1(Float_t *xyz, Int_t *index) const
void SetOuterFrameSpace(Float_t frspace)
Definition: AliTPCParam.h:129
UInt_t GetNPads(UInt_t sector, UInt_t row) const
Definition: AliTPCROC.h:30
Float_t GetYInner(Int_t irow) const
void SetDiffT(Float_t DiffT)
Definition: AliTPCParam.h:176
void SetInnerRadiusLow(Float_t InnerRadiusLow)
Definition: AliTPCParam.h:122
void SetNominalVoltage(Float_t v, UInt_t i)
Definition: AliTPCParam.h:230
void SetNominalGainSlopes()
void SetNResponseMax(Int_t max)
Definition: AliTPCParam.h:238
Float_t fOuterAngleShift
shift of first sector center to the 0
Definition: AliTPCParam.h:411
void SetOuterWWPitch(Float_t wwPitch)
Definition: AliTPCParam.h:154
Int_t GetNPadsPerSegment(Int_t segmentID) const
void SetOuter1NWires(Int_t nWires)
Definition: AliTPCParam.h:147
Float_t fADCDynRange
input dynamic range (mV)
Definition: AliTPCParam.h:518
void SetPadCoupling(Float_t PadCoupling)
Definition: AliTPCParam.h:216
void SetAttCoef(Float_t AttCoef)
Definition: AliTPCParam.h:182
void SetDiffL(Float_t DiffL)
Definition: AliTPCParam.h:177
Float_t fPadRowLow[600]
Lower sector, pad row radii -calculated.
Definition: AliTPCParam.h:475
void SetInnerPadPitchWidth(Float_t PadPitchWidth)
Definition: AliTPCParam.h:162
#define TObjArray
void Transform2to5(Float_t *xyz, Int_t *index) const
Definition: AliTPCParam.h:726
Float_t fNTBinsL1
Overall L1 delay in time bins.
Definition: AliTPCParam.h:547
Manager class for detector parameters.
Bool_t fbStatus
indicates consistency of the data
Definition: AliTPCParam.h:400
void SetRInnerFirstWire(Float_t firstWire)
Definition: AliTPCParam.h:152
void SetBetheBloch(TVectorD *v)
Definition: AliTPCParam.h:199
Float_t * fRotAngle
sin and cos of rotation angles for different sectors - calculated
Definition: AliTPCParam.h:421
void SetRowNUp2(Int_t NRowUp2)
Definition: AliTPCParam.h:139
void SetGasGain(Float_t GasGain)
Definition: AliTPCParam.h:178
Manager and of geomety classes for set: TPC.
Definition: AliTPCParam.h:18
void SetChipNorm(Float_t ChipNorm)
Definition: AliTPCParam.h:220
void SetRInnerLastWire(Float_t lastWire)
Definition: AliTPCParam.h:153
void SetGateDelay(Float_t delay)
Definition: AliTPCParam.h:241
static TVectorD * GetBetheBlochParamAlice()
virtual Bool_t Transform(Float_t *xyz, Int_t *index, Int_t *oindex)
virtual Int_t GetPadRow(Float_t *xyz, Int_t *index) const
void SetOuterWireMount(Float_t fmount)
Definition: AliTPCParam.h:131
void SetMWPCReadout(Bool_t type)
Definition: AliTPCParam.h:171
void SetNoise(Float_t Noise)
Definition: AliTPCParam.h:218
static TVectorD * GetBetheBlochParamNa49()
void SetTFWHM(Float_t fwhm)
Definition: AliTPCParam.h:222
Float_t fDriftV
drift velocity constant
Definition: AliTPCParam.h:488
virtual Bool_t ReadGeoMatrices()
AliTPCParam * GetParameters() const
Int_t fGeometryType
type of geometry -0 straight rows
Definition: AliTPCParam.h:422
Float_t GetPadRowRadiiLow(Int_t irow) const
void SetL1Delay(Float_t delay)
Definition: AliTPCParam.h:242
void SetZeroSup(Int_t ZeroSup)
Definition: AliTPCParam.h:217
void SetOxyCont(Float_t OxyCont)
Definition: AliTPCParam.h:183
void SetInnerPadPitchLength(Float_t PadPitchLength)
Definition: AliTPCParam.h:161
void SetInnerFrameSpace(Float_t frspace)
Definition: AliTPCParam.h:128
static TObjArray * fBBParam
array of the Bethe-Bloch parameters.
Definition: AliTPCParam.h:549
Float_t fOuterRadiusLow
lower radius of outer sector-IP
Definition: AliTPCParam.h:407
void SetOuterOffWire(Float_t offset)
Definition: AliTPCParam.h:150
void SetOuter1PadPitchLength(Float_t PadPitchLength)
Definition: AliTPCParam.h:165
static void RegisterBBParam(TVectorD *param, Int_t position)
TGraphErrors * fGainSlopesPT
graph with the gain slope as function of P/T - per chamber
Definition: AliTPCParam.h:503
void Transform4to8(Float_t *xyz, Int_t *index) const
Definition: AliTPCParam.h:755
void SetMaxTBin(Int_t maxtbin)
Definition: AliTPCParam.h:223
Int_t Transform2to3(Float_t *xyz, Int_t *index) const
Definition: AliTPCParam.h:678
Int_t fNInnerSector
number of inner sectors -calculated
Definition: AliTPCParam.h:416
ClassImp(TPCGenInfo)
Definition: AliTPCCmpNG.C:254
void SetInnerPadWidth(Float_t PadWidth)
Definition: AliTPCParam.h:164
TGeoHMatrix * Tracking2LocalMatrix(const TGeoHMatrix *geoMatrix, Int_t sector) const
static TVectorD * GetBetheBlochParamAliceMC()
void SetChipGain(Float_t ChipGain)
Definition: AliTPCParam.h:219
void SetSectorAngles(Float_t innerangle, Float_t innershift, Float_t outerangle, Float_t outershift)
Float_t fPadRowUp[600]
Upper sector, pad row radii -calculated.
Definition: AliTPCParam.h:476
void SetNTBinsBeforeL1(UShort_t nbins)
Definition: AliTPCParam.h:243
Int_t GetNPadsLow(Int_t irow) const
void SetOuterRadiusLow(Float_t OuterRadiusLow)
Definition: AliTPCParam.h:123
Float_t fYInner[600]
Inner sector, wire-length.
Definition: AliTPCParam.h:479
void SetInnerDummyWire(Int_t dummy)
Definition: AliTPCParam.h:145
UShort_t fNTBinsBeforeL1
Number of time bins before L1 arrival which are being read out.
Definition: AliTPCParam.h:546
Int_t fNRowUp
number of pad rows per sector up -calculated
Definition: AliTPCParam.h:473
Float_t GetOuterAngle() const
Float_t GetYOuter(Int_t irow) const
Int_t GetSectorIndex(Float_t angle, Int_t row, Float_t z) const
Float_t fNoiseNormFac
normalisation factor to transform noise in electron to ADC channel
Definition: AliTPCParam.h:520
Float_t fOuterAngle
opening angle of outer sector
Definition: AliTPCParam.h:410
Float_t fChipGain
preamp shaper constant
Definition: AliTPCParam.h:511
TGeoHMatrix ** fClusterMatrix
transformation matrices of the cluster coordinate system
Definition: AliTPCParam.h:432
Int_t fNSector
total number of sectors -calculated
Definition: AliTPCParam.h:418
void SetOuter1PadLength(Float_t PadLength)
Definition: AliTPCParam.h:168
Int_t GetNRowUp2() const
Float_t GetInnerAngle() const
Int_t fNResponseMax
maximal dimension of response
Definition: AliTPCParam.h:535
Float_t * fResponseWeight
! array with response -calulated
Definition: AliTPCParam.h:539
Int_t fNPadsLow[600]
Lower sector, number of pads per row -calculated.
Definition: AliTPCParam.h:477
Geometry class for a single ROC.
Definition: AliTPCROC.h:14
Float_t fChipNorm
preamp shaper normalisation
Definition: AliTPCParam.h:512
void SetOuter2PadLength(Float_t PadLength)
Definition: AliTPCParam.h:169
Int_t GetNRowUp() const
Bool_t GetStatus() const
void SetNprim(Float_t prim)
Definition: AliTPCParam.h:194
Int_t fNPadsUp[600]
Upper sector, number of pads per row -calculated.
Definition: AliTPCParam.h:478
void SetInnerWWPitch(Float_t wwPitch)
Definition: AliTPCParam.h:151
void SetOuterDummyWire(Int_t dummy)
Definition: AliTPCParam.h:149
void SetInnerPadLength(Float_t PadLength)
Definition: AliTPCParam.h:163
virtual void SetDefault()
TGeoHMatrix ** fGlobalMatrix
fTrackingMatrix * fClusterMatrix
Definition: AliTPCParam.h:434
void SetOuterRadiusUp(Float_t OuterRadiusUp)
Definition: AliTPCParam.h:125
Float_t GetOuterAngleShift() const
Float_t fInnerAngle
opening angle of Inner sector
Definition: AliTPCParam.h:408
void SetInnerNWires(Int_t nWires)
Definition: AliTPCParam.h:144
void SetRowNLow(Int_t NRowLow)
Definition: AliTPCParam.h:137
void SetTSample(Float_t TSample)
Definition: AliTPCParam.h:221
Float_t fL1Delay
Delay of L1 arrival for the TPC readout.
Definition: AliTPCParam.h:545
Int_t fADCSat
saturation value of ADC (10 bits)
Definition: AliTPCParam.h:517
virtual Bool_t Update()
void SetDriftV(Float_t DriftV)
Definition: AliTPCParam.h:180
void SetRowNUp(Int_t NRowUp)
Definition: AliTPCParam.h:140
void SetResponseThreshold(Int_t threshold)
Definition: AliTPCParam.h:239
void CleanGeoMatrices()
Bool_t AdjustSectorRow(Int_t index, Int_t &sector, Int_t &row) const
Float_t fInnerAngleShift
shift of first inner sector center to the 0
Definition: AliTPCParam.h:409
Int_t GetIndex(Int_t sector, Int_t row) const
TVectorD * GetBetheBlochParameters()
Definition: AliTPCParam.h:354
Float_t fTotalNormFac
full normalisation factor - calculated
Definition: AliTPCParam.h:519
void SetExp(Float_t exp)
Definition: AliTPCParam.h:197
void SetROuterLastWire(Float_t lastWire)
Definition: AliTPCParam.h:157
void SetZLength(Float_t zlength)
Definition: AliTPCParam.h:132
Float_t fYOuter[600]
Outer sector, wire-length.
Definition: AliTPCParam.h:480
Int_t GetWireSegment(Int_t sector, Int_t row) const
TGeoHMatrix ** fTrackingMatrix
transformation matrices of the tracking coordinate system
Definition: AliTPCParam.h:430
Float_t GetPadRowRadiiUp(Int_t irow) const
TGeoHMatrix * GetGlobalMatrix(Int_t isec) const
Definition: AliTPCParam.h:330
Float_t fZWidth
derived value calculated using TSample and driftw -computed
Definition: AliTPCParam.h:514
void SetOmegaTau(Float_t OmegaTau)
Definition: AliTPCParam.h:181
void AdjustCosSin(Int_t isec, Float_t &cos, Float_t &sin) const
Definition: AliTPCParam.h:579
void SetGeometryType(Int_t type)
Definition: AliTPCParam.h:133
Float_t GetInnerAngleShift() const
Int_t GetNPadsUp(Int_t irow) const
void SetOuterPadPitchWidth(Float_t PadPitchWidth)
Definition: AliTPCParam.h:167
void SetNCrossRows(Int_t rows)
Definition: AliTPCParam.h:172
Int_t fNOuterSector
number of outer sectors -calculated
Definition: AliTPCParam.h:417
void SetRowNUp1(Int_t NRowUp1)
Definition: AliTPCParam.h:138
void SetBetheBlochMC(TVectorD *v)
Definition: AliTPCParam.h:204
void SetADCDynRange(Float_t adcdynrange)
Definition: AliTPCParam.h:225
Int_t fNRowLow
number of pad rows per low sector -set
Definition: AliTPCParam.h:470
static AliTPCROC * Instance()
Definition: AliTPCROC.cxx:34
virtual ~AliTPCParam()
void SetInnerWireMount(Float_t fmount)
Definition: AliTPCParam.h:130
void SetOuter2NWire(Int_t nWires)
Definition: AliTPCParam.h:148
void SetOuterPadWidth(Float_t PadWidth)
Definition: AliTPCParam.h:170
Float_t GetZLength(Int_t sector=0) const
Definition: AliTPCParam.h:837
void SetADCSat(Int_t adcsat)
Definition: AliTPCParam.h:224
void SetNtot(Float_t ntot)
Definition: AliTPCParam.h:195
Int_t fNRowUp1
number of short pad rows per sector up -set
Definition: AliTPCParam.h:471
void SetROuterFirstWire(Float_t firstWire)
Definition: AliTPCParam.h:156
void Transform3to4(Float_t *xyz, Int_t *index) const
Definition: AliTPCParam.h:695
void SetEend(Float_t end)
Definition: AliTPCParam.h:198
void SetWmean(Float_t wmean)
Definition: AliTPCParam.h:196
void Transform1to2(Float_t *xyz, Int_t *index) const
Definition: AliTPCParam.h:613
void SetComposition(Float_t c1, Float_t c2, Float_t c3, Float_t c4, Float_t c5, Float_t c6)
Definition: AliTPCParam.h:187
void SetInnerOffWire(Float_t offset)
Definition: AliTPCParam.h:146
Int_t fNRowUp2
number of long pad rows per sector up -set
Definition: AliTPCParam.h:472
Int_t GetNRowLow() const
void SetFpot(Float_t fpot)
Definition: AliTPCParam.h:193
void SetOuter2PadPitchLength(Float_t PadPitchLength)
Definition: AliTPCParam.h:166
void SetInnerRadiusUp(Float_t InnerRadiusUp)
Definition: AliTPCParam.h:124
Int_t fNtRows
total number of rows in TPC -calculated
Definition: AliTPCParam.h:474
Int_t GetNRowUp1() const
Float_t GetChamberCenter(Int_t isec, Float_t *center=0) const