CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MVAComputer.h
Go to the documentation of this file.
1 #ifndef PhysicsTools_MVAComputer_MVAComputer_h
2 #define PhysicsTools_MVAComputer_MVAComputer_h
3 // -*- C++ -*-
4 //
5 // Package: MVAComputer
6 // Class : MVAComputer
7 //
8 
9 //
10 // Author: Christophe Saout <christophe.saout@cern.ch>
11 // Created: Sat Apr 24 15:18 CEST 2007
12 // $Id: MVAComputer.h,v 1.7 2009/06/03 09:50:14 saout Exp $
13 //
14 
15 #include <iostream>
16 #include <vector>
17 #include <memory>
18 
23 
24 namespace PhysicsTools {
25 
40 class MVAComputer {
41  public:
44 
46  MVAComputer(Calibration::MVAComputer *calib, bool owned = false);
47 
48  ~MVAComputer();
49 
51  template<typename Iterator_t>
52  double eval(Iterator_t first, Iterator_t last) const;
53 
54  template<typename Iterator_t>
55  double deriv(Iterator_t first, Iterator_t last) const;
56 
58  template<typename Container_t>
59  inline double eval(const Container_t &values) const
60  {
61  typedef typename Container_t::const_iterator Iterator_t;
62  return this->template eval<Iterator_t>(
63  values.begin(), values.end());
64  }
65 
66  template<typename Container_t>
67  inline double deriv(Container_t &values) const
68  {
69  typedef typename Container_t::iterator Iterator_t;
70  return this->template deriv<Iterator_t>(
71  values.begin(), values.end());
72  }
73 
74  /* various methods for standalone use of calibration files */
75 
78 
80  static Calibration::MVAComputer *readCalibration(std::istream &is);
81 
83  static void writeCalibration(const char *filename,
84  const Calibration::MVAComputer *calib);
85 
87  static void writeCalibration(std::ostream &os,
88  const Calibration::MVAComputer *calib);
89 
91  MVAComputer(const char *filename);
92 
94  MVAComputer(std::istream &is);
95 
96  private:
100  struct InputVar {
103 
105  unsigned int index;
106 
108  unsigned int multiplicity;
109 
110  bool operator < (AtomicId id) const
111  { return var.getName() < id; }
112 
113  bool operator < (const InputVar &other) const
114  { return var.getName() < other.var.getName(); }
115  };
116 
120  struct Processor {
121  inline Processor(VarProcessor *processor,
122  unsigned int nOutput) :
123  processor(processor), nOutput(nOutput) {}
124 
125  inline Processor(const Processor &orig)
126  { processor = orig.processor; nOutput = orig.nOutput; }
127 
128  inline Processor &operator = (const Processor &orig)
129  { processor = orig.processor; nOutput = orig.nOutput; return *this; }
130 
132  mutable std::auto_ptr<VarProcessor> processor;
133 
135  unsigned int nOutput;
136  };
137 
138  struct EvalContext {
139  EvalContext(double *values, int *conf, unsigned int n) :
140  values_(values), conf_(conf), n_(n) {}
141 
142  inline void eval(const VarProcessor *proc, int *outConf,
143  double *output, int *loop,
144  unsigned int offset, unsigned int out) const
145  { proc->eval(values_, conf_, output, outConf, loop, offset); }
146 
147  inline double output(unsigned int output) const
148  { return values_[conf_[output]]; }
149 
150  inline double *values() const { return values_; }
151  inline int *conf() const { return conf_; }
152  inline unsigned int n() const { return n_; }
153 
154  double *values_;
155  int *conf_;
156  unsigned int n_;
157  };
158 
159  struct DerivContext {
160  DerivContext() : n_(0) {}
161 
162  void eval(const VarProcessor *proc, int *outConf,
163  double *output, int *loop,
164  unsigned int offset, unsigned int out) const;
165 
166  double output(unsigned int output,
167  std::vector<double> &derivs) const;
168 
169  inline double *values() const { return &values_.front(); }
170  inline int *conf() const { return &conf_.front(); }
171  inline unsigned int n() const { return n_; }
172 
173  mutable std::vector<double> values_;
174  mutable std::vector<double> deriv_;
175  mutable std::vector<int> conf_;
176  unsigned int n_;
177  };
178 
180  void setup(const Calibration::MVAComputer *calib);
181 
183  unsigned int getVariableId(AtomicId name) const;
184 
186  template<class T> void evalInternal(T &ctx) const;
187 
189  std::vector<InputVar> inputVariables;
190 
192  std::vector<Processor> varProcessors;
193 
195  unsigned int nVars;
196 
198  unsigned int output;
199 
201  std::auto_ptr<Calibration::MVAComputer> owned;
202 };
203 
204 } // namespace PhysicsTools
205 
206 #include "PhysicsTools/MVAComputer/interface/MVAComputer.icc"
207 
208 #endif // PhysicsTools_MVAComputer_MVAComputer_h
nocap nocap const skelname & operator=(const skelname &)
double eval(Iterator_t first, Iterator_t last) const
evaluate variables given by a range of iterators given by first and last
input variable configuration object
Definition: MVAComputer.h:100
TrainProcessor *const proc
Definition: MVATrainer.cc:101
unsigned int nOutput
number of output variables
Definition: MVAComputer.h:135
EvalContext(double *values, int *conf, unsigned int n)
Definition: MVAComputer.h:139
unsigned int multiplicity
number of times each appearance of that variable can appear while computing the discriminator ...
Definition: MVAComputer.h:108
Class describing an input variable.
Definition: Variable.h:34
std::vector< InputVar > inputVariables
vector of input variables
Definition: MVAComputer.h:189
void eval(double *input, int *conf, double *output, int *outConf, int *loop, unsigned int offset) const
run the processor evaluation pass on this processor
Definition: VarProcessor.h:99
std::auto_ptr< Calibration::MVAComputer > owned
in case calibration object is owned by the MVAComputer
Definition: MVAComputer.h:201
static Calibration::MVAComputer * readCalibration(const char *filename)
read calibration object from plain file
Definition: MVAComputer.cc:232
Cheap generic unique keyword identifier class.
Definition: AtomicId.h:32
unsigned int nVars
total number of variables to expect while computing discriminator
Definition: MVAComputer.h:195
unsigned int output
index of the variable in the &quot;conf&quot; array to return as result
Definition: MVAComputer.h:198
MVATrainerComputer * calib
Definition: MVATrainer.cc:64
bool operator<(const FedChannelConnection &, const FedChannelConnection &)
Main interface class to the generic discriminator computer framework.
Definition: MVAComputer.h:40
const AtomicId getName() const
Definition: Variable.h:144
static void writeCalibration(const char *filename, const Calibration::MVAComputer *calib)
write calibration object to file
Definition: MVAComputer.cc:276
double deriv(Iterator_t first, Iterator_t last) const
double output(unsigned int output) const
Definition: MVAComputer.h:147
double eval(const Container_t &values) const
evaluate variables in iterable container values
Definition: MVAComputer.h:59
unsigned int offset(bool)
bool first
Definition: L1TdeRCT.cc:94
tuple conf
Definition: dbtoconf.py:185
variable processor container
Definition: MVAComputer.h:120
tuple out
Definition: dbtoconf.py:99
MVAComputer(const Calibration::MVAComputer *calib)
construct a discriminator computer from a const calibation object
Definition: MVAComputer.cc:37
std::vector< Processor > varProcessors
vector of variable processors
Definition: MVAComputer.h:192
Processor(VarProcessor *processor, unsigned int nOutput)
Definition: MVAComputer.h:121
void evalInternal(T &ctx) const
evaluate discriminator from flattened variable array
Definition: MVAComputer.cc:160
tuple filename
Definition: lut2db_cfg.py:20
unsigned int index
variable index in fixed-position evaluation array
Definition: MVAComputer.h:105
Variable var
generic variable information (name, ...)
Definition: MVAComputer.h:102
std::auto_ptr< VarProcessor > processor
owned variable processor instance
Definition: MVAComputer.h:132
long double T
Processor(const Processor &orig)
Definition: MVAComputer.h:125
double deriv(Container_t &values) const
Definition: MVAComputer.h:67
void eval(const VarProcessor *proc, int *outConf, double *output, int *loop, unsigned int offset, unsigned int out) const
Definition: MVAComputer.h:142
unsigned int getVariableId(AtomicId name) const
map variable identifier name to the numerical position in the array
Definition: MVAComputer.cc:146
Common base class for variable processors.
Definition: VarProcessor.h:39
void setup(const Calibration::MVAComputer *calib)
construct processors from calibration and setup variables
Definition: MVAComputer.cc:63