Fix for coverity
[u/mrichter/AliRoot.git] / TOF / AliTOFcalibHisto.cxx
CommitLineData
2cdf778a 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
ce469aed 16// *
17// *
18// * AliTOFcalibHisto - class to handle TOF calibration histograms,
19// * map histograms and more
20// *
21// *
22// * autors: Roberto Preghenella (R+)
23// * concacts: preghenella@bo.infn.it
24// *
25// *
2cdf778a 26
27#include "AliTOFcalibHisto.h"
28#include "AliLog.h"
97a29b32 29#include "TH1D.h"
2cdf778a 30#include "TFile.h"
31#include "AliTOFRawStream.h"
32#include "AliTOFCableLengthMap.h"
33#include "AliESDtrack.h"
34
97a29b32 35#define SLEW_TOTMIN 10.
36#define SLEW_TOTMAX 16.
37
2cdf778a 38ClassImp(AliTOFcalibHisto)
39
40//__________________________________________________________________________
41
42TFile *AliTOFcalibHisto::fgCalibHistoFile = NULL;
43TFile *AliTOFcalibHisto::fgCalibParFile = NULL;
27e86428 44TFile *AliTOFcalibHisto::fgCalibStatFile = NULL;
2cdf778a 45
46//__________________________________________________________________________
47
48TString AliTOFcalibHisto::fgCalibHistoFileName = "$ALICE_ROOT/TOF/data/AliTOFcalibHisto.root";
49TString AliTOFcalibHisto::fgCalibParFileName = "$ALICE_ROOT/TOF/data/AliTOFcalibPar.root";
27e86428 50TString AliTOFcalibHisto::fgCalibStatFileName = "$ALICE_ROOT/TOF/data/AliTOFcalibStat.root";
2cdf778a 51
52//__________________________________________________________________________
53
54const TString AliTOFcalibHisto::fgkCalibConstName[kNcalibConsts] = {
55 "LHCperiod",
56 "AmphenolCableDelay",
57 "FlatCableDelay",
58 "InterfaceCardDelay"
59};
60
61//__________________________________________________________________________
62
63const TString AliTOFcalibHisto::fgkCalibMapName[kNcalibMaps] = {
0e095c11 64 /* main index */
65 "Index",
2cdf778a 66 /* EO indices */
67 "DDL",
68 "TRM",
69 "Chain",
70 "TDC",
71 "Channel",
72 /* DO indices */
73 "Sector",
74 "Plate",
75 "Strip",
76 "SectorStrip",
77 "PadZ",
78 "PadX",
79 "Pad",
80 "InterfaceCardIndex",
81 /* calib constants */
82 "DDLBCshift",
83 "FlatCableLength",
84 "InterfaceCardLength",
85 "AmphenolCableLength"
86};
87
88//__________________________________________________________________________
89
90const TString AliTOFcalibHisto::fgkCalibParName[kNcalibPars] = {
91 "hDDLDelay",
92 "hHPTDCDelay",
93 "hLeftFEAchDelay",
94 "hRightFEAchDelay",
95 "hFEADelay",
97a29b32 96 "hICDelay",
2cdf778a 97 "hTRMDelay",
97a29b32 98 "hStripDelay",
99 "hIndexDelay",
100 "hSlewing"
2cdf778a 101};
102
103//__________________________________________________________________________
104
27e86428 105const TString AliTOFcalibHisto::fgkCalibStatName[kNcalibStats] = {
106 "hStripStat"
107};
108
109//__________________________________________________________________________
110
2cdf778a 111/* LHC clock period [ns] */
97a29b32 112const Double_t AliTOFcalibHisto::fgkLHCperiod = (24.4e-3 * 1024); /* ns */
2cdf778a 113
114//__________________________________________________________________________
115
116/* Amphenol cable delay [ns/cm] */
97a29b32 117const Double_t AliTOFcalibHisto::fgkAmphenolCableDelay = 5.13e-2; /* from measurement */
2cdf778a 118
119//__________________________________________________________________________
120
121/* flat cable delay [ns/cm] */
97a29b32 122//const Double_t AliTOFcalibHisto::fgkFlatCableDelay = 5.3e-2; /* from Amphenol 132-2829 series data-sheet */
123const Double_t AliTOFcalibHisto::fgkFlatCableDelay = 5.124e-2; /* from LHC08d calibration */
2cdf778a 124
125//__________________________________________________________________________
126
127/* interface card delay [ns/cm] */
97a29b32 128//const Double_t AliTOFcalibHisto::fgkInterfaceCardDelay = 6.9e-2; /* from HyperLinx simulation */
129//const Double_t AliTOFcalibHisto::fgkInterfaceCardDelay = 5.7898e-2; /* from LHC08d calibration */
130const Double_t AliTOFcalibHisto::fgkInterfaceCardDelay = 6.31360207815420404e-02; /* from LHC09c calibration */
2cdf778a 131
132//__________________________________________________________________________
133
0e095c11 134/* number of readout channels (DO/EO) */
2cdf778a 135const Int_t AliTOFcalibHisto::fgkNchannels = 157248;
0e095c11 136const Int_t AliTOFcalibHisto::fgkNchannelsEO = 172800;
2cdf778a 137
138//__________________________________________________________________________
139
140/* DDL BC shifts due to TTC fibers [LHCperiod] */
141const Int_t AliTOFcalibHisto::fgkDDLBCshift[72] = {
142 2, 2, -1, -1,
143 2, 2, 0, 0,
144 2, 2, 0, 0,
145 2, 2, 0, 0,
146 2, 2, 0, 0,
147 2, 2, 0, 0,
148 2, 2, 0, 0,
149 2, 2, 0, 0,
150 2, 2, 0, 0,
151 2, 2, 0, 0,
152 2, 2, -1, -1,
153 2, 2, -1, -1,
154 2, 2, -2, -2,
155 2, 2, -2, -2,
156 2, 2, -2, -2,
157 2, 2, -1, -1,
158 2, 2, -1, -1,
3aaf7a5f 159 2, 2, -1, -1
2cdf778a 160};
161
162//__________________________________________________________________________
163
164/* strip flat-cable length (preliminary) [cm] */
97a29b32 165const Double_t AliTOFcalibHisto::fgkFlatCableLength[91] = {
2cdf778a 166 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 17.,
167 21., 21., 21., 21., 21., 17., 17., 21., 21., 17., 21., 21., 21., 17., 21., 21., 17., 21., 23.,
168 17., 19., 17., 19., 17., 19., 17., 19., 17., 19., 17., 19., 17., 19., 17.,
169 23., 21., 17., 21., 21., 17., 21., 21., 21., 17., 21., 21., 17., 17., 21., 21., 21., 21., 21.,
170 17., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18., 18.
171};
172
173//__________________________________________________________________________
174
175/* interface card lenght (preliminary) [cm] */
97a29b32 176const Double_t AliTOFcalibHisto::fgkInterfaceCardLength[48] = {
2cdf778a 177 13.97, 12.57, 14.52, 13.10, 15.44, 13.60, 10.58, 9.14,
178 11.21, 9.76, 12.11, 10.76, 8.67, 7.58, 9.32, 8.09,
179 10.24, 8.4, 5.51, 4.31, 6.54, 5.23, 7.48, 6.28,
180 10.43, 8.76, 11.05, 9.43, 11.72, 10.14, 7.2, 5.69,
181 7.71, 6.26, 8.36, 7.19, 4.85, 4.09, 5.57, 4.35,
182 6.59, 5.12, 2.49, 2.96, 2.70, 2.76, 2.91, 2.55
183};
184
185//__________________________________________________________________________
186
9155334b 187Bool_t AliTOFcalibHisto::fgCableCorrectionFlag[kNcorrections] = {
188 kFALSE, // kDDLBCcorr
189 kTRUE, // kAmphenolCableCorr
190 kTRUE, // kFlatCableCorr
191 kTRUE, // kInterfaceCardCorr
192 kFALSE, // kDDLdelayCorr
193 kFALSE, // kHPTDCdelayCorr
194 kFALSE, // kFEAchDelayCorr
195 kFALSE, // kFEAdelayCorr
196 kFALSE, // kTRMdelayCorr
97a29b32 197 kFALSE, // kICdelayCorr
198 kFALSE, // kStripDelayCorr
199 kFALSE, // kIndexDelayCorr
9155334b 200 kFALSE, // kTimeSlewingCorr
201};
202
203//__________________________________________________________________________
204
205Bool_t AliTOFcalibHisto::fgFullCorrectionFlag[kNcorrections] = {
206 kFALSE, // kDDLBCcorr
207 kTRUE, // kAmphenolCableCorr
208 kTRUE, // kFlatCableCorr
209 kTRUE, // kInterfaceCardCorr
210 kTRUE, // kDDLdelayCorr
211 kTRUE, // kHPTDCdelayCorr
212 kTRUE, // kFEAchDelayCorr
213 kTRUE, // kFEAdelayCorr
214 kTRUE, // kTRMdelayCorr
97a29b32 215 kFALSE, // kICdelayCorr
216 kTRUE, // kStripDelayCorr
217 kTRUE, // kIndexDelayCorr
218 kTRUE, // kTimeSlewingCorr
9155334b 219};
220
221//__________________________________________________________________________
222
27e86428 223const Int_t AliTOFcalibHisto::fgkStripStat[18][91] = {
224
225 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
226 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
227 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
228 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
229 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S00 */
230
231 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
232 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
233 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
234 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
235 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S01 */
236
237 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
238 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
239 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
240 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
241 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S02 */
242
243 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
244 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
b8006075 245 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
27e86428 246 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
247 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S03 */
248
249 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
250 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
251 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
252 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
253 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S04 */
254
255 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
256 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
257 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
258 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
259 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S05 */
260
261 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
262 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
263 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
264 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
265 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S06 */
266
267 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
268 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
269 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
270 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
271 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S07 */
272
273 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
274 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
275 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
276 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
277 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S08 */
278
279 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
280 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
281 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
282 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
283 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S09 */
284
285 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
286 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
287 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
288 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
289 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S10 */
290
291 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
292 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
293 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
294 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
295 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S11 */
296
297 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
298 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
b8006075 299 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
27e86428 300 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
301 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S12 */
302
303 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
b8006075 304 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
27e86428 305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
306 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
307 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S13 */
308
309 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
310 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
b8006075 312 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
27e86428 313 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S14 */
314
315 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
316 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
317 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
318 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
319 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S15 */
320
321 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
322 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
323 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
324 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
325 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S16 */
326
327 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
b8006075 328 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
27e86428 329 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
330 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
331 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* S17 */
332
333};
334
335//__________________________________________________________________________
336
2cdf778a 337AliTOFcalibHisto::AliTOFcalibHisto() :
338 TObject(),
339 fCalibConst(),
340 fCalibMap(),
27e86428 341 fCalibPar(),
342 fCalibStat()
2cdf778a 343{
344 /* default constructor */
345}
346
347//__________________________________________________________________________
348
349AliTOFcalibHisto::~AliTOFcalibHisto()
350{
351 /* default destructor */
352}
353
354//__________________________________________________________________________
355
356void
ce469aed 357AliTOFcalibHisto::LoadHisto(TFile * const file, TH1D **histo, const Char_t *name)
2cdf778a 358{
359 /* load histo */
97a29b32 360 *histo = (TH1D *)file->Get(name);
2cdf778a 361 if (!*histo)
362 AliWarning(Form("error while getting %s histo", name));
363}
364
365//__________________________________________________________________________
366
367void
97a29b32 368AliTOFcalibHisto::CreateHisto(TH1D **histo, const Char_t *name, Int_t size)
2cdf778a 369{
370 /* create histo */
97a29b32 371 *histo = new TH1D(name, Form(";index;%s", name), size, 0, size);
2cdf778a 372 if (!*histo)
373 AliWarning(Form("error while creating %s histo", name));
374}
375
376//__________________________________________________________________________
377
378void
97a29b32 379AliTOFcalibHisto::WriteHisto(TFile *file, TH1D *histo)
2cdf778a 380{
381 /* write histo */
382 if (!file || !file->IsOpen() || !histo)
383 return;
384 file->cd();
385 histo->Write();
386}
387
388//__________________________________________________________________________
389
390void
97a29b32 391AliTOFcalibHisto::SetHisto(TH1D *histo, Int_t index, Double_t value)
2cdf778a 392{
393 /* set histo */
394 if (!histo)
395 return;
396 histo->SetBinContent(index + 1, value);
397}
398
399//__________________________________________________________________________
400
97a29b32 401Double_t
402AliTOFcalibHisto::GetHisto(TH1D *histo, Int_t index)
2cdf778a 403{
404 /* get histo */
405 if (!histo) {
406 AliWarning("cannot get histo");
407 return 0.;
408 }
409 return histo->GetBinContent(index + 1);
410}
411
412//__________________________________________________________________________
413
414void
415AliTOFcalibHisto::LoadCalibHisto()
416{
417 /* load calib histo */
418
419 if (fgCalibHistoFile && fgCalibHistoFile->IsOpen())
420 AliWarning("calib histo file already open: reloading");
421
422 /* open input file */
423 TFile *fileIn = TFile::Open(GetCalibHistoFileName());
424 if (!fileIn || !fileIn->IsOpen())
425 AliFatal(Form("cannot open input file %s", GetCalibHistoFileName()));
426
427 /* set calib histo file */
428 fgCalibHistoFile = fileIn;
429
430 /* load consts */
431 for (Int_t iConst = 0; iConst < kNcalibConsts; iConst++)
432 LoadHisto(fileIn, &fCalibConst[iConst], fgkCalibConstName[iConst].Data());
433 /* load maps */
434 for (Int_t iMap = 0; iMap < kNcalibMaps; iMap++)
435 LoadHisto(fileIn, &fCalibMap[iMap], fgkCalibMapName[iMap].Data());
436}
437
438//__________________________________________________________________________
439
440void
441AliTOFcalibHisto::LoadCalibPar()
442{
443 /* load calib par */
444
445 if (fgCalibParFile && fgCalibParFile->IsOpen())
446 AliWarning("calib par file already open: reloading");
447
448 /* load calib histo */
449 LoadCalibHisto();
450
451 /* open input file */
452 TFile *fileIn = TFile::Open(GetCalibParFileName());
453 if (!fileIn || !fileIn->IsOpen())
454 AliError(Form("cannot open input file %s", GetCalibParFileName()));
455
456 /* set calib par file */
457 fgCalibParFile = fileIn;
458
459 /* load pars */
460 for (Int_t i = 0; i < kNcalibPars; i++)
461 LoadHisto(fileIn, &fCalibPar[i], fgkCalibParName[i].Data());
462
463}
464
465//__________________________________________________________________________
466
467void
27e86428 468AliTOFcalibHisto::LoadCalibStat()
469{
470 /* load calib stat */
471
472 if (fgCalibStatFile && fgCalibStatFile->IsOpen())
473 AliWarning("calib par file already open: reloading");
474
475 /* load calib histo */
476 LoadCalibHisto();
477
478 /* open input file */
479 TFile *fileIn = TFile::Open(GetCalibStatFileName());
480 if (!fileIn || !fileIn->IsOpen())
481 AliError(Form("cannot open input file %s", GetCalibStatFileName()));
482
483 /* set calib par file */
484 fgCalibStatFile = fileIn;
485
486 /* load pars */
487 for (Int_t i = 0; i < kNcalibStats; i++)
488 LoadHisto(fileIn, &fCalibStat[i], fgkCalibStatName[i].Data());
489
490}
491
492//__________________________________________________________________________
493
494void
2cdf778a 495AliTOFcalibHisto::WriteCalibHisto()
496{
497 /* write calib histo */
498
499 /* open output file */
500 TFile *fileOut = TFile::Open(GetCalibHistoFileName(), "RECREATE");
501 if (!fileOut || !fileOut->IsOpen())
502 AliFatal(Form("cannot open output file %s", GetCalibHistoFileName()));
503
504 /* create consts */
505 for (Int_t iConst = 0; iConst < kNcalibConsts; iConst++)
506 CreateHisto(&fCalibConst[iConst], fgkCalibConstName[iConst].Data(), 1);
507 /* create maps */
508 for (Int_t iMap = 0; iMap < kNcalibMaps; iMap++)
0e095c11 509 if (iMap == kIndex)
510 CreateHisto(&fCalibMap[iMap], fgkCalibMapName[iMap].Data(), fgkNchannelsEO);
511 else
512 CreateHisto(&fCalibMap[iMap], fgkCalibMapName[iMap].Data(), fgkNchannels);
2cdf778a 513
514 /*** SETUP CONSTS ***/
515
516 SetHisto(fCalibConst[kLHCperiod], 0, fgkLHCperiod);
517 SetHisto(fCalibConst[kAmphenolCableDelay], 0, fgkAmphenolCableDelay);
518 SetHisto(fCalibConst[kFlatCableDelay], 0, fgkFlatCableDelay);
519 SetHisto(fCalibConst[kInterfaceCardDelay], 0, fgkInterfaceCardDelay);
520
521 /*** SETUP MAPS ***/
522
523 AliTOFRawStream rawStream;
0e095c11 524 Int_t indexEO, det[5], dummy, index, sector, plate, strip, sectorStrip, padz, padx, pad, icIndex;
2cdf778a 525
526 /* temporarly disable warnings */
527 AliLog::EType_t logLevel = (AliLog::EType_t)AliLog::GetGlobalLogLevel();
528 AliLog::SetGlobalLogLevel(AliLog::kError);
529
530 /* loop over electronics oriented (EO) indices */
531 for (Int_t ddl = 0; ddl < 72; ddl++)
532 for (Int_t trm = 0; trm < 10; trm++)
533 for (Int_t chain = 0; chain < 2; chain++)
534 for (Int_t tdc = 0; tdc < 15; tdc++)
535 for (Int_t channel = 0; channel < 8; channel++) {
536
99096b5f 537 /* compute index EO */
538 indexEO = GetIndexEO(ddl, trm, chain, tdc, channel);
539
2cdf778a 540 /* convert EO indices into detector oriented (DO) indices
541 (this call causes some warnings because the loop includes
542 EO indices which are not connected to physical channels) */
543 rawStream.EquipmentId2VolumeId(ddl, trm + 3, chain, tdc, channel, det);
544
545 /* swap det[3] and det[4] */
546 dummy = det[3]; det[3] = det[4]; det[4] = dummy;
547
548 /* check detector indices */
2dccfcae 549 if (det[0] < 0 || det[0] > 17 ||
2cdf778a 550 det[1] < 0 || det[1] > 4 ||
551 det[2] < 0 || det[2] > 18 ||
552 det[3] < 0 || det[3] > 1 ||
99096b5f 553 det[4] < 0 || det[4] > 47) {
554 SetHisto(fCalibMap[kIndex], indexEO, -1);
2cdf778a 555 continue;
99096b5f 556 }
2cdf778a 557
558 /* setup information */
559 index = AliTOFGeometry::GetIndex(det);
560 sector = det[0];
561 plate = det[1];
562 strip = det[2];
563 sectorStrip = plate < 3 ? plate * 19 + strip : plate * 19 - 4 + strip;
564 padz = det[3];
565 padx = det[4];
566 pad = padz + 2 * padx;
567 icIndex = pad < 48 ? pad : 95 - pad;
568
569 /* set maps */
570
0e095c11 571 /* main index */
572 SetHisto(fCalibMap[kIndex], indexEO, index);
2cdf778a 573 /* EO indices */
574 SetHisto(fCalibMap[kDDL], index, ddl);
575 SetHisto(fCalibMap[kTRM], index, trm);
576 SetHisto(fCalibMap[kChain], index, chain);
577 SetHisto(fCalibMap[kTDC], index, tdc);
578 SetHisto(fCalibMap[kChannel], index, channel);
579 /* DO indices */
580 SetHisto(fCalibMap[kSector], index, sector);
581 SetHisto(fCalibMap[kPlate], index, plate);
582 SetHisto(fCalibMap[kStrip], index, strip);
583 SetHisto(fCalibMap[kSectorStrip], index, sectorStrip);
584 SetHisto(fCalibMap[kPadZ], index, padz);
585 SetHisto(fCalibMap[kPadX], index, padx);
586 SetHisto(fCalibMap[kPad], index, pad);
587 SetHisto(fCalibMap[kInterfaceCardIndex], index, icIndex);
588 /* calib constants */
589 SetHisto(fCalibMap[kDDLBCshift], index, fgkDDLBCshift[ddl]);
590 SetHisto(fCalibMap[kFlatCableLength], index, fgkFlatCableLength[sectorStrip]);
591 SetHisto(fCalibMap[kInterfaceCardLength], index, fgkInterfaceCardLength[icIndex]);
592 SetHisto(fCalibMap[kAmphenolCableLength], index, AliTOFCableLengthMap::GetCableLength(ddl, trm + 3, chain, tdc));
593
594 } /* loop over electronics oriented (EO) indices */
595
596 /* re-enable warnings */
597 AliLog::SetGlobalLogLevel(logLevel);
598
599 /* write consts */
600 for (Int_t iConst = 0; iConst < kNcalibConsts; iConst++)
601 WriteHisto(fileOut, fCalibConst[iConst]);
602 /* write maps */
603 for (Int_t iMap = 0; iMap < kNcalibMaps; iMap++)
604 WriteHisto(fileOut, fCalibMap[iMap]);
605
606 /* close output file */
607 fileOut->Close();
608}
609
610//__________________________________________________________________________
611
27e86428 612void
613AliTOFcalibHisto::WriteCalibStat()
614{
615 /* write calib stat */
616
617 /* open output file */
618 TFile *fileOut = TFile::Open(GetCalibStatFileName(), "RECREATE");
619 if (!fileOut || !fileOut->IsOpen())
620 AliFatal(Form("cannot open output file %s", GetCalibStatFileName()));
621
622 /* create stats */
623 for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
624 CreateHisto(&fCalibStat[iStat], fgkCalibStatName[iStat].Data(), fgkNchannels);
625
626 /*** SETUP STATS ***/
627
628 Int_t sector, sectorStrip;
629
630 /* load calib histo */
631 LoadCalibHisto();
632
633 /* loop over channels */
634 for (Int_t index = 0; index < fgkNchannels; index++) {
635 sector = (Int_t)GetCalibMap(kSector, index);
636 sectorStrip = (Int_t)GetCalibMap(kSectorStrip, index);
637 /* strip stat */
638 SetHisto(fCalibStat[kStripStat], index, (Double_t)fgkStripStat[sector][sectorStrip]);
639 } /* loop over channels */
640
641 /* write stats */
642 for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
643 WriteHisto(fileOut, fCalibStat[iStat]);
644
645 /* close output file */
646 fileOut->Close();
647}
648
649//__________________________________________________________________________
650
97a29b32 651Double_t
652AliTOFcalibHisto::GetCorrection(Int_t corr, Int_t index, Double_t tot)
2cdf778a 653{
654 /* apply correction */
655
01f1e64e 656 Int_t ddl, chain, tdc, channel, hptdc, pbCh, feaIndex, sector, plate, padx, trm, icIndex, sectorStrip;
97a29b32 657 Double_t slewing;
2cdf778a 658
659 switch (corr) {
660 case kDDLBCcorr:
661 return -GetCalibConst(kLHCperiod) * GetCalibMap(kDDLBCshift, index);
662 case kAmphenolCableCorr:
663 return GetCalibConst(kAmphenolCableDelay) * GetCalibMap(kAmphenolCableLength, index);
664 case kFlatCableCorr:
665 return GetCalibConst(kFlatCableDelay) * GetCalibMap(kFlatCableLength, index);
666 case kInterfaceCardCorr:
667 return GetCalibConst(kInterfaceCardDelay) * GetCalibMap(kInterfaceCardLength, index);
668 case kDDLdelayCorr:
669 ddl = (Int_t)GetCalibMap(kDDL, index);
670 return GetCalibPar(kDDLdelayPar, ddl);
671 case kHPTDCdelayCorr:
672 chain = (Int_t)GetCalibMap(kChain, index);
673 tdc = (Int_t)GetCalibMap(kTDC, index);
674 hptdc = tdc + 15 * chain;
675 return GetCalibPar(kHPTDCdelayPar, hptdc);
676 case kFEAchDelayCorr:
677 ddl = (Int_t)GetCalibMap(kDDL, index);
678 tdc = (Int_t)GetCalibMap(kTDC, index);
679 channel = (Int_t)GetCalibMap(kChannel, index);
680 pbCh = channel + 8 * (tdc % 3);
681 if (ddl % 2 == 0)
682 return GetCalibPar(kRightFEAchDelayPar, pbCh);
683 else
684 return GetCalibPar(kLeftFEAchDelayPar, pbCh);
685 case kFEAdelayCorr:
686 sector = (Int_t)GetCalibMap(kSector, index);
687 plate = (Int_t)GetCalibMap(kPlate, index);
97a29b32 688 sectorStrip = (Int_t)GetCalibMap(kSectorStrip, index);
2cdf778a 689 padx = (Int_t)GetCalibMap(kPadX, index);
97a29b32 690 feaIndex = padx / 12 + 4 * sectorStrip + 364 * sector;
2cdf778a 691 return GetCalibPar(kFEAdelayPar, feaIndex);
692 case kTRMdelayCorr:
97a29b32 693 ddl = (Int_t)GetCalibMap(kDDL, index);
2cdf778a 694 trm = (Int_t)GetCalibMap(kTRM, index);
97a29b32 695 return GetCalibPar(kTRMdelayPar, trm + 10 * ddl);
696 case kICdelayCorr:
697 icIndex = (Int_t)GetCalibMap(kInterfaceCardIndex, index);
698 return GetCalibPar(kICdelayPar, icIndex);
699 case kStripDelayCorr:
700 sector = (Int_t)GetCalibMap(kSector, index);
701 sectorStrip = (Int_t)GetCalibMap(kSectorStrip, index);
702 return GetCalibPar(kStripDelayPar, sectorStrip + 91 * sector);
703 case kIndexDelayCorr:
704 return GetCalibPar(kIndexDelayPar, index);
2cdf778a 705 case kTimeSlewingCorr:
97a29b32 706 tot = tot < SLEW_TOTMIN ? SLEW_TOTMIN : tot;
707 tot = tot > SLEW_TOTMAX ? SLEW_TOTMAX : tot;
2cdf778a 708 slewing = 0.;
709 for (Int_t i = 0; i < fCalibPar[kTimeSlewingPar]->GetNbinsX(); i++)
710 slewing += GetCalibPar(kTimeSlewingPar, i) * TMath::Power(tot, i);
711 return slewing;
712 default:
713 AliWarning(Form("unknown correction flag (%d)", corr));
714 return 0.;
715 }
716}
717
718//__________________________________________________________________________
719
97a29b32 720Double_t
2cdf778a 721AliTOFcalibHisto::GetNominalCorrection(Int_t index)
722{
723 /* get nominal correction */
97a29b32 724 Double_t corr = 0;
2cdf778a 725 for (Int_t iCorr = 0; iCorr < kNcorrections; iCorr++)
726 corr += GetCorrection(iCorr, index);
727 return corr;
728}
729
730//__________________________________________________________________________
731
732void
733AliTOFcalibHisto::ApplyNominalCorrection(AliESDtrack *track)
734{
735 /* apply nominal correction */
736
737 Double_t rawTime = track->GetTOFsignalRaw();
738 Int_t index = track->GetTOFCalChannel();
739 Double_t time = rawTime - 1.e3 * GetNominalCorrection(index);
740 track->SetTOFsignal(time);
741}
0e095c11 742
9155334b 743//__________________________________________________________________________
744
97a29b32 745Double_t
9155334b 746AliTOFcalibHisto::GetCableCorrection(Int_t index)
747{
748 /* get cable correction */
97a29b32 749 Double_t corr = 0;
9155334b 750 for (Int_t iCorr = 0; iCorr < kNcorrections; iCorr++)
751 if (fgCableCorrectionFlag[iCorr])
752 corr += GetCorrection(iCorr, index);
753 return corr;
754}
755
756//__________________________________________________________________________
757
97a29b32 758Double_t
759AliTOFcalibHisto::GetFullCorrection(Int_t index, Double_t tot)
9155334b 760{
761 /* get full correction */
97a29b32 762 Double_t corr = 0;
9155334b 763 for (Int_t iCorr = 0; iCorr < kNcorrections; iCorr++)
97a29b32 764 if (fgFullCorrectionFlag[iCorr]) {
765 corr += GetCorrection(iCorr, index, tot);
766 }
9155334b 767 return corr;
768}
769
27e86428 770//__________________________________________________________________________
771
772Bool_t
773AliTOFcalibHisto::GetStatus(Int_t index)
774{
775 /* get status */
776
777 Bool_t status = kTRUE;
778
779 for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
780 status &= GetCalibStat(iStat, index);
781
782 return status;
783}