CMS 3D CMS Logo

MuTriggerAnalyzer.cc
Go to the documentation of this file.
17 #include "TGraphAsymmErrors.h"
18 #include "TH1.h"
19 #include <numeric>
20 #include <algorithm>
21 #include <string>
22 using namespace std;
23 using namespace reco;
24 using namespace edm;
25 
26 /*
27 bool IsMuMatchedToHLTMu ( const reco::Candidate * dau, std::vector<reco::Particle> HLTMu , double DR, double DPtRel ) {
28  unsigned int dim = HLTMu.size();
29  unsigned int nPass=0;
30  if (dim==0) return false;
31  for (unsigned int k =0; k< dim; k++ ) {
32  if ( (deltaR(HLTMu[k], *dau) < DR) && (fabs(HLTMu[k].pt() - dau->pt())/ HLTMu[k].pt()<DPtRel)){ nPass++ ;
33  }
34  }
35  return (nPass>0);
36 }
37 
38 bool IsMuMatchedToHLTSingleMu ( const reco::Candidate * dau, reco::Particle HLTMu , double DR, double DPtRel ) {
39  unsigned int nPass=0;
40  if ( (deltaR(HLTMu, *dau) < DR) && (fabs(HLTMu.pt() - dau->pt())/ HLTMu.pt()<DPtRel)) {
41  nPass++;
42  }
43  return (nPass>0);
44 }
45 
46 */
47 
48 
50 public:
52 
53 private:
54  void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
55  void endJob() override;
56  bool IsMuMatchedToHLTMu ( const reco::Muon & , std::vector<reco::Particle>& ,double ,double );
57 
62  double ptMuCut_, etaMuCut_;
68 
69  double maxDPtRel_, maxDeltaR_ ;
70  const int nbins_;
71  const double ptMax_;
74  TH1D * deltaR_;
76 
77 
78 };
79 
80 bool MuTriggerAnalyzer::IsMuMatchedToHLTMu ( const reco::Muon & mu, std::vector<reco::Particle>& HLTMu , double DR, double DPtRel ) {
81  size_t dim = HLTMu.size();
82  size_t nPass=0;
83 
84  // filling the denumerator;
85  double muRecoPt= mu.pt();
86  hTrigMuonPtDenS_-> Fill(muRecoPt);
87 
88  if (dim==0) return false;
89  for (size_t k =0; k< dim; k++ ) {
90  if ( (deltaR(HLTMu[k], mu) < DR) && (fabs(HLTMu[k].pt() - mu.pt())/ HLTMu[k].pt()<DPtRel)){
91  nPass++ ;
92  std::cout<< " matching a muon " << std::endl;
93  std::cout << "muon reco pt : " << muRecoPt<< std::endl;
94  std::cout << "muon reco eta " << mu.eta() << std::endl;
95  std::cout << "muon trigger pt "<< HLTMu[k].pt() << std::endl;
96  // filling the numerator, at the same bin as the denum.....
97  hTrigMuonPtNumS_-> Fill(muRecoPt);
98  deltaR_-> Fill(deltaR(HLTMu[k], mu));
99  deltaPtOverPt_-> Fill(fabs(HLTMu[k].pt() - mu.pt())/ HLTMu[k].pt());
100 
101 
102  std::cout << "muon trigger eta : "<< HLTMu[k].eta() << std::endl;
103  std::cout <<"deltaR((HLTMu[k], mu)): "<< deltaR(HLTMu[k], mu) << std::endl;
104  std::cout <<"deltaPtOverPt: "<< fabs(HLTMu[k].pt() - mu.pt())/ HLTMu[k].pt() << std::endl;
105  }
106  }
107 
108  return (nPass>0);
109 }
110 
111 
112 
114  trigToken_(consumes<TriggerResults>(cfg.getParameter<edm::InputTag> ("TrigTag"))),
115  trigEvTag_(cfg.getParameter<edm::InputTag> ("triggerEvent")),
116  trigEvToken_(consumes< trigger::TriggerEvent >(trigEvTag_)),
117  muonToken_(consumes<View<Muon> > (cfg.getUntrackedParameter<edm::InputTag>("muons"))),
118  ptMuCut_(cfg.getUntrackedParameter<double>("ptMuCut")),
119  etaMuCut_(cfg.getUntrackedParameter<double>("etaMuCut")),
120  hltPath_(cfg.getParameter<std::string >("hltPath")),
121  L3FilterName_(cfg.getParameter<std::string >("L3FilterName")),
122  maxDPtRel_(cfg.getParameter<double>("maxDPtRel")),
123  maxDeltaR_(cfg.getParameter<double>("maxDeltaR")),
124  nbins_(cfg.getParameter<double>("ptMax_")),
125  ptMax_(cfg.getParameter<double>("ptMax_")){
127 
128  hTrigMuonPtNumS_ = fs->make<TH1D>("hTrigMuonPtNumS", "hTrigMuonPtNumS", nbins_ + 1, 0, ptMax_);
129  hTrigMuonPtDenS_ = fs->make<TH1D>("hTrigMuonPtDenS", "hTrigMuonPtDenS", nbins_ +1 , 0, ptMax_);
130  deltaR_ = fs->make<TH1D>("deltaR", "deltaR", nbins_+1, 0, maxDeltaR_);
131  deltaPtOverPt_ = fs->make<TH1D>("deltaPtOverPt", "deltaPtOverPt", nbins_ + 1, 0, maxDPtRel_);
132 
133 }
134 
136  for (int i = 0; i < nbins_+1; ++i){
137  std::cout << "number of reco muon in bin " << i << " = " << hTrigMuonPtDenS_->GetBinContent(i) << std::endl;
138  std::cout << "number of hlt muon in bin " << i << " = " << hTrigMuonPtNumS_->GetBinContent(i) << std::endl;
139 
140 
141  }
142 }
143 
145  // bool overlap = false;
146 
147  // Trigger
150  if (!ev.getByToken(trigToken_, triggerResults)) {
151  LogWarning("") << ">>> TRIGGER collection does not exist !!!";
152  return;
153  }
154  // trigNames.init(*triggerResults);
155  trigNames_ = &ev.triggerNames(*triggerResults);
156  //bool trigger_fired = false;
157  for (unsigned int i=0; i<triggerResults->size(); i++) {
158 
159 
160  std::string trigName = trigNames_->triggerName(i);
161  if ( trigName == hltPath_ && triggerResults->accept(i)) {
162  //trigger_fired = true;
163  }
164  }
165  edm::Handle< trigger::TriggerEvent > handleTriggerEvent;
166  // LogTrace("") << ">>> Trigger bit: " << trigger_fired << " (" << hltPath_ << ")";
167  if ( ! ev.getByToken( trigEvToken_, handleTriggerEvent )) {
168  LogWarning( "errorTriggerEventValid" ) << "trigger::TriggerEvent product with InputTag " << trigEvTag_.encode() << " not in event";
169  return;
170  }
171  const trigger::TriggerObjectCollection & toc(handleTriggerEvent->getObjects());
172  size_t nMuHLT =0;
173  std::vector<reco::Particle> HLTMuMatched;
174  for ( size_t ia = 0; ia < handleTriggerEvent->sizeFilters(); ++ ia) {
175  std::string fullname = handleTriggerEvent->filterTag(ia).encode();
177  size_t p = fullname.find_first_of(':');
178  if ( p != std::string::npos) {
179  name = fullname.substr(0, p);
180  }
181  else {
182  name = fullname;
183  }
184  if ( !toc.empty() ) {
185  const trigger::Keys & k = handleTriggerEvent->filterKeys(ia);
186  for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
187  if (name == L3FilterName_ ) {
188  HLTMuMatched.push_back(toc[*ki].particle());
189  nMuHLT++;
190  }
191  }
192  }
193  }
194 
195  // looping on muon....
197  if (!ev.getByToken(muonToken_, muons)) {
198  LogError("") << ">>> muon collection does not exist !!!";
199  return;
200  }
201  //saving only muons with pt> ptMuCut and eta<etaMuCut
202  std::vector<reco::Muon> highPtGlbMuons;
203 
204  for (unsigned int i=0; i<muons->size(); i++ ){
205  const reco::Muon & mu = muons->at(i);
206  double pt = mu.pt();
207  double eta = mu.eta();
208  if (pt> ptMuCut_ && fabs(eta)< etaMuCut_) {
209  if (mu.isGlobalMuon()) highPtGlbMuons.push_back(mu);
210  }
211  }
212  unsigned int nHighPtGlbMu = highPtGlbMuons.size();
213  std::cout << "I've got " << nHighPtGlbMu << " nHighPtGlbMu" << std::endl;
214  // unsigned int nHighPtStaMu = highPtStaMuons.size();
215  // stop the loop after 10 cicles....
216  if (nHighPtGlbMu> 10) nHighPtGlbMu=10;
217 
218  for(unsigned int i =0 ; i < nHighPtGlbMu ; i++) {
219  IsMuMatchedToHLTMu ( highPtGlbMuons[i], HLTMuMatched ,maxDeltaR_, maxDPtRel_ );
220  }
221 
222 }
223 
224 
226 
228 
229 
230 
231 
232 
233 
234 
235 
236 
237 
238 
239 
bool IsMuMatchedToHLTMu(const reco::Muon &, std::vector< reco::Particle > &, double, double)
edm::EDGetTokenT< View< Muon > > muonToken_
double eta() const final
momentum pseudorapidity
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:135
virtual example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
edm::Handle< trigger::TriggerEvent > handleTriggerEvent_
bool accept() const
Has at least one path accepted the event?
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:111
double deltaR_
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
double pt() const final
transverse momentum
edm::TriggerNames const * trigNames_
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
void analyze(const edm::Event &event, const edm::EventSetup &setup) override
bool ev
edm::Handle< edm::TriggerResults > triggerResults_
std::string encode() const
Definition: InputTag.cc:166
edm::EDGetTokenT< TriggerResults > trigToken_
Definition: Muon.py:1
void endJob() override
bool isGlobalMuon() const override
Definition: Muon.h:272
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:98
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
unsigned int size() const
Get number of paths stored.
const int mu
Definition: Constants.h:22
static std::string const triggerResults
Definition: EdmProvDump.cc:41
int k[5][pyjets_maxn]
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:74
MuTriggerAnalyzer(const edm::ParameterSet &pset)
const edm::InputTag filterTag(trigger::size_type index) const
Definition: TriggerEvent.h:103
edm::InputTag trigEvTag_
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:27
std::vector< size_type > Keys
fixed size matrix
HLT enums.
bool IsMuMatchedToHLTMu(const reco::Candidate *dau, std::vector< reco::Particle > HLTMu, double DR, double DPtRel)
std::string L3FilterName_
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
Definition: Event.cc:301
Definition: event.py:1
edm::EDGetTokenT< trigger::TriggerEvent > trigEvToken_