CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
HLTDiMuonGlbTrkFilter Class Reference

#include <HLTDiMuonGlbTrkFilter.h>

Inheritance diagram for HLTDiMuonGlbTrkFilter:
HLTFilter edm::global::EDFilter<> edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 HLTDiMuonGlbTrkFilter (const edm::ParameterSet &)
 
bool hltFilter (edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
 
 ~HLTDiMuonGlbTrkFilter () override
 
- Public Member Functions inherited from HLTFilter
 HLTFilter (const edm::ParameterSet &config)
 
int module (edm::Event const &) const
 
const std::string * moduleLabel () const
 
int path (edm::Event const &) const
 
const std::string * pathName (edm::Event const &) const
 
std::pair< int, int > pmid (edm::Event const &) const
 
bool saveTags () const
 
 ~HLTFilter () 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 HLTFilter
static void makeHLTFilterDescription (edm::ParameterSetDescription &desc)
 
- 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 Attributes

unsigned int m_allowedTypeMask
 
edm::InputTag m_candsTag
 
edm::EDGetTokenT< reco::RecoChargedCandidateCollectionm_candsToken
 
int m_chargeOpt
 
double m_maxDCAMuMu
 
double m_maxdEtaMuMu
 
double m_maxEtaMuon
 
double m_maxMass
 
double m_maxNormalizedChi2
 
double m_maxYDimuon
 
double m_minDR
 
double m_minMass
 
int m_minMuonHits
 
double m_minPtMuon1
 
double m_minPtMuon2
 
int m_minTrkHits
 
edm::InputTag m_muonsTag
 
edm::EDGetTokenT< reco::MuonCollectionm_muonsToken
 
unsigned int m_requiredTypeMask
 
bool m_saveTags
 
muon::SelectionType m_trkMuonId
 

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 13 of file HLTDiMuonGlbTrkFilter.h.

Constructor & Destructor Documentation

HLTDiMuonGlbTrkFilter::HLTDiMuonGlbTrkFilter ( const edm::ParameterSet iConfig)

Definition at line 28 of file HLTDiMuonGlbTrkFilter.cc.

References edm::ParameterSet::getParameter(), m_allowedTypeMask, m_candsTag, m_candsToken, m_chargeOpt, m_maxDCAMuMu, m_maxdEtaMuMu, m_maxEtaMuon, m_maxMass, m_maxNormalizedChi2, m_maxYDimuon, m_minDR, m_minMass, m_minMuonHits, m_minPtMuon1, m_minPtMuon2, m_minTrkHits, m_muonsTag, m_muonsToken, m_requiredTypeMask, and m_trkMuonId.

28  : HLTFilter(iConfig) {
29  m_muonsTag = iConfig.getParameter<edm::InputTag>("inputMuonCollection");
30  m_muonsToken = consumes<reco::MuonCollection>(m_muonsTag);
31  m_candsTag = iConfig.getParameter<edm::InputTag>("inputCandCollection");
32  m_candsToken = consumes<reco::RecoChargedCandidateCollection>(m_candsTag);
33  m_minTrkHits = iConfig.getParameter<int>("minTrkHits");
34  m_minMuonHits = iConfig.getParameter<int>("minMuonHits");
35  m_maxNormalizedChi2 = iConfig.getParameter<double>("maxNormalizedChi2");
36  m_minDR = iConfig.getParameter<double>("minDR");
37  m_allowedTypeMask = iConfig.getParameter<unsigned int>("allowedTypeMask");
38  m_requiredTypeMask = iConfig.getParameter<unsigned int>("requiredTypeMask");
39  m_trkMuonId = muon::SelectionType(iConfig.getParameter<unsigned int>("trkMuonId"));
40  m_minPtMuon1 = iConfig.getParameter<double>("minPtMuon1");
41  m_minPtMuon2 = iConfig.getParameter<double>("minPtMuon2");
42  m_maxEtaMuon = iConfig.getParameter<double>("maxEtaMuon");
43  m_maxYDimuon = iConfig.getParameter<double>("maxYDimuon");
44  m_minMass = iConfig.getParameter<double>("minMass");
45  m_maxMass = iConfig.getParameter<double>("maxMass");
46  m_chargeOpt = iConfig.getParameter<int> ("ChargeOpt");
47  m_maxDCAMuMu = iConfig.getParameter<double>("maxDCAMuMu");
48  m_maxdEtaMuMu = iConfig.getParameter<double>("maxdEtaMuMu");
49 }
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > m_candsToken
SelectionType
Selector type.
Definition: MuonSelectors.h:17
HLTFilter(const edm::ParameterSet &config)
Definition: HLTFilter.cc:20
edm::EDGetTokenT< reco::MuonCollection > m_muonsToken
muon::SelectionType m_trkMuonId
HLTDiMuonGlbTrkFilter::~HLTDiMuonGlbTrkFilter ( )
inlineoverride

Definition at line 16 of file HLTDiMuonGlbTrkFilter.h.

References fillDescriptions().

16 {}

Member Function Documentation

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

Definition at line 52 of file HLTDiMuonGlbTrkFilter.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), and HLTFilter::makeHLTFilterDescription().

52  {
55  desc.add<edm::InputTag>("inputMuonCollection",edm::InputTag(""));
56  desc.add<edm::InputTag>("inputCandCollection",edm::InputTag(""));
57  desc.add<int>("minTrkHits",-1);
58  desc.add<int>("minMuonHits",-1);
59  desc.add<double>("maxNormalizedChi2",1e99);
60  desc.add<double>("minDR",0.1);
61  desc.add<unsigned int>("allowedTypeMask",255);
62  desc.add<unsigned int>("requiredTypeMask",0);
63  desc.add<unsigned int>("trkMuonId",0);
64  desc.add<double>("minPtMuon1",17);
65  desc.add<double>("minPtMuon2",8);
66  desc.add<double>("maxEtaMuon",1e99);
67  desc.add<double>("maxYDimuon",1e99);
68  desc.add<double>("minMass",1);
69  desc.add<double>("maxMass",1e99);
70  desc.add<int>("ChargeOpt",0);
71  desc.add<double>("maxDCAMuMu",1e99);
72  desc.add<double>("maxdEtaMuMu",1e99);
73  descriptions.add("hltDiMuonGlbTrkFilter",desc);
74 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool HLTDiMuonGlbTrkFilter::hltFilter ( edm::Event iEvent,
const edm::EventSetup iSetup,
trigger::TriggerFilterObjectWithRefs filterproduct 
) const
overridevirtual

Implements HLTFilter.

Definition at line 77 of file HLTDiMuonGlbTrkFilter.cc.

References funct::abs(), trigger::TriggerFilterObjectWithRefs::addCollectionTag(), trigger::TriggerRefsCollections::addObject(), ClosestApproachInRPhi::calculate(), egammaForCoreTracking_cff::cands, reco::LeafCandidate::charge(), edm::errors::Configuration, DEFINE_FWK_MODULE, boostedElectronIsolation_cff::deltaR, ClosestApproachInRPhi::distance(), reco::LeafCandidate::eta(), edm::EventSetup::get(), reco::LeafCandidate::get(), edm::Event::getByToken(), mps_fire::i, reco::TransientTrack::impactPointTSCP(), muon::isGoodMuon(), TrajectoryStateClosestToPoint::isValid(), m_allowedTypeMask, m_candsTag, m_candsToken, m_chargeOpt, m_maxDCAMuMu, m_maxdEtaMuMu, m_maxEtaMuon, m_maxMass, m_maxNormalizedChi2, m_maxYDimuon, m_minDR, m_minMass, m_minMuonHits, m_minPtMuon1, m_minPtMuon2, m_minTrkHits, m_muonsToken, m_requiredTypeMask, m_trkMuonId, ResonanceBuilder::mass, SiStripPI::max, min(), RPCpg::mu, metsig::muon, extraflags_cff::muons, reco::LeafCandidate::p4(), reco::LeafCandidate::pt(), HLTFilter::saveTags(), ClosestApproachInRPhi::status(), TrajectoryStateClosestToPoint::theState(), and trigger::TriggerMuon.

78 {
80  iEvent.getByToken(m_muonsToken,muons);
82  iEvent.getByToken(m_candsToken,cands);
83  if ( saveTags() ) filterproduct.addCollectionTag(m_candsTag);
84  if ( cands->size() != muons->size() )
85  throw edm::Exception(edm::errors::Configuration) << "Both input collection must be aligned and represent same physical muon objects";
86  std::vector<unsigned int> filteredMuons;
87  for ( unsigned int i=0; i<muons->size(); ++i ){
88  const reco::Muon& muon(muons->at(i));
89  if ( (muon.type() & m_allowedTypeMask) == 0 ) continue;
90  if ( (muon.type() & m_requiredTypeMask) != m_requiredTypeMask ) continue;
91  if ( !muon.innerTrack().isNull() ){
92  if (muon.innerTrack()->numberOfValidHits()<m_minTrkHits) continue;
93  }
94  if ( !muon.globalTrack().isNull() ){
95  if (muon.globalTrack()->normalizedChi2()>m_maxNormalizedChi2) continue;
96  if (muon.globalTrack()->hitPattern().numberOfValidMuonHits()<m_minMuonHits) continue;
97  }
98  if ( muon.isTrackerMuon() && !muon::isGoodMuon(muon,m_trkMuonId) ) continue;
99  if ( muon.pt() < std::min(m_minPtMuon1,m_minPtMuon2) ) continue;
100  if ( std::abs(muon.eta()) > m_maxEtaMuon ) continue;
101  filteredMuons.push_back(i);
102  }
103 
104  unsigned int npassed(0);
105  std::set<unsigned int> mus;
106  if ( filteredMuons.size()>1 ){
107  // Needed for DCA calculation
108  edm::ESHandle<MagneticField> bFieldHandle;
109  if (m_maxDCAMuMu < 100.) iSetup.get<IdealMagneticFieldRecord>().get(bFieldHandle);
110  for ( unsigned int i=0; i < filteredMuons.size()-1; ++i )
111  for ( unsigned int j=i+1; j < filteredMuons.size(); ++j ){
112  const reco::Muon& mu1(muons->at(filteredMuons.at(i)));
113  const reco::Muon& mu2(muons->at(filteredMuons.at(j)));
114  if ( std::max( mu1.pt(), mu2.pt()) > std::max(m_minPtMuon1,m_minPtMuon2) &&
115  std::abs(mu2.eta() - mu1.eta()) < m_maxdEtaMuMu &&
116  deltaR(mu1,mu2)>m_minDR && (mu1.p4() + mu2.p4()).mass() > m_minMass &&
117  (mu1.p4() + mu2.p4()).mass() < m_maxMass && std::abs((mu1.p4() + mu2.p4()).Rapidity()) < m_maxYDimuon ) {
118  if (m_chargeOpt<0) {
119  if (mu1.charge()*mu2.charge()>0) continue;
120  }
121  else if (m_chargeOpt>0) {
122  if (mu1.charge()*mu2.charge()<0) continue;
123  }
124  if (m_maxDCAMuMu < 100.) {
125  reco::TrackRef tk1 = mu1.get<reco::TrackRef>();
126  reco::TrackRef tk2 = mu2.get<reco::TrackRef>();
127  reco::TransientTrack mu1TT(*tk1, &(*bFieldHandle));
128  reco::TransientTrack mu2TT(*tk2, &(*bFieldHandle));
129  TrajectoryStateClosestToPoint mu1TS = mu1TT.impactPointTSCP();
130  TrajectoryStateClosestToPoint mu2TS = mu2TT.impactPointTSCP();
131  if (mu1TS.isValid() && mu2TS.isValid()) {
133  cApp.calculate(mu1TS.theState(), mu2TS.theState());
134  if (!cApp.status() || cApp.distance() > m_maxDCAMuMu) continue;
135  }
136  }
137  mus.insert(filteredMuons.at(i));
138  mus.insert(filteredMuons.at(j));
139  npassed++;
140  }
141  }
142  }
143 
144  for (unsigned int mu : mus)
146 
147  return npassed>0;
148 }
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > m_candsToken
float distance() const override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
const FreeTrajectoryState & theState() const
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
bool status() const override
bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb) override
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const int mu
Definition: Constants.h:22
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:243
T min(T a, T b)
Definition: MathUtil.h:58
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
bool saveTags() const
Definition: HLTFilter.h:45
T get() const
Definition: EventSetup.h:71
edm::EDGetTokenT< reco::MuonCollection > m_muonsToken
muon::SelectionType m_trkMuonId

Member Data Documentation

unsigned int HLTDiMuonGlbTrkFilter::m_allowedTypeMask
private

Definition at line 29 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

edm::InputTag HLTDiMuonGlbTrkFilter::m_candsTag
private

Definition at line 25 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

edm::EDGetTokenT<reco::RecoChargedCandidateCollection> HLTDiMuonGlbTrkFilter::m_candsToken
private

Definition at line 26 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

int HLTDiMuonGlbTrkFilter::m_chargeOpt
private

Definition at line 39 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_maxDCAMuMu
private

Definition at line 40 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_maxdEtaMuMu
private

Definition at line 41 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_maxEtaMuon
private

Definition at line 35 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_maxMass
private

Definition at line 38 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_maxNormalizedChi2
private

Definition at line 31 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_maxYDimuon
private

Definition at line 36 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_minDR
private

Definition at line 32 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_minMass
private

Definition at line 37 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

int HLTDiMuonGlbTrkFilter::m_minMuonHits
private

Definition at line 28 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_minPtMuon1
private

Definition at line 33 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

double HLTDiMuonGlbTrkFilter::m_minPtMuon2
private

Definition at line 34 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

int HLTDiMuonGlbTrkFilter::m_minTrkHits
private

Definition at line 27 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

edm::InputTag HLTDiMuonGlbTrkFilter::m_muonsTag
private

Definition at line 23 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter().

edm::EDGetTokenT<reco::MuonCollection> HLTDiMuonGlbTrkFilter::m_muonsToken
private

Definition at line 24 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

unsigned int HLTDiMuonGlbTrkFilter::m_requiredTypeMask
private

Definition at line 30 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().

bool HLTDiMuonGlbTrkFilter::m_saveTags
private

Definition at line 43 of file HLTDiMuonGlbTrkFilter.h.

muon::SelectionType HLTDiMuonGlbTrkFilter::m_trkMuonId
private

Definition at line 42 of file HLTDiMuonGlbTrkFilter.h.

Referenced by HLTDiMuonGlbTrkFilter(), and hltFilter().