]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDRecParam.cxx
Coding conventions
[u/mrichter/AliRoot.git] / TRD / AliTRDRecParam.cxx
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 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 // Class containing constant reconstruction parameters                       //
21 //                                                                           //
22 // Request an instance with AliTRDRecParam::Instance()                 //
23 // Then request the needed values                                            //
24 //                                                                           //
25 ///////////////////////////////////////////////////////////////////////////////
26
27 #include "AliTRDRecParam.h"
28
29 ClassImp(AliTRDRecParam)
30
31 AliTRDRecParam* AliTRDRecParam::fgInstance = 0;
32 Bool_t AliTRDRecParam::fgTerminated = kFALSE;
33
34 //_ singleton implementation __________________________________________________
35 AliTRDRecParam* AliTRDRecParam::Instance()
36 {
37   //
38   // Singleton implementation
39   // Returns an instance of this class, it is created if neccessary
40   // 
41   
42   if (fgTerminated != kFALSE)
43     return 0;
44
45   if (fgInstance == 0)
46     fgInstance = new AliTRDRecParam();
47   
48   return fgInstance;
49 }
50
51 void AliTRDRecParam::Terminate()
52 {
53   //
54   // Singleton implementation
55   // Deletes the instance of this class and sets the terminated flag, instances cannot be requested anymore
56   // This function can be called several times.
57   //
58   
59   fgTerminated = kTRUE;
60   
61   if (fgInstance != 0)
62   {
63     delete fgInstance;
64     fgInstance = 0;
65   }
66 }
67
68 //_____________________________________________________________________________
69 AliTRDRecParam::AliTRDRecParam()
70 {
71   //
72   // constructor
73   //
74   
75   fClusMaxThresh      = 0;
76   fClusSigThresh      = 0;
77   
78   fLUT                = 0;
79   fLUTOn              = kFALSE;  
80   fLUTbin = 0;
81   
82   fTCOn               = kFALSE;
83   fTCnexp             = 0;
84   
85   Init();
86 }
87
88 //_____________________________________________________________________________
89 AliTRDRecParam::~AliTRDRecParam() 
90 {
91   //
92   // destructor
93   //
94   
95   if (fLUT) {
96     delete [] fLUT;
97     fLUT    = 0;
98   }
99 }
100
101 //_____________________________________________________________________________
102 AliTRDRecParam::AliTRDRecParam(const AliTRDRecParam &p):TObject(p)
103 {
104   //
105   // copy constructor
106   //
107
108   ((AliTRDRecParam &) p).Copy(*this);
109 }
110
111
112 //_____________________________________________________________________________
113 AliTRDRecParam &AliTRDRecParam::operator=(const AliTRDRecParam &p)
114 {
115   //
116   // Assignment operator
117   //
118
119   if (this != &p) ((AliTRDRecParam &) p).Copy(*this);
120   return *this;
121 }
122
123 //_____________________________________________________________________________
124 void AliTRDRecParam::Copy(TObject &p) const
125 {
126   //
127   // Copy function
128   //
129   
130   AliTRDRecParam* target = dynamic_cast<AliTRDRecParam*> (&p);
131   if (!target)
132     return;
133   
134   target->fLUTOn              = fLUTOn;
135   target->fLUTbin             = fLUTbin;
136   if (target->fLUT)    delete [] target->fLUT;
137   target->fLUT  = new Float_t[fLUTbin];
138   for (Int_t iBin = 0; iBin < fLUTbin; iBin++) {
139     target->fLUT[iBin]  = fLUT[iBin];
140   }
141       
142   target->fClusMaxThresh      = fClusMaxThresh;
143   target->fClusSigThresh      = fClusSigThresh;
144   
145   target->fTCOn               = fTCOn;
146   target->fTCnexp             = fTCnexp;
147
148 }
149
150 //_____________________________________________________________________________
151 void AliTRDRecParam::Init() 
152 {
153   //
154   // constructor helper
155   //
156   
157   // The default parameter for the clustering
158   fClusMaxThresh = 3.5;
159   fClusSigThresh = 1.5;
160
161   // Use the LUT
162   fLUTOn         = kTRUE;
163
164   // Create the LUT
165   FillLUT();
166
167   // The tail cancelation
168   fTCOn           = kTRUE;
169
170   // The number of exponentials
171   fTCnexp         = 1;
172
173 }
174
175 //_____________________________________________________________________________
176 void AliTRDRecParam::FillLUT()
177 {
178   //
179   // Create the LUT
180   //
181
182   const Int_t kNlut  = 128;
183
184   fLUTbin = kNplan * kNlut;
185
186   // The lookup table from Bogdan
187   Float_t lut[kNplan][kNlut] = {  
188     {
189       0.0070, 0.0150, 0.0224, 0.0298, 0.0374, 0.0454, 0.0533, 0.0611, 
190       0.0684, 0.0755, 0.0827, 0.0900, 0.0975, 0.1049, 0.1120, 0.1187, 
191       0.1253, 0.1318, 0.1385, 0.1453, 0.1519, 0.1584, 0.1646, 0.1704, 
192       0.1762, 0.1821, 0.1879, 0.1938, 0.1996, 0.2053, 0.2108, 0.2160, 
193       0.2210, 0.2260, 0.2310, 0.2361, 0.2411, 0.2461, 0.2509, 0.2557, 
194       0.2602, 0.2646, 0.2689, 0.2732, 0.2774, 0.2816, 0.2859, 0.2901, 
195       0.2942, 0.2983, 0.3022, 0.3061, 0.3099, 0.3136, 0.3172, 0.3207, 
196       0.3242, 0.3278, 0.3312, 0.3347, 0.3382, 0.3416, 0.3450, 0.3483, 
197       0.3515, 0.3547, 0.3579, 0.3609, 0.3639, 0.3669, 0.3698, 0.3727, 
198       0.3756, 0.3785, 0.3813, 0.3842, 0.3870, 0.3898, 0.3926, 0.3952, 
199       0.3979, 0.4005, 0.4032, 0.4057, 0.4082, 0.4108, 0.4132, 0.4157, 
200       0.4181, 0.4205, 0.4228, 0.4252, 0.4275, 0.4299, 0.4322, 0.4345, 
201       0.4367, 0.4390, 0.4412, 0.4434, 0.4456, 0.4478, 0.4499, 0.4520, 
202       0.4541, 0.4562, 0.4583, 0.4603, 0.4623, 0.4643, 0.4663, 0.4683, 
203       0.4702, 0.4722, 0.4741, 0.4758, 0.4774, 0.4790, 0.4805, 0.4824, 
204       0.4844, 0.4863, 0.4883, 0.4902, 0.4921, 0.4940, 0.4959, 0.4978 
205     },
206     {
207       0.0072, 0.0156, 0.0235, 0.0313, 0.0394, 0.0478, 0.0561, 0.0642, 
208       0.0718, 0.0792, 0.0868, 0.0947, 0.1025, 0.1101, 0.1172, 0.1241, 
209       0.1309, 0.1378, 0.1449, 0.1518, 0.1586, 0.1650, 0.1710, 0.1770, 
210       0.1830, 0.1891, 0.1952, 0.2011, 0.2070, 0.2125, 0.2177, 0.2229, 
211       0.2280, 0.2332, 0.2383, 0.2435, 0.2484, 0.2533, 0.2581, 0.2627, 
212       0.2670, 0.2714, 0.2757, 0.2799, 0.2842, 0.2884, 0.2927, 0.2968, 
213       0.3008, 0.3048, 0.3086, 0.3123, 0.3159, 0.3195, 0.3231, 0.3266, 
214       0.3301, 0.3335, 0.3370, 0.3404, 0.3438, 0.3471, 0.3504, 0.3536, 
215       0.3567, 0.3598, 0.3628, 0.3657, 0.3686, 0.3715, 0.3744, 0.3772, 
216       0.3800, 0.3828, 0.3856, 0.3884, 0.3911, 0.3938, 0.3965, 0.3991, 
217       0.4016, 0.4042, 0.4067, 0.4092, 0.4116, 0.4140, 0.4164, 0.4187, 
218       0.4211, 0.4234, 0.4257, 0.4280, 0.4302, 0.4325, 0.4347, 0.4369, 
219       0.4391, 0.4413, 0.4434, 0.4456, 0.4477, 0.4497, 0.4518, 0.4538, 
220       0.4558, 0.4578, 0.4598, 0.4618, 0.4637, 0.4656, 0.4675, 0.4694, 
221       0.4713, 0.4732, 0.4750, 0.4766, 0.4781, 0.4797, 0.4813, 0.4832, 
222       0.4851, 0.4870, 0.4888, 0.4906, 0.4925, 0.4942, 0.4960, 0.4978
223     },
224     {
225       0.0075, 0.0163, 0.0246, 0.0328, 0.0415, 0.0504, 0.0592, 0.0674, 
226       0.0753, 0.0832, 0.0914, 0.0996, 0.1077, 0.1154, 0.1225, 0.1296, 
227       0.1369, 0.1442, 0.1515, 0.1585, 0.1652, 0.1714, 0.1776, 0.1839, 
228       0.1902, 0.1965, 0.2025, 0.2085, 0.2141, 0.2194, 0.2247, 0.2299, 
229       0.2352, 0.2405, 0.2457, 0.2507, 0.2557, 0.2604, 0.2649, 0.2693, 
230       0.2737, 0.2780, 0.2823, 0.2867, 0.2909, 0.2951, 0.2992, 0.3033, 
231       0.3072, 0.3110, 0.3146, 0.3182, 0.3218, 0.3253, 0.3288, 0.3323, 
232       0.3357, 0.3392, 0.3426, 0.3459, 0.3492, 0.3524, 0.3555, 0.3586, 
233       0.3616, 0.3645, 0.3674, 0.3703, 0.3731, 0.3759, 0.3787, 0.3815, 
234       0.3843, 0.3870, 0.3897, 0.3925, 0.3950, 0.3976, 0.4002, 0.4027, 
235       0.4052, 0.4076, 0.4101, 0.4124, 0.4148, 0.4171, 0.4194, 0.4217, 
236       0.4239, 0.4262, 0.4284, 0.4306, 0.4328, 0.4350, 0.4371, 0.4393, 
237       0.4414, 0.4435, 0.4455, 0.4476, 0.4496, 0.4516, 0.4536, 0.4555, 
238       0.4575, 0.4594, 0.4613, 0.4632, 0.4650, 0.4669, 0.4687, 0.4705, 
239       0.4723, 0.4741, 0.4758, 0.4773, 0.4789, 0.4804, 0.4821, 0.4839, 
240       0.4857, 0.4875, 0.4893, 0.4910, 0.4928, 0.4945, 0.4961, 0.4978
241     },
242     {
243       0.0078, 0.0171, 0.0258, 0.0345, 0.0438, 0.0532, 0.0624, 0.0708, 
244       0.0791, 0.0875, 0.0962, 0.1048, 0.1130, 0.1206, 0.1281, 0.1356, 
245       0.1432, 0.1508, 0.1582, 0.1651, 0.1716, 0.1780, 0.1845, 0.1910, 
246       0.1975, 0.2038, 0.2099, 0.2155, 0.2210, 0.2263, 0.2317, 0.2371, 
247       0.2425, 0.2477, 0.2528, 0.2578, 0.2626, 0.2671, 0.2715, 0.2759, 
248       0.2803, 0.2846, 0.2890, 0.2933, 0.2975, 0.3016, 0.3056, 0.3095, 
249       0.3132, 0.3168, 0.3204, 0.3239, 0.3274, 0.3309, 0.3344, 0.3378, 
250       0.3412, 0.3446, 0.3479, 0.3511, 0.3543, 0.3574, 0.3603, 0.3633, 
251       0.3662, 0.3690, 0.3718, 0.3747, 0.3774, 0.3802, 0.3829, 0.3857, 
252       0.3883, 0.3910, 0.3936, 0.3962, 0.3987, 0.4012, 0.4037, 0.4061, 
253       0.4085, 0.4109, 0.4132, 0.4155, 0.4177, 0.4200, 0.4222, 0.4244, 
254       0.4266, 0.4288, 0.4309, 0.4331, 0.4352, 0.4373, 0.4394, 0.4414, 
255       0.4435, 0.4455, 0.4475, 0.4494, 0.4514, 0.4533, 0.4552, 0.4571, 
256       0.4590, 0.4608, 0.4626, 0.4645, 0.4662, 0.4680, 0.4698, 0.4715, 
257       0.4733, 0.4750, 0.4766, 0.4781, 0.4796, 0.4812, 0.4829, 0.4846, 
258       0.4863, 0.4880, 0.4897, 0.4914, 0.4930, 0.4946, 0.4963, 0.4979
259     },
260     {
261       0.0081, 0.0178, 0.0270, 0.0364, 0.0463, 0.0562, 0.0656, 0.0744, 
262       0.0831, 0.0921, 0.1013, 0.1102, 0.1183, 0.1261, 0.1339, 0.1419, 
263       0.1499, 0.1576, 0.1648, 0.1715, 0.1782, 0.1849, 0.1917, 0.1984, 
264       0.2048, 0.2110, 0.2167, 0.2223, 0.2278, 0.2333, 0.2389, 0.2444, 
265       0.2497, 0.2548, 0.2598, 0.2645, 0.2691, 0.2735, 0.2780, 0.2824, 
266       0.2868, 0.2912, 0.2955, 0.2997, 0.3038, 0.3078, 0.3116, 0.3152, 
267       0.3188, 0.3224, 0.3259, 0.3294, 0.3329, 0.3364, 0.3398, 0.3432, 
268       0.3465, 0.3497, 0.3529, 0.3561, 0.3591, 0.3620, 0.3649, 0.3677, 
269       0.3705, 0.3733, 0.3761, 0.3788, 0.3816, 0.3843, 0.3869, 0.3896, 
270       0.3922, 0.3948, 0.3973, 0.3998, 0.4022, 0.4047, 0.4070, 0.4094, 
271       0.4117, 0.4139, 0.4162, 0.4184, 0.4206, 0.4227, 0.4249, 0.4270, 
272       0.4291, 0.4313, 0.4334, 0.4354, 0.4375, 0.4395, 0.4415, 0.4435, 
273       0.4455, 0.4474, 0.4493, 0.4512, 0.4531, 0.4550, 0.4568, 0.4586, 
274       0.4604, 0.4622, 0.4639, 0.4657, 0.4674, 0.4691, 0.4708, 0.4725, 
275       0.4742, 0.4758, 0.4773, 0.4788, 0.4803, 0.4819, 0.4836, 0.4852, 
276       0.4869, 0.4885, 0.4901, 0.4917, 0.4933, 0.4948, 0.4964, 0.4979
277     },
278     {
279       0.0085, 0.0189, 0.0288, 0.0389, 0.0497, 0.0603, 0.0699, 0.0792, 
280       0.0887, 0.0985, 0.1082, 0.1170, 0.1253, 0.1336, 0.1421, 0.1505, 
281       0.1587, 0.1662, 0.1733, 0.1803, 0.1874, 0.1945, 0.2014, 0.2081, 
282       0.2143, 0.2201, 0.2259, 0.2316, 0.2374, 0.2431, 0.2487, 0.2541, 
283       0.2593, 0.2642, 0.2689, 0.2735, 0.2781, 0.2826, 0.2872, 0.2917, 
284       0.2961, 0.3003, 0.3045, 0.3086, 0.3125, 0.3162, 0.3198, 0.3235, 
285       0.3270, 0.3306, 0.3342, 0.3377, 0.3411, 0.3446, 0.3479, 0.3511, 
286       0.3543, 0.3575, 0.3605, 0.3634, 0.3663, 0.3691, 0.3720, 0.3748, 
287       0.3775, 0.3803, 0.3830, 0.3857, 0.3884, 0.3911, 0.3937, 0.3962, 
288       0.3987, 0.4012, 0.4036, 0.4060, 0.4084, 0.4107, 0.4129, 0.4152, 
289       0.4174, 0.4196, 0.4218, 0.4239, 0.4261, 0.4282, 0.4303, 0.4324, 
290       0.4344, 0.4365, 0.4385, 0.4405, 0.4425, 0.4445, 0.4464, 0.4483, 
291       0.4502, 0.4521, 0.4539, 0.4558, 0.4576, 0.4593, 0.4611, 0.4629, 
292       0.4646, 0.4663, 0.4680, 0.4697, 0.4714, 0.4730, 0.4747, 0.4759, 
293       0.4769, 0.4780, 0.4790, 0.4800, 0.4811, 0.4827, 0.4843, 0.4859, 
294       0.4874, 0.4889, 0.4905, 0.4920, 0.4935, 0.4950, 0.4965, 0.4979
295     }
296   }; 
297
298   if (fLUT) delete [] fLUT;
299   fLUT = new Float_t[fLUTbin];
300
301   for (Int_t iplan = 0; iplan < kNplan; iplan++) {
302     for (Int_t ilut  = 0; ilut  < kNlut; ilut++) {
303       fLUT[iplan*kNlut+ilut] = lut[iplan][ilut];
304     }
305   }
306
307 }
308
309 //_____________________________________________________________________________
310 Double_t AliTRDRecParam::LUTposition(Int_t iplane, Double_t ampL, Double_t ampC, Double_t ampR) const
311 {
312   //
313   // Calculates the cluster position using the lookup table.
314   // Method provided by Bogdan Vulpescu.
315   //
316
317   const Int_t kNlut  = 128;
318
319   Double_t pos;
320   Double_t x = 0.0;
321   Double_t xmin;
322   Double_t xmax;
323   Double_t xwid;
324
325   Int_t    side = 0;
326   Int_t    ix;
327
328   Double_t xMin[kNplan] = { 0.006492, 0.006377, 0.006258, 0.006144, 0.006030, 0.005980 };
329   Double_t xMax[kNplan] = { 0.960351, 0.965870, 0.970445, 0.974352, 0.977667, 0.996101 };
330
331   if      (ampL > ampR) {
332     x    = (ampL - ampR) / ampC;
333     side = -1;
334   } 
335   else if (ampL < ampR) {
336     x    = (ampR - ampL) / ampC;
337     side = +1;
338   }
339
340   if (ampL != ampR) {
341
342     xmin = xMin[iplane] + 0.000005;
343     xmax = xMax[iplane] - 0.000005;
344     xwid = (xmax - xmin) / 127.0;
345
346     if      (x < xmin) {
347       pos = 0.0000;
348     } 
349     else if (x > xmax) {
350       pos = side * 0.5000;
351     } 
352     else {
353       ix  = (Int_t) ((x - xmin) / xwid);
354       pos = side * fLUT[iplane*kNlut+ix];
355     }
356        
357   } 
358   else {
359
360     pos = 0.0;
361
362   }
363
364   return pos;
365 }
366