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)