CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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  virtual void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
55  virtual 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 !=0 ) {
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 
216  // stop the loop after 10 cicles....
217  (nHighPtGlbMu> 10)? nHighPtGlbMu=10 : 1;
218 
219  if (nHighPtGlbMu>0 ){
220 
221  for(unsigned int i =0 ; i < nHighPtGlbMu ; i++) {
222  reco::Muon muon1 = highPtGlbMuons[i];
223  math::XYZTLorentzVector mu1(muon1.p4());
224  // double pt1= muon1.pt();
225 
226  /* bool singleTrigFlag1 =*/ IsMuMatchedToHLTMu ( muon1, HLTMuMatched ,maxDeltaR_, maxDPtRel_ );
227 
228  }
229 
230  }
231 
232 }
233 
234 
236 
238 
239 
240 
241 
242 
243 
244 
245 
246 
247 
248 
249 
bool IsMuMatchedToHLTMu(const reco::Muon &, std::vector< reco::Particle > &, double, double)
int i
Definition: DBlmapReader.cc:9
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:199
edm::EDGetTokenT< View< Muon > > muonToken_
tuple cfg
Definition: looper.py:237
virtual float pt() const
transverse momentum
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
edm::Handle< trigger::TriggerEvent > handleTriggerEvent_
bool isGlobalMuon() const
Definition: Muon.h:218
double deltaR_
edm::TriggerNames const * trigNames_
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
virtual void analyze(const edm::Event &event, const edm::EventSetup &setup) override
bool ev
T eta() const
edm::Handle< edm::TriggerResults > triggerResults_
std::string encode() const
Definition: InputTag.cc:164
edm::EDGetTokenT< TriggerResults > trigToken_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
virtual void endJob() override
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
virtual float eta() const
momentum pseudorapidity
const int mu
Definition: Constants.h:22
static std::string const triggerResults
Definition: EdmProvDump.cc:41
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
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)
edm::InputTag trigEvTag_
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:27
std::vector< size_type > Keys
tuple muons
Definition: patZpeak.py:38
tuple cout
Definition: gather_cfg.py:121
bool IsMuMatchedToHLTMu(const reco::Candidate *dau, std::vector< reco::Particle > HLTMu, double DR, double DPtRel)
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
std::string L3FilterName_
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
edm::EDGetTokenT< trigger::TriggerEvent > trigEvToken_