27 #ifndef ROOT_TMVA_Configurable
28 #define ROOT_TMVA_Configurable
45 class Configurable :
public TNamed {
50 Configurable(
const TString& theOption =
"" );
53 virtual ~Configurable();
56 virtual void ParseOptions();
59 void PrintOptions()
const;
61 const char* GetConfigName()
const {
return GetName(); }
62 const char* GetConfigDescription()
const {
return fConfigDescription; }
63 void SetConfigName (
const char* n ) { SetName(n); }
64 void SetConfigDescription(
const char* d ) { fConfigDescription = TString(d); }
68 OptionBase* DeclareOptionRef( T& ref,
const TString& name,
const TString& desc =
"" );
71 OptionBase* DeclareOptionRef( T*& ref, Int_t size,
const TString& name,
const TString& desc =
"" );
75 void AddPreDefVal(
const T&);
79 void AddPreDefVal(
const TString&optname ,
const T&);
82 void CheckForUnusedOptions()
const;
84 const TString& GetOptions()
const {
return fOptions; }
85 void SetOptions(
const TString& s) { fOptions = s; }
87 void WriteOptionsToStream ( std::ostream& o,
const TString& prefix )
const;
88 void ReadOptionsFromStream( std::istream& istr );
90 void AddOptionsXMLTo(
void* parent )
const;
91 void ReadOptionsFromXML(
void* node );
95 Bool_t LooseOptionCheckingEnabled()
const {
return fLooseOptionCheckingEnabled; }
96 void EnableLooseOptions( Bool_t b = kTRUE ) { fLooseOptionCheckingEnabled = b; }
98 void WriteOptionsReferenceToFile();
102 const TString& GetReferenceFile()
const {
return fReferenceFile; }
107 void SplitOptions(
const TString& theOpt, TList& loo)
const;
110 Bool_t fLooseOptionCheckingEnabled;
113 OptionBase* fLastDeclaredOption;
114 TList fListOfOptions;
116 TString fConfigDescription;
117 TString fReferenceFile;
122 MsgLogger& Log()
const {
return *fLogger; }
125 void SetMsgType( EMsgType t ) { fLogger->SetMinType(t); }
128 mutable MsgLogger* fLogger;
134 void AssignOpt(
const TString& name, T& valAssign )
const;
138 ClassDef(Configurable,1);
147 TMVA::OptionBase* TMVA::Configurable::DeclareOptionRef( T& ref,
const TString& name,
const TString& desc)
150 OptionBase* o =
new Option<T>(ref, name, desc);
151 fListOfOptions.Add(o);
152 fLastDeclaredOption = o;
157 TMVA::OptionBase* TMVA::Configurable::DeclareOptionRef( T*& ref, Int_t size,
const TString& name,
const TString& desc)
160 OptionBase* o =
new Option<T*>(ref, size, name, desc);
161 fListOfOptions.Add(o);
162 fLastDeclaredOption = o;
168 void TMVA::Configurable::AddPreDefVal(
const T& val)
171 Option<T>* oc =
dynamic_cast<Option<T>*
>(fLastDeclaredOption);
172 if(oc!=0) oc->AddPreDefVal(val);
177 void TMVA::Configurable::AddPreDefVal(
const TString &optname,
const T& val)
181 TListIter optIt( &fListOfOptions );
182 while (OptionBase * op = (OptionBase *) optIt()) {
183 if (optname == TString(op->TheName())){
184 Option<T>* oc =
dynamic_cast<Option<T>*
>(op);
186 oc->AddPreDefVal(val);
190 Log() << kFATAL <<
"Option \"" << optname
191 <<
"\" was found, but somehow I could not convert the pointer propperly.. please check the syntax of your option declaration" << Endl;
197 Log() << kFATAL <<
"Option \"" << optname
198 <<
"\" is not declared, hence cannot add predefined value, please check the syntax of your option declaration" << Endl;
204 void TMVA::Configurable::AssignOpt(
const TString& name, T& valAssign)
const
207 TObject* opt = fListOfOptions.FindObject(name);
208 if (opt!=0) valAssign = ((Option<T>*)opt)->Value();
210 Log() << kFATAL <<
"Option \"" << name
211 <<
"\" not declared, please check the syntax of your option string" << Endl;