6 #include <HepMC/GenVertex.h> 19 oppositeHemisphere(iConfig.getUntrackedParameter<
bool> (
"oppositeHemisphere",
false)),
20 leadJetsNoLepMass (iConfig.getUntrackedParameter<
bool> (
"leadJetsNoLepMass",
false)),
21 ptMin (iConfig.getUntrackedParameter<double>(
"minPt", 20)),
22 etaMin (iConfig.getUntrackedParameter<double>(
"minEta", -5.0)),
23 etaMax (iConfig.getUntrackedParameter<double>(
"maxEta", 5.0)),
24 minInvMass (iConfig.getUntrackedParameter<double>(
"minInvMass", 0.0)),
25 maxInvMass (iConfig.getUntrackedParameter<double>(
"maxInvMass", 99999.0)),
26 minDeltaPhi (iConfig.getUntrackedParameter<double>(
"minDeltaPhi", -1.0)),
27 maxDeltaPhi (iConfig.getUntrackedParameter<double>(
"maxDeltaPhi", 99999.0)),
28 minDeltaEta (iConfig.getUntrackedParameter<double>(
"minDeltaEta", -1.0)),
29 maxDeltaEta (iConfig.getUntrackedParameter<double>(
"maxDeltaEta", 99999.0)),
30 minLeadingJetsInvMass (iConfig.getUntrackedParameter<double>(
"minLeadingJetsInvMass", 0.0)),
31 maxLeadingJetsInvMass (iConfig.getUntrackedParameter<double>(
"maxLeadingJetsInvMass", 99999.0)),
32 deltaRJetLep (iConfig.getUntrackedParameter<double>(
"deltaRJetLep", 0.3))
46 vector<const reco::GenParticle*>
out;
50 for(
const auto &
p : *particles){
54 if(((absPdgId == 11) || (absPdgId == 13) || (absPdgId == 15)) &&
p.isHardProcess()) {
67 vector<const reco::GenJet*>
out;
69 for(
unsigned i=0;
i<jets->size();
i++){
93 vector<const reco::GenJet*> filGenJets =
filterGenJets(genJets);
96 if(filGenJets.size()<2){
return false;}
107 vector<const reco::GenParticle*> filGenLep =
filterGenLeptons(genParticles);
110 vector<math::XYZTLorentzVector> genJetsWithoutLeptonsP4;
113 while(genJetsWithoutLeptonsP4.size()<2 && jetIdx < filGenJets.size()) {
114 bool jetWhitoutLep =
true;
117 for(
unsigned int i = 0;
i < filGenLep.size() && jetWhitoutLep; ++
i) {
119 jetWhitoutLep =
false;
121 if (jetWhitoutLep) genJetsWithoutLeptonsP4.push_back(p4J);
126 if (genJetsWithoutLeptonsP4.size() < 2)
return false;
127 float invMassLeadingJet = (genJetsWithoutLeptonsP4[0] + genJetsWithoutLeptonsP4[1]).M();
133 for(
unsigned a=0;
a<filGenJets.size();
a++){
134 for(
unsigned b=
a+1;
b<filGenJets.size();
b++){
143 double dijetProd = pA->
p4().eta()*pB->
p4().eta();
147 double invMass = diJet.mass();
148 if(invMass<=minInvMass || invMass>
maxInvMass){
continue;}
151 double dEta = fabs(pA->
p4().eta()-pB->
p4().eta());
152 if(dEta<=minDeltaEta || dEta>
maxDeltaEta){
continue;}
156 if(dPhi<=minDeltaPhi || dPhi>
maxDeltaPhi){
continue;}
constexpr double deltaPhi(double phi1, double phi2)
T getUntrackedParameter(std::string const &, T const &) const
double minLeadingJetsInvMass
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< const reco::GenJet * > filterGenJets(const std::vector< reco::GenJet > *jets)
bool filter(edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< reco::GenParticleCollection > m_inputTag_GenParticleCollection
VBFGenJetFilter(const edm::ParameterSet &)
std::vector< const reco::GenParticle * > filterGenLeptons(const std::vector< reco::GenParticle > *particles)
double maxLeadingJetsInvMass
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
#define DEFINE_FWK_MODULE(type)
Abs< T >::type abs(const T &t)
Jets made from MC generator particles.
const LorentzVector & p4() const final
four-momentum Lorentz vector
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
T const * product() const
~VBFGenJetFilter() override
edm::EDGetTokenT< reco::GenJetCollection > m_inputTag_GenJetCollection