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