CMS 3D CMS Logo

MuonIDFilterProducerForHLT.cc
Go to the documentation of this file.
1 
7 // system include files
8 #include <memory>
9 
10 // user include files
12 
15 
17 
23 
24 //#include <algorithm>
25 
27  muonTag_ ( iConfig.getParameter<edm::InputTag>("inputMuonCollection") ),
28  muonToken_ ( consumes<reco::MuonCollection>(muonTag_)),
29  applyTriggerIdLoose_ ( iConfig.getParameter<bool>("applyTriggerIdLoose") ),
30  type_ ( muon::SelectionType(iConfig.getParameter<unsigned int>("typeMuon")) ),
31  allowedTypeMask_ ( iConfig.getParameter<unsigned int>("allowedTypeMask") ),
32  requiredTypeMask_ ( iConfig.getParameter<unsigned int>("requiredTypeMask") ),
33  min_NMuonHits_ ( iConfig.getParameter<int>("minNMuonHits") ),
34  min_NMuonStations_ ( iConfig.getParameter<int>("minNMuonStations") ),
35  min_NTrkLayers_ ( iConfig.getParameter<int>("minNTrkLayers") ),
36  min_NTrkHits_ ( iConfig.getParameter<int>("minTrkHits") ),
37  min_PixLayers_ ( iConfig.getParameter<int>("minPixLayer") ),
38  min_PixHits_ ( iConfig.getParameter<int>("minPixHits") ),
39  min_Pt_ ( iConfig.getParameter<double>("minPt") ),
40  max_NormalizedChi2_ ( iConfig.getParameter<double>("maxNormalizedChi2") )
41 {
42  produces<reco::MuonCollection>();
43 }
44 
46 {
47 }
50  desc.add<edm::InputTag>("inputMuonCollection",edm::InputTag("hltIterL3MuonsNoID"));
51  desc.add<bool>("applyTriggerIdLoose",true);
52  desc.add<unsigned int>("typeMuon",0);
53  desc.add<unsigned int>("allowedTypeMask",0);
54  desc.add<unsigned int>("requiredTypeMask",0);
55  desc.add<int>("minNMuonHits",0);
56  desc.add<int>("minNMuonStations",0);
57  desc.add<int>("minNTrkLayers",0);
58  desc.add<int>("minTrkHits",0);
59  desc.add<int>("minPixLayer",0);
60  desc.add<int>("minPixHits",0);
61  desc.add<double>("minPt",0.);
62  desc.add<double>("maxNormalizedChi2",9999.);
63  descriptions.addWithDefaultLabel(desc);
64 }
66 {
67  auto output = std::make_unique<reco::MuonCollection>();
68 
70  iEvent.getByToken(muonToken_, muons);
71 
72  for ( unsigned int i=0; i<muons->size(); ++i ){
73  const reco::Muon& muon(muons->at(i));
75  output->push_back(muon);
76  }
77  else { // Implement here manually all the required/desired cuts
78  if ( (muon.type() & allowedTypeMask_) == 0 ) continue;
79  if ( (muon.type() & requiredTypeMask_) != requiredTypeMask_ ) continue;
80  // tracker cuts
81  if ( !muon.innerTrack().isNull() ){
82  if (muon.innerTrack()->hitPattern().trackerLayersWithMeasurement() < min_NTrkLayers_) continue;
83  if (muon.innerTrack()->numberOfValidHits()< min_NTrkHits_) continue;
84  if (muon.innerTrack()->hitPattern().pixelLayersWithMeasurement() < min_PixLayers_) continue;
85  if (muon.innerTrack()->hitPattern().numberOfValidPixelHits()< min_PixHits_) continue;
86  }
87  // muon cuts
88  if ( muon.numberOfMatchedStations()< min_NMuonStations_ ) continue;
89  if ( !muon.globalTrack().isNull() ){
90  if (muon.globalTrack()->normalizedChi2() > max_NormalizedChi2_) continue;
91  if (muon.globalTrack()->hitPattern().numberOfValidMuonHits() < min_NMuonHits_) continue;
92  }
93  if ( !muon::isGoodMuon(muon,type_) ) continue;
94  if ( muon.pt() < min_Pt_ ) continue;
95 
96  output->push_back(muon);
97  }
98  }
99 
100  iEvent.put(std::move(output));
101 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
SelectionType
Selector type.
Definition: MuonSelectors.h:17
int iEvent
Definition: GenABIO.cc:224
MuonIDFilterProducerForHLT(const edm::ParameterSet &)
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
const muon::SelectionType type_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
const edm::EDGetTokenT< reco::MuonCollection > muonToken_
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
fixed size matrix
HLT enums.
bool isLooseTriggerMuon(const reco::Muon &)
def move(src, dest)
Definition: eostools.py:511