1 |
gpetrucc |
1.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 |
|
|
}
|