Skip to content
Snippets Groups Projects
Commit ac74dbf5 authored by Jack Cranshaw's avatar Jack Cranshaw Committed by Graeme Stewart
Browse files

Fix problem with repeated events for athenaMP (ByteStreamCnvSvc-01-34-24-01)

parent 30437c01
No related branches found
No related tags found
No related merge requests found
......@@ -49,6 +49,7 @@ ByteStreamEventStorageInputSvc::ByteStreamEventStorageInputSvc(const std::string
m_mdSvc("StoreGateSvc/InputMetaDataStore", name),
m_incidentSvc("IncidentSvc", name),
m_attlistsvc("ByteStreamAttListMetadataSvc", name),
m_robProvider("ROBDataProviderSvc", name),
m_sequential(false),
m_fileCount(0) {
declareProperty("FullFileName", m_vExplicitFile);
......@@ -91,13 +92,17 @@ StatusCode ByteStreamEventStorageInputSvc::initialize() {
ATH_MSG_FATAL("Cannot get metadata AttListSvc.");
return(StatusCode::FAILURE);
}
// Initialize stores for user metadata
if (m_keys.size()>0) {
StatusCode sc = m_attlistsvc->readInit(m_keys);
if (sc.isFailure()) {
if (!m_robProvider.retrieve().isSuccess()) {
ATH_MSG_FATAL("Cannot get rob data provider");
return(StatusCode::FAILURE);
}
// Initialize stores for user metadata
if (m_keys.size()>0) {
StatusCode sc = m_attlistsvc->readInit(m_keys);
if (sc.isFailure()) {
msg() << MSG::WARNING << "readInit for AttributeList service failed" << endreq;
}
}
}
}
// Check if defunct properties set, and give instructions
if (m_procBadEvent != false) ATH_MSG_WARNING("ProcessBadEvent property has been moved to EventSelector, please use svgMgr.EventSelector.ProcessBadEvent instead");
......@@ -128,6 +133,9 @@ StatusCode ByteStreamEventStorageInputSvc::finalize() {
if (!m_incidentSvc.release().isSuccess()) {
ATH_MSG_WARNING("Cannot release IncidentSvc");
}
if (!m_robProvider.release().isSuccess()) {
ATH_MSG_WARNING("Cannot release rob data provider");
}
if (!m_mdSvc.release().isSuccess()) {
ATH_MSG_WARNING("Cannot release InputMetaDataStore");
}
......@@ -284,6 +292,10 @@ const RawEvent* ByteStreamEventStorageInputSvc::previousEvent() {
return 0;
}
// Set it for the data provider
m_robProvider->setNextEvent(m_re);
m_robProvider->setEventStatus(m_eventStatus);
// dump
if (m_dump) {
DumpFrags::dump(m_re);
......@@ -357,6 +369,10 @@ const RawEvent* ByteStreamEventStorageInputSvc::nextEvent() {
return 0;
}
// Set it for the data provider
m_robProvider->setNextEvent(m_re);
m_robProvider->setEventStatus(m_eventStatus);
//++m_totalEventCounter;
// dump
......@@ -496,6 +512,18 @@ StatusCode ByteStreamEventStorageInputSvc::generateDataHeader()
Dh->setStatus(DataHeader::Primary);
//add the Dhe self reference to the object vector
Dh->insert(Dhe);
if (m_sgSvc->contains<EventInfo>("ByteStreamEventInfo")) {
// Temporary event header pointer for retrieval of the old one , if exists
const DataHandle<EventInfo> Ei_temp;
//Ei_temp = m_sgSvc->retrieve<EventInfo>("ByteStreamEventInfo");
if (m_sgSvc->retrieve(Ei_temp,"ByteStreamEventInfo").isSuccess()) {
StatusCode sc = m_sgSvc->remove(Ei_temp.cptr());
if (!sc.isSuccess()) {
ATH_MSG_ERROR("Failed to remove ByteStreamEventInfo");
}
}
}
// Now add ref to EventInfo objects
IOpaqueAddress* iop = new ByteStreamAddress(ClassID_traits<EventInfo>::ID(), "ByteStreamEventInfo", "");
StatusCode ioc = m_sgSvc->recordAddress("ByteStreamEventInfo",iop);
......
......@@ -12,6 +12,7 @@
// Include files.
#include "ByteStreamCnvSvc/ByteStreamInputSvc.h"
#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
#include "ByteStreamCnvSvc/IByteStreamFreeMetadataSvc.h"
#include "ByteStreamData/RawEvent.h"
......@@ -83,6 +84,7 @@ private: // data
ServiceHandle<StoreGateSvc> m_mdSvc; //!< StoreGateSvc
ServiceHandle<IIncidentSvc> m_incidentSvc; //!< IncidentSvc
ServiceHandle<IByteStreamFreeMetadataSvc> m_attlistsvc;
ServiceHandle<IROBDataProviderSvc> m_robProvider;
private: // properties
std::vector<std::string> m_vExplicitFile; //!< prefix of the file names
......
......@@ -39,7 +39,6 @@ EventSelectorByteStream::EventSelectorByteStream(const std::string& name, ISvcLo
m_beginIter(0),
m_endIter(0),
m_eventSource(0),
m_robProvider("ROBDataProviderSvc", name),
m_incidentSvc("IncidentSvc", name),
m_evtStore( "StoreGateSvc", name ),
m_firstFileFired(false),
......@@ -148,10 +147,6 @@ StatusCode EventSelectorByteStream::initialize() {
return(StatusCode::FAILURE);
}
m_eventSource->addRef();
if (!m_robProvider.retrieve().isSuccess()) {
ATH_MSG_FATAL("Cannot get ROBDataProviderSvc");
return(StatusCode::FAILURE);
}
if (!m_evtStore.retrieve().isSuccess()) {
ATH_MSG_FATAL("Cannot get StoreGateSvc");
return(StatusCode::FAILURE);
......@@ -356,9 +351,6 @@ StatusCode EventSelectorByteStream::finalize() {
ATH_MSG_WARNING("Cannot release " << m_helperTools);
}
if (m_eventSource) m_eventSource->release();
if (!m_robProvider.release().isSuccess()) {
ATH_MSG_WARNING("Cannot release ROBDataProviderSvc");
}
// Finalize the Service base class.
return(AthService::finalize());
}
......@@ -499,9 +491,6 @@ StatusCode EventSelectorByteStream::next(IEvtSelector::Context& it) const {
}
ATH_MSG_WARNING("Continue with bad event");
}
// Set RE for rob data provider svc
m_robProvider->setNextEvent(pre);
m_robProvider->setEventStatus(m_eventSource->currentEventStatus());
// Check whether properties or tools reject this event
if ( m_NumEvents > m_SkipEvents &&
......@@ -928,9 +917,6 @@ StatusCode EventSelectorByteStream::readEvent(int maxevt) {
//________________________________________________________________________________
StatusCode EventSelectorByteStream::createAddress(const IEvtSelector::Context& /*it*/,
IOpaqueAddress*& iop) const {
const RawEvent* pre = m_eventSource->currentEvent();
m_robProvider->setNextEvent(pre);
m_robProvider->setEventStatus(m_eventSource->currentEventStatus());
SG::DataProxy* proxy = m_evtStore->proxy(ClassID_traits<DataHeader>::ID(),"ByteStreamDataHeader");
if (proxy !=0) {
iop = proxy->address();
......
......@@ -123,7 +123,6 @@ private:
StringArrayProperty m_inputCollectionsProp;
mutable std::vector<std::string>::const_iterator m_inputCollectionsIterator;
void inputCollectionsHandler(Property&);
ServiceHandle<IROBDataProviderSvc> m_robProvider;
ServiceHandle<IIncidentSvc> m_incidentSvc;
ServiceHandle<StoreGateSvc> m_evtStore;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment