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