IMASelector

ParameterAdapter

Macros

Line Code
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