|
Gaudi Framework, version v21r7 |
| Home | Generated: 22 Jan 2010 |
#include <GaudiAlg/GaudiCommon.h>

Public Member Functions | |
| template<class TYPE> | |
| Gaudi::Utils::GetData< TYPE > ::return_type | get (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const |
| Templated access to the data in Gaudi Transient Store. | |
| template<class TYPE> | |
| bool | exist (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const |
| Check the existence of a data object or container in the Gaudi Transient Event Store. | |
| template<class TYPE, class TYPE2> | |
| TYPE * | getOrCreate (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const |
| Get the existing data object from Gaudi Event Transient store. | |
| DataObject * | put (IDataProviderSvc *svc, DataObject *object, const std::string &location, const bool useRootInTES=true) const |
| Register a data object or container into Gaudi Event Transient Store. | |
| template<class TOOL> | |
| TOOL * | tool (const std::string &type, const std::string &name, const IInterface *parent=0, bool create=true) const |
| Useful method for the easy location of tools. | |
| template<class TOOL> | |
| TOOL * | tool (const std::string &type, const IInterface *parent=0, bool create=true) const |
| A useful method for the easy location of tools. | |
| template<class SERVICE> | |
| SmartIF< SERVICE > | svc (const std::string &name, const bool create=true) const |
| A useful method for the easy location of services. | |
| IUpdateManagerSvc * | updMgrSvc () const |
| Short-cut to locate the Update Manager Service. | |
| IDataProviderSvc * | fastContainersSvc () const |
| Short-cut to locate the Fast Containers Service. | |
| StatusCode | Error (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const |
| Print the error message and return with the given StatusCode. | |
| StatusCode | Warning (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const |
| Print the warning message and return with the given StatusCode. | |
| StatusCode | Info (const std::string &msg, const StatusCode st=StatusCode::SUCCESS, const size_t mx=10) const |
| Print the info message and return with the given StatusCode. | |
| StatusCode | Print (const std::string &msg, const StatusCode st=StatusCode::SUCCESS, const MSG::Level lev=MSG::INFO) const |
| Print the message and return with the given StatusCode. | |
| void | Assert (const bool ok, const std::string &message="", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const |
| Assertion - throw exception if the given condition is not fulfilled. | |
| void | Assert (const bool ok, const char *message, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const |
| Assertion - throw exception if the given condition is not fulfilled. | |
| void | Exception (const std::string &msg, const GaudiException &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const |
| Create and (re)-throw a given GaudiException. | |
| void | Exception (const std::string &msg, const std::exception &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const |
| Create and (re)-throw a given exception. | |
| void | Exception (const std::string &msg="no message", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const |
| Create and throw an exception with the given message. | |
| MsgStream & | msgStream (const MSG::Level level) const |
| Predefined configurable message stream for the efficient printouts. | |
| MsgStream & | always () const |
| shortcut for the method msgStream ( MSG::ALWAYS ) | |
| MsgStream & | fatal () const |
| shortcut for the method msgStream ( MSG::FATAL ) | |
| MsgStream & | err () const |
| shortcut for the method msgStream ( MSG::ERROR ) | |
| MsgStream & | error () const |
| shortcut for the method msgStream ( MSG::ERROR ) | |
| MsgStream & | warning () const |
| shortcut for the method msgStream ( MSG::WARNING ) | |
| MsgStream & | info () const |
| shortcut for the method msgStream ( MSG::INFO ) | |
| MsgStream & | debug () const |
| shortcut for the method msgStream ( MSG::DEBUG ) | |
| MsgStream & | verbose () const |
| shortcut for the method msgStream ( MSG::VERBOSE ) | |
| MsgStream & | msg () const |
| shortcut for the method msgStream ( MSG::INFO ) | |
| const Statistics & | counters () const |
| accessor to all counters | |
| StatEntity & | counter (const std::string &tag) const |
| accessor to certain counter by name | |
| MSG::Level | msgLevel () const |
| The current message service output level. | |
| bool | msgLevel (const MSG::Level level) const |
| Test the output level. | |
| void | resetMsgStream () const |
| Reset (delete) the current message stream object. | |
| bool | typePrint () const |
| Insert the actual C++ type of the algorithm/tool in the messages ? | |
| bool | propsPrint () const |
| Print properties at initialization ? | |
| bool | statPrint () const |
| Print statistical counters at finalization ? | |
| bool | errorsPrint () const |
| Print error counters at finalization ? | |
| long | printStat (const MSG::Level level=MSG::ALWAYS) const |
| perform the actual printout of statistical counters | |
| long | printErrors (const MSG::Level level=MSG::ALWAYS) const |
| perform the actual printout of error counters | |
| long | printProps (const MSG::Level level=MSG::ALWAYS) const |
| perform the actual printout of properties | |
| template<class CallerClass> | |
| void | registerCondition (const std::string &condition, StatusCode(CallerClass::*mf)()=NULL) |
| register the current instance to the UpdateManagerSvc as a consumer for a condition. | |
| template<class CallerClass, class CondType> | |
| void | registerCondition (const std::string &condition, CondType *&condPtrDest, StatusCode(CallerClass::*mf)()=NULL) |
| register the current instance to the UpdateManagerSvc as a consumer for a condition. | |
| template<class CallerClass> | |
| void | registerCondition (char *condition, StatusCode(CallerClass::*mf)()=NULL) |
| just to avoid conflicts with the version using a pointer to a template class. | |
| template<class CallerClass, class TargetClass> | |
| void | registerCondition (TargetClass *condition, StatusCode(CallerClass::*mf)()=NULL) |
| register the current instance to the UpdateManagerSvc as a consumer for a condition. | |
| StatusCode | runUpdate () |
| asks the UpdateManagerSvc to perform an update of the instance (if needed) without waiting the next BeginEvent incident. | |
| template<class T> | |
| TransientFastContainer< T > * | getFastContainer (const std::string &location, typename TransientFastContainer< T >::size_type initial=0) |
| Return a new TransientFastContainer for objects of type T. | |
| GaudiCommon (const std::string &name, ISvcLocator *pSvcLocator) | |
| Algorithm constructor. | |
| GaudiCommon (const std::string &type, const std::string &name, const IInterface *parent) | |
| Tool constructor. | |
| virtual StatusCode | initialize () |
| standard initialization method | |
| virtual StatusCode | finalize () |
| standard finalization method | |
| StatusCode | release (const IInterface *interface) const |
| Manual forced (and 'safe') release of the active tool or service. | |
| const AlgTools & | tools () const |
| get the list of aquired tools | |
| const Services & | services () const |
| get the list of aquired services | |
| const std::string & | context () const |
| Returns the "context" string. Used to identify different processing states. | |
| const std::string & | rootInTES () const |
| Returns the "rootInTES" string. | |
| double | globalTimeOffset () const |
| Returns the "globalTimeOffset" double. | |
Protected Types | |
| typedef std::map< std::string, StatEntity > | Statistics |
| the actual type of general counters | |
| typedef std::map< std::string, unsigned int > | Counter |
| the actual type error/warning counter | |
| typedef std::vector< IAlgTool * > | AlgTools |
| storage for active tools | |
| typedef GaudiUtils::HashMap < std::string, SmartIF < IService > > | Services |
| storage for active services | |
Protected Member Functions | |
| virtual | ~GaudiCommon () |
| Destructor. | |
| StatusCode | releaseTool (const IAlgTool *tool) const |
| manual forced (and 'safe') release of the tool | |
| StatusCode | releaseSvc (const IInterface *svc) const |
| manual forced (and 'safe') release of the service | |
Protected Attributes | |
| ICounterSummarySvc * | m_counterSummarySvc |
| a pointer to the CounterSummarySvc | |
| std::vector< std::string > | m_counterList |
| list of counters to declare. Set by property CounterList. This can be a regular expression. | |
| std::vector< std::string > | m_statEntityList |
Static Protected Attributes | |
| static const bool | IgnoreRootInTES = false |
| Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods. | |
| static const bool | UseRootInTES = true |
| Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods. | |
Private Member Functions | |
| void | msgLevelHandler (Property &theProp) |
| Handle method for changes in the Messaging levels. | |
| GaudiCommon () | |
| GaudiCommon (const GaudiCommon &) | |
| GaudiCommon & | operator= (const GaudiCommon &) |
| void | printErrorHandler (Property &) |
| handler for "ErrorPrint" property | |
| void | printPropsHandler (Property &) |
| handler for "PropertiesPrint" property | |
| void | printStatHandler (Property &) |
| handler for "StatPrint" property | |
| void | addToToolList (IAlgTool *tool) const |
| Add the given tool to the list of acquired tools. | |
| void | addToServiceList (const SmartIF< IService > &svc) const |
| Add the given service to the list of acquired services. | |
| void | initGaudiCommonConstructor (const IInterface *parent=0) |
| Constructor initializations. | |
| const std::string | fullTESLocation (const std::string &location, const bool useRootInTES) const |
| Returns the full correct event location given the rootInTes settings. | |
Private Attributes | |
| MSG::Level | m_msgLevel |
| The message level. | |
| MsgStream * | m_msgStream |
| The predefined message stream. | |
| AlgTools | m_tools |
| List of active tools. | |
| Services | m_services |
| List of active services. | |
| Counter | m_errors |
| Counter of errors. | |
| Counter | m_warnings |
| counter of warnings | |
| Counter | m_infos |
| counter of infos | |
| Counter | m_exceptions |
| Counter of exceptions. | |
| Statistics | m_counters |
| General counters. | |
| IUpdateManagerSvc * | m_updMgrSvc |
| Pointer to the Update Manager Service instance. | |
| IDataProviderSvc * | m_fastContainersSvc |
| Pointer to the service providing transient fast containers. | |
| bool | m_typePrint |
| insert the actual C++ type of the algorithm in the messages? | |
| bool | m_propsPrint |
| print properties at initialization? | |
| bool | m_statPrint |
| print counters at finalization ? | |
| bool | m_errorsPrint |
| print warning and error counters at finalization ? | |
| std::string | m_context |
| The context string. | |
| std::string | m_rootInTES |
| The rootInTES string. | |
| std::string | m_rootOnTES |
| The rootOnTES string. | |
| double | m_globalTimeOffset |
| The globalTimeOffset value. | |
| std::string | m_header |
| the header row | |
| std::string | m_format1 |
| format for regular statistical printout rows | |
| std::string | m_format2 |
| format for "efficiency" statistical printout rows | |
| bool | m_useEffFormat |
| flag to use the special "efficiency" format | |
Definition at line 60 of file GaudiCommon.h.
typedef std::map<std::string,StatEntity> GaudiCommon< PBASE >::Statistics [protected] |
typedef std::map<std::string,unsigned int> GaudiCommon< PBASE >::Counter [protected] |
typedef std::vector<IAlgTool*> GaudiCommon< PBASE >::AlgTools [protected] |
typedef GaudiUtils::HashMap<std::string, SmartIF<IService> > GaudiCommon< PBASE >::Services [protected] |
| GaudiCommon< PBASE >::GaudiCommon | ( | const std::string & | name, | |
| ISvcLocator * | pSvcLocator | |||
| ) |
Algorithm constructor.
| GaudiCommon< PBASE >::GaudiCommon | ( | const std::string & | type, | |
| const std::string & | name, | |||
| const IInterface * | parent | |||
| ) |
Tool constructor.
| virtual GaudiCommon< PBASE >::~GaudiCommon | ( | ) | [inline, protected, virtual] |
| GaudiCommon< PBASE >::GaudiCommon | ( | ) | [private] |
| GaudiCommon< PBASE >::GaudiCommon | ( | const GaudiCommon< PBASE > & | ) | [private] |
| Gaudi::Utils::GetData< TYPE >::return_type GaudiCommon< PBASE >::get | ( | IDataProviderSvc * | svc, | |
| const std::string & | location, | |||
| const bool | useRootInTES = true | |||
| ) | const [inline] |
Templated access to the data in Gaudi Transient Store.
Quick and safe access to the data in Gaudi transient store. The method located the data at given address and perform the debug printout about located data
// Will access MCHits from the given location MCHits* hits = get<MCHits>( evtSvc () , "MC/Hits" );
| GaudiException | for Invalid Data Provider Service | |
| GaudiException | for invalid/unavailable data |
| svc | Pointer to data service (data provider) | |
| location | data location/address in Gaudi Transient Store | |
| useRootInTES | Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property |
Reimplemented in GaudiAlgorithm, and GaudiTool.
Definition at line 55 of file GaudiCommonImp.h.
00058 { 00059 // check the environment 00060 Assert( 0 != service , "get():: IDataProvider* points to NULL!" ) ; 00061 // get the helper object: 00062 Gaudi::Utils::GetData<TYPE> helper ; 00063 return helper ( *this , service , 00064 fullTESLocation ( location , useRootInTES ) ) ; 00065 }
| bool GaudiCommon< PBASE >::exist | ( | IDataProviderSvc * | svc, | |
| const std::string & | location, | |||
| const bool | useRootInTES = true | |||
| ) | const [inline] |
Check the existence of a data object or container in the Gaudi Transient Event Store.
bool a1 = exist<DataObject>( evtSvc() , "/Event/MyObject" ) ; bool a2 = exist<MyHits> ( evtSvc() , "/Event/MyHits" ) ;
| svc | Pointer to data provider service | |
| location | Address in Gaudi Transient Store | |
| useRootInTES | Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property |
| true | Data object or container exists and implements a proper interface | |
| true | Failed to locate the data object or container |
Reimplemented in GaudiAlgorithm, and GaudiTool.
Definition at line 71 of file GaudiCommonImp.h.
00074 { 00075 // check the environment 00076 Assert( 0 != service , "exist():: IDataProvider* points to NULL!" ) ; 00077 // check the data object 00078 const std::string & fullLoc = fullTESLocation( location, useRootInTES ); 00079 SmartDataPtr<TYPE> obj( service , fullLoc ) ; 00080 return obj ? true : false ; 00081 }
| TYPE * GaudiCommon< PBASE >::getOrCreate | ( | IDataProviderSvc * | svc, | |
| const std::string & | location, | |||
| const bool | useRootInTES = true | |||
| ) | const [inline] |
Get the existing data object from Gaudi Event Transient store.
Alternatively, create new object and register it in TES and return if object does not exist.
MyHits* hits = getOrCreate<MyHits,MyHits>( evtSvc() , "/Event/MyHits" ) ;
| GaudiException | for Invalid Data Provider Service | |
| GaudiException | for invalid/unavailable data |
| svc | Pointer to data provider service | |
| location | Location in Gaudi Transient Event Store | |
| useRootInTES | Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property |
Reimplemented in GaudiAlgorithm, and GaudiTool.
Definition at line 89 of file GaudiCommonImp.h.
00092 { 00093 // check the environment 00094 Assert( 0 != svc , "getOrCreate():: svc points to NULL!" ) ; 00095 const std::string & fullLoc = fullTESLocation( location, useRootInTES ); 00096 SmartDataPtr<TYPE> obj ( svc , fullLoc ) ; 00097 if ( !obj ) 00098 { 00099 TYPE2* o = new TYPE2() ; 00100 put ( svc , o , location ) ; // do not use fullLoc here as put recreates it 00101 return o ; 00102 } 00103 TYPE* aux = obj ; 00104 if( !aux ) 00105 { Exception ( "getOrCreate():: No valid data at '" + fullLoc + "'" ) ; } 00106 // return located *VALID* data 00107 return aux ; 00108 }
| DataObject * GaudiCommon< PBASE >::put | ( | IDataProviderSvc * | svc, | |
| DataObject * | object, | |||
| const std::string & | location, | |||
| const bool | useRootInTES = true | |||
| ) | const [inline] |
Register a data object or container into Gaudi Event Transient Store.
| svc | Pointer to data provider service | |
| object | Data object or container to be registered | |
| location | Location in Gaudi Event Transient Store ("/Event" could be omitted ) | |
| useRootInTES | Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property |
| GaudiException | for invalid event data service | |
| GaudiException | for invalid object | |
| GaudiException | for error result from event data service |
| StatusCode::SUCCESS | Data was successfully placed in the TES. | |
| StatusCode::FAILURE | Failed to store data in the TES. |
Reimplemented in GaudiAlgorithm, and GaudiTool.
Definition at line 760 of file GaudiCommon.icpp.
00764 { 00765 // check arguments 00766 Assert ( 0 != svc , "put():: Invalid 'service'!" ) ; 00767 Assert ( 0 != object , "put():: Invalid 'Object'!" ) ; 00768 Assert ( !location.empty() , "put():: Invalid 'address' = '' " ) ; 00769 // final data location 00770 const std::string & fullLocation = fullTESLocation( location, useRootInTES ); 00771 // register the object! 00772 const StatusCode status = '/' == fullLocation[0] ? 00773 svc -> registerObject( fullLocation , object ) : 00774 svc -> registerObject( "/Event/" + fullLocation , object ) ; 00775 // check the result! 00776 if ( status.isFailure() ) 00777 { Exception ( "put():: could not register '" + 00778 System::typeinfoName( typeid( *object ) ) + 00779 "' at address '" + fullLocation + "'" , status ) ; } 00780 if ( msgLevel( MSG::DEBUG ) ) 00781 { Print( "The object of type '" + 00782 System::typeinfoName( typeid( *object ) ) + 00783 "' is registered in TS at address '" 00784 + fullLocation + "'" , status , MSG::DEBUG ) ; } 00785 return object; 00786 }
| TOOL * GaudiCommon< PBASE >::tool | ( | const std::string & | type, | |
| const std::string & | name, | |||
| const IInterface * | parent = 0, |
|||
| bool | create = true | |||
| ) | const [inline] |
Useful method for the easy location of tools.
IMyTool* myTool =
tool<IMyTool>( "MyToolType", "MyToolName", this );
| GaudiException | for invalid Tool Service | |
| GaudiException | for error from Tool Service | |
| GaudiException | for invalid tool |
| type | Tool type | |
| name | Tool name | |
| parent | Tool parent | |
| create | Flag for creation of nonexisting tools |
Definition at line 114 of file GaudiCommonImp.h.
00118 { 00119 TOOL* Tool = 0 ; 00120 // for empty names delegate to another method 00121 if ( name.empty() ) 00122 { 00123 Tool = tool<TOOL>( type , parent , create ) ; 00124 } 00125 else 00126 { 00127 Assert( this->toolSvc() != 0, "tool():: IToolSvc* points to NULL!" ) ; 00128 // get the tool from Tool Service 00129 const StatusCode sc = 00130 this->toolSvc()->retrieveTool ( type , name , Tool , parent , create ) ; 00131 if ( sc.isFailure() ) 00132 { Exception("tool():: Could not retrieve Tool '" + type + "'/'" + name + "'", sc ) ; } 00133 if ( 0 == Tool ) 00134 { Exception("tool():: Could not retrieve Tool '" + type + "'/'" + name + "'" ) ; } 00135 // add the tool into list of known tools to be properly released 00136 addToToolList( Tool ); 00137 } 00138 // return *VALID* located tool 00139 return Tool ; 00140 }
| TOOL * GaudiCommon< PBASE >::tool | ( | const std::string & | type, | |
| const IInterface * | parent = 0, |
|||
| bool | create = true | |||
| ) | const [inline] |
A useful method for the easy location of tools.
IMyTool* myTool = tool<IMyTool>( "PublicToolType" );
| GaudiException | for invalid Tool Service | |
| GaudiException | for error from Tool Service | |
| GaudiException | for invalid tool |
| type | Tool type, could be of "Type/Name" format | |
| parent | Tool parent | |
| create | Flag for creation of non-existing tools |
Definition at line 146 of file GaudiCommonImp.h.
00149 { 00150 // check the environment 00151 Assert ( PBASE::toolSvc() != 0, "IToolSvc* points to NULL!" ); 00152 // retrieve the tool from Tool Service 00153 TOOL* Tool = 0 ; 00154 const StatusCode sc = 00155 this->toolSvc() -> retrieveTool ( type, Tool, parent , create ); 00156 if ( sc.isFailure() ) 00157 { Exception("tool():: Could not retrieve Tool '" + type + "'", sc ) ; } 00158 if ( 0 == Tool ) 00159 { Exception("tool():: Could not retrieve Tool '" + type + "'" ) ; } 00160 // add the tool into the list of known tools to be properly released 00161 addToToolList( Tool ); 00162 // return *VALID* located tool 00163 return Tool ; 00164 }
| SmartIF< SERVICE > GaudiCommon< PBASE >::svc | ( | const std::string & | name, | |
| const bool | create = true | |||
| ) | const [inline] |
A useful method for the easy location of services.
IMyService* mySvc = svc<IMyService>( "MyServiceType" );
| GaudiException | for error in Algorithms::service | |
| GaudiException | for invalid service |
| name | service type name | |
| create | Flag for creation of non-existing services |
Definition at line 170 of file GaudiCommonImp.h.
00172 { 00173 Assert ( this->svcLoc() != 0, "ISvcLocator* points to NULL!" ); 00174 SmartIF<SERVICE> s; 00175 // check if we already have this service 00176 Services::iterator it = m_services.find(name); 00177 if (it != m_services.end()) { 00178 // Try to get the requested interface 00179 s = it->second; 00180 // check the results 00181 if ( !s.isValid() ) { 00182 Exception ("svc():: Could not retrieve Svc '" + name + "'", StatusCode::FAILURE); 00183 } 00184 } else { 00185 SmartIF<IService>& baseSvc = this->svcLoc()->service(name, create); 00186 // Try to get the requested interface 00187 s = baseSvc; 00188 // check the results 00189 if ( !baseSvc.isValid() || !s.isValid() ) { 00190 Exception ("svc():: Could not retrieve Svc '" + name + "'", StatusCode::FAILURE); 00191 } 00192 // add the tool into list of known tools, to be properly released 00193 addToServiceList(baseSvc); 00194 } 00195 // return *VALID* located service 00196 return s; 00197 }
| IUpdateManagerSvc * GaudiCommon< PBASE >::updMgrSvc | ( | ) | const [inline] |
Short-cut to locate the Update Manager Service.
Definition at line 203 of file GaudiCommonImp.h.
00204 { 00205 if ( !m_updMgrSvc ) 00206 { m_updMgrSvc = svc<IUpdateManagerSvc>("UpdateManagerSvc",true); } 00207 return m_updMgrSvc ; 00208 }
| IDataProviderSvc * GaudiCommon< PBASE >::fastContainersSvc | ( | ) | const [inline] |
Short-cut to locate the Fast Containers Service.
Definition at line 214 of file GaudiCommonImp.h.
00215 { 00216 if ( !m_fastContainersSvc ) 00217 { m_fastContainersSvc = svc<IDataProviderSvc>("FastContainersSvc",true); } 00218 return m_fastContainersSvc ; 00219 }
| StatusCode GaudiCommon< PBASE >::Error | ( | const std::string & | msg, | |
| const StatusCode | st = StatusCode::FAILURE, |
|||
| const size_t | mx = 10 | |||
| ) | const [inline] |
Print the error message and return with the given StatusCode.
Also performs statistical analysis of the error messages and suppression after the defined number of error instances.
if( a < 0 ) { return Error("a is negative!") ;} if( b < 0 ) { return Error("b is illegal!" , StatusCode(25) ); if( c < 0 ) { return Error("c is negative" , StatusCode(35) , 50 );
| msg | Error message | |
| st | StatusCode to return | |
| mx | Maximum number of printouts for this message |
Reimplemented in ErrorTool.
Definition at line 477 of file GaudiCommon.icpp.
00480 { 00481 // increase local counter of errors 00482 const size_t num = ++m_errors[msg] ; 00483 // If suppressed, just return 00484 if ( num > mx ) { return st ; } 00485 else if ( num == mx ) // issue one-time suppression message 00486 { return Print ( "The ERROR message is suppressed : '" + 00487 msg + "'" , st , MSG::ERROR ) ; } 00488 // return message 00489 return Print ( msg , st , MSG::ERROR ) ; 00490 }
| StatusCode GaudiCommon< PBASE >::Warning | ( | const std::string & | msg, | |
| const StatusCode | st = StatusCode::FAILURE, |
|||
| const size_t | mx = 10 | |||
| ) | const [inline] |
Print the warning message and return with the given StatusCode.
Also performs statistical analysis of the error messages and suppression after the defined number of error instances.
if( a < 0 ) { return Warning("a is negative!") ;} if( b < 0 ) { return Warning("b is illegal!" , StatusCode(25) ); if( c < 0 ) { return Warning("c is negative" , StatusCode(35) , 50 );
| msg | Warning message | |
| st | StatusCode to return | |
| mx | Maximum number of printouts for this message |
Reimplemented in ErrorTool.
Definition at line 498 of file GaudiCommon.icpp.
00501 { 00502 // increase local counter of warnings 00503 const size_t num = ++m_warnings[msg] ; 00504 // If suppressed, just return 00505 if ( num > mx ) { return st ; } 00506 else if ( num == mx ) // issue one-time suppression message 00507 { return Print ( "The WARNING message is suppressed : '" + 00508 msg + "'" , st , MSG::WARNING ) ; } 00509 // return message 00510 return Print ( msg , st , MSG::WARNING ) ; 00511 }
| StatusCode GaudiCommon< PBASE >::Info | ( | const std::string & | msg, | |
| const StatusCode | st = StatusCode::SUCCESS, |
|||
| const size_t | mx = 10 | |||
| ) | const [inline] |
Print the info message and return with the given StatusCode.
Also performs statistical analysis of the error messages and suppression after the defined number of instances.
| msg | Info message | |
| st | StatusCode to return | |
| mx | Maximum number of printouts for this message |
Definition at line 519 of file GaudiCommon.icpp.
00522 { 00523 // increase local counter of warnings 00524 const size_t num = ++m_infos[msg] ; 00525 // If suppressed, just return 00526 if ( num > mx ) { return st ; } 00527 else if ( num == mx ) // issue one-time suppression message 00528 { return Print ( "The INFO message is suppressed : '" + 00529 msg + "'" , st , MSG::INFO ) ; } 00530 // return message 00531 return Print ( msg , st , MSG::INFO ) ; 00532 }
| StatusCode GaudiCommon< PBASE >::Print | ( | const std::string & | msg, | |
| const StatusCode | st = StatusCode::SUCCESS, |
|||
| const MSG::Level | lev = MSG::INFO | |||
| ) | const [inline] |
Print the message and return with the given StatusCode.
| msg | Message to print | |
| st | StatusCode to return | |
| lev | Printout level for the given message |
Reimplemented in ErrorTool.
Definition at line 539 of file GaudiCommon.icpp.
00542 { 00543 // perform printout ? 00544 if ( !msgLevel( lvl ) ) { return st ; } // RETURN 00545 00546 // use the predefined stream 00547 MsgStream& str = msgStream( lvl ) ; 00548 if ( typePrint() ) { str << System::typeinfoName(typeid(*this)) << ":: " ; } 00549 // print the message 00550 str << msg ; 00551 // test status code 00552 if ( st.isSuccess() ) { } 00553 else if ( StatusCode::FAILURE != st.getCode() ) 00554 { str << " StatusCode=" << st.getCode() ; } 00555 else 00556 { str << " StatusCode=FAILURE" ; } 00557 // perform print operation 00558 str << endmsg ; 00559 // return 00560 return st; 00561 }
| void GaudiCommon< PBASE >::Assert | ( | const bool | ok, | |
| const std::string & | message = "", |
|||
| const StatusCode | sc = StatusCode(StatusCode::FAILURE, true) | |||
| ) | const [inline] |
Assertion - throw exception if the given condition is not fulfilled.
| Exception | for invalid condition |
| ok | Condition which should be "true" | |
| message | Message to be associated with the exception |
Reimplemented in ErrorTool.
Definition at line 268 of file GaudiCommonImp.h.
| void GaudiCommon< PBASE >::Assert | ( | const bool | ok, | |
| const char * | message, | |||
| const StatusCode | sc = StatusCode(StatusCode::FAILURE, true) | |||
| ) | const [inline] |
Assertion - throw exception if the given condition is not fulfilled.
| Exception | for invalid condition |
| ok | Condition which should be "true" | |
| message | Message to be associated with the exception |
Definition at line 286 of file GaudiCommonImp.h.
| void GaudiCommon< PBASE >::Exception | ( | const std::string & | msg, | |
| const GaudiException & | exc, | |||
| const StatusCode | sc = StatusCode(StatusCode::FAILURE, true) | |||
| ) | const [inline] |
Create and (re)-throw a given GaudiException.
| GaudiException | always thrown! |
| msg | Exception message | |
| exc | (previous) exception of type GaudiException |
Reimplemented in ErrorTool.
Definition at line 568 of file GaudiCommon.icpp.
00571 { 00572 // increase local counter of exceptions 00573 ++m_exceptions[ msg ]; 00574 Print ( "Exception (re)throw: " + msg , sc , MSG::FATAL ); 00575 throw GaudiException( this->name() + ":: " + msg , this->name() , sc, exc); 00576 }
| void GaudiCommon< PBASE >::Exception | ( | const std::string & | msg, | |
| const std::exception & | exc, | |||
| const StatusCode | sc = StatusCode(StatusCode::FAILURE, true) | |||
| ) | const [inline] |
Create and (re)-throw a given exception.
| std::exception | always thrown! |
| msg | Exception message | |
| exc | (previous) exception of type std::exception | |
| sc | StatusCode |
Reimplemented in ErrorTool.
Definition at line 583 of file GaudiCommon.icpp.
00586 { 00587 // increase local counter of exceptions 00588 ++m_exceptions[ msg ]; 00589 Print ( "Exception (re)throw: " + msg , sc , MSG::FATAL ); 00590 throw GaudiException( this->name() + ":: " + msg+"("+exc.what()+")", "", sc ); 00591 }
| void GaudiCommon< PBASE >::Exception | ( | const std::string & | msg = "no message", |
|
| const StatusCode | sc = StatusCode(StatusCode::FAILURE, true) | |||
| ) | const [inline] |
Create and throw an exception with the given message.
| GaudiException | always thrown! |
| msg | Exception message | |
| sc | StatusCode |
Reimplemented in ErrorTool.
Definition at line 598 of file GaudiCommon.icpp.
00600 { 00601 // increase local counter of exceptions 00602 ++m_exceptions[ msg ]; 00603 Print ( "Exception throw: " + msg , sc , MSG::FATAL ); 00604 throw GaudiException( this->name() + ":: " + msg , "", sc ); 00605 }
| MsgStream & GaudiCommon< PBASE >::msgStream | ( | const MSG::Level | level | ) | const [inline] |
Predefined configurable message stream for the efficient printouts.
if ( a < 0 ) { msgStream( MSG::ERROR ) << "a = " << endmsg ; }
Definition at line 258 of file GaudiCommonImp.h.
00259 { 00260 if ( !m_msgStream ) 00261 { m_msgStream = new MsgStream ( PBASE::msgSvc() , this->name() ) ; } 00262 return *m_msgStream << level ; 00263 }
| MsgStream& GaudiCommon< PBASE >::always | ( | ) | const [inline] |
shortcut for the method msgStream ( MSG::ALWAYS )
Definition at line 481 of file GaudiCommon.h.
00481 { return msgStream ( MSG::ALWAYS ) ; }
| MsgStream& GaudiCommon< PBASE >::fatal | ( | ) | const [inline] |
shortcut for the method msgStream ( MSG::FATAL )
Definition at line 483 of file GaudiCommon.h.
00483 { return msgStream ( MSG::FATAL ) ; }
| MsgStream& GaudiCommon< PBASE >::err | ( | ) | const [inline] |
shortcut for the method msgStream ( MSG::ERROR )
Definition at line 485 of file GaudiCommon.h.
00485 { return msgStream ( MSG::ERROR ) ; }
| MsgStream& GaudiCommon< PBASE >::error | ( | ) | const [inline] |
shortcut for the method msgStream ( MSG::ERROR )
Definition at line 487 of file GaudiCommon.h.
00487 { return msgStream ( MSG::ERROR ) ; }
| MsgStream& GaudiCommon< PBASE >::warning | ( | ) | const [inline] |
shortcut for the method msgStream ( MSG::WARNING )
Definition at line 489 of file GaudiCommon.h.
00489 { return msgStream ( MSG::WARNING ) ; }
| MsgStream& GaudiCommon< PBASE >::info | ( | ) | const [inline] |
| MsgStream& GaudiCommon< PBASE >::debug | ( | ) | const [inline] |
shortcut for the method msgStream ( MSG::DEBUG )
Definition at line 493 of file GaudiCommon.h.
00493 { return msgStream ( MSG::DEBUG ) ; }
| MsgStream& GaudiCommon< PBASE >::verbose | ( | ) | const [inline] |
shortcut for the method msgStream ( MSG::VERBOSE )
Definition at line 495 of file GaudiCommon.h.
00495 { return msgStream ( MSG::VERBOSE ) ; }
| MsgStream& GaudiCommon< PBASE >::msg | ( | ) | const [inline] |
| const Statistics& GaudiCommon< PBASE >::counters | ( | ) | const [inline] |
accessor to all counters
Definition at line 501 of file GaudiCommon.h.
00501 { return m_counters ; }
| StatEntity& GaudiCommon< PBASE >::counter | ( | const std::string & | tag | ) | const [inline] |
accessor to certain counter by name
if ( OK ) { ++counter("OK") ; } // additive counter ('Flag') counter("#Tracks") += tracks->size() ; // multiplicative counter ('Weight') counter("ProbTot") *= probability ;
| tag | counter name |
Definition at line 520 of file GaudiCommon.h.
00520 { return m_counters[tag] ; }
| MSG::Level GaudiCommon< PBASE >::msgLevel | ( | ) | const [inline] |
The current message service output level.
Definition at line 526 of file GaudiCommon.h.
00526 { return m_msgLevel ; }
| bool GaudiCommon< PBASE >::msgLevel | ( | const MSG::Level | level | ) | const [inline] |
Test the output level.
| level | The message level to test against |
| true | Messages at level "level" will be printed | |
| true | Messages at level "level" will NOT be printed |
Definition at line 533 of file GaudiCommon.h.
| void GaudiCommon< PBASE >::resetMsgStream | ( | ) | const [inline] |
Reset (delete) the current message stream object.
Useful for example to force a new object following a change in the message level settings
Definition at line 278 of file GaudiCommonImp.h.
00279 { 00280 if ( 0 != m_msgStream ) { delete m_msgStream; m_msgStream = 0; } 00281 }
| bool GaudiCommon< PBASE >::typePrint | ( | ) | const [inline] |
Insert the actual C++ type of the algorithm/tool in the messages ?
Definition at line 540 of file GaudiCommon.h.
00540 { return m_typePrint ; }
| bool GaudiCommon< PBASE >::propsPrint | ( | ) | const [inline] |
Print properties at initialization ?
Definition at line 542 of file GaudiCommon.h.
00542 { return m_propsPrint ; }
| bool GaudiCommon< PBASE >::statPrint | ( | ) | const [inline] |
Print statistical counters at finalization ?
Definition at line 544 of file GaudiCommon.h.
00544 { return m_statPrint ; }
| bool GaudiCommon< PBASE >::errorsPrint | ( | ) | const [inline] |
Print error counters at finalization ?
Definition at line 546 of file GaudiCommon.h.
00546 { return m_errorsPrint ; }
| void GaudiCommon< PBASE >::msgLevelHandler | ( | Property & | theProp | ) | [inline, private] |
Handle method for changes in the Messaging levels.
Called whenever the property "OutputLevel" changes to perform all necessary actions locally.
| theProp | Reference to the Property that has changed |
Definition at line 726 of file GaudiCommon.icpp.
00727 { 00728 // Force a new MsgStream object, to pick up the new settings 00729 resetMsgStream(); 00730 00731 // adjust internal message level 00732 m_msgLevel = 00733 this->outputLevel() < (int) MSG::NIL ? MSG::NIL : 00734 this->outputLevel() >= (int) MSG::NUM_LEVELS ? MSG::ALWAYS : 00735 MSG::Level( this->outputLevel() ) ; 00736 00737 // Keep MessageSvc up to date if needed 00738 if ( this->msgSvc()->outputLevel(this->name()) != this->outputLevel() ) 00739 { 00740 this->msgSvc()->setOutputLevel( this->name(), this->outputLevel() ); 00741 } 00742 00743 // printout message 00744 if ( msgLevel(MSG::DEBUG) ) 00745 { 00746 debug() << "Property update for " 00747 << theProp.name() << " : new value = " << this->outputLevel() << endmsg; 00748 } 00749 }
| long GaudiCommon< PBASE >::printStat | ( | const MSG::Level | level = MSG::ALWAYS |
) | const [inline] |
perform the actual printout of statistical counters
| level | The message level to print at |
Definition at line 612 of file GaudiCommon.icpp.
00613 { 00614 // print statistics 00615 if ( counters().empty() ) { return 0 ; } 00616 MsgStream& msg = msgStream ( level ) ; 00617 // 00618 msg << "Number of counters : " << counters().size() ; 00619 // 00620 if ( !counters().empty() ) { msg << std::endl << m_header ; } 00621 // 00622 for ( Statistics::const_iterator entry = counters().begin() ; 00623 counters().end() != entry ; ++entry ) 00624 { 00625 msg << std::endl 00626 << Gaudi::Utils::formatAsTableRow 00627 ( entry -> first , 00628 entry -> second , 00629 m_useEffFormat , 00630 m_format1 , m_format2 ); 00631 } 00632 // 00633 msg << endmsg ; 00634 // 00635 return counters().size() ; 00636 }
| long GaudiCommon< PBASE >::printErrors | ( | const MSG::Level | level = MSG::ALWAYS |
) | const [inline] |
perform the actual printout of error counters
| level | The message level to print at |
Definition at line 643 of file GaudiCommon.icpp.
00644 { 00645 // format for printout 00646 boost::format ftm ( " %s = %|.8s| %|23t| Message = '%s'" ); 00647 00648 { // print exceptions 00649 for ( Counter::const_iterator excp = m_exceptions.begin() ; 00650 excp != m_exceptions.end() ; ++excp ) 00651 { 00652 msgStream(level) 00653 << ( ftm % "#EXCEPTIONS" % excp->second % excp->first ) 00654 << endmsg; 00655 } 00656 } 00657 { // print errors 00658 for ( Counter::const_iterator error = m_errors.begin() ; 00659 error != m_errors.end() ; ++error ) 00660 { 00661 msgStream(level) 00662 << ( ftm % "#ERRORS " % error->second % error->first ) 00663 << endmsg; 00664 } 00665 } 00666 { // print warnings 00667 for ( Counter::const_iterator warning = m_warnings.begin() ; 00668 warning != m_warnings.end() ; ++warning ) 00669 { 00670 msgStream(level) 00671 << ( ftm % "#WARNINGS " % warning->second % warning->first ) 00672 << endmsg; 00673 } 00674 } 00675 { // print warnings 00676 for ( Counter::const_iterator info = m_infos.begin() ; 00677 info != m_infos.end() ; ++info ) 00678 { 00679 msgStream(level) 00680 << ( ftm % "#INFOS " % info->second % info->first ) 00681 << endmsg; 00682 } 00683 } 00684 00685 // return total number of errors+warnings+exceptions 00686 return 00687 m_exceptions .size () + 00688 m_errors .size () + 00689 m_warnings .size () + 00690 m_infos .size () ; 00691 }
| long GaudiCommon< PBASE >::printProps | ( | const MSG::Level | level = MSG::ALWAYS |
) | const [inline] |
perform the actual printout of properties
perform the printout of properties
| level | The message level to print at |
number of error counters
Definition at line 700 of file GaudiCommon.icpp.
00701 { 00702 00703 // print ALL properties 00704 MsgStream& msg = msgStream ( level ); 00705 typedef std::vector<Property*> Properties; 00706 const Properties& properties = this->getProperties() ; 00707 msg << "List of ALL properties of " 00708 << System::typeinfoName( typeid( *this ) ) << "/" << this->name() 00709 << " #properties = " << properties.size() << endmsg ; 00710 for ( Properties::const_reverse_iterator property 00711 = properties.rbegin() ; 00712 properties.rend() != property ; ++property ) 00713 { 00714 msg << "Property ['Name': Value] = " 00715 << ( **property) 00716 << endmsg ; 00717 } 00718 return properties.size() ; 00719 }
| void GaudiCommon< PBASE >::registerCondition | ( | const std::string & | condition, | |
| StatusCode(CallerClass::*)() | mf = NULL | |||
| ) | [inline] |
register the current instance to the UpdateManagerSvc as a consumer for a condition.
| condition | the path inside the Transient Detector Store to the condition object. | |
| mf | optional pointer to the member function to call when the condition object is updated. If the pointer is omitted the user must explicitly provide the class name to the method. StatusCode MyAlg::initialize(){ // ... registerCondition("/dd/Conditions/Readout/MyDet/MyCond",&MyAlg::i_CallBack); registerCondition<MyAlg>("/dd/Conditions/Readout/MyDet/MyOtherCond"); // ... return StatusCode.SUCCESS; } |
Definition at line 589 of file GaudiCommon.h.
00589 { 00590 updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),condition,mf); 00591 }
| void GaudiCommon< PBASE >::registerCondition | ( | const std::string & | condition, | |
| CondType *& | condPtrDest, | |||
| StatusCode(CallerClass::*)() | mf = NULL | |||
| ) | [inline] |
register the current instance to the UpdateManagerSvc as a consumer for a condition.
This version of the method allow the user to specify where to put a copy of the pointer to the condition object.
| condition | the path inside the Transient Detector Store to the condition object. | |
| condPtrDest | pointer to fill with the location of the condition object. Note: the pointer can be safely used only in the execute method or in the member function triggered by the update. | |
| mf | optional pointer to the member function to call when the condition object is updated. If the pointer is omitted the user must explicitly provide the class name to the method. class MyAlg: public GaudiAlgorithm { // ... public: virtual StatusCode i_CallBack(); private: Condition *m_MyCond; SpecialCondition *m_MyOtherCond; // ... }; StatusCode MyAlg::initialize(){ // ... registerCondition("/dd/Conditions/Readout/MyDet/MyCond",m_MyCond,&MyAlg::i_CallBack); registerCondition<MyAlg>("/dd/Conditions/Readout/MyDet/MyOtherCond",m_MyOtherCond); // ... return StatusCode.SUCCESS; } |
Definition at line 623 of file GaudiCommon.h.
00624 { 00625 updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),condition,mf,condPtrDest); 00626 }
| void GaudiCommon< PBASE >::registerCondition | ( | char * | condition, | |
| StatusCode(CallerClass::*)() | mf = NULL | |||
| ) | [inline] |
just to avoid conflicts with the version using a pointer to a template class.
Definition at line 629 of file GaudiCommon.h.
00629 { 00630 updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),std::string(condition),mf); 00631 }
| void GaudiCommon< PBASE >::registerCondition | ( | TargetClass * | condition, | |
| StatusCode(CallerClass::*)() | mf = NULL | |||
| ) | [inline] |
register the current instance to the UpdateManagerSvc as a consumer for a condition.
| condition | the path inside the Transient Detector Store to the condition object. | |
| mf | optional pointer to the member function to call when the condition object is updated. If the pointer is omitted the user must explicitly provide the class name to the method. StatusCode MyAlg::initialize(){ // ... registerCondition("/dd/Conditions/Readout/MyDet/MyCond",&MyAlg::i_CallBack); registerCondition<MyAlg>("/dd/Conditions/Readout/MyDet/MyOtherCond"); // ... return StatusCode.SUCCESS; } |
Definition at line 648 of file GaudiCommon.h.
00648 { 00649 updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),condition,mf); 00650 }
| StatusCode GaudiCommon< PBASE >::runUpdate | ( | ) | [inline] |
asks the UpdateManagerSvc to perform an update of the instance (if needed) without waiting the next BeginEvent incident.
It is useful if the instance can be instantiated after a BeginEvent incident, and used before the next one (for example with tools).
StatusCode MyTool::initialize(){ // ... return runUpdate(); }
Definition at line 662 of file GaudiCommon.h.
| TransientFastContainer< T > * GaudiCommon< PBASE >::getFastContainer | ( | const std::string & | location, | |
| typename TransientFastContainer< T >::size_type | initial = 0 | |||
| ) | [inline] |
Return a new TransientFastContainer for objects of type T.
The container is created if it is not in the transient store. If a container with the same name but a different type
Definition at line 226 of file GaudiCommonImp.h.
00228 { 00229 typedef TransientFastContainer<T> container_type; 00230 00231 IDataProviderSvc* svc = fastContainersSvc(); 00232 Assert( 0 != svc , "getFastContainer(): cannot get FastContainersSvc" ); 00233 00234 container_type *ptr = NULL; 00235 SmartDataPtr<container_type> obj( svc, location ); 00236 if (!obj){ 00237 ptr = new container_type(initial); 00238 StatusCode status = svc->registerObject(location,ptr); 00239 if ( !status.isSuccess() ){ 00240 Exception("getFastContainer(): cannot register '" + 00241 System::typeinfoName( typeid( *ptr ) ) + 00242 "' at address '" + location + "'" , status ); 00243 } 00244 } else { 00245 ptr = obj; 00246 if ( !ptr ){ 00247 Exception("getFastContainer(): No valid container at '" + location + "'"); 00248 } 00249 } 00250 00251 return ptr; 00252 }
| StatusCode GaudiCommon< PBASE >::initialize | ( | ) | [inline, virtual] |
standard initialization method
Reimplemented in GaudiAlgorithm, GaudiHistoAlg, GaudiHistoTool, GaudiSequencer, GaudiTool, GaudiTupleAlg, GaudiTupleTool, Prescaler, SequencerTimerTool, EqSolver, FuncMinimum, GaudiHistos< GaudiAlgorithm >, GaudiHistos< GaudiTool >, GaudiTuples< GaudiHistoTool >, and GaudiTuples< GaudiHistoAlg >.
Definition at line 223 of file GaudiCommon.icpp.
00224 { 00225 00226 // initialize base class 00227 const StatusCode sc = PBASE::initialize(); 00228 if ( sc.isFailure() ) 00229 { return Error ( "Failed to initialise base class PBASE", sc ) ; } 00230 00231 00232 // some debug printout 00233 if ( msgLevel(MSG::DEBUG) ) 00234 { 00235 debug() << "Initialize base class GaudiCommon<" << System::typeinfoName(typeid(PBASE)) << ">" << endmsg; 00236 if ( !context().empty() ) 00237 debug() << "Created with context = '" << context() << "'" << endmsg; 00238 } 00239 00240 // some temporary checks to see if people are using RootOnTES and warn if so 00241 // TO BE REMOVED ASAP ... 00242 if ( m_rootInTES.empty() && !m_rootOnTES.empty() ) 00243 { 00244 m_rootInTES = m_rootOnTES; 00245 Warning( "RootOnTES option is OBSOLETE -> Use RootInTES instead. RootInTES has been updated to " 00246 + m_rootInTES, StatusCode::SUCCESS ).ignore(); 00247 } 00248 else if ( !m_rootInTES.empty() && !m_rootOnTES.empty() ) 00249 { 00250 Warning( "Options RootOnTES AND RootInTES are defined ! Use RootInTES. RootOnTES is ignored", 00251 StatusCode::SUCCESS ).ignore(); 00252 } 00253 00254 // Check rootInTES ends with a / 00255 if ( !m_rootInTES.empty() && 00256 m_rootInTES.substr(m_rootInTES.size()-1) != "/" ) m_rootInTES += "/"; 00257 00258 //Set up the CounterSummarySvc May need to be changed 00259 this->svcLoc()->service("CounterSummarySvc",m_counterSummarySvc,false).ignore() ; 00260 if (msgLevel(MSG::DEBUG)) 00261 { 00262 if (m_counterSummarySvc==NULL ) 00263 debug() << "could not locate CounterSummarySvc, no counter summary will be made" << endmsg; 00264 else debug() << "found CounterSummarySvc OK" << endmsg; 00265 } 00266 00267 // properties will be printed if asked for or in "MSG::DEBUG" mode 00268 if ( propsPrint() ) { printProps(MSG::ALWAYS); } 00269 else if ( msgLevel(MSG::DEBUG) ) { printProps(MSG::DEBUG); } 00270 00271 return sc; 00272 }
| StatusCode GaudiCommon< PBASE >::finalize | ( | void | ) | [inline, virtual] |
standard finalization method
Reimplemented in GaudiAlgorithm, GaudiHistoAlg, GaudiHistoTool, GaudiSequencer, GaudiTool, GaudiTupleAlg, GaudiTupleTool, Prescaler, SequencerTimerTool, EqSolver, FuncMinimum, GaudiHistos< GaudiAlgorithm >, GaudiHistos< GaudiTool >, GaudiTuples< GaudiHistoTool >, and GaudiTuples< GaudiHistoAlg >.
Definition at line 285 of file GaudiCommon.icpp.
00286 { 00287 StatusCode sc = StatusCode::SUCCESS; 00288 00289 // print the general information about statistical counters 00290 if ( msgLevel(MSG::DEBUG) || (statPrint() && !counters().empty()) ) 00291 { 00292 // print general statistical counters 00293 printStat ( statPrint() ? MSG::ALWAYS : MSG::DEBUG ) ; 00294 } 00295 //add all counters to the CounterSummarySvc 00296 if(m_counterSummarySvc && this->svcLoc()->existsService("CounterSummarySvc")) 00297 { 00298 if ( msgLevel(MSG::DEBUG) ) debug() << "adding counters to CounterSummarySvc" << endmsg; 00299 for(Statistics::const_iterator i=this->counters().begin(); 00300 i!=this->counters().end(); 00301 i++) 00302 { 00303 if(Gaudi::Utils::RegEx::matchOr(i->first,m_statEntityList)) 00304 m_counterSummarySvc->addCounter(this->name(),i->first,i->second, 00305 Gaudi::CounterSummary::SaveStatEntity); 00306 else if(Gaudi::Utils::RegEx::matchOr(i->first,m_counterList)) 00307 m_counterSummarySvc->addCounter(this->name(),i->first,i->second); 00308 } 00309 } 00310 // release all located tools and services 00311 if ( msgLevel(MSG::DEBUG) ) 00312 { 00313 debug() << "Tools to release :"; 00314 for ( AlgTools::const_iterator i = m_tools.begin(); 00315 i != m_tools.end(); ++i ) 00316 { 00317 debug() << " " << (*i)->name(); 00318 } 00319 debug() << endmsg; 00320 } 00321 while ( !m_tools.empty() ) { sc = sc && releaseTool( m_tools.back() ) ; } 00322 00323 // release all located services 00324 if ( msgLevel(MSG::DEBUG) ) 00325 { 00326 debug() << "Services to release :"; 00327 for ( Services::const_iterator i = m_services.begin(); 00328 i != m_services.end(); ++i ) 00329 { 00330 debug() << " " << (*i).first; 00331 } 00332 debug() << endmsg; 00333 } 00334 while ( !m_services.empty() ) { sc = sc && releaseSvc( m_services.begin()->second ) ; } 00335 00336 //release the CounterSummarySvc manually 00337 if(m_counterSummarySvc) 00338 { 00339 m_counterSummarySvc->release(); 00340 m_counterSummarySvc=NULL; 00341 } 00342 00343 // format printout 00344 if ( !m_errors.empty() || !m_warnings.empty() || !m_exceptions.empty() ) 00345 { 00346 always() << "Exceptions/Errors/Warnings/Infos Statistics : " 00347 << m_exceptions .size () << "/" 00348 << m_errors .size () << "/" 00349 << m_warnings .size () << "/" 00350 << m_infos .size () << endmsg ; 00351 if ( errorsPrint() ) { printErrors () ; } 00352 } 00353 00354 // delete the MsgStream 00355 resetMsgStream(); 00356 00357 // clear *ALL* counters explicitly 00358 m_counters .clear() ; 00359 m_exceptions .clear() ; 00360 m_infos .clear() ; 00361 m_warnings .clear() ; 00362 m_errors .clear() ; 00363 m_counterList.clear() ; 00364 m_statEntityList.clear() ; 00365 00366 // finalize base class 00367 return sc && PBASE::finalize(); 00368 }
| GaudiCommon& GaudiCommon< PBASE >::operator= | ( | const GaudiCommon< PBASE > & | ) | [private] |
| StatusCode GaudiCommon< PBASE >::releaseTool | ( | const IAlgTool * | tool | ) | const [inline, protected] |
manual forced (and 'safe') release of the tool
Definition at line 394 of file GaudiCommon.icpp.
00395 { 00396 if( 0 == algTool ) 00397 { return Error ( "releaseTool(IAlgTool):: IAlgTool* points to NULL!" ) ; } 00398 if( this->toolSvc() == 0 ) 00399 { return Error ( "releaseTool(IAlgTool):: IToolSvc* points to NULL!" ) ; } 00400 // find a tool in the list of active tools 00401 AlgTools::reverse_iterator it = 00402 std::find( m_tools.rbegin() , m_tools.rend() , algTool ) ; 00403 if( m_tools.rend() == it ) 00404 { return Warning("releaseTool(IAlgTool):: IAlgTool* is not active" ) ; } 00405 // get the tool 00406 IAlgTool* t = *it ; 00407 // cache name 00408 const std::string name = t->name(); 00409 if ( msgLevel(MSG::DEBUG) ) 00410 { debug() << "Releasing tool '" << name << "'" << endmsg; } 00411 // remove the tool from the lists 00412 m_tools.erase( --it.base() ) ; 00413 // release tool 00414 const StatusCode sc = this->toolSvc()->releaseTool( t ) ; 00415 if ( sc.isFailure() ) 00416 { return Warning ( "releaseTool(IAlgTool):: error from IToolSvc whilst releasing "+name , sc ) ; } 00417 // return final status code 00418 return sc ; 00419 }
| StatusCode GaudiCommon< PBASE >::releaseSvc | ( | const IInterface * | svc | ) | const [inline, protected] |
manual forced (and 'safe') release of the service
Definition at line 426 of file GaudiCommon.icpp.
00427 { 00428 if( 0 == Svc ) { 00429 return Error ( "releaseSvc(IInterface):: IInterface* points to NULL!" ) ; 00430 } 00431 SmartIF<IService> svc(const_cast<IInterface*>(Svc)); 00432 if (svc.isValid()) { 00433 Services::iterator it = m_services.find(svc->name()); 00434 if (it == m_services.end()) { 00435 return Warning( "releaseSvc(IInterface):: IInterface* is not active" ); 00436 } 00437 if ( msgLevel(MSG::DEBUG) ) { 00438 debug() << "Releasing service '" << it->first << "'" << endmsg; 00439 } 00440 m_services.erase(it); 00441 return StatusCode::SUCCESS; 00442 } 00443 return Warning( "releaseSvc(IInterface):: IInterface* is not a service" ); 00444 }
| StatusCode GaudiCommon< PBASE >::release | ( | const IInterface * | interface | ) | const [inline] |
Manual forced (and 'safe') release of the active tool or service.
IMyTool* mytool = tool<IMyTool>( .... ) ; mytool->spendCPUtime() ; release ( mytool ) ; IMySvc* msvc = svc<IMySvc>( .... ) ; msvc->spendCPUtime() ; release ( msvc ) ;
| interface | Interface pointer to the interface to be released |
| StatusCode::SUCCESS | Tool or service was successfully released | |
| StatusCode::FAILURE | Error releasing too or service |
Definition at line 379 of file GaudiCommon.icpp.
00380 { 00381 if ( 0 == interface ) 00382 { return Error ( "release(IInterface):: IInterface* points to NULL!" ) ; } 00383 // dispatch between tools and services 00384 const IAlgTool* algTool = dynamic_cast<const IAlgTool*>( interface ) ; 00385 // perform the actual release 00386 return 0 != algTool ? releaseTool( algTool ) : releaseSvc( interface ) ; 00387 }
| const AlgTools& GaudiCommon< PBASE >::tools | ( | ) | const [inline] |
get the list of aquired tools
Definition at line 737 of file GaudiCommon.h.
00737 { return m_tools ; } // get all tools
| const Services& GaudiCommon< PBASE >::services | ( | ) | const [inline] |
get the list of aquired services
Definition at line 739 of file GaudiCommon.h.
00739 { return m_services ; } // get all services
| void GaudiCommon< PBASE >::printErrorHandler | ( | Property & | ) | [inline, private] |
handler for "ErrorPrint" property
Definition at line 793 of file GaudiCommon.icpp.
00794 { 00795 // no action if not yet initialized 00796 if ( this -> FSMState() < Gaudi::StateMachine::INITIALIZED ) { return ; } 00797 if ( this -> errorsPrint() ) { this -> printErrors () ; } 00798 }
| void GaudiCommon< PBASE >::printPropsHandler | ( | Property & | ) | [inline, private] |
handler for "PropertiesPrint" property
Definition at line 803 of file GaudiCommon.icpp.
00804 { 00805 // no action if not yet initialized 00806 if ( this -> FSMState() < Gaudi::StateMachine::INITIALIZED ) { return ; } 00807 if ( this -> propsPrint() ) { this -> printProps ( MSG::ALWAYS ) ; } 00808 }
| void GaudiCommon< PBASE >::printStatHandler | ( | Property & | ) | [inline, private] |
handler for "StatPrint" property
Definition at line 813 of file GaudiCommon.icpp.
00814 { 00815 // no action if not yet initialized 00816 if ( this -> FSMState() < Gaudi::StateMachine::INITIALIZED ) { return ; } 00817 if ( this -> statPrint() ) { this -> printStat ( MSG::ALWAYS ) ; } 00818 }
| const std::string& GaudiCommon< PBASE >::context | ( | ) | const [inline] |
Returns the "context" string. Used to identify different processing states.
Definition at line 753 of file GaudiCommon.h.
00753 { return m_context; }
| const std::string& GaudiCommon< PBASE >::rootInTES | ( | ) | const [inline] |
Returns the "rootInTES" string.
Used as the directory root in the TES for which all data access refers to (both saving and retrieving).
Definition at line 757 of file GaudiCommon.h.
00757 { return m_rootInTES; }
| double GaudiCommon< PBASE >::globalTimeOffset | ( | ) | const [inline] |
Returns the "globalTimeOffset" double.
Definition at line 759 of file GaudiCommon.h.
00759 { return m_globalTimeOffset; }
| void GaudiCommon< PBASE >::addToToolList | ( | IAlgTool * | tool | ) | const [inline, private] |
| void GaudiCommon< PBASE >::addToServiceList | ( | const SmartIF< IService > & | svc | ) | const [inline, private] |
Add the given service to the list of acquired services.
Definition at line 461 of file GaudiCommon.icpp.
00462 { 00463 if (svc.isValid()) { 00464 m_services[svc->name()] = svc; 00465 } 00466 }
| void GaudiCommon< PBASE >::initGaudiCommonConstructor | ( | const IInterface * | parent = 0 |
) | [inline, private] |
Constructor initializations.
< flag to use the special "efficiency" format
Definition at line 68 of file GaudiCommon.icpp.
00069 { 00070 // initialise data members 00071 m_msgLevel = MSG::NIL; 00072 m_msgStream = 0; 00073 m_updMgrSvc = 0; 00074 m_fastContainersSvc = 0; 00075 m_typePrint = true; 00076 m_propsPrint = false; 00077 m_statPrint = true; 00078 m_errorsPrint = true; 00079 m_context = "" ; 00080 m_rootInTES = "" ; 00081 m_globalTimeOffset = 0.0 ; 00082 //data members for the CounterSummarySvc 00083 m_counterSummarySvc=NULL; 00084 m_counterList=std::vector<std::string>(1,".*"); 00085 m_statEntityList=std::vector<std::string>(0); 00086 00087 // printout of counters: 00088 00089 // the header row for counters printout 00090 m_header = " | Counter | # | sum | mean/eff^* | rms/err^* | min | max |" ; 00091 // format for regular statistical printout rows 00092 m_format1 = " | %|-48.48s|%|50t||%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |" ; 00093 // format for "efficiency" statistical printout rows 00094 m_format2 = " |*%|-48.48s|%|50t||%|10d| |%|11.5g| |(%|#9.6g| +- %|-#9.6g|)%%| ------- | ------- |" ; 00095 // flag to use the special "efficiency" format 00096 m_useEffFormat = true ; 00097 00098 // job options 00099 // print error counters at finalization ? 00100 this->declareProperty 00101 ( "ErrorsPrint" , m_errorsPrint , 00102 "Print the statistics of errors/warnings/exceptions") 00103 -> declareUpdateHandler 00104 ( &GaudiCommon<PBASE>::printErrorHandler, this ) ; 00105 // print properties at initialization? 00106 this->declareProperty 00107 ( "PropertiesPrint" , m_propsPrint , 00108 "Print the properties of the component ") 00109 -> declareUpdateHandler 00110 ( &GaudiCommon<PBASE>::printPropsHandler, this ) ; 00111 // print statistical counters at finalization ? 00112 this->declareProperty 00113 ( "StatPrint" , m_statPrint , 00114 "Print the table of counters" ) 00115 -> declareUpdateHandler 00116 ( &GaudiCommon<PBASE>::printStatHandler, this ) ; 00117 // insert the actual C++ type of the algorithm or tool in the messages? 00118 this->declareProperty 00119 ( "TypePrint" , m_typePrint , 00120 "Add the actal C++ component type into the messages" ) ; 00121 // context 00122 this->declareProperty ( "Context" , m_context ) ; 00123 // root in TES 00124 this->declareProperty ( "RootInTES" , m_rootInTES ) ; 00125 // root on TES ( temporary ) 00126 this->declareProperty ( "RootOnTES" , m_rootOnTES ) ; 00127 // global time offset 00128 this->declareProperty ( "GlobalTimeOffset", m_globalTimeOffset ) ; 00129 00130 00131 // the header row for counters printout 00132 this->declareProperty 00133 ( "StatTableHeader" , m_header , 00134 "The header row for the output Stat-table" ) ; 00135 // format for regular statistical printout rows 00136 this->declareProperty 00137 ( "RegularRowFormat" , m_format1 , 00138 "The format for the regular row in the output Stat-table" ) ; 00139 // format for "efficiency" statistical printout rows 00140 this->declareProperty 00141 ( "EfficiencyRowFormat" , m_format2 , 00142 "The format for the regular row in the output Stat-table" ) ; 00143 // flag to use the special "efficiency" format 00144 this->declareProperty 00145 ( "UseEfficiencyRowFormat" , m_useEffFormat , 00146 "Use the special format for printout of efficiency counters" ) ; 00147 00148 00149 //declare the list of simple counters to write. 00150 this->declareProperty( 00151 "CounterList", 00152 m_counterList=std::vector<std::string>(1,".*"), 00153 "RegEx list, of simple integer counters for CounterSummary."); 00154 //declare the list of stat entities to write. 00155 this->declareProperty( 00156 "StatEntityList", 00157 m_statEntityList=std::vector<std::string>(0), 00158 "RegEx list, of StatEntity counters for CounterSummary."); 00159 00160 // add handler for message level changes 00161 this->outputLevelProperty().declareUpdateHandler( &GaudiCommon<PBASE>::msgLevelHandler, this ); 00162 00163 // setup context from parent if available 00164 if ( parent ) 00165 { 00166 if ( const GaudiAlgorithm* gAlg = dynamic_cast<const GaudiAlgorithm*>(parent) ) 00167 { 00168 m_context = gAlg->context(); 00169 m_rootInTES = gAlg->rootInTES(); 00170 m_globalTimeOffset = gAlg->globalTimeOffset(); 00171 } 00172 else if ( const GaudiTool* gTool = dynamic_cast<const GaudiTool*> (parent) ) 00173 { 00174 m_context = gTool->context(); 00175 m_rootInTES = gTool->rootInTES(); 00176 m_globalTimeOffset = gTool->globalTimeOffset(); 00177 } 00178 } 00179 00180 // Get the job option service 00181 IJobOptionsSvc* jos = svc<IJobOptionsSvc>( "JobOptionsSvc" ); 00182 00183 // Get the "Context" option if in the file... 00184 const std::vector<const Property*>* myList = jos->getProperties( this->name() ); 00185 if ( 0 != myList ) 00186 { 00187 // Iterate over the list to set the options 00188 for ( std::vector<const Property*>::const_iterator iter = myList->begin(); 00189 iter != myList->end(); 00190 ++iter ) 00191 { 00192 const StringProperty* sp = dynamic_cast<const StringProperty*>(*iter); 00193 if ( 0 != sp ) 00194 { 00195 if ( "Context" == (*iter)->name() ) 00196 { 00197 m_context = sp->value(); 00198 } else if ( "RootInTES" == (*iter)->name() ) { 00199 m_rootInTES = sp->value(); 00200 } else if ( "GlobalTimeOffset" == (*iter)->name() ) { 00201 m_globalTimeOffset = atof( sp->value().c_str() ); 00202 } 00203 } 00204 } 00205 } 00206 00207 // release tool 00208 release( jos ).ignore(); 00209 00210 }
| const std::string GaudiCommon< PBASE >::fullTESLocation | ( | const std::string & | location, | |
| const bool | useRootInTES | |||
| ) | const [inline, private] |
Returns the full correct event location given the rootInTes settings.
Definition at line 25 of file GaudiCommonImp.h.
00027 { 00028 // The logic is: 00029 // if no R.I.T., give back location 00030 // if R.I.T., this is the mapping: 00031 // (note that R.I.T. contains a trailing '/') 00032 // location -> result 00033 // ------------------------------------------------- 00034 // "" -> R.I.T.[:-1] ("rit") 00035 // "/Event" -> R.I.T.[:-1] ("rit") 00036 // "/Event/MyObj" -> R.I.T. + "MyObj" ("rit/MyObj") 00037 // "MyObj" -> R.I.T. + "MyObj" ("rit/MyObj") 00038 return ( !useRootInTES || rootInTES().empty() ? 00039 location 00040 : 00041 location.empty() || ( location == "/Event" ) ? 00042 rootInTES().substr(0,rootInTES().size()-1) 00043 : 00044 0 == location.find("/Event/") ? 00045 rootInTES() + location.substr(7) 00046 : 00047 rootInTES() + location ); 00048 }
const bool GaudiCommon< PBASE >::IgnoreRootInTES = false [static, protected] |
Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods.
If used with cause the RootInTES option to be IGNORED.
Useful to aid with code readability. e.g.
// Get data, ignoring the setting of rootInTES() MyData * data = get<MyData>( "/Event/MyData", IgnoreRootInTES );
Definition at line 72 of file GaudiCommon.h.
const bool GaudiCommon< PBASE >::UseRootInTES = true [static, protected] |
Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods.
If used with cause the RootInTES option to be USED
Useful to aid with code readability. e.g.
// Get data, using the setting of rootInTES() MyData * data = get<MyData>( "/Event/MyData", UseRootInTES ); // note the default setting is true, so this is equivalent to MyData * data = get<MyData>( "/Event/MyData" );
Definition at line 84 of file GaudiCommon.h.
ICounterSummarySvc* GaudiCommon< PBASE >::m_counterSummarySvc [protected] |
std::vector<std::string> GaudiCommon< PBASE >::m_counterList [protected] |
list of counters to declare. Set by property CounterList. This can be a regular expression.
Definition at line 101 of file GaudiCommon.h.
std::vector<std::string> GaudiCommon< PBASE >::m_statEntityList [protected] |
Definition at line 103 of file GaudiCommon.h.
MSG::Level GaudiCommon< PBASE >::m_msgLevel [private] |
MsgStream* GaudiCommon< PBASE >::m_msgStream [mutable, private] |
AlgTools GaudiCommon< PBASE >::m_tools [mutable, private] |
Services GaudiCommon< PBASE >::m_services [mutable, private] |
Counter GaudiCommon< PBASE >::m_errors [mutable, private] |
Counter GaudiCommon< PBASE >::m_warnings [mutable, private] |
Counter GaudiCommon< PBASE >::m_infos [mutable, private] |
Counter GaudiCommon< PBASE >::m_exceptions [mutable, private] |
Statistics GaudiCommon< PBASE >::m_counters [mutable, private] |
IUpdateManagerSvc* GaudiCommon< PBASE >::m_updMgrSvc [mutable, private] |
IDataProviderSvc* GaudiCommon< PBASE >::m_fastContainersSvc [mutable, private] |
Pointer to the service providing transient fast containers.
Definition at line 795 of file GaudiCommon.h.
bool GaudiCommon< PBASE >::m_typePrint [private] |
insert the actual C++ type of the algorithm in the messages?
Definition at line 798 of file GaudiCommon.h.
bool GaudiCommon< PBASE >::m_propsPrint [private] |
bool GaudiCommon< PBASE >::m_statPrint [private] |
bool GaudiCommon< PBASE >::m_errorsPrint [private] |
std::string GaudiCommon< PBASE >::m_context [private] |
std::string GaudiCommon< PBASE >::m_rootInTES [private] |
std::string GaudiCommon< PBASE >::m_rootOnTES [private] |
The rootOnTES string.
Note, this job option is OBSOLETE, but retained temporarily to allow easy migration. Please update your code to use RootInTES instead. This option will be removed at some point.
Definition at line 813 of file GaudiCommon.h.
double GaudiCommon< PBASE >::m_globalTimeOffset [private] |
std::string GaudiCommon< PBASE >::m_header [private] |
std::string GaudiCommon< PBASE >::m_format1 [private] |
std::string GaudiCommon< PBASE >::m_format2 [private] |
bool GaudiCommon< PBASE >::m_useEffFormat [private] |