diff --git a/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h b/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h index 8277101a17b43fdc08d15bb0052d5a5339526daf..6951cddbd9d85f99fd833d5cd703e67e8dedc331 100644 --- a/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h +++ b/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h @@ -309,4 +309,6 @@ CLASS_DEF( CondCont<CaloLocalHadCoeff> , 82862607 , 1 ) #include "SGTools/BaseInfo.h" SG_BASE( CondCont<CaloLocalHadCoeff>, CondContBase ); +REGISTER_CC( CaloLocalHadCoeff ) + #endif diff --git a/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveExOpts.py b/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveExOpts.py index 6c08672b7976c9fd1e66ae6e3af14b3b003fee50..2881957c00056d3c49a88e332a9ed49363059638 100644 --- a/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveExOpts.py +++ b/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveExOpts.py @@ -4,6 +4,8 @@ from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() +from AthenaCommon.AlgSequence import AthSequencer +condSeq = AthSequencer("AthCondSeq") #---------------------------------------------------------------------------------# # MT-specific code @@ -55,7 +57,7 @@ topSequence+=xAODMaker__EventInfoCnvAlg() # NEW Conditions access infrastructure # from IOVSvc.IOVSvcConf import CondInputLoader -topSequence += CondInputLoader( "CondInputLoader", OutputLevel=DEBUG, ) +condSeq += CondInputLoader( "CondInputLoader", OutputLevel=DEBUG ) import StoreGate.StoreGateConf as StoreGateConf svcMgr += StoreGateConf.StoreGateSvc("ConditionStore") diff --git a/Calorimeter/CaloRec/src/CaloClusterMaker.cxx b/Calorimeter/CaloRec/src/CaloClusterMaker.cxx index f6bdf2a0a8fd5d1a17c1f19de09eec66e2c657f5..0632c26551343ba7bb621dec0bc5734127ebd218 100644 --- a/Calorimeter/CaloRec/src/CaloClusterMaker.cxx +++ b/Calorimeter/CaloRec/src/CaloClusterMaker.cxx @@ -89,23 +89,23 @@ CaloClusterMaker::~CaloClusterMaker() StatusCode CaloClusterMaker::initialize() { - //Retrieve maker tools - for (auto tool : m_clusterMakerTools) { - StatusCode sc=tool.retrieve(); - if (sc.isFailure()) - ATH_MSG_ERROR("Failed to retrieve maker tool " << tool); - else - ATH_MSG_DEBUG("Successfully retrieved maker tool " << tool); - }//end loop over maker tools + + if (m_clusterMakerTools.retrieve().isFailure()) { + ATH_MSG_ERROR("Failed to retrieve maker ToolHandleArray " + << m_clusterMakerTools); + } else { + ATH_MSG_DEBUG("Successfully retrieved maker ToolHandleArray " + << m_clusterMakerTools); + } - for (auto tool : m_clusterCorrectionTools) { - StatusCode sc=tool.retrieve(); - if (sc.isFailure()) - ATH_MSG_ERROR("Failed to retrieve correction tool " << tool); - else - ATH_MSG_DEBUG("Successfully retrieved correction tool " << tool); - }//end loop over correction tools + if (m_clusterCorrectionTools.retrieve().isFailure()) { + ATH_MSG_ERROR("Failed to retrieve correction ToolHandleArray " + << m_clusterCorrectionTools); + } else { + ATH_MSG_DEBUG("Successfully retrieved correction ToolHandleArray " + << m_clusterCorrectionTools); + } if (m_chronoTools) { msg(MSG::INFO) << "Will use ChronoStatSvc to monitor ClusterMaker and ClusterCorrection tools" << endmsg; diff --git a/Control/AthenaBaseComps/AthenaBaseComps/AthFilterAlgorithm.h b/Control/AthenaBaseComps/AthenaBaseComps/AthFilterAlgorithm.h index 8f3c8dd508856917e76ea138bd8cb4aa75a48187..cdacea9352d19a93e1aeea606df058a73feb1e48 100644 --- a/Control/AthenaBaseComps/AthenaBaseComps/AthFilterAlgorithm.h +++ b/Control/AthenaBaseComps/AthenaBaseComps/AthFilterAlgorithm.h @@ -51,7 +51,7 @@ class AthFilterAlgorithm virtual StatusCode sysInitialize(); /// Set the filter passed flag to the specified state - virtual void setFilterPassed( bool state ); + virtual void setFilterPassed( bool state ) const; /// @brief helper method to ease the setting of this filter's description /// in derived classes diff --git a/Control/AthenaBaseComps/src/AthFilterAlgorithm.cxx b/Control/AthenaBaseComps/src/AthFilterAlgorithm.cxx index 348312a570bc372f146d614d9141b07bf7eef86f..312403758b8c425afc32218dd3177a14ed3f8cb9 100644 --- a/Control/AthenaBaseComps/src/AthFilterAlgorithm.cxx +++ b/Control/AthenaBaseComps/src/AthFilterAlgorithm.cxx @@ -96,7 +96,7 @@ AthFilterAlgorithm::sysInitialize() /// Set the filter passed flag to the specified state void -AthFilterAlgorithm::setFilterPassed( bool state ) +AthFilterAlgorithm::setFilterPassed( bool state ) const { AthAlgorithm::setFilterPassed(state); diff --git a/Control/AthenaCommon/python/AppMgr.py b/Control/AthenaCommon/python/AppMgr.py index 89bfcae52fd482d885e9f578534bd7cd87855f98..33ae6d0ba62569761fc307a8cb7a8629a3498082 100755 --- a/Control/AthenaCommon/python/AppMgr.py +++ b/Control/AthenaCommon/python/AppMgr.py @@ -306,8 +306,19 @@ class AthAppMgr( AppMgr ): # XXX: should we discard empty sequences ? # might save some CPU and memory... - athAllAlgSeq += athCondSeq - athAllAlgSeq += athAlgSeq + + # ensure that the CondInputLoader gets initialized after all + # other user Algorithms for MT so that base classes of data deps + # can be correctly determined. In MT, the order of execution + # is irrelevant (determined by data deps). But for serial, we + # need the CondAlgs to execute first, so the ordering changes. + from AthenaCommon.ConcurrencyFlags import jobproperties as jp + if ( jp.ConcurrencyFlags.NumThreads() > 0 ) : + athAllAlgSeq += athAlgSeq + athAllAlgSeq += athCondSeq + else: + athAllAlgSeq += athCondSeq + athAllAlgSeq += athAlgSeq athAlgEvtSeq += athBeginSeq athAlgEvtSeq += athAllAlgSeq diff --git a/Control/AthenaExamples/AthExHive/src/CondAlgX.cxx b/Control/AthenaExamples/AthExHive/src/CondAlgX.cxx index ecfe2ea94d60262f3023e7b58e778ecd22202255..4b6eed6f9ff7ce0d3bed99830b2faa65013d014b 100644 --- a/Control/AthenaExamples/AthExHive/src/CondAlgX.cxx +++ b/Control/AthenaExamples/AthExHive/src/CondAlgX.cxx @@ -49,7 +49,7 @@ StatusCode CondAlgX::initialize() { return StatusCode::FAILURE; } - if (m_cs->regHandle(this, m_wchk, m_wchk.dbKey()).isFailure()) { + if (m_cs->regHandle(this, m_wchk).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_wchk.fullKey() << " with CondSvc"); return StatusCode::FAILURE; diff --git a/Control/AthenaExamples/AthExHive/src/CondAlgY.cxx b/Control/AthenaExamples/AthExHive/src/CondAlgY.cxx index 49b0456cab7adfe1fe07bae164a801a91f58ed6e..a8522719513dd76a768ca1338bc090f066dbe5bb 100644 --- a/Control/AthenaExamples/AthExHive/src/CondAlgY.cxx +++ b/Control/AthenaExamples/AthExHive/src/CondAlgY.cxx @@ -49,13 +49,13 @@ StatusCode CondAlgY::initialize() { return StatusCode::FAILURE; } - if (m_cs->regHandle(this, m_wch1, m_wch1.dbKey()).isFailure()) { + if (m_cs->regHandle(this, m_wch1).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_wch1.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } - if (m_cs->regHandle(this, m_wch2, m_wch2.dbKey()).isFailure()) { + if (m_cs->regHandle(this, m_wch2).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_wch2.fullKey() << " with CondSvc"); return StatusCode::FAILURE; diff --git a/Control/AthenaKernel/AthenaKernel/CondCont.h b/Control/AthenaKernel/AthenaKernel/CondCont.h index 2492e8174a5d6a5bc6a234ede16366b878cd62be..8bb627788f145f294ab5275d10f3297c38ffe768 100644 --- a/Control/AthenaKernel/AthenaKernel/CondCont.h +++ b/Control/AthenaKernel/AthenaKernel/CondCont.h @@ -1,8 +1,7 @@ -// This file's extension implies that it's C, but it's really -*- C++ -*-. /* * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration. */ -// $Id$ +// /** * @file AthenaKernel/CondCont.h * @author Vakho, Charles, Scott @@ -403,12 +402,13 @@ protected: EventIDRange* r) const override; -private: +public: /// Helper to ensure that the inheritance information for this class /// gets initialized. static void registerBaseInit(); +private: /// Mutex used to protect the container. typedef std::mutex mutex_t; @@ -431,6 +431,8 @@ private: #include "AthenaKernel/CondCont.icc" +#include "AthenaKernel/CondContMaker.h" +#define REGISTER_CC(T) static CondContainer::CondContMaker<T> maker_ ## T{}; #endif // not ATHENAKERNEL_CONDCONT_H diff --git a/Control/AthenaKernel/AthenaKernel/CondContFactory.h b/Control/AthenaKernel/AthenaKernel/CondContFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..abc4205918e3b8e5b42ad50e70b248b967f988cf --- /dev/null +++ b/Control/AthenaKernel/AthenaKernel/CondContFactory.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration. + */ + +#ifndef ATHENAKERNEL_CONDCONTFACT_H +#define ATHENAKERNEL_CONDCONTFACT_H 1 + +#include "AthenaKernel/ICondContMaker.h" + +#include <map> +#include <string> +#include <mutex> + +class CondContBase; + +namespace CondContainer { + class CondContFactory { + public: + static CondContFactory& Instance(); + void regMaker(const CLID& clid, ICondContMaker* maker); + CondContBase* Create(const CLID& clid, const std::string& key) const; + + private: + CondContFactory(){} + + CondContFactory(const CondContFactory&); + CondContFactory& operator=(const CondContFactory&); + + std::map<CLID, ICondContMaker*> m_makers; + mutable std::mutex m_mapMutex; + }; +} + +#endif diff --git a/Control/AthenaKernel/AthenaKernel/CondContMaker.h b/Control/AthenaKernel/AthenaKernel/CondContMaker.h new file mode 100644 index 0000000000000000000000000000000000000000..0cbbe68b9b34ee7fe89bfd52c3710e6ce1802277 --- /dev/null +++ b/Control/AthenaKernel/AthenaKernel/CondContMaker.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration. + */ + +#ifndef ATHENAKERNEL_CONDCONTMAKER_H +#define ATHENAKERNEL_CONDCONTMAKER_H 1 + +#include "AthenaKernel/ICondContMaker.h" +#include "AthenaKernel/CondContFactory.h" +#include "AthenaKernel/ClassID_traits.h" +#include "GaudiKernel/DataObjID.h" + +class CondContBase; + +namespace CondContainer { + template <typename T> + class CondContMaker : public ICondContMaker { + public: + CondContMaker() { + CondContFactory::Instance().regMaker( ClassID_traits<T>::ID() , this ); + } + + virtual CondContBase* Create(const CLID& clid, const std::string& key) const { + DataObjID id(clid,key); + + return new CondCont<T>(id); + } + }; +} + + +#endif + diff --git a/Control/AthenaKernel/AthenaKernel/ICondContMaker.h b/Control/AthenaKernel/AthenaKernel/ICondContMaker.h new file mode 100644 index 0000000000000000000000000000000000000000..3eda36d3e46ec9a54e9a7bfe19d085789e775180 --- /dev/null +++ b/Control/AthenaKernel/AthenaKernel/ICondContMaker.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration. + */ + + +#ifndef ATHENAKERNEL_ICONDCONTMAKER_H +#define ATHENAKERNEL_ICONDCONTMAKER_H 1 + +#include <string> +#include "GaudiKernel/ClassID.h" + +class CondContBase; + +namespace CondContainer { + + class ICondContMaker { + public: + virtual CondContBase* Create(const CLID& clid, const std::string& key) const = 0; + virtual ~ICondContMaker() {} + }; +} + +#endif diff --git a/Control/AthenaKernel/share/CondCont_test.ref b/Control/AthenaKernel/share/CondCont_test.ref index cc5a924c7a3e31f7009a1bb25f1b5c0654157317..b230d82d52c2ae66e44f26bc366fc14eee3e6a09 100644 --- a/Control/AthenaKernel/share/CondCont_test.ref +++ b/Control/AthenaKernel/share/CondCont_test.ref @@ -1,5 +1,5 @@ test1 -CondCont<T>::insert error: EventIDRange {[40,4294967295,l:2] - [4294967295,4294967295,543:0]} is neither fully RunEvent nor TimeStamp +CondCont<T>::insert error: EventIDRange {[40,l:2] - [4294967295,t:543]} is neither fully RunEvent nor TimeStamp test2 -CondCont<T>::insert error: EventIDRange {[40,4294967295,l:2] - [4294967295,4294967295,543:0]} is neither fully RunEvent nor TimeStamp +CondCont<T>::insert error: EventIDRange {[40,l:2] - [4294967295,t:543]} is neither fully RunEvent nor TimeStamp CondCont<T>::insert error: Not most-derived class. diff --git a/Control/AthenaKernel/src/CondContFactory.cxx b/Control/AthenaKernel/src/CondContFactory.cxx new file mode 100644 index 0000000000000000000000000000000000000000..cc86c40d4e6693631c70a90997364a7aea7b0efb --- /dev/null +++ b/Control/AthenaKernel/src/CondContFactory.cxx @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration. + */ + + +#include "AthenaKernel/CondContFactory.h" +#include "AthenaKernel/CondCont.h" +#include "CxxUtils/checker_macros.h" +#include <sstream> +#include <stdexcept> + +using namespace CondContainer; + +CondContFactory& CondContFactory::Instance() { + static CondContFactory factory ATLAS_THREAD_SAFE; + return factory; +} + +void CondContFactory::regMaker(const CLID& key, ICondContMaker* maker) { + std::lock_guard<std::mutex> guard(m_mapMutex); + if (m_makers.find(key) != m_makers.end()) { + // std::cerr << "multiple makers for CLID " << key << std::endl; + } else { + m_makers[key] = maker; + } +} + +CondContBase* CondContFactory::Create( const CLID& clid, const std::string& key ) const { + std::lock_guard<std::mutex> guard(m_mapMutex); + auto i = m_makers.find(clid); + if ( i == m_makers.end()) { + return nullptr; + } + ICondContMaker* maker = i->second; + return maker->Create(clid,key); +} diff --git a/Control/AthenaKernel/test/CondCont_test.cxx b/Control/AthenaKernel/test/CondCont_test.cxx index a3a938bdf2f2ddaa3955c8a33372e8046c01a901..93aabbee8446867cf64c0f08876e7b7d9485507e 100644 --- a/Control/AthenaKernel/test/CondCont_test.cxx +++ b/Control/AthenaKernel/test/CondCont_test.cxx @@ -55,7 +55,7 @@ CLASS_DEF(CondCont<D>, 932847547, 0) EventIDBase runlbn (int run, int lbn) { return EventIDBase (run, - EventIDBase::UNDEFNUM, // event + EventIDBase::UNDEFEVT, // event EventIDBase::UNDEFNUM, // timestamp EventIDBase::UNDEFNUM, // timestamp ns lbn); @@ -65,13 +65,13 @@ EventIDBase runlbn (int run, int lbn) EventIDBase timestamp (int t) { return EventIDBase (EventIDBase::UNDEFNUM, // run - EventIDBase::UNDEFNUM, // event + EventIDBase::UNDEFEVT, // event t); } const EventIDRange r1 (runlbn (10, 15), runlbn (10, 20)); -const EventIDRange r2 (runlbn (20, 17), runlbn (EventIDBase::UNDEFNUM/2, EventIDBase::UNDEFNUM)); +const EventIDRange r2 (runlbn (20, 17), runlbn (EventIDBase::UNDEFNUM/2, EventIDBase::UNDEFNUM/2)); const EventIDRange r3 (timestamp (123), timestamp (456)); @@ -103,10 +103,13 @@ RE: [0]\n"); std::ostringstream exp2; exp2 << "id: ('key') proxy: 0\n" << "clock: [1]\n" - << "{[4294967295,4294967295,123:0] - [4294967295,4294967295,456:0]} " << ptrs[2] << "\n" + << "{[4294967295,t:123] - [4294967295,t:456]} " << ptrs[2] << "\n" << "RE: [2]\n" - << "{[20,4294967295,l:17] - [2147483647,4294967295]} " << ptrs[1] << "\n" - << "{[10,4294967295,l:15] - [10,4294967295,l:20]} " << ptrs[0] << "\n"; + << "{[20,l:17] - [2147483647,l:2147483647]} " << ptrs[1] << "\n" + << "{[10,l:15] - [10,l:20]} " << ptrs[0] << "\n"; + + // std::cout << "ss2: " << ss2.str() << "\nexp2: " << exp2.str() << "\n"; + assert (ss2.str() == exp2.str()); auto t4 = std::make_unique<T> (4); diff --git a/Control/AthenaServices/src/AthenaEventLoopMgr.cxx b/Control/AthenaServices/src/AthenaEventLoopMgr.cxx index 6d1c4bace951e9917c16841bb0410ecad237b6b4..a7da9750076c3fb92315e6dfcfc3335186b190da 100644 --- a/Control/AthenaServices/src/AthenaEventLoopMgr.cxx +++ b/Control/AthenaServices/src/AthenaEventLoopMgr.cxx @@ -635,8 +635,7 @@ StatusCode AthenaEventLoopMgr::executeAlgorithms(const EventContext& ctx) { // this duplicates what is already done in Algorithm::sysExecute, which // calls Algorithm::setExecuted, but eventually we plan to remove that // function - m_aess->algExecState(*ita,ctx).setExecuted(true); - m_aess->algExecState(*ita,ctx).setExecStatus(sc); + m_aess->algExecState(*ita,ctx).setState(AlgExecState::State::Done, sc); if ( !sc.isSuccess() ) { m_msg << MSG::INFO << "Execution of algorithm " << (*ita)->name() << " failed with StatusCode::" << sc diff --git a/Control/AthenaServices/src/AthenaHiveEventLoopMgr.cxx b/Control/AthenaServices/src/AthenaHiveEventLoopMgr.cxx index f24be10c1853f8edf07332e2ae475ef6757fdad3..7492069ec7c73654eca9d5062484471880566831 100644 --- a/Control/AthenaServices/src/AthenaHiveEventLoopMgr.cxx +++ b/Control/AthenaServices/src/AthenaHiveEventLoopMgr.cxx @@ -116,6 +116,8 @@ AthenaHiveEventLoopMgr::AthenaHiveEventLoopMgr(const std::string& nam, declareProperty("FakeTimestampInterval", m_timeStampInt = 1, "timestamp interval between events when creating Events " "without an EventSelector"); + declareProperty("ShowTimestamp", m_showTimeStamp = false, + "show timestamp in heartbeat"); m_scheduledStop = false; @@ -730,17 +732,29 @@ StatusCode AthenaHiveEventLoopMgr::executeEvent(void* createdEvts_IntPtr ) m_doEvtHeartbeat = (m_eventPrintoutInterval.value() > 0 && 0 == (m_nev % m_eventPrintoutInterval.value())); if (m_doEvtHeartbeat) { - if(!m_useTools) - m_msg << MSG::INFO - << " ===>>> start processing event #" << evtNumber << ", run #" << m_currentRun - << " on slot " << evtContext->slot() << ", " << m_proc - << " events processed so far <<<===" << endmsg; - else - m_msg << MSG::INFO - << " ===>>> start processing event #" << evtNumber << ", run #" << m_currentRun - << " on slot " << evtContext->slot() << ", " - << m_nev << " events read and " << m_proc - << " events processed so far <<<===" << endmsg; + if(!m_useTools) { + m_msg << MSG::INFO + << " ===>>> start processing event #" << evtNumber + << ", run #" << m_currentRun; + if (m_showTimeStamp && pEvent->event_ID()->isTimeStamp()) { + m_msg << " [t=" << pEvent->event_ID()->time_stamp() << "."; + if (pEvent->event_ID()->time_stamp_ns_offset() != 0) { + m_msg << std::setfill('0') << std::setw(9); + } else { + m_msg << "0"; + } + m_msg << "]"; + } + m_msg << " on slot " << evtContext->slot() << ", " << m_proc + << " events processed so far <<<===" << endmsg; + } else { + m_msg << MSG::INFO + << " ===>>> start processing event #" << evtNumber + << ", run #" << m_currentRun + << " on slot " << evtContext->slot() << ", " + << m_nev << " events read and " << m_proc + << " events processed so far <<<===" << endmsg; + } } // Reset the timeout singleton diff --git a/Control/AthenaServices/src/AthenaHiveEventLoopMgr.h b/Control/AthenaServices/src/AthenaHiveEventLoopMgr.h index 9eeee04c629c4e9eb76801e5b55e6b99f05e4d3c..85fc9bb521208f6ee3849dda12d81d8faf99430e 100644 --- a/Control/AthenaServices/src/AthenaHiveEventLoopMgr.h +++ b/Control/AthenaServices/src/AthenaHiveEventLoopMgr.h @@ -284,6 +284,7 @@ private: bool m_doEvtHeartbeat; unsigned int m_flmbi, m_timeStampInt; + bool m_showTimeStamp; // from MinimalEventLoopMgr public: diff --git a/Control/AthenaServices/src/DecisionSvc.cxx b/Control/AthenaServices/src/DecisionSvc.cxx index 8b908983aab9e2033e907ec5a35b6291f7cc04d2..0984f387801b5b29a8ca595f20f0c3422ebbaaf5 100644 --- a/Control/AthenaServices/src/DecisionSvc.cxx +++ b/Control/AthenaServices/src/DecisionSvc.cxx @@ -345,7 +345,7 @@ DecisionSvc::isEventAccepted( const std::string& stream, result = false; for (auto it = vecAlgs.begin(); it != vecAlgs.end(); it++) { bool isE,fp; - isE = m_algstateSvc->algExecState(*it,ectx).isExecuted(); + isE = (m_algstateSvc->algExecState(*it,ectx).state() == AlgExecState::State::Done); fp = m_algstateSvc->algExecState(*it,ectx).filterPassed(); if (isE && fp) { result = true; @@ -368,7 +368,7 @@ DecisionSvc::isEventAccepted( const std::string& stream, if ( ! vecAlgs.empty( ) ) { for (auto it = vecAlgs.begin(); it != vecAlgs.end(); it++) { bool isE,fp; - isE = m_algstateSvc->algExecState(*it,ectx).isExecuted(); + isE = (m_algstateSvc->algExecState(*it,ectx).state() == AlgExecState::State::Done); fp = m_algstateSvc->algExecState(*it,ectx).filterPassed(); if (!isE || !fp) { result = false; @@ -391,7 +391,7 @@ DecisionSvc::isEventAccepted( const std::string& stream, if ( ! vecAlgs.empty( ) ) { for (auto it = vecAlgs.begin(); it != vecAlgs.end(); it++) { bool isE,fp; - isE = m_algstateSvc->algExecState(*it,ectx).isExecuted(); + isE = (m_algstateSvc->algExecState(*it,ectx).state() == AlgExecState::State::Done); fp = m_algstateSvc->algExecState(*it,ectx).filterPassed(); if ( isE && fp ) { result = false; diff --git a/Control/IOVSvc/IOVSvc/CondSvc.h b/Control/IOVSvc/IOVSvc/CondSvc.h index bdc1e5ddd8137a637d3e2fdaa77348e593fa94ea..de8790b8b72582c6fd1a352ecbc92a67b8b1de25 100644 --- a/Control/IOVSvc/IOVSvc/CondSvc.h +++ b/Control/IOVSvc/IOVSvc/CondSvc.h @@ -16,6 +16,9 @@ #include <vector> #include <mutex> +class ConditionSlotFuture; +class ICondtionIOSvc; + class CondSvc: public extends1<AthService, ICondSvc> { public: @@ -28,8 +31,8 @@ public: // from ICondSvc public: - virtual StatusCode regHandle(IAlgorithm* alg, const Gaudi::DataHandle& id, - const std::string& key); + virtual StatusCode regHandle(IAlgorithm* alg, const Gaudi::DataHandle& id); + // const std::string& key); virtual bool getInvalidIDs(const EventContext&, DataObjIDColl& ids); virtual bool getValidIDs(const EventContext&, DataObjIDColl& ids); @@ -40,10 +43,28 @@ public: virtual const std::set<IAlgorithm*>& condAlgs() const { return m_condAlgs; } virtual bool isRegistered(const DataObjID&) const; + virtual bool isRegistered(IAlgorithm*) const; + virtual const DataObjIDColl& conditionIDs() const; - virtual void dump() const; - virtual void dump(std::ostringstream&) const; + // virtual void dump() const; + virtual void dump(std::ostream&) const; + +public: + // unimplemented interfaces + + /// Asynchronously setup conditions + virtual ConditionSlotFuture* startConditionSetup(const EventContext&) { + return nullptr; + } + + /// register an IConditionIOSvc (alternative to Algorithm processing of + /// Conditions) + virtual StatusCode registerConditionIOSvc(IConditionIOSvc*) { + return StatusCode::FAILURE; + } + + private: @@ -73,7 +94,7 @@ private: id_map_t m_idMap; alg_map_t m_algMap; - std::map<std::string, DataObjID> m_keyMap; + // std::map<std::string, DataObjID> m_keyMap; std::set<IAlgorithm*> m_condAlgs; DataObjIDColl m_condIDs; diff --git a/Control/IOVSvc/src/CondInputLoader.cxx b/Control/IOVSvc/src/CondInputLoader.cxx index f089c16d7bf4a1e0371537dac210c75d6030a828..4fb6be672dfb76f5491fb2a1f4dfdb0b03a7ba53 100644 --- a/Control/IOVSvc/src/CondInputLoader.cxx +++ b/Control/IOVSvc/src/CondInputLoader.cxx @@ -12,14 +12,18 @@ // FrameWork includes #include "GaudiKernel/Property.h" +#include "GaudiKernel/IClassIDSvc.h" #include "StoreGate/ReadHandle.h" #include "AthenaKernel/errorcheck.h" #include "AthenaKernel/IOVTime.h" #include "AthenaKernel/IOVRange.h" #include "AthenaKernel/IIOVDbSvc.h" #include "AthenaKernel/IIOVSvc.h" +#include "StoreGate/CondHandleKey.h" +#include "AthenaKernel/CondContMaker.h" #include "xAODEventInfo/EventInfo.h" +#include "SGTools/BaseInfo.h" /////////////////////////////////////////////////////////////////// // Public methods: @@ -29,10 +33,11 @@ //////////////// CondInputLoader::CondInputLoader( const std::string& name, ISvcLocator* pSvcLocator ) : - ::AthAlgorithm( name, pSvcLocator ), m_dump(false), + ::AthAlgorithm( name, pSvcLocator ), m_condStore("StoreGateSvc/ConditionStore", name), m_condSvc("CondSvc",name), - m_IOVSvc("IOVSvc",name) + m_IOVSvc("IOVSvc",name), + m_clidSvc("ClassIDSvc",name) { // @@ -48,7 +53,6 @@ CondInputLoader::CondInputLoader( const std::string& name, declareProperty( "Load", m_load); //->declareUpdateHandler(&CondInputLoader::loader, this); - declareProperty( "ShowEventDump", m_dump=false); } // Destructor @@ -90,13 +94,19 @@ CondInputLoader::initialize() return StatusCode::FAILURE; } + ServiceHandle<IClassIDSvc> m_clidSvc("ClassIDSvc", name()); + if (!m_clidSvc.isValid()) { + ATH_MSG_FATAL("unable to retrieve ClassIDSvc"); + return StatusCode::FAILURE; + } + std::vector<std::string> keys = idb->getKeyList(); std::string folderName, tg; IOVRange range; bool retrieved; unsigned long long br; float rt; - DataObjIDColl loadCopy; + DataObjIDColl handles_to_load; std::map<std::string,std::string> folderKeyMap; for (auto key : keys) { @@ -118,9 +128,13 @@ CondInputLoader::initialize() // } else { // ATH_MSG_DEBUG(" not remapping folder " << id.key()); } - SG::VarHandleKey vhk(id.clid(),id.key(),Gaudi::DataHandle::Writer, + if (id.key() == "") { + ATH_MSG_INFO("ignoring blank key for " << id ); + continue; + } + SG::VarHandleKey vhk(id.clid(),id.key(),Gaudi::DataHandle::Writer, StoreID::storeName(StoreID::CONDITION_STORE)); - loadCopy.emplace(vhk.fullKey()); + handles_to_load.emplace(vhk.fullKey()); } // for (auto key : keys) { @@ -130,7 +144,7 @@ CondInputLoader::initialize() // if (id.key() == folderName) { // ATH_MSG_DEBUG(" mapping folder " << folderName << " to SGkey " << key ); // id.updateKey( key ); - // loadCopy.insert(id); + // handles_to_load.insert(id); // m_keyFolderMap[key] = folderName; // break; // } @@ -140,7 +154,40 @@ CondInputLoader::initialize() // } // } - m_load = loadCopy; + m_load = handles_to_load; + m_handlesToCreate = handles_to_load; + + // Add in all the base classes known to StoreGate, in case a handle + // is read via its base class. These will be added to the output deps, + // and also registered with the CondSvc, as the scheduler needs this + // info. + + std::ostringstream ost; + ost << "Adding base classes:"; + for (auto &e : handles_to_load) { + // ignore empty keys + if (e.key() == "") continue; + + ost << "\n + " << e << " ->"; + CLID clid = e.clid(); + const SG::BaseInfoBase* bib = SG::BaseInfoBase::find( clid ); + if ( ! bib ) { + ost << " no bases"; + } else { + for (CLID clid2 : bib->get_bases()) { + if (clid2 != clid) { + std::string base("UNKNOWN"); + m_clidSvc->getTypeNameOfID(clid2,base).ignore(); + ost << " " << base << " (" << clid2 << ")"; + SG::VarHandleKey vhk(clid2,e.key(),Gaudi::DataHandle::Writer, + StoreID::storeName(StoreID::CONDITION_STORE)); + m_load.emplace(vhk.fullKey()); + } + } + } + } + ATH_MSG_INFO(ost.str()); + // Update the properties, set the ExtraOutputs for Alg deps const Property &p = getProperty("Load"); @@ -162,7 +209,7 @@ CondInputLoader::initialize() } else { SG::VarHandleKey vhk(e.clid(),e.key(),Gaudi::DataHandle::Writer, StoreID::storeName(StoreID::CONDITION_STORE)); - if (m_condSvc->regHandle(this, vhk, e.key()).isFailure()) { + if (m_condSvc->regHandle(this, vhk).isFailure()) { ATH_MSG_ERROR("Unable to register WriteCondHandle " << vhk.fullKey()); sc = StatusCode::FAILURE; } @@ -170,7 +217,6 @@ CondInputLoader::initialize() m_IOVSvc->ignoreProxy(vhk.fullKey().clid(), vhk.key()); } } - ATH_MSG_INFO(str.str()); return sc; @@ -188,34 +234,72 @@ CondInputLoader::finalize() //----------------------------------------------------------------------------- -StatusCode -CondInputLoader::execute() -{ - ATH_MSG_DEBUG ("Executing " << name() << "..."); +StatusCode +CondInputLoader::start() +{ + // + // now create the CondCont<T>. This has to be done after initialize(), + // as we need to make sure that all Condition Objects have been instantiated + // so as to fill the static condition obj registry via REGISTER_CC + // + // we use a VHK to store the info instead of a DataObjIDColl, as this saves + // us the trouble of stripping out the storename from the key later. + // - if (m_first) { - DataObjIDColl::iterator itr; - for (itr = m_load.begin(); itr != m_load.end(); ++itr) { - SG::VarHandleKey vhk(itr->clid(),itr->key(),Gaudi::DataHandle::Reader); - if ( ! m_condStore->contains<CondContBase>( vhk.key() ) ){ - ATH_MSG_INFO("ConditionStore does not contain a CondCont<> of " - << *itr << " (key: " << vhk.key() << ") " - << ". Either a ReadCondHandle was not initialized or " - << "no other Algorithm is using this Handle"); + DataObjIDColl::iterator ditr; + bool fail(false); + for (ditr = m_handlesToCreate.begin(); ditr != m_handlesToCreate.end(); ++ditr) { + SG::VarHandleKey vhk(ditr->clid(),ditr->key(),Gaudi::DataHandle::Writer); + if ( ! m_condStore->contains<CondContBase>( vhk.key() ) ){ + std::string tp("UNKNOWN"); + if (m_clidSvc->getTypeNameOfID(ditr->clid(),tp).isFailure()) { + ATH_MSG_WARNING("unable to convert clid " << ditr->clid() << " to a classname." + << "This is a BAD sign, but will try to continue"); + } + CondContBase* cb = + CondContainer::CondContFactory::Instance().Create( ditr->clid(), ditr->key() ); + if (cb == 0) { + ATH_MSG_ERROR("failed to create CondCont<" << tp + << "> clid=" << ditr->clid() + << " : no factory found"); + fail = true; } else { - m_vhk.push_back(vhk); + ATH_MSG_INFO("created CondCont<" << tp << "> with key '" + << ditr->key() << "'"); + if (m_condStore->record(cb, vhk.key()).isFailure()) { + ATH_MSG_ERROR("while creating a CondContBase for " + << vhk.fullKey()); + fail = true; + } else { + m_vhk.push_back(vhk); + } } + } else { + m_vhk.push_back(vhk); } - m_first = false; } + + if (fail && m_abort) { + ATH_MSG_FATAL("Unable to setup some of the requested CondCont<T>. " + << "Aborting"); + return StatusCode::FAILURE; + } + + return StatusCode::SUCCESS; + +} + + +//----------------------------------------------------------------------------- + +StatusCode +CondInputLoader::execute() +{ + ATH_MSG_DEBUG ("Executing " << name() << "..."); EventIDBase now; -#ifdef GAUDI_SYSEXECUTE_WITHCONTEXT if (!getContext().valid()) { ATH_MSG_WARNING("EventContext not valid! This should not happen!"); -#else - if(getContext()==nullptr) { -#endif const xAOD::EventInfo* thisEventInfo; if(evtStore()->retrieve(thisEventInfo)!=StatusCode::SUCCESS) { ATH_MSG_ERROR("Unable to get Event Info"); @@ -228,19 +312,11 @@ CondInputLoader::execute() now.set_time_stamp_ns_offset(thisEventInfo->timeStampNSOffset()); } else { -#ifdef GAUDI_SYSEXECUTE_WITHCONTEXT now.set_run_number(getContext().eventID().run_number()); now.set_event_number(getContext().eventID().event_number()); now.set_lumi_block(getContext().eventID().lumi_block()); now.set_time_stamp(getContext().eventID().time_stamp()); now.set_time_stamp_ns_offset(getContext().eventID().time_stamp_ns_offset()); -#else - now.set_run_number(getContext()->eventID().run_number()); - now.set_event_number(getContext()->eventID().event_number()); - now.set_lumi_block(getContext()->eventID().lumi_block()); - now.set_time_stamp(getContext()->eventID().time_stamp()); - now.set_time_stamp_ns_offset(getContext()->eventID().time_stamp_ns_offset()); -#endif } EventIDBase now_event = now; @@ -289,7 +365,7 @@ CondInputLoader::execute() } - if (m_dump) { + if (m_dumpEvt) { ATH_MSG_DEBUG(m_condStore->dump()); } diff --git a/Control/IOVSvc/src/CondInputLoader.h b/Control/IOVSvc/src/CondInputLoader.h index 0bc64e7c3165ed9bba842ed78180fa410aac55a8..af0aee1664a168290f876fbf49b3f8e971f27986 100644 --- a/Control/IOVSvc/src/CondInputLoader.h +++ b/Control/IOVSvc/src/CondInputLoader.h @@ -49,6 +49,7 @@ class CondInputLoader // Athena algorithm's Hooks virtual StatusCode initialize(); + virtual StatusCode start(); virtual StatusCode execute(); virtual StatusCode finalize(); @@ -75,15 +76,21 @@ class CondInputLoader // void loader(Property&); /// Containers - DataObjIDColl m_load; + DataObjIDColl m_load, m_handlesToCreate; std::vector< SG::VarHandleKey > m_vhk; - bool m_dump; + Gaudi::Property<bool> m_dumpEvt{ this, "DumpCondStore", false, + "dump the ConditionStore at the end execute"}; + Gaudi::Property<bool> m_abort {this, "AbortIfInitFails", true, + "Abort execution if unable to create the CondCont<T> in first event"}; + + bool m_first { true }; ServiceHandle<StoreGateSvc> m_condStore; ServiceHandle<ICondSvc> m_condSvc; ServiceHandle<IIOVSvc> m_IOVSvc; + ServiceHandle<IClassIDSvc> m_clidSvc; std::map<std::string,std::string> m_keyFolderMap; }; diff --git a/Control/IOVSvc/src/CondSvc.cxx b/Control/IOVSvc/src/CondSvc.cxx index 8d7cfb39a868944dad8881e87d3c548a575538b4..88c7f20cf1798bb8a9f6ff13894d9783e3ef1a15 100644 --- a/Control/IOVSvc/src/CondSvc.cxx +++ b/Control/IOVSvc/src/CondSvc.cxx @@ -5,6 +5,7 @@ #include "AthenaKernel/CondCont.h" #include "GaudiKernel/EventIDBase.h" #include "GaudiKernel/SvcFactory.h" +#include "AthenaKernel/StoreID.h" //--------------------------------------------------------------------------- @@ -43,21 +44,21 @@ CondSvc::initialize() { } //--------------------------------------------------------------------------- -void -CondSvc::dump() const { +// void +// CondSvc::dump() const { - std::ostringstream ost; - dump(ost); +// std::ostringstream ost; +// dump(ost); - info() << ost.str() << endmsg; +// info() << ost.str() << endmsg; -} +// } //--------------------------------------------------------------------------- void -CondSvc::dump(std::ostringstream& ost) const { +CondSvc::dump(std::ostream& ost) const { std::lock_guard<std::mutex> lock(m_lock); @@ -121,13 +122,12 @@ CondSvc::stop() { //--------------------------------------------------------------------------- StatusCode -CondSvc::regHandle(IAlgorithm* alg, const Gaudi::DataHandle& dh, - const std::string& key) { +CondSvc::regHandle(IAlgorithm* alg, const Gaudi::DataHandle& dh) { std::lock_guard<std::mutex> lock(m_lock); - ATH_MSG_DEBUG( "regHandle: alg: " << alg->name() << " id: " << dh.fullKey() - << " dBkey: " << key ); + ATH_MSG_DEBUG( "regHandle: alg: " << alg->name() << " id: " + << dh.fullKey() ); if (dh.mode() != Gaudi::DataHandle::Writer) { info() << dh.fullKey() << " is a ReadHandle. no need to register" @@ -149,7 +149,7 @@ CondSvc::regHandle(IAlgorithm* alg, const Gaudi::DataHandle& dh, // FIXME : so why is it a set<IAlgorithm*> ?? } - m_keyMap[key] = dh.fullKey(); + // m_keyMap[key] = dh.fullKey(); m_condAlgs.insert(alg); m_condIDs.emplace( dh.fullKey() ); @@ -292,9 +292,17 @@ CondSvc::isValidID(const EventContext& ctx, const DataObjID& id) const { EventIDBase now(ctx.eventID()); - CondContBase *cib; - if (m_sgs->retrieve(cib, id.key()).isSuccess()) { - return cib->valid(now); + // FIXME: this is ugly, but we need to strip out the name of the store. + std::string sk = id.key(); + if (sk.find(StoreID::storeName(StoreID::CONDITION_STORE)) == 0) { + sk.erase(0,15); + } + + if (m_sgs->contains<CondContBase>( sk ) ) { + CondContBase *cib; + if (m_sgs->retrieve(cib, sk).isSuccess()) { + return cib->valid(now); + } } return false; @@ -312,6 +320,17 @@ CondSvc::isRegistered(const DataObjID& id) const { //--------------------------------------------------------------------------- + +bool +CondSvc::isRegistered(IAlgorithm* ialg) const { + + return (m_condAlgs.find(ialg) != m_condAlgs.end()); + +} + +//--------------------------------------------------------------------------- + + const DataObjIDColl& CondSvc::conditionIDs() const { diff --git a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx index bc48912931be80594a5bd09f1feff854c647c6ab..3aaf48e34799876ff2accf73ae64f2a276cf82d6 100644 --- a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx +++ b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx @@ -750,8 +750,7 @@ StatusCode PileUpEventLoopMgr::executeAlgorithms() // this duplicates what is already done in Algorithm::sysExecute, which // calls Algorithm::setExecuted, but eventually we plan to remove that // function - m_aess->algExecState(*ita,*m_eventContext).setExecuted(true); - m_aess->algExecState(*ita,*m_eventContext).setExecStatus(sc); + m_aess->algExecState(*ita,*m_eventContext).setState(AlgExecState::State::Done, sc); if ( !sc.isSuccess() ) { ATH_MSG_INFO ( "Execution of algorithm " << diff --git a/Control/StoreGate/StoreGate/CondHandleKey.h b/Control/StoreGate/StoreGate/CondHandleKey.h index 40915798182c34af3a43cfb636b9cb7250c792b0..d38d4b295a90b3e92ed3dff25b4cbaa3ea591608 100644 --- a/Control/StoreGate/StoreGate/CondHandleKey.h +++ b/Control/StoreGate/StoreGate/CondHandleKey.h @@ -10,6 +10,7 @@ #include "StoreGate/StoreGateSvc.h" #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/MsgStream.h" +#include "GaudiKernel/IClassIDSvc.h" namespace SG { diff --git a/Control/StoreGate/StoreGate/CondHandleKey.icc b/Control/StoreGate/StoreGate/CondHandleKey.icc index 9c1b60089881196964b1ba232aef2b0db5f102c4..71b9e7838c7487750c1c3d37f2f3585ccdb30d76 100644 --- a/Control/StoreGate/StoreGate/CondHandleKey.icc +++ b/Control/StoreGate/StoreGate/CondHandleKey.icc @@ -3,6 +3,8 @@ */ #include "AthenaKernel/StoreID.h" +#include "GaudiKernel/System.h" +#include <typeinfo> namespace SG { @@ -14,7 +16,9 @@ namespace SG { StoreID::storeName(StoreID::CONDITION_STORE)), m_cs(StoreID::storeName(StoreID::CONDITION_STORE),"CondHandleKey"), m_dbKey(dbKey) - {} + { + CondCont<T>::registerBaseInit(); + } //--------------------------------------------------------------------------- @@ -37,33 +41,51 @@ namespace SG { return StatusCode::FAILURE; } - - if (m_cs->contains< CondCont<T> > (SG::VarHandleKey::key()) ) { - if (m_cs->retrieve(m_cc, SG::VarHandleKey::key()).isFailure()) { + + if (mode() == DataHandle::Writer) { + if (m_cs->contains< CondCont<T> > (SG::VarHandleKey::key()) ) { MsgStream msg(Athena::getMessageSvc(), "CondHandleKey"); msg << MSG::ERROR - << "CondHandleKey::init(): unable to retrieve CondCont of " - << Gaudi::DataHandle::fullKey() << " from " - << StoreID::storeName(StoreID::CONDITION_STORE) - << " with key " << SG::VarHandleKey::key() + << StoreID::storeName( StoreID::CONDITION_STORE ) + << " already contains a CondCont of type " + << Gaudi::DataHandle::fullKey() << endmsg; return StatusCode::FAILURE; + } else { + m_cc = new CondCont<T>(Gaudi::DataHandle::fullKey()); + if (m_cs->record(m_cc, SG::VarHandleKey::key()).isFailure()) { + MsgStream msg(Athena::getMessageSvc(), "CondHandleKey"); + msg << MSG::ERROR + << "CondHandleKey::init(): unable to record empty CondCont of " + << Gaudi::DataHandle::fullKey() << " in " + << StoreID::storeName( StoreID::CONDITION_STORE ) + << " with key " << SG::VarHandleKey::key() << endmsg; + delete m_cc; + m_cc = 0; + return StatusCode::FAILURE; + } + // std::cout << "recorded " << Gaudi::DataHandle::fullKey() + // << " with key " + // << SG::VarHandleKey::key() << std::endl; } } else { - m_cc = new CondCont<T>(Gaudi::DataHandle::fullKey()); - if (m_cs->record(m_cc, SG::VarHandleKey::key()).isFailure()) { - MsgStream msg(Athena::getMessageSvc(), "CondHandleKey"); - msg << MSG::ERROR - << "CondHandleKey::init(): unable to record empty CondCont of " - << Gaudi::DataHandle::fullKey() << " in " - << StoreID::storeName( StoreID::CONDITION_STORE ) - << " with key " << SG::VarHandleKey::key() << endmsg; - delete m_cc; - m_cc = 0; - return StatusCode::FAILURE; + // lets see if we get lucky and the Write alg already created the + // continer we want + if (m_cs->contains< CondCont<T> > (SG::VarHandleKey::key()) ) { + if (m_cs->retrieve(m_cc, SG::VarHandleKey::key()).isFailure()) { + MsgStream msg(Athena::getMessageSvc(), "CondHandleKey"); + msg << MSG::ERROR + << "CondHandleKey::init(): unable to retrieve CondCont of " + << Gaudi::DataHandle::fullKey() << " from " + << StoreID::storeName(StoreID::CONDITION_STORE) + << " with key " << SG::VarHandleKey::key() + << endmsg; + m_cc = 0; + return StatusCode::FAILURE; + } } } - + m_isInit = true; diff --git a/Control/StoreGate/StoreGate/ReadCondHandle.h b/Control/StoreGate/StoreGate/ReadCondHandle.h index ae81e5c1bdbf9b4d521b1c66da2d5c990206a250..0847d4aef06accfcbc9a95db5e3f3d435ec92edf 100644 --- a/Control/StoreGate/StoreGate/ReadCondHandle.h +++ b/Control/StoreGate/StoreGate/ReadCondHandle.h @@ -66,6 +66,8 @@ namespace SG { EventIDRange m_range; const SG::ReadCondHandleKey<T>& m_hkey; + + StoreGateSvc* m_cs {nullptr}; }; @@ -85,7 +87,8 @@ namespace SG { SG::VarHandleBase( key, &ctx ), m_eid( ctx.eventID() ), m_cc( key.getCC() ), - m_hkey(key) + m_hkey(key), + m_cs ( key.getCS() ) { EventIDBase::number_type conditionsRun = ctx.template getExtension<Atlas::ExtendedEventContext>()->conditionsRun(); @@ -104,11 +107,38 @@ namespace SG { } if (m_cc == 0) { - MsgStream msg(Athena::getMessageSvc(), "ReadCondHandle"); - msg << MSG::ERROR - << "ReadCondHandle : ptr to CondCont<T> is zero" - << endmsg; - throw std::runtime_error("ReadCondHandle: ptr to CondCont<T> is zero"); + // try to retrieve it + CondContBase *cb(nullptr); + if (m_cs->retrieve(cb, SG::VarHandleKey::key()).isFailure()) { + MsgStream msg(Athena::getMessageSvc(), "ReadCondHandle"); + msg << MSG::ERROR + << "can't retrieve " << Gaudi::DataHandle::fullKey() + << " via base class" << endmsg; + throw std::runtime_error("ReadCondHandle: ptr to CondCont<T> is zero"); + } else { + m_cc = dynamic_cast< CondCont<T>* > (cb); + if (m_cc == 0) { + MsgStream msg(Athena::getMessageSvc(), "ReadCondHandle"); + msg << MSG::ERROR + << "can't dcast CondContBase to " << Gaudi::DataHandle::fullKey() + << endmsg; + throw std::runtime_error("ReadCondHandle: ptr to CondCont<T> is zero"); + } + } + + + + + // if ( m_cs->retrieve(m_cc, SG::VarHandleKey::key()).isFailure() ) { + // MsgStream msg(Athena::getMessageSvc(), "ReadCondHandle"); + // msg << MSG::ERROR + // << "ReadCondHandle : unable to retrieve ReadCondHandle of type" + // << Gaudi::DataHandle::fullKey() << " from " + // << StoreID::storeName(StoreID::CONDITION_STORE) + // << " with key " << SG::VarHandleKey::key() + // << endmsg; + // throw std::runtime_error("ReadCondHandle: ptr to CondCont<T> is zero"); + // } } } diff --git a/DataQuality/DataQualityConfigurations/python/TestDisplayHI.py b/DataQuality/DataQualityConfigurations/python/TestDisplayHI.py index a5fe3200d22d83b1b2f6c6e860d7e5d57af1750d..aedb89865662c0680f9b7c052b1701bb435ad070 100644 --- a/DataQuality/DataQualityConfigurations/python/TestDisplayHI.py +++ b/DataQuality/DataQualityConfigurations/python/TestDisplayHI.py @@ -29,3 +29,4 @@ dqconfig.runlist = "runlist_TEST.xml" dqconfig.indexFile = "results_TEST.html" dqconfig.lockFile = "DQWebDisplay_TEST.lock" dqconfig.doHandi = False + diff --git a/Database/AthenaPOOL/AthenaPoolUtilities/AthenaPoolUtilities/CondAttrListCollection.h b/Database/AthenaPOOL/AthenaPoolUtilities/AthenaPoolUtilities/CondAttrListCollection.h index 84e38d27047fa7a34bf6528c1bdbdca86788ab52..913067b01539763e4542f16eec968a30d827fbe3 100644 --- a/Database/AthenaPOOL/AthenaPoolUtilities/AthenaPoolUtilities/CondAttrListCollection.h +++ b/Database/AthenaPOOL/AthenaPoolUtilities/AthenaPoolUtilities/CondAttrListCollection.h @@ -200,6 +200,7 @@ CLASS_DEF( CondCont<CondAttrListCollection>, 1223307417 , 1 ) #include "SGTools/BaseInfo.h" SG_BASE( CondCont<CondAttrListCollection>, CondContBase ); +REGISTER_CC( CondAttrListCollection ) //<<<<<< INLINE PUBLIC FUNCTIONS >>>>>> //<<<<<< INLINE MEMBER FUNCTIONS >>>>>> diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondCFloat.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondCFloat.h index f425b75883a4d0ecf964e37041d053cbc73a31aa..558b88273cc3105fa884dac58911c2d5005b6222 100755 --- a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondCFloat.h +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondCFloat.h @@ -76,6 +76,7 @@ class DetCondCFloat { CLASS_DEF(DetCondCFloat,247459965,1) CLASS_DEF( CondCont<DetCondCFloat> , 85257013 , 1 ) SG_BASE( CondCont<DetCondCFloat>, CondContBase ); +REGISTER_CC( DetCondCFloat ) // inline functions for DetCondCFloat diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/src/PixelCalibCondAlg.cxx b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/src/PixelCalibCondAlg.cxx index dd6c4d511745fdd68d5b154804e040c46b65201d..158124866898ad946e7ca9b8c54843cf629cf330 100644 --- a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/src/PixelCalibCondAlg.cxx +++ b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/src/PixelCalibCondAlg.cxx @@ -32,7 +32,7 @@ StatusCode PixelCalibCondAlg::initialize() ATH_CHECK( m_writeKey.initialize() ); // Register write handle - if (m_condSvc->regHandle(this, m_writeKey, m_writeKey.dbKey()).isFailure()) { + if (m_condSvc->regHandle(this, m_writeKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_writeKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsCondAlg.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsCondAlg.cxx index 5fb80b3393e50e396cb5b2cbfd4fa92b6ab67fb9..4ef44c85666fddf2aac4a191bbcc084090ea781c 100644 --- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsCondAlg.cxx +++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsCondAlg.cxx @@ -33,7 +33,7 @@ StatusCode SCT_MonitorConditionsCondAlg::initialize() // Write Cond Handle ATH_CHECK(m_writeKey.initialize()); // Register write handle - if(m_condSvc->regHandle(this, m_writeKey, m_writeKey.dbKey()).isFailure()) { + if(m_condSvc->regHandle(this, m_writeKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_writeKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_TdaqEnabledCondAlg.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_TdaqEnabledCondAlg.cxx index 18f28484e3661d5545a6392ca52ce30706591651..04e7a7019c1628ae5dcc65e94fc5866ddcb70de3 100644 --- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_TdaqEnabledCondAlg.cxx +++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_TdaqEnabledCondAlg.cxx @@ -41,7 +41,7 @@ StatusCode SCT_TdaqEnabledCondAlg::initialize() // Write Cond Handle ATH_CHECK( m_writeKey.initialize() ); // Register write handle - if(m_condSvc->regHandle(this, m_writeKey, m_writeKey.dbKey()).isFailure()) { + if(m_condSvc->regHandle(this, m_writeKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_writeKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelCondAlg.cxx b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelCondAlg.cxx index b49b7e22f2e99927410294d40b02d8dacdeb0b82..e3971217a460628f62cf356a9f5352d0c3d7c6aa 100644 --- a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelCondAlg.cxx +++ b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelCondAlg.cxx @@ -31,7 +31,7 @@ StatusCode LArBadChannelCondAlg::initialize() { ATH_CHECK( m_BCOutputKey.initialize() ); // Register write handle - if (m_condSvc->regHandle(this, m_BCOutputKey, m_BCOutputKey.dbKey()).isFailure()) { + if (m_condSvc->regHandle(this, m_BCOutputKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_BCOutputKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/LArCalorimeter/LArBadChannelTool/src/LArBadFebCondAlg.cxx b/LArCalorimeter/LArBadChannelTool/src/LArBadFebCondAlg.cxx index fd062101d63caed849291cc90c40c74669102a12..f121fd62ba4e03098644e93e5252e74c2010f26b 100644 --- a/LArCalorimeter/LArBadChannelTool/src/LArBadFebCondAlg.cxx +++ b/LArCalorimeter/LArBadChannelTool/src/LArBadFebCondAlg.cxx @@ -31,7 +31,7 @@ StatusCode LArBadFebCondAlg::initialize() { ATH_CHECK( m_BCOutputKey.initialize() ); // Register write handle - if (m_condSvc->regHandle(this, m_BCOutputKey, m_BCOutputKey.dbKey()).isFailure()) { + if (m_condSvc->regHandle(this, m_BCOutputKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_BCOutputKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/LArCalorimeter/LArRawConditions/LArRawConditions/LArHVScaleCorrComplete.h b/LArCalorimeter/LArRawConditions/LArRawConditions/LArHVScaleCorrComplete.h index abc24450a93ba53aaec9b9ff3f932c9172996271..c2472c80faffdafd9c6608ba7c807919196dc14d 100644 --- a/LArCalorimeter/LArRawConditions/LArRawConditions/LArHVScaleCorrComplete.h +++ b/LArCalorimeter/LArRawConditions/LArRawConditions/LArHVScaleCorrComplete.h @@ -34,4 +34,13 @@ class LArHVScaleCorrComplete: public ILArHVScaleCorr , }; CLASS_DEF( LArHVScaleCorrComplete, 220593802,1) + +// SG_BASE(LArHVScaleCorrComplete, ILArHVScaleCorr); + +#include "AthenaKernel/CondCont.h" +CONDCONT_BASE(LArHVScaleCorrComplete, ILArHVScaleCorr); +CLASS_DEF( CondCont<LArHVScaleCorrComplete> , 84955454 , 1 ) + +REGISTER_CC( LArHVScaleCorrComplete ) + #endif diff --git a/LArCalorimeter/LArRecUtils/src/LArADC2MeVCondAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArADC2MeVCondAlg.cxx index e341fd1ede28487a2812da3c90115f599fac1733..744f0d82471b49a7fe49fb47065d20bd53bdff9a 100644 --- a/LArCalorimeter/LArRecUtils/src/LArADC2MeVCondAlg.cxx +++ b/LArCalorimeter/LArRecUtils/src/LArADC2MeVCondAlg.cxx @@ -77,7 +77,7 @@ StatusCode LArADC2MeVCondAlg::initialize() { ATH_CHECK( m_ADC2MeVKey.initialize() ); // Register write handle - if (m_condSvc->regHandle(this, m_ADC2MeVKey, m_ADC2MeVKey.dbKey()).isFailure()) { + if (m_condSvc->regHandle(this, m_ADC2MeVKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_ADC2MeVKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/LArCalorimeter/LArRecUtils/src/LArFlatConditionsAlg.icc b/LArCalorimeter/LArRecUtils/src/LArFlatConditionsAlg.icc index d096853e1ba754636cba38b82e0a58058b363bc2..a96cfd5f9bede4f5610482c2e6edba163f98b0e7 100644 --- a/LArCalorimeter/LArRecUtils/src/LArFlatConditionsAlg.icc +++ b/LArCalorimeter/LArRecUtils/src/LArFlatConditionsAlg.icc @@ -28,7 +28,7 @@ StatusCode LArFlatConditionsAlg<T>::initialize() { ATH_CHECK( m_readKey.initialize() ); ATH_CHECK( m_writeKey.initialize() ); // Register write handle - if (m_condSvc->regHandle(this, m_writeKey, m_writeKey.dbKey()).isFailure()) { + if (m_condSvc->regHandle(this, m_writeKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_writeKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/LArCalorimeter/LArRecUtils/src/LArOnOffMappingAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArOnOffMappingAlg.cxx index adc2230ab10e2007a4d5992c0c09220f9d1a807c..b43b443bcfce9b939b69eae652b8843b75f0f91e 100644 --- a/LArCalorimeter/LArRecUtils/src/LArOnOffMappingAlg.cxx +++ b/LArCalorimeter/LArRecUtils/src/LArOnOffMappingAlg.cxx @@ -38,7 +38,7 @@ StatusCode LArOnOffMappingAlg::initialize() { ATH_CHECK( m_readKey.initialize() ); ATH_CHECK( m_writeKey.initialize() ); // Register write handle - if (m_condSvc->regHandle(this, m_writeKey, m_writeKey.dbKey()).isFailure()) { + if (m_condSvc->regHandle(this, m_writeKey).isFailure()) { ATH_MSG_ERROR("unable to register WriteCondHandle " << m_writeKey.fullKey() << " with CondSvc"); return StatusCode::FAILURE; } diff --git a/Projects/AthSimulation/externals.txt b/Projects/AthSimulation/externals.txt index 7b46c785fa0f02250ba2948d059728788cc0f178..b09b27407c93f1e84e7c4fa43e0971664f47e430 100644 --- a/Projects/AthSimulation/externals.txt +++ b/Projects/AthSimulation/externals.txt @@ -9,4 +9,4 @@ AthSimulationExternalsVersion = 4be765b4 # The version of atlas/Gaudi to use: -GaudiVersion = v28r2.011 +GaudiVersion = v29r0.001 diff --git a/Projects/Athena/externals.txt b/Projects/Athena/externals.txt index b5c4acb782cf1914907763fce2a4bef1a608bb20..dc15216343a194f9f84141eb87d1fcb944feb0ef 100644 --- a/Projects/Athena/externals.txt +++ b/Projects/Athena/externals.txt @@ -8,5 +8,5 @@ # The version of atlas/atlasexternals to use: AthenaExternalsVersion = 4be765b4 -# The version of atlas/Gaudi to use: -GaudiVersion = v28r2.011 +# The version of atlas/Gaudi to use: +GaudiVersion = v29r0.001 diff --git a/Trigger/TriggerSimulation/TrigSimTransforms/src/MergingEventLoopMgr.cxx b/Trigger/TriggerSimulation/TrigSimTransforms/src/MergingEventLoopMgr.cxx index d3a5483be0c170da6748400dcc50908a48e09c93..f63a4d0a8c3440edbb4ee7e9d358cfd77abca805 100644 --- a/Trigger/TriggerSimulation/TrigSimTransforms/src/MergingEventLoopMgr.cxx +++ b/Trigger/TriggerSimulation/TrigSimTransforms/src/MergingEventLoopMgr.cxx @@ -1038,8 +1038,7 @@ namespace TrigSim { // this duplicates what is already done in Algorithm::sysExecute, which // calls Algorithm::setExecuted, but eventually we plan to remove that // function - m_aess->algExecState(*it,m_eventContext).setExecuted(true); - m_aess->algExecState(*it,m_eventContext).setExecStatus(sc); + m_aess->algExecState(*it,m_eventContext).setState(AlgExecState::State::Done, sc); if(sc.isFailure()) { m_log << MSG::ERROR << "Algorithm failed in sysExecute(): "