GaudiHistos_2DProfFixedBinning.icpp
Go to the documentation of this file.
1 // ============================================================================
2 // book the 2D profile histogram (book on demand)
3 // ============================================================================
4 template <class PBASE>
5 AIDA::IProfile2D* GaudiHistos<PBASE>::bookProfile2D
6 ( const std::string& title ,
7  const double lowX ,
8  const double highX ,
9  const unsigned long binsX ,
10  const double lowY ,
11  const double highY ,
12  const unsigned long binsY ) const
13 {
14  //
15  if ( !produceHistos() ) { return 0 ; } // RETURN
16  //
17  // exist?
18  auto hist = profile2D ( title ) ;
19  // histogram is already booked
20  if( 0 != hist ) { return hist ; } // RETURN !!
21 
22  // propose the histogram ID
23  HistoID ID;
24  newHistoID( title, ID );
25 
26  // book histogram and return
27  return this -> bookProfile2D ( ID, title, lowX, highX, binsX, lowY, highY, binsY );
28 }
29 // ============================================================================
30 // book the 2D profile histogram with forced ID (book on demand)
31 // ============================================================================
32 template <class PBASE>
33 AIDA::IProfile2D* GaudiHistos<PBASE>::bookProfile2D
34 ( const HistoID& ID ,
35  const std::string& title ,
36  const double lowX ,
37  const double highX ,
38  const unsigned long binsX ,
39  const double lowY ,
40  const double highY ,
41  const unsigned long binsY ) const
42 {
43  //
44  if ( !produceHistos() ) { return 0 ; } // RETURN
45  //
46  // Check ID
47  if (ID.undefined())
48  {
49  this->Error("Undefined Histogram ID : Title='"+title+"'");
50  return nullptr;
51  }
52  // exist?
53  auto hist = profile2D ( ID ) ;
54  // histogram is already booked
55  if( 0 != hist ) { return hist ; } // RETURN !!
56 
57  // Histogram title
58  const std::string & htitle =
59  ( title.empty() ?
60  "Unnamed 2D Profile Histogram ID="+ID.idAsString() : title ) ;
61 
62  // book the histogram
63  if ( ID.numeric() )
64  {
65  hist = this->histoSvc() -> bookProf ( histoPath() ,
66  ID.numericID() ,
67  htitle ,
68  binsX ,
69  lowX ,
70  highX ,
71  binsY ,
72  lowY ,
73  highY ) ;
74  }
75  else if ( ID.literal() )
76  {
77  hist = this->histoSvc() -> bookProf ( histoPath()+"/"+
78  ID.literalID() ,
79  htitle ,
80  binsX ,
81  lowX ,
82  highX ,
83  binsY ,
84  lowY ,
85  highY ) ;
86  }
87 
88  // test OK
89  if( 0 == hist )
90  { this->Error( "IProfile2D* points to NULL! ID='" + ID.idAsString() +
91  "' title='"+htitle+"'" ) ; return 0; } // RETURN !!
92 
93  // add histogram into histogram storages
94  m_profile2DMapID [ ID ] = hist ;
95  m_profile2DMapTitle [ title ] = hist ;
96 
97  // Declare to monitoring service
98  monitorHisto( Gaudi::Utils::Histos::toBase ( hist ) , ID );
99 
100  // printout and return
101  if ( this->msgLevel(MSG::DEBUG) )
102  { this->debug() << "Booked 2D Profile Histogram : ID='" << ID
103  << "' Path=" << histoPath()
104  << " Title='"
105  << Gaudi::Utils::Histos::htitle ( hist )
106  << "'" << endmsg; }
107  return hist ;
108 }
109 // ============================================================================
110 // fill the 2D profile histogram with the value and weight
111 // ============================================================================
112 template <class PBASE>
113 AIDA::IProfile2D* GaudiHistos<PBASE>::fill
114 ( AIDA::IProfile2D* histo ,
115  const double valueX ,
116  const double valueY ,
117  const double valueZ ,
118  const double weight ,
119  const std::string& title ) const
120 {
121  if ( 0 == histo ) { return 0 ; } // RETURN
122  //
123  if ( !checkForNaN() )
124  { Gaudi::Utils::Histos::fill ( histo , valueX , valueY , valueZ , weight ); }
125  else if ( std::isfinite ( valueX ) && std::isfinite ( valueY ) &&
126  std::isfinite ( valueZ ) && std::isfinite ( weight ) )
127  { Gaudi::Utils::Histos::fill ( histo , valueX , valueY , valueZ , weight ); }
128  else if ( std::isnan ( valueX ) || std::isnan ( valueY ) ||
129  std::isnan ( valueZ ) || std::isnan ( weight ) )
130  {
131  this -> Warning
132  ("fill():: 'NaN' value is skipped from the histogram '"
133  + Gaudi::Utils::Histos::htitle ( histo , title ) + "'" ) ;
134  }
135  else
136  {
137  this -> Warning
138  ("fill():: 'Infinite' value is skipped from the histogram '"
139  + Gaudi::Utils::Histos::htitle ( histo , title ) + "'" ) ;
140  }
141  // return
142  return histo ;
143 }
144 // ============================================================================
145 // fill the 2D profile histogram (book on demand)
146 // ============================================================================
147 template <class PBASE>
148 AIDA::IProfile2D* GaudiHistos<PBASE>::profile2D
149 ( const double valueX ,
150  const double valueY ,
151  const double valueZ ,
152  const std::string& title ,
153  const double lowX ,
154  const double highX ,
155  const double lowY ,
156  const double highY ,
157  const unsigned long binsX ,
158  const unsigned long binsY ,
159  const double weight ) const
160 {
161  AIDA::IProfile2D * h = nullptr;
162  if ( produceHistos() )
163  {
164  // retrieve or book the histogram
165  h = profile2D ( title ) ;
166  if ( 0 == h ) { h = bookProfile2D ( title ,
167  lowX , highX , binsX ,
168  lowY , highY , binsY ) ; }
169  // fill the histogram
170  h = fill ( h , valueX , valueY , valueZ , weight , title ) ;
171  }
172  return h;
173 }
174 // ============================================================================
175 // fill the 2D profile histogram with forced ID assignment (book on demand)
176 // ============================================================================
177 template <class PBASE>
178 AIDA::IProfile2D* GaudiHistos<PBASE>::profile2D
179 ( const double valueX ,
180  const double valueY ,
181  const double valueZ ,
182  const HistoID& ID ,
183  const std::string& title ,
184  const double lowX ,
185  const double highX ,
186  const double lowY ,
187  const double highY ,
188  const unsigned long binsX ,
189  const unsigned long binsY ,
190  const double weight ) const
191 {
192  AIDA::IProfile2D * h = nullptr;
193  if ( produceHistos() )
194  {
195  // retrieve or book the histogram
196  h = profile2D ( ID ) ;
197  if ( 0 == h ) { h = bookProfile2D ( ID , title ,
198  lowX , highX , binsX ,
199  lowY , highY , binsY ) ; }
200  // fill the histogram
201  h = fill ( h , valueX , valueY , valueZ , weight , title ) ;
202  }
203  return h;
204 }
205 // ============================================================================
206 // The END
207 // ============================================================================
GAUDI_API std::string htitle(const AIDA::IBaseHistogram *histo, const std::string &title="")
get the title
Definition: Fill.cpp:138
T empty(T...args)
AIDA::IProfile2D * bookProfile2D(const std::string &title, const double lowX=0, const double highX=100, const unsigned long binsX=50, const double lowY=0, const double highY=100, const unsigned long binsY=50) const
book the 2D profile histogram
GAUDI_API void fill(AIDA::IHistogram1D *histo, const double value, const double weight=1.0)
simple function to fill AIDA::IHistogram1D objects
Definition: Fill.cpp:36
STL class.
NumericID numericID() const
Returns the numerical ID.
Definition: GaudiHistoID.h:72
const LiteralID & literalID() const
Returns the ID as a LiteralID.
Definition: GaudiHistoID.h:70
T isfinite(T...args)
bool undefined() const
Is this ID undefined.
Definition: GaudiHistoID.h:68
def bookProf(args, kwargs)
The trivial function to book 1D&2D profile histograms:
Definition: HistoUtils.py:232
GAUDI_API LiteralID idAsString() const
Return ID as string, for both numeric and literal IDs.
T isnan(T...args)
bool literal() const
Is this ID numeric.
Definition: GaudiHistoID.h:66
GAUDI_API AIDA::IBaseHistogram * toBase(AIDA::IHistogram1D *histo)
Definition: Fill.cpp:193
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)
ID class for Histogram and Ntuples.
Definition: GaudiHistoID.h:44
bool numeric() const
Is this ID numeric.
Definition: GaudiHistoID.h:64
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
AIDA::IHistogram1D * fill(AIDA::IHistogram1D *histo, const double value, const double weight, const std::string &title="") const
fill the 1D histogram with the value and weight