Skip to content
Snippets Groups Projects
Commit 630e1b0b authored by Stephan Hageboeck's avatar Stephan Hageboeck
Browse files

[RF] Extend RooHelpers::LocalChangeMsgLevel.

- LocalChangeMsgLevel so far could only add message topics to stream 0.
Now, one can locally add and remove message topics, and also change the
message level on all streams.
- Fix typos in RooMsgService shortcuts.
parent 21921b0a
No related branches found
No related tags found
No related merge requests found
......@@ -25,32 +25,25 @@
namespace RooHelpers {
/// Switches the message service to verbose while the instance alive.
/// Switches the message service to verbose while the instance is alive.
class LocalChangeMsgLevel {
public:
/// Change message level (and topics) while this object is alive, reset when it goes out of scope.
/// \param[in] lvl The desired message level. Defaults to verbose.
/// \param[in] extraTopics Extra topics to be switched on.
/// \param[in] extraTopics Extra topics to be switched on. These will only switched on in the last stream to prevent all streams are printing.
/// \param[in] removeTopics Message topics to be switched off
/// \param[in] overrideExternalLevel Override the user message level.
LocalChangeMsgLevel(RooFit::MsgLevel lvl = RooFit::DEBUG,
RooFit::MsgTopic extraTopics = static_cast<RooFit::MsgTopic>(0u)) {
auto& msg = RooMsgService::instance();
fOldKillBelow = msg.globalKillBelow();
msg.setGlobalKillBelow(lvl);
fOldConf = msg.getStream(0);
msg.getStream(0).minLevel = lvl;
msg.getStream(0).addTopic(extraTopics);
msg.setStreamStatus(0, true);
}
unsigned int extraTopics = 0u,
unsigned int removeTopics = 0u,
bool overrideExternalLevel = true);
~LocalChangeMsgLevel() {
auto& msg = RooMsgService::instance();
msg.setGlobalKillBelow(fOldKillBelow);
msg.getStream(0) = fOldConf;
}
~LocalChangeMsgLevel();
private:
RooFit::MsgLevel fOldKillBelow;
RooMsgService::StreamConfig fOldConf;
std::vector<RooMsgService::StreamConfig> fOldConf;
int fExtraStream{-1};
};
......
......@@ -86,17 +86,17 @@ class RooWorkspace ;
#define ccxcoutI(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::INFO)) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a,kTRUE)
#define oocxcoutI(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::INFO)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a)
#define ooccxcoutI(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::INFO)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a,kTRUE)
#define cxcoutP(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a)
#define ccxcoutP(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(this,RooFit::INFO,RooFit::a,kTRUE)
#define oocxcoutP(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a)
#define ooccxcoutP(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(o,RooFit::INFO,RooFit::a,kTRUE)
#define cxcoutP(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(this,RooFit::PROGRESS,RooFit::a)
#define ccxcoutP(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(this,RooFit::PROGRESS,RooFit::a,kTRUE)
#define oocxcoutP(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(o,RooFit::PROGRESS,RooFit::a)
#define ooccxcoutP(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::PROGRESS)) RooMsgService::instance().log(o,RooFit::PROGRESS,RooFit::a,kTRUE)
#define cxcoutW(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(this,RooFit::WARNING,RooFit::a)
#define ccxcoutW(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(this,RooFit::WARNING,RooFit::a,kTRUE)
#define oocxcoutW(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(o,RooFit::WARNING,RooFit::a)
#define ooccxcoutW(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::WARNING)) RooMsgService::instance().log(o,RooFit::WARNING,RooFit::a,kTRUE)
#define cxcoutE(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(this,RooFit::ERROR,RooFit::a)
#define ccxcoutE(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(this,RooFit::ERROR,RooFit::a,kTRUE)
#define oocxcoutE(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(to,RooFit::ERROR,RooFit::a)
#define oocxcoutE(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(o,RooFit::ERROR,RooFit::a)
#define ooccxcoutE(o,a) if (RooMsgService::instance().isActive(o,RooFit::a,RooFit::ERROR)) RooMsgService::instance().log(o,RooFit::ERROR,RooFit::a,kTRUE)
#define cxcoutF(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::FATAL)) RooMsgService::instance().log(this,RooFit::FATAL,RooFit::a)
#define ccxcoutF(a) if (RooMsgService::instance().isActive(this,RooFit::a,RooFit::FATAL)) RooMsgService::instance().log(this,RooFit::FATAL,RooFit::a,kTRUE)
......
......@@ -19,6 +19,38 @@
namespace RooHelpers {
LocalChangeMsgLevel::LocalChangeMsgLevel(RooFit::MsgLevel lvl,
unsigned int extraTopics, unsigned int removeTopics, bool overrideExternalLevel) {
auto& msg = RooMsgService::instance();
fOldKillBelow = msg.globalKillBelow();
if (overrideExternalLevel) msg.setGlobalKillBelow(lvl);
for (int i = 0; i < msg.numStreams(); ++i) {
fOldConf.push_back(msg.getStream(i));
if (overrideExternalLevel) msg.getStream(i).minLevel = lvl;
msg.getStream(i).removeTopic(static_cast<RooFit::MsgTopic>(removeTopics));
msg.setStreamStatus(i, true);
}
if (extraTopics != 0) {
fExtraStream = msg.addStream(lvl);
msg.getStream(fExtraStream).addTopic(static_cast<RooFit::MsgTopic>(extraTopics));
}
}
LocalChangeMsgLevel::~LocalChangeMsgLevel() {
auto& msg = RooMsgService::instance();
msg.setGlobalKillBelow(fOldKillBelow);
for (int i=0; i < msg.numStreams(); ++i) {
if (i < static_cast<int>(fOldConf.size()))
msg.getStream(i) = fOldConf[i];
}
if (fExtraStream > 0)
msg.deleteStream(fExtraStream);
}
/// Tokenise the string by splitting at the characters in delims.
/// Consecutive delimiters are collapsed, so that no delimiters will appear in the
/// tokenised strings, and no emtpy strings are returned.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment