69 maxDR_(iConfig.getParameter<double>(
"maxDR")),
74 minMuPt_(iConfig.getParameter<double>(
"minMuonPt")),
79 if (filterName ==
"BadPFMuon")
81 else if (filterName ==
"BadPFMuonSummer16")
83 else if (filterName ==
"BadChargedCandidate")
85 else if (filterName ==
"BadChargedCandidateSummer16")
87 else if (filterName ==
"BadPFMuonDz")
90 throw cms::Exception(
"BadParticleFilter") <<
" Filter " << filterName <<
" is not available, please check name \n";
120 auto const& aPV = iEvent.
get(
vtx_).at(0).position();
122 bool foundBadCandidate =
false;
124 for (
unsigned i = 0;
i < muons->
size(); ++
i) {
131 if (innerMuonTrack.
isNull()) {
144 if (innerMuonTrack->pt() <
minMuPt_)
155 if (!(innerMuonTrack->originalAlgo() ==
algo_ && innerMuonTrack->algo() ==
algo_))
182 for (
unsigned j = 0; j < pfCandidates->size(); ++j) {
189 dr2 =
deltaR2(innerMuonTrack->eta(), innerMuonTrack->phi(), pfCandidate.
eta(), pfCandidate.
phi());
190 float dpt = (pfCandidate.
pt() - innerMuonTrack->pt()) / (0.5 * (innerMuonTrack->pt() + pfCandidate.
pt()));
193 foundBadCandidate =
true;
203 foundBadCandidate =
true;
208 if (foundBadCandidate)
213 bool pass = !foundBadCandidate;
215 iEvent.
put(std::unique_ptr<bool>(
new bool(pass)));
223 desc.
add<
double>(
"innerTrackRelErr", 1.0);
224 desc.
add<
double>(
"minDzBestTrack", -1.0);
227 desc.
add<
double>(
"segmentCompatibility", 0.3);
228 desc.
add<
double>(
"minMuonPt", 100);
229 desc.
add<
int>(
"algo", 14);
230 desc.
add<
bool>(
"taggingMode",
false);
232 desc.
add<
double>(
"minMuonTrackRelErr", 2.0);
233 desc.
add<
double>(
"maxDR", 0.001);
235 desc.
add<
double>(
"minPtDiffRel", 0.0);
236 descriptions.
add(
"BadPFMuonFilter", desc);
T getParameter(std::string const &) const
edm::EDGetTokenT< std::vector< reco::Vertex > > vtx_
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
double eta() const final
momentum pseudorapidity
edm::View< reco::Muon > MuonView
edm::EDGetTokenT< edm::View< reco::Candidate > > tokenPFCandidates_
bool filter(edm::StreamID iID, edm::Event &, const edm::EventSetup &) const override
virtual TrackRef innerTrack() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const double minMuonTrackRelErr_
const double segmentCompatibility_
double pt() const final
transverse momentum
~BadParticleFilter() override
const double innerTrackRelErr_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
BadParticleFilter(const edm::ParameterSet &)
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
#define DEFINE_FWK_MODULE(type)
virtual TrackRef muonBestTrack() const
bool isGlobalMuon() const override
virtual int pdgId() const =0
PDG identifier.
const double minDzBestTrack_
Abs< T >::type abs(const T &t)
bool get(ProductID const &oid, Handle< PROD > &result) const
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isNull() const
Checks for null.
edm::EDGetTokenT< edm::View< reco::Muon > > tokenMuons_
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
virtual double eta() const =0
momentum pseudorapidity
virtual double pt() const =0
transverse momentum
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const double minPtDiffRel_
double phi() const final
momentum azimuthal angle
virtual double phi() const =0
momentum azimuthal angle
edm::View< Candidate > CandidateView
view of a collection containing candidates