69 rave::Vector7D raveState(aParticlePtr->
getX(), aParticlePtr->
getY(), aParticlePtr->
getZ(), aParticlePtr->
getPx(),
74 for (
int i = 0; i < 7; i++) {
75 for (
int j = 0; j < 7; j++) {
76 if (i < 3 && j < 3) covE(i, j) = covP(i + 4, j + 4);
77 if (i > 2 && j > 2) covE(i, j) = covP(i - 3, j - 3);
78 if (i < 3 && j > 2) covE(i, j) = covP(i + 4, j - 3);
79 if (i > 2 && j < 3) covE(i, j) = covP(i - 3, j + 4);
85 rave::Covariance7D raveCov(cov(0, 0), cov(0, 1), cov(0, 2),
86 cov(1, 1), cov(1, 2), cov(2, 2),
87 cov(0, 3), cov(0, 4), cov(0, 5),
88 cov(1, 3), cov(1, 4), cov(1, 5),
89 cov(2, 3), cov(2, 4), cov(2, 5),
90 cov(3, 3), cov(3, 4), cov(3, 5),
91 cov(4, 4), cov(4, 5), cov(5, 5),
92 cov(0, 6), cov(1, 6), cov(2, 6),
93 cov(3, 6), cov(4, 6), cov(5, 6),
96 rave::TransientTrackKinematicParticle aRaveParticle(raveState, raveCov, rave::Charge(aParticlePtr->
getCharge()), 1, 1);
136 int nOfVertices = -100;
140 const rave::Covariance3D bsCovRave(bsCov(0, 0), bsCov(0, 1), bsCov(0, 2), bsCov(1, 1), bsCov(1, 2), bsCov(2, 2));
147 rave::KinematicConstraint cs2 = rave::KinematicConstraintBuilder().createMultiTrackMassKinematicConstraint(
175 rave::Vector7D raveState(aParticlePtr->
getX(), aParticlePtr->
getY(), aParticlePtr->
getZ(), aParticlePtr->
getPx(),
183 for (
int i = 0; i < 7; i++) {
184 for (
int j = 0; j < 7; j++) {
185 if (i < 3 && j < 3) covE(i, j) = covP(i + 4, j + 4);
186 if (i > 2 && j > 2) covE(i, j) = covP(i - 3, j - 3);
187 if (i < 3 && j > 2) covE(i, j) = covP(i + 4, j - 3);
188 if (i > 2 && j < 3) covE(i, j) = covP(i - 3, j + 4);
194 rave::Covariance7D raveCov(cov(0, 0), cov(0, 1), cov(0, 2),
195 cov(1, 1), cov(1, 2), cov(2, 2),
196 cov(0, 3), cov(0, 4), cov(0, 5),
197 cov(1, 3), cov(1, 4), cov(1, 5),
198 cov(2, 3), cov(2, 4), cov(2, 5),
199 cov(3, 3), cov(3, 4), cov(3, 5),
200 cov(4, 4), cov(4, 5), cov(5, 5),
201 cov(0, 6), cov(1, 6), cov(2, 6),
202 cov(3, 6), cov(4, 6), cov(5, 6),
205 rave::TransientTrackKinematicParticle aRaveParticle(raveState, raveCov, rave::Charge(aParticlePtr->
getCharge()), chi2, ndf);
207 std::vector< rave::KinematicParticle > parts; parts.push_back(aRaveParticle);
209 rave::KinematicConstraint constraint = rave::KinematicConstraintBuilder().createMassKinematicConstraint(
215 constraint,
"ppf:lppf");
220 B2ERROR(
"[RaveKinematicVertexFitter]: VertexException saying ParentParticleFitter::error inverting covariance matrix occurred");
233 rave::Vector7D fittedState;
234 rave::Covariance7D fittedCov;
248 if (nOfVertices == 0) {
253 rave::KinematicVertex fittedVertex =
m_fittedResult.currentDecayVertex();
258 m_fittedPos.SetXYZ(fittedVertex.position().x(), fittedVertex.position().y(), fittedVertex.position().z());
268 m_fitted4Vector.SetXYZT(fittedState.p4().p3().x(), fittedState.p4().p3().y(), fittedState.p4().p3().z(), fittedState.p4().energy());
272 TMatrixDSym fitted7CovM(7);
274 fitted7CovM(3, 6) = fittedCov.dpxm(); fitted7CovM(6, 3) = fitted7CovM(3, 6);
275 fitted7CovM(4, 6) = fittedCov.dpym(); fitted7CovM(6, 4) = fitted7CovM(4, 6);
276 fitted7CovM(5, 6) = fittedCov.dpzm(); fitted7CovM(6, 5) = fitted7CovM(5, 6);
277 fitted7CovM(6, 6) = fittedCov.dmm(); fitted7CovM(6, 6) = fitted7CovM(6, 6);
278 fitted7CovM(0, 6) = fittedCov.dxm(); fitted7CovM(6, 0) = fitted7CovM(0, 6);
279 fitted7CovM(1, 6) = fittedCov.dym(); fitted7CovM(6, 1) = fitted7CovM(1, 6);
280 fitted7CovM(2, 6) = fittedCov.dzm(); fitted7CovM(6, 2) = fitted7CovM(2, 6);
282 fitted7CovM(3, 3) = fittedCov.dpxpx(); fitted7CovM(3, 3) = fitted7CovM(3, 3);
283 fitted7CovM(3, 4) = fittedCov.dpxpy(); fitted7CovM(4, 3) = fitted7CovM(3, 4);
284 fitted7CovM(3, 5) = fittedCov.dpxpz(); fitted7CovM(5, 3) = fitted7CovM(3, 5);
285 fitted7CovM(3, 0) = fittedCov.dxpx(); fitted7CovM(0, 3) = fitted7CovM(3, 0);
286 fitted7CovM(3, 1) = fittedCov.dypx(); fitted7CovM(1, 3) = fitted7CovM(3, 1);
287 fitted7CovM(3, 2) = fittedCov.dzpx(); fitted7CovM(2, 3) = fitted7CovM(3, 2);
289 fitted7CovM(4, 4) = fittedCov.dpypy(); fitted7CovM(4, 4) = fitted7CovM(4, 4);
290 fitted7CovM(4, 5) = fittedCov.dpypz(); fitted7CovM(5, 4) = fitted7CovM(4, 5);
291 fitted7CovM(4, 0) = fittedCov.dxpy(); fitted7CovM(0, 4) = fitted7CovM(4, 0);
292 fitted7CovM(4, 1) = fittedCov.dypy(); fitted7CovM(1, 4) = fitted7CovM(4, 1);
293 fitted7CovM(4, 2) = fittedCov.dzpy(); fitted7CovM(2, 4) = fitted7CovM(4, 2);
295 fitted7CovM(5, 5) = fittedCov.dpzpz(); fitted7CovM(5, 5) = fitted7CovM(5, 5);
296 fitted7CovM(5, 0) = fittedCov.dxpz(); fitted7CovM(0, 5) = fitted7CovM(5, 0);
297 fitted7CovM(5, 1) = fittedCov.dypz(); fitted7CovM(1, 5) = fitted7CovM(5, 1);
298 fitted7CovM(5, 2) = fittedCov.dzpz(); fitted7CovM(2, 5) = fitted7CovM(5, 2);
300 fitted7CovM(0, 0) = fittedCov.dxx(); fitted7CovM(0, 0) = fitted7CovM(0, 0);
301 fitted7CovM(0, 1) = fittedCov.dxy(); fitted7CovM(1, 0) = fitted7CovM(0, 1);
302 fitted7CovM(0, 2) = fittedCov.dxz(); fitted7CovM(2, 0) = fitted7CovM(0, 2);
304 fitted7CovM(1, 1) = fittedCov.dyy(); fitted7CovM(1, 1) = fitted7CovM(1, 1);
305 fitted7CovM(1, 2) = fittedCov.dyz(); fitted7CovM(2, 1) = fitted7CovM(1, 2);
307 fitted7CovM(2, 2) = fittedCov.dzz(); fitted7CovM(2, 2) = fitted7CovM(2, 2);
311 for (
int i = 0; i < 7; i++) {
312 for (
int j = 0; j < 7; j++) {
313 if (i < 4 && j < 4)
m_fitted7Cov(i, j) = fitted7CovE(i + 3, j + 3);
314 if (i > 3 && j > 3)
m_fitted7Cov(i, j) = fitted7CovE(i - 4, j - 4);
315 if (i < 4 && j > 3)
m_fitted7Cov(i, j) = fitted7CovE(i + 3, j - 4);
316 if (i > 3 && j < 4)
m_fitted7Cov(i, j) = fitted7CovE(i - 4, j + 3);
332 std::vector< rave::KinematicParticle > rDau =
m_fittedResult.daughterParticles();
334 if (rDau.size() == bDau.size()) {
335 for (
unsigned ii = 0; ii < bDau.size(); ii++) {
336 rave::Vector7D fittedState;
337 rave::Covariance7D fittedCov;
338 fittedState = rDau[ii].fullstate();
339 fittedCov = rDau[ii].fullerror();
341 ROOT::Math::PxPyPzEVector p4(fittedState.p4().p3().x(), fittedState.p4().p3().y(), fittedState.p4().p3().z(),
342 fittedState.p4().energy());
344 ROOT::Math::XYZVector x3(fittedState.x(), fittedState.y(), fittedState.z());
347 TMatrixDSym fitted7CovM(7);
348 fitted7CovM(3, 6) = fittedCov.dpxm(); fitted7CovM(6, 3) = fitted7CovM(3, 6);
349 fitted7CovM(4, 6) = fittedCov.dpym(); fitted7CovM(6, 4) = fitted7CovM(4, 6);
350 fitted7CovM(5, 6) = fittedCov.dpzm(); fitted7CovM(6, 5) = fitted7CovM(5, 6);
351 fitted7CovM(6, 6) = fittedCov.dmm(); fitted7CovM(6, 6) = fitted7CovM(6, 6);
352 fitted7CovM(0, 6) = fittedCov.dxm(); fitted7CovM(6, 0) = fitted7CovM(0, 6);
353 fitted7CovM(1, 6) = fittedCov.dym(); fitted7CovM(6, 1) = fitted7CovM(1, 6);
354 fitted7CovM(2, 6) = fittedCov.dzm(); fitted7CovM(6, 2) = fitted7CovM(2, 6);
356 fitted7CovM(3, 3) = fittedCov.dpxpx(); fitted7CovM(3, 3) = fitted7CovM(3, 3);
357 fitted7CovM(3, 4) = fittedCov.dpxpy(); fitted7CovM(4, 3) = fitted7CovM(3, 4);
358 fitted7CovM(3, 5) = fittedCov.dpxpz(); fitted7CovM(5, 3) = fitted7CovM(3, 5);
359 fitted7CovM(3, 0) = fittedCov.dxpx(); fitted7CovM(0, 3) = fitted7CovM(3, 0);
360 fitted7CovM(3, 1) = fittedCov.dypx(); fitted7CovM(1, 3) = fitted7CovM(3, 1);
361 fitted7CovM(3, 2) = fittedCov.dzpx(); fitted7CovM(2, 3) = fitted7CovM(3, 2);
363 fitted7CovM(4, 4) = fittedCov.dpypy(); fitted7CovM(4, 4) = fitted7CovM(4, 4);
364 fitted7CovM(4, 5) = fittedCov.dpypz(); fitted7CovM(5, 4) = fitted7CovM(4, 5);
365 fitted7CovM(4, 0) = fittedCov.dxpy(); fitted7CovM(0, 4) = fitted7CovM(4, 0);
366 fitted7CovM(4, 1) = fittedCov.dypy(); fitted7CovM(1, 4) = fitted7CovM(4, 1);
367 fitted7CovM(4, 2) = fittedCov.dzpy(); fitted7CovM(2, 4) = fitted7CovM(4, 2);
369 fitted7CovM(5, 5) = fittedCov.dpzpz(); fitted7CovM(5, 5) = fitted7CovM(5, 5);
370 fitted7CovM(5, 0) = fittedCov.dxpz(); fitted7CovM(0, 5) = fitted7CovM(5, 0);
371 fitted7CovM(5, 1) = fittedCov.dypz(); fitted7CovM(1, 5) = fitted7CovM(5, 1);
372 fitted7CovM(5, 2) = fittedCov.dzpz(); fitted7CovM(2, 5) = fitted7CovM(5, 2);
374 fitted7CovM(0, 0) = fittedCov.dxx(); fitted7CovM(0, 0) = fitted7CovM(0, 0);
375 fitted7CovM(0, 1) = fittedCov.dxy(); fitted7CovM(1, 0) = fitted7CovM(0, 1);
376 fitted7CovM(0, 2) = fittedCov.dxz(); fitted7CovM(2, 0) = fitted7CovM(0, 2);
378 fitted7CovM(1, 1) = fittedCov.dyy(); fitted7CovM(1, 1) = fitted7CovM(1, 1);
379 fitted7CovM(1, 2) = fittedCov.dyz(); fitted7CovM(2, 1) = fitted7CovM(1, 2);
381 fitted7CovM(2, 2) = fittedCov.dzz(); fitted7CovM(2, 2) = fitted7CovM(2, 2);
385 TMatrixDSym fitted7CovDauM(7);
386 for (
int i = 0; i < 7; i++) {
387 for (
int j = 0; j < 7; j++) {
388 if (i < 4 && j < 4) fitted7CovDauM(i, j) = fitted7CovE(i + 3, j + 3);
389 if (i > 3 && j > 3) fitted7CovDauM(i, j) = fitted7CovE(i - 4, j - 4);
390 if (i < 4 && j > 3) fitted7CovDauM(i, j) = fitted7CovE(i + 3, j - 4);
391 if (i > 3 && j < 4) fitted7CovDauM(i, j) = fitted7CovE(i - 4, j + 3);
395 float pValDau = rDau[ii].chi2();
397 bDau[ii]->updateMomentum(p4, x3, fitted7CovDauM, pValDau);
401 }
else B2ERROR(
"Error in Daughters update");