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