586{
587 Trk::IVertexCascadeFitter*
fitter =
588 dynamic_cast<Trk::IVertexCascadeFitter*
> (
m_fitter.get());
589
590 xAODTPUVec_t tracks1 = makexAODTP (makePerigees2());
591
592 std::unique_ptr<IVKalState> state (
fitter->makeState());
594 std::vector<double> {100*
MeV, 150*
MeV, 200*
MeV},
595 *state,
597
598 xAODTPUVec_t tracks2 = makexAODTP (makePerigees3());
599
600 fitter->nextVertex (asVec (tracks2),
601 std::vector<double> {130*
MeV, 160*
MeV},
602 std::vector<Trk::VertexID> {v1},
603 *state,
605
606 std::unique_ptr<Trk::VxCascadeInfo> info1 (
fitter->fitCascade(*state));
607 info1->setSVOwnership (true);
608
609#if 0
610 std::cout << info1->fitChi2() << " " << info1->nDoF() << "\n";
611 for (const std::vector<TLorentzVector>& vv : info1->getParticleMoms()) {
612 std::cout << "===\n";
613 for (const TLorentzVector& vvv : vv) {
614 std::cout << vvv.X() << " " << vvv.Y() << " " << vvv.Z() << " " << vvv.E() << "\n";
615 }
616 }
617 std::cout << "=== vertices\n";
620 }
621#endif
622
623
624
625
626
627
629 assert (info1->nDoF() == 8);
630
631
632 const double exp_moms0[][4] =
633 {
634 {65.8357, -2.03326, -1.46405, 119.752},
635 {755.228, 239.515, 134.648, 817.537},
636 {900.997, -348.825, -292.857, 1029.19},
637 {1013.68, 681.319, 331.188, 1272.13},
638 {522.571, -222.398, -113.273, 600.81},
639 {1719.34, -112.854, -155.908, 1964.27},
640 };
641 const size_t nmoms0 = std::distance (std::begin(exp_moms0), std::end(exp_moms0));
642 size_t imoms0 = 0;
643 for (const std::vector<TLorentzVector>& vv : info1->getParticleMoms()) {
644 for (const TLorentzVector& vvv : vv) {
645 assert (imoms0 < nmoms0);
650 ++imoms0;
651 }
652 }
653 assert (imoms0 == nmoms0);
654
655 assert (info1->vertices().size() == 2);
656
659 exp_v0.
setPosition({ 7.89827, 0.0514449, -4.04121 });
662 0.218298, -0.00769266, 0.0194589, -0.0118989, 0.0107223, 0.208922 });
663 setRefittedPerigee(
664 exp_v0,
665 0,
666 1,
667 exp_mom(exp_moms0, 0),
668 { 0.209404, -4.58753, -0.00519457, 0.00377293, 0.00105397,
669 -4.58753, 154483, 32.603, -0.117209, -35.6007,
670 -0.00519457, 32.603, 0.0113951, -0.000116443, -0.00751125,
671 0.00377293, -0.117209, -0.000116443, 0.009643, 2.37152e-05,
672 0.00105397, -35.6007, -0.00751125, 2.37152e-05, 0.0082042 });
673 setFitQuality(exp_v0, 0, 0.926, 2);
674 setRefittedPerigee(
675 exp_v0,
676 1,
677 -1,
678 exp_mom(exp_moms0, 1),
679 { 0.185428, 0.807536, -0.00324979, -0.000237823, 1.99968e-05,
680 0.807536, 154490, 6.26553, -0.238515, 0.168369,
681 -0.00324979, 6.26553, 0.00856011, -0.00036866, -2.23097e-05,
682 -0.000237823, -0.238515, -0.00036866, 0.00933191, 7.51824e-06,
683 1.99968e-05, 0.168369, -2.23097e-05, 7.51824e-06, 3.74483e-07 });
684 setFitQuality(exp_v0, 1, 4.142, 2);
685 setRefittedPerigee(
686 exp_v0,
687 2,
688 -1,
689 exp_mom(exp_moms0, 2),
690 { 0.191446, -9.49834, -0.00495436, -0.00130953, -4.72358e-05,
691 -9.49834, 154476, 5.42258, -0.231539, 0.236084,
692 -0.00495436, 5.42258, 0.00860893, -0.000425575, 3.61158e-05,
693 -0.00130953, -0.231539, -0.000425575, 0.00920703, -5.93187e-06,
694 -4.72358e-05, 0.236084, 3.61158e-05, -5.93187e-06, 4.8944e-07 });
695 setFitQuality(exp_v0, 2, 0.281, 2);
696
697 compareVertex(*info1->vertices()[0], exp_v0, 0.1);
698
701 exp_v1.
setPosition({ 5.31046, 0.22012, -3.80093 });
704 0.0239352, 0.000977903, 0.00708136, 4.16975e-05, 0.00295894, 0.2431 });
705 setRefittedPerigee(
706 exp_v1,
707 0,
708 1,
709 exp_mom(exp_moms0, 3),
710 { 0.166917, -16.9685, -0.000309914, -0.000819924, 1.31935e-05,
711 -16.9685, 6.35682e+08, -139.016, 9.70413, -495.474,
712 -0.000309914, -139.016, 0.0100214, -7.71225e-06, 0.000103046,
713 -0.000819924, 9.70413, -7.71225e-06, 0.00998731, -5.42066e-06,
714 1.31935e-05, -495.474, 0.000103046, -5.42066e-06, 0.000386195 });
715 setFitQuality(exp_v1, 0, 1.986, 2);
716 setRefittedPerigee(
717 exp_v1,
718 1,
719 -1,
720 exp_mom(exp_moms0, 4),
721 { 0.20904, -15.3143, 0.00086181, -0.000463146, -2.83922e-05,
722 -15.3143, 6.35682e+08, 306.365, -3.09595, -2470.81,
723 0.00086181, 306.365, 0.0101467, -2.3178e-06, -0.00116433,
724 -0.000463146, -3.09595, -2.3178e-06, 0.00999678, 8.90989e-07,
725 -2.83922e-05, -2470.81, -0.00116433, 8.90989e-07, 0.00960596 });
726 setFitQuality(exp_v1, 1, 1.356, 2);
727
728 compareVertex (*info1->vertices()[1], exp_v1, 0.1);
729
730 return StatusCode::SUCCESS;
731}
bool isEqual(double x1, double x2, double thresh=1e-6)
const ShapeFitter * fitter