ATLAS Offline Software
HepMcParticleLinkCnv_p2.cxx
Go to the documentation of this file.
1 
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 
HepMcParticleLinkCnv_p2::persToTrans
virtual void persToTrans(const HepMcParticleLink_p2 *persObj, HepMcParticleLink *transObj, MsgStream &msg) const override
Method creating the transient representation of HepMcParticleLink from its persistent representation ...
Definition: HepMcParticleLinkCnv_p2.cxx:16
HepMcParticleLinkCnv_p2::transToPers
virtual void transToPers(const HepMcParticleLink *transObj, HepMcParticleLink_p2 *persObj, MsgStream &msg) const override
Method creating the persistent representation HepMcParticleLink_p2 from its transient representation ...
Definition: HepMcParticleLinkCnv_p2.cxx:36
StateLessPT_NewConfig.proxy
proxy
Definition: StateLessPT_NewConfig.py:392
index
Definition: index.py:1
ExtendedEventContext.h
IProxyDict
A proxy dictionary.
Definition: AthenaKernel/AthenaKernel/IProxyDict.h:47
Atlas::getExtendedEventContext
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
Definition: ExtendedEventContext.cxx:32
HepMC::SUPPRESSED_PILEUP_BARCODE
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...
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
master.flag
bool flag
Definition: master.py:29
MagicNumbers.h
HepMC::BarcodeBased::is_truth_suppressed_pileup
bool is_truth_suppressed_pileup(const T &p)
Method to establish if a particle (or barcode) corresponds to truth-suppressed pile-up.
Definition: MagicNumbers.h:197
DeMoScan.index
string index
Definition: DeMoScan.py:364
HepMcParticleLinkCnv_p2.h
EBC_PU_SUPPRESSED
@ EBC_PU_SUPPRESSED
Definition: MagicNumbers.h:30
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7