PythiaHLTSoupFilter

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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
// -*- C++ -*-
//
// Package:    PythiaHLTSoupFilter
// Class:      PythiaHLTSoupFilter
//
/**\class PythiaHLTSoupFilter PythiaHLTSoupFilter.cc IOMC/PythiaHLTSoupFilter/src/PythiaHLTSoupFilter.cc

 Description: <one line class summary>

 Implementation:
     <Notes on implementation>
*/
//
// Original Author:  Filip Moortgat
//         Created:  Mon Jan 23 14:57:54 CET 2006
//
//

#include "DataFormats/Common/interface/Handle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/global/EDFilter.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"

#include <cmath>
#include <cstdlib>
#include <string>

class PythiaHLTSoupFilter : public edm::global::EDFilter<> {
public:
  explicit PythiaHLTSoupFilter(const edm::ParameterSet&);

  bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;

private:
  const edm::EDGetTokenT<edm::HepMCProduct> token_;

  const double minptelectron;
  const double minptmuon;
  const double maxetaelectron;
  const double maxetamuon;
  const double minpttau;
  const double maxetatau;
};

using namespace std;

PythiaHLTSoupFilter::PythiaHLTSoupFilter(const edm::ParameterSet& iConfig)
    : token_(consumes<edm::HepMCProduct>(
          edm::InputTag(iConfig.getUntrackedParameter("moduleLabel", std::string("generator")), "unsmeared"))),
      minptelectron(iConfig.getUntrackedParameter("MinPtElectron", 0.)),
      minptmuon(iConfig.getUntrackedParameter("MinPtMuon", 0.)),
      maxetaelectron(iConfig.getUntrackedParameter("MaxEtaElectron", 10.)),
      maxetamuon(iConfig.getUntrackedParameter("MaxEtaMuon", 10.)),
      minpttau(iConfig.getUntrackedParameter("MinPtTau", 0.)),
      maxetatau(iConfig.getUntrackedParameter("MaxEtaTau", 10.)) {}

bool PythiaHLTSoupFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const {
  bool accepted = false;
  edm::Handle<edm::HepMCProduct> evt;
  iEvent.getByToken(token_, evt);

  const HepMC::GenEvent* myGenEvent = evt->GetEvent();

  if (myGenEvent->signal_process_id() == 2) {
    for (HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end();
         ++p) {
      if (abs((*p)->pdg_id()) == 11 && (*p)->momentum().perp() > minptelectron &&
          abs((*p)->momentum().eta()) < maxetaelectron && (*p)->status() == 1) {
        accepted = true;
      }

      if (abs((*p)->pdg_id()) == 13 && (*p)->momentum().perp() > minptmuon &&
          abs((*p)->momentum().eta()) < maxetamuon && (*p)->status() == 1) {
        accepted = true;
      }

      if (abs((*p)->pdg_id()) == 15 && (*p)->momentum().perp() > minpttau && abs((*p)->momentum().eta()) < maxetatau &&
          (*p)->status() == 3) {
        accepted = true;
      }
    }

  } else {
    accepted = true;
  }
  return accepted;
}

DEFINE_FWK_MODULE(PythiaHLTSoupFilter);