warning fix
[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());
515ce574 424 if (!fileIn || !fileIn->IsOpen()) {
2cdf778a 425 AliFatal(Form("cannot open input file %s", GetCalibHistoFileName()));
515ce574 426 return;
427 }
2cdf778a 428
429 /* set calib histo file */
430 fgCalibHistoFile = fileIn;
431
432 /* load consts */
433 for (Int_t iConst = 0; iConst < kNcalibConsts; iConst++)
434 LoadHisto(fileIn, &fCalibConst[iConst], fgkCalibConstName[iConst].Data());
435 /* load maps */
436 for (Int_t iMap = 0; iMap < kNcalibMaps; iMap++)
437 LoadHisto(fileIn, &fCalibMap[iMap], fgkCalibMapName[iMap].Data());
438}
439
440//__________________________________________________________________________
441
442void
443AliTOFcalibHisto::LoadCalibPar()
444{
445 /* load calib par */
446
447 if (fgCalibParFile && fgCalibParFile->IsOpen())
448 AliWarning("calib par file already open: reloading");
449
450 /* load calib histo */
451 LoadCalibHisto();
452
453 /* open input file */
454 TFile *fileIn = TFile::Open(GetCalibParFileName());
515ce574 455 if (!fileIn || !fileIn->IsOpen()) {
2cdf778a 456 AliError(Form("cannot open input file %s", GetCalibParFileName()));
515ce574 457 return;
458 }
2cdf778a 459
460 /* set calib par file */
461 fgCalibParFile = fileIn;
462
463 /* load pars */
464 for (Int_t i = 0; i < kNcalibPars; i++)
465 LoadHisto(fileIn, &fCalibPar[i], fgkCalibParName[i].Data());
466
467}
468
469//__________________________________________________________________________
470
471void
27e86428 472AliTOFcalibHisto::LoadCalibStat()
473{
474 /* load calib stat */
475
476 if (fgCalibStatFile && fgCalibStatFile->IsOpen())
477 AliWarning("calib par file already open: reloading");
478
479 /* load calib histo */
480 LoadCalibHisto();
481
482 /* open input file */
483 TFile *fileIn = TFile::Open(GetCalibStatFileName());
84417e86 484 if (!fileIn || !fileIn->IsOpen()) {
27e86428 485 AliError(Form("cannot open input file %s", GetCalibStatFileName()));
84417e86 486 return;
487 }
27e86428 488
489 /* set calib par file */
490 fgCalibStatFile = fileIn;
491
492 /* load pars */
493 for (Int_t i = 0; i < kNcalibStats; i++)
494 LoadHisto(fileIn, &fCalibStat[i], fgkCalibStatName[i].Data());
495
496}
497
498//__________________________________________________________________________
499
500void
2cdf778a 501AliTOFcalibHisto::WriteCalibHisto()
502{
503 /* write calib histo */
504
505 /* open output file */
506 TFile *fileOut = TFile::Open(GetCalibHistoFileName(), "RECREATE");
515ce574 507 if (!fileOut || !fileOut->IsOpen()) {
2cdf778a 508 AliFatal(Form("cannot open output file %s", GetCalibHistoFileName()));
515ce574 509 return;
510 }
2cdf778a 511
512 /* create consts */
513 for (Int_t iConst = 0; iConst < kNcalibConsts; iConst++)
514 CreateHisto(&fCalibConst[iConst], fgkCalibConstName[iConst].Data(), 1);
515 /* create maps */
516 for (Int_t iMap = 0; iMap < kNcalibMaps; iMap++)
0e095c11 517 if (iMap == kIndex)
518 CreateHisto(&fCalibMap[iMap], fgkCalibMapName[iMap].Data(), fgkNchannelsEO);
519 else
520 CreateHisto(&fCalibMap[iMap], fgkCalibMapName[iMap].Data(), fgkNchannels);
2cdf778a 521
522 /*** SETUP CONSTS ***/
523
524 SetHisto(fCalibConst[kLHCperiod], 0, fgkLHCperiod);
525 SetHisto(fCalibConst[kAmphenolCableDelay], 0, fgkAmphenolCableDelay);
526 SetHisto(fCalibConst[kFlatCableDelay], 0, fgkFlatCableDelay);
527 SetHisto(fCalibConst[kInterfaceCardDelay], 0, fgkInterfaceCardDelay);
528
529 /*** SETUP MAPS ***/
530
531 AliTOFRawStream rawStream;
0e095c11 532 Int_t indexEO, det[5], dummy, index, sector, plate, strip, sectorStrip, padz, padx, pad, icIndex;
2cdf778a 533
534 /* temporarly disable warnings */
535 AliLog::EType_t logLevel = (AliLog::EType_t)AliLog::GetGlobalLogLevel();
536 AliLog::SetGlobalLogLevel(AliLog::kError);
537
538 /* loop over electronics oriented (EO) indices */
539 for (Int_t ddl = 0; ddl < 72; ddl++)
540 for (Int_t trm = 0; trm < 10; trm++)
541 for (Int_t chain = 0; chain < 2; chain++)
542 for (Int_t tdc = 0; tdc < 15; tdc++)
543 for (Int_t channel = 0; channel < 8; channel++) {
544
99096b5f 545 /* compute index EO */
546 indexEO = GetIndexEO(ddl, trm, chain, tdc, channel);
547
2cdf778a 548 /* convert EO indices into detector oriented (DO) indices
549 (this call causes some warnings because the loop includes
550 EO indices which are not connected to physical channels) */
551 rawStream.EquipmentId2VolumeId(ddl, trm + 3, chain, tdc, channel, det);
552
553 /* swap det[3] and det[4] */
554 dummy = det[3]; det[3] = det[4]; det[4] = dummy;
555
556 /* check detector indices */
2dccfcae 557 if (det[0] < 0 || det[0] > 17 ||
2cdf778a 558 det[1] < 0 || det[1] > 4 ||
559 det[2] < 0 || det[2] > 18 ||
560 det[3] < 0 || det[3] > 1 ||
99096b5f 561 det[4] < 0 || det[4] > 47) {
562 SetHisto(fCalibMap[kIndex], indexEO, -1);
2cdf778a 563 continue;
99096b5f 564 }
2cdf778a 565
566 /* setup information */
567 index = AliTOFGeometry::GetIndex(det);
568 sector = det[0];
569 plate = det[1];
570 strip = det[2];
571 sectorStrip = plate < 3 ? plate * 19 + strip : plate * 19 - 4 + strip;
572 padz = det[3];
573 padx = det[4];
574 pad = padz + 2 * padx;
575 icIndex = pad < 48 ? pad : 95 - pad;
576
577 /* set maps */
578
0e095c11 579 /* main index */
580 SetHisto(fCalibMap[kIndex], indexEO, index);
2cdf778a 581 /* EO indices */
582 SetHisto(fCalibMap[kDDL], index, ddl);
583 SetHisto(fCalibMap[kTRM], index, trm);
584 SetHisto(fCalibMap[kChain], index, chain);
585 SetHisto(fCalibMap[kTDC], index, tdc);
586 SetHisto(fCalibMap[kChannel], index, channel);
587 /* DO indices */
588 SetHisto(fCalibMap[kSector], index, sector);
589 SetHisto(fCalibMap[kPlate], index, plate);
590 SetHisto(fCalibMap[kStrip], index, strip);
591 SetHisto(fCalibMap[kSectorStrip], index, sectorStrip);
592 SetHisto(fCalibMap[kPadZ], index, padz);
593 SetHisto(fCalibMap[kPadX], index, padx);
594 SetHisto(fCalibMap[kPad], index, pad);
595 SetHisto(fCalibMap[kInterfaceCardIndex], index, icIndex);
596 /* calib constants */
597 SetHisto(fCalibMap[kDDLBCshift], index, fgkDDLBCshift[ddl]);
598 SetHisto(fCalibMap[kFlatCableLength], index, fgkFlatCableLength[sectorStrip]);
599 SetHisto(fCalibMap[kInterfaceCardLength], index, fgkInterfaceCardLength[icIndex]);
600 SetHisto(fCalibMap[kAmphenolCableLength], index, AliTOFCableLengthMap::GetCableLength(ddl, trm + 3, chain, tdc));
601
602 } /* loop over electronics oriented (EO) indices */
603
604 /* re-enable warnings */
605 AliLog::SetGlobalLogLevel(logLevel);
606
607 /* write consts */
608 for (Int_t iConst = 0; iConst < kNcalibConsts; iConst++)
609 WriteHisto(fileOut, fCalibConst[iConst]);
610 /* write maps */
611 for (Int_t iMap = 0; iMap < kNcalibMaps; iMap++)
612 WriteHisto(fileOut, fCalibMap[iMap]);
613
614 /* close output file */
615 fileOut->Close();
616}
617
618//__________________________________________________________________________
619
27e86428 620void
621AliTOFcalibHisto::WriteCalibStat()
622{
623 /* write calib stat */
624
625 /* open output file */
626 TFile *fileOut = TFile::Open(GetCalibStatFileName(), "RECREATE");
515ce574 627 if (!fileOut || !fileOut->IsOpen()) {
27e86428 628 AliFatal(Form("cannot open output file %s", GetCalibStatFileName()));
515ce574 629 return;
630 }
27e86428 631
632 /* create stats */
633 for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
634 CreateHisto(&fCalibStat[iStat], fgkCalibStatName[iStat].Data(), fgkNchannels);
635
636 /*** SETUP STATS ***/
637
638 Int_t sector, sectorStrip;
639
640 /* load calib histo */
641 LoadCalibHisto();
642
643 /* loop over channels */
644 for (Int_t index = 0; index < fgkNchannels; index++) {
645 sector = (Int_t)GetCalibMap(kSector, index);
646 sectorStrip = (Int_t)GetCalibMap(kSectorStrip, index);
647 /* strip stat */
648 SetHisto(fCalibStat[kStripStat], index, (Double_t)fgkStripStat[sector][sectorStrip]);
649 } /* loop over channels */
650
651 /* write stats */
652 for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
653 WriteHisto(fileOut, fCalibStat[iStat]);
654
655 /* close output file */
656 fileOut->Close();
657}
658
659//__________________________________________________________________________
660
97a29b32 661Double_t
662AliTOFcalibHisto::GetCorrection(Int_t corr, Int_t index, Double_t tot)
2cdf778a 663{
664 /* apply correction */
665
01f1e64e 666 Int_t ddl, chain, tdc, channel, hptdc, pbCh, feaIndex, sector, plate, padx, trm, icIndex, sectorStrip;
97a29b32 667 Double_t slewing;
2cdf778a 668
669 switch (corr) {
670 case kDDLBCcorr:
671 return -GetCalibConst(kLHCperiod) * GetCalibMap(kDDLBCshift, index);
672 case kAmphenolCableCorr:
673 return GetCalibConst(kAmphenolCableDelay) * GetCalibMap(kAmphenolCableLength, index);
674 case kFlatCableCorr:
675 return GetCalibConst(kFlatCableDelay) * GetCalibMap(kFlatCableLength, index);
676 case kInterfaceCardCorr:
677 return GetCalibConst(kInterfaceCardDelay) * GetCalibMap(kInterfaceCardLength, index);
678 case kDDLdelayCorr:
679 ddl = (Int_t)GetCalibMap(kDDL, index);
680 return GetCalibPar(kDDLdelayPar, ddl);
681 case kHPTDCdelayCorr:
682 chain = (Int_t)GetCalibMap(kChain, index);
683 tdc = (Int_t)GetCalibMap(kTDC, index);
684 hptdc = tdc + 15 * chain;
685 return GetCalibPar(kHPTDCdelayPar, hptdc);
686 case kFEAchDelayCorr:
687 ddl = (Int_t)GetCalibMap(kDDL, index);
688 tdc = (Int_t)GetCalibMap(kTDC, index);
689 channel = (Int_t)GetCalibMap(kChannel, index);
690 pbCh = channel + 8 * (tdc % 3);
691 if (ddl % 2 == 0)
692 return GetCalibPar(kRightFEAchDelayPar, pbCh);
693 else
694 return GetCalibPar(kLeftFEAchDelayPar, pbCh);
695 case kFEAdelayCorr:
696 sector = (Int_t)GetCalibMap(kSector, index);
697 plate = (Int_t)GetCalibMap(kPlate, index);
97a29b32 698 sectorStrip = (Int_t)GetCalibMap(kSectorStrip, index);
2cdf778a 699 padx = (Int_t)GetCalibMap(kPadX, index);
97a29b32 700 feaIndex = padx / 12 + 4 * sectorStrip + 364 * sector;
2cdf778a 701 return GetCalibPar(kFEAdelayPar, feaIndex);
702 case kTRMdelayCorr:
97a29b32 703 ddl = (Int_t)GetCalibMap(kDDL, index);
2cdf778a 704 trm = (Int_t)GetCalibMap(kTRM, index);
97a29b32 705 return GetCalibPar(kTRMdelayPar, trm + 10 * ddl);
706 case kICdelayCorr:
707 icIndex = (Int_t)GetCalibMap(kInterfaceCardIndex, index);
708 return GetCalibPar(kICdelayPar, icIndex);
709 case kStripDelayCorr:
710 sector = (Int_t)GetCalibMap(kSector, index);
711 sectorStrip = (Int_t)GetCalibMap(kSectorStrip, index);
712 return GetCalibPar(kStripDelayPar, sectorStrip + 91 * sector);
713 case kIndexDelayCorr:
714 return GetCalibPar(kIndexDelayPar, index);
2cdf778a 715 case kTimeSlewingCorr:
97a29b32 716 tot = tot < SLEW_TOTMIN ? SLEW_TOTMIN : tot;
717 tot = tot > SLEW_TOTMAX ? SLEW_TOTMAX : tot;
2cdf778a 718 slewing = 0.;
719 for (Int_t i = 0; i < fCalibPar[kTimeSlewingPar]->GetNbinsX(); i++)
720 slewing += GetCalibPar(kTimeSlewingPar, i) * TMath::Power(tot, i);
721 return slewing;
722 default:
723 AliWarning(Form("unknown correction flag (%d)", corr));
724 return 0.;
725 }
726}
727
728//__________________________________________________________________________
729
97a29b32 730Double_t
2cdf778a 731AliTOFcalibHisto::GetNominalCorrection(Int_t index)
732{
733 /* get nominal correction */
97a29b32 734 Double_t corr = 0;
2cdf778a 735 for (Int_t iCorr = 0; iCorr < kNcorrections; iCorr++)
736 corr += GetCorrection(iCorr, index);
737 return corr;
738}
739
740//__________________________________________________________________________
741
742void
743AliTOFcalibHisto::ApplyNominalCorrection(AliESDtrack *track)
744{
745 /* apply nominal correction */
746
747 Double_t rawTime = track->GetTOFsignalRaw();
748 Int_t index = track->GetTOFCalChannel();
749 Double_t time = rawTime - 1.e3 * GetNominalCorrection(index);
750 track->SetTOFsignal(time);
751}
0e095c11 752
9155334b 753//__________________________________________________________________________
754
97a29b32 755Double_t
9155334b 756AliTOFcalibHisto::GetCableCorrection(Int_t index)
757{
758 /* get cable correction */
97a29b32 759 Double_t corr = 0;
9155334b 760 for (Int_t iCorr = 0; iCorr < kNcorrections; iCorr++)
761 if (fgCableCorrectionFlag[iCorr])
762 corr += GetCorrection(iCorr, index);
763 return corr;
764}
765
766//__________________________________________________________________________
767
97a29b32 768Double_t
769AliTOFcalibHisto::GetFullCorrection(Int_t index, Double_t tot)
9155334b 770{
771 /* get full correction */
97a29b32 772 Double_t corr = 0;
9155334b 773 for (Int_t iCorr = 0; iCorr < kNcorrections; iCorr++)
97a29b32 774 if (fgFullCorrectionFlag[iCorr]) {
775 corr += GetCorrection(iCorr, index, tot);
776 }
9155334b 777 return corr;
778}
779
27e86428 780//__________________________________________________________________________
781
782Bool_t
783AliTOFcalibHisto::GetStatus(Int_t index)
784{
785 /* get status */
786
787 Bool_t status = kTRUE;
788
789 for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
790 status &= GetCalibStat(iStat, index);
791
792 return status;
793}