22 return StatusCode::SUCCESS;
34 ATH_MSG_ERROR(
"Couldn't retrieve TruthEvent collection with name " << m_truthEventKey);
35 return StatusCode::FAILURE;
39 std::vector<SG::ReadHandle<xAOD::TruthParticleContainer> > inputParticles;
40 inputParticles.reserve(m_inputKeys.size());
46 std::map<int,ElementLink<xAOD::TruthParticleContainer> > linkMap;
47 for (
auto& coll : inputParticles){
48 for (
size_t p=0;
p<coll.ptr()->
size();++
p){
49 if (!coll.ptr()->at(
p))
continue;
50 if (linkMap.find(
HepMC::uniqueID(coll.ptr()->at(
p))) != linkMap.end())
continue;
62 std::map< int , std::vector<ElementLink<xAOD::TruthParticleContainer> > > parentMap;
63 std::map< int , std::vector<ElementLink<xAOD::TruthParticleContainer> > > childMap;
66 std::vector<int> seen_particles(20);
69 for (
size_t p=0;
p<
event->nTruthParticles();++
p){
70 if (!
event->truthParticle(
p))
continue;
73 std::vector<ElementLink<xAOD::TruthParticleContainer> >
parents;
74 std::vector<ElementLink<xAOD::TruthParticleContainer> >
children;
76 seen_particles.clear();
77 find_parents(
event->truthParticle(
p) ,
parents , linkMap , seen_particles );
78 seen_particles.clear();
79 find_children(
event->truthParticle(
p) ,
children , linkMap , seen_particles );
86 auto parent_decorator = m_parentLinksDecorKeys.makeHandles (ctx);
87 auto child_decorator = m_childLinksDecorKeys.makeHandles (ctx);
88 unsigned int pCntr{0};
89 for (
auto coll : inputParticles){
90 if (parent_decorator.at(pCntr).isAvailable()) {
94 for (
size_t p=0;
p<coll.ptr()->
size();++
p){
95 if (!coll.ptr()->at(
p))
continue;
96 parent_decorator.at(pCntr)(*coll.ptr()->at(
p)) = parentMap[
HepMC::uniqueID(coll->at(
p)) ];
97 child_decorator.at(pCntr)(*coll.ptr()->at(
p)) = childMap[
HepMC::uniqueID(coll->at(
p)) ];
102 return StatusCode::SUCCESS;
108 std::vector<int>& seen_particles )
const {
130 std::vector<int>& seen_particles )
const {
137 for (
size_t child=0;child<
part->nChildren();++child){
138 if (!
part->child(child))
continue;
144 find_children(
part->child(child) ,
children , linkMap , seen_particles );