diff --git a/Event/EventInfoMgt/src/TagInfoMgr.cxx b/Event/EventInfoMgt/src/TagInfoMgr.cxx index 78fcae24d6cedc1b4f90ee557b76052f13b6c176..6c45e39c9f2aa1aeb91ac48d0d5e81c93c2305c7 100755 --- a/Event/EventInfoMgt/src/TagInfoMgr.cxx +++ b/Event/EventInfoMgt/src/TagInfoMgr.cxx @@ -366,6 +366,7 @@ TagInfoMgr::fillTagInfo(const CondAttrListCollection* tagInfoCond, TagInfo* tagI } + StatusCode TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection* tagInfoCond) { @@ -393,11 +394,17 @@ TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection runNumber = m_currentRun; } else if( m_conditionsRun != EventIDBase::UNDEFNUM ) { - // For HLT use the conditionsRun retrieved from the first BeginRun incident + // Not completely sure of the use-case for the setting of the conditions run number, but + // this will be used if the current run number has not been set. RDS 2020/08 runNumber = m_conditionsRun; + ATH_MSG_INFO( "fillMetaData: Using conditions run number: " << m_conditionsRun << " rather then current run number: " << m_currentRun); } else { - ATH_MSG_ERROR( "fillMetaData: Could not get event info neither via retrieve nor from the EventSelector"); - return (StatusCode::FAILURE); + // For simulation, we may be in the initialization phase and + // must get the run number from the event selector + if (StatusCode::SUCCESS != getRunNumber (runNumber)) { + ATH_MSG_ERROR( "fillMetaData: Could not get event info neither via retrieve nor from the EventSelectror"); + return (StatusCode::FAILURE); + } } // Copy tags to AttributeList @@ -470,6 +477,67 @@ TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection } +StatusCode +TagInfoMgr::getRunNumber (unsigned int& runNumber) +{ + // check if EventSelector is being used to override run numbers if + // so, we return the runNumber from the properties of the + // EventSelector + + // Get run number parameter from the EventSelector + ATH_MSG_DEBUG( "getRunNumber: check if tag is set in jobOpts"); + // Get name of event selector from the application manager to + // make sure we get the one for MC signal events + IProperty* propertyServer(0); + StatusCode sc = serviceLocator()->service("ApplicationMgr", propertyServer); + if (sc != StatusCode::SUCCESS ) { + ATH_MSG_ERROR( "getRunNumber: Cannot get ApplicationMgr "); + return StatusCode::FAILURE; + } + StringProperty property("EvtSel", ""); + sc = propertyServer->getProperty(&property); + if (!sc.isSuccess()) { + ATH_MSG_ERROR( "getRunNumber: unable to get EvtSel: found " << property.value()); + return StatusCode::FAILURE; + } + // Get EventSelector for ApplicationMgr + std::string eventSelector = property.value(); + sc = serviceLocator()->service(eventSelector, propertyServer); + if (sc != StatusCode::SUCCESS ) { + ATH_MSG_ERROR( "getRunNumber: Cannot get EventSelector " << eventSelector); + return StatusCode::FAILURE; + } + BooleanProperty overrideRunNumber = BooleanProperty("OverrideRunNumber", false); + sc = propertyServer->getProperty(&overrideRunNumber); + if (!sc.isSuccess()) { + // Not all EventSelectors have this property, but we should + // not get here if the ES is not one for simulation => return failure + ATH_MSG_WARNING( "getRunNumber: unable to get OverrideRunNumber property from EventSelector "); + return StatusCode::FAILURE; + } + if (overrideRunNumber.value()) { + IntegerProperty runNumberProp = IntegerProperty("RunNumber", 0); + sc = propertyServer->getProperty(&runNumberProp); + if (!sc.isSuccess()) { + ATH_MSG_ERROR( "getRunNumber: unable to get RunNumber from EventSelector: found " + << runNumberProp.value()); + return StatusCode::FAILURE; + } + else { + runNumber = runNumberProp.value(); + ATH_MSG_DEBUG( "getRunNumber: Run number: " + << runNumber << " obtained from " + << eventSelector); + } + } + else { + ATH_MSG_ERROR( "getRunNumber: OverrideRunNumber from EventSelector is false "); + return StatusCode::FAILURE; + } + return StatusCode::SUCCESS; +} + + void TagInfoMgr::handle(const Incident& inc) { diff --git a/Event/EventInfoMgt/src/TagInfoMgr.h b/Event/EventInfoMgt/src/TagInfoMgr.h index 17e14a62ebcc45ae2d3fee442a15b0ab92565381..1813e63fc6fb52b3ee7aa55c801c19863e85f363 100755 --- a/Event/EventInfoMgt/src/TagInfoMgr.h +++ b/Event/EventInfoMgt/src/TagInfoMgr.h @@ -175,6 +175,7 @@ private: TagInfoMgr(); TagInfoMgr(const TagInfoMgr&); TagInfoMgr &operator=(const TagInfoMgr&); + StatusCode getRunNumber (unsigned int& runNumber); /////////////////////////////////////////////////////////////////// // Private data: