diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/AnotherConcreteSvc.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/AnotherConcreteSvc.h new file mode 100644 index 0000000000000000000000000000000000000000..46fa75bc3d7ae45e223825f6fb9dd4b1f9dcff7c --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/AnotherConcreteSvc.h @@ -0,0 +1,99 @@ +///////////////////////// -*- C++ -*- ///////////////////////////// + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// AnotherConcreteSvc.h +// Header file for class AnotherConcreteSvc +// Author: S.Binet<binet@cern.ch> +/////////////////////////////////////////////////////////////////// +#ifndef ATHEXJOBOPTIONS_ANOTHERCONCRETESVC_H +#define ATHEXJOBOPTIONS_ANOTHERCONCRETESVC_H 1 + +// STL includes +#include <string> + +// FrameWork includes +#include "AthenaBaseComps/AthService.h" + +// AthExJobOptions includes +#include "AthExJobOptions/IVirtualSvc.h" + +// Forward declaration +template <class TYPE> class SvcFactory; + +class AnotherConcreteSvc : virtual public IVirtualSvc, + public AthService +{ + +protected: + + friend class SvcFactory<AnotherConcreteSvc>; + + /////////////////////////////////////////////////////////////////// + // Public methods: + /////////////////////////////////////////////////////////////////// + public: + + // Copy constructor: + + /// Constructor with parameters: + AnotherConcreteSvc( const std::string& name, ISvcLocator* pSvcLocator ); + + /// Destructor: + virtual ~AnotherConcreteSvc(); + + /// Gaudi Service Implementation + //@{ + StatusCode initialize(); + StatusCode finalize(); + virtual StatusCode queryInterface( const InterfaceID& riid, + void** ppvInterface ); + //@} + + /////////////////////////////////////////////////////////////////// + // Const methods: + /////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // Non-const methods: + /////////////////////////////////////////////////////////////////// + + static const InterfaceID& interfaceID(); + + /** The very important message of the day + */ + StatusCode qotd( std::string& quote ); + + /////////////////////////////////////////////////////////////////// + // Private methods: + /////////////////////////////////////////////////////////////////// + private: + + /// Default constructor: + AnotherConcreteSvc(); + + /////////////////////////////////////////////////////////////////// + // Private data: + /////////////////////////////////////////////////////////////////// + private: + + /// The quote of the day + StringProperty m_qotd; + +}; + +/// I/O operators +////////////////////// + +/////////////////////////////////////////////////////////////////// +/// Inline methods: +/////////////////////////////////////////////////////////////////// + +inline const InterfaceID& AnotherConcreteSvc::interfaceID() +{ + return IVirtualSvc::interfaceID(); +} + +#endif //> ATHEXJOBOPTIONS_ANOTHERCONCRETESVC_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ConcreteSvc.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ConcreteSvc.h new file mode 100755 index 0000000000000000000000000000000000000000..511d5163395b09d6c8ab274def6e7c5b96f0190f --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ConcreteSvc.h @@ -0,0 +1,99 @@ +///////////////////////// -*- C++ -*- ///////////////////////////// + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// ConcreteSvc.h +// Header file for class ConcreteSvc +// Author: S.Binet<binet@cern.ch> +/////////////////////////////////////////////////////////////////// +#ifndef ATHEXJOBOPTIONS_CONCRETESVC_H +#define ATHEXJOBOPTIONS_CONCRETESVC_H 1 + +// STL includes +#include <string> + +// FrameWork includes +#include "AthenaBaseComps/AthService.h" + +// AthExJobOptions includes +#include "AthExJobOptions/IVirtualSvc.h" + +// Forward declaration +template <class TYPE> class SvcFactory; + +class ConcreteSvc : virtual public IVirtualSvc, + public AthService +{ + +protected: + + friend class SvcFactory<ConcreteSvc>; + + /////////////////////////////////////////////////////////////////// + // Public methods: + /////////////////////////////////////////////////////////////////// + public: + + // Copy constructor: + + /// Constructor with parameters: + ConcreteSvc( const std::string& name, ISvcLocator* pSvcLocator ); + + /// Destructor: + virtual ~ConcreteSvc(); + + /// Gaudi Service Implementation + //@{ + StatusCode initialize(); + StatusCode finalize(); + virtual StatusCode queryInterface( const InterfaceID& riid, + void** ppvInterface ); + //@} + + /////////////////////////////////////////////////////////////////// + // Const methods: + /////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // Non-const methods: + /////////////////////////////////////////////////////////////////// + + static const InterfaceID& interfaceID(); + + /** The very important message of the day + */ + StatusCode qotd( std::string& quote ); + + /////////////////////////////////////////////////////////////////// + // Private methods: + /////////////////////////////////////////////////////////////////// + private: + + /// Default constructor: + ConcreteSvc(); + + /////////////////////////////////////////////////////////////////// + // Private data: + /////////////////////////////////////////////////////////////////// + private: + + /// The quote of the day + StringProperty m_qotd; + +}; + +/// I/O operators +////////////////////// + +/////////////////////////////////////////////////////////////////// +/// Inline methods: +/////////////////////////////////////////////////////////////////// + +inline const InterfaceID& ConcreteSvc::interfaceID() +{ + return IVirtualSvc::interfaceID(); +} + +#endif //> ATHEXJOBOPTIONS_CONCRETESVC_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ConcreteTool.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ConcreteTool.h new file mode 100755 index 0000000000000000000000000000000000000000..718fd139b2e49a838bc244f27c99400e00bc238e --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ConcreteTool.h @@ -0,0 +1,41 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_CONCRETETOOL_H +#define ATHEXJOBOPTIONS_CONCRETETOOL_H 1 + +#include "AthExJobOptions/IVirtualTool.h" + +#include "AthenaBaseComps/AthAlgTool.h" + +#include <string> + + +///////////////////////////////////////////////////////////////////////////// + +class ConcreteTool : virtual public IVirtualTool, virtual public AthAlgTool { +public: + ConcreteTool( const std::string&, const std::string&, const IInterface* ); + +// to allow access to the IVirtualTool interface + StatusCode queryInterface( const InterfaceID& riid, void** ppvIf ); + +// setup/teardown functions, similar like those for Algorithm/Service + StatusCode initialize(); + StatusCode finalize(); + +// the magic method this tool provides + StatusCode performTask( double& result ); + +public: +// to resolve possible conflicts with IProperty::interfaceID() + static const InterfaceID& interfaceID() { return IVirtualTool::interfaceID(); } + +private: + double m_factor; +}; + +#endif // !ATHEXJOBOPTIONS_CONCRETETOOL_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ExampleEvtLoopPreSelectTool.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ExampleEvtLoopPreSelectTool.h new file mode 100755 index 0000000000000000000000000000000000000000..5eb8d278441016b31f683d7d00e68063044dd6b6 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ExampleEvtLoopPreSelectTool.h @@ -0,0 +1,37 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_EVTLOOPPRESELECTTOOL_H +#define ATHEXJOBOPTIONS_EVTLOOPPRESELECTTOOL_H 1 + +#include "AthenaKernel/IAthenaEvtLoopPreSelectTool.h" +#include "AthenaBaseComps/AthAlgTool.h" +#include <string> + + +///////////////////////////////////////////////////////////////////////////// + +class ExampleEvtLoopPreSelectTool : public AthAlgTool, virtual public IAthenaEvtLoopPreSelectTool { +public: + ExampleEvtLoopPreSelectTool( const std::string&, const std::string&, const IInterface* ); + +// to allow access to the IAthenaEvtLoopPreSelectTool interface + StatusCode queryInterface( const InterfaceID& riid, void** ppvIf ); + +// setup/teardown functions + StatusCode initialize(); + StatusCode finalize(); + +// the method that decides if an event should be passed to the EventSelector + bool passEvent(const EventInfo* pEvent); + +public: +// to resolve possible conflicts with IProperty::interfaceID() + static const InterfaceID& interfaceID() { return IAthenaEvtLoopPreSelectTool::interfaceID(); } + +private: + int m_prescale; +}; + +#endif // !ATHEXJOBOPTIONS_CONCRETETOOL_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/IVirtualSvc.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/IVirtualSvc.h new file mode 100755 index 0000000000000000000000000000000000000000..3aba468fc2924eba7dca408c9ba3b7c13cb1a834 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/IVirtualSvc.h @@ -0,0 +1,64 @@ +///////////////////////// -*- C++ -*- ///////////////////////////// + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// IVirtualSvc.h +// Header file for class IVirtualSvc +// Author: S.Binet<binet@cern.ch> +/////////////////////////////////////////////////////////////////// +#ifndef ATHEXJOBOPTIONS_IVIRTUALSVC_H +#define ATHEXJOBOPTIONS_IVIRTUALSVC_H + +/** @class IVirtualSvc + * This is the interface to a test service + */ + +// STL includes + +// FrameWork includes +#include "GaudiKernel/IService.h" + +// forward declaration + +class IVirtualSvc : virtual public IService +{ + /////////////////////////////////////////////////////////////////// + // Public methods: + /////////////////////////////////////////////////////////////////// + public: + + /** Destructor: + */ + virtual ~IVirtualSvc(); + + /////////////////////////////////////////////////////////////////// + // Const methods: + /////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // Non-const methods: + /////////////////////////////////////////////////////////////////// + + /// Delivers important informations + virtual StatusCode qotd( std::string& quote ) = 0; + + /// identifier for the framework + static const InterfaceID& interfaceID(); + +}; + +// I/O operators +////////////////////// + +/////////////////////////////////////////////////////////////////// +// Inline methods: +/////////////////////////////////////////////////////////////////// +inline const InterfaceID& IVirtualSvc::interfaceID() +{ + static const InterfaceID IID_IVirtualSvc("IVirtualSvc", 1, 0); + return IID_IVirtualSvc; +} + +#endif //> ATHEXJOBOPTIONS_IVIRTUALSVC_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/IVirtualTool.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/IVirtualTool.h new file mode 100755 index 0000000000000000000000000000000000000000..e03aefcbfd2534dbf0c4d74e49501acab7de3f4f --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/IVirtualTool.h @@ -0,0 +1,21 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_IVIRTUALTOOL_H +#define ATHEXJOBOPTIONS_IVIRTUALTOOL_H + +#include "GaudiKernel/IAlgTool.h" + + +///////////////////////////////////////////////////////////////////////////// + +class IVirtualTool : virtual public IAlgTool { +public: + static const InterfaceID& interfaceID(); + +public: + virtual StatusCode performTask( double& result ) = 0; +}; + +#endif // !ATHEXJOBOPTIONS_IVIRTUALTOOL_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/KeyMixin.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/KeyMixin.h new file mode 100755 index 0000000000000000000000000000000000000000..c92a78b835a1931549a529da28512bf7b1e9ac65 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/KeyMixin.h @@ -0,0 +1,28 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_KEYMIXIN_H +#define ATHEXJOBOPTIONS_KEYMIXIN_H 1 + +class AthAlgorithm; + +#include <string> + + +///////////////////////////////////////////////////////////////////////////// + +class KeyMixin { +public: + KeyMixin( AthAlgorithm* ); + +protected: + std::string getInputKey() const { return m_inputKey; } + std::string getOutputKey() const { return m_outputKey; } + +private: + std::string m_inputKey; + std::string m_outputKey; +}; + +#endif // !ATHEXJOBOPTIONS_KEYMIXIN_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/NoopAlgorithm.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/NoopAlgorithm.h new file mode 100755 index 0000000000000000000000000000000000000000..1f01214d5d75bbee1911d87917f188efeb149962 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/NoopAlgorithm.h @@ -0,0 +1,28 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_NOOPALGORITHM_H +#define ATHEXJOBOPTIONS_NOOPALGORITHM_H 1 + +#include "AthenaBaseComps/AthAlgorithm.h" + + +///////////////////////////////////////////////////////////////////////////// + +class NoopAlgorithm : public AthAlgorithm { +public: + NoopAlgorithm( const std::string& name, ISvcLocator* svcloc ); + + StatusCode initialize(); // called once, at start of job + StatusCode reinitialize(); // can be called anytime after init + StatusCode execute(); // called every event + StatusCode finalize(); // called once, at end of job + +private: +// services to hold on to +}; + +#endif // !ATHEXJOBOPTIONS_NOOPALGORITHM_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/SomeData.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/SomeData.h new file mode 100755 index 0000000000000000000000000000000000000000..466b2a37ad0b45d49663f8f2adcbda74db4f4e3c --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/SomeData.h @@ -0,0 +1,34 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_SOMEDATA_H +#define ATHEXJOBOPTIONS_SOMEDATA_H 1 + +#include "CLIDSvc/CLASS_DEF.h" + + +///////////////////////////////////////////////////////////////////////////// + +class SomeData { +public: + SomeData( double value ) : m_value( value ) {} + + double getValue() { return m_value; } + void setValue( double value ) { m_value = value; } + +private: + double m_value; +}; + + +// CLASS_DEF macro's can be obtained for your class by running the clid script +// with your class name, like so (in an ATLAS environment): +// +// $ clid -m SomeData +// +CLASS_DEF( SomeData, 86850056, 1 ) + +#endif // !ATHEXJOBOPTIONS_SOMEDATA_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/SubAlgorithm.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/SubAlgorithm.h new file mode 100755 index 0000000000000000000000000000000000000000..484610366c10175c1133190d40dd530b290b0c14 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/SubAlgorithm.h @@ -0,0 +1,34 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_SUBALGORITHM_H +#define ATHEXJOBOPTIONS_SUBALGORITHM_H 1 + +#include "AthenaBaseComps/AthAlgorithm.h" + +#include <string> +#include <vector> + + +///////////////////////////////////////////////////////////////////////////// + +class SubAlgorithm : public AthAlgorithm { +public: + SubAlgorithm( const std::string& name, ISvcLocator* svcloc ); + + StatusCode initialize(); // called once, at start of job + StatusCode reinitialize(); // can be called anytime after init + StatusCode beginRun(); // called at begin of every run + StatusCode execute(); // called every event + StatusCode endRun(); // called at end of every run + StatusCode finalize(); // called once, at end of job + +private: +// add toolhandle ... + std::vector< std::string > m_selections; +}; + +#endif // !ATHEXJOBOPTIONS_SUBALGORITHM_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TemplatedTool.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TemplatedTool.h new file mode 100755 index 0000000000000000000000000000000000000000..9dbc009ea94af93056fa66e98deca5ab514b94c8 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TemplatedTool.h @@ -0,0 +1,46 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_TEMPLATEDTOOL_H +#define ATHEXJOBOPTIONS_TEMPLATEDTOOL_H 1 + +#include "AthExJobOptions/IVirtualTool.h" + +#include "AthenaBaseComps/AthAlgTool.h" + +#include <string> + + +///////////////////////////////////////////////////////////////////////////// + +namespace ToolSpace { + +template< class T > +class TemplatedTool : virtual public IVirtualTool, virtual public AthAlgTool { +public: + TemplatedTool( const std::string&, const std::string&, const IInterface* ); + +// to allow access to the IVirtualTool interface + StatusCode queryInterface( const InterfaceID& riid, void** ppvIf ); + +// setup/teardown functions, similar like those for Algorithm/Service + StatusCode initialize(); + StatusCode finalize(); + +// the magic method this tool provides + virtual StatusCode performTask( double& result ); + +public: +// to resolve possible conflicts with IProperty::interfaceID() + static const InterfaceID& interfaceID() { return IVirtualTool::interfaceID(); } + +private: + double m_factor; +}; + +} + +#endif // !ATHEXJOBOPTIONS_TOOLUSINGTOOL_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TestSvcHandleArrayAlg.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TestSvcHandleArrayAlg.h new file mode 100644 index 0000000000000000000000000000000000000000..8b91760955e0fe4a00f119f56c98fa056c2ce65c --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TestSvcHandleArrayAlg.h @@ -0,0 +1,38 @@ +// dear emacs, this is -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_TESTSVCHANDLEARRAYALG_H +#define ATHEXJOBOPTIONS_TESTSVCHANDLEARRAYALG_H 1 + +#include "AthenaBaseComps/AthAlgorithm.h" +#include "GaudiKernel/ServiceHandle.h" + +class IVirtualSvc; + +#include <string> +#include <vector> + + +///////////////////////////////////////////////////////////////////////////// + +class TestSvcHandleArrayAlg : public AthAlgorithm { +public: + TestSvcHandleArrayAlg( const std::string& name, ISvcLocator* svcloc ); + + StatusCode initialize(); // called once, at start of job + StatusCode reinitialize(); // can be called anytime after init + StatusCode beginRun(); // called at begin of every run + StatusCode execute(); // called every event + StatusCode endRun(); // called at end of every run + StatusCode finalize(); // called once, at end of job + +private: + typedef ServiceHandleArray<IVirtualSvc> IVirtualSvcs_t; + IVirtualSvcs_t m_listOfSvcs; + +}; + +#endif // !ATHEXJOBOPTIONS_TESTSVCHANDLEARRAYALG_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ToolUsingTool.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ToolUsingTool.h new file mode 100755 index 0000000000000000000000000000000000000000..50164eb35c2d41f681c0b4b11da4c9c7580d9557 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/ToolUsingTool.h @@ -0,0 +1,47 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_TOOLUSINGTOOL_H +#define ATHEXJOBOPTIONS_TOOLUSINGTOOL_H 1 + +#include "AthExJobOptions/IVirtualTool.h" + +#include "AthenaBaseComps/AthAlgTool.h" +#include "GaudiKernel/MsgStream.h" +#include "GaudiKernel/ToolHandle.h" + +#include <string> + + +///////////////////////////////////////////////////////////////////////////// + +class ToolUsingTool : virtual public IVirtualTool, virtual public AthAlgTool { +public: + ToolUsingTool( const std::string&, const std::string&, const IInterface* ); + +// to allow access to the IVirtualTool interface + StatusCode queryInterface( const InterfaceID& riid, void** ppvIf ); + +// setup/teardown functions, similar like those for Algorithm/Service + StatusCode initialize(); + StatusCode finalize(); + +// the magic method this tool provides + virtual StatusCode performTask( double& result ); + +public: +// to resolve possible conflicts with IProperty::interfaceID() + static const InterfaceID& interfaceID() { return IVirtualTool::interfaceID(); } + +private: + double m_factor; + + ToolHandle< IVirtualTool > m_pubTool; + ToolHandle< IVirtualTool > m_privTool; + ToolHandleArray< IVirtualTool > m_toolArray; +}; + +#endif // !ATHEXJOBOPTIONS_TOOLUSINGTOOL_H diff --git a/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TopAlgorithm.h b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TopAlgorithm.h new file mode 100755 index 0000000000000000000000000000000000000000..2de5bd0cea1bf87db7962a7022ff2f9a4dad1a8d --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/AthExJobOptions/TopAlgorithm.h @@ -0,0 +1,57 @@ +// dear emacs, this is -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ATHEXJOBOPTIONS_TOPALGORITHM_H +#define ATHEXJOBOPTIONS_TOPALGORITHM_H 1 + +#include "AthenaBaseComps/AthAlgorithm.h" +#include "GaudiKernel/ToolHandle.h" +#include "GaudiKernel/ServiceHandle.h" + +#include "AthExJobOptions/KeyMixin.h" + +class StoreGateSvc; +class IVirtualTool; +class IVirtualSvc; + +#include <string> +#include <vector> + + +///////////////////////////////////////////////////////////////////////////// + +class TopAlgorithm : public AthAlgorithm, private KeyMixin { +public: + TopAlgorithm( const std::string& name, ISvcLocator* svcloc ); + + StatusCode initialize(); // called once, at start of job + StatusCode reinitialize(); // can be called anytime after init + StatusCode beginRun(); // called at begin of every run + StatusCode execute(); // called every event + StatusCode endRun(); // called at end of every run + StatusCode finalize(); // called once, at end of job + +private: + double m_rndmFactor; + + typedef ToolHandle<IVirtualTool> IVirtualTool_t; + typedef ToolHandleArray<IVirtualTool> IVirtualTools_t; + + IVirtualTool_t m_tool; + IVirtualTool_t m_publicTool; + IVirtualTools_t m_listOfPrivateTools; + IVirtualTools_t m_listOfPublicTools; + + typedef ServiceHandle<IVirtualSvc> IVirtualSvc_t; + IVirtualSvc_t m_svc; + + // testing bug #31571 + // https://savannah.cern.ch/bugs/?31571 + IVirtualTool_t m_emptyPrivateTool; + IVirtualTool_t m_emptyPublicTool; +}; + +#endif // !ATHEXJOBOPTIONS_TOPALGORITHM_H diff --git a/Control/AthenaExamples/AthExJobOptions/cmt/requirements b/Control/AthenaExamples/AthExJobOptions/cmt/requirements new file mode 100755 index 0000000000000000000000000000000000000000..39da2a542d60d063ef1bdb2fd3a2f9df5833d8fa --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/cmt/requirements @@ -0,0 +1,37 @@ +package AthExJobOptions +author Wim Lavrijsen <WLavrijsen@lbl.gov> + +use AtlasPolicy AtlasPolicy-* +use GaudiInterface GaudiInterface-* External + +use AthenaKernel AthenaKernel-* Control +use AthenaBaseComps AthenaBaseComps-* Control +use CLIDSvc CLIDSvc-* Control + +library AthExJobOptions *.cxx -s=components *.cxx +apply_pattern component_library + +apply_pattern declare_joboptions \ + files="*.py" + +apply_pattern declare_python_modules \ + files="*.py" + +private +use EventInfo EventInfo-* Event +use StoreGate StoreGate-* Control +apply_pattern install_runtime + +use TestTools TestTools-* AtlasTest -no_auto_imports +apply_pattern athenarun_test name="JobOptionsBasic" \ + pre_script="../cmt/setup.sh" \ + options="AthExJobOptions/AthExJobOptions_BasicJobOptions.py" \ + post_script="${TESTTOOLSROOT}/share/post.sh JobOptionsBasic" +apply_pattern athenarun_test name="JobOptionsCustomTool" \ + pre_script="../cmt/setup.sh" \ + options="AthExJobOptions/AthExJobOptions_CustomToolJobOptions.py" \ + post_script="${TESTTOOLSROOT}/share/post.sh JobOptionsCustomTool" +apply_pattern athenarun_test name="JobOptionsCustomTopAlg" \ + pre_script="../cmt/setup.sh" \ + options="AthExJobOptions/AthExJobOptions_CustomTopAlgorithmJobOptions.py" \ + post_script="${TESTTOOLSROOT}/share/post.sh JobOptionsCustomTopAlg" diff --git a/Control/AthenaExamples/AthExJobOptions/doc/mainpage.h b/Control/AthenaExamples/AthExJobOptions/doc/mainpage.h new file mode 100755 index 0000000000000000000000000000000000000000..09ac6e39ed560931065dc03a828dd6ca0364616a --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/doc/mainpage.h @@ -0,0 +1,62 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/** +@mainpage AthExJobOptions Package +@author Wim Lavrijsen <WLavrijsen@lbl.gov> +@author Martin Woudstra <Martin.Woudstra@cern.ch> + +@section AthExJobOptionsIntro Introduction + +This package contains examples of configurable-style job options, and shows +how to write self-contained Gaudi component configurations by deriving your +own python classes from the generated configurables. +For this purpose, it uses a few "Hello World!"-style Algorithms and AlgTools; +the real meat, however, is in the custom python files. + +@section AthExJobOptionsOverview Class Overview + +Of main interest are the python classes; the other classes are merely there in +order to have something to play with. +The python classes are: + + - CustomTopAlgorithm : shows how to implement a customization of a top algorithm by using a class derived from the generated configurable. The result is a well-contained representation of the corresponding Gaudi component. + +The following Algorithm classes are available: + + - NoopAlgorithm : a do-nothing Algorithm, which only has the base-class Algorithm properties. + + - TopAlgorithm : an algorithm that makes use of a tool, set by configuration, to perform a task. + + - SubAlgorithm : an algorithm that presumes to be controlled by another algorithm. + +The following AlgTool classes, all implementing the @c IVirtualTool interface, are available: + + - ConcreteTool : a tool that performs a task. + + - TemplatedTool : a tool that is templated in C++ and performs a task. + + - ToolUsingTool : a tool that makes use of a tool, set by configuration, to perform a task. + +As well as the following helpers: + + - KeyMixin : a mixin class providing in/out key properties for use with @c StoreGate + + - SomeData : a custom data class, instances of which can be put in, and read from, @c StoreGate + +@ref used_AthExJobOptions + +@ref requirements_AthExJobOptions + +*/ + +/** +@page used_AthExJobOptions Used Packages +@htmlinclude used_packages.html +*/ + +/** +@page requirements_AthExJobOptions Requirements +@include requirements +*/ diff --git a/Control/AthenaExamples/AthExJobOptions/python/CustomToolUsingTool.py b/Control/AthenaExamples/AthExJobOptions/python/CustomToolUsingTool.py new file mode 100755 index 0000000000000000000000000000000000000000..4efd723bf46f507920faeb7518f38facb2d16895 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/python/CustomToolUsingTool.py @@ -0,0 +1,34 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# File: AthExJobOptions/CustomToolUsingTool.py +# Author: Wim Lavrijsen (WLavrijsen@lbl.gov) + +__version__ = '1.0.0' +__author__ = 'Wim Lavrijsen (WLavrijsen@lbl.gov)' + +__all__ = [ 'CustomToolUsingTool' ] + + +# Get our base class (was generated by genConf; note that the package name is +# not necessary if both classes reside in the same directory) +from AthExJobOptionsConf import ToolUsingTool + + +# Customized class, enable through derivation +class CustomToolUsingTool( ToolUsingTool ): + __slots__ = [] # enforce no new properties + + def __init__( self, name = 'CustomToolUsingTool' ): # sets default name + super( CustomToolUsingTool, self ).__init__( name ) # have to call base init + + # setDefaults is enforced to be a class method; because it is a class method, + # the defaults can be savely queried by other tools, without touching any part + # of the configuration as would happen otherwise + def setDefaults( cls, handle ): + # these values will override the C++ (i.e. developer) default values, not + # any python (i.e. user) values + handle.Factor = 42. # best, is considered default + + if not hasattr( handle, 'TheToolTool' ): + from AthExJobOptionsConf import ConcreteTool + handle.TheToolTool = ConcreteTool( 'ToolTool' ) diff --git a/Control/AthenaExamples/AthExJobOptions/python/CustomToolUsingTool2.py b/Control/AthenaExamples/AthExJobOptions/python/CustomToolUsingTool2.py new file mode 100755 index 0000000000000000000000000000000000000000..ec6130ccba3d30c1cc505ceff457eac342b5b854 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/python/CustomToolUsingTool2.py @@ -0,0 +1,30 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# File: AthExJobOptions/CustomToolUsingTool2.py +# Author: Wim Lavrijsen (WLavrijsen@lbl.gov) + +__version__ = '1.0.0' +__author__ = 'Wim Lavrijsen (WLavrijsen@lbl.gov)' + +__all__ = [ 'CustomToolUsingTool2' ] + + +# Customized class, enable through pseudo-metaclass +class CustomToolUsingTool2( object ): + def __new__( cls, name = 'CustomToolUsingTool2' ): + # first, look for already fully customized instance + from AthExJobOptionsConf import ToolUsingTool + try: + return ToolUsingTool.configurables[ name ] + except KeyError: + pass + + # else, request a new instance, and add customization + from AthExJobOptionsConf import ConcreteTool + tool = ToolUsingTool( name ) + tool.Factor = 42. + + tool.TheToolTool = ConcreteTool( 'ToolTool' ) + + # all done + return tool diff --git a/Control/AthenaExamples/AthExJobOptions/python/CustomTopAlgorithm.py b/Control/AthenaExamples/AthExJobOptions/python/CustomTopAlgorithm.py new file mode 100755 index 0000000000000000000000000000000000000000..6b10b29f36a06fb68e0fd272d89a32ca692ab495 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/python/CustomTopAlgorithm.py @@ -0,0 +1,40 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +## @file CustomTopAlgorithm.py + +# File: AthExJobOptions/CustomTopAlgorithm.py +# Author: Wim Lavrijsen (WLavrijsen@lbl.gov) + +__version__ = '1.0.0' +__author__ = 'Wim Lavrijsen (WLavrijsen@lbl.gov)' + +__all__ = [ 'CustomTopAlgorithm' ] + + +# Get our base class (was generated by genConf; note that the package name is +# not necessary if both classes reside in the same directory) +from AthExJobOptionsConf import TopAlgorithm + +## @class CustomTopAlgorithm +# @brief Customizer class for TopAlgorithm, enabled through derivation +# bla bla bla +class CustomTopAlgorithm( TopAlgorithm ): + __slots__ = [] # enforce no new properties + + def __init__( self, name = 'CustomTopAlgorithm' ): # sets default name + super( CustomTopAlgorithm, self ).__init__( name ) # have to call base init + + self.RndmFactor = 101. # allowed, NOT considered default + + # setDefaults is enforced to be a class method; because it is a class method, + # the defaults can be savely queried by other tools, without touching any part + # of the configuration as would happen otherwise + def setDefaults( cls, handle ): + # these values will override the C++ (i.e. developer) default values, not + # any python (i.e. user) values + handle.RndmFactor = 42. # best, is considered default + + # make sure one tool is always selected + if not hasattr( handle, 'TheTool' ): + from AthExJobOptionsConf import ConcreteTool + handle.TheTool = ConcreteTool() diff --git a/Control/AthenaExamples/AthExJobOptions/python/__init__.py b/Control/AthenaExamples/AthExJobOptions/python/__init__.py new file mode 100755 index 0000000000000000000000000000000000000000..423ac99185109909c98b7b974144b894fe7afa14 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/python/__init__.py @@ -0,0 +1,9 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# File: AthExJobOptions/__init__.py +# Author: Wim Lavrijsen (WLavrijsen@lbl.gov) + +__version__ = '1.0.0' +__author__ = 'Wim Lavrijsen (WLavrijsen@lbl.gov)' + +__all__ = [ 'CustomTopAlgorithm' ] diff --git a/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_BasicJobOptions.py b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_BasicJobOptions.py new file mode 100755 index 0000000000000000000000000000000000000000..5d4feaa4aab7e6ecb2efea6cd395b985503ddbb1 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_BasicJobOptions.py @@ -0,0 +1,116 @@ +# File: AthExJobOptions/AthExJobOptions_BasicJobOptions.py +# Author: Wim Lavrijsen <WLavrijsen@lbl.gov> + +# This Athena job consists of algorithms that loop over events; +# here, the (default) top sequence is used: + +MessageSvc.Format = "% F%32W%S%7W%R%T %0W%M" + +from AthenaCommon.AlgSequence import AlgSequence +job = AlgSequence() +assert( job == AlgSequence() ) # this is a singleton + +# Get hold of the algorithms that we want to run +from AthExJobOptions.AthExJobOptionsConf import TopAlgorithm +# ^^package name ^^generated file ^^Gaudi component + +# Some Tool algorithm classes that will/may be used +from AthExJobOptions.AthExJobOptionsConf import ConcreteTool, ToolSpace__TemplatedTool_double_, ToolUsingTool + +# Next, algorithms need adding to the job. The following will +# add an algorithm named "TopAlgorithm" of type "TopAlgorithm": +job += TopAlgorithm() + +# Alternatively, a specific name for an instance of the type +# "TopAlgorithm" can be chosen (here, 'MyAlg'): +job += TopAlgorithm( 'MyAlg' ) + +# There are now 2 algorithms in this job: +assert( len(job) == 2 ) + +# And another +job += TopAlgorithm( 'YourAlg' ) + +# Modify some job options parameters, by accessing the algorithms +# through their instance name: +job.TopAlgorithm.InputKey = '' +job.TopAlgorithm.OutputKey = 'AAA' +job.TopAlgorithm.TheTool = ToolSpace__TemplatedTool_double_( 'TSTT' ) + +job.MyAlg.InputKey = job.TopAlgorithm.OutputKey +job.MyAlg.OutputKey = 'BBB' + +# register a service with the service manager +from AthenaCommon.AppMgr import ServiceMgr as svcMgr +svcMgr += CfgMgr.ConcreteSvc( + "QotdSvc", + Qotd = "These are not the droids you are looking for" + ) +# and bind it to 'MyAlg' +job.MyAlg.TheSvc = svcMgr.QotdSvc + +# overriding default list +job.MyAlg.PrivateToolList = [ ConcreteTool( "PyCT1" ), + ConcreteTool( "PyCT2" ), + ToolSpace__TemplatedTool_double_( 'PyTSTT3', Factor=30 ), + ToolSpace__TemplatedTool_double_( 'PyTSTT4', Factor=40 ) ] + +# add my special tool +job.MyAlg.PrivateToolList += [ ToolUsingTool( 'Special', + TheToolTool = ToolSpace__TemplatedTool_double_('PyTSTTSp1', Factor = 6.2830 ), + TheToolToolArray = [ ConcreteTool('PySpSubTool', Factor = 3.1415 ) ] ) ] +# override some properties +job.MyAlg.PrivateToolList[ 'Special' ].Factor = 37 + +# try to add None as an empty private tool +job.MyAlg.EmptyPrivateTool = None +# try to add None as an empty public tool +job.MyAlg.EmptyPublicTool = None + +from AthenaCommon.AppMgr import ToolSvc +ToolSvc += ConcreteTool('PyCT5') +ToolSvc += ToolSpace__TemplatedTool_double_( 'PyTSTT7' ) +# adding to default list +job.MyAlg.PublicToolList += [ ToolSvc.PyCT5, ToolSvc.PyTSTT7 ] +# Note that the parameters are type checked, this fails: +try: + job.TopAlgorithm.InputKey = 42 +except ValueError: + log.info( "Can't set int to string property (this is correct)" ) +else: + log.fatal( "Managed to assign an int to a string property ... stop!" ) + raise RuntimeError( "Managed to assign an int to a string property" ) + +# Only actual properties can be set, this fails as well: +try: + job.MyAlg.ThisDoesNotExist = None +except AttributeError: + log.info( "Can't set non-existing property (this is correct)" ) +else: + log.fatal( "Managed to set a non-existing property ... stop!" ) + raise RuntimeError( "Managed to set a non-existing property" ) + +# For all TopAlgorithm instances, that do not yet have their tool defined, +# fill in a default: +for alg in job: + if isinstance( alg, TopAlgorithm ) and not hasattr( alg, 'TheTool' ): + alg.TheTool = ConcreteTool() + +# Some global settings (typically, you *only* want to +# do this in the final options file, never in a fragment): +theApp.EvtMax = 2 + +# Hmm, you know what? Let's not run YourAlg after all +del job.YourAlg +assert( len(job) == 2 ) + +# Also, to see the DEBUG messages from TopAlgorithm instances, switch +# it on for all such algorithms (and only those): +for alg in job: + if isinstance( alg, TopAlgorithm ): + alg.OutputLevel = DEBUG + +# Print the final job for reference purposes +print job + +# End of AthExJobOptions_BasicJobOptions.py diff --git a/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_CustomToolJobOptions.py b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_CustomToolJobOptions.py new file mode 100755 index 0000000000000000000000000000000000000000..bc55ed09d8c438814424c45e9849022ada72f6dd --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_CustomToolJobOptions.py @@ -0,0 +1,41 @@ +# File: AthExJobOptions/AthExJobOptions_CustomToolJopOptions.py +# Author: Wim Lavrijsen <WLavrijsen@lbl.gov> + +# This Athena job consists of algorithms that loop over events; +# here, the (default) top sequence is used: +from AthenaCommon.AlgSequence import AlgSequence +job = AlgSequence() + +# Get hold of the algorithms that we want to run +from AthExJobOptions.AthExJobOptionsConf import TopAlgorithm +# ^^package name ^^generated file ^^Gaudi component + +# Custom configured tool to use +from AthExJobOptions.CustomToolUsingTool import CustomToolUsingTool +# ^^package name ^^user-authored file ^^custom class + +# Add the algorithm, and set its tool +job += TopAlgorithm( 'MyTopAlg' ) +job.MyTopAlg.TheTool = CustomToolUsingTool( 'CustomTool' ) +job.MyTopAlg.TheTool.Factor = 14. + +# Another custom configured tool to use +from AthExJobOptions.CustomToolUsingTool2 import CustomToolUsingTool2 +job += TopAlgorithm( 'YourTopAlg' ) +print job.YourTopAlg.properties() +job.YourTopAlg.OutputKey = 'YourKey' +job.YourTopAlg.TheTool = CustomToolUsingTool2( 'CustomTool2' ) +job.YourTopAlg.TheTool.Factor = 18. + +#job.MyTopAlg.OutputLevel = DEBUG +#job.MyTopAlg.TheTool.OutputLevel = DEBUG + + +# Some global settings (typically, you *only* want to +# do this in the final options file, never in a fragment): +theApp.EvtMax = 2 + +# Print the final job for reference purposes +print job + +# End of AthExJobOptions_CustomTopAlgorithmJobOptions.py diff --git a/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_CustomTopAlgorithmJobOptions.py b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_CustomTopAlgorithmJobOptions.py new file mode 100755 index 0000000000000000000000000000000000000000..c8bc6a8e96e347ccf6379d4a8eb7fb6a10cc6343 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_CustomTopAlgorithmJobOptions.py @@ -0,0 +1,31 @@ +# File: AthExJobOptions/AthExJobOptions_CustomTopAlgorithmJopOptions.py +# Author: Wim Lavrijsen <WLavrijsen@lbl.gov> + +# This Athena job consists of algorithms that loop over events; +# here, the (default) top sequence is used: +from AthenaCommon.AlgSequence import AlgSequence +job = AlgSequence() + +# Get hold of the algorithms that we want to run +from AthExJobOptions.CustomTopAlgorithm import CustomTopAlgorithm +# ^^package name ^^user-authored file ^^custom class + +# Add the algorithm +job += CustomTopAlgorithm( 'MyCustomAlg' ) + +# Verify the set value, not this is from the ctor, not setDefaults() +assert( job.MyCustomAlg.RndmFactor == 101. ) + +# But it can be overwritten without problem: +job.MyCustomAlg.RndmFactor = 33 +assert( job.MyCustomAlg.RndmFactor == 33. ) + + +# Some global settings (typically, you *only* want to +# do this in the final options file, never in a fragment): +theApp.EvtMax = 2 + +# Print the final job for reference purposes +print job + +# End of AthExJobOptions_CustomTopAlgorithmJobOptions.py diff --git a/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_ExampleEvtLoopPreSelectTool.py b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_ExampleEvtLoopPreSelectTool.py new file mode 100755 index 0000000000000000000000000000000000000000..436bde0e92a81b50a030174af611b5308cf6ad8e --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_ExampleEvtLoopPreSelectTool.py @@ -0,0 +1,41 @@ +# File: AthExJobOptions/AthExJobOptions_ExampleEvtLoopPreSelectTool.py +# Author: Marjorie Shapiro <mdshapiro@lbl.gov> based on work by +# Author: Wim Lavrijsen <WLavrijsen@lbl.gov> + +# This Athena job consists of algorithms that loop over events; +# here, the (default) top sequence is used: +from AthenaCommon.AlgSequence import AlgSequence +job = AlgSequence() + +# Get hold of the algorithms that we want to run +from AthExJobOptions.CustomTopAlgorithm import CustomTopAlgorithm +# ^^package name ^^user-authored file ^^custom class + +# Add the algorithm +job += CustomTopAlgorithm( 'MyCustomAlg' ) + +# Now, we are instantiating two instances of the example preselect tool +# This example tool passes the event is Mod(event number,PassIfMod)==0 +from AthExJobOptions.AthExJobOptionsConf import ExampleEvtLoopPreSelectTool +myTool = ExampleEvtLoopPreSelectTool( "myTool" ) +myTool.OutputLevel = DEBUG +myTool2 = ExampleEvtLoopPreSelectTool( "myTool2" ) +myTool2.OutputLevel = DEBUG +myTool2.PassIfMod = 3 + +# And attaching these tools to the EventLoopManager +# The tools are run in order and stop processing if either +# one returns a false +AthenaEventLoopMgr = Service( "AthenaEventLoopMgr" ) +#AthenaEventLoopMgr.PreSelectTools += [ "ExampleEvtLoopPreSelectTool/myTool" ] +AthenaEventLoopMgr.PreSelectTools += [ myTool ] +AthenaEventLoopMgr.PreSelectTools += [ myTool2 ] + +# Some global settings (typically, you *only* want to +# do this in the final options file, never in a fragment): +theApp.EvtMax = 50 + +# Print the final job for reference purposes +print job + +# End of AthExJobOptions_ExampleEvtLoopPreSelectTool.py diff --git a/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_ServiceHandleArrayTest.py b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_ServiceHandleArrayTest.py new file mode 100644 index 0000000000000000000000000000000000000000..faeac82da0aa66e4a1699e54ed8fcb2615eb420e --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/AthExJobOptions_ServiceHandleArrayTest.py @@ -0,0 +1,41 @@ +# File: AthExJobOptions/AthExJobOptions_BasicJobOptions.py +# Author: Wim Lavrijsen <WLavrijsen@lbl.gov> + +# This Athena job consists of algorithms that loop over events; +# here, the (default) top sequence is used: + +MessageSvc.Format = "% F%32W%S%7W%R%T %0W%M" + +from AthenaCommon.AlgSequence import AlgSequence +job = AlgSequence() +assert( job == AlgSequence() ) # this is a singleton + +# Get hold of the algorithms that we want to run +from AthExJobOptions.AthExJobOptionsConf import TestSvcHandleArrayAlg +# ^^package name ^^generated file ^^Gaudi component + +job += TestSvcHandleArrayAlg("MyAlg") + +# register a service with the service manager +from AthenaCommon.AppMgr import ServiceMgr as svcMgr +svcMgr += CfgMgr.ConcreteSvc( + "QotdSvc", + Qotd = "These are not the droids you are looking for." + ) +svcMgr += CfgMgr.AnotherConcreteSvc( + "AnotherQotdSvc", + Qotd = "Again, These are not the droids you are looking for." + ) +# and bind it to 'MyAlg' +job.MyAlg.SvcList = [svcMgr.QotdSvc, + svcMgr.AnotherQotdSvc] + + +# Some global settings (typically, you *only* want to +# do this in the final options file, never in a fragment): +theApp.EvtMax = 1 + +# Print the final job for reference purposes +print job + + diff --git a/Control/AthenaExamples/AthExJobOptions/share/JobOptionsBasic.ref b/Control/AthenaExamples/AthExJobOptions/share/JobOptionsBasic.ref new file mode 100755 index 0000000000000000000000000000000000000000..2ce4a1e3959802ce233696410d6220c01cdc9413 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/JobOptionsBasic.ref @@ -0,0 +1,429 @@ +Py:ConfigurableDb INFO Read module info for 3384 configurables from 10 genConfDb files +Py:ConfigurableDb INFO No duplicates have been found: that's good ! +Py:Athena INFO including file "AthenaCommon/Bootstrap.py" +Py:Athena INFO including file "AthenaCommon/Atlas.UnixStandardJob.py" +Py:Athena INFO including file "AthExJobOptions/AthExJobOptions_BasicJobOptions.py" +Py:Athena INFO Can't set int to string property (this is correct) +Py:Athena INFO Can't set non-existing property (this is correct) +/***** AlgSequence /TopAlg ************************************************************************* +|-<no properties> +|=/***** Algorithm TopAlgorithm/TopAlgorithm ********************************************************* +| |-AuditAlgorithms = False +| |-AuditBeginRun = False +| |-AuditEndRun = False +| |-AuditExecute = False +| |-AuditFinalize = False +| |-AuditInitialize = False +| |-AuditReinitialize = False +| |-EmptyPrivateTool = PrivateToolHandle('') +| |-EmptyPublicTool = PublicToolHandle('') +| |-Enable = True +| |-ErrorCount = 0 +| |-ErrorMax = 1 +| |-InputKey = '' (default: '') +| |-MonitorService = 'MonitorSvc' +| |-OutputKey = 'AAA' (default: 'outkey') +| |-OutputLevel = 2 (default: 0) +| |-PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +| |-PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +| |-RndmFactor = 1.0 +| |-ThePublicTool = PublicToolHandle('ConcreteTool') +| |-TheSvc = ServiceHandle('ConcreteSvc') +| |-TheTool = PrivateToolHandle('ToolSpace::TemplatedTool<double>/TSTT') (default: 'ToolUsingTool') +| |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/TSTT *************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/TSTT) ------------------------------ +| |=/***** Private AlgTool ConcreteTool/Tool1 ********************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ConcreteTool/Tool1) ------------------------------------------------- +| |=/***** Private AlgTool ToolUsingTool/Tool2 ********************************************************* +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') (default: 'ConcreteTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +| | |=/***** Private AlgTool ConcreteTool/ConcreteTool *************************************************** +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/ConcreteTool) ------------------------------------------ +| | |=/***** Private AlgTool ConcreteTool/CxxDefaultTool ************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/CxxDefaultTool) ---------------------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/Tool2) ------------------------------------------------ +| |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/Tool3 ************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/Tool3) ----------------------------- +| \----- (End of Algorithm TopAlgorithm/TopAlgorithm) ------------------------------------------------ +|=/***** Algorithm TopAlgorithm/MyAlg **************************************************************** +| |-AuditAlgorithms = False +| |-AuditBeginRun = False +| |-AuditEndRun = False +| |-AuditExecute = False +| |-AuditFinalize = False +| |-AuditInitialize = False +| |-AuditReinitialize = False +| |-EmptyPrivateTool = PrivateToolHandle('') +| |-EmptyPublicTool = PublicToolHandle('') +| |-Enable = True +| |-ErrorCount = 0 +| |-ErrorMax = 1 +| |-InputKey = 'AAA' (default: '') +| |-MonitorService = 'MonitorSvc' +| |-OutputKey = 'BBB' (default: 'outkey') +| |-OutputLevel = 2 (default: 0) +| |-PrivateToolList = PrivateToolHandleArray(['ConcreteTool/PyCT1','ConcreteTool/PyCT2','ToolSpace::TemplatedTool<double>/PyTSTT3','ToolSpace::TemplatedTool<double>/PyTSTT4','ToolUsingTool/Special']) +| | (default: "['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']") +| |-PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6','ConcreteTool/PyCT5','ToolSpace::TemplatedTool<double>/PyTSTT7']) +| | (default: "['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']") +| |-RndmFactor = 1.0 +| |-ThePublicTool = PublicToolHandle('ConcreteTool') +| |-TheSvc = ServiceHandle('QotdSvc') (default: 'ConcreteSvc') +| |-TheTool = PrivateToolHandle('ToolUsingTool/ToolUsingTool') (default: 'ToolUsingTool') +| |=/***** Private AlgTool ConcreteTool/PyCT1 ********************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ConcreteTool/PyCT1) ------------------------------------------------- +| |=/***** Private AlgTool ConcreteTool/PyCT2 ********************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ConcreteTool/PyCT2) ------------------------------------------------- +| |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/PyTSTT3 ************************************ +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 30 (default: 1.0) +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/PyTSTT3) --------------------------- +| |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/PyTSTT4 ************************************ +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 40 (default: 1.0) +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/PyTSTT4) --------------------------- +| |=/***** Private AlgTool ToolUsingTool/Special ******************************************************* +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 37 (default: 1.0) +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ToolSpace::TemplatedTool<double>/PyTSTTSp1') +| | | (default: 'ConcreteTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/PySpSubTool']) +| | | (default: "['ConcreteTool/CxxDefaultTool']") +| | |=/***** Private AlgTool ConcreteTool/PySpSubTool **************************************************** +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 3.1415000000000002 (default: 1.0) +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/PySpSubTool) ------------------------------------------- +| | |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/PyTSTTSp1 ********************************** +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 6.2830000000000004 (default: 1.0) +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/PyTSTTSp1) ------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/Special) ---------------------------------------------- +| |=/***** Private AlgTool ToolUsingTool/ToolUsingTool ************************************************* +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') (default: 'ConcreteTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +| | |=/***** Private AlgTool ConcreteTool/ConcreteTool *************************************************** +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/ConcreteTool) ------------------------------------------ +| | |=/***** Private AlgTool ConcreteTool/CxxDefaultTool ************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/CxxDefaultTool) ---------------------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/ToolUsingTool) ---------------------------------------- +| \----- (End of Algorithm TopAlgorithm/MyAlg) ------------------------------------------------------- +\----- (End of AlgSequence /TopAlg) ---------------------------------------------------------------- +Py:Athena INFO including file "AthenaCommon/runbatch.py" +ApplicationMgr INFO Updating ROOT::Reflex::PluginService::SetDebug(level) to level=0 +ApplicationMgr INFO Successfully loaded modules : AthenaServices +ApplicationMgr INFO Application Manager Configured successfully +ApplicationMgr INFO Updating ROOT::Reflex::PluginService::SetDebug(level) to level=0 +StatusCodeSvc INFO initialize +TopAlgorithm INFO Retrieved TheTool = PrivateToolHandle('ToolSpace::TemplatedTool<double>/TSTT') +TopAlgorithm.Tool2 INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +TopAlgorithm.Tool2 INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') +TopAlgorithm.Tool2 INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +TopAlgorithm INFO Retrieved PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +ToolSvc.Tool5 INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +ToolSvc.Tool5 INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool') +ToolSvc.Tool5 INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +TopAlgorithm INFO Retrieved PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +EventPersistencySvc INFO 'CnvServices':[ ] +ClassIDSvc INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL +ConcreteSvc INFO Initializing ConcreteSvc... +ConcreteSvc INFO Quote of the day: [Your day will be somewhat dictated by authority] +TopAlgorithm INFO Retrieved TheSvc = ServiceHandle('ConcreteSvc') +TopAlgorithm INFO Empty private tool is empty (OK) +TopAlgorithm INFO Empty public tool is empty (OK) +MyAlg.ToolUsingTool INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +MyAlg.ToolUsingTool INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') +MyAlg.ToolUsingTool INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +MyAlg INFO Retrieved TheTool = PrivateToolHandle('ToolUsingTool/ToolUsingTool') +MyAlg.Special INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +MyAlg.Special INFO Retrieved TheToolTool = PrivateToolHandle('ToolSpace::TemplatedTool<double>/PyTSTTSp1') +MyAlg.Special INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/PySpSubTool']) +MyAlg INFO Retrieved PrivateToolList = PrivateToolHandleArray(['ConcreteTool/PyCT1','ConcreteTool/PyCT2','ToolSpace::TemplatedTool<double>/PyTSTT3','ToolSpace::TemplatedTool<double>/PyTSTT4','ToolUsingTool/Special']) +MyAlg INFO Retrieved PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6','ConcreteTool/PyCT5','ToolSpace::TemplatedTool<double>/PyTSTT7']) +QotdSvc INFO Initializing QotdSvc... +QotdSvc INFO Quote of the day: [These are not the droids you are looking for] +MyAlg INFO Retrieved TheSvc = ServiceHandle('QotdSvc') +MyAlg INFO Empty private tool is empty (OK) +MyAlg INFO Empty public tool is empty (OK) +HistogramPersistencySvc INFO 'CnvServices':[ 'HbookHistSvc' , 'RootHistSvc' ] +HistogramPersistencySvc WARNING Histograms saving not required. +AthenaEventLoopMgr WARNING Histograms saving not required. +ApplicationMgr INFO Application Manager Initialized successfully +AthenaEventLoopMgr INFO ===>>> start of run 0 <<<=== +AthenaEventLoopMgr INFO ===>>> start processing event #1, run #0 0 events processed so far <<<=== +HistorySvc INFO Registered 2 Algorithms +HistorySvc INFO Registered 12 AlgTools +HistorySvc INFO Registered 17 Services +TopAlgorithm INFO got this quote [Your day will be somewhat dictated by authority]. +TopAlgorithm DEBUG no reading requested +TopAlgorithm INFO doing my work ... +RndmGenSvc.Engine INFO Generator engine type:CLHEP::RanluxEngine +RndmGenSvc.Engine INFO Current Seed:1234567 Luxury:3 +RndmGenSvc INFO Using Random engine:HepRndm::Engine<CLHEP::RanluxEngine> +TopAlgorithm.TSTT INFO performing templated task factor ( 1) ... +TopAlgorithm.TSTT INFO ... templated task is done, result: 314.345 +TopAlgorithm.Tool1 INFO performing concrete task (factor: 1) ... +TopAlgorithm.Tool1 INFO ... concrete task is done, result: 38664.5 +TopAlgorithm.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +TopAlgorithm.Tool2.ConcreteTool INFO performing concrete task (factor: 1) ... +TopAlgorithm.Tool2.ConcreteTool INFO ... concrete task is done, result: 5.84954e+08 +TopAlgorithm.Tool2 INFO ... task using tool is done, result: 5.84954e+08 +TopAlgorithm.Tool2.CxxDefault... INFO performing concrete task (factor: 1) ... +TopAlgorithm.Tool2.CxxDefault... INFO ... concrete task is done, result: 1.51844e+06 +TopAlgorithm.Tool3 INFO performing templated task factor ( 1) ... +TopAlgorithm.Tool3 INFO ... templated task is done, result: 4.61529e+11 +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +ToolSvc.Tool5.ConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.ConcreteTool INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.CxxDefaultTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.CxxDefaultTool INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +TopAlgorithm INFO ... my work is done! +TopAlgorithm DEBUG wrote data: 6.77628e+20 for key: AAA +MyAlg INFO got this quote [These are not the droids you are looking for]. +MyAlg DEBUG read: 6.77628e+20 from key: AAA +MyAlg INFO doing my work ... +MyAlg.ToolUsingTool INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +MyAlg.ToolUsingTool.ConcreteTool INFO performing concrete task (factor: 1) ... +MyAlg.ToolUsingTool.ConcreteTool INFO ... concrete task is done, result: 1.02518e+25 +MyAlg.ToolUsingTool INFO ... task using tool is done, result: 1.02518e+25 +MyAlg.ToolUsingTool.CxxDefaul... INFO performing concrete task (factor: 1) ... +MyAlg.ToolUsingTool.CxxDefaul... INFO ... concrete task is done, result: 1.51844e+06 +MyAlg.PyCT1 INFO performing concrete task (factor: 1) ... +MyAlg.PyCT1 INFO ... concrete task is done, result: 1.26098e+27 +MyAlg.PyCT2 INFO performing concrete task (factor: 1) ... +MyAlg.PyCT2 INFO ... concrete task is done, result: 1.551e+29 +MyAlg.PyTSTT3 INFO performing templated task factor ( 30) ... +MyAlg.PyTSTT3 INFO ... templated task is done, result: 1.22374e+32 +MyAlg.PyTSTT4 INFO performing templated task factor ( 40) ... +MyAlg.PyTSTT4 INFO ... templated task is done, result: 9.6553e+34 +MyAlg.Special INFO performing task using tool (factor: 37) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +MyAlg.Special.PyTSTTSp1 INFO performing templated task factor ( 6.283) ... +MyAlg.Special.PyTSTTSp1 INFO ... templated task is done, result: 9.37018e+39 +MyAlg.Special INFO ... task using tool is done, result: 9.37018e+39 +MyAlg.Special.PySpSubTool INFO performing concrete task (factor: 3.1415) ... +MyAlg.Special.PySpSubTool INFO ... concrete task is done, result: 1.51844e+06 +MyAlg INFO Putting my special tool at work: PrivateToolHandle('ToolUsingTool/Special') +MyAlg.Special INFO performing task using tool (factor: 37) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +MyAlg.Special.PyTSTTSp1 INFO performing templated task factor ( 6.283) ... +MyAlg.Special.PyTSTTSp1 INFO ... templated task is done, result: 9.09348e+44 +MyAlg.Special INFO ... task using tool is done, result: 9.09348e+44 +MyAlg.Special.PySpSubTool INFO performing concrete task (factor: 3.1415) ... +MyAlg.Special.PySpSubTool INFO ... concrete task is done, result: 1.51844e+06 +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +ToolSvc.Tool5.ConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.ConcreteTool INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.CxxDefaultTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.CxxDefaultTool INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +ToolSvc.PyCT5 INFO performing concrete task (factor: 1) ... +ToolSvc.PyCT5 INFO ... concrete task is done +ToolSvc.PyTSTT7 INFO performing templated task factor ( 1) ... +ToolSvc.PyTSTT7 INFO ... templated task is done +MyAlg INFO ... my work is done! +MyAlg DEBUG wrote data: 1.2957e+59 for key: BBB +AthenaEventLoopMgr INFO ===>>> done processing event #1, run #0 1 events processed so far <<<=== +AthenaEventLoopMgr INFO ===>>> start processing event #2, run #0 1 events processed so far <<<=== +TopAlgorithm INFO got this quote [Your day will be somewhat dictated by authority]. +TopAlgorithm DEBUG no reading requested +TopAlgorithm INFO doing my work ... +TopAlgorithm.TSTT INFO performing templated task factor ( 1) ... +TopAlgorithm.TSTT INFO ... templated task is done, result: 244.823 +TopAlgorithm.Tool1 INFO performing concrete task (factor: 1) ... +TopAlgorithm.Tool1 INFO ... concrete task is done, result: 30113.2 +TopAlgorithm.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +TopAlgorithm.Tool2.ConcreteTool INFO performing concrete task (factor: 1) ... +TopAlgorithm.Tool2.ConcreteTool INFO ... concrete task is done, result: 4.55582e+08 +TopAlgorithm.Tool2 INFO ... task using tool is done, result: 4.55582e+08 +TopAlgorithm.Tool2.CxxDefault... INFO performing concrete task (factor: 1) ... +TopAlgorithm.Tool2.CxxDefault... INFO ... concrete task is done, result: 1.51844e+06 +TopAlgorithm.Tool3 INFO performing templated task factor ( 1) ... +TopAlgorithm.Tool3 INFO ... templated task is done, result: 3.59454e+11 +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +ToolSvc.Tool5.ConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.ConcreteTool INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.CxxDefaultTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.CxxDefaultTool INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +TopAlgorithm INFO ... my work is done! +TopAlgorithm DEBUG wrote data: 5.2776e+20 for key: AAA +MyAlg INFO got this quote [These are not the droids you are looking for]. +MyAlg DEBUG read: 5.2776e+20 from key: AAA +MyAlg INFO doing my work ... +MyAlg.ToolUsingTool INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +MyAlg.ToolUsingTool.ConcreteTool INFO performing concrete task (factor: 1) ... +MyAlg.ToolUsingTool.ConcreteTool INFO ... concrete task is done, result: 7.98447e+24 +MyAlg.ToolUsingTool INFO ... task using tool is done, result: 7.98447e+24 +MyAlg.ToolUsingTool.CxxDefaul... INFO performing concrete task (factor: 1) ... +MyAlg.ToolUsingTool.CxxDefaul... INFO ... concrete task is done, result: 1.51844e+06 +MyAlg.PyCT1 INFO performing concrete task (factor: 1) ... +MyAlg.PyCT1 INFO ... concrete task is done, result: 9.8209e+26 +MyAlg.PyCT2 INFO performing concrete task (factor: 1) ... +MyAlg.PyCT2 INFO ... concrete task is done, result: 1.20797e+29 +MyAlg.PyTSTT3 INFO performing templated task factor ( 30) ... +MyAlg.PyTSTT3 INFO ... templated task is done, result: 9.53089e+31 +MyAlg.PyTSTT4 INFO performing templated task factor ( 40) ... +MyAlg.PyTSTT4 INFO ... templated task is done, result: 7.51987e+34 +MyAlg.Special INFO performing task using tool (factor: 37) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +MyAlg.Special.PyTSTTSp1 INFO performing templated task factor ( 6.283) ... +MyAlg.Special.PyTSTTSp1 INFO ... templated task is done, result: 7.29781e+39 +MyAlg.Special INFO ... task using tool is done, result: 7.29781e+39 +MyAlg.Special.PySpSubTool INFO performing concrete task (factor: 3.1415) ... +MyAlg.Special.PySpSubTool INFO ... concrete task is done, result: 1.51844e+06 +MyAlg INFO Putting my special tool at work: PrivateToolHandle('ToolUsingTool/Special') +MyAlg.Special INFO performing task using tool (factor: 37) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +MyAlg.Special.PyTSTTSp1 INFO performing templated task factor ( 6.283) ... +MyAlg.Special.PyTSTTSp1 INFO ... templated task is done, result: 7.08231e+44 +MyAlg.Special INFO ... task using tool is done, result: 7.08231e+44 +MyAlg.Special.PySpSubTool INFO performing concrete task (factor: 3.1415) ... +MyAlg.Special.PySpSubTool INFO ... concrete task is done, result: 1.51844e+06 +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.PublicConcreteTool INFO ... concrete task is done +ToolSvc.Tool5.ConcreteTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.ConcreteTool INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.CxxDefaultTool INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.CxxDefaultTool INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +ToolSvc.PyCT5 INFO performing concrete task (factor: 1) ... +ToolSvc.PyCT5 INFO ... concrete task is done +ToolSvc.PyTSTT7 INFO performing templated task factor ( 1) ... +ToolSvc.PyTSTT7 INFO ... templated task is done +MyAlg INFO ... my work is done! +MyAlg DEBUG wrote data: 1.00913e+59 for key: BBB +AthenaEventLoopMgr INFO ===>>> done processing event #2, run #0 2 events processed so far <<<=== +QotdSvc INFO Finalizing QotdSvc... +ConcreteSvc INFO Finalizing ConcreteSvc... +HistorySvc INFO Service finalised successfully +ToolSvc.finalize() INFO Removing all tools created by ToolSvc +StatusCodeSvc INFO initialize +ApplicationMgr INFO Application Manager Finalized successfully +ApplicationMgr INFO Application Manager Terminated successfully +Py:Athena INFO leaving with code 0: "successful run" diff --git a/Control/AthenaExamples/AthExJobOptions/share/JobOptionsCustomTool.ref b/Control/AthenaExamples/AthExJobOptions/share/JobOptionsCustomTool.ref new file mode 100755 index 0000000000000000000000000000000000000000..9162bd53df571d234e30684ea959721340b4e893 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/JobOptionsCustomTool.ref @@ -0,0 +1,391 @@ +Py:ConfigurableDb INFO Read module info for 3384 configurables from 10 genConfDb files +Py:ConfigurableDb INFO No duplicates have been found: that's good ! +Py:Athena INFO including file "AthenaCommon/Bootstrap.py" +Py:Athena INFO including file "AthenaCommon/Atlas.UnixStandardJob.py" +Py:Athena INFO including file "AthExJobOptions/AthExJobOptions_CustomToolJobOptions.py" +/***** AlgSequence /TopAlg ************************************************************************* +|-<no properties> +|=/***** Algorithm TopAlgorithm/MyTopAlg ************************************************************* +| |-AuditAlgorithms = False +| |-AuditBeginRun = False +| |-AuditEndRun = False +| |-AuditExecute = False +| |-AuditFinalize = False +| |-AuditInitialize = False +| |-AuditReinitialize = False +| |-EmptyPrivateTool = PrivateToolHandle('') +| |-EmptyPublicTool = PublicToolHandle('') +| |-Enable = True +| |-ErrorCount = 0 +| |-ErrorMax = 1 +| |-InputKey = '' +| |-MonitorService = 'MonitorSvc' +| |-OutputKey = 'outkey' +| |-OutputLevel = 0 +| |-PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +| |-PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +| |-RndmFactor = 1.0 +| |-ThePublicTool = PublicToolHandle('ConcreteTool') +| |-TheSvc = ServiceHandle('ConcreteSvc') +| |-TheTool = PrivateToolHandle('ToolUsingTool/CustomTool') (default: 'ToolUsingTool') +| |=/***** Private AlgTool ToolUsingTool/CustomTool **************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 14.0 (default: 42.0) +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ConcreteTool/ToolTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +| | |=/***** Private AlgTool ConcreteTool/CxxDefaultTool ************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/CxxDefaultTool) ---------------------------------------- +| | |=/***** Private AlgTool ConcreteTool/ToolTool ******************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/ToolTool) ---------------------------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/CustomTool) ------------------------------------------- +| |=/***** Private AlgTool ConcreteTool/Tool1 ********************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ConcreteTool/Tool1) ------------------------------------------------- +| |=/***** Private AlgTool ToolUsingTool/Tool2 ********************************************************* +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') (default: 'ConcreteTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +| | |=/***** Private AlgTool ConcreteTool/ConcreteTool *************************************************** +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/ConcreteTool) ------------------------------------------ +| | |=/***** Private AlgTool ConcreteTool/CxxDefaultTool ************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/CxxDefaultTool) ---------------------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/Tool2) ------------------------------------------------ +| |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/Tool3 ************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/Tool3) ----------------------------- +| \----- (End of Algorithm TopAlgorithm/MyTopAlg) ---------------------------------------------------- +|=/***** Algorithm TopAlgorithm/YourTopAlg *********************************************************** +| |-AuditAlgorithms = False +| |-AuditBeginRun = False +| |-AuditEndRun = False +| |-AuditExecute = False +| |-AuditFinalize = False +| |-AuditInitialize = False +| |-AuditReinitialize = False +| |-EmptyPrivateTool = PrivateToolHandle('') +| |-EmptyPublicTool = PublicToolHandle('') +| |-Enable = True +| |-ErrorCount = 0 +| |-ErrorMax = 1 +| |-InputKey = '' +| |-MonitorService = 'MonitorSvc' +| |-OutputKey = 'YourKey' (default: 'outkey') +| |-OutputLevel = 0 +| |-PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +| |-PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +| |-RndmFactor = 1.0 +| |-ThePublicTool = PublicToolHandle('ConcreteTool') +| |-TheSvc = ServiceHandle('ConcreteSvc') +| |-TheTool = PrivateToolHandle('ToolUsingTool/CustomTool2') (default: 'ToolUsingTool') +| |=/***** Private AlgTool ToolUsingTool/CustomTool2 *************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 18.0 (default: 1.0) +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ConcreteTool/ToolTool') (default: 'ConcreteTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +| | |=/***** Private AlgTool ConcreteTool/CxxDefaultTool ************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/CxxDefaultTool) ---------------------------------------- +| | |=/***** Private AlgTool ConcreteTool/ToolTool ******************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/ToolTool) ---------------------------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/CustomTool2) ------------------------------------------ +| |=/***** Private AlgTool ConcreteTool/Tool1 ********************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ConcreteTool/Tool1) ------------------------------------------------- +| |=/***** Private AlgTool ToolUsingTool/Tool2 ********************************************************* +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') (default: 'ConcreteTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +| | |=/***** Private AlgTool ConcreteTool/ConcreteTool *************************************************** +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/ConcreteTool) ------------------------------------------ +| | |=/***** Private AlgTool ConcreteTool/CxxDefaultTool ************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/CxxDefaultTool) ---------------------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/Tool2) ------------------------------------------------ +| |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/Tool3 ************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/Tool3) ----------------------------- +| \----- (End of Algorithm TopAlgorithm/YourTopAlg) -------------------------------------------------- +\----- (End of AlgSequence /TopAlg) ---------------------------------------------------------------- +Py:Athena INFO including file "AthenaCommon/runbatch.py" +ApplicationMgr INFO Updating ROOT::Reflex::PluginService::SetDebug(level) to level=0 +ApplicationMgr INFO Successfully loaded modules : AthenaServices +ApplicationMgr INFO Application Manager Configured successfully +ApplicationMgr INFO Updating ROOT::Reflex::PluginService::SetDebug(level) to level=0 +StatusCodeSvc INFO initialize +MyTopAlg.Custom... INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +MyTopAlg.Custom... INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool/ToolTool') +MyTopAlg.Custom... INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +MyTopAlg INFO Retrieved TheTool = PrivateToolHandle('ToolUsingTool/CustomTool') +MyTopAlg.Tool2 INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +MyTopAlg.Tool2 INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') +MyTopAlg.Tool2 INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +MyTopAlg INFO Retrieved PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +ToolSvc.Tool5 INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +ToolSvc.Tool5 INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool') +ToolSvc.Tool5 INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +MyTopAlg INFO Retrieved PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +EventPersistenc... INFO 'CnvServices':[ ] +ConcreteSvc INFO Initializing ConcreteSvc... +ConcreteSvc INFO Quote of the day: [Your day will be somewhat dictated by authority] +MyTopAlg INFO Retrieved TheSvc = ServiceHandle('ConcreteSvc') +MyTopAlg INFO Empty private tool is empty (OK) +MyTopAlg INFO Empty public tool is empty (OK) +YourTopAlg.Cust... INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +YourTopAlg.Cust... INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool/ToolTool') +YourTopAlg.Cust... INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +YourTopAlg INFO Retrieved TheTool = PrivateToolHandle('ToolUsingTool/CustomTool2') +YourTopAlg.Tool2 INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +YourTopAlg.Tool2 INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') +YourTopAlg.Tool2 INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +YourTopAlg INFO Retrieved PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +YourTopAlg INFO Retrieved PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +YourTopAlg INFO Retrieved TheSvc = ServiceHandle('ConcreteSvc') +YourTopAlg INFO Empty private tool is empty (OK) +YourTopAlg INFO Empty public tool is empty (OK) +HistogramPersis... INFO 'CnvServices':[ 'HbookHistSvc' , 'RootHistSvc' ] +HistogramPersis...WARNING Histograms saving not required. +AthenaEventLoopMgrWARNING Histograms saving not required. +ApplicationMgr INFO Application Manager Initialized successfully +AthenaEventLoopMgr INFO ===>>> start of run 0 <<<=== +AthenaEventLoopMgr INFO ===>>> start processing event #1, run #0 0 events processed so far <<<=== +MyTopAlg INFO got this quote [Your day will be somewhat dictated by authority]. +MyTopAlg INFO doing my work ... +RndmGenSvc.Engine INFO Generator engine type:CLHEP::RanluxEngine +RndmGenSvc.Engine INFO Current Seed:1234567 Luxury:3 +RndmGenSvc INFO Using Random engine:HepRndm::Engine<CLHEP::RanluxEngine> +MyTopAlg.Custom... INFO performing task using tool (factor: 14) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +MyTopAlg.Custom... INFO performing concrete task (factor: 1) ... +MyTopAlg.Custom... INFO ... concrete task is done +MyTopAlg.Custom... INFO ... task using tool is done +MyTopAlg.Custom... INFO performing concrete task (factor: 1) ... +MyTopAlg.Custom... INFO ... concrete task is done +MyTopAlg.Tool1 INFO performing concrete task (factor: 1) ... +MyTopAlg.Tool1 INFO ... concrete task is done +MyTopAlg.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +MyTopAlg.Tool2.... INFO performing concrete task (factor: 1) ... +MyTopAlg.Tool2.... INFO ... concrete task is done +MyTopAlg.Tool2 INFO ... task using tool is done +MyTopAlg.Tool2.... INFO performing concrete task (factor: 1) ... +MyTopAlg.Tool2.... INFO ... concrete task is done +MyTopAlg.Tool3 INFO performing templated task factor ( 1) ... +MyTopAlg.Tool3 INFO ... templated task is done +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +MyTopAlg INFO ... my work is done! +YourTopAlg INFO got this quote [Your day will be somewhat dictated by authority]. +YourTopAlg INFO doing my work ... +YourTopAlg.Cust... INFO performing task using tool (factor: 18) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +YourTopAlg.Cust... INFO performing concrete task (factor: 1) ... +YourTopAlg.Cust... INFO ... concrete task is done +YourTopAlg.Cust... INFO ... task using tool is done +YourTopAlg.Cust... INFO performing concrete task (factor: 1) ... +YourTopAlg.Cust... INFO ... concrete task is done +YourTopAlg.Tool1 INFO performing concrete task (factor: 1) ... +YourTopAlg.Tool1 INFO ... concrete task is done +YourTopAlg.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +YourTopAlg.Tool... INFO performing concrete task (factor: 1) ... +YourTopAlg.Tool... INFO ... concrete task is done +YourTopAlg.Tool2 INFO ... task using tool is done +YourTopAlg.Tool... INFO performing concrete task (factor: 1) ... +YourTopAlg.Tool... INFO ... concrete task is done +YourTopAlg.Tool3 INFO performing templated task factor ( 1) ... +YourTopAlg.Tool3 INFO ... templated task is done +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +YourTopAlg INFO ... my work is done! +AthenaEventLoopMgr INFO ===>>> done processing event #1, run #0 1 events processed so far <<<=== +AthenaEventLoopMgr INFO ===>>> start processing event #2, run #0 1 events processed so far <<<=== +MyTopAlg INFO got this quote [Your day will be somewhat dictated by authority]. +MyTopAlg INFO doing my work ... +MyTopAlg.Custom... INFO performing task using tool (factor: 14) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +MyTopAlg.Custom... INFO performing concrete task (factor: 1) ... +MyTopAlg.Custom... INFO ... concrete task is done +MyTopAlg.Custom... INFO ... task using tool is done +MyTopAlg.Custom... INFO performing concrete task (factor: 1) ... +MyTopAlg.Custom... INFO ... concrete task is done +MyTopAlg.Tool1 INFO performing concrete task (factor: 1) ... +MyTopAlg.Tool1 INFO ... concrete task is done +MyTopAlg.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +MyTopAlg.Tool2.... INFO performing concrete task (factor: 1) ... +MyTopAlg.Tool2.... INFO ... concrete task is done +MyTopAlg.Tool2 INFO ... task using tool is done +MyTopAlg.Tool2.... INFO performing concrete task (factor: 1) ... +MyTopAlg.Tool2.... INFO ... concrete task is done +MyTopAlg.Tool3 INFO performing templated task factor ( 1) ... +MyTopAlg.Tool3 INFO ... templated task is done +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +MyTopAlg INFO ... my work is done! +YourTopAlg INFO got this quote [Your day will be somewhat dictated by authority]. +YourTopAlg INFO doing my work ... +YourTopAlg.Cust... INFO performing task using tool (factor: 18) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +YourTopAlg.Cust... INFO performing concrete task (factor: 1) ... +YourTopAlg.Cust... INFO ... concrete task is done +YourTopAlg.Cust... INFO ... task using tool is done +YourTopAlg.Cust... INFO performing concrete task (factor: 1) ... +YourTopAlg.Cust... INFO ... concrete task is done +YourTopAlg.Tool1 INFO performing concrete task (factor: 1) ... +YourTopAlg.Tool1 INFO ... concrete task is done +YourTopAlg.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +YourTopAlg.Tool... INFO performing concrete task (factor: 1) ... +YourTopAlg.Tool... INFO ... concrete task is done +YourTopAlg.Tool2 INFO ... task using tool is done +YourTopAlg.Tool... INFO performing concrete task (factor: 1) ... +YourTopAlg.Tool... INFO ... concrete task is done +YourTopAlg.Tool3 INFO performing templated task factor ( 1) ... +YourTopAlg.Tool3 INFO ... templated task is done +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +YourTopAlg INFO ... my work is done! +AthenaEventLoopMgr INFO ===>>> done processing event #2, run #0 2 events processed so far <<<=== +ConcreteSvc INFO Finalizing ConcreteSvc... +HistorySvc INFO Service finalised successfully +ToolSvc.finalize() INFO Removing all tools created by ToolSvc +StatusCodeSvc INFO initialize +ApplicationMgr INFO Application Manager Finalized successfully +ApplicationMgr INFO Application Manager Terminated successfully +Py:Athena INFO leaving with code 0: "successful run" diff --git a/Control/AthenaExamples/AthExJobOptions/share/JobOptionsCustomTopAlg.ref b/Control/AthenaExamples/AthExJobOptions/share/JobOptionsCustomTopAlg.ref new file mode 100755 index 0000000000000000000000000000000000000000..5bb8e6e61282fa7fed4f5c3a262ca6f264ae1445 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/share/JobOptionsCustomTopAlg.ref @@ -0,0 +1,181 @@ +Py:ConfigurableDb INFO Read module info for 3384 configurables from 10 genConfDb files +Py:ConfigurableDb INFO No duplicates have been found: that's good ! +Py:Athena INFO including file "AthenaCommon/Bootstrap.py" +Py:Athena INFO including file "AthenaCommon/Atlas.UnixStandardJob.py" +Py:Athena INFO including file "AthExJobOptions/AthExJobOptions_CustomTopAlgorithmJobOptions.py" +/***** AlgSequence /TopAlg ************************************************************************* +|-<no properties> +|=/***** Algorithm TopAlgorithm/MyCustomAlg ********************************************************** +| |-AuditAlgorithms = False +| |-AuditBeginRun = False +| |-AuditEndRun = False +| |-AuditExecute = False +| |-AuditFinalize = False +| |-AuditInitialize = False +| |-AuditReinitialize = False +| |-EmptyPrivateTool = PrivateToolHandle('') +| |-EmptyPublicTool = PublicToolHandle('') +| |-Enable = True +| |-ErrorCount = 0 +| |-ErrorMax = 1 +| |-InputKey = '' +| |-MonitorService = 'MonitorSvc' +| |-OutputKey = 'outkey' +| |-OutputLevel = 0 +| |-PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +| |-PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +| |-RndmFactor = 33 (default: 42.0) +| |-ThePublicTool = PublicToolHandle('ConcreteTool') +| |-TheSvc = ServiceHandle('ConcreteSvc') +| |-TheTool = PrivateToolHandle('ConcreteTool/ConcreteTool') +| |=/***** Private AlgTool ConcreteTool/ConcreteTool *************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ConcreteTool/ConcreteTool) ------------------------------------------ +| |=/***** Private AlgTool ConcreteTool/Tool1 ********************************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ConcreteTool/Tool1) ------------------------------------------------- +| |=/***** Private AlgTool ToolUsingTool/Tool2 ********************************************************* +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | |-TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +| | |-TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') (default: 'ConcreteTool') +| | |-TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +| | |=/***** Private AlgTool ConcreteTool/ConcreteTool *************************************************** +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/ConcreteTool) ------------------------------------------ +| | |=/***** Private AlgTool ConcreteTool/CxxDefaultTool ************************************************* +| | | |-AuditFinalize = False +| | | |-AuditInitialize = False +| | | |-AuditTools = False +| | | |-Factor = 1.0 +| | | |-MonitorService = 'MonitorSvc' +| | | |-OutputLevel = 7 +| | | \----- (End of Private AlgTool ConcreteTool/CxxDefaultTool) ---------------------------------------- +| | \----- (End of Private AlgTool ToolUsingTool/Tool2) ------------------------------------------------ +| |=/***** Private AlgTool ToolSpace::TemplatedTool<double>/Tool3 ************************************** +| | |-AuditFinalize = False +| | |-AuditInitialize = False +| | |-AuditTools = False +| | |-Factor = 1.0 +| | |-MonitorService = 'MonitorSvc' +| | |-OutputLevel = 7 +| | \----- (End of Private AlgTool ToolSpace::TemplatedTool<double>/Tool3) ----------------------------- +| \----- (End of Algorithm TopAlgorithm/MyCustomAlg) ------------------------------------------------- +\----- (End of AlgSequence /TopAlg) ---------------------------------------------------------------- +Py:Athena INFO including file "AthenaCommon/runbatch.py" +ApplicationMgr INFO Updating ROOT::Reflex::PluginService::SetDebug(level) to level=0 +ApplicationMgr INFO Successfully loaded modules : AthenaServices +ApplicationMgr INFO Application Manager Configured successfully +ApplicationMgr INFO Updating ROOT::Reflex::PluginService::SetDebug(level) to level=0 +StatusCodeSvc INFO initialize +MyCustomAlg INFO Retrieved TheTool = PrivateToolHandle('ConcreteTool/ConcreteTool') +MyCustomAlg.Tool2 INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +MyCustomAlg.Tool2 INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool/ConcreteTool') +MyCustomAlg.Tool2 INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +MyCustomAlg INFO Retrieved PrivateToolList = PrivateToolHandleArray(['ConcreteTool/Tool1','ToolUsingTool/Tool2','ToolSpace::TemplatedTool<double>/Tool3']) +ToolSvc.Tool5 INFO Retrieved TheToolPubTool = PublicToolHandle('ConcreteTool/PublicConcreteTool') +ToolSvc.Tool5 INFO Retrieved TheToolTool = PrivateToolHandle('ConcreteTool') +ToolSvc.Tool5 INFO Retrieved TheToolToolArray = PrivateToolHandleArray(['ConcreteTool/CxxDefaultTool']) +MyCustomAlg INFO Retrieved PublicToolList = PublicToolHandleArray(['ConcreteTool/Tool4','ToolUsingTool/Tool5','ToolSpace::TemplatedTool<double>/Tool6']) +EventPersistenc... INFO 'CnvServices':[ ] +ConcreteSvc INFO Initializing ConcreteSvc... +ConcreteSvc INFO Quote of the day: [Your day will be somewhat dictated by authority] +MyCustomAlg INFO Retrieved TheSvc = ServiceHandle('ConcreteSvc') +MyCustomAlg INFO Empty private tool is empty (OK) +MyCustomAlg INFO Empty public tool is empty (OK) +HistogramPersis... INFO 'CnvServices':[ 'HbookHistSvc' , 'RootHistSvc' ] +HistogramPersis...WARNING Histograms saving not required. +AthenaEventLoopMgrWARNING Histograms saving not required. +ApplicationMgr INFO Application Manager Initialized successfully +AthenaEventLoopMgr INFO ===>>> start of run 0 <<<=== +AthenaEventLoopMgr INFO ===>>> start processing event #1, run #0 0 events processed so far <<<=== +MyCustomAlg INFO got this quote [Your day will be somewhat dictated by authority]. +MyCustomAlg INFO doing my work ... +RndmGenSvc.Engine INFO Generator engine type:CLHEP::RanluxEngine +RndmGenSvc.Engine INFO Current Seed:1234567 Luxury:3 +RndmGenSvc INFO Using Random engine:HepRndm::Engine<CLHEP::RanluxEngine> +MyCustomAlg.Con... INFO performing concrete task (factor: 1) ... +MyCustomAlg.Con... INFO ... concrete task is done +MyCustomAlg.Tool1 INFO performing concrete task (factor: 1) ... +MyCustomAlg.Tool1 INFO ... concrete task is done +MyCustomAlg.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +MyCustomAlg.Too... INFO performing concrete task (factor: 1) ... +MyCustomAlg.Too... INFO ... concrete task is done +MyCustomAlg.Tool2 INFO ... task using tool is done +MyCustomAlg.Too... INFO performing concrete task (factor: 1) ... +MyCustomAlg.Too... INFO ... concrete task is done +MyCustomAlg.Tool3 INFO performing templated task factor ( 1) ... +MyCustomAlg.Tool3 INFO ... templated task is done +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +MyCustomAlg INFO ... my work is done! +AthenaEventLoopMgr INFO ===>>> done processing event #1, run #0 1 events processed so far <<<=== +AthenaEventLoopMgr INFO ===>>> start processing event #2, run #0 1 events processed so far <<<=== +MyCustomAlg INFO got this quote [Your day will be somewhat dictated by authority]. +MyCustomAlg INFO doing my work ... +MyCustomAlg.Con... INFO performing concrete task (factor: 1) ... +MyCustomAlg.Con... INFO ... concrete task is done +MyCustomAlg.Tool1 INFO performing concrete task (factor: 1) ... +MyCustomAlg.Tool1 INFO ... concrete task is done +MyCustomAlg.Tool2 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +MyCustomAlg.Too... INFO performing concrete task (factor: 1) ... +MyCustomAlg.Too... INFO ... concrete task is done +MyCustomAlg.Tool2 INFO ... task using tool is done +MyCustomAlg.Too... INFO performing concrete task (factor: 1) ... +MyCustomAlg.Too... INFO ... concrete task is done +MyCustomAlg.Tool3 INFO performing templated task factor ( 1) ... +MyCustomAlg.Tool3 INFO ... templated task is done +ToolSvc.Tool4 INFO performing concrete task (factor: 1) ... +ToolSvc.Tool4 INFO ... concrete task is done +ToolSvc.Tool5 INFO performing task using tool (factor: 1) ... +ToolSvc.PublicC... INFO performing concrete task (factor: 1) ... +ToolSvc.PublicC... INFO ... concrete task is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool5 INFO ... task using tool is done +ToolSvc.Tool5.C... INFO performing concrete task (factor: 1) ... +ToolSvc.Tool5.C... INFO ... concrete task is done +ToolSvc.Tool6 INFO performing templated task factor ( 1) ... +ToolSvc.Tool6 INFO ... templated task is done +MyCustomAlg INFO ... my work is done! +AthenaEventLoopMgr INFO ===>>> done processing event #2, run #0 2 events processed so far <<<=== +ConcreteSvc INFO Finalizing ConcreteSvc... +HistorySvc INFO Service finalised successfully +ToolSvc.finalize() INFO Removing all tools created by ToolSvc +StatusCodeSvc INFO initialize +ApplicationMgr INFO Application Manager Finalized successfully +ApplicationMgr INFO Application Manager Terminated successfully +Py:Athena INFO leaving with code 0: "successful run" diff --git a/Control/AthenaExamples/AthExJobOptions/src/AnotherConcreteSvc.cxx b/Control/AthenaExamples/AthExJobOptions/src/AnotherConcreteSvc.cxx new file mode 100644 index 0000000000000000000000000000000000000000..b886ef35ec75fe799b8e1297767b0c0407497cff --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/AnotherConcreteSvc.cxx @@ -0,0 +1,92 @@ +///////////////////////// -*- C++ -*- ///////////////////////////// + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// AnotherConcreteSvc.cxx +// Implementation file for class AnotherConcreteSvc +// Author: S.Binet<binet@cern.ch> +/////////////////////////////////////////////////////////////////// + +// STL includes + +// FrameWork includes +#include "GaudiKernel/Property.h" +#include "GaudiKernel/SvcFactory.h" + +// AthExJobOptions includes +#include "AthExJobOptions/AnotherConcreteSvc.h" + +/////////////////////////////////////////////////////////////////// +// Public methods: +/////////////////////////////////////////////////////////////////// + +// Constructors +//////////////// +AnotherConcreteSvc::AnotherConcreteSvc( const std::string& name, ISvcLocator* pSvcLocator ) : + AthService ( name, pSvcLocator ) +{ + // + // Property declaration + // + //declareProperty( "Property", m_nProperty, "descr" ); + + declareProperty( "Qotd", + m_qotd = "Quote is not available for today!", + "Very important message the service has to advertise" ); +} + +// Destructor +/////////////// +AnotherConcreteSvc::~AnotherConcreteSvc() +{} + +// Athena service's Hooks +//////////////////////////// +StatusCode +AnotherConcreteSvc::initialize() +{ + ATH_MSG_INFO ("Initializing " << name() << "..."); + + ATH_MSG_INFO ("Quote of the day: [" << m_qotd.value() << "]"); + return StatusCode::SUCCESS; +} + +StatusCode AnotherConcreteSvc::finalize() +{ + ATH_MSG_INFO ("Finalizing " << name() << "..."); + return StatusCode::SUCCESS; +} + +// Query the interfaces. +// Input: riid, Requested interface ID +// ppvInterface, Pointer to requested interface +// Return: StatusCode indicating SUCCESS or FAILURE. +// N.B. Don't forget to release the interface after use!!! +StatusCode +AnotherConcreteSvc::queryInterface(const InterfaceID& riid, void** ppvInterface) +{ + if ( IVirtualSvc::interfaceID().versionMatch(riid) ) { + *ppvInterface = dynamic_cast<IVirtualSvc*>(this); + } else { + // Interface is not directly available : try out a base class + return AthService::queryInterface(riid, ppvInterface); + } + addRef(); + return StatusCode::SUCCESS; +} + +/////////////////////////////////////////////////////////////////// +// Const methods: +/////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// Non-const methods: +/////////////////////////////////////////////////////////////////// + +StatusCode AnotherConcreteSvc::qotd( std::string& quote ) +{ + quote = m_qotd.value(); + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/ConcreteSvc.cxx b/Control/AthenaExamples/AthExJobOptions/src/ConcreteSvc.cxx new file mode 100755 index 0000000000000000000000000000000000000000..28d61cbd5a82fb8897bd2cef34e8f0b10b814b96 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/ConcreteSvc.cxx @@ -0,0 +1,90 @@ +///////////////////////// -*- C++ -*- ///////////////////////////// + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// ConcreteSvc.cxx +// Implementation file for class ConcreteSvc +// Author: S.Binet<binet@cern.ch> +/////////////////////////////////////////////////////////////////// + +// STL includes + +// FrameWork includes +#include "GaudiKernel/Property.h" +#include "GaudiKernel/SvcFactory.h" + +// AthExJobOptions includes +#include "AthExJobOptions/ConcreteSvc.h" + +/////////////////////////////////////////////////////////////////// +// Public methods: +/////////////////////////////////////////////////////////////////// + +// Constructors +//////////////// +ConcreteSvc::ConcreteSvc( const std::string& name, ISvcLocator* pSvcLocator ) : + AthService ( name, pSvcLocator ) +{ + // + // Property declaration + // + //declareProperty( "Property", m_nProperty, "descr" ); + + declareProperty( "Qotd", + m_qotd = "Your day will be somewhat dictated by authority", + "Very important message the service has to advertise" ); +} + +// Destructor +/////////////// +ConcreteSvc::~ConcreteSvc() +{} + +// Athena Algorithm's Hooks +//////////////////////////// +StatusCode ConcreteSvc::initialize() +{ + ATH_MSG_INFO ("Initializing " << name() << "..."); + ATH_MSG_INFO ("Quote of the day: [" << m_qotd.value() << "]"); + return StatusCode::SUCCESS; +} + +StatusCode ConcreteSvc::finalize() +{ + ATH_MSG_INFO ("Finalizing " << name() << "..."); + return StatusCode::SUCCESS; +} + +// Query the interfaces. +// Input: riid, Requested interface ID +// ppvInterface, Pointer to requested interface +// Return: StatusCode indicating SUCCESS or FAILURE. +// N.B. Don't forget to release the interface after use!!! +StatusCode +ConcreteSvc::queryInterface(const InterfaceID& riid, void** ppvInterface) +{ + if ( IVirtualSvc::interfaceID().versionMatch(riid) ) { + *ppvInterface = dynamic_cast<IVirtualSvc*>(this); + } else { + // Interface is not directly available : try out a base class + return AthService::queryInterface(riid, ppvInterface); + } + addRef(); + return StatusCode::SUCCESS; +} + +/////////////////////////////////////////////////////////////////// +// Const methods: +/////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// Non-const methods: +/////////////////////////////////////////////////////////////////// + +StatusCode ConcreteSvc::qotd( std::string& quote ) +{ + quote = m_qotd.value(); + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/ConcreteTool.cxx b/Control/AthenaExamples/AthExJobOptions/src/ConcreteTool.cxx new file mode 100755 index 0000000000000000000000000000000000000000..a3a2c28b8aeddcfb6178eb97087e780756d0afd5 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/ConcreteTool.cxx @@ -0,0 +1,65 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/ConcreteTool.h" + + +///////////////////////////////////////////////////////////////////////////// + +ConcreteTool::ConcreteTool( const std::string& type, const std::string& name, + const IInterface* parent ) + : AthAlgTool( type, name, parent ) +{ + +// declare any properties here + + declareProperty( "Factor", m_factor = 1., "multiplicative factor to perform task" ); + +} + +//___________________________________________________________________________ +StatusCode ConcreteTool::queryInterface( const InterfaceID& riid, void** ppvIf ) +{ + if ( riid == IVirtualTool::interfaceID() ) { + *ppvIf = (IVirtualTool*)this; + addRef(); + return StatusCode::SUCCESS; + } + + return AthAlgTool::queryInterface( riid, ppvIf ); +} + +//___________________________________________________________________________ +StatusCode ConcreteTool::initialize() +{ + +// perform necessary one-off initialization + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode ConcreteTool::finalize() +{ + +// perform work done at shutdown + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode ConcreteTool::performTask( double& result ) +{ + +// do what needs to be done + ATH_MSG_INFO ("performing concrete task (factor: " << m_factor << ") ..."); + + result = result * 123.; + + msg(MSG::INFO) << "... concrete task is done"; + if ( msgLvl(MSG::DEBUG) ) { msg() << ", result: " << result; } + msg(MSG::INFO) << endreq; + + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/ExampleEvtLoopPreSelectTool.cxx b/Control/AthenaExamples/AthExJobOptions/src/ExampleEvtLoopPreSelectTool.cxx new file mode 100755 index 0000000000000000000000000000000000000000..336daba66c7ad1629303f61d900f1173069a2a73 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/ExampleEvtLoopPreSelectTool.cxx @@ -0,0 +1,64 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/ExampleEvtLoopPreSelectTool.h" +#include "EventInfo/EventInfo.h" +#include "EventInfo/EventID.h" +#include "EventInfo/EventType.h" + + +///////////////////////////////////////////////////////////////////////////// + +ExampleEvtLoopPreSelectTool::ExampleEvtLoopPreSelectTool( const std::string& type, const std::string& name, + const IInterface* parent ) + : AthAlgTool( type, name, parent ) +{ + +// declare any properties here + declareInterface<IAthenaEvtLoopPreSelectTool>( this ); + declareProperty( "PassIfMod", m_prescale = 2, "Keep 1 event in n" ); + +} + +//___________________________________________________________________________ +StatusCode ExampleEvtLoopPreSelectTool::queryInterface( const InterfaceID& riid, void** ppvIf ) +{ + if ( riid == IAthenaEvtLoopPreSelectTool::interfaceID() ) { + *ppvIf = (IAthenaEvtLoopPreSelectTool*)this; + addRef(); + return StatusCode::SUCCESS; + } + + return AthAlgTool::queryInterface( riid, ppvIf ); +} + +//___________________________________________________________________________ +StatusCode ExampleEvtLoopPreSelectTool::initialize() +{ + +// perform necessary one-off initialization + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode ExampleEvtLoopPreSelectTool::finalize() +{ + +// perform work done at shutdown + + return StatusCode::SUCCESS; +} + +//__________________________________________________________________ +bool ExampleEvtLoopPreSelectTool::passEvent(const EventInfo* pEvent) +{ + +// do what needs to be done + ATH_MSG_DEBUG ("Entering PassEvent "); + + + EventID::number_type evtNumber = pEvent->event_ID()->event_number(); + return (0 == (evtNumber % m_prescale)); + } diff --git a/Control/AthenaExamples/AthExJobOptions/src/IVirtualSvc.cxx b/Control/AthenaExamples/AthExJobOptions/src/IVirtualSvc.cxx new file mode 100755 index 0000000000000000000000000000000000000000..7ea3f0abfcdb1fc0c2c93d2995fffacf3552f671 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/IVirtualSvc.cxx @@ -0,0 +1,46 @@ +///////////////////////// -*- C++ -*- ///////////////////////////// + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// IVirtualSvc.cxx +// Implementation file for class IVirtualSvc +// Author: S.Binet<binet@cern.ch> +/////////////////////////////////////////////////////////////////// + +// AthExJobOptions includes +#include "AthExJobOptions/IVirtualSvc.h" + +/////////////////////////////////////////////////////////////////// +// Public methods: +/////////////////////////////////////////////////////////////////// + +// Constructors +//////////////// + +// Destructor +/////////////// +IVirtualSvc::~IVirtualSvc() +{} + +/////////////////////////////////////////////////////////////////// +// Const methods: +/////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// Non-const methods: +/////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// Protected methods: +/////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// Const methods: +/////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// Non-const methods: +/////////////////////////////////////////////////////////////////// + diff --git a/Control/AthenaExamples/AthExJobOptions/src/IVirtualTool.cxx b/Control/AthenaExamples/AthExJobOptions/src/IVirtualTool.cxx new file mode 100755 index 0000000000000000000000000000000000000000..78bbe07fdf8a68df10ec13dacef2605250ebe633 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/IVirtualTool.cxx @@ -0,0 +1,14 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/IVirtualTool.h" + + +///////////////////////////////////////////////////////////////////////////// + +static const InterfaceID IVirtualToolID_( "IVirtualTool", 1, 0 ); + +const InterfaceID& IVirtualTool::interfaceID() { + return IVirtualToolID_; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/KeyMixin.cxx b/Control/AthenaExamples/AthExJobOptions/src/KeyMixin.cxx new file mode 100755 index 0000000000000000000000000000000000000000..772e55c00095fc300cee295f2115ee6ceb8bfa0c --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/KeyMixin.cxx @@ -0,0 +1,19 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/KeyMixin.h" + +#include "AthenaBaseComps/AthAlgorithm.h" + + +///////////////////////////////////////////////////////////////////////////// + +KeyMixin::KeyMixin( AthAlgorithm* alg ) +{ + +// declare key properties for the algorithm + + alg->declareProperty( "InputKey", m_inputKey = "", "key to locate input data" ); + alg->declareProperty( "OutputKey", m_outputKey = "outkey", "key for writing output data" ); +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/NoopAlgorithm.cxx b/Control/AthenaExamples/AthExJobOptions/src/NoopAlgorithm.cxx new file mode 100755 index 0000000000000000000000000000000000000000..123f9add93c8ff425c5c59c4e46b2f49b5ed19a6 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/NoopAlgorithm.cxx @@ -0,0 +1,39 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/NoopAlgorithm.h" + + +///////////////////////////////////////////////////////////////////////////// + +NoopAlgorithm::NoopAlgorithm( const std::string& name, ISvcLocator* svcloc ) : + AthAlgorithm( name, svcloc ) +{ + /* empty */ +} + +//___________________________________________________________________________ +StatusCode NoopAlgorithm::initialize() +{ + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode NoopAlgorithm::reinitialize() +{ + return initialize(); +} + +//___________________________________________________________________________ +StatusCode NoopAlgorithm::execute() +{ + ATH_MSG_INFO ("performing no action"); + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode NoopAlgorithm::finalize() +{ + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/SubAlgorithm.cxx b/Control/AthenaExamples/AthExJobOptions/src/SubAlgorithm.cxx new file mode 100755 index 0000000000000000000000000000000000000000..79745ef21b7ad022b22dbf0888d9d81134d11ba6 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/SubAlgorithm.cxx @@ -0,0 +1,70 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/SubAlgorithm.h" + + +///////////////////////////////////////////////////////////////////////////// + +SubAlgorithm::SubAlgorithm(const std::string& name, ISvcLocator* svcloc ) : + AthAlgorithm( name, svcloc ) +{ + +// declare any properties here + +} + +//___________________________________________________________________________ +StatusCode SubAlgorithm::initialize() +{ + +// perform necessary one-of initialization + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode SubAlgorithm::reinitialize() +{ + +// perform necessary re-initialization + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode SubAlgorithm::beginRun() +{ + +// perform work needed at start of every run + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode SubAlgorithm::execute() +{ + +// perform work done every event + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode SubAlgorithm::endRun() +{ + +// perform work done at end of every run + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode SubAlgorithm::finalize() +{ + +// perform work done at shutdown + + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/TemplatedTool.cxx b/Control/AthenaExamples/AthExJobOptions/src/TemplatedTool.cxx new file mode 100755 index 0000000000000000000000000000000000000000..973401deb2a88f9f6e66c650086af18a80e7dda9 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/TemplatedTool.cxx @@ -0,0 +1,74 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/TemplatedTool.h" + + +///////////////////////////////////////////////////////////////////////////// + +template< class T > +ToolSpace::TemplatedTool< T >::TemplatedTool( const std::string& type, const std::string& name, + const IInterface* parent ) + : AthAlgTool( type, name, parent ) +{ + +// declare any properties here + + declareProperty( "Factor", m_factor = 1., "multiplicative factor to perform task" ); + +} + +//___________________________________________________________________________ +template< class T > +StatusCode ToolSpace::TemplatedTool< T >::queryInterface( const InterfaceID& riid, void** ppvIf ) +{ + if ( riid == IVirtualTool::interfaceID() ) { + *ppvIf = (IVirtualTool*)this; + addRef(); + return StatusCode::SUCCESS; + } + + return AthAlgTool::queryInterface( riid, ppvIf ); +} + +//___________________________________________________________________________ +template< class T> +StatusCode ToolSpace::TemplatedTool< T >::initialize() +{ + +// perform necessary one-off initialization + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +template< class T > +StatusCode ToolSpace::TemplatedTool< T >::finalize() +{ + +// perform work done at shutdown + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +template< class T > +StatusCode ToolSpace::TemplatedTool< T >::performTask( double& result ) +{ + +// do what needs to be done + ATH_MSG_INFO ("performing templated task factor ( " << m_factor << ") ..."); + + result = result * 789.; + + msg(MSG::INFO) << "... templated task is done"; + if ( msgLvl(MSG::DEBUG) ) { msg() << ", result: " << result; } + msg(MSG::INFO) << endreq; + + return StatusCode::SUCCESS; +} + + +///////////////////////////////////////////////////////////////////////////// +template class ToolSpace::TemplatedTool< double >; diff --git a/Control/AthenaExamples/AthExJobOptions/src/TestSvcHandleArrayAlg.cxx b/Control/AthenaExamples/AthExJobOptions/src/TestSvcHandleArrayAlg.cxx new file mode 100644 index 0000000000000000000000000000000000000000..875d8c42b27ac26fce1f3bc557c29dde99a64e0e --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/TestSvcHandleArrayAlg.cxx @@ -0,0 +1,87 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/TestSvcHandleArrayAlg.h" +#include "AthExJobOptions/IVirtualSvc.h" + + +///////////////////////////////////////////////////////////////////////////// + +TestSvcHandleArrayAlg::TestSvcHandleArrayAlg( const std::string& name, ISvcLocator* svcloc ) : + AthAlgorithm( name, svcloc ), + m_listOfSvcs(name) +{ + declareProperty( "SvcList", m_listOfSvcs, "Get important news from a service" ); +} + +//___________________________________________________________________________ +StatusCode TestSvcHandleArrayAlg::initialize() +{ + +// perform necessary one-off initialization + + // retrieve the svc + if ( !m_listOfSvcs.retrieve().isSuccess() ) { + ATH_MSG_ERROR ("could not retrieve [" << m_listOfSvcs << "] !"); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " <<m_listOfSvcs); + } + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TestSvcHandleArrayAlg::reinitialize() +{ + +// perform necessary re-initialization + + return initialize(); +} + +//___________________________________________________________________________ +StatusCode TestSvcHandleArrayAlg::beginRun() +{ + +// perform work needed at start of every run + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TestSvcHandleArrayAlg::execute() +{ + std::string quote = "", totalquote=""; + StatusCode sc; + + ServiceHandleArray< IVirtualSvc >::iterator itSvc = m_listOfSvcs.begin(); + + for ( ; itSvc != m_listOfSvcs.end(); ++itSvc ) { + sc = (*itSvc)->qotd(quote); + if ( sc.isFailure() ) { + ATH_MSG_ERROR + ("Service " << (*itSvc) << " failed to get quote ... stop!"); + return sc; + } + totalquote+=quote+"\n"; + } + ATH_MSG_INFO ("got this quote [" << totalquote << "]."); + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TestSvcHandleArrayAlg::endRun() +{ + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TestSvcHandleArrayAlg::finalize() +{ + + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/ToolUsingTool.cxx b/Control/AthenaExamples/AthExJobOptions/src/ToolUsingTool.cxx new file mode 100755 index 0000000000000000000000000000000000000000..e442ff45f5c45fee1a70537295ea1daa28391445 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/ToolUsingTool.cxx @@ -0,0 +1,119 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/ToolUsingTool.h" + + +///////////////////////////////////////////////////////////////////////////// + +ToolUsingTool::ToolUsingTool( const std::string& type, const std::string& name, + const IInterface* parent ) + : AthAlgTool( type, name, parent ), + m_pubTool( "ConcreteTool/PublicConcreteTool" ), // no parent, making it public + m_privTool( "ConcreteTool", this ), m_toolArray( this ) // adding 'this' makes it private +{ + +// declare any properties here + + declareProperty( "Factor", m_factor = 1., "multiplicative factor to perform task" ); + + declareProperty( "TheToolPubTool", m_pubTool, "global helper to offload tasks to" ); + declareProperty( "TheToolTool", m_privTool, "helper to offload some tasks to" ); + declareProperty( "TheToolToolArray", m_toolArray, "list of helpers to offload some tasks to" ); + + // set default toolArray + m_toolArray.push_back( "ConcreteTool/CxxDefaultTool" ); +} + + +//___________________________________________________________________________ +StatusCode ToolUsingTool::queryInterface( const InterfaceID& riid, void** ppvIf ) +{ + if ( riid == IVirtualTool::interfaceID() ) { + *ppvIf = (IVirtualTool*)this; + addRef(); + return StatusCode::SUCCESS; + } + + return AthAlgTool::queryInterface( riid, ppvIf ); +} + +//___________________________________________________________________________ +StatusCode ToolUsingTool::initialize() +{ + +// perform necessary one-off initialization + +// verify that our tool handle is pointing to an accessible tool + if ( m_pubTool.retrieve().isFailure() ) { + ATH_MSG_FATAL ("Failed to retrieve " << m_pubTool); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " << m_pubTool); + } + + if ( m_privTool.retrieve().isFailure() ) { + ATH_MSG_FATAL ("Failed to retrieve " << m_privTool); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " << m_privTool); + } + + if ( m_toolArray.retrieve().isFailure() ) { + ATH_MSG_ERROR ("Failed to retreive " << m_toolArray); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " << m_toolArray); + } + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode ToolUsingTool::finalize() +{ + +// perform work done at shutdown + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode ToolUsingTool::performTask( double& result ) +{ + +// do what needs to be done + ATH_MSG_INFO ("performing task using tool (factor: " << m_factor << ") ..."); + + StatusCode sc = m_pubTool->performTask( result ); + if ( sc.isFailure() ) { + ATH_MSG_ERROR ("the global, public tool failed it's task ... stop!"); + return sc; + } + + sc = m_privTool->performTask( result ); + if ( sc.isFailure() ) { + ATH_MSG_ERROR ("my tool failed it's task ... stop!"); + return sc; + } + + msg(MSG::INFO) << "... task using tool is done"; + if ( msgLvl(MSG::DEBUG) ) { msg() << ", result: " << result; } + msg(MSG::INFO) << endreq; + +// make list of tools do their work + double newvalue = 12345.0; + ToolHandleArray< IVirtualTool >::iterator itPriv = m_toolArray.begin(), + itPrivEnd = m_toolArray.end(); + for ( ; itPriv != itPrivEnd; ++itPriv ) { + sc = (*itPriv)->performTask( newvalue ); + if ( sc.isFailure() ) { + ATH_MSG_ERROR + ("tool " << (*itPriv).typeAndName() << " failed it's task ... stop!"); + return sc; + } + } + + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/TopAlgorithm.cxx b/Control/AthenaExamples/AthExJobOptions/src/TopAlgorithm.cxx new file mode 100755 index 0000000000000000000000000000000000000000..189066618a9265a35c878fc42e1f10d0dcc5b659 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/TopAlgorithm.cxx @@ -0,0 +1,251 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthExJobOptions/TopAlgorithm.h" +#include "AthExJobOptions/IVirtualTool.h" +#include "AthExJobOptions/IVirtualSvc.h" +#include "AthExJobOptions/SomeData.h" + +#include "GaudiKernel/IRndmGenSvc.h" +#include "GaudiKernel/IRndmEngine.h" + +#include "StoreGate/StoreGateSvc.h" + + +///////////////////////////////////////////////////////////////////////////// + +TopAlgorithm::TopAlgorithm( const std::string& name, ISvcLocator* svcloc ) : + AthAlgorithm( name, svcloc ), KeyMixin( this ), + m_tool( "ToolUsingTool", this ), // 'this' makes it private tool + m_publicTool( "ConcreteTool" ), // public tool + m_listOfPrivateTools( this ), // 'this' makes it a list of private tools + m_listOfPublicTools(), // absense of 'this' makes it a list of public tools + m_svc( "ConcreteSvc", name ), // some default service + m_emptyPrivateTool( "", this ), // empty private tool + m_emptyPublicTool ( "" ) // empty public tool +{ +// declare any properties here + declareProperty( "RndmFactor", m_rndmFactor = 1., "multiplicative random number factor" ); + + declareProperty( "TheTool", m_tool, "helper to offload some tasks to" ); + declareProperty( "ThePublicTool", m_publicTool, "shared helper to offload some tasks to" ); + declareProperty( "PrivateToolList", m_listOfPrivateTools, "list of private helper tools" ); + declareProperty( "PublicToolList", m_listOfPublicTools, "list of public helper tools" ); + declareProperty( "TheSvc", + m_svc = IVirtualSvc_t( "ConcreteSvc", this->name() ), + "Get important news from a service" ); + + declareProperty( "EmptyPrivateTool", + m_emptyPrivateTool, + "Testing an empty private tool" ); + + declareProperty( "EmptyPublicTool", + m_emptyPublicTool, + "Testing an empty public tool" ); + + // initialise list of tools + m_listOfPrivateTools.push_back( "ConcreteTool/Tool1" ); + m_listOfPrivateTools.push_back( "ToolUsingTool/Tool2" ); + m_listOfPrivateTools.push_back( "ToolSpace::TemplatedTool<double>/Tool3" ); + + m_listOfPublicTools.push_back( "ConcreteTool/Tool4" ); + m_listOfPublicTools.push_back( "ToolUsingTool/Tool5" ); + m_listOfPublicTools.push_back( "ToolSpace::TemplatedTool<double>/Tool6" ); + +} + +//___________________________________________________________________________ +StatusCode TopAlgorithm::initialize() +{ + +// perform necessary one-off initialization + +// verify that our tool handle is pointing to an accessible tool + if ( m_tool.retrieve().isFailure() ) { + ATH_MSG_FATAL ("Failed to retrieve " << m_tool); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " << m_tool); + } + + if ( m_listOfPrivateTools.retrieve().isFailure() ) { + ATH_MSG_ERROR ("Failed to retreive " << m_listOfPrivateTools); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " << m_listOfPrivateTools); + } + + if ( m_listOfPublicTools.retrieve().isFailure() ) { + ATH_MSG_ERROR ("Failed to retreive " << m_listOfPublicTools); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " << m_listOfPublicTools); + } + + StatusCode sc = evtStore().retrieve(); + if ( sc.isFailure() ) { + ATH_MSG_ERROR ("could not retrieve StoreGateSvc"); + return sc; + } + + // retrieve the svc + if ( !m_svc.retrieve().isSuccess() ) { + ATH_MSG_ERROR ("could not retrieve [" << m_svc.typeAndName() << "] !"); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("Retrieved " << m_svc); + } + + // check the empty private tool is empty :) + if ( !m_emptyPrivateTool.empty() ) { + ATH_MSG_ERROR ("Empty private tool is NOT empty !!"); + } else { + ATH_MSG_INFO ("Empty private tool is empty (OK)"); + } + + // check the empty public tool is empty :) + if ( !m_emptyPublicTool.empty() ) { + ATH_MSG_ERROR ("Empty public tool is NOT empty !!"); + } else { + ATH_MSG_INFO ("Empty public tool is empty (OK)"); + } + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TopAlgorithm::reinitialize() +{ + +// perform necessary re-initialization + + return initialize(); +} + +//___________________________________________________________________________ +StatusCode TopAlgorithm::beginRun() +{ + +// perform work needed at start of every run + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TopAlgorithm::execute() +{ + +// perform work done every event + + std::string quote = ""; + if ( !m_svc->qotd( quote ).isSuccess() ) { + ATH_MSG_ERROR ("could not retrieve the quote of the day !"); + return StatusCode::FAILURE; + } else { + ATH_MSG_INFO ("got this quote [" << quote << "]."); + } + + SomeData* data = 0; // holder to retrieve data in, if requested + + if ( ! getInputKey().empty() ) { + + // retrieve data of type SomeData, as available under the input key + StatusCode sc = evtStore()->retrieve( data, getInputKey() ); + if ( sc.isFailure() || ! data ) { + ATH_MSG_ERROR ("could not retrieve data for key: " << getInputKey()); + return sc; + } + + ATH_MSG_DEBUG + ("read: " << data->getValue() << " from key: " << getInputKey()); + + } else { + ATH_MSG_DEBUG ("no reading requested"); + } + + ATH_MSG_INFO ("doing my work ..."); + +// calculate a new value based on the old data and the RndmFactor property + double newvalue = ( data ? data->getValue() : 0. ) + + m_rndmFactor * randSvc()->engine()->rndm(); // see Algorithm base class + +// make the tool do it's work on the data + StatusCode sc = m_tool->performTask( newvalue ); + if ( sc.isFailure() ) { + ATH_MSG_ERROR + ("tool " << m_tool.typeAndName() << " failed it's task ... stop!"); + return sc; + } + +// make list of private tools do their work + ToolHandleArray< IVirtualTool >::iterator itPriv = m_listOfPrivateTools.begin(), + itPrivEnd = m_listOfPrivateTools.end(); + for ( ; itPriv != itPrivEnd; ++itPriv ) { + sc = (*itPriv)->performTask( newvalue ); + if ( sc.isFailure() ) { + ATH_MSG_ERROR + ("tool " << (*itPriv).typeAndName() << " failed it's task ... stop!"); + return sc; + } + } + +// make my special tool do its work, if present + ToolHandle<IVirtualTool>* mySpecialTool = m_listOfPrivateTools["Special"]; + if ( mySpecialTool ) { + ATH_MSG_INFO ("Putting my special tool at work: " << *mySpecialTool); + sc = (*mySpecialTool)->performTask( newvalue ); + if ( sc.isFailure() ) { + ATH_MSG_ERROR (mySpecialTool->typeAndName() << " failed it's task ... stop!"); + return sc; + } + } + +// make list of tools do their work + ToolHandleArray< IVirtualTool >::iterator itPub = m_listOfPublicTools.begin(), + itPubEnd = m_listOfPublicTools.end(); + for ( ; itPub != itPubEnd; ++itPub ) { + sc = (*itPub)->performTask( newvalue ); + if ( sc.isFailure() ) { + ATH_MSG_ERROR ("tool " << (*itPub).typeAndName() + << " failed it's task ... stop!"); + return sc; + } + } + +// store result in a recordable object + SomeData* newdata = new SomeData( newvalue ); + + ATH_MSG_INFO ("... my work is done! "); + +// put the new data into the store + sc = evtStore()->record( newdata, getOutputKey() ); + if ( sc.isFailure() ) { + delete newdata; // our responsibility to delete if record fails + ATH_MSG_ERROR ("failed to record data under key: " << getOutputKey()); + return sc; + } + + ATH_MSG_DEBUG + ("wrote data: " << newdata->getValue() << " for key: " << getOutputKey()); + +// no deletion of newdata after successful record + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TopAlgorithm::endRun() +{ + +// perform work done at end of every run + + return StatusCode::SUCCESS; +} + +//___________________________________________________________________________ +StatusCode TopAlgorithm::finalize() +{ + +// perform work done at shutdown + + return StatusCode::SUCCESS; +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/components/AthExJobOptions_entries.cxx b/Control/AthenaExamples/AthExJobOptions/src/components/AthExJobOptions_entries.cxx new file mode 100755 index 0000000000000000000000000000000000000000..a4ca7ad987bcaef1e6e15441f90244da1f6a3143 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/components/AthExJobOptions_entries.cxx @@ -0,0 +1,39 @@ +#include "AthExJobOptions/NoopAlgorithm.h" +#include "AthExJobOptions/TopAlgorithm.h" +#include "AthExJobOptions/SubAlgorithm.h" +#include "AthExJobOptions/TestSvcHandleArrayAlg.h" +#include "AthExJobOptions/ConcreteTool.h" +#include "AthExJobOptions/ToolUsingTool.h" +#include "AthExJobOptions/TemplatedTool.h" +#include "AthExJobOptions/ConcreteSvc.h" +#include "AthExJobOptions/AnotherConcreteSvc.h" +#include "AthExJobOptions/ExampleEvtLoopPreSelectTool.h" + +#include "GaudiKernel/DeclareFactoryEntries.h" + +typedef ToolSpace::TemplatedTool< double > ToolSpaceTemplatedToolDouble; + + +DECLARE_ALGORITHM_FACTORY( NoopAlgorithm ) +DECLARE_ALGORITHM_FACTORY( TopAlgorithm ) +DECLARE_ALGORITHM_FACTORY( SubAlgorithm ) +DECLARE_ALGORITHM_FACTORY( TestSvcHandleArrayAlg ) +DECLARE_TOOL_FACTORY( ConcreteTool ) +DECLARE_TOOL_FACTORY( ToolUsingTool ) +DECLARE_TOOL_FACTORY( ToolSpaceTemplatedToolDouble ) +DECLARE_TOOL_FACTORY( ExampleEvtLoopPreSelectTool ) +DECLARE_SERVICE_FACTORY( ConcreteSvc ) +DECLARE_SERVICE_FACTORY( AnotherConcreteSvc ) + +DECLARE_FACTORY_ENTRIES( AthExJobOptions ) { + DECLARE_ALGORITHM( NoopAlgorithm ) + DECLARE_ALGORITHM( TopAlgorithm ) + DECLARE_ALGORITHM( SubAlgorithm ) + DECLARE_ALGORITHM( TestSvcHandleArrayAlg ) + DECLARE_ALGTOOL( ConcreteTool ) + DECLARE_ALGTOOL( ToolUsingTool ) + DECLARE_ALGTOOL( ToolSpaceTemplatedToolDouble ) + DECLARE_ALGTOOL( ExampleEvtLoopPreSelectTool ) + DECLARE_SERVICE( ConcreteSvc ) + DECLARE_SERVICE( AnotherConcreteSvc ) +} diff --git a/Control/AthenaExamples/AthExJobOptions/src/components/AthExJobOptions_load.cxx b/Control/AthenaExamples/AthExJobOptions/src/components/AthExJobOptions_load.cxx new file mode 100755 index 0000000000000000000000000000000000000000..1ddcfc26d7b8dd609b7cd972d48613dabd5b737c --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/src/components/AthExJobOptions_load.cxx @@ -0,0 +1,3 @@ +#include "GaudiKernel/LoadFactoryEntries.h" + +LOAD_FACTORY_ENTRIES(AthExJobOptions) diff --git a/Control/AthenaExamples/AthExJobOptions/test/AthExJobOptions.xml b/Control/AthenaExamples/AthExJobOptions/test/AthExJobOptions.xml new file mode 100755 index 0000000000000000000000000000000000000000..8669c7d2e95d9abc1ac5adbc595bd145d1f588f1 --- /dev/null +++ b/Control/AthenaExamples/AthExJobOptions/test/AthExJobOptions.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<atn> + <TEST name="JobOptionsTest" type="makecheck" suite="Examples"> + <package>Control/AthenaExamples/AthExJobOptions</package> + <timelimit>5</timelimit> + <author> Wim Lavrijsen </author> + <mailto> pcalafiura@lbl.gov, wlavrijsen@lbl.gov </mailto> + <expectations> + <errorMessage>Athena exited abnormally</errorMessage> + <warningMessage> # WARNING_MESSAGE : post.sh> ERROR</warningMessage> + <successMessage>check ok</successMessage> + <returnValue>0</returnValue> + </expectations> + </TEST> +</atn>