ATLAS Offline Software
Loading...
Searching...
No Matches
xAODTruthParticleAuxContainerCnv_v1.cxx
Go to the documentation of this file.
1//
2// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3//
4
5// Local include(s).
7
8// Gaudi/Athena include(s).
10#include "GaudiKernel/MsgStream.h"
12
13// EDM include(s):
16
17// System include(s):
18#include <cassert>
19#include <stdexcept>
20
23 xAOD::TruthParticleAuxContainer* newObj, MsgStream&) const {
24
25 // Some security checks.
26 assert(oldObj != nullptr);
27 assert(newObj != nullptr);
28
29 // Clear the transient object:
30 newObj->resize(0);
31
32 // Copy the payload of the v1 object into the latest one by misusing
33 // the thinning code a bit.
34 SG::copyAuxStoreThinned(*oldObj, *newObj, nullptr);
35 //
36 // And now fix up the status and barcode variables in the new object...
37 //
38 // Set up interface containers on top of them:
40 for( size_t i = 0; i < oldObj->size(); ++i ) {
41 oldInt.push_back( new xAOD::TruthParticle() );
42 }
43 oldInt.setStore( oldObj );
44
46 for( size_t i = 0; i < newObj->size(); ++i ) {
47 newInt.push_back( new xAOD::TruthParticle() );
48 }
49 newInt.setStore( newObj );
50
51 unsigned int index{0};
52 static const SG::AuxElement::Accessor<int> barcodeAcc ("barcode");
53 // Loop over the interface objects, and do the conversion with their help:
54 for( const xAOD::TruthParticle_v1* oldPart : oldInt ) {
55 const int oldBarcode = (barcodeAcc.isAvailable (*oldPart)) ? barcodeAcc(*oldPart) : HepMC::INVALID_PARTICLE_ID;
56 xAOD::TruthParticle * newPart = newInt.at(index);
57 // convert "old" status + barcode to "new" status values
58 newPart->setStatus(HepMC::new_particle_status_from_old(oldPart->status(), oldBarcode));
59 // The old barcode is still a unique identifier
60 newPart->setUid(oldBarcode);
61 // This should be fine in the case that we are not mixing use of
62 // xAOD::Truth with containers linking to HepMC Truth in the same
63 // classes.
64 ++index;
65 }
66 return;
67}
68
74 MsgStream& log) const {
75
76 static const char* const ERRORMSG =
77 "Somebody called xAODTruthParticleAuxContainerCnv_v1::transToPers";
78 log << MSG::ERROR << ERRORMSG << endmsg;
79 throw std::runtime_error(ERRORMSG);
80 return;
81}
#define endmsg
const T * at(size_type n) const
Access an element, as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::Accessor< T, ALLOC > Accessor
Definition AuxElement.h:572
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
virtual void transToPers(const xAOD::TruthParticleAuxContainer *, xAOD::TruthParticleAuxContainer_v1 *, MsgStream &log) const override
Dummy function inherited from the base class.
virtual void persToTrans(const xAOD::TruthParticleAuxContainer_v1 *oldObj, xAOD::TruthParticleAuxContainer *newObj, MsgStream &log) const override
Function converting from the old type to the current one.
virtual bool resize(size_t size) override
Resize the arrays to a given size.
virtual size_t size() const override
Get the size of the container.
Auxiliary store for the truth vertices.
Class describing a truth particle in the MC record.
void setUid(int value)
Set unique ID.
void setStatus(int value)
Set status code.
Helper to copy an aux store while applying thinning.
constexpr int INVALID_PARTICLE_ID
int new_particle_status_from_old(const int oldStatus, const int barcode)
Get particle status in the new scheme from the barcode and status in the old scheme.
void copyAuxStoreThinned(const SG::IConstAuxStore &orig, SG::IAuxStore &copy, const SG::ThinningInfo *info)
Helper to copy an aux store while applying thinning.
Definition index.py:1
TruthParticleAuxContainer_v2 TruthParticleAuxContainer
Declare the latest version of the truth particle auxiliary container.
TruthParticle_v1 TruthParticle
Typedef to implementation.
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.