CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ProcCategory.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: MVAComputer
4 // Class : ProcCategory
5 //
6 
7 // Implementation:
8 // Categorizes the input variables given a set of ranges for each
9 // input variable. Output is an integer number.
10 //
11 // Author: Christophe Saout
12 // Created: Sun Sep 16 04:05 CEST 2007
13 // $Id: ProcCategory.cc,v 1.3 2007/10/21 14:49:46 saout Exp $
14 //
15 
16 #include <algorithm>
17 #include <vector>
18 
21 
22 using namespace PhysicsTools;
23 
24 namespace { // anonymous
25 
26 class ProcCategory : public VarProcessor {
27  public:
28  typedef VarProcessor::Registry::Registry<ProcCategory,
30 
31  ProcCategory(const char *name,
33  const MVAComputer *computer);
34  virtual ~ProcCategory() {}
35 
36  virtual void configure(ConfIterator iter, unsigned int n);
37  virtual void eval(ValueIterator iter, unsigned int n) const;
38 
39  private:
40  typedef Calibration::ProcCategory::BinLimits BinLimits;
41 
43 };
44 
45 static ProcCategory::Registry registry("ProcCategory");
46 
47 ProcCategory::ProcCategory(const char *name,
49  const MVAComputer *computer) :
50  VarProcessor(name, calib, computer), calib(calib)
51 {
52 }
53 
54 void ProcCategory::configure(ConfIterator iter, unsigned int n)
55 {
56  if (n != calib->variableBinLimits.size())
57  return;
58 
59  unsigned int categories = 1;
60  for(std::vector<BinLimits>::const_iterator bin =
61  calib->variableBinLimits.begin();
62  bin != calib->variableBinLimits.end(); bin++)
63  categories *= (bin->size() + 1);
64 
65  if (calib->categoryMapping.size() != categories)
66  return;
67 
68  while(iter)
69  iter++(Variable::FLAG_NONE);
70 
71  iter << Variable::FLAG_NONE;
72 }
73 
74 void ProcCategory::eval(ValueIterator iter, unsigned int n) const
75 {
76  unsigned int category = 0;
77  for(std::vector<BinLimits>::const_iterator vars =
78  calib->variableBinLimits.begin();
79  vars != calib->variableBinLimits.end(); vars++, ++iter) {
80  unsigned int idx = std::upper_bound(vars->begin(), vars->end(),
81  *iter) - vars->begin();
82  category *= vars->size() + 1;
83  category += idx;
84  }
85 
86  iter(calib->categoryMapping[category]);
87 }
88 
89 } // anonymous namespace
detail::ThreadSafeRegistry< ParameterSetID, ParameterSet, ProcessParameterSetIDCache > Registry
Definition: Registry.h:37
MVATrainerComputer * calib
Definition: MVATrainer.cc:64
Main interface class to the generic discriminator computer framework.
Definition: MVAComputer.h:40
template to generate a registry singleton for a type.
static Interceptor::Registry registry("Interceptor")
Common base class for variable processors.
Definition: VarProcessor.h:39