CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
BadParticleFilter Class Reference
Inheritance diagram for BadParticleFilter:
edm::global::EDFilter<> edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 BadParticleFilter (const edm::ParameterSet &)
 
 ~BadParticleFilter () override
 
- Public Member Functions inherited from edm::global::EDFilter<>
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Types

enum  {
  kBadPFMuon = 0, kBadPFMuonSummer16, kBadChargedCandidate, kBadChargedCandidateSummer16,
  kBadPFMuonDz
}
 

Private Member Functions

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

Private Attributes

int algo_
 
int filterType_
 
const double innerTrackRelErr_
 
double maxDR2_
 
const double maxDR_
 
const double minDzBestTrack_
 
const double minMuonTrackRelErr_
 
const double minMuPt_
 
const double minPtDiffRel_
 
const double segmentCompatibility_
 
const bool taggingMode_
 
edm::EDGetTokenT< edm::View< reco::Muon > > tokenMuons_
 
edm::EDGetTokenT< edm::View< reco::Candidate > > tokenPFCandidates_
 
edm::EDGetTokenT< std::vector< reco::Vertex > > vtx_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 30 of file BadParticleFilter.cc.

Member Enumeration Documentation

anonymous enum
private

Constructor & Destructor Documentation

BadParticleFilter::BadParticleFilter ( const edm::ParameterSet iConfig)
explicit

Definition at line 64 of file BadParticleFilter.cc.

References algo_, Exception, diMuonOutputModule_cfi::filterName, filterType_, edm::ParameterSet::getParameter(), kBadChargedCandidate, kBadChargedCandidateSummer16, kBadPFMuon, kBadPFMuonDz, kBadPFMuonSummer16, maxDR2_, maxDR_, and AlCaHLTBitMon_QueryRunRegistry::string.

67  vtx_(consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("vtx"))),
68  taggingMode_(iConfig.getParameter<bool>("taggingMode")),
69  maxDR_(iConfig.getParameter<double>("maxDR")),
70  minPtDiffRel_(iConfig.getParameter<double>("minPtDiffRel")),
71  minMuonTrackRelErr_(iConfig.getParameter<double>("minMuonTrackRelErr")),
72  innerTrackRelErr_(iConfig.getParameter<double>("innerTrackRelErr")),
73  minDzBestTrack_(iConfig.getParameter<double>("minDzBestTrack")),
74  minMuPt_(iConfig.getParameter<double>("minMuonPt")),
75  segmentCompatibility_(iConfig.getParameter<double>("segmentCompatibility")) {
76  maxDR2_ = maxDR_ * maxDR_;
77 
78  std::string filterName = iConfig.getParameter<std::string>("filterType");
79  if (filterName == "BadPFMuon")
81  else if (filterName == "BadPFMuonSummer16")
83  else if (filterName == "BadChargedCandidate")
85  else if (filterName == "BadChargedCandidateSummer16")
87  else if (filterName == "BadPFMuonDz")
89  else {
90  throw cms::Exception("BadParticleFilter") << " Filter " << filterName << " is not available, please check name \n";
91  }
92 
93  algo_ = 0;
95  algo_ = iConfig.getParameter<int>("algo");
96  }
97 
98  produces<bool>();
99 }
T getParameter(std::string const &) const
edm::EDGetTokenT< std::vector< reco::Vertex > > vtx_
edm::EDGetTokenT< edm::View< reco::Candidate > > tokenPFCandidates_
const double minMuonTrackRelErr_
const double segmentCompatibility_
const double innerTrackRelErr_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const double minDzBestTrack_
edm::EDGetTokenT< edm::View< reco::Muon > > tokenMuons_
const double minPtDiffRel_
BadParticleFilter::~BadParticleFilter ( )
override

Definition at line 101 of file BadParticleFilter.cc.

101 {}

Member Function Documentation

void BadParticleFilter::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 220 of file BadParticleFilter.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addWithDefaultLabel(), DEFINE_FWK_MODULE, and AlCaHLTBitMon_QueryRunRegistry::string.

220  {
221  // BadPFMuonFilter
223  desc.add<double>("innerTrackRelErr", 1.0);
224  desc.add<double>("minDzBestTrack", -1.0);
225  desc.add<edm::InputTag>("PFCandidates", edm::InputTag("particleFlow"));
226  desc.add<std::string>("filterType", "BadPFMuon");
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);
231  desc.add<edm::InputTag>("vtx", edm::InputTag("offlinePrimaryVertices"));
232  desc.add<double>("minMuonTrackRelErr", 2.0);
233  desc.add<double>("maxDR", 0.001);
234  desc.add<edm::InputTag>("muons", edm::InputTag("muons"));
235  desc.add<double>("minPtDiffRel", 0.0);
236  descriptions.add("BadPFMuonFilter", desc);
237  descriptions.addWithDefaultLabel(desc);
238 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool BadParticleFilter::filter ( edm::StreamID  iID,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overrideprivate

Definition at line 108 of file BadParticleFilter.cc.

References funct::abs(), algo_, reco::deltaR2(), reco::Candidate::eta(), reco::LeafCandidate::eta(), filterType_, edm::Event::get(), edm::Event::getByToken(), reco::TrackBase::highPurity, mps_fire::i, reco::Muon::innerTrack(), innerTrackRelErr_, reco::Muon::isGlobalMuon(), edm::Ref< C, T, F >::isNull(), reco::Muon::isPFMuon(), kBadChargedCandidate, kBadChargedCandidateSummer16, kBadPFMuon, kBadPFMuonDz, kBadPFMuonSummer16, maxDR2_, minDzBestTrack_, minMuonTrackRelErr_, minMuPt_, minPtDiffRel_, reco::Muon::muonBestTrack(), extraflags_cff::muons, reco::Candidate::pdgId(), patMuonMerger_cfi::pfCandidates, reco::Candidate::phi(), reco::LeafCandidate::phi(), reco::Candidate::pt(), reco::LeafCandidate::pt(), edm::Event::put(), muon::segmentCompatibility(), segmentCompatibility_, edm::View< T >::size(), taggingMode_, tokenMuons_, tokenPFCandidates_, and vtx_.

108  {
109  using namespace std;
110  using namespace edm;
111 
114  iEvent.getByToken(tokenPFCandidates_, pfCandidates);
115 
116  typedef View<reco::Muon> MuonView;
118  iEvent.getByToken(tokenMuons_, muons);
119 
120  auto const& aPV = iEvent.get(vtx_).at(0).position();
121 
122  bool foundBadCandidate = false;
123 
124  for (unsigned i = 0; i < muons->size(); ++i) { // loop over all muons
125 
126  const reco::Muon& muon = (*muons)[i];
127 
128  reco::TrackRef innerMuonTrack = muon.innerTrack();
129  reco::TrackRef bestMuonTrack = muon.muonBestTrack();
130 
131  if (innerMuonTrack.isNull()) {
132  continue;
133  }
134 
136  if (muon.pt() < minMuPt_ && innerMuonTrack->pt() < minMuPt_)
137  continue;
138  }
140  if (muon.pt() < minMuPt_)
141  continue;
142  }
144  if (innerMuonTrack->pt() < minMuPt_)
145  continue;
146  }
147 
148  // Consider only Global Muons
150  if (muon.isGlobalMuon() == 0)
151  continue;
152  }
153 
155  if (!(innerMuonTrack->originalAlgo() == algo_ && innerMuonTrack->algo() == algo_))
156  continue;
157  }
158 
161  bestMuonTrack->ptError() / bestMuonTrack->pt() < minMuonTrackRelErr_ &&
162  innerMuonTrack->ptError() / innerMuonTrack->pt() < innerTrackRelErr_) {
164  continue;
165  }
166 
167  if (filterType_ == kBadPFMuonDz) {
168  if (fabs(bestMuonTrack->dz(aPV)) < minDzBestTrack_) {
169  continue;
170  }
171  }
172  }
173  }
174 
176  if (innerMuonTrack->quality(reco::TrackBase::highPurity))
177  continue;
178  if (!(innerMuonTrack->ptError() / innerMuonTrack->pt() > minMuonTrackRelErr_))
179  continue;
180  }
181 
182  for (unsigned j = 0; j < pfCandidates->size(); ++j) {
183  const reco::Candidate& pfCandidate = (*pfCandidates)[j];
184 
185  float dr2 = 1000;
187  if (!(std::abs(pfCandidate.pdgId()) == 211))
188  continue;
189  dr2 = deltaR2(innerMuonTrack->eta(), innerMuonTrack->phi(), pfCandidate.eta(), pfCandidate.phi());
190  float dpt = (pfCandidate.pt() - innerMuonTrack->pt()) / (0.5 * (innerMuonTrack->pt() + pfCandidate.pt()));
191  if ((dr2 < maxDR2_) && (std::abs(dpt) < minPtDiffRel_) &&
192  (filterType_ == kBadChargedCandidateSummer16 || muon.isPFMuon() == 0)) {
193  foundBadCandidate = true;
194  break;
195  }
196  }
197 
199  if (!((std::abs(pfCandidate.pdgId()) == 13) && (pfCandidate.pt() > minMuPt_)))
200  continue;
201  dr2 = deltaR2(muon.eta(), muon.phi(), pfCandidate.eta(), pfCandidate.phi());
202  if (dr2 < maxDR2_) {
203  foundBadCandidate = true;
204  break;
205  }
206  }
207 
208  if (foundBadCandidate)
209  break;
210  }
211  } // end loop over muonss
212 
213  bool pass = !foundBadCandidate;
214 
215  iEvent.put(std::unique_ptr<bool>(new bool(pass)));
216 
217  return taggingMode_ || pass;
218 }
edm::EDGetTokenT< std::vector< reco::Vertex > > vtx_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
double eta() const final
momentum pseudorapidity
edm::View< reco::Muon > MuonView
Definition: SoftLepton.cc:55
edm::EDGetTokenT< edm::View< reco::Candidate > > tokenPFCandidates_
virtual TrackRef innerTrack() const
Definition: Muon.h:48
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
const double minMuonTrackRelErr_
const double segmentCompatibility_
size_type size() const
double pt() const final
transverse momentum
const double innerTrackRelErr_
virtual TrackRef muonBestTrack() const
Definition: Muon.h:63
bool isGlobalMuon() const override
Definition: Muon.h:291
virtual int pdgId() const =0
PDG identifier.
const double minDzBestTrack_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:326
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
bool isNull() const
Checks for null.
Definition: Ref.h:248
edm::EDGetTokenT< edm::View< reco::Muon > > tokenMuons_
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
virtual double eta() const =0
momentum pseudorapidity
virtual double pt() const =0
transverse momentum
HLT enums.
const double minPtDiffRel_
bool isPFMuon() const
Definition: Muon.h:295
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
Definition: CandidateFwd.h:23

Member Data Documentation

int BadParticleFilter::algo_
private

Definition at line 46 of file BadParticleFilter.cc.

Referenced by BadParticleFilter(), and filter().

int BadParticleFilter::filterType_
private

Definition at line 57 of file BadParticleFilter.cc.

Referenced by BadParticleFilter(), and filter().

const double BadParticleFilter::innerTrackRelErr_
private

Definition at line 50 of file BadParticleFilter.cc.

Referenced by filter().

double BadParticleFilter::maxDR2_
private

Definition at line 55 of file BadParticleFilter.cc.

Referenced by BadParticleFilter(), and filter().

const double BadParticleFilter::maxDR_
private

Definition at line 47 of file BadParticleFilter.cc.

Referenced by BadParticleFilter().

const double BadParticleFilter::minDzBestTrack_
private

Definition at line 51 of file BadParticleFilter.cc.

Referenced by filter().

const double BadParticleFilter::minMuonTrackRelErr_
private

Definition at line 49 of file BadParticleFilter.cc.

Referenced by filter().

const double BadParticleFilter::minMuPt_
private

Definition at line 52 of file BadParticleFilter.cc.

Referenced by filter().

const double BadParticleFilter::minPtDiffRel_
private

Definition at line 48 of file BadParticleFilter.cc.

Referenced by filter().

const double BadParticleFilter::segmentCompatibility_
private

Definition at line 53 of file BadParticleFilter.cc.

Referenced by filter().

const bool BadParticleFilter::taggingMode_
private

Definition at line 45 of file BadParticleFilter.cc.

Referenced by filter().

edm::EDGetTokenT<edm::View<reco::Muon> > BadParticleFilter::tokenMuons_
private

Definition at line 42 of file BadParticleFilter.cc.

Referenced by filter().

edm::EDGetTokenT<edm::View<reco::Candidate> > BadParticleFilter::tokenPFCandidates_
private

Definition at line 41 of file BadParticleFilter.cc.

Referenced by filter().

edm::EDGetTokenT<std::vector<reco::Vertex> > BadParticleFilter::vtx_
private

Definition at line 43 of file BadParticleFilter.cc.

Referenced by filter().