CMS 3D CMS Logo

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 //
14 
15 #include <algorithm>
16 #include <vector>
17 
20 
21 using namespace PhysicsTools;
22 
23 namespace { // anonymous
24 
25 class ProcCategory : public VarProcessor {
26  public:
27  typedef VarProcessor::Registry::Registry<ProcCategory,
28  Calibration::ProcCategory> Registry;
29 
30  ProcCategory(const char *name,
32  const MVAComputer *computer);
33  ~ProcCategory() override {}
34 
35  void configure(ConfIterator iter, unsigned int n) override;
36  void eval(ValueIterator iter, unsigned int n) const override;
37 
38  private:
39  typedef Calibration::ProcCategory::BinLimits BinLimits;
40 
42 };
43 
44 ProcCategory::Registry registry("ProcCategory");
45 
46 ProcCategory::ProcCategory(const char *name,
48  const MVAComputer *computer) :
49  VarProcessor(name, calib, computer), calib(calib)
50 {
51 }
52 
53 void ProcCategory::configure(ConfIterator iter, unsigned int n)
54 {
55  if (n != calib->variableBinLimits.size())
56  return;
57 
58  unsigned int categories = 1;
59  for(std::vector<BinLimits>::const_iterator bin =
60  calib->variableBinLimits.begin();
61  bin != calib->variableBinLimits.end(); bin++)
62  categories *= (bin->size() + 1);
63 
64  if (calib->categoryMapping.size() != categories)
65  return;
66 
67  while(iter)
68  iter++(Variable::FLAG_NONE);
69 
70  iter << Variable::FLAG_NONE;
71 }
72 
73 void ProcCategory::eval(ValueIterator iter, unsigned int n) const
74 {
75  unsigned int category = 0;
76  for(std::vector<BinLimits>::const_iterator vars =
77  calib->variableBinLimits.begin();
78  vars != calib->variableBinLimits.end(); vars++, ++iter) {
79  unsigned int idx = std::upper_bound(vars->begin(), vars->end(),
80  *iter) - vars->begin();
81  category *= vars->size() + 1;
82  category += idx;
83  }
84 
85  iter(calib->categoryMapping[category]);
86 }
87 
88 } // anonymous namespace
template to generate a registry singleton for a type.
MVATrainerComputer * calib
Definition: MVATrainer.cc:64
Main interface class to the generic discriminator computer framework.
Definition: MVAComputer.h:39
bin
set the eta bin as selection string.
vars
Definition: DeepTauId.cc:77
static Interceptor::Registry registry("Interceptor")
Common base class for variable processors.
Definition: VarProcessor.h:36