CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HiggsDQM.cc
Go to the documentation of this file.
2 
3 #include <memory>
4 
5 // Framework
14 
15 // Candidate handling
27 
30 
31 //#include "HiggsAnalysis/HiggsToZZ4Leptons/plugins/HZZ4LeptonsElectronAssociationMap.h"
32 //#include "HiggsAnalysis/HiggsToZZ4Leptons/plugins/HZZ4LeptonsMuonAssociationMap.h"
33 
34 // vertexing
35 // Transient tracks
43 
44 // Vertex utilities
47 
48 // Geometry
56 
62 
63 
64 // RECO
65 // Isolation
66 //#include "HiggsAnalysis/HiggsToZZ4Leptons/plugins/CandidateHadIsolation.h"
67 //#include "HiggsAnalysis/HiggsToZZ4Leptons/plugins/CandidateTkIsolation.h"
77 
78 //MET
86 
88 #include "TLorentzVector.h"
89 
90 #include <iostream>
91 #include <iomanip>
92 #include <stdio.h>
93 #include <string>
94 #include <sstream>
95 #include <math.h>
96 
97 using namespace edm;
98 using namespace std;
99 using namespace reco;
100 
102  bool operator()( const Candidate &c1, const Candidate &c2) const {
103  return c1.pt() > c2.pt();
104  }
105 };
106 
107 
108 double HiggsDQM::Distance( const reco::Candidate & c1, const reco::Candidate & c2 ) {
109  return deltaR(c1,c2);
110 }
111 
113  return deltaPhi(c1.p4().phi(),c2.p4().phi());
114 }
115 
116 // This always returns only a positive deltaPhi
117 double HiggsDQM::calcDeltaPhi(double phi1, double phi2) {
118  double deltaPhi = phi1 - phi2;
119  if (deltaPhi < 0) deltaPhi = -deltaPhi;
120  if (deltaPhi > 3.1415926) {
121  deltaPhi = 2 * 3.1415926 - deltaPhi;
122  }
123  return deltaPhi;
124 }
125 
126 //
127 // -- Constructor
128 //
130  //cout<<"Entering HiggsDQM::HiggsDQM: "<<endl;
131 
132  edm::LogInfo("HZZ4LeptonsDQM") << " Creating HZZ4LeptonsDQM " << "\n" ;
133 
134  bei_ = Service<DQMStore>().operator->();
135  bei_->setCurrentFolder("Physics/Higgs");
136  bookHistos(bei_);
137 
138  typedef std::vector<edm::InputTag> vtag;
139  // Get parameters from configuration file
140  theElecTriggerPathToPass = ps.getParameter<string>("elecTriggerPathToPass");
141  theMuonTriggerPathToPass = ps.getParameter<string>("muonTriggerPathToPass");
142  theTriggerResultsCollection = ps.getParameter<InputTag>("triggerResultsCollection");
143  theMuonCollectionLabel = ps.getParameter<InputTag>("muonCollection");
144  theElectronCollectionLabel = ps.getParameter<InputTag>("electronCollection");
145  theCaloJetCollectionLabel = ps.getParameter<InputTag>("caloJetCollection");
146  theCaloMETCollectionLabel = ps.getParameter<InputTag>("caloMETCollection");
147  thePfMETCollectionLabel = ps.getParameter<InputTag>("pfMETCollection");
148  // just to initialize
149  isValidHltConfig_ = false;
150  // cuts:
151  ptThrMu1_ = ps.getUntrackedParameter<double>("PtThrMu1");
152  ptThrMu2_ = ps.getUntrackedParameter<double>("PtThrMu2");
153 
154 
155 
156  //cout<<"...leaving HiggsDQM::HiggsDQM. "<<endl;
157 }
158 //
159 // -- Destructor
160 //
162  //cout<<"Entering HiggsDQM::~HiggsDQM: "<<endl;
163 
164  edm::LogInfo("HiggsDQM") << " Deleting HiggsDQM " << "\n" ;
165 
166  //cout<<"...leaving HiggsDQM::~HiggsDQM. "<<endl;
167 }
168 //
169 // -- Begin Job
170 //
172  //cout<<"Entering HiggsDQM::beginJob: "<<endl;
173 
174  nLumiSecs_ = 0;
175  nEvents_ = 0;
176  pi = 3.14159265;
177 
178 
179  //cout<<"...leaving HiggsDQM::beginJob. "<<endl;
180 }
181 //
182 // -- Begin Run
183 //
184 void HiggsDQM::beginRun(Run const& run, edm::EventSetup const& eSetup) {
185  edm::LogInfo ("HiggsDQM") <<"[HiggsDQM]: Begining of Run";
186  // passed as parameter to HLTConfigProvider::init(), not yet used
187  bool isConfigChanged = false;
188 
189  // isValidHltConfig_ used to short-circuit analyze() in case of problems
190  // const std::string hltProcessName( "HLT" );
191  const std::string hltProcessName = theTriggerResultsCollection.process();
192  isValidHltConfig_ = hltConfigProvider_.init( run, eSetup, hltProcessName, isConfigChanged );
193 
194 }
195 //
196 // -- Begin Luminosity Block
197 //
199  edm::EventSetup const& context) {
200  //cout<<"Entering HiggsDQM::beginLuminosityBlock: "<<endl;
201 
202  edm::LogInfo ("HiggsDQM") <<"[HiggsDQM]: Begin of LS transition";
203 
204  //cout<<"...leaving HiggsDQM::beginLuminosityBlock. "<<endl;
205 }
206 //
207 // -- Book histograms
208 //
210  bei->cd();
211  bei->setCurrentFolder("Physics/Higgs");
212  h_vertex_number = bei->book1D("h_vertex_number", "Number of event vertices in collection", 10,-0.5, 9.5 );
213  h_vertex_chi2 = bei->book1D("h_vertex_chi2" , "Event Vertex #chi^{2}/n.d.o.f." , 100, 0.0, 2.0 );
214  h_vertex_numTrks = bei->book1D("h_vertex_numTrks", "Event Vertex, number of tracks" , 100, -0.5, 99.5 );
215  h_vertex_sumTrks = bei->book1D("h_vertex_sumTrks", "Event Vertex, sum of track pt" , 100, 0.0, 100.0 );
216  h_vertex_d0 = bei->book1D("h_vertex_d0" , "Event Vertex d0" , 100, -10.0, 10.0);
217  h_jet_et = bei->book1D("h_jet_et", "Jet with highest E_{T} (from "+theCaloJetCollectionLabel.label()+");E_{T}(1^{st} jet) (GeV)", 20, 0., 200.0);
218  h_jet2_et = bei->book1D("h_jet2_et", "Jet with 2^{nd} highest E_{T} (from "+theCaloJetCollectionLabel.label()+");E_{T}(2^{nd} jet) (GeV)", 20, 0., 200.0);
219  h_jet_count = bei->book1D("h_jet_count", "Number of "+theCaloJetCollectionLabel.label()+" (E_{T} > 15 GeV);Number of Jets", 8, -0.5, 7.5);
220  h_caloMet = bei->book1D("h_caloMet", "Calo Missing E_{T}; GeV" , 20, 0.0 , 100);
221  h_caloMet_phi = bei->book1D("h_caloMet_phi", "Calo Missing E_{T} #phi;#phi(MET)", 35, -3.5, 3.5 );
222  h_pfMet = bei->book1D("h_pfMet", "Pf Missing E_{T}; GeV" , 20, 0.0 , 100);
223  h_pfMet_phi = bei->book1D("h_pfMet_phi", "Pf Missing E_{T} #phi;#phi(MET)", 35, -3.5, 3.5 );
224  h_eMultiplicity = bei_->book1D("NElectrons","# of electrons per event",10,0.,10.);
225  h_mMultiplicity = bei_->book1D("NMuons","# of muons per event",10,0.,10.);
226  h_ePt = bei_->book1D("ElePt","Pt of electrons",50,0.,100.);
227  h_eEta = bei_->book1D("EleEta","Eta of electrons",100,-5.,5.);
228  h_ePhi = bei_->book1D("ElePhi","Phi of electrons",100,-3.5,3.5);
229  h_mPt_GMTM = bei_->book1D("MuonPt_GMTM","Pt of global+tracker muons",50,0.,100.);
230  h_mEta_GMTM = bei_->book1D("MuonEta_GMTM","Eta of global+tracker muons",60,-3.,3.);
231  h_mPhi_GMTM = bei_->book1D("MuonPhi_GMTM","Phi of global+tracker muons",70,-3.5,3.5);
232  h_mPt_GMPT = bei_->book1D("MuonPt_GMPT","Pt of global prompt-tight muons",50,0.,100.);
233  h_mEta_GMPT = bei_->book1D("MuonEta_GMPT","Eta of global prompt-tight muons",60,-3.,3.);
234  h_mPhi_GMPT = bei_->book1D("MuonPhi_GMPT","Phi of global prompt-tight muons",70,-3.5,3.5);
235  h_mPt_GM = bei_->book1D("MuonPt_GM","Pt of global muons",50,0.,100.);
236  h_mEta_GM = bei_->book1D("MuonEta_GM","Eta of global muons",60,-3.,3.);
237  h_mPhi_GM = bei_->book1D("MuonPhi_GM","Phi of global muons",70,-3.5,3.5);
238  h_mPt_TM = bei_->book1D("MuonPt_TM","Pt of tracker muons",50,0.,100.);
239  h_mEta_TM = bei_->book1D("MuonEta_TM","Eta of tracker muons",60,-3.,3.);
240  h_mPhi_TM = bei_->book1D("MuonPhi_TM","Phi of tracker muons",70,-3.5,3.5);
241  h_mPt_STAM = bei_->book1D("MuonPt_STAM","Pt of STA muons",50,0.,100.);
242  h_mEta_STAM = bei_->book1D("MuonEta_STAM","Eta of STA muons",60,-3.,3.);
243  h_mPhi_STAM = bei_->book1D("MuonPhi_STAM","Phi of STA muons",70,-3.5,3.5);
244  h_eCombIso = bei_->book1D("EleCombIso","CombIso of electrons",100,0.,10.);
245  h_mCombIso = bei_->book1D("MuonCombIso","CombIso of muons",100,0.,10.);
246  h_dimumass_GMGM = bei->book1D("DimuMass_GMGM","Invariant mass of GMGM pairs",100,0.,200.);
247  h_dimumass_GMTM = bei->book1D("DimuMass_GMTM","Invariant mass of GMTM pairs",100,0.,200.);
248  h_dimumass_TMTM = bei->book1D("DimuMass_TMTM","Invariant mass of TMTM pairs",100,0.,200.);
249  h_dielemass = bei->book1D("DieleMass","Invariant mass of EE pairs",100,0.,200.);
250  h_lepcounts = bei->book1D("LeptonCounts","LeptonCounts for multi lepton events",49,0.,49.);
251 
252  bei->cd();
253 
254 }
255 //
256 // -- Analyze
257 //
258 void HiggsDQM::analyze(const edm::Event& e, const edm::EventSetup& eSetup){
259  //cout<<"[HiggsDQM::analyze()] "<<endl;
260 
261 //-------------------------------
262 //--- Trigger Info
263 //-------------------------------
264  // short-circuit if hlt problems
265  if( ! isValidHltConfig_ ) return;
266  // Did it pass certain HLT path?
267  Handle<TriggerResults> HLTresults;
268  e.getByLabel(theTriggerResultsCollection, HLTresults);
269  if ( !HLTresults.isValid() ) return;
270  //unsigned int triggerIndex_elec = hltConfig.triggerIndex(theElecTriggerPathToPass);
271  //unsigned int triggerIndex_muon = hltConfig.triggerIndex(theMuonTriggerPathToPass);
272  bool passed_electron_HLT = true;
273  bool passed_muon_HLT = true;
274  //if (triggerIndex_elec < HLTresults->size()) passed_electron_HLT = HLTresults->accept(triggerIndex_elec);
275  //if (triggerIndex_muon < HLTresults->size()) passed_muon_HLT = HLTresults->accept(triggerIndex_muon);
276  //if ( !(passed_electron_HLT || passed_muon_HLT) ) return;
277 
278 //-------------------------------
279 //--- Vertex Info
280 //-------------------------------
281  Handle<VertexCollection> vertexHandle;
282  e.getByLabel("offlinePrimaryVertices", vertexHandle);
283  if ( vertexHandle.isValid() ){
284  VertexCollection vertexCollection = *(vertexHandle.product());
285  int vertex_number = vertexCollection.size();
286  VertexCollection::const_iterator v = vertexCollection.begin();
287  double vertex_chi2 = v->normalizedChi2(); //v->chi2();
288  double vertex_d0 = sqrt(v->x()*v->x()+v->y()*v->y());
289  //double vertex_ndof = v->ndof();cout << "ndof="<<vertex_ndof<<endl;
290  double vertex_numTrks = v->tracksSize();
291  double vertex_sumTrks = 0.0;
292  for (Vertex::trackRef_iterator vertex_curTrack = v->tracks_begin(); vertex_curTrack!=v->tracks_end(); vertex_curTrack++) {
293  vertex_sumTrks += (*vertex_curTrack)->pt();
294  }
295  h_vertex_number->Fill(vertex_number);
296  h_vertex_chi2->Fill(vertex_chi2);
297  h_vertex_d0 ->Fill(vertex_d0);
298  h_vertex_numTrks->Fill(vertex_numTrks);
299  h_vertex_sumTrks->Fill(vertex_sumTrks);
300  }
301 
302 //-------------------------------
303 //--- Electrons
304 //-------------------------------
305  float nEle=0;
306  Handle<GsfElectronCollection> electronCollection;
307  e.getByLabel(theElectronCollectionLabel, electronCollection);
308  if ( electronCollection.isValid() ){
309  int posEle=0,negEle=0;
310  // If it passed electron HLT and the collection was found, find electrons near Z mass
311  if( passed_electron_HLT ) {
312  for (reco::GsfElectronCollection::const_iterator recoElectron=electronCollection->begin(); recoElectron!=electronCollection->end(); recoElectron++){
313 // cout << "Electron with pt= " << recoElectron->pt() << " and eta" << recoElectron->eta() << " p=" << recoElectron->p() << endl;
314  h_ePt->Fill(recoElectron->pt());
315  h_eEta->Fill(recoElectron->eta());
316  h_ePhi->Fill(recoElectron->phi());
317  if(recoElectron->charge()==1){
318  posEle++;
319  }else if(recoElectron->charge()==-1){
320  negEle++;
321  }
322  // Require electron to pass some basic cuts
323  //if ( recoElectron->et() < 20 || fabs(recoElectron->eta())>2.5 ) continue;
324  // Tighter electron cuts
325  //if ( recoElectron->deltaPhiSuperClusterTrackAtVtx() > 0.58 ||
326  // recoElectron->deltaEtaSuperClusterTrackAtVtx() > 0.01 ||
327  // recoElectron->sigmaIetaIeta() > 0.027 ) continue;
328  } // end of loop over electrons
329  } // end if passed HLT
330  nEle = posEle+negEle; if(nEle>9.) nEle=9.;
331  h_eMultiplicity->Fill(nEle);
332 
333  // Z->ee:
334  unsigned int eleCollectionSize = electronCollection->size();
335  for(unsigned int i=0; i<eleCollectionSize; i++) {
336  const GsfElectron& ele = electronCollection->at(i);
337  double pt = ele.pt();
338  if(pt>ptThrMu1_){
339  for(unsigned int j=i+1; j<eleCollectionSize; j++) {
340  const GsfElectron& ele2 = electronCollection->at(j);
341  double pt2 = ele2.pt();
342  if(pt2>ptThrMu2_){
343  const math::XYZTLorentzVector ZRecoEE (ele.px()+ele2.px(), ele.py()+ele2.py() , ele.pz()+ele2.pz(), ele.p()+ele2.p());
344  h_dielemass->Fill(ZRecoEE.mass());
345  }
346  }
347  }
348  }
349  }
350 
351 
352 
353 //-------------------------------
354 //--- Muons
355 //-------------------------------
356  float nMu=0;
357  Handle<MuonCollection> muonCollection;
358  e.getByLabel(theMuonCollectionLabel,muonCollection);
359  if ( muonCollection.isValid() ){
360  // Find the highest pt muons
361  int posMu=0,negMu=0;
362  TLorentzVector m1, m2;
363  if( passed_muon_HLT ) {
364  for (reco::MuonCollection::const_iterator recoMuon=muonCollection->begin(); recoMuon!=muonCollection->end(); recoMuon++){
365  //cout << "Muon with pt= " << muIter->pt() << " and eta" << muIter->eta() << " p=" << muIter->p() << endl;
366  if(recoMuon->isGlobalMuon()&&recoMuon->isTrackerMuon()){
367  h_mPt_GMTM->Fill(recoMuon->pt());
368  h_mEta_GMTM->Fill(recoMuon->eta());
369  h_mPhi_GMTM->Fill(recoMuon->phi());
370  }else if(recoMuon->isGlobalMuon()&&(muon::isGoodMuon( (*recoMuon),muon::GlobalMuonPromptTight))){
371  h_mPt_GMPT->Fill(recoMuon->pt());
372  h_mEta_GMPT->Fill(recoMuon->eta());
373  h_mPhi_GMPT->Fill(recoMuon->phi());
374  }else if(recoMuon->isGlobalMuon()){
375  h_mPt_GM->Fill(recoMuon->pt());
376  h_mEta_GM->Fill(recoMuon->eta());
377  h_mPhi_GM->Fill(recoMuon->phi());
378  }else if(recoMuon->isTrackerMuon()&&(muon::segmentCompatibility((*recoMuon),reco::Muon::SegmentAndTrackArbitration))){
379  h_mPt_TM->Fill(recoMuon->pt());
380  h_mEta_TM->Fill(recoMuon->eta());
381  h_mPhi_TM->Fill(recoMuon->phi());
382  }else if(recoMuon->isStandAloneMuon()){
383  h_mPt_STAM->Fill(recoMuon->pt());
384  h_mEta_STAM->Fill(recoMuon->eta());
385  h_mPhi_STAM->Fill(recoMuon->phi());
386  }
387  if ( recoMuon->charge()==1 ){
388  posMu++;
389  }else if ( recoMuon->charge()==-1 ){
390  negMu++;
391  }
392  }
393  nMu = posMu+negMu; if(nMu>9.) nMu=9.;
394  h_mMultiplicity->Fill(nMu);
395  }
396 
397  // Z->mumu:
398  unsigned int muonCollectionSize = muonCollection->size();
399  for(unsigned int i=0; i<muonCollectionSize; i++) {
400  const Muon& mu = muonCollection->at(i);
401  //if (!mu.isGlobalMuon()) continue;
402  double pt = mu.pt();
403  if(pt>ptThrMu1_){
404  for(unsigned int j=i+1; j<muonCollectionSize; j++) {
405  const Muon& mu2 = muonCollection->at(j);
406  double pt2 = mu2.pt();
407  if(pt2>ptThrMu2_){
408  // Glb + Glb
409  if(mu.isGlobalMuon() && mu2.isGlobalMuon()){
410  const math::XYZTLorentzVector ZRecoGMGM (mu.px()+mu2.px(), mu.py()+mu2.py() , mu.pz()+mu2.pz(), mu.p()+mu2.p());
411  h_dimumass_GMGM->Fill(ZRecoGMGM.mass());
412  }
413  // Glb + TM
414  else if(mu.isGlobalMuon() && mu2.isTrackerMuon()){
415  const math::XYZTLorentzVector ZRecoGMTM (mu.px()+mu2.px(), mu.py()+mu2.py() , mu.pz()+mu2.pz(), mu.p()+mu2.p());
416  h_dimumass_GMTM->Fill(ZRecoGMTM.mass());
417  }
418  // TM + TM
419  else if(mu.isTrackerMuon() && mu2.isTrackerMuon()){
420  const math::XYZTLorentzVector ZRecoTMTM (mu.px()+mu2.px(), mu.py()+mu2.py() , mu.pz()+mu2.pz(), mu.p()+mu2.p());
421  h_dimumass_TMTM->Fill(ZRecoTMTM.mass());
422  }
423  }
424  }
425  }
426  }
427  }
428 
429 //-------------------------------
430 //--- Jets
431 //-------------------------------
432  Handle<CaloJetCollection> caloJetCollection;
433  e.getByLabel (theCaloJetCollectionLabel,caloJetCollection);
434  if ( caloJetCollection.isValid() ){
435  float jet_et = -8.0;
436  // float jet_eta = -8.0; // UNUSED
437  // float jet_phi = -8.0; // UNUSED
438  int jet_count = 0;
439  float jet2_et = -9.0;
440  // float jet2_eta = -9.0; // UNUSED
441  // float jet2_phi = -9.0; // UNUSED
442  for (CaloJetCollection::const_iterator i_calojet = caloJetCollection->begin(); i_calojet != caloJetCollection->end(); i_calojet++) {
443  float jet_current_et = i_calojet->et();
444  // if it overlaps with electron, it is not a jet
445  //if ( electron_et>0.0 && fabs(i_calojet->eta()-electron_eta ) < 0.2 && calcDeltaPhi(i_calojet->phi(), electron_phi ) < 0.2) continue;
446  //if ( electron2_et>0.0&& fabs(i_calojet->eta()-electron2_eta) < 0.2 && calcDeltaPhi(i_calojet->phi(), electron2_phi) < 0.2) continue;
447  // if it has too low Et, throw away
448  if (jet_current_et < 15) continue;
449  jet_count++;
450  if (jet_current_et > jet_et) {
451  jet2_et = jet_et; // 2nd highest jet get's et from current highest
452  // jet2_eta = jet_eta; // UNUSED
453  // jet2_phi = jet_phi; // UNUSED
454  jet_et = i_calojet->et(); // current highest jet gets et from the new highest
455  // jet_eta = i_calojet->eta(); // UNUSED
456  // jet_phi = i_calojet->phi(); // UNUSED
457  } else if (jet_current_et > jet2_et) {
458  jet2_et = i_calojet->et();
459  // jet2_eta = i_calojet->eta(); // UNUSED
460  // jet2_phi = i_calojet->phi(); // UNUSED
461  }
462  }
463  if (jet_et>0.0) {
464  h_jet_et ->Fill(jet_et);
465  h_jet_count->Fill(jet_count);
466  }
467  }
468 
469 //-------------------------------
470 //--- MET
471 //-------------------------------
472  Handle<CaloMETCollection> caloMETCollection;
473  e.getByLabel(theCaloMETCollectionLabel, caloMETCollection);
474  if ( caloMETCollection.isValid() ){
475  float caloMet = caloMETCollection->begin()->et();
476  float caloMet_phi = caloMETCollection->begin()->phi();
477  h_caloMet ->Fill(caloMet);
478  h_caloMet_phi ->Fill(caloMet_phi);
479  }
480  Handle<PFMETCollection> pfMETCollection;
481  e.getByLabel(thePfMETCollectionLabel, pfMETCollection);
482  if ( pfMETCollection.isValid() ){
483  float pfMet = pfMETCollection->begin()->et();
484  float pfMet_phi = pfMETCollection->begin()->phi();
485  h_pfMet ->Fill(pfMet);
486  h_pfMet_phi ->Fill(pfMet_phi);
487  }
488 
489 //-------------------------------------
490 //--- Events with more than 2 leptons:
491 //-------------------------------------
492  if(nMu+nEle > 2 && nMu+nEle < 10){
493  if(nMu==0 && nEle==3) h_lepcounts->Fill(0);
494  if(nMu==0 && nEle==4) h_lepcounts->Fill(1);
495  if(nMu==0 && nEle==5) h_lepcounts->Fill(2);
496  if(nMu==0 && nEle==6) h_lepcounts->Fill(3);
497  if(nMu==0 && nEle==7) h_lepcounts->Fill(4);
498  if(nMu==0 && nEle==8) h_lepcounts->Fill(5);
499  if(nMu==0 && nEle==9) h_lepcounts->Fill(6);
500  if(nMu==1 && nEle==2) h_lepcounts->Fill(7);
501  if(nMu==1 && nEle==3) h_lepcounts->Fill(8);
502  if(nMu==1 && nEle==4) h_lepcounts->Fill(9);
503  if(nMu==1 && nEle==5) h_lepcounts->Fill(10);
504  if(nMu==1 && nEle==6) h_lepcounts->Fill(11);
505  if(nMu==1 && nEle==7) h_lepcounts->Fill(12);
506  if(nMu==1 && nEle==8) h_lepcounts->Fill(13);
507  if(nMu==2 && nEle==1) h_lepcounts->Fill(14);
508  if(nMu==2 && nEle==2) h_lepcounts->Fill(15);
509  if(nMu==2 && nEle==3) h_lepcounts->Fill(16);
510  if(nMu==2 && nEle==4) h_lepcounts->Fill(17);
511  if(nMu==2 && nEle==5) h_lepcounts->Fill(18);
512  if(nMu==2 && nEle==6) h_lepcounts->Fill(19);
513  if(nMu==2 && nEle==7) h_lepcounts->Fill(20);
514  if(nMu==3 && nEle==0) h_lepcounts->Fill(21);
515  if(nMu==3 && nEle==1) h_lepcounts->Fill(22);
516  if(nMu==3 && nEle==2) h_lepcounts->Fill(23);
517  if(nMu==3 && nEle==3) h_lepcounts->Fill(24);
518  if(nMu==3 && nEle==4) h_lepcounts->Fill(25);
519  if(nMu==3 && nEle==5) h_lepcounts->Fill(26);
520  if(nMu==3 && nEle==6) h_lepcounts->Fill(27);
521  if(nMu==4 && nEle==0) h_lepcounts->Fill(28);
522  if(nMu==4 && nEle==1) h_lepcounts->Fill(29);
523  if(nMu==4 && nEle==2) h_lepcounts->Fill(30);
524  if(nMu==4 && nEle==3) h_lepcounts->Fill(31);
525  if(nMu==4 && nEle==4) h_lepcounts->Fill(32);
526  if(nMu==4 && nEle==5) h_lepcounts->Fill(33);
527  if(nMu==5 && nEle==0) h_lepcounts->Fill(34);
528  if(nMu==5 && nEle==1) h_lepcounts->Fill(35);
529  if(nMu==5 && nEle==2) h_lepcounts->Fill(36);
530  if(nMu==5 && nEle==3) h_lepcounts->Fill(37);
531  if(nMu==5 && nEle==4) h_lepcounts->Fill(38);
532  if(nMu==6 && nEle==0) h_lepcounts->Fill(39);
533  if(nMu==6 && nEle==1) h_lepcounts->Fill(40);
534  if(nMu==6 && nEle==2) h_lepcounts->Fill(41);
535  if(nMu==6 && nEle==3) h_lepcounts->Fill(42);
536  if(nMu==7 && nEle==0) h_lepcounts->Fill(43);
537  if(nMu==7 && nEle==1) h_lepcounts->Fill(44);
538  if(nMu==7 && nEle==2) h_lepcounts->Fill(45);
539  if(nMu==8 && nEle==0) h_lepcounts->Fill(46);
540  if(nMu==8 && nEle==1) h_lepcounts->Fill(47);
541  if(nMu==9 && nEle==0) h_lepcounts->Fill(48);
542 
543 
544  }
545  if ((nMu+nEle) >= 10)
546  LogDebug("HiggsDQM") <<"WARNING: "<<nMu+nEle<<" leptons in this event: run="<<e.id().run()<<", event="<<e.id().event()<< "\n";
547 // std::cout <<"WARNING: "<<nMu+nEle<<" leptons in this event: run="<<e.id().run()<<", event="<<e.id().event()<< "\n";
548 
549 /* /// channel conditions
550  nElectron=0;
551  nMuon=0;
552  if (decaychannel=="2e2mu") {
553  if ( posEle>=1 && negEle>=1 ) {
554  nElectron=posEle+negEle;
555  }
556  if ( posMu>=1 && negMu>=1 ) {
557  nMuon=posMu+negMu;
558  }
559  }
560  else if (decaychannel=="4e") {
561  if ( posEle>=2 && negEle>=2 ) {
562  nElectron=posEle+negEle;
563  }
564  }
565  else if (decaychannel=="4mu") {
566  if ( posMu>=2 && negMu>=2 ) {
567  nMuon=posMu+negMu;
568  }
569  }
570 
571 
572  // Pairs of EE MuMu
573  int nZEE=0,nZMuMu=0;
574  if (decaychannel=="2e2mu"){
575  Handle<CompositeCandidateCollection> zEECandidates;
576  e.getByLabel(zToEETag_.label(), zEECandidates);
577  for ( CompositeCandidateCollection::const_iterator zIter=zEECandidates->begin(); zIter!= zEECandidates->end(); ++zIter ) {
578 // cout << "Zee mass= " << double(zIter->p4().mass()) << endl;
579  if ( double(zIter->p4().mass())> 12. ){
580  nZEE++;
581  }
582  }
583  Handle<CompositeCandidateCollection> zMuMuCandidates;
584  e.getByLabel(zToMuMuTag_.label(), zMuMuCandidates);
585  for ( CompositeCandidateCollection::const_iterator zIter=zMuMuCandidates->begin(); zIter!= zMuMuCandidates->end(); ++zIter ) {
586 // cout << "Zmumu mass= " << double(zIter->p4().mass()) << endl;
587  if ( zIter->p4().mass()> 12. ){
588  nZMuMu++;
589  }
590  }
591  }
592 
593  // exclusive couples ZEE and ZMUMU
594  if (decaychannel=="4e" ){
595  Handle<CompositeCandidateCollection> higgsCandidates;
596  e.getByLabel(hTozzTo4leptonsTag_.label(), higgsCandidates);
597  for ( CompositeCandidateCollection::const_iterator hIter=higgsCandidates->begin(); hIter!= higgsCandidates->end(); ++hIter ) {
598  if (nZEE<2) nZEE=0;
599  for (size_t ndau=0; ndau<hIter->numberOfDaughters();ndau++){
600  if ( hIter->daughter(ndau)->p4().mass()> 12.){
601  nZEE++;
602  }
603  }
604  }
605  }
606  //
607  if (decaychannel=="4mu" ){
608  Handle<CompositeCandidateCollection> higgsCandidates;
609  e.getByLabel(hTozzTo4leptonsTag_.label(), higgsCandidates);
610  for ( CompositeCandidateCollection::const_iterator hIter=higgsCandidates->begin(); hIter!= higgsCandidates->end(); ++hIter ) {
611  if (nZMuMu<2) nZMuMu=0;
612  for (size_t ndau=0; ndau<hIter->numberOfDaughters();ndau++){
613  if ( hIter->daughter(ndau)->p4().mass()> 12. ){
614  nZMuMu++;
615  }
616  }
617  }
618  }
619 
620  // 4 lepton combinations
621  Handle<CompositeCandidateCollection> higgsCandidates;
622  e.getByLabel(hTozzTo4leptonsTag_.label(), higgsCandidates);
623  int nHiggs=0;
624  for ( CompositeCandidateCollection::const_iterator hIter=higgsCandidates->begin(); hIter!= higgsCandidates->end(); ++hIter ) {
625  if ( hIter->p4().mass()> 100. ){
626  nHiggs++;
627  }
628  }
629 */
630 // cout<<"Z and Higgs candidates: "<<nZEE<<" "<<nZMuMu<<" "<<nHiggs<<endl;
631 
632  //cout<<"[leaving HiggsDQM::analyze()] "<<endl;
633 
634 }
635 //
636 // -- End Luminosity Block
637 //
639 // cout<<"Entering HiggsDQM::endLuminosityBlock: "<<endl;
640 
641  edm::LogInfo ("HiggsDQM") <<"[HiggsDQM]: End of LS transition, performing the DQM client operation";
642 
643  nLumiSecs_++;
644  //cout << "nLumiSecs_: "<< nLumiSecs_ << endl;
645 
646  edm::LogInfo("HiggsDQM") << "====================================================== " << endl << " ===> Iteration # " << nLumiSecs_ << " " << lumiSeg.luminosityBlock() << endl << "====================================================== " << endl;
647 
648 // cout<<"...leaving HiggsDQM::endLuminosityBlock. "<<endl;
649 }
650 //
651 // -- End Run
652 //
653 void HiggsDQM::endRun(edm::Run const& run, edm::EventSetup const& eSetup){
654 // cout<<"Entering HiggsDQM::endRun: "<<endl;
655 
656  //edm::LogVerbatim ("HiggsDQM") <<"[HiggsDQM]: End of Run, saving DQM output ";
657  //int iRun = run.run();
658 
659 // cout<<"...leaving HiggsDQM::endRun. "<<endl;
660 }
661 
662 //
663 // -- End Job
664 //
666 // cout<<"In HiggsDQM::endJob "<<endl;
667  edm::LogInfo("HiggsDQM") <<"[HiggsDQM]: endjob called!";
668 
669 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:42
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:44
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
virtual double p() const
magnitude of momentum vector
void beginRun(edm::Run const &run, edm::EventSetup const &eSetup)
Definition: HiggsDQM.cc:184
void endJob()
Definition: HiggsDQM.cc:665
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:717
virtual double pt() const =0
transverse momentum
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:406
bool isTrackerMuon() const
Definition: Muon.h:212
bool isGlobalMuon() const
Definition: Muon.h:211
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
tuple vertexCollection
void beginLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &context)
Definition: HiggsDQM.cc:198
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
Definition: HiggsDQM.cc:653
void bookHistos()
Definition: Histogram.h:33
const Double_t pi
LuminosityBlockNumber_t luminosityBlock() const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:30
T sqrt(T t)
Definition: SSEVec.h:46
tuple pfMet
Definition: PFMET_cfi.py:12
void analyze(edm::Event const &e, edm::EventSetup const &eSetup)
Definition: HiggsDQM.cc:258
int j
Definition: DBlmapReader.cc:9
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
const int mu
Definition: Constants.h:23
void endLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &c)
Definition: HiggsDQM.cc:638
double Distance(const reco::Candidate &c1, const reco::Candidate &c2)
Definition: HiggsDQM.cc:108
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
double calcDeltaPhi(double phi1, double phi2)
Definition: HiggsDQM.cc:117
double DistancePhi(const reco::Candidate &c1, const reco::Candidate &c2)
Definition: HiggsDQM.cc:112
virtual double px() const
x coordinate of momentum vector
virtual double pt() const
transverse momentum
T const * product() const
Definition: Handle.h:74
virtual double pz() const
z coordinate of momentum vector
edm::EventID id() const
Definition: EventBase.h:56
HiggsDQM(const edm::ParameterSet &ps)
Definition: HiggsDQM.cc:129
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector&lt;TrackRef&gt;
Definition: Vertex.h:38
virtual ~HiggsDQM()
Definition: HiggsDQM.cc:161
void bookHistos(DQMStore *bei)
Definition: HiggsDQM.cc:209
bool operator()(const Candidate &c1, const Candidate &c2) const
Definition: HiggsDQM.cc:102
mathSSE::Vec4< T > v
virtual double py() const
y coordinate of momentum vector
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:429
Definition: Run.h:33
void beginJob()
Definition: HiggsDQM.cc:171
virtual const LorentzVector & p4() const =0
four-momentum Lorentz vector