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