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