ATLAS Offline Software
Public Types | Public Member Functions | Protected Attributes | List of all members
TRT_HitCollectionCnv_p4 Class Referenceabstract

#include <TRT_HitCollectionCnv_p4.h>

Inheritance diagram for TRT_HitCollectionCnv_p4:
Collaboration diagram for TRT_HitCollectionCnv_p4:

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

 TRT_HitCollectionCnv_p4 ()
 
virtual TRTUncompressedHitCollectioncreateTransient (const TRT_HitCollection_p4 *persObj, MsgStream &log)
 
virtual void persToTrans (const TRT_HitCollection_p4 *persCont, TRTUncompressedHitCollection *transCont, MsgStream &log)
 
virtual void transToPers (const TRTUncompressedHitCollection *transCont, TRT_HitCollection_p4 *persCont, MsgStream &log)
 
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. More...
 
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. More...
 
virtual void pstoreToTrans (unsigned index, TRANS *trans, MsgStream &log)
 Convert persistent representation stored in the storage vector of the top-level object to transient. More...
 
virtual TRANS * createTransient (const PERS *persObj, MsgStream &log)
 Create transient representation of a persistent object. More...
 
virtual TRANS * createTransientWithKey (const PERS *persObj, const std::string &key, MsgStream &log)
 Create transient representation of a persistent object, with SG key. More...
 
virtual TRANS * virt_createTransFromPStore (unsigned index, MsgStream &log)
 Internal interface method that is used to invoke the real conversion method (createTransient) More...
 
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) More...
 
virtual void persToTrans (const PERS *persObj, TRANS *transObj, MsgStream &log)=0
 Convert persistent representation to transient one. More...
 
virtual void transToPers (const TRANS *transObj, PERS *persObj, MsgStream &log)=0
 Convert transient representation to persistent one. More...
 
virtual void persToTransWithKey (const PERS *persObj, TRANS *transObj, const std::string &, MsgStream &log)
 Convert persistent representation to transient one. More...
 
virtual void transToPersWithKey (const TRANS *transObj, PERS *persObj, const std::string &, MsgStream &log)
 Convert transient representation to persistent one. More...
 
virtual void persToTransUntyped (const void *pers, void *trans, MsgStream &log)
 Convert persistent object representation to transient. More...
 
virtual void transToPersUntyped (const void *trans, void *pers, MsgStream &log)
 Convert transient object representation to persistent. More...
 
virtual void persToTransWithKeyUntyped (const void *pers, void *trans, const std::string &key, MsgStream &log)
 Convert persistent object representation to transient. More...
 
virtual void transToPersWithKeyUntyped (const void *trans, void *pers, const std::string &key, MsgStream &log)
 Convert transient object representation to persistent. More...
 
virtual PERScreatePersistent (const TRANS *transObj, MsgStream &log)
 Create persistent representation of a transient object. More...
 
virtual PERScreatePersistentWithKey (const TRANS *transObj, const std::string &key, MsgStream &log)
 Create persistent representation of a transient object, with SG key. More...
 
TPObjRef toPersistentWithKey_impl (const TRANS *trans, const std::string &key, MsgStream &log)
 Convert transient object to persistent representation. More...
 
virtual const std::type_info & transientTInfo () const
 return C++ type id of the transient class this converter is for More...
 
virtual const std::type_info & transientTInfo () const
 return C++ type id of the transient class this converter is for More...
 
virtual const std::type_info & persistentTInfo () const
 return C++ type id of the persistent class this converter is for More...
 
virtual const std::type_info & persistentTInfo () const =0
 return C++ type id of the persistent class this converter is for More...
 
void setPStorage (std::vector< PERS > *storage)
 Tell this converter which storage vector it should use to store or retrieve persistent representations. More...
 
void setRecursive (bool flag=true)
 Tell the converter if it should work in recursive mode slower but it can safely handle recursion. More...
 
void ignoreRecursion (bool flag=false)
 Tell the converter to ignore recursion (do not throw errors) even when recurion is detected. More...
 
virtual void reservePStorage (size_t size)
 Reserve 'size' elements for persistent storage. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
virtual void initPrivateConverters (TopLevelTPCnvBase *)
 
virtual TopLevelTPCnvBasetopConverter ()
 return the top-level converter for this elemental TP converter More...
 
virtual const TopLevelTPCnvBasetopConverter () const
 return the top-level converter for this elemental TP converter More...
 
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 More...
 
virtual const TPObjRef::typeID_ttypeID () const
 Return TP typeID for persistent objects produced by this converter. More...
 
unsigned typeIDvalue () const
 inlined non-virtual version to get the typeID value fast More...
 
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. More...
 
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. More...
 
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 More...
 
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 More...
 

Protected Attributes

std::vector< PERS > * m_pStorage
 the address of the storage vector for persistent representations More...
 
int m_curRecLevel
 count recursive invocations, to detect recursion More...
 
bool m_recursive
 if true, work in recursion-safe way (slower) More...
 
bool m_ignoreRecursion
 if true, do not throw errors in case of recursion. More...
 
TPObjRef::typeID_t m_pStorageTID
 TP Ref typeID for the persistent objects this converter is creating. More...
 
unsigned m_pStorageTIDvalue
 m_pStorageTID converted to integer value More...
 
TopLevelTPCnvBasem_topConverter
 top level converter that owns this elemental TP converter it also holds the storage object More...
 
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) More...
 
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 More...
 

Detailed Description

Definition at line 16 of file TRT_HitCollectionCnv_p4.h.

Member Typedef Documentation

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

◆ 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

◆ TRT_HitCollectionCnv_p4()

TRT_HitCollectionCnv_p4::TRT_HitCollectionCnv_p4 ( )
inline

Definition at line 20 of file TRT_HitCollectionCnv_p4.h.

20 {};

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  }

◆ clearReadingFlag()

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

Definition at line 235 of file TPConverter.h.

235 { m_wasUsedForReading = false; }

◆ 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  {
76  cnv = dynamic_cast<CNV*>(c);
77  if( !cnv )
78  this->converterNotFound( ref.typeID(), c, typeid(CNV).name(), log );
79  return cnv;
80  }

◆ 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  {
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;
34  errorHandler();
35 }

◆ 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;
54  errorHandler();
55 }

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

◆ createTransient() [1/2]

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

◆ createTransient() [2/2]

TRTUncompressedHitCollection * TRT_HitCollectionCnv_p4::createTransient ( const TRT_HitCollection_p4 persObj,
MsgStream &  log 
)
virtual

Definition at line 302 of file TRT_HitCollectionCnv_p4.cxx.

302  {
303  std::unique_ptr<TRTUncompressedHitCollection> trans(std::make_unique<TRTUncompressedHitCollection>("DefaultCollectionName",persObj->m_nHits.size()));
304  persToTrans(persObj, trans.get(), log);
305  return(trans.release());
306 } //createTransient

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

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

◆ initPrivateConverters()

template<class TRANS >
virtual void ITPConverterFor< TRANS >::initPrivateConverters ( TopLevelTPCnvBase )
inlinevirtualinherited

◆ persistentTInfo() [1/2]

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&

Definition at line 482 of file TPConverter.h.

482 { return typeid(PERS); }

◆ persistentTInfo() [2/2]

virtual const std::type_info& ITPCnvBase::persistentTInfo ( ) const
pure virtualinherited

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

Returns
std::type_info&

Implemented in TopLevelTPConverter< MAIN_CNV, TL_PERS >, TPAbstractPolyCnvBase< TRANS_BASE, TRANS, PERS >, and DummyDetElementSurfaceCnv_p1.

◆ persToTrans() [1/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 TPCnvIDContFromIdentifier< TRANS, PERS, CONV >, TPCnvIDCont< TRANS, PERS, CONV >, TPCnvStdVector< TRANS, PERS, CONV >, TPCnvVector< TRANS, PERS, CONV >, TPValVectorCnv< TRANS, PERS, CONV >, TPPtrVectorCnv< TRANS, PERS, CONV >, TPConverterConstBase< TRANS, PERS >, T_AtlasHitsVectorCnv< TRANS, PERS, CONV >, and T_AthenaHitsVectorCnv< TRANS, PERS, CONV >.

◆ persToTrans() [2/2]

void TRT_HitCollectionCnv_p4::persToTrans ( const TRT_HitCollection_p4 persCont,
TRTUncompressedHitCollection transCont,
MsgStream &  log 
)
virtual

Definition at line 310 of file TRT_HitCollectionCnv_p4.cxx.

311 {
312  const EventContext& ctx = Gaudi::Hive::currentContext();
313 
314  // if (log.level() <= MSG::DEBUG) log << MSG::DEBUG << "In TRT_HitCollectionCnv_p4::persToTrans()" << endmsg;
315 
316  // some values are read less than once per hit, these need counters.
317  unsigned int meanTimeofCount=0, startRCount=0, endRCount=0, hitEneCount=0;
318  unsigned int idxBC=0, idxId=0, endHit=0, endBC=0, endId=0;
319 
320  //
321  // loop over strings - index [i]
322  //
323 
324  for ( unsigned int i = 0; i < persCont->m_nHits.size(); i++ ) {
325 
326  if ( persCont->m_nHits[i] ) { // at least one hit in the string
327 
328  const unsigned int startHit = endHit;
329  endHit += persCont->m_nHits[i];
330 
331  //
332  // string strawId
333  //
334  const unsigned int i1 = persCont->m_strawId1b[i]; // 8 bits
335  const unsigned int i2 = persCont->m_strawId2b[i]; // 16 bits
336  const unsigned int strawId = i2*256+i1; // => 24 bits (0 to 16,777,215)
337 
338  //
339  // string startPhi
340  //
341  const unsigned int istartPhi = persCont->m_startPhi[i]; // 8 bits
342  const double startPhi = -M_PI + (istartPhi+0.5)*2.0*M_PI/256.0; // rad (min = -pi, max = +pi)
343 
344  //
345  // string startZ
346  //
347  const unsigned int istartZ = persCont->m_startZ[i] >> 1; // 4 bits
348  double startZ = -365.0*CLHEP::mm + (istartZ+0.5)*730.0*CLHEP::mm/16.0; // (min = -365 mm, max = +365 mm)
349 
350  //
351  // start Rflag
352  //
353  const unsigned int istartRflag = persCont->m_startZ[i] & 1; // 1 bit
354 
355  //
356  // string startR
357  //
358  double startR;
359  if ( istartRflag == 1 ) {
360  startR = 2.0*CLHEP::mm; // 1 bit
361  }
362  else {
363  const unsigned int istartR = persCont->m_startR[startRCount++]; // 8 bits
364  startR = (istartR+0.5)*2.0*CLHEP::mm/256.0; // (range 0 - 2 mm)
365  if ( startR < 0.0155*CLHEP::mm ) startR = 0.0155*CLHEP::mm; // The wire radius
366  }
367 
368  //
369  // string startX, startY (derived from R,Phi)
370  //
371  double startX = startR*cos(startPhi);
372  double startY = startR*sin(startPhi);
373  /*
374  // Validation output
375  std::cout.precision(15);
376  std::cout << "AJBPtoTstrawId " << strawId << std::endl;
377  std::cout << "AJBPtoTstartR " << startR << std::endl;
378  std::cout << "AJBPtoTstartPhi " << startPhi << std::endl;
379  std::cout << "AJBPtoTstartX " << startX << std::endl;
380  std::cout << "AJBPtoTstartY " << startY << std::endl;
381  std::cout << "AJBPtoTstartZ " << startZ << std::endl;
382  std::cout << "AJBPtoTnHits " << persCont->m_nHits[i] << std::endl;
383  */
384  //
385  // loop over end hits in the string - index [j]
386  //
387 
388  for ( unsigned int j = startHit; j < endHit; j++ ) {
389 
390  if ( j >= endBC + persCont->m_nBC[idxBC] ) endBC += persCont->m_nBC[idxBC++];
391  if ( j >= endId + persCont->m_nId[idxId] ) endId += persCont->m_nId[idxId++];
392 
393  //
394  // hit meanTime
395  //
396  const unsigned int imeanTime = persCont->m_meanTime[j] >> 2; // 10 bits
397  double meanTime = (imeanTime+0.5)*75.0*CLHEP::ns/1024.0; // (min = 0.0 ns, max = 75.0 ns)
398  if ( imeanTime == 1023 ) meanTime = (double)persCont->m_meanTimeof[meanTimeofCount++]; // ns, 32-bit float overflow
399 
400  //
401  // dZ sign
402  //
403  const unsigned int idZsign = (persCont->m_meanTime[j] >> 1 ) & 1; // 1 bit
404 
405  //
406  // endR flag
407  //
408  const unsigned int iendRflag = persCont->m_meanTime[j] & 1; // 1 bit
409 
410  //
411  // hit energy deposited in keV (only relevant for photons) 32-bit float
412  //
413  const double hitEne = ( persCont->m_id[idxId] == 22 ||
414  (int)(abs(persCont->m_id[idxId])/100000) == 41 ||
415  (int)(abs(persCont->m_id[idxId])/10000000) == 1
416  ) ? (double)persCont->m_hitEne[hitEneCount++] : 0.0;
417 
418  //
419  // hit endPhi (can be modified later during "steplength preservation")
420  //
421  const unsigned int iendPhi = persCont->m_endPhi[j]; // 8 bits
422  double endPhi = -M_PI + (iendPhi+0.5)*2.0*M_PI/256.0; // rad (min = -pi, max = +pi)
423 
424  //
425  // string endR (can be modified later during "steplength preservation")
426  //
427  double endR;
428  if ( iendRflag==1 ) {
429  endR = 2.0*CLHEP::mm; // 1 bit
430  }
431  else {
432  const unsigned int iendR = persCont->m_endR[endRCount++];
433  endR = (iendR+0.5)*2.0*CLHEP::mm/256.0; // 8 bits
434  if ( endR < 0.0155*CLHEP::mm ) endR = 0.0155*CLHEP::mm; // the wire radius
435  }
436 
437  //
438  // hit endX, endY (derived from R,Phi)
439  //
440  double endX = endR*cos(endPhi); // can be modified later during "steplength preservation"
441  double endY = endR*sin(endPhi); // can be modified later during "steplength preservation"
442 
443  // Save the (o)riginal endX, endY values for the next hit start because
444  // they might get shrunk to fit the g4 steplength of the current hit.
445  double endXo = endX;
446  double endYo = endY;
447 
448  //
449  // g4 step length of the hit, m_steplength, and
450  // kinetic energy of the hit, m_kinEne, are both 15-bit short floats.
451  // Note: a rare condition causes a 16-bit short float (mantissa=512).
452  //
453  const int kmantissa = persCont->m_kinEne[j] >> 6; // 9 bits (expected)
454  const int smantissa = persCont->m_steplength[j] >> 6;
455  const int kexponent = persCont->m_kinEne[j] & 0x3F; // 6 bits
456  const int sexponent = persCont->m_steplength[j] & 0x3F;
457  const double kinEne = (kmantissa+512.5)/1024 * pow(2.0,kexponent) / 1.0e9; // MeV
458  double g4steplength = (smantissa+512.5)/1024 * pow(2.0,sexponent) / 1.0e9; // mm
459  if ( idZsign==0 ) g4steplength = -g4steplength;
460 
461  //
462  // Preserving the steplength of the hit by setting endZ or shrinking dX,dY.
463  //
464  double dX = endX-startX;
465  double dY = endY-startY;
466  double dZ;
467  double dXY2 = dX*dX+dY*dY;
468  double dL2 = g4steplength*g4steplength;
469  if ( dL2 > dXY2 ) { // define dZ such that steplength = g4steplength
470  dZ = sqrt(dL2-dXY2);
471  if (g4steplength<0.0) dZ=-dZ;
472  }
473  else { // dL2 < dXY2 // shrink dX,dY such that dXY = g4steplength
474  dX = dX * sqrt(dL2/dXY2); // this includes the cases where dL2=0!
475  dY = dY * sqrt(dL2/dXY2);
476  dZ = 0.0*CLHEP::mm;
477  endX = startX + dX;
478  endY = startY + dY;
479  //endR = sqrt( endX*endX + endY*endY ); // for validation information
480  //endPhi = atan2(endY,endX); // for validation information
481  }
482  double endZ = startZ + dZ;
483  //dX = endX-startX; // for validation information
484  //dY = endY-startY; // for validation information
485  /*
486  // Validation output
487  std::cout.precision(15);
488  std::cout << "AJBPtoTendR " << endR << std::endl;
489  std::cout << "AJBPtoTendPhi " << endPhi << std::endl;
490  std::cout << "AJBPtoTendX " << endX << std::endl;
491  std::cout << "AJBPtoTendY " << endY << std::endl;
492  std::cout << "AJBPtoTendZ " << endZ << std::endl;
493  std::cout << "AJBPtoTmeanTime " << meanTime << std::endl;
494  std::cout << "AJBPtoTkinEne " << kinEne << std::endl;
495  std::cout << "AJBPtoThitEne " << hitEne << std::endl;
496  std::cout << "AJBPtoTsteplength " << sqrt(dX*dX+dY*dY+dZ*dZ) << std::endl;
497  */
498  //
499  // Notes:
500  // - All units are CLHEP, except hitEne which is in keV.
501  // - For charged particles kinEne is *zero*!
502  //
503 
505  if (persCont->m_mcEvtIndex[idxBC] == 0) {
507  }
508  HepMcParticleLink partLink( persCont->m_barcode[idxBC], persCont->m_mcEvtIndex[idxBC], flag, HepMcParticleLink::IS_BARCODE, ctx );
509  if ( HepMC::BarcodeBased::is_truth_suppressed_pileup(static_cast<int>(persCont->m_barcode[idxBC])) ) {
510  partLink.setTruthSuppressionType(EBC_PU_SUPPRESSED);
511  }
512  transCont->Emplace( strawId, partLink, persCont->m_id[idxId],
513  kinEne, hitEne, startX, startY, startZ,
514  endX, endY, endZ, meanTime );
515  //
516  // End of this hit becomes the start of the next;
517  // use the original (uncorrected) values for X,Y
518  // but the derived value for Z.
519  //
520  startX = endXo; startY = endYo; startZ = endZ;
521 
522  }
523  } // nhits>0
524  } // straw loop
525 } // persToTrans

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

◆ 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 TPConverterWithKeyBase< TRANS, PERS >.

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  }

◆ 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  {
761  assert (index < this->m_pStorage->size());
762  this->persToTrans( &(*this->m_pStorage)[index], trans, log );
763  }

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

551  {
552  m_pStorage = storage;
553  m_curRecLevel = 0;
554  }

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

559  {
560  m_recursive = flag;
561  }

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

◆ 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  {
225  m_pStorageTID = TPtypeID;
226  m_pStorageTIDvalue = TPtypeID.value();
228  }

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

◆ 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() [1/2]

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

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

Returns
std::type_info&

Implements ITPCnvBase.

Reimplemented in TPAbstractPolyCnvBase< Analysis::MuonContainer, Analysis::MuonContainer, MuonContainer_p3 >, TPAbstractPolyCnvBase< TileTrackMuFeatureContainer, TileTrackMuFeatureContainer, TileTrackMuFeatureContainer_p3 >, TPAbstractPolyCnvBase< std::vector< Analysis::TauPi0Cluster * >, std::vector< Analysis::TauPi0Cluster * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< IsoMuonFeatureContainer, IsoMuonFeatureContainer, IsoMuonFeatureContainer_p2 >, TPAbstractPolyCnvBase< MuonFeatureDetailsContainer, MuonFeatureDetailsContainer, MuonFeatureDetailsContainer_p2 >, TPAbstractPolyCnvBase< std::vector< Trk::VxCandidate * >, std::vector< Trk::VxCandidate * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< MuonFeatureContainer, MuonFeatureContainer, MuonFeatureContainer_p3 >, TPAbstractPolyCnvBase< std::vector< TrigConfAlg >, std::vector< TrigConfAlg >, std::vector< TrigConfAlg_p1 > >, TPAbstractPolyCnvBase< TrigT2MbtsBitsContainer, TrigT2MbtsBitsContainer, TrigT2MbtsBitsContainer_p3 >, TPAbstractPolyCnvBase< TrigCompositeContainer, TrigCompositeContainer, TrigCompositeContainer_p1 >, TPAbstractPolyCnvBase< LumiBlockCollection, LumiBlockCollection, LumiBlockCollection_p2 >, TPAbstractPolyCnvBase< TrigTauClusterContainer, TrigTauClusterContainer, TrigTauClusterContainer_p5 >, TPAbstractPolyCnvBase< TrigRNNOutputContainer, TrigRNNOutputContainer, TrigRNNOutputContainer_p2 >, TPAbstractPolyCnvBase< TrigRoiDescriptorCollection, TrigRoiDescriptorCollection, TrigRoiDescriptorCollection_p3 >, TPAbstractPolyCnvBase< TrigTauClusterContainer, TrigTauClusterContainer, TrigTauClusterContainer_p4 >, TPAbstractPolyCnvBase< TrigT2JetContainer, TrigT2JetContainer, TrigT2JetContainer_p3 >, TPAbstractPolyCnvBase< TrigPassBitsCollection, TrigPassBitsCollection, TrigPassBitsCollection_p1 >, TPAbstractPolyCnvBase< TrigRoiDescriptorCollection, TrigRoiDescriptorCollection, TrigRoiDescriptorCollection_p2 >, TPAbstractPolyCnvBase< std::vector< const JetTagInfoBase * >, std::vector< const JetTagInfoBase * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< TrigTauClusterContainer, TrigTauClusterContainer, TrigTauClusterContainer_p3 >, TPAbstractPolyCnvBase< TrigMuonEFIsolationContainer, TrigMuonEFIsolationContainer, TrigMuonEFIsolationContainer_p1 >, TPAbstractPolyCnvBase< MultiComponentStateOnSurfaceDV, MultiComponentStateOnSurfaceDV, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< RingerRingsContainer, RingerRingsContainer, RingerRingsContainer_p2 >, TPAbstractPolyCnvBase< std::vector< Trk::VxTrackAtVertex * >, std::vector< Trk::VxTrackAtVertex * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< std::vector< TrigMonTE >, std::vector< TrigMonTE >, std::vector< TrigMonTE_p1 > >, TPAbstractPolyCnvBase< Analysis::MuonContainer, Analysis::MuonContainer, MuonContainer_p6 >, TPAbstractPolyCnvBase< TrigMissingETContainer, TrigMissingETContainer, TrigMissingETContainer_p3 >, TPAbstractPolyCnvBase< TileHitVector, TileHitVector, TileHitVector_p1 >, TPAbstractPolyCnvBase< DataVector< eflowObject >, DataVector< eflowObject >, std::vector< eflowObject_p2 > >, TPAbstractPolyCnvBase< std::vector< TrigConfSeq >, std::vector< TrigConfSeq >, std::vector< TrigConfSeq_p1 > >, TPAbstractPolyCnvBase< TrigTrtHitCountsCollection, TrigTrtHitCountsCollection, TrigTrtHitCountsCollection_p2 >, TPAbstractPolyCnvBase< JetCollection, JetCollection, ParticleJetContainer_p1 >, TPAbstractPolyCnvBase< TrigL2BjetContainer, TrigL2BjetContainer, TrigL2BjetContainer_p3 >, TPAbstractPolyCnvBase< TrigMuonEFIsolationContainer, TrigMuonEFIsolationContainer, TrigMuonEFIsolationContainer_p2 >, TPAbstractPolyCnvBase< TrigPassFlagsCollection, TrigPassFlagsCollection, TrigPassFlagsCollection_p1 >, TPAbstractPolyCnvBase< DataVector< const Trk::MeasurementBase >, DataVector< const Trk::MeasurementBase >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< DataVector< eflowObject >, DataVector< eflowObject >, std::vector< eflowObject_p3 > >, TPAbstractPolyCnvBase< TrigTauTracksInfoCollection, TrigTauTracksInfoCollection, TrigTauTracksInfoCollection_p2 >, TPAbstractPolyCnvBase< TrackInVertexVector, TrackInVertexVector, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< TrigTauClusterDetailsContainer, TrigTauClusterDetailsContainer, TrigTauClusterDetailsContainer_p2 >, TPAbstractPolyCnvBase< std::vector< Analysis::TauShot * >, std::vector< Analysis::TauShot * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< TrigEMClusterContainer, TrigEMClusterContainer, TrigEMClusterContainer_p4 >, TPAbstractPolyCnvBase< DataVector< eflowObject >, DataVector< eflowObject >, std::vector< eflowObject_p4 > >, TPAbstractPolyCnvBase< std::vector< TrigMonRoi >, std::vector< TrigMonRoi >, std::vector< TrigMonRoi_p1 > >, TPAbstractPolyCnvBase< TrigMuonEFContainer, TrigMuonEFContainer, TrigMuonEFContainer_p2 >, TPAbstractPolyCnvBase< DataVector< eflowObject >, DataVector< eflowObject >, std::vector< eflowObject_p5 > >, TPAbstractPolyCnvBase< TrigTauContainer, TrigTauContainer, TrigTauContainer_p3 >, TPAbstractPolyCnvBase< TrigEMClusterContainer, TrigEMClusterContainer, TrigEMClusterContainer_p3 >, TPAbstractPolyCnvBase< ElectronMuonTopoInfoContainer, ElectronMuonTopoInfoContainer, ElectronMuonTopoInfoContainer_p1 >, TPAbstractPolyCnvBase< TrigInDetTrackCollection, TrigInDetTrackCollection, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< std::vector< const Trk::TrackParameters * >, std::vector< const Trk::TrackParameters * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< EventBookkeeperCollection, EventBookkeeperCollection, EventBookkeeperCollection_p2 >, TPAbstractPolyCnvBase< SkimDecisionCollection, SkimDecisionCollection, SkimDecisionCollection_p1 >, TPAbstractPolyCnvBase< std::vector< TrigConfChain >, std::vector< TrigConfChain >, std::vector< TrigConfChain_p1 > >, TPAbstractPolyCnvBase< Trk::TrackStates, Trk::TrackStates, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< CombinedMuonFeatureContainer, CombinedMuonFeatureContainer, CombinedMuonFeatureContainer_p4 >, TPAbstractPolyCnvBase< TrigPhotonContainer, TrigPhotonContainer, TrigPhotonContainer_p3 >, TPAbstractPolyCnvBase< std::vector< TrigMonSeq >, std::vector< TrigMonSeq >, std::vector< TrigMonSeq_p1 > >, TPAbstractPolyCnvBase< EventBookkeeperCollection, EventBookkeeperCollection, EventBookkeeperCollection_p1 >, TPAbstractPolyCnvBase< std::vector< TrigMonAlg >, std::vector< TrigMonAlg >, std::vector< TrigMonAlg_p1 > >, TPAbstractPolyCnvBase< CombinedMuonFeatureContainer, CombinedMuonFeatureContainer, CombinedMuonFeatureContainer_p3 >, TPAbstractPolyCnvBase< DataVector< eflowObject >, DataVector< eflowObject >, std::vector< eflowObject_p1 > >, TPAbstractPolyCnvBase< std::vector< Analysis::TauPi0Candidate * >, std::vector< Analysis::TauPi0Candidate * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< CombinedMuonFeatureContainer, CombinedMuonFeatureContainer, CombinedMuonFeatureContainer_p2 >, TPAbstractPolyCnvBase< TrigElectronContainer, TrigElectronContainer, TrigElectronContainer_p3 >, TPAbstractPolyCnvBase< TrigSpacePointCountsCollection, TrigSpacePointCountsCollection, TrigSpacePointCountsCollection_p4 >, TPAbstractPolyCnvBase< Analysis::MuonContainer, Analysis::MuonContainer, MuonContainer_p5 >, TPAbstractPolyCnvBase< TileMuFeatureContainer, TileMuFeatureContainer, TileMuFeatureContainer_p2 >, TPAbstractPolyCnvBase< std::vector< TrigConfSig >, std::vector< TrigConfSig >, std::vector< TrigConfSig_p1 > >, TPAbstractPolyCnvBase< std::vector< TrigMonROBData >, std::vector< TrigMonROBData >, std::vector< TrigMonROBData_p1 > >, TPAbstractPolyCnvBase< Analysis::MuonContainer, Analysis::MuonContainer, MuonContainer_p4 >, TPAbstractPolyCnvBase< LumiBlockCollection, LumiBlockCollection, LumiBlockCollection_p1 >, TPAbstractPolyCnvBase< std::vector< const JetAssociationBase * >, std::vector< const JetAssociationBase * >, std::vector< TPObjRef > >, TPAbstractPolyCnvBase< IsoMuonFeatureContainer, IsoMuonFeatureContainer, IsoMuonFeatureContainer_p3 >, TPAbstractPolyCnvBase< TrigCaloClusterContainer, TrigCaloClusterContainer, TrigCaloClusterContainer_p3 >, and TPAbstractPolyCnvBase< std::vector< TrigMonROB >, std::vector< TrigMonROB >, std::vector< TrigMonROB_p1 > >.

Definition at line 201 of file TPConverter.h.

201 { return typeid(TRANS); }

◆ transientTInfo() [2/2]

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&

Definition at line 479 of file TPConverter.h.

479 { return typeid(TRANS); }

◆ transToPers() [1/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 TPCnvIDContFromIdentifier< TRANS, PERS, CONV >, TPCnvIDCont< TRANS, PERS, CONV >, TPCnvStdVector< TRANS, PERS, CONV >, TPCnvVector< TRANS, PERS, CONV >, TPValVectorCnv< TRANS, PERS, CONV >, TPPolyVectorCnv< TRANS, PERS, CONV >, TPPtrVectorCnv< TRANS, PERS, CONV >, TPConverterConstBase< TRANS, PERS >, T_AtlasHitsVectorCnv< TRANS, PERS, CONV >, and T_AthenaHitsVectorCnv< TRANS, PERS, CONV >.

◆ transToPers() [2/2]

void TRT_HitCollectionCnv_p4::transToPers ( const TRTUncompressedHitCollection transCont,
TRT_HitCollection_p4 persCont,
MsgStream &  log 
)
virtual

Definition at line 26 of file TRT_HitCollectionCnv_p4.cxx.

27 {
28 
29  /*
30  Spring 2009
31  Andrew Beddall - lossy TRT G4hit compression [p3]
32 
33  In p1, p2 versions, GEANT hits are persistified on disk as floats.
34  In the p3 version, floats are compressed to "integers"/"short-floats" before persistifying.
35  In the p4 version, HepMcParticleLink_p2 can identify the event index and collection.
36  The saving is about 75%; see http://cern.ch/beddall/TRThitCompression/
37 
38  Spring 2008
39  Rob Duxfield - lossless TRT G4hit compression [p2]
40 
41  Finds hits belonging to a "string" (in which the end point of one hit is
42  the same as the start point of the next) and persistifies the end point
43  of each hit plus the start point of the first hit in each string.
44  */
45 
46  // The original units from the hit simulation are indicated in comments;
47  // they are all in CLHEP units except for hitEne which is in keV.
48  // I sometimes make use of CLHEP scales *CLHEP::mm and *CLHEP::ns (both=1) for clarity (I hope!).
49  // See also https://twiki.cern.ch/twiki/bin/view/Atlas/TrtSoftware#Production_of_Hits
50 
51  static const double dRcut = 1.0e-7*CLHEP::mm;
52  static const double dTcut = 1.0*CLHEP::ns; // redundant?
53 
54  // if (log.level() <= MSG::DEBUG) log << MSG::DEBUG << "In TRT_HitCollectionCnv_p4::transToPers()" << endmsg;
55 
56  const EventContext& ctx = Gaudi::Hive::currentContext();
57  const IProxyDict* proxy = Atlas::getExtendedEventContext(ctx).proxy();
58  int lastIndex{-1};
59  int lastBarcode{-1};
60  int lastId = -1;
61  double lastT = 0.0*CLHEP::ns;
62  unsigned int idx = 0;
63  unsigned int endBC = 0;
64  unsigned int endId = 0;
65  unsigned int endHit = 0;
66  HepGeom::Point3D<double> lastEnd(0.0, 0.0, 0.0); // mm
67 
68  for (TRTUncompressedHitCollection::const_iterator it = transCont->begin(); it != transCont->end(); ++it) {
69 
71  const HepMcParticleLink * currentLink = &(trtHit->particleLink());
72  const int barcode = currentLink->barcode();
73  int index{0};
75  proxy).at(0) != 0) {
76  index = currentLink->eventIndex();
77  }
78 
79  if ( lastBarcode != barcode || lastIndex != index || (idx - endBC > 65500) ) { // max unsigned short = 65535;
80  lastBarcode = barcode;
81  lastIndex = index;
82  const unsigned short persIndex = static_cast<unsigned short>(index);
83  if (static_cast<HepMcParticleLink::index_type>(lastIndex) != static_cast<HepMcParticleLink::index_type>(persIndex)) {
84  log << MSG::WARNING << "Attempting to persistify an eventIndex larger than max unsigned short!" << endmsg;
85  }
86  // store barcode, eventIndex and McEventCollection once for set
87  // of consecutive hits with the same barcode and eventIndex
88  persCont->m_barcode.push_back(static_cast<unsigned int>(lastBarcode));
89  persCont->m_mcEvtIndex.push_back(persIndex);
90  persCont->m_evtColl.push_back('a'); // Hard-coding as this only ever had a single value in production
91 
92  if ( idx > 0 ) {
93  persCont->m_nBC.push_back(idx - endBC);
94  endBC = idx;
95  }
96  }
97 
98  if ( (int)trtHit->GetParticleEncoding() != lastId || idx - endId > 65500) { // max unsigned short = 65535;
99  // store id once for set of consecutive hits with same id
100  lastId = trtHit->GetParticleEncoding();
101  persCont->m_id.push_back(lastId);
102  if ( idx > 0 ) {
103  persCont->m_nId.push_back(idx - endId);
104  endId = idx;
105  }
106  }
107 
108  const HepGeom::Point3D<double> hitStart(trtHit->GetPreStepX(), trtHit->GetPreStepY(), trtHit->GetPreStepZ()); // mm
109 
110  const double meanTime = trtHit->GetGlobalTime(); // ns // Time of flight from the I.P. to the center of the hit.
111  const double dTLast = std::abs(meanTime - lastT); // |d(meantime)| between the previous hit and the current one.
112  const double dRLast = lastEnd.distance(hitStart); // Distance between end of previous hit and start of current one;
113  // this is zero if the hit is a continuation of the same particle in the same straw.
114 
115  // Begin a new string if the current and previous hits are disconnected;
116  // it looks like dTcut is redundant (but not sure about this).
117  if ( dRLast >= dRcut || dTLast >= dTcut ) {
118 
119  // if ( dRLast < dRcut) std::cout << "AJBdTLastTriggeredNewString " << dRLast << " " << dTLast << std::endl;
120 
122  // new hit string //
124 
125  //
126  // Persistify string *strawId* using 24 bits.
127  // Assumes 0 <= strawId <= 16,777,215 (strawId appears to be < 4,000,000)
128  //
129  const unsigned int strawId = trtHit->GetHitID();
130  persCont->m_strawId1b.push_back( (unsigned char)(strawId % 256) ); // 8 bits
131  persCont->m_strawId2b.push_back( (unsigned short)(strawId / 256) ); // 16 bits
132  if ( strawId>16777215 )
133  log << MSG::WARNING << "TRT_HitCollectionCnv: strawId > 2^24-1 cannot be persistified correctly! " << endmsg;
134 
135  //
136  // Persistify string start radius using 1 bit (istartRflag) or 8 bits (startR)
137  // Note that the smallest value of R is the wire radius (0.0155 mm)
138  //
139  // R will be flagged as 2 mm if it is within 0.1 um of the straw wall => max error = 0.1 um,
140  // otherwise compress with 8 bits => max error = 3.9 um (0.078 ns), RMS error = 1.1 um (0.022 ns)
141  //
142  const double startR = sqrt( hitStart.x()*hitStart.x() + hitStart.y()*hitStart.y() ); // mm
143  unsigned short istartRflag;
144  if ( startR > 1.9999*CLHEP::mm ) {
145  istartRflag=1; // persistify as a 1-bit flag
146  }
147  else {
148  istartRflag=0; // compress to 8 bits with a span of 2 mm
149  persCont->m_startR.push_back( (unsigned char)(startR/(2.0*CLHEP::mm)*256.0) );
150  }
151 
152  //
153  // Persistify string *startPhi* using 8 bits (min=-pi, max=+pi)
154  // Max. error = 12 mrad (< 24 um, 0.48 ns); RMS error = 7 mrad (< 14 um, 0.28 ns)
155  //
156  const double startPhi = atan2( hitStart.y(), hitStart.x() ); // returns range -pi to +pi rad
157  persCont->m_startPhi.push_back( (unsigned char)( (startPhi+M_PI)/(2.0*M_PI)*256.0 ) );
158 
159  //
160  // Persistify *startZ* using a 4 bits (min = -365 mm, max= +365 mm)
161  // Max. error = 25 mm (25e-3/(0.75c) = 0.111 ns * 2 reflect = 0.222 ns)
162  // RMS error = 14 mm (14e-3/(0.75c) = 0.062 ns * 2 reflect = 0.124 ns)
163  // Also the 1-bit *istartRflag* is packed into this variable.
164  //
165  // Note:
166  // In the digi code we need to allow for something like 22.5 mm outside straw.
167  // Also because we have short straws,
168  // short straws are about < +-180 mm, long straws are about < +-350 mm
169  // The following compressions can give a large "out of straw" value;
170  // *don't* use these: (2.0), 32.0, 128.0, 256.0.
171 
172  unsigned char istartZ = (unsigned char)( (hitStart.z()+365.0*CLHEP::mm)/(730.0*CLHEP::mm)*16.0 );
173  istartZ = (istartZ << 1) | istartRflag;
174  persCont->m_startZ.push_back( istartZ );
175 
176  if ( idx > 0 ) {
177  persCont->m_nHits.push_back( idx - endHit );
178  endHit = idx;
179  }
180  /*
181  // Validation output
182  std::cout.precision(15);
183  std::cout << "AJBTtoPstrawId " << strawId << std::endl;
184  std::cout << "AJBTtoPstartR " << startR << std::endl;
185  std::cout << "AJBTtoPstartPhi " << startPhi << std::endl;
186  std::cout << "AJBTtoPstartX " << hitStart.x() << std::endl;
187  std::cout << "AJBTtoPstartY " << hitStart.y() << std::endl;
188  std::cout << "AJBTtoPstartZ " << hitStart.z() << std::endl;
189  */
190  } // end of "begin new hit string"
191 
193  // Now for the end hits //
195 
196  const HepGeom::Point3D<double> hitEnd(trtHit->GetPostStepX(), trtHit->GetPostStepY(), trtHit->GetPostStepZ()); // mm
197  const HepGeom::Point3D<double> hitLength = (hitEnd - hitStart);
198 
199  //
200  // Here both *kinEne* (kinetic energy of the particle causing the hit) and
201  // *steplength* (g4hit length) are persistified using a 15-bit "short float"
202  // (9 bit unsigned mantissa, 6 bit unsigned exponent).
203  // This stores values in the range 0.51*2^0 = 0.51 to 1.00*2^63 = 9.2e18.
204  // I enforce the limits 1.0 and 9.0e18; see below.
205  // Max relative error = 0.0010, RMS = 0.0004
206  //
207  // Notes:
208  //
209  // - G4 gives kinEne in MeV; I sometimes see values ~ 1e-7 MeV (100 meV) [float round-off?]
210  // So I multiply by 1e9 and store in units of meV => range 1.0 meV to 9.0e18 meV (9000 TeV!)
211  // - About 1 in 10000 hits have steplength ~ 1e-7 mm [float round-off?]
212  // so again I multiply by 1e9 and store in units of pm => range 1.0 pm to 9.0e18 pm (9000 km)
213  // - The mantissa has maximum 9 bits, the exponent has maximum 6 bits,
214  // Note: a rare condition causes an 10-bit mantissa (mantissa=512).
215  //
216  double kinEne = trtHit->GetKineticEnergy() * 1.0e9; // nano Mev = meV.
217  double steplength = hitLength.distance() * 1.0e9; // nano mm = pm.
218  if ( kinEne < 1.0 ) kinEne=1.0; // Keep the value
219  if ( steplength < 1.0 ) steplength=1.0; // well within the
220  if ( kinEne > 9.0e18 ) kinEne=9.0e18; // range of the
221  if ( steplength > 9.0e18 ) steplength=9.0e18; // short float.
222  const unsigned int kexponent = (unsigned int)ceil(log10(kinEne)/0.30102999566398);
223  const unsigned int sexponent = (unsigned int)ceil(log10(steplength)/0.30102999566398);
224  const unsigned int kmantissa = (unsigned int)(kinEne/pow(2.0,kexponent)*1024) - 512;
225  const unsigned int smantissa = (unsigned int)(steplength/pow(2.0,sexponent)*1024) - 512;
226  persCont->m_kinEne.push_back( (kmantissa << 6) | kexponent );
227  persCont->m_steplength.push_back( (smantissa << 6) | sexponent );
228 
229  //
230  // Persistify hit end radius using 1 bit (iendRflag) or 8 bits (endR).
231  // Note that the smallest value of R is the wire radius (0.0155 mm)
232  //
233  // R will be flagged as 2 mm if it is within 0.1 um of the straw wall => max error = 0.1 um,
234  // otherwise compress with 8 bits. The errors are as for startR, but can increased greatly
235  // after steplength preservation in PtoT.
236  //
237  const double endR = sqrt( hitEnd.x()*hitEnd.x() + hitEnd.y()*hitEnd.y() ); // mm
238  unsigned short iendRflag;
239  if ( endR > 1.9999*CLHEP::mm ) {
240  iendRflag=1; // persistify as a 1-bit flag
241  }
242  else {
243  iendRflag=0; // compress to 8 bits with a span of 2 mm
244  persCont->m_endR.push_back( (unsigned char)(endR/(2.0*CLHEP::mm)*256.0) );
245  }
246 
247  //
248  // Persistify string *endPhi* using 8 bits (min=-pi, max=+pi)
249  // The errors are as for startPhi, but are very different after steplength
250  // preservation in PtoT.
251  //
252  const double endPhi = atan2( hitEnd.y(), hitEnd.x() ); // returns range -pi to +pi rad
253  persCont->m_endPhi.push_back( (unsigned char)( (endPhi+M_PI)/(2.0*M_PI)*256.0 ) );
254 
255  //
256  // Persistify hit *meanTime* using 10 bits (min=0.,span=75 ns)
257  // with float overflow for meanTime >= 75ns (the tail of the distribution).
258  // Max. error = 0.037 ns; RMS error = 0.021 ns.
259  // Also the 1-bit *iendRflag* and 1-bit *idZsign* are packed into this variable.
260  //
261  unsigned short idZsign = (hitLength.z()>0.0) ? 1 : 0; // flag the sign of dZ
262  unsigned short imeanTime = ( meanTime < 75.0*CLHEP::ns ) ? (unsigned short)(meanTime/(75.0*CLHEP::ns)*1024.0) : 1023;
263  if ( imeanTime == 1023 ) persCont->m_meanTimeof.push_back( (float)meanTime ); // "overflow flag"
264  imeanTime = (imeanTime << 2) | (idZsign << 1) | iendRflag;
265  persCont->m_meanTime.push_back( imeanTime );
266 
267  //
268  // Persistify hit *hitEne* (the energy deposited by the hit in keV) using a float but only for photons
269  // (relatively very few of these). Digitisation does not use hitEne for charged particles.
270  //
271  if ( lastId == 22 ||
272  (int)(abs(lastId)/100000) == 41 ||
273  (int)(abs(lastId)/10000000) == 1
274  ) persCont->m_hitEne.push_back( (float)(trtHit->GetEnergyDeposit()) ); // keV
275 
276  lastEnd = hitEnd;
277  lastT = meanTime;
278  ++idx;
279  /*
280  // Validation output
281  std::cout.precision(15);
282  std::cout << "AJBTtoPendR " << endR << std::endl;
283  std::cout << "AJBTtoPendPhi " << endPhi << std::endl;
284  std::cout << "AJBTtoPendX " << hitEnd.x() << std::endl;
285  std::cout << "AJBTtoPendY " << hitEnd.y() << std::endl;
286  std::cout << "AJBTtoPendZ " << hitEnd.z() << std::endl;
287  std::cout << "AJBTtoPmeanTime " << meanTime << std::endl;
288  std::cout << "AJBTtoPkinEne " << trtHit->GetKineticEnergy() << std::endl;
289  std::cout << "AJBTtoPhitEne " << trtHit->GetEnergyDeposit() << std::endl;
290  std::cout << "AJBTtoPsteplength " << hitLength.distance() << std::endl;
291  */
292  }
293 
294  persCont->m_nBC.push_back(idx - endBC);
295  persCont->m_nId.push_back(idx - endId);
296  persCont->m_nHits.push_back( idx - endHit );
297 
298 } // transToPers

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

◆ 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 TPConverterWithKeyBase< TRANS, PERS >.

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  }

◆ 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  {
707  assert (index < this->m_pStorage->size());
708  return createTransient( &(*this->m_pStorage)[index], log );
709  }

◆ 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  {
722  assert (index < this->m_pStorage->size());
723  return createTransientWithKey( &(*this->m_pStorage)[index], key, log );
724  }

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

◆ 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_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_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:
TRT_HitCollection_p4::m_startZ
std::vector< unsigned char > m_startZ
Definition: TRT_HitCollection_p4.h:35
ITPConverter::typeID
virtual const TPObjRef::typeID_t & typeID() const =0
Return TP typeID for persistent objects produced by this converter.
TRT_HitCollection_p4::m_endPhi
std::vector< unsigned char > m_endPhi
Definition: TRT_HitCollection_p4.h:44
TopLevelTPCnvBase::converterForType
ITPConverter * converterForType(const std::type_info &info) const
Find and return a TP converter for a given C++ type info.
Definition: TopLevelTPCnvBase.h:80
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_pStorage
std::vector< PERS > * m_pStorage
the address of the storage vector for persistent representations
Definition: TPConverter.h:579
TRT_HitCollection_p4::m_kinEne
std::vector< unsigned short > m_kinEne
Definition: TRT_HitCollection_p4.h:41
StateLessPT_NewConfig.proxy
proxy
Definition: StateLessPT_NewConfig.py:392
TRT_HitCollection_p4::m_nId
std::vector< unsigned short > m_nId
Definition: TRT_HitCollection_p4.h:53
ITPConverterFor::m_topConverter
TopLevelTPCnvBase * m_topConverter
top level converter that owns this elemental TP converter it also holds the storage object
Definition: TPConverter.h:299
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::toPersistentWithKey_impl
TPObjRef toPersistentWithKey_impl(const TRANS *trans, const std::string &key, MsgStream &log)
Convert transient object to persistent representation.
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TRT_HitCollection_p4::m_nBC
std::vector< unsigned short > m_nBC
Definition: TRT_HitCollection_p4.h:57
TPObjRef::typeID_t::value
unsigned value() const
Returns the type ID as an integer.
Definition: TPObjRef.h:46
index
Definition: index.py:1
TPPolyCnvBase< TRANS, TRANS, PERS >::createTransient
virtual TRANS * createTransient(const PERS *persObj, MsgStream &log)
Create transient representation of a persistent object.
xAOD::char
char
Definition: TrigDecision_v1.cxx:38
skel.it
it
Definition: skel.GENtoEVGEN.py:396
TRT_HitCollectionCnv_p4::persToTrans
virtual void persToTrans(const TRT_HitCollection_p4 *persCont, TRTUncompressedHitCollection *transCont, MsgStream &log)
Definition: TRT_HitCollectionCnv_p4.cxx:310
M_PI
#define M_PI
Definition: ActiveFraction.h:11
TRT_HitCollection_p4::m_startR
std::vector< unsigned char > m_startR
Definition: TRT_HitCollection_p4.h:33
TopLevelTPCnvBase::converterForRef
ITPConverter * converterForRef(const TPObjRef &ref) const
Find and return a TP converter for persistent type referenced by ref.
Definition: TopLevelTPCnvBase.h:89
TPPolyCnvBase< TRANS, TRANS, PERS >::createTransientWithKey
virtual TRANS * createTransientWithKey(const PERS *persObj, const std::string &key, MsgStream &log)
Create transient representation of a persistent object, with SG key.
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
AtlasHitsVector::begin
const_iterator begin() const
Definition: AtlasHitsVector.h:131
IProxyDict
A proxy dictionary.
Definition: AthenaKernel/AthenaKernel/IProxyDict.h:47
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_ignoreRecursion
bool m_ignoreRecursion
if true, do not throw errors in case of recursion.
Definition: TPConverter.h:588
ITPConverterFor::topConverter
virtual TopLevelTPCnvBase * topConverter()
return the top-level converter for this elemental TP converter
Definition: TPConverter.h:191
TPObjRef
Definition: TPObjRef.h:20
AtlasHitsVector::const_iterator
CONT::const_iterator const_iterator
Definition: AtlasHitsVector.h:43
TRT_HitCollection_p4::m_strawId2b
std::vector< unsigned short > m_strawId2b
Definition: TRT_HitCollection_p4.h:31
TRT_HitCollection_p4::m_mcEvtIndex
std::vector< unsigned short > m_mcEvtIndex
Definition: TRT_HitCollection_p4.h:55
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::transToPers
virtual void transToPers(const TRANS *transObj, PERS *persObj, MsgStream &log)=0
Convert transient representation to persistent one.
ITPConverterFor::m_wasUsedForReading
bool m_wasUsedForReading
flag set when using this converter for reading triggers search for a new converter before writing,...
Definition: TPConverter.h:306
Atlas::getExtendedEventContext
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
Definition: ExtendedEventContext.cxx:32
AtlasHitsVector::Emplace
void Emplace(Args &&... args)
Definition: AtlasHitsVector.h:81
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TRT_HitCollection_p4::m_strawId1b
std::vector< unsigned char > m_strawId1b
Definition: TRT_HitCollection_p4.h:32
TRT_HitCollection_p4::m_meanTime
std::vector< unsigned short > m_meanTime
Definition: TRT_HitCollection_p4.h:45
TRT_HitCollection_p4::m_nHits
std::vector< unsigned short > m_nHits
Definition: TRT_HitCollection_p4.h:30
TRT_HitCollection_p4::m_hitEne
std::vector< float > m_hitEne
Definition: TRT_HitCollection_p4.h:52
ITPConverterFor::converterForType
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
lumiFormat.i
int i
Definition: lumiFormat.py:85
ITPConverterFor::m_pStorageTID
TPObjRef::typeID_t m_pStorageTID
TP Ref typeID for the persistent objects this converter is creating.
Definition: TPConverter.h:292
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
master.flag
bool flag
Definition: master.py:29
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::persToTransWithKey
virtual void persToTransWithKey(const PERS *persObj, TRANS *transObj, const std::string &, MsgStream &log)
Convert persistent representation to transient one.
Definition: TPConverter.h:376
TRT_HitCollection_p4::m_evtColl
std::vector< char > m_evtColl
Definition: TRT_HitCollection_p4.h:56
TRT_HitCollection_p4::m_steplength
std::vector< unsigned short > m_steplength
Definition: TRT_HitCollection_p4.h:42
ITPConverterFor::m_topConverterRuntime
TopLevelTPCnvBase * m_topConverterRuntime
top level converter "owning" this TP converter at runtime (different from m_topConverter in case the ...
Definition: TPConverter.h:302
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
TRT_HitCollection_p4::m_endR
std::vector< unsigned char > m_endR
Definition: TRT_HitCollection_p4.h:43
ITPConverterFor::converterForRef
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
PERS
RpcSectorLogicContainer_p1 PERS
Definition: RpcSectorLogicContainerCnv.h:13
RpcSectorLogicContainer_p1
Class to represent.
Definition: RpcSectorLogicContainer_p1.h:19
HepMC::BarcodeBased::is_truth_suppressed_pileup
bool is_truth_suppressed_pileup(const T &p)
Method to establish if a particle (or barcode) corresponds to truth-suppressed pile-up.
Definition: MagicNumbers.h:197
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::transToPersWithKey
virtual void transToPersWithKey(const TRANS *transObj, PERS *persObj, const std::string &, MsgStream &log)
Convert transient representation to persistent one.
Definition: TPConverter.h:392
ITPConverterFor::initPrivateConverters
virtual void initPrivateConverters(TopLevelTPCnvBase *)
Definition: TPConverter.h:187
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_recursive
bool m_recursive
if true, work in recursion-safe way (slower)
Definition: TPConverter.h:585
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
DeMoScan.index
string index
Definition: DeMoScan.py:364
TRT_HitCollection_p4::m_barcode
std::vector< unsigned int > m_barcode
Definition: TRT_HitCollection_p4.h:54
ITPConverterFor::m_pStorageTIDvalue
unsigned m_pStorageTIDvalue
m_pStorageTID converted to integer value
Definition: TPConverter.h:295
ref
const boost::regex ref(r_ef)
AtlasHitsVector::end
const_iterator end() const
Definition: AtlasHitsVector.h:134
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::persToTrans
virtual void persToTrans(const PERS *persObj, TRANS *transObj, MsgStream &log)=0
Convert persistent representation to transient one.
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
TRT_HitCollection_p4::m_id
std::vector< int > m_id
Definition: TRT_HitCollection_p4.h:58
ReadCalibFromCool.typeName
typeName
Definition: ReadCalibFromCool.py:477
EBC_PU_SUPPRESSED
@ EBC_PU_SUPPRESSED
Definition: MagicNumbers.h:30
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
ITPConverter
Definition: TPTools/TPTools/ITPConverter.h:32
ITPConverter::converterNotFound
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
Definition: ITPConverter.cxx:22
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
TPObjRef::typeID
unsigned typeID() const
returns the type ID (as integer) of the referenced object
Definition: TPObjRef.h:71
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
python.compressB64.c
def c
Definition: compressB64.py:93
TRT_HitCollection_p4::m_meanTimeof
std::vector< float > m_meanTimeof
Definition: TRT_HitCollection_p4.h:46
TPAbstractPolyCnvBase< TRANS, TRANS, PERS >::m_curRecLevel
int m_curRecLevel
count recursive invocations, to detect recursion
Definition: TPConverter.h:582
TRT_HitCollection_p4::m_startPhi
std::vector< unsigned char > m_startPhi
Definition: TRT_HitCollection_p4.h:34
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37