72#ifndef IClassifierReader__def
73#define IClassifierReader__def
75class IClassifierReader {
80 IClassifierReader() : fStatusIsClean(
true ) {}
81 virtual ~IClassifierReader() {}
84 virtual double GetMvaValue(
const std::vector<double>& inputValues )
const = 0;
87 bool IsStatusClean()
const {
return fStatusIsClean; }
96class ReadRuleFit :
public IClassifierReader {
101 ReadRuleFit( std::vector<std::string>& theInputVars )
102 : IClassifierReader(),
103 fClassName(
"ReadRuleFit" ),
107 const char* inputVars[] = {
"var1+var2",
"var1-var2",
"var3",
"var4" };
110 if (theInputVars.size() <= 0) {
111 std::cout <<
"Problem in class \"" << fClassName <<
"\": empty input vector" << std::endl;
112 fStatusIsClean =
false;
115 if (theInputVars.size() != fNvars) {
116 std::cout <<
"Problem in class \"" << fClassName <<
"\": mismatch in number of input values: "
117 << theInputVars.size() <<
" != " << fNvars << std::endl;
118 fStatusIsClean =
false;
122 for (
size_t ivar = 0; ivar < theInputVars.size(); ivar++) {
123 if (theInputVars[ivar] != inputVars[ivar]) {
124 std::cout <<
"Problem in class \"" << fClassName <<
"\": mismatch in input variable names" << std::endl
125 <<
" for variable [" << ivar <<
"]: " << theInputVars[ivar].c_str() <<
" != " << inputVars[ivar] << std::endl;
126 fStatusIsClean =
false;
152 virtual ~ReadRuleFit() {
159 double GetMvaValue(
const std::vector<double>& inputValues )
const override;
167 const char* fClassName;
170 size_t GetNvar()
const {
return fNvars; }
176 double NormVariable(
double x,
double xmin,
double xmax )
const {
186 double GetMvaValue__(
const std::vector<double>& inputValues )
const;
192void ReadRuleFit::Clear(){}
193double ReadRuleFit::GetMvaValue__(
const std::vector<double>& inputValues )
const {
194 double rval=9.468034304;
199 if ((-0.70781672<inputValues[3])) rval+=-2.091079549;
200 if ((inputValues[2]<-0.08117419481)) rval+=-1.576325233;
201 if ((-0.08117419481<inputValues[2])) rval+=-1.442072296;
202 if ((-0.8769411445<inputValues[2])&&(0.2707604766<inputValues[3])) rval+=-1.260829168;
203 if ((inputValues[0]<2.827044487)&&(-1.668748856<inputValues[2])) rval+=-1.795034421;
204 if ((inputValues[0]<1.45515871)&&(inputValues[3]<0.2707604766)) rval+=-1.024584403;
205 if ((inputValues[3]<-0.70781672)) rval+=-0.9273179807;
206 if ((inputValues[2]<0.2560286522)&&(inputValues[3]<-0.70781672)) rval+=-0.9273179807;
207 if ((inputValues[0]<-2.849994659)) rval+=-1.532530451;
208 if ((-2.849994659<inputValues[0])&&(inputValues[0]<2.677224874)) rval+=-1.091577898;
209 if ((inputValues[1]<-0.4801481068)) rval+=-0.7241598431;
210 if ((-0.8270149231<inputValues[1])) rval+=-0.8220294808;
211 if ((-1.288185716<inputValues[0])&&(-0.8270149231<inputValues[1])) rval+=0.6224654513;
212 if ((-2.849994659<inputValues[0])&&(inputValues[0]<2.677224874)&&(inputValues[3]<1.365207195)) rval+=-0.7262142926;
213 if ((-1.227983475<inputValues[0])) rval+=-0.6233421574;
214 if ((inputValues[0]<2.827044487)&&(inputValues[2]<-1.668748856)&&(inputValues[3]<1.055167794)) rval+=-0.9595582911;
215 if ((inputValues[0]<2.827044487)&&(inputValues[2]<-1.668748856)) rval+=-0.9595582911;
216 if ((-0.4801481068<inputValues[1])&&(inputValues[2]<1.026640177)&&(inputValues[3]<0.1015381813)) rval+=-0.4813952666;
217 if ((-0.4832004011<inputValues[0])&&(-1.173881769<inputValues[1])&&(inputValues[1]<0.333245039)&&(inputValues[3]<0.3934768736)) rval+=0.6412101521;
218 if ((-2.849994659<inputValues[0])&&(inputValues[0]<2.677224874)&&(-0.8270149231<inputValues[1])&&(0.639572084<inputValues[2])&&(1.365207195<inputValues[3])) rval+=-0.5241224191;
219 if ((-1.173881769<inputValues[1])&&(inputValues[3]<0.7600490451)) rval+=-0.2753584246;
220 if ((0.1851498783<inputValues[0])&&(inputValues[1]<0.560452342)) rval+=-0.287826213;
221 if ((inputValues[0]<0.402831614)&&(-0.8270149231<inputValues[1])) rval+=0.2529612326;
222 if ((-2.849994659<inputValues[0])&&(inputValues[0]<2.677224874)&&(-0.8270149231<inputValues[1])&&(1.365207195<inputValues[3])) rval+=-0.4020894256;
223 if ((-0.4832004011<inputValues[0])&&(-1.173881769<inputValues[1])&&(0.3934768736<inputValues[3])) rval+=-0.1649581607;
224 if ((-0.4832004011<inputValues[0])&&(-1.173881769<inputValues[1])&&(inputValues[3]<0.3934768736)) rval+=-0.2097252133;
225 if ((inputValues[0]<0.39402771)&&(inputValues[1]<-0.07898536325)) rval+=-0.1711831296;
226 if ((-0.4832004011<inputValues[0])&&(inputValues[0]<1.440462112)&&(-1.173881769<inputValues[1])&&(inputValues[3]<0.3934768736)) rval+=-0.2097252133;
227 if ((inputValues[1]<-0.4801481068)&&(0.7600490451<inputValues[3])) rval+=0.2628324415;
228 if ((inputValues[1]<0.4341939986)&&(inputValues[3]<0.2707604766)) rval+=-0.1536235098;
229 if ((1.255346656<inputValues[1])&&(inputValues[1]<1.667604685)) rval+=0.2576251168;
230 if ((inputValues[2]<-0.08117419481)&&(-1.143110514<inputValues[3])) rval+=0.1298085529;
231 if ((inputValues[0]<-0.4832004011)&&(-1.173881769<inputValues[1])&&(inputValues[3]<-0.5545815229)) rval+=0.1237706907;
232 if ((-0.04954601452<inputValues[0])&&(inputValues[0]<0.4785142541)&&(0.6734923124<inputValues[3])) rval+=0.2769769595;
233 if ((-1.173881769<inputValues[1])&&(-1.03785038<inputValues[2])&&(0.7600490451<inputValues[3])) rval+=-0.09475895678;
234 if ((-1.173881769<inputValues[1])&&(0.7600490451<inputValues[3])) rval+=-0.09475895678;
235 if ((inputValues[0]<-0.4832004011)&&(-1.173881769<inputValues[1])&&(inputValues[1]<0.009230102412)&&(-0.5545815229<inputValues[3])) rval+=0.1850187744;
236 if ((inputValues[0]<-0.4832004011)&&(-1.173881769<inputValues[1])&&(-0.5545815229<inputValues[3])) rval+=-0.1192046981;
237 if ((inputValues[0]<-0.04954601452)&&(inputValues[1]<-0.4050141275)&&(-1.073310018<inputValues[3])) rval+=0.1165014314;
238 if ((1.255346656<inputValues[1])&&(inputValues[1]<1.667604685)&&(inputValues[2]<-0.00680893939)) rval+=0.184618271;
239 if ((inputValues[0]<1.878756404)&&(1.255346656<inputValues[1])&&(inputValues[1]<1.667604685)&&(inputValues[2]<-0.00680893939)) rval+=0.184618271;
240 if ((-0.04954601452<inputValues[0])&&(0.6734923124<inputValues[3])) rval+=-0.05217549148;
241 if ((0.01624130271<inputValues[1])&&(inputValues[1]<1.667604685)&&(-0.00680893939<inputValues[2])) rval+=-0.05902541412;
242 if ((0.6471375823<inputValues[0])&&(inputValues[0]<1.878756404)&&(1.255346656<inputValues[1])&&(inputValues[1]<1.667604685)&&(inputValues[2]<-0.00680893939)) rval+=-0.3327916655;
243 if ((-2.849994659<inputValues[0])&&(inputValues[0]<2.677224874)&&(-0.8270149231<inputValues[1])&&(inputValues[2]<0.639572084)&&(1.365207195<inputValues[3])) rval+=0.1220329935;
244 if ((1.20957303<inputValues[0])&&(inputValues[1]<0.4341939986)&&(inputValues[3]<0.2707604766)) rval+=-0.1511810893;
245 if ((-1.173881769<inputValues[1])&&(-1.03785038<inputValues[2])&&(inputValues[2]<-0.1674731225)&&(0.7600490451<inputValues[3])) rval+=-0.08947314749;
246 if ((-0.08117419481<inputValues[2])&&(inputValues[2]<1.270822406)) rval+=-0.01472221915;
247 if ((-1.61920917<inputValues[0])&&(inputValues[0]<2.827044487)&&(inputValues[1]<0.2844472229)&&(inputValues[2]<-1.668748856)&&(0.05907710269<inputValues[3])) rval+=-0.1511810893;
248 if ((inputValues[0]<2.827044487)&&(inputValues[1]<0.2844472229)&&(inputValues[2]<-1.668748856)&&(0.05907710269<inputValues[3])) rval+=-0.1511810893;
249 if ((-0.7362146974<inputValues[0])&&(inputValues[0]<2.827044487)&&(inputValues[2]<-1.668748856)&&(0.05907710269<inputValues[3])) rval+=-0.1511810893;
250 if ((-2.849994659<inputValues[0])&&(inputValues[0]<2.677224874)&&(inputValues[1]<-0.8270149231)&&(1.365207195<inputValues[3])) rval+=0.03672581977;
255 rval+=-0.6337562808*std::min(
double(3.274564505), std::max(
double(inputValues[0]),
double(-3.351432562)));
256 rval+=-0.4487935322*std::min(
double(2.157360792), std::max(
double(inputValues[1]),
double(-2.052939415)));
257 rval+=-0.2809793072*std::min(
double(1.966724753), std::max(
double(inputValues[2]),
double(-2.075380087)));
258 rval+=1.84962748*std::min(
double(2.508529902), std::max(
double(inputValues[3]),
double(-2.35084939)));
261 inline double ReadRuleFit::GetMvaValue(
const std::vector<double>& inputValues )
const
267 if (!IsStatusClean()) {
268 std::cout <<
"Problem in class \"" << fClassName <<
"\": cannot return classifier response"
269 <<
" because status is dirty" << std::endl;
273 retval = GetMvaValue__( inputValues );
Type GetType(const std::string &Name)
void Initialize(Bool_t useTMVAStyle=kTRUE)