The Gaudi Framework  v29r0 (ff2e7097)
Stat.cpp
Go to the documentation of this file.
1 // ============================================================================
2 // Include files
3 // ============================================================================
4 // STD & STL
5 // ============================================================================
6 #include <sstream>
7 // ============================================================================
8 // GaudiKernel
9 // ============================================================================
11 #include "GaudiKernel/IStatSvc.h"
12 #include "GaudiKernel/Stat.h"
13 #include "GaudiKernel/StatEntity.h"
14 // ============================================================================
15 // Boost
16 // ============================================================================
17 #include "boost/format.hpp"
18 // ============================================================================
25 // ============================================================================
26 /* Constructor from IStatSvc,tag and value
27  *
28  * @code
29  *
30  * IStatSvc* statSvc = ... ;
31  * double eTotal = .... ;
32  *
33  * Stat eTot ( statSvc , "total energy" ) ;
34  * eTot += eTotal ;
35  *
36  * @endcode
37  *
38  * @see IStatSvc
39  * @param svc pointer to Chrono&Stat Service
40  * @paran tag unique tag for the entry
41  */
42 // ============================================================================
43 Stat::Stat( IStatSvc* svc, const std::string& tag ) : m_tag( tag ), m_group(), m_stat( svc )
44 {
45  if ( m_stat ) {
46  // get from the service
47  const StatEntity* tmp = m_stat->stat( tag );
48  if ( !tmp ) {
49  // create if needed
50  m_stat->stat( tag, 0 );
51  tmp = m_stat->stat( tag );
52  StatEntity* aux = const_cast<StatEntity*>( tmp );
53  aux->reset();
54  }
55  m_entity = const_cast<StatEntity*>( tmp );
56  }
57 }
58 // ============================================================================
59 /* Constructor from IStatSvc,tag and value
60  *
61  * @code
62  *
63  * IStatSvc* statSvc = ... ;
64  * double eTotal = .... ;
65  *
66  * Stat stat( statSvc , "total energy" , eTotal ) ;
67  *
68  * @endcode
69  *
70  * @see IStatSvc
71  * @param svc pointer to Chrono&Stat Service
72  * @paran tag unique tag for the entry
73  * @param flag "flag"(additive quantity) to be used
74  */
75 // ============================================================================
76 Stat::Stat( IStatSvc* svc, const std::string& tag, const double flag ) : m_tag( tag ), m_group(), m_stat( svc )
77 {
78  if ( m_stat ) {
79  m_stat->stat( tag, flag );
80  // get from the service
81  m_entity = const_cast<StatEntity*>( m_stat->stat( tag ) );
82  }
83 }
84 // ============================================================================
85 /* constructor from ICounterSvc, group and name
86  * @see ICounterSvc::get
87  * @see ICounterSvc::create
88  * @param svc pointer to Counter Service
89  * @param group group name
90  * @param name counter name
91  */
92 // ============================================================================
94  : m_tag( name ), m_group( group ), m_counter( svc )
95 {
96  if ( m_counter ) {
97  // get from the service
98  m_entity = m_counter->get( group, name );
99  // create if needed:
100  if ( !m_entity ) {
101  m_counter->create( group, name, 0, m_entity );
102  }
103  }
104 }
105 
106 // ============================================================================
107 // representation as string
108 // ============================================================================
110 {
111  std::ostringstream ost;
112  print( ost );
113  return ost.str();
114 }
115 // ============================================================================
116 /* printout to std::ostream
117  * @param s the reference to the output stream
118  */
119 // ============================================================================
121 {
122  if ( m_group.empty() && m_tag.empty() ) {
123  return !m_entity ? ( o << "NULL" ) : ( o << m_entity );
124  }
125  if ( !m_group.empty() ) {
126  if ( m_entity ) {
127  return o << boost::format( " %|1$15s|::%|2$-15s| %|32t|%3%" ) % ( "\"" + m_group ) % ( m_tag + "\"" ) %
128  ( *m_entity );
129  } else {
130  return o << boost::format( " %|1$15s|::%|2$-15s| %|32t|%NULL%" ) % ( "\"" + m_group ) % ( m_tag + "\"" );
131  }
132  }
133  if ( m_entity ) {
134  return o << boost::format( " %|1$=30s| %|32t|%2%" ) % ( "\"" + m_tag + "\"" ) % ( *m_entity );
135  }
136  return o << boost::format( " %|1$=30s| %|32t|%NULL%" ) % ( "\"" + m_tag + "\"" );
137 }
138 // ============================================================================
139 // external operator for addition of Stat and a number
140 // ============================================================================
141 Stat operator+( const Stat& stat, const double value )
142 {
143  Stat s( stat );
144  s += value;
145  return s;
146 }
147 // ============================================================================
148 // external operator for subtraction of Stat and a number
149 // ============================================================================
150 Stat operator-( const Stat& stat, const double value )
151 {
152  Stat s( stat );
153  s -= value;
154  return s;
155 }
156 // ============================================================================
157 // external operator for addition of Stat and a number
158 // ============================================================================
159 Stat operator+( const double value, const Stat& stat )
160 {
161  Stat s( stat );
162  s += value;
163  return s;
164 }
165 // ============================================================================
166 // external operator for addition of Stat and Stat
167 Stat operator+( const Stat& stat, const Stat& value )
168 {
169  Stat s( stat );
170  s += value;
171  return s;
172 }
173 // ============================================================================
174 // external printout operator to std::ostream
175 std::ostream& operator<<( std::ostream& stream, const Stat& stat ) { return stat.print( stream ); }
176 // ============================================================================
177 
178 // ============================================================================
179 // The END
180 // ============================================================================
virtual StatusCode create(const std::string &group, const std::string &name, longlong initial_value, Counter *&refpCounter)=0
Create a new counter object.
T empty(T...args)
virtual Counter * get(const std::string &group, const std::string &name) const =0
Access an existing counter object.
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:120
Small wrapper class for easy manipulation with generic counters and IStatSvc&ICounterSvc interface...
Definition: Stat.h:46
Create / access multi purpose counters.
Definition: ICounterSvc.h:75
SmartIF< IStatSvc > m_stat
Stat service.
Definition: Stat.h:293
virtual void stat(const StatTag &t, const StatFlag &f)=0
add statistical information to the entity , tagged by its name
StatEntity * m_entity
underlying counter
Definition: Stat.h:287
Stat operator+(const Stat &stat, const double value)
external operator for addition of Stat and a number
Definition: Stat.cpp:141
void reset()
reset the counters
Definition: StatEntity.cpp:207
const std::string & name() const
counter name
Definition: Stat.h:281
STL class.
std::string m_tag
unique stat tag(name)
Definition: Stat.h:289
SmartIF< ICounterSvc > m_counter
Counter Service.
Definition: Stat.h:295
Stat(StatEntity *entity=0, const std::string &name="", const std::string &group="")
constructor from StatEntity, name and group :
Definition: Stat.h:65
std::string m_group
Definition: Stat.h:291
std::string toString() const
representation as string
Definition: Stat.cpp:109
string s
Definition: gaudirun.py:253
std::ostream & operator<<(std::ostream &stream, const Stat &stat)
output operator for the counter object
Definition: Stat.cpp:175
"Stat"-related part of interface IChronoStatSvc
Definition: IStatSvc.h:25
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:65
std::ostream & print(std::ostream &o=std::cout) const
printout to std::ostream
Definition: Stat.cpp:120
STL class.
const std::string & group() const
counter group (for ICounterSvc)
Definition: Stat.h:283
Stat operator-(const Stat &stat, const double value)
external operator for subtraction of Stat and a number
Definition: Stat.cpp:150