Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
DataHeader.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
12 
14 #include "SGTools/DataProxy.h"
16 
17 //______________________________________________________________________________
18 DataHeaderElement::DataHeaderElement() : m_pClid(0), m_clids(), m_key(), m_alias(), m_hashes() {
19 }
20 //______________________________________________________________________________
21 DataHeaderElement::DataHeaderElement(const DataHeaderElement& rhs) : m_pClid(rhs.m_pClid),
22  m_clids(rhs.m_clids),
23  m_key(rhs.m_key),
24  m_alias(rhs.m_alias),
25  m_token(rhs.getToken()),
26  m_hashes(rhs.m_hashes) {
27 }
28 //______________________________________________________________________________
29 DataHeaderElement::DataHeaderElement(const SG::TransientAddress* sgAddress, IOpaqueAddress* tokAddress,
30  const std::string& pTag)
31  : DataHeaderElement (sgAddress->clID(),
32  sgAddress->name(),
33  sgAddress->transientID(),
34  SG::DataProxy::AliasCont_t (sgAddress->alias()),
35  sgAddress->address(),
36  tokAddress, pTag)
37 {
38 }
39 //______________________________________________________________________________
40 DataHeaderElement::DataHeaderElement(const SG::DataProxy* proxy, IOpaqueAddress* tokAddress,
41  const std::string& pTag)
42  : DataHeaderElement (proxy->clID(),
43  proxy->name(),
44  proxy->transientID(),
45  proxy->alias(),
46  proxy->address(),
47  tokAddress, pTag)
48 {
49 }
50 //______________________________________________________________________________
52  const std::string& name,
53  const std::vector<CLID>& tClids,
54  std::set<std::string>&& alias,
55  IOpaqueAddress* tadAddress,
56  IOpaqueAddress* tokAddress,
57  const std::string& pTag)
58  : m_pClid(clid),
59  m_clids(tClids),
60  m_key((pTag.empty()) ? name : pTag),
61  m_alias(std::move(alias)),
62  m_hashes()
63 {
64  std::ranges::sort (m_clids);
65  const auto ret = std::ranges::unique (m_clids);
66  m_clids.erase (ret.begin(), ret.end());
67  std::erase (m_clids, m_pClid);
68  TokenAddress* tokAddr = dynamic_cast<TokenAddress*>(tokAddress);
69  if (tokAddr != 0 && tokAddr->getToken() != 0) {
70  tokAddr->getToken()->setData (&m_token);
71  } else {
72  tokAddr = dynamic_cast<TokenAddress*>(tadAddress);
73  if (tokAddr != 0 && tokAddr->getToken() != 0) {
74  tokAddr->getToken()->setData (&m_token);
75  } else if (tokAddress != 0) {
76  m_token.fromString(*(tokAddress->par()));
77  } else if (tadAddress != 0) {
78  m_token.fromString(*(tadAddress->par()));
79  }
80  }
81 }
82 //______________________________________________________________________________
84  const std::string& key, Token&& token)
85  : m_pClid(classID), m_clids(), m_key(key), m_alias(), m_token(std::move(token)), m_hashes() {
86 }
87 //______________________________________________________________________________
89 }
90 //______________________________________________________________________________
92  if (this != &rhs) {
93  m_pClid = rhs.m_pClid;
94  m_clids = rhs.m_clids;
95  m_key = rhs.m_key;
96  m_alias = rhs.m_alias;
97  rhs.getToken()->setData(&m_token);
98  m_hashes = rhs.m_hashes;
99  }
100  return(*this);
101 }
102 //______________________________________________________________________________
104  if (m_pClid > 0) {
105  return(m_pClid);
106  }
107  return(m_clids.front());
108 }
109 //______________________________________________________________________________
110 const std::set<CLID> DataHeaderElement::getClassIDs() const {
111  std::set<CLID> allClids (m_clids.begin(), m_clids.end());
112  allClids.insert(m_pClid);
113  return(allClids);
114 }
115 //______________________________________________________________________________
116 const std::string& DataHeaderElement::getKey() const {
117  return(m_key);
118 }
119 //______________________________________________________________________________
120 const std::set<std::string>& DataHeaderElement::getAlias() const {
121  return(m_alias);
122 }
123 //_____________________________________________________________________________
125  return(&m_token);
126 }
127 //_____________________________________________________________________________
129  return(POOL_StorageType);
130 }
131 //_____________________________________________________________________________
132 const std::vector<DataHeaderElement::sgkey_t>&
134  return(m_hashes);
135 }
136 //______________________________________________________________________________
138  if (!m_hashes.empty()) {
139  return;
140  }
141  std::set<CLID> clids = getClassIDs();
142  for (std::set<CLID>::iterator iter = clids.begin(), last = clids.end(); iter != last; ++iter) {
143  m_hashes.push_back(pool->stringToKey(m_key, *iter));
144  }
145 }
146 //______________________________________________________________________________
147 SG::TransientAddress* DataHeaderElement::getAddress(unsigned long contextId) const {
148  return(getAddress(m_key, contextId));
149 }
150 //______________________________________________________________________________
152  unsigned long contextId) const {
153  CLID primaryClID = getPrimaryClassID();
154  TokenAddress* tokAdd = new TokenAddress(this->getStorageType(), primaryClID, "", m_key, contextId , &m_token);
155  SG::TransientAddress* sgAddress = new SG::TransientAddress(primaryClID, key, tokAdd, m_clids);
156  sgAddress->setAlias(m_alias);
157  return(sgAddress);
158 }
159 //______________________________________________________________________________
160 void DataHeaderElement::dump(std::ostream& ostr) const
161 {
162  using namespace std;
163  ostr << "SGKey: " << getKey() << endl;
164  ostr << "CLID: " << getPrimaryClassID();
165  if( getClassIDs().size() > 1 ) {
166  ostr << " ||";
167  for( auto& c : getClassIDs() ) ostr << " " << c;
168  }
169  ostr << std::endl;
170  if( getAlias().size() > 0 ) {
171  ostr << "Alias: ";
172  for( auto& a : getAlias() ) ostr << " " << a;
173  ostr << endl;
174  }
175  ostr << "Token: " << m_token.toString() << endl;
176  if( m_hashes.size() ) {
177  ostr << "Hashes:";
178  for( auto h : m_hashes ) ostr << " " << h;
179  ostr << endl;
180  }
181 }
182 
183 //______________________________________________________________________________
184 //______________________________________________________________________________
185 DataHeader::DataHeader() : m_dataHeader(),
186  m_inputDataHeader(),
187  m_status(statusFlag(Other)),
188  m_processTag(),
189  m_attrList(0),
190  m_evtRefTokenStr() {
191 }
192 //______________________________________________________________________________
194  DataObject (rhs),
195  m_dataHeader(rhs.m_dataHeader),
196  m_inputDataHeader(rhs.m_inputDataHeader),
197  m_status(rhs.m_status),
198  m_processTag(rhs.m_processTag),
199  m_attrList(rhs.m_attrList),
200  m_evtRefTokenStr() {
201 }
202 //______________________________________________________________________________
204 }
205 //______________________________________________________________________________
207  if (this != &rhs) {
210  m_status = rhs.m_status;
212  m_attrList = rhs.m_attrList;
213  }
214  return(*this);
215 }
216 //______________________________________________________________________________
218  m_status = status;
219 }
220 //______________________________________________________________________________
221 bool DataHeader::isInput() const {
222  return(m_status == statusFlag(Input));
223 }
224 //______________________________________________________________________________
225 void DataHeader::setProcessTag(const std::string& processTag) {
226  m_processTag = processTag;
227 }
228 //______________________________________________________________________________
229 const std::string& DataHeader::getProcessTag() const {
230  return(m_processTag);
231 }
232 //______________________________________________________________________________
233 int DataHeader::size() const {
234  return(m_dataHeader.size());
235 }
236 //______________________________________________________________________________
237 std::vector<DataHeaderElement>::const_iterator DataHeader::begin() const {
238  return(m_dataHeader.begin());
239 }
240 //______________________________________________________________________________
241 std::vector<DataHeaderElement>::const_iterator DataHeader::end() const {
242  return(m_dataHeader.end());
243 }
244 //______________________________________________________________________________
245 const std::vector<DataHeaderElement>& DataHeader::elements() const {
246  return m_dataHeader;
247 }
248 //______________________________________________________________________________
249 void DataHeader::insert(const SG::TransientAddress* sgAddress, IOpaqueAddress* tokAddress, const std::string& pTag) {
250  if (sgAddress != 0) {
251  m_dataHeader.emplace_back(sgAddress, tokAddress, pTag);
252  }
253 }
254 //______________________________________________________________________________
255 void DataHeader::insert(const SG::DataProxy* proxy, IOpaqueAddress* tokAddress, const std::string& pTag) {
256  m_dataHeader.emplace_back(proxy, tokAddress, pTag);
257 }
258 //______________________________________________________________________________
260  m_dataHeader.push_back(dhe);
261 }
262 //______________________________________________________________________________
264  return(m_inputDataHeader.size());
265 }
266 //______________________________________________________________________________
267 std::vector<DataHeaderElement>::const_iterator DataHeader::beginProvenance() const {
268  return(m_inputDataHeader.begin());
269 }
270 //______________________________________________________________________________
271 std::vector<DataHeaderElement>::const_iterator DataHeader::endProvenance() const {
272  return(m_inputDataHeader.end());
273 }
274 //______________________________________________________________________________
276  m_inputDataHeader.push_back(dhe);
277 }
278 //______________________________________________________________________________
281  last = m_dataHeader.end(); iter != last; ++iter) {
282  iter->addHash(pool);
283  }
285  last = m_inputDataHeader.end(); iter != last; ++iter) {
286  iter->addHash(pool);
287  }
288 }
289 //______________________________________________________________________________
290 const std::string& DataHeader::dhFormToken() const
291 {
292  return m_dhFormToken;
293 }
294 //______________________________________________________________________________
295 void DataHeader::setDhFormToken(const std::string& formToken)
296 {
297  m_dhFormToken = formToken;
298 }
299 //______________________________________________________________________________
301  m_attrList = attrList;
302 }
303 //______________________________________________________________________________
305  return(m_attrList);
306 }
307 //______________________________________________________________________________
308 void DataHeader::setEvtRefTokenStr(const std::string& tokenStr) {
309  m_evtRefTokenStr = tokenStr;
310 }
311 //______________________________________________________________________________
312 const std::string& DataHeader::getEvtRefTokenStr() {
313  return(m_evtRefTokenStr);
314 }
315 //______________________________________________________________________________
316 #include "CoralBase/AttributeList.h"
317 #include "CoralBase/Attribute.h"
318 
319 void DataHeader::dump(std::ostream& ostr) const
320 {
321  using namespace std;
322  ostr << "--- DataHeader Dump ---" << endl;
323  for( auto& el : m_dataHeader ) {
324  el.dump(ostr);
325  }
326  for( auto& el : m_inputDataHeader ) {
327  el.dump(ostr);
328  }
329  ostr << "Status: " << m_status << endl;
330  ostr << "Proc tag: " << m_processTag << endl;
331  ostr << "evtRef: " << m_evtRefTokenStr << endl;
332  ostr << "attrListPtr: " << m_attrList << endl;
333  if( m_attrList ) ostr << "attrListSize: " << m_attrList->size() << endl;
334  ostr << "--- DataHeader End ---" << endl;
335 }
336 //______________________________________________________________________________
338 {
339 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
DataHeader::isInput
bool isInput() const
Check whether StatusFlag is "Input".
Definition: DataHeader.cxx:221
DataHeader::setProcessTag
void setProcessTag(const std::string &processTag)
Set ProcessTag for DataHeader.
Definition: DataHeader.cxx:225
IStringPool
Abstract interface for looking up strings/CLIDs in a pool.
Definition: IStringPool.h:28
DataHeader::endProvenance
std::vector< DataHeaderElement >::const_iterator endProvenance() const
Definition: DataHeader.cxx:271
DataHeaderElement::m_key
std::string m_key
string with StoreGate key.
Definition: DataHeader.h:112
StateLessPT_NewConfig.proxy
proxy
Definition: StateLessPT_NewConfig.py:395
DataHeaderElement::getAlias
const std::set< std::string > & getAlias() const
Definition: DataHeader.cxx:120
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
DataHeader::m_attrList
const coral::AttributeList * m_attrList
Optional pointer to AttributeList to enable writing of TAG Attributes to Payload files.
Definition: DataHeader.h:220
DataHeader::DataHeader
DataHeader()
Default Constructor.
Definition: DataHeader.cxx:185
DataHeaderElement::m_token
Token m_token
Transient address token.
Definition: DataHeader.h:116
OfflineHitType::Other
@ Other
DataHeader::operator=
DataHeader & operator=(const DataHeader &rhs)
Assignment Operator.
Definition: DataHeader.cxx:206
DataHeader::dump
void dump(std::ostream &ostr) const
Definition: DataHeader.cxx:319
DataHeader::setAttributeList
void setAttributeList(const coral::AttributeList *attrList)
Definition: DataHeader.cxx:300
DataHeaderElement::m_pClid
CLID m_pClid
primary ClassID.
Definition: DataHeader.h:108
DataHeader::addHash
void addHash(IStringPool *pool)
Add new entry to hash map.
Definition: DataHeader.cxx:279
pool
pool namespace
Definition: libname.h:15
SG::TransientAddress::setAlias
void setAlias(const std::string &key)
set alias'
Definition: TransientAddress.h:257
DataHeader::elements
const std::vector< DataHeaderElement > & elements() const
Definition: DataHeader.cxx:245
SG::TransientAddress
Definition: TransientAddress.h:32
DataHeader::begin
std::vector< DataHeaderElement >::const_iterator begin() const
Definition: DataHeader.cxx:237
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
DataHeader::statusFlag
statusFlag
Definition: DataHeader.h:128
DataHeader::insertProvenance
void insertProvenance(const DataHeaderElement &dhe)
Insert a new element into the "Provenance" vector.
Definition: DataHeader.cxx:275
Token
This class provides a token that identifies in a unique way objects on the persistent storage.
Definition: Token.h:21
TokenAddress
This class provides a Generic Transient Address for POOL tokens.
Definition: TokenAddress.h:23
DataHeaderElement::operator=
DataHeaderElement & operator=(const DataHeaderElement &rhs)
Assignment Operator.
Definition: DataHeader.cxx:91
DataHeaderElement::getKey
const std::string & getKey() const
Definition: DataHeader.cxx:116
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Token::fromString
Token & fromString(const std::string &from)
Build from the string representation of a token.
Definition: Token.cxx:148
DataHeader::m_dhFormToken
std::string m_dhFormToken
Token to the DH format object.
Definition: DataHeader.h:224
DataHeaderElement
This class provides a persistent form for the TransientAddress.
Definition: DataHeader.h:37
DataHeader::beginProvenance
std::vector< DataHeaderElement >::const_iterator beginProvenance() const
Definition: DataHeader.cxx:267
DataHeaderElement::m_alias
std::set< std::string > m_alias
set of StoreGate alias string.
Definition: DataHeader.h:114
IStringPool.h
Abstract interface for looking up strings/CLIDs in a pool.
DataHeaderElement::~DataHeaderElement
virtual ~DataHeaderElement()
Destructor.
Definition: DataHeader.cxx:88
DataHeader
This class provides the layout for summary information stored for data written to POOL.
Definition: DataHeader.h:126
DataHeader::size
int size() const
Definition: DataHeader.cxx:233
h
extractSporadic.h
list h
Definition: extractSporadic.py:97
COOLRates.alias
alias
Definition: COOLRates.py:1172
DataHeader::sizeProvenance
int sizeProvenance() const
Definition: DataHeader.cxx:263
DataHeaderElement::DataHeaderElement
DataHeaderElement()
Default Constructor.
Definition: DataHeader.cxx:18
DataProxy
DataProxy provides the registry services for StoreGate.
Definition: DataProxy.h:32
DataHeaderElement::dump
void dump(std::ostream &ostr) const
Definition: DataHeader.cxx:160
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
DataHeader::recycle
virtual void recycle()
Called before this object is recycled.
Definition: DataHeader.cxx:337
TokenAddress::getToken
Token * getToken()
Definition: TokenAddress.cxx:15
jobOptions.pTag
string pTag
Definition: jobOptions.py:28
DataHeader.h
This file contains the class definition for the DataHeader and DataHeaderElement classes.
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
DataHeaderElement::getHashes
const std::vector< sgkey_t > & getHashes() const
Definition: DataHeader.cxx:133
DataHeader::insert
void insert(const SG::TransientAddress *sgAddress, IOpaqueAddress *tokAddress=0, const std::string &pTag="")
Insert a new element into the "DataObject" vector.
Definition: DataHeader.cxx:249
DataHeader::setStatus
void setStatus(statusFlag status)
Set StatusFlag enum for DataHeader.
Definition: DataHeader.cxx:217
DataHeaderElement::getClassIDs
const std::set< CLID > getClassIDs() const
Definition: DataHeader.cxx:110
DataHeader::m_status
statusFlag m_status
StatusFlag (i.e.: Output, Primary, Input, Manual, Other).
Definition: DataHeader.h:216
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
DataHeader::end
std::vector< DataHeaderElement >::const_iterator end() const
Definition: DataHeader.cxx:241
DataHeaderElement::addHash
void addHash(IStringPool *pool)
Add new entry to hash map.
Definition: DataHeader.cxx:137
DataHeaderElement::getPrimaryClassID
CLID getPrimaryClassID() const
Definition: DataHeader.cxx:103
Token::toString
virtual const std::string toString() const
Retrieve the string representation of the token.
Definition: Token.cxx:129
DataHeader::m_dataHeader
std::vector< DataHeaderElement > m_dataHeader
vector with DataHeaderElement to "DataObject".
Definition: DataHeader.h:212
DataHeader::getEvtRefTokenStr
const std::string & getEvtRefTokenStr()
Definition: DataHeader.cxx:312
DataHeader::setDhFormToken
void setDhFormToken(const std::string &formToken)
Definition: DataHeader.cxx:295
RTTAlgmain.address
address
Definition: RTTAlgmain.py:55
DataHeaderElement::getStorageType
long getStorageType() const
Definition: DataHeader.cxx:128
DataHeaderElement::m_hashes
std::vector< sgkey_t > m_hashes
hash table for ElementLink host container keys.
Definition: DataHeader.h:118
DataHeaderElement::m_clids
std::vector< CLID > m_clids
vector of unsigned long to store ClassID's for symlinked container.
Definition: DataHeader.h:110
DataHeaderElement::getAddress
SG::TransientAddress * getAddress(unsigned long contextId=0) const
Definition: DataHeader.cxx:147
TokenAddress.h
This file contains the class definition for the TokenAddress class.
DataHeader::~DataHeader
virtual ~DataHeader()
Destructor.
Definition: DataHeader.cxx:203
DataHeader::getAttributeList
const coral::AttributeList * getAttributeList()
Definition: DataHeader.cxx:304
a
TList * a
Definition: liststreamerinfos.cxx:10
DataHeader::getProcessTag
const std::string & getProcessTag() const
Definition: DataHeader.cxx:229
TransientAddress.h
DataHeader::setEvtRefTokenStr
void setEvtRefTokenStr(const std::string &tokenStr)
Definition: DataHeader.cxx:308
DataHeader::m_processTag
std::string m_processTag
ProcessTag (e.g.: "StreamESD", "StreamAOD" ...).
Definition: DataHeader.h:218
merge.status
status
Definition: merge.py:17
NswErrorCalibData::Input
Helper struct to be parsed to the object to derive the specific error of the cluster.
Definition: NswErrorCalibData.h:25
Token::setData
const Token & setData(Token *pToken) const
Set all the data part of the token.
Definition: Token.cxx:209
DataHeaderElement::getToken
const Token * getToken() const
Definition: DataHeader.cxx:124
SG::DataProxy
Definition: DataProxy.h:45
python.compressB64.c
def c
Definition: compressB64.py:93
DataHeader::m_inputDataHeader
std::vector< DataHeaderElement > m_inputDataHeader
vector with DataHeaderElement to upstream DataHeader ("Provenance").
Definition: DataHeader.h:214
DataHeader::dhFormToken
const std::string & dhFormToken() const
Form token, to be able to tell when the form changes.
Definition: DataHeader.cxx:290
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
DataHeader::m_evtRefTokenStr
std::string m_evtRefTokenStr
Optional Token String for Event Reference to enable writing of TAG to Payload files.
Definition: DataHeader.h:222
DataProxy.h