118 double sinAlpha =
EL->sinStereoLocal(SC->localPosition());
119 double cosAlpha = std::sqrt(1 - sinAlpha * sinAlpha);
121 double pNormal = trackPar.
momentum().dot(
EL->normal());
123 dphi = std::atan(pPhi / pNormal) - std::atan(
m_lorentzAngleTool->getTanLorentzAngle(iH, ctx));
127 double distance = (trackPar.
position() - SC->globalPosition()).mag();
133 if (!tbounds && !rbounds) {
138 if (distance * cosAlpha > boundsy) {
139 distance = boundsy / cosAlpha - 1;
145 distance = -distance;
147 Amg::Vector3D glob(SC->globalPosition() + distance * globalstripdir);
161 mat(0, 0) = std::pow(
width.phiR(), 2) /12.;
162 mat(1, 1) = std::pow(
width.z(), 2) /12.;
166 if (colRow.x() == 1) {
167 mat(0, 0) = std::pow(1.05 *
width.phiR(), 2) /12.;
168 }
else if (colRow.x() == 2) {
169 mat(0, 0) = std::pow(0.27 *
width.phiR(), 2) /12.;
171 mat(0, 0) = std::pow(
width.phiR(), 2) /12.;
173 mat(1, 1) = std::pow(
width.z() / colRow.y(), 2) /12.;
177 mat(0, 0) = std::pow(
getError(dphi,
int(colRow.x())) * (
EL->phiPitch() / 0.080), 2);
178 mat(1, 1) = std::pow(
width.z() / colRow.y(), 2) /12.;
187 double sn =
EL->sinStereoLocal(SC->localPosition());
188 double sn2 = sn * sn;
189 double cs2 = 1. - sn2;
190 double w =
EL->phiPitch(SC->localPosition()) /
EL->phiPitch();
191 double v0 = mat(0, 0) * w * w;
192 double v1 = mat(1, 1);
193 mat(0, 0) = (cs2 * v0 + sn2 * v1);
194 mat(1, 0) = (sn * std::sqrt(cs2) * (v0 - v1));
195 mat(0, 1) = mat(1, 0);
196 mat(1, 1) = (sn2 * v0 + cs2 * v1);
198 oldcov = std::move(mat);
209 cov(0, 0) = oldcov(0, 0);
216 ->getScaledCovariance(std::move(cov),
false, 0.0);
223 ->getScaledCovariance(std::move(cov),
true,
224 EL->sinStereoLocal(SC->localPosition()));
226 double Sn =
EL->sinStereoLocal(SC->localPosition());
227 double Sn2 = Sn * Sn;
228 double Cs2 = (1. - Sn) * (1. + Sn);
229 double SC = Sn * std::sqrt(Cs2);
230 double W =
EL->phiPitch(loct) /
EL->phiPitch();
231 double dV0 = (Cs2 * cov(0, 0) + Sn2 * cov(1, 1) +
232 2. * SC * cov(1, 0)) * (W * W - 1.);
233 cov(0, 0) += (Cs2 * dV0);
234 cov(1, 0) += (SC * dV0);
235 cov(0, 1) = cov(1, 0);
236 cov(1, 1) += (Sn2 * dV0);
242 double correction =
getCorrection(dphi,
int(colRow.x())) *
EL->hitDepthDirection();
251 constexpr float corr1[30] = {
252 0.3, 0.8, 1.1, 1.5, 1.9, 1.9, 2.1, 2.4, 2.3, 2.6,
253 2.6, 2.7, 2.8, 2.7, 2.5, 2.6, 2.8, 2.6, 2.6, 2.7,
254 2.2, 1.8, 1.8, 1.6, 1.5, 0.0, 0.0, 0.0, 0.0, 0.0
256 constexpr float corr2[30] = {
257 0.0, 0.0, 0.0, 1.0, 1.5, 1.7, 1.7, 2.3, 2.1, 2.5,
258 2.5, 2.7, 2.7, 2.9, 3.0, 3.0, 3.0, 3.0, 3.4, 3.4,
259 3.0, 3.2, 2.6, 2.6, 3.0, 2.7, 2.5, 2.4, 1.7, 1.3
263 int phiBin =
static_cast<int>(std::abs(
phi) /
deg);
265 float correction(0.);
269 correction = corr1[phiBin];
272 correction = corr2[phiBin];
280 return correction * micrometer;
285 constexpr float sigma1[60] = {
286 22.1, 21.8, 21.4, 21.0, 20.5, 20.0, 19.6, 19.1, 18.5, 18.0,
287 17.4, 17.0, 16.4, 15.8, 15.4, 14.9, 14.4, 14.1, 13.3, 13.1,
288 12.9, 12.4, 12.6, 12.2, 12.3, 12.6, 13.4, 14.2, 15.6, 19.3,
289 22.8, 29.5, 33.2, 41.8, 44.3, 48.4, 49.9, 54.0, 53.0, 56.3,
290 57.5, 56.3, 64.5, 65.7, 66.1, 69.4, 74.8, 78.3, 78.8, 79.8,
291 73.5, 73.8, 75.8, 84.3, 87.0, 99.9, 86.3, 0.0, 0.0, 0.0
293 constexpr float sigma2[60] = {
294 22.2, 20.3, 18.8, 16.0, 14.6, 13.8, 12.9, 12.9, 12.7, 12.3,
295 12.7, 12.6, 13.0, 13.3, 14.0, 14.6, 15.3, 15.9, 16.6, 17.6,
296 18.4, 19.3, 19.9, 20.5, 21.0, 21.2, 21.5, 21.4, 21.3, 21.3,
297 20.9, 20.8, 20.6, 20.7, 20.3, 20.7, 21.7, 24.4, 26.5, 29.5,
298 34.6, 41.6, 48.5, 52.3, 54.5, 58.4, 61.8, 66.7, 69.9, 72.1,
299 78.9, 79.2, 81.8, 80.9, 87.5, 99.2, 0.0, 0.0, 0.0, 0.0
301 constexpr float sigma3[60] = {
302 70.1, 73.6, 71.7, 66.9, 68.3, 66.8, 66.2, 64.8, 66.6, 63.3,
303 63.3, 60.4, 59.0, 57.1, 56.4, 54.4, 54.2, 54.4, 50.3, 48.9,
304 48.1, 41.9, 38.0, 31.8, 28.3, 23.1, 23.0, 20.3, 18.5, 17.6,
305 17.7, 16.8, 18.3, 19.3, 19.0, 20.0, 20.9, 21.6, 22.0, 22.2,
306 22.7, 22.4, 24.3, 24.8, 24.6, 27.0, 29.8, 37.0, 47.7, 49.3,
307 58.2, 60.2, 66.8, 70.8, 77.3, 80.6, 0.0, 0.0, 0.0, 0.0
309 constexpr float sigma4[60] = {
310 103.2, 100.4, 100.7, 101.2, 107.4, 100.6, 100.9, 100.4, 96.3, 98.2,
311 96.7, 94.5, 96.9, 91.7, 90.5, 89.5, 86.3, 90.6, 82.4, 89.3,
312 87.3, 77.6, 75.7, 77.2, 77.3, 84.1, 80.1, 66.9, 73.7, 72.3,
313 58.1, 65.6, 64.2, 54.7, 47.2, 44.4, 34.6, 36.4, 29.1, 25.8,
314 18.8, 21.6, 18.6, 20.3, 22.7, 23.3, 24.1, 22.4, 24.7, 24.7,
315 27.3, 30.4, 37.0, 46.4, 59.4, 62.6, 65.3, 0.0, 0.0, 0.0
317 constexpr float sigma5[60] = {
318 150.9, 139.7, 133.9, 139.8, 141.4, 134.9, 138.4, 129.3, 137.9, 128.7,
319 132.4, 130.1, 124.2, 115.8, 131.4, 115.2, 128.7, 112.8, 130.7, 129.0,
320 115.8, 101.3, 115.9, 116.1, 121.7, 109.9, 110.0, 97.2, 96.4, 107.3,
321 98.2, 80.0, 73.2, 87.0, 97.0, 88.5, 72.2, 73.9, 80.8, 75.7,
322 69.5, 67.1, 54.1, 58.9, 47.3, 50.6, 29.5, 26.6, 25.8, 20.9,
323 20.6, 21.9, 22.1, 21.1, 27.9, 41.6, 0.0, 0.0, 0.0, 0.0
327 int phiBin =
static_cast<int>(std::abs(
phi) /
deg);
333 sigma = sigma1[phiBin];
336 sigma = sigma2[phiBin];
339 sigma = sigma3[phiBin];
342 sigma = sigma4[phiBin];
345 sigma = sigma5[phiBin];
349 sigma = std::max(100.,
float(nstrip) * 80. / std::sqrt(12));
352 return sigma * micrometer;