71 rave::Vector7D raveState(aParticlePtr->
getX(), aParticlePtr->
getY(), aParticlePtr->
getZ(), aParticlePtr->
getPx(),
76 for (
int i = 0; i < 7; i++) {
77 for (
int j = 0; j < 7; j++) {
78 if (i < 3 && j < 3) covE(i, j) = covP(i + 4, j + 4);
79 if (i > 2 && j > 2) covE(i, j) = covP(i - 3, j - 3);
80 if (i < 3 && j > 2) covE(i, j) = covP(i + 4, j - 3);
81 if (i > 2 && j < 3) covE(i, j) = covP(i - 3, j + 4);
87 rave::Covariance7D raveCov(cov(0, 0), cov(0, 1), cov(0, 2),
88 cov(1, 1), cov(1, 2), cov(2, 2),
89 cov(0, 3), cov(0, 4), cov(0, 5),
90 cov(1, 3), cov(1, 4), cov(1, 5),
91 cov(2, 3), cov(2, 4), cov(2, 5),
92 cov(3, 3), cov(3, 4), cov(3, 5),
93 cov(4, 4), cov(4, 5), cov(5, 5),
94 cov(0, 6), cov(1, 6), cov(2, 6),
95 cov(3, 6), cov(4, 6), cov(5, 6),
98 rave::TransientTrackKinematicParticle aRaveParticle(raveState, raveCov, rave::Charge(aParticlePtr->
getCharge()), 1, 1);
138 int nOfVertices = -100;
142 const rave::Covariance3D bsCovRave(bsCov(0, 0), bsCov(0, 1), bsCov(0, 2), bsCov(1, 1), bsCov(1, 2), bsCov(2, 2));
149 rave::KinematicConstraint cs2 = rave::KinematicConstraintBuilder().createMultiTrackMassKinematicConstraint(
177 rave::Vector7D raveState(aParticlePtr->
getX(), aParticlePtr->
getY(), aParticlePtr->
getZ(), aParticlePtr->
getPx(),
185 for (
int i = 0; i < 7; i++) {
186 for (
int j = 0; j < 7; j++) {
187 if (i < 3 && j < 3) covE(i, j) = covP(i + 4, j + 4);
188 if (i > 2 && j > 2) covE(i, j) = covP(i - 3, j - 3);
189 if (i < 3 && j > 2) covE(i, j) = covP(i + 4, j - 3);
190 if (i > 2 && j < 3) covE(i, j) = covP(i - 3, j + 4);
196 rave::Covariance7D raveCov(cov(0, 0), cov(0, 1), cov(0, 2),
197 cov(1, 1), cov(1, 2), cov(2, 2),
198 cov(0, 3), cov(0, 4), cov(0, 5),
199 cov(1, 3), cov(1, 4), cov(1, 5),
200 cov(2, 3), cov(2, 4), cov(2, 5),
201 cov(3, 3), cov(3, 4), cov(3, 5),
202 cov(4, 4), cov(4, 5), cov(5, 5),
203 cov(0, 6), cov(1, 6), cov(2, 6),
204 cov(3, 6), cov(4, 6), cov(5, 6),
207 rave::TransientTrackKinematicParticle aRaveParticle(raveState, raveCov, rave::Charge(aParticlePtr->
getCharge()), chi2, ndf);
209 std::vector< rave::KinematicParticle > parts; parts.push_back(aRaveParticle);
211 rave::KinematicConstraint constraint = rave::KinematicConstraintBuilder().createMassKinematicConstraint(
217 constraint,
"ppf:lppf");
222 B2ERROR(
"[RaveKinematicVertexFitter]: VertexException saying ParentParticleFitter::error inverting covariance matrix occurred");
235 rave::Vector7D fittedState;
236 rave::Covariance7D fittedCov;
250 if (nOfVertices == 0) {
255 rave::KinematicVertex fittedVertex =
m_fittedResult.currentDecayVertex();
260 m_fittedPos.SetXYZ(fittedVertex.position().x(), fittedVertex.position().y(), fittedVertex.position().z());
270 m_fitted4Vector.SetXYZT(fittedState.p4().p3().x(), fittedState.p4().p3().y(), fittedState.p4().p3().z(), fittedState.p4().energy());
274 TMatrixDSym fitted7CovM(7);
276 fitted7CovM(3, 6) = fittedCov.dpxm(); fitted7CovM(6, 3) = fitted7CovM(3, 6);
277 fitted7CovM(4, 6) = fittedCov.dpym(); fitted7CovM(6, 4) = fitted7CovM(4, 6);
278 fitted7CovM(5, 6) = fittedCov.dpzm(); fitted7CovM(6, 5) = fitted7CovM(5, 6);
279 fitted7CovM(6, 6) = fittedCov.dmm(); fitted7CovM(6, 6) = fitted7CovM(6, 6);
280 fitted7CovM(0, 6) = fittedCov.dxm(); fitted7CovM(6, 0) = fitted7CovM(0, 6);
281 fitted7CovM(1, 6) = fittedCov.dym(); fitted7CovM(6, 1) = fitted7CovM(1, 6);
282 fitted7CovM(2, 6) = fittedCov.dzm(); fitted7CovM(6, 2) = fitted7CovM(2, 6);
284 fitted7CovM(3, 3) = fittedCov.dpxpx(); fitted7CovM(3, 3) = fitted7CovM(3, 3);
285 fitted7CovM(3, 4) = fittedCov.dpxpy(); fitted7CovM(4, 3) = fitted7CovM(3, 4);
286 fitted7CovM(3, 5) = fittedCov.dpxpz(); fitted7CovM(5, 3) = fitted7CovM(3, 5);
287 fitted7CovM(3, 0) = fittedCov.dxpx(); fitted7CovM(0, 3) = fitted7CovM(3, 0);
288 fitted7CovM(3, 1) = fittedCov.dypx(); fitted7CovM(1, 3) = fitted7CovM(3, 1);
289 fitted7CovM(3, 2) = fittedCov.dzpx(); fitted7CovM(2, 3) = fitted7CovM(3, 2);
291 fitted7CovM(4, 4) = fittedCov.dpypy(); fitted7CovM(4, 4) = fitted7CovM(4, 4);
292 fitted7CovM(4, 5) = fittedCov.dpypz(); fitted7CovM(5, 4) = fitted7CovM(4, 5);
293 fitted7CovM(4, 0) = fittedCov.dxpy(); fitted7CovM(0, 4) = fitted7CovM(4, 0);
294 fitted7CovM(4, 1) = fittedCov.dypy(); fitted7CovM(1, 4) = fitted7CovM(4, 1);
295 fitted7CovM(4, 2) = fittedCov.dzpy(); fitted7CovM(2, 4) = fitted7CovM(4, 2);
297 fitted7CovM(5, 5) = fittedCov.dpzpz(); fitted7CovM(5, 5) = fitted7CovM(5, 5);
298 fitted7CovM(5, 0) = fittedCov.dxpz(); fitted7CovM(0, 5) = fitted7CovM(5, 0);
299 fitted7CovM(5, 1) = fittedCov.dypz(); fitted7CovM(1, 5) = fitted7CovM(5, 1);
300 fitted7CovM(5, 2) = fittedCov.dzpz(); fitted7CovM(2, 5) = fitted7CovM(5, 2);
302 fitted7CovM(0, 0) = fittedCov.dxx(); fitted7CovM(0, 0) = fitted7CovM(0, 0);
303 fitted7CovM(0, 1) = fittedCov.dxy(); fitted7CovM(1, 0) = fitted7CovM(0, 1);
304 fitted7CovM(0, 2) = fittedCov.dxz(); fitted7CovM(2, 0) = fitted7CovM(0, 2);
306 fitted7CovM(1, 1) = fittedCov.dyy(); fitted7CovM(1, 1) = fitted7CovM(1, 1);
307 fitted7CovM(1, 2) = fittedCov.dyz(); fitted7CovM(2, 1) = fitted7CovM(1, 2);
309 fitted7CovM(2, 2) = fittedCov.dzz(); fitted7CovM(2, 2) = fitted7CovM(2, 2);
313 for (
int i = 0; i < 7; i++) {
314 for (
int j = 0; j < 7; j++) {
315 if (i < 4 && j < 4)
m_fitted7Cov(i, j) = fitted7CovE(i + 3, j + 3);
316 if (i > 3 && j > 3)
m_fitted7Cov(i, j) = fitted7CovE(i - 4, j - 4);
317 if (i < 4 && j > 3)
m_fitted7Cov(i, j) = fitted7CovE(i + 3, j - 4);
318 if (i > 3 && j < 4)
m_fitted7Cov(i, j) = fitted7CovE(i - 4, j + 3);
334 std::vector< rave::KinematicParticle > rDau =
m_fittedResult.daughterParticles();
336 if (rDau.size() == bDau.size()) {
337 for (
unsigned ii = 0; ii < bDau.size(); ii++) {
338 rave::Vector7D fittedState;
339 rave::Covariance7D fittedCov;
340 fittedState = rDau[ii].fullstate();
341 fittedCov = rDau[ii].fullerror();
343 ROOT::Math::PxPyPzEVector p4(fittedState.p4().p3().x(), fittedState.p4().p3().y(), fittedState.p4().p3().z(),
344 fittedState.p4().energy());
346 ROOT::Math::XYZVector x3(fittedState.x(), fittedState.y(), fittedState.z());
349 TMatrixDSym fitted7CovM(7);
350 fitted7CovM(3, 6) = fittedCov.dpxm(); fitted7CovM(6, 3) = fitted7CovM(3, 6);
351 fitted7CovM(4, 6) = fittedCov.dpym(); fitted7CovM(6, 4) = fitted7CovM(4, 6);
352 fitted7CovM(5, 6) = fittedCov.dpzm(); fitted7CovM(6, 5) = fitted7CovM(5, 6);
353 fitted7CovM(6, 6) = fittedCov.dmm(); fitted7CovM(6, 6) = fitted7CovM(6, 6);
354 fitted7CovM(0, 6) = fittedCov.dxm(); fitted7CovM(6, 0) = fitted7CovM(0, 6);
355 fitted7CovM(1, 6) = fittedCov.dym(); fitted7CovM(6, 1) = fitted7CovM(1, 6);
356 fitted7CovM(2, 6) = fittedCov.dzm(); fitted7CovM(6, 2) = fitted7CovM(2, 6);
358 fitted7CovM(3, 3) = fittedCov.dpxpx(); fitted7CovM(3, 3) = fitted7CovM(3, 3);
359 fitted7CovM(3, 4) = fittedCov.dpxpy(); fitted7CovM(4, 3) = fitted7CovM(3, 4);
360 fitted7CovM(3, 5) = fittedCov.dpxpz(); fitted7CovM(5, 3) = fitted7CovM(3, 5);
361 fitted7CovM(3, 0) = fittedCov.dxpx(); fitted7CovM(0, 3) = fitted7CovM(3, 0);
362 fitted7CovM(3, 1) = fittedCov.dypx(); fitted7CovM(1, 3) = fitted7CovM(3, 1);
363 fitted7CovM(3, 2) = fittedCov.dzpx(); fitted7CovM(2, 3) = fitted7CovM(3, 2);
365 fitted7CovM(4, 4) = fittedCov.dpypy(); fitted7CovM(4, 4) = fitted7CovM(4, 4);
366 fitted7CovM(4, 5) = fittedCov.dpypz(); fitted7CovM(5, 4) = fitted7CovM(4, 5);
367 fitted7CovM(4, 0) = fittedCov.dxpy(); fitted7CovM(0, 4) = fitted7CovM(4, 0);
368 fitted7CovM(4, 1) = fittedCov.dypy(); fitted7CovM(1, 4) = fitted7CovM(4, 1);
369 fitted7CovM(4, 2) = fittedCov.dzpy(); fitted7CovM(2, 4) = fitted7CovM(4, 2);
371 fitted7CovM(5, 5) = fittedCov.dpzpz(); fitted7CovM(5, 5) = fitted7CovM(5, 5);
372 fitted7CovM(5, 0) = fittedCov.dxpz(); fitted7CovM(0, 5) = fitted7CovM(5, 0);
373 fitted7CovM(5, 1) = fittedCov.dypz(); fitted7CovM(1, 5) = fitted7CovM(5, 1);
374 fitted7CovM(5, 2) = fittedCov.dzpz(); fitted7CovM(2, 5) = fitted7CovM(5, 2);
376 fitted7CovM(0, 0) = fittedCov.dxx(); fitted7CovM(0, 0) = fitted7CovM(0, 0);
377 fitted7CovM(0, 1) = fittedCov.dxy(); fitted7CovM(1, 0) = fitted7CovM(0, 1);
378 fitted7CovM(0, 2) = fittedCov.dxz(); fitted7CovM(2, 0) = fitted7CovM(0, 2);
380 fitted7CovM(1, 1) = fittedCov.dyy(); fitted7CovM(1, 1) = fitted7CovM(1, 1);
381 fitted7CovM(1, 2) = fittedCov.dyz(); fitted7CovM(2, 1) = fitted7CovM(1, 2);
383 fitted7CovM(2, 2) = fittedCov.dzz(); fitted7CovM(2, 2) = fitted7CovM(2, 2);
387 TMatrixDSym fitted7CovDauM(7);
388 for (
int i = 0; i < 7; i++) {
389 for (
int j = 0; j < 7; j++) {
390 if (i < 4 && j < 4) fitted7CovDauM(i, j) = fitted7CovE(i + 3, j + 3);
391 if (i > 3 && j > 3) fitted7CovDauM(i, j) = fitted7CovE(i - 4, j - 4);
392 if (i < 4 && j > 3) fitted7CovDauM(i, j) = fitted7CovE(i + 3, j - 4);
393 if (i > 3 && j < 4) fitted7CovDauM(i, j) = fitted7CovE(i - 4, j + 3);
397 float pValDau = rDau[ii].chi2();
399 bDau[ii]->updateMomentum(p4, x3, fitted7CovDauM, pValDau);
403 }
else B2ERROR(
"Error in Daughters update");