1 |
#include <memory>
|
2 |
#include "FWCore/ParameterSet/interface/ParameterSet.h"
|
3 |
#include "CommonTools/Utils/interface/StringCutObjectSelector.h"
|
4 |
|
5 |
template<typename T, typename V=int>
|
6 |
class DTree {
|
7 |
public:
|
8 |
DTree(const edm::ParameterSet &pset) ;
|
9 |
~DTree() {}
|
10 |
const V & classify(const T &t) const {
|
11 |
if (cut_(t)) {
|
12 |
return (yes_.get() ? yes_->classify(t) : yesValue_);
|
13 |
} else {
|
14 |
return (no_.get() ? no_->classify(t) : noValue_);
|
15 |
}
|
16 |
}
|
17 |
private:
|
18 |
StringCutObjectSelector<T> cut_;
|
19 |
std::auto_ptr<DTree<T,V> > yes_, no_;
|
20 |
V yesValue_, noValue_;
|
21 |
};
|
22 |
|
23 |
template<typename T, typename V>
|
24 |
DTree<T,V>::DTree(const edm::ParameterSet &pset) :
|
25 |
cut_(pset.getParameter<std::string>("cut"), true)
|
26 |
{
|
27 |
if (pset.existsAs<edm::ParameterSet>("yes")) {
|
28 |
yes_.reset(new DTree<T,V>(pset.getParameter<edm::ParameterSet>("yes")));
|
29 |
} else {
|
30 |
yesValue_ = pset.getParameter<V>("yes");
|
31 |
}
|
32 |
if (pset.existsAs<edm::ParameterSet>("no")) {
|
33 |
no_.reset(new DTree<T,V>(pset.getParameter<edm::ParameterSet>("no")));
|
34 |
} else {
|
35 |
noValue_ = pset.getParameter<V>("no");
|
36 |
}
|
37 |
}
|