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