The Gaudi Framework  v29r0 (ff2e7097)
Print.cpp
Go to the documentation of this file.
1 // ============================================================================
2 // Include files
3 // ============================================================================
4 // STD & STL
5 // ============================================================================
6 #include <ctype.h>
7 #include <functional>
8 #include <string>
9 #include <vector>
10 // ============================================================================
11 // AIDA
12 // ============================================================================
13 #include "AIDA/IHistogram1D.h"
14 #include "AIDA/IHistogram2D.h"
15 #include "AIDA/IHistogram3D.h"
16 #include "AIDA/IProfile1D.h"
17 #include "AIDA/IProfile2D.h"
18 // ============================================================================
19 // GaudiKernel
20 // ============================================================================
21 #include "GaudiKernel/DataObject.h"
22 #include "GaudiKernel/INTuple.h"
23 #include "GaudiKernel/IRegistry.h"
24 #include "GaudiKernel/StatEntity.h"
25 // ============================================================================
26 // GaudiAlg
27 // ============================================================================
28 #include "GaudiAlg/HistoID.h"
29 #include "GaudiAlg/Print.h"
30 // ============================================================================
31 // Boost
32 // ============================================================================
33 #include "boost/format.hpp"
34 // ============================================================================
40 // ============================================================================
41 namespace
42 {
47  static const std::string s_invalidLocation = "<UNKNOWN LOCATION>";
48 }
49 // ============================================================================
50 const std::string& GaudiAlg::Print::location( const AIDA::IHistogram* aida )
51 {
52  if ( !aida ) {
53  return s_invalidLocation;
54  }
55  const DataObject* object = dynamic_cast<const DataObject*>( aida );
56  if ( !object ) {
57  return s_invalidLocation;
58  }
59  IRegistry* registry = object->registry();
60  if ( !registry ) {
61  return s_invalidLocation;
62  }
63  return registry->identifier();
64 }
65 // ============================================================================
66 void GaudiAlg::Print1D::print( MsgStream& stream, const AIDA::IHistogram1D* aida, const GaudiAlg::HistoID& ID )
67 {
68  stream << toString( aida, ID ) << endmsg;
69 }
70 // ============================================================================
71 std::string GaudiAlg::Print1D::toString( const AIDA::IHistogram1D* aida, const GaudiAlg::HistoID& ID )
72 {
73  boost::format fmt( " ID=%|-25|%|30t| \"%|.45s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|" );
74  fmt % ID.idAsString() % aida->title();
75  fmt % ( aida->allEntries() - aida->extraEntries() ) % aida->allEntries();
76  fmt % aida->mean() % aida->rms();
77  //
78  return fmt.str();
79 }
80 // ============================================================================
81 void GaudiAlg::Print2D::print( MsgStream& stream, const AIDA::IHistogram2D* aida, const GaudiAlg::HistoID& ID )
82 {
83  stream << toString( aida, ID ) << endmsg;
84 }
85 // ============================================================================
86 std::string GaudiAlg::Print2D::toString( const AIDA::IHistogram2D* aida, const GaudiAlg::HistoID& ID )
87 {
88  boost::format fmt( " ID=%|-25|%|30t| \"%|.45s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|,<Y>/sY=%|.5|/%|-.5|" );
89  fmt % ID.idAsString() % aida->title();
90  fmt % ( aida->allEntries() - aida->extraEntries() ) % aida->allEntries();
91  fmt % aida->meanX() % aida->rmsX();
92  fmt % aida->meanY() % aida->rmsY();
93  //
94  return fmt.str();
95 }
96 // ============================================================================
97 void GaudiAlg::Print3D::print( MsgStream& stream, const AIDA::IHistogram3D* aida, const GaudiAlg::HistoID& ID )
98 {
99  stream << toString( aida, ID ) << endmsg;
100 }
101 // ============================================================================
102 std::string GaudiAlg::Print3D::toString( const AIDA::IHistogram3D* aida, const GaudiAlg::HistoID& ID )
103 {
104  boost::format fmt( " ID=%|-25|%|30t| \"%|.45s|\" %|79t| "
105  "Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|,<Y>/sY=%|.5|/%|-.5|,<Z>/sZ=%|.5|/%|-.5|" );
106  fmt % ID.idAsString() % aida->title();
107  fmt % ( aida->allEntries() - aida->extraEntries() ) % aida->allEntries();
108  fmt % aida->meanX() % aida->rmsX();
109  fmt % aida->meanY() % aida->rmsY();
110  fmt % aida->meanZ() % aida->rmsZ();
111  //
112  return fmt.str();
113 }
114 // ============================================================================
115 void GaudiAlg::Print1DProf::print( MsgStream& stream, const AIDA::IProfile1D* aida, const GaudiAlg::HistoID& ID )
116 {
117  stream << toString( aida, ID ) << endmsg;
118 }
119 // ============================================================================
120 std::string GaudiAlg::Print1DProf::toString( const AIDA::IProfile1D* aida, const GaudiAlg::HistoID& ID )
121 {
122  boost::format fmt( " ID=%|-25|%|30t| \"%|.55s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|" );
123  fmt % ID.idAsString() % aida->title();
124  fmt % ( aida->allEntries() - aida->extraEntries() ) % aida->allEntries();
125  fmt % aida->mean() % aida->rms();
126  //
127  return fmt.str();
128 }
129 // ============================================================================
130 void GaudiAlg::Print2DProf::print( MsgStream& stream, const AIDA::IProfile2D* aida, const GaudiAlg::HistoID& ID )
131 {
132  stream << toString( aida, ID ) << endmsg;
133 }
134 // ============================================================================
135 std::string GaudiAlg::Print2DProf::toString( const AIDA::IProfile2D* aida, const GaudiAlg::HistoID& ID )
136 {
137  boost::format fmt( " ID=%|-25|%|30t| \"%|.55s|\" %|79t| Ents/All=%|5|/%|-5|<X>/sX=%|.5|/%|-.5|,<Y>/sY=%|.5|/%|-.5|" );
138  fmt % ID.idAsString() % aida->title();
139  fmt % ( aida->allEntries() - aida->extraEntries() ) % aida->allEntries();
140  fmt % aida->meanX() % aida->rmsX();
141  fmt % aida->meanY() % aida->rmsY();
142  //
143  return fmt.str();
144 }
145 // ============================================================================
147 {
148  return Gaudi::Utils::formatAsTableRow( tag, stat );
149 }
150 // ============================================================================
152 {
153  boost::format fmt( " ID=%|-12|%|18t|%|-s|" );
154  fmt % ID.idAsString() % print( tuple );
155  return fmt.str();
156 }
157 // ============================================================================
158 namespace
159 {
160  std::string _print( const INTuple::ItemContainer& items )
161  {
162  std::string str;
163  for ( const auto& item : items ) {
164  if ( !item ) {
165  continue;
166  }
167  if ( !str.empty() ) {
168  str += ",";
169  }
170  str += item->name();
171  if ( 0 != item->ndim() ) {
172  str += '[' + std::to_string( item->ndim() ) + ']';
173  }
174  if ( item->hasIndex() ) {
175  str += "/V";
176  }
177  }
178  return str;
179  }
180 }
181 // ============================================================================
183 {
184  boost::format fmt( "Title=\"%|.39s|\" %|48t|#items=%|-3|%|50t|{%|.81s|}" );
185  fmt % tuple->title();
186  fmt % tuple->items().size();
187  fmt % _print( tuple->items() );
188  return fmt.str();
189 }
190 // ============================================================================
191 
192 // ============================================================================
193 // The END
194 // ============================================================================
static std::string print(const INTuple *tuple, const GaudiAlg::TupleID &ID)
Definition: Print.cpp:151
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
T empty(T...args)
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:120
static std::string print(const StatEntity &stat, const std::string &tag)
Definition: Print.cpp:146
static void print(MsgStream &stream, const AIDA::IHistogram3D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:97
T to_string(T...args)
static std::string toString(const AIDA::IHistogram1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:71
static void print(MsgStream &stream, const AIDA::IProfile1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:115
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:305
STL class.
NTuple interface class definition.
Definition: INTuple.h:82
virtual const id_type & identifier() const =0
Full identifier (or key)
static const std::string & location(const AIDA::IHistogram *aida)
Definition: Print.cpp:50
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:102
static void print(MsgStream &stream, const AIDA::IHistogram1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:66
T size(T...args)
STL class.
void print(string text)
Definition: mergesort.cpp:30
static void print(MsgStream &stream, const AIDA::IProfile2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:130
GAUDI_API LiteralID idAsString() const
Return ID as string, for both numeric and literal IDs.
static void print(MsgStream &stream, const AIDA::IHistogram2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:81
static std::string toString(const AIDA::IHistogram2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:86
virtual ItemContainer & items()=0
Access item container.
static std::string toString(const AIDA::IProfile1D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:120
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:65
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:29
virtual const std::string & title() const =0
Object title.
static std::string toString(const AIDA::IProfile2D *aida, const GaudiAlg::HistoID &ID)
Definition: Print.cpp:135
ID class for Histogram and Ntuples.
Definition: GaudiHistoID.h:44
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
std::string toString(const Type &)