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