126 TMatrixT<Double_t> rawCov =
hit->getRawHitCov();
129 std::vector<double> tmpRawCov;
130 tmpRawCov.push_back(rawCov[0][0]);
131 tmpRawCov.push_back(rawCov[1][1]);
132 tmpRawCov.push_back(rawCov[2][2]);
133 tmpRawCov.push_back(rawCov[2][1]);
135 static std::vector<double> oldRawCov(tmpRawCov);
136 static std::vector<double> oldOldRawCov(tmpRawCov);
137 static GFDetPlane planePrevPrev(planePrev);
138 rawCov.ResizeTo(7, 7);
141 rawCov[0][0] = tmpRawCov[0];
142 rawCov[1][1] = tmpRawCov[1];
143 rawCov[2][2] = tmpRawCov[2];
144 rawCov[1][2] = tmpRawCov[3];
145 rawCov[2][1] = tmpRawCov[3];
149 TMatrixT<Double_t> jac(7, 5);
159 Double_t mom = fabs(1.0 / state[0][0]);
160 Double_t beta = mom / sqrt(mass * mass + mom * mom);
161 dist = (plane.getO() - planePrev.getO()).Mag();
162 C = 0.0136 / beta * sqrt(
dist / 14.0) * (1 + 0.038 * log(
dist / 14.0));
163 TVector3 _D(plane.getNormal());
171 (oldRawCov[0] + tmpRawCov[0]) / pow(
dist, 4.) *
172 (pow((plane.getO() - planePrev.getO()).
Y(), 2.) +
173 pow((plane.getO() - planePrev.getO()).
Z(), 2.)) +
174 pow((plane.getO() - planePrev.getO()).
X(), 2.) *
175 (pow((plane.getO() - planePrev.getO()).
Y(), 2.) * (oldRawCov[1] + tmpRawCov[1]) +
176 pow((plane.getO() - planePrev.getO()).
Z(), 2.) * (oldRawCov[2] + tmpRawCov[2])) /
179 + 3.0 * (plane.getO() - planePrev.getO()).
X() * (plane.getO() - planePrev.getO()).
Y() *
180 (plane.getO() - planePrev.getO()).
Z() / pow(
dist, 5.) * (tmpRawCov[3] + oldRawCov[3]);
183 (oldRawCov[1] + tmpRawCov[1]) / pow(
dist, 4.) *
184 (pow((plane.getO() - planePrev.getO()).
X(), 2.) +
185 pow((plane.getO() - planePrev.getO()).
Z(), 2.)) +
186 pow((plane.getO() - planePrev.getO()).
Y(), 2.) *
187 (pow((plane.getO() - planePrev.getO()).
X(), 2.) * (oldRawCov[0] + tmpRawCov[0]) +
188 pow((plane.getO() - planePrev.getO()).
Z(), 2.) * (oldRawCov[2] + tmpRawCov[2])) /
192 ((plane.getO() - planePrev.getO()).
X() * (plane.getO() - planePrev.getO()).
Y() *
193 (plane.getO() - planePrev.getO()).
Z() / pow(
dist, 5.) +
194 (plane.getO() - planePrev.getO()).
Z() / pow(
dist, 3.)) *
195 (tmpRawCov[3] + oldRawCov[3]);
198 (oldRawCov[2] + tmpRawCov[2]) / pow(
dist, 4.) *
199 (pow((plane.getO() - planePrev.getO()).
X(), 2.) +
200 pow((plane.getO() - planePrev.getO()).
Y(), 2.)) +
201 pow((plane.getO() - planePrev.getO()).
Z(), 2.) *
202 (pow((plane.getO() - planePrev.getO()).
Y(), 2.) * (oldRawCov[0] + tmpRawCov[0]) +
203 pow((plane.getO() - planePrev.getO()).
X(), 2.) * (oldRawCov[1] + tmpRawCov[1])) /
207 ((plane.getO() - planePrev.getO()).
X() * (plane.getO() - planePrev.getO()).
Y() *
208 (plane.getO() - planePrev.getO()).
Z() / pow(
dist, 5.) +
209 (plane.getO() - planePrev.getO()).
Y() / pow(
dist, 3.)) *
210 (tmpRawCov[3] + oldRawCov[3]);
212 Double_t num = (plane.getO() - planePrev.getO()) * (planePrev.getO() - planePrevPrev.getO());
213 Double_t d1 = (plane.getO() - planePrev.getO()).Mag();
214 Double_t d2 = (planePrev.getO() - planePrevPrev.getO()).Mag();
221 pow(((planePrev.getO() - planePrevPrev.getO()).
X() * d1 * d2 -
222 num * (plane.getO() - planePrev.getO()).
X() * d2 / d1) /
223 pow(d1, 2.0) / pow(d2, 2.0),
226 pow(((planePrev.getO() - planePrevPrev.getO()).
Y() * d1 * d2 +
227 num * (plane.getO() - planePrev.getO()).
Y() * d2 / d1) /
228 pow(d1, 2.0) / pow(d2, 2.0),
231 pow(((planePrev.getO() - planePrevPrev.getO()).
Z() * d1 * d2 +
232 num * (plane.getO() - planePrev.getO()).
Z() * d2 / d1) /
233 pow(d1, 2.0) / pow(d2, 2.0),
237 pow(((plane.getO() - planePrev.getO()).
X() * d1 * d2 -
238 num * (planePrev.getO() - planePrevPrev.getO()).
X() * d1 / d2) /
239 pow(d1, 2.0) / pow(d2, 2.0),
242 pow(((plane.getO() - planePrev.getO()).
Y() * d1 * d2 -
243 num * (planePrev.getO() - planePrevPrev.getO()).
Y() * d1 / d2) /
244 pow(d1, 2.0) / pow(d2, 2.0),
247 pow(((plane.getO() - planePrev.getO()).
Z() * d1 * d2 -
248 num * (planePrev.getO() - planePrevPrev.getO()).
Z() * d1 / d2) /
249 pow(d1, 2.0) / pow(d2, 2.0),
253 pow(((plane.getO() - planePrevPrev.getO()).
X() * d1 * d2 -
254 num * (plane.getO() - planePrev.getO()).
X() * d2 / d1 +
255 num * (planePrev.getO() - planePrevPrev.getO()).
X() * d1 / d2) /
256 pow(d1, 2.0) / pow(d2, 2.0),
259 pow(((plane.getO() - planePrevPrev.getO()).
Y() * d1 * d2 -
260 num * (plane.getO() - planePrev.getO()).
Y() * d2 / d1 +
261 num * (planePrev.getO() - planePrevPrev.getO()).
Y() * d1 / d2) /
262 pow(d1, 2.0) / pow(d2, 2.0),
265 pow(((plane.getO() - planePrevPrev.getO()).
Z() * d1 * d2 -
266 num * (plane.getO() - planePrev.getO()).
Z() * d2 / d1 +
267 num * (planePrev.getO() - planePrevPrev.getO()).
Z() * d1 / d2) /
268 pow(d1, 2.0) / pow(d2, 2.0),
273 + ((plane.getO() - planePrev.getO()).
Z() * (planePrev.getO() - planePrevPrev.getO()).
Y() /
275 (plane.getO() - planePrev.getO()).
Y() * (planePrev.getO() - planePrevPrev.getO()).
Z() /
277 3. * (plane.getO() - planePrev.getO()).
Y() * (plane.getO() - planePrev.getO()).
Z() * num /
281 + ((planePrevPrev.getO() - planePrev.getO()).
Z() * (planePrev.getO() - plane.getO()).
Y() /
283 (planePrevPrev.getO() - planePrev.getO()).
Y() * (planePrev.getO() - plane.getO()).
Z() /
285 3. * (planePrevPrev.getO() - planePrev.getO()).
Y() *
286 (planePrevPrev.getO() - planePrev.getO()).
Z() * num / pow(d1, 5.) / d2) *
289 + (((plane.getO() - planePrev.getO()).
Y() - (planePrev.getO() - planePrevPrev.getO()).
Y()) *
290 (-(plane.getO() - planePrev.getO()).
Z() / pow(d1, 3.) / d2 +
291 (planePrev.getO() - planePrevPrev.getO()).
Z() / pow(d2, 3.) / d1) +
292 (plane.getO() - planePrev.getO()).
Y() *
293 ((-(planePrev.getO() - planePrevPrev.getO()).
Z() + (plane.getO() - planePrev.getO()).
Z()) /
295 num * (-3. * (plane.getO() - planePrev.getO()).
Z() * d1 * d2 +
296 (planePrev.getO() - planePrevPrev.getO()).
Z() * pow(d1, 3.) / d2)) /
297 pow(d1, 6.) / pow(d2, 2.) -
298 (planePrev.getO() - planePrevPrev.getO()).
Y() *
299 ((-(planePrev.getO() - planePrevPrev.getO()).
Z() + (plane.getO() - planePrev.getO()).
Z()) /
301 num * (3. * (planePrev.getO() - planePrevPrev.getO()).
Z() * d1 * d2 -
302 (plane.getO() - planePrev.getO()).
Z() * pow(d2, 3.) / d1)) /
303 pow(d1, 2.) / pow(d2, 6.)) *
307 Double_t theta(TMath::ACos((plane.getO() - planePrev.getO()).Unit() *
308 (planePrev.getO() - planePrevPrev.getO()).Unit()));
310 TMath::Min(pow(dcosTh, 2.) / pow(TMath::Sin(theta), 2.), pow(TMath::Pi() / 2.0, 2.));
314 if (d1 == 0 || d2 == 0) {
315 rawCov[3][3] = pow(0.2, 2.0);
316 rawCov[4][4] = pow(0.2, 2.0);
317 rawCov[5][5] = pow(0.2, 2.0);
318 rawCov[6][6] = pow(0.1, 2.0);
320 C = 0.0136 / beta * sqrt(
dist / 14.0) * (1 + 0.038 * log(
dist / 14.0));
326 TVector3 u = plane.getU();
327 TVector3 v = plane.getV();
328 TVector3
w = u.Cross(v);
334 double pTildeMag = pTilde.Mag();
349 jac[3][1] = 1.0 / pTildeMag * (u.X() - pTilde.X() / (pTildeMag * pTildeMag) * u * pTilde);
350 jac[4][1] = 1.0 / pTildeMag * (u.Y() - pTilde.Y() / (pTildeMag * pTildeMag) * u * pTilde);
351 jac[5][1] = 1.0 / pTildeMag * (u.Z() - pTilde.Z() / (pTildeMag * pTildeMag) * u * pTilde);
353 jac[3][2] = 1.0 / pTildeMag * (v.X() - pTilde.X() / (pTildeMag * pTildeMag) * v * pTilde);
354 jac[4][2] = 1.0 / pTildeMag * (v.Y() - pTilde.Y() / (pTildeMag * pTildeMag) * v * pTilde);
355 jac[5][2] = 1.0 / pTildeMag * (v.Z() - pTilde.Z() / (pTildeMag * pTildeMag) * v * pTilde);
357 TMatrixT<Double_t> jac_orig = jac;
358 TMatrixT<Double_t> jac_t = jac.T();
360 TMatrixT<Double_t> result = jac_t * (rawCov * jac_orig);
364 oldOldRawCov = oldRawCov;
365 oldRawCov = tmpRawCov;
366 planePrevPrev = planePrev;
Detector simulation of raw signals on wires.
constexpr double dist(const TReal *x, const TReal *y, const unsigned int dimension)