ATLAS Offline Software
DataHeaderCnv_p6.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 #include <climits>
14 
16 
17 //______________________________________________________________________________
18 bool DataHeaderCnv_p6::persToElem( const DataHeader_p6* pers, unsigned p_idx,
19  DataHeaderElement* trans, const DataHeaderForm_p6& form )
20 {
21  delete trans->m_token; trans->m_token = nullptr;
22  int obj_idx = pers->m_shortElements[p_idx];
23  if( obj_idx == INT32_MIN ) return true;
24 
25  Token* token = new Token;
26  trans->m_token = token;
27  trans->m_ownToken = true;
28  unsigned db_idx = 0;
29  unsigned long long oid2 = 0;
30  if( obj_idx >= 0 ) {
31  db_idx = pers->m_commonDbIndex;
32  oid2 = pers->m_commonOID2;
33  } else {
34  const FullElement &full_el = pers->m_fullElements[ -1 - obj_idx ];
35  db_idx = full_el.dbIdx;
36  obj_idx = full_el.objIdx;
37  oid2 = full_el.oid2;
38  }
39 
40  if( form.sizeDb() > db_idx ) {
41  // Append DbGuid
42  token->setDb( form.getDbGuid( db_idx ) );
43  token->setTechnology( form.getDbTech( db_idx ) );
44  }
45  if( form.sizeObj() > (size_t)obj_idx ) {
46  token->setCont( form.getObjContainer( obj_idx ) );
47  // Append ClassId
48  token->setClassID( form.getObjClassId(obj_idx) );
49  token->setOid( Token::OID_t( form.getObjOid1(obj_idx), oid2) );
50  // StoreGate
51  trans->m_key = form.getObjKey( obj_idx );
52  trans->m_alias = form.getObjAlias( obj_idx );
53  trans->m_pClid = form.getObjType( obj_idx );
54  trans->m_clids = form.getObjSymLinks( obj_idx );
55  trans->m_hashes = form.getObjHashes( obj_idx );
56  }
57  return form.sizeDb() > db_idx and form.sizeObj() > (size_t)obj_idx;
58 }
59 
60 //______________________________________________________________________________
62 {
63  DataHeader* trans = new DataHeader();
64  const unsigned int provSize = pers->m_provenanceSize;
65  trans->m_inputDataHeader.resize(provSize);
66  trans->m_dataHeader.resize(pers->m_shortElements.size() - provSize - 1); // Take into account self reference
67  unsigned i = 0;
68  for( auto& elem : trans->m_dataHeader ) {
69  persToElem( pers, i++, &elem, form );
70  }
71  for( auto& elem : trans->m_inputDataHeader ) {
72  persToElem( pers, i++, &elem, form );
73  }
74  trans->m_dataHeader.resize(pers->m_shortElements.size() - provSize); // Add self reference, which was appended to end
75  auto& elem = trans->m_dataHeader.back();
76  persToElem( pers, i++, &elem, form );
77  if( elem.getToken()->contID().find("DataHeader") == std::string::npos ) {
78  // discard wrong element
79  trans->m_dataHeader.pop_back();
80  }
82  return trans;
83 }
84 
85 
86 //______________________________________________________________________________
88  DataHeader_p6* pers,
89  DataHeaderForm_p6& form)
90 {
91  // Translate PoolToken
92  const Token *token = trans->getToken();
93  if( !token ) {
94  // store marker for NO Token
95  pers->m_shortElements.push_back( INT32_MIN );
96  } else {
97  // Database GUID & Technology
98  DataHeaderForm_p6::DbRecord db_rec( token->dbID(), token->technology() );
99  unsigned db_idx = form.insertDb( db_rec );
100  // StoreGate Type/Key & persistent Class GUID
101  DataHeaderForm_p6::ObjRecord transObj( token->classID(), token->contID(), trans->m_key,
102  trans->m_pClid, token->oid().first );
103  unsigned obj_idx = form.insertObj(transObj, trans->m_alias, m_SGAliasFiltering,
104  trans->m_clids, trans->m_hashes);
105  unsigned long long oid2 = token->oid().second;
106 
107  // first element sets the common DB
108  if( pers->m_shortElements.empty() ) {
109  // first element - set the common DB and OID2 values
110  pers->m_commonDbIndex = db_idx;
111  pers->m_commonOID2 = oid2;
112  }
113  if( db_idx == pers->m_commonDbIndex && oid2 == pers->m_commonOID2 ) {
114  // Can use short DH element
115  pers->m_shortElements.push_back( obj_idx );
116  } else {
117  // need to use full DH element
118  // store the index (as negative) to the full element in the short vector
119  pers->m_shortElements.push_back( -1 - pers->m_fullElements.size() );
120  pers->m_fullElements.push_back( FullElement(oid2, db_idx, obj_idx) );
121  }
122  }
123 }
124 
125 //______________________________________________________________________________
127 {
128  DataHeader_p6* pers = new DataHeader_p6();
129  const unsigned int provSize = trans->m_inputDataHeader.size();
130  pers->m_provenanceSize = provSize;
131 
132  pers->m_shortElements.reserve( provSize + trans->m_dataHeader.size() );
133  form.resize(provSize + trans->m_dataHeader.size() + 1);
134  for( const auto& transElem: trans->m_dataHeader ) {
135  elemToPers( &transElem, pers, form );
136  }
137  for( const auto& transElem: trans->m_inputDataHeader ) {
138  elemToPers( &transElem, pers, form );
139  }
140  return pers;
141 }
142 
143 //______________________________________________________________________________
145  const std::string& key, const std::string& tokstr,
146  DataHeaderForm_p6& form )
147 {
148  Token* token = new Token();
149  token->fromString( tokstr );
151  elemToPers( &tEle, pers, form );
152 }
DataHeaderForm_p6
This class provides storage for the constant fields of the persistent DataHeader class.
Definition: DataHeader_p6.h:27
DataHeaderElement::m_key
std::string m_key
string with StoreGate key.
Definition: DataHeader.h:111
DataHeaderCnv_p6::elemToPers
void elemToPers(const DataHeaderElement *trans, DataHeader_p6 *pers, DataHeaderForm_p6 &form)
convert single DH element to persistent represenation
Definition: DataHeaderCnv_p6.cxx:87
Token::contID
const std::string & contID() const
Access container identifier.
Definition: Token.h:67
DataHeaderCnv_p6::m_SGAliasFiltering
bool m_SGAliasFiltering
Definition: DataHeaderCnv_p6.h:43
DataHeaderCnv_p6::persToElem
bool persToElem(const DataHeader_p6 *pers, unsigned p_idx, DataHeaderElement *trans, const DataHeaderForm_p6 &form)
restore single DH element from persistent represenation return false if p_idx is out of bounds for th...
Definition: DataHeaderCnv_p6.cxx:18
DataHeader::Input
@ Input
Definition: DataHeader.h:126
DataHeaderElement::m_clids
std::set< CLID > m_clids
set of unsigned long to store ClassID's for symlinked container.
Definition: DataHeader.h:109
DataHeader_p6::FullElement
Definition: DataHeader_p6.h:109
DataHeaderElement::m_pClid
CLID m_pClid
primary ClassID.
Definition: DataHeader.h:107
DataHeaderForm_p6::DbRecord
Definition: DataHeader_p6.h:33
Token::dbID
const Guid & dbID() const
Access database identifier.
Definition: Token.h:62
DataHeaderCnv_p6::createPersistent
DataHeader_p6 * createPersistent(const DataHeader *transObj, DataHeaderForm_p6 &form)
Definition: DataHeaderCnv_p6.cxx:126
Token::classID
const Guid & classID() const
Access database identifier.
Definition: Token.h:71
DataHeader_p6::m_provenanceSize
unsigned int m_provenanceSize
Definition: DataHeader_p6.h:128
DataHeaderElement::m_ownToken
bool m_ownToken
Definition: DataHeader.h:116
DataHeader_p6::m_commonOID2
unsigned long long m_commonOID2
Definition: DataHeader_p6.h:124
DataHeaderCnv_p6::insertDHRef
void insertDHRef(DataHeader_p6 *pers_dh, const std::string &key, const std::string &dh_tokstr, DataHeaderForm_p6 &dh_form)
insert DH self reference as one of the DHElements. Contains the stream Key
Definition: DataHeaderCnv_p6.cxx:144
DataHeader_p6::m_shortElements
std::vector< int > m_shortElements
Definition: DataHeader_p6.h:126
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:127
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:113
Token::OID_t
Definition: Token.h:24
Token::fromString
Token & fromString(const std::string &from)
Build from the string representation of a token.
Definition: Token.cxx:133
Token::setClassID
Token & setClassID(const Guid &cl_id)
Access database identifier.
Definition: Token.h:73
DataHeaderForm_p6::getObjType
unsigned int getObjType(unsigned int index) const
Definition: DataHeader_p6.cxx:114
DataHeaderElement
This class provides a persistent form for the TransientAddress.
Definition: DataHeader.h:36
DataHeaderForm_p6::getObjContainer
std::string getObjContainer(unsigned int index) const
Definition: DataHeader_p6.cxx:106
Token::technology
int technology() const
Access technology type.
Definition: Token.h:75
DataHeaderElement::m_alias
std::set< std::string > m_alias
set of StoreGate alias string.
Definition: DataHeader.h:113
DataHeader
This class provides the layout for summary information stored for data written to POOL.
Definition: DataHeader.h:124
lumiFormat.i
int i
Definition: lumiFormat.py:92
DataHeaderForm_p6::getObjClassId
Guid getObjClassId(unsigned int index) const
Definition: DataHeader_p6.cxx:118
DataHeaderCnv_p6::createTransient
DataHeader * createTransient(const DataHeader_p6 *persObj, const DataHeaderForm_p6 &form)
Definition: DataHeaderCnv_p6.cxx:61
DataHeaderForm_p6::getDbGuid
Guid getDbGuid(unsigned int index) const
Definition: DataHeader_p6.cxx:57
FullElement
DataHeader_p6::FullElement FullElement
Definition: DataHeaderCnv_p6.cxx:15
DataHeaderCnv_p6.h
This file contains the class definition for DataHeaderCnv_p6.
DataHeader_p6.h
This file contains the class definitions for the DataHeader_p6 and DataHeaderForm_p6.
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
Token::setDb
Token & setDb(const Guid &db)
Set database name.
Definition: Token.h:64
Token::setTechnology
Token & setTechnology(int t)
Set technology type.
Definition: Token.h:77
DataHeader.h
This file contains the class definition for the DataHeader and DataHeaderElement classes.
DataHeader_p6
This class provides a persistent representation for the DataHeader class.
Definition: DataHeader_p6.h:105
DataHeaderForm_p6::insertObj
unsigned int insertObj(const ObjRecord &rec, const std::set< std::string > &alias=std::set< std::string >(), bool doAliasFiletering=true, const std::set< unsigned int > &symLinks=std::set< unsigned int >(), const std::vector< sgkey_t > &hashes=std::vector< sgkey_t >())
Definition: DataHeader_p6.cxx:65
DataHeader_p6::FullElement::objIdx
unsigned int objIdx
Definition: DataHeader_p6.h:114
DataHeaderForm_p6::getObjSymLinks
std::set< unsigned int > getObjSymLinks(unsigned int index) const
Definition: DataHeader_p6.cxx:126
DataHeaderForm_p6::sizeDb
std::size_t sizeDb() const
Definition: DataHeader_p6.cxx:53
DataHeader::setStatus
void setStatus(statusFlag status)
Set StatusFlag enum for DataHeader.
Definition: DataHeader.cxx:235
DataHeaderForm_p6::getObjHashes
std::vector< sgkey_t > getObjHashes(unsigned int index) const
Definition: DataHeader_p6.cxx:131
DataHeaderForm_p6::sizeObj
std::size_t sizeObj() const
Definition: DataHeader_p6.cxx:102
DataHeader::m_dataHeader
std::vector< DataHeaderElement > m_dataHeader
vector with DataHeaderElement to "DataObject".
Definition: DataHeader.h:201
Token::setOid
Token & setOid(const OID_t &oid)
Set object identifier.
Definition: Token.h:83
DataHeaderElement::m_hashes
std::vector< sgkey_t > m_hashes
hash table for ElementLink host container keys.
Definition: DataHeader.h:118
DataHeaderForm_p6::resize
void resize(unsigned int size)
Definition: DataHeader_p6.cxx:153
DataHeaderForm_p6::getObjKey
std::string getObjKey(unsigned int index) const
Definition: DataHeader_p6.cxx:110
DataHeader_p6::FullElement::oid2
unsigned long long oid2
Definition: DataHeader_p6.h:112
Token::oid
const OID_t & oid() const
Access object identifier.
Definition: Token.h:79
DataHeader_p6::m_commonDbIndex
unsigned m_commonDbIndex
common DB entry index used by all short DH elements
Definition: DataHeader_p6.h:123
Token::setCont
Token & setCont(const std::string &cnt)
Set container name.
Definition: Token.h:69
DataHeaderElement::m_token
const Token * m_token
pointer to transient address
Definition: DataHeader.h:115
DataHeaderForm_p6::getDbTech
unsigned int getDbTech(unsigned int index) const
Definition: DataHeader_p6.cxx:61
DataHeaderForm_p6::insertDb
unsigned int insertDb(const DbRecord &rec)
Definition: DataHeader_p6.cxx:40
DataHeaderElement::getToken
const Token * getToken() const
Definition: DataHeader.cxx:135
DataHeaderForm_p6::getObjAlias
std::set< std::string > getObjAlias(unsigned int index) const
Definition: DataHeader_p6.cxx:122
DataHeader::m_inputDataHeader
std::vector< DataHeaderElement > m_inputDataHeader
vector with DataHeaderElement to upstream DataHeader ("Provenance").
Definition: DataHeader.h:203
DataHeaderForm_p6::ObjRecord
Definition: DataHeader_p6.h:39
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37