67#ifndef IClassifierReader__def
68#define IClassifierReader__def
70class IClassifierReader {
75 IClassifierReader() : fStatusIsClean(
true ) {}
76 virtual ~IClassifierReader() {}
79 virtual double GetMvaValue(
const std::vector<double>& inputValues )
const = 0;
82 bool IsStatusClean()
const {
return fStatusIsClean; }
91class ReadCuts :
public IClassifierReader {
96 ReadCuts( std::vector<std::string>& theInputVars )
97 : IClassifierReader(),
98 fClassName(
"ReadCuts" ),
102 const char* inputVars[] = {
"var1+var2",
"var1-var2",
"var3",
"var4" };
105 if (theInputVars.size() <= 0) {
106 std::cout <<
"Problem in class \"" << fClassName <<
"\": empty input vector" << std::endl;
107 fStatusIsClean =
false;
110 if (theInputVars.size() != fNvars) {
111 std::cout <<
"Problem in class \"" << fClassName <<
"\": mismatch in number of input values: "
112 << theInputVars.size() <<
" != " << fNvars << std::endl;
113 fStatusIsClean =
false;
117 for (
size_t ivar = 0; ivar < theInputVars.size(); ivar++) {
118 if (theInputVars[ivar] != inputVars[ivar]) {
119 std::cout <<
"Problem in class \"" << fClassName <<
"\": mismatch in input variable names" << std::endl
120 <<
" for variable [" << ivar <<
"]: " << theInputVars[ivar].c_str() <<
" != " << inputVars[ivar] << std::endl;
121 fStatusIsClean =
false;
147 virtual ~ReadCuts() {
154 double GetMvaValue(
const std::vector<double>& inputValues )
const override;
162 const char* fClassName;
165 size_t GetNvar()
const {
return fNvars; }
171 double NormVariable(
double x,
double xmin,
double xmax )
const {
181 double GetMvaValue__(
const std::vector<double>& inputValues )
const;
186 inline double ReadCuts::GetMvaValue(
const std::vector<double>& inputValues )
const
192 if (!IsStatusClean()) {
193 std::cout <<
"Problem in class \"" << fClassName <<
"\": cannot return classifier response"
194 <<
" because status is dirty" << std::endl;
198 retval = GetMvaValue__( inputValues );
Type GetType(const std::string &Name)
void Initialize(Bool_t useTMVAStyle=kTRUE)