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