From a1d697da4091bad7c20ee90e4350046e159246b7 Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Thu, 14 Mar 2019 12:02:43 +0100 Subject: [PATCH 1/8] adding LHEPtFilter --- .../GenFilters/interface/LHEPtFilter.h | 60 ++++++++++++++++ .../GenFilters/src/LHEPtFilter.cc | 71 +++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 GeneratorInterface/GenFilters/interface/LHEPtFilter.h create mode 100644 GeneratorInterface/GenFilters/src/LHEPtFilter.cc diff --git a/GeneratorInterface/GenFilters/interface/LHEPtFilter.h b/GeneratorInterface/GenFilters/interface/LHEPtFilter.h new file mode 100644 index 0000000000000..3d45513ecf531 --- /dev/null +++ b/GeneratorInterface/GenFilters/interface/LHEPtFilter.h @@ -0,0 +1,60 @@ +#ifndef LHEVpTFilter_h +#define LHEVpTFilter_h +// -*- C++ -*- +// +// Package: LHEVpTFilter +// Class: LHEVpTFilter +// +/* + + Description: Filter to select events with V pT in a given range. + (Based on LHEGenericFilter) + + +*/ +// + +// system include files +#include +#include +#include + +// user include files +#include "Math/Vector4D.h" +#include "Math/Vector4Dfwd.h" + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDFilter.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h" + +// +// class declaration +// + +class LHEPtFilter : public edm::EDFilter { + public: + explicit LHEPtFilter(const edm::ParameterSet&); + ~LHEPtFilter(); + + private: + virtual bool filter(edm::Event&, const edm::EventSetup&); + virtual void endJob(); + + // ----------member data --------------------------- + + edm::EDGetTokenT src_; + std::vector lheParticles; + std::vector cands; + std::vector pdgIdVec_; + std::set pdgIds_; // Set of PDG Ids to include + double ptMin_; // number of particles required to pass filter + double ptMax_; // number of particles required to pass filter + int totalEvents_; // counters + int passedEvents_; +}; +#endif diff --git a/GeneratorInterface/GenFilters/src/LHEPtFilter.cc b/GeneratorInterface/GenFilters/src/LHEPtFilter.cc new file mode 100644 index 0000000000000..c80f2e46c4ded --- /dev/null +++ b/GeneratorInterface/GenFilters/src/LHEPtFilter.cc @@ -0,0 +1,71 @@ +#include "GeneratorInterface/GenFilters/interface/LHEPtFilter.h" + +using namespace edm; +using namespace std; + +LHEPtFilter::LHEPtFilter(const edm::ParameterSet& iConfig) : +pdgIdVec_(iConfig.getParameter>("selectedPdgIds")), +ptMin_(iConfig.getParameter("ptMin")), +ptMax_(iConfig.getParameter("ptMax")), +totalEvents_(0), passedEvents_(0) +{ + //here do whatever other initialization is needed + src_ = consumes(iConfig.getParameter("src")); + pdgIds_ = std::set(pdgIdVec_.begin(), pdgIdVec_.end()); +} + +LHEPtFilter::~LHEPtFilter() +{ + + // do anything here that needs to be done at destruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// ------------ method called to skim the data ------------ +bool LHEPtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + cands.clear(); + edm::Handle< LHEEventProduct > EvtHandle ; + iEvent.getByToken( src_ , EvtHandle ) ; + + totalEvents_++; + + lheParticles = EvtHandle->hepeup().PUP; + + for (unsigned int i = 0; i < lheParticles.size(); ++i) { + if (EvtHandle->hepeup().ISTUP[i] != 1) { // keep only outgoing particles + continue; + } + int pdgId = EvtHandle->hepeup().IDUP[i]; + if (pdgIds_.count(pdgId)) { + cands.push_back(ROOT::Math::PxPyPzEVector(lheParticles[i][0],lheParticles[i][1],lheParticles[i][2],lheParticles[i][3])); + } + } + double vpt_ = -1; + if (cands.size() >= 1) { + ROOT::Math::PxPyPzEVector tot = cands.at(0); + for (unsigned icand = 1; icand < cands.size(); ++icand) { + tot += cands.at(icand); + } + vpt_ = tot.pt(); + } + if ((ptMax_ < 0. || vpt_ <= ptMax_) && vpt_ > ptMin_) { + passedEvents_++; + return true; + } else { + return false; + } + +} + +// ------------ method called once each job just after ending the event loop ------------ +void LHEPtFilter::endJob() { + edm::LogInfo("LHEPtFilter") << "=== Results of LHEPtFilter: passed " + << passedEvents_ << "/" << totalEvents_ << " events" << std::endl; +} + +//define this as a plug-in +DEFINE_FWK_MODULE(LHEPtFilter); + From 562738d879e7035f7343451e0b8d8fbedfc6c7b3 Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Wed, 20 Nov 2019 14:46:26 +0100 Subject: [PATCH 2/8] Move code to plugins directory --- GeneratorInterface/GenFilters/{src => plugins}/LHEPtFilter.cc | 2 +- .../GenFilters/{interface => plugins}/LHEPtFilter.h | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename GeneratorInterface/GenFilters/{src => plugins}/LHEPtFilter.cc (96%) rename GeneratorInterface/GenFilters/{interface => plugins}/LHEPtFilter.h (100%) diff --git a/GeneratorInterface/GenFilters/src/LHEPtFilter.cc b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc similarity index 96% rename from GeneratorInterface/GenFilters/src/LHEPtFilter.cc rename to GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc index c80f2e46c4ded..21b9f71a69561 100644 --- a/GeneratorInterface/GenFilters/src/LHEPtFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc @@ -1,4 +1,4 @@ -#include "GeneratorInterface/GenFilters/interface/LHEPtFilter.h" +#include "GeneratorInterface/GenFilters/plugins/LHEPtFilter.h" using namespace edm; using namespace std; diff --git a/GeneratorInterface/GenFilters/interface/LHEPtFilter.h b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.h similarity index 100% rename from GeneratorInterface/GenFilters/interface/LHEPtFilter.h rename to GeneratorInterface/GenFilters/plugins/LHEPtFilter.h From 51bc27a500ac24b1f31d533ece92d3d92a02182a Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Thu, 21 Nov 2019 10:30:34 +0100 Subject: [PATCH 3/8] removing header for LHEPtFilter --- .../GenFilters/plugins/LHEPtFilter.cc | 58 +++++++++++++++++- .../GenFilters/plugins/LHEPtFilter.h | 60 ------------------- 2 files changed, 57 insertions(+), 61 deletions(-) delete mode 100644 GeneratorInterface/GenFilters/plugins/LHEPtFilter.h diff --git a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc index 21b9f71a69561..9516c703c986a 100644 --- a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc @@ -1,4 +1,60 @@ -#include "GeneratorInterface/GenFilters/plugins/LHEPtFilter.h" +// -*- C++ -*- +// +// Package: LHEPtFilter +// Class: LHEPtFilter +// +/* + + Description: Filter to select events with pT in a given range. + (Based on LHEGenericFilter) + + +*/ +// + +// system include files +#include +#include +#include + +// user include files +#include "Math/Vector4D.h" +#include "Math/Vector4Dfwd.h" + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDFilter.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h" + +// +// class declaration +// + +class LHEPtFilter : public edm::EDFilter { + public: + explicit LHEPtFilter(const edm::ParameterSet&); + ~LHEPtFilter(); + + private: + virtual bool filter(edm::Event&, const edm::EventSetup&); + virtual void endJob(); + + // ----------member data --------------------------- + + edm::EDGetTokenT src_; + std::vector lheParticles; + std::vector cands; + std::vector pdgIdVec_; + std::set pdgIds_; // Set of PDG Ids to include + double ptMin_; // number of particles required to pass filter + double ptMax_; // number of particles required to pass filter + int totalEvents_; // counters + int passedEvents_; +}; using namespace edm; using namespace std; diff --git a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.h b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.h deleted file mode 100644 index 3d45513ecf531..0000000000000 --- a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef LHEVpTFilter_h -#define LHEVpTFilter_h -// -*- C++ -*- -// -// Package: LHEVpTFilter -// Class: LHEVpTFilter -// -/* - - Description: Filter to select events with V pT in a given range. - (Based on LHEGenericFilter) - - -*/ -// - -// system include files -#include -#include -#include - -// user include files -#include "Math/Vector4D.h" -#include "Math/Vector4Dfwd.h" - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h" - -// -// class declaration -// - -class LHEPtFilter : public edm::EDFilter { - public: - explicit LHEPtFilter(const edm::ParameterSet&); - ~LHEPtFilter(); - - private: - virtual bool filter(edm::Event&, const edm::EventSetup&); - virtual void endJob(); - - // ----------member data --------------------------- - - edm::EDGetTokenT src_; - std::vector lheParticles; - std::vector cands; - std::vector pdgIdVec_; - std::set pdgIds_; // Set of PDG Ids to include - double ptMin_; // number of particles required to pass filter - double ptMax_; // number of particles required to pass filter - int totalEvents_; // counters - int passedEvents_; -}; -#endif From a0c2444fe64c76d5e571e592fda400450e017fa8 Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Thu, 21 Nov 2019 10:39:28 +0100 Subject: [PATCH 4/8] LHEPtFilter: apply code checks --- GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc index 9516c703c986a..42f987ccbe1a2 100644 --- a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc @@ -37,11 +37,11 @@ class LHEPtFilter : public edm::EDFilter { public: explicit LHEPtFilter(const edm::ParameterSet&); - ~LHEPtFilter(); + ~LHEPtFilter() override; private: - virtual bool filter(edm::Event&, const edm::EventSetup&); - virtual void endJob(); + bool filter(edm::Event&, const edm::EventSetup&) override; + void endJob() override; // ----------member data --------------------------- @@ -100,7 +100,7 @@ bool LHEPtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) } } double vpt_ = -1; - if (cands.size() >= 1) { + if (!cands.empty()) { ROOT::Math::PxPyPzEVector tot = cands.at(0); for (unsigned icand = 1; icand < cands.size(); ++icand) { tot += cands.at(icand); From 80397c02a1fe3a0387299d04a840d03955600191 Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Thu, 21 Nov 2019 10:48:20 +0100 Subject: [PATCH 5/8] LHEPtFilter: apply code format --- .../GenFilters/plugins/LHEPtFilter.cc | 58 +++++++++---------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc index 42f987ccbe1a2..2399a1971a167 100644 --- a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc @@ -2,7 +2,7 @@ // // Package: LHEPtFilter // Class: LHEPtFilter -// +// /* Description: Filter to select events with pT in a given range. @@ -35,68 +35,64 @@ // class LHEPtFilter : public edm::EDFilter { - public: +public: explicit LHEPtFilter(const edm::ParameterSet&); ~LHEPtFilter() override; - - private: + +private: bool filter(edm::Event&, const edm::EventSetup&) override; void endJob() override; - + // ----------member data --------------------------- - + edm::EDGetTokenT src_; std::vector lheParticles; std::vector cands; std::vector pdgIdVec_; - std::set pdgIds_; // Set of PDG Ids to include - double ptMin_; // number of particles required to pass filter - double ptMax_; // number of particles required to pass filter - int totalEvents_; // counters + std::set pdgIds_; // Set of PDG Ids to include + double ptMin_; // number of particles required to pass filter + double ptMax_; // number of particles required to pass filter + int totalEvents_; // counters int passedEvents_; }; using namespace edm; using namespace std; -LHEPtFilter::LHEPtFilter(const edm::ParameterSet& iConfig) : -pdgIdVec_(iConfig.getParameter>("selectedPdgIds")), -ptMin_(iConfig.getParameter("ptMin")), -ptMax_(iConfig.getParameter("ptMax")), -totalEvents_(0), passedEvents_(0) -{ +LHEPtFilter::LHEPtFilter(const edm::ParameterSet& iConfig) + : pdgIdVec_(iConfig.getParameter>("selectedPdgIds")), + ptMin_(iConfig.getParameter("ptMin")), + ptMax_(iConfig.getParameter("ptMax")), + totalEvents_(0), + passedEvents_(0) { //here do whatever other initialization is needed src_ = consumes(iConfig.getParameter("src")); pdgIds_ = std::set(pdgIdVec_.begin(), pdgIdVec_.end()); } -LHEPtFilter::~LHEPtFilter() -{ - +LHEPtFilter::~LHEPtFilter() { // do anything here that needs to be done at destruction time // (e.g. close files, deallocate resources etc.) - } - // ------------ method called to skim the data ------------ -bool LHEPtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) -{ +bool LHEPtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { cands.clear(); - edm::Handle< LHEEventProduct > EvtHandle ; - iEvent.getByToken( src_ , EvtHandle ) ; - + edm::Handle EvtHandle; + iEvent.getByToken(src_, EvtHandle); + totalEvents_++; lheParticles = EvtHandle->hepeup().PUP; for (unsigned int i = 0; i < lheParticles.size(); ++i) { - if (EvtHandle->hepeup().ISTUP[i] != 1) { // keep only outgoing particles + if (EvtHandle->hepeup().ISTUP[i] != 1) { // keep only outgoing particles continue; } int pdgId = EvtHandle->hepeup().IDUP[i]; if (pdgIds_.count(pdgId)) { - cands.push_back(ROOT::Math::PxPyPzEVector(lheParticles[i][0],lheParticles[i][1],lheParticles[i][2],lheParticles[i][3])); + cands.push_back( + ROOT::Math::PxPyPzEVector(lheParticles[i][0], lheParticles[i][1], lheParticles[i][2], lheParticles[i][3])); } } double vpt_ = -1; @@ -113,15 +109,13 @@ bool LHEPtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) } else { return false; } - } // ------------ method called once each job just after ending the event loop ------------ void LHEPtFilter::endJob() { - edm::LogInfo("LHEPtFilter") << "=== Results of LHEPtFilter: passed " - << passedEvents_ << "/" << totalEvents_ << " events" << std::endl; + edm::LogInfo("LHEPtFilter") << "=== Results of LHEPtFilter: passed " << passedEvents_ << "/" << totalEvents_ + << " events" << std::endl; } //define this as a plug-in DEFINE_FWK_MODULE(LHEPtFilter); - From b89d1f866e7fc7c848ad2f36642dedfd4c019c04 Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Sun, 24 Nov 2019 14:54:29 +0100 Subject: [PATCH 6/8] LHEPtFilter: now a global module, non-const data members removed and replaced with local variables in LHEPtFilter::filter --- .../GenFilters/plugins/LHEPtFilter.cc | 32 ++++++------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc index 2399a1971a167..21d488e3652f9 100644 --- a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc @@ -22,7 +22,7 @@ #include "Math/Vector4Dfwd.h" #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" +#include "FWCore/Framework/interface/global/EDFilter.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -34,26 +34,22 @@ // class declaration // -class LHEPtFilter : public edm::EDFilter { +class LHEPtFilter : public edm::global::EDFilter<> { public: explicit LHEPtFilter(const edm::ParameterSet&); ~LHEPtFilter() override; + bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + private: - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; // ----------member data --------------------------- edm::EDGetTokenT src_; - std::vector lheParticles; - std::vector cands; std::vector pdgIdVec_; std::set pdgIds_; // Set of PDG Ids to include double ptMin_; // number of particles required to pass filter double ptMax_; // number of particles required to pass filter - int totalEvents_; // counters - int passedEvents_; }; using namespace edm; @@ -62,9 +58,7 @@ using namespace std; LHEPtFilter::LHEPtFilter(const edm::ParameterSet& iConfig) : pdgIdVec_(iConfig.getParameter>("selectedPdgIds")), ptMin_(iConfig.getParameter("ptMin")), - ptMax_(iConfig.getParameter("ptMax")), - totalEvents_(0), - passedEvents_(0) { + ptMax_(iConfig.getParameter("ptMax")) { //here do whatever other initialization is needed src_ = consumes(iConfig.getParameter("src")); pdgIds_ = std::set(pdgIdVec_.begin(), pdgIdVec_.end()); @@ -76,14 +70,13 @@ LHEPtFilter::~LHEPtFilter() { } // ------------ method called to skim the data ------------ -bool LHEPtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { - cands.clear(); +bool LHEPtFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { + edm::Handle EvtHandle; iEvent.getByToken(src_, EvtHandle); - totalEvents_++; - - lheParticles = EvtHandle->hepeup().PUP; + std::vector lheParticles = EvtHandle->hepeup().PUP; + std::vector cands; for (unsigned int i = 0; i < lheParticles.size(); ++i) { if (EvtHandle->hepeup().ISTUP[i] != 1) { // keep only outgoing particles @@ -104,18 +97,11 @@ bool LHEPtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { vpt_ = tot.pt(); } if ((ptMax_ < 0. || vpt_ <= ptMax_) && vpt_ > ptMin_) { - passedEvents_++; return true; } else { return false; } } -// ------------ method called once each job just after ending the event loop ------------ -void LHEPtFilter::endJob() { - edm::LogInfo("LHEPtFilter") << "=== Results of LHEPtFilter: passed " << passedEvents_ << "/" << totalEvents_ - << " events" << std::endl; -} - //define this as a plug-in DEFINE_FWK_MODULE(LHEPtFilter); From 7901a1f7aff9c928383cab8e4a3f9887951054dc Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Mon, 25 Nov 2019 10:39:38 +0100 Subject: [PATCH 7/8] updated code-format checks --- GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc index 21d488e3652f9..99e20bb23d8d9 100644 --- a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc @@ -42,7 +42,6 @@ class LHEPtFilter : public edm::global::EDFilter<> { bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: - // ----------member data --------------------------- edm::EDGetTokenT src_; @@ -71,7 +70,6 @@ LHEPtFilter::~LHEPtFilter() { // ------------ method called to skim the data ------------ bool LHEPtFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { - edm::Handle EvtHandle; iEvent.getByToken(src_, EvtHandle); From e0f5d606715e747f19582900dad9af81b446fd7d Mon Sep 17 00:00:00 2001 From: Andrew Gilbert Date: Wed, 4 Dec 2019 10:04:11 +0100 Subject: [PATCH 8/8] Moving plugin back to src directory --- GeneratorInterface/GenFilters/{plugins => src}/LHEPtFilter.cc | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename GeneratorInterface/GenFilters/{plugins => src}/LHEPtFilter.cc (100%) diff --git a/GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc b/GeneratorInterface/GenFilters/src/LHEPtFilter.cc similarity index 100% rename from GeneratorInterface/GenFilters/plugins/LHEPtFilter.cc rename to GeneratorInterface/GenFilters/src/LHEPtFilter.cc