00001
00002
00003
00004
00005
00006 template <class PBASE>
00007 AIDA::IHistogram2D* GaudiHistos<PBASE>::book2D
00008 ( const std::string& title ,
00009 const double lowX ,
00010 const double highX ,
00011 const unsigned long binsX ,
00012 const double lowY ,
00013 const double highY ,
00014 const unsigned long binsY ) const
00015 {
00016
00017 AIDA::IHistogram2D* hist = histo2D ( title ) ;
00018
00019 if( NULL != hist ) { return hist ; }
00020
00021
00022 HistoID ID;
00023 newHistoID( title, ID );
00024
00025
00026 return this -> book2D ( ID, title, lowX, highX, binsX, lowY, highY, binsY );
00027 }
00028
00029
00030
00031 template <class PBASE>
00032 AIDA::IHistogram2D* GaudiHistos<PBASE>::book2D
00033 ( const HistoID& ID ,
00034 const std::string& title ,
00035 const double lowX ,
00036 const double highX ,
00037 const unsigned long binsX ,
00038 const double lowY ,
00039 const double highY ,
00040 const unsigned long binsY ) const
00041 {
00042
00043 if (ID.undefined())
00044 {
00045 this->Error("Undefined Histogram ID : Title='"+title+"'");
00046 return NULL;
00047 }
00048
00049
00050 AIDA::IHistogram2D* hist = histo2D( ID ) ;
00051
00052 if( NULL != hist ) { return hist ; }
00053
00054
00055 const std::string & htitle =
00056 ( title.empty() ? "Unnamed 2D Histogram ID="+ID.idAsString() : title ) ;
00057
00058
00059 if ( ID.numeric() )
00060 {
00061 hist = this->histoSvc() -> book ( histoPath() ,
00062 ID.numericID() ,
00063 htitle ,
00064 binsX ,
00065 lowX ,
00066 highX ,
00067 binsY ,
00068 lowY ,
00069 highY ) ;
00070 }
00071 else if ( ID.literal() )
00072 {
00073 hist = this->histoSvc() -> book ( histoPath()+"/"+
00074 ID.literalID() ,
00075 htitle ,
00076 binsX ,
00077 lowX ,
00078 highX ,
00079 binsY ,
00080 lowY ,
00081 highY ) ;
00082 }
00083
00084
00085 if( NULL == hist )
00086 { this->Error( "IHistogram2D* points to NULL! ID='" + ID.idAsString() +
00087 "' title='"+htitle+"'" ) ; return NULL; }
00088
00089
00090 m_histo2DMapID [ ID ] = hist ;
00091 m_histo2DMapTitle [ title ] = hist ;
00092
00093
00094 monitorHisto( Gaudi::Utils::Histos::toBase ( hist) , ID );
00095
00096
00097 if ( this->msgLevel(MSG::DEBUG) )
00098 { this->debug() << "Booked 2D Histogram : ID='"
00099 << ID << "' Path=" << histoPath()
00100 << " Title='"
00101 << Gaudi::Utils::Histos::htitle ( hist )
00102 << "'" << endmsg; }
00103
00104 return hist ;
00105 }
00106
00107
00108
00109 template <class PBASE>
00110 AIDA::IHistogram2D* GaudiHistos<PBASE>::fill
00111 ( AIDA::IHistogram2D* histo ,
00112 const double valueX ,
00113 const double valueY ,
00114 const double weight ,
00115 const std::string& title ) const
00116 {
00117 if ( NULL != histo && produceHistos() )
00118 {
00119 if ( !checkForNaN() )
00120 { Gaudi::Utils::Histos::fill ( histo , valueX , valueY , weight ) ; }
00121 else if ( lfin ( valueX ) && lfin ( valueY ) && lfin ( weight ) )
00122 { Gaudi::Utils::Histos::fill ( histo , valueX , valueY , weight ) ; }
00123 else if ( lnan ( valueX ) || lnan ( valueY ) || lnan ( weight ) )
00124 {
00125 this -> Warning
00126 ("fill():: 'NaN' value is skipped from the histogram '"
00127 + Gaudi::Utils::Histos::htitle ( histo , title ) + "'" ) ;
00128 }
00129 else
00130 {
00131 this -> Warning
00132 ("fill():: 'Infinite' value is skipped from the histogram '"
00133 + Gaudi::Utils::Histos::htitle ( histo , title ) + "'" ) ;
00134 }
00135 }
00136
00137 return histo ;
00138 }
00139
00140
00141
00142 template <class PBASE>
00143 AIDA::IHistogram2D* GaudiHistos<PBASE>::plot2D
00144 ( const double valueX ,
00145 const double valueY ,
00146 const std::string& title ,
00147 const double lowX ,
00148 const double highX ,
00149 const double lowY ,
00150 const double highY ,
00151 const unsigned long binsX ,
00152 const unsigned long binsY ,
00153 const double weight ) const
00154 {
00155 AIDA::IHistogram2D * h(NULL);
00156 if ( produceHistos() )
00157 {
00158
00159 h = histo2D ( title ) ;
00160 if ( NULL == h )
00161 { h = book2D ( title , lowX , highX , binsX , lowY , highY , binsY ) ; }
00162
00163 h = fill ( h , valueX , valueY , weight , title ) ;
00164 }
00165 return h;
00166 }
00167
00168
00169
00170 template <class PBASE>
00171 AIDA::IHistogram2D* GaudiHistos<PBASE>::plot2D
00172 ( const double valueX ,
00173 const double valueY ,
00174 const HistoID& ID ,
00175 const std::string& title ,
00176 const double lowX ,
00177 const double highX ,
00178 const double lowY ,
00179 const double highY ,
00180 const unsigned long binsX ,
00181 const unsigned long binsY ,
00182 const double weight ) const
00183 {
00184 AIDA::IHistogram2D * h(NULL);
00185
00186 if ( produceHistos() )
00187 {
00188
00189 h = histo2D ( ID ) ;
00190 if ( NULL == h ) { h = book2D ( ID , title ,
00191 lowX , highX , binsX ,
00192 lowY , highY , binsY ) ; }
00193
00194 h = fill ( h , valueX , valueY , weight , title ) ;
00195 }
00196 return h;
00197 }