22 const IInterface*
parent) :
26 declareInterface<Trk::ITruthTrajectoryBuilder>(
this);
39 std::stack<HepMC::ConstGenParticlePtr>
tmp;
43 while (!
tmp.empty()) {
60 std::vector<HepMcParticleLink>::const_iterator pit =
result->begin();
61 std::vector<HepMcParticleLink>::const_iterator pit_end =
result->end();
62 for (; pit != pit_end; ++pit) {
66 <<
" pt: " <<
par.momentum().perp();
67 if (
par.production_vertex())
68 msg(
MSG::DEBUG) <<
" vertices prod: r " <<
par.production_vertex()->position().perp() <<
" z "
69 <<
par.production_vertex()->position().z();
71 msg(
MSG::DEBUG) <<
" end: r " <<
par.end_vertex()->position().perp() <<
" z " <<
par.end_vertex()->position().z();
83 int particles_in_size = vtx ? vtx->particles_in_size() : 0;
84 int particles_out_size = vtx ? vtx->particles_out_size() : 0;
87 if (vtx && (particles_in_size == 1)) {
89 mother = vtx->particles_in().front();
91 mother = *vtx->particles_in_const_begin();
95 msg(
MSG::DEBUG) <<
" new mother: " << mother->pdg_id() <<
" status " << mother->status() <<
" particles out "
96 << particles_out_size <<
endmsg;
99 unsigned int nDecayMuons = 0;
101 for (
const auto& candidate : *vtx) {
103 msg(
MSG::DEBUG) <<
" PDG ID " << candidate->pdg_id() <<
" particle: " << candidate
104 <<
" pt: " << candidate->momentum().perp();
105 if (candidate->production_vertex())
106 msg(
MSG::DEBUG) <<
" vertices prod: r " << candidate->production_vertex()->position().perp() <<
" z "
107 << candidate->production_vertex()->position().z();
108 if (candidate->end_vertex())
109 msg(
MSG::DEBUG) <<
" end: r " << candidate->end_vertex()->position().perp() <<
" z "
110 << candidate->end_vertex()->position().z();
114 if (candidate->pdg_id() == mother->pdg_id()) {
116 if (candidate->momentum().e() > passed_cuts->momentum().e()) { passed_cuts = candidate; }
118 passed_cuts = candidate;
123 passed_cuts = candidate;
126 passed_cuts = candidate;
130 if (nDecayMuons > 0) {
131 daughter = passed_cuts;
132 if (nDecayMuons == 2) {
140 return std::make_pair(mother, daughter);
147 if(
res.first == mother)
return res.second;