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