ATLAS Offline Software
Public Types | 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 Types

typedef std::list< SG::TransientAddress * > tadList
 
typedef tadList::iterator tadListIterator
 

Public Member Functions

 AthenaPoolAddressProviderSvc (const std::string &name, ISvcLocator *pSvcLocator)
 Standard Service Constructor. More...
 
virtual ~AthenaPoolAddressProviderSvc ()
 Destructor. More...
 
virtual StatusCode initialize ()
 Required of all Gaudi Services. More...
 
virtual StatusCode finalize ()
 Required of all Gaudi Services. More...
 
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvInterface)
 Does this object satisfy a given interface? See Gaudi documentation for details. More...
 
virtual StatusCode preLoadAddresses (StoreID::type storeID, IAddressProvider::tadList &tads)
 Get all addresses from provider. More...
 
virtual StatusCode loadAddresses (StoreID::type storeID, IAddressProvider::tadList &tads)
 Get all addresses for this event from provider. More...
 
virtual StatusCode updateAddress (StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx)
 Update a transient address. More...
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 
 DeclareInterfaceID (IAddressProvider, 1, 0)
 

Private Member Functions

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

Private Attributes

ServiceHandle< StoreGateSvcm_metaDataStore
 
ServiceHandle< IClassIDSvc > m_clidSvc
 
Guid m_guid
 
StringProperty m_dataHeaderKey
 DataHeaderKey, StoreGate key of event entry object (type DataHeader). More...
 
Gaudi::Property< std::string > m_attrListKey
 Attribute list key of a secondary input file. More...
 

Detailed Description

This class is the EventSelector and AddressProvider for event data.

Definition at line 29 of file AthenaPoolAddressProviderSvc.h.

Member Typedef Documentation

◆ tadList

typedef std::list<SG::TransientAddress*> IAddressProvider::tadList
inherited

Definition at line 32 of file IAddressProvider.h.

◆ tadListIterator

typedef tadList::iterator IAddressProvider::tadListIterator
inherited

Definition at line 33 of file IAddressProvider.h.

Constructor & Destructor Documentation

◆ AthenaPoolAddressProviderSvc()

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

Standard Service Constructor.

Definition at line 30 of file AthenaPoolAddressProviderSvc.cxx.

30  :
31  ::AthService(name, pSvcLocator),
32  m_metaDataStore("MetaDataStore", name),
33  m_clidSvc("ClassIDSvc", name),
34  m_guid() {
35  declareProperty("DataHeaderKey", m_dataHeaderKey = "EventSelector");
36  declareProperty("AttributeListKey", m_attrListKey = "");
37 }

◆ ~AthenaPoolAddressProviderSvc()

AthenaPoolAddressProviderSvc::~AthenaPoolAddressProviderSvc ( )
virtual

Destructor.

Definition at line 39 of file AthenaPoolAddressProviderSvc.cxx.

39  {
40 }

Member Function Documentation

◆ DeclareInterfaceID()

IAddressProvider::DeclareInterfaceID ( IAddressProvider  ,
,
 
)
inherited

◆ eventStore()

StoreGateSvc * AthenaPoolAddressProviderSvc::eventStore ( ) const
private

Return pointer to active event SG.

Definition at line 42 of file AthenaPoolAddressProviderSvc.cxx.

42  {
44 }

◆ finalize()

StatusCode AthenaPoolAddressProviderSvc::finalize ( )
virtual

Required of all Gaudi Services.

Definition at line 64 of file AthenaPoolAddressProviderSvc.cxx.

64  {
65  // Release ClassIDSvc
66  if (!m_clidSvc.release().isSuccess()) {
67  ATH_MSG_WARNING("Cannot release ClassIDSvc.");
68  }
69  // Release MetaDataStore
70  if (!m_metaDataStore.release().isSuccess()) {
71  ATH_MSG_WARNING("Cannot release MetaDataStore.");
72  }
73  return(::AthService::finalize());
74 }

◆ initialize()

StatusCode AthenaPoolAddressProviderSvc::initialize ( )
virtual

Required of all Gaudi Services.

Definition at line 46 of file AthenaPoolAddressProviderSvc.cxx.

46  {
47  if (!::AthService::initialize().isSuccess()) {
48  ATH_MSG_FATAL("Cannot initialize AthService base class.");
49  return(StatusCode::FAILURE);
50  }
51  // Retrieve MetaDataStore
52  if (!m_metaDataStore.retrieve().isSuccess()) {
53  ATH_MSG_FATAL("Cannot get MetaDataStore.");
54  return(StatusCode::FAILURE);
55  }
56  // Retrieve ClassIDSvc
57  if (!m_clidSvc.retrieve().isSuccess()) {
58  ATH_MSG_FATAL("Cannot get ClassIDSvc.");
59  return(StatusCode::FAILURE);
60  }
61  return(StatusCode::SUCCESS);
62 }

◆ loadAddresses()

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

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.

Reimplemented from IAddressProvider.

Definition at line 112 of file AthenaPoolAddressProviderSvc.cxx.

113  {
114  if (storeID != StoreID::EVENT_STORE && storeID != StoreID::PILEUP_STORE) {
115  return(StatusCode::SUCCESS);
116  }
117 
118  Guid thisFile = Guid::null();
119  const DataHeader* dataHeader = nullptr;
120  if (dataHeader == nullptr) { // New file (or reading DataHeader)
121  SG::ReadHandle<DataHeader> eventDataHeader(m_dataHeaderKey.value(), eventStore()->name());
122  if (!eventDataHeader.isValid()) {
123  ATH_MSG_ERROR("Cannot retrieve DataHeader from StoreGate: " << m_dataHeaderKey);
124  return(StatusCode::FAILURE);
125  }
126  dataHeader = eventDataHeader.cptr();
127  }
128  // second data header
129  if (m_attrListKey.value() != "") {
130  const AthenaAttributeList* attrList = nullptr;
131  std::string tokenStr;
132  if (eventStore()->retrieve(attrList, m_attrListKey.value()).isSuccess()) {
133  try {
134  tokenStr = (*attrList)["eventRef_secondary"].data<std::string>();
135  ATH_MSG_DEBUG("found AthenaAttribute, name = eventRef_secondary = " << tokenStr);
136  } catch (std::exception &e) {
137  ATH_MSG_ERROR(e.what());
138  return (StatusCode::FAILURE);
139  }
140  } else {
141  ATH_MSG_ERROR("Cannot find AthenaAttribute, key = " << m_attrListKey.value());
142  return (StatusCode::FAILURE);
143  }
144  IOpaqueAddress* iop = new GenericAddress(POOL_StorageType, ClassID_traits<DataHeader>::ID(), tokenStr, "SecondaryEventSelector");
145  if (!eventStore()->recordAddress(iop).isSuccess()) {
146  ATH_MSG_ERROR("Cannot record address to StoreGate with token string: " << tokenStr);
147  return(StatusCode::FAILURE);
148  }
149  ATH_MSG_DEBUG("Created dataHeader SecondaryEventSelector");
150  }
151  ATH_MSG_DEBUG("The current Event contains: " << dataHeader->size() << " objects");
152  for (const auto& element : *dataHeader) {
153  SG::TransientAddress* tadd = element.getAddress();
154  if (tadd->clID() == ClassID_traits<DataHeader>::ID()) { // self reference
155  delete tadd; tadd = nullptr;
156  } else {
157  ATH_MSG_DEBUG("loadAddresses: DataObject address, clid = " << tadd->clID() << ", name = " << tadd->name());
158  tadd->setProvider(this, storeID);
159  tads.push_back(tadd);
160  }
162  }
163  m_guid = thisFile;
164  return(StatusCode::SUCCESS);
165 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< Service >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< Service >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< Service >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ preLoadAddresses()

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

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.

Reimplemented from IAddressProvider.

Definition at line 80 of file AthenaPoolAddressProviderSvc.cxx.

81  {
82  if (storeID != StoreID::DETECTOR_STORE) {
83  return(StatusCode::SUCCESS);
84  }
85  ServiceHandle<StoreGateSvc> detectorStoreSvc("DetectorStore", name());
86  if (!detectorStoreSvc.retrieve().isSuccess()) {
87  ATH_MSG_ERROR("Cannot get DetectorStore.");
88  return(StatusCode::FAILURE);
89  }
90  SG::ReadHandle<DataHeader> dataHeader("CondProxyProvider", detectorStoreSvc->name());
91  if (!dataHeader.isValid()) {
92  ATH_MSG_DEBUG("Cannot retrieve DataHeader from DetectorStore.");
93  return(StatusCode::SUCCESS);
94  }
95  ATH_MSG_DEBUG("The current File contains: " << dataHeader->size() << " objects");
96  for (const auto& element : *dataHeader) {
97  SG::TransientAddress* tadd = element.getAddress();
98  if (tadd->clID() == ClassID_traits<DataHeader>::ID()) {
99  delete tadd; tadd = nullptr;
100  } else {
101  ATH_MSG_DEBUG("preLoadAddresses: DataObject address, clid = " << tadd->clID() << ", name = " << tadd->name());
102  tads.push_back(tadd);
103  }
104  EventSelectorAthenaPoolUtil::registerKeys(element, &*detectorStoreSvc);
105  }
106  if (!detectorStoreSvc.release().isSuccess()) {
107  ATH_MSG_WARNING("Cannot release DetectorStoreSvc.");
108  }
109  return(StatusCode::SUCCESS);
110 }

◆ queryInterface()

StatusCode AthenaPoolAddressProviderSvc::queryInterface ( const InterfaceID &  riid,
void **  ppvInterface 
)
virtual

Does this object satisfy a given interface? See Gaudi documentation for details.

Definition at line 76 of file AthenaPoolAddressProviderSvc.cxx.

76  {
77  return(::AthService::queryInterface(riid, ppvInterface));
78 }

◆ updateAddress()

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

Update a transient address.

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

Implements IAddressProvider.

Definition at line 167 of file AthenaPoolAddressProviderSvc.cxx.

169  {
170  return(StatusCode::FAILURE);
171 }

Member Data Documentation

◆ m_attrListKey

Gaudi::Property<std::string> AthenaPoolAddressProviderSvc::m_attrListKey
private

Attribute list key of a secondary input file.

If non-zero, creates a new IOpaqueAddress for that file and records it.

Definition at line 70 of file AthenaPoolAddressProviderSvc.h.

◆ m_clidSvc

ServiceHandle<IClassIDSvc> AthenaPoolAddressProviderSvc::m_clidSvc
private

Definition at line 61 of file AthenaPoolAddressProviderSvc.h.

◆ m_dataHeaderKey

StringProperty AthenaPoolAddressProviderSvc::m_dataHeaderKey
private

DataHeaderKey, StoreGate key of event entry object (type DataHeader).

Definition at line 66 of file AthenaPoolAddressProviderSvc.h.

◆ m_guid

Guid AthenaPoolAddressProviderSvc::m_guid
private

Definition at line 62 of file AthenaPoolAddressProviderSvc.h.

◆ m_metaDataStore

ServiceHandle<StoreGateSvc> AthenaPoolAddressProviderSvc::m_metaDataStore
private

Definition at line 60 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
AthService::AthService
AthService()
Guid::null
static const Guid & null()
NULL-Guid: static class method.
Definition: Guid.cxx:18
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
initialize
void initialize()
Definition: run_EoverP.cxx:894
SG::TransientAddress
Definition: TransientAddress.h:32
AthenaPoolAddressProviderSvc::m_guid
Guid m_guid
Definition: AthenaPoolAddressProviderSvc.h:62
AthenaPoolAddressProviderSvc::m_clidSvc
ServiceHandle< IClassIDSvc > m_clidSvc
Definition: AthenaPoolAddressProviderSvc.h:61
AthenaPoolAddressProviderSvc::m_metaDataStore
ServiceHandle< StoreGateSvc > m_metaDataStore
Definition: AthenaPoolAddressProviderSvc.h:60
SG::TransientAddress::name
const std::string & name() const
Get the primary (hashed) SG key.
Definition: TransientAddress.h:208
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
AthenaPoolAddressProviderSvc::m_dataHeaderKey
StringProperty m_dataHeaderKey
DataHeaderKey, StoreGate key of event entry object (type DataHeader).
Definition: AthenaPoolAddressProviderSvc.h:66
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:124
DataHeader::size
int size() const
Definition: DataHeader.cxx:251
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SG::TransientAddress::clID
CLID clID() const
Retrieve string key:
Definition: TransientAddress.h:201
StoreGateSvc::currentStoreGate
static StoreGateSvc * currentStoreGate()
get current StoreGate
Definition: StoreGateSvc.cxx:69
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
calibdata.exception
exception
Definition: calibdata.py:496
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
Attribute list key of a secondary input file.
Definition: AthenaPoolAddressProviderSvc.h:70
StoreID::DETECTOR_STORE
@ DETECTOR_STORE
Definition: StoreID.h:27
SG::TransientAddress::setProvider
void setProvider(IAddressProvider *provider, StoreID::type storeID)
Definition: TransientAddress.h:317
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
Guid
This class provides a encapsulation of a GUID/UUID/CLSID/IID data structure (128 bit number).
Definition: Guid.h:20
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
StoreID::EVENT_STORE
@ EVENT_STORE
Definition: StoreID.h:26
AthenaPoolAddressProviderSvc::eventStore
StoreGateSvc * eventStore() const
Return pointer to active event SG.
Definition: AthenaPoolAddressProviderSvc.cxx:42
ServiceHandle< StoreGateSvc >