| The Gaudi Framework v28r2-patches (bc4ad17a)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

GaudiAlg

    Package: GaudiAlg
    Package manager : Marco Clemencic
    Commit Id: $Format:%H$

    ================================ Gaudi v28r2 =================================

    ! 2017-03-10 - Charles Leggett (commit 1c2b2e1)

     - Merge branch 'dev/combSeq' into 'master'

       Support for AthSequencers in Scheduler
        See merge request !287

    ! 2017-03-10 - Gerhard Raven (commit f3d7bff)

     - remove all references to endreq

       See merge request !79

    ! 2017-03-01 - Chris Jones, Marco Clemencic (commit 22ec1aa)

     - Merge branch 'GaudiAlg-HistoIDOptimisation' into 'master'

       GaudiAlg::ID optimisation
        See merge request !283

    ! 2017-02-08 - Charles Leggett (commit 09859bd)

     - add sysExecute(EventContext) and extract errorCount from Algorithm base class

       We need to extract the `m_errorCount` variable from the Algorithm base class,
        as it's not important on a per-instance basis, but rather on a job level.
       This is moved to the AlgExecStateSvc.
        This merge request also adds an explicit `IAlgorithm::sysExecute(const
       EventContext&)`, which should become the standard entry point to
       `Algorithm::execute`. This sets the local m_event_context variable, so
       derived classes can get quick access to the current context instead of going
       through the slower thead local `Gaudi::Hive::currentContext()`.
        Note that `IAlgorithm::sysExecute()` has been removed, to avoid "overloaded
       virtual" compiler errors, and should be replaced in all clients with
       `IAlgorithm::sysExecute(EventContext)`, or if the context is not immediately
       available, with `IAlgorithm::sysExecute(Gaudi::Hive::currentContext())`.
        All this is being done in preparation to re-introduce the ReEntrantAlgorithm
       class from merge !177 (see also !274)
        See merge request !273

    ================================ Gaudi v28r1 =================================

    ! 2016-12-14 - Sebastien Ponce (commit ea582c7)

     - Readded missing accessors dropped with the ranges

       See merge request !250

    ! 2016-12-14 - Attila Krasznahorkay (commit a42ff2a)

     - CMake configuration changes to build Gaudi with optional externals missing

       In the last days I experimented a bit with teaching Gaudi how to build when
       only ROOT, Boost and TBB are available to it. This is the result. As far as I
       can tell the code builds in the same way as the current master branch when
       all possible externals are available. (All the ones available in a full ATLAS
       offline build at least.) And I'm also able to build the project in these
       modes:
         * On Ubuntu 16.04 with the system provided Boost and TBB versions, against
       a privately built ROOT 6 version.
         * On macOS Sierra against privately built Boost, ROOT and TBB versions.
       Both when building the project completely on its own, and when building it
       against an ATLAS externals project.
        Some notes:
         * The code uses C++14 expressions in quite a few places by now. So I raised
       the default C++ standard to C++14. This is the default in ATLAS builds since
       a while, I only saw this as an issue when building Gaudi "on its own" with a
       very minimal configuration command.
         * While the code advertises that it still has support for ROOT 5, it's not
       able to build against it since a wile. Since the updates I put in for TLS
       variables on macOS. (The macros used there are ROOT 6 only.) And this update
       makes things even worse. As the code now relies on not providing the
       definition of some classes to the dictionary generator in GaudiPython that
       are not available. (Because AIDA or XercesC is missing.) While ROOT 6 handles
       this with just a build warning, ROOT 5's genreflex treats this with an ERROR
       message. That I was unable to get rid of.
        So, extended testing is clearly necessary, the configuration code could
       definitely be fine tuned as I probably turned off the build of more source
       files than absolutely necessary, but I think we should move ahead with such a
       configuration organisation.
        See merge request !241

    ! 2016-12-14 - Sebastien Ponce (commit efc88ab)

     - Context fixes

       See merge request !248

    ! 2016-12-07 - many contributors (commit dc1b505)

     - port LHCb MT developments to Gaudi master

       among others we have
       - `Gaudi::Functional`: base classes to write algorithms as pure functions
       - `AnyDataWrapper`/`AnyDataHandle`: helper to store any type in the Transient
       Store (DataSvc)
       - fixes to `DataObjectHandle`
       - fixes to `GaudiHive`
       - new tests and examples
       - modernization (removed empty destructors, ...)
        See merge request !245

    ================================ Gaudi v28r0 =================================

    ! 2016-11-08 - Marco Clemencic (commit ec96c27)

     - cleaning up last minute glitches

       - fixed warnings from clang
       - fixed issues with ROOT 6.08
       - minor polishing
       - minor fixes to tests
       - fixed GAUDI-1221
        See merge request !230

    ! 2016-10-27 - Gerhard Raven, Marco Clemencic (commit b111898)

     - modernization of Property

       This is a major rewrite of the system of `Property` classes. Started as  the
       implementation of GAUDI-1214, it continued as a review of
       `IProperty` and `PropertyMgr`, to end up in a complete rewrite
       (and optimization) of `PropertyWithValue`.

       * Fixes GAUDI-1214
        - added missing `declareProperty` signature
        - added `PropertyHolder` (an updated `PropertyMgr`)
        - adapted all properties in Gaudi
       * improved use of `PropertyHolder`
        - use inheritance instead of composition
        - removed ~200 (duplicated) lines of code in GaudiKernel
       * optimization of Property (fixes GAUDI-1229)
        - use templates and automatic code generation to handle efficiently
          both value and reference properties
          - avoid creation of values on the heap (see GAUDI-1229)
          - removed the *owned* boolean flag
          - improved usability of properties (e.g. begin/end wrappers for
            C++11 loops, increment/decrement operators...)
          - deprecated use of C arrays as properties
        - merged features of `PropertyWithVerifier`, `SimpleProperty` and
          `SimplePropertyRef` into `PropertyWithValue`
        - deduplication of name and doc strings via

       [`boost::string_ref`](http://www.boost.org/doc/libs/1_61_0/libs/utility/doc/html/string_ref.html)

          and a static storage  (see GAUDI-1229)
       * Fixes GAUDI-1205
       * add deprecation warnings in service accessors of `Algorithm` (@graven)
       * renamed `Property` base class to `Gaudi::Details::PropertyBase` and
       `PropertyWithValue` to `Gaudi::Property`
        - added backward compatibility type aliases (but not compatible with
          forward declarations of `class Property`, which should be replaced
          by `#include "GaudiKernel/PropertyFwd.h"`)
       * added macro `GAUDI_PROPERTY_v2` to allow easy implementation of
        backward compatible changes in derived projects (e.g. when user code
        relied on `DoubleProperty` having a verifier)
       * Fixes GAUDI-1268
        The changes are as backward compatible as much as possible (except if you
       explicitly inherit from `SimpleProperty`, or you forward declared
       `class Property`, which now are typedefs), but must be validated in the
       experiment frameworks.
        See merge request !182

    ! 2016-10-26 - Marco Clemencic (commit 87456e0)

     - Revert IGenericTool changes in !217

       The changes in IGenericTool included in !217 were not discussed and break
       backward compatibility.

       See merge request !219

    ! 2016-10-25 - Chris Jones (commit be54ccc)

     - Update GaudiHandle to return const Tool access from const Handle

       via `->` and `*` operators and `get()` method
        Also removed unused `ThreadPoolSvc::getThreadInitTools()`.
        See merge request !217

    ! 2016-10-24 - Attila Krasznahorkay (commit ac4dbc7)

     - Changes to build on MacOS X 10.11

       See merge request !200

    ! 2016-10-24 - Gerhard Raven (commit 1692616)

     - Streamline / simplify TupleObj

       See merge request !213

    ! 2016-10-24 - Marco Clemencic (commit a8d6605)

     - hidden/fixed "missing override" warnings exposed after !192

       - warnings from external headers are hidden declaring the include directories
       as `-system`
       - warnings from a couple of new files have been fixed
       - warnings in `HistogramSvc` are hidden because unavoidable (see f83c3d8e)
       - warnings related to CLHEP-136 have been hidden with a special trick (see
       0a238135)
        See merge request !205

    ! 2016-10-19 - Charles Leggett (commit 958570b)

     - Algorithm Execution State Service

       Introduction of AlgExecStateSvc
        All event state information removed from Algorithm base class
       (m_filterPassed, m_isExecuted) as it will cause difficulties with re-entrant
       Algorithms.
        event success/fail flag removed from EventContext
        These flags are moved to be under control of a new service, the
       AlgExecStateSvc, which keeps track of the execution state of all Algorithms,
       and the Event as a whole.
        Algorithm status kept in a new class ```AlgExecState``` which has
       ```
           bool m_filterPassed  {true};
           bool m_isExecuted    {false};
           StatusCode m_execStatus  {StatusCode::FAILURE};
       ```
        AlgExecStateSvc holds an AlgExecState for each Algorithm in each Event
       Slot, as well as an overall ```EventStatus``` for each EventSlot, which can
       be one of

       ```
         Invalid = 0,
         Success = 1,
         AlgFail = 2,
         AlgStall = 3,
         Other = 4
       ```
        Algorithms add themselves to the AlgExecStateSvc upon initialization, but
       the Service's initialization of  the data structures is deferred until the
       first time ```AlgExecStateSvc::reset()``` is called, at which point it's
       probably safe to figure out if there's a WhiteBoard, and the number of slots
       to allocate.
        The EventLoopMgr should call ```AlgExecStateSvc::reset()``` at the start of
       each event. If it's a concurrent EventLoopMgr, it should be
       ```AlgExecStateSvc::reset(EventContext)```, after the EventContext object
       has been updated to reflect the new event.
        Also added an EventContext object to the MinimalEventLoopMgr, so that
       serial/concurrent behaviour is similar.
        Concurrent queries to the AlgExecStateSvc must contain the EventContext, so
       the correct EventSlot can be determined. Serial access is via methods that
       don't have the EventContext as a parameter. For access from Algorithm base
       class (eg from setFilterPassed, isExecuted, etc), if the EventContext ptr
       (m_event_context) in the Algorithm is null, we assume we're running
       serially.
        See merge request !197

    ! 2016-10-12 - Marco Clemencic (commit b5e05a1)

     - improved handling of package version in CMake configuration

       use project version if a package version is not provided
        See GAUDI-1215.
        See merge request !175

    ! 2016-10-01 - Marco Clemencic (commit 99b1001)

     - enable missing override warnings (gcc >= 5.1)

       Fixes GAUDI-1241
        See merge request !192

    ! 2016-08-19 - Marco Clemencic (commit f3050c3)

     - Fix compile time warnings

       fixed/hidden all warnings in GCC builds
        See merge request !189

    ! 2016-07-25 - Marco Clemencic (commit e3d4b07)

     - remove CMT configuration and related files

       * removed CMT configuration files
       * adapted scripts not to use CMT
        Fixes GAUDI-1216 Fixes GAUDI-979
        See merge request !186

    =============================== GaudiAlg v17r1 ===============================

    ! 2016-03-10 - commit 4a18175

     - removed uses of templates implements[1-4], extends[1-4] and
       extend_interfaces[1-4]

       Since merge request !22 they are unnecessary.
        See merge request !133

    ! 2016-02-29 - commit 223ce08

     - Merge branch 'GAUDI-1183' into 'master'

       reorganize DataHandleHolder visitor acces to avoid non-retrieved tools
        This is not a perfect fix, more a workaround.
        The method `initToolHandles` have been modified to fill the list of used
       `ToolHandle`s only with the tools retrieved explicitly in the `initialize`
       method.

       `GaudiCommon` required the introduction of a hook so that the custom _fixer_
       visitor could be created in the `GaudiCommon::initialize`, but used only at
       the end of `PBASE::sysInitialize` (eb39274).
        I also fixed an issue (double delete) with the use of `ToolHandle` from
       `GaudiCommon` (0a1bec8).
        Fixes GAUDI-1183.
        See merge request !120

    ! 2016-02-11 - commit b0618f7

     - Improve CommonMessaging

       Implementation of GAUDI-1146: Improve CommonMessaging and use it in more
       places.

       See merge request !76

       Conflicts:
       GaudiExamples/tests/qmtest/refs/AlgTools2.ref
       GaudiExamples/tests/qmtest/refs/MultiInput/Read.ref
       GaudiExamples/tests/qmtest/refs/conditional_output/write.ref
       GaudiKernel/GaudiKernel/AlgTool.h
       GaudiKernel/GaudiKernel/Algorithm.h
       GaudiKernel/GaudiKernel/Service.h
       GaudiKernel/src/Lib/AlgTool.cpp
       GaudiKernel/src/Lib/Algorithm.cpp

    ! 2016-02-11 - commit e2c585c

     - Remove globalTimeOffset getter and GlobalTimeOffset property from GaudiCommon

       GaudiCommon adds a property GlobalTimeOffset and a corresponding getter
       globalTimeOffset to every algorithm/tool which uses GaudiCommon, regardless
       on whether this property is used.

       As there is no code anymore that actually uses globalTimeOffset, this patch
       removes this accessor and the corresponding property.

       Fixes GAUDI-1122.

       See merge request !61

    ! 2016-02-09 - commit 11d42e4

     - DataHandles fixes for LHCb

       - renamed IDataHandleHolder::accept to acceptDHVisitor to avoid build time
       warnings in LHCb
       - fixed reference file for GaudiExamples.thistwrite

       See merge request !104

    ! 2016-02-09 - commit a4bea2b

     - remove unprotected DEBUG messages added in v27r0

       The merge of the 'hive' branch introduced several _unprotected_ DEBUG
       messages,
     which is against LHCb policies.
        Fixes GAUDI-1174.
        See merge request !102

    ! 2016-02-06 - commit d905569

     - introduce DataHandle and DataObjectHandle

       See merge requests !57 !94 !95

    =============================== GaudiAlg v17r0 ===============================

    ! 2016-01-12 - commit 4dbdc8e

     - fixed clang 3.7 compilation warnings

       Fixes GAUDI-1083.
     See merge request !89

    ! 2016-01-12 - commit 5165b50

     - extend the functionality of TupleObj::farray

       - accept an arbitrary number of columns
       - accept generic 'callables'
        With the exception of an added 'projection', this implements the

       functionality discussed in GAUDI-1100.
        See merge request !77

    ! 2015-12-17 - commit 8119d23

     - Merge branch 'GAUDI-1151' into 'master'

       GAUDI-1151: fixed reference counting of CounterSummarySvc
        In the merge commit fd7f1add, the conflicts in GaudiCommon.icpp were not

       correctly resolved, resulting in a wrong reference count.
        See merge request !81

    ! 2015-11-02 - commit 57f356c

     - Merge branch 'hive' into 'master'

       Fixes GAUDI-978.

       See merge request !65

    ! 2015-10-28 - commit 0335830

     - remove RootOnTES property from GaudiCommon

       RootOnTES has been marked as deprecated in favour of RootInTES since
       (at least) 2009.

       Fixes GAUDI-1112.

       See merge request !52

    ! 2015-10-26 - commit de80db5

     - More modernization changes

       Fix (almost) all warnings from clang 3.7, and use clang-modernize to further
       modernize the code.

       Fixes GAUDI-1118.

       See merge request !49

    =============================== GaudiAlg v16r0 ===============================

    ! 2015-10-07 - commit e3e20a4

     - Merge branch 'GAUDI-1078' into 'master'

       GAUDI-1078: include caller algorithm name in messages from public tools

       Using a feature developed in the LHCb software update the Error, Warning and
       Info method for tools that inherit from GaudiTool to, when created as public
       tools (defined by ultimately being owned by the ToolSvc) to append the
       current active algorithm name to the end of each method.

       So for instance if a private tool would print

           TestToolAlg.ToolC    INFO TestTool:: test info

       a public instance instead prints

           ToolSvc.ToolB        INFO TestTool:: test info [TestToolAlg]

       This feature has proved very useful in applications where a very large number
       of algorithms all use the same public tools, as it allows problems associated
       with what the caller is doing to be much more easy isolated.

       Closes GAUDI-1078.

       See merge request !40

    ! 2015-10-05 - commit f75d8a5

     - Merge branch 'master' into 'master'

       make farray work with (buf,buf+n) range

       This fixes a compilation problem in the Analysis nightly

       See merge request !35

    ! 2015-10-04 - commit 328c078

     - Merge branch 'dev-variadic-interface-base' into 'master'

       Take advantage of variadic templates to implement interface bookkeeping and
       interface casting

       This patch updates the implementation of the interface bookkeeping and
       casting from the current macros + boost mpl code to use variadic templates.

       See merge request !22

    ! 2015-09-25 - commit 35dd00c

     - Merge branch 'dev-smartif-use' into 'master'

       Provide (and use) C++11 smart pointer 'look and feel' for SmartIF

       The aim of this branch is to confine, for everything that inherits from
       IInterface, the calls to addRef(), release() and queryInterface() to the
       SmartIF implementation. Exceptions are a few places where interfaces
       (currently) return bare pointers (instead of SmartIF...) and where one thus
       has to addRef() explicitly to avoid returning a dangling pointer. This can be
       avoided by changing the relevant interface to return a SmartIF instead of a
       bare pointer.

       In addition, make SmartIF 'look and feel' like a smart pointer.

       - use explict bool conversion instead of .isValid()
       - add SmartIF::as<IFace>(), to return a SmartIF<IFace> to an alternate
          interface -- which (together with move) encourages the use of auto
       - add ISvcLocator::as<IFace>(), to return a SmartIF<IFace> to the current
       ISvcLocator.
       - add ServiceManager::service<IFace>() which return SmartIF<IFace> which
       encourages
          the use of auto

       And add a few other C++11 modernizations (eg. prefer STL over raw loop)

       Fixes GAUDI-1094

       See merge request !24

    ! 2015-09-17 - commit d53e750

     - Merge branch 'dev-common-messaging' into 'master'

       Generalize CommonMessaging, and use it to implement the messaging
       functionality ...

       ...in GaudiAlg/GaudiCommon

         CommonMessaging needs two methods to be available to implement its
       functionality:

               const std::string& name() const
              SmartIF<ServiceLocator>& serviceLocator() const

         As CommonMessaging is a mix-in class which uses the 'curiously recurring
       template'
        pattern, it can either demand that the 'Base' class it is 'mixed' into
       already
        provided this functionality, or it can add pure virtual methods to insure
       any
        derived class does so. As this depends on the template argument, one cannot
        a-priori decide which of the two solution is appropriate.

         To solve this problem in a generic way, this patch uses SFINAE to detect
        at compile time whether Base::name() and Base::serviceLocator() -- where
        Base is the template argument provided to CommonMessaging -- are valid
        expressions. If they are, no further action is taken. If not, the missing
        function(s) is (are) added as pure virtual. This is done by specialization
        of two template classes from which CommonMessaging inherits, prior to
        inheriting from Base.  Those specializations are either 'empty' classes,
        or add the missing interface requirement.

       See merge request !19

    ! 2015-09-14 - commit f6ed9be

     - GAUDI-1081: Fixed compilation with -O0 fails after merge request !7

    ! 2015-09-11 - commit c062cbe

     - C++11 modernization changes

       Some trivial - and some not so trivial! - changes which take advantage of
       C++11...

       See merge request !7

    ! 2015-07-21 - Marco Clemencic
     - Fixed some unchecked StatusCode.
     - Fixed some whitespaces.

    =============================== GaudiAlg v15r3 ===============================
    ! 2015-07-09 - Gerhard Raven
     - Fixed GAUDI-996: GaudiSequencer calls resetExecuted of subAlgorithms

    =============================== GaudiAlg v15r2 ===============================
    ! 2014-09-18 - Marco Clemencic
     - Fixed Eclipse Code Analysis warning.
     - Fixed unchecked StatusCode.

    =============================== GaudiAlg v15r1 ===============================
    ! 2014-03-18 - Ben Couturier
     - Fixed bug #104127: remove hwaf configuration.

    =============================== GaudiAlg v15r0 ===============================
    ! 2013-12-11 - Sebastien Binet
     - Added hwaf configuration files.

    ! 2013-07-19 - Marco Clemencic
     - Clean up in the use of the new PluginService.

    ! 2013-07-18 - Marco Clemencic
     - Removed use of obsolete AlgFactory.h, SvcFactory.h, ToolFactory.h,
       AudFactory.h and CnvFactory.h.

    ! 2013-07-17 - Marco Clemencic
     - Removed factories forward declarations and use of DECLARE_FACTORY_ENTRIES.

    ! 2013-07-03 - Marco Clemencic
     - Replaced Reflex queries with TClass queries.

    =============================== GaudiAlg v14r6 ===============================
    ! 2013-07-08 - Marco Cattaneo
     - Patch #5653: Add HistoCountersPrint property to GaudiHistos
       - Add HistoCountersPrint property to GaudiHistos, to control printing of
         booked histogram statistics in finalize. Default true (print the summary)
       - Fix some unchecked StatusCodes

    =============================== GaudiAlg v14r5 ===============================
    ! 2013-04-29 - Chris Jones
     - Patch #5641: Suppress GaudiAlg HbookName.h clang warnings
       Removed the unused method, and reorganized things a bit so this header is no
       longer included by the class headers, and thus everyone downstream, but only
       when the icpp files are compiled.

    ! 2013-04-22 - Marco Clemencic
     - Fixes to patch #5631

    ! 2013-04-22 - Chris Jones
     - Patch #5631: Fix bug in sequencer timer in GaudiAlg

    =============================== GaudiAlg v14r4 ===============================
    ! 2012-11-14 - Marco Clemencic
     - Updated CMakeLists.txt.

    =============================== GaudiAlg v14r3 ===============================
    ! 2012-09-13 - Marco Clemencic
     - Fixed compilation warnings.

    ! 2012-09-11 - Ben Couturier
     - Patch #5518: save TimingHistograms in job histograms
       - converted the SequencerTimerTool to be a GaudiHistoTool
       - book the histograms normally but convert them to ROOT (using Aida2ROOT) in
         order to fill them with alphanumeric bin names
       Note: to ensure that the histograms are correctly written, TimingAuditor was
       changed to intercept the algorithms "Finalize" event, and create the
       histograms at the first time an algorithm is finalized.
       To enable the feature, use the options:

         from Configurables import TimingAuditor, SequencerTimerTool
         p = TimingAuditor()
         p.addTool(SequencerTimerTool, name = "TIMER")
         p.TIMER.HistoProduce = True

    ! 2012-07-27 - Marco Clemencic
     - Rationalized the permissions of files in the repository.

    ! 2012-07-15 - Chris Jones
     - Patch #5464: Implement the 'getIfExists' for GaudiTool as well as GaudiAlgorithm

    =============================== GaudiAlg v14r2 ===============================
    ! 2012-06-08 - Marco Clemencic
     - Added CMake configuration files.

    ! 2012-06-08 - Vanya Belyaev
     - Patch #5410: Enable the suppression of misbalance summary from GaudiTool
       Added a couple of static methods to GaudiTool to enable/disable the summary.

    ! 2012-06-06 - Marco Clemencic
     - Task #22742: Optimize the GaudiAlgorithm get() functions
       - avoid use of SmartDataPtr (only when returning pointers)
       - added an argument to the GetData class to bypass the check
       - implemented getIfExists variants

    ! 2012-05-30 - Vanya Belyaev
     - Patch #5379: Improvements for GaudiAlgs.py
       - GaudiCommon.h
         move fullTESLocation from private to public interface
         (useful for interactive inspections and debug in python)

    ! 2012-05-03 - Marco Clemencic
     - Fixed some "pedantic" warnings.

    =============================== GaudiAlg v14r1 ===============================
    ! 2012-02-24 - Chris Jones
     - Patch #5234: Fix incorrect type in GaudiAlg tuples

    =============================== GaudiAlg v14r0 ===============================
    ! 2011-12-05 - Marco Clemencic
     - Removed the unused FastContainerSvc.

    ! 2011-12-01 - Chris Jones
     - Fixed bug #85377: GaudiTuple tuple does not understand ulonglong
       Update TupleObj to properly support different data types.

    =============================== GaudiAlg v13r8 ===============================
    ! 2011-08-08 - Marco Clemencic
     - Fixing bug #83775: unprotected MSG::DEBUG/VERBOSE
       - Sequencer
       - GaudiCommon

    ! 2011-08-04 - Patrick Koppenburg
     - Patch #4923: GaudiSequencer
       - Correct indentation
       - Protect all debug() with if msgLevel()
       - Add some more verbose() printout
       - Improve doxygen documentation

    ! 2011-06-23 - Hubert Degaudenzi
     - fixed warnings from the eclipse code analysis engine.

    ! 2011-04-27 - Charles Leggett
     - added "-import Boost" to requirements for new CMT
     M     cmt/requirements

    =============================== GaudiAlg v13r7 ===============================
    ! 2011-04-15 - Marco Clemencic
     - Patch #4814: Move EventNodeKiller algorithm from LHCb to Gaudi.
       Imported EventNodeKiller.{h,cpp} from
         svn+ssh://svn.cern.ch/reps/lhcb/LHCb/trunk/Kernel/LHCbAlgs/src
       Modified the imported files to avoid generating debug messages if they are
       not going to be printed.

    ! 2011-03-02 - Patrick Koppenburg
     - Patch #4711: fixed doxygen comment

    =============================== GaudiAlg v13r6 ===============================
    ! 2011-02-18 - Marco Clemencic
     - Fixed icc warnings.

    ! 2011-02-01 - Marco Clemencic
     - Fixed a configuration problem with icc on i686.

    =============================== GaudiAlg v13r5 ===============================
    ! 2011-01-11 - Marco Clemencic
     - Fixed some ICC remarks.

    =============================== GaudiAlg v13r4 ===============================
    ! 2010-09-17 - Vanya Belyaev
     - Patch #4360: Fix for bug #71237 (GaudiHistos treatment of histoProduce incomplete)
       GaudiAlg/GaudiHistos*.h(.icpp)
       - book* & plot* return NULL if histogram are disabled
       - fill          does not rely on "produceHistogram" at all
       with such behaviour everything is coherent.

    ! 2010-09-13 - Olivier Callot, Patrick Koppenburg, Roel Aaij, Marco Clemencic
     - Patch #4299, patch #4332: Add option for filed size in SequencerTimerTool
       Added an option to change the size of the algorithm name in the Sequencer Timer tool:
       SequencerTimerTool("TimingAuditor.TIMER").NameSize = 30

    ! 2010-08-19 - Marco Clemencic
     - Fix for ICC in GaudiAlg/CheckForNaN.h.

    =============================== GaudiAlg v13r3 ===============================
    ! 2010-05-27 - Vanya Belyaev
     - Patch #4044: Fix for bug #66397 and task #13911
       src/GaudiSequencer.cpp
       Fixes to (re)enable the "interactive" insertion of sub-algorithms into
       GaudiSequencer:
        1. Fix the invalid "isInitialized" condition in property handler for
           "Members".
        2. "Upgrade" the state for located sub-algorithms up to the own state
           through the calls for sysInitialize/sysStart.
        3. Add new entries into the timing table in case of update for "Members"
           property.

    =============================== GaudiAlg v13r2 ===============================
    ! 2010-04-20 - Marco Clemencic
     - Removed ICC warnings and remarks.

    ! 2010-04-16 - Vanya Belyaev
     - Patch #3982: Tiny fix for Gaudi::Utils::GetData
       The purpose is to make the utility more safe, in particular the creation of
       ranges is allowed now only for T::Selection and T::container types. Now the
       helper range-creation methods can be used outside the context (e.g. for
       Phys and Hlt), and one can immediately profit e.g. in the fixing of
       FilterDesktop.
       Also the bug("feature") on creation of named-range from container is fixed
       now (the empty name have been always assigned to the range).

    =============================== GaudiAlg v13r1 ===============================
    ! 2010-03-09 - Vanya Belyaev
     - Patch #3892: Proper implementation of GaudiCommon::exist
       - GaudiCommon<>:exist: provide the proper implementation,
                      compatible with "blind" access to data
       - Reimplement GaudiCommon<>::get : make it more efficient
                     (thanks to Gerhard for nice suggestion)
       - Reimplement GaudiCommon<>::getOrCreate provide the proper implementation
                     to be compatible with "blind access to the data"
       - GaudiCommon<>::addToToolList/releaseTool
                     add "debug" printout for added/release tools

    ! 2010-01-29 - Marco Clemencic
     - Fixed icc remark #1599: declaration hides variable

    ! 2010-01-28 - Marco Clemencic
     - Fixed icc remark #424: extra ";" ignored

    =============================== GaudiAlg v13r0 ===============================
    ! 2010-01-15 - Marco Clemencic
     - Fixed compilation on icc 11.
       - GaudiCommon, GaudiHistos, GaudiTuples:
         icc requires that virtual methods of templated classes are defined in the
         class declaration (at least is seems so), otherwise you get an undefined
         reference to virtual thunk at link time.
         For the virtual destructors the change was easy (just move the definition).
         For initialize an finalize, the implementation has been wrapped in
         non-virtual methods and the virtual methods have been modified to call
         their non-virtual counterparts (to be reviewed).
       - TupleObj.h:
         in Tuples::TupleObj::matrix(string,SMatrix), icc cannot tell if the
         unisgned int template argument D1 is a int* or a MIndex (typedef of
         unsigned short), so a hint has been added.

    ! 2010-01-12 - Marco Clemencic
     - Fixed bug #61116: GaudiCommon::Assert and GaudiCommon::Exception should return void
       Changed the return type to void and modified the code accordingly.

    ! 2010-01-11 - Vanya Belyaev
     - Patch #3478: Registration for Algorithm Context Service
       Moved the registration for the context service from GaudiAlgorithm to Algorithm

    ================ GaudiAlg v12r4 ====================================
    ! 2009-10-05 - Marco Clemencic
     - Improvement to the fix to bug #55292:
       Fix the reference counting of sub-algorithms (of GaudiSequencer) to properly
       take into account shared sub-algorithms.

    ! 2009-10-02 - Vanya Belyaev
     - Patch #3157: Remove redundant duplicated  maps from GaudiHistos/GaudiTuples
       - GaudiHistos, GaudiTuples
         remove the separate maps by numerical and by literal ID, use the unique "ID"
         User code which relies on methods

           histoXDMapXXXID    -> histoXDMapID
           profileXDMapXXXID  -> profileXDMapID
           nTupleMapXXXID     -> nTupleMapID
           evtColMapXXXID     -> evtColMapID

         where XXX = { Lit, Num , Numeric ,Literal }

    ! 2009-10-02 - Marco Clemencic
     - Fixed bug #55292: Algorithms are never deleted
       - Fixed a problem in the reference counting of sub-algorithms.

    ================ GaudiAlg v12r3 ====================================
    ! 2009-09-02 - Rob Lambert
     - Patch #3182: Changes in GaudiCommon required for CounterSummarySvc
      Added RegEx.h, ICounterSummarySvc.h
      new protected members:
    	  m_counterSummarySvc, holding a pointer to the service
        m_counterList, a list of RegEx to be declared
        m_statEntityList, a list of RegEx to be declared
      properties:
        CounterList, set the above list, [".*"] default
        StatEntityList, set the above list [] default
      m_counterSummarySvc:
    	  explicitly found in initialize
        explicitly filled and released in finalize
        relies on an ICounterSummarySvc being instantiated by the user.
        it must have the name "CounterSummarySvc"
        If it doesn't exist, a debug message is printed.

    ! 2009-07-30 - Marco Clemencic
     - Fixed some doxygen warnings.

    ! 2009-07-27 - Marco Clemencic
     - Modified GaudiHistos and GaudiTuples to print histograms and tuples in
       alphabetical order during finalize.

    ! 2009-07-20 - Marco Clemencic
     - Added '-no_static' to the declaration of the libraries (implemented since CMT
       v1r20p20081118).

    ! 2009-07-16 - Vanya Belyaev
     - Patch #3134:
       - Some polishing of GaudiPython.GaudiAlgs module and related modules
       - More handles for interactive algorithm inspection (GaudiPython)
       Detailed description in GaudiAlg/doc/patch_3134.html

    ================ GaudiAlg v12r2 ====================================
    ! 2009-07-08 - Christopher Rob Jones
     - Patch #3095: Add support for variable bin width histograms to GaudiAlg

    ! 2009-07-08 - Marco Clemencic
     - Removed the usage of extend_interfaces1.

    ! 2009-07-07 - Marco Clemencic
     - Fixed warning: "dereferencing type-punned pointer will break strict-aliasing rules"
       in GetData.h

    ! 2009-07-03 - Marco Clemencic
     - Fixed bug #46519: Implement the method GaudiCommon::Info()
       Added the method GaudiCommon::Info() similar to GaudiCommon::Warning().

    ================ GaudiAlg v12r1 ====================================
    ! 2009-06-26 - Gerhard Raven
     - Fixed bug #46919: GaudiSequencer does not always register subAlgorithms
       Always register members as subAlgorithms even if not created be the sequencer.

    ! 2009-06-23 - Marco Clemencic, Vanya Belyaev
     - Patch #2980: Moved Range.h and NamedRange.h from GaudiUtils to GaudiKernel.

    ! 2009-06-11 - Hubert Degaudenzi
     - use the new LCG tag convention.

    ================ GaudiAlg v12r0 ====================================
    ! 2009-04-07 - Marco Clemencic
     - Moved back the namespace MSG to the global namespace.

    ! 2009-04-06 - Marco Clemencic
     - Renamed back the namespace Msg to MSG and moved it into the namespace Gaudi.
     - Renamed back INamed to INamedInterface.

    ! 2009-03-13 - Marco Clemencic
     - Task #9061: Introduction of component managers
       - Adapted to use the changes in the ISvcLocator, ISvcManager and IAlgManager
         interfaces.

    ! 2009-02-19 - Marco Clemencic
     - Patch #2790: Rename the namespace MSG to Msg

    ! 2009-01-30 - Marco Clemencic
     - Replaced all the occurrences of endreq with endmsg.

    ! 2009-01-29 - Marco Clemencic
     - Symbol visibility
       - Decorated all the classes and functions that needs to be exported (see
         GaudiKernel release.notes).
       - Added virtual destructors for IGenericTool and ISequencerTimerTool.
       - Minor clean-up (spelling and extra ';')

    ! 2009-01-22 - Marco Clemencic
     - Adapted to the new IInterface functionalities (see GaudiKernel release.notes)
     - Removed the IID_* constants.

    ================ GaudiAlg v11r3 ====================================
    ! 2008-12-01 - Marco Clemencic
     - Fixed bug #44504. Inconsistent default for createIf flag for services.
       Set the default of the flag to "true" as in IServiceLocator.

    ================ GaudiAlg v11r2 ====================================
    ! 2008-11-04 - Marco Cattaneo
     - Patch #2601. Introduce support for file summary records.
       - Two new options for the GaudiAlgorithm base class:
         - "VetoObjects" is a list of TES locations. If one or more of these TES
           objects exists, the algorithm skips the event (execute is not called)
         - "RequireObjects" is a list of TES locations. If set, execute is only
           called if one or more of these TES objects exists.

    ! 2008-10-27 - Marco Clemencic
     - Fixed warnings reported by gcc 4.3:
       - type qualifiers ignored on function return type

    ! 2008-10-10 - Chris Jones
     - Patch #2509. Suppress messages in GaudiAlg when tools are loaded multiple times
       Suppress the warnings when a component loads a tool with the same name
       more than once as this makes sometimes sense (tools with multiple
       interfaces for instance).

    ! 2008-10-10 - Gerhard Raven
     - Patch #2506. GaudiSequencer: bug in setFilterPassed logic in case
                    ModeOR=true, IgnoreFilterPassed=true
       When IgnoreFilter is set to True, and ModeOR is also set to True, the
       filterpassed status was set to False, when it shouldn't be set at all.
     - Patch #2483. Return pointer to 'put' object in GaudiCommon::put
       (includes minor improvement of the debug output)

    ! 2008-10-10 - Marco Clemencic
     - Changed the default value of the property HistoPrint of GaudiHistos base
       class.

    ! 2008-10-10 - Vanya Belyaev
     - Patch #2073: SharedObjectsContainer and 'blind' access to TYPE::Container &
                    TYPE::Selection
       - GaudiCommon<TYPE>::get methods are rewritten in terms of
         Gaudi::Utils::GetData to allow "blind" access to the vector-like
         containers.
       - Utility Gaudi::Utils::GetData which "gets" the data from TES.

    ! 2008-10-09 - Vanya Belyaev
     - Patch #2058. Extensions for AIDA::TProfile1D
        * GaudiAlg/GaudiHistos.h
        * GaudiAlg/GaudiHistos.icpp
       add more default arguments to the methods GaudiHistos::profile1D and
       GaudiHistos::bookProfile1D to allow definition of Y-range and options.

    ================ GaudiAlg v11r1 ====================================
    ! 2008-07-17 - Marco Clemencic
     - Added the interface IGenericTool (from LHCb).

    ================ GaudiAlg v11r0 ====================================
    ! 2008-06-05 - Chris Jones
     - Fixed bug #36021. Unchecked StatusCodes in GaudiCommon<T>::releaseTool.

    ! 2008-06-04 - Chris Jones
     - Patch #1862. Extend space for 'counter' name in GaudiAlg summary.
       - Changed the default format of the counters report table in GaudiAlg to
         give more space for counter names.

    ! 2008-06-02 - Marco Clemencic
     - Task #5809. Extension to Gaudi Application state machine.
       - Removed the usage of setInitialized from sequencers. It is not needed since
         the state is set in sysInitialize.

    ! 2008-05-14 - Patrick Koppenburg
     - Patch #1807. Reduced default print-out of GaudiHistos and GaudiTuples.

    ================ GaudiAlg v10r5 ====================================
    ! 2008-04-04 - Marco Clemencic
     - Bug #35199: GaudiSequencer segfaults if an algorithm cannot be loaded.
       Implemented the suggested check even if the bug is not reproducible with a
       simple test.
     - Bug #34565: Unchecked StatusCode in GaudiTuples<>::initialize().
       Fixed.

    ! 2008-04-03 - Vanya BELYAEV
     - Patch #1749. Improvements of print-outs.
       - Decrease a little bit the number of lines produced by GaudiHistos &
         GaudiTuples classes (requested by Patrick KOPPENBURG).
       - Improve the print-out of the statistical counters & histograms,
         in particular now the final tables looks much nicer, they are not prepended
         with "standard" prefixes, and are more readable.
       - GaudiAlg/Print.h, add the methods PrintXXX::toString.

    ! 2008-04-03 - Marco Clemencic
     - Patch #1725. New IAuditor interface.
       Modified TimingAuditor to implement the new IAuditor interface for both
       standard events and user events.

    ================ GaudiAlg v10r4 ====================================
    ! 2008-02-21 - Marco Clemencic
     - Fixed bug #30209. Support for namespaced algorithms in Sequencer
       The ':' in the name of a member of the Sequencer was interpreted as separator
       for the inversion of the logic of the algorithm, creating problems if the
       algorithm class was in a namespace and an explicit name for the instance was
       not provided.

    ================ GaudiAlg v10r3 ====================================
    ! 2008-01-18 - Marco Clemencic
     - Fixed bug #32541.
       Modified the logic of GaudiCommon<PBASE>::fullTESLocation to return RootInTES
       when the user asks for "" or "/Event" (and the rootInTES flag is true).
     - Fixed a bug in the reporting of booked profile histogram exposed by the
       changes of patch #1625.

    ! 2008-01-17 - Chris Jones
     - Patch #1625.
       - Introduce fix for the problem of non-deterministic automatically
         assigned numerical IDs in the GaudiTuples and GaudiHistos base
         classes.
        + New default behavior is to create a literal (string) auto-ID using
          the histogram title as a basis.
         + Various problematic characters are purged from the string ID.
           By default / is replaced with =SLASH=
        + An option exists to allow the user to switch back to the old way
          if they prefer (a warning is printed to remind the user this is
          potentially dangerous)
       - Remove direct (unnecessary) inclusion of GaudiHistos.icpp in the
         public headers GaudiHistoAlg.h and GaudiHistoTool.h - This include
         draws in other headers that are not needed (and in fact was causing
         compilation problems when the user also included certain ROOT includes).
       - Move a few more methods from inlined in GaudiHistos.h to non-inlined
         in GaudiHistos.icpp (Started by Vanya).
       - Various code clean ups (such as removing some duplicated code)

    ! 2008-01-14 - Gerhard Raven + Marco Cattaneo + Marco Clemencic
     - Re-introduced some code that was removed with patch #1620, but needed for the
       correct work of contexts and rootOnTES.

    ! 2008-01-10 - Gerhard Raven
     - patch #1620 (bug #32030).
       - Modified GaudiSequencer to use createSubAlgorithm instead of creating them
         via the ApplicationManager. This allow also some clean up.
       - Added the property ShortCircuit (true by default) to allow to run all the
         sub-algorithms regardless the accumulated result.

    ! 2007-12-12 - Marco Clemencic
     - patch #1585.
       Fixed warnings about breaking of strict-aliasing rules (gcc 4.1 optimized).

    ! 2007-11-20 - Marco Clemencic
     - Fixed few compilation warnings on win32.

    ================ GaudiAlg v10r2 ====================================
    ! 2007-10-16 - Chris Jones
     - patch #1418. (Register histograms to monitor service using full TES path
                     instead of just base ID)
       Minor fix to GaudiHistos<PBASE>::monitorHisto to use the full TES path
       instead of just the base histogram ID when registering the histogram to
       the monitoring service. I.e. When an algorithm called 'MyAlg' creates a
       histogram with ID 'MyID' register this as 'MyAlg/MyID' instead of just
       'MyID', in order to prevent conflicts in the case some another algorithm
       also creates a histogram with base ID MyID.

    ================ GaudiAlg v10r1 =====================================
    ! 2007-10-02 - Vanya Belyaev
     - Added a few wrapper functions to remove unwanted explicit dependency
       on AIDA (was breaking LHCb compilation).

    ! 2007-09-28 - Vanya Belyaev
     - patch #1345.
       - GaudiAlg/TupleObj.h
         1) change the default type for "integer" data-fields from "long" to "int".
            (it requires some changes in GaudiKernel)
         2) change the signature of some methods for (1)
         3) issue the warning messages for truncated fields:
              - long
              - unsigned long
              - unsigned int
              - double
         4) add a shortcut for column ( IOpaqueAddress* )
         5) remove some clearly confusing "put"-methods
         6) improve doxygen comments
       - src/lib/TupleObj.cpp
         add few static (boost)assertions for explicit checking of
         all assumptions used for Tuples::TupleObj
       - Changed names from "Long" to "Int" (Marco Clemencic).

    ! 2007-09-26 - Vanya Belyaev
     - patch #1375. Allow configuration of Histogram1D from job options.
       - Extended "plot" and "book" methods to use "histogram properties" without
         unpacking them into title/low/high/bins.
       - Move all function bodies (except 1-line) form GaudiHistos.h to
         GaudiHostos.icpp
       - Improve a bit doxygen comments.

    ! 2007-09-25 - Vanya Belyaev
     - patch #1356.
       - GaudiAlgorithm:
         - provide the accessors to IAlgContextSvc service
         - provide new property "RegisterForContextService" to enforce the algorithm
           registration in Algorithm Context Service independently on the external
           configuration of Auditor Service and AlgContextAuditor
           (the default value is true)
         - provide the functionality to select "interesting" algorithms from the
           algorithm context queues (algorithm selectors)
         - implement few simple specializations of selectors for accessors

    ! 2007-09-19 - Vanya Belyaev
     - patch #1273.
       - Added automatic conversion of GaudiAlg::ID to std:string.
       - Added properties to define histograms print out format in GaudiHistos.
       (needs patched GaudiUtils)

    ! 2007-08-06 - Vanya Belyaev
     - patch #1231.
       Remove duplicated lines for printout of counters.
       Added new properties to format the counters to GaudiCommon<TYPE>:
        * "StatTableHeader" : (string) the header line for printout of the table
        * "RegularRowFormat" : (string) the format of the row for the regular
                                        counters
        * "EfficiencyRowFormat" : (string) the format of the row for the "binomial
                                           efficiency counters"
        * "UseEfficiencyRowFormat": (bool) the flag to allow the special formatting
                                           of "binomial efficiency" counters

    ! 2007-07-16 - Marco Clemencic
     - fixes to please gcc 4.1.

    ================ GaudiAlg v10r0 =====================================
    ! 2007-06-05 - Marco Clemencic
     - Added to GaudiCommon.h the include removed from StatEntity.h
       for backward-compatibility.

    ! 2007-05-23 - Vanya Belyaev
     - patch #1161. Improvements and clean-up in StatEntity:
        - Removed "weight"-related functions and methods (unused)
        - Added binomial error calculation for efficiency-like counters
        - Improved print-out format
        - Added methods to make StatEntity mode DIM friendly
        - Some clean up in comments

    ! 2007-05-23 - Marco Clemencic
     - patch #1160. Changed the returned value of
        - Algorithm::setExecuted()
        - Algorithm::resetExecuted()
        - Algorithm::setFilterPassed()
       from StatusCode to void.

    ! 2007-05-15 - Chris Jones
     - Patch #1134. Update the way GaudiCommon handles get and put methods
       to respect the settings of the RootOnTES(now renamed RootInTES, see
       below)
      + Trivially rename the RootOnTES option RootInTES, to force code
        using this to no longer compile. Fixes will be trival, but this is
        done to make sure all cases where this is used are found and
        properly assessed to make sure they are updated appropriately, to
        caught a few special cases.
      + All get and put methods now interally prepend the rootInTES() to
        their data locations as appropriate. A new argument is added to
        the get and put methods to optional disable this new behaviour.

    ! 2007-05-15 - Chris Jones
     Patch #1136:
     - Update to GaudiHistos to automatically register histograms to the
       monitoring service via calls declareInfo(...) when they are booked
       via the plotXD(...) or bookXD(...) methods.
     - New job option 'MonitorHistograms' to turn on/off the histogram
       registration as required (default is true)
     - various other (minor) cleanups to code/doxygen I found along the way

    ! 2007-05-14 - Ivan Belyaev
     Patch #1127.
     - Event tag collections (aka "N-tuples with POOL persistency") allows
       to write as N-tuples items almost all objects, known for
       POOL/Reflex. However this nice fucntionality was not available from
       "friendly" N-tuples interface, used in GaudiTupleAlg and
       GaudiTupleTool.
       The proposed patch solved this problem. Now for tuples with POOL
       persistency one can store ANY objects, known for POOL/Reflex. It is
       done through new (templated) method Tuples::TupleObj::put.

       typical example:

    	   Tuple tuple = evtCol( "COL1" , "Some Event Tag Collection") ;

    	   // fill some fields using regular methods:
    	   tuple -> column ( ... ) ;
    	   tuple -> fill ( ... ) ;
    	   tuple -> array ( ... ) ;
    	   tuple -> farray ( ... ) ;
    	   tuple -> matrix ( ... ) ;
    	   tuple -> fmatrix ( ... ) ;

    	   // fill mandatory IOpaqueAddress field:
    	   DataObject* event = get<DataObject>("/Event") ;
    	   tuple -> column ("Address" , event->registry()->address() ) ;

    	   // get some object, known for POOL/Reflex
    	   const MyTrack* track = ... ;

    	   // put the track directly into Event Tag Collection:
    	   tuple-> put ( "track' , track ) ;

    	   // commit the filled record into N-tuple:
    	   // ATTENTION: the method is again reenabled fro ETC !
    	   tuple -> write() ;

     - Other changes:
       (0) IMPORTANT:Previously the method Tuples::TupleObj::write have
           been disabled form event tag collections. (The actual writing
           have been postponed for OutputStream phase). From now method is
           reenabled again. One CAN use it.. The old way (with
           OutputStream) is still possible but, of course, deprecated.
       (1) The end-of-the-job printout of all known Event Tag Collection
           is extended with the printout of the full map of the field
           names and their actual types.
       (2) The return codes from various methods of class Tuples::TupleObj
           are modified a bit to use the predefined enums instead of the
           generic StatusCode::FAILURE
       (3) The default CLID for event tag collections is set to be
           CLID_ColumnWiseTuple

    ! 2007-05-03 - Chris Jones
     - patch #1135. A minor little fix for GaudiAlg, to correctly define
       the < operator for the GaudiAlg::ID class (was actually doing > !!)

    ================ GaudiAlg v9r12 =====================================
    ! 2007-01-10 - Ivan Belyaev
      patch #1002:
      - New auditor for enhanced timing/profiling of the code. Essentially
        it apply ISequencerTimerTool (used inside GaudiSequencer) for much
        wider context. It perform the audition for ALL algorithms
        (including top level algorithms, algorithms not embedded into
        GaudiSequencers and algorithms invoked by Data-On-Demand service).
      - The auditor depends on the file GaudiAlg/ISequencerTimerTool.h.
      - The usage is fairly trivial:

          ApplicationMgr.ExtSvc = { "ToolSvc", "AuditorSvc"} ;
          ApplicationMgr.AuditAlgorithms = True ;
          AuditorSvc.Auditors += {"TimingAuditor/TIMER"} ;

        The auditor is NOT absolutely perfect. It has 2 modes, defined by
        the boolean property "OptimizedForDOD" (the default value is
        False) :

          TIMER.OptimizedForDOD = True ; /// the default value is "False"

        For difference between modes see the attached printouts for
        standard examples AlgSequencer and DataOnDemand.

        For the mode, optimized for DOD-algorithms they will be shown
        properly at the occasion of the first invocation. In this mode,
        the algorithms, which have been prescaled, filtered or disabled,
        appears (if any) only at the end of the printout table (see
        e.g. the line about "ORCounter", which is NEVER invoked).

        For the mode, non-optimized for DOD-algorithms, one has a proper
        appearence of all prescaled&disabled algorithms, even if they are
        never invoked, but DOD-algorithms appears at the end of the
        listing and are marked with '*' in the first columns.

    ================ GaudiAlg v9r11 =====================================
    ! 2007-01-10 - Patrick Koppenburg
     - patch #967. Changed the incomprehensible message
       "This machine is 0.93 times faster than a 2.8 GHz Xeon"
                            to
        "This machine has a speed about 0.93 times the speed of a 2.8 GHz
        Xeon"

    ! 2006-12-10 - Charles Leggett
     - Removed extra ";" in HbookName.h, HistoID.h, Maps.h, TupleObj.h
     - added reinitialize to Sequencer
     - removed extra GaudiAlgorithm: from GaudiAlgorithm::evtColSvc
     - statuscode fixes in SequencerTimerTool.cpp, Sequencer.cpp

    ! 2006-11-27 - Pere Mato
      Adapted package to the new PluginSvc
      - Removed protected from constructor/destructors and fiendship of
        Factory class

    ! 2006-11-27 - Vanya BELYAEV
      Patch #923
      Fixes in reply to Savannah bug-reports #20265 and #20198
      - GaudiAlg/TupleObj.h
        add the method for filling N-Tuples with
        few basic ROOT::Math objects:
          - 3D/4D vectors and points
              using "TupleObj::columns"
          - SVectors & SMatrices
              using "TupleObj::array" and "TupleObj::matrix"
          - "ExtraInfo" objects
              using "TupleObj::fmatrix"
      - cmt/requirements
        add explicit usage of ROOT

    ! 2006-11-08 - Hubert Degaudenzi
     - fixed memory leak in GaudiCommon.

    ================ GaudiAlg v9r9 ======================================
    ! 2006-10-20 - Olivier Callot
     - Fix the handling of Context and RootOnTES due to the change of
       interface of StringProperty, the adding/removal of extra quote is
       no longer needed.

    ! 2006-10-04 - Olivier Callot
     patch #861:
     - Add two new options 'RootOnTES' and 'GlobalTimeOffset' to work
       with Time Alignment events, propagated to members of a Sequencer
       and to dependent tools of GAudiAlgorithms/Tools like the
       'Context' property.

     - The value of Context, RootOnTES and GlobalTimeOffset is printed at
       the end of the list of algorithms in GaudiSequencer

    ! 2006-09-19 - Olivier Callot
     - Fix the GaudiSequencer setting of the Context property for non-
       GaudiAlgorithm algorithms. This correct a bug due to bug fix
       #18581 on 31/07/2006

    ================ GaudiAlg v9r8 ======================================
    ! 2006-08-21 - Chris Jones
     - patch #813. Currently in GaudiAlg there is an option to split up
       the path used to save the tuple. This is useful for HBOOK which
       has a hard limit, but not for ROOT which does not. Currently this
       option is turned on by default. This simple patch changes the
       default behaviour to not applying this directory splitting. It
       makes the default state better for ROOT, rather than HBOOK.

    ================ GaudiAlg v9r7 ======================================
    ! 2006-06-06 - Ivan Belyaev & Alexander Mazurov
     - update for the new property parser/compiler.

    ! 2006-06-01 - Ivan Belyaev
     - improvement of the counters output. Doesn't print the weight any
       more if it is trivial (=1).

    ! 2006-05-31 - Marco Clemencic
     - patch #731. This patch allows to set the initial storage of the
       TransientFastContainer created via
       GaudiCommon::getFastContainer. Incidentally, it also fixes the bug
       which was preventing GaudiCommon::getFastContainer to work when the
       location of the object does not have the initial root-path
       (equivalent of "/Event").

    ================ GaudiAlg v9r6 ======================================
    ! 2006-05-04 - Marco Clemencic
     - Patch #720. Added to GaudiCommon few commodity functions for
       FastContainersSvc.  fastContainersSvc() returns a pointer to the
       FastContainers Transient Store (creating it if needed).
       getFastContainer<T>(location) returns a pointer to the
       TransientFastContainer<T> located at "location". If it does not
       exist, it is created and registered.

    ================ GaudiAlg v9r5 ======================================
    ! 2006-03-15 - Hubert Degaudenzi
     - changed the return value of the {GaudiAlgorithm,GaudiTool}::put
       from StatusCode::SUCCESS to void. It was meaningless.

     patch #669:
     - Remove boost from public interface (includes in GaudiAlg directory)
     - Implement proper postfix and prefix ++ and -- operators to
       GaudiAlg::ID

    ! 2006-03-09 - Chris Jones
     - patch #665. Make the counter printing by default turned on in
       GaudiCommon. make the counter number summary obey the same job
       option.

    ! 2006-02-22 - Hubert Degaudenzi
     - fix -no_auto_import statements in the requirements file. Remove
       extra semicolon producing warnings with GCC 3.4.4

    ================ GaudiAlg v9r4 ======================================
    ! 2006-01-19 - Pere Mato
     - adapted to use genreflex (Reflex from ROOT)

    ! 2006-01-10 - Hubert Degaudenzi
     - use of the DECLARE_XXX_FACTORY macros. replacement of the
       corresponding code.

    ================ GaudiAlg v9r3 ======================================
    ! 2005-11-29 - Marco Clemencic
     - added registration of the current instance to the UpdateManager as
       a consumer for a condition.

    ! 2005-11-29 - Vanya BELYAEV

     - GaudiAlg/Tuple.h
       GaudiAlg/TupleObj.h
       src/lib/TupleObj.cpp
          remove the member functions of class Tuples::TupleObj
          for filling the N-Tuple with CLHEP objects (3D and 4D-vectors).

        The recommended substitutions:

         SOMEWHERE in LOCAL package, which depends on corresponding
         Geometry or Math library:

          typedef XXXXXX    MyVector3D ;

          // define corresponding partial specialization:
         template <>
         inline Tuples::Tuple& operator<<
            ( Tuples::Tuple&                      tuple ,
             const Tuples::TupleColumn<MyVector>& item  )
          {
            if( !tuple.valid() ) { return tuple ;}
            const MyVector& vct = item.value() ;
            tuple -> column ( item.name() + "X" , vct.x() ) ;
            tuple -> column ( item.name() + "Y" , vct.y() ) ;
            tuple -> column ( item.name() + "Z" , vct.z() ) ;
            return tuple ;
         };

       Of course it is a bit better to split this code into 2 parts

        some *.h file:

          // forward declaration:
          Tuples::Tuple&
              fillNTuple ( tuple                     ,
                           const std::string&  name  ,
                           const MyVector&     vct   ) ;

          // define corresponding partial specialization:
         template <>
         inline Tuples::Tuple& operator<<
            ( Tuples::Tuple&                      tuple ,
             const Tuples::TupleColumn<MyVector>& item  )
          {
            return fillNTuple( tuple , item.name() , item.value() ) ;
          }

         and in some *.cpp file:

         // forward declaration:
          Tuples::Tuple&
              fillNTuple ( tuple                     ,
                           const std::string&  name  ,
                           const MyVector&     vct   )
           {
            if ( !tuple.valid() ) { return tuple ; }
            tuple -> column ( name + "X" , vct.x() ) ;
            tuple -> column ( name + "Y" , vct.y() ) ;
            tuple -> column ( name + "Z" , vct.z() ) ;
            return tuple ;
         };

      As an example one can see the partial specialization
      from LoKi packages for types "TrgDecision*" ,
      "L0DUReport", "L1Score" and many others..

      Simple examples could be found in the head revision of
      GaudiExample package src/TupleEx

     - cmt/requirements
       remove the dependency on CLHEP

    ================ GaudiAlg v9r2 ======================================
    ! 2005-11-18 -  Marco Clemencic
      - Adapted to use the new classes (GaudiUtils::Map, GaudiUtils::Hash,
        GaudiUtils::HashMap) replacing HashTable and the hacks in stl_hash.h

     ! 2005-11-09 - Chris Jones
     - Add fix to GaudiCommon to allow the changes in the messaging levels
       to be correctly picked up. Attaches a callback function to the
       OutputLevel property of the Algorithm or AlgTool base classes

    ! 2005-11-03 - Chris Jones
     - Add fix to obscure crash when using profile histograms in tools, with
       literal IDs and multiple sub-directories. Fixed by cleaning up the
       finalisation counting of histograms.

    ================ GaudiAlg v9r1 ======================================

    ! 2005-10-06 - Chris Jones
     - Add (another) fix for a problem found whilst testing GaudiAlg against
       all of LHCb code. Despite the fact that some methods are members of
       the base class GaudiCommon,
       such as get( IDataProviderSvc*, const std::string& location), it seems
       they are not found unless a forwarding method is placed in both
       GaudiAlgorithm and GaudiTool. ( Possible it could be fixed in user code
       by using the "template" or some such qualifier when making the call,
       but this avoids the need )

    ! 2005-10-03 - Chris Jones
     - Add work around for the fact that the MsgStream object in
       GaudiCommon is first created during construction, and did not have
       the correct properties.  Symptoms are debug messages are not seen
       even if OutputLevel = 2 is set.  Work around is to delete it, if it
       exists, at the start of initialisation, which forces a new object
       to be created with the correct properties.

    ! 2005-09-19 - Chris Jones
     - Techical changes. Switch over from multiple inheritance to
       templated inheritance.  Functionailty remains unaltered.

    ! 2005-08-11 - Chris Jones

     - Introduction of base class GaudiCommon for GaudiAlgorithm and
       GaudiTool that implements much of the common functionality, to
       reduced duplicate code.

     - Introduction of base class GaudiHistos for GaudiHistoAlg and
       GaudiHistoTool that implements the common histogramming
       functionality, to reduced duplicate code.
     - Introduction of base class GaudiHistos for GaudiTupleAlg and
       GaudiTupleTool that implements the common ntupling functionality,
       to reduced duplicate code.

        + With these new classes, it is now possible or any algorithm or
          tool (as long as they ultimately derive from GaudiTool or
          GaudiAlgorithm) to "opt-in" to the histogramming or ntupling
          features, by simply deriving from GaudiHistos or GaudiTuples
          (GaudiHistoTool and GaudiHistoAlg are in fact now simply
          examples of classes which do this). A use case for this is for
          example, if a user wishes to use an algorithm base class which
          ultimately inherits from GaudiAlgorithm, say 'RichAlgBase', but
          also wishes to have histogramming available, they can now do so
          by creating an algorithm which inherits from *both* RichAlgBase
          and GaudiHistos.

     - Add support for 'easy' 1D and 2D profile histograms to GaudiHistos

     - Add support for alpha-numeric histogram and ntuple IDs in
       GaudiHistos and GaudiTuples. Acheived by extending
       GaudiAlg::HistoID which was previously a typedef to an integer,
       into a simple class with both integer and string constructors.

    ================ GaudiAlg v9r0 ======================================
    ! 2005-08-06 - Vanya BELYAEV

     - a lot of minor modifications, but everything
       is *BACKWARD COMPATIBLE* modifications are forced mainly
       by requirement of better interactive functionality in
       Python-mode

                        Major Modifications:
                       ======================

           I. GaudiAlgorithm & GaudiTool
           -----------------------------

       I.A) The same classes GaudiAlgorithm & GaudiTools now are equipped
          with the embedded generic statistical "counters", e.g.

           if ( 100 < nTrack  ) { ++counter("busy event") ; }

           counter("#Tracks") += tracks->size() ;

       The counters are based on modified  StatEntity object from
       GaudiKernel package.

           StatEntity& ok = counter("OK") ;
            ok += 10 ;
            ok -= 10 ;
            ++ok ;
            --ok ;
            ok++ ;
            ok-- ;

       They provide the access to the overall number
       of invocations, mean value min/max/rms, etc... , e.g.

            const StatEntyty& nTrack = counter("#nTrack") ;
            double nTrack_MEAN = nTrack.flagMean() ;
            double nTrack_RMS  = nTrack.flagRMS () ;
            double nTrack_MIN  = nTrack.flagMin () ;
            double nTrack_MAX  = nTrack.flagMax () ;

       The actual functionality comes from StatEntity object,
       which allows "additive" and "multiplicative" arithmetic.

       I.B) The base classes GaudiAlgorithm and GaudiTool now get three
          new properties:

       ======================================================================
          Property   | default value |       description
       ==============+===============+=======================================
        "TypePrint"  |    true       | The actual algorithm/tool C++ type
                     |               | to be used in the standard "Print"
                     |               | printout.
       --------------+---------------+---------------------------------------
        "StatPrint"  |   false       | The printout of general statistical
                     |               | counters to be performed at the
                     |               | finalization step.
       --------------+---------------+---------------------------------------
       "ErrorsPrint" |    true       | The printout of exception/error/warning
                     |               | counters to be performed at the
                     |               | finalization step.
       ======================================================================

       The choice of default values guarantees the absolute backward
       compatibility.

       The public accessors("getters") to these new properties are provided:

             bool typePrint   () const ;
             bool statPrint   () const ;
             bool errorsPrint () const ;

       I.C) The base classes GaudiAlgorithm and GaudiTool now get two
          new public methods:

             long printStat   () const ;
             long printErrors () const ;

          These new methods allows "dump" the current values of
          general statistical counters ("printStat") and the
          exception/error/warning counters ("printErrors").
          The return value is a total number of corresponding
          counters

         II. GaudiHistoAlg & GaudiHistoTool
         -----------------------------------

      II.A) The base classes GaudiHistoAlg and GaudiHistoTool now get
            new property:

       ======================================================================
          Property   | default value |       description
       ==============+===============+=======================================
        "HistoPrint" |   false       | The printout of general information
                     |               | about booked histograms (ID,title,
                     |               | #entries,<X>,rms) to be performed
                     |               | at finalization step
       ======================================================================

       The public accessor("getter") to this new property is provided:

             bool histosPrint   () const ;

       II.B) The base classes GaudiHistoAlg and GaudiHistoTool now get
             the new public method:

             long printHistos () const ;

          These new methods allows to perform printout of
          general information about all currently booked
          histograms (ID, title, #entries, <X>, rms, ...)

       II.C) The bug is fixed in the filling of 3D-histograms

         III. GaudiTupleAlg & GaudiTupleTool
         -----------------------------------

      III.A) The base classes GaudiTupleAlg and GaudiTupleTool now get
             two new properties:

       ======================================================================
          Property   | default value |       description
       ==============+===============+=======================================
       "NTuplePrint" |   false       | The printout of general information
                     |               | about booked N-Tuples (ID,title,
                     |               | #items, item list,...) to be performed
                     |               | at finalization step
       --------------+---------------+---------------------------------------
       "EvtColsPrint"|   false       | The printout of general information
                     |               | about booked Event Tag Collections
                     |               | (ID,title, #items, item list,...) to
                     |               | be performed  at finalization step
       ======================================================================

       The public accessors("getters") to these new properties are provided:

             bool tuplesPrint    () const ;
             bool evtColsPrint   () const ;

      III.B) The base classes GaudiTupleAlg and GaudiTupleTool now get
             two new public method:

             long printTuples  () const ;
             long printEvtCols () const ;

          These new methods allows to perform a printout of
          general information about all currently booked
          N-Tuples and Event Tag Collections
          (ID, title, #items, item list, etc..)

          IV. Technical modifictaions to please python.
          ----------------------------------------------

       1) For *Tool.h classes few methods have been moved from
       the private/protected into the public interface
       2) For *Tuple* classes few methods have been moved from
       the private/protected into the public interface
       3) Some code duplication is eliminated from GaudiToolImpl.h
       and GaudiAlgorithmIml.h files. In particular the namespaces
       GaudiAlgLocal and GaudiToolLocal are eliminated. The components
       have been merged togather into reimplemented GaudiAlg namespace
       4) New files GaudiAlg/Print.h and src/lib/Print.cpp to
          (a) make easier implementation of new "print*" methods in
          the base classes and (b) make trivial printout of this
          classes in the python
       5) Imporved Doxygen comments for some classes/files/methods

      Nes files:
      ==========

      $GAUDIALGROOT/GaudiAlg/GaudiAlg.h
      $GAUDIALGROOT/GaudiAlg/Print.h
      $GAUDIALGROOT/src/lib/GaudiAlg.cpp
      $GAUDIALGROOT/src/lib/Print.cpp

    ! 2005-08-05 - Olivier Callot
     - Remove the printing of the context in GaudiAlgorithm and GaudiTool
       constructors: This was using 'info()' which was not properly initialised
       and thus is no longer working: setting OutputLevel to 2 or 1 had no effect.

    ! 2005-07-29 - Olivier Callot
     - patch #493. Add a jobOption 'GlobalTiming' (bool) to the
       SequencerTimerTool. If set 'true', this forces 'measureTime' for
       all GaudiSequencer. Default is false. This is a way to get an
       indented list of the algorithms used in a job.

    ! 2005-07-18 - Hubert Degaudenzi
     - patch applied to solve bug #9470 from Mattias Ellert.

    ================ GaudiAlg v8r9 ======================================
    ! 2005-06-23 - Olivier Callot
     - New data member 'm_context' and public accessor 'context()' for
       GaudiAlgorithm and GaudiTool, a string which is passed from
    	 GaudiSequencer to created GAudiAlgorithms, or to GaudiTools
       created by a GaudiAlgorithm or GaudiTool.
       If the value is non empty, it is printed in the base class
       constructor and available as early as in the class constructor.

    ! 2005-06-17 - Olivier Callot
     - New method to ISequencerTimerTool : int indexByName( std::string )
       This returns the index of the timer with that name. Leading and
       trailing spaces are ignored. If not found, -1 is returned. This
       can be used to get the time spent on the current event by another
       algorithm, using 'lastTime( int )', for monitoring purpose.

    ================ GaudiAlg v8r8 ======================================
    ! 2005-05-18 - Olivier Callot
     - Change the time normalisation in SequencerTimerTool: Default is not
       to normalise, i.e. to print measured time, but we always pring the
       value of the normalisation factor, now compared to 2.8 GHz Xeon.

    ! 2005-05-01 - Vanya BELYAEV

     - GaudiAlg/TupleObj.h, src/lib/TupleObj.cpp

       add 3 families of new methods
       (1) "array" :
           put a FIXED-size arrays/vetors in to N-Tuple
           This possibility is often useful to allow
           a more names/varianbles to be put into N-Tuple
       (2) "matrix" :
           put a FIXED-size MATRICES into N-Tuple
       (3) "fmatrix" :
           put a VARIABLE-size MATRICES into N-Tuple

      Typical examples:
      =================

        // fixed-size array (A)
        const size_t nCol =  50 ;
        double array1[nCol] ;
        tuple -> array( "a1" , array1 , array1 + nCol ) ;

        // fixed-size array (B)
        typedef std::vector<double> Array ;
        Array array2 = ... ;
        tuple -> array( "a2" , array2 ) ;

        // fixed-size array (C)
        CLHEP::HepVector array3 = ... ;
        tuple -> array( "a3" , array3 , array3.num_row() ) ;

        // fixed-size matrix (A)
        const size_t nRow = 15 ;
        const size_t nCol =  5 ;
        double mtrx1[nRow][nCol] ;
        ...
        tuple -> matrix ( "m1" , mtrx1 , nRow , nCol ) ;

        // fixed-size matrix (B)
        const CLHEP::HepMatrix mtrx2 = ... ;
        tuple -> matrix ( "m2"            ,
                          mtrx2           ,
                          mtrx2.num_row() ,
                          mtrx2.num_col() ) ;

        // fixed-size matrix (C)
        typedef std::vector<double> Row  ;
        typedef std::vector<Row>    Mtrx ;
        Mtrx mtrx3 = Mtrx( nRow , Row( nCol ) ) ;
        ...
        tuple -> matrix ( "m3" , mtrx3 , nRow , nCol ) ;

        // variable-size matrix (A)
        Mtrx mtrx4 = Mtrx( nRow , Row ( nCol ) ) ;
        ...
        tuple-> fmatrix( "m4"          ,
                         mtrx.begin () ,
                         mtrx.end   () ,
                         nCol          ,
                         "Len1"        ,
                         100           ) ;

        // variable-size matrix (B)
        Mtrx mtrx5 = Mtrx( nRow , Row ( nCol ) ) ;
        ...
        tuple-> fmatrix( "m5"          ,
                         mtrx          ,
                         nRow          ,
                         nCol          ,
                         "Len2"        ,
                         100           ) ;

        // "direct"("cross") product of variable vector of data
        // with fixed size vector of  functions/functors
        Array array4 = .... ; // vector of data (variable size)
        ...
        typedef double (*fun) ( double ) ;
        typedef std::vector<fun> Funs    ;
        Funs.push_back( sin ) ;
        Funs.push_back( cos ) ;
        Funs.push_back( tan ) ;

        tuple -> fmatrix ( "m6"            ,
                           funs.begin   () ,
                           funs.end     () ,
                           array4.begin () ,
                           array4.begin () ,
                           "Len6"          ,
                           200             ) ;

         //It is especially convinient to be used in conjunction with
         //LoKi functors (or any piece of software which uses the concept
         //of generic functors)

          typedef std::vector<Fun>  VctFun ;

          // sequence of Particles
          Range particles = .... ;

          // vector of functions:
          VctFun funs ;
          funs.push_back( E  / GeV ) ;
          funs.push_back( PX / GeV ) ;
          funs.push_back( PY / GeV ) ;
          funs.push_back( PZ / GeV ) ;
          funs.push_back( PT / GeV ) ;
          funs.push_back( M  / GeV ) ;
          funs.push_back( ID       ) ;

           // fill N-Tuple with information abvout each particle
           tuple -> fmatrix ( "vars"             ,
                              funs.begin      () ,
                              funs.end        () ,
                              particles.begin () ,
                              particles.end   () ,
                              "nParts"           ,
                              200                ) ;

      - GaudiAlg/Tuples.h
        add new useful adapter to resurrect a possibility to
        use pointer to functions in conjunction with
        TupleObj::* methods (this possiblity has been
        eliminated by gcc 3.X compiler: pointer to function
        has never been evaluates as "const TYPE&" in template
        instantiations)

        using namespace Tuples ;

        typedef std::vector<double> Array ;
        Array arr = ... ;

        tuple -> farray ( "sinarr"        ,
                          useFun  ( sin ) , // use adapter!
                          "cosarr"        ,
                          useFun  ( cos ) , // use adapter!
                          "tanarr"        ,
                          useFun  ( tan ) , // use adapter!
                          arr.begin ()    ,
                          arr.end   ()    ,
                          "Length"        ,
                          500             ) ;

    ================ GaudiAlg v8r7 ======================================
    ! 2005-04-14 - Vanya Belyaev
      - removed memory leaks in GaudiTool and GaudiAlgorithm finalize method.

    The missing include is

    #include "GaudiAlg/TupleObj.h"

    ================ GaudiAlg v8r6 ======================================
    ! 2005-02-02 - Vanya Belyaev
     - TupleObj.h/.cpp: Overcome the problem that CLHEP::Hep3Vector and
                        HepGeom::BasicVector3D<double>  are completely unrelated classes
                        in the new CLHEP.

    ================ GaudiAlg v8r5 ======================================
    ! 2005-02-02 - Chris Jones
     - Added #include "GaudiAlg/TupleObj.h"
     - Changes in comments to fix Doxygen documentation
    ================ GaudiAlg v8r4 ======================================
    ! 2005-01-18 - Chris Jones
     - Updates to GaudHistoAlg and GaudiHistoTool to add 2D and 3D histograms
     - Various improvements to the doxygen comments
     - Downgrade the warning messages about histogramming or ntupling turned off
       to debug level

    ================ GaudiAlg v8r3 ======================================
    ! 2005-01-10 - Pere Mato
     - GaudiSequencer: Added the option "ReturnOK" forcing the sequencer to return a good status.
       This will be useful for DaVinci and Hlt studies.  (Olivier Callot)

    ! 2004-11-12 - Olivier Callot
     - Change the normalisation of the SequencerTimerTool: Now done with user time,
       less accuirate ( 10ms step) but reproducible ! Need to measure on 1 second
       to get 100 ticks to get some accuracy. shots defaults to 2 167 000.

    ================ GaudiAlg v8r2 ======================================
    ! 2004-10-20 - Olivier Callot
     - Use the 'filterPassed' result even if the algorithm was already run and not
       run a second time, in GaudiSequencer.
     - The SequencerTimerTool normalizes all the measurement times to a  random
       number generation loop, which takes 100 ms on a 1 GHz P3. Can be changed
       with the option 'shots' = 207500 by default. Normalisation printed at the
       finalization of the tool, in the table.
       This normalisation can be removed by the option 'normalised = false'

    ================ GaudiAlg v8r1 ======================================
    ! 2004-10-13 - Marco Cattaneo
     - In GaudiHistoAlg, GaudiHistoTool:
       . Remove m_histoPath member variable and setHistoPath accessor
       . Full histogram path is build explicitly when invoking histoPath() function
       > These changes allow to modify histoTopDir and histoDir even after initialize
       > Equivalent changes done also in GaudiTupleAlg, GaudiTupleTool
     - Many fixes to doxygen comments to suppress doxygen warnings

    ! 2004-09-06 - Vanya Belyaev
     - GaudiAlgorithmImp.h, GaudiToolImp.h: typo in the implementation of method ::exist().

    ! 2004-08-03 - Olivier Callot
     - In SequencerTimerTool, prevent printing two consecutive lines with the same
       name: This occurs when a Sequencer calls a Sequencer and both are timed. The
       two lines have almost the same values.

    ================ GaudiAlg v8r0 ======================================
    ! 2004-07-12 - Pere Mato
     - Merged with GaudiTools package to avoid cyclic dependency

    ! 2004-07-02 - Vanya BELYAEV
     - GaudiAlgorithm: Added exist() method to check existence of objects in Gaudi Transient Store
                       Added existDet() method to check existence of objects in Detector Transient Store
                       Added getOrCreate() method to get or create objects in the Event Transient Store
     - GaudiTool: Added exist() method to check existence of objects in Gaudi Transient Store
                  Added getOrCreate() method to get or create objects in the Event Transient Store
     - Added AIDA namespace for Histograms
     - Added the message "The ERROR message is suppressed : ....." when a error is supressed
     - CheckForNaN.h header file
     - New GaudiHistoTool: The base class for tools, equipped with histogramming facilities
     - New GaudiTupleTool: The base class for tools, equipped with N-tuple facilities
     - Added three new tools:  ErrorTool, HistoTool, TupleTool

    ! 2004-07-06 - Pere Mato
     - requirements: adapted to use new LCGCMT interface packages

    ================ GaudiAlg v7r3p1 ======================================
    ! 2004-07-02 - Patrick Koppenburg
     - GaudiHistoAlg.cpp Fixed uninitialzed variable.

    ================ GaudiAlg v7r3 =======================================
    ! 2004-06-04 - Olivier Callot
     - Fix the way to return an error in GaudiSequencer, my bad understanding of
       the GaudiAlgorithm methods.

    ! 2004-06-14 - Marco Cattaneo
     - HbookName.h: Changed the length of Hbook names from 8 to 16

    ! 2004-05-24 - Olivier Callot
     - Add new algorithm GaudiSequencer (.h, .cpp), to replace the Sequencer. Uses
       a private auxiliary class AlgorithmEntry.h.
       Auxiliary tool SequencerTimerTool(.h, .cpp), with private class
       TimerForSequencer.h, to measure the time taken in the sequencer.

    ! 2004-05-28 - Marco Cattaneo
     - GaudiHistoAlg.h/.cpp:
       . Change default value of HistoSplitDir option to false. The true option is
         useful only for HBOOK persistency, if algorithm name is longer than 16 chars
       . Re-order data member initialization to avoid gcc warnings

    ! 2004-04-28 - Matthew David Needham
     - GaudiHistoAlg.h: Added function missing from the implementation of the
      GaudiHistoAlg class (as is described in the documentation !)

    ! 2004-04-28 - Gerhard.Raven@nikhef.nl
     - Corrected tiny typos in GaudiTupleAlg

    ================ GaudiAlg v7r2 =======================================
    ! 2004-04-01 - Pere Mato
     - requirements: added -no_auto_imports for AIDA
       [bugs #2797] Missing no_auto_import in GaudiAlg requirements (Marco Cattaneo)

    ! 2004-03-15 - Vanya BELYAEV
     - GaudiAlg/Tuple.h
      fix a trivial and stupid bug in the
      implementation of Tuples::make_column and Tuples::Column
      partial specializations

    ================ GaudiAlg v7r1 =======================================
    ! 2004-03-04 - Vanya Belyaev
     - The purpose of these modification is to provide the possibility
       to extend the N-tuple "representation" of specific "complex" objects
       (e.g. EventHeader, L0DUReport, or L1Report) through class template
       specializations. It could be useful also to modify the default representation
       of e.g. HepLorentzVector. The default implemtation puts 4 components in the
       Ntuple, but for local specialization one could use alternative
       representation e.g. mass & pt.
       Aslo the possibility to use other implementations of TupleObj class in
       derived classes is provided.

    ================ GaudiAlg v7r0 =======================================
     - GaudiAlgorithm, GaudiHistoAlg,GaudiTupleAlg - new base classes for
       user algorithms with
        - easy and safe access to tools, services, and data in  TES
        - error handling
        - histogramming
        - ntuples
       The detailed description if available  in doc/GaudiAlg.tex file

    ================ GaudiAlg v6r5 =======================================
    ! 2003-11-20 - Pere Mato
     - removed compilation warnings

    ================ GaudiAlg v6r4 =======================================
    ! 2003-01-06 - Sebastien Ponce
     - better support for gcc 3.2

    ================ GaudiAlg v6r3p1 =======================================
    ! 2002-11-29 - Pere Mato
     - Corrections to support linking applications statically

    ================ GaudiAlg v6r3 =======================================
    ! 2002-09-27 - Vanya Belyaev
     - Corrected bug it setDetData()
     - Added macro ALG_ERROR to print file name and line number when reporting errors

    ================ GaudiAlg v6r2 =======================================
    ! 2002-09-27 - Pere Mato
     - Added new base class GaudiAlgorithm developed originally in the context of
       the LHCb Calorimeter (Ivan Belyaev [Ivan.Belyaev@cern.ch])

       The most essential features

       1) 3 predefined properties: a) "Input", b) "Output", c) "Detector"
          for value of each property the special accessor is defined:
          inputData(), outputData(), detData()

       2) initialize method prints the values of all used properties
          in MSG::DEBUG mode

       3) Simplified error/warning/exceptions/printing:

          StatusCode sc = ... ;
          if( sc.isFailure() ) { return Error("something wrong here!",sc);}
          ...
          if( sc.isFailure() ) { return Warning("something wrong here!",sc);}

          Each errors and warning are counted internally and at the end
          one has the full printout of all errors, warnings and exceptions.

          The actual error message is extended with the name the actual
          type (RTTI) of the algorithm

       4) Easy way to deal with exceptions (catch, throw, re-throw)

         a) throw the exception:

          if( sc.isFailure() ) { return Exception(" something wrong here!");}

          "Return" here is artificial. Nothing is actually returned.
          and exception is thrown

         b) catch and rethrow the exceptions
          try { ... }
          catch( const GaudiException& e1 )  {
            /* do something here */
            /// rethrow the exception (if needed)
            return Exception(" coudl not recove Gaudi exception, rethrow it ", e1 );
          }
          catch( const std::exception& e2 )  {
            /* do something here */
            /// rethrow the exception (if needed)
            return Exception(" could not recove the std::exception, rethrow it ", e2 );
          }
          catch( ... ) {
            /* do something here */
            /// rethrow the exception (if needed)
            return Exception(" could not recove the unknown  exception ");
          }

       5) easy ("1 line") access to the data, e.g.

         const MCParticles* particles = get( eventSvc() , inputData() , particles  );

         In the case of errors, method throws an exception.
         Error message is printed.
         One does not need to check the value of pointer against null.
         For "DEBUG" output level the actual data type and location will be
         printed.

       6) easy ("one line) registration of object into GTES:

         MCParticles* particles = ... ;
         StatusCode sc = put( particles , outputData() );

         In the case of errors, method throws an exception.
         Error message is printed.
         One does not need to check the return value.
         For "DEBUG" output level the actual data type and
         location will be printed.

       7) easy ("one line") access to tools:

         IMyTool* mytool1 = tool( "some combination of type and name" , mytool1 , this ) ;
         IMyTool* mytool2 = tool( "some type", "some name" , mytool2 , this ) ;

         Both methods throw exception for unlocated tools.
         Type coudl be "Type" or "Type/Name" , Name could be "Name" or "",
         and any combination is possible and has sence.
         It is useful if one specify Type, Name or  Type/Name from properties.
         The methods are able to decoder properly all these cases.
         For "DEBUG" output level the actual tool type and name will be printed.

       8) Assertions

         StatusCode sc = ... ;
         Assert( sc.isSuccess() , " soem failure occurs! " );

         Assertions are efficient (they are inlined), they do not
         result in significant performance degradation and could be
         used for all purposes.

    ! 2002-09-24 - Pere Mato
     - Changes to clean the reference counting and memory deallocation
       detected by the "valgrind" tool. Changed files: Sequencer.cpp

    !==============v6r1p1=======================================================
    ! 2002-09-23 - Florence Ranjard
     - requirements - use v*

    !===============v6r1===========================================================
    ! 20020704 - Pere Mato
     - Eliminated INFO messages during the construction of the algorithm sequence
       Output a summary of it.

    !===============v6r0===========================================================
    ! 20020205 - Pere Mato (v5r1)
     - Fixed bug reported by O. Callot that a Sequence must return an
       error when it can not create one or more of the member Algorithms.
       Changed Sequencer.cpp

    ! 20011210 - Pere Mato (v5r0)
     - Changes from David Quarrie concerning creating two libraries (linker + component)

    ! 20010705 - Pere Mato
     - Fixed CT0000000065248 (Sequencer does not test and propagate status on initialization)

    ! 20010702 - David Quarrie
     - Add beginRun/endRun handling to Sequencer, and rework the setting up
       of the Members and BranchMambers properties.

    ! 20010618 - v4 (Flr)
     - requirements - adapt to GaudiPolicy v5 and CMT v1r8

    ! 20010509 - Pere Mato
     - Fixed bug reported by M. Cattaneo (CT0000000059803). Sequencer should fail
       initialize() if any sub-algorithm fails.
     - Using GaudiKernel v10

    ! 20010226 - Pere Mato
      - Small changes to make it compile in NT

    !=============================================================================
    ! 20010223 - David Quarrie
      - Add update callback handler for "Members" and "BranchMembers" properties.
        This allows them to be changed at run-time via the scripting interface.
      - Rename *.cxx to *.cpp to conform to GAUDI file name conventions.

    !=============================================================================
    ! 20001108 GaudiAlg v1r1

    !=============================================================================
    ! 20001025 - David Quarrie

      - Add support for an explicit branch and for inverted logic. The syntax
        is:

        Sequencer.Members       = { "First", "Second", "Third" };
        Sequencer.BranchMembers = { "Second", "Forth" };

        If the "Second" Algorithm passes the event, the "Third" Algorithm
        is executed. If it fails the "Forth" Algorithm is executed. The
        branch point is determined by the first element of the BranchMembers.

        The syntax for inverted logic is:

        Sequencer1.Members = { "First", "Second", "Third" };
        Sequencer2.Members = { "First", "Second:invert", "Forth" };

        If the "Second" Algorithm passes and event, the "Third" Algorithm
        is executed, otherwise the "Forth" Algorithm is executed.

    !=============================================================================
    !20000720 GaudiAlg v1

    !=============================================================================
    !20000621 Pere Mato
    - This is a new package based on the code provided by David Quarrie (ATLAS)