CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTElectronMuonInvMassFilter.cc
Go to the documentation of this file.
1 
10 
13 //
14 // constructors and destructor
15 //
17 {
18  eleCandTag_ = iConfig.getParameter< edm::InputTag > ("elePrevCandTag");
19  muonCandTag_ = iConfig.getParameter< edm::InputTag > ("muonPrevCandTag");
20  lowerMassCut_ = iConfig.getParameter<double> ("lowerMassCut");
21  upperMassCut_ = iConfig.getParameter<double> ("upperMassCut");
22  ncandcut_ = iConfig.getParameter<int> ("ncandcut");
23  relaxed_ = iConfig.getUntrackedParameter<bool> ("electronRelaxed",true) ;
24  L1IsoCollTag_= iConfig.getParameter< edm::InputTag > ("ElectronL1IsoCand");
25  L1NonIsoCollTag_= iConfig.getParameter< edm::InputTag > ("ElectronL1NonIsoCand");
26  MuonCollTag_= iConfig.getParameter< edm::InputTag > ("MuonCand");
27  eleCandToken_ = consumes<trigger::TriggerFilterObjectWithRefs>(eleCandTag_);
28  muonCandToken_ = consumes<trigger::TriggerFilterObjectWithRefs>(muonCandTag_);
29 }
30 
31 
33 
34 void
38  desc.add<edm::InputTag>("elePrevCandTag",edm::InputTag("hltL1NonIsoHLTCaloIdTTrkIdVLSingleElectronEt8NoCandDphiFilter"));
39  desc.add<edm::InputTag>("muonPrevCandTag",edm::InputTag("hltL1Mu0HTT50L3Filtered3"));
40  desc.add<double>("lowerMassCut",4.0);
41  desc.add<double>("upperMassCut",999999.0);
42  desc.add<int>("ncandcut",1);
43  desc.addUntracked<bool>("electronRelaxed",true);
44  desc.add<edm::InputTag>("ElectronL1IsoCand",edm::InputTag("hltPixelMatchElectronsActivity"));
45  desc.add<edm::InputTag>("ElectronL1NonIsoCand",edm::InputTag("hltPixelMatchElectronsActivity"));
46  desc.add<edm::InputTag>("MuonCand",edm::InputTag("hltL3MuonCandidates"));
47  descriptions.add("hltElectronMuonInvMassFilter",desc);
48 }
49 
50 // ------------ method called to produce the data ------------
51 bool
53 {
54  using namespace std;
55  using namespace edm;
56  using namespace reco;
57  // The filter object
58  using namespace trigger;
59 
60  double const MuMass = 0.106;
61  double const MuMass2 = MuMass*MuMass;
62 
63  if (saveTags()) {
64  filterproduct.addCollectionTag(L1IsoCollTag_);
65  if (relaxed_) filterproduct.addCollectionTag(L1NonIsoCollTag_);
66  filterproduct.addCollectionTag(MuonCollTag_);
67  }
68 
70  iEvent.getByToken (eleCandToken_,EleFromPrevFilter);
71 
73  iEvent.getByToken (muonCandToken_,MuonFromPrevFilter);
74 
75  std::vector<TLorentzVector> pElectron;
76  std::vector<double> eleCharge;
77 
78  std::vector<TLorentzVector> pMuon;
79  std::vector<double> muonCharge;
80 
82  vector< Ref< ElectronCollection > > electrons;
83  EleFromPrevFilter->getObjects(TriggerElectron, electrons);
84 
85  vector<RecoChargedCandidateRef> l3muons;
86  MuonFromPrevFilter->getObjects(TriggerMuon,l3muons);
87 
88  for(unsigned int i=0; i<l3muons.size(); i++) {
89  TrackRef tk = l3muons[i]->get<TrackRef>();
90  // TrackRef tk = l3muons[i].track();
91  double muonEnergy = sqrt(tk->momentum().Mag2()+MuMass2);
92  TLorentzVector pThisMuon(tk->px(), tk->py(),
93  tk->pz(), muonEnergy );
94  pMuon.push_back( pThisMuon );
95  muonCharge.push_back( tk->charge() );
96  }
97 
98  for (unsigned int i=0; i<electrons.size(); i++) {
99  refele = electrons[i];
100  TLorentzVector pThisEle(refele->px(), refele->py(),
101  refele->pz(), refele->energy() );
102  pElectron.push_back( pThisEle );
103  eleCharge.push_back( refele->charge() );
104  }
105 
106  int nEleMuPairs = 0;
107  for(unsigned int i=0; i<electrons.size(); i++) {
108  for(unsigned int j=0; j<l3muons.size(); j++) {
109  TLorentzVector p1 = pElectron.at(i);
110  TLorentzVector p2 = pMuon.at(j);
111  TLorentzVector pTot = p1 + p2;
112  double mass = pTot.M();
113  if(mass>=lowerMassCut_ && mass<=upperMassCut_){
114  nEleMuPairs++;
115  filterproduct.addObject(TriggerElectron, electrons[i]);
116  filterproduct.addObject(TriggerMuon, l3muons[j]);
117  }
118  }
119  }
120 
121  // filter decision
122  bool accept(nEleMuPairs>=ncandcut_);
123  return accept;
124 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:24
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > eleCandToken_
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
T sqrt(T t)
Definition: SSEVec.h:48
HLTElectronMuonInvMassFilter(const edm::ParameterSet &)
int j
Definition: DBlmapReader.cc:9
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
double p2[4]
Definition: TauolaWrapper.h:90
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)
bool saveTags() const
Definition: HLTFilter.h:45
double p1[4]
Definition: TauolaWrapper.h:89