ATLAS Offline Software
Loading...
Searching...
No Matches
HepMcParticleLinkCnv_p1.cxx
Go to the documentation of this file.
1
2
3/*
4 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
5*/
6
7// Framework includes
8#include "GaudiKernel/MsgStream.h"
9#include "GaudiKernel/ThreadLocalContext.h"
12
13// GeneratorObjectsAthenaPool includes
16
20
21
22// In the 21.0 branch an eventIndex of zero means that the transient
23// HepMcParticleLink looks at the first event in the
24// McEventCollection, otherwise the eventIndex represents the
25// GenEvent::event_number of a GenEvent in the McEventCollection and
26// this is used to find the appropriate GenEvent.
27// NB There is a weakness here that if more than one GenEvent has
28// the same event number all links will point to the first GenEvent
29// which matches.
30
32 HepMcParticleLink* transObj,
33 MsgStream &/*msg*/ ) const
34{
36
37 if (persObj->m_mcEvtIndex == 0) {
39 }
40
41 transObj->setExtendedBarCode
43 persObj->m_mcEvtIndex,
44 flag, HepMcParticleLink::IS_BARCODE) ); // FIXME barcode-based
45
46 if ( HepMC::BarcodeBased::is_truth_suppressed_pileup(static_cast<int>(persObj->m_barcode)) ) {
48 }
49}
50
52 HepMcParticleLink_p1* persObj,
53 MsgStream &msg ) const
54{
55 // NB This method assumes that there all GenEvents are stored in a
56 // single McEventCollection, as running with split
57 // McEventCollections is not supported in 21.0.
58 const EventContext& ctx = Gaudi::Hive::currentContext();
59 const IProxyDict* proxy = Atlas::getExtendedEventContext(ctx).proxy();
60 unsigned short index{0};
61 const HepMcParticleLink::index_type position =
63 proxy).at(0);
64 if (position!=0) {
65 index = transObj->eventIndex();
66 if(transObj->eventIndex()!=static_cast<HepMcParticleLink::index_type>(index)) {
67 msg << MSG::WARNING << "Attempting to persistify an eventIndex larger than max unsigned short!" << endmsg;
68 }
69 }
70 persObj->m_mcEvtIndex = index;
71 if (transObj->getTruthSuppressionType() == EBC_PU_SUPPRESSED) {
73 }
74 else {
75 persObj->m_barcode = transObj->barcode(); // FIXME in the future the barcode will need to be generated here
76 }
77}
78
#define endmsg
@ EBC_PU_SUPPRESSED
virtual void persToTrans(const HepMcParticleLink_p1 *persObj, HepMcParticleLink *transObj, MsgStream &msg) const override
Method creating the transient representation of HepMcParticleLink from its persistent representation ...
virtual void transToPers(const HepMcParticleLink *transObj, HepMcParticleLink_p1 *persObj, MsgStream &msg) const override
Method creating the persistent representation HepMcParticleLink_p1 from its transient representation ...
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
bool is_truth_suppressed_pileup(const T &p)
Method to establish if a particle (or barcode) corresponds to truth-suppressed pile-up.
constexpr int SUPPRESSED_PILEUP_BARCODE(std::numeric_limits< int32_t >::max())
This barcode is used by objects matched to particles from pile-up interactions in standard MC Product...
Definition index.py:1
MsgStream & msg
Definition testRead.cxx:32