67using std::ofstream, std::ostream, std::string, std::vector, std::map;
81 _devnull = std::make_unique<ofstream>(
"/dev/null") ;
190 pc.
defineInt(
"topic",
"Topic",0,0xFFFFF) ;
208 const char* className = pc.
getString(
"className") ;
209 const char* baseClassName = pc.
getString(
"baseClassName") ;
210 const char* tagName = pc.
getString(
"tagName") ;
212 bool prefix = pc.
getInt(
"prefix") ;
215 ostream* os =
nullptr;
230 newStream.className = (className ? className :
"" ) ;
231 newStream.baseClassName = (baseClassName ? baseClassName :
"" ) ;
232 newStream.tagName = (tagName ? tagName :
"" ) ;
248 }
else if (!
string(
outFile).empty()) {
259 std::cout <<
"RooMsgService::addReportingStream ERROR: cannot open output log file " <<
outFile <<
" reverting stream to stdout" << std::endl ;
268 _files[
"outFile"] = std::unique_ptr<std::ostream>{
os2};
294 vector<StreamConfig>::iterator iter =
_streams.begin() ;
298 if (iter->minLevel==
DEBUG) {
313 std::cout <<
"RooMsgService::setStreamStatus() ERROR: invalid stream ID " <<
id << std::endl ;
333 std::cout <<
"RooMsgService::getStreamStatus() ERROR: invalid stream ID " <<
id << std::endl ;
383 if (!obj)
return false;
398 if (!active)
return false ;
399 if (level<minLevel)
return false ;
400 if (!(topic&top))
return false ;
402 if (universal)
return true ;
404 if (!obj)
return false;
405 if (!objectName.empty() && objectName != obj->
GetName())
return false ;
406 if (!className.empty() && className != obj->
ClassName())
return false ;
407 if (!baseClassName.empty() && !obj->
IsA()->InheritsFrom(baseClassName.c_str()))
return false ;
488 if (
TString(options).Contains(
"V") ||
TString(options).Contains(
"v")) {
492 std::cout << (
activeOnly?
"Active Message streams":
"All Message streams") << std::endl ;
502 std::cout <<
"[" << i <<
"] MinLevel = " <<
is->second ;
504 std::cout <<
" Topic = " ;
506 map<int,string>::const_iterator iter =
_topicNames.begin() ;
508 if (iter->first &
_streams[i].topic) {
509 std::cout << iter->second <<
" " ;
514 std::cout <<
" Any " ;
518 if (!
_streams[i].objectName.empty()) {
519 std::cout <<
" ObjectName = " <<
_streams[i].objectName ;
521 if (!
_streams[i].className.empty()) {
522 std::cout <<
" ClassName = " <<
_streams[i].className ;
524 if (!
_streams[i].baseClassName.empty()) {
525 std::cout <<
" BaseClassName = " <<
_streams[i].baseClassName ;
528 std::cout <<
" TagLabel = " <<
_streams[i].tagName ;
533 std::cout <<
" (NOT ACTIVE)" ;
536 std::cout << std::endl ;
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
R__EXTERN TSystem * gSystem
Common abstract base class for objects that represent a value and a "shape" in RooFit.
bool getAttribute(const Text_t *name) const
Check if a named attribute is set. By default, all attributes are unset.
Named container for two doubles, two integers two object points and three string pointers that can be...
Configurable parser for RooCmdArg named arguments.
void defineMutex(const char *head, Args_t &&... tail)
Define arguments where any pair is mutually exclusive.
bool process(const RooCmdArg &arg)
Process given RooCmdArg.
bool ok(bool verbose) const
Return true of parsing was successful.
bool defineObject(const char *name, const char *argName, int setNum, const TObject *obj=nullptr, bool isArray=false)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
const char * getString(const char *name, const char *defaultValue="", bool convEmptyToNull=false) const
Return string property registered with name 'name'.
bool defineString(const char *name, const char *argName, int stringNum, const char *defValue="", bool appendMode=false)
Define double property name 'name' mapped to double in slot 'stringNum' in RooCmdArg with name argNam...
bool defineInt(const char *name, const char *argName, int intNum, int defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
int getInt(const char *name, int defaultValue=0) const
Return integer property registered with name 'name'.
TObject * getObject(const char *name, TObject *obj=nullptr) const
Return TObject property registered with name 'name'.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
Singleton class that organizes messages generated in RooFit.
std::vector< StreamConfig > _streams
void restoreState()
Restore last saved state of message service.
std::ostream & log(const RooAbsArg *self, RooFit::MsgLevel level, RooFit::MsgTopic facility, bool forceSkipPrefix=false)
Log error message associated with RooAbsArg object self at given level and topic.
Int_t activeStream(T self, RooFit::MsgTopic topic, RooFit::MsgLevel level)
Find appropriate logging stream for message from given object with given topic and message level.
static RooMsgService & instance()
Return reference to singleton instance.
std::unique_ptr< RooWorkspace > _debugWorkspace
static bool anyDebug()
Returns true if any debug level stream is active.
RooFit::MsgLevel _globMinLevel
std::stack< std::vector< StreamConfig > > _streamsSaved
RooMsgService()
Constructor.
RooWorkspace * debugWorkspace()
void Print(Option_t *options=nullptr) const override
Print configuration of message service.
void setStreamStatus(Int_t id, bool active)
(De)Activate stream with given unique ID
void saveState()
Save current state of message service.
std::map< int, std::string > _topicNames
~RooMsgService() override
Int_t addStream(RooFit::MsgLevel level, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={})
Add a message logging stream for message with given RooFit::MsgLevel or higher.
std::map< std::string, std::unique_ptr< std::ostream > > _files
bool getStreamStatus(Int_t id) const
Get activation status of stream with given unique ID.
void deleteStream(Int_t id)
Delete stream with given unique ID code.
std::unique_ptr< std::ofstream > _devnull
std::map< int, std::string > _levelNames
RooFit::MsgLevel _lastMsgLevel
Persistable container for RooFit projects.
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
const char * GetName() const override
Returns name of object.
TClass * IsA() const override
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual TClass * IsA() const
virtual int GetPid()
Get process id.
RooCmdArg Topic(Int_t topic)
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
MsgLevel
Verbosity level for RooMsgService::StreamConfig in RooMsgService.
MsgTopic
Topics for a RooMsgService::StreamConfig in RooMsgService.
Wrap an object into a TObject. Sometimes needed to avoid reinterpret_cast or enable RTTI.
RooFit::MsgLevel minLevel
bool match(RooFit::MsgLevel level, RooFit::MsgTopic facility, const RooAbsArg *obj)
Determine if message from given object at given level on given topic is logged.
std::string baseClassName