1 #ifndef GAUDIALG_GAUDIHISTOS_ICPP 2 #define GAUDIALG_GAUDIHISTOS_ICPP 1 49 constexpr
struct ordered_t {
56 template <
typename Map>
57 typename Map::mapped_type lookup_(
const Map&
map,
const typename Map::key_type& ID ) {
58 auto found = map.find( ID );
59 return found !=
std::end( map ) ? found->second :
nullptr;
74 template <
class PBASE>
87 if ( !produceHistos() ) {
88 this->debug() <<
"Histogram production is switched OFF" <<
endmsg;
93 if ( !this->histoSvc() ) {
return this->Error(
"initialize():: IHistogramSvc* is invalid" ); }
96 if ( useNumericAutoIDs() ) {
98 "Using numerical automatic IDs. These are not guaranteed to be totally deterministic. Use with care...",
113 template <
class PBASE>
122 if ( produceHistos() ) {
125 if ( ( !noHistos() ) && histoCountersPrint() ) {
126 const unsigned int n1D = histo1DMapID().size();
127 const unsigned int n2D = histo2DMapID().size();
128 const unsigned int n3D = histo3DMapID().size();
129 const unsigned int n1DP = profile1DMapID().size();
130 const unsigned int n2DP = profile2DMapID().size();
131 const unsigned int total = n1D + n2D + n3D + n1DP + n2DP;
133 this->always() <<
"Booked " << total <<
" Histogram(s) : ";
134 if ( n1D > 0 ) this->always() <<
"1D=" << n1D <<
" ";
135 if ( n2D > 0 ) this->always() <<
"2D=" << n2D <<
" ";
136 if ( n3D > 0 ) this->always() <<
"3D=" << n3D <<
" ";
137 if ( n1DP > 0 ) this->always() <<
"1DProf=" << n1DP <<
" ";
138 if ( n2DP > 0 ) this->always() <<
"2DProf=" << n2DP <<
" ";
144 if ( histosPrint() ) { printHistos(); }
148 m_histo1DMapTitle.clear();
149 m_histo2DMapTitle.clear();
150 m_histo3DMapTitle.clear();
151 m_histo1DMapID.clear();
152 m_histo2DMapID.clear();
153 m_histo3DMapID.clear();
154 m_profile1DMapTitle.clear();
155 m_profile2DMapTitle.clear();
156 m_profile1DMapID.clear();
157 m_profile2DMapID.clear();
160 return PBASE::finalize();
165 template <
class PBASE>
170 if ( this->msgLevel(
MSG::DEBUG ) ) { this->msgStream( level ) <<
"No histograms are booked" <<
endmsg; }
178 if ( !histo1DMapID().empty() ) {
179 msg <<
"1D histograms in directory " 180 <<
"\"" << histoPath() <<
"\" : " << histo1DMapID().size();
185 for (
const auto& entry : ordered( histo1DMapID() ) ) {
186 const auto* aida = entry.second;
188 this->error() <<
"IHistogram1D points to NULL" <<
endmsg;
197 if ( !histo2DMapID().empty() ) {
198 msg <<
"2D histograms in directory " 199 <<
"\"" << histoPath() <<
"\" : " << histo2DMapID().size();
201 for (
const auto& entry : ordered( histo2DMapID() ) ) {
202 const auto* aida = entry.second;
204 this->error() <<
"IHistogram2D points to NULL" <<
endmsg;
212 if ( !histo3DMapID().empty() ) {
213 msg <<
"3D histograms in directory " 214 <<
"\"" << histoPath() <<
"\" : " << histo3DMapID().size();
215 for (
const auto& entry : ordered( histo3DMapID() ) ) {
216 const auto* aida = entry.second;
218 this->error() <<
"IHistogram3D points to NULL" <<
endmsg;
226 if ( !profile1DMapID().empty() ) {
227 msg <<
"1D profile histograms in directory " 228 <<
"\"" << histoPath() <<
"\" : " << profile1DMapID().size();
233 for (
const auto& entry : ordered( profile1DMapID() ) ) {
234 const auto* aida = entry.second;
236 this->error() <<
"IProfile1D points to NULL" <<
endmsg;
244 if ( !profile2DMapID().empty() ) {
245 msg <<
"2D profile histograms in directory " 246 <<
"\"" << histoPath() <<
"\" : " << profile2DMapID().size();
247 for (
const auto& entry : ordered( profile2DMapID() ) ) {
248 const auto* aida = entry.second;
250 this->error() <<
"IProfile2D points to NULL" <<
endmsg;
258 return this->totalNumberOfHistos();
263 template <
class PBASE>
265 return ( histo1DMapTitle().empty() && histo2DMapTitle().empty() && histo3DMapTitle().empty() &&
266 profile1DMapTitle().empty() && profile2DMapTitle().empty() && histo1DMapID().empty() &&
267 histo2DMapID().empty() && histo3DMapID().empty() && profile1DMapID().empty() && profile2DMapID().empty() );
272 template <
class PBASE>
274 if ( hist && m_declareMoniHists ) {
276 this->debug() <<
"Monitoring histogram '" << ID.
idAsString() <<
"' desc = '" 285 template <
class PBASE>
287 return lookup_( histo1DMapID(), ID );
292 template <
class PBASE>
294 return lookup_( histo2DMapID(), ID );
299 template <
class PBASE>
301 return lookup_( histo3DMapID(), ID );
306 template <
class PBASE>
308 return lookup_( profile1DMapID(), ID );
313 template <
class PBASE>
315 return lookup_( profile2DMapID(), ID );
320 template <
class PBASE>
322 return histo1DMapID().size() + histo2DMapID().size() + histo3DMapID().size() + profile1DMapID().size() +
323 profile2DMapID().size();
328 template <
class PBASE>
330 if ( useNumericAutoIDs() || title.
empty() ) {
331 if ( !useNumericAutoIDs() ) {
333 "Cannot generate automatic literal ID from an empty title ! Using numeric ID instead for histogram ID",
338 ID =
HistoID( totalNumberOfHistos() + 1 + histoOffSet() );
343 ID =
HistoID( this->convertTitleToID( title ) );
351 template <
class PBASE>
354 for (
const auto& i : m_idReplaceInfo ) { stringSearchReplace( title, i.first, i.second ); }
359 template <
class PBASE>
362 return splitHistoDir() ? dirHbookName( path ) :
path;
383 #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 histogram according to the specified format.
constexpr static const auto SUCCESS
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)
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...
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