ATLAS Offline Software
Loading...
Searching...
No Matches
McEventCollectionCnv_p6 Class Referenceabstract

#include <McEventCollectionCnv_p6.h>

Inheritance diagram for McEventCollectionCnv_p6:
Collaboration diagram for McEventCollectionCnv_p6:

Public Types

typedef TRANS Trans_t
typedef PERS Pers_t
typedef PERS PersBase_t
typedef TRANS TransBase_t
typedef ITPConverterFor< TRANS > PolyCnvBase_t
typedef Gaudi::PluginService::Factory< ITPCnvBase *()> Factory

Public Member Functions

 McEventCollectionCnv_p6 ()
 Default constructor:
 McEventCollectionCnv_p6 (const McEventCollectionCnv_p6 &rhs)
 Copy constructor.
McEventCollectionCnv_p6operator= (const McEventCollectionCnv_p6 &rhs)
 Assignement operator.
virtual ~McEventCollectionCnv_p6 ()
 Destructor.
void setPileup ()
virtual void persToTrans (const McEventCollection_p6 *persObj, McEventCollection *transObj, MsgStream &log)
 Method creating the transient representation of McEventCollection from its persistent representation McEventCollection_p6.
virtual void transToPers (const McEventCollection *transObj, McEventCollection_p6 *persObj, MsgStream &log)
 Method creating the persistent representation McEventCollection_p6 from its transient representation McEventCollection.
virtual TPObjRef virt_toPersistent (const TRANS *trans, MsgStream &log)
 Internal interface method that is used to invoke the real conversion method (toPersistent_impl) in the derived converter.
virtual TPObjRef virt_toPersistentWithKey (const TRANS *trans, const std::string &key, MsgStream &log)
 Internal interface method that is used to invoke the real conversion method (toPersistent_impl) in the derived converter.
virtual void pstoreToTrans (unsigned index, TRANS *trans, MsgStream &log)
 Convert persistent representation stored in the storage vector of the top-level object to transient.
virtual TRANS * createTransient (const PERS *persObj, MsgStream &log)
 Create transient representation of a persistent object.
virtual TRANS * createTransientWithKey (const PERS *persObj, const std::string &key, MsgStream &log)
 Create transient representation of a persistent object, with SG key.
virtual TRANS * virt_createTransFromPStore (unsigned index, MsgStream &log)
 Internal interface method that is used to invoke the real conversion method (createTransient).
virtual TRANS * virt_createTransFromPStoreWithKey (unsigned index, const std::string &key, MsgStream &log)
 Internal interface method that is used to invoke the real conversion method (createTransient).
virtual void persToTrans (const PERS *persObj, TRANS *transObj, MsgStream &log)=0
 Convert persistent representation to transient one.
virtual void transToPers (const TRANS *transObj, PERS *persObj, MsgStream &log)=0
 Convert transient representation to persistent one.
virtual void persToTransWithKey (const PERS *persObj, TRANS *transObj, const std::string &, MsgStream &log)
 Convert persistent representation to transient one.
virtual void transToPersWithKey (const TRANS *transObj, PERS *persObj, const std::string &, MsgStream &log)
 Convert transient representation to persistent one.
virtual void persToTransUntyped (const void *pers, void *trans, MsgStream &log)
 Convert persistent object representation to transient.
virtual void transToPersUntyped (const void *trans, void *pers, MsgStream &log)
 Convert transient object representation to persistent.
virtual void persToTransWithKeyUntyped (const void *pers, void *trans, const std::string &key, MsgStream &log)
 Convert persistent object representation to transient.
virtual void transToPersWithKeyUntyped (const void *trans, void *pers, const std::string &key, MsgStream &log)
 Convert transient object representation to persistent.
virtual PERScreatePersistent (const TRANS *transObj, MsgStream &log)
 Create persistent representation of a transient object.
virtual PERScreatePersistentWithKey (const TRANS *transObj, const std::string &key, MsgStream &log)
 Create persistent representation of a transient object, with SG key.
TPObjRef toPersistentWithKey_impl (const TRANS *trans, const std::string &key, MsgStream &log)
 Convert transient object to persistent representation.
virtual const std::type_info & transientTInfo () const
 return C++ type id of the transient class this converter is for
virtual const std::type_info & persistentTInfo () const
 return C++ type id of the persistent class this converter is for
void setPStorage (std::vector< PERS > *storage)
 Tell this converter which storage vector it should use to store or retrieve persistent representations.
void setRecursive (bool flag=true)
 Tell the converter if it should work in recursive mode slower but it can safely handle recursion.
void ignoreRecursion (bool flag=false)
 Tell the converter to ignore recursion (do not throw errors) even when recurion is detected.
virtual void reservePStorage (size_t size)
 Reserve 'size' elements for persistent storage.
template<class CNV>
CNV * converterForType (CNV *cnv, const std::type_info &t_info, MsgStream &log) const
 Find converter for a given C++ type ID, that is or ihnerits from CNV type.
template<class CNV>
CNV * converterForRef (CNV *cnv, const TPObjRef &ref, MsgStream &log) const
 Find converter for a TP type ID (passed in a TP Ref), that is or ihnerits from CNV type.
template<class CNV>
TPObjRef baseToPersistent (CNV **cnv, const typename CNV::Trans_t *transObj, MsgStream &log) const
 Persistify bass class of a given object and store the persistent represenation in the storage vector of the top-level persistent object.
template<class CNV>
TPObjRef toPersistent (CNV **cnv, const typename CNV::TransBase_t *transObj, MsgStream &log) const
 Persistify an object and store the persistent represenation in the storage vector of the top-level persistent object.
template<class CNV, class TRANS_T>
void fillTransFromPStore (CNV **cnv, const TPObjRef &ref, TRANS_T *trans, MsgStream &log) const
 Convert persistent object, stored in the the top-level persistent object and referenced by the TP Ref, to transient representation.
template<class CNV>
CNV::Trans_t * createTransFromPStore (CNV **cnv, const TPObjRef &ref, MsgStream &log) const
 Create transient representation of a persistent object, stored in the the top-level persistent object and referenced by the TP Ref.
virtual void initPrivateConverters (TopLevelTPCnvBase *)
virtual TopLevelTPCnvBasetopConverter ()
 return the top-level converter for this elemental TP converter
virtual const TopLevelTPCnvBasetopConverter () const
 return the top-level converter for this elemental TP converter
const std::type_info & transBaseTInfo () const
 return C++ type id of the common base transient type for all converters for a group of polymorphic types
virtual const TPObjRef::typeID_ttypeID () const
 Return TP typeID for persistent objects produced by this converter.
unsigned typeIDvalue () const
 inlined non-virtual version to get the typeID value fast
virtual void setRuntimeTopConverter (TopLevelTPCnvBase *topConverter)
 Set runtime top-level converter - usually it is the owning TL converter, but in case of extended objects it will be the TL converter of the extended object.
virtual void setTopConverter (TopLevelTPCnvBase *topConverter, const TPObjRef::typeID_t &TPtypeID)
 Set which top-level converter owns this elemental converter, and what TPtypeID was assigned to the persistent objects it produces.
void setReadingFlag ()
void clearReadingFlag ()
bool wasUsedForReading ()
virtual void converterNotFound (const std::type_info &converterType, ITPConverter *c, const std::string &typeName, MsgStream &log) const
 method called when the right TP converter was not found during writing
virtual void converterNotFound (unsigned typeID, ITPConverter *c, const std::string &typeName, MsgStream &log) const
 method called when the right TP converter was not found during reading

Protected Types

typedef std::unordered_map< HepMC::GenParticlePtr, int > ParticlesMap_t

Protected Member Functions

HepMC::GenVertexPtr createGenVertex (const McEventCollection_p6 &persEvts, const GenVertex_p6 &vtx, ParticlesMap_t &bcToPart, HepMC::DataPool &datapools, HepMC::GenEvent *parent=nullptr) const
 Create a transient GenVertex from a persistent one (version 1) It returns the new GenVertex.
HepMC::GenParticlePtr createGenParticle (const GenParticle_p6 &p, ParticlesMap_t &partToEndVtx, HepMC::DataPool &datapools, const HepMC::GenVertexPtr &parent=nullptr, bool add_to_output=true) const
 Create a transient GenParticle from a persistent one (vers.1) It returns the new GenParticle.
void writeGenVertex (const HepMC::GenVertex &vtx, McEventCollection_p6 &persEvt) const
 Method to write a persistent GenVertex object.
int writeGenParticle (const HepMC::GenParticle &p, McEventCollection_p6 &persEvt) const
 Method to write a persistent GenParticle object It returns the index of the persistent GenParticle into the collection of persistent of GenParticles from the persistent GenEvent.

Protected Attributes

bool m_isPileup
ServiceHandle< IHepMCWeightSvcm_hepMCWeightSvc
std::vector< PERS > * m_pStorage
 the address of the storage vector for persistent representations
int m_curRecLevel
 count recursive invocations, to detect recursion
bool m_recursive
 if true, work in recursion-safe way (slower)
bool m_ignoreRecursion
 if true, do not throw errors in case of recursion.
TPObjRef::typeID_t m_pStorageTID
 TP Ref typeID for the persistent objects this converter is creating.
unsigned m_pStorageTIDvalue
 m_pStorageTID converted to integer value
TopLevelTPCnvBasem_topConverter
 top level converter that owns this elemental TP converter it also holds the storage object
TopLevelTPCnvBasem_topConverterRuntime
 top level converter "owning" this TP converter at runtime (different from m_topConverter in case the top-level converter and object have extensions)
bool m_wasUsedForReading
 flag set when using this converter for reading triggers search for a new converter before writing, to prevent possible use of old version

Private Types

typedef T_AthenaPoolTPCnvBase< McEventCollection, McEventCollection_p6Base_t

Detailed Description

Definition at line 61 of file McEventCollectionCnv_p6.h.

Member Typedef Documentation

◆ Base_t

◆ Factory

typedef Gaudi::PluginService::Factory<ITPCnvBase*()> ITPCnvBase::Factory
inherited

Definition at line 26 of file ITPCnvBase.h.

◆ ParticlesMap_t

typedef std::unordered_map<HepMC::GenParticlePtr,int> McEventCollectionCnv_p6::ParticlesMap_t
protected

Definition at line 109 of file McEventCollectionCnv_p6.h.

◆ Pers_t

typedef PERS TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::Pers_t
inherited

Definition at line 335 of file TPConverter.h.

◆ PersBase_t

typedef PERS TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::PersBase_t
inherited

Definition at line 336 of file TPConverter.h.

◆ PolyCnvBase_t

template<class TRANS>
typedef ITPConverterFor< TRANS > ITPConverterFor< TRANS >::PolyCnvBase_t
inherited

Definition at line 41 of file TPConverter.h.

◆ Trans_t

typedef TRANS TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::Trans_t
inherited

Definition at line 334 of file TPConverter.h.

◆ TransBase_t

template<class TRANS>
typedef TRANS ITPConverterFor< TRANS >::TransBase_t
inherited

Definition at line 39 of file TPConverter.h.

Constructor & Destructor Documentation

◆ McEventCollectionCnv_p6() [1/2]

McEventCollectionCnv_p6::McEventCollectionCnv_p6 ( )

Default constructor:

Definition at line 43 of file McEventCollectionCnv_p6.cxx.

43 :
44 Base_t( ),
45 m_isPileup(false),m_hepMCWeightSvc("HepMCWeightSvc","McEventCollectionCnv_p6")
46{}
ServiceHandle< IHepMCWeightSvc > m_hepMCWeightSvc
T_AthenaPoolTPCnvBase< McEventCollection, McEventCollection_p6 > Base_t

◆ McEventCollectionCnv_p6() [2/2]

McEventCollectionCnv_p6::McEventCollectionCnv_p6 ( const McEventCollectionCnv_p6 & rhs)

Copy constructor.

Definition at line 48 of file McEventCollectionCnv_p6.cxx.

48 :
49 Base_t( rhs ),
50 m_isPileup(false),m_hepMCWeightSvc("HepMCWeightSvc","McEventCollectionCnv_p6")
51{}

◆ ~McEventCollectionCnv_p6()

McEventCollectionCnv_p6::~McEventCollectionCnv_p6 ( )
virtualdefault

Destructor.

Member Function Documentation

◆ baseToPersistent()

template<class TRANS>
template<class CNV>
TPObjRef ITPConverterFor< TRANS >::baseToPersistent ( CNV ** cnv,
const typename CNV::Trans_t * transObj,
MsgStream & log ) const
inlineinherited

Persistify bass class of a given object and store the persistent represenation in the storage vector of the top-level persistent object.

The converter is located using the transient type from the CNV parameter, not from the object itself (because we need the base type, not the actual type)

Parameters
cnv[IN/OUT] type of this parameter decides which converter will be used. Once the converter is found, this pointer will be set so the search is done only once
transObj[IN] transient object
log[IN] output message stream
Returns
TPObjRef TP reference to the persistent representation stored in the storage vector of the top-level persistent object

Definition at line 97 of file TPConverter.h.

97 {
98 if( !*cnv || (*cnv)->wasUsedForReading() ) {
99 // don't trust the converter if it was used for reading, find again
100 *cnv = converterForType( *cnv, typeid(typename CNV::Trans_t), log );
101 if( !*cnv ) return TPObjRef();
102 (*cnv)->clearReadingFlag();
103 }
104// return (**cnv).toPersistent_impl(transObj, log);
105 return (**cnv).virt_toPersistent(transObj, log);
106 }
Common base class for all TP converters, specialized for a given transient type.
Definition TPConverter.h:37
CNV * converterForType(CNV *cnv, const std::type_info &t_info, MsgStream &log) const
Find converter for a given C++ type ID, that is or ihnerits from CNV type.
Definition TPConverter.h:58
bool wasUsedForReading()

◆ clearReadingFlag()

template<class TRANS>
void ITPConverterFor< TRANS >::clearReadingFlag ( )
inlineinherited

Definition at line 235 of file TPConverter.h.

235{ m_wasUsedForReading = false; }
bool m_wasUsedForReading
flag set when using this converter for reading triggers search for a new converter before writing,...

◆ converterForRef()

template<class TRANS>
template<class CNV>
CNV * ITPConverterFor< TRANS >::converterForRef ( CNV * cnv,
const TPObjRef & ref,
MsgStream & log ) const
inlineinherited

Find converter for a TP type ID (passed in a TP Ref), that is or ihnerits from CNV type.

Parameters
cnv[IN] parameter specifying the converter type
ref[IN] TP Ref to an object for which a converter is sought
log[IN] output message stream
Returns
CNV* pointer to the converter, if found

Definition at line 74 of file TPConverter.h.

74 {
75 ITPConverter *c = m_topConverterRuntime->converterForRef( ref );
76 cnv = dynamic_cast<CNV*>(c);
77 if( !cnv )
78 this->converterNotFound( ref.typeID(), c, typeid(CNV).name(), log );
79 return cnv;
80 }
TopLevelTPCnvBase * m_topConverterRuntime
top level converter "owning" this TP converter at runtime (different from m_topConverter in case the ...
virtual const TPObjRef::typeID_t & typeID() const
Return TP typeID for persistent objects produced by this converter.
virtual void converterNotFound(const std::type_info &converterType, ITPConverter *c, const std::string &typeName, MsgStream &log) const
method called when the right TP converter was not found during writing

◆ converterForType()

template<class TRANS>
template<class CNV>
CNV * ITPConverterFor< TRANS >::converterForType ( CNV * cnv,
const std::type_info & t_info,
MsgStream & log ) const
inlineinherited

Find converter for a given C++ type ID, that is or ihnerits from CNV type.

Parameters
cnv[IN] parameter specifying the converter type
t_info[IN] C++ type id for which a converter is sought
log[IN] output message stream
Returns
CNV* pointer to the converter, if found

Definition at line 58 of file TPConverter.h.

58 {
59 ITPConverter *c = m_topConverterRuntime->converterForType( t_info );
60 cnv = dynamic_cast< CNV* >( c );
61 if( !cnv )
62 this->converterNotFound( typeid(CNV), c, t_info.name(), log );
63 return cnv;
64 }

◆ converterNotFound() [1/2]

void ITPConverter::converterNotFound ( const std::type_info & converterType,
ITPConverter * c,
const std::string & typeName,
MsgStream & log ) const
virtualinherited

method called when the right TP converter was not found during writing

  • useful as a debugging hook, prints a detailed error message
Parameters
converterType[IN] converterType that was requested
c[IN] converter that was actually found (0 if not)
typeName[IN] the C++ type name of the type for which converter was searched for
log[IN] output message stream

Definition at line 22 of file ITPConverter.cxx.

26{
27 log << MSG::ERROR << ">>>>>> in parent TP converter " << typeid(*this).name()
28 << ": could not find matching TP converter for type " << typeName << endmsg;
29 if( c ) {
30 log << MSG::ERROR << " - found incompatible converter of type "
31 << typeid(*c).name() << endmsg;
32 }
33 log << MSG::ERROR << " Converter handle type was " << converterType.name() << endmsg;
35}
#define endmsg
static void errorHandler()

◆ converterNotFound() [2/2]

void ITPConverter::converterNotFound ( unsigned typeID,
ITPConverter * c,
const std::string & typeName,
MsgStream & log ) const
virtualinherited

method called when the right TP converter was not found during reading

  • useful as a debugging hook, prints a detailed error message
Parameters
typeID[IN] converter ID that was requested
c[IN] converter that was actually found (0 if not)
typeName[IN] the C++ type name of the type for which converter was searched for
log[IN] output message stream

Definition at line 40 of file ITPConverter.cxx.

44{
45 log << MSG::ERROR << ">>>>>> in parent TP converter " << typeid(*this).name()
46 << " requested TP converter for TP type ID " << typeID << " not found " << endmsg;
47 if( c ) {
48 log << MSG::ERROR << " - found converter " << typeid(*c).name()
49 << " for " << c->transientTInfo().name()
50 << " with an incompatible base type " << c->transBaseTInfo().name()
51 << endmsg;
52 }
53 log << MSG::ERROR << " Converter handle type was " << reqCnvTypeName << endmsg;
55}
virtual const TPObjRef::typeID_t & typeID() const =0
Return TP typeID for persistent objects produced by this converter.

◆ createGenParticle()

HepMC::GenParticlePtr McEventCollectionCnv_p6::createGenParticle ( const GenParticle_p6 & p,
ParticlesMap_t & partToEndVtx,
HepMC::DataPool & datapools,
const HepMC::GenVertexPtr & parent = nullptr,
bool add_to_output = true ) const
protected

Create a transient GenParticle from a persistent one (vers.1) It returns the new GenParticle.

Note that the map being passed as an argument is to hold the association of barcodes to particle so that we can reconnect all the particles to their decay vertex (if any).

Definition at line 709 of file McEventCollectionCnv_p6.cxx.

711{
712 HepMC::GenParticlePtr p(nullptr);
713 if (m_isPileup) {
715 } else {
716 p = datapools.getGenParticle();
717 }
718 if (parent) add_to_output?parent->add_particle_out(p):parent->add_particle_in(p);
719#ifdef HEPMC3
720 p->set_pdg_id( persPart.m_pdgId);
721 p->set_status(HepMC::new_particle_status_from_old(persPart.m_status, persPart.m_barcode)); // UPDATED STATUS VALUE TO NEW SCHEME
722 p->add_attribute("phi",std::make_shared<HepMC3::DoubleAttribute>(persPart.m_phiPolarization));
723 p->add_attribute("theta",std::make_shared<HepMC3::DoubleAttribute>(persPart.m_thetaPolarization));
724 HepMC::suggest_barcode (p, persPart.m_barcode);
725 p->set_generated_mass(persPart.m_generated_mass);
726
727 // Note: do the E calculation in extended (long double) precision.
728 // That happens implicitly on x86 with optimization on; saying it
729 // explicitly ensures that we get the same results with and without
730 // optimization. (If this is a performance issue for platforms
731 // other than x86, one could change to double for those platforms.)
732 if ( 0 == persPart.m_recoMethod ) {
733 double temp_e = std::sqrt( (long double)(persPart.m_px)*persPart.m_px +
734 (long double)(persPart.m_py)*persPart.m_py +
735 (long double)(persPart.m_pz)*persPart.m_pz +
736 (long double)(persPart.m_m) *persPart.m_m );
737 p->set_momentum( HepMC::FourVector(persPart.m_px,persPart.m_py,persPart.m_pz,temp_e));
738 } else {
739 const int signM2 = ( persPart.m_m >= 0. ? 1 : -1 );
740 const double persPart_ene =
741 std::sqrt( std::abs((long double)(persPart.m_px)*persPart.m_px +
742 (long double)(persPart.m_py)*persPart.m_py +
743 (long double)(persPart.m_pz)*persPart.m_pz +
744 signM2* (long double)(persPart.m_m)* persPart.m_m));
745 const int signEne = ( persPart.m_recoMethod == 1 ? 1 : -1 );
746 p->set_momentum(HepMC::FourVector( persPart.m_px,
747 persPart.m_py,
748 persPart.m_pz,
749 signEne * persPart_ene ));
750 }
751
752 // setup flow
753 std::vector<int> flows;
754 const unsigned int nFlow = persPart.m_flow.size();
755 for ( unsigned int iFlow= 0; iFlow != nFlow; ++iFlow ) {
756 flows.push_back(persPart.m_flow[iFlow].second );
757 }
758 //We construct it here as vector w/o gaps.
759 p->add_attribute("flows", std::make_shared<HepMC3::VectorIntAttribute>(flows));
760#else
761 p->m_pdg_id = persPart.m_pdgId;
762 p->m_status = HepMC::new_particle_status_from_old(persPart.m_status, persPart.m_barcode); // UPDATED STATUS VALUE TO NEW SCHEME
763 p->m_polarization.m_theta= static_cast<double>(persPart.m_thetaPolarization);
764 p->m_polarization.m_phi = static_cast<double>(persPart.m_phiPolarization );
765 p->m_production_vertex = 0;
766 p->m_end_vertex = 0;
767 p->m_barcode = persPart.m_barcode;
768 p->m_generated_mass = static_cast<double>(persPart.m_generated_mass);
769
770 // Note: do the E calculation in extended (long double) precision.
771 // That happens implicitly on x86 with optimization on; saying it
772 // explicitly ensures that we get the same results with and without
773 // optimization. (If this is a performance issue for platforms
774 // other than x86, one could change to double for those platforms.)
775 if ( 0 == persPart.m_recoMethod ) {
776
777 p->m_momentum.setPx( persPart.m_px);
778 p->m_momentum.setPy( persPart.m_py);
779 p->m_momentum.setPz( persPart.m_pz);
780 double temp_e = std::sqrt( (long double)(persPart.m_px)*persPart.m_px +
781 (long double)(persPart.m_py)*persPart.m_py +
782 (long double)(persPart.m_pz)*persPart.m_pz +
783 (long double)(persPart.m_m) *persPart.m_m );
784 p->m_momentum.setE( temp_e);
785 } else {
786 const int signM2 = ( persPart.m_m >= 0. ? 1 : -1 );
787 const double persPart_ene =
788 std::sqrt( std::abs((long double)(persPart.m_px)*persPart.m_px +
789 (long double)(persPart.m_py)*persPart.m_py +
790 (long double)(persPart.m_pz)*persPart.m_pz +
791 signM2* (long double)(persPart.m_m)* persPart.m_m));
792 const int signEne = ( persPart.m_recoMethod == 1 ? 1 : -1 );
793 p->m_momentum.set( persPart.m_px,
794 persPart.m_py,
795 persPart.m_pz,
796 signEne * persPart_ene );
797 }
798
799 // setup flow
800 const unsigned int nFlow = persPart.m_flow.size();
801 p->m_flow.clear();
802 for ( unsigned int iFlow= 0; iFlow != nFlow; ++iFlow ) {
803 p->m_flow.set_icode( persPart.m_flow[iFlow].first,
804 persPart.m_flow[iFlow].second );
805 }
806#endif
807
808 if ( persPart.m_endVtx != 0 ) {
809 partToEndVtx[p] = persPart.m_endVtx;
810 }
811
812 return p;
813}
bool suggest_barcode(T &p, int i)
Definition GenEvent.h:690
GenParticlePtr newGenParticlePtr(const HepMC::FourVector &mom=HepMC::FourVector(0.0, 0.0, 0.0, 0.0), int pid=0, int status=0)
Definition GenParticle.h:39
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.
GenParticle * GenParticlePtr
Definition GenParticle.h:37
HepMC::GenParticlePtr getGenParticle()

◆ createGenVertex()

HepMC::GenVertexPtr McEventCollectionCnv_p6::createGenVertex ( const McEventCollection_p6 & persEvts,
const GenVertex_p6 & vtx,
ParticlesMap_t & bcToPart,
HepMC::DataPool & datapools,
HepMC::GenEvent * parent = nullptr ) const
protected

Create a transient GenVertex from a persistent one (version 1) It returns the new GenVertex.

This method calls createGenParticle for each of the out-going particles and only for the in-going particle which are orphans (no production vertex): for optimisation purposes. Note that the map being passed as an argument is to hold the association of barcodes to particle so that we can reconnect all the (non-orphan) particles to their decay vertex (if any).

Definition at line 642 of file McEventCollectionCnv_p6.cxx.

647{
648 HepMC::GenVertexPtr vtx(nullptr);
649 if(m_isPileup) {
651 } else {
652 vtx = datapools.getGenVertex();
653 }
654 if (parent ) parent->add_vertex(vtx);
655#ifdef HEPMC3
656 vtx->set_position(HepMC::FourVector( persVtx.m_x , persVtx.m_y , persVtx.m_z ,persVtx.m_t ));
657 //AV ID cannot be assigned in HepMC3. And its meaning in HepMC2 is not clear.
658 vtx->set_status(HepMC::new_vertex_status_from_old(persVtx.m_id, persVtx.m_barcode)); // UPDATED STATUS VALUE TO NEW SCHEME
659 // cast from std::vector<float> to std::vector<double>
660 std::vector<double> weights( persVtx.m_weights.begin(), persVtx.m_weights.end() );
661 vtx->add_attribute("weights",std::make_shared<HepMC3::VectorDoubleAttribute>(weights));
662 HepMC::suggest_barcode (vtx, persVtx.m_barcode);
663 // handle the in-going (orphans) particles
664 const unsigned int nPartsIn = persVtx.m_particlesIn.size();
665 for ( unsigned int i = 0; i != nPartsIn; ++i ) {
666 createGenParticle( persEvt.m_genParticles[persVtx.m_particlesIn[i]], partToEndVtx, datapools, vtx, false );
667 }
668
669 // now handle the out-going particles
670 const unsigned int nPartsOut = persVtx.m_particlesOut.size();
671 for ( unsigned int i = 0; i != nPartsOut; ++i ) {
672 createGenParticle( persEvt.m_genParticles[persVtx.m_particlesOut[i]], partToEndVtx, datapools, vtx );
673 }
674#else
675 vtx->m_position.setX( persVtx.m_x );
676 vtx->m_position.setY( persVtx.m_y );
677 vtx->m_position.setZ( persVtx.m_z );
678 vtx->m_position.setT( persVtx.m_t );
679 vtx->m_particles_in.clear();
680 vtx->m_particles_out.clear();
681 vtx->m_id = HepMC::new_vertex_status_from_old(persVtx.m_id, persVtx.m_barcode); // UPDATED STATUS VALUE TO NEW SCHEME
682 vtx->m_weights.m_weights.reserve( persVtx.m_weights.size() );
683 vtx->m_weights.m_weights.assign ( persVtx.m_weights.begin(),
684 persVtx.m_weights.end() );
685 vtx->m_event = 0;
686 vtx->m_barcode = persVtx.m_barcode;
687
688 // handle the in-going (orphans) particles
689 const unsigned int nPartsIn = persVtx.m_particlesIn.size();
690 for ( unsigned int i = 0; i != nPartsIn; ++i ) {
691 createGenParticle( persEvt.m_genParticles[persVtx.m_particlesIn[i]],
692 partToEndVtx,
693 datapools );
694 }
695
696 // now handle the out-going particles
697 const unsigned int nPartsOut = persVtx.m_particlesOut.size();
698 for ( unsigned int i = 0; i != nPartsOut; ++i ) {
699 vtx->add_particle_out( createGenParticle( persEvt.m_genParticles[persVtx.m_particlesOut[i]],
700 partToEndVtx,
701 datapools ) );
702 }
703#endif
704
705 return vtx;
706}
int m_barcode
barcode of this vertex (uniquely identifying a vertex within an event)
std::vector< float > m_weights
Weights for this vertex.
int m_id
Id of this vertex.
HepMC::GenParticlePtr createGenParticle(const GenParticle_p6 &p, ParticlesMap_t &partToEndVtx, HepMC::DataPool &datapools, const HepMC::GenVertexPtr &parent=nullptr, bool add_to_output=true) const
Create a transient GenParticle from a persistent one (vers.1) It returns the new GenParticle.
HepMC::GenVertex * GenVertexPtr
Definition GenVertex.h:59
GenVertexPtr newGenVertexPtr(const HepMC::FourVector &pos=HepMC::FourVector(0.0, 0.0, 0.0, 0.0), const int i=0)
Definition GenVertex.h:64
int new_vertex_status_from_old(const int oldStatus, const int barcode)
Get vertex status in the new scheme from the barcode and status in the old scheme.
HepMC::GenVertexPtr getGenVertex()

◆ createPersistent()

virtual PERS * TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::createPersistent ( const TRANS * transObj,
MsgStream & log )
virtualinherited

Create persistent representation of a transient object.

Simply creates a new persistent object and calls transToPers()

Parameters
transObj[IN] transient object
log[IN] output message stream
Returns
the created persistent representation

◆ createPersistentWithKey()

virtual PERS * TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::createPersistentWithKey ( const TRANS * transObj,
const std::string & key,
MsgStream & log )
virtualinherited

Create persistent representation of a transient object, with SG key.

Simply creates a new persistent object and calls transToPersWithKey()

Parameters
transObj[IN] transient object
key[IN] SG key of object being written
log[IN] output message stream
Returns
the created persistent representation

◆ createTransFromPStore()

template<class TRANS>
template<class CNV>
CNV::Trans_t * ITPConverterFor< TRANS >::createTransFromPStore ( CNV ** cnv,
const TPObjRef & ref,
MsgStream & log ) const
inlineinherited

Create transient representation of a persistent object, stored in the the top-level persistent object and referenced by the TP Ref.

If a TP converter is not specified, it will be found based on the Ref type.

Parameters
cnv[IN][OUT] pointer to the converter, usually 0 at the start. Once the right converter is found, this pointer will be set so the search is done only once
ref[IN] TP Ref to the persistent object to be converted
log[IN] output message stream
Returns
pointer to the created transient represention

Definition at line 172 of file TPConverter.h.

172 {
173 if( ref.isNull() ) return 0;
174 CNV *temp_cnv_p = 0;
175 if( !cnv ) cnv = &temp_cnv_p;
176 // see if we already have a converter and if it is the right one
177 if( !*cnv || (*cnv)->typeID().value() != ref.typeID() ) {
178 // we don't - find the right converter for ref.typeID()
179 *cnv = converterForRef( *cnv, ref, log );
180 if( !*cnv ) return 0;
181 (*cnv)->setReadingFlag();
182 }
183 return (**cnv).virt_createTransFromPStore( ref.index(), log );
184 }
CNV * converterForRef(CNV *cnv, const TPObjRef &ref, MsgStream &log) const
Find converter for a TP type ID (passed in a TP Ref), that is or ihnerits from CNV type.
Definition TPConverter.h:74
virtual TRANS * virt_createTransFromPStore(unsigned index, MsgStream &log)=0
Internal interface method that is used to invoke the real conversion method (createTransient) in the ...
unsigned value() const
Returns the type ID as an integer.
Definition TPObjRef.h:46

◆ createTransient()

virtual TRANS * TPPolyCnvBase< TRANS, TRANS, PERS >::createTransient ( const PERS * persObj,
MsgStream & log )
virtualinherited

Create transient representation of a persistent object.

Simply creates a new transient object and calls persToTrans()

Parameters
persObj[IN] persistent object
log[IN] output message stream
Returns
the created transient object

◆ createTransientWithKey()

virtual TRANS * TPPolyCnvBase< TRANS, TRANS, PERS >::createTransientWithKey ( const PERS * persObj,
const std::string & key,
MsgStream & log )
virtualinherited

Create transient representation of a persistent object, with SG key.

Simply creates a new transient object and calls persToTransWithKey()

Parameters
persObj[IN] persistent object
key[IN] SG key of object being read
log[IN] output message stream
Returns
the created transient object

◆ fillTransFromPStore()

template<class TRANS>
template<class CNV, class TRANS_T>
void ITPConverterFor< TRANS >::fillTransFromPStore ( CNV ** cnv,
const TPObjRef & ref,
TRANS_T * trans,
MsgStream & log ) const
inlineinherited

Convert persistent object, stored in the the top-level persistent object and referenced by the TP Ref, to transient representation.

An empty transient object to be filled in is provided. If converter is not given, it will be found based on the Ref type.

Parameters
cnv[IN][OUT] pointer to the converter, usually 0 at the start. Once the right converter is found, this pointer will be set so the search is done only once
ref[IN] TP Ref to the persistent object to be converted
trans[IN] pointer to the empty transient object
log[IN] output message stream

Definition at line 145 of file TPConverter.h.

145 {
146 if( ref.isNull() ) return;
147 CNV *temp_cnv_p = 0;
148 if( !cnv ) cnv = &temp_cnv_p;
149 // see if we already have a converter and if it is the right one
150 if( !*cnv || (*cnv)->typeID().value() != ref.typeID() ) {
151 // we don't - find the right converter for ref.typeID()
152 *cnv = converterForRef( *cnv, ref, log );
153 if( !*cnv ) return;
154 (*cnv)->setReadingFlag();
155 }
156 (**cnv).pstoreToTrans( ref.index(), trans, log );
157 }
virtual void pstoreToTrans(unsigned index, TransBase_t *transObj, MsgStream &log)=0
Internal interface method that is used to invoke the real conversion method (persToTrans) in the deri...

◆ ignoreRecursion()

void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::ignoreRecursion ( bool flag = false)
inlineinherited

Tell the converter to ignore recursion (do not throw errors) even when recurion is detected.

UNSAFE! use only if you are sure you preallocated enough persistent storage

Definition at line 568 of file TPConverter.h.

568 {
570 }
The most basic TP converter template which is parametrized by transient and persistent types.

◆ initPrivateConverters()

◆ operator=()

McEventCollectionCnv_p6 & McEventCollectionCnv_p6::operator= ( const McEventCollectionCnv_p6 & rhs)

Assignement operator.

Definition at line 54 of file McEventCollectionCnv_p6.cxx.

55{
56 if ( this != &rhs ) {
57 Base_t::operator=( rhs );
59 }
60 return *this;
61}

◆ persistentTInfo()

virtual const std::type_info & TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::persistentTInfo ( ) const
inlinevirtualinherited

return C++ type id of the persistent class this converter is for

Returns
std::type_info&

Implements ITPCnvBase.

Definition at line 482 of file TPConverter.h.

482{ return typeid(PERS); }

◆ persToTrans() [1/2]

void McEventCollectionCnv_p6::persToTrans ( const McEventCollection_p6 * persObj,
McEventCollection * transObj,
MsgStream & log )
virtual

Method creating the transient representation of McEventCollection from its persistent representation McEventCollection_p6.

Definition at line 71 of file McEventCollectionCnv_p6.cxx.

74{
75 const EventContext& ctx = Gaudi::Hive::currentContext();
76
77 msg << MSG::DEBUG << "Loading McEventCollection from persistent state..."
78 << endmsg;
79
80 // elements are managed by DataPool
81 if (!m_isPileup) {
82 transObj->clear(SG::VIEW_ELEMENTS);
83 }
84 HepMC::DataPool datapools;
85 const unsigned int nVertices = persObj->m_genVertices.size();
86 datapools.vtx.prepareToAdd(nVertices);
87 const unsigned int nParts = persObj->m_genParticles.size();
88 datapools.part.prepareToAdd(nParts);
89 const unsigned int nEvts = persObj->m_genEvents.size();
90 datapools.evt.prepareToAdd(nEvts);
91
92 transObj->reserve( nEvts );
93 for ( std::vector<GenEvent_p6>::const_iterator
94 itr = persObj->m_genEvents.begin(),
95 itrEnd = persObj->m_genEvents.end();
96 itr != itrEnd;
97 ++itr ) {
98 const GenEvent_p6& persEvt = *itr;
99 HepMC::GenEvent * genEvt(nullptr);
100 if(m_isPileup) {
101 genEvt = new HepMC::GenEvent();
102 } else {
103 genEvt = datapools.getGenEvent();
104 }
105#ifdef HEPMC3
106 genEvt->add_attribute (barcodesStr, std::make_shared<HepMC::GenEventBarcodes>());
107 for (unsigned int i = 0; i < persEvt.m_e_attribute_id.size(); ++i) {
108 if (attributes_to_ignore.count(persEvt.m_e_attribute_name[i])) continue;
109 genEvt->add_attribute(persEvt.m_e_attribute_name[i], std::make_shared<HepMC3::StringAttribute>(persEvt.m_e_attribute_string[i]), persEvt.m_e_attribute_id[i]);
110 }
112
113 genEvt->add_attribute(signalProcessIdStr, std::make_shared<HepMC3::IntAttribute>(persEvt.m_signalProcessId));
114 genEvt->set_event_number(persEvt.m_eventNbr);
115 genEvt->add_attribute(mpiStr, std::make_shared<HepMC3::IntAttribute>(persEvt.m_mpi));
116 genEvt->add_attribute(eventScaleStr, std::make_shared<HepMC3::DoubleAttribute>(persEvt.m_eventScale));
117 genEvt->add_attribute(alphaQcdStr, std::make_shared<HepMC3::DoubleAttribute>(persEvt.m_alphaQCD));
118 genEvt->add_attribute(alphaQedStr, std::make_shared<HepMC3::DoubleAttribute>(persEvt.m_alphaQED));
119 genEvt->add_attribute(filterWeightStr, std::make_shared<HepMC3::DoubleAttribute>(persEvt.m_filterWeight));
120 genEvt->add_attribute(filterHtStr, std::make_shared<HepMC3::DoubleAttribute>(persEvt.m_filterHT));
121 genEvt->add_attribute(filterMetStr, std::make_shared<HepMC3::DoubleAttribute>(persEvt.m_filterMET));
122 genEvt->weights()= persEvt.m_weights;
123 genEvt->add_attribute(randomStatesStr, std::make_shared<HepMC3::VectorLongIntAttribute>(persEvt.m_randomStates));
124
125 genEvt->set_units(static_cast<HepMC3::Units::MomentumUnit>(persEvt.m_momentumUnit),
126 static_cast<HepMC3::Units::LengthUnit>(persEvt.m_lengthUnit));
127
128 //restore weight names from the dedicated svc (which was keeping them in metadata for efficiency)
129 if(!genEvt->run_info()) {
130 HepMC3::GenRunInfoData ri_read;
131 ri_read.weight_names = m_hepMCWeightSvc->weightNameVec(ctx);
132 ri_read.tool_name = std::vector<std::string>();
133 ri_read.tool_version = std::vector<std::string>();
134 ri_read.tool_description = std::vector<std::string>();
135 ri_read.attribute_name = persEvt.m_r_attribute_name;
136 ri_read.attribute_string = persEvt.m_r_attribute_string;
137 auto ri = std::make_shared<HepMC3::GenRunInfo>();
138 ri->read_data(ri_read);
139 genEvt->set_run_info(std::move(ri));
140 }
141 // cross-section restore
142
143 if (!persEvt.m_crossSection.empty()) {
144 auto cs = std::make_shared<HepMC3::GenCrossSection>();
145 const std::vector<double>& xsection = persEvt.m_crossSection;
146 genEvt->set_cross_section(cs);
147 if( static_cast<bool>(xsection[0]) )
148 cs->set_cross_section(xsection[2],xsection[1]);
149 else
150 cs->set_cross_section(-1.0, -1.0);
151 }
152
153 // heavyIon restore
154 if (!persEvt.m_heavyIon.empty()) {
155 auto hi = std::make_shared<HepMC3::GenHeavyIon>();
156 const std::vector<float>& hIon = persEvt.m_heavyIon;
157 //AV NOTE THE ORDER
158 hi->set(
159 static_cast<int>(hIon[12]), // Ncoll_hard
160 static_cast<int>(hIon[11]), // Npart_proj
161 static_cast<int>(hIon[10]), // Npart_targ
162 static_cast<int>(hIon[9]), // Ncoll
163 static_cast<int>(hIon[8]), // spectator_neutrons
164 static_cast<int>(hIon[7]), // spectator_protons
165 static_cast<int>(hIon[6]), // N_Nwounded_collisions
166 static_cast<int>(hIon[5]), // Nwounded_N_collisions
167 static_cast<int>(hIon[4]), // Nwounded_Nwounded_collisions
168 hIon[3], // impact_parameter
169 hIon[2], // event_plane_angle
170 hIon[1], // eccentricity
171 hIon[0] ); // sigma_inel_NN
172 genEvt->set_heavy_ion(std::move(hi));
173 }
174
175
176
177 // pdfinfo restore
178 if (!persEvt.m_pdfinfo.empty())
179 {
180 const std::vector<double>& pdf = persEvt.m_pdfinfo;
181 HepMC3::GenPdfInfoPtr pi = std::make_shared<HepMC3::GenPdfInfo>();
182 pi->set(static_cast<int>(pdf[8]), // id1
183 static_cast<int>(pdf[7]), // id2
184 pdf[4], // x1
185 pdf[3], // x2
186 pdf[2], // scalePDF
187 pdf[1], // pdf1
188 pdf[0], // pdf2
189 static_cast<int>(pdf[6]), // pdf_id1
190 static_cast<int>(pdf[5]));// pdf_id2
191 genEvt->set_pdf_info(std::move(pi));
192 }
193 transObj->push_back( genEvt );
194
195 // create a temporary map associating the barcode of an end-vtx to its
196 // particle.
197 // As not all particles are stable (d'oh!) we take 50% of the number of
198 // particles as an initial size of the hash-map (to prevent re-hash)
199 ParticlesMap_t partToEndVtx( (persEvt.m_particlesEnd - persEvt.m_particlesBegin)/2 );
200 // This is faster than the HepMC::barcode_to_vertex
201 std::map<int, HepMC::GenVertexPtr> brc_to_vertex;
202
203 // create the vertices
204 const unsigned int endVtx = persEvt.m_verticesEnd;
205 for ( unsigned int iVtx = persEvt.m_verticesBegin; iVtx != endVtx; ++iVtx ) {
206 auto vtx = createGenVertex( *persObj, persObj->m_genVertices[iVtx], partToEndVtx, datapools, genEvt );
207 brc_to_vertex[persObj->m_genVertices[iVtx].m_barcode] = std::move(vtx);
208 } //> end loop over vertices
209
210 // set the signal process vertex
211 const int sigProcVtx = persEvt.m_signalProcessVtx;
212 if ( sigProcVtx != 0 && brc_to_vertex.count(sigProcVtx) ) {
213 HepMC::set_signal_process_vertex(genEvt, brc_to_vertex[sigProcVtx] );
214 }
215
216 // connect particles to their end vertices
217 for (auto & p : partToEndVtx) {
218 if ( brc_to_vertex.count(p.second) ) {
219 auto decayVtx = brc_to_vertex[p.second];
220 decayVtx->add_particle_in( p.first );
221 } else {
222 msg << MSG::ERROR << "GenParticle points to null end vertex !!" << endmsg;
223 }
224 }
225 // set the beam particles
226 const int beamPart1 = persEvt.m_beamParticle1;
227 const int beamPart2 = persEvt.m_beamParticle2;
228 if ( beamPart1 != 0 && beamPart2 != 0 ) {
229 genEvt->set_beam_particles(HepMC::barcode_to_particle(genEvt, beamPart1),
230 HepMC::barcode_to_particle(genEvt, beamPart2));
231 }
232
233#else
234 genEvt->m_signal_process_id = persEvt.m_signalProcessId;
235 genEvt->m_event_number = persEvt.m_eventNbr;
236 genEvt->m_mpi = persEvt.m_mpi;
237 genEvt->m_event_scale = persEvt.m_eventScale;
238 genEvt->m_alphaQCD = persEvt.m_alphaQCD;
239 genEvt->m_alphaQED = persEvt.m_alphaQED;
240 genEvt->m_signal_process_vertex = 0;
241 genEvt->m_beam_particle_1 = 0;
242 genEvt->m_beam_particle_2 = 0;
243 genEvt->m_weights = persEvt.m_weights;
244 genEvt->m_random_states = persEvt.m_randomStates;
245 genEvt->m_vertex_barcodes.clear();
246 genEvt->m_particle_barcodes.clear();
247 genEvt->m_momentum_unit = static_cast<HepMC::Units::MomentumUnit>(persEvt.m_momentumUnit);
248 genEvt->m_position_unit = static_cast<HepMC::Units::LengthUnit>(persEvt.m_lengthUnit);
249
250 //restore weight names from the dedicated svc (which was keeping them in metadata for efficiency)
251 genEvt->m_weights.m_names = m_hepMCWeightSvc->weightNames(ctx);
252
253 // cross-section restore
254 if( genEvt->m_cross_section )
255 delete genEvt->m_cross_section;
256 genEvt->m_cross_section = 0;
257
258 if (!persEvt.m_crossSection.empty()) {
259 genEvt->m_cross_section = new HepMC::GenCrossSection();
260 const std::vector<double>& xsection = persEvt.m_crossSection;
261 if( static_cast<bool>(xsection[0]) )
262 genEvt->m_cross_section->set_cross_section(xsection[2],xsection[1]);
263 }
264
265 // heavyIon restore
266 if(genEvt->m_heavy_ion )
267 delete genEvt->m_heavy_ion;
268 genEvt->m_heavy_ion = 0;
269 if (!persEvt.m_heavyIon.empty()) {
270 const std::vector<float>& hIon = persEvt.m_heavyIon;
271 genEvt->m_heavy_ion = new HepMC::HeavyIon
272 (
273 static_cast<int>(hIon[12]), // Ncoll_hard
274 static_cast<int>(hIon[11]), // Npart_proj
275 static_cast<int>(hIon[10]), // Npart_targ
276 static_cast<int>(hIon[9]), // Ncoll
277 static_cast<int>(hIon[8]), // spectator_neutrons
278 static_cast<int>(hIon[7]), // spectator_protons
279 static_cast<int>(hIon[6]), // N_Nwounded_collisions
280 static_cast<int>(hIon[5]), // Nwounded_N_collisions
281 static_cast<int>(hIon[4]), // Nwounded_Nwounded_collisions
282 hIon[3], // impact_parameter
283 hIon[2], // event_plane_angle
284 hIon[1], // eccentricity
285 hIon[0] ); // sigma_inel_NN
286 }
287
288
289
290 // pdfinfo restore
291 if(genEvt->m_pdf_info)
292 delete genEvt->m_pdf_info;
293 genEvt->m_pdf_info = 0;
294 if (!persEvt.m_pdfinfo.empty()) {
295 const std::vector<double>& pdf = persEvt.m_pdfinfo;
296 genEvt->m_pdf_info = new HepMC::PdfInfo
297 (
298 static_cast<int>(pdf[8]), // id1
299 static_cast<int>(pdf[7]), // id2
300 pdf[4], // x1
301 pdf[3], // x2
302 pdf[2], // scalePDF
303 pdf[1], // pdf1
304 pdf[0], // pdf2
305 static_cast<int>(pdf[6]), // pdf_id1
306 static_cast<int>(pdf[5]) // pdf_id2
307 );
308 }
309
310 transObj->push_back( genEvt );
311
312 // create a temporary map associating the barcode of an end-vtx to its
313 // particle.
314 // As not all particles are stable (d'oh!) we take 50% of the number of
315 // particles as an initial size of the hash-map (to prevent re-hash)
316 ParticlesMap_t partToEndVtx( (persEvt.m_particlesEnd-
317 persEvt.m_particlesBegin)/2 );
318
319 // create the vertices
320 const unsigned int endVtx = persEvt.m_verticesEnd;
321 for ( unsigned int iVtx= persEvt.m_verticesBegin; iVtx != endVtx; ++iVtx ) {
322 genEvt->add_vertex( createGenVertex( *persObj,
323 persObj->m_genVertices[iVtx],
324 partToEndVtx,
325 datapools ) );
326 } //> end loop over vertices
327
328 // set the signal process vertex
329 const int sigProcVtx = persEvt.m_signalProcessVtx;
330 if ( sigProcVtx != 0 ) {
331 genEvt->set_signal_process_vertex( genEvt->barcode_to_vertex( sigProcVtx ) );
332 }
333
334 // connect particles to their end vertices
335 for ( ParticlesMap_t::iterator
336 p = partToEndVtx.begin(),
337 endItr = partToEndVtx.end();
338 p != endItr;
339 ++p ) {
340 auto decayVtx = HepMC::barcode_to_vertex(genEvt, p->second );
341 if ( decayVtx ) {
342 decayVtx->add_particle_in( p->first );
343 } else {
344 msg << MSG::ERROR
345 << "GenParticle points to null end vertex !!"
346 << endmsg;
347 }
348 }
349
350 // set the beam particles
351 const int beamPart1 = persEvt.m_beamParticle1;
352 const int beamPart2 = persEvt.m_beamParticle2;
353 if ( beamPart1 != 0 && beamPart2 !=0 ) {
354 genEvt->set_beam_particles(genEvt->barcode_to_particle(beamPart1),
355 genEvt->barcode_to_particle(beamPart2));
356 }
357
358#endif
359
360
361 } //> end loop over m_genEvents
362
363 msg << MSG::DEBUG << "Loaded McEventCollection from persistent state [OK]"
364 << endmsg;
365}
static const std::set< std::string > attributes_to_ignore
#define pi
void prepareToAdd(unsigned int size)
Prepare to add cached elements.
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
void clear()
Erase all the elements in the collection.
double m_alphaQED
value of the QED coupling.
int m_momentumUnit
HepMC::Units::MomentumUnit casted to int.
int m_signalProcessId
Id of the processus being generated.
Definition GenEvent_p6.h:81
unsigned int m_particlesBegin
Begin position in the vector of particles composing this event.
std::vector< double > m_crossSection
Container of HepMC::GenCrossSection object translated to vector<double>.
int m_mpi
Number of multi particle interactions.
Definition GenEvent_p6.h:89
int m_eventNbr
Event number.
Definition GenEvent_p6.h:85
std::vector< long int > m_randomStates
Container of random numbers for the generator states.
std::vector< std::string > m_r_attribute_name
Attribute name for run info.
unsigned int m_verticesEnd
End position in the vector of vertices composing this event.
std::vector< int > m_e_attribute_id
We define those exactly as in the HepMC3::GenEvent.
unsigned int m_verticesBegin
Begin position in the vector of vertices composing this event.
std::vector< double > m_pdfinfo
Container of HepMC::PdfInfo object translated to vector<double> for simplicity.
std::vector< double > m_weights
Weights for this event.
int m_beamParticle1
Barcode of the beam particle 1.
std::vector< std::string > m_e_attribute_string
Attribute serialized as string for event.
int m_signalProcessVtx
Barcode of the GenVertex holding the signal process.
int m_beamParticle2
Barcode of the beam particle 2.
unsigned int m_particlesEnd
End position in the vector of particles composing this event.
double m_eventScale
Energy scale.
Definition GenEvent_p6.h:93
double m_alphaQCD
value of the QCD coupling.
Definition GenEvent_p6.h:97
int m_lengthUnit
HepMC::Units::LengthUnit casted to int.
std::vector< std::string > m_r_attribute_string
Attribute serialized as string for run info.
double m_filterWeight
value of the extra weight introduced during reweighting events in filter and value of some variables ...
std::vector< std::string > m_e_attribute_name
Attribute name for event.
std::vector< float > m_heavyIon
Container of HepMC::HeavyIon object translated to vector<double>.
HepMC::GenVertexPtr createGenVertex(const McEventCollection_p6 &persEvts, const GenVertex_p6 &vtx, ParticlesMap_t &bcToPart, HepMC::DataPool &datapools, HepMC::GenEvent *parent=nullptr) const
Create a transient GenVertex from a persistent one (version 1) It returns the new GenVertex.
std::unordered_map< HepMC::GenParticlePtr, int > ParticlesMap_t
std::vector< GenParticle_p6 > m_genParticles
The vector of persistent representation of GenParticles.
std::vector< GenEvent_p6 > m_genEvents
The vector of persistent representation of GenEvents.
std::vector< GenVertex_p6 > m_genVertices
The vector of persistent representation of GenVertices.
void set_signal_process_vertex(GenEvent *e, T v)
Definition GenEvent.h:670
GenParticle * barcode_to_particle(const GenEvent *e, int id)
Definition GenEvent.h:648
GenVertex * barcode_to_vertex(const GenEvent *e, int id)
Definition GenEvent.h:647
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
GenPartPool_t part
an arena of HepMC::GenParticle for efficient object instantiation
HepMC::GenEvent * getGenEvent()
GenVtxPool_t vtx
an arena of HepMC::GenVertex for efficient object instantiation
GenEvtPool_t evt
an arena of HepMC::GenEvent for efficient object instantiation
MsgStream & msg
Definition testRead.cxx:32

◆ persToTrans() [2/2]

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::persToTrans ( const PERS * persObj,
TRANS * transObj,
MsgStream & log )
pure virtualinherited

Convert persistent representation to transient one.

Copies data members from persistent object to an existing transient one. Needs to be implemented by the developer on the actual converter.

Parameters
persObj[IN] persistent object
transObj[IN] transient object
log[IN] output message stream

Implemented in AFP_SiDigiCnv_p1, AFP_SIDLocRecoEvCollectionCnv_p1, AFP_SIDLocRecoEventCnv_p1, AFP_SIDSimHitCnv_p1, AFP_TDDigiCnv_p1, AFP_TDLocRecoEvCollectionCnv_p1, AFP_TDLocRecoEventCnv_p1, AFP_TDSimHitCnv_p1, ALFA_CLinkEventCnv_p1, ALFA_DigitCnv_p1, ALFA_DigitCollectionCnv_p1, ALFA_GloRecEvCollectionCnv_p1, ALFA_GloRecEventCnv_p1, ALFA_HitCnv_p1, ALFA_LocRecCorrEvCollectionCnv_p1, ALFA_LocRecCorrEventCnv_p1, ALFA_LocRecCorrODEvCollectionCnv_p1, ALFA_LocRecCorrODEventCnv_p1, ALFA_LocRecEvCollectionCnv_p1, ALFA_LocRecEventCnv_p1, ALFA_LocRecODEvCollectionCnv_p1, ALFA_LocRecODEventCnv_p1, ALFA_ODDigitCnv_p1, ALFA_ODDigitCollectionCnv_p1, ALFA_ODHitCnv_p1, ALFA_RawDataCnv_charge_p1, ALFA_RawDataCnv_p1, AthenaBarCodeCnv_p1, CaloClusterContainerCnv_p1, CaloClusterContainerCnv_p2, CaloClusterContainerCnv_p3, CaloClusterContainerCnv_p4, CaloClusterContainerCnv_p5, CaloClusterContainerCnv_p6, CaloClusterContainerCnv_p7, CaloEnergyCnv_p1, CaloShowerContainerCnv_p1, CaloShowerContainerCnv_p2, CaloTopoTowerContainerCnv_p1, CaloTowerContainerCnv_p1, ChamberT0sCnv_p1, CompositeParticleCnv_p1, CompositeParticleContainerCnv_p1, DataLinkCnv_p1< DLINK_TYPE >, DataLinkCnv_p1< DataLink< ALFA_DigitCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecCorrEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecCorrODEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecODEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_ODDigitCollection > >, DataLinkCnv_p1< DataLink< ALFA_RawDataContainer > >, DataLinkCnv_p1< DataLink< CaloCellContainer > >, DataLinkCnv_p1< DataLink< CaloClusterContainer > >, DataLinkCnv_p1< DataLink< CaloTowerContainer > >, DataLinkCnv_p1< DataLink< INav4MomAssocs > >, DataLinkCnv_p1< DataLink< LArSamples::Container > >, DataLinkCnv_p1< DataLink< LArSamples::ParticleBaseContainer > >, DataLinkCnv_p2< DLINK_TYPE >, DataLinkCnv_p2< DataLink< CaloCellContainer > >, DataLinkCnv_p2< DataLink< INav4MomAssocs > >, DataLinkCnv_p2< DataLink< INav4MomToTrackParticleAssocs > >, DataLinkCnv_p2< DataLink< TrackParticleAssocs > >, DepositInCaloCnv_p1, DepositInCaloCnv_p2, DetailedTrackTruthCnv_p1, DetailedTrackTruthCnv_p2, DetailedTrackTruthCnv_p3, DetailedTrackTruthCnv_p4, DMTest::CLinksAODCnv_p1, ElementLinkCnv_p1< LINK_TYPE >, ElementLinkCnv_p1< ElementLink< Analysis::MuonContainer > >, ElementLinkCnv_p1< ElementLink< AthExParticles > >, ElementLinkCnv_p1< ElementLink< CaloCellLinkContainer > >, ElementLinkCnv_p1< ElementLink< CaloClusterContainer > >, ElementLinkCnv_p1< ElementLink< CaloShowerContainer > >, ElementLinkCnv_p1< ElementLink< ElectronContainer > >, ElementLinkCnv_p1< ElementLink< InDet::PixelClusterContainer > >, ElementLinkCnv_p1< ElementLink< InDet::SCT_ClusterContainer > >, ElementLinkCnv_p1< ElementLink< InDet::TRT_DriftCircleContainer > >, ElementLinkCnv_p1< ElementLink< McEventCollection > >, ElementLinkCnv_p1< ElementLink< Muon::CscPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< Muon::MdtPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< Muon::RpcPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< Muon::TgcPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< MuonCaloEnergyContainer > >, ElementLinkCnv_p1< ElementLink< MuonFeatureContainer > >, ElementLinkCnv_p1< ElementLink< PhotonContainer > >, ElementLinkCnv_p1< ElementLink< Rec::TrackParticleContainer > >, ElementLinkCnv_p1< ElementLink< RingerRingsContainer > >, ElementLinkCnv_p1< ElementLink< TileMuFeatureContainer > >, ElementLinkCnv_p1< ElementLink< TrigEFBphysContainer > >, ElementLinkCnv_p1< ElementLink< TrigEMClusterContainer > >, ElementLinkCnv_p1< ElementLink< TrigInDetTrackCollection > >, ElementLinkCnv_p1< ElementLink< TrigL2BphysContainer > >, ElementLinkCnv_p1< ElementLink< TrigTauClusterDetailsContainer > >, ElementLinkCnv_p1< ElementLink< TruthEtIsolationsContainer > >, ElementLinkCnv_p1< ElementLink< VxContainer > >, ElementLinkCnv_p3< LINK_TYPE >, ElementLinkCnv_p3< ElementLink< CaloCellContainer > >, ElementLinkCnv_p3< ElementLink< CaloCellLinkContainer > >, ElementLinkCnv_p3< ElementLink< CaloClusterContainer > >, ElementLinkCnv_p3< ElementLink< CaloRingsContainer > >, ElementLinkCnv_p3< ElementLink< CaloShowerContainer > >, ElementLinkCnv_p3< ElementLink< DataVector< C_v1 > > >, ElementLinkCnv_p3< ElementLink< DataVector< TrackParticleBase > > >, ElementLinkCnv_p3< ElementLink< DataVector< Trk::Track > > >, ElementLinkCnv_p3< ElementLink< ExampleHitContainer > >, ElementLinkCnv_p3< ElementLink< INavigable4MomentumCollection > >, ElementLinkCnv_p3< ElementLink< McEventCollection > >, ElementLinkCnv_p3< ElementLink< Muon::CscPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::MdtPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::MMPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::RpcPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::sTgcPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::TgcPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< MuonCaloEnergyContainer > >, ElementLinkCnv_p3< ElementLink< MuonFeatureContainer > >, ElementLinkCnv_p3< ElementLink< Rec::TrackParticleContainer > >, ElementLinkCnv_p3< ElementLink< RingerRingsContainer > >, ElementLinkCnv_p3< ElementLink< TileMuFeatureContainer > >, ElementLinkCnv_p3< ElementLink< TrigEFBphysContainer > >, ElementLinkCnv_p3< ElementLink< TrigEMClusterContainer > >, ElementLinkCnv_p3< ElementLink< TrigInDetTrackCollection > >, ElementLinkCnv_p3< ElementLink< TrigL2BphysContainer > >, ElementLinkCnv_p3< ElementLink< TrigMuonEFInfoContainer > >, ElementLinkCnv_p3< ElementLink< TrigTauClusterDetailsContainer > >, ElementLinkCnv_p3< ElementLink< TruthEtIsolationsContainer > >, ElementLinkCnv_p3< ElementLink< VxContainer > >, ElementLinkCnv_p3< MasterLink_t >, ElementLinkCnv_p3< typename LinkVect_t::value_type >, ElementLinkVectorCnv_p1< LINK_VECT >, ElementLinkVectorCnv_p1< ElementLinkVector< AthExIParticles > >, ElementLinkVectorCnv_p1< ElementLinkVector< DataVector< C_v1 > > >, ElementLinkVectorCnv_p1< ElementLinkVector< egDetailContainer > >, ElementLinkVectorCnv_p1< ElementLinkVector< ExampleHitContainer > >, ElementLinkVectorCnv_p1< ElementLinkVector< Rec::TrackParticleContainer > >, ElementLinkVectorCnv_p1< ElementLinkVector< Trk::SegmentCollection > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename NAV::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< Analysis::MuonContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< CaloCellContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< ElectronContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< PhotonContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< Rec::TrackParticleContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< VxContainer > >, EnergyLossCnv_p1, EventIDCnv_p1, EventInfoCnv_p1, EventInfoCnv_p2, EventInfoCnv_p3, EventInfoCnv_p4, EventStreamInfoCnv_p1, EventStreamInfoCnv_p2, EventStreamInfoCnv_p3, EventTypeCnv_p1, EventTypeCnv_p3, FitQualityCnv_p1, HepLorentzVectorCnv_p1, HepMcParticleLinkCnv_p1, HepMcParticleLinkCnv_p2, HepMcParticleLinkCnv_p3, INav4MomAssocsCnv_p1, INav4MomAssocsCnv_p2, INav4MomAssocsCnv_p3, INav4MomLinkContainerCnv_p1, INav4MomToTrackParticleAssocsCnv_p1, IParticleLinkContainerCnv_p1, JetCnv_p1, JetCnv_p2, JetCnv_p3, JetCnv_p4, JetCollectionCnv_p1, JetCollectionCnv_p2, JetCollectionCnv_p3, JetCollectionCnv_p4, JetCollectionCnv_p5, JetCollectionCnv_p6, JetConverterBase< Jet_p5 >, JetConverterBase< Jet_p6 >, JetKeyDescriptorCnv_p1, JetMomentMapConverterBase< JetMomentMap_p1 >, JetMomentMapConverterBase< JetMomentMap_p6 >, JetSamplingCnv_p1, JetSamplingCnv_p2, JetSamplingCollectionCnv_p1, JetSamplingCollectionCnv_p2, LArAutoCorrSubsetCnv_p1, LArCaliWaveSubsetCnv_p1, LArCaliWaveSubsetCnv_p2, LArCaliWaveSubsetCnv_p3, LArDigitContainerCnv_p1, LArDigitContainerCnv_p2, LArDigitContainerCnv_p3, LArDSPThresholdsSubsetCnv_p1, LArFebErrorSummaryCnv_p1, LArLATOMEHeaderContainerCnv_p1, LArMphysOverMcalSubsetCnv_p1, LArNoisyROSummaryCnv_p1, LArNoisyROSummaryCnv_p2, LArNoisyROSummaryCnv_p3, LArNoisyROSummaryCnv_p4, LArNoisyROSummaryCnv_p5, LArNoisyROSummaryCnv_p6, LArOFCBinSubsetCnv_p1, LArOFCSubsetCnv_p1, LArPedestalMCCnv_p1, LArPedestalSubsetCnv_p1, LArPedestalSubsetCnv_p2, LArPhysWaveSubsetCnv_p1, LArRampSubsetCnv_p1, LArRawChannelCnv_p1, LArRawChannelCnv_p2, LArRawChannelContainerCnv_p1, LArRawChannelContainerCnv_p2, LArRawChannelContainerCnv_p3, LArRawChannelContainerCnv_p4, LArRawSCContainerCnv_p1, LArSCDigitContainerCnv_p1, LArShapeSubsetCnv_p1, LArShapeSubsetCnv_p2, LArSingleFloatSubsetCnv_p1, LArTTL1Cnv_p1, LUCID_DigitCnv_p1, LUCID_DigitCnv_p2, LUCID_DigitContainerCnv_p1, LUCID_DigitContainerCnv_p2, LUCID_RawDataCnv_p1, LUCID_RawDataContainerCnv_p1, LVL1_ROICnv_p1, LVL1CTP::Lvl1ResultCnv_p1, LVL1CTP::Lvl1ResultCnv_p2, MergedEventInfoCnv_p1, MergedEventInfoCnv_p2, MissingEtCaloCnv_p1, MissingEtCaloCnv_p2, MissingEtCaloCnv_p3, MissingETCnv_p1, MissingETCnv_p2, MissingETCnv_p3, MissingETCompositionConverterBase< MissingETComposition_p1 >, MissingETCompositionConverterBase< MissingETComposition_p2 >, MissingEtRegionsCnv_p1, MissingEtRegionsCnv_p2, MissingEtRegionsCnv_p3, MissingEtTruthCnv_p1, MissingEtTruthCnv_p2, MissingEtTruthCnv_p3, MuonCnv_p1, MuonCnv_p2, MuonCnv_p3, MuonCnv_p4, MuonCnv_p5, MuonCnv_p6, MuonContainerCnv_p1, MuonContainerCnv_p2, MuonSpShowerCnv_p1, MuonSpShowerContainerCnv_p1, NavigableCnv_p1< NAV, RPAR >, NavigableCnv_p1< NAV, NavigationDefaults::DefaultWeight >, NavigableCnv_p1< Navigable< Analysis::MuonContainer, double >, float >, NavigableCnv_p1< Navigable< CaloCellContainer, double >, float >, NavigableCnv_p1< Navigable< ElectronContainer, double >, float >, NavigableCnv_p1< Navigable< INavigable4MomentumCollection, double > >, NavigableCnv_p1< Navigable< PhotonContainer, double >, float >, NavigableCnv_p1< Navigable< Rec::TrackParticleContainer, double >, float >, NavigableCnv_p2< NAV, RPAR >, NavigableCnv_p2< MissingETComposition, MissingETComposition_p1::Weight_p1 >, NavigableCnv_p2< MissingETComposition, Weight_p1 >, NavigableCnv_p2< NAV, NavigationDefaults::DefaultWeight >, NavigableCnv_p2< Navigable< ExampleHitContainer > >, NavigableCnv_p2< Navigable< ExampleHitContainer, double > >, NavigableCnv_p2< Navigable< INavigable4MomentumCollection, double >, float >, NeutrinoCnv_p1, NeutrinoCnv_p2, P4EEtaPhiMCnv_p1, P4EEtaPhiMCnv_p2, P4ImplEEtaPhiMCnv_p1, P4ImplEEtaPhiMCnv_p2, P4ImplIPtCotThPhiMCnv_p1, P4ImplPtEtaPhiMCnv_p1, P4ImplPtEtaPhiMCnv_p2, P4ImplPxPyPzECnv_p1, P4IPtCotThPhiMCnv_p1, P4PtEtaPhiMCnv_p1, P4PtEtaPhiMCnv_p2, P4PxPyPzECnv_p1, ParticleBaseCnv_p1, ParticleBaseCnv_p2, ParticleJetCnv_p1, ParticleLinksCnv_p1< Container >, ParticleLinksCnv_p1< ParticleBaseContainer >, ParticleShallowCloneCnv_p1, ParticleShallowCloneContainerCnv_p1, PileUpEventInfoCnv_p1, PileUpEventInfoCnv_p2, PileUpEventInfoCnv_p3, PileUpEventInfoCnv_p4, PileUpEventInfoCnv_p5, RingerRingsCnv_p1, RingerRingsCnv_p2, RpcByteStreamErrorContainerCnv_p1, RpcSectorLogicContainerCnv_p1, SelectedParticlesCnv_p1, SubDetHitStatisticsCnv_p0, T_AthenaHitsVectorCnv< TRANS, PERS, CONV >, T_AtlasHitsVectorCnv< TRANS, PERS, CONV >, TBADCRawContCnv_p1, TBBPCContCnv_p1, TBEventInfoCnv_p1, TBLArDigitContainerCnv_p1, TBMWPCContCnv_p1, TBPhaseCnv_p1, TBScintillatorContCnv_p1, TBTailCatcherCnv_p1, TBTDCCnv_p1, TBTDCRawContCnv_p1, TBTrackCnv_p1, TBTrackInfoCnv_p1, TBTriggerPatternUnitCnv_p1, TileBeamElemCnv_p1, TileCosmicMuonCnv_p1, TileCosmicMuonCnv_p2, TileDigitsCnv_p1, TileDigitsCnv_p2, TileDigitsCnv_p3, TileHitCnv_p1, TileL2Cnv_p1, TileL2Cnv_p2, TileMuCnv_p1, TileMuonReceiverObjCnv_p1, TileRawChannelCnv_p1, TileTTL1CellCnv_p1, TileTTL1Cnv_p1, TPCnvIDCont< TRANS, PERS, CONV >, TPCnvIDContFromIdentifier< TRANS, PERS, CONV >, TPCnvStdVector< TRANS, PERS, CONV >, TPCnvVector< TRANS, PERS, CONV >, TPConverterConstBase< TRANS, PERS >, TPPtrVectorCnv< TRANS, PERS, CONV >, TPValVectorCnv< TRANS, PERS, CONV >, TrackParticleAssocsCnv_p1, TrackParticleTruthCollectionCnv_p1, TrackParticleTruthCollectionCnv_p2, TrackParticleTruthCollectionCnv_p3, TrackRecordCnv_p1, TrackRecordCnv_p2, TrigCaloClusterCnv_p1, TrigCaloClusterCnv_p2, TrigCaloClusterCnv_p3, TrigConfAlgCnv_p1, TrigConfChainCnv_p1, TrigConfSeqCnv_p1, TrigConfSigCnv_p1, TrigDec::TrigDecisionCnv_p2, TrigDec::TrigDecisionCnv_p3, TrigDec::TrigDecisionCnv_p4, TrigDec::TrigDecisionCnv_p5, TrigEMClusterCnv_p3, TrigEMClusterCnv_p4, TrigEMClusterConverterBase< TrigEMCluster_p1 >, TrigEMClusterConverterBase< TrigEMCluster_p2 >, TriggerInfoCnv_p1, TriggerInfoCnv_p2, TrigMonAlgCnv_p1, TrigMonConfigCnv_p1, TrigMonEventCnv_p1, TrigMonROBCnv_p1, TrigMonROBDataCnv_p1, TrigMonROBDataCnv_p2, TrigMonRoiCnv_p1, TrigMonSeqCnv_p1, TrigMonTECnv_p1, TrigRNNOutputCnv_p2, TrigRNNOutputConverterBase< TrigRNNOutput_p1 >, TrigT2JetCnv_p1, TrigT2JetCnv_p2, TrigT2JetCnv_p3, TrigT2MbtsBitsCnv_p1, TrigT2MbtsBitsCnv_p2, TrigT2MbtsBitsCnv_p3, TrigT2ZdcSignalsCnv_p1, TrigTauClusterCnv_p1, TrigTauClusterCnv_p2, TrigTauClusterCnv_p3, TrigTauClusterCnv_p4, TrigTauClusterCnv_p5, TrigTauClusterDetailsCnv_p1, TrigTauClusterDetailsCnv_p2, TruthEtIsolationsCnv_p1, TruthParticleContainerCnv_p5, TruthParticleContainerCnv_p6, TruthTrajectoryCnv_p1, TruthTrajectoryCnv_p2, TruthTrajectoryCnv_p3, xAODBTaggingAuxContainerCnv_v1, xAODCaloClusterAuxContainerCnv_v1, xAODElectronAuxContainerCnv_v1, xAODElectronAuxContainerCnv_v2, xAODEmTauRoIAuxContainerCnv_v1, xAODEmTauRoIContainerCnv_v1, xAODEnergySumRoIAuxInfoCnv_v1, xAODEnergySumRoICnv_v1, xAODEventAuxInfoCnv_v1, xAODEventAuxInfoCnv_v2, xAODJetRoIAuxContainerCnv_v1, xAODJetRoIContainerCnv_v1, xAODJetTrigAuxContainerCnv_v1, xAODL2StandAloneMuonAuxContainerCnv_v1, xAODL2StandAloneMuonContainerCnv_v1, xAODMissingETAuxAssociationMapCnv_v1, xAODMuonAuxContainerCnv_v1, xAODMuonAuxContainerCnv_v2, xAODMuonAuxContainerCnv_v3, xAODMuonAuxContainerCnv_v4, xAODPhotonAuxContainerCnv_v1, xAODPhotonAuxContainerCnv_v2, xAODRODHeaderAuxContainerCnv_v1, xAODRODHeaderContainerCnv_v1, xAODTauJetAuxContainerCnv_v1, xAODTauJetContainerCnv_v1, xAODTauJetContainerCnv_v2, xAODTrackCaloClusterAuxContainerCnv_v1, xAODTrackParticleAuxContainerCnv_v1, xAODTrackParticleAuxContainerCnv_v2, xAODTrackParticleAuxContainerCnv_v3, xAODTrackParticleAuxContainerCnv_v4, xAODTrigCompositeAuxContainerCnv_v1, xAODTrigRingerRingsAuxContainerCnv_v1, xAODTrigRingerRingsContainerCnv_v1, xAODTrigRNNOutputAuxContainerCnv_v1, xAODTrigRNNOutputContainerCnv_v1, xAODTruthParticleAuxContainerCnv_v1, xAODTruthVertexAuxContainerCnv_v1, ZDC_SimFiberHit_CollectionCnv_p1, ZDC_SimFiberHitCnv_p1, ZdcDigitsCnv_p1, ZdcDigitsCollectionCnv_p1, ZdcRawChannelCnv_p1, and ZdcRawChannelCollectionCnv_p1.

◆ persToTransUntyped()

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::persToTransUntyped ( const void * pers,
void * trans,
MsgStream & log )
inlinevirtualinherited

Convert persistent object representation to transient.

Parameters
pers[IN] void* pointer to the persistent object
trans[OUT] void* pointer to the empty transient object
log[IN] output message stream

Implements ITPCnvBase.

Definition at line 400 of file TPConverter.h.

403 {
404 persToTrans (reinterpret_cast<const PERS*> (pers),
405 reinterpret_cast<TRANS*> (trans),
406 log);
407 }
virtual void persToTrans(const PERS *persObj, TRANS *transObj, MsgStream &log)=0

◆ persToTransWithKey()

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::persToTransWithKey ( const PERS * persObj,
TRANS * transObj,
const std::string & ,
MsgStream & log )
inlinevirtualinherited

Convert persistent representation to transient one.

Copies data members from persistent object to an existing transient one. Needs to be implemented by the developer on the actual converter.

Parameters
persObj[IN] persistent object
transObj[IN] transient object
log[IN] output message stream

Reimplemented in AthExParticlesCnv_p1, CaloCellContainerCnv_p1, CaloCellLinkContainerCnv_p1, CaloCellLinkContainerCnv_p2, CaloClusterCellLinkContainerCnv_p1, TPConverterWithKeyBase< TRANS, PERS >, and xAODTauJetAuxContainerCnv_v2.

Definition at line 376 of file TPConverter.h.

379 {
380 return persToTrans (persObj, transObj, log);
381 }

◆ persToTransWithKeyUntyped()

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::persToTransWithKeyUntyped ( const void * pers,
void * trans,
const std::string & key,
MsgStream & log )
inlinevirtualinherited

Convert persistent object representation to transient.

Parameters
pers[IN] void* pointer to the persistent object
trans[OUT] void* pointer to the empty transient object
key[IN] SG key of object being read.
log[IN] output message stream

Reimplemented from ITPCnvBase.

Definition at line 420 of file TPConverter.h.

424 {
425 persToTransWithKey (reinterpret_cast<const PERS*> (pers),
426 reinterpret_cast<TRANS*> (trans),
427 key,
428 log);
429 }
virtual void persToTransWithKey(const PERS *persObj, TRANS *transObj, const std::string &, MsgStream &log)

◆ pstoreToTrans()

template<class TRANS, class PERS>
virtual void TPConverterBase< TRANS, PERS >::pstoreToTrans ( unsigned index,
TRANS * trans,
MsgStream & log )
inlinevirtualinherited

Convert persistent representation stored in the storage vector of the top-level object to transient.

Internal.

Parameters
index[IN] index of the persistent representation in the storage vector
trans[IN] empty transient object
log[IN] output message stream

Reimplemented from TPAbstractPolyCnvBase< TRANS, TRANS, PERS >.

Definition at line 760 of file TPConverter.h.

760 {
762 this->persToTrans( &(*this->m_pStorage)[index], trans, log );
763 }
TP Converter template for a "regular" type.

◆ reservePStorage()

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::reservePStorage ( size_t size)
inlinevirtualinherited

Reserve 'size' elements for persistent storage.

Implements ITPConverter.

Definition at line 573 of file TPConverter.h.

573 {
574 m_pStorage->reserve( size );
575 }

◆ setPileup()

void McEventCollectionCnv_p6::setPileup ( )

Definition at line 979 of file McEventCollectionCnv_p6.cxx.

979 {
980 m_isPileup = true;
981}

◆ setPStorage()

void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::setPStorage ( std::vector< PERS > * storage)
inlineinherited

Tell this converter which storage vector it should use to store or retrieve persistent representations.

Parameters
storage[IN] the address of the storage vector

Definition at line 551 of file TPConverter.h.

◆ setReadingFlag()

template<class TRANS>
void ITPConverterFor< TRANS >::setReadingFlag ( )
inlineinherited

Definition at line 234 of file TPConverter.h.

234{ m_wasUsedForReading = true; }

◆ setRecursive()

void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::setRecursive ( bool flag = true)
inlineinherited

Tell the converter if it should work in recursive mode slower but it can safely handle recursion.

Definition at line 559 of file TPConverter.h.

◆ setRuntimeTopConverter()

template<class TRANS>
virtual void ITPConverterFor< TRANS >::setRuntimeTopConverter ( TopLevelTPCnvBase * topConverter)
inlinevirtualinherited

Set runtime top-level converter - usually it is the owning TL converter, but in case of extended objects it will be the TL converter of the extended object.

Parameters
topConverter[IN] runtime top-level converter for this converter

Implements ITPConverter.

Definition at line 215 of file TPConverter.h.

215 {
218 }
virtual void initPrivateConverters(TopLevelTPCnvBase *)
virtual TopLevelTPCnvBase * topConverter()
return the top-level converter for this elemental TP converter

◆ setTopConverter()

template<class TRANS>
virtual void ITPConverterFor< TRANS >::setTopConverter ( TopLevelTPCnvBase * topConverter,
const TPObjRef::typeID_t & TPtypeID )
inlinevirtualinherited

Set which top-level converter owns this elemental converter, and what TPtypeID was assigned to the persistent objects it produces.

Parameters
topConverter[IN] the top-level converter owning this converter
TPtypeID[IN] TP type id for persistent objects (used in TP refs)

Implements ITPConverter.

Definition at line 221 of file TPConverter.h.

223 {
228 }
unsigned m_pStorageTIDvalue
m_pStorageTID converted to integer value
TPObjRef::typeID_t m_pStorageTID
TP Ref typeID for the persistent objects this converter is creating.
TopLevelTPCnvBase * m_topConverter
top level converter that owns this elemental TP converter it also holds the storage object

◆ topConverter() [1/2]

template<class TRANS>
virtual TopLevelTPCnvBase * ITPConverterFor< TRANS >::topConverter ( )
inlinevirtualinherited

return the top-level converter for this elemental TP converter

Returns
TopLevelTPCnvBas

Reimplemented from ITPConverter.

Definition at line 191 of file TPConverter.h.

191 {
192 return m_topConverter;
193 }

◆ topConverter() [2/2]

template<class TRANS>
virtual const TopLevelTPCnvBase * ITPConverterFor< TRANS >::topConverter ( ) const
inlinevirtualinherited

return the top-level converter for this elemental TP converter

Returns
TopLevelTPCnvBas

Reimplemented from ITPConverter.

Definition at line 196 of file TPConverter.h.

196 {
197 return m_topConverter;
198 }

◆ toPersistent()

template<class TRANS>
template<class CNV>
TPObjRef ITPConverterFor< TRANS >::toPersistent ( CNV ** cnv,
const typename CNV::TransBase_t * transObj,
MsgStream & log ) const
inlineinherited

Persistify an object and store the persistent represenation in the storage vector of the top-level persistent object.

The correct converter is located using the actual object type.

Parameters
cnv[IN/OUT] pointer to the converter, usually 0 at the start. Once the right converter is found, this pointer will be set so the search is done only once
transObj[IN] transient object
log[IN] output message stream
Returns
TPObjRef TP reference to the persistent representation stored in the storage vector of the top-level persistent object

Definition at line 119 of file TPConverter.h.

119 {
120 if( !transObj ) return TPObjRef();
121 CNV *temp_cnv_p = 0;
122 if( !cnv ) cnv = &temp_cnv_p;
123 if( !*cnv || (*cnv)->wasUsedForReading() ) {
124 // don't trust the converter if it was used for reading, find again
125 *cnv = converterForType( *cnv, typeid(*transObj), log );
126 if( !*cnv ) return TPObjRef();
127 (*cnv)->clearReadingFlag();
128 }
129 return (**cnv).virt_toPersistent(transObj, log);
130 }
virtual TPObjRef virt_toPersistent(const TransBase_t *trans, MsgStream &log)=0
Internal interface method that is used to invoke the real conversion method (toPersistent_impl) in th...

◆ toPersistentWithKey_impl()

TPObjRef TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::toPersistentWithKey_impl ( const TRANS * trans,
const std::string & key,
MsgStream & log )
inherited

Convert transient object to persistent representation.

Stores the result in the storage vector of the top-level object and returns a TP Ref to it.

Parameters
trans[IN] transient object
key[IN] SG key of object being converted
log[IN] output message stream
Returns
TP reference to the persistent representation

◆ transBaseTInfo()

template<class TRANS>
const std::type_info & ITPConverterFor< TRANS >::transBaseTInfo ( ) const
inlinevirtualinherited

return C++ type id of the common base transient type for all converters for a group of polymorphic types

Returns
std::type_info& this method is not overwritten in the subclasses like transientTInfo()

Implements ITPConverter.

Definition at line 205 of file TPConverter.h.

205{ return typeid(TRANS); }

◆ transientTInfo()

virtual const std::type_info & TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::transientTInfo ( ) const
inlinevirtualinherited

return C++ type id of the transient class this converter is for

Returns
std::type_info&

Reimplemented from ITPConverterFor< TRANS >.

Definition at line 479 of file TPConverter.h.

479{ return typeid(TRANS); }

◆ transToPers() [1/2]

void McEventCollectionCnv_p6::transToPers ( const McEventCollection * transObj,
McEventCollection_p6 * persObj,
MsgStream & log )
virtual

Method creating the persistent representation McEventCollection_p6 from its transient representation McEventCollection.

Definition at line 367 of file McEventCollectionCnv_p6.cxx.

370{
371 const EventContext& ctx = Gaudi::Hive::currentContext();
372
373 msg << MSG::DEBUG << "Creating persistent state of McEventCollection..."
374 << endmsg;
375 persObj->m_genEvents.reserve( transObj->size() );
376
377 const std::pair<unsigned int,unsigned int> stats = nbrParticlesAndVertices( transObj );
378 persObj->m_genParticles.reserve( stats.first );
379 persObj->m_genVertices.reserve ( stats.second );
380
381 const McEventCollection::const_iterator itrEnd = transObj->end();
382 for ( McEventCollection::const_iterator itr = transObj->begin();
383 itr != itrEnd;
384 ++itr ) {
385 const unsigned int nPersVtx = persObj->m_genVertices.size();
386 const unsigned int nPersParts = persObj->m_genParticles.size();
387 const HepMC::GenEvent* genEvt = *itr;
388#ifdef HEPMC3
389 //save the weight names to metadata via the HepMCWeightSvc
390 auto ri = genEvt->run_info();
391 HepMC3::GenRunInfoData ri_data;
392 if (ri) {
393 ri->write_data(ri_data);
394 if (!ri_data.weight_names.empty()) {
395 m_hepMCWeightSvc->setWeightNames( names_to_name_index_map(ri_data.weight_names), ctx ).ignore();
396 } else {
397 //AV : This to be decided if one would like to have default names.
398 //std::vector<std::string> names{"0"};
399 //m_hepMCWeightSvc->setWeightNames( names_to_name_index_map(names), ctx );
400 }
401 }
402
403 auto A_mpi=genEvt->attribute<HepMC3::IntAttribute>(mpiStr);
404 auto A_signal_process_id=genEvt->attribute<HepMC3::IntAttribute>(signalProcessIdStr);
405 auto A_event_scale=genEvt->attribute<HepMC3::DoubleAttribute>(eventScaleStr);
406 auto A_alphaQCD=genEvt->attribute<HepMC3::DoubleAttribute>(alphaQcdStr);
407 auto A_alphaQED=genEvt->attribute<HepMC3::DoubleAttribute>(alphaQedStr);
408 auto A_filterWeight=genEvt->attribute<HepMC3::DoubleAttribute>(filterWeightStr);
409 auto A_filterHT=genEvt->attribute<HepMC3::DoubleAttribute>(filterHtStr);
410 auto A_filterMET=genEvt->attribute<HepMC3::DoubleAttribute>(filterMetStr);
412
413 // If signal vertex not found on the vertices, look on the event (Sherpa)
414 if (!signal_process_vertex) {
415 auto event_spv = genEvt->attribute<HepMC3::IntAttribute>("signal_process_vertex");
416
417 // If the attribute exists, get the vertex
418 if (event_spv) signal_process_vertex = genEvt->vertices().at(-event_spv->value()-1);
419 }
420
421 auto A_random_states=genEvt->attribute<HepMC3::VectorLongIntAttribute>("random_states");
422 auto beams=genEvt->beams();
423 persObj->m_genEvents.
424 emplace_back(A_signal_process_id?(A_signal_process_id->value()):-1,
425 genEvt->event_number(),
426 A_mpi?(A_mpi->value()):-1,
427 A_event_scale?(A_event_scale->value()):0.0,
428 A_alphaQCD?(A_alphaQCD->value()):0.0,
429 A_alphaQED?(A_alphaQED->value()):0.0,
430 A_filterWeight?(A_filterWeight->value()):1.0,
431 A_filterHT?(A_filterHT->value()):-13.,
432 A_filterMET?(A_filterMET->value()):-13.0,
433 signal_process_vertex?HepMC::barcode(signal_process_vertex):0,
434 !beams.empty()?HepMC::barcode(beams[0]):0,
435 beams.size()>1?HepMC::barcode(beams[1]):0,
436 genEvt->weights(),
437 A_random_states?(A_random_states->value()):std::vector<long>(),
438 std::vector<double>(), // cross section
439 std::vector<float>(), // heavyion
440 std::vector<double>(), // pdf info
441 genEvt->momentum_unit(),
442 genEvt->length_unit(),
443 nPersVtx,
444 nPersVtx + genEvt->vertices().size(),
445 nPersParts,
446 nPersParts + genEvt->particles().size() );
447 {
448 GenEvent_p6& persEvt = persObj->m_genEvents.back();
449 std::map< std::string, std::map<int, std::shared_ptr<HepMC3::Attribute> > > e_atts = genEvt->attributes();
450 persEvt.m_e_attribute_name.clear();
451 persEvt.m_e_attribute_id.clear();
452 persEvt.m_e_attribute_string.clear();
453 for (auto& attmap: e_atts) {
454 if (attributes_to_ignore.count(attmap.first)) continue;
455 if (attmap.first == "ShadowParticle") continue;
456 if (attmap.first == "ShadowParticleId") continue;
457 for (auto& att: attmap.second) {
458 persEvt.m_e_attribute_name.push_back(attmap.first);
459 persEvt.m_e_attribute_id.push_back(att.first);
460 std::string st;
461 att.second->to_string(st);
464 persEvt.m_e_attribute_string.push_back(std::move(st));
465 }
466 }
467 persEvt.m_r_attribute_name.clear();
468 persEvt.m_r_attribute_string.clear();
469 if (ri) {
470 persEvt.m_r_attribute_string = std::move(ri_data.attribute_string);
471 persEvt.m_r_attribute_name = std::move(ri_data.attribute_name);
472 /*** This is for the future
473 persEvt.m_r_tool_name = ri_data.tool_name;
474 persEvt.m_r_tool_version = ri_data.tool_version;
475 persEvt.m_r_tool_description = ri_data.tool_description;
476 */
477 }
478 //Actually, with this piece there is no need to treat the CS and HI separately.
479 }
480 //HepMC::GenCrossSection encoding
481 if (genEvt->cross_section()) {
482 auto cs=genEvt->cross_section();
483 GenEvent_p6& persEvt = persObj->m_genEvents.back();
484 std::vector<double>& crossSection = persEvt.m_crossSection;
485 crossSection.resize(3);
486 crossSection[2] = cs->xsec();
487 crossSection[1] = cs->xsec_err();
488 crossSection[0] = static_cast<double>(cs->is_valid());
491 if (crossSection[2] < 0) {
492 crossSection[2] = 0.0;
493 if (crossSection[1] < 0) {
494 crossSection[1] = 0.0;
495 }
496 crossSection[0] = 0.0;
497 }
498
499 }
500
501 //HepMC::HeavyIon encoding
502 if (genEvt->heavy_ion()) {
503 auto hi=genEvt->heavy_ion();
504 GenEvent_p6& persEvt = persObj->m_genEvents.back();
505 std::vector<float>& heavyIon = persEvt.m_heavyIon;
506 heavyIon.resize(13);
507 heavyIon[12] = static_cast<float>(hi->Ncoll_hard);
508 heavyIon[11] = static_cast<float>(hi->Npart_proj);
509 heavyIon[10] = static_cast<float>(hi->Npart_targ);
510 heavyIon[9] = static_cast<float>(hi->Ncoll);
511 heavyIon[8] = static_cast<float>(hi->spectator_neutrons);
512 heavyIon[7] = static_cast<float>(hi->spectator_protons);
513 heavyIon[6] = static_cast<float>(hi->N_Nwounded_collisions);
514 heavyIon[5] = static_cast<float>(hi->Nwounded_N_collisions);
515 heavyIon[4] = static_cast<float>(hi->Nwounded_Nwounded_collisions);
516 heavyIon[3] = hi->impact_parameter;
517 heavyIon[2] = hi->event_plane_angle;
518 heavyIon[1] = hi->eccentricity;
519 heavyIon[0] = hi->sigma_inel_NN;
520 }
521
522 //PdfInfo encoding
523 if (genEvt->pdf_info()) {
524 auto pi=genEvt->pdf_info();
525 GenEvent_p6& persEvt = persObj->m_genEvents.back();
526 std::vector<double>& pdfinfo = persEvt.m_pdfinfo;
527 pdfinfo.resize(9);
528 pdfinfo[8] = static_cast<double>(pi->parton_id[0]);
529 pdfinfo[7] = static_cast<double>(pi->parton_id[1]);
530 pdfinfo[6] = static_cast<double>(pi->pdf_id[0]);
531 pdfinfo[5] = static_cast<double>(pi->pdf_id[1]);
532 pdfinfo[4] = pi->x[0];
533 pdfinfo[3] = pi->x[1];
534 pdfinfo[2] = pi->scale;
535 pdfinfo[1] = pi->xf[0];
536 pdfinfo[0] = pi->xf[1];
537 }
538
539 // create vertices
540 for (const auto& v: genEvt->vertices()) {
541 writeGenVertex( v, *persObj );
542 }
543#else
544 const int signalProcessVtx = genEvt->m_signal_process_vertex
545 ? genEvt->m_signal_process_vertex->barcode()
546 : 0;
547 const int beamParticle1Barcode = genEvt->m_beam_particle_1
548 ? genEvt->m_beam_particle_1->barcode()
549 : 0;
550 const int beamParticle2Barcode = genEvt->m_beam_particle_2
551 ? genEvt->m_beam_particle_2->barcode()
552 : 0;
553
554 //save the weight names to metadata via the HepMCWeightSvc
555 m_hepMCWeightSvc->setWeightNames( genEvt->m_weights.m_names, ctx ).ignore();
556
557
558 persObj->m_genEvents.
559 push_back( GenEvent_p6( genEvt->m_signal_process_id,
560 genEvt->m_event_number,
561 genEvt->mpi(), // number of multi particle interactions
562 genEvt->m_event_scale,
563 genEvt->m_alphaQCD,
564 genEvt->m_alphaQED,
565 1, // dummy value as this does not exist in HepMC2::GenEvent
566 signalProcessVtx,
567 beamParticle1Barcode, // barcodes of beam particles
568 beamParticle2Barcode,
569 genEvt->m_weights.m_weights,
570 genEvt->m_random_states,
571 std::vector<double>(), // cross section
572 std::vector<float>(), // heavyion
573 std::vector<double>(), // pdf info
574 genEvt->m_momentum_unit,
575 genEvt->m_position_unit,
576 nPersVtx,
577 nPersVtx + genEvt->vertices_size(),
578 nPersParts,
579 nPersParts + genEvt->particles_size() ) );
580 //HepMC::GenCrossSection encoding
581 if (genEvt->m_cross_section) {
582 GenEvent_p6& persEvt = persObj->m_genEvents.back();
583 std::vector<double>& crossSection = persEvt.m_crossSection;
584 crossSection.resize(3);
585 crossSection[2] = genEvt->m_cross_section->m_cross_section;
586 crossSection[1] = genEvt->m_cross_section->m_cross_section_error;
587 crossSection[0] = static_cast<double>(genEvt->m_cross_section->m_is_set);
588 }
589
590 //HepMC::HeavyIon encoding
591 if (genEvt->m_heavy_ion) {
592 GenEvent_p6& persEvt = persObj->m_genEvents.back();
593 std::vector<float>& heavyIon = persEvt.m_heavyIon;
594 heavyIon.resize(13);
595 heavyIon[12] = static_cast<float>(genEvt->m_heavy_ion->m_Ncoll_hard);
596 heavyIon[11] = static_cast<float>(genEvt->m_heavy_ion->m_Npart_proj);
597 heavyIon[10] = static_cast<float>(genEvt->m_heavy_ion->m_Npart_targ);
598 heavyIon[9] = static_cast<float>(genEvt->m_heavy_ion->m_Ncoll);
599 heavyIon[8] = static_cast<float>(genEvt->m_heavy_ion->m_spectator_neutrons);
600 heavyIon[7] = static_cast<float>(genEvt->m_heavy_ion->m_spectator_protons);
601 heavyIon[6] = static_cast<float>(genEvt->m_heavy_ion->m_N_Nwounded_collisions);
602 heavyIon[5] = static_cast<float>(genEvt->m_heavy_ion->m_Nwounded_N_collisions);
603 heavyIon[4] = static_cast<float>(genEvt->m_heavy_ion->m_Nwounded_Nwounded_collisions);
604 heavyIon[3] = genEvt->m_heavy_ion->m_impact_parameter;
605 heavyIon[2] = genEvt->m_heavy_ion->m_event_plane_angle;
606 heavyIon[1] = genEvt->m_heavy_ion->m_eccentricity;
607 heavyIon[0] = genEvt->m_heavy_ion->m_sigma_inel_NN;
608 }
609
610 //PdfInfo encoding
611 if (genEvt->m_pdf_info) {
612 GenEvent_p6& persEvt = persObj->m_genEvents.back();
613 std::vector<double>& pdfinfo = persEvt.m_pdfinfo;
614 pdfinfo.resize(9);
615 pdfinfo[8] = static_cast<double>(genEvt->m_pdf_info->m_id1);
616 pdfinfo[7] = static_cast<double>(genEvt->m_pdf_info->m_id2);
617 pdfinfo[6] = static_cast<double>(genEvt->m_pdf_info->m_pdf_id1);
618 pdfinfo[5] = static_cast<double>(genEvt->m_pdf_info->m_pdf_id2);
619 pdfinfo[4] = genEvt->m_pdf_info->m_x1;
620 pdfinfo[3] = genEvt->m_pdf_info->m_x2;
621 pdfinfo[2] = genEvt->m_pdf_info->m_scalePDF;
622 pdfinfo[1] = genEvt->m_pdf_info->m_pdf1;
623 pdfinfo[0] = genEvt->m_pdf_info->m_pdf2;
624 }
625
626 // create vertices
627 const HepMC::GenEvent::vertex_const_iterator endVtx=genEvt->vertices_end();
628 for ( HepMC::GenEvent::vertex_const_iterator i = genEvt->vertices_begin();
629 i != endVtx;
630 ++i ) {
631 writeGenVertex( **i, *persObj );
632 }
633#endif
634
635 } //> end loop over GenEvents
636
637 msg << MSG::DEBUG << "Created persistent state of HepMC::GenEvent [OK]" << endmsg;
638}
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
void writeGenVertex(const HepMC::GenVertex &vtx, McEventCollection_p6 &persEvt) const
Method to write a persistent GenVertex object.
m_data push_back(elt)
int barcode(const T *p)
Definition Barcode.h:16
GenVertex * signal_process_vertex(const GenEvent *e)
Definition GenEvent.h:645

◆ transToPers() [2/2]

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::transToPers ( const TRANS * transObj,
PERS * persObj,
MsgStream & log )
pure virtualinherited

Convert transient representation to persistent one.

Copies data members from transient object to an existing persistent one. Needs to be implemented by the developer on the actual converter.

Parameters
transObj[IN] transient object
persObj[IN] persistent object
log[IN] output message stream

Implemented in AFP_SiDigiCnv_p1, AFP_SIDLocRecoEvCollectionCnv_p1, AFP_SIDLocRecoEventCnv_p1, AFP_SIDSimHitCnv_p1, AFP_TDDigiCnv_p1, AFP_TDLocRecoEvCollectionCnv_p1, AFP_TDLocRecoEventCnv_p1, AFP_TDSimHitCnv_p1, ALFA_CLinkEventCnv_p1, ALFA_DigitCnv_p1, ALFA_DigitCollectionCnv_p1, ALFA_GloRecEvCollectionCnv_p1, ALFA_GloRecEventCnv_p1, ALFA_HitCnv_p1, ALFA_LocRecCorrEvCollectionCnv_p1, ALFA_LocRecCorrEventCnv_p1, ALFA_LocRecCorrODEvCollectionCnv_p1, ALFA_LocRecCorrODEventCnv_p1, ALFA_LocRecEvCollectionCnv_p1, ALFA_LocRecEventCnv_p1, ALFA_LocRecODEvCollectionCnv_p1, ALFA_LocRecODEventCnv_p1, ALFA_ODDigitCnv_p1, ALFA_ODDigitCollectionCnv_p1, ALFA_ODHitCnv_p1, ALFA_RawDataCnv_charge_p1, ALFA_RawDataCnv_p1, AthenaBarCodeCnv_p1, CaloClusterContainerCnv_p1, CaloClusterContainerCnv_p2, CaloClusterContainerCnv_p3, CaloClusterContainerCnv_p4, CaloClusterContainerCnv_p5, CaloClusterContainerCnv_p6, CaloClusterContainerCnv_p7, CaloEnergyCnv_p1, CaloShowerContainerCnv_p1, CaloShowerContainerCnv_p2, CaloTopoTowerContainerCnv_p1, CaloTowerContainerCnv_p1, ChamberT0sCnv_p1, CompositeParticleCnv_p1, CompositeParticleContainerCnv_p1, DataLinkCnv_p1< DLINK_TYPE >, DataLinkCnv_p1< DataLink< ALFA_DigitCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecCorrEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecCorrODEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_LocRecODEvCollection > >, DataLinkCnv_p1< DataLink< ALFA_ODDigitCollection > >, DataLinkCnv_p1< DataLink< ALFA_RawDataContainer > >, DataLinkCnv_p1< DataLink< CaloCellContainer > >, DataLinkCnv_p1< DataLink< CaloClusterContainer > >, DataLinkCnv_p1< DataLink< CaloTowerContainer > >, DataLinkCnv_p1< DataLink< INav4MomAssocs > >, DataLinkCnv_p1< DataLink< LArSamples::Container > >, DataLinkCnv_p1< DataLink< LArSamples::ParticleBaseContainer > >, DataLinkCnv_p2< DLINK_TYPE >, DataLinkCnv_p2< DataLink< CaloCellContainer > >, DataLinkCnv_p2< DataLink< INav4MomAssocs > >, DataLinkCnv_p2< DataLink< INav4MomToTrackParticleAssocs > >, DataLinkCnv_p2< DataLink< TrackParticleAssocs > >, DepositInCaloCnv_p1, DepositInCaloCnv_p2, DetailedTrackTruthCnv_p1, DetailedTrackTruthCnv_p2, DetailedTrackTruthCnv_p3, DetailedTrackTruthCnv_p4, DMTest::CLinksAODCnv_p1, ElementLinkCnv_p1< LINK_TYPE >, ElementLinkCnv_p1< ElementLink< Analysis::MuonContainer > >, ElementLinkCnv_p1< ElementLink< AthExParticles > >, ElementLinkCnv_p1< ElementLink< CaloCellLinkContainer > >, ElementLinkCnv_p1< ElementLink< CaloClusterContainer > >, ElementLinkCnv_p1< ElementLink< CaloShowerContainer > >, ElementLinkCnv_p1< ElementLink< ElectronContainer > >, ElementLinkCnv_p1< ElementLink< InDet::PixelClusterContainer > >, ElementLinkCnv_p1< ElementLink< InDet::SCT_ClusterContainer > >, ElementLinkCnv_p1< ElementLink< InDet::TRT_DriftCircleContainer > >, ElementLinkCnv_p1< ElementLink< McEventCollection > >, ElementLinkCnv_p1< ElementLink< Muon::CscPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< Muon::MdtPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< Muon::RpcPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< Muon::TgcPrepDataContainer > >, ElementLinkCnv_p1< ElementLink< MuonCaloEnergyContainer > >, ElementLinkCnv_p1< ElementLink< MuonFeatureContainer > >, ElementLinkCnv_p1< ElementLink< PhotonContainer > >, ElementLinkCnv_p1< ElementLink< Rec::TrackParticleContainer > >, ElementLinkCnv_p1< ElementLink< RingerRingsContainer > >, ElementLinkCnv_p1< ElementLink< TileMuFeatureContainer > >, ElementLinkCnv_p1< ElementLink< TrigEFBphysContainer > >, ElementLinkCnv_p1< ElementLink< TrigEMClusterContainer > >, ElementLinkCnv_p1< ElementLink< TrigInDetTrackCollection > >, ElementLinkCnv_p1< ElementLink< TrigL2BphysContainer > >, ElementLinkCnv_p1< ElementLink< TrigTauClusterDetailsContainer > >, ElementLinkCnv_p1< ElementLink< TruthEtIsolationsContainer > >, ElementLinkCnv_p1< ElementLink< VxContainer > >, ElementLinkCnv_p3< LINK_TYPE >, ElementLinkCnv_p3< ElementLink< CaloCellContainer > >, ElementLinkCnv_p3< ElementLink< CaloCellLinkContainer > >, ElementLinkCnv_p3< ElementLink< CaloClusterContainer > >, ElementLinkCnv_p3< ElementLink< CaloRingsContainer > >, ElementLinkCnv_p3< ElementLink< CaloShowerContainer > >, ElementLinkCnv_p3< ElementLink< DataVector< C_v1 > > >, ElementLinkCnv_p3< ElementLink< DataVector< TrackParticleBase > > >, ElementLinkCnv_p3< ElementLink< DataVector< Trk::Track > > >, ElementLinkCnv_p3< ElementLink< ExampleHitContainer > >, ElementLinkCnv_p3< ElementLink< INavigable4MomentumCollection > >, ElementLinkCnv_p3< ElementLink< McEventCollection > >, ElementLinkCnv_p3< ElementLink< Muon::CscPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::MdtPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::MMPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::RpcPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::sTgcPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< Muon::TgcPrepDataContainer > >, ElementLinkCnv_p3< ElementLink< MuonCaloEnergyContainer > >, ElementLinkCnv_p3< ElementLink< MuonFeatureContainer > >, ElementLinkCnv_p3< ElementLink< Rec::TrackParticleContainer > >, ElementLinkCnv_p3< ElementLink< RingerRingsContainer > >, ElementLinkCnv_p3< ElementLink< TileMuFeatureContainer > >, ElementLinkCnv_p3< ElementLink< TrigEFBphysContainer > >, ElementLinkCnv_p3< ElementLink< TrigEMClusterContainer > >, ElementLinkCnv_p3< ElementLink< TrigInDetTrackCollection > >, ElementLinkCnv_p3< ElementLink< TrigL2BphysContainer > >, ElementLinkCnv_p3< ElementLink< TrigMuonEFInfoContainer > >, ElementLinkCnv_p3< ElementLink< TrigTauClusterDetailsContainer > >, ElementLinkCnv_p3< ElementLink< TruthEtIsolationsContainer > >, ElementLinkCnv_p3< ElementLink< VxContainer > >, ElementLinkCnv_p3< MasterLink_t >, ElementLinkCnv_p3< typename LinkVect_t::value_type >, ElementLinkVectorCnv_p1< LINK_VECT >, ElementLinkVectorCnv_p1< ElementLinkVector< AthExIParticles > >, ElementLinkVectorCnv_p1< ElementLinkVector< DataVector< C_v1 > > >, ElementLinkVectorCnv_p1< ElementLinkVector< egDetailContainer > >, ElementLinkVectorCnv_p1< ElementLinkVector< ExampleHitContainer > >, ElementLinkVectorCnv_p1< ElementLinkVector< Rec::TrackParticleContainer > >, ElementLinkVectorCnv_p1< ElementLinkVector< Trk::SegmentCollection > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename NAV::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< Analysis::MuonContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< CaloCellContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< ElectronContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< PhotonContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< typename Navigable< Rec::TrackParticleContainer, double >::container_type > >, ElementLinkVectorCnv_p1< ElementLinkVector< VxContainer > >, EnergyLossCnv_p1, EventIDCnv_p1, EventInfoCnv_p1, EventInfoCnv_p2, EventInfoCnv_p3, EventInfoCnv_p4, EventStreamInfoCnv_p1, EventStreamInfoCnv_p2, EventStreamInfoCnv_p3, EventTypeCnv_p1, EventTypeCnv_p3, FitQualityCnv_p1, HepLorentzVectorCnv_p1, HepMcParticleLinkCnv_p1, HepMcParticleLinkCnv_p2, HepMcParticleLinkCnv_p3, INav4MomAssocsCnv_p1, INav4MomAssocsCnv_p2, INav4MomAssocsCnv_p3, INav4MomLinkContainerCnv_p1, INav4MomToTrackParticleAssocsCnv_p1, IParticleLinkContainerCnv_p1, JetCnv_p1, JetCnv_p2, JetCnv_p3, JetCnv_p4, JetCollectionCnv_p1, JetCollectionCnv_p2, JetCollectionCnv_p3, JetCollectionCnv_p4, JetCollectionCnv_p5, JetCollectionCnv_p6, JetConverterBase< Jet_p5 >, JetConverterBase< Jet_p6 >, JetKeyDescriptorCnv_p1, JetMomentMapConverterBase< JetMomentMap_p1 >, JetMomentMapConverterBase< JetMomentMap_p6 >, JetSamplingCnv_p1, JetSamplingCnv_p2, JetSamplingCollectionCnv_p1, JetSamplingCollectionCnv_p2, LArAutoCorrSubsetCnv_p1, LArCaliWaveSubsetCnv_p1, LArCaliWaveSubsetCnv_p2, LArCaliWaveSubsetCnv_p3, LArDigitContainerCnv_p1, LArDigitContainerCnv_p2, LArDigitContainerCnv_p3, LArDSPThresholdsSubsetCnv_p1, LArFebErrorSummaryCnv_p1, LArLATOMEHeaderContainerCnv_p1, LArMphysOverMcalSubsetCnv_p1, LArNoisyROSummaryCnv_p1, LArNoisyROSummaryCnv_p2, LArNoisyROSummaryCnv_p3, LArNoisyROSummaryCnv_p4, LArNoisyROSummaryCnv_p5, LArNoisyROSummaryCnv_p6, LArOFCBinSubsetCnv_p1, LArOFCSubsetCnv_p1, LArPedestalMCCnv_p1, LArPedestalSubsetCnv_p1, LArPedestalSubsetCnv_p2, LArPhysWaveSubsetCnv_p1, LArRampSubsetCnv_p1, LArRawChannelCnv_p1, LArRawChannelCnv_p2, LArRawChannelContainerCnv_p1, LArRawChannelContainerCnv_p2, LArRawChannelContainerCnv_p3, LArRawChannelContainerCnv_p4, LArRawSCContainerCnv_p1, LArSCDigitContainerCnv_p1, LArShapeSubsetCnv_p1, LArShapeSubsetCnv_p2, LArSingleFloatSubsetCnv_p1, LArTTL1Cnv_p1, LUCID_DigitCnv_p1, LUCID_DigitCnv_p2, LUCID_DigitContainerCnv_p1, LUCID_DigitContainerCnv_p2, LUCID_RawDataCnv_p1, LUCID_RawDataContainerCnv_p1, LVL1_ROICnv_p1, LVL1CTP::Lvl1ResultCnv_p1, LVL1CTP::Lvl1ResultCnv_p2, MergedEventInfoCnv_p1, MergedEventInfoCnv_p2, MissingEtCaloCnv_p1, MissingEtCaloCnv_p2, MissingEtCaloCnv_p3, MissingETCnv_p1, MissingETCnv_p2, MissingETCnv_p3, MissingETCompositionConverterBase< MissingETComposition_p1 >, MissingETCompositionConverterBase< MissingETComposition_p2 >, MissingEtRegionsCnv_p1, MissingEtRegionsCnv_p2, MissingEtRegionsCnv_p3, MissingEtTruthCnv_p1, MissingEtTruthCnv_p2, MissingEtTruthCnv_p3, MuonCnv_p1, MuonCnv_p2, MuonCnv_p3, MuonCnv_p4, MuonCnv_p5, MuonCnv_p6, MuonContainerCnv_p1, MuonContainerCnv_p2, MuonSpShowerCnv_p1, MuonSpShowerContainerCnv_p1, NavigableCnv_p1< NAV, RPAR >, NavigableCnv_p1< NAV, NavigationDefaults::DefaultWeight >, NavigableCnv_p1< Navigable< Analysis::MuonContainer, double >, float >, NavigableCnv_p1< Navigable< CaloCellContainer, double >, float >, NavigableCnv_p1< Navigable< ElectronContainer, double >, float >, NavigableCnv_p1< Navigable< INavigable4MomentumCollection, double > >, NavigableCnv_p1< Navigable< PhotonContainer, double >, float >, NavigableCnv_p1< Navigable< Rec::TrackParticleContainer, double >, float >, NavigableCnv_p2< NAV, RPAR >, NavigableCnv_p2< MissingETComposition, MissingETComposition_p1::Weight_p1 >, NavigableCnv_p2< MissingETComposition, Weight_p1 >, NavigableCnv_p2< NAV, NavigationDefaults::DefaultWeight >, NavigableCnv_p2< Navigable< ExampleHitContainer > >, NavigableCnv_p2< Navigable< ExampleHitContainer, double > >, NavigableCnv_p2< Navigable< INavigable4MomentumCollection, double >, float >, NeutrinoCnv_p1, NeutrinoCnv_p2, P4EEtaPhiMCnv_p1, P4EEtaPhiMCnv_p2, P4ImplEEtaPhiMCnv_p1, P4ImplEEtaPhiMCnv_p2, P4ImplIPtCotThPhiMCnv_p1, P4ImplPtEtaPhiMCnv_p1, P4ImplPtEtaPhiMCnv_p2, P4ImplPxPyPzECnv_p1, P4IPtCotThPhiMCnv_p1, P4PtEtaPhiMCnv_p1, P4PtEtaPhiMCnv_p2, P4PxPyPzECnv_p1, ParticleBaseCnv_p1, ParticleBaseCnv_p2, ParticleJetCnv_p1, ParticleLinksCnv_p1< Container >, ParticleLinksCnv_p1< ParticleBaseContainer >, ParticleShallowCloneCnv_p1, ParticleShallowCloneContainerCnv_p1, PileUpEventInfoCnv_p1, PileUpEventInfoCnv_p2, PileUpEventInfoCnv_p3, PileUpEventInfoCnv_p4, PileUpEventInfoCnv_p5, RingerRingsCnv_p1, RingerRingsCnv_p2, RpcByteStreamErrorContainerCnv_p1, RpcSectorLogicContainerCnv_p1, SelectedParticlesCnv_p1, SubDetHitStatisticsCnv_p0, T_AthenaHitsVectorCnv< TRANS, PERS, CONV >, T_AtlasHitsVectorCnv< TRANS, PERS, CONV >, TBADCRawContCnv_p1, TBBPCContCnv_p1, TBEventInfoCnv_p1, TBLArDigitContainerCnv_p1, TBMWPCContCnv_p1, TBPhaseCnv_p1, TBScintillatorContCnv_p1, TBTailCatcherCnv_p1, TBTDCCnv_p1, TBTDCRawContCnv_p1, TBTrackCnv_p1, TBTrackInfoCnv_p1, TBTriggerPatternUnitCnv_p1, TileBeamElemCnv_p1, TileCosmicMuonCnv_p1, TileCosmicMuonCnv_p2, TileDigitsCnv_p1, TileDigitsCnv_p2, TileDigitsCnv_p3, TileHitCnv_p1, TileL2Cnv_p1, TileL2Cnv_p2, TileMuCnv_p1, TileMuonReceiverObjCnv_p1, TileRawChannelCnv_p1, TileTTL1CellCnv_p1, TileTTL1Cnv_p1, TPCnvIDCont< TRANS, PERS, CONV >, TPCnvIDContFromIdentifier< TRANS, PERS, CONV >, TPCnvStdVector< TRANS, PERS, CONV >, TPCnvVector< TRANS, PERS, CONV >, TPConverterConstBase< TRANS, PERS >, TPPolyVectorCnv< TRANS, PERS, CONV >, TPPtrVectorCnv< TRANS, PERS, CONV >, TPValVectorCnv< TRANS, PERS, CONV >, TrackParticleAssocsCnv_p1, TrackParticleTruthCollectionCnv_p1, TrackParticleTruthCollectionCnv_p2, TrackParticleTruthCollectionCnv_p3, TrackRecordCnv_p1, TrackRecordCnv_p2, TrigCaloClusterCnv_p1, TrigCaloClusterCnv_p2, TrigCaloClusterCnv_p3, TrigConfAlgCnv_p1, TrigConfChainCnv_p1, TrigConfSeqCnv_p1, TrigConfSigCnv_p1, TrigDec::TrigDecisionCnv_p2, TrigDec::TrigDecisionCnv_p3, TrigDec::TrigDecisionCnv_p4, TrigDec::TrigDecisionCnv_p5, TrigEMClusterCnv_p3, TrigEMClusterCnv_p4, TrigEMClusterConverterBase< TrigEMCluster_p1 >, TrigEMClusterConverterBase< TrigEMCluster_p2 >, TriggerInfoCnv_p1, TriggerInfoCnv_p2, TrigMonAlgCnv_p1, TrigMonConfigCnv_p1, TrigMonEventCnv_p1, TrigMonROBCnv_p1, TrigMonROBDataCnv_p1, TrigMonROBDataCnv_p2, TrigMonRoiCnv_p1, TrigMonSeqCnv_p1, TrigMonTECnv_p1, TrigRNNOutputCnv_p2, TrigRNNOutputConverterBase< TrigRNNOutput_p1 >, TrigT2JetCnv_p1, TrigT2JetCnv_p2, TrigT2JetCnv_p3, TrigT2MbtsBitsCnv_p1, TrigT2MbtsBitsCnv_p2, TrigT2MbtsBitsCnv_p3, TrigT2ZdcSignalsCnv_p1, TrigTauClusterCnv_p1, TrigTauClusterCnv_p2, TrigTauClusterCnv_p3, TrigTauClusterCnv_p4, TrigTauClusterCnv_p5, TrigTauClusterDetailsCnv_p1, TrigTauClusterDetailsCnv_p2, TruthEtIsolationsCnv_p1, TruthParticleContainerCnv_p5, TruthParticleContainerCnv_p6, TruthTrajectoryCnv_p1, TruthTrajectoryCnv_p2, TruthTrajectoryCnv_p3, xAODBTaggingAuxContainerCnv_v1, xAODCaloClusterAuxContainerCnv_v1, xAODElectronAuxContainerCnv_v1, xAODElectronAuxContainerCnv_v2, xAODEmTauRoIAuxContainerCnv_v1, xAODEmTauRoIContainerCnv_v1, xAODEnergySumRoIAuxInfoCnv_v1, xAODEnergySumRoICnv_v1, xAODEventAuxInfoCnv_v1, xAODEventAuxInfoCnv_v2, xAODJetRoIAuxContainerCnv_v1, xAODJetRoIContainerCnv_v1, xAODJetTrigAuxContainerCnv_v1, xAODL2StandAloneMuonAuxContainerCnv_v1, xAODL2StandAloneMuonContainerCnv_v1, xAODMissingETAuxAssociationMapCnv_v1, xAODMuonAuxContainerCnv_v1, xAODMuonAuxContainerCnv_v2, xAODMuonAuxContainerCnv_v3, xAODMuonAuxContainerCnv_v4, xAODPhotonAuxContainerCnv_v1, xAODPhotonAuxContainerCnv_v2, xAODRODHeaderAuxContainerCnv_v1, xAODRODHeaderContainerCnv_v1, xAODTauJetAuxContainerCnv_v1, xAODTauJetContainerCnv_v1, xAODTauJetContainerCnv_v2, xAODTrackCaloClusterAuxContainerCnv_v1, xAODTrackParticleAuxContainerCnv_v1, xAODTrackParticleAuxContainerCnv_v2, xAODTrackParticleAuxContainerCnv_v3, xAODTrackParticleAuxContainerCnv_v4, xAODTrigCompositeAuxContainerCnv_v1, xAODTrigRingerRingsAuxContainerCnv_v1, xAODTrigRingerRingsContainerCnv_v1, xAODTrigRNNOutputAuxContainerCnv_v1, xAODTrigRNNOutputContainerCnv_v1, xAODTruthParticleAuxContainerCnv_v1, xAODTruthVertexAuxContainerCnv_v1, ZDC_SimFiberHit_CollectionCnv_p1, ZDC_SimFiberHitCnv_p1, ZdcDigitsCnv_p1, ZdcDigitsCollectionCnv_p1, ZdcRawChannelCnv_p1, and ZdcRawChannelCollectionCnv_p1.

◆ transToPersUntyped()

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::transToPersUntyped ( const void * trans,
void * pers,
MsgStream & log )
inlinevirtualinherited

Convert transient object representation to persistent.

Parameters
trans[IN] void* pointer to the transient object
pers[OUT] void* pointer to the empty persistent object
log[IN] output message stream

Implements ITPCnvBase.

Definition at line 410 of file TPConverter.h.

413 {
414 transToPers (reinterpret_cast<const TRANS*> (trans),
415 reinterpret_cast<PERS*> (pers),
416 log);
417 }
virtual void transToPers(const TRANS *transObj, PERS *persObj, MsgStream &log)=0

◆ transToPersWithKey()

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::transToPersWithKey ( const TRANS * transObj,
PERS * persObj,
const std::string & ,
MsgStream & log )
inlinevirtualinherited

Convert transient representation to persistent one.

Copies data members from transient object to an existing persistent one. Needs to be implemented by the developer on the actual converter.

Parameters
transObj[IN] transient object
persObj[IN] persistent object
key[IN] SG key of object being written.
log[IN] output message stream

Reimplemented in AthExParticlesCnv_p1, CaloCellContainerCnv_p1, CaloCellLinkContainerCnv_p1, CaloCellLinkContainerCnv_p2, CaloClusterCellLinkContainerCnv_p1, TPConverterWithKeyBase< TRANS, PERS >, and xAODTauJetAuxContainerCnv_v2.

Definition at line 392 of file TPConverter.h.

395 {
396 return transToPers (transObj, persObj, log);
397 }

◆ transToPersWithKeyUntyped()

virtual void TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::transToPersWithKeyUntyped ( const void * trans,
void * pers,
const std::string & key,
MsgStream & log )
inlinevirtualinherited

Convert transient object representation to persistent.

Parameters
trans[IN] void* pointer to the transient object
pers[OUT] void* pointer to the empty persistent object
key[IN] SG key of object being written.
log[IN] output message stream

Reimplemented from ITPCnvBase.

Definition at line 432 of file TPConverter.h.

436 {
437 transToPersWithKey (reinterpret_cast<const TRANS*> (trans),
438 reinterpret_cast<PERS*> (pers),
439 key,
440 log);
441 }
virtual void transToPersWithKey(const TRANS *transObj, PERS *persObj, const std::string &, MsgStream &log)

◆ typeID()

template<class TRANS>
virtual const TPObjRef::typeID_t & ITPConverterFor< TRANS >::typeID ( ) const
inlinevirtualinherited

Return TP typeID for persistent objects produced by this converter.

Returns
TPObjRef::typeID_t&

Implements ITPConverter.

Definition at line 208 of file TPConverter.h.

208{ return m_pStorageTID; }

◆ typeIDvalue()

template<class TRANS>
unsigned ITPConverterFor< TRANS >::typeIDvalue ( ) const
inlineinherited

inlined non-virtual version to get the typeID value fast

Definition at line 211 of file TPConverter.h.

211{ return m_pStorageTIDvalue; }

◆ virt_createTransFromPStore()

virtual TRANS * TPPolyCnvBase< TRANS, TRANS, PERS >::virt_createTransFromPStore ( unsigned index,
MsgStream & log )
inlinevirtualinherited

Internal interface method that is used to invoke the real conversion method (createTransient).

Parameters
index[IN] index of the persistent object in the storage vector
log[IN] output message stream
Returns
Created transient object (by pointer)

Reimplemented from TPAbstractPolyCnvBase< TRANS, TRANS, PERS >.

Definition at line 706 of file TPConverter.h.

706 {
708 return createTransient( &(*this->m_pStorage)[index], log );
709 }
Base TP converter template parametrized by transient and persistent types.
virtual TRANS * createTransient(const PERS *persObj, MsgStream &log)

◆ virt_createTransFromPStoreWithKey()

virtual TRANS * TPPolyCnvBase< TRANS, TRANS, PERS >::virt_createTransFromPStoreWithKey ( unsigned index,
const std::string & key,
MsgStream & log )
inlinevirtualinherited

Internal interface method that is used to invoke the real conversion method (createTransient).

Parameters
index[IN] index of the persistent object in the storage vector
key[IN] SG key of the object being converted
log[IN] output message stream
Returns
Created transient object (by pointer)

Reimplemented from TPAbstractPolyCnvBase< TRANS, TRANS, PERS >.

Definition at line 718 of file TPConverter.h.

721 {
723 return createTransientWithKey( &(*this->m_pStorage)[index], key, log );
724 }
virtual TRANS * createTransientWithKey(const PERS *persObj, const std::string &key, MsgStream &log)

◆ virt_toPersistent()

template<class TRANS, class PERS>
virtual TPObjRef TPConverterBase< TRANS, PERS >::virt_toPersistent ( const TRANS * trans,
MsgStream & log )
inlinevirtualinherited

Internal interface method that is used to invoke the real conversion method (toPersistent_impl) in the derived converter.

Parameters
trans[IN] transient object
log[IN] output message stream
Returns
TPObjRef TP reference to the persistent representation stored in the storage vector of the top-level persistent object Here toPersistent_impl is invoked with the dynamic cast of the transient type pointer to it's actual type

Reimplemented from TPAbstractPolyCnvBase< TRANS, TRANS, PERS >.

Definition at line 747 of file TPConverter.h.

747 {
748 return this->toPersistentWithKey_impl( trans, "", log);
749 }
TPObjRef toPersistentWithKey_impl(const TRANS *trans, const std::string &key, MsgStream &log)

◆ virt_toPersistentWithKey()

template<class TRANS, class PERS>
virtual TPObjRef TPConverterBase< TRANS, PERS >::virt_toPersistentWithKey ( const TRANS * trans,
const std::string & key,
MsgStream & log )
inlinevirtualinherited

Internal interface method that is used to invoke the real conversion method (toPersistent_impl) in the derived converter.

Parameters
trans[IN] transient object
key[IN] SG key of the object being converted.
log[IN] output message stream
Returns
TPObjRef TP reference to the persistent representation stored in the storage vector of the top-level persistent object Here toPersistentWithKey_impl is invoked with the dynamic cast of the transient type pointer to it's actual type

Reimplemented from TPAbstractPolyCnvBase< TRANS, TRANS, PERS >.

Definition at line 752 of file TPConverter.h.

755 {
756 return this->toPersistentWithKey_impl( trans, key, log);
757 }

◆ wasUsedForReading()

template<class TRANS>
bool ITPConverterFor< TRANS >::wasUsedForReading ( )
inlineinherited

Definition at line 236 of file TPConverter.h.

236{ return m_wasUsedForReading; }

◆ writeGenParticle()

int McEventCollectionCnv_p6::writeGenParticle ( const HepMC::GenParticle & p,
McEventCollection_p6 & persEvt ) const
protected

Method to write a persistent GenParticle object It returns the index of the persistent GenParticle into the collection of persistent of GenParticles from the persistent GenEvent.

Definition at line 933 of file McEventCollectionCnv_p6.cxx.

935{
936 const HepMC::FourVector& mom = p.m_momentum;
937 const double ene = mom.e();
938 const double m2 = mom.m2();
939
940 // Definitions of Bool isTimeLilike, isSpacelike and isLightlike according to HepLorentzVector definition
941 const bool useP2M2 = !(m2 > 0) && // !isTimelike
942 (m2 < 0) && // isSpacelike
943 !(std::abs(m2) < 2.0*DBL_EPSILON*ene*ene); // !isLightlike
944
945 const short recoMethod = ( !useP2M2
946 ? 0
947 : ( ene >= 0. //*GeV
948 ? 1
949 : 2 ) );
950
951 persEvt.m_genParticles.
952 push_back( GenParticle_p6( mom.px(),
953 mom.py(),
954 mom.pz(),
955 mom.m(),
956 p.m_pdg_id,
957 HepMC::old_particle_status_from_new(p.m_status), // REVERTED STATUS VALUE TO OLD SCHEME
958 p.m_flow.size(),
959 p.m_polarization.theta(),
960 p.m_polarization.phi(),
961 p.m_production_vertex
962 ? p.m_production_vertex->barcode()
963 : 0,
964 p.m_end_vertex
965 ? p.m_end_vertex->barcode()
966 : 0,
967 p.m_barcode,
968 p.m_generated_mass,
969 recoMethod ) );
970 persEvt.m_genParticles.back().m_flow.assign( p.m_flow.begin(),
971 p.m_flow.end() );
972
973 // we return the index of the particle in the big vector of particles
974 // (contained by the persistent GenEvent)
975 return (persEvt.m_genParticles.size() - 1);
976}
int old_particle_status_from_new(const int newStatus)
Get particle status in the old scheme from the status in the new scheme.

◆ writeGenVertex()

void McEventCollectionCnv_p6::writeGenVertex ( const HepMC::GenVertex & vtx,
McEventCollection_p6 & persEvt ) const
protected

Method to write a persistent GenVertex object.

The persistent vertex is added to the persistent is added to the persistent GenEvent.

Definition at line 852 of file McEventCollectionCnv_p6.cxx.

854{
855 const HepMC::FourVector& position = vtx.m_position;
856 persEvt.m_genVertices.push_back(
857 GenVertex_p6( position.x(),
858 position.y(),
859 position.z(),
860 position.t(),
861 HepMC::old_vertex_status_from_new(vtx.m_id), // REVERTED STATUS VALUE TO OLD SCHEME
862 vtx.m_weights.m_weights.begin(),
863 vtx.m_weights.m_weights.end(),
864 vtx.m_barcode ) );
865 GenVertex_p6& persVtx = persEvt.m_genVertices.back();
866
867 // we write only the orphans in-coming particles
868 const std::vector<HepMC::GenParticlePtr>::const_iterator endInVtx = vtx.m_particles_in.end();
869 persVtx.m_particlesIn.reserve(vtx.m_particles_in.size());
870 for ( std::vector<HepMC::GenParticlePtr>::const_iterator p = vtx.m_particles_in.begin();
871 p != endInVtx;
872 ++p ) {
873 if ( 0 == (*p)->production_vertex() ) {
874 persVtx.m_particlesIn.push_back( writeGenParticle( **p, persEvt ) );
875 }
876 }
877
878 const std::vector<HepMC::GenParticlePtr>::const_iterator endOutVtx = vtx.m_particles_out.end();
879 persVtx.m_particlesOut.reserve(vtx.m_particles_out.size());
880 for ( std::vector<HepMC::GenParticlePtr>::const_iterator p = vtx.m_particles_out.begin();
881 p != endOutVtx;
882 ++p ) {
883 persVtx.m_particlesOut.push_back( writeGenParticle( **p, persEvt ) );
884 }
885
886 return;
887}
std::vector< int > m_particlesIn
collection of barcodes of in-going particles connected to this vertex
std::vector< int > m_particlesOut
collection of barcodes of out-going particles connected to this vertex
int writeGenParticle(const HepMC::GenParticle &p, McEventCollection_p6 &persEvt) const
Method to write a persistent GenParticle object It returns the index of the persistent GenParticle in...
int old_vertex_status_from_new(const int newStatus)
Get vertex status in the old scheme from the status in the new scheme.
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.

Member Data Documentation

◆ m_curRecLevel

int TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_curRecLevel
protectedinherited

count recursive invocations, to detect recursion

Definition at line 582 of file TPConverter.h.

◆ m_hepMCWeightSvc

ServiceHandle<IHepMCWeightSvc> McEventCollectionCnv_p6::m_hepMCWeightSvc
protected

Definition at line 158 of file McEventCollectionCnv_p6.h.

◆ m_ignoreRecursion

bool TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_ignoreRecursion
protectedinherited

if true, do not throw errors in case of recursion.

Definition at line 588 of file TPConverter.h.

◆ m_isPileup

bool McEventCollectionCnv_p6::m_isPileup
protected

Definition at line 157 of file McEventCollectionCnv_p6.h.

◆ m_pStorage

std::vector< PERS >* TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_pStorage
protectedinherited

the address of the storage vector for persistent representations

Definition at line 579 of file TPConverter.h.

◆ m_pStorageTID

template<class TRANS>
TPObjRef::typeID_t ITPConverterFor< TRANS >::m_pStorageTID
protectedinherited

TP Ref typeID for the persistent objects this converter is creating.

Definition at line 292 of file TPConverter.h.

◆ m_pStorageTIDvalue

template<class TRANS>
unsigned ITPConverterFor< TRANS >::m_pStorageTIDvalue
protectedinherited

m_pStorageTID converted to integer value

Definition at line 295 of file TPConverter.h.

◆ m_recursive

bool TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_recursive
protectedinherited

if true, work in recursion-safe way (slower)

Definition at line 585 of file TPConverter.h.

◆ m_topConverter

template<class TRANS>
TopLevelTPCnvBase* ITPConverterFor< TRANS >::m_topConverter
protectedinherited

top level converter that owns this elemental TP converter it also holds the storage object

Definition at line 299 of file TPConverter.h.

◆ m_topConverterRuntime

template<class TRANS>
TopLevelTPCnvBase* ITPConverterFor< TRANS >::m_topConverterRuntime
protectedinherited

top level converter "owning" this TP converter at runtime (different from m_topConverter in case the top-level converter and object have extensions)

Definition at line 302 of file TPConverter.h.

◆ m_wasUsedForReading

template<class TRANS>
bool ITPConverterFor< TRANS >::m_wasUsedForReading
protectedinherited

flag set when using this converter for reading triggers search for a new converter before writing, to prevent possible use of old version

Definition at line 306 of file TPConverter.h.


The documentation for this class was generated from the following files: