19 #include "TLorentzVector.h" 26 : electronTag_(ps.getUntrackedParameter<
edm::
InputTag>(
"electronInputTag",
edm::
InputTag(
"gedGsfElectrons"))),
43 std::vector<TLorentzVector> eleList;
45 for (
auto const& ele : *electronColl) {
46 if (!ele.ecalDriven())
49 double hOverE = ele.hadronicOverEm();
50 double sigmaee = ele.sigmaIetaIeta();
51 double deltaPhiIn = ele.deltaPhiSuperClusterTrackAtVtx();
52 double deltaEtaIn = ele.deltaEtaSuperClusterTrackAtVtx();
58 }
else if (ele.isEE()) {
66 double chi2 = trk->chi2();
67 double ndof = trk->ndof();
69 double trkd0 = trk->d0();
70 double trkdz = trk->dz();
72 trkd0 = -(trk->dxy(
beamSpot->position()));
73 trkdz = trk->dz(
beamSpot->position());
77 if (chbyndof >= 10 || std::fabs(trkd0) >= 0.02 || std::fabs(trkdz) >= 20)
82 if (nPixelHits < 1 || nStripHits < 8)
89 float eiso = absiso / ele.pt();
94 le.SetPtEtaPhiE(ele.pt(), ele.eta(), ele.phi(), ele.energy());
95 eleList.push_back(le);
105 std::vector<TLorentzVector> muList;
107 for (
auto const&
mu : *muonColl) {
108 if (!
mu.isGlobalMuon() || !
mu.isPFMuon() || std::fabs(
mu.eta()) > 2.1 ||
mu.pt() <= 5)
127 double trkd0 = tk->
d0();
128 double trkdz = tk->
dz();
134 int nChambers =
mu.numberOfChambers();
135 int nMatches =
mu.numberOfMatches();
136 int nMatchedStations =
mu.numberOfMatchedStations();
140 double absiso =
pfIso04.sumChargedParticlePt +
144 if (chbyndof < 10 && std::fabs(trkd0) < 0.02 && std::fabs(trkdz) < 20.0 && nPixelHits > 1 && nStripHits > 8 &&
145 nChambers > 2 && nMatches > 2 && nMatchedStations > 2 && absiso /
mu.pt() < 0.3) {
147 lm.SetPtEtaPhiE(
mu.pt(),
mu.eta(),
mu.phi(),
mu.energy());
148 muList.push_back(lm);
156 if (eleList.empty() && muList.empty())
160 if ((!eleList.empty() && eleList[0].Pt() > 20) && (!muList.empty() && muList[0].Pt() > 20))
165 if (!eleList.empty() && !muList.empty()) {
166 vlep = (eleList[0].Pt() > muList[0].Pt()) ? eleList[0] : muList[0];
167 }
else if (!eleList.empty()) {
179 double mt =
getMt(vlep, pfColl->front());
180 if (mt < 60 || mt > 80)
196 vmet.SetPxPyPzE(metx, mety, 0.0,
met);
199 TLorentzVector vw = vlep + vmet;
const edm::EDGetTokenT< reco::BeamSpot > bsToken_
int numberOfValidPixelHits() const
double getMt(const TLorentzVector &vlep, const reco::PFMET &obj)
Sin< T >::type sin(const T &t)
float sumPUPt
sum pt of charged Particles not from PV (for Pu corrections)
bool isNonnull() const
Checks for non-null.
const edm::InputTag electronTag_
const edm::EDGetTokenT< reco::GsfElectronCollection > electronToken_
Log< level::Error, false > LogError
WtoLNuSelector(const edm::ParameterSet &)
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
std::vector< Muon > MuonCollection
collection of Muon objects
int numberOfValidStripHits() const
double ndof() const
number of degrees of freedom of the fit
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
const edm::EDGetTokenT< reco::MuonCollection > muonToken_
float sumPhotonEt
sum pt of PF photons // old float photonIso ;
Cos< T >::type cos(const T &t)
#define DEFINE_FWK_MODULE(type)
float sumNeutralHadronEt
sum pt of neutral hadrons // old float neutralHadronIso ;
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
double chi2() const
chi-squared of the fit
const edm::InputTag bsTag_
bool filter(edm::Event &, edm::EventSetup const &) override
const edm::InputTag muonTag_
const edm::InputTag pfmetTag_
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
const edm::EDGetTokenT< reco::PFMETCollection > pfmetToken_
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...