File indexing completed on 2025-02-05 23:51:00
0001 #ifndef UtilAlgos_IMASelector_h
0002 #define UtilAlgos_IMASelector_h
0003 #include "FWCore/Framework/interface/ConsumesCollector.h"
0004 #include "CommonTools/UtilAlgos/interface/ParameterAdapter.h"
0005 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0006
0007 #include <iostream>
0008
0009 struct IMASelector {
0010 IMASelector(double ESCOPinMin,
0011 double ESeedOPoutMin,
0012 double PinMPoutOPinMin,
0013 double ESCOPinMax,
0014 double ESeedOPoutMax,
0015 double PinMPoutOPinMax,
0016 double EMPoutMin,
0017 double EMPoutMax)
0018 : ESCOPinMin_(ESCOPinMin),
0019 ESeedOPoutMin_(ESeedOPoutMin),
0020 PinMPoutOPinMin_(PinMPoutOPinMin),
0021 ESCOPinMax_(ESCOPinMax),
0022 ESeedOPoutMax_(ESeedOPoutMax),
0023 PinMPoutOPinMax_(PinMPoutOPinMax),
0024 EMPoutMin_(EMPoutMin),
0025 EMPoutMax_(EMPoutMax) {}
0026
0027 template <typename T>
0028 bool operator()(const T& t) const {
0029 double pin = t.trackMomentumAtVtx().R();
0030 double poMpiOpi = (pin - t.trackMomentumOut().R()) / pin;
0031 double ESC = t.energy();
0032 double pOut = t.trackMomentumOut().R();
0033 double EseedOPout = t.eSeedClusterOverPout();
0034 double EoPin = t.eSuperClusterOverP();
0035 double EoPout = (ESC) / pOut;
0036 return (poMpiOpi > PinMPoutOPinMin_ && poMpiOpi < PinMPoutOPinMax_ && EseedOPout > ESeedOPoutMin_ &&
0037 EseedOPout < ESeedOPoutMax_ && EoPin > ESCOPinMin_ && EoPin < ESCOPinMax_ && EoPout > EMPoutMin_ &&
0038 EoPout < EMPoutMax_);
0039 }
0040
0041 private:
0042 double ESCOPinMin_, ESeedOPoutMin_, PinMPoutOPinMin_;
0043 double ESCOPinMax_, ESeedOPoutMax_, PinMPoutOPinMax_;
0044 double EMPoutMin_, EMPoutMax_;
0045 };
0046
0047 namespace reco {
0048 namespace modules {
0049 template <>
0050 struct ParameterAdapter<IMASelector> {
0051 static IMASelector make(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) {
0052 return IMASelector(cfg.getParameter<double>("ESCOPinMin"),
0053 cfg.getParameter<double>("ESeedOPoutMin"),
0054 cfg.getParameter<double>("PinMPoutOPinMin"),
0055 cfg.getParameter<double>("ESCOPinMax"),
0056 cfg.getParameter<double>("ESeedOPoutMax"),
0057 cfg.getParameter<double>("PinMPoutOPinMax"),
0058 cfg.getParameter<double>("EMPoutMin"),
0059 cfg.getParameter<double>("EMPoutMax"));
0060 }
0061
0062 static void fillPSetDescription(edm::ParameterSetDescription& desc) {
0063 desc.add<double>("ESCOPinMin", 0.0);
0064 desc.add<double>("ESeedOPoutMin", 0.0);
0065 desc.add<double>("PinMPoutOPinMin", 0.0);
0066 desc.add<double>("ESCOPinMax", 0.0);
0067 desc.add<double>("ESeedOPoutMax", 0.0);
0068 desc.add<double>("PinMPoutOPinMax", 0.0);
0069 desc.add<double>("EMPoutMin", 0.0);
0070 desc.add<double>("EMPoutMax", 0.0);
0071 }
0072 };
0073 }
0074 }
0075
0076 #endif