65 {
66
67
69
70
71
72
73
74
75 IdentifierHash stripHash;
76 if (
m_idHelperSvc->cscIdHelper().get_channel_hash(stripId, stripHash)) {
78 << " the identifier is \n" << stripId);
79 }
80
82 int phisec =
m_idHelperSvc->cscIdHelper().stationPhi(stripId);
83 int station =
m_idHelperSvc->cscIdHelper().stationName(stripId) - 49;
84
85 int sector = zsec * (2 * phisec - station + 1);
86
88 int measphi =
m_idHelperSvc->cscIdHelper().measuresPhi(stripId);
90
92
101 }
102
103
105
106 bool showDetail = false;
107 if (noise <= 0.0) {
108 showDetail = true;
109 ATH_MSG_DEBUG(
" Noise is zero!! DB needs to be fixed for this channel. 4151.06 (3.5ADC) is assigned.");
111 }
112
114
115 if (ped < 1.0) {
116 showDetail = true;
117 ATH_MSG_DEBUG(
" Pedestal is zero!! DB needs to be fixed for this channel. 2048*1013 (2048ADC) is assigned.");
118
119
120 }
121
122 if (showDetail)
124 << " strHash= " << (unsigned int)stripHash << " zsec:phisec:istation sector " << zsec << ":"
125 << phisec << ":" << station << " " << sector << " wlay:measphi:istr = " << wlay << " " << measphi
126 << " " << istrip << " Charges: " << chgs << " (Sample time: " << period << " ns)");
127
128
129 res.phase = samplingPhase;
131
135 } else {
138 }
139
140 res.charge_beforeBPCorr =
res.charge;
141 res.time_beforeBPCorr =
res.time;
142
143 if (samplingPhase == 1)
145
147
148 bool doPositionCorrection = false;
149
152
153 double parabolapTime[150];
154 for (
int i = 0;
i < 150; ++
i) { parabolapTime[
i] = 0.5 +
i; }
155
156 double bipolarpTime[150] = {
157 7.2767, 14.6497, 14.9118, 15.3129, 15.5765, 15.8889, 16.2474, 16.6022, 16.9897, 17.3629, 17.7400, 18.2157,
158 18.6235, 19.0662, 19.4730, 19.9940, 20.4652, 20.9776, 21.4932, 22.0852, 22.6554, 23.2433, 23.8237, 24.5097,
159 25.1759, 25.8815, 26.6378, 27.4112, 28.2157, 29.0271, 29.9248, 30.7977, 31.7510, 32.7041, 33.7583, 34.8513,
160 35.9103, 37.1485, 38.3861, 39.7035, 41.0022, 42.3003, 43.6234, 45.0080, 46.3782, 47.7918, 49.1901, 50.6580,
161 52.0537, 53.4410, 54.8608, 56.2165, 57.5229, 58.8066, 60.0287, 61.2283, 62.3879, 63.5055, 64.5241, 65.5107,
162 66.4050, 67.3491, 68.2172, 68.9896, 69.8158, 70.4611, 71.1646, 71.7663, 72.4042, 73.0496, 73.5342, 74.1307,
163 74.5450, 75.0907, 75.6212, 76.0865, 76.8541, 77.6080, 78.4420, 79.2248, 80.0880, 81.0277, 81.9300, 82.9188,
164 83.9960, 85.0072, 86.1661, 87.2706, 88.4430, 89.6940, 90.9562, 92.2918, 93.6533, 95.0087, 96.3996, 97.7745,
165 99.1749, 100.6474, 102.0441, 103.4479, 104.8626, 106.2086, 107.5305, 108.8386, 110.0599, 111.2366, 112.4078, 113.4710,
166 114.5671, 115.5359, 116.4890, 117.3761, 118.1778, 119.0282, 119.7657, 120.4136, 121.1364, 121.8754, 122.4186, 123.0246,
167 123.5694, 124.1640, 124.5444, 125.1546, 125.5514, 126.0263, 126.4062, 126.8301, 127.1727, 127.5432, 127.7796, 128.2254,
168 128.4639, 128.7937, 129.1810, 129.3844, 129.6880, 129.9609, 130.1609, 130.4174, 130.6324, 130.8404, 131.0484, 131.3148,
169 131.5413, 131.6463, 131.8371, 132.1471, 132.1629, 132.3846};
170
171 double amplCorrValue[150] = {
172 0.0011, 0.0019, 0.0028, 0.0047, 0.0077, 0.0111, 0.0145, 0.0207, 0.0261, 0.0322, 0.0412, 0.0491, 0.0576, 0.0663,
173 0.0749, 0.0830, 0.0875, 0.0912, 0.0929, 0.0931, 0.0920, 0.0901, 0.0875, 0.0841, 0.0800, 0.0756, 0.0711, 0.0663,
174 0.0609, 0.0557, 0.0506, 0.0453, 0.0402, 0.0351, 0.0299, 0.0260, 0.0216, 0.0173, 0.0141, 0.0109, 0.0076, 0.0049,
175 0.0022, 0.0003, -0.0014, -0.0021, -0.0029, -0.0029, -0.0025, -0.0023, -0.0013, 0.0004, 0.0017, 0.0043, 0.0072, 0.0104,
176 0.0141, 0.0181, 0.0232, 0.0277, 0.0338, 0.0387, 0.0451, 0.0514, 0.0582, 0.0648, 0.0720, 0.0787, 0.0855, 0.0924,
177 0.0992, 0.1064, 0.1125, 0.1187, 0.1232, 0.1079, 0.0779, 0.0672, 0.0622, 0.0570, 0.0515, 0.0463, 0.0415, 0.0362,
178 0.0314, 0.0266, 0.0221, 0.0181, 0.0143, 0.0103, 0.0073, 0.0047, 0.0021, 0.0003, -0.0010, -0.0024, -0.0027, -0.0030,
179 -0.0026, -0.0022, -0.0012, 0.0003, 0.0019, 0.0045, 0.0071, 0.0108, 0.0141, 0.0186, 0.0233, 0.0285, 0.0340, 0.0388,
180 0.0451, 0.0512, 0.0575, 0.0645, 0.0715, 0.0788, 0.0856, 0.0924, 0.0992, 0.1064, 0.1126, 0.1186, 0.1236, 0.1283,
181 0.1320, 0.1346, 0.1360, 0.1351, 0.1318, 0.1253, 0.1148, 0.1030, 0.0908, 0.0796, 0.0702, 0.0597, 0.0506, 0.0424,
182 0.0345, 0.0283, 0.0220, 0.0165, 0.0122, 0.0082, 0.0051, 0.0027, 0.0013, 0.0004};
183
185 for (j = 0;
j < 150;
j++) {
186 if (
res.time < parabolapTime[j]) {
187
188 break;
189 }
190 }
191
192 if (j > 0 && j < 149) {
196
197 double a1 = (bipolarpTime[
j] - bipolarpTime[
j - 1]);
198
199 double a2 = (parabolapTime[
j - 1] + parabolapTime[
j]);
200
201 double a3 = ((std::pow(parabolapTime[j + 1], 2) - std::pow(parabolapTime[j - 1], 2)) * (bipolarpTime[
j] - bipolarpTime[
j - 1]) -
202 (bipolarpTime[
j + 1] - bipolarpTime[
j - 1]) * (std::pow(parabolapTime[j], 2) - std::pow(parabolapTime[j - 1], 2)));
203
204 double a4 = (parabolapTime[
j - 1] + parabolapTime[
j + 1]) *
205 ((parabolapTime[j - 1] - parabolapTime[j + 1]) * (parabolapTime[j - 1] + parabolapTime[j]) +
206 std::pow(parabolapTime[j], 2) - std::pow(parabolapTime[j - 1], 2));
207
208 double a5 = std::pow(parabolapTime[j], 2) - std::pow(parabolapTime[j - 1], 2);
209
210
211
212 a = (a1 + (a2 * a3 / a4)) / a5;
213
214
215 double b1 = (bipolarpTime[
j + 1] - bipolarpTime[
j - 1]);
216 double b2 = std::pow(parabolapTime[j], 2) - std::pow(parabolapTime[j - 1], 2);
217 double b3 = std::pow(parabolapTime[j + 1], 2) - std::pow(parabolapTime[j - 1], 2);
218 double b4 = (bipolarpTime[
j] - bipolarpTime[
j - 1]);
219 double b5 = (parabolapTime[
j - 1] + parabolapTime[
j + 1]);
220 double b6 = (parabolapTime[
j - 1] - parabolapTime[
j + 1]) * (parabolapTime[j - 1] + parabolapTime[j]) +
221 std::pow(parabolapTime[j], 2) - std::pow(parabolapTime[j - 1], 2);
222
223 b = (b1 * b2 - b3 * b4) / (b5 * b6);
224
225
226
227 c = bipolarpTime[
j - 1] -
a * std::pow(parabolapTime[j - 1], 2) +
b * parabolapTime[
j - 1];
228
229
230
231 double correctedTime =
a *
res.time *
res.time +
b *
res.time +
c;
232
233 if (correctedTime != 0.0) {
234 doPositionCorrection = true;
235
236 if (samplingPhase == 0)
res.time = correctedTime;
237 if (samplingPhase == 1)
res.time = correctedTime - 25;
238 }
239
241 }
242
243 if (doPositionCorrection) {
245 for (l = 0;
l < 150;
l++) {
246 if (
res.time < parabolapTime[l]) {
247
248 break;
249 }
250 }
251
252 if (l > 0 && l < 149) {
253 double a_1 = (amplCorrValue[
l] - amplCorrValue[
l - 1]);
254 double a_2 = (parabolapTime[
l - 1] + parabolapTime[
l]);
255 double a_3 =
256 ((std::pow(parabolapTime[l + 1], 2) - std::pow(parabolapTime[l - 1], 2)) * (amplCorrValue[
l] - amplCorrValue[
l - 1]) -
257 (amplCorrValue[
l + 1] - amplCorrValue[
l - 1]) * (std::pow(parabolapTime[l], 2) - std::pow(parabolapTime[l - 1], 2)));
258 double a_4 = (parabolapTime[
l - 1] + parabolapTime[
l + 1]) *
259 ((parabolapTime[l - 1] - parabolapTime[l + 1]) * (parabolapTime[l - 1] + parabolapTime[l]) +
260 std::pow(parabolapTime[l], 2) - std::pow(parabolapTime[l - 1], 2));
261 double a_5 = std::pow(parabolapTime[l], 2) - std::pow(parabolapTime[l - 1], 2);
262
263 double aConst = (a_1 + (a_2 * a_3 / a_4)) / a_5;
264
265 double b_1 = (amplCorrValue[
l + 1] - amplCorrValue[
l - 1]);
266 double b_2 = std::pow(parabolapTime[l], 2) - std::pow(parabolapTime[l - 1], 2);
267 double b_3 = std::pow(parabolapTime[l + 1], 2) - std::pow(parabolapTime[l - 1], 2);
268 double b_4 = (amplCorrValue[
l] - amplCorrValue[
l - 1]);
269 double b_5 = (parabolapTime[
l - 1] + parabolapTime[
l + 1]);
270 double b_6 = (parabolapTime[
l - 1] - parabolapTime[
l + 1]) * (parabolapTime[l - 1] + parabolapTime[l]) +
271 std::pow(parabolapTime[l], 2) - std::pow(parabolapTime[l - 1], 2);
272
273 double bConst = (b_1 * b_2 - b_3 * b_4) / (b_5 * b_6);
274
275
276 double cConst = amplCorrValue[
l - 1] - aConst * std::pow(parabolapTime[l - 1], 2) + bConst * parabolapTime[
l - 1];
278
280
282 }
283 }
284
286
287 res.time_beforeT0Corr =
res.time;
288
291
292 res.time =
res.time_beforeT0Corr - t0base - 12.5 * t0phase;
293 }
294
295 for (
unsigned int i = 0;
i < chgs.size(); ++
i) {
296 if (
m_cscCalibTool->numberOfElectronsToADCCount(stripHash,
int(ped + chgs[i])) >= 4090) {
299 }
300 }
301
302 if (stripStatusWord & 0x1) {
305 } else if ((stripStatusWord >> 1) & 0x1) {
308 }
309
310 float max = -4090000;
311
312 for (
unsigned int i = 0;
i < chgs.size(); ++
i) {
315
316 }
317 }
318
321 if (
res.time < -500) {
323 }
else if (
res.time > 500) {
325 }
328 } else {
330 }
331
332
333
334
335
336
337
338
339
341
342
344 res.dcharge = sqrt(
res.dcharge *
res.dcharge + dqprop * dqprop);
345
346
347
349}
#define ATH_MSG_WARNING(x)
std::pair< std::vector< unsigned int >, bool > res
ToolHandle< ICscCalibTool > m_cscCalibTool
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
@ CscStrStatParabolaFailed
@ CscStrStatUndefined
Undefined, should not happen, most likely indicates a problem.
@ CscTimeSuccess
Time measurement is successful to use.
@ CscTimeStatusUndefined
Time is not assessed indicating potential bug.
@ CscTimeEarly
Not successful time measurement but samples indicates early time below -50ns in RAW time.
@ CscTimeLate
Not successful time measurement but samples indicates late time above 200ns in RAW time.
@ CscTimeUnavailable
Time information is not available due to dead/noise/stuck bit channels.
l
Printing final latex table to .tex output file.
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)