ATLAS Offline Software
Loading...
Searching...
No Matches
CondProxyProvider Class Reference

This class is the AddressProvider for conditions data. More...

#include <CondProxyProvider.h>

Inheritance diagram for CondProxyProvider:
Collaboration diagram for CondProxyProvider:

Public Member Functions

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

Private Member Functions

std::unique_ptr< PoolCollectionConvertergetCollectionCnv ()
 Return pointer to new PoolCollectionConverter.

Private Attributes

ServiceHandle< IAthenaPoolCnvSvcm_athenaPoolCnvSvc {this, "ConversionService", "AthenaPoolCnvSvc"}
unsigned int m_contextId
Gaudi::Property< std::vector< std::string > > m_inputCollectionsProp { this, "InputCollections", {}, "Files to read", "OrderedSet<std::string>" }
 InputCollections, vector with names of the input collections.
std::vector< std::string >::const_iterator m_inputCollectionsIterator {}

Detailed Description

This class is the AddressProvider for conditions data.

Definition at line 31 of file CondProxyProvider.h.

Constructor & Destructor Documentation

◆ CondProxyProvider()

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

Standard Service Constructor.

Definition at line 32 of file CondProxyProvider.cxx.

32 :
33 base_class(name, pSvcLocator),
35 {
36}
unsigned int m_contextId
@ kInputStream
Definition IPoolSvc.h:40

◆ ~CondProxyProvider()

CondProxyProvider::~CondProxyProvider ( )
virtual

Destructor.

Definition at line 38 of file CondProxyProvider.cxx.

38 {
39}

Member Function Documentation

◆ getCollectionCnv()

std::unique_ptr< PoolCollectionConverter > CondProxyProvider::getCollectionCnv ( )
private

Return pointer to new PoolCollectionConverter.

Definition at line 143 of file CondProxyProvider.cxx.

143 {
144 ATH_MSG_DEBUG("Try item: \"" << *m_inputCollectionsIterator << "\" from the collection list.");
145 auto pCollCnv = std::make_unique<PoolCollectionConverter>("ImplicitCollection",
148 m_athenaPoolCnvSvc->getPoolSvc());
149 if (!pCollCnv->initialize().isSuccess()) {
150 // Close previous collection.
151 pCollCnv.reset();
152 ATH_MSG_ERROR("Unable to open: " << *m_inputCollectionsIterator);
153 }
154 return(pCollCnv);
155}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
std::vector< std::string >::const_iterator m_inputCollectionsIterator
ServiceHandle< IAthenaPoolCnvSvc > m_athenaPoolCnvSvc

◆ initialize()

StatusCode CondProxyProvider::initialize ( )
overridevirtual

Required of all Gaudi Services.

Definition at line 41 of file CondProxyProvider.cxx.

41 {
42 ATH_MSG_INFO("Initializing " << name());
43 // Check for input collection
44 if (m_inputCollectionsProp.value().size() == 0) {
45 return StatusCode::FAILURE;
46 }
47 // Retrieve AthenaPoolCnvSvc
48 ATH_CHECK( m_athenaPoolCnvSvc.retrieve() );
49
50 // Get PoolSvc and connect as "Conditions"
51 IPoolSvc *poolSvc = m_athenaPoolCnvSvc->getPoolSvc();
52 m_contextId = poolSvc->getInputContext("Conditions");
54
55 for( const auto &inp : m_inputCollectionsProp.value() ) {
56 ATH_MSG_INFO("Inputs: " << inp);
57 }
58 // Initialize
60 return StatusCode::SUCCESS;
61}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
Gaudi::Property< std::vector< std::string > > m_inputCollectionsProp
InputCollections, vector with names of the input collections.

◆ loadAddresses()

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

Implementation of the loadAddresses function without any functionality.

Definition at line 132 of file CondProxyProvider.cxx.

133 {
134 return StatusCode::SUCCESS;
135}

◆ preLoadAddresses()

StatusCode CondProxyProvider::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 63 of file CondProxyProvider.cxx.

64 {
65 if (storeID != StoreID::DETECTOR_STORE) {
66 return StatusCode::SUCCESS;
67 }
68 ServiceHandle<StoreGateSvc> detectorStoreSvc("DetectorStore", name());
69 // Retrieve DetectorStoreSvc
70 ATH_CHECK( detectorStoreSvc.retrieve() );
71
72 // Create an poolCollectionConverter to read the objects in
73 std::unique_ptr<PoolCollectionConverter> poolCollectionConverter = getCollectionCnv();
74 if (!poolCollectionConverter) {
75 return StatusCode::FAILURE;
76 }
77 // Create DataHeader iterators
78 pool::ICollectionCursor* headerIterator = &poolCollectionConverter->selectAll();
79
80 for (int verNumber = 0; verNumber < 100; verNumber++) {
81 if (!headerIterator->next()) {
82 poolCollectionConverter->disconnectDb().ignore();
83 poolCollectionConverter.reset();
86 // Create PoolCollectionConverter for input file
87 poolCollectionConverter = getCollectionCnv();
88 if (!poolCollectionConverter) {
89 return StatusCode::FAILURE;
90 }
91 // Get DataHeader iterator
92 headerIterator = &poolCollectionConverter->selectAll();
93 if (!headerIterator->next()) {
94 return StatusCode::FAILURE;
95 }
96 } else {
97 break;
98 }
99 }
100 SG::VersionedKey myVersKey(name(), verNumber);
101 auto token = std::make_unique<Token>();
102 token->fromString(headerIterator->eventRef().toString());
103 CxxUtils::RefCountedPtr<TokenAddress> tokenAddr
104 (new TokenAddress(pool::POOL_StorageType.type(), ClassID_traits<DataHeader>::ID(), "", myVersKey, m_contextId, std::move(token)));
105 if (!detectorStoreSvc->recordAddress(std::move(tokenAddr)).isSuccess()) {
106 ATH_MSG_ERROR("Cannot record DataHeader.");
107 return StatusCode::FAILURE;
108 }
109 }
110 std::list<SG::ObjectWithVersion<DataHeader> > allVersions;
111 if (!detectorStoreSvc->retrieveAllVersions(allVersions, name()).isSuccess()) {
112 ATH_MSG_DEBUG("Cannot retrieve DataHeader from DetectorStore.");
113 return StatusCode::SUCCESS;
114 }
115 for (const auto& version : allVersions) {
116 SG::ReadHandle<DataHeader> dataHeader = version.dataObject;
117 ATH_MSG_DEBUG("The current File contains: " << dataHeader->size() << " objects");
118 for (const auto& element : *dataHeader) {
119 SG::TransientAddress* tadd = element.getAddress(pool::POOL_StorageType.type());
120 if (tadd->clID() == ClassID_traits<DataHeader>::ID()) {
121 delete tadd; tadd = 0;
122 } else {
123 ATH_MSG_DEBUG("preLoadAddresses: DataObject address, clid = " << tadd->clID() << ", name = " << tadd->name());
124 tads.push_back(tadd);
125 }
126 EventSelectorAthenaPoolUtil::registerKeys(element, &*detectorStoreSvc);
127 }
128 }
129 return StatusCode::SUCCESS;
130}
std::unique_ptr< PoolCollectionConverter > getCollectionCnv()
Return pointer to new PoolCollectionConverter.
CLID clID() const
Retrieve string key:
const std::string & name() const
Get the primary (hashed) SG key.
@ DETECTOR_STORE
Definition StoreID.h:27
virtual const std::string toString() const
Retrieve the string representation of the token.
Definition Token.cxx:134
virtual bool next()=0
Advances the cursor to the next row of the query result set.
virtual const Token & eventRef() const =0
Returns the event reference Token for the current row.
void registerKeys(const DataHeaderElement &dhe, StoreGateSvc *store)
Register all hash keys for one DH Element.
static const DbType POOL_StorageType
Definition DbType.h:84

◆ updateAddress()

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

Update a transient address.

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

Definition at line 137 of file CondProxyProvider.cxx.

139 {
140 return StatusCode::FAILURE;
141}

Member Data Documentation

◆ m_athenaPoolCnvSvc

ServiceHandle<IAthenaPoolCnvSvc> CondProxyProvider::m_athenaPoolCnvSvc {this, "ConversionService", "AthenaPoolCnvSvc"}
private

Definition at line 56 of file CondProxyProvider.h.

56{this, "ConversionService", "AthenaPoolCnvSvc"};

◆ m_contextId

unsigned int CondProxyProvider::m_contextId
private

Definition at line 57 of file CondProxyProvider.h.

◆ m_inputCollectionsIterator

std::vector<std::string>::const_iterator CondProxyProvider::m_inputCollectionsIterator {}
private

Definition at line 63 of file CondProxyProvider.h.

63{};

◆ m_inputCollectionsProp

Gaudi::Property<std::vector<std::string> > CondProxyProvider::m_inputCollectionsProp { this, "InputCollections", {}, "Files to read", "OrderedSet<std::string>" }
private

InputCollections, vector with names of the input collections.

Definition at line 61 of file CondProxyProvider.h.

62{ this, "InputCollections", {}, "Files to read", "OrderedSet<std::string>" };

The documentation for this class was generated from the following files: