16 #ifndef ROO_MSG_SERVICE 
   17 #define ROO_MSG_SERVICE 
   31 #define coutI(a) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a)  
   32 #define coutP(a) RooMsgService::instance().log(this,RooFit::PROGRESS,RooFit::a)  
   33 #define coutW(a) RooMsgService::instance().log(this,RooFit::WARNING,RooFit::a)  
   34 #define coutE(a) RooMsgService::instance().log(this,RooFit::ERROR,RooFit::a)  
   35 #define coutF(a) RooMsgService::instance().log(this,RooFit::FATAL,RooFit::a)  
   38 #define ccoutD(a) RooMsgService::instance().log(this,RooFit::DEBUG,RooFit::a,kTRUE)  
   39 #define ccoutI(a) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a,kTRUE)  
   40 #define ccoutP(a) RooMsgService::instance().log(this,RooFit::PROGRESS,RooFit::a,kTRUE)  
   41 #define ccoutW(a) RooMsgService::instance().log(this,RooFit::WARNING,RooFit::a,kTRUE)  
   42 #define ccoutE(a) RooMsgService::instance().log(this,RooFit::ERROR,RooFit::a,kTRUE)  
   43 #define ccoutF(a) RooMsgService::instance().log(this,RooFit::FATAL,RooFit::a,kTRUE)  
   46 #define oocoutI(o,a) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a)  
   47 #define oocoutP(o,a) RooMsgService::instance().log(o,RooFit::PROGRESS,RooFit::a)  
   48 #define oocoutW(o,a) RooMsgService::instance().log(o,RooFit::WARNING,RooFit::a)  
   49 #define oocoutE(o,a) RooMsgService::instance().log(o,RooFit::ERROR,RooFit::a)  
   50 #define oocoutF(o,a) RooMsgService::instance().log(o,RooFit::FATAL,RooFit::a)  
   53 #define ooccoutD(o,a) RooMsgService::instance().log(o,RooFit::DEBUG,RooFit::a,kTRUE)  
   54 #define ooccoutI(o,a) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a,kTRUE)  
   55 #define ooccoutP(o,a) RooMsgService::instance().log(o,RooFit::PROGRESS,RooFit::a,kTRUE)  
   56 #define ooccoutW(o,a) RooMsgService::instance().log(o,RooFit::WARNING,RooFit::a,kTRUE)  
   57 #define ooccoutE(o,a) RooMsgService::instance().log(o,RooFit::ERROR,RooFit::a,kTRUE)  
   58 #define ooccoutF(o,a) RooMsgService::instance().log(o,RooFit::FATAL,RooFit::a,kTRUE)  
   61 #define ANYDEBUG (RooMsgService::_debugCount>0) 
   63 #define ANYDEBUG (RooMsgService::anyDebug()) 
   66 #define dologD(a) (ANYDEBUG && RooMsgService::instance().isActive(this,RooFit::a,RooFit::DEBUG)) 
   67 #define dologI(a) (RooMsgService::instance().isActive(this,RooFit::a,RooFit::INFO)) 
   68 #define dologP(a) (RooMsgService::instance().isActive(this,RooFit::a,RooFit::PROGRESS)) 
   69 #define dologW(a) (RooMsgService::instance().isActive(this,RooFit::a,RooFit::WARNING)) 
   70 #define dologE(a) (RooMsgService::instance().isActive(this,RooFit::a,RooFit::ERROR)) 
   71 #define dologF(a) (RooMsgService::instance().isActive(this,RooFit::a,RooFit::FATAL)) 
   73 #define oodologD(o,a) (ANYDEBUG && RooMsgService::instance().isActive(o,RooFit::a,RooFit::DEBUG)) 
   74 #define oodologI(o,a) (RooMsgService::instance().isActive(o,RooFit::a,RooFit::INFO)) 
   75 #define oodologP(o,a) (RooMsgService::instance().isActive(o,RooFit::a,RooFit::PROGRESS)) 
   76 #define oodologW(o,a) (RooMsgService::instance().isActive(o,RooFit::a,RooFit::WARNING)) 
   77 #define oodologE(o,a) (RooMsgService::instance().isActive(o,RooFit::a,RooFit::ERROR)) 
   78 #define oodologF(o,a) (RooMsgService::instance().isActive(o,RooFit::a,RooFit::FATAL)) 
   82 #define cxcoutD(a) if (ANYDEBUG && RooMsgService::instance().isActive(this,RooFit::a,RooFit::DEBUG)) RooMsgService::instance().log(this,RooFit::DEBUG,RooFit::a)  
   83 #define ccxcoutD(a) if (ANYDEBUG && RooMsgService::instance().isActive(this,RooFit::a,RooFit::DEBUG)) RooMsgService::instance().log(this,RooFit::DEBUG,RooFit::a,kTRUE)  
   84 #define oocxcoutD(o,a) if (ANYDEBUG && RooMsgService::instance().isActive(o,RooFit::a,RooFit::DEBUG)) RooMsgService::instance().log(o,RooFit::DEBUG,RooFit::a)  
   85 #define ooccxcoutD(o,a) if (ANYDEBUG && RooMsgService::instance().isActive(o,RooFit::a,RooFit::DEBUG)) RooMsgService::instance().log(o,RooFit::DEBUG,RooFit::a,kTRUE)  
   86 #define cxcoutI(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::INFO)) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a)  
   87 #define ccxcoutI(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::INFO)) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a,kTRUE)  
   88 #define oocxcoutI(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::INFO)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a)  
   89 #define ooccxcoutI(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::INFO)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a,kTRUE)  
   90 #define cxcoutP(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a)  
   91 #define ccxcoutP(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a,kTRUE)  
   92 #define oocxcoutP(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a)  
   93 #define ooccxcoutP(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a,kTRUE)  
   94 #define cxcoutW(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(this,RooFit::WARNING,RooFit::a)  
   95 #define ccxcoutW(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(this,RooFit::WARNING,RooFit::a,kTRUE)  
   96 #define oocxcoutW(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(o,RooFit::WARNING,RooFit::a)  
   97 #define ooccxcoutW(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(o,RooFit::WARNING,RooFit::a,kTRUE)  
   98 #define cxcoutE(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(this,RooFit::ERROR,RooFit::a)  
   99 #define ccxcoutE(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(this,RooFit::ERROR,RooFit::a,kTRUE)  
  100 #define oocxcoutE(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(to,RooFit::ERROR,RooFit::a)  
  101 #define ooccxcoutE(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(o,RooFit::ERROR,RooFit::a,kTRUE)  
  102 #define cxcoutF(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::FATAL)) RooMsgService::instance().log(this,RooFit::FATAL,RooFit::a)  
  103 #define ccxcoutF(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::FATAL)) RooMsgService::instance().log(this,RooFit::FATAL,RooFit::a,kTRUE)  
  104 #define oocxcoutF(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::FATAL)) RooMsgService::instance().log(o,RooFit::FATAL,RooFit::a)  
  105 #define ooccxcoutF(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::FATAL)) RooMsgService::instance().log(o,RooFit::FATAL,RooFit::a,kTRUE)  
  107 class RooMsgService : 
public TObject {
 
  110   virtual ~RooMsgService() ;
 
  112   struct StreamConfig {
 
  115     void addTopic(RooFit::MsgTopic newTopic) {
 
  119     void removeTopic(RooFit::MsgTopic oldTopic) {
 
  124     friend class RooMsgService ;
 
  126     Bool_t match(RooFit::MsgLevel level, RooFit::MsgTopic facility, 
const RooAbsArg* obj) ;
 
  127     Bool_t match(RooFit::MsgLevel level, RooFit::MsgTopic facility, 
const TObject* obj) ;
 
  132     RooFit::MsgLevel minLevel ;
 
  134     std::string objectName ;
 
  135     std::string className ;
 
  136     std::string baseClassName ;
 
  137     std::string tagName ;
 
  146   static RooMsgService& instance();
 
  147   static Bool_t anyDebug() ;
 
  150   Int_t addStream(RooFit::MsgLevel level, 
const RooCmdArg& arg1=RooCmdArg(), 
const RooCmdArg& arg2=RooCmdArg(), 
const RooCmdArg& arg3=RooCmdArg(),
 
  151                           const RooCmdArg& arg4=RooCmdArg(), 
const RooCmdArg& arg5=RooCmdArg(), 
const RooCmdArg& arg6=RooCmdArg()); 
 
  152   void deleteStream(Int_t 
id) ;
 
  153   StreamConfig& getStream(Int_t 
id) { 
return _streams[id] ; }
 
  155   Int_t numStreams()
 const { 
return _streams.size() ; }
 
  156   void setStreamStatus(Int_t 
id, Bool_t active) ;
 
  157   Bool_t getStreamStatus(Int_t 
id) 
const ;
 
  161   void setGlobalKillBelow(RooFit::MsgLevel level) { _globMinLevel = level ; }
 
  162   RooFit::MsgLevel globalKillBelow()
 const { 
return _globMinLevel ; }
 
  164   void Print(Option_t *options= 0) 
const ;
 
  165   void showPid(Bool_t flag) { _showPid = flag ; }
 
  168   std::ostream& log(
const RooAbsArg* 
self, RooFit::MsgLevel level, RooFit::MsgTopic facility, Bool_t forceSkipPrefix=kFALSE) ;
 
  169   std::ostream& log(
const TObject* 
self, RooFit::MsgLevel level, RooFit::MsgTopic facility, Bool_t forceSkipPrefix=kFALSE) ;
 
  170   Bool_t isActive(
const RooAbsArg* 
self, RooFit::MsgTopic facility, RooFit::MsgLevel level) ;
 
  171   Bool_t isActive(
const TObject* 
self, RooFit::MsgTopic facility, RooFit::MsgLevel level) ;
 
  173   static Int_t _debugCount ;
 
  174   std::map<int,std::string> _levelNames ;
 
  175   std::map<int,std::string> _topicNames ;
 
  178   Bool_t silentMode()
 const { 
return _silentMode ; }  
 
  179   void setSilentMode(Bool_t flag) { _silentMode = flag ; }
 
  181   Int_t errorCount()
 const { 
return _errorCount ; }
 
  182   void clearErrorCount() { _errorCount = 0 ; }
 
  185   void restoreState() ;
 
  187   RooWorkspace* debugWorkspace() ;
 
  189   Int_t& debugCode() { 
return _debugCode ; }
 
  193   Int_t activeStream(
const RooAbsArg* 
self, RooFit::MsgTopic facility, RooFit::MsgLevel level) ;
 
  194   Int_t activeStream(
const TObject* 
self, RooFit::MsgTopic facility, RooFit::MsgLevel level) ;
 
  196   std::vector<StreamConfig> _streams ;
 
  197   std::stack<std::vector<StreamConfig> > _streamsSaved ;
 
  198   std::ostream* _devnull ;
 
  200   std::map<std::string,std::ostream*> _files ;
 
  201   RooFit::MsgLevel _globMinLevel ;
 
  202   RooFit::MsgLevel _lastMsgLevel ;
 
  211   RooMsgService(
const RooMsgService&) ;
 
  213   RooWorkspace* _debugWorkspace ;
 
  217   ClassDef(RooMsgService,0)