ATLAS Offline Software
Public Member Functions | Public Attributes | Private Attributes | List of all members
DataHeaderCnv_p6 Class Reference

This class provides the converter to customize the saving of DataHeader_p6. More...

#include <DataHeaderCnv_p6.h>

Collaboration diagram for DataHeaderCnv_p6:

Public Member Functions

 DataHeaderCnv_p6 ()
 
DataHeadercreateTransient (const DataHeader_p6 *persObj, const DataHeaderForm_p6 &form, const Token *dhToken) const
 
DataHeader_p6createPersistent (const DataHeader *transObj, DataHeaderForm_p6 &form) const
 
void elemToPers (const DataHeaderElement *trans, DataHeader_p6 *pers, DataHeaderForm_p6 &form) const
 convert single DH element to persistent represenation More...
 
bool persToElem (const DataHeader_p6 *pers, unsigned p_idx, DataHeaderElement *trans, const DataHeaderForm_p6 &form, bool sameForm) const
 restore single DH element from persistent represenation return false if p_idx is out of bounds for the Form More...
 
void insertDHRef (DataHeader_p6 *pers_dh, const std::string &key, const std::string &dh_tokstr, DataHeaderForm_p6 &dh_form) const
 insert DH self reference as one of the DHElements. Contains the stream Key More...
 
void setSGAliasFiltering (bool doFiltering)
 

Public Attributes

bool m_SGAliasFiltering { true }
 

Private Attributes

Athena::RecyclableDataQueue< DataHeader > m_dhQueue ATLAS_THREAD_SAFE
 

Detailed Description

This class provides the converter to customize the saving of DataHeader_p6.

Definition at line 25 of file DataHeaderCnv_p6.h.

Constructor & Destructor Documentation

◆ DataHeaderCnv_p6()

DataHeaderCnv_p6::DataHeaderCnv_p6 ( )
inline

Definition at line 27 of file DataHeaderCnv_p6.h.

27 {}

Member Function Documentation

◆ createPersistent()

DataHeader_p6 * DataHeaderCnv_p6::createPersistent ( const DataHeader transObj,
DataHeaderForm_p6 form 
) const

Definition at line 164 of file DataHeaderCnv_p6.cxx.

165 {
166  DataHeader_p6* pers = new DataHeader_p6();
167  const unsigned int provSize = trans->m_inputDataHeader.size();
168  pers->m_provenanceSize = provSize;
169 
170  pers->m_shortElements.reserve( provSize + trans->m_dataHeader.size() );
171  form.resize(provSize + trans->m_dataHeader.size() + 1);
172  for( const auto& transElem: trans->m_dataHeader ) {
173  elemToPers( &transElem, pers, form );
174  }
175  for( const auto& transElem: trans->m_inputDataHeader ) {
176  elemToPers( &transElem, pers, form );
177  }
178  return pers;
179 }

◆ createTransient()

DataHeader * DataHeaderCnv_p6::createTransient ( const DataHeader_p6 persObj,
const DataHeaderForm_p6 form,
const Token dhToken 
) const

Definition at line 74 of file DataHeaderCnv_p6.cxx.

77 {
78  DataHeader* trans = m_dhQueue.get();
79  const unsigned int provSize = pers->m_provenanceSize;
80  // DataHeaders with a self Reference at the end have the list longer by 1 element
81  int selfRefSizeCorrection = (form.version() == DataHeaderForm_p6::DHverFormRef? 1 : 0);
82  size_t nelts = pers->m_shortElements.size() - provSize;
83  bool sameForm = false;
84  if (!pers->dhFormToken().empty() &&
85  pers->dhFormToken() == trans->dhFormToken() &&
86  trans->m_inputDataHeader.size() == provSize &&
87  trans->m_dataHeader.size() == nelts)
88  {
89  sameForm = true;
90  }
91  else {
92  trans->setDhFormToken (pers->dhFormToken());
93  trans->m_inputDataHeader.resize(provSize);
94  trans->m_dataHeader.resize( nelts );
95  }
96 
97  // convert all elements - transient vectors need to have the right sizes
98  unsigned i = 0;
99  for( auto& elem : trans->m_dataHeader ) {
100  persToElem( pers, i++, &elem, form, sameForm );
101  // Last entry is the self-reference, which is handled below.
102  if (i == nelts - selfRefSizeCorrection) break;
103  }
104  for( auto& elem : trans->m_inputDataHeader ) {
105  persToElem( pers, i++, &elem, form, sameForm );
106  }
107  // Add the self reference
108  if (selfRefSizeCorrection > 0) {
109  auto& elem = trans->m_dataHeader.back();
110  // convert the self ref that was stored at the end of the element list
111  persToElem( pers, i++, &elem, form, sameForm );
112 
113  if( elem.getToken()->contID().find("DataHeader") == std::string::npos ) {
114  // discard wrong element
115  trans->m_dataHeader.pop_back();
116  }
117  }
119  trans->setEvtRefTokenStr( dhToken->toString() );
120  return trans;
121 }

◆ elemToPers()

void DataHeaderCnv_p6::elemToPers ( const DataHeaderElement trans,
DataHeader_p6 pers,
DataHeaderForm_p6 form 
) const

convert single DH element to persistent represenation

Definition at line 125 of file DataHeaderCnv_p6.cxx.

128 {
129  // Translate PoolToken
130  const Token *token = trans->getToken();
131  if( !token ) {
132  // store marker for NO Token
133  pers->m_shortElements.push_back( INT32_MIN );
134  } else {
135  // Database GUID & Technology
136  DataHeaderForm_p6::DbRecord db_rec( token->dbID(), token->technology() );
137  unsigned db_idx = form.insertDb( db_rec );
138  // StoreGate Type/Key & persistent Class GUID
139  DataHeaderForm_p6::ObjRecord transObj( token->classID(), token->contID(), trans->m_key,
140  trans->m_pClid, token->oid().first );
141  unsigned obj_idx = form.insertObj(transObj, trans->m_alias, m_SGAliasFiltering,
142  trans->m_clids, trans->m_hashes);
143  unsigned long long oid2 = token->oid().second;
144 
145  // first element sets the common DB
146  if( pers->m_shortElements.empty() ) {
147  // first element - set the common DB and OID2 values
148  pers->m_commonDbIndex = db_idx;
149  pers->m_commonOID2 = oid2;
150  }
151  if( db_idx == pers->m_commonDbIndex && oid2 == pers->m_commonOID2 ) {
152  // Can use short DH element
153  pers->m_shortElements.push_back( obj_idx );
154  } else {
155  // need to use full DH element
156  // store the index (as negative) to the full element in the short vector
157  pers->m_shortElements.push_back( -1 - pers->m_fullElements.size() );
158  pers->m_fullElements.push_back( FullElement(oid2, db_idx, obj_idx) );
159  }
160  }
161 }

◆ insertDHRef()

void DataHeaderCnv_p6::insertDHRef ( DataHeader_p6 pers_dh,
const std::string &  key,
const std::string &  dh_tokstr,
DataHeaderForm_p6 dh_form 
) const

insert DH self reference as one of the DHElements. Contains the stream Key

Definition at line 182 of file DataHeaderCnv_p6.cxx.

185 {
186  Token token;
187  token.fromString( tokstr );
188  DataHeaderElement tEle(ClassID_traits<DataHeader>::ID(), key, std::move(token));
189  elemToPers( &tEle, pers, form );
190 }

◆ persToElem()

bool DataHeaderCnv_p6::persToElem ( const DataHeader_p6 pers,
unsigned  p_idx,
DataHeaderElement trans,
const DataHeaderForm_p6 form,
bool  sameForm 
) const

restore single DH element from persistent represenation return false if p_idx is out of bounds for the Form

Definition at line 21 of file DataHeaderCnv_p6.cxx.

24 {
25  int obj_idx = pers->m_shortElements[p_idx];
26  if( obj_idx == INT32_MIN ) return true;
27 
28  Token& token = trans->m_token;
29  unsigned db_idx = 0;
30  unsigned long long oid2 = 0;
31  if( obj_idx >= 0 ) {
32  db_idx = pers->m_commonDbIndex;
33  oid2 = pers->m_commonOID2;
34  } else {
35  const FullElement &full_el = pers->m_fullElements[ -1 - obj_idx ];
36  db_idx = full_el.dbIdx;
37  obj_idx = full_el.objIdx;
38  oid2 = full_el.oid2;
39  }
40 
41  if( form.sizeDb() > db_idx ) {
42  // Append DbGuid
43  token.setDb( form.getDbGuid( db_idx ) );
44  token.setTechnology( form.getDbTech( db_idx ) );
45  }
46  if( form.sizeObj() > (size_t)obj_idx ) {
47  token.setOid( Token::OID_t( form.getObjOid1(obj_idx), oid2) );
48 
49  if (!sameForm) {
50  // If the form hasn't changed, these should all be the same ---
51  // so don't need to copy them again.
52  token.setCont( form.getObjContainer( obj_idx ) );
53  // Append ClassId
54  token.setClassID( form.getObjClassId(obj_idx) );
55  // StoreGate
56  trans->m_key = form.getObjKey( obj_idx );
57  trans->m_alias = form.getObjAlias( obj_idx );
58  trans->m_pClid = form.getObjType( obj_idx );
59  trans->m_clids = form.getObjSymLinks( obj_idx );
60  trans->m_hashes = form.getObjHashes( obj_idx );
61 
62  if (!std::ranges::is_sorted (trans->m_alias)) {
63  // Should really be sorted, but just in case...
64  std::ranges::sort (trans->m_alias);
65  auto ret = std::ranges::unique (trans->m_alias);
66  trans->m_alias.erase (ret.begin(), ret.end());
67  }
68  }
69  }
70  return form.sizeDb() > db_idx and form.sizeObj() > (size_t)obj_idx;
71 }

◆ setSGAliasFiltering()

void DataHeaderCnv_p6::setSGAliasFiltering ( bool  doFiltering)
inline

Definition at line 45 of file DataHeaderCnv_p6.h.

45 { m_SGAliasFiltering = doFiltering; }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

Athena::RecyclableDataQueue<DataHeader> m_dhQueue DataHeaderCnv_p6::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 50 of file DataHeaderCnv_p6.h.

◆ m_SGAliasFiltering

bool DataHeaderCnv_p6::m_SGAliasFiltering { true }

Definition at line 47 of file DataHeaderCnv_p6.h.


The documentation for this class was generated from the following files:
DataHeaderElement::m_key
std::string m_key
string with StoreGate key.
Definition: DataHeader.h:109
DataHeaderElement::m_alias
std::vector< std::string > m_alias
vector of StoreGate alias string.
Definition: DataHeader.h:111
Token::contID
const std::string & contID() const
Access container identifier.
Definition: Token.h:69
DataHeaderElement::m_token
Token m_token
Transient address token.
Definition: DataHeader.h:113
DataHeaderCnv_p6::m_SGAliasFiltering
bool m_SGAliasFiltering
Definition: DataHeaderCnv_p6.h:47
DataHeader::Input
@ Input
Definition: DataHeader.h:125
DataHeader_p6::FullElement
Definition: DataHeader_p6.h:115
DataHeaderForm_p6::getObjKey
const std::string & getObjKey(unsigned int index) const
Definition: DataHeader_p6.cxx:83
DataHeaderElement::m_pClid
CLID m_pClid
primary ClassID.
Definition: DataHeader.h:105
DataHeaderForm_p6::DbRecord
Definition: DataHeader_p6.h:32
Token::dbID
const Guid & dbID() const
Access database identifier.
Definition: Token.h:64
python.getProblemFolderFromLogs.elem
elem
Definition: getProblemFolderFromLogs.py:90
DataHeaderForm_p6::version
unsigned version() const
Definition: DataHeader_p6.h:81
DataHeaderForm_p6::insertObj
unsigned int insertObj(const ObjRecord &rec, const std::vector< std::string > &alias=std::vector< std::string >(), bool doAliasFiletering=true, const std::vector< unsigned int > &symLinks=std::vector< unsigned int >(), const std::vector< sgkey_t > &hashes=std::vector< sgkey_t >())
Definition: DataHeader_p6.cxx:40
Token::classID
const Guid & classID() const
Access database identifier.
Definition: Token.h:73
DataHeader_p6::m_provenanceSize
unsigned int m_provenanceSize
Definition: DataHeader_p6.h:134
DataHeader_p6::m_commonOID2
unsigned long long m_commonOID2
Definition: DataHeader_p6.h:130
DataHeaderCnv_p6::elemToPers
void elemToPers(const DataHeaderElement *trans, DataHeader_p6 *pers, DataHeaderForm_p6 &form) const
convert single DH element to persistent represenation
Definition: DataHeaderCnv_p6.cxx:125
DataHeader_p6::m_shortElements
std::vector< int > m_shortElements
Definition: DataHeader_p6.h:132
DataHeaderForm_p6::getObjOid1
long long getObjOid1(unsigned int index) const
Definition: DataHeader_p6.h:70
DataHeader_p6::m_fullElements
std::vector< FullElement > m_fullElements
Definition: DataHeader_p6.h:133
Token
This class provides a token that identifies in a unique way objects on the persistent storage.
Definition: Token.h:21
DataHeader_p6::FullElement::dbIdx
unsigned int dbIdx
Definition: DataHeader_p6.h:119
DataHeaderForm_p6::DHverFormRef
@ DHverFormRef
Definition: DataHeader_p6.h:49
Token::OID_t
Definition: Token.h:24
Token::setClassID
Token & setClassID(const Guid &cl_id)
Access database identifier.
Definition: Token.h:75
DataHeaderForm_p6::getObjSymLinks
const std::vector< unsigned int > & getObjSymLinks(unsigned int index) const
Definition: DataHeader_p6.cxx:100
DataHeaderForm_p6::getObjType
unsigned int getObjType(unsigned int index) const
Definition: DataHeader_p6.cxx:87
DataHeaderElement
This class provides a persistent form for the TransientAddress.
Definition: DataHeader.h:37
Token::technology
int technology() const
Access technology type.
Definition: Token.h:77
DataHeaderForm_p6::getObjHashes
const std::vector< sgkey_t > & getObjHashes(unsigned int index) const
Definition: DataHeader_p6.cxx:105
DataHeader
This class provides the layout for summary information stored for data written to POOL.
Definition: DataHeader.h:123
lumiFormat.i
int i
Definition: lumiFormat.py:85
DataHeader::size
int size() const
Definition: DataHeader.cxx:245
DataHeaderForm_p6::getDbGuid
Guid getDbGuid(unsigned int index) const
Definition: DataHeader_p6.cxx:32
FullElement
DataHeader_p6::FullElement FullElement
Definition: DataHeaderCnv_p6.cxx:16
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:37
Token::setDb
Token & setDb(const Guid &db)
Set database name.
Definition: Token.h:66
Token::setTechnology
Token & setTechnology(int t)
Set technology type.
Definition: Token.h:79
DataHeader_p6
This class provides a persistent representation for the DataHeader class.
Definition: DataHeader_p6.h:111
DataHeaderCnv_p6::persToElem
bool persToElem(const DataHeader_p6 *pers, unsigned p_idx, DataHeaderElement *trans, const DataHeaderForm_p6 &form, bool sameForm) const
restore single DH element from persistent represenation return false if p_idx is out of bounds for th...
Definition: DataHeaderCnv_p6.cxx:21
DataHeader_p6::FullElement::objIdx
unsigned int objIdx
Definition: DataHeader_p6.h:120
DataHeaderForm_p6::getObjAlias
const std::vector< std::string > & getObjAlias(unsigned int index) const
Definition: DataHeader_p6.cxx:95
DataHeaderForm_p6::sizeDb
std::size_t sizeDb() const
Definition: DataHeader_p6.cxx:28
DataHeader::setStatus
void setStatus(statusFlag status)
Set StatusFlag enum for DataHeader.
Definition: DataHeader.cxx:229
Token::toString
virtual const std::string toString() const
Retrieve the string representation of the token.
Definition: Token.cxx:134
DataHeaderForm_p6::sizeObj
std::size_t sizeObj() const
Definition: DataHeader_p6.cxx:75
DataHeader::m_dataHeader
std::vector< DataHeaderElement > m_dataHeader
vector with DataHeaderElement to "DataObject".
Definition: DataHeader.h:209
Token::setOid
Token & setOid(const OID_t &oid)
Set object identifier.
Definition: Token.h:85
DataHeader::setDhFormToken
void setDhFormToken(const std::string &formToken)
Definition: DataHeader.cxx:307
DataHeaderElement::m_hashes
std::vector< sgkey_t > m_hashes
hash table for ElementLink host container keys.
Definition: DataHeader.h:115
DataHeaderForm_p6::getObjClassId
const Guid & getObjClassId(unsigned int index) const
Definition: DataHeader_p6.cxx:91
DataHeaderElement::m_clids
std::vector< CLID > m_clids
vector of unsigned long to store ClassID's for symlinked container.
Definition: DataHeader.h:107
Token::fromString
Token & fromString(const std::string_view from)
Build from the string representation of a token.
Definition: Token.cxx:147
DataHeaderForm_p6::resize
void resize(unsigned int size)
Definition: DataHeader_p6.cxx:126
DataHeader_p6::FullElement::oid2
unsigned long long oid2
Definition: DataHeader_p6.h:118
Token::oid
const OID_t & oid() const
Access object identifier.
Definition: Token.h:81
DataHeader_p6::m_commonDbIndex
unsigned m_commonDbIndex
common DB entry index used by all short DH elements
Definition: DataHeader_p6.h:129
DataHeader::setEvtRefTokenStr
void setEvtRefTokenStr(const std::string &tokenStr)
Definition: DataHeader.cxx:320
Token::setCont
Token & setCont(const std::string &cnt)
Set container name.
Definition: Token.h:71
DataHeaderForm_p6::getDbTech
unsigned int getDbTech(unsigned int index) const
Definition: DataHeader_p6.cxx:36
DataHeaderForm_p6::insertDb
unsigned int insertDb(const DbRecord &rec)
Definition: DataHeader_p6.cxx:15
DataHeaderElement::getToken
const Token * getToken() const
Definition: DataHeader.cxx:125
DataHeader::m_inputDataHeader
std::vector< DataHeaderElement > m_inputDataHeader
vector with DataHeaderElement to upstream DataHeader ("Provenance").
Definition: DataHeader.h:211
DataHeaderForm_p6::ObjRecord
Definition: DataHeader_p6.h:38
DataHeader::dhFormToken
const std::string & dhFormToken() const
Form token, to be able to tell when the form changes.
Definition: DataHeader.cxx:302
DataHeaderForm_p6::getObjContainer
const std::string & getObjContainer(unsigned int index) const
Definition: DataHeader_p6.cxx:79
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37