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