Package: GaudiAlg Package manager : Marco Clemencic =============================== 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::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::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::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::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: * "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("/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(location) returns a pointer to the TransientFastContainer 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& 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& 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,,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, , 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 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 Row ; typedef std::vector 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 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 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 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 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)