All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Print.cpp
Go to the documentation of this file.
1 // $Id: Print.cpp,v 1.7 2008/04/03 22:13:13 marcocle Exp $
2 // ============================================================================
3 // CVS tag $Name: $, version $Revision: 1.7 $
4 // ============================================================================
5 // Include files
6 // ============================================================================
7 // STD & STL
8 // ============================================================================
9 #include <ctype.h>
10 #include <string>
11 #include <vector>
12 #include <functional>
13 // ============================================================================
14 // AIDA
15 // ============================================================================
16 #include "AIDA/IHistogram1D.h"
17 #include "AIDA/IHistogram2D.h"
18 #include "AIDA/IHistogram3D.h"
19 #include "AIDA/IProfile1D.h"
20 #include "AIDA/IProfile2D.h"
21 // ============================================================================
22 // GaudiKernel
23 // ============================================================================
24 #include "GaudiKernel/DataObject.h"
25 #include "GaudiKernel/IRegistry.h"
26 #include "GaudiKernel/StatEntity.h"
27 #include "GaudiKernel/INTuple.h"
28 // ============================================================================
29 // GaudiAlg
30 // ============================================================================
31 #include "GaudiAlg/HistoID.h"
32 #include "GaudiAlg/Print.h"
33 // ============================================================================
34 // Boost
35 // ============================================================================
36 #ifdef __ICC
37 // disable icc remark #2259: non-pointer conversion from "X" to "Y" may lose significant bits
38 // coming from boost/lexical_cast.hpp
39 #pragma warning(disable:2259)
40 #endif
41 #include "boost/format.hpp"
42 #include "boost/lexical_cast.hpp"
43 // ============================================================================
49 // ============================================================================
50 namespace
51 {
56  static const std::string s_invalidLocation = "<UNKNOWN LOCATION>" ;
57 }
58 // ============================================================================
59 const std::string& GaudiAlg::Print::location
60 ( const AIDA::IHistogram* aida )
61 {
62  if ( 0 == aida ) { return s_invalidLocation ; }
63  const DataObject* object = dynamic_cast<const DataObject*>( aida ) ;
64  if ( 0 == object ) { return s_invalidLocation ; }
65  IRegistry* registry = object->registry() ;
66  if ( 0 == registry ) { return s_invalidLocation ; }
67  return registry->identifier() ;
68 }
69 // ============================================================================
71 ( MsgStream & stream,
72  const AIDA::IHistogram1D* aida ,
73  const GaudiAlg::HistoID& ID )
74 { stream << toString ( aida , ID ) << endmsg ; }
75 // ============================================================================
77 ( const AIDA::IHistogram1D* aida ,
78  const GaudiAlg::HistoID& ID )
79 {
80  boost::format fmt
81  ( " ID=%|-25|%|30t| \"%|.45s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|" ) ;
82  fmt % ID.idAsString() % aida->title();
83  fmt % (aida->allEntries()-aida->extraEntries()) % aida->allEntries() ;
84  fmt % aida->mean() % aida->rms() ;
85  //
86  return fmt.str() ;
87 }
88 // ============================================================================
90 ( MsgStream & stream,
91  const AIDA::IHistogram2D* aida ,
92  const GaudiAlg::HistoID& ID )
93 { stream << toString ( aida , ID ) << endmsg ; }
94 // ============================================================================
96 ( const AIDA::IHistogram2D* aida ,
97  const GaudiAlg::HistoID& ID )
98 {
99  boost::format fmt
100  ( " ID=%|-25|%|30t| \"%|.45s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|,<Y>/sY=%|.5|/%|-.5|" ) ;
101  fmt % ID.idAsString() % aida->title();
102  fmt % (aida->allEntries()-aida->extraEntries()) % aida->allEntries() ;
103  fmt % aida->meanX() % aida->rmsX() ;
104  fmt % aida->meanY() % aida->rmsY() ;
105  //
106  return fmt.str() ;
107 }
108 // ============================================================================
110 ( MsgStream & stream,
111  const AIDA::IHistogram3D* aida ,
112  const GaudiAlg::HistoID& ID )
113 { stream << toString ( aida , ID ) << endmsg ; }
114 // ============================================================================
115 std::string GaudiAlg::Print3D::toString
116 ( const AIDA::IHistogram3D* aida ,
117  const GaudiAlg::HistoID& ID )
118 {
119  boost::format fmt
120  ( " ID=%|-25|%|30t| \"%|.45s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|,<Y>/sY=%|.5|/%|-.5|,<Z>/sZ=%|.5|/%|-.5|" ) ;
121  fmt % ID.idAsString() % aida->title();
122  fmt % (aida->allEntries()-aida->extraEntries()) % aida->allEntries() ;
123  fmt % aida->meanX() % aida->rmsX() ;
124  fmt % aida->meanY() % aida->rmsY() ;
125  fmt % aida->meanZ() % aida->rmsZ() ;
126  //
127  return fmt.str() ;
128 }
129 // ============================================================================
131 ( MsgStream & stream,
132  const AIDA::IProfile1D* aida ,
133  const GaudiAlg::HistoID& ID )
134 { stream << toString ( aida , ID ) << endmsg ; }
135 // ============================================================================
137 ( const AIDA::IProfile1D* aida ,
138  const GaudiAlg::HistoID& ID )
139 {
140  boost::format fmt
141  ( " ID=%|-25|%|30t| \"%|.55s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|" ) ;
142  fmt % ID.idAsString() % aida->title();
143  fmt % (aida->allEntries()-aida->extraEntries()) % aida->allEntries() ;
144  fmt % aida->mean() % aida->rms() ;
145  //
146  return fmt.str() ;
147 }
148 // ============================================================================
150 ( MsgStream & stream,
151  const AIDA::IProfile2D* aida ,
152  const GaudiAlg::HistoID& ID )
153 { stream << toString ( aida , ID ) << endmsg ; }
154 // ============================================================================
156 ( const AIDA::IProfile2D* aida ,
157  const GaudiAlg::HistoID& ID )
158 {
159  boost::format fmt
160  ( " ID=%|-25|%|30t| \"%|.55s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|,<Y>/sY=%|.5|/%|-.5|" );
161  fmt % ID.idAsString() % aida->title();
162  fmt % (aida->allEntries()-aida->extraEntries()) % aida->allEntries() ;
163  fmt % aida->meanX() % aida->rmsX() ;
164  fmt % aida->meanY() % aida->rmsY() ;
165  //
166  return fmt.str() ;
167 }
168 // ============================================================================
169 std::string GaudiAlg::PrintStat::print
170 ( const StatEntity& stat ,
171  const std::string& tag )
172 {
173  return Gaudi::Utils::formatAsTableRow ( tag , stat ) ;
174 }
175 // ============================================================================
176 std::string GaudiAlg::PrintTuple::print
177 ( const INTuple* tuple ,
178  const GaudiAlg::TupleID& ID )
179 {
180  boost::format fmt ( " ID=%|-12|%|18t|%|-s|") ;
181  fmt % ID.idAsString() % print ( tuple ) ;
182  return fmt.str() ;
183 }
184 // ============================================================================
185 namespace
186 {
187  std::string _print ( const INTuple::ItemContainer& items )
188  {
189  std::string str ;
190  for ( INTuple::ItemContainer::const_iterator iitem = items.begin() ;
191  items.end() != iitem ; ++iitem )
192  {
193  if ( items.begin() != iitem ) { str +="," ; }
194  const INTupleItem* item = *iitem ;
195  if ( 0 == item ) { continue ; }
196  str += item->name() ;
197  if ( 0 != item->ndim() )
198  { str += '[' + boost::lexical_cast<std::string>( item->ndim() ) + ']'; }
199  if ( item->hasIndex() ) { str += "/V" ; }
200  }
201  return str ;
202  }
203 }
204 // ============================================================================
205 std::string GaudiAlg::PrintTuple::print
206 ( const INTuple* tuple )
207 {
208  boost::format fmt
209  ( "Title=\"%|.39s|\" %|48t|#items=%|-3|%|50t|{%|.81s|}" ) ;
210  fmt % tuple->title() ;
211  fmt % tuple->items().size() ;
212  fmt % _print( tuple->items() ) ;
213  return fmt.str() ;
214 }
215 // ============================================================================
216 
217 
218 // ============================================================================
219 // The END
220 // ============================================================================
221 
static std::string print(const INTuple *tuple, const GaudiAlg::TupleID &ID)
Definition: Print.cpp:177
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:133
static std::string print(const StatEntity &stat, const std::string &tag)
Definition: Print.cpp:170
static void print(MsgStream &stream, const AIDA::IHistogram3D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:110
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition: ToStream.h:367
std::vector< INTupleItem * > ItemContainer
Definition: INTuple.h:86
static std::string toString(const AIDA::IHistogram1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:77
virtual const std::string & title() const =0
Object title.
virtual bool hasIndex() const =0
Is the tuple have an index item?
static void print(MsgStream &stream, const AIDA::IProfile1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:131
virtual const std::string & name() const =0
Access _Item name.
GAUDI_API std::string formatAsTableRow(const StatEntity &counter, const bool flag, const std::string &format1=" |%|7d| |%|11.7g| |%|#11.5g| |%|#10.5g| |%|#10.5g| |%|#10.5g| |", const std::string &format2="*|%|7d| |%|11.5g| |(%|#9.7g| +- %|-#8.6g|)%%| ----- | ----- |")
print the counter in a form of the table row
Definition: StatEntity.cpp:302
NTuple interface class definition.
Definition: INTuple.h:80
NTuple interface class definition.
Definition: INTuple.h:27
static const std::string & location(const AIDA::IHistogram *aida)
Definition: Print.cpp:60
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
collection of useful utilities to print certain objects (currently used for implementation in class G...
static std::string toString(const AIDA::IHistogram3D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:116
static void print(MsgStream &stream, const AIDA::IHistogram1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:71
virtual long ndim() const =0
Dimension.
static void print(MsgStream &stream, const AIDA::IProfile2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:150
GAUDI_API LiteralID idAsString() const
Return ID as string, for both numeric and literal IDs.
tuple item
print s1,s2
Definition: ana.py:146
static void print(MsgStream &stream, const AIDA::IHistogram2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:90
static std::string toString(const AIDA::IHistogram2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:96
virtual const id_type & identifier() const =0
Full identifier (or key)
virtual ItemContainer & items()=0
Access item container.
static std::string toString(const AIDA::IProfile1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:137
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:68
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:31
static std::string toString(const AIDA::IProfile2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:156
ID class for Histogram and Ntuples.
Definition: GaudiHistoID.h:46
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244