1 #ifndef GAUDIALG_GAUDIHISTOS_ICPP 2 #define GAUDIALG_GAUDIHISTOS_ICPP 1 51 constexpr
struct ordered_t {
59 template <
typename Map>
60 typename Map::mapped_type lookup_(
const Map&
map,
const typename Map::key_type& ID )
62 auto found = map.find( ID );
63 return found !=
std::end( map ) ? found->second :
nullptr;
79 template <
class PBASE>
93 if ( !produceHistos() ) {
94 this->debug() <<
"Histogram production is switched OFF" <<
endmsg;
99 if ( !this->histoSvc() ) {
100 return this->Error(
"initialize():: IHistogramSvc* is invalid" );
104 if ( useNumericAutoIDs() ) {
106 "Using numerical automatic IDs. These are not guaranteed to be totally deterministic. Use with care...",
121 template <
class PBASE>
131 if ( produceHistos() ) {
134 if ( ( !noHistos() ) && histoCountersPrint() ) {
135 const unsigned int n1D = histo1DMapID().size();
136 const unsigned int n2D = histo2DMapID().size();
137 const unsigned int n3D = histo3DMapID().size();
138 const unsigned int n1DP = profile1DMapID().size();
139 const unsigned int n2DP = profile2DMapID().size();
140 const unsigned int total = n1D + n2D + n3D + n1DP + n2DP;
142 this->always() <<
"Booked " << total <<
" Histogram(s) : ";
143 if ( n1D > 0 ) this->always() <<
"1D=" << n1D <<
" ";
144 if ( n2D > 0 ) this->always() <<
"2D=" << n2D <<
" ";
145 if ( n3D > 0 ) this->always() <<
"3D=" << n3D <<
" ";
146 if ( n1DP > 0 ) this->always() <<
"1DProf=" << n1DP <<
" ";
147 if ( n2DP > 0 ) this->always() <<
"2DProf=" << n2DP <<
" ";
153 if ( histosPrint() ) {
159 m_histo1DMapTitle.clear();
160 m_histo2DMapTitle.clear();
161 m_histo3DMapTitle.clear();
162 m_histo1DMapID.clear();
163 m_histo2DMapID.clear();
164 m_histo3DMapID.clear();
165 m_profile1DMapTitle.clear();
166 m_profile2DMapTitle.clear();
167 m_profile1DMapID.clear();
168 m_profile2DMapID.clear();
171 return PBASE::finalize();
176 template <
class PBASE>
183 this->msgStream( level ) <<
"No histograms are booked" <<
endmsg;
194 if ( !histo1DMapID().empty() ) {
195 msg <<
"List of booked 1D histograms in directory " 196 <<
"\"" << histoPath() <<
"\" :-";
201 for (
const auto& entry : ordered( histo1DMapID() ) ) {
202 const auto* aida = entry.second;
204 this->error() <<
"IHistogram1D points to NULL" <<
endmsg;
213 if ( !histo2DMapID().empty() ) {
214 msg <<
"List of booked 2D histograms in directory " 215 <<
"\"" << histoPath() <<
"\" :-";
217 for (
const auto& entry : ordered( histo2DMapID() ) ) {
218 const auto* aida = entry.second;
220 this->error() <<
"IHistogram2D points to NULL" <<
endmsg;
228 if ( !histo3DMapID().empty() ) {
229 msg <<
"List of booked 3D histograms in directory " 230 <<
"\"" << histoPath() <<
"\" :-";
231 for (
const auto& entry : ordered( histo3DMapID() ) ) {
232 const auto* aida = entry.second;
234 this->error() <<
"IHistogram3D points to NULL" <<
endmsg;
242 if ( !profile1DMapID().empty() ) {
243 msg <<
"List of booked 1D profile histograms in directory " 244 <<
"\"" << histoPath() <<
"\" :-";
245 for (
const auto& entry : ordered( profile1DMapID() ) ) {
246 const auto* aida = entry.second;
248 this->error() <<
"IProfile1D points to NULL" <<
endmsg;
256 if ( !profile2DMapID().empty() ) {
257 msg <<
"List of booked 2D profile histograms in directory " 258 <<
"\"" << histoPath() <<
"\" :-";
259 for (
const auto& entry : ordered( profile2DMapID() ) ) {
260 const auto* aida = entry.second;
262 this->error() <<
"IProfile2D points to NULL" <<
endmsg;
270 return this->totalNumberOfHistos();
275 template <
class PBASE>
278 return ( histo1DMapTitle().empty() && histo2DMapTitle().empty() && histo3DMapTitle().empty() &&
279 profile1DMapTitle().empty() && profile2DMapTitle().empty() && histo1DMapID().empty() &&
280 histo2DMapID().empty() && histo3DMapID().empty() && profile1DMapID().empty() && profile2DMapID().empty() );
285 template <
class PBASE>
288 if ( hist && m_declareMoniHists ) {
290 this->debug() <<
"Monitoring histogram '" << ID.
idAsString() <<
"' desc = '" 299 template <
class PBASE>
302 return lookup_( histo1DMapID(), ID );
307 template <
class PBASE>
310 return lookup_( histo2DMapID(), ID );
315 template <
class PBASE>
318 return lookup_( histo3DMapID(), ID );
323 template <
class PBASE>
326 return lookup_( profile1DMapID(), ID );
331 template <
class PBASE>
334 return lookup_( profile2DMapID(), ID );
339 template <
class PBASE>
342 return histo1DMapID().size() + histo2DMapID().size() + histo3DMapID().size() + profile1DMapID().size() +
343 profile2DMapID().size();
348 template <
class PBASE>
351 if ( useNumericAutoIDs() || title.
empty() ) {
352 if ( !useNumericAutoIDs() ) {
354 "Cannot generate automatic literal ID from an empty title ! Using numeric ID instead for histogram ID",
359 ID =
HistoID( totalNumberOfHistos() + 1 + histoOffSet() );
361 while ( histoExists( ID ) ) {
366 ID =
HistoID( this->convertTitleToID( title ) );
368 while ( histoExists( ID ) ) {
376 template <
class PBASE>
380 for (
const auto& i : m_idReplaceInfo ) {
381 stringSearchReplace( title, i.first, i.second );
387 template <
class PBASE>
391 return splitHistoDir() ? dirHbookName( path ) :
path;
412 #endif // GAUDIALG_GAUDIHISTOS_ICPP
Definition of the MsgStream class used to transmit messages.
GAUDI_API std::string htitle(const AIDA::IBaseHistogram *histo, const std::string &title="")
get the title
AIDA::IHistogram2D * histo2D(const std::string &title) const
access the EXISTING 2D histogram by title return the pointer to existing 2D histogram or NULL ...
int printHistos(const MSG::Level level=MSG::ALWAYS) const
perform the actual printout of histograms
AIDA::IProfile1D * profile1D(const double valueX, const double valueY, const std::string &title, const double lowX, const double highX, const unsigned long binsX=100, const std::string &opt="", const double lowY=-std::numeric_limits< double >::max(), const double highY=std::numeric_limits< double >::max(), const double weight=1.0) const
fill the 1D profile histogram (book on demand)
bool noHistos() const
Check if all histogram maps are empty.
GaudiAlg::ID HistoID
The actual type for histogram identifier.
void newHistoID(const std::string &title, HistoID &ID) const
Create a new histogram ID using the given title.
GAUDI_API std::string format(const AIDA::IHistogram1D *histo, const std::string &fmt)
Make the string representation of the historgam according to the specified format.
Collection of useful utilities for manipulations with AIDA hisgograms.
few useful function to construct names of Hbook histograms and directories functions are imported fro...
const std::string & header() const
the table header
void monitorHisto(const AIDA::IBaseHistogram *hist, const HistoID &ID) const
Declare a histogram to the monitor service.
AIDA::IHistogram1D * histo1D(const std::string &title) const
access the EXISTING 1D histogram by title return the pointer to existing 1D histogram or NULL ...
struct GAUDI_API map
Parametrisation class for map-like implementation.
This class is used for returning status codes from appropriate routines.
T find_first_of(T...args)
unsigned int totalNumberOfHistos() const
Returns the total number of histograms (of all types) currently booked.
Simple class for the customizeble printout of the histogram tables.
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)
constexpr static const auto SUCCESS
std::string histoPath() const
get the constructed histogram path
virtual Out operator()(const vector_of_const_< In > &inputs) const =0
GAUDI_API LiteralID idAsString() const
Return ID as string, for both numeric and literal IDs.
bool numeric() const noexcept
Is this ID numeric.
static std::string toString(const AIDA::IHistogram2D *aida, const GaudiAlg::HistoID &ID)
Templated base class providing common histogramming methods for GaudiAlgorithm and GaudiTool like cla...
static std::string toString(const AIDA::IProfile1D *aida, const GaudiAlg::HistoID &ID)
std::string convertTitleToID(std::string title) const
Create an ID string from a title string.
AIDA::IProfile2D * profile2D(const double valueX, const double valueY, const double valueZ, const std::string &title, const double lowX, const double highX, const double lowY, const double highY, const unsigned long binsX=50, const unsigned long binsY=50, const double weight=1.0) const
fill the 2D profile histogram (book on demand)
KeyedObjectManager< map > Map
Forward declaration of specialized std::map-like object manager.
static std::string toString(const AIDA::IProfile2D *aida, const GaudiAlg::HistoID &ID)
ID class for Histogram and Ntuples.
AIDA::IHistogram3D * histo3D(const std::string &title) const
access the EXISTING 3D histogram by title return the pointer to existing 3D histogram or NULL ...
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
std::string toString(const AIDA::IHistogram1D *histo) const
make the string representation according to the default format