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