48     ATH_MSG_INFO(
"Using " << m_particlesKey.key() << 
" as the input truth container key");
 
   51     ATH_CHECK(m_originAccessorKey.initialize());
 
   52     ATH_CHECK(m_typeAccessorKey.initialize());
 
   53     ATH_CHECK(m_outcomeAccessorKey.initialize());
 
   54     ATH_CHECK(m_classificationAccessorKey.initialize());
 
   57     ATH_CHECK(m_outputParticlesKey.initialize());
 
   58     ATH_MSG_INFO(
"New truth particles container key: " << m_outputParticlesKey.key() );
 
   59     ATH_CHECK(m_outputVerticesKey.initialize());
 
   60     ATH_MSG_INFO(
"New truth vertices container key: " << m_outputVerticesKey.key() );
 
   62     if (m_pdgIdsToKeep.empty() && !m_keepBHadrons && !m_keepCHadrons && !m_keepBSM) {
 
   63         ATH_MSG_FATAL(
"No PDG IDs provided, not keeping b- or c-hadrons or BSM particles -- what do you want?");
 
   64         return StatusCode::FAILURE;
 
   68     ATH_CHECK(m_originDecoratorKey.initialize());
 
   69     ATH_CHECK(m_typeDecoratorKey.initialize());
 
   70     ATH_CHECK(m_outcomeDecoratorKey.initialize());
 
   71     ATH_CHECK(m_classificationDecoratorKey.initialize());
 
   72     ATH_CHECK(m_motherIDDecoratorKey.initialize());
 
   73     ATH_CHECK(m_daughterIDDecoratorKey.initialize());
 
   75     return StatusCode::SUCCESS;
 
   86     if (!truthParticles.
isValid()) {
 
   87         ATH_MSG_ERROR(
"Couldn't retrieve TruthParticle collection with name " << m_particlesKey);
 
   88         return StatusCode::FAILURE;
 
   93     ATH_CHECK(newParticlesWriteHandle.
record(std::make_unique<xAOD::TruthParticleContainer>(),
 
   94                                              std::make_unique<xAOD::TruthParticleAuxContainer>()));
 
   95     ATH_MSG_DEBUG( 
"Recorded new TruthParticleContainer with key: " << (m_outputParticlesKey.key()));
 
   98     ATH_CHECK(newVerticesWriteHandle.
record(std::make_unique<xAOD::TruthVertexContainer>(),
 
   99                                             std::make_unique<xAOD::TruthVertexAuxContainer>()));
 
  100     ATH_MSG_DEBUG( 
"Recorded new TruthVertexContainer with key: " << (m_outputVerticesKey.key()));
 
  105     std::vector<int> seen_particles;
 
  107     for (
const auto * 
part : *truthParticles){
 
  110             addTruthParticle( ctx, *
part, newParticlesWriteHandle.
ptr(), newVerticesWriteHandle.
ptr(), seen_particles , m_generations );
 
  113     return StatusCode::SUCCESS;
 
  120                                                                       std::vector<int>& seen_particles,
 
  124       for (
size_t p=0;
p<part_cont->
size();++
p){
 
  146     xTruthParticle->
setM(old_part.
m());
 
  147     xTruthParticle->
setPx(old_part.
px());
 
  148     xTruthParticle->
setPy(old_part.
py());
 
  149     xTruthParticle->
setPz(old_part.
pz());
 
  150     xTruthParticle->
setE(old_part.
e());
 
  157     int my_index = part_cont->
size()-1;
 
  161         int vert_index = addTruthVertex( ctx, *old_part.
decayVtx(), part_cont, vert_cont, seen_particles, 
generations);
 
  164         (*vert_cont)[vert_index]->addIncomingParticleLink( eltp );
 
  172     typeDecorator(*xTruthParticle) = classifierParticleTypeAcc(old_part);
 
  173     originDecorator(*xTruthParticle) = classifierParticleOriginAcc(old_part);
 
  174     outcomeDecorator(*xTruthParticle) = classifierParticleOutcomeAcc(old_part);
 
  175     classificationDecorator(*xTruthParticle) = ClassificationAcc(old_part);
 
  185                                                                     std::vector<int>& seen_particles,
 
  191     int my_index = vert_cont->
size()-1;
 
  196     xTruthVertex->
setX(old_vert.
x());
 
  197     xTruthVertex->
setY(old_vert.
y());
 
  198     xTruthVertex->
setZ(old_vert.
z());
 
  199     xTruthVertex->
setT(old_vert.
t());
 
  209         int part_index = addTruthParticle( ctx, *old_vert.
outgoingParticle(
n), part_cont, vert_cont, seen_particles,
 
  213         (*part_cont)[part_index]->setProdVtxLink( eltv );
 
  222     for (
int id : m_pdgIdsToKeep){
 
  223         if (
part.absPdgId()==
id){
 
  228     return (m_keepBHadrons && 
part.isBottomHadron()) ||
 
  230         (m_keepCHadrons && 
part.isCharmHadron()) ||
 
  232         (m_keepBSM && 
part.isBSM());