CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTMuonTrkFilter.cc
Go to the documentation of this file.
2 
5 
7 
18 
27 
29 
31  m_muonsTag = iConfig.getParameter<edm::InputTag>("inputMuonCollection");
32  m_muonsToken = consumes<reco::MuonCollection>(m_muonsTag);
33  m_candsTag = iConfig.getParameter<edm::InputTag>("inputCandCollection");
34  m_candsToken = consumes<reco::RecoChargedCandidateCollection>(m_candsTag);
35  m_previousCandTag = iConfig.getParameter<edm::InputTag> ("previousCandTag");
36  m_previousCandToken = consumes<trigger::TriggerFilterObjectWithRefs>(m_previousCandTag);
37  m_minTrkHits = iConfig.getParameter<int>("minTrkHits");
38  m_minMuonHits = iConfig.getParameter<int>("minMuonHits");
39  m_minMuonStations = iConfig.getParameter<int>("minMuonStations");
40  m_maxNormalizedChi2 = iConfig.getParameter<double>("maxNormalizedChi2");
41  m_allowedTypeMask = iConfig.getParameter<unsigned int>("allowedTypeMask");
42  m_requiredTypeMask = iConfig.getParameter<unsigned int>("requiredTypeMask");
43  m_trkMuonId = muon::SelectionType(iConfig.getParameter<unsigned int>("trkMuonId"));
44  m_minPt = iConfig.getParameter<double>("minPt");
45  m_minN = iConfig.getParameter<unsigned int>("minN");
46  m_maxAbsEta = iConfig.getParameter<double>("maxAbsEta");
47 }
48 
49 void
53  desc.add<edm::InputTag>("inputMuonCollection",edm::InputTag(""));
54  desc.add<edm::InputTag>("inputCandCollection",edm::InputTag(""));
55  desc.add<edm::InputTag>("previousCandTag",edm::InputTag(""));
56  desc.add<int>("minTrkHits",-1);
57  desc.add<int>("minMuonHits",-1);
58  desc.add<int>("minMuonStations",-1);
59  desc.add<double>("maxNormalizedChi2",1e99);
60  desc.add<unsigned int>("allowedTypeMask",255);
61  desc.add<unsigned int>("requiredTypeMask",0);
62  desc.add<unsigned int>("trkMuonId",0);
63  desc.add<double>("minPt",24);
64  desc.add<unsigned int>("minN",1);
65  desc.add<double>("maxAbsEta",1e99);
66  descriptions.add("hltMuonTrkFilter",desc);
67 }
68 
69 bool
71 {
73  iEvent.getByToken(m_muonsToken,muons);
75  iEvent.getByToken(m_candsToken,cands);
76  if ( saveTags() ) filterproduct.addCollectionTag(m_candsTag);
77  if ( cands->size() != muons->size() )
78  throw edm::Exception(edm::errors::Configuration) << "Both input collection must be aligned and represent same physical muon objects";
79 
81  std::vector<l1extra::L1MuonParticleRef> vl1cands;
82  std::vector<l1extra::L1MuonParticleRef>::iterator vl1cands_begin;
83  std::vector<l1extra::L1MuonParticleRef>::iterator vl1cands_end;
84 
85  bool check_l1match = true;
86  if (m_previousCandTag == edm::InputTag("")) check_l1match = false;
87  if (check_l1match) {
88  iEvent.getByToken(m_previousCandToken,previousLevelCands);
89  previousLevelCands->getObjects(trigger::TriggerL1Mu,vl1cands);
90  vl1cands_begin = vl1cands.begin();
91  vl1cands_end = vl1cands.end();
92  }
93 
94  std::vector<unsigned int> filteredMuons;
95  for ( unsigned int i=0; i<muons->size(); ++i ){
96  const reco::Muon& muon(muons->at(i));
97  // check for dR match to L1 muons
98  if (check_l1match) {
99  bool matchl1 = false;
100  for (std::vector<l1extra::L1MuonParticleRef>::iterator l1cand = vl1cands_begin; l1cand != vl1cands_end; ++l1cand) {
101  if (deltaR(muon,**l1cand) < 0.3) {
102  matchl1 = true;
103  break;
104  }
105  }
106  if (!matchl1) continue;
107  }
108  if ( (muon.type() & m_allowedTypeMask) == 0 ) continue;
109  if ( (muon.type() & m_requiredTypeMask) != m_requiredTypeMask ) continue;
110  if ( muon.numberOfMatchedStations()<m_minMuonStations ) continue;
111  if ( !muon.innerTrack().isNull() ){
112  if (muon.innerTrack()->numberOfValidHits()<m_minTrkHits) continue;
113  }
114  if ( !muon.globalTrack().isNull() ){
115  if (muon.globalTrack()->normalizedChi2()>m_maxNormalizedChi2) continue;
116  if (muon.globalTrack()->hitPattern().numberOfValidMuonHits()<m_minMuonHits) continue;
117  }
118  if ( muon.isTrackerMuon() && !muon::isGoodMuon(muon,m_trkMuonId) ) continue;
119  if ( muon.pt() < m_minPt ) continue;
120  if ( std::abs(muon.eta()) > m_maxAbsEta ) continue;
121  filteredMuons.push_back(i);
122  }
123 
124  for ( std::vector<unsigned int>::const_iterator itr = filteredMuons.begin(); itr != filteredMuons.end(); ++itr )
126 
127  return filteredMuons.size()>=m_minN;
128 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< reco::MuonCollection > m_muonsToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
enum start value shifted to 81 so as to avoid clashes with PDG codes
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > m_previousCandToken
edm::InputTag m_candsTag
SelectionType
Selector type.
Definition: MuonSelectors.h:17
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > m_candsToken
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref&lt;C&gt;)
int iEvent
Definition: GenABIO.cc:230
unsigned int m_allowedTypeMask
unsigned int m_minN
edm::InputTag m_previousCandTag
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
muon::SelectionType m_trkMuonId
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLTMuonTrkFilter(const edm::ParameterSet &)
bool saveTags() const
Definition: HLTFilter.h:45
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
tuple muons
Definition: patZpeak.py:38
unsigned int m_requiredTypeMask
edm::InputTag m_muonsTag