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