CMS 3D CMS Logo

HLTElectronMuonInvMassFilter.cc
Go to the documentation of this file.
1 
13 
16 //
17 // constructors and destructor
18 //
20 {
21  eleCandTag_ = iConfig.getParameter< edm::InputTag > ("elePrevCandTag");
22  muonCandTag_ = iConfig.getParameter< edm::InputTag > ("muonPrevCandTag");
23  lowerMassCut_ = iConfig.getParameter<double> ("lowerMassCut");
24  upperMassCut_ = iConfig.getParameter<double> ("upperMassCut");
25  ncandcut_ = iConfig.getParameter<int> ("ncandcut");
26  relaxed_ = iConfig.getUntrackedParameter<bool> ("electronRelaxed",true) ;
27  L1IsoCollTag_= iConfig.getParameter< edm::InputTag > ("ElectronL1IsoCand");
28  L1NonIsoCollTag_= iConfig.getParameter< edm::InputTag > ("ElectronL1NonIsoCand");
29  MuonCollTag_= iConfig.getParameter< edm::InputTag > ("MuonCand");
30  eleCandToken_ = consumes<trigger::TriggerFilterObjectWithRefs>(eleCandTag_);
31  muonCandToken_ = consumes<trigger::TriggerFilterObjectWithRefs>(muonCandTag_);
32 }
33 
34 
36 
37 void
41  desc.add<edm::InputTag>("elePrevCandTag",edm::InputTag("hltL1NonIsoHLTCaloIdTTrkIdVLSingleElectronEt8NoCandDphiFilter"));
42  desc.add<edm::InputTag>("muonPrevCandTag",edm::InputTag("hltL1Mu0HTT50L3Filtered3"));
43  desc.add<double>("lowerMassCut",4.0);
44  desc.add<double>("upperMassCut",999999.0);
45  desc.add<int>("ncandcut",1);
46  desc.addUntracked<bool>("electronRelaxed",true);
47  desc.add<edm::InputTag>("ElectronL1IsoCand",edm::InputTag("hltPixelMatchElectronsActivity"));
48  desc.add<edm::InputTag>("ElectronL1NonIsoCand",edm::InputTag("hltPixelMatchElectronsActivity"));
49  desc.add<edm::InputTag>("MuonCand",edm::InputTag("hltL3MuonCandidates"));
50  descriptions.add("hltElectronMuonInvMassFilter",desc);
51 }
52 
53 // ------------ method called to produce the data ------------
54 bool
56 {
57  using namespace std;
58  using namespace math;
59  using namespace edm;
60  using namespace reco;
61  // The filter object
62  using namespace trigger;
63 
64  if (saveTags()) {
65  filterproduct.addCollectionTag(L1IsoCollTag_);
66  if (relaxed_) filterproduct.addCollectionTag(L1NonIsoCollTag_);
67  filterproduct.addCollectionTag(MuonCollTag_);
68  }
69 
71  iEvent.getByToken (eleCandToken_,EleFromPrevFilter);
72 
74  iEvent.getByToken (muonCandToken_,MuonFromPrevFilter);
75 
76  vector< Ref< ElectronCollection > > electrons;
77  EleFromPrevFilter->getObjects(TriggerElectron, electrons);
78 
79  vector<RecoChargedCandidateRef> l3muons;
80  MuonFromPrevFilter->getObjects(TriggerMuon,l3muons);
81 
82  std::vector<edm::Ref<reco::RecoEcalCandidateCollection>> clusCands;
83  if(electrons.empty()){
84  EleFromPrevFilter->getObjects(TriggerCluster,clusCands);
85  }
86 
87  if(clusCands.empty()){
88  EleFromPrevFilter->getObjects(TriggerPhoton,clusCands);
89  }
90 
91  int nEleMuPairs = 0;
92 
93  for(auto & electron : electrons) {
94  for(auto & l3muon : l3muons) {
95  double mass = (electron->p4()+l3muon->p4()).mass();
96  if(mass>=lowerMassCut_ && mass<=upperMassCut_){
97  nEleMuPairs++;
98  filterproduct.addObject(TriggerElectron, electron);
99  filterproduct.addObject(TriggerMuon, l3muon);
100  }
101  }
102  }
103 
104  for(auto & clusCand : clusCands) {
105  for(auto & l3muon : l3muons) {
106  double mass = (clusCand->p4()+l3muon->p4()).mass();
107  if(mass>=lowerMassCut_ && mass<=upperMassCut_){
108  nEleMuPairs++;
109  filterproduct.addObject(TriggerElectron, clusCand);
110  filterproduct.addObject(TriggerMuon, l3muon);
111  }
112  }
113  }
114 
115  // filter decision
116  bool accept(nEleMuPairs>=ncandcut_);
117  return accept;
118 }
119 
120 // declare this class as a framework plugin
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > eleCandToken_
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
HLTElectronMuonInvMassFilter(const edm::ParameterSet &)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: Error.h:16
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > muonCandToken_
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
~HLTElectronMuonInvMassFilter() override
fixed size matrix
bool saveTags() const
Definition: HLTFilter.h:45
HLT enums.