]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDparameter.cxx
Message commented out
[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
a328fff9 85 fTimeStructOn = 0;
86 fTimeStruct = 0;
a328fff9 87 fAnodeWireOffset = 0.0;
88
17b26de4 89}
90
91//_____________________________________________________________________________
92AliTRDparameter::AliTRDparameter(const Text_t *name, const Text_t *title)
93 :TNamed(name,title)
94{
95 //
96 // AliTRDparameter constructor
97 //
98
99 fGeo = new AliTRDgeometryFull();
67689223 100 fPRFsmp = 0;
101 fTRFsmp = 0;
102 fCTsmp = 0;
103 fGasGain = 0.0;
104 fNoise = 0.0;
105 fChipGain = 0.0;
106 fADCoutRange = 0.0;
107 fADCinRange = 0.0;
108 fADCthreshold = 0;
7e582e9f 109 fADCbaseline = 0;
67689223 110 fDiffusionOn = 0;
111 fDiffusionT = 0.0;
112 fDiffusionL = 0.0;
113 fElAttachOn = 0;
114 fElAttachProp = 0.0;
115 fExBOn = 0;
116 fOmegaTau = 0.0;
117 fPRFOn = 0;
118 fTRFOn = 0;
119 fCTOn = 0;
120 fTCOn = 0;
121 fDriftVelocity = 0.0;
122 fPadCoupling = 0.0;
123 fTimeCoupling = 0.0;
124 fTimeBinWidth = 0.0;
125 fField = 0.0;
126 fTiltingAngle = 0.0;
127 fPRFbin = 0;
128 fPRFlo = 0.0;
129 fPRFhi = 0.0;
130 fPRFwid = 0.0;
131 fPRFpad = 0;
132 fTRFbin = 0;
133 fTRFlo = 0.0;
134 fTRFhi = 0.0;
135 fTRFwid = 0.0;
136 fTCnexp = 0;
137
138 fLUTOn = 0;
139 fLUT = 0;
140 fClusMaxThresh = 0;
141 fClusSigThresh = 0;
17b26de4 142
a328fff9 143 fTimeStructOn = 0;
144 fTimeStruct = 0;
a328fff9 145 fAnodeWireOffset = 0.0;
146
17b26de4 147 Init();
148
149}
150
151
152//_____________________________________________________________________________
73ae7b59 153AliTRDparameter::AliTRDparameter(const AliTRDparameter &p):TNamed(p)
17b26de4 154{
155 //
156 // AliTRDparameter copy constructor
157 //
158
159 ((AliTRDparameter &) p).Copy(*this);
160
161}
162
163///_____________________________________________________________________________
164AliTRDparameter::~AliTRDparameter()
165{
166 //
167 // AliTRDparameter destructor
168 //
169
170 if (fTRFsmp) {
171 delete [] fTRFsmp;
172 fTRFsmp = 0;
173 }
174
175 if (fPRFsmp) {
176 delete [] fPRFsmp;
177 fPRFsmp = 0;
178 }
179
180 if (fCTsmp) {
181 delete [] fCTsmp;
182 fCTsmp = 0;
183 }
184
185 if (fLUT) {
186 delete [] fLUT;
187 fLUT = 0;
188 }
189
190 if (fGeo) {
191 delete fGeo;
192 fGeo = 0;
193 }
194
a328fff9 195 if (fTimeStruct) {
196 delete [] fTimeStruct;
197 fTimeStruct = 0;
198 }
199
17b26de4 200}
201
202//_____________________________________________________________________________
203AliTRDparameter &AliTRDparameter::operator=(const AliTRDparameter &p)
204{
205 //
206 // Assignment operator
207 //
208
209 if (this != &p) ((AliTRDparameter &) p).Copy(*this);
210 return *this;
211
212}
213
214//_____________________________________________________________________________
215void AliTRDparameter::Copy(TObject &p)
216{
217 //
218 // Copy function
219 //
220
221 Int_t iBin;
222
223 ((AliTRDparameter &) p).fGasGain = fGasGain;
224 ((AliTRDparameter &) p).fNoise = fNoise;
225 ((AliTRDparameter &) p).fChipGain = fChipGain;
226 ((AliTRDparameter &) p).fADCoutRange = fADCoutRange;
227 ((AliTRDparameter &) p).fADCinRange = fADCinRange;
228 ((AliTRDparameter &) p).fADCthreshold = fADCthreshold;
7e582e9f 229 ((AliTRDparameter &) p).fADCbaseline = fADCbaseline;
17b26de4 230 ((AliTRDparameter &) p).fDiffusionOn = fDiffusionOn;
231 ((AliTRDparameter &) p).fDiffusionT = fDiffusionT;
232 ((AliTRDparameter &) p).fDiffusionL = fDiffusionL;
233 ((AliTRDparameter &) p).fElAttachOn = fElAttachOn;
234 ((AliTRDparameter &) p).fElAttachProp = fElAttachProp;
235 ((AliTRDparameter &) p).fExBOn = fExBOn;
236 ((AliTRDparameter &) p).fOmegaTau = fOmegaTau;
237 ((AliTRDparameter &) p).fLorentzFactor = fLorentzFactor;
238 ((AliTRDparameter &) p).fDriftVelocity = fDriftVelocity;
239 ((AliTRDparameter &) p).fPadCoupling = fPadCoupling;
240 ((AliTRDparameter &) p).fTimeCoupling = fTimeCoupling;
241 ((AliTRDparameter &) p).fTimeBinWidth = fTimeBinWidth;
242 ((AliTRDparameter &) p).fField = fField;
243 ((AliTRDparameter &) p).fPRFOn = fPRFOn;
244 ((AliTRDparameter &) p).fTRFOn = fTRFOn;
245 ((AliTRDparameter &) p).fCTOn = fCTOn;
246 ((AliTRDparameter &) p).fTCOn = fTCOn;
247 ((AliTRDparameter &) p).fTiltingAngle = fTiltingAngle;
248 ((AliTRDparameter &) p).fPRFbin = fPRFbin;
249 ((AliTRDparameter &) p).fPRFlo = fPRFlo;
250 ((AliTRDparameter &) p).fPRFhi = fPRFhi;
251 ((AliTRDparameter &) p).fPRFwid = fPRFwid;
252 ((AliTRDparameter &) p).fPRFpad = fPRFpad;
253 if (((AliTRDparameter &) p).fPRFsmp) delete [] ((AliTRDparameter &) p).fPRFsmp;
254 ((AliTRDparameter &) p).fPRFsmp = new Float_t[fPRFbin];
255 for (iBin = 0; iBin < fPRFbin; iBin++) {
256 ((AliTRDparameter &) p).fPRFsmp[iBin] = fPRFsmp[iBin];
257 }
258 ((AliTRDparameter &) p).fTRFbin = fTRFbin;
259 ((AliTRDparameter &) p).fTRFlo = fTRFlo;
260 ((AliTRDparameter &) p).fTRFhi = fTRFhi;
261 ((AliTRDparameter &) p).fTRFwid = fTRFwid;
262 if (((AliTRDparameter &) p).fTRFsmp) delete [] ((AliTRDparameter &) p).fTRFsmp;
263 ((AliTRDparameter &) p).fTRFsmp = new Float_t[fTRFbin];
264 for (iBin = 0; iBin < fTRFbin; iBin++) {
265 ((AliTRDparameter &) p).fTRFsmp[iBin] = fTRFsmp[iBin];
266 }
267 if (((AliTRDparameter &) p).fCTsmp) delete [] ((AliTRDparameter &) p).fCTsmp;
268 ((AliTRDparameter &) p).fCTsmp = new Float_t[fTRFbin];
269 for (iBin = 0; iBin < fTRFbin; iBin++) {
270 ((AliTRDparameter &) p).fCTsmp[iBin] = fCTsmp[iBin];
271 }
272 ((AliTRDparameter &) p).fTCnexp = fTCnexp;
273
274 ((AliTRDparameter &) p).fLUTOn = fLUTOn;
275 ((AliTRDparameter &) p).fLUTbin = fLUTbin;
276 if (((AliTRDparameter &) p).fLUT) delete [] ((AliTRDparameter &) p).fLUT;
277 ((AliTRDparameter &) p).fLUT = new Float_t[fLUTbin];
278 for (iBin = 0; iBin < fLUTbin; iBin++) {
279 ((AliTRDparameter &) p).fLUT[iBin] = fLUT[iBin];
280 }
281 ((AliTRDparameter &) p).fClusMaxThresh = fClusMaxThresh;
282 ((AliTRDparameter &) p).fClusSigThresh = fClusSigThresh;
283
a328fff9 284 ((AliTRDparameter &) p).fAnodeWireOffset = fAnodeWireOffset;
a328fff9 285 ((AliTRDparameter &) p).fTimeStructOn = fTimeStructOn;
286 if (((AliTRDparameter &) p).fTimeStruct)
287 delete [] ((AliTRDparameter &) p).fTimeStruct;
682619b9 288 ((AliTRDparameter &) p).fTimeStruct = new Float_t[38*11];
289 for (Int_t i = 0; i < 38*11; i++) {
a328fff9 290 ((AliTRDparameter &) p).fTimeStruct[i] = fTimeStruct[i];
291 }
292
17b26de4 293}
294
295//_____________________________________________________________________________
296void AliTRDparameter::Init()
297{
298 //
299 // Initializes the parameter
300 //
301 // The maximum number of pads
302 // and the position of pad 0,0,0
303 //
304 // chambers seen from the top:
305 // +----------------------------+
306 // | |
307 // | | ^
308 // | | rphi|
309 // | | |
310 // |0 | |
311 // +----------------------------+ +------>
312 // z
313 // chambers seen from the side: ^
314 // +----------------------------+ drift|
315 // |0 | |
316 // | | |
317 // +----------------------------+ +------>
318 // z
319 //
320 // IMPORTANT: time bin 0 is now the first one in the drift region
321 // closest to the readout !!!
322 //
323
324 //
325 // ----------------------------------------------------------------------------
326 // The pad definition
327 // ----------------------------------------------------------------------------
328 //
329
330 // The pad size in column direction (rphi-direction)
a328fff9 331 //SetColPadSize(0,0.65);
332 //SetColPadSize(1,0.68);
333 //SetColPadSize(2,0.71);
334 //SetColPadSize(3,0.74);
335 //SetColPadSize(4,0.77);
336 //SetColPadSize(5,0.80);
337
338 SetColPadSize(0,0.664);
339 SetColPadSize(1,0.695);
340 SetColPadSize(2,0.726);
341 SetColPadSize(3,0.756);
342 SetColPadSize(4,0.788);
343 SetColPadSize(5,0.818);
73ae7b59 344
17b26de4 345 // The pad row (z-direction)
346 SetNRowPad();
347
348 // The number of time bins. Default is 100 ns timbin size
a328fff9 349 SetNTimeBin(20);
17b26de4 350
351 // Additional time bins before and after the drift region.
352 // Default is to only sample the drift region
353 SetExpandTimeBin(0,0);
354
355 //
356 // ----------------------------------------------------------------------------
357 // The digitization parameter
358 // ----------------------------------------------------------------------------
359 //
360
361 // The default parameter for the digitization
a328fff9 362 fGasGain = 4000.;
17b26de4 363 fChipGain = 12.4;
364 fNoise = 1000.;
365 fADCoutRange = 1023.; // 10-bit ADC
7e582e9f 366 fADCinRange = 2000.; // 2V input range
17b26de4 367 fADCthreshold = 1;
7e582e9f 368 fADCbaseline = 0;
17b26de4 369
370 // The drift velocity (cm / mus)
371 fDriftVelocity = 1.5;
372
373 // Diffusion on
374 fDiffusionOn = 1;
375
376 // E x B effects
7e582e9f 377 fExBOn = 1;
17b26de4 378
379 // Propability for electron attachment
380 fElAttachOn = 0;
381 fElAttachProp = 0.0;
382
383 // The pad response function
384 fPRFOn = 1;
385
386 // The time response function
387 fTRFOn = 1;
388
389 // The cross talk
7e582e9f 390 fCTOn = 1;
17b26de4 391
392 // The tail cancelation
393 fTCOn = 1;
394
395 // The number of exponentials
396 fTCnexp = 2;
397
b258a7c7 398 // The pad coupling factor
399 //fPadCoupling = 0.3;
682619b9 400 // Use 0.46 instead which reproduces better the test beam
b258a7c7 401 // data, even tough it is not understood why.
682619b9 402 fPadCoupling = 0.46;
17b26de4 403
404 // The time coupling factor (same number as for the TPC)
405 fTimeCoupling = 0.4;
406
a328fff9 407 // Drift time non-isochronity on
408 fTimeStructOn = 1;
409
a328fff9 410 // Distance of first Anode wire from first pad edge
411 fAnodeWireOffset = 0.25;
412
17b26de4 413 // The tilting angle for the readout pads
73ae7b59 414 SetTiltingAngle(2.0);
17b26de4 415
416 // The magnetic field strength in Tesla
c57e2264 417 fField = 0.4;
17b26de4 418
419 //
420 // ----------------------------------------------------------------------------
421 // The clusterization parameter
422 // ----------------------------------------------------------------------------
423 //
424
425 // The default parameter for the clustering
426 fClusMaxThresh = 3;
427 fClusSigThresh = 1;
428
429 // Use the LUT
430 fLUTOn = 1;
431
432 ReInit();
433
434}
435
436//_____________________________________________________________________________
437void AliTRDparameter::ReInit()
438{
439 //
440 // Reinitializes the parameter class after a change
441 //
442
a328fff9 443 // Create the sampled timing structure
444 SampleTimeStruct();
445
17b26de4 446 // Calculate the time bin width in ns
447 fTimeBinWidth = fTimeBinSize / fDriftVelocity * 1000.0;
448
449 // The range and the binwidth for the sampled TRF
450 fTRFbin = 100;
451 // Start 0.2 mus before the signal
452 fTRFlo = -0.2 * fDriftVelocity;
453 // End the maximum driftlength after the signal
454 fTRFhi = AliTRDgeometry::DrThick()
455 + fTimeAfter * fTimeBinSize;
456 fTRFwid = (fTRFhi - fTRFlo) / ((Float_t) fTRFbin);
457
458 // Transverse and longitudinal diffusion coefficients (Xe/CO2)
459 fDiffusionT = GetDiffusionT(fDriftVelocity,fField);
460 fDiffusionL = GetDiffusionL(fDriftVelocity,fField);
461
462 // omega * tau.= tan(Lorentz-angle)
463 fOmegaTau = GetOmegaTau(fDriftVelocity,fField);
464
465 // The Lorentz factor
466 if (fExBOn) {
467 fLorentzFactor = 1.0 / (1.0 + fOmegaTau*fOmegaTau);
468 }
469 else {
470 fLorentzFactor = 1.0;
471 }
472
473 // Create the sampled PRF
474 SamplePRF();
475
476 // Create the sampled TRF
477 SampleTRF();
478
479 // Create the LUT
480 FillLUT();
481
482}
483
484//_____________________________________________________________________________
afc51ac2 485void AliTRDparameter::SetNRowPad(Int_t p, Int_t c, Int_t npad)
17b26de4 486{
487 //
488 // Redefines the number of pads in raw direction for
489 // a given plane and chamber number
490 //
491
492 for (Int_t isect = 0; isect < AliTRDgeometry::Nsect(); isect++) {
493
494 fRowMax[p][c][isect] = npad;
495
496 fRowPadSize[p][c][isect] = (fGeo->GetChamberLength(p,c)
497 - 2.* AliTRDgeometry::RpadW())
498 / ((Float_t) npad);
499
500 }
501
502}
503
504//_____________________________________________________________________________
505void AliTRDparameter::SetNRowPad()
506{
507 //
508 // Defines the number of pads in row direction
509 //
510
511 Int_t isect;
512 Int_t icham;
513 Int_t iplan;
514
515 Int_t rowMax[kNplan][kNcham] = { { 16, 16, 12, 16, 16 }
516 , { 16, 16, 12, 16, 16 }
517 , { 16, 16, 12, 16, 16 }
518 , { 16, 16, 12, 16, 16 }
ad973dd4 519 , { 16, 16, 12, 16, 16 }
520 , { 16, 16, 12, 16, 16 } };
17b26de4 521
522 Float_t rpadW = AliTRDgeometry::RpadW();
523
524 for (isect = 0; isect < kNsect; isect++) {
525 for (icham = 0; icham < kNcham; icham++) {
526 for (iplan = 0; iplan < kNplan; iplan++) {
527
528 fRowMax[iplan][icham][isect] = rowMax[iplan][icham];
529
530 fRowPadSize[iplan][icham][isect] = (fGeo->GetChamberLength(iplan,icham)
531 - 2.*rpadW)
532 / ((Float_t) rowMax[iplan][icham]);
533
534 Float_t row0 = rpadW - fGeo->GetChamberLength(iplan,0)
535 - fGeo->GetChamberLength(iplan,1)
536 - fGeo->GetChamberLength(iplan,2) / 2.;
537 for (Int_t ic = 0; ic < icham; ic++) {
4bd34b78 538 row0 += fGeo->GetChamberLength(iplan,ic);
17b26de4 539 }
540 fRow0[iplan][icham][isect] = row0;
541
542 }
543 }
544 }
545
546}
547
548//_____________________________________________________________________________
afc51ac2 549void AliTRDparameter::SetColPadSize(Int_t p, Float_t s)
17b26de4 550{
551 //
552 // Redefines the pad size in column direction
553 //
554
555 Float_t cpadW = AliTRDgeometry::CpadW();
556
557 fColPadSize[p] = s;
558 fCol0[p] = - fGeo->GetChamberWidth(p)/2. + cpadW;
559 fColMax[p] = ((Int_t) ((fGeo->GetChamberWidth(p) - 2.*cpadW) / s));
560
561}
562
563//_____________________________________________________________________________
afc51ac2 564void AliTRDparameter::SetNTimeBin(Int_t nbin)
17b26de4 565{
566 //
567 // Redefines the number of time bins in the drift region.
568 // The time bin width is defined by the length of the
569 // drift region divided by <nbin>.
570 //
571
572 fTimeMax = nbin;
573 fTimeBinSize = AliTRDgeometry::DrThick() / ((Float_t) fTimeMax);
574 for (Int_t iplan = 0; iplan < AliTRDgeometry::Nplan(); iplan++) {
575 fTime0[iplan] = AliTRDgeometry::Rmin()
576 + AliTRDgeometry::CraHght()
577 + AliTRDgeometry::CdrHght()
578 + iplan * (AliTRDgeometry::Cheight()
579 + AliTRDgeometry::Cspace());
580 }
581
582}
583
584//_____________________________________________________________________________
0a29d0f1 585Float_t AliTRDparameter::CrossTalk(Float_t time) const
17b26de4 586{
587 //
588 // Applies the pad-pad capacitive cross talk
589 //
590
591 Int_t iBin = ((Int_t) ((time - fTRFlo) / fTRFwid));
592 if ((iBin >= 0) && (iBin < fTRFbin)) {
593 return fCTsmp[iBin];
594 }
595 else {
596 return 0.0;
597 }
598
599}
600
a328fff9 601//_____________________________________________________________________________
682619b9 602Int_t AliTRDparameter::TimeStruct(Float_t dist, Float_t z, Float_t *xyz) const
a328fff9 603{
604 //
605 // Applies the time structure of the drift cells (by C.Lippmann).
606 // The drift time of electrons to the anode wires depends on the
607 // distance to the wire (z) and on the position in the drift region.
682619b9 608 // Here we omnly reposition each electron, since the drift velocity
609 // in the digitisation is still constant. If the electrons at a given
610 // position has a long drift time, it is just moved further away from
611 // the anode wire plane.
612 //
613 // input :
614 // dist = radial distance from anode wire plane [cm]
615 // z = distance from anode wire (parallel to cathode planes) [cm]
a328fff9 616 //
617
a328fff9 618
682619b9 619 // indices:
620 Int_t r1 = (Int_t)(10*dist);
a328fff9 621 Int_t r2 = r1+1;
682619b9 622 Int_t z1 = (Int_t)(100*z/2.5);
a328fff9 623 Int_t z2 = z1+1;
624
682619b9 625 if (r1<0 || r1>37 || z1<0 || z1>10) {
a328fff9 626 printf("<AliTRDparameter::TimeStruct> Warning. Indices out of range: ");
682619b9 627 printf("dist=%.2f, z=%.2f, r1=%d, z1=%d\n",dist,z,r1,z1);
a328fff9 628 return kFALSE;
a328fff9 629 }
630
631 // 2D Interpolation:
682619b9 632 Float_t y11 = fTimeStruct[r1+38*z1];
633 Float_t y22 = (r2 <= 37 && z2 <= 10) ? fTimeStruct[r2+38*z2] : fTimeStruct[37+38*10];
634 Float_t y12 = (z2 <= 10) ? fTimeStruct[r1+38*z2] : fTimeStruct[r1+38*10];
635 Float_t y21 = (r2 <= 37) ? fTimeStruct[r2+38*z1] : fTimeStruct[37+38*z1];
636
637 Float_t y1 = (y21-y11)*10*dist + y11 - (y21-y11)*r1;
638 Float_t y2 = (y22-y12)*10*dist + y12 - (y22-y12)*r1;
639
640 Float_t AmTh = AliTRDgeometry::AmThick()/2.0;
641
642 // dist now is the drift distance to anode wires (negative if electrons are
643 // between anode wire plane and cathode pad plane)
644 dist -= AmTh;
645
646 // Get the drift time from the interpolation:
647 Float_t tdrift =
648 ( TMath::Abs(dist)>0.005 || z>0.005 ) ? tdrift = (y2-y1)*100*z/2.5+y1-(y2-y1)*z1 : 0.0;
649
650 // We move electrons further away from the anode wire plane, if the drift time is
651 // larger than the one expected for that distance for a constant drift velocity. We
652 // increase (decrease) the drift distance by a factor
653 //
654 // c = t(x0)*vd/x0 ,
655 //
656 // where x0 is the distance from the anode wire plane (dist), vd is the constant
657 // drift velocity (fDriftVelocity) and t(x0) is the real drift time (tdrift, as
658 // calculated with GARFIELD).
659 //
660 // The factor is negative for electrons between anode wire plane and cathode pads.
661 //
662 // The new position of the electron is then given by: t(x0)*vd:
663
664 Float_t zdrift = tdrift * fDriftVelocity;
665 if (dist < 0.) zdrift *= -1.;
666
667 xyz[0] = xyz[0] + dist - zdrift;
a328fff9 668 xyz[1] = xyz[1];
669 xyz[2] = xyz[2];
670
671 return 1;
672
673}
674
17b26de4 675//_____________________________________________________________________________
676Int_t AliTRDparameter::Diffusion(Float_t driftlength, Float_t *xyz)
677{
678 //
679 // Applies the diffusion smearing to the position of a single electron
680 //
681
682 Float_t driftSqrt = TMath::Sqrt(driftlength);
683 Float_t sigmaT = driftSqrt * fDiffusionT;
684 Float_t sigmaL = driftSqrt * fDiffusionL;
685 xyz[0] = gRandom->Gaus(xyz[0], sigmaL * fLorentzFactor);
686 xyz[1] = gRandom->Gaus(xyz[1], sigmaT * fLorentzFactor);
687 xyz[2] = gRandom->Gaus(xyz[2], sigmaT);
688
689 return 1;
690
691}
692
693//_____________________________________________________________________________
0a29d0f1 694Int_t AliTRDparameter::ExB(Float_t driftlength, Float_t *xyz) const
17b26de4 695{
696 //
697 // Applies E x B effects to the position of a single electron
698 //
699
700 xyz[0] = xyz[0];
701 xyz[1] = xyz[1] + fOmegaTau * driftlength;
702 xyz[2] = xyz[2];
703
704 return 1;
705
706}
707
708//_____________________________________________________________________________
709Int_t AliTRDparameter::PadResponse(Float_t signal, Float_t dist
0a29d0f1 710 , Int_t plane, Float_t *pad) const
17b26de4 711{
712 //
713 // Applies the pad response
714 //
715
716 const Int_t kNplan = AliTRDgeometry::kNplan;
717
718 Int_t iBin = ((Int_t) (( - dist - fPRFlo) / fPRFwid));
719 Int_t iOff = plane * fPRFbin;
720
721 Int_t iBin0 = iBin - fPRFpad + iOff;
722 Int_t iBin1 = iBin + iOff;
723 Int_t iBin2 = iBin + fPRFpad + iOff;
724
725 pad[0] = 0.0;
726 pad[1] = 0.0;
727 pad[2] = 0.0;
728 if ((iBin1 >= 0) && (iBin1 < (fPRFbin*kNplan))) {
729
730 if (iBin0 >= 0) {
731 pad[0] = signal * fPRFsmp[iBin0];
732 }
733 pad[1] = signal * fPRFsmp[iBin1];
734 if (iBin2 < (fPRFbin*kNplan)) {
735 pad[2] = signal * fPRFsmp[iBin2];
736 }
737
738 return 1;
739
740 }
741 else {
742
743 return 0;
744
745 }
746
747}
748
749//_____________________________________________________________________________
0a29d0f1 750Float_t AliTRDparameter::TimeResponse(Float_t time) const
17b26de4 751{
752 //
753 // Applies the preamp shaper time response
754 //
755
756 Int_t iBin = ((Int_t) ((time - fTRFlo) / fTRFwid));
757 if ((iBin >= 0) && (iBin < fTRFbin)) {
758 return fTRFsmp[iBin];
759 }
760 else {
761 return 0.0;
762 }
763
764}
765
766//_____________________________________________________________________________
767Float_t AliTRDparameter::Col0Tilted(Float_t col0, Float_t rowOffset
768 , Int_t plane)
769{
770 //
771 // Calculates col0 for tilted pads
772 //
773
774 Float_t diff = fTiltingAngle * rowOffset;
a328fff9 775 return (col0 + TMath::Power(-1.0,(plane+1)) * diff);
17b26de4 776
777}
778
779//_____________________________________________________________________________
780void AliTRDparameter::SampleTRF()
781{
782 //
783 // Samples the time response function
784 //
785 // New TRF from Venelin Angelov, simulated with CADENCE
786 // Pad-ground capacitance = 25 pF
787 // Pad-pad cross talk capacitance = 6 pF
788 //
789
790 Int_t ipos1;
791 Int_t ipos2;
792 Float_t diff;
793
794 const Int_t kNpasa = 252;
795
796 Float_t time[kNpasa] = { -0.220000, -0.210000, -0.200000, -0.190000
797 , -0.180000, -0.170000, -0.160000, -0.150000
798 , -0.140000, -0.130000, -0.120000, -0.110000
799 , -0.100000, -0.090000, -0.080000, -0.070000
800 , -0.060000, -0.050000, -0.040000, -0.030000
801 , -0.020000, -0.010000, -0.000000, 0.010000
802 , 0.020000, 0.030000, 0.040000, 0.050000
803 , 0.060000, 0.070000, 0.080000, 0.090000
804 , 0.100000, 0.110000, 0.120000, 0.130000
805 , 0.140000, 0.150000, 0.160000, 0.170000
806 , 0.180000, 0.190000, 0.200000, 0.210000
807 , 0.220000, 0.230000, 0.240000, 0.250000
808 , 0.260000, 0.270000, 0.280000, 0.290000
809 , 0.300000, 0.310000, 0.320000, 0.330000
810 , 0.340000, 0.350000, 0.360000, 0.370000
811 , 0.380000, 0.390000, 0.400000, 0.410000
812 , 0.420000, 0.430000, 0.440000, 0.450000
813 , 0.460000, 0.470000, 0.480000, 0.490000
814 , 0.500000, 0.510000, 0.520000, 0.530000
815 , 0.540000, 0.550000, 0.560000, 0.570000
816 , 0.580000, 0.590000, 0.600000, 0.610000
817 , 0.620000, 0.630000, 0.640000, 0.650000
818 , 0.660000, 0.670000, 0.680000, 0.690000
819 , 0.700000, 0.710000, 0.720000, 0.730000
820 , 0.740000, 0.750000, 0.760000, 0.770000
821 , 0.780000, 0.790000, 0.800000, 0.810000
822 , 0.820000, 0.830000, 0.840000, 0.850000
823 , 0.860000, 0.870000, 0.880000, 0.890000
824 , 0.900000, 0.910000, 0.920000, 0.930000
825 , 0.940000, 0.950000, 0.960000, 0.970000
826 , 0.980000, 0.990000, 1.000000, 1.010000
827 , 1.020000, 1.030000, 1.040000, 1.050000
828 , 1.060000, 1.070000, 1.080000, 1.090000
829 , 1.100000, 1.110000, 1.120000, 1.130000
830 , 1.140000, 1.150000, 1.160000, 1.170000
831 , 1.180000, 1.190000, 1.200000, 1.210000
832 , 1.220000, 1.230000, 1.240000, 1.250000
833 , 1.260000, 1.270000, 1.280000, 1.290000
834 , 1.300000, 1.310000, 1.320000, 1.330000
835 , 1.340000, 1.350000, 1.360000, 1.370000
836 , 1.380000, 1.390000, 1.400000, 1.410000
837 , 1.420000, 1.430000, 1.440000, 1.450000
838 , 1.460000, 1.470000, 1.480000, 1.490000
839 , 1.500000, 1.510000, 1.520000, 1.530000
840 , 1.540000, 1.550000, 1.560000, 1.570000
841 , 1.580000, 1.590000, 1.600000, 1.610000
842 , 1.620000, 1.630000, 1.640000, 1.650000
843 , 1.660000, 1.670000, 1.680000, 1.690000
844 , 1.700000, 1.710000, 1.720000, 1.730000
845 , 1.740000, 1.750000, 1.760000, 1.770000
846 , 1.780000, 1.790000, 1.800000, 1.810000
847 , 1.820000, 1.830000, 1.840000, 1.850000
848 , 1.860000, 1.870000, 1.880000, 1.890000
849 , 1.900000, 1.910000, 1.920000, 1.930000
850 , 1.940000, 1.950000, 1.960000, 1.970000
851 , 1.980000, 1.990000, 2.000000, 2.010000
852 , 2.020000, 2.030000, 2.040000, 2.050000
853 , 2.060000, 2.070000, 2.080000, 2.090000
854 , 2.100000, 2.110000, 2.120000, 2.130000
855 , 2.140000, 2.150000, 2.160000, 2.170000
856 , 2.180000, 2.190000, 2.200000, 2.210000
857 , 2.220000, 2.230000, 2.240000, 2.250000
858 , 2.260000, 2.270000, 2.280000, 2.290000 };
859
860 Float_t signal[kNpasa] = { 0.000000, 0.000000, 0.000000, 0.000000
861 , 0.000000, 0.000000, 0.000000, 0.000396
862 , 0.005096, 0.022877, 0.061891, 0.126614
863 , 0.215798, 0.324406, 0.444507, 0.566817
864 , 0.683465, 0.787089, 0.873159, 0.937146
865 , 0.979049, 0.999434, 1.000000, 0.983579
866 , 0.954134, 0.913364, 0.866365, 0.813703
867 , 0.759910, 0.706116, 0.653454, 0.603624
868 , 0.556625, 0.514156, 0.475085, 0.439977
869 , 0.408834, 0.380578, 0.355549, 0.333352
870 , 0.313647, 0.296093, 0.280351, 0.266195
871 , 0.253397, 0.241789, 0.231257, 0.221574
872 , 0.212627, 0.204417, 0.196772, 0.189581
873 , 0.182956, 0.176784, 0.171008, 0.165515
874 , 0.160419, 0.155606, 0.151076, 0.146716
875 , 0.142639, 0.138845, 0.135221, 0.131767
876 , 0.128482, 0.125368, 0.122424, 0.119592
877 , 0.116931, 0.114326, 0.111891, 0.109513
878 , 0.107248, 0.105096, 0.103058, 0.101019
879 , 0.099151, 0.097282, 0.095527, 0.093715
880 , 0.092129, 0.090544, 0.088958, 0.087429
881 , 0.086014, 0.084598, 0.083239, 0.081880
882 , 0.080634, 0.079388, 0.078143, 0.077010
883 , 0.075878, 0.074745, 0.073669, 0.072593
884 , 0.071574, 0.070612, 0.069649, 0.068686
885 , 0.067780, 0.066874, 0.066025, 0.065176
886 , 0.064326, 0.063533, 0.062684, 0.061948
887 , 0.061212, 0.060419, 0.059740, 0.059003
888 , 0.058324, 0.057644, 0.057022, 0.056342
889 , 0.055663, 0.055096, 0.054473, 0.053851
890 , 0.053284, 0.052718, 0.052152, 0.051585
891 , 0.051019, 0.050566, 0.050000, 0.049490
892 , 0.048981, 0.048528, 0.048018, 0.047508
893 , 0.047055, 0.046602, 0.046149, 0.045696
894 , 0.045300, 0.044904, 0.044451, 0.044054
895 , 0.043658, 0.043205, 0.042865, 0.042469
896 , 0.042072, 0.041733, 0.041336, 0.040997
897 , 0.040657, 0.040260, 0.039921, 0.039581
898 , 0.039241, 0.038958, 0.038618, 0.038335
899 , 0.037995, 0.037656, 0.037373, 0.037089
900 , 0.036806, 0.036467, 0.036183, 0.035900
901 , 0.035617, 0.035334, 0.035108, 0.034824
902 , 0.034541, 0.034315, 0.034032, 0.033805
903 , 0.033522, 0.033296, 0.033069, 0.032786
904 , 0.032559, 0.032333, 0.032106, 0.031880
905 , 0.031653, 0.031427, 0.031200, 0.030974
906 , 0.030804, 0.030578, 0.030351, 0.030125
907 , 0.029955, 0.029785, 0.029558, 0.029332
908 , 0.029162, 0.028992, 0.028766, 0.028596
909 , 0.028426, 0.028199, 0.028086, 0.027860
910 , 0.027746, 0.027633, 0.027463, 0.027293
911 , 0.027180, 0.027067, 0.026954, 0.026954
912 , 0.026840, 0.026727, 0.026727, 0.026614
913 , 0.026614, 0.026614, 0.026557, 0.026501
914 , 0.026501, 0.026501, 0.026501, 0.026501
915 , 0.026501, 0.026501, 0.026501, 0.026387
916 , 0.026387, 0.026387, 0.026387, 0.026387
917 , 0.026387, 0.026387, 0.026387, 0.026387
918 , 0.026387, 0.026387, 0.026387, 0.026387
919 , 0.026387, 0.026274, 0.026274, 0.026274
920 , 0.026274, 0.026274, 0.026274, 0.026274
921 , 0.026274, 0.026274, 0.026274, 0.026274
922 , 0.026274, 0.026274, 0.026274, 0.026161 };
923
924 Float_t xtalk[kNpasa] = { 0.000000, 0.000000, 0.000000, 0.000000
925 , 0.000000, 0.000000, 0.000000, 0.000113
926 , 0.000793, 0.003058, 0.007305, 0.013194
927 , 0.019706, 0.025821, 0.030634, 0.033465
928 , 0.034145, 0.032729, 0.029615, 0.025198
929 , 0.019989, 0.014496, 0.009003, 0.003964
930 , -0.000510, -0.004190, -0.007191, -0.009400
931 , -0.010872, -0.011835, -0.012288, -0.012288
932 , -0.012005, -0.011495, -0.010872, -0.010136
933 , -0.009343, -0.008607, -0.007871, -0.007191
934 , -0.006512, -0.005946, -0.005379, -0.004926
935 , -0.004473, -0.004077, -0.003737, -0.003398
936 , -0.003114, -0.002831, -0.002605, -0.002378
937 , -0.002208, -0.002039, -0.001869, -0.001699
938 , -0.001585, -0.001472, -0.001359, -0.001246
939 , -0.001132, -0.001019, -0.001019, -0.000906
940 , -0.000906, -0.000793, -0.000793, -0.000680
941 , -0.000680, -0.000680, -0.000566, -0.000566
942 , -0.000566, -0.000566, -0.000453, -0.000453
943 , -0.000453, -0.000453, -0.000453, -0.000453
944 , -0.000340, -0.000340, -0.000340, -0.000340
945 , -0.000340, -0.000340, -0.000340, -0.000340
946 , -0.000340, -0.000340, -0.000340, -0.000340
947 , -0.000340, -0.000227, -0.000227, -0.000227
948 , -0.000227, -0.000227, -0.000227, -0.000227
949 , -0.000227, -0.000227, -0.000227, -0.000227
950 , -0.000227, -0.000227, -0.000227, -0.000227
951 , -0.000227, -0.000227, -0.000227, -0.000227
952 , -0.000227, -0.000227, -0.000227, -0.000227
953 , -0.000227, -0.000227, -0.000227, -0.000227
954 , -0.000227, -0.000227, -0.000227, -0.000227
955 , -0.000227, -0.000227, -0.000227, -0.000227
956 , -0.000227, -0.000227, -0.000227, -0.000113
957 , -0.000113, -0.000113, -0.000113, -0.000113
958 , -0.000113, -0.000113, -0.000113, -0.000113
959 , -0.000113, -0.000113, -0.000113, -0.000113
960 , -0.000113, -0.000113, -0.000113, -0.000113
961 , -0.000113, -0.000113, -0.000113, -0.000113
962 , -0.000113, -0.000113, -0.000113, -0.000113
963 , -0.000113, -0.000113, -0.000113, -0.000113
964 , -0.000113, -0.000113, -0.000113, -0.000113
965 , -0.000113, -0.000113, -0.000113, -0.000113
966 , -0.000113, -0.000113, -0.000113, -0.000113
967 , -0.000113, -0.000113, -0.000113, -0.000113
968 , -0.000113, -0.000113, -0.000113, -0.000113
969 , -0.000113, -0.000113, -0.000113, -0.000113
970 , -0.000113, -0.000113, -0.000113, -0.000113
971 , -0.000113, -0.000113, -0.000113, -0.000113
972 , -0.000113, -0.000113, -0.000113, -0.000113
973 , -0.000113, -0.000113, -0.000113, -0.000113
974 , -0.000113, -0.000113, -0.000113, -0.000113
975 , -0.000113, -0.000113, -0.000113, -0.000113
976 , -0.000113, -0.000113, -0.000113, 0.000000
977 , 0.000000, 0.000000, 0.000000, 0.000000
978 , 0.000000, 0.000000, 0.000000, 0.000000
979 , 0.000000, 0.000000, 0.000000, 0.000000
980 , 0.000000, 0.000000, 0.000000, 0.000000
981 , 0.000000, 0.000000, 0.000000, 0.000000
982 , 0.000000, 0.000000, 0.000000, 0.000000
983 , 0.000000, 0.000000, 0.000000, 0.000000
984 , 0.000000, 0.000000, 0.000000, 0.000000
985 , 0.000000, 0.000000, 0.000000, 0.000000
986 , 0.000000, 0.000000, 0.000000, 0.000000 };
987
988 // increase CrossTalk to measurements
989 for (Int_t ipasa = 0; ipasa < kNpasa; ipasa++) {
990 xtalk[ipasa] *= 1.75;
991 }
992
993 if (fTRFsmp) delete [] fTRFsmp;
994 fTRFsmp = new Float_t[fTRFbin];
995 if (fCTsmp) delete [] fCTsmp;
996 fCTsmp = new Float_t[fTRFbin];
997
998 Float_t loTRF = TMath::Max(fTRFlo / fDriftVelocity,time[0]);
999 Float_t hiTRF = TMath::Min(fTRFhi / fDriftVelocity,time[kNpasa-1]);
1000 Float_t binWidth = (hiTRF - loTRF) / ((Float_t) fTRFbin);
1001
1002 // Take the linear interpolation
1003 for (Int_t iBin = 0; iBin < fTRFbin; iBin++) {
1004
1005 Float_t bin = (((Float_t) iBin) + 0.5) * binWidth + loTRF;
1006 ipos1 = ipos2 = 0;
1007 diff = 0;
1008 do {
1009 diff = bin - time[ipos2++];
1010 } while (diff > 0);
1011 ipos2--;
1012 if (ipos2 >= kNpasa) ipos2 = kNpasa - 1;
1013 ipos1 = ipos2 - 1;
1014
1015 fTRFsmp[iBin] = signal[ipos2]
1016 + diff * (signal[ipos2] - signal[ipos1])
1017 / ( time[ipos2] - time[ipos1]);
1018
1019 fCTsmp[iBin] = xtalk[ipos2]
1020 + diff * (xtalk[ipos2] - xtalk[ipos1])
1021 / ( time[ipos2] - time[ipos1]);
1022
1023 }
1024
1025}
1026
a328fff9 1027//_____________________________________________________________________________
1028void AliTRDparameter::SampleTimeStruct()
1029{
1030 //
1031 // Samples the timing structure of a drift cell
1032 // Drift Time data calculated with Garfield (by C.Lippmann)
1033 //
1034
1035 const Int_t ktimebin = 38;
682619b9 1036 const Int_t kZbin = 11;
1037
1038 Float_t time[ktimebin][kZbin] =
1039 {{0.10176, 0.10197, 0.10356, 0.10479, 0.10497, 0.10500, 0.10500,
1040 0.10698, 0.12213, 0.16118, 0.22154},
1041 {0.07500, 0.07500, 0.07500, 0.07500, 0.07500, 0.07500, 0.07509,
1042 0.08010, 0.10176, 0.13244, 0.22848},
1043 {0.04500, 0.04500, 0.04500, 0.04500, 0.04500, 0.04503, 0.05130,
1044 0.07398, 0.07557, 0.11064, 0.26833},
1045 {0.01500, 0.01500, 0.01500, 0.01500, 0.03219, 0.04500, 0.04500,
1046 0.04500, 0.07482, 0.11628, 0.40846},
1047 {0.01500, 0.01500, 0.01500, 0.01500, 0.02886, 0.04500, 0.04500,
1048 0.04512, 0.07503, 0.13230, 0.43602},
1049 {0.04500, 0.04500, 0.04500, 0.04500, 0.04500, 0.04500, 0.04872,
1050 0.07437, 0.07635, 0.11925, 0.30372},
1051 {0.07500, 0.07497, 0.07500, 0.07500, 0.07500, 0.07500, 0.07500,
1052 0.08232, 0.10458, 0.14100, 0.24799},
1053 {0.10098, 0.10125, 0.10218, 0.10299, 0.10467, 0.15000, 0.10959,
1054 0.12207, 0.14241, 0.19485, 0.25688},
1055 {0.13500, 0.13503, 0.13509, 0.13782, 0.16182, 0.25076, 0.19593,
1056 0.19254, 0.21060, 0.25561, 0.29469},
1057 {0.19305, 0.19374, 0.19512, 0.19974, 0.22020, 0.29420, 0.25992,
1058 0.25461, 0.27515, 0.31938, 0.35238},
1059 {0.25143, 0.25320, 0.25476, 0.26166, 0.27993, 0.34470, 0.32160,
1060 0.31623, 0.33687, 0.37420, 0.40797},
1061 {0.31044, 0.31197, 0.31491, 0.32280, 0.34125, 0.39702, 0.38401,
1062 0.37794, 0.39545, 0.43494, 0.46956},
1063 {0.37128, 0.37146, 0.37668, 0.38424, 0.40326, 0.45271, 0.44643,
1064 0.43783, 0.45882, 0.49726, 0.52348},
1065 {0.43065, 0.43242, 0.43722, 0.44379, 0.46551, 0.51167, 0.50685,
1066 0.49924, 0.52016, 0.55609, 0.57829},
1067 {0.49161, 0.49329, 0.49725, 0.50629, 0.52803, 0.56777, 0.56755,
1068 0.56057, 0.58062, 0.61293, 0.63839},
1069 {0.55284, 0.55311, 0.55743, 0.56703, 0.58824, 0.62747, 0.62833,
1070 0.62083, 0.63899, 0.67412, 0.70006},
1071 {0.61323, 0.61494, 0.61782, 0.62802, 0.65025, 0.68675, 0.68847,
1072 0.68248, 0.70177, 0.73588, 0.76314},
1073 {0.67293, 0.67482, 0.68034, 0.68814, 0.71169, 0.74695, 0.75024,
1074 0.74462, 0.76083, 0.79194, 0.81463},
1075 {0.73470, 0.73665, 0.74013, 0.75054, 0.77107, 0.80588, 0.81071,
1076 0.80508, 0.82337, 0.85380, 0.87045},
1077 {0.79509, 0.79677, 0.80115, 0.81150, 0.83400, 0.86360, 0.87159,
1078 0.86608, 0.88323, 0.91756, 0.93721},
1079 {0.85695, 0.85800, 0.86307, 0.87276, 0.89599, 0.92639, 0.93266,
1080 0.92962, 0.94291, 0.97445, 0.99502},
1081 {0.91680, 0.91875, 0.92400, 0.93219, 0.95555, 0.98729, 0.99281,
1082 0.99145, 1.00683, 1.03343, 1.05299},
1083 {0.97833, 0.98058, 0.98421, 0.99357, 1.01602, 1.04438, 1.05299,
1084 1.05168, 1.06528, 1.09644, 1.11557},
1085 {1.03938, 1.04061, 1.04568, 1.05617, 1.07923, 1.10648, 1.11466,
1086 1.11385, 1.12606, 1.15817, 1.17352},
1087 {1.10166, 1.10268, 1.10766, 1.11785, 1.14014, 1.16717, 1.17496,
1088 1.17644, 1.19115, 1.21622, 1.23605},
1089 {1.16334, 1.16364, 1.16985, 1.17996, 1.19935, 1.22911, 1.23561,
1090 1.23526, 1.25144, 1.27936, 1.29018},
1091 {1.22403, 1.22598, 1.23000, 1.24092, 1.26173, 1.28817, 1.29991,
1092 1.29698, 1.31238, 1.33793, 1.35595},
1093 {1.28556, 1.28898, 1.29300, 1.30356, 1.32617, 1.34912, 1.35925,
1094 1.35835, 1.37312, 1.40111, 1.41497},
1095 {1.34787, 1.34877, 1.35468, 1.36449, 1.38654, 1.41077, 1.41975,
1096 1.42136, 1.43843, 1.45897, 1.48025},
1097 {1.41045, 1.41171, 1.41555, 1.42656, 1.44698, 1.47026, 1.48324,
1098 1.48479, 1.50180, 1.52354, 1.53392},
1099 {1.47090, 1.47354, 1.47647, 1.48905, 1.51211, 1.53038, 1.54349,
1100 1.54803, 1.56136, 1.58662, 1.60480},
1101 {1.53357, 1.53429, 1.54017, 1.55116, 1.57247, 1.59498, 1.60576,
1102 1.60746, 1.62389, 1.64239, 1.66245},
1103 {1.59522, 1.59636, 1.60247, 1.61385, 1.63641, 1.65659, 1.66619,
1104 1.67044, 1.68213, 1.70379, 1.72372},
1105 {1.65867, 1.65711, 1.66320, 1.67434, 1.69603, 1.71788, 1.72927,
1106 1.73214, 1.74713, 1.76485, 1.77775},
1107 {1.71825, 1.72074, 1.72497, 1.73712, 1.75690, 1.77755, 1.78711,
1108 1.79849, 1.80587, 1.82576, 1.84050},
1109 {1.78194, 1.78320, 1.78875, 1.80047, 1.81716, 1.84044, 1.85328,
1110 1.85511, 1.86911, 1.88919, 1.89926},
1111 {1.84335, 1.84431, 1.84938, 1.86063, 1.88022, 1.90234, 1.91177,
1112 1.92173, 1.93202, 1.95097, 1.97105},
1113 {1.90491, 1.90665, 1.91303, 1.92575, 1.94432, 1.96400, 1.97574,
1114 1.98378, 1.99368, 2.01964, 2.02605}};
a328fff9 1115
1116 if (fTimeStruct) delete [] fTimeStruct;
1117 fTimeStruct = new Float_t[ktimebin*kZbin];
1118
1119 for (Int_t ctrt = 0; ctrt<ktimebin; ctrt++)
1120 for (Int_t ctrz = 0; ctrz<kZbin; ctrz++) {
682619b9 1121 fTimeStruct[ctrt+ctrz*ktimebin] = time[ctrt][ctrz];
a328fff9 1122 }
1123
1124}
1125
17b26de4 1126//_____________________________________________________________________________
1127void AliTRDparameter::SamplePRF()
1128{
1129 //
1130 // Samples the pad response function
1131 //
1132
1133 const Int_t kNplan = AliTRDgeometry::kNplan;
1134 const Int_t kPRFbin = 61;
1135
a328fff9 1136 Float_t prf[kNplan][kPRFbin] = { {0.0267681, 0.031056, 0.036111, 0.0419945, 0.0489578,
1137 0.0571508, 0.0666984, 0.078064, 0.0912508, 0.106579,
1138 0.124429, 0.144803, 0.168187, 0.194645, 0.224143,
1139 0.25717, 0.293146, 0.331943, 0.373128, 0.415798,
1140 0.459149, 0.502028, 0.54349, 0.582109, 0.617335,
1141 0.648306, 0.674189, 0.695082, 0.710222, 0.719711,
1142 0.723751, 0.719711, 0.710222, 0.695082, 0.674189,
1143 0.648306, 0.617335, 0.582109, 0.54349, 0.502028,
1144 0.459149, 0.415798, 0.373128, 0.331943, 0.293146,
1145 0.25717, 0.224143, 0.194645, 0.168187, 0.144803,
1146 0.124429, 0.106579, 0.0912508, 0.078064, 0.0666984,
1147 0.0571508, 0.0489578, 0.0419945, 0.036111, 0.031056,
1148 0.0267681},
1149 {0.0240831, 0.0281427, 0.0328987, 0.0384801, 0.0451249,
1150 0.0530119, 0.0623139, 0.0733268, 0.0864095, 0.101704,
1151 0.119473, 0.140308, 0.164191, 0.191333, 0.222141,
1152 0.256551, 0.29433, 0.335294, 0.37892, 0.424206,
1153 0.470202, 0.515621, 0.559255, 0.600068, 0.636821,
1154 0.668836, 0.695767, 0.717076, 0.73233, 0.741818,
1155 0.745491, 0.741818, 0.73233, 0.717076, 0.695767,
1156 0.668836, 0.636821, 0.600068, 0.559255, 0.515621,
1157 0.470202, 0.424206, 0.37892, 0.335294, 0.29433,
1158 0.256551, 0.222141, 0.191333, 0.164191, 0.140308,
1159 0.119473, 0.101704, 0.0864095, 0.0733268, 0.0623139,
1160 0.0530119, 0.0451249, 0.0384801, 0.0328987, 0.0281427,
1161 0.0240831},
1162 {0.0206855, 0.0243011, 0.0285603, 0.0335902, 0.0396015,
1163 0.0467843, 0.0553424, 0.0655316, 0.0776688, 0.0921782,
1164 0.109269, 0.129259, 0.152459, 0.179369, 0.210091,
1165 0.244681, 0.283099, 0.325176, 0.370396, 0.417732,
1166 0.466086, 0.514192, 0.560518, 0.603805, 0.643028,
1167 0.67738, 0.706095, 0.728728, 0.745307, 0.755731,
1168 0.759954, 0.755731, 0.745307, 0.728728, 0.706095,
1169 0.67738, 0.643028, 0.603805, 0.560518, 0.514192,
1170 0.466086, 0.417732, 0.370396, 0.325176, 0.283099,
1171 0.244681, 0.210091, 0.179369, 0.152459, 0.129259,
1172 0.109269, 0.0921782, 0.0776688, 0.0655316, 0.0553424,
1173 0.0467843, 0.0396015, 0.0335902, 0.0285603, 0.0243011,
1174 0.0206855},
1175 {0.0186168, 0.0219999, 0.0260102, 0.0307769, 0.0364947,
1176 0.0433655, 0.0516213, 0.0615466, 0.0734611, 0.0877121,
1177 0.104666, 0.124855, 0.14853, 0.176033, 0.207639,
1178 0.243511, 0.283633, 0.327786, 0.37537, 0.425281,
1179 0.476227, 0.526727, 0.575268, 0.620462, 0.66101,
1180 0.69611, 0.725313, 0.748317, 0.764969, 0.775206,
1181 0.779006, 0.775206, 0.764969, 0.748317, 0.725313,
1182 0.69611, 0.66101, 0.620462, 0.575268, 0.526727,
1183 0.476227, 0.425281, 0.37537, 0.327786, 0.283633,
1184 0.243511, 0.207639, 0.176033, 0.14853, 0.124855,
1185 0.104666, 0.0877121, 0.0734611, 0.0615466, 0.0516213,
1186 0.0433655, 0.0364947, 0.0307769, 0.0260102, 0.0219999,
1187 0.0186168, },
1188 {0.0159737, 0.0189921, 0.0225916, 0.0268927, 0.0320634,
1189 0.0382995, 0.0458393, 0.0549765, 0.0660512, 0.0794439,
1190 0.095565, 0.114844, 0.137713, 0.164586, 0.195824,
1191 0.231681, 0.272223, 0.31727, 0.366248, 0.418078,
1192 0.471358, 0.524425, 0.575561, 0.623193, 0.666055,
1193 0.703243, 0.734192, 0.7586, 0.776331, 0.787347,
1194 0.791646, 0.787347, 0.776331, 0.7586, 0.734192,
1195 0.703243, 0.666055, 0.623193, 0.575561, 0.524425,
1196 0.471358, 0.418078, 0.366248, 0.31727, 0.272223,
1197 0.231681, 0.195824, 0.164586, 0.137713, 0.114844,
1198 0.095565, 0.0794439, 0.0660512, 0.0549765, 0.0458393,
1199 0.0382995, 0.0320634, 0.0268927, 0.0225916, 0.0189921,
1200 0.0159737},
1201 {0.0143532, 0.0171745, 0.0205622, 0.024635, 0.0295461,
1202 0.0354915, 0.0427198, 0.0515368, 0.0623058, 0.0754416,
1203 0.0913994, 0.110662, 0.133721, 0.161057, 0.193093,
1204 0.230138, 0.27229, 0.319327, 0.370597, 0.424961,
1205 0.480832, 0.536333, 0.589555, 0.638805, 0.682781,
1206 0.720621, 0.751845, 0.776243, 0.793764, 0.804426,
1207 0.808259, 0.804426, 0.793764, 0.776243, 0.751845,
1208 0.720621, 0.682781, 0.638805, 0.589555, 0.536333,
1209 0.480832, 0.424961, 0.370597, 0.319327, 0.27229,
1210 0.230138, 0.193093, 0.161057, 0.133721, 0.110662,
1211 0.0913994, 0.0754416, 0.0623058, 0.0515368, 0.0427198,
1212 0.0354915, 0.0295461, 0.024635, 0.0205622, 0.0171745,
1213 0.0143532} };
17b26de4 1214
1215 // More sampling precision with linear interpolation
1216 fPRFlo = -1.5;
1217 fPRFhi = 1.5;
1218 Float_t pad[kPRFbin];
1219 Int_t sPRFbin = kPRFbin;
1220 Float_t sPRFwid = (fPRFhi - fPRFlo) / ((Float_t) sPRFbin);
1221 for (Int_t iPad = 0; iPad < sPRFbin; iPad++) {
1222 pad[iPad] = ((Float_t) iPad + 0.5) * sPRFwid + fPRFlo;
1223 }
1224 fPRFbin = 500;
1225 fPRFwid = (fPRFhi - fPRFlo) / ((Float_t) fPRFbin);
1226 fPRFpad = ((Int_t) (1.0 / fPRFwid));
1227
1228 if (fPRFsmp) delete [] fPRFsmp;
1229 fPRFsmp = new Float_t[kNplan*fPRFbin];
1230
1231 Int_t ipos1;
1232 Int_t ipos2;
1233 Float_t diff;
1234
1235 for (Int_t iPla = 0; iPla < kNplan; iPla++) {
1236
1237 for (Int_t iBin = 0; iBin < fPRFbin; iBin++) {
1238
1239 Float_t bin = (((Float_t) iBin) + 0.5) * fPRFwid + fPRFlo;
1240 ipos1 = ipos2 = 0;
1241 diff = 0;
1242 do {
1243 diff = bin - pad[ipos2++];
8e64dd77 1244 } while ((diff > 0) && (ipos2 < kPRFbin));
1245 if (ipos2 == kPRFbin) {
1246 fPRFsmp[iPla*fPRFbin+iBin] = prf[iPla][ipos2-1];
1247 }
1248 else if (ipos2 == 1) {
1249 fPRFsmp[iPla*fPRFbin+iBin] = prf[iPla][ipos2-1];
1250 }
1251 else {
1252 ipos2--;
1253 if (ipos2 >= kPRFbin) ipos2 = kPRFbin - 1;
1254 ipos1 = ipos2 - 1;
1255 fPRFsmp[iPla*fPRFbin+iBin] = prf[iPla][ipos2]
1256 + diff * (prf[iPla][ipos2] - prf[iPla][ipos1])
1257 / sPRFwid;
1258 }
17b26de4 1259
1260 }
1261 }
1262
1263}
1264
1265//_____________________________________________________________________________
1266void AliTRDparameter::FillLUT()
1267{
1268 //
1269 // Create the LUT
1270 //
1271
1272 const Int_t kNplan = AliTRDgeometry::kNplan;
1273 const Int_t kNlut = 128;
1274
1275 fLUTbin = kNplan * kNlut;
1276
1277 // The lookup table from Bogdan
1278 Float_t lut[kNplan][kNlut] = {
1279 {
1280 0.0070, 0.0150, 0.0224, 0.0298, 0.0374, 0.0454, 0.0533, 0.0611,
1281 0.0684, 0.0755, 0.0827, 0.0900, 0.0975, 0.1049, 0.1120, 0.1187,
1282 0.1253, 0.1318, 0.1385, 0.1453, 0.1519, 0.1584, 0.1646, 0.1704,
1283 0.1762, 0.1821, 0.1879, 0.1938, 0.1996, 0.2053, 0.2108, 0.2160,
1284 0.2210, 0.2260, 0.2310, 0.2361, 0.2411, 0.2461, 0.2509, 0.2557,
1285 0.2602, 0.2646, 0.2689, 0.2732, 0.2774, 0.2816, 0.2859, 0.2901,
1286 0.2942, 0.2983, 0.3022, 0.3061, 0.3099, 0.3136, 0.3172, 0.3207,
1287 0.3242, 0.3278, 0.3312, 0.3347, 0.3382, 0.3416, 0.3450, 0.3483,
1288 0.3515, 0.3547, 0.3579, 0.3609, 0.3639, 0.3669, 0.3698, 0.3727,
1289 0.3756, 0.3785, 0.3813, 0.3842, 0.3870, 0.3898, 0.3926, 0.3952,
1290 0.3979, 0.4005, 0.4032, 0.4057, 0.4082, 0.4108, 0.4132, 0.4157,
1291 0.4181, 0.4205, 0.4228, 0.4252, 0.4275, 0.4299, 0.4322, 0.4345,
1292 0.4367, 0.4390, 0.4412, 0.4434, 0.4456, 0.4478, 0.4499, 0.4520,
1293 0.4541, 0.4562, 0.4583, 0.4603, 0.4623, 0.4643, 0.4663, 0.4683,
1294 0.4702, 0.4722, 0.4741, 0.4758, 0.4774, 0.4790, 0.4805, 0.4824,
1295 0.4844, 0.4863, 0.4883, 0.4902, 0.4921, 0.4940, 0.4959, 0.4978
1296 },
1297 {
1298 0.0072, 0.0156, 0.0235, 0.0313, 0.0394, 0.0478, 0.0561, 0.0642,
1299 0.0718, 0.0792, 0.0868, 0.0947, 0.1025, 0.1101, 0.1172, 0.1241,
1300 0.1309, 0.1378, 0.1449, 0.1518, 0.1586, 0.1650, 0.1710, 0.1770,
1301 0.1830, 0.1891, 0.1952, 0.2011, 0.2070, 0.2125, 0.2177, 0.2229,
1302 0.2280, 0.2332, 0.2383, 0.2435, 0.2484, 0.2533, 0.2581, 0.2627,
1303 0.2670, 0.2714, 0.2757, 0.2799, 0.2842, 0.2884, 0.2927, 0.2968,
1304 0.3008, 0.3048, 0.3086, 0.3123, 0.3159, 0.3195, 0.3231, 0.3266,
1305 0.3301, 0.3335, 0.3370, 0.3404, 0.3438, 0.3471, 0.3504, 0.3536,
1306 0.3567, 0.3598, 0.3628, 0.3657, 0.3686, 0.3715, 0.3744, 0.3772,
1307 0.3800, 0.3828, 0.3856, 0.3884, 0.3911, 0.3938, 0.3965, 0.3991,
1308 0.4016, 0.4042, 0.4067, 0.4092, 0.4116, 0.4140, 0.4164, 0.4187,
1309 0.4211, 0.4234, 0.4257, 0.4280, 0.4302, 0.4325, 0.4347, 0.4369,
1310 0.4391, 0.4413, 0.4434, 0.4456, 0.4477, 0.4497, 0.4518, 0.4538,
1311 0.4558, 0.4578, 0.4598, 0.4618, 0.4637, 0.4656, 0.4675, 0.4694,
1312 0.4713, 0.4732, 0.4750, 0.4766, 0.4781, 0.4797, 0.4813, 0.4832,
1313 0.4851, 0.4870, 0.4888, 0.4906, 0.4925, 0.4942, 0.4960, 0.4978
1314 },
1315 {
1316 0.0075, 0.0163, 0.0246, 0.0328, 0.0415, 0.0504, 0.0592, 0.0674,
1317 0.0753, 0.0832, 0.0914, 0.0996, 0.1077, 0.1154, 0.1225, 0.1296,
1318 0.1369, 0.1442, 0.1515, 0.1585, 0.1652, 0.1714, 0.1776, 0.1839,
1319 0.1902, 0.1965, 0.2025, 0.2085, 0.2141, 0.2194, 0.2247, 0.2299,
1320 0.2352, 0.2405, 0.2457, 0.2507, 0.2557, 0.2604, 0.2649, 0.2693,
1321 0.2737, 0.2780, 0.2823, 0.2867, 0.2909, 0.2951, 0.2992, 0.3033,
1322 0.3072, 0.3110, 0.3146, 0.3182, 0.3218, 0.3253, 0.3288, 0.3323,
1323 0.3357, 0.3392, 0.3426, 0.3459, 0.3492, 0.3524, 0.3555, 0.3586,
1324 0.3616, 0.3645, 0.3674, 0.3703, 0.3731, 0.3759, 0.3787, 0.3815,
1325 0.3843, 0.3870, 0.3897, 0.3925, 0.3950, 0.3976, 0.4002, 0.4027,
1326 0.4052, 0.4076, 0.4101, 0.4124, 0.4148, 0.4171, 0.4194, 0.4217,
1327 0.4239, 0.4262, 0.4284, 0.4306, 0.4328, 0.4350, 0.4371, 0.4393,
1328 0.4414, 0.4435, 0.4455, 0.4476, 0.4496, 0.4516, 0.4536, 0.4555,
1329 0.4575, 0.4594, 0.4613, 0.4632, 0.4650, 0.4669, 0.4687, 0.4705,
1330 0.4723, 0.4741, 0.4758, 0.4773, 0.4789, 0.4804, 0.4821, 0.4839,
1331 0.4857, 0.4875, 0.4893, 0.4910, 0.4928, 0.4945, 0.4961, 0.4978
1332 },
1333 {
1334 0.0078, 0.0171, 0.0258, 0.0345, 0.0438, 0.0532, 0.0624, 0.0708,
1335 0.0791, 0.0875, 0.0962, 0.1048, 0.1130, 0.1206, 0.1281, 0.1356,
1336 0.1432, 0.1508, 0.1582, 0.1651, 0.1716, 0.1780, 0.1845, 0.1910,
1337 0.1975, 0.2038, 0.2099, 0.2155, 0.2210, 0.2263, 0.2317, 0.2371,
1338 0.2425, 0.2477, 0.2528, 0.2578, 0.2626, 0.2671, 0.2715, 0.2759,
1339 0.2803, 0.2846, 0.2890, 0.2933, 0.2975, 0.3016, 0.3056, 0.3095,
1340 0.3132, 0.3168, 0.3204, 0.3239, 0.3274, 0.3309, 0.3344, 0.3378,
1341 0.3412, 0.3446, 0.3479, 0.3511, 0.3543, 0.3574, 0.3603, 0.3633,
1342 0.3662, 0.3690, 0.3718, 0.3747, 0.3774, 0.3802, 0.3829, 0.3857,
1343 0.3883, 0.3910, 0.3936, 0.3962, 0.3987, 0.4012, 0.4037, 0.4061,
1344 0.4085, 0.4109, 0.4132, 0.4155, 0.4177, 0.4200, 0.4222, 0.4244,
1345 0.4266, 0.4288, 0.4309, 0.4331, 0.4352, 0.4373, 0.4394, 0.4414,
1346 0.4435, 0.4455, 0.4475, 0.4494, 0.4514, 0.4533, 0.4552, 0.4571,
1347 0.4590, 0.4608, 0.4626, 0.4645, 0.4662, 0.4680, 0.4698, 0.4715,
1348 0.4733, 0.4750, 0.4766, 0.4781, 0.4796, 0.4812, 0.4829, 0.4846,
1349 0.4863, 0.4880, 0.4897, 0.4914, 0.4930, 0.4946, 0.4963, 0.4979
1350 },
1351 {
1352 0.0081, 0.0178, 0.0270, 0.0364, 0.0463, 0.0562, 0.0656, 0.0744,
1353 0.0831, 0.0921, 0.1013, 0.1102, 0.1183, 0.1261, 0.1339, 0.1419,
1354 0.1499, 0.1576, 0.1648, 0.1715, 0.1782, 0.1849, 0.1917, 0.1984,
1355 0.2048, 0.2110, 0.2167, 0.2223, 0.2278, 0.2333, 0.2389, 0.2444,
1356 0.2497, 0.2548, 0.2598, 0.2645, 0.2691, 0.2735, 0.2780, 0.2824,
1357 0.2868, 0.2912, 0.2955, 0.2997, 0.3038, 0.3078, 0.3116, 0.3152,
1358 0.3188, 0.3224, 0.3259, 0.3294, 0.3329, 0.3364, 0.3398, 0.3432,
1359 0.3465, 0.3497, 0.3529, 0.3561, 0.3591, 0.3620, 0.3649, 0.3677,
1360 0.3705, 0.3733, 0.3761, 0.3788, 0.3816, 0.3843, 0.3869, 0.3896,
1361 0.3922, 0.3948, 0.3973, 0.3998, 0.4022, 0.4047, 0.4070, 0.4094,
1362 0.4117, 0.4139, 0.4162, 0.4184, 0.4206, 0.4227, 0.4249, 0.4270,
1363 0.4291, 0.4313, 0.4334, 0.4354, 0.4375, 0.4395, 0.4415, 0.4435,
1364 0.4455, 0.4474, 0.4493, 0.4512, 0.4531, 0.4550, 0.4568, 0.4586,
1365 0.4604, 0.4622, 0.4639, 0.4657, 0.4674, 0.4691, 0.4708, 0.4725,
1366 0.4742, 0.4758, 0.4773, 0.4788, 0.4803, 0.4819, 0.4836, 0.4852,
1367 0.4869, 0.4885, 0.4901, 0.4917, 0.4933, 0.4948, 0.4964, 0.4979
1368 },
1369 {
1370 0.0085, 0.0189, 0.0288, 0.0389, 0.0497, 0.0603, 0.0699, 0.0792,
1371 0.0887, 0.0985, 0.1082, 0.1170, 0.1253, 0.1336, 0.1421, 0.1505,
1372 0.1587, 0.1662, 0.1733, 0.1803, 0.1874, 0.1945, 0.2014, 0.2081,
1373 0.2143, 0.2201, 0.2259, 0.2316, 0.2374, 0.2431, 0.2487, 0.2541,
1374 0.2593, 0.2642, 0.2689, 0.2735, 0.2781, 0.2826, 0.2872, 0.2917,
1375 0.2961, 0.3003, 0.3045, 0.3086, 0.3125, 0.3162, 0.3198, 0.3235,
1376 0.3270, 0.3306, 0.3342, 0.3377, 0.3411, 0.3446, 0.3479, 0.3511,
1377 0.3543, 0.3575, 0.3605, 0.3634, 0.3663, 0.3691, 0.3720, 0.3748,
1378 0.3775, 0.3803, 0.3830, 0.3857, 0.3884, 0.3911, 0.3937, 0.3962,
1379 0.3987, 0.4012, 0.4036, 0.4060, 0.4084, 0.4107, 0.4129, 0.4152,
1380 0.4174, 0.4196, 0.4218, 0.4239, 0.4261, 0.4282, 0.4303, 0.4324,
1381 0.4344, 0.4365, 0.4385, 0.4405, 0.4425, 0.4445, 0.4464, 0.4483,
1382 0.4502, 0.4521, 0.4539, 0.4558, 0.4576, 0.4593, 0.4611, 0.4629,
1383 0.4646, 0.4663, 0.4680, 0.4697, 0.4714, 0.4730, 0.4747, 0.4759,
1384 0.4769, 0.4780, 0.4790, 0.4800, 0.4811, 0.4827, 0.4843, 0.4859,
1385 0.4874, 0.4889, 0.4905, 0.4920, 0.4935, 0.4950, 0.4965, 0.4979
1386 }
1387 };
1388
1389 if (fLUT) delete [] fLUT;
1390 fLUT = new Float_t[fLUTbin];
1391
1392 for (Int_t iplan = 0; iplan < kNplan; iplan++) {
1393 for (Int_t ilut = 0; ilut < kNlut; ilut++) {
cfed70d4 1394 fLUT[iplan*kNlut+ilut] = lut[iplan][ilut];
17b26de4 1395 }
1396 }
1397
1398}
1399
1400//_____________________________________________________________________________
1401void AliTRDparameter::SetTiltingAngle(Float_t v)
1402{
1403 //
1404 // Set the tilting angle for the readout pads
1405 //
1406
1407 fTiltingAngle = TMath::Tan(TMath::Pi()/180.0 * v);
1408
1409}
1410
1411//_____________________________________________________________________________
1412Float_t AliTRDparameter::GetTiltingAngle() const
1413{
1414 //
1415 // Get the tilting angle for the readout pads
1416 //
1417
ab35e265 1418 return 180.0 / TMath::Pi() * TMath::ATan(fTiltingAngle);
17b26de4 1419
1420}
1421
1422//_____________________________________________________________________________
1423Float_t AliTRDparameter::GetDiffusionL(Float_t vd, Float_t b)
1424{
1425 //
1426 // Returns the longitudinal diffusion coefficient for a given drift
1427 // velocity <vd> and a B-field <b> for Xe/CO2 (15%).
1428 // The values are according to a GARFIELD simulation.
1429 //
1430
1431 const Int_t kNb = 5;
1432 Float_t p0[kNb] = { 0.007440, 0.007493, 0.007513, 0.007672, 0.007831 };
1433 Float_t p1[kNb] = { 0.019252, 0.018912, 0.018636, 0.018012, 0.017343 };
1434 Float_t p2[kNb] = { -0.005042, -0.004926, -0.004867, -0.004650, -0.004424 };
1435 Float_t p3[kNb] = { 0.000195, 0.000189, 0.000195, 0.000182, 0.000169 };
1436
1437 Int_t ib = ((Int_t) (10 * (b - 0.15)));
1438 ib = TMath::Max( 0,ib);
1439 ib = TMath::Min(kNb,ib);
1440
1441 Float_t diff = p0[ib]
1442 + p1[ib] * vd
1443 + p2[ib] * vd*vd
1444 + p3[ib] * vd*vd*vd;
1445
1446 return diff;
1447
1448}
1449
1450//_____________________________________________________________________________
1451Float_t AliTRDparameter::GetDiffusionT(Float_t vd, Float_t b)
1452{
1453 //
1454 // Returns the transverse diffusion coefficient for a given drift
1455 // velocity <vd> and a B-field <b> for Xe/CO2 (15%).
1456 // The values are according to a GARFIELD simulation.
1457 //
1458
1459 const Int_t kNb = 5;
1460 Float_t p0[kNb] = { 0.009550, 0.009599, 0.009674, 0.009757, 0.009850 };
1461 Float_t p1[kNb] = { 0.006667, 0.006539, 0.006359, 0.006153, 0.005925 };
1462 Float_t p2[kNb] = { -0.000853, -0.000798, -0.000721, -0.000635, -0.000541 };
1463 Float_t p3[kNb] = { 0.000131, 0.000122, 0.000111, 0.000098, 0.000085 };
1464
1465 Int_t ib = ((Int_t) (10 * (b - 0.15)));
1466 ib = TMath::Max( 0,ib);
1467 ib = TMath::Min(kNb,ib);
1468
1469 Float_t diff = p0[ib]
1470 + p1[ib] * vd
1471 + p2[ib] * vd*vd
1472 + p3[ib] * vd*vd*vd;
1473
1474 return diff;
1475
1476}
1477
1478//_____________________________________________________________________________
1479Float_t AliTRDparameter::GetOmegaTau(Float_t vd, Float_t b)
1480{
1481 //
1482 // Returns omega*tau (tan(Lorentz-angle)) for a given drift velocity <vd>
1483 // and a B-field <b> for Xe/CO2 (15%).
1484 // The values are according to a GARFIELD simulation.
1485 //
1486
1487 const Int_t kNb = 5;
1488 Float_t p0[kNb] = { 0.004810, 0.007412, 0.010252, 0.013409, 0.016888 };
1489 Float_t p1[kNb] = { 0.054875, 0.081534, 0.107333, 0.131983, 0.155455 };
1490 Float_t p2[kNb] = { -0.008682, -0.012896, -0.016987, -0.020880, -0.024623 };
1491 Float_t p3[kNb] = { 0.000155, 0.000238, 0.000330, 0.000428, 0.000541 };
1492
1493 Int_t ib = ((Int_t) (10 * (b - 0.15)));
1494 ib = TMath::Max( 0,ib);
1495 ib = TMath::Min(kNb,ib);
1496
1497 Float_t alphaL = p0[ib]
1498 + p1[ib] * vd
1499 + p2[ib] * vd*vd
1500 + p3[ib] * vd*vd*vd;
1501
1502 return TMath::Tan(alphaL);
1503
1504}
1505
1506//_____________________________________________________________________________
0a29d0f1 1507Double_t AliTRDparameter::LUTposition(Int_t iplane, Double_t ampL
1508 , Double_t ampC
1509 , Double_t ampR) const
17b26de4 1510{
1511 //
1512 // Calculates the cluster position using the lookup table.
1513 // Method provided by Bogdan Vulpescu.
1514 //
1515
1516 const Int_t kNplan = AliTRDgeometry::kNplan;
cfed70d4 1517 const Int_t kNlut = 128;
17b26de4 1518
1519 Double_t pos;
1520 Double_t x = 0.0;
1521 Double_t xmin;
1522 Double_t xmax;
1523 Double_t xwid;
1524
1525 Int_t side = 0;
1526 Int_t ix;
1527
1528 Double_t xMin[kNplan] = { 0.006492, 0.006377, 0.006258, 0.006144, 0.006030, 0.005980 };
1529 Double_t xMax[kNplan] = { 0.960351, 0.965870, 0.970445, 0.974352, 0.977667, 0.996101 };
1530
1531 if (ampL > ampR) {
1532 x = (ampL - ampR) / ampC;
1533 side = -1;
1534 }
1535 else if (ampL < ampR) {
1536 x = (ampR - ampL) / ampC;
1537 side = +1;
1538 }
1539
1540 if (ampL != ampR) {
1541
1542 xmin = xMin[iplane] + 0.000005;
1543 xmax = xMax[iplane] - 0.000005;
1544 xwid = (xmax - xmin) / 127.0;
1545
1546 if (x < xmin) {
1547 pos = 0.0000;
1548 }
1549 else if (x > xmax) {
1550 pos = side * 0.5000;
1551 }
1552 else {
1553 ix = (Int_t) ((x - xmin) / xwid);
cfed70d4 1554 pos = side * fLUT[iplane*kNlut+ix];
17b26de4 1555 }
1556
1557 }
1558 else {
1559
1560 pos = 0.0;
1561
1562 }
1563
1564 return pos;
1565
1566}