00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "TMVA/ClassifierFactory.h"
00031 #include <assert.h>
00032 #include <iostream>
00033
00034
00035
00036
00037 TMVA::ClassifierFactory* TMVA::ClassifierFactory::fgInstance = 0;
00038
00039
00040 TMVA::ClassifierFactory& TMVA::ClassifierFactory::Instance()
00041 {
00042
00043
00044
00045 if (!fgInstance) fgInstance = new TMVA::ClassifierFactory();
00046
00047 return *fgInstance;
00048 }
00049
00050
00051 void TMVA::ClassifierFactory::DestroyInstance()
00052 {
00053
00054
00055 if (fgInstance!=0) delete fgInstance;
00056 }
00057
00058
00059 Bool_t TMVA::ClassifierFactory::Register( const std::string &name, Creator creator )
00060 {
00061
00062
00063 if(fCalls.find(name) != fCalls.end())
00064 {
00065 std::cerr << "ClassifierFactory<>::Register - " << name << " already exists" << std::endl;
00066 return false;
00067 }
00068
00069 return fCalls.insert(CallMap::value_type(name, creator)).second;
00070 }
00071
00072
00073 Bool_t TMVA::ClassifierFactory::Unregister( const std::string &name )
00074 {
00075
00076
00077 return fCalls.erase(name) == 1;
00078 }
00079
00080
00081 TMVA::IMethod* TMVA::ClassifierFactory::Create( const std::string &name,
00082 const TString& job,
00083 const TString& title,
00084 DataSetInfo& dsi,
00085 const TString& option )
00086 {
00087
00088
00089
00090
00091
00092
00093 CallMap::const_iterator it = fCalls.find(name);
00094
00095
00096 if (it == fCalls.end()) {
00097 std::cerr << "ClassifierFactory<>::Create - don't know anything about " << name << std::endl;
00098 assert(0);
00099 }
00100
00101 return (it->second)(job, title, dsi, option);
00102 }
00103
00104
00105 TMVA::IMethod* TMVA::ClassifierFactory::Create( const std::string &name,
00106 DataSetInfo& dsi,
00107 const TString& weightfile )
00108 {
00109
00110
00111
00112
00113
00114
00115 CallMap::const_iterator it = fCalls.find(name);
00116
00117
00118 if (it == fCalls.end()) {
00119 std::cerr << "ClassifierFactory<>::Create - don't know anything about " << name << std::endl;
00120 assert(0);
00121 }
00122
00123 return (it->second)("", "", dsi, weightfile);
00124 }
00125
00126
00127 const std::vector<std::string> TMVA::ClassifierFactory::List() const
00128 {
00129
00130
00131 std::vector<std::string> svec;
00132
00133 CallMap::const_iterator it = fCalls.begin();
00134 for (; it != fCalls.end(); ++it) svec.push_back(it -> first);
00135
00136 return svec;
00137 }
00138
00139
00140 void TMVA::ClassifierFactory::Print() const
00141 {
00142
00143
00144 std::cout << "Print: ClassifierFactory<> knows about " << fCalls.size() << " objects" << std::endl;
00145
00146 CallMap::const_iterator it = fCalls.begin();
00147 for (; it != fCalls.end(); ++it) std::cout << "Registered object name " << it -> first << std::endl;
00148 }