ATLAS Offline Software
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 }
SG::copyAuxStoreThinned
void copyAuxStoreThinned(const SG::IConstAuxStore &orig, SG::IAuxStore &copy, const SG::ThinningInfo *info)
Helper to copy an aux store while applying thinning.
xAOD::TruthParticle_v1::setStatus
void setStatus(int value)
Set status code.
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
index
Definition: index.py:1
TruthParticleContainer.h
HepMC::INVALID_PARTICLE_ID
constexpr int INVALID_PARTICLE_ID
Definition: MagicNumbers.h:57
xAOD::AuxContainerBase::resize
virtual bool resize(size_t size) override
Resize the arrays to a given size.
Definition: AuxContainerBase.cxx:507
xAODTruthParticleAuxContainerCnv_v1::transToPers
virtual void transToPers(const xAOD::TruthParticleAuxContainer *, xAOD::TruthParticleAuxContainer_v1 *, MsgStream &log) const override
Dummy function inherited from the base class.
Definition: xAODTruthParticleAuxContainerCnv_v1.cxx:72
xAOD::AuxContainerBase::size
virtual size_t size() const override
Get the size of the container.
Definition: AuxContainerBase.cxx:432
copyAuxStoreThinned.h
Helper to copy an aux store while applying thinning.
xAOD::TruthParticleAuxContainer_v1
Auxiliary store for the truth vertices.
Definition: TruthParticleAuxContainer_v1.h:27
lumiFormat.i
int i
Definition: lumiFormat.py:85
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
xAODTruthParticleAuxContainerCnv_v1::persToTrans
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.
Definition: xAODTruthParticleAuxContainerCnv_v1.cxx:21
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
xAOD::TruthParticleAuxContainer_v2
Auxiliary store for the truth particles.
Definition: TruthParticleAuxContainer_v2.h:26
MagicNumbers.h
xAOD::TruthParticle_v1::setUid
void setUid(int value)
Set unique ID.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
xAODTruthParticleAuxContainerCnv_v1.h
DeMoScan.index
string index
Definition: DeMoScan.py:362
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
TruthParticleContainer_v1.h
SG::ConstAccessor< T, AuxAllocator_t< T > >::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
HepMC::new_particle_status_from_old
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.
Definition: MagicNumbers.h:404