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