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