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