/ElectroWeakAnalysis/ZMuMu/plugins/triggerEfficiency.cc

https://github.com/aivanov-cern/cmssw · C++ · 164 lines · 148 code · 10 blank · 6 comment · 17 complexity · 02c58b1981eddbf44606ed8feb6110da MD5 · raw file

  1. /* \class testAnalyzer
  2. * author: Noli Pasquale
  3. * version 0.1
  4. * TriggerEfficiency module
  5. *
  6. */
  7. #include "FWCore/Framework/interface/EDAnalyzer.h"
  8. #include "FWCore/Utilities/interface/InputTag.h"
  9. #include "FWCore/Framework/interface/Event.h"
  10. #include "DataFormats/Common/interface/Handle.h"
  11. #include "DataFormats/Candidate/interface/Particle.h"
  12. #include "DataFormats/Candidate/interface/Candidate.h"
  13. #include "DataFormats/Candidate/interface/CandMatchMap.h"
  14. #include "DataFormats/PatCandidates/interface/Muon.h"
  15. #include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h"
  16. #include "FWCore/ServiceRegistry/interface/Service.h"
  17. #include "CommonTools/UtilAlgos/interface/TFileService.h"
  18. #include "FWCore/ParameterSet/interface/ParameterSet.h"
  19. #include "DataFormats/Common/interface/AssociationVector.h"
  20. #include "DataFormats/PatCandidates/interface/PATObject.h"
  21. #include "TH1.h"
  22. #include <vector>
  23. #include <string>
  24. #include <iostream>
  25. #include <iterator>
  26. using namespace edm;
  27. using namespace std;
  28. using namespace reco;
  29. using namespace pat;
  30. class testAnalyzer : public edm::EDAnalyzer {
  31. public:
  32. testAnalyzer(const edm::ParameterSet& pset);
  33. private:
  34. virtual void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
  35. virtual void endJob() override;
  36. int SingleTrigger_ ,DoubleTrigger_ , NoTrigger_ , zmumuIncrement_ ;
  37. InputTag selectMuon_, zMuMu_ ;
  38. string pathName_;
  39. int nbinsEta_;
  40. double minEta_ , maxEta_;
  41. int nbinsPt_;
  42. double minPt_ , maxPt_;
  43. int nbinsEtaPt_;
  44. TH1D *h_pt_distribution_;
  45. TH1D *h_numberTrigMuon_, *h_numberMuon_ ;
  46. TH1D *h_numberTrigMuon_ptStudy_, *h_numberMuon_ptStudy_ ;
  47. TH1D *h_EtaDist_Pt80_;
  48. vector<double> vectorPt , vectorEta ;
  49. };
  50. testAnalyzer::testAnalyzer(const edm::ParameterSet& pset) :
  51. selectMuon_( pset.getParameter<InputTag>( "selectMuon" ) ),
  52. zMuMu_( pset.getParameter<InputTag>( "ZMuMu" ) ),
  53. pathName_( pset.getParameter<string>( "pathName" ) ),
  54. nbinsEta_( pset.getParameter<int>( "EtaBins" ) ),
  55. minEta_( pset.getParameter<double>( "minEta" ) ),
  56. maxEta_( pset.getParameter<double>( "maxEta" ) ),
  57. nbinsPt_( pset.getParameter<int>( "PtBins" ) ),
  58. minPt_( pset.getParameter<double>( "minPt" ) ),
  59. maxPt_( pset.getParameter<double>( "maxPt" ) ),
  60. nbinsEtaPt_( pset.getParameter<int>( "EtaPt80Bins" ) ){
  61. SingleTrigger_= 0;
  62. DoubleTrigger_= 0;
  63. NoTrigger_= 0;
  64. zmumuIncrement_=0;
  65. Service<TFileService> fs;
  66. h_pt_distribution_ = fs->make<TH1D>("PtResolution ","Pt Resolution",200,-4.,4.);
  67. h_numberMuon_ = fs->make<TH1D>("Denominatore","Number of Muons vs Eta",nbinsEta_,minEta_,maxEta_);
  68. h_numberTrigMuon_ = fs->make<TH1D>("NumeratoreTrigMuon","Number of Triggered Muons vs Eta",nbinsEta_ ,minEta_,maxEta_);
  69. h_numberMuon_ptStudy_ = fs->make<TH1D>("DenominatorePtStudy","Number of Muons vs Pt",nbinsPt_,minPt_,maxPt_);
  70. h_numberTrigMuon_ptStudy_ = fs->make<TH1D>("NumeratoreTrigMuonPtStudy","Number of Triggered Muons vs Pt",nbinsPt_,minPt_,maxPt_);
  71. h_EtaDist_Pt80_ = fs->make<TH1D>("EtaDistr","Eta distribution (Pt>80)",nbinsEtaPt_,minEta_,maxEta_);
  72. }
  73. void testAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) {
  74. Handle<vector<pat::Muon> > selectMuon;
  75. event.getByLabel(selectMuon_, selectMuon);
  76. Handle<CandidateView> zMuMu;
  77. event.getByLabel(zMuMu_, zMuMu);
  78. int zmumuSize = zMuMu->size();
  79. if(zmumuSize > 0){
  80. for( int i = 0; i < zmumuSize ; ++i){
  81. bool singleTrigFlag0 = false;
  82. bool singleTrigFlag1 = false;
  83. zmumuIncrement_++;
  84. const Candidate & zMuMuCand = (*zMuMu)[i];
  85. CandidateBaseRef dau0 = zMuMuCand.daughter(0)->masterClone();
  86. CandidateBaseRef dau1 = zMuMuCand.daughter(1)->masterClone();
  87. const pat::Muon& mu0 = dynamic_cast<const pat::Muon&>(*dau0);//cast in patMuon
  88. const pat::Muon& mu1 = dynamic_cast<const pat::Muon&>(*dau1);
  89. const pat::TriggerObjectStandAloneCollection mu0HLTMatches =
  90. mu0.triggerObjectMatchesByPath( pathName_ );
  91. const pat::TriggerObjectStandAloneCollection mu1HLTMatches =
  92. mu1.triggerObjectMatchesByPath( pathName_ );
  93. double EtaPatMu0 = mu0.eta();
  94. double EtaPatMu1 = mu1.eta();
  95. double PtPatMu0 = mu0.pt();
  96. double PtPatMu1 = mu1.pt();
  97. h_numberMuon_->Fill(EtaPatMu0);
  98. h_numberMuon_->Fill(EtaPatMu1);
  99. h_numberMuon_ptStudy_->Fill(PtPatMu0);
  100. h_numberMuon_ptStudy_->Fill(PtPatMu1);
  101. int dimTrig0 = mu0HLTMatches.size();
  102. int dimTrig1 = mu1HLTMatches.size();
  103. if(dimTrig0 !=0){
  104. for(int j = 0; j < dimTrig0 ; ++j){
  105. singleTrigFlag0 = true;
  106. h_numberTrigMuon_->Fill(EtaPatMu0);
  107. h_numberTrigMuon_ptStudy_->Fill(PtPatMu0);
  108. double PtTrig = mu0HLTMatches[j].pt();
  109. double PtDif = PtTrig-PtPatMu0;
  110. h_pt_distribution_->Fill(PtDif);
  111. }
  112. }
  113. else{
  114. if(PtPatMu0>80) {
  115. h_EtaDist_Pt80_->Fill(EtaPatMu0);
  116. vectorPt.push_back(PtPatMu0);
  117. vectorEta.push_back(EtaPatMu0);
  118. }
  119. }
  120. if(dimTrig1 !=0){
  121. for(int j = 0; j < dimTrig1 ; ++j){
  122. singleTrigFlag1 = true;
  123. h_numberTrigMuon_->Fill(EtaPatMu1);
  124. h_numberTrigMuon_ptStudy_->Fill(PtPatMu1);
  125. double PtTrig = mu0HLTMatches[j].pt();
  126. double PtDif = PtTrig-PtPatMu1;
  127. h_pt_distribution_->Fill(PtDif);
  128. }
  129. }
  130. else{
  131. if(PtPatMu0>80) {
  132. h_EtaDist_Pt80_->Fill(EtaPatMu1);
  133. vectorPt.push_back(PtPatMu0);
  134. vectorEta.push_back(EtaPatMu0);
  135. }
  136. }
  137. if(singleTrigFlag0 && singleTrigFlag1)DoubleTrigger_++;
  138. if(singleTrigFlag0 && !singleTrigFlag1)SingleTrigger_++;
  139. if(!singleTrigFlag0 && singleTrigFlag1)SingleTrigger_++;
  140. if(!singleTrigFlag0 && !singleTrigFlag1)NoTrigger_++;
  141. }//end loop on ZMuMu candidates
  142. }//end check on ZMuMu
  143. }
  144. void testAnalyzer::endJob() {
  145. cout<< "DoubleTrigger = " << DoubleTrigger_ << " , SingleTrigger = " << SingleTrigger_ << " , NoTrigger = "<< NoTrigger_ <<" ,zmumuIncrement = "<< zmumuIncrement_ << endl;
  146. double OneTrig = (double)SingleTrigger_/(double)zmumuIncrement_;
  147. double DoubleTrig = (double)DoubleTrigger_/(double)zmumuIncrement_;
  148. cout<< "eps^2 = " << DoubleTrig << endl;
  149. cout<< "2eps(1 - eps) = " << OneTrig << endl;
  150. int dimVec =vectorPt.size();
  151. for(int i = 0; i<dimVec; ++i) cout << "Pt = " << vectorPt[i] << " ==> Eta = " << vectorEta[i] << endl;
  152. }
  153. #include "FWCore/Framework/interface/MakerMacros.h"
  154. DEFINE_FWK_MODULE(testAnalyzer);