Back to home page

Project CMSSW displayed by LXR

 
 

    


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   }  // namespace modules
0074 }  // namespace reco
0075 
0076 #endif