1 |
dgele |
1.1 |
#ifndef PhysicsTools_PatAlgos_interface_BaseIsolator_h
|
2 |
|
|
#define PhysicsTools_PatAlgos_interface_BaseIsolator_h
|
3 |
|
|
|
4 |
|
|
#include "DataFormats/Common/interface/ValueMap.h"
|
5 |
|
|
#include "FWCore/ParameterSet/interface/ParameterSet.h"
|
6 |
|
|
#include "FWCore/Framework/interface/Event.h"
|
7 |
|
|
|
8 |
|
|
namespace pat { namespace helper {
|
9 |
|
|
class BaseIsolator {
|
10 |
|
|
public:
|
11 |
|
|
typedef edm::ValueMap<float> Isolation;
|
12 |
|
|
BaseIsolator() {}
|
13 |
|
|
BaseIsolator(const edm::ParameterSet &conf, bool withCut) ;
|
14 |
|
|
virtual ~BaseIsolator() {}
|
15 |
|
|
virtual void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup) = 0;
|
16 |
|
|
virtual void endEvent() = 0;
|
17 |
|
|
|
18 |
|
|
/// Tests if the value associated to this item is strictly below the cut.
|
19 |
|
|
template<typename AnyRef> bool test(const AnyRef &ref) const {
|
20 |
|
|
bool ok = (getValue(ref.id(), ref.key()) < cut_);
|
21 |
|
|
try_++; if (!ok) fail_++;
|
22 |
|
|
return ok;
|
23 |
|
|
}
|
24 |
|
|
/// Returns the associated isolation value given any sort of ref
|
25 |
|
|
template<typename AnyRef> float getValue(const AnyRef &ref) const {
|
26 |
|
|
return getValue(ref.id(), ref.key());
|
27 |
|
|
}
|
28 |
|
|
|
29 |
|
|
virtual std::string description() const = 0;
|
30 |
|
|
void print(std::ostream &out) const ;
|
31 |
|
|
protected:
|
32 |
|
|
virtual float getValue(const edm::ProductID &id, size_t index) const = 0;
|
33 |
|
|
edm::InputTag input_;
|
34 |
|
|
float cut_;
|
35 |
|
|
mutable uint64_t try_, fail_;
|
36 |
|
|
}; // class BaseIsolator
|
37 |
|
|
} } // namespaces
|
38 |
|
|
|
39 |
|
|
inline std::ostream & operator<<(std::ostream &stream, const pat::helper::BaseIsolator &iso) {
|
40 |
|
|
iso.print(stream);
|
41 |
|
|
return stream;
|
42 |
|
|
}
|
43 |
|
|
#endif
|