]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDparameter.cxx
Provides digitization
[u/mrichter/AliRoot.git] / TRD / AliTRDparameter.cxx
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 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 //  TRD parameter class                                                      //
21 //                                                                           //
22 ///////////////////////////////////////////////////////////////////////////////
23
24 #include "AliRun.h"
25 #include "AliMagF.h"
26
27 #include "AliTRD.h"
28 #include "AliTRDparameter.h"
29 #include "AliTRDgeometryFull.h"
30
31 ClassImp(AliTRDparameter)
32
33 //_____________________________________________________________________________
34 AliTRDparameter::AliTRDparameter():TNamed()
35 {
36   //
37   // AliTRDparameter default constructor
38   //
39
40   fGeo                = 0;
41   fPRFsmp             = 0;
42   fTRFsmp             = 0;
43   fCTsmp              = 0;
44   fGasGain            = 0.0;
45   fNoise              = 0.0;
46   fChipGain           = 0.0;
47   fADCoutRange        = 0.0;
48   fADCinRange         = 0.0;
49   fADCthreshold       = 0;
50   fADCbaseline        = 0;        
51   fDiffusionOn        = 0;
52   fDiffusionT         = 0.0;
53   fDiffusionL         = 0.0;
54   fElAttachOn         = 0;
55   fElAttachProp       = 0.0;
56   fExBOn              = 0;
57   fOmegaTau           = 0.0;
58   fPRFOn              = 0;
59   fTRFOn              = 0;
60   fCTOn               = 0;
61   fTCOn               = 0;
62   fDriftVelocity      = 0.0;
63   fPadCoupling        = 0.0;
64   fTimeCoupling       = 0.0;
65   fTimeBinWidth       = 0.0;
66   fField              = 0.0;
67   fTiltingAngle       = 0.0;
68   fPRFbin             = 0;
69   fPRFlo              = 0.0;
70   fPRFhi              = 0.0;
71   fPRFwid             = 0.0;
72   fPRFpad             = 0;
73   fTRFbin             = 0;
74   fTRFlo              = 0.0;
75   fTRFhi              = 0.0;
76   fTRFwid             = 0.0;
77   fTCnexp             = 0;
78
79   fLUTOn              = 0;  
80   fLUT                = 0;
81   fClusMaxThresh      = 0;
82   fClusSigThresh      = 0;
83
84 }
85
86 //_____________________________________________________________________________
87 AliTRDparameter::AliTRDparameter(const Text_t *name, const Text_t *title)
88                 :TNamed(name,title)
89 {
90   //
91   // AliTRDparameter constructor
92   //
93
94   fGeo                = new AliTRDgeometryFull();
95   fPRFsmp             = 0;
96   fTRFsmp             = 0;
97   fCTsmp              = 0;
98   fGasGain            = 0.0;
99   fNoise              = 0.0;
100   fChipGain           = 0.0;
101   fADCoutRange        = 0.0;
102   fADCinRange         = 0.0;
103   fADCthreshold       = 0;
104   fADCbaseline        = 0;        
105   fDiffusionOn        = 0;
106   fDiffusionT         = 0.0;
107   fDiffusionL         = 0.0;
108   fElAttachOn         = 0;
109   fElAttachProp       = 0.0;
110   fExBOn              = 0;
111   fOmegaTau           = 0.0;
112   fPRFOn              = 0;
113   fTRFOn              = 0;
114   fCTOn               = 0;
115   fTCOn               = 0;
116   fDriftVelocity      = 0.0;
117   fPadCoupling        = 0.0;
118   fTimeCoupling       = 0.0;
119   fTimeBinWidth       = 0.0;
120   fField              = 0.0;
121   fTiltingAngle       = 0.0;
122   fPRFbin             = 0;
123   fPRFlo              = 0.0;
124   fPRFhi              = 0.0;
125   fPRFwid             = 0.0;
126   fPRFpad             = 0;
127   fTRFbin             = 0;
128   fTRFlo              = 0.0;
129   fTRFhi              = 0.0;
130   fTRFwid             = 0.0;
131   fTCnexp             = 0;
132
133   fLUTOn              = 0;  
134   fLUT                = 0;
135   fClusMaxThresh      = 0;
136   fClusSigThresh      = 0;
137
138   Init();
139
140 }
141
142
143 //_____________________________________________________________________________
144 AliTRDparameter::AliTRDparameter(const AliTRDparameter &p):TNamed(p)
145 {
146   //
147   // AliTRDparameter copy constructor
148   //
149
150   ((AliTRDparameter &) p).Copy(*this);
151
152 }
153
154 ///_____________________________________________________________________________
155 AliTRDparameter::~AliTRDparameter()
156 {
157   //
158   // AliTRDparameter destructor
159   //
160
161   if (fTRFsmp) {
162     delete [] fTRFsmp;
163     fTRFsmp = 0;
164   }
165
166   if (fPRFsmp) {
167     delete [] fPRFsmp;
168     fPRFsmp = 0;
169   }
170
171   if (fCTsmp) {
172     delete [] fCTsmp;
173     fCTsmp  = 0;
174   }
175
176   if (fLUT) {
177     delete [] fLUT;
178     fLUT    = 0;
179   }
180
181   if (fGeo) {
182     delete fGeo;
183     fGeo    = 0;
184   }
185
186 }
187
188 //_____________________________________________________________________________
189 AliTRDparameter &AliTRDparameter::operator=(const AliTRDparameter &p)
190 {
191   //
192   // Assignment operator
193   //
194
195   if (this != &p) ((AliTRDparameter &) p).Copy(*this);
196   return *this;
197
198 }
199
200 //_____________________________________________________________________________
201 void AliTRDparameter::Copy(TObject &p)
202 {
203   //
204   // Copy function
205   //
206
207   Int_t iBin;
208
209   ((AliTRDparameter &) p).fGasGain            = fGasGain;
210   ((AliTRDparameter &) p).fNoise              = fNoise;
211   ((AliTRDparameter &) p).fChipGain           = fChipGain;
212   ((AliTRDparameter &) p).fADCoutRange        = fADCoutRange;
213   ((AliTRDparameter &) p).fADCinRange         = fADCinRange;
214   ((AliTRDparameter &) p).fADCthreshold       = fADCthreshold;
215   ((AliTRDparameter &) p).fADCbaseline        = fADCbaseline; 
216   ((AliTRDparameter &) p).fDiffusionOn        = fDiffusionOn; 
217   ((AliTRDparameter &) p).fDiffusionT         = fDiffusionT;
218   ((AliTRDparameter &) p).fDiffusionL         = fDiffusionL;
219   ((AliTRDparameter &) p).fElAttachOn         = fElAttachOn;
220   ((AliTRDparameter &) p).fElAttachProp       = fElAttachProp;
221   ((AliTRDparameter &) p).fExBOn              = fExBOn;
222   ((AliTRDparameter &) p).fOmegaTau           = fOmegaTau;
223   ((AliTRDparameter &) p).fLorentzFactor      = fLorentzFactor;
224   ((AliTRDparameter &) p).fDriftVelocity      = fDriftVelocity;
225   ((AliTRDparameter &) p).fPadCoupling        = fPadCoupling;
226   ((AliTRDparameter &) p).fTimeCoupling       = fTimeCoupling;
227   ((AliTRDparameter &) p).fTimeBinWidth       = fTimeBinWidth;
228   ((AliTRDparameter &) p).fField              = fField;
229   ((AliTRDparameter &) p).fPRFOn              = fPRFOn;
230   ((AliTRDparameter &) p).fTRFOn              = fTRFOn;
231   ((AliTRDparameter &) p).fCTOn               = fCTOn;
232   ((AliTRDparameter &) p).fTCOn               = fTCOn;
233   ((AliTRDparameter &) p).fTiltingAngle       = fTiltingAngle;
234   ((AliTRDparameter &) p).fPRFbin             = fPRFbin;
235   ((AliTRDparameter &) p).fPRFlo              = fPRFlo;
236   ((AliTRDparameter &) p).fPRFhi              = fPRFhi;
237   ((AliTRDparameter &) p).fPRFwid             = fPRFwid;
238   ((AliTRDparameter &) p).fPRFpad             = fPRFpad;
239   if (((AliTRDparameter &) p).fPRFsmp) delete [] ((AliTRDparameter &) p).fPRFsmp;
240   ((AliTRDparameter &) p).fPRFsmp = new Float_t[fPRFbin];
241   for (iBin = 0; iBin < fPRFbin; iBin++) {
242     ((AliTRDparameter &) p).fPRFsmp[iBin] = fPRFsmp[iBin];
243   }                                                                             
244   ((AliTRDparameter &) p).fTRFbin             = fTRFbin;
245   ((AliTRDparameter &) p).fTRFlo              = fTRFlo;
246   ((AliTRDparameter &) p).fTRFhi              = fTRFhi;
247   ((AliTRDparameter &) p).fTRFwid             = fTRFwid;
248   if (((AliTRDparameter &) p).fTRFsmp) delete [] ((AliTRDparameter &) p).fTRFsmp;
249   ((AliTRDparameter &) p).fTRFsmp = new Float_t[fTRFbin];
250   for (iBin = 0; iBin < fTRFbin; iBin++) {
251     ((AliTRDparameter &) p).fTRFsmp[iBin] = fTRFsmp[iBin];
252   }                                      
253   if (((AliTRDparameter &) p).fCTsmp)  delete [] ((AliTRDparameter &) p).fCTsmp;
254   ((AliTRDparameter &) p).fCTsmp  = new Float_t[fTRFbin];
255   for (iBin = 0; iBin < fTRFbin; iBin++) {
256     ((AliTRDparameter &) p).fCTsmp[iBin]  = fCTsmp[iBin];
257   }                                      
258   ((AliTRDparameter &) p).fTCnexp             = fTCnexp;
259
260   ((AliTRDparameter &) p).fLUTOn              = fLUTOn;
261   ((AliTRDparameter &) p).fLUTbin             = fLUTbin;
262   if (((AliTRDparameter &) p).fLUT)    delete [] ((AliTRDparameter &) p).fLUT;
263   ((AliTRDparameter &) p).fLUT  = new Float_t[fLUTbin];
264   for (iBin = 0; iBin < fLUTbin; iBin++) {
265     ((AliTRDparameter &) p).fLUT[iBin]  = fLUT[iBin];
266   }                                      
267   ((AliTRDparameter &) p).fClusMaxThresh      = fClusMaxThresh;
268   ((AliTRDparameter &) p).fClusSigThresh      = fClusSigThresh;
269
270 }
271
272 //_____________________________________________________________________________
273 void AliTRDparameter::Init()
274 {
275   //
276   // Initializes the parameter
277   //
278   // The maximum number of pads
279   // and the position of pad 0,0,0
280   //
281   // chambers seen from the top:
282   //     +----------------------------+
283   //     |                            |
284   //     |                            |      ^
285   //     |                            |  rphi|
286   //     |                            |      |
287   //     |0                           |      |
288   //     +----------------------------+      +------>
289   //                                             z
290   // chambers seen from the side:            ^
291   //     +----------------------------+ drift|
292   //     |0                           |      |
293   //     |                            |      |
294   //     +----------------------------+      +------>
295   //                                             z
296   //
297   // IMPORTANT: time bin 0 is now the first one in the drift region
298   // closest to the readout !!!
299   //
300
301   //
302   // ----------------------------------------------------------------------------
303   // The pad definition
304   // ----------------------------------------------------------------------------
305   //
306
307   // The pad size in column direction (rphi-direction)
308   SetColPadSize(0,0.65);
309   SetColPadSize(1,0.68);
310   SetColPadSize(2,0.71);
311   SetColPadSize(3,0.74);
312   SetColPadSize(4,0.77);
313   SetColPadSize(5,0.80);
314
315   // New pad size? Needs to be checked!
316   //SetColPadSize(0,0.664);
317   //SetColPadSize(1,0.695);
318   //SetColPadSize(2,0.726);
319   //SetColPadSize(3,0.756);
320   //SetColPadSize(4,0.788);
321   //SetColPadSize(5,0.818);
322
323   // The pad row (z-direction)
324   SetNRowPad();
325
326   // The number of time bins. Default is 100 ns timbin size
327   SetNTimeBin(15);
328
329   // Additional time bins before and after the drift region.
330   // Default is to only sample the drift region
331   SetExpandTimeBin(0,0);
332
333   //
334   // ----------------------------------------------------------------------------
335   // The digitization parameter
336   // ----------------------------------------------------------------------------
337   //
338
339   // The default parameter for the digitization
340   fGasGain        = 4500.;
341   fChipGain       = 12.4;
342   fNoise          = 1000.;
343   fADCoutRange    = 1023.;          // 10-bit ADC
344   fADCinRange     = 2000.;          // 2V input range
345   fADCthreshold   = 1;
346   fADCbaseline    = 0;
347
348   // The drift velocity (cm / mus)
349   fDriftVelocity  = 1.5;
350
351   // Diffusion on
352   fDiffusionOn    = 1;
353
354   // E x B effects
355   fExBOn          = 1;
356
357   // Propability for electron attachment
358   fElAttachOn     = 0;
359   fElAttachProp   = 0.0;
360
361   // The pad response function
362   fPRFOn          = 1;
363
364   // The time response function
365   fTRFOn          = 1;
366
367   // The cross talk
368   fCTOn           = 1;
369
370   // The tail cancelation
371   fTCOn           = 1;
372   
373   // The number of exponentials
374   fTCnexp         = 2;
375
376   // The pad coupling factor (same number as for the TPC)
377   fPadCoupling    = 0.5;
378
379   // The time coupling factor (same number as for the TPC)
380   fTimeCoupling   = 0.4;
381
382   // The tilting angle for the readout pads
383   SetTiltingAngle(2.0);
384
385   // The magnetic field strength in Tesla
386   fField           = 0.4;
387
388   //
389   // ----------------------------------------------------------------------------
390   // The clusterization parameter
391   // ----------------------------------------------------------------------------
392   //
393
394   // The default parameter for the clustering
395   fClusMaxThresh = 3;
396   fClusSigThresh = 1;
397
398   // Use the LUT
399   fLUTOn         = 1;  
400
401   ReInit();
402
403 }
404
405 //_____________________________________________________________________________
406 void AliTRDparameter::ReInit()
407 {
408   //
409   // Reinitializes the parameter class after a change
410   //
411
412   // Calculate the time bin width in ns
413   fTimeBinWidth   = fTimeBinSize / fDriftVelocity * 1000.0;
414
415   // The range and the binwidth for the sampled TRF 
416   fTRFbin = 100;
417   // Start 0.2 mus before the signal
418   fTRFlo  = -0.2 * fDriftVelocity;
419   // End the maximum driftlength after the signal 
420   fTRFhi  = AliTRDgeometry::DrThick() 
421           + fTimeAfter * fTimeBinSize;
422   fTRFwid = (fTRFhi - fTRFlo) / ((Float_t) fTRFbin);
423
424   // Transverse and longitudinal diffusion coefficients (Xe/CO2)
425   fDiffusionT     = GetDiffusionT(fDriftVelocity,fField);
426   fDiffusionL     = GetDiffusionL(fDriftVelocity,fField);
427
428   // omega * tau.= tan(Lorentz-angle)
429   fOmegaTau       = GetOmegaTau(fDriftVelocity,fField);
430
431   // The Lorentz factor
432   if (fExBOn) {
433     fLorentzFactor = 1.0 / (1.0 + fOmegaTau*fOmegaTau);
434   }
435   else {
436     fLorentzFactor = 1.0;
437   }
438
439   // Create the sampled PRF
440   SamplePRF();
441
442   // Create the sampled TRF
443   SampleTRF();
444
445   // Create the LUT
446   FillLUT();
447
448 }
449
450 //_____________________________________________________________________________
451 void AliTRDparameter::SetNRowPad(Int_t p, Int_t c, Int_t npad)
452 {
453   //
454   // Redefines the number of pads in raw direction for
455   // a given plane and chamber number
456   //
457
458   for (Int_t isect = 0; isect < AliTRDgeometry::Nsect(); isect++) {
459
460     fRowMax[p][c][isect] = npad;
461
462     fRowPadSize[p][c][isect] = (fGeo->GetChamberLength(p,c) 
463                                 - 2.* AliTRDgeometry::RpadW())
464                              / ((Float_t) npad);
465
466   }
467
468 }
469
470 //_____________________________________________________________________________
471 void AliTRDparameter::SetNRowPad()
472 {
473   //
474   // Defines the number of pads in row direction
475   //
476
477   Int_t isect;
478   Int_t icham;
479   Int_t iplan;
480
481   Int_t rowMax[kNplan][kNcham] = { { 16, 16, 12, 16, 16 }
482                                  , { 16, 16, 12, 16, 16 }
483                                  , { 16, 16, 12, 16, 16 }
484                                  , { 16, 16, 12, 16, 16 }
485                                  , { 16, 16, 12, 16, 16 }
486                                  , { 16, 16, 12, 16, 16 } };
487
488   Float_t rpadW = AliTRDgeometry::RpadW();
489
490   for (isect = 0; isect < kNsect; isect++) {
491     for (icham = 0; icham < kNcham; icham++) {
492       for (iplan = 0; iplan < kNplan; iplan++) {
493
494         fRowMax[iplan][icham][isect]     = rowMax[iplan][icham];
495
496         fRowPadSize[iplan][icham][isect] = (fGeo->GetChamberLength(iplan,icham) 
497                                             - 2.*rpadW)
498                                          / ((Float_t) rowMax[iplan][icham]);
499
500         Float_t row0 = rpadW - fGeo->GetChamberLength(iplan,0)
501                              - fGeo->GetChamberLength(iplan,1)
502                              - fGeo->GetChamberLength(iplan,2) / 2.;
503         for (Int_t ic = 0; ic < icham; ic++) {
504           row0 += fGeo->GetChamberLength(iplan,ic);
505         }
506         fRow0[iplan][icham][isect]       = row0;
507
508       }
509     }
510   }
511
512 }
513
514 //_____________________________________________________________________________
515 void AliTRDparameter::SetColPadSize(Int_t p, Float_t s)
516 {
517   //
518   // Redefines the pad size in column direction
519   //
520
521   Float_t cpadW  = AliTRDgeometry::CpadW();
522
523   fColPadSize[p] = s;
524   fCol0[p]       = - fGeo->GetChamberWidth(p)/2. + cpadW;
525   fColMax[p]     = ((Int_t) ((fGeo->GetChamberWidth(p) - 2.*cpadW) / s));
526
527 }
528
529 //_____________________________________________________________________________
530 void AliTRDparameter::SetNTimeBin(Int_t nbin)
531 {
532   //
533   // Redefines the number of time bins in the drift region.
534   // The time bin width is defined by the length of the
535   // drift region divided by <nbin>.
536   //
537
538   fTimeMax     = nbin;
539   fTimeBinSize = AliTRDgeometry::DrThick() / ((Float_t) fTimeMax);
540   for (Int_t iplan = 0; iplan < AliTRDgeometry::Nplan(); iplan++) {
541     fTime0[iplan] = AliTRDgeometry::Rmin()
542                   + AliTRDgeometry::CraHght()
543                   + AliTRDgeometry::CdrHght()
544                   + iplan * (AliTRDgeometry::Cheight() 
545                            + AliTRDgeometry::Cspace());
546   }
547
548 }
549
550 //_____________________________________________________________________________
551 Float_t AliTRDparameter::CrossTalk(Float_t time) const
552 {
553   //
554   // Applies the pad-pad capacitive cross talk
555   //
556
557   Int_t iBin = ((Int_t) ((time - fTRFlo) / fTRFwid)); 
558   if ((iBin >= 0) && (iBin < fTRFbin)) {
559     return fCTsmp[iBin];
560   }
561   else {
562     return 0.0;
563   }    
564
565 }
566
567 //_____________________________________________________________________________
568 Int_t AliTRDparameter::Diffusion(Float_t driftlength, Float_t *xyz)
569 {
570   //
571   // Applies the diffusion smearing to the position of a single electron
572   //
573
574   Float_t driftSqrt = TMath::Sqrt(driftlength);
575   Float_t sigmaT = driftSqrt * fDiffusionT;
576   Float_t sigmaL = driftSqrt * fDiffusionL;
577   xyz[0] = gRandom->Gaus(xyz[0], sigmaL * fLorentzFactor);
578   xyz[1] = gRandom->Gaus(xyz[1], sigmaT * fLorentzFactor);
579   xyz[2] = gRandom->Gaus(xyz[2], sigmaT);
580
581   return 1;
582
583 }
584
585 //_____________________________________________________________________________
586 Int_t AliTRDparameter::ExB(Float_t driftlength, Float_t *xyz) const
587 {
588   //
589   // Applies E x B effects to the position of a single electron
590   //
591
592   xyz[0] = xyz[0];
593   xyz[1] = xyz[1] + fOmegaTau * driftlength;
594   xyz[2] = xyz[2];
595
596   return 1;
597
598 }
599
600 //_____________________________________________________________________________
601 Int_t AliTRDparameter::PadResponse(Float_t signal, Float_t dist
602                                  , Int_t plane, Float_t *pad) const
603 {
604   //
605   // Applies the pad response
606   //
607
608   const Int_t kNplan = AliTRDgeometry::kNplan;
609
610   Int_t iBin  = ((Int_t) (( - dist - fPRFlo) / fPRFwid));
611   Int_t iOff  = plane * fPRFbin;
612
613   Int_t iBin0 = iBin - fPRFpad + iOff;
614   Int_t iBin1 = iBin           + iOff;
615   Int_t iBin2 = iBin + fPRFpad + iOff;
616
617   pad[0] = 0.0;
618   pad[1] = 0.0;
619   pad[2] = 0.0;
620   if ((iBin1 >= 0) && (iBin1 < (fPRFbin*kNplan))) {
621
622     if (iBin0 >= 0) {
623       pad[0] = signal * fPRFsmp[iBin0];
624     }
625     pad[1] = signal * fPRFsmp[iBin1];
626     if (iBin2 < (fPRFbin*kNplan)) {
627       pad[2] = signal * fPRFsmp[iBin2];
628     }
629
630     return 1;
631
632   }
633   else {
634
635     return 0;
636
637   }
638
639 }
640
641 //_____________________________________________________________________________
642 Float_t AliTRDparameter::TimeResponse(Float_t time) const
643 {
644   //
645   // Applies the preamp shaper time response
646   //
647
648   Int_t iBin = ((Int_t) ((time - fTRFlo) / fTRFwid)); 
649   if ((iBin >= 0) && (iBin < fTRFbin)) {
650     return fTRFsmp[iBin];
651   }
652   else {
653     return 0.0;
654   }    
655
656 }
657
658 //_____________________________________________________________________________
659 Float_t AliTRDparameter::Col0Tilted(Float_t col0, Float_t rowOffset
660                                   , Int_t plane)
661 {
662   //
663   // Calculates col0 for tilted pads
664   //
665
666   Float_t diff = fTiltingAngle * rowOffset;
667   return (col0 + TMath::Power(-1.0,plane) * diff);
668
669 }
670
671 //_____________________________________________________________________________
672 void AliTRDparameter::SampleTRF()
673 {
674   //
675   // Samples the time response function
676   //
677   // New TRF from Venelin Angelov, simulated with CADENCE
678   // Pad-ground capacitance = 25 pF
679   // Pad-pad cross talk capacitance = 6 pF   
680   //
681
682   Int_t   ipos1;
683   Int_t   ipos2;
684   Float_t diff;
685
686   const Int_t kNpasa     = 252;
687
688   Float_t time[kNpasa]   = { -0.220000, -0.210000, -0.200000, -0.190000 
689                            , -0.180000, -0.170000, -0.160000, -0.150000 
690                            , -0.140000, -0.130000, -0.120000, -0.110000 
691                            , -0.100000, -0.090000, -0.080000, -0.070000 
692                            , -0.060000, -0.050000, -0.040000, -0.030000 
693                            , -0.020000, -0.010000, -0.000000,  0.010000 
694                            ,  0.020000,  0.030000,  0.040000,  0.050000 
695                            ,  0.060000,  0.070000,  0.080000,  0.090000 
696                            ,  0.100000,  0.110000,  0.120000,  0.130000 
697                            ,  0.140000,  0.150000,  0.160000,  0.170000 
698                            ,  0.180000,  0.190000,  0.200000,  0.210000 
699                            ,  0.220000,  0.230000,  0.240000,  0.250000 
700                            ,  0.260000,  0.270000,  0.280000,  0.290000 
701                            ,  0.300000,  0.310000,  0.320000,  0.330000 
702                            ,  0.340000,  0.350000,  0.360000,  0.370000 
703                            ,  0.380000,  0.390000,  0.400000,  0.410000 
704                            ,  0.420000,  0.430000,  0.440000,  0.450000 
705                            ,  0.460000,  0.470000,  0.480000,  0.490000 
706                            ,  0.500000,  0.510000,  0.520000,  0.530000 
707                            ,  0.540000,  0.550000,  0.560000,  0.570000 
708                            ,  0.580000,  0.590000,  0.600000,  0.610000 
709                            ,  0.620000,  0.630000,  0.640000,  0.650000 
710                            ,  0.660000,  0.670000,  0.680000,  0.690000 
711                            ,  0.700000,  0.710000,  0.720000,  0.730000 
712                            ,  0.740000,  0.750000,  0.760000,  0.770000 
713                            ,  0.780000,  0.790000,  0.800000,  0.810000 
714                            ,  0.820000,  0.830000,  0.840000,  0.850000 
715                            ,  0.860000,  0.870000,  0.880000,  0.890000 
716                            ,  0.900000,  0.910000,  0.920000,  0.930000 
717                            ,  0.940000,  0.950000,  0.960000,  0.970000 
718                            ,  0.980000,  0.990000,  1.000000,  1.010000 
719                            ,  1.020000,  1.030000,  1.040000,  1.050000 
720                            ,  1.060000,  1.070000,  1.080000,  1.090000 
721                            ,  1.100000,  1.110000,  1.120000,  1.130000 
722                            ,  1.140000,  1.150000,  1.160000,  1.170000 
723                            ,  1.180000,  1.190000,  1.200000,  1.210000 
724                            ,  1.220000,  1.230000,  1.240000,  1.250000 
725                            ,  1.260000,  1.270000,  1.280000,  1.290000 
726                            ,  1.300000,  1.310000,  1.320000,  1.330000 
727                            ,  1.340000,  1.350000,  1.360000,  1.370000 
728                            ,  1.380000,  1.390000,  1.400000,  1.410000 
729                            ,  1.420000,  1.430000,  1.440000,  1.450000 
730                            ,  1.460000,  1.470000,  1.480000,  1.490000 
731                            ,  1.500000,  1.510000,  1.520000,  1.530000 
732                            ,  1.540000,  1.550000,  1.560000,  1.570000 
733                            ,  1.580000,  1.590000,  1.600000,  1.610000 
734                            ,  1.620000,  1.630000,  1.640000,  1.650000 
735                            ,  1.660000,  1.670000,  1.680000,  1.690000 
736                            ,  1.700000,  1.710000,  1.720000,  1.730000 
737                            ,  1.740000,  1.750000,  1.760000,  1.770000 
738                            ,  1.780000,  1.790000,  1.800000,  1.810000 
739                            ,  1.820000,  1.830000,  1.840000,  1.850000 
740                            ,  1.860000,  1.870000,  1.880000,  1.890000 
741                            ,  1.900000,  1.910000,  1.920000,  1.930000 
742                            ,  1.940000,  1.950000,  1.960000,  1.970000 
743                            ,  1.980000,  1.990000,  2.000000,  2.010000 
744                            ,  2.020000,  2.030000,  2.040000,  2.050000 
745                            ,  2.060000,  2.070000,  2.080000,  2.090000 
746                            ,  2.100000,  2.110000,  2.120000,  2.130000 
747                            ,  2.140000,  2.150000,  2.160000,  2.170000 
748                            ,  2.180000,  2.190000,  2.200000,  2.210000 
749                            ,  2.220000,  2.230000,  2.240000,  2.250000 
750                            ,  2.260000,  2.270000,  2.280000,  2.290000 };
751
752   Float_t signal[kNpasa] = {  0.000000,  0.000000,  0.000000,  0.000000 
753                            ,  0.000000,  0.000000,  0.000000,  0.000396 
754                            ,  0.005096,  0.022877,  0.061891,  0.126614 
755                            ,  0.215798,  0.324406,  0.444507,  0.566817 
756                            ,  0.683465,  0.787089,  0.873159,  0.937146 
757                            ,  0.979049,  0.999434,  1.000000,  0.983579 
758                            ,  0.954134,  0.913364,  0.866365,  0.813703 
759                            ,  0.759910,  0.706116,  0.653454,  0.603624 
760                            ,  0.556625,  0.514156,  0.475085,  0.439977 
761                            ,  0.408834,  0.380578,  0.355549,  0.333352 
762                            ,  0.313647,  0.296093,  0.280351,  0.266195 
763                            ,  0.253397,  0.241789,  0.231257,  0.221574 
764                            ,  0.212627,  0.204417,  0.196772,  0.189581 
765                            ,  0.182956,  0.176784,  0.171008,  0.165515 
766                            ,  0.160419,  0.155606,  0.151076,  0.146716 
767                            ,  0.142639,  0.138845,  0.135221,  0.131767 
768                            ,  0.128482,  0.125368,  0.122424,  0.119592 
769                            ,  0.116931,  0.114326,  0.111891,  0.109513 
770                            ,  0.107248,  0.105096,  0.103058,  0.101019 
771                            ,  0.099151,  0.097282,  0.095527,  0.093715 
772                            ,  0.092129,  0.090544,  0.088958,  0.087429 
773                            ,  0.086014,  0.084598,  0.083239,  0.081880 
774                            ,  0.080634,  0.079388,  0.078143,  0.077010 
775                            ,  0.075878,  0.074745,  0.073669,  0.072593 
776                            ,  0.071574,  0.070612,  0.069649,  0.068686 
777                            ,  0.067780,  0.066874,  0.066025,  0.065176 
778                            ,  0.064326,  0.063533,  0.062684,  0.061948 
779                            ,  0.061212,  0.060419,  0.059740,  0.059003 
780                            ,  0.058324,  0.057644,  0.057022,  0.056342 
781                            ,  0.055663,  0.055096,  0.054473,  0.053851 
782                            ,  0.053284,  0.052718,  0.052152,  0.051585 
783                            ,  0.051019,  0.050566,  0.050000,  0.049490 
784                            ,  0.048981,  0.048528,  0.048018,  0.047508 
785                            ,  0.047055,  0.046602,  0.046149,  0.045696 
786                            ,  0.045300,  0.044904,  0.044451,  0.044054 
787                            ,  0.043658,  0.043205,  0.042865,  0.042469 
788                            ,  0.042072,  0.041733,  0.041336,  0.040997 
789                            ,  0.040657,  0.040260,  0.039921,  0.039581 
790                            ,  0.039241,  0.038958,  0.038618,  0.038335 
791                            ,  0.037995,  0.037656,  0.037373,  0.037089 
792                            ,  0.036806,  0.036467,  0.036183,  0.035900 
793                            ,  0.035617,  0.035334,  0.035108,  0.034824 
794                            ,  0.034541,  0.034315,  0.034032,  0.033805 
795                            ,  0.033522,  0.033296,  0.033069,  0.032786 
796                            ,  0.032559,  0.032333,  0.032106,  0.031880 
797                            ,  0.031653,  0.031427,  0.031200,  0.030974 
798                            ,  0.030804,  0.030578,  0.030351,  0.030125 
799                            ,  0.029955,  0.029785,  0.029558,  0.029332 
800                            ,  0.029162,  0.028992,  0.028766,  0.028596 
801                            ,  0.028426,  0.028199,  0.028086,  0.027860 
802                            ,  0.027746,  0.027633,  0.027463,  0.027293 
803                            ,  0.027180,  0.027067,  0.026954,  0.026954 
804                            ,  0.026840,  0.026727,  0.026727,  0.026614 
805                            ,  0.026614,  0.026614,  0.026557,  0.026501 
806                            ,  0.026501,  0.026501,  0.026501,  0.026501 
807                            ,  0.026501,  0.026501,  0.026501,  0.026387 
808                            ,  0.026387,  0.026387,  0.026387,  0.026387 
809                            ,  0.026387,  0.026387,  0.026387,  0.026387 
810                            ,  0.026387,  0.026387,  0.026387,  0.026387 
811                            ,  0.026387,  0.026274,  0.026274,  0.026274 
812                            ,  0.026274,  0.026274,  0.026274,  0.026274 
813                            ,  0.026274,  0.026274,  0.026274,  0.026274 
814                            ,  0.026274,  0.026274,  0.026274,  0.026161 };
815
816   Float_t xtalk[kNpasa]  = {  0.000000,  0.000000,  0.000000,  0.000000 
817                            ,  0.000000,  0.000000,  0.000000,  0.000113 
818                            ,  0.000793,  0.003058,  0.007305,  0.013194 
819                            ,  0.019706,  0.025821,  0.030634,  0.033465 
820                            ,  0.034145,  0.032729,  0.029615,  0.025198 
821                            ,  0.019989,  0.014496,  0.009003,  0.003964 
822                            , -0.000510, -0.004190, -0.007191, -0.009400 
823                            , -0.010872, -0.011835, -0.012288, -0.012288 
824                            , -0.012005, -0.011495, -0.010872, -0.010136 
825                            , -0.009343, -0.008607, -0.007871, -0.007191 
826                            , -0.006512, -0.005946, -0.005379, -0.004926 
827                            , -0.004473, -0.004077, -0.003737, -0.003398 
828                            , -0.003114, -0.002831, -0.002605, -0.002378 
829                            , -0.002208, -0.002039, -0.001869, -0.001699 
830                            , -0.001585, -0.001472, -0.001359, -0.001246 
831                            , -0.001132, -0.001019, -0.001019, -0.000906 
832                            , -0.000906, -0.000793, -0.000793, -0.000680 
833                            , -0.000680, -0.000680, -0.000566, -0.000566 
834                            , -0.000566, -0.000566, -0.000453, -0.000453 
835                            , -0.000453, -0.000453, -0.000453, -0.000453 
836                            , -0.000340, -0.000340, -0.000340, -0.000340 
837                            , -0.000340, -0.000340, -0.000340, -0.000340 
838                            , -0.000340, -0.000340, -0.000340, -0.000340 
839                            , -0.000340, -0.000227, -0.000227, -0.000227 
840                            , -0.000227, -0.000227, -0.000227, -0.000227 
841                            , -0.000227, -0.000227, -0.000227, -0.000227 
842                            , -0.000227, -0.000227, -0.000227, -0.000227 
843                            , -0.000227, -0.000227, -0.000227, -0.000227 
844                            , -0.000227, -0.000227, -0.000227, -0.000227 
845                            , -0.000227, -0.000227, -0.000227, -0.000227 
846                            , -0.000227, -0.000227, -0.000227, -0.000227 
847                            , -0.000227, -0.000227, -0.000227, -0.000227 
848                            , -0.000227, -0.000227, -0.000227, -0.000113 
849                            , -0.000113, -0.000113, -0.000113, -0.000113 
850                            , -0.000113, -0.000113, -0.000113, -0.000113 
851                            , -0.000113, -0.000113, -0.000113, -0.000113 
852                            , -0.000113, -0.000113, -0.000113, -0.000113 
853                            , -0.000113, -0.000113, -0.000113, -0.000113 
854                            , -0.000113, -0.000113, -0.000113, -0.000113 
855                            , -0.000113, -0.000113, -0.000113, -0.000113 
856                            , -0.000113, -0.000113, -0.000113, -0.000113 
857                            , -0.000113, -0.000113, -0.000113, -0.000113 
858                            , -0.000113, -0.000113, -0.000113, -0.000113 
859                            , -0.000113, -0.000113, -0.000113, -0.000113 
860                            , -0.000113, -0.000113, -0.000113, -0.000113 
861                            , -0.000113, -0.000113, -0.000113, -0.000113 
862                            , -0.000113, -0.000113, -0.000113, -0.000113 
863                            , -0.000113, -0.000113, -0.000113, -0.000113 
864                            , -0.000113, -0.000113, -0.000113, -0.000113 
865                            , -0.000113, -0.000113, -0.000113, -0.000113 
866                            , -0.000113, -0.000113, -0.000113, -0.000113 
867                            , -0.000113, -0.000113, -0.000113, -0.000113 
868                            , -0.000113, -0.000113, -0.000113,  0.000000 
869                            ,  0.000000,  0.000000,  0.000000,  0.000000 
870                            ,  0.000000,  0.000000,  0.000000,  0.000000 
871                            ,  0.000000,  0.000000,  0.000000,  0.000000 
872                            ,  0.000000,  0.000000,  0.000000,  0.000000 
873                            ,  0.000000,  0.000000,  0.000000,  0.000000 
874                            ,  0.000000,  0.000000,  0.000000,  0.000000 
875                            ,  0.000000,  0.000000,  0.000000,  0.000000 
876                            ,  0.000000,  0.000000,  0.000000,  0.000000 
877                            ,  0.000000,  0.000000,  0.000000,  0.000000 
878                            ,  0.000000,  0.000000,  0.000000,  0.000000 };
879
880   // increase CrossTalk to measurements
881   for (Int_t ipasa = 0; ipasa < kNpasa; ipasa++) {
882     xtalk[ipasa] *= 1.75;
883   }
884
885   if (fTRFsmp) delete [] fTRFsmp;
886   fTRFsmp = new Float_t[fTRFbin];
887   if (fCTsmp)  delete [] fCTsmp;
888   fCTsmp  = new Float_t[fTRFbin];
889
890   Float_t loTRF    = TMath::Max(fTRFlo / fDriftVelocity,time[0]);
891   Float_t hiTRF    = TMath::Min(fTRFhi / fDriftVelocity,time[kNpasa-1]);
892   Float_t binWidth = (hiTRF - loTRF) / ((Float_t) fTRFbin);
893
894   // Take the linear interpolation
895   for (Int_t iBin = 0; iBin < fTRFbin; iBin++) {
896
897     Float_t bin = (((Float_t) iBin) + 0.5) * binWidth + loTRF;
898     ipos1 = ipos2 = 0;
899     diff  = 0;
900     do {
901       diff = bin - time[ipos2++];
902     } while (diff > 0);
903     ipos2--;
904     if (ipos2 >= kNpasa) ipos2 = kNpasa - 1;
905     ipos1 = ipos2 - 1;
906
907     fTRFsmp[iBin] = signal[ipos2] 
908                   + diff * (signal[ipos2] - signal[ipos1]) 
909                          / (  time[ipos2] -   time[ipos1]);
910
911     fCTsmp[iBin]  = xtalk[ipos2] 
912                   + diff * (xtalk[ipos2]  -  xtalk[ipos1]) 
913                          / (  time[ipos2] -   time[ipos1]);
914
915   }
916
917 }
918
919 //_____________________________________________________________________________
920 void AliTRDparameter::SamplePRF()
921 {
922   //
923   // Samples the pad response function
924   //
925
926   const Int_t kNplan  = AliTRDgeometry::kNplan;
927   const Int_t kPRFbin = 61;
928
929   Float_t prf[kNplan][kPRFbin] = { { 0.018570, 0.022270, 0.026710, 0.032010
930                                    , 0.038350, 0.045920, 0.054930, 0.065650
931                                    , 0.078370, 0.093420, 0.111150, 0.131940
932                                    , 0.156160, 0.184160, 0.216220, 0.252470
933                                    , 0.292860, 0.337030, 0.384330, 0.433750
934                                    , 0.484010, 0.533630, 0.581150, 0.625200
935                                    , 0.664710, 0.698860, 0.727130, 0.749230
936                                    , 0.765050, 0.774540, 0.777700, 0.774540
937                                    , 0.765050, 0.749230, 0.727130, 0.698860
938                                    , 0.664710, 0.625200, 0.581150, 0.533630
939                                    , 0.484010, 0.433750, 0.384330, 0.337030
940                                    , 0.292860, 0.252470, 0.216220, 0.184160
941                                    , 0.156160, 0.131940, 0.111150, 0.093420
942                                    , 0.078370, 0.065650, 0.054930, 0.045920
943                                    , 0.038350, 0.032010, 0.026710, 0.022270
944                                    , 0.018570                               }
945                                  , { 0.015730, 0.019040, 0.023030, 0.027840
946                                    , 0.033650, 0.040650, 0.049060, 0.059160
947                                    , 0.071260, 0.085710, 0.102910, 0.123270
948                                    , 0.147240, 0.175220, 0.207590, 0.244540
949                                    , 0.286090, 0.331920, 0.381350, 0.433290
950                                    , 0.486290, 0.538710, 0.588870, 0.635280
951                                    , 0.676760, 0.712460, 0.741890, 0.764810
952                                    , 0.781150, 0.790930, 0.794180, 0.790930
953                                    , 0.781150, 0.764810, 0.741890, 0.712460
954                                    , 0.676760, 0.635280, 0.588870, 0.538710
955                                    , 0.486290, 0.433290, 0.381350, 0.331920
956                                    , 0.286090, 0.244540, 0.207590, 0.175220
957                                    , 0.147240, 0.123270, 0.102910, 0.085710
958                                    , 0.071260, 0.059160, 0.049060, 0.040650
959                                    , 0.033650, 0.027840, 0.023030, 0.019040
960                                    , 0.015730                               }
961                                  , { 0.013330, 0.016270, 0.019850, 0.024210
962                                    , 0.029510, 0.035960, 0.043790, 0.053280
963                                    , 0.064740, 0.078580, 0.095190, 0.115070
964                                    , 0.138700, 0.166570, 0.199120, 0.236660
965                                    , 0.279260, 0.326660, 0.378140, 0.432540
966                                    , 0.488260, 0.543440, 0.596200, 0.644900
967                                    , 0.688240, 0.725380, 0.755840, 0.779470
968                                    , 0.796260, 0.806280, 0.809610, 0.806280
969                                    , 0.796260, 0.779470, 0.755840, 0.725380
970                                    , 0.688240, 0.644900, 0.596200, 0.543440
971                                    , 0.488260, 0.432540, 0.378140, 0.326660
972                                    , 0.279260, 0.236660, 0.199120, 0.166570
973                                    , 0.138700, 0.115070, 0.095190, 0.078580
974                                    , 0.064740, 0.053280, 0.043790, 0.035960
975                                    , 0.029510, 0.024210, 0.019850, 0.016270
976                                    , 0.013330                               }
977                                  , { 0.011280, 0.013890, 0.017090, 0.021030
978                                    , 0.025870, 0.031800, 0.039060, 0.047940
979                                    , 0.058790, 0.071980, 0.087990, 0.107330
980                                    , 0.130550, 0.158220, 0.190850, 0.228870
981                                    , 0.272410, 0.321270, 0.374740, 0.431560
982                                    , 0.489960, 0.547870, 0.603180, 0.654080
983                                    , 0.699190, 0.737640, 0.769030, 0.793260
984                                    , 0.810410, 0.820620, 0.824010, 0.820620
985                                    , 0.810410, 0.793260, 0.769030, 0.737640
986                                    , 0.699190, 0.654080, 0.603180, 0.547870
987                                    , 0.489960, 0.431560, 0.374740, 0.321270
988                                    , 0.272410, 0.228870, 0.190850, 0.158220
989                                    , 0.130550, 0.107330, 0.087990, 0.071980
990                                    , 0.058790, 0.047940, 0.039060, 0.031800
991                                    , 0.025870, 0.021030, 0.017090, 0.013890
992                                    , 0.011280                               }
993                                  , { 0.009550, 0.011860, 0.014720, 0.018270
994                                    , 0.022660, 0.028100, 0.034820, 0.043120
995                                    , 0.053340, 0.065900, 0.081280, 0.100040
996                                    , 0.122800, 0.150180, 0.182800, 0.221170
997                                    , 0.265550, 0.315790, 0.371180, 0.430370
998                                    , 0.491430, 0.552030, 0.609840, 0.662860
999                                    , 0.709630, 0.749290, 0.781490, 0.806220
1000                                    , 0.823650, 0.834000, 0.837430, 0.834000
1001                                    , 0.823650, 0.806220, 0.781490, 0.749290
1002                                    , 0.709630, 0.662860, 0.609840, 0.552030
1003                                    , 0.491430, 0.430370, 0.371180, 0.315790
1004                                    , 0.265550, 0.221170, 0.182800, 0.150180
1005                                    , 0.122800, 0.100040, 0.081280, 0.065900
1006                                    , 0.053340, 0.043120, 0.034820, 0.028100
1007                                    , 0.022660, 0.018270, 0.014720, 0.011860
1008                                    , 0.009550                               }
1009                                  , { 0.008080, 0.010120, 0.012670, 0.015860
1010                                    , 0.019840, 0.024820, 0.031030, 0.038760
1011                                    , 0.048370, 0.060300, 0.075040, 0.093200
1012                                    , 0.115430, 0.142450, 0.174980, 0.213610
1013                                    , 0.258720, 0.310250, 0.367480, 0.429010
1014                                    , 0.492690, 0.555950, 0.616210, 0.671280
1015                                    , 0.719600, 0.760350, 0.793250, 0.818380
1016                                    , 0.836020, 0.846460, 0.849920, 0.846460
1017                                    , 0.836020, 0.818380, 0.793250, 0.760350
1018                                    , 0.719600, 0.671280, 0.616210, 0.555950
1019                                    , 0.492690, 0.429010, 0.367480, 0.310250
1020                                    , 0.258720, 0.213610, 0.174980, 0.142450
1021                                    , 0.115430, 0.093200, 0.075040, 0.060300
1022                                    , 0.048370, 0.038760, 0.031030, 0.024820
1023                                    , 0.019840, 0.015860, 0.012670, 0.010120
1024                                    , 0.008080                               } };
1025
1026   // More sampling precision with linear interpolation
1027   fPRFlo  = -1.5;
1028   fPRFhi  =  1.5;
1029   Float_t pad[kPRFbin];
1030   Int_t   sPRFbin = kPRFbin;  
1031   Float_t sPRFwid = (fPRFhi - fPRFlo) / ((Float_t) sPRFbin);
1032   for (Int_t iPad = 0; iPad < sPRFbin; iPad++) {
1033     pad[iPad] = ((Float_t) iPad + 0.5) * sPRFwid + fPRFlo;
1034   }
1035   fPRFbin = 500;  
1036   fPRFwid = (fPRFhi - fPRFlo) / ((Float_t) fPRFbin);
1037   fPRFpad = ((Int_t) (1.0 / fPRFwid));
1038
1039   if (fPRFsmp) delete [] fPRFsmp;
1040   fPRFsmp = new Float_t[kNplan*fPRFbin];
1041
1042   Int_t   ipos1;
1043   Int_t   ipos2;
1044   Float_t diff;
1045
1046   for (Int_t iPla = 0; iPla < kNplan; iPla++) {
1047
1048     for (Int_t iBin = 0; iBin < fPRFbin; iBin++) {
1049
1050       Float_t bin = (((Float_t) iBin) + 0.5) * fPRFwid + fPRFlo;
1051       ipos1 = ipos2 = 0;
1052       diff  = 0;
1053       do {
1054         diff = bin - pad[ipos2++];
1055       } while ((diff > 0) && (ipos2 < kPRFbin));
1056       if      (ipos2 == kPRFbin) {
1057         fPRFsmp[iPla*fPRFbin+iBin] = prf[iPla][ipos2-1];
1058       }
1059       else if (ipos2 == 1) {
1060         fPRFsmp[iPla*fPRFbin+iBin] = prf[iPla][ipos2-1];
1061       }
1062       else {
1063         ipos2--;
1064         if (ipos2 >= kPRFbin) ipos2 = kPRFbin - 1;
1065         ipos1 = ipos2 - 1;
1066         fPRFsmp[iPla*fPRFbin+iBin] = prf[iPla][ipos2] 
1067                                    + diff * (prf[iPla][ipos2] - prf[iPla][ipos1]) 
1068                                           / sPRFwid;
1069       }
1070
1071     }
1072   } 
1073
1074 }
1075
1076 //_____________________________________________________________________________
1077 void AliTRDparameter::FillLUT()
1078 {
1079   //
1080   // Create the LUT
1081   //
1082
1083   const Int_t kNplan = AliTRDgeometry::kNplan;
1084   const Int_t kNlut  = 128;
1085
1086   fLUTbin = kNplan * kNlut;
1087
1088   // The lookup table from Bogdan
1089   Float_t lut[kNplan][kNlut] = {  
1090     {
1091       0.0070, 0.0150, 0.0224, 0.0298, 0.0374, 0.0454, 0.0533, 0.0611, 
1092       0.0684, 0.0755, 0.0827, 0.0900, 0.0975, 0.1049, 0.1120, 0.1187, 
1093       0.1253, 0.1318, 0.1385, 0.1453, 0.1519, 0.1584, 0.1646, 0.1704, 
1094       0.1762, 0.1821, 0.1879, 0.1938, 0.1996, 0.2053, 0.2108, 0.2160, 
1095       0.2210, 0.2260, 0.2310, 0.2361, 0.2411, 0.2461, 0.2509, 0.2557, 
1096       0.2602, 0.2646, 0.2689, 0.2732, 0.2774, 0.2816, 0.2859, 0.2901, 
1097       0.2942, 0.2983, 0.3022, 0.3061, 0.3099, 0.3136, 0.3172, 0.3207, 
1098       0.3242, 0.3278, 0.3312, 0.3347, 0.3382, 0.3416, 0.3450, 0.3483, 
1099       0.3515, 0.3547, 0.3579, 0.3609, 0.3639, 0.3669, 0.3698, 0.3727, 
1100       0.3756, 0.3785, 0.3813, 0.3842, 0.3870, 0.3898, 0.3926, 0.3952, 
1101       0.3979, 0.4005, 0.4032, 0.4057, 0.4082, 0.4108, 0.4132, 0.4157, 
1102       0.4181, 0.4205, 0.4228, 0.4252, 0.4275, 0.4299, 0.4322, 0.4345, 
1103       0.4367, 0.4390, 0.4412, 0.4434, 0.4456, 0.4478, 0.4499, 0.4520, 
1104       0.4541, 0.4562, 0.4583, 0.4603, 0.4623, 0.4643, 0.4663, 0.4683, 
1105       0.4702, 0.4722, 0.4741, 0.4758, 0.4774, 0.4790, 0.4805, 0.4824, 
1106       0.4844, 0.4863, 0.4883, 0.4902, 0.4921, 0.4940, 0.4959, 0.4978 
1107     },
1108     {
1109       0.0072, 0.0156, 0.0235, 0.0313, 0.0394, 0.0478, 0.0561, 0.0642, 
1110       0.0718, 0.0792, 0.0868, 0.0947, 0.1025, 0.1101, 0.1172, 0.1241, 
1111       0.1309, 0.1378, 0.1449, 0.1518, 0.1586, 0.1650, 0.1710, 0.1770, 
1112       0.1830, 0.1891, 0.1952, 0.2011, 0.2070, 0.2125, 0.2177, 0.2229, 
1113       0.2280, 0.2332, 0.2383, 0.2435, 0.2484, 0.2533, 0.2581, 0.2627, 
1114       0.2670, 0.2714, 0.2757, 0.2799, 0.2842, 0.2884, 0.2927, 0.2968, 
1115       0.3008, 0.3048, 0.3086, 0.3123, 0.3159, 0.3195, 0.3231, 0.3266, 
1116       0.3301, 0.3335, 0.3370, 0.3404, 0.3438, 0.3471, 0.3504, 0.3536, 
1117       0.3567, 0.3598, 0.3628, 0.3657, 0.3686, 0.3715, 0.3744, 0.3772, 
1118       0.3800, 0.3828, 0.3856, 0.3884, 0.3911, 0.3938, 0.3965, 0.3991, 
1119       0.4016, 0.4042, 0.4067, 0.4092, 0.4116, 0.4140, 0.4164, 0.4187, 
1120       0.4211, 0.4234, 0.4257, 0.4280, 0.4302, 0.4325, 0.4347, 0.4369, 
1121       0.4391, 0.4413, 0.4434, 0.4456, 0.4477, 0.4497, 0.4518, 0.4538, 
1122       0.4558, 0.4578, 0.4598, 0.4618, 0.4637, 0.4656, 0.4675, 0.4694, 
1123       0.4713, 0.4732, 0.4750, 0.4766, 0.4781, 0.4797, 0.4813, 0.4832, 
1124       0.4851, 0.4870, 0.4888, 0.4906, 0.4925, 0.4942, 0.4960, 0.4978
1125     },
1126     {
1127       0.0075, 0.0163, 0.0246, 0.0328, 0.0415, 0.0504, 0.0592, 0.0674, 
1128       0.0753, 0.0832, 0.0914, 0.0996, 0.1077, 0.1154, 0.1225, 0.1296, 
1129       0.1369, 0.1442, 0.1515, 0.1585, 0.1652, 0.1714, 0.1776, 0.1839, 
1130       0.1902, 0.1965, 0.2025, 0.2085, 0.2141, 0.2194, 0.2247, 0.2299, 
1131       0.2352, 0.2405, 0.2457, 0.2507, 0.2557, 0.2604, 0.2649, 0.2693, 
1132       0.2737, 0.2780, 0.2823, 0.2867, 0.2909, 0.2951, 0.2992, 0.3033, 
1133       0.3072, 0.3110, 0.3146, 0.3182, 0.3218, 0.3253, 0.3288, 0.3323, 
1134       0.3357, 0.3392, 0.3426, 0.3459, 0.3492, 0.3524, 0.3555, 0.3586, 
1135       0.3616, 0.3645, 0.3674, 0.3703, 0.3731, 0.3759, 0.3787, 0.3815, 
1136       0.3843, 0.3870, 0.3897, 0.3925, 0.3950, 0.3976, 0.4002, 0.4027, 
1137       0.4052, 0.4076, 0.4101, 0.4124, 0.4148, 0.4171, 0.4194, 0.4217, 
1138       0.4239, 0.4262, 0.4284, 0.4306, 0.4328, 0.4350, 0.4371, 0.4393, 
1139       0.4414, 0.4435, 0.4455, 0.4476, 0.4496, 0.4516, 0.4536, 0.4555, 
1140       0.4575, 0.4594, 0.4613, 0.4632, 0.4650, 0.4669, 0.4687, 0.4705, 
1141       0.4723, 0.4741, 0.4758, 0.4773, 0.4789, 0.4804, 0.4821, 0.4839, 
1142       0.4857, 0.4875, 0.4893, 0.4910, 0.4928, 0.4945, 0.4961, 0.4978
1143     },
1144     {
1145       0.0078, 0.0171, 0.0258, 0.0345, 0.0438, 0.0532, 0.0624, 0.0708, 
1146       0.0791, 0.0875, 0.0962, 0.1048, 0.1130, 0.1206, 0.1281, 0.1356, 
1147       0.1432, 0.1508, 0.1582, 0.1651, 0.1716, 0.1780, 0.1845, 0.1910, 
1148       0.1975, 0.2038, 0.2099, 0.2155, 0.2210, 0.2263, 0.2317, 0.2371, 
1149       0.2425, 0.2477, 0.2528, 0.2578, 0.2626, 0.2671, 0.2715, 0.2759, 
1150       0.2803, 0.2846, 0.2890, 0.2933, 0.2975, 0.3016, 0.3056, 0.3095, 
1151       0.3132, 0.3168, 0.3204, 0.3239, 0.3274, 0.3309, 0.3344, 0.3378, 
1152       0.3412, 0.3446, 0.3479, 0.3511, 0.3543, 0.3574, 0.3603, 0.3633, 
1153       0.3662, 0.3690, 0.3718, 0.3747, 0.3774, 0.3802, 0.3829, 0.3857, 
1154       0.3883, 0.3910, 0.3936, 0.3962, 0.3987, 0.4012, 0.4037, 0.4061, 
1155       0.4085, 0.4109, 0.4132, 0.4155, 0.4177, 0.4200, 0.4222, 0.4244, 
1156       0.4266, 0.4288, 0.4309, 0.4331, 0.4352, 0.4373, 0.4394, 0.4414, 
1157       0.4435, 0.4455, 0.4475, 0.4494, 0.4514, 0.4533, 0.4552, 0.4571, 
1158       0.4590, 0.4608, 0.4626, 0.4645, 0.4662, 0.4680, 0.4698, 0.4715, 
1159       0.4733, 0.4750, 0.4766, 0.4781, 0.4796, 0.4812, 0.4829, 0.4846, 
1160       0.4863, 0.4880, 0.4897, 0.4914, 0.4930, 0.4946, 0.4963, 0.4979
1161     },
1162     {
1163       0.0081, 0.0178, 0.0270, 0.0364, 0.0463, 0.0562, 0.0656, 0.0744, 
1164       0.0831, 0.0921, 0.1013, 0.1102, 0.1183, 0.1261, 0.1339, 0.1419, 
1165       0.1499, 0.1576, 0.1648, 0.1715, 0.1782, 0.1849, 0.1917, 0.1984, 
1166       0.2048, 0.2110, 0.2167, 0.2223, 0.2278, 0.2333, 0.2389, 0.2444, 
1167       0.2497, 0.2548, 0.2598, 0.2645, 0.2691, 0.2735, 0.2780, 0.2824, 
1168       0.2868, 0.2912, 0.2955, 0.2997, 0.3038, 0.3078, 0.3116, 0.3152, 
1169       0.3188, 0.3224, 0.3259, 0.3294, 0.3329, 0.3364, 0.3398, 0.3432, 
1170       0.3465, 0.3497, 0.3529, 0.3561, 0.3591, 0.3620, 0.3649, 0.3677, 
1171       0.3705, 0.3733, 0.3761, 0.3788, 0.3816, 0.3843, 0.3869, 0.3896, 
1172       0.3922, 0.3948, 0.3973, 0.3998, 0.4022, 0.4047, 0.4070, 0.4094, 
1173       0.4117, 0.4139, 0.4162, 0.4184, 0.4206, 0.4227, 0.4249, 0.4270, 
1174       0.4291, 0.4313, 0.4334, 0.4354, 0.4375, 0.4395, 0.4415, 0.4435, 
1175       0.4455, 0.4474, 0.4493, 0.4512, 0.4531, 0.4550, 0.4568, 0.4586, 
1176       0.4604, 0.4622, 0.4639, 0.4657, 0.4674, 0.4691, 0.4708, 0.4725, 
1177       0.4742, 0.4758, 0.4773, 0.4788, 0.4803, 0.4819, 0.4836, 0.4852, 
1178       0.4869, 0.4885, 0.4901, 0.4917, 0.4933, 0.4948, 0.4964, 0.4979
1179     },
1180     {
1181       0.0085, 0.0189, 0.0288, 0.0389, 0.0497, 0.0603, 0.0699, 0.0792, 
1182       0.0887, 0.0985, 0.1082, 0.1170, 0.1253, 0.1336, 0.1421, 0.1505, 
1183       0.1587, 0.1662, 0.1733, 0.1803, 0.1874, 0.1945, 0.2014, 0.2081, 
1184       0.2143, 0.2201, 0.2259, 0.2316, 0.2374, 0.2431, 0.2487, 0.2541, 
1185       0.2593, 0.2642, 0.2689, 0.2735, 0.2781, 0.2826, 0.2872, 0.2917, 
1186       0.2961, 0.3003, 0.3045, 0.3086, 0.3125, 0.3162, 0.3198, 0.3235, 
1187       0.3270, 0.3306, 0.3342, 0.3377, 0.3411, 0.3446, 0.3479, 0.3511, 
1188       0.3543, 0.3575, 0.3605, 0.3634, 0.3663, 0.3691, 0.3720, 0.3748, 
1189       0.3775, 0.3803, 0.3830, 0.3857, 0.3884, 0.3911, 0.3937, 0.3962, 
1190       0.3987, 0.4012, 0.4036, 0.4060, 0.4084, 0.4107, 0.4129, 0.4152, 
1191       0.4174, 0.4196, 0.4218, 0.4239, 0.4261, 0.4282, 0.4303, 0.4324, 
1192       0.4344, 0.4365, 0.4385, 0.4405, 0.4425, 0.4445, 0.4464, 0.4483, 
1193       0.4502, 0.4521, 0.4539, 0.4558, 0.4576, 0.4593, 0.4611, 0.4629, 
1194       0.4646, 0.4663, 0.4680, 0.4697, 0.4714, 0.4730, 0.4747, 0.4759, 
1195       0.4769, 0.4780, 0.4790, 0.4800, 0.4811, 0.4827, 0.4843, 0.4859, 
1196       0.4874, 0.4889, 0.4905, 0.4920, 0.4935, 0.4950, 0.4965, 0.4979
1197     }
1198   }; 
1199
1200   if (fLUT) delete [] fLUT;
1201   fLUT = new Float_t[fLUTbin];
1202
1203   for (Int_t iplan = 0; iplan < kNplan; iplan++) {
1204     for (Int_t ilut  = 0; ilut  < kNlut; ilut++) {
1205       fLUT[iplan*kNlut+ilut] = lut[iplan][ilut];
1206     }
1207   }
1208
1209 }
1210
1211 //_____________________________________________________________________________
1212 void AliTRDparameter::SetTiltingAngle(Float_t v)
1213 {
1214   //
1215   // Set the tilting angle for the readout pads
1216   //
1217
1218   fTiltingAngle = TMath::Tan(TMath::Pi()/180.0 * v);
1219
1220 }
1221
1222 //_____________________________________________________________________________
1223 Float_t AliTRDparameter::GetTiltingAngle() const
1224 {
1225   //
1226   // Get the tilting angle for the readout pads
1227   //
1228
1229   return 180.0 / TMath::Pi() * TMath::ATan(fTiltingAngle);
1230
1231 }
1232
1233 //_____________________________________________________________________________
1234 Float_t AliTRDparameter::GetDiffusionL(Float_t vd, Float_t b)
1235 {
1236   //
1237   // Returns the longitudinal diffusion coefficient for a given drift 
1238   // velocity <vd> and a B-field <b> for Xe/CO2 (15%).
1239   // The values are according to a GARFIELD simulation.
1240   //
1241
1242   const Int_t kNb = 5;
1243   Float_t p0[kNb] = {  0.007440,  0.007493,  0.007513,  0.007672,  0.007831 };
1244   Float_t p1[kNb] = {  0.019252,  0.018912,  0.018636,  0.018012,  0.017343 };
1245   Float_t p2[kNb] = { -0.005042, -0.004926, -0.004867, -0.004650, -0.004424 };
1246   Float_t p3[kNb] = {  0.000195,  0.000189,  0.000195,  0.000182,  0.000169 };
1247
1248   Int_t ib = ((Int_t) (10 * (b - 0.15)));
1249   ib       = TMath::Max(  0,ib);
1250   ib       = TMath::Min(kNb,ib);
1251
1252   Float_t diff = p0[ib] 
1253                + p1[ib] * vd
1254                + p2[ib] * vd*vd
1255                + p3[ib] * vd*vd*vd;
1256
1257   return diff;
1258
1259 }
1260
1261 //_____________________________________________________________________________
1262 Float_t AliTRDparameter::GetDiffusionT(Float_t vd, Float_t b)
1263 {
1264   //
1265   // Returns the transverse diffusion coefficient for a given drift 
1266   // velocity <vd> and a B-field <b> for Xe/CO2 (15%).
1267   // The values are according to a GARFIELD simulation.
1268   //
1269
1270   const Int_t kNb = 5;
1271   Float_t p0[kNb] = {  0.009550,  0.009599,  0.009674,  0.009757,  0.009850 };
1272   Float_t p1[kNb] = {  0.006667,  0.006539,  0.006359,  0.006153,  0.005925 };
1273   Float_t p2[kNb] = { -0.000853, -0.000798, -0.000721, -0.000635, -0.000541 };
1274   Float_t p3[kNb] = {  0.000131,  0.000122,  0.000111,  0.000098,  0.000085 };
1275
1276   Int_t ib = ((Int_t) (10 * (b - 0.15)));
1277   ib       = TMath::Max(  0,ib);
1278   ib       = TMath::Min(kNb,ib);
1279
1280   Float_t diff = p0[ib] 
1281                + p1[ib] * vd
1282                + p2[ib] * vd*vd
1283                + p3[ib] * vd*vd*vd;
1284
1285   return diff;
1286
1287 }
1288
1289 //_____________________________________________________________________________
1290 Float_t AliTRDparameter::GetOmegaTau(Float_t vd, Float_t b)
1291 {
1292   //
1293   // Returns omega*tau (tan(Lorentz-angle)) for a given drift velocity <vd> 
1294   // and a B-field <b> for Xe/CO2 (15%).
1295   // The values are according to a GARFIELD simulation.
1296   //
1297
1298   const Int_t kNb = 5;
1299   Float_t p0[kNb] = {  0.004810,  0.007412,  0.010252,  0.013409,  0.016888 };
1300   Float_t p1[kNb] = {  0.054875,  0.081534,  0.107333,  0.131983,  0.155455 };
1301   Float_t p2[kNb] = { -0.008682, -0.012896, -0.016987, -0.020880, -0.024623 };
1302   Float_t p3[kNb] = {  0.000155,  0.000238,  0.000330,  0.000428,  0.000541 };
1303
1304   Int_t ib = ((Int_t) (10 * (b - 0.15)));
1305   ib       = TMath::Max(  0,ib);
1306   ib       = TMath::Min(kNb,ib);
1307
1308   Float_t alphaL = p0[ib] 
1309                  + p1[ib] * vd
1310                  + p2[ib] * vd*vd
1311                  + p3[ib] * vd*vd*vd;
1312
1313   return TMath::Tan(alphaL);
1314
1315 }
1316
1317 //_____________________________________________________________________________
1318 Double_t AliTRDparameter::LUTposition(Int_t iplane, Double_t ampL 
1319                                                   , Double_t ampC
1320                                                   , Double_t ampR) const
1321 {
1322   //
1323   // Calculates the cluster position using the lookup table.
1324   // Method provided by Bogdan Vulpescu.
1325   //
1326
1327   const Int_t kNplan = AliTRDgeometry::kNplan;
1328   const Int_t kNlut  = 128;
1329
1330   Double_t pos;
1331   Double_t x = 0.0;
1332   Double_t xmin;
1333   Double_t xmax;
1334   Double_t xwid;
1335
1336   Int_t    side = 0;
1337   Int_t    ix;
1338
1339   Double_t xMin[kNplan] = { 0.006492, 0.006377, 0.006258, 0.006144, 0.006030, 0.005980 };
1340   Double_t xMax[kNplan] = { 0.960351, 0.965870, 0.970445, 0.974352, 0.977667, 0.996101 };
1341
1342   if      (ampL > ampR) {
1343     x    = (ampL - ampR) / ampC;
1344     side = -1;
1345   } 
1346   else if (ampL < ampR) {
1347     x    = (ampR - ampL) / ampC;
1348     side = +1;
1349   }
1350
1351   if (ampL != ampR) {
1352
1353     xmin = xMin[iplane] + 0.000005;
1354     xmax = xMax[iplane] - 0.000005;
1355     xwid = (xmax - xmin) / 127.0;
1356
1357     if      (x < xmin) {
1358       pos = 0.0000;
1359     } 
1360     else if (x > xmax) {
1361       pos = side * 0.5000;
1362     } 
1363     else {
1364       ix  = (Int_t) ((x - xmin) / xwid);
1365       pos = side * fLUT[iplane*kNlut+ix];
1366     }
1367        
1368   } 
1369   else {
1370
1371     pos = 0.0;
1372
1373   }
1374
1375   return pos;
1376
1377 }