64 #pragma warning ( disable : 4355 ) 71 :
TNamed(
"Configurable",
"Configurable"),
72 fOptions ( theOption ),
73 fLooseOptionCheckingEnabled (
kTRUE ),
74 fLastDeclaredOption ( 0 ),
75 fConfigDescription (
"No description" ),
76 fReferenceFile (
"None" ),
100 while (splitOpt.
Length()>0) {
108 splitOpt = splitOpt(splitOpt.
First(
':')+1,splitOpt.
Length());
144 std::map<TString, std::vector<std::pair<Int_t, TString> > > arrayTypeOptions;
173 if (decOpt==0 && optname.
Contains(
'[')) {
178 std::stringstream str(st.
Data());
188 <<
" was previously set to " << decOpt->
GetValue() <<
Endl;
199 Log() <<
kFATAL <<
"Index " << idx <<
" too large for option " << decOpt->
TheName()
206 <<
" is not an array, but you specified an index" <<
Endl;
212 <<
" does not have predefined value: \"" << optval <<
"\"" <<
Endl;
229 if (predOptName == optname) optionExists =
kTRUE;
231 if (predOptName == optname)
break;
236 decOpt->
SetValue( hasNotSign ?
"0" :
"1" );
240 if (optionExists && hasNotSign) {
241 Log() <<
kFATAL <<
"Negating a non-boolean variable " << optname
242 <<
", please check the opions for method: " <<
GetName() <<
Endl;
253 if (decOpt->HasPreDefinedVal() && decOpt->IsPreDefinedVal(s) ) {
254 paramParsed = decOpt->SetValue(s);
261 if (paramParsed || preserveTilde)
fOptions +=
'~';
262 if (preserveNotSign)
fOptions +=
'!';
289 if (unusedOptions !=
"") unusedOptions +=
':';
293 if (unusedOptions !=
"") {
295 <<
"The following options were specified, but could not be interpreted: \'" 296 << unusedOptions <<
"\', please check!" <<
Endl;
313 std::ostringstream oss;
326 std::ostringstream oss;
340 o << prefix <<
"# Set by User:" << std::endl;
342 if (opt->IsSet()) { o << prefix; opt->Print(o); o << std::endl; }
344 o << prefix <<
"# Default:" << std::endl;
346 if (!opt->IsSet()) { o << prefix; opt->Print(o); o << std::endl; }
347 o << prefix <<
"##" << std::endl;
360 if (opt->IsArrayOpt()) {
361 std::stringstream s(
"");
363 for(
Int_t i=0; i<opt->GetArraySize(); i++) {
365 s << std::scientific << opt->GetValue(i);
373 if (opt->IsArrayOpt()) {
376 gTools().
AddAttr(optnode,
"modified", (opt->IsSet()?
"Yes":
"No") );
391 std::stringstream s(
"");
393 if (
gTools().HasAttr(opt,
"size")) {
397 for(
UInt_t i=0; i<size; i++) {
399 s << std::scientific << optName <<
"[" << i <<
"]=" << values[i];
403 s << std::scientific << optName <<
"=" << optValue;
424 o <<
"# List of options:" << std::endl;
429 o << std::endl <<
"# ------------------------------------------------" << std::endl;
447 istr.getline(buf,512);
449 while (istr.good() && !istr.eof() && !(buf[0]==
'#' && buf[1]==
'#')) {
451 while (*p==
' ' || *p==
'\t') p++;
452 if (*p==
'#' || *p==
'\0') {
453 istr.getline(buf,512);
456 std::stringstream sstr(buf);
457 sstr >> stropt >> strval;
463 istr.getline(buf,512);
TString fOptionsReferenceFileDir
virtual const char * GetName() const
Returns name of object.
MsgLogger & Endl(MsgLogger &ml)
void ReadOptionsFromXML(void *node)
Collectable string class.
void ReadOptionsFromStream(std::istream &istr)
read option back from the weight file
TString & ReplaceAll(const TString &s1, const TString &s2)
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual ~Configurable()
default destructur
virtual int MakeDirectory(const char *name)
Make a directory.
virtual Bool_t IsArrayOpt() const =0
void ToLower()
Change string to lower-case.
virtual TString GetValue(Int_t i=-1) const =0
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
The TNamed class is the base class for all named ROOT classes.
const char * GetConfigName() const
virtual void ParseOptions()
options parser
void SetMinType(EMsgType minType)
Ssiz_t First(char c) const
Find first occurrence of a character c.
virtual Bool_t SetValue(const TString &vs, Int_t i=-1)
set value for option
R__EXTERN TSystem * gSystem
void SplitOptions(const TString &theOpt, TList &loo) const
splits the option string at ':' and fills the list 'loo' with the primitive strings ...
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
void WriteOptionsReferenceToFile()
write complete options to output stream
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
Configurable(const TString &theOption="")
constructor
virtual Bool_t HasPreDefinedVal() const =0
virtual Int_t GetArraySize() const =0
void PrintOptions() const
prints out the options set in the options string and the defaults
TString & Remove(Ssiz_t pos)
void ResetSetFlag()
resets the IsSet falg for all declare options to be called before options are read from stream ...
virtual const char * GetName() const
Returns name of object.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual const char * TheName() const
virtual Bool_t IsPreDefinedVal(const TString &) const =0
Bool_t LooseOptionCheckingEnabled() const
const char * GetConfigDescription() const
virtual void Add(TObject *obj)
TList fListOfOptions
last declared option
void AddOptionsXMLTo(void *parent) const
write options to XML file
void Reset()
Reset list iterator.
TString()
TString default ctor.
void CheckForUnusedOptions() const
checks for unused options in option string
void WriteOptionsToStream(std::ostream &o, const TString &prefix) const
write options to output stream (e.g. in writing the MVA weight files
const char * Data() const