File indexing completed on 2024-04-06 12:29:11
0001 #include "RecoVertex/KinematicFit/interface/ConstrainedTreeBuilderT.h"
0002 #include "DataFormats/CLHEP/interface/Migration.h"
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004
0005 RefCountedKinematicTree ConstrainedTreeBuilderT::buildRealTree(
0006 const RefCountedKinematicParticle virtualParticle,
0007 const RefCountedKinematicVertex vtx,
0008 const std::vector<RefCountedKinematicParticle>& particles) const {
0009
0010 RefCountedKinematicTree resTree = ReferenceCountingPointer<KinematicTree>(new KinematicTree());
0011
0012
0013 RefCountedKinematicVertex fVertex = vFactory.vertex();
0014 resTree->addParticle(fVertex, vtx, virtualParticle);
0015
0016
0017 for (std::vector<RefCountedKinematicParticle>::const_iterator il = particles.begin(); il != particles.end(); il++) {
0018 if ((*il)->previousParticle()->correspondingTree() != nullptr) {
0019 KinematicTree* tree = (*il)->previousParticle()->correspondingTree();
0020 tree->movePointerToTheTop();
0021 tree->replaceCurrentParticle(*il);
0022 RefCountedKinematicVertex cdVertex = resTree->currentDecayVertex();
0023 resTree->addTree(cdVertex, tree);
0024 } else {
0025 RefCountedKinematicVertex ffVertex = vFactory.vertex();
0026 resTree->addParticle(vtx, ffVertex, *il);
0027 }
0028 }
0029 return resTree;
0030 }