1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#ifndef UtilAlgos_IMASelector_h
#define UtilAlgos_IMASelector_h
#include "FWCore/Framework/interface/ConsumesCollector.h"
#include "CommonTools/UtilAlgos/interface/ParameterAdapter.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include <iostream>
struct IMASelector {
IMASelector(double ESCOPinMin,
double ESeedOPoutMin,
double PinMPoutOPinMin,
double ESCOPinMax,
double ESeedOPoutMax,
double PinMPoutOPinMax,
double EMPoutMin,
double EMPoutMax)
: ESCOPinMin_(ESCOPinMin),
ESeedOPoutMin_(ESeedOPoutMin),
PinMPoutOPinMin_(PinMPoutOPinMin),
ESCOPinMax_(ESCOPinMax),
ESeedOPoutMax_(ESeedOPoutMax),
PinMPoutOPinMax_(PinMPoutOPinMax),
EMPoutMin_(EMPoutMin),
EMPoutMax_(EMPoutMax) {}
template <typename T>
bool operator()(const T& t) const {
double pin = t.trackMomentumAtVtx().R();
double poMpiOpi = (pin - t.trackMomentumOut().R()) / pin;
double ESC = t.energy();
double pOut = t.trackMomentumOut().R();
double EseedOPout = t.eSeedClusterOverPout();
double EoPin = t.eSuperClusterOverP();
double EoPout = (ESC) / pOut;
return (poMpiOpi > PinMPoutOPinMin_ && poMpiOpi < PinMPoutOPinMax_ && EseedOPout > ESeedOPoutMin_ &&
EseedOPout < ESeedOPoutMax_ && EoPin > ESCOPinMin_ && EoPin < ESCOPinMax_ && EoPout > EMPoutMin_ &&
EoPout < EMPoutMax_);
}
private:
double ESCOPinMin_, ESeedOPoutMin_, PinMPoutOPinMin_;
double ESCOPinMax_, ESeedOPoutMax_, PinMPoutOPinMax_;
double EMPoutMin_, EMPoutMax_;
};
namespace reco {
namespace modules {
template <>
struct ParameterAdapter<IMASelector> {
static IMASelector make(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) {
return IMASelector(cfg.getParameter<double>("ESCOPinMin"),
cfg.getParameter<double>("ESeedOPoutMin"),
cfg.getParameter<double>("PinMPoutOPinMin"),
cfg.getParameter<double>("ESCOPinMax"),
cfg.getParameter<double>("ESeedOPoutMax"),
cfg.getParameter<double>("PinMPoutOPinMax"),
cfg.getParameter<double>("EMPoutMin"),
cfg.getParameter<double>("EMPoutMax"));
}
static void fillPSetDescription(edm::ParameterSetDescription& desc) {
desc.add<double>("ESCOPinMin", 0.0);
desc.add<double>("ESeedOPoutMin", 0.0);
desc.add<double>("PinMPoutOPinMin", 0.0);
desc.add<double>("ESCOPinMax", 0.0);
desc.add<double>("ESeedOPoutMax", 0.0);
desc.add<double>("PinMPoutOPinMax", 0.0);
desc.add<double>("EMPoutMin", 0.0);
desc.add<double>("EMPoutMax", 0.0);
}
};
} // namespace modules
} // namespace reco
#endif
|