CMS 3D CMS Logo

MVAComputer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: PhysicsToolsObjects
4 // Class : MVAComputer
5 //
6 
7 // Implementation:
8 // getProcessor() and addProcessor() methods to add processors to
9 // the discriminator computer calibration object. POOL doesn't support
10 // polymorph pointers, so this is implemented using multiple containers
11 // for each possible sub-class and an index array from which the
12 // array of pointers can be reconstructed.
13 //
14 // Author: Christophe Saout
15 // Created: Sat Apr 24 15:18 CEST 2007
16 //
17 #include <algorithm>
18 #include <typeinfo>
19 #include <iostream>
20 #include <cstring>
21 #include <cstddef>
22 
23 #include <atomic>
24 
27 
29 
30 namespace PhysicsTools {
31 namespace Calibration {
32 
34 {
35  static const char prefix[] = "PhysicsTools::Calibration::";
36  edm::TypeID typeID(typeid(*this));
37  const std::string& type(typeID.className());
38  if (type.size() <= sizeof prefix - 1 ||
39  type.substr(0, sizeof prefix - 1) != prefix)
40  throw cms::Exception("MVAComputerCalibration")
41  << "getInstanceName failed for "
42  << typeid(*this).name() << "." << std::endl;
43 
44  return type.substr(sizeof prefix - 1);
45 }
46 
47 std::unique_ptr<VarProcessor>
49  return(std::unique_ptr<VarProcessor>(new VarProcessor(*this)));
50 }
51 
52 std::unique_ptr<VarProcessor>
54  return(std::unique_ptr<VarProcessor>(new ProcOptional(*this)));
55 }
56 
57 std::unique_ptr<VarProcessor>
59  return(std::unique_ptr<VarProcessor>(new ProcCount(*this)));
60 }
61 
62 std::unique_ptr<VarProcessor>
64  return(std::unique_ptr<VarProcessor>(new ProcClassed(*this)));
65 }
66 
67 std::unique_ptr<VarProcessor>
69  return(std::unique_ptr<VarProcessor>(new ProcSplitter(*this)));
70 }
71 
72 std::unique_ptr<VarProcessor>
74  return(std::unique_ptr<VarProcessor>(new ProcForeach(*this)));
75 }
76 
77 std::unique_ptr<VarProcessor>
78 ProcSort::clone() const {
79  return(std::unique_ptr<VarProcessor>(new ProcSort(*this)));
80 }
81 
82 std::unique_ptr<VarProcessor>
84  return(std::unique_ptr<VarProcessor>(new ProcCategory(*this)));
85 }
86 
87 std::unique_ptr<VarProcessor>
89  return(std::unique_ptr<VarProcessor>(new ProcNormalize(*this)));
90 }
91 
92 std::unique_ptr<VarProcessor>
94  return(std::unique_ptr<VarProcessor>(new ProcLikelihood(*this)));
95 }
96 
97 std::unique_ptr<VarProcessor>
99  return(std::unique_ptr<VarProcessor>(new ProcLinear(*this)));
100 }
101 
102 std::unique_ptr<VarProcessor>
104  return(std::unique_ptr<VarProcessor>(new ProcMultiply(*this)));
105 }
106 
107 std::unique_ptr<VarProcessor>
109  return(std::unique_ptr<VarProcessor>(new ProcMatrix(*this)));
110 }
111 
112 std::unique_ptr<VarProcessor>
114  return(std::unique_ptr<VarProcessor>(new ProcExternal(*this)));
115 }
116 
117 std::unique_ptr<VarProcessor>
118 ProcMLP::clone() const {
119  return(std::unique_ptr<VarProcessor>(new ProcMLP(*this)));
120 }
121 
123 {
124  return method;
125 }
126 
128 {
129  static std::atomic<MVAComputer::CacheId> nextCacheId{0};
130 
131  return ++nextCacheId;
132 }
133 
135  cacheId(getNextMVAComputerCacheId())
136 {
137 }
138 
140  inputSet(orig.inputSet),
141  output(orig.output),
142  cacheId(orig.cacheId)
143 {
144  for(std::vector<VarProcessor*>::const_iterator iter =
145  orig.processors.begin();
146  iter != orig.processors.end(); ++iter)
147  addProcessor(*iter);
148 }
149 
151 {
152  for(std::vector<VarProcessor*>::iterator iter = processors.begin();
153  iter != processors.end(); ++iter)
154  delete *iter;
155  processors.clear();
156 }
157 
159 {
160  inputSet = orig.inputSet;
161  output = orig.output;
162  cacheId = orig.cacheId;
163 
164  for(std::vector<VarProcessor*>::iterator iter = processors.begin();
165  iter != processors.end(); ++iter)
166  delete *iter;
167  processors.clear();
168 
169  for(std::vector<VarProcessor*>::const_iterator iter =
170  orig.processors.begin();
171  iter != orig.processors.end(); ++iter)
172  addProcessor(*iter);
173 
174  return *this;
175 }
176 
177 std::vector<VarProcessor*> MVAComputer::getProcessors() const
178 {
179  return processors;
180 }
181 
183 {
185  processors.push_back(proc->clone().release());
186 }
187 
189 {
190  static MVAComputerContainer::CacheId nextCacheId = 0;
191  return ++nextCacheId;
192 }
193 
196 {
197 }
198 
200 {
202 
203  entries.push_back(std::make_pair(label, MVAComputer()));
204  return entries.back().second;
205 }
206 
208 {
209  std::vector<Entry>::const_iterator pos =
210  std::find_if(entries.begin(), entries.end(),
211  [&label](const MVAComputerContainer::Entry &entry){return entry.first == label;});
212 
213  if (pos == entries.end())
214  throw cms::Exception("MVAComputerCalibration")
215  << "Calibration record " << label
216  << " not found in MVAComputerContainer." << std::endl;
217 
218  return pos->second;
219 }
220 
222 {
223  std::vector<Entry>::const_iterator pos =
224  std::find_if(entries.begin(), entries.end(),
225  [&label](const MVAComputerContainer::Entry &entry){return entry.first == label;});
226  if (pos == entries.end()) return false;
227  return true;
228 }
229 
230 } // namespace Calibration
231 } // namespace PhysicsTools
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:108
type
Definition: HCALResponse.h:21
virtual const MVAComputer & find(const std::string &label) const
Definition: MVAComputer.cc:207
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:83
virtual std::vector< VarProcessor * > getProcessors() const
Definition: MVAComputer.cc:177
virtual std::string getInstanceName() const
Definition: MVAComputer.cc:33
virtual std::unique_ptr< VarProcessor > clone() const
Definition: MVAComputer.cc:48
TrainProcessor *const proc
Definition: MVATrainer.cc:101
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:98
std::string getInstanceName() const override
Definition: MVAComputer.cc:122
MVAComputer & operator=(const MVAComputer &orig)
Definition: MVAComputer.cc:158
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:58
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:93
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:113
std::vector< VarProcessor * > processors
Definition: MVAComputer.h:238
char const * label
std::pair< std::string, MVAComputer > Entry
Definition: MVAComputer.h:249
void addProcessor(const VarProcessor *proc)
Definition: MVAComputer.cc:182
static MVAComputer::CacheId getNextMVAComputerCacheId()
Definition: MVAComputer.cc:127
static MVAComputerContainer::CacheId getNextMVAComputerContainerCacheId()
Definition: MVAComputer.cc:188
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:68
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:118
virtual bool contains(const std::string &label) const
Definition: MVAComputer.cc:221
std::vector< Variable > inputSet
Definition: MVAComputer.h:234
MVAComputer & add(const std::string &label)
Definition: MVAComputer.cc:199
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:53
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:88
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:78
std::string const & className() const
Definition: TypeID.cc:43
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:73
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:63
std::unique_ptr< VarProcessor > clone() const override
Definition: MVAComputer.cc:103