ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Event
xAOD
xAODTruthAthenaPool
src
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).
6
#include "
xAODTruthParticleAuxContainerCnv_v1.h
"
7
8
// Gaudi/Athena include(s).
9
#include "
AthContainers/tools/copyAuxStoreThinned.h
"
10
#include "GaudiKernel/MsgStream.h"
11
#include "
TruthUtils/MagicNumbers.h
"
12
13
// EDM include(s):
14
#include "
xAODTruth/versions/TruthParticleContainer_v1.h
"
15
#include "
xAODTruth/TruthParticleContainer.h
"
16
17
// System include(s):
18
#include <cassert>
19
#include <stdexcept>
20
21
void
xAODTruthParticleAuxContainerCnv_v1::persToTrans
(
22
const
xAOD::TruthParticleAuxContainer_v1
* oldObj,
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:
39
xAOD::TruthParticleContainer
oldInt;
40
for
(
size_t
i = 0; i < oldObj->
size
(); ++i ) {
41
oldInt.
push_back
(
new
xAOD::TruthParticle
() );
42
}
43
oldInt.setStore( oldObj );
44
45
xAOD::TruthParticleContainer
newInt;
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
72
void
xAODTruthParticleAuxContainerCnv_v1::transToPers
(
73
const
xAOD::TruthParticleAuxContainer
*,
xAOD::TruthParticleAuxContainer_v1
*,
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
}
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
TruthParticleContainer.h
MagicNumbers.h
TruthParticleContainer_v1.h
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
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
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
xAOD::AuxContainerBase::resize
virtual bool resize(size_t size) override
Resize the arrays to a given size.
Definition
AuxContainerBase.cxx:530
xAOD::AuxContainerBase::size
virtual size_t size() const override
Get the size of the container.
Definition
AuxContainerBase.cxx:455
xAOD::TruthParticleAuxContainer_v1
Auxiliary store for the truth vertices.
Definition
TruthParticleAuxContainer_v1.h:27
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition
TruthParticle_v1.h:37
xAOD::TruthParticle_v1::setUid
void setUid(int value)
Set unique ID.
xAOD::TruthParticle_v1::setStatus
void setStatus(int value)
Set status code.
copyAuxStoreThinned.h
Helper to copy an aux store while applying thinning.
HepMC::INVALID_PARTICLE_ID
constexpr int INVALID_PARTICLE_ID
Definition
MagicNumbers.h:58
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:363
SG::copyAuxStoreThinned
void copyAuxStoreThinned(const SG::IConstAuxStore &orig, SG::IAuxStore ©, const SG::ThinningInfo *info)
Helper to copy an aux store while applying thinning.
index
Definition
index.py:1
xAOD::TruthParticleAuxContainer
TruthParticleAuxContainer_v2 TruthParticleAuxContainer
Declare the latest version of the truth particle auxiliary container.
Definition
TruthParticleAuxContainer.h:15
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition
Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
xAOD::TruthParticleContainer
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.
Definition
Event/xAOD/xAODTruth/xAODTruth/TruthParticleContainer.h:17
xAODTruthParticleAuxContainerCnv_v1.h
Generated on
for ATLAS Offline Software by
1.17.0