Protection
[u/mrichter/AliRoot.git] / TOF / AliTOFRunParams.cxx
CommitLineData
f04b3a69 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16// *
17// *
18// *
19// * this class defines the TOF object to be stored
20// * in OCDB on a run-by-run basis in order to have the measurement
21// * of the time evolution of T0 and of TOF resolution including
22// * average T0 uncertainty
23// *
24// *
25// *
26
27#include "AliTOFRunParams.h"
28
29ClassImp(AliTOFRunParams)
30
31//_________________________________________________________
32
33AliTOFRunParams::AliTOFRunParams() :
34 TObject(),
35 fNPoints(0),
36 fTimestamp(NULL),
37 fT0(NULL),
38 fTOFResolution(NULL),
39 fT0Spread(NULL)
40{
41 /*
42 * default constructor
43 */
44}
45
46//_________________________________________________________
47
48AliTOFRunParams::AliTOFRunParams(Int_t nPoints) :
49 TObject(),
50 fNPoints(nPoints),
51 fTimestamp(new UInt_t[nPoints]),
52 fT0(new Float_t[nPoints]),
53 fTOFResolution(new Float_t[nPoints]),
54 fT0Spread(new Float_t[nPoints])
55{
56 /*
57 * standard constructor
58 */
59}
60
61//_________________________________________________________
62
63AliTOFRunParams::~AliTOFRunParams()
64{
65 /*
66 * default destructor
67 */
68
69 if (fTimestamp) delete [] fTimestamp;
70 if (fT0) delete [] fT0;
71 if (fTOFResolution) delete [] fTOFResolution;
72 if (fT0Spread) delete [] fT0Spread;
73}
74
75//_________________________________________________________
76
77AliTOFRunParams::AliTOFRunParams(const AliTOFRunParams &source) :
78 TObject(source),
79 fNPoints(source.fNPoints),
80 fTimestamp(new UInt_t[source.fNPoints]),
81 fT0(new Float_t[source.fNPoints]),
82 fTOFResolution(new Float_t[source.fNPoints]),
83 fT0Spread(new Float_t[source.fNPoints])
84{
85 /*
86 * copy constructor
87 */
88
89 for (Int_t i = 0; i < fNPoints; i++) {
90 fTimestamp[i] = source.fTimestamp[i];
91 fT0[i] = source.fT0[i];
92 fTOFResolution[i] = source.fTOFResolution[i];
93 fT0Spread[i] = source.fT0Spread[i];
94 }
95
96}
97
98//_________________________________________________________
99
100AliTOFRunParams &
101AliTOFRunParams::operator=(const AliTOFRunParams &source)
102{
103 /*
104 * operator=
105 */
106
107 if (this == &source) return *this;
108 TObject::operator=(source);
109
110 if (fNPoints != source.fNPoints) {
111 if (fTimestamp) delete [] fTimestamp;
112 if (fT0) delete [] fT0;
113 if (fTOFResolution) delete [] fTOFResolution;
114 if (fT0Spread) delete [] fT0Spread;
115 fNPoints = source.fNPoints;
116 fTimestamp = new UInt_t[source.fNPoints];
117 fT0 = new Float_t[source.fNPoints];
118 fTOFResolution = new Float_t[source.fNPoints];
119 fT0Spread = new Float_t[source.fNPoints];
120 }
121
122 for (Int_t i = 0; i < fNPoints; i++) {
123 fTimestamp[i] = source.fTimestamp[i];
124 fT0[i] = source.fT0[i];
125 fTOFResolution[i] = source.fTOFResolution[i];
126 fT0Spread[i] = source.fT0Spread[i];
127 }
128
129 return *this;
130}
131
132//_________________________________________________________
133
134Float_t
135AliTOFRunParams::EvalT0(UInt_t timestamp)
136{
137 /*
138 * eval T0
139 */
140
141 /* critical cases:
142 1. no measurement -> 0.
143 2. single measurement -> single value
144 3. timestamp before first measurement -> first value
145 4. timestamp after last measurement -> last value
146 */
147 if (fNPoints <= 0 || !fT0 || !fTimestamp) return 0.;
148 if (fNPoints == 1) return fT0[0];
149 if (timestamp <= fTimestamp[0]) return fT0[0];
150 if (timestamp >= fTimestamp[fNPoints - 1]) return fT0[fNPoints - 1];
151
152 /* interpolate value */
153 Int_t ipoint;
154 for (ipoint = 0; ipoint < fNPoints - 1; ipoint++)
155 if (timestamp >= fTimestamp[ipoint] && timestamp < fTimestamp[ipoint + 1])
156 break;
157 Float_t coeff = (fT0[ipoint + 1] - fT0[ipoint]) / (Float_t)(fTimestamp[ipoint + 1] - fTimestamp[ipoint]);
158 Float_t t0 = fT0[ipoint] + coeff * (timestamp - fTimestamp[ipoint]);
159
160 return t0;
161}
162
163//_________________________________________________________
164
165Float_t
166AliTOFRunParams::EvalTOFResolution(UInt_t timestamp)
167{
168 /*
169 * eval TOF resolution
170 */
171
172 /* critical cases:
173 1. no measurement -> 0.
174 2. single measurement -> single value
175 3. timestamp before first measurement -> first value
176 4. timestamp after last measurement -> last value
177 */
178 if (fNPoints <= 0 || !fTOFResolution || !fTimestamp) return 0.;
179 if (fNPoints == 1) return fTOFResolution[0];
180 if (timestamp <= fTimestamp[0]) return fTOFResolution[0];
181 if (timestamp >= fTimestamp[fNPoints - 1]) return fTOFResolution[fNPoints - 1];
182
183 /* interpolate value */
184 Int_t ipoint;
185 for (ipoint = 0; ipoint < fNPoints - 1; ipoint++)
186 if (timestamp >= fTimestamp[ipoint] && timestamp < fTimestamp[ipoint + 1])
187 break;
188 Float_t coeff = (fTOFResolution[ipoint + 1] - fTOFResolution[ipoint]) / (Float_t)(fTimestamp[ipoint + 1] - fTimestamp[ipoint]);
189 Float_t reso = fTOFResolution[ipoint] + coeff * (timestamp - fTimestamp[ipoint]);
190
191 return reso;
192}
193
194//_________________________________________________________
195
196Float_t
197AliTOFRunParams::EvalT0Spread(UInt_t timestamp)
198{
199 /*
200 * eval T0 spread
201 */
202
203 /* critical cases:
204 1. no measurement -> 0.
205 2. single measurement -> single value
206 3. timestamp before first measurement -> first value
207 4. timestamp after last measurement -> last value
208 */
209 if (fNPoints <= 0 || !fT0Spread || !fTimestamp) return 0.;
210 if (fNPoints == 1) return fT0Spread[0];
211 if (timestamp <= fTimestamp[0]) return fT0Spread[0];
212 if (timestamp >= fTimestamp[fNPoints - 1]) return fT0Spread[fNPoints - 1];
213
214 /* interpolate value */
215 Int_t ipoint;
216 for (ipoint = 0; ipoint < fNPoints - 1; ipoint++)
217 if (timestamp >= fTimestamp[ipoint] && timestamp < fTimestamp[ipoint + 1])
218 break;
219 Float_t coeff = (fT0Spread[ipoint + 1] - fT0Spread[ipoint]) / (Float_t)(fTimestamp[ipoint + 1] - fTimestamp[ipoint]);
220 Float_t spread = fT0Spread[ipoint] + coeff * (timestamp - fTimestamp[ipoint]);
221
222 return spread;
223}
224