CMS 3D CMS Logo

dimuonHLTFilterCheck.cc
Go to the documentation of this file.
1 /* \class dimuonHLTFilterCheck
2  *
3  * author: Davide Piccolo
4  *
5  * check HLTFilter for dimuon studies:
6  *
7  */
8 
24 
25 // access trigger results
30 
31 #include "TH1.h"
32 #include "TH2.h"
33 #include "TH3.h"
34 #include <vector>
35 #include <map>
36 #include <string>
37 using namespace edm;
38 using namespace std;
39 using namespace reco;
40 using namespace trigger;
41 
43 public:
45 private:
46  void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
47  vector<int> nDimuonsByType(const Handle<CandidateView> d);
48  vector<int> nMuonsByType(const Handle<CandidateView> d);
49  void endJob() override;
54 
55 
56  // general histograms
57 
58  // global counters
59  int counterMatrix[5][5];
60 };
61 
70 #include <iostream>
71 #include <iterator>
72 #include <cmath>
73 
75  // trigger results
76  triggerResultsToken(consumes<TriggerResults>(pset.getParameter<InputTag>("triggerResults"))),
77  tracksToken(consumes<CandidateView>(pset.getParameter<InputTag>("tracks"))),
78  muonToken(consumes<CandidateView>(pset.getParameter<InputTag>("muons"))),
79  anyDimuonToken(consumes<CandidateView>(pset.getParameter<InputTag>("anyDimuon")))
80 {
82 
83 
84 // general histograms
85 
86 // general counters
87  for (int i=0; i<5; i++) {
88  for (int j=0;j<5;j++) {
89  counterMatrix[i][j]=0;
90  }
91  }
92 }
93 
95 
96  Handle<TriggerResults> triggerResults; // trigger response
97  Handle<CandidateView> anyDimuon; // any dimuon pair
98  Handle<CandidateView> tracks; // any track
99  Handle<CandidateView> muons; // any muon
100 
101  event.getByToken( triggerResultsToken, triggerResults );
102  event.getByToken( anyDimuonToken, anyDimuon );
103  event.getByToken( tracksToken, tracks );
104  event.getByToken( muonToken, muons );
105 
106  const edm::TriggerNames & triggerNames = event.triggerNames(*triggerResults);
107 
108  // map of MU triggers of interest
109  map<string,int> dimuonHLT_triggers;
110  dimuonHLT_triggers.insert(make_pair("HLT1MuonPrescalePt3",0));
111  dimuonHLT_triggers.insert(make_pair("HLT1MuonPrescalePt7x7",1));
112  dimuonHLT_triggers.insert(make_pair("HLT1MuonIso",2));
113  dimuonHLT_triggers.insert(make_pair("HLT1MuonNonIso15",3));
114  dimuonHLT_triggers.insert(make_pair("HLT2MuonNonIso",4));
115  // map of JET triggers of interest
116  map<string,int> jetHLT_triggers;
117  jetHLT_triggers.insert(make_pair("HLT1jetPE5",0));
118  jetHLT_triggers.insert(make_pair("HLT1jetPE3",1));
119  jetHLT_triggers.insert(make_pair("HLT1jetPE1",2));
120  jetHLT_triggers.insert(make_pair("candHLT1jetPE7",3));
121 
122  bool trgMask[5];
123  for (int i=0; i<5; i++) trgMask[i] = false;
124 
125  // table of possible dimuons
126  string dimuonTableNames[10];
127  dimuonTableNames[0] = "global-global";
128  dimuonTableNames[1] = "global-trackerSta";
129  dimuonTableNames[2] = "global-sta";
130  dimuonTableNames[3] = "global-tracker";
131  dimuonTableNames[4] = "trackerSta-trackerSta";
132  dimuonTableNames[5] = "trackerSta-sta";
133  dimuonTableNames[6] = "trackerSta-tracker";
134  dimuonTableNames[7] = "sta-sta";
135  dimuonTableNames[8] = "sta-tracker";
136  dimuonTableNames[9] = "tracker-tracker";
137  // table of possible muons
138  string muonTableNames[10];
139  muonTableNames[0] = "global";
140  muonTableNames[1] = "trackerSta";
141  muonTableNames[2] = "sta";
142  muonTableNames[3] = "tracker";
143 
144  cout << "-------------------NEW event---------------------------" << endl;
145  // check the dimuon reconstruction
146  vector<int> dimuonTable;
147  dimuonTable = nDimuonsByType(anyDimuon);
148  // check the muon reconstruction
149  vector<int> muonTable;
150  muonTable = nMuonsByType(muons);
151 
152  if ( triggerResults.product()->wasrun() ){
153  // cout << "at least one path out of " << triggerResults.product()->size() << " ran? " << triggerResults.product()->wasrun() << endl;
154 
155  if ( triggerResults.product()->accept() )
156  {
157  // cout << endl << "at least one path accepted? " << triggerResults.product()->accept() << endl;
158 
159  const unsigned int n_TriggerResults( triggerResults.product()->size() );
160  for ( unsigned int itrig( 0 ); itrig < n_TriggerResults; ++itrig )
161  {
162  if ( triggerResults.product()->accept( itrig ) )
163  {
164  map<string,int>::iterator iterMuHLT = dimuonHLT_triggers.find(triggerNames.triggerName( itrig ));
165  if (iterMuHLT != dimuonHLT_triggers.end()) {
166  cout << "ecco la chiave Mu HLT " << (*iterMuHLT).second << endl;
167  if (triggerResults.product()->state( itrig )==1) trgMask[(*iterMuHLT).second] = true;
168  } // end if key found
169  map<string,int>::iterator iterjetHLT = jetHLT_triggers.find(triggerNames.triggerName( itrig ));
170  if (iterjetHLT != jetHLT_triggers.end()) {
171  cout << "ecco la chiave jet HLT " << (*iterjetHLT).second << endl;
172  } // end if key found
173 
174  } // end if trigger accepted
175  } // end loop on triggerResults
176  } // end if at least one triggerResult accepted
177  } // end if wasRun
178  if ( muonTable[0]>1) {
179  for(unsigned int i = 0; i < muons->size(); ++i) { //loop on candidates
180  const Candidate & muCand = (*muons)[i]; //the candidate
181  CandidateBaseRef muCandRef = muons->refAt(i);
182  TrackRef muStaComponentRef = muCand.get<TrackRef,reco::StandAloneMuonTag>(); // standalone part of muon
183  TrackRef muTrkComponentRef = muCand.get<TrackRef>(); // track part of muon
184  if (muCandRef->isGlobalMuon()) {
185  cout << "muCand : " << i << " pt " << muCandRef->pt() << " eta " << muCandRef->eta() << endl;
186  cout << "muCandStaComponent : " << i << " pt " << muStaComponentRef->pt() << " eta " << muStaComponentRef->eta() << endl;
187  }
188  }
189  }
190 
191  // fill counterMatrix
192  for (int i=0; i<5; i++) {
193  for (int j=0; j<5; j++) {
194  if (trgMask[i] && trgMask[j]) counterMatrix[i][j]++;
195  }
196  }
197 } // end analyze
198 
200  vector<int> n_;
201  int nCat = 10; // number of dimuon categories (0 = glb-glb, 1 = glb-trkSta, 2 = glb-sta, 3 = glb-trk, 4 = trkSta-trkSta, 5 = trkSta-sta, 6 = trkSta-trk, 7 = sta-sta, 8 = sta-trk, 9 trk-trk)
202  // reset vector
203  for (int i=0; i<nCat; i++) n_.push_back(0);
204  for(unsigned int i = 0; i < d->size(); ++i) { //loop on candidates
205  // const Candidate & dCand = (*d)[i]; //the candidate
206  bool mu0global = false;
207  bool mu0trackerSta = false;
208  bool mu0sta = false;
209  bool mu0tracker = false;
210  bool mu1global = false;
211  bool mu1trackerSta = false;
212  bool mu1sta = false;
213  bool mu1tracker = false;
214  CandidateBaseRef dCandRef = d->refAt(i);
215  const Candidate * mu0 = dCandRef->daughter(0);
216  const Candidate * mu1 = dCandRef->daughter(1);
217  if (mu0->isGlobalMuon()) mu0global=true;
218  if (! mu0->isGlobalMuon() && mu0->isStandAloneMuon() && mu0->isTrackerMuon()) mu0trackerSta=true;
219  if (! mu0->isGlobalMuon() && mu0->isStandAloneMuon() && ! mu0->isTrackerMuon()) mu0sta=true;
220  if (! mu0->isGlobalMuon() && ! mu0->isStandAloneMuon() && mu0->isTrackerMuon()) mu0tracker=true;
221  if (mu1->isGlobalMuon()) mu1global=true;
222  if (! mu1->isGlobalMuon() && mu1->isStandAloneMuon() && mu1->isTrackerMuon()) mu1trackerSta=true;
223  if (! mu1->isGlobalMuon() && mu1->isStandAloneMuon() && ! mu1->isTrackerMuon()) mu1sta=true;
224  if (! mu1->isGlobalMuon() && ! mu1->isStandAloneMuon() && mu1->isTrackerMuon()) mu1tracker=true;
225 
226  if (mu0global && mu1global) n_[0]++;
227  if ( (mu0global && mu1trackerSta) || (mu1global && mu0trackerSta) ) n_[1]++;
228  if ( (mu0global && mu1sta) || (mu1global && mu0sta) ) n_[2]++;
229  if ( (mu0global && mu1tracker) || (mu1global && mu0tracker) ) n_[3]++;
230  if (mu0trackerSta && mu1trackerSta) n_[4]++;
231  if ( (mu0trackerSta && mu1sta) || (mu1trackerSta && mu0sta) ) n_[5]++;
232  if ( (mu0trackerSta && mu1tracker) || (mu1trackerSta && mu0tracker) ) n_[6]++;
233  if (mu0sta && mu1sta) n_[7]++;
234  if ( (mu0sta && mu1tracker) || (mu1sta && mu0tracker) ) n_[8]++;
235  if (mu0tracker && mu1tracker) n_[9]++;
236 
237  }
238  return n_;
239 }
240 
242  vector<int> n_;
243  int nCat = 4; // number of muon categories (0 = glb, 1 = trkSta, 2 = sta, 3 = trk)
244  // reset vector
245  for (int i=0; i<nCat; i++) n_.push_back(0);
246  for(unsigned int i = 0; i < d->size(); ++i) { //loop on candidates
247  // const Candidate & dCand = (*d)[i]; //the candidate
248  bool muglobal = false;
249  bool mutrackerSta = false;
250  bool musta = false;
251  bool mutracker = false;
252  CandidateBaseRef muCandRef = d->refAt(i);
253  if (muCandRef->isGlobalMuon()) muglobal=true;
254  if (! muCandRef->isGlobalMuon() && muCandRef->isStandAloneMuon() && muCandRef->isTrackerMuon()) mutrackerSta=true;
255  if (! muCandRef->isGlobalMuon() && muCandRef->isStandAloneMuon() && ! muCandRef->isTrackerMuon()) musta=true;
256  if (! muCandRef->isGlobalMuon() && ! muCandRef->isStandAloneMuon() && muCandRef->isTrackerMuon()) mutracker=true;
257  cout << "muglobal " << muglobal << " mutrackserSta " << mutrackerSta << " must " << musta << " mutracker " << mutracker << endl;
258  if (muglobal) n_[0]++;
259  if (mutrackerSta) n_[1]++;
260  if (musta) n_[2]++;
261  if (mutracker) n_[3]++;
262 
263  }
264  return n_;
265 }
266 
268 
269  cout << "------------------------------------ Counters --------------------------------" << endl;
270  for (int i=0; i<5; i++) {
271  cout << "trg " << i << ": ";
272  for (int j=0; j<5; j++) {
273  cout << counterMatrix[i][j] << " ";
274  }
275  cout << endl;
276  }
277 }
278 
280 
282 
bool wasrun() const
Was at least one path run?
virtual bool isStandAloneMuon() const =0
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
bool accept() const
Has at least one path accepted the event?
stand alone muon component tag
Definition: RecoCandidate.h:78
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:2
size_type size() const
Strings const & triggerNames() const
Definition: TriggerNames.cc:20
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
EDGetTokenT< CandidateView > tracksToken
RefToBase< value_type > refAt(size_type i) const
virtual bool isTrackerMuon() const =0
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
vector< int > nDimuonsByType(const Handle< CandidateView > d)
unsigned int size() const
Get number of paths stored.
static std::string const triggerResults
Definition: EdmProvDump.cc:45
virtual bool isGlobalMuon() const =0
EDGetTokenT< CandidateView > anyDimuonToken
virtual double eta() const =0
momentum pseudorapidity
T const * product() const
Definition: Handle.h:74
virtual double pt() const =0
transverse momentum
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:22
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:21
vector< int > nMuonsByType(const Handle< CandidateView > d)
EDGetTokenT< TriggerResults > triggerResultsToken
fixed size matrix
HLT enums.
void analyze(const edm::Event &event, const edm::EventSetup &setup) override
T get() const
get a component
Definition: Candidate.h:217
dimuonHLTFilterCheck(const edm::ParameterSet &pset)
EDGetTokenT< CandidateView > muonToken
hlt::HLTState state(const unsigned int i) const
Get status of ith path.
Definition: event.py:1