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