ATLAS Offline Software
Loading...
Searching...
No Matches
CaloClusterContainerCnv_p5 Class Reference

#include <CaloClusterContainerCnv_p5.h>

Inheritance diagram for CaloClusterContainerCnv_p5:
Collaboration diagram for CaloClusterContainerCnv_p5:

Public Types

using base_class = TPConverterConstBase
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

virtual void persToTrans (const CaloClusterContainer_p5 *pers, CaloClusterContainer *trans, MsgStream &log) const override
virtual void transToPers (const CaloClusterContainer *trans, CaloClusterContainer_p5 *pers, MsgStream &log) const override
virtual void transToPers (const TRANS *transObj, PERS *persObj, MsgStream &log) const=0
 Convert transient representation to persistent one.
virtual void transToPers (const TRANS *transObj, PERS *persObj, MsgStream &log) override final
 Convert transient representation to persistent one.
virtual void persToTrans (const PERS *persObj, TRANS *transObj, MsgStream &log) const=0
 Convert persistent representation to transient one.
virtual void persToTrans (const PERS *persObj, TRANS *transObj, MsgStream &log) override final
 Convert persistent representation to transient one.
virtual TRANS * createTransientConst (const PERS *persObj, MsgStream &log) const
virtual PERScreatePersistentConst (const TRANS *transObj, MsgStream &log) const
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 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 Attributes

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 ElementLinkCnv_p2< ElementLink< CaloShowerContainer > >::State ShowerLinkState
typedef ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > >::State CellLinkState

Private Member Functions

void persToTrans (const CaloClusterContainer_p5::CaloCluster_p *pers, CaloCluster *trans, ShowerLinkState &showerLinkState, CellLinkState &cellLinkState, MsgStream &) const
void transToPers (const CaloCluster *trans, CaloClusterContainer_p5::CaloCluster_p *pers, ShowerLinkState &showerLinkState, CellLinkState &cellLinkState, MsgStream &) const

Private Attributes

CaloTowerSegCnv_p1 m_caloTowerSegCnv
P4EEtaPhiMCnv_p2 m_P4EEtaPhiMCnv
ElementLinkCnv_p2< ElementLink< CaloShowerContainer > > m_showerElementLinkCnv
ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > > m_cellElementLinkCnv

Detailed Description

Definition at line 25 of file CaloClusterContainerCnv_p5.h.

Member Typedef Documentation

◆ base_class

template<class TRANS, class PERS>
using TPConverterConstBase< TRANS, PERS >::base_class = TPConverterConstBase
inherited

Definition at line 779 of file TPConverter.h.

◆ CellLinkState

◆ Factory

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

Definition at line 26 of file ITPCnvBase.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.

◆ ShowerLinkState

◆ 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.

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.

◆ 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

◆ createPersistentConst()

template<class TRANS, class PERS>
virtual PERS * TPConverterConstBase< TRANS, PERS >::createPersistentConst ( const TRANS * transObj,
MsgStream & log ) const
virtualinherited

◆ 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

◆ createTransientConst()

template<class TRANS, class PERS>
virtual TRANS * TPConverterConstBase< TRANS, PERS >::createTransientConst ( const PERS * persObj,
MsgStream & log ) const
virtualinherited

◆ 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()

◆ 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/4]

void CaloClusterContainerCnv_p5::persToTrans ( const CaloClusterContainer_p5 * pers,
CaloClusterContainer * trans,
MsgStream & log ) const
overridevirtual

Definition at line 29 of file CaloClusterContainerCnv_p5.cxx.

32{
33 if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG << "Reading CaloClusterContainerCnv_p5" << endmsg;
34
35 // reset element link converters, and provide container name lookup table
36 ShowerLinkState showerLinkState (pers->m_linkNames);
37 CellLinkState cellLinkState (pers->m_linkNames);
38
39 // Use data pool for clusters to avoid calling constructor for each event
40 DataPool<CaloCluster> clusters;
41
42 trans->clear (SG::VIEW_ELEMENTS);
43 trans->reserve(pers->m_vec.size());
44
47
48 std::vector<float> temp_Moments;
49 Compressor A;
50 A.expandToFloat( pers->m_momentContainer.m_Mvalue, temp_Moments); // unpacks moments
51
52 std::vector<float>::const_iterator i_mom = temp_Moments.begin();
53 std::vector<float>::const_iterator i_mom_e = temp_Moments.end();
54
55 const std::vector<unsigned short>& keys = pers->m_momentContainer.m_Mkey;
56 unsigned int nkeys = keys.size();
57
58 unsigned int c1=0;
59
60 std::vector<float> tmp_badChannelEta;
61 std::vector<float> tmp_badChannelPhi;
62 Compressor B;
63 B.expandToFloat(pers->m_badEtaList,tmp_badChannelEta);
64 B.expandToFloat(pers->m_badPhiList,tmp_badChannelPhi);
65
66 std::vector<float> tmp_rawE;
67 std::vector<float> tmp_rawEtaPhiM;
68 Compressor C;
69 C.expandToFloat(pers->m_rawE,tmp_rawE);
70 std::vector<float>::const_iterator iraw1 = tmp_rawE.begin();
71 std::vector<float>::const_iterator iraw2 = tmp_rawE.end();
72
73 Compressor D;
74 D.expandToFloat(pers->m_rawEtaPhiM,tmp_rawEtaPhiM);
75 std::vector<float>::const_iterator iraw3 = tmp_rawEtaPhiM.begin();
76 std::vector<float>::const_iterator iraw4 = tmp_rawEtaPhiM.end();
77
78 std::vector<short>::const_iterator ibad1 = pers->m_badClusIndexList.begin();
79 std::vector<short>::const_iterator ibad2 = pers->m_badClusIndexList.end();
80 int nbad=0;
81
82 bool mom_overrun_err = false;
83 bool store_overrun_err = false;
84 bool raw_overrun_err = false;
85 size_t dataStore_size = pers->m_dataStore.size();
86
87 bool fillBad=true;
88 if (tmp_badChannelEta.size() != pers->m_badClusIndexList.size() ||
89 tmp_badChannelPhi.size() != pers->m_badClusIndexList.size() ||
90 pers->m_badLayerStatusList.size() != pers->m_badClusIndexList.size()) {
91 log << MSG::WARNING << " problem to decode bad channel information, not filled..." << endmsg;
92 fillBad=false;
93 }
94
95 short index=0;
96 for(;itp!=itp_e;++itp) {
97 index++;
98
99 CaloCluster* transCluster = clusters.nextElementPtr();// Get next ptr for next cluster
100 persToTrans(&(*itp),transCluster,
101 showerLinkState,
102 cellLinkState,
103 log); //Convert Cluster-quantities
104
105 CaloSamplingData *trDS =&(transCluster->m_dataStore);
106
108 int nVar=trDS->getNumberOfVariableTypes();
109 int nSamplings=trDS->getNumberOfSamplings();
110
113
114 for (int i=0;i<nVar;++i) {// here loops to read them in ...
115 if (testbit (trDS->m_varTypePattern, i)) {
116
117 // can be optimized: no decoding for each variable.
118 for (int j=0;j<nSamplings; ++j){
119
120 if ( testbit(transCluster->m_samplingPattern, j) ){
121 float val;
122 if (c1 < dataStore_size)
123 val = pers->m_dataStore[c1++];
124 else {
125 val = 0;
126 if (!store_overrun_err) {
127 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
128 "CaloClusterContainerCnv_p5")
129 << "Corrupted data: data store array overrun "
130 << pers->m_vec.size() << " clusters "
131 << nkeys << " moment keys "
132 << temp_Moments.size() << " total moments.";
133 store_overrun_err = true;
134 }
135 }
136 trDS->storeData(static_cast<vartype>(i),
137 static_cast<samptype>(j),
138 val);
139 }
140 else{
141
142 trDS->removeVariable(static_cast<vartype>(i),
143 static_cast<samptype>(j));
144 //std::cout<<"a:0"<<"\t";
145 }
146 }
147 // std::cout<<std::endl;
148 }
149 else
150 trDS->removeVariable(static_cast<vartype>(i));
151 }
152
153 transCluster->m_barrel= (bool)(0x001ff00f & transCluster->m_samplingPattern);
154 transCluster->m_endcap= (bool)(0x00e00ff0 & transCluster->m_samplingPattern);
155 // std::cout<<" <<< Read"<<std::endl;
156
157
158 //Convert moment store
160 for (unsigned short i=0;i<nkeys;++i) {
161 float val;
162 if (i_mom == i_mom_e) {
163 val = 0;
164 if (!mom_overrun_err) {
165 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
166 "CaloClusterContainerCnv_p5")
167 << "Corrupted data: moment array overrun "
168 << pers->m_vec.size() << " clusters "
169 << nkeys << " moment keys "
170 << temp_Moments.size() << " total moments.";
171 mom_overrun_err = true;
172 }
173 }
174 else {
175 val = *i_mom;
176 ++i_mom;
177 }
178 transStore.insert (transStore.end(), CaloClusterMomentStore::moment_store::value_type( keys[i], val ) );
179 }
180 transCluster->m_momentStore.setMomentStore (std::move (transStore));
181
182 // fill bad channel information
183 transCluster->resetBadChannel();
184 if (fillBad){
185 while (ibad1 != ibad2 && (*ibad1) ==index) {
186 float eta = tmp_badChannelEta[nbad] + transCluster->eta();
187 float phi = CaloPhiRange::fix(tmp_badChannelPhi[nbad] + transCluster->phi());
188 short status=pers->m_badLayerStatusList[nbad];
190 CaloBadChannel flag = CaloBadChannel( ((status>>8) & 0xff) );
192 // std::cout << " add bad channel data " << transCluster << " " << eta << " " << phi << " " << layer << " " << status << " " << flag.packedData() << std::endl;
193 transCluster->addBadChannel(data);
194 ++ibad1;
195 ++nbad;
196 }
197 }
198
199// fill raw E,eta,phi,M
200 if (iraw1 != iraw2) {
201 if (std::fabs(transCluster->e())>0.1) {
202 transCluster->m_rawE = (*iraw1) * transCluster->e();
203 }
204 else
205 transCluster->m_rawE = (*iraw1);
206 ++iraw1;
207 }
208 if (iraw3 != iraw4) {
209 transCluster->m_rawEta = (*iraw3) + transCluster->eta();
210 ++iraw3;
211 }
212 if (iraw3 != iraw4) {
213 transCluster->m_rawPhi = CaloPhiRange::fix((*iraw3)+transCluster->phi());
214 ++iraw3;
215 }
216 if (iraw3 == iraw4 && !raw_overrun_err) {
217 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
218 "CaloClusterContainerCnv_p5")
219 << "Corrupted data: raw array overrun "
220 << pers->m_vec.size() << " clusters "
221 << tmp_rawE.size() << " raw values.";
222 raw_overrun_err = true;
223 }
224 if (iraw3 != iraw4) {
225 transCluster->m_rawM = (*iraw3);
226 ++iraw3;
227 }
228 // std::cout << " perstotrans rawE/eta/phi/M " << transCluster->m_rawE << " " << transCluster->m_rawEta << " " <<
229 // transCluster->m_rawPhi << " " << transCluster->m_rawM << std::endl;
230
231 // no alt calib information available in p5 persistent
232 transCluster->m_altE=0.;
233 transCluster->m_altEta=0.;
234 transCluster->m_altPhi=0.;
235 transCluster->m_altM=0.;
236
237 trans->push_back(transCluster);
238 }
239
240 if (i_mom != i_mom_e && !mom_overrun_err) {
241 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
242 "CaloClusterContainerCnv_p5")
243 << "Corrupted data: not all moments read "
244 << pers->m_vec.size() << " clusters "
245 << nkeys << " moment keys "
246 << temp_Moments.size() << " total moments "
247 << i_mom-temp_Moments.begin() << " read.";
248 }
249
250 if (c1 != dataStore_size && !store_overrun_err) {
251 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
252 "CaloClusterContainerCnv_p5")
253 << "Corrupted data: not all data store members read "
254 << dataStore_size << " elements "
255 << c1 << " read.";
256 }
257
258 if (iraw1 != iraw2 && !raw_overrun_err) {
259 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
260 "CaloClusterContainerCnv_p5")
261 << "Corrupted data: not all raw values read "
262 << pers->m_vec.size() << " clusters "
263 << tmp_rawE.size() << " raw values "
264 << iraw1-tmp_rawE.begin() << " read.";
265 }
266
267 if (iraw3 != iraw4 && !raw_overrun_err) {
268 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
269 "CaloClusterContainerCnv_p5")
270 << "Corrupted data: not all raw values read "
271 << pers->m_vec.size() << " clusters "
272 << tmp_rawEtaPhiM.size() << " raw values "
273 << iraw3-tmp_rawEtaPhiM.begin() << " read.";
274 }
275
276
277 if (ibad1 != ibad2) {
278 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
279 "CaloClusterContainerCnv_p5")
280 << "Corrupted data: not all bad data read "
281 << pers->m_badClusIndexList.size() << " bad values "
282 << nbad << " read.";
283 }
284
285 //Convert TowerSegment
286 CaloTowerSeg seg;
287 m_caloTowerSegCnv.persToTrans(&(pers->m_towerSeg),&seg);
288 trans->setTowerSeg (seg);
289}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
ElementLinkCnv_p2< ElementLink< CaloShowerContainer > >::State ShowerLinkState
ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > >::State CellLinkState
virtual void persToTrans(const CaloClusterContainer_p5 *pers, CaloClusterContainer *trans, MsgStream &log) const override
std::vector< unsigned int > m_rawE
std::vector< float > m_dataStore
CaloClusterMomentContainer_p2 m_momentContainer
std::vector< short > m_badClusIndexList
contType::const_iterator const_iterator
ElementLinkContNames_p2 m_linkNames
std::vector< unsigned int > m_badPhiList
std::vector< short > m_badLayerStatusList
std::vector< unsigned int > m_badEtaList
std::vector< unsigned int > m_rawEtaPhiM
virtual void setTowerSeg(const CaloTowerSeg &towerSeg)
Set tower segmentation into CaloClusterContainer.
virtual void setMomentStore(const moment_store &rMomStore)
Set internal store.
std::map< moment_key, moment_value > moment_store
Internal moment store type.
CaloClusterMomentStore m_momentStore
cluster moments
void resetBadChannel()
Reset Bad channel list.
unsigned int m_samplingPattern
Sampling pattern.
double m_altE
Stores calibrated (cell weight) signal.
void addBadChannel(const CaloClusterBadChannelData &badChannel)
Add Bad channel information.
virtual double e() const
Retrieve energy independent of signal state.
double m_altPhi
Stores calibrated (cell weight) signal.
virtual double eta() const
Retrieve eta independent of signal state.
bool m_endcap
Flag is true if at least one cell in EMB.
double m_altM
Stores calibrated (cell weight) signal.
virtual double phi() const
Retrieve phi independent of signal state.
CaloSamplingData m_dataStore
{\ brief Cached Stores
bool m_barrel
Flag is true if at least one cell in EMB.
double m_altEta
Stores calibrated (cell weight) signal.
static double fix(double phi)
size_t getNumberOfSamplings() const
Set variable type pattern for this store.
CaloVariableType::VariableType variable_key_type
Variable look-up type.
unsigned int m_varTypePattern
CaloSampling::CaloSample sampling_key_type
Sampling look-up key type.
size_t getNumberOfVariableTypes() const
Return number of variable types.
bool storeData(variable_key_type theVariable, sampling_key_type theSampling, value_type theData)
}
bool removeVariable(variable_key_type theVariable, sampling_key_type theSampling)
Remove a certain variable.
void expandToFloat(const std::vector< unsigned int > &vc, std::vector< float > &vf)
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.
struct color C
str index
Definition DeMoScan.py:362
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
@ layer
Definition HitInfo.h:79
bool flag
Definition master.py:29
status
Definition merge.py:16
setBGCode setTAP setLVL2ErrorBits bool

◆ persToTrans() [2/4]

void CaloClusterContainerCnv_p5::persToTrans ( const CaloClusterContainer_p5::CaloCluster_p * pers,
CaloCluster * trans,
ShowerLinkState & showerLinkState,
CellLinkState & cellLinkState,
MsgStream & log ) const
private

Definition at line 501 of file CaloClusterContainerCnv_p5.cxx.

506{
508 trans->setBasicEnergy (pers->m_basicSignal);
509 trans->setTime (pers->m_time);
511 trans->m_eta0=pers->m_eta0;
512 trans->m_phi0=pers->m_phi0;
513 trans->m_status = CaloRecoStatus(pers->m_caloRecoStatus);
514 trans->setClusterSize (pers->m_clusterSize);
515
516 //Convert base class and element links
517 m_P4EEtaPhiMCnv.persToTrans(&pers->m_P4EEtaPhiM,static_cast<P4EEtaPhiM*>(trans),log);
518 m_showerElementLinkCnv.persToTrans(showerLinkState, pers->m_dataLink, trans->m_dataLink,log);
519 m_cellElementLinkCnv.persToTrans(cellLinkState, pers->m_cellLink, trans->m_cellLink,log);
521
522}
virtual void setAthenaBarCode(AthenaBarCode_t id)
ElementLinkCnv_p2< ElementLink< CaloShowerContainer > > m_showerElementLinkCnv
ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > > m_cellElementLinkCnv
cell_link_type m_cellLink
Local pointer to cell store.
bool setDefaultSignalState(signalstate_t s)
Sets default signal state.
void setClusterSize(unsigned int theClusterSize)
Set cluster size.
void setTime(double theTime)
Set cluster time.
virtual void setBasicEnergy(double theEnergy)
Set basic energy scale signal.
CaloRecoStatus m_status
Calorimeter reconstruction status.
static const AthenaBarCode_t UNDEFINEDBARCODE

◆ persToTrans() [3/4]

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

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

Implements TPConverterConstBase< TRANS, PERS >.

◆ persToTrans() [4/4]

virtual void TPConverterConstBase< TRANS, PERS >::persToTrans ( const PERS * persObj,
TRANS * transObj,
MsgStream & log )
inlinefinaloverridevirtual

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 from TPConverterConstBase< TRANS, PERS >.

Definition at line 807 of file TPConverter.h.

810 {
811 return const_cast<const TPConverterConstBase*>(this)->persToTrans (persObj, transObj, log);
812 }

◆ 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 }

◆ 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/4]

void CaloClusterContainerCnv_p5::transToPers ( const CaloCluster * trans,
CaloClusterContainer_p5::CaloCluster_p * pers,
ShowerLinkState & showerLinkState,
CellLinkState & cellLinkState,
MsgStream & log ) const
private

Definition at line 525 of file CaloClusterContainerCnv_p5.cxx.

530{
531 pers->m_basicSignal=trans->getBasicEnergy();
532 pers->m_time=trans->getTime();
534 pers->m_eta0=trans->eta0();
535 pers->m_phi0=trans->phi0();
537 pers->m_clusterSize=trans->getClusterSize();
538
539 //Convert base class and element links
540 P4EEtaPhiM tmp = *trans;
541 m_P4EEtaPhiMCnv.transToPers(&tmp,&pers->m_P4EEtaPhiM,log);
542 m_showerElementLinkCnv.transToPers(showerLinkState, trans->m_dataLink, pers->m_dataLink,log);
543 m_cellElementLinkCnv.transToPers(cellLinkState, trans->m_cellLink, pers->m_cellLink,log);
544}
double eta0() const
Returns raw of cluster seed.
virtual double getBasicEnergy() const
Access basic energy scale signal.
double getTime() const
Access cluster time.
unsigned int getClusterSize() const
Get cluster size.
double phi0() const
Returns raw of cluster seed.
virtual const store_type & getStatusWord() const
retrieve the entire status word

◆ transToPers() [2/4]

void CaloClusterContainerCnv_p5::transToPers ( const CaloClusterContainer * trans,
CaloClusterContainer_p5 * pers,
MsgStream & log ) const
overridevirtual

Definition at line 292 of file CaloClusterContainerCnv_p5.cxx.

295{
296 if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG << "Writing CaloClusterContainerCnv_p5" << endmsg;
297
298
299 // reset element link converters, and provide container name lookup table
300 ShowerLinkState showerLinkState (pers->m_linkNames);
301 CellLinkState cellLinkState (pers->m_linkNames);
302
303 pers->m_vec.resize(trans->size());
307
308 pers->m_badClusIndexList.clear();
309 pers->m_badLayerStatusList.clear();
310 pers->m_badEtaList.clear();
311 pers->m_badPhiList.clear();
312
313 pers->m_rawEtaPhiM.clear();
314 pers->m_rawE.clear();
315
316 // Set varTypePattern to the OR of the patterns of all clusters.
317 // (For samplings.)
318 // Trigger can make cluster collections with multiple pattern masks!
319 //
320 // Also pick up moment keys here. Trigger can make clusters with no
321 // stored moments, so we need to look until we find one that isn't empty.
322 // Store the moment keys and their number.
323 pers->m_varTypePattern=0;
324 pers->m_momentContainer.m_Mkey.clear();
326 for (CaloClusterContainer::const_iterator it2 = it; it2 != it_e; ++it2)
327 {
328 const CaloCluster& cl = **it2;
329 const CaloClusterMomentStore& ms = cl.m_momentStore;
330 pers->m_varTypePattern |= cl.m_dataStore.m_varTypePattern;
331
332 if (pers->m_momentContainer.m_nMoments == 0 && ms.size() != 0) {
334 int nMom=ms.size();
335 pers->m_momentContainer.m_nMoments = nMom;
336 for (int w=0; w<nMom; w++){ // here stores moment keys per container not cluster
337 pers->m_momentContainer.m_Mkey.push_back(mit.getMomentType());
338 ++mit;
339 }
340 }
341 else if (ms.size() > 0 && pers->m_momentContainer.m_nMoments != ms.size())
342 {
343 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
344 "CaloClusterContainerCnv_p5")
345 << "Inconsistent number of cluster moments: cluster "
346 << it2 - trans->begin() << " of " << trans->size()
347 << " have " << ms.size()
348 << " expect " << pers->m_momentContainer.m_nMoments;
349 }
350
351 }
352
353 std::vector<float> temp_Moments;
354 temp_Moments.reserve (trans->size() * pers->m_momentContainer.m_nMoments);
355 std::vector<float> tmp_badChannelEta;
356 std::vector<float> tmp_badChannelPhi;
357
358 std::vector<float> tmp_rawE;
359 std::vector<float> tmp_rawEtaPhiM;
360 tmp_rawE.reserve(trans->size());
361 tmp_rawEtaPhiM.reserve(3*trans->size());
362
363
364 short index=0;
365 for(;it!=it_e;++it,++itp) { // LOOP over clusters
366 const CaloCluster& cl = **it;
367 index++;
368 transToPers(&cl,&(*itp),
369 showerLinkState,
370 cellLinkState,
371 log); // tP of CaloCluster to CaloCluster_p
372
373 const CaloSamplingData* trDS=&cl.m_dataStore; //transient
374 int nVar=trDS->getNumberOfVariableTypes();
375 int nSamplings=trDS->getNumberOfSamplings();
376// std::cout<<"vars:"<<nVar<<"\t samplings:"<<nSamplings<<std::endl;
377// std::cout<<"b:"<<(*it)->m_barrel<<"\te:"<<(*it)->m_endcap<<std::endl;
378// std::cout<<"sPattern: "<<(*it)->m_samplingPattern<<"\tgB:"<<(0x001ff00f & (*it)->m_samplingPattern) <<"\tgEC:"<< (0x00e00ff0 & (*it)->m_samplingPattern) <<std::endl;
379
382
383 for (int i=0;i<nVar;++i) {
384 if (testbit (pers->m_varTypePattern, i)) {
385 // We're writing this pattern. Was it in the cluster?
386 if (testbit (trDS->m_varTypePattern, i)) {
387 // Yes, store it.
388 for (int j=0;j<nSamplings; ++j)
389 if ( testbit(cl.m_samplingPattern, j)) {
390 pers->m_dataStore.push_back(trDS->retrieveData
391 (static_cast<vartype>(i),
392 static_cast<samptype>(j)));
393 }
394 }
395 else {
396 // Not in the cluster. Store 0's.
397 for (int j=0;j<nSamplings; ++j)
398 if ( testbit(cl.m_samplingPattern, j))
399 pers->m_dataStore.push_back(0);
400 }
401 }
402 else{
403 // We're not writing. Check that nothing was stored...
404 for (int j=0;j<nSamplings; ++j)
405 if ( testbit(cl.m_samplingPattern, j))
406 if(trDS->retrieveData(static_cast<vartype>(i),
407 static_cast<samptype>(j)))
408 if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG<<"BIG PROBLEM ! not stored and has value:"
409 <<trDS->retrieveData(static_cast<vartype>(i),
410 static_cast<samptype>(j))
411 <<"\t var: "<<i
412 <<"\t sampling: "<<j<<endmsg;
413 }
414 }
415
416
417 //CaloClusterMomentStore::moment_iterator itm=cl.m_momentStore.begin();
418 //CaloClusterMomentStore::moment_iterator itm_e=cl.m_momentStore.end();
419
420 std::vector<unsigned short>::const_iterator itk =
421 pers->m_momentContainer.m_Mkey.begin();
422 std::vector<unsigned short>::const_iterator itk_e =
423 pers->m_momentContainer.m_Mkey.end();
425 cl.m_momentStore.begin();
427 cl.m_momentStore.end();
428 for (; itk != itk_e; ++itk) {
429 float val = 0;
430 if (itm != itm_e && itm.getMomentType() == *itk) {
431 val = (*itm).getValue();
432 ++itm;
433 }
434 else {
435 itm = cl.m_momentStore.find
436 (static_cast<CaloClusterMomentStore::moment_type> (*itk));
437 if (itm != itm_e) {
438 val = (*itm).getValue();
439 ++itm;
440 }
441 }
442 temp_Moments.push_back(val);
443 }
444
445// bad channel info
446 const CaloCluster::badChannelList* badlist = cl.getBadChannel();
447 // std::cout << " transtopers: bad channel size " << badlist->size() << std::endl;
448 for (const CaloClusterBadChannelData& bad : *badlist) {
449 pers->m_badClusIndexList.push_back(index);
450 float etac = bad.getEta()-(cl.eta());
451 float phic = CaloPhiRange::diff(bad.getPhi(),cl.phi());
452 CaloSampling::CaloSample sampl = bad.getLayer();
453 CaloBadChannel flag = bad.getFlag();
454 short status = ((sampl & 0xff) | ((flag.packedData() & 0xff) << 8));
455 tmp_badChannelEta.push_back(etac);
456 tmp_badChannelPhi.push_back(phic);
457 pers->m_badLayerStatusList.push_back(status);
458 }
459
460// raw E-eta-phi-M
461 // std::cout << "transtopers: rawE/eta/phi/M " << (*it)->m_rawE << " " << (*it)->m_rawEta << " " << (*it)->m_rawPhi << " " << (*it)->m_rawM << std::endl;
462 double e = cl.e();
463 if (std::fabs(e)>0.1) {
464 float eratio = cl.m_rawE / e;
465 tmp_rawE.push_back( eratio);
466 }
467 else
468 tmp_rawE.push_back( cl.m_rawE);
469 tmp_rawEtaPhiM.push_back( cl.m_rawEta-cl.eta());
470 float dphi = CaloPhiRange::diff ( cl.m_rawPhi, cl.phi());
471 tmp_rawEtaPhiM.push_back( dphi);
472 tmp_rawEtaPhiM.push_back( cl.m_rawM);
473 } // end of loop over clusters
474
475
476 Compressor A;
477 A.setNrBits(16);
478 // A.setIgnoreSign();
479 A.reduce(temp_Moments,pers->m_momentContainer.m_Mvalue); // packs moments
480
481 Compressor B;
482 B.setNrBits(16);
483 B.reduce(tmp_badChannelEta,pers->m_badEtaList);
484 B.reduce(tmp_badChannelPhi,pers->m_badPhiList);
485
486 Compressor C;
487 C.setNrBits(21);
488 C.reduce(tmp_rawE,pers->m_rawE);
489
490
491 Compressor D;
492 D.setNrBits(16);
493 D.reduce(tmp_rawEtaPhiM,pers->m_rawEtaPhiM);
494
495
496 m_caloTowerSegCnv.transToPers(&trans->getTowerSeg(),&(pers->m_towerSeg));
497
498}
virtual void transToPers(const CaloClusterContainer *trans, CaloClusterContainer_p5 *pers, MsgStream &log) const override
virtual const CaloTowerSeg & getTowerSeg() const
Retrieve tower segmentation.
CaloClusterMomentIterator moment_iterator
External moment iterator type.
CaloClusterMoment::MomentType moment_type
Moment type.
std::vector< CaloClusterBadChannelData > badChannelList
Get Bad Channel information.
static double diff(double phi1, double phi2)
simple phi1 - phi2 calculation, but result is fixed to respect range.
value_type retrieveData(variable_key_type theVariable, sampling_key_type theSampling) const
Retrieve const reference to individual variable.
void setNrBits(int bits)
Definition Compressor.h:36
void reduce(const std::vector< float > &vf, std::vector< unsigned int > &vi)
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.
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
setCharge setNTRTHiThresholdHits eratio

◆ transToPers() [3/4]

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

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

Implements TPConverterConstBase< TRANS, PERS >.

◆ transToPers() [4/4]

virtual void TPConverterConstBase< TRANS, PERS >::transToPers ( const TRANS * transObj,
PERS * persObj,
MsgStream & log )
inlinefinaloverridevirtual

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

Reimplemented from TPConverterConstBase< TRANS, PERS >.

Definition at line 815 of file TPConverter.h.

818 {
819 return const_cast<const TPConverterConstBase*>(this)->transToPers (transObj, persObj, log);
820 }

◆ 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; }

Member Data Documentation

◆ m_caloTowerSegCnv

CaloTowerSegCnv_p1 CaloClusterContainerCnv_p5::m_caloTowerSegCnv
private

Definition at line 64 of file CaloClusterContainerCnv_p5.h.

◆ m_cellElementLinkCnv

ElementLinkCnv_p2<ElementLink<CaloCellLinkContainer> > CaloClusterContainerCnv_p5::m_cellElementLinkCnv
private

Definition at line 67 of file CaloClusterContainerCnv_p5.h.

◆ 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_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_P4EEtaPhiMCnv

P4EEtaPhiMCnv_p2 CaloClusterContainerCnv_p5::m_P4EEtaPhiMCnv
private

Definition at line 65 of file CaloClusterContainerCnv_p5.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_showerElementLinkCnv

ElementLinkCnv_p2<ElementLink<CaloShowerContainer> > CaloClusterContainerCnv_p5::m_showerElementLinkCnv
private

Definition at line 66 of file CaloClusterContainerCnv_p5.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: