ATLAS Offline Software
Loading...
Searching...
No Matches
HepMcParticleLinkCnv_p2.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
14
15
17 HepMcParticleLink* transObj,
18 MsgStream &/*msg*/ ) const
19{
21
22 if (persObj->m_mcEvtIndex == 0) {
24 }
25
26 transObj->setExtendedBarCode
28 persObj->m_mcEvtIndex,
29 flag, HepMcParticleLink::IS_BARCODE) ); // FIXME barcode-based
30
31 if ( HepMC::BarcodeBased::is_truth_suppressed_pileup(static_cast<int>(persObj->m_barcode)) ) {
33 }
34}
35
37 HepMcParticleLink_p2* persObj,
38 MsgStream &msg ) const
39{
40 // In the case that the standard production workflow is being used
41 // then the first event in the McEventCollection is the only one
42 // where the eventIndex could exceed the maximum value of unsigned
43 // short. In this case we can work around the issue by using an
44 // m_mcEvtIndex of zero as a special case, in which m_mcEvtIndex
45 // should be interpreted as the position in the McEventCollection
46 // rather than the value of GenEvent::event_number().
47 const EventContext& ctx = Gaudi::Hive::currentContext();
48 const IProxyDict* proxy = Atlas::getExtendedEventContext(ctx).proxy();
49 unsigned short index{0};
50 const HepMcParticleLink::index_type position =
52 proxy).at(0);
53 if (position!=0) {
54 index = transObj->eventIndex();
55 if(transObj->eventIndex()!=static_cast<HepMcParticleLink::index_type>(index)) {
56 msg << MSG::WARNING << "Attempting to persistify an eventIndex larger than max unsigned short!" << endmsg;
57 }
58 }
59 persObj->m_mcEvtIndex = index;
60 if (transObj->getTruthSuppressionType() == EBC_PU_SUPPRESSED) {
62 }
63 else {
64 persObj->m_barcode = transObj->barcode(); // FIXME in the future the barcode will need to be generated here
65 }
66 persObj->m_evtColl = 'a'; // Hard-coding as this only ever had a single value in production
67}
68
#define endmsg
@ EBC_PU_SUPPRESSED
virtual void persToTrans(const HepMcParticleLink_p2 *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_p2 *persObj, MsgStream &msg) const override
Method creating the persistent representation HepMcParticleLink_p2 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