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

This class is the EventSelector and AddressProvider for event data. More...

#include <AthenaPoolAddressProviderSvc.h>

Inheritance diagram for AthenaPoolAddressProviderSvc:
Collaboration diagram for AthenaPoolAddressProviderSvc:

Public Member Functions

 AthenaPoolAddressProviderSvc (const std::string &name, ISvcLocator *pSvcLocator)
 Standard Service Constructor. More...
 
virtual ~AthenaPoolAddressProviderSvc ()
 Destructor. More...
 
virtual StatusCode initialize () override
 Required of all Gaudi Services. More...
 
virtual StatusCode preLoadAddresses (StoreID::type storeID, IAddressProvider::tadList &tads) override
 Get all addresses from provider. More...
 
virtual StatusCode loadAddresses (StoreID::type storeID, IAddressProvider::tadList &tads) override
 Get all addresses for this event from provider. More...
 
virtual StatusCode updateAddress (StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx) override
 Update a transient address. More...
 

Private Member Functions

StoreGateSvceventStore () const
 Return pointer to active event SG. More...
 

Private Attributes

ServiceHandle< StoreGateSvcm_metaDataStore
 
ServiceHandle< IClassIDSvc > m_clidSvc
 
Guid m_guid
 
std::unordered_set< std::string > m_dhFormKeys
 Set of DataHeader form keys for which we've already done registerKeys. More...
 
Gaudi::Property< std::string > m_dataHeaderKey
 
Gaudi::Property< std::string > m_attrListKey
 

Detailed Description

This class is the EventSelector and AddressProvider for event data.

Definition at line 28 of file AthenaPoolAddressProviderSvc.h.

Constructor & Destructor Documentation

◆ AthenaPoolAddressProviderSvc()

AthenaPoolAddressProviderSvc::AthenaPoolAddressProviderSvc ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Standard Service Constructor.

Definition at line 31 of file AthenaPoolAddressProviderSvc.cxx.

31  :
32  base_class(name, pSvcLocator),
33  m_metaDataStore("StoreGateSvc/MetaDataStore", name),
34  m_clidSvc("ClassIDSvc", name),
35  m_guid() {
36 }

◆ ~AthenaPoolAddressProviderSvc()

AthenaPoolAddressProviderSvc::~AthenaPoolAddressProviderSvc ( )
virtual

Destructor.

Definition at line 38 of file AthenaPoolAddressProviderSvc.cxx.

38  {
39 }

Member Function Documentation

◆ eventStore()

StoreGateSvc * AthenaPoolAddressProviderSvc::eventStore ( ) const
private

Return pointer to active event SG.

Definition at line 41 of file AthenaPoolAddressProviderSvc.cxx.

41  {
43 }

◆ initialize()

StatusCode AthenaPoolAddressProviderSvc::initialize ( )
overridevirtual

Required of all Gaudi Services.

Definition at line 45 of file AthenaPoolAddressProviderSvc.cxx.

45  {
46 
47  ATH_CHECK( m_metaDataStore.retrieve() );
48  ATH_CHECK( m_clidSvc.retrieve() );
49 
50  return StatusCode::SUCCESS;
51 }

◆ loadAddresses()

StatusCode AthenaPoolAddressProviderSvc::loadAddresses ( StoreID::type  storeID,
IAddressProvider::tadList tads 
)
overridevirtual

Get all addresses for this event from provider.

Parameters
storeID[IN] store ID, this function only preloads event store addresses.
tads[OUT] list of the transient addresses which were preloaded.

Only call registerKeys() if we haven't seen this form before.

Definition at line 81 of file AthenaPoolAddressProviderSvc.cxx.

82  {
83  if (storeID != StoreID::EVENT_STORE && storeID != StoreID::PILEUP_STORE) {
84  return StatusCode::SUCCESS;
85  }
86 
87  Guid thisFile = Guid::null();
88  const DataHeader* dataHeader = nullptr;
89  if (dataHeader == nullptr) { // New file (or reading DataHeader)
90  SG::ReadHandle<DataHeader> eventDataHeader(m_dataHeaderKey.value(), eventStore()->name());
91  if (!eventDataHeader.isValid()) {
92  ATH_MSG_ERROR("Cannot retrieve DataHeader from StoreGate: " << m_dataHeaderKey);
93  return StatusCode::FAILURE;
94  }
95  dataHeader = eventDataHeader.cptr();
96  }
97  // second data header
98  if (m_attrListKey.value() != "") {
99  const AthenaAttributeList* attrList = nullptr;
100  std::string tokenStr;
101  if (eventStore()->retrieve(attrList, m_attrListKey.value()).isSuccess()) {
102  try {
103  tokenStr = (*attrList)["eventRef_secondary"].data<std::string>();
104  ATH_MSG_DEBUG("found AthenaAttribute, name = eventRef_secondary = " << tokenStr);
105  } catch (std::exception &e) {
106  ATH_MSG_ERROR(e.what());
107  return StatusCode::FAILURE;
108  }
109  } else {
110  ATH_MSG_ERROR("Cannot find AthenaAttribute, key = " << m_attrListKey.value());
111  return StatusCode::FAILURE;
112  }
113  IOpaqueAddress* iop = new GenericAddress(pool::POOL_StorageType.type(), ClassID_traits<DataHeader>::ID(), tokenStr, "SecondaryEventSelector");
114  if (!eventStore()->recordAddress(iop).isSuccess()) {
115  ATH_MSG_ERROR("Cannot record address to StoreGate with token string: " << tokenStr);
116  return StatusCode::FAILURE;
117  }
118  ATH_MSG_DEBUG("Created dataHeader SecondaryEventSelector");
119  }
121  bool doRegister = dataHeader->dhFormToken().empty() ||
122  m_dhFormKeys.emplace (dataHeader->dhFormToken()).second;
123  ATH_MSG_DEBUG("The current Event contains: " << dataHeader->size() << " objects");
124  for (const auto& element : *dataHeader) {
125  if (doRegister) {
127  }
128  SG::TransientAddress* tadd = element.getAddress(pool::POOL_StorageType.type());
129  if (tadd->clID() == ClassID_traits<DataHeader>::ID()) { // self reference
130  delete tadd; tadd = nullptr;
131  } else {
132  ATH_MSG_DEBUG("loadAddresses: DataObject address, clid = " << tadd->clID() << ", name = " << tadd->name());
133  tadd->setProvider(this, storeID);
134  tads.push_back(tadd);
135  }
136  }
137  m_guid = thisFile;
138  return StatusCode::SUCCESS;
139 }

◆ preLoadAddresses()

StatusCode AthenaPoolAddressProviderSvc::preLoadAddresses ( StoreID::type  storeID,
IAddressProvider::tadList tads 
)
overridevirtual

Get all addresses from provider.

Called before begin event.

Parameters
storeID[IN] store ID, this function only preloads detector store addresses.
tads[OUT] list of the transient addresses which were preloaded.

Definition at line 53 of file AthenaPoolAddressProviderSvc.cxx.

54  {
55  if (storeID != StoreID::DETECTOR_STORE) {
56  return StatusCode::SUCCESS;
57  }
58  ServiceHandle<StoreGateSvc> detectorStoreSvc("DetectorStore", name());
59  ATH_CHECK( detectorStoreSvc.retrieve() );
60 
61  SG::ReadHandle<DataHeader> dataHeader("CondProxyProvider", detectorStoreSvc->name());
62  if (!dataHeader.isValid()) {
63  ATH_MSG_DEBUG("Cannot retrieve DataHeader from DetectorStore.");
64  return StatusCode::SUCCESS;
65  }
66  ATH_MSG_DEBUG("The current File contains: " << dataHeader->size() << " objects");
67  for (const auto& element : *dataHeader) {
68  SG::TransientAddress* tadd = element.getAddress(pool::POOL_StorageType.type());
69  if (tadd->clID() == ClassID_traits<DataHeader>::ID()) {
70  delete tadd; tadd = nullptr;
71  } else {
72  ATH_MSG_DEBUG("preLoadAddresses: DataObject address, clid = " << tadd->clID() << ", name = " << tadd->name());
73  tads.push_back(tadd);
74  }
75  EventSelectorAthenaPoolUtil::registerKeys(element, &*detectorStoreSvc);
76  }
77 
78  return StatusCode::SUCCESS;
79 }

◆ updateAddress()

StatusCode AthenaPoolAddressProviderSvc::updateAddress ( StoreID::type  storeID,
SG::TransientAddress tad,
const EventContext &  ctx 
)
overridevirtual

Update a transient address.

Parameters
storeID[IN] store ID, this function only preloads event store addresses.
tad[IN] transient address to be updated.

Definition at line 141 of file AthenaPoolAddressProviderSvc.cxx.

143  {
144  return StatusCode::FAILURE;
145 }

Member Data Documentation

◆ m_attrListKey

Gaudi::Property<std::string> AthenaPoolAddressProviderSvc::m_attrListKey
private
Initial value:
{this, "AttributeListKey", {},
"Attribute list key of a secondary input file. If non-zero, creates a new IOpaqueAddress for that file and records it."}

Definition at line 65 of file AthenaPoolAddressProviderSvc.h.

◆ m_clidSvc

ServiceHandle<IClassIDSvc> AthenaPoolAddressProviderSvc::m_clidSvc
private

Definition at line 56 of file AthenaPoolAddressProviderSvc.h.

◆ m_dataHeaderKey

Gaudi::Property<std::string> AthenaPoolAddressProviderSvc::m_dataHeaderKey
private
Initial value:
{this, "DataHeaderKey", "EventSelector",
"StoreGate key of event entry object"}

Definition at line 62 of file AthenaPoolAddressProviderSvc.h.

◆ m_dhFormKeys

std::unordered_set<std::string> AthenaPoolAddressProviderSvc::m_dhFormKeys
private

Set of DataHeader form keys for which we've already done registerKeys.

Definition at line 59 of file AthenaPoolAddressProviderSvc.h.

◆ m_guid

Guid AthenaPoolAddressProviderSvc::m_guid
private

Definition at line 57 of file AthenaPoolAddressProviderSvc.h.

◆ m_metaDataStore

ServiceHandle<StoreGateSvc> AthenaPoolAddressProviderSvc::m_metaDataStore
private

Definition at line 55 of file AthenaPoolAddressProviderSvc.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
SG::TransientAddress
Definition: TransientAddress.h:34
AthenaPoolAddressProviderSvc::m_guid
Guid m_guid
Definition: AthenaPoolAddressProviderSvc.h:57
AthenaPoolAddressProviderSvc::m_clidSvc
ServiceHandle< IClassIDSvc > m_clidSvc
Definition: AthenaPoolAddressProviderSvc.h:56
AthenaPoolAddressProviderSvc::m_metaDataStore
ServiceHandle< StoreGateSvc > m_metaDataStore
Definition: AthenaPoolAddressProviderSvc.h:55
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
SG::TransientAddress::name
const std::string & name() const
Get the primary (hashed) SG key.
Definition: TransientAddress.h:214
AthenaPoolAddressProviderSvc::m_dataHeaderKey
Gaudi::Property< std::string > m_dataHeaderKey
Definition: AthenaPoolAddressProviderSvc.h:62
EventSelectorAthenaPoolUtil::registerKeys
void registerKeys(const DataHeaderElement &dhe, StoreGateSvc *store)
Register all hash keys for one DH Element.
Definition: registerKeys.cxx:22
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
StoreID::PILEUP_STORE
@ PILEUP_STORE
Definition: StoreID.h:31
DataHeader
This class provides the layout for summary information stored for data written to POOL.
Definition: DataHeader.h:123
DataHeader::size
int size() const
Definition: DataHeader.cxx:245
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SG::TransientAddress::clID
CLID clID() const
Retrieve string key:
Definition: TransientAddress.h:207
StoreGateSvc::currentStoreGate
static StoreGateSvc * currentStoreGate()
get current StoreGate
Definition: StoreGateSvc.cxx:51
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:37
calibdata.exception
exception
Definition: calibdata.py:495
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthenaAttributeList
An AttributeList represents a logical row of attributes in a metadata table. The name and type of eac...
Definition: PersistentDataModel/PersistentDataModel/AthenaAttributeList.h:45
AthenaPoolAddressProviderSvc::m_attrListKey
Gaudi::Property< std::string > m_attrListKey
Definition: AthenaPoolAddressProviderSvc.h:65
StoreID::DETECTOR_STORE
@ DETECTOR_STORE
Definition: StoreID.h:27
SG::TransientAddress::setProvider
void setProvider(IAddressProvider *provider, StoreID::type storeID)
Definition: TransientAddress.h:337
AthenaPoolAddressProviderSvc::m_dhFormKeys
std::unordered_set< std::string > m_dhFormKeys
Set of DataHeader form keys for which we've already done registerKeys.
Definition: AthenaPoolAddressProviderSvc.h:59
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Guid::null
static const Guid & null() noexcept
NULL-Guid: static class method.
Definition: Guid.cxx:14
Guid
This class provides a encapsulation of a GUID/UUID/CLSID/IID data structure (128 bit number).
Definition: Guid.h:25
StoreID::EVENT_STORE
@ EVENT_STORE
Definition: StoreID.h:26
AthenaPoolAddressProviderSvc::eventStore
StoreGateSvc * eventStore() const
Return pointer to active event SG.
Definition: AthenaPoolAddressProviderSvc.cxx:41
DataHeader::dhFormToken
const std::string & dhFormToken() const
Form token, to be able to tell when the form changes.
Definition: DataHeader.cxx:302
ServiceHandle< StoreGateSvc >