CMS 3D CMS Logo

MC_Efficiency_Analyzer.cc
Go to the documentation of this file.
1 /* \class MCEfficiencyAnalyzer
2  *
3  * Muon reconstruction efficiency from MC truth,
4  * for global muons, tracks and standalone. Take as input the output of the
5  * standard EWK skim: zToMuMu
6  *
7  * Produces in output the efficency number
8  *
9  * \author Michele de Gruttola, INFN Naples
10 */
11 
23 #include <iostream>
24 #include <iterator>
25 using namespace edm;
26 using namespace std;
27 using namespace reco;
28 
30 public:
32  : zMuMuToken_(consumes<CandidateCollection>(pset.getParameter<InputTag>("zMuMu"))),
33  MuonsToken_(consumes<CandidateCollection>(pset.getParameter<InputTag>("Muons"))),
34  MuonsMapToken_(consumes<CandMatchMap>(pset.getParameter<InputTag>("MuonsMap"))),
35  TracksToken_(consumes<CandidateCollection>(pset.getParameter<InputTag>("Tracks"))),
36  TracksMapToken_(consumes<CandMatchMap>(pset.getParameter<InputTag>("TracksMap"))),
37  genParticlesToken_(consumes<GenParticleCollection>(pset.getParameter<InputTag>("genParticles"))),
38  StandAloneToken_(consumes<CandidateCollection>(pset.getParameter<InputTag>("StandAlone"))),
39  StandAloneMapToken_(consumes<CandMatchMap>(pset.getParameter<InputTag>("StandAloneMap"))),
40  etacut_(pset.getParameter<double>("etacut")),
41  ptcut_(pset.getParameter<double>("ptcut")),
42  deltaRStacut_(pset.getParameter<double>("deltaRStacut"))
43 
44  {
45  nMuMC = 0;
46  nMureco = 0;
47  nTrk = 0;
48  nSta = 0;
49  nNotMuMatching = 0;
50  }
51 
52  void analyze(const edm::Event& event, const edm::EventSetup& setup) override {
54  event.getByToken(zMuMuToken_, zMuMu);
55 
57  event.getByToken(MuonsToken_, Muons);
58 
60  event.getByToken(TracksToken_, Tracks);
61 
62  Handle<CandidateCollection> StandAlone;
63  event.getByToken(StandAloneToken_, StandAlone);
64 
65  Handle<CandMatchMap> MuonsMap;
66  event.getByToken(MuonsMapToken_, MuonsMap);
67 
68  Handle<CandMatchMap> TracksMap;
69  event.getByToken(TracksMapToken_, TracksMap);
70 
71  Handle<CandMatchMap> StandAloneMap;
72  event.getByToken(StandAloneMapToken_, StandAloneMap);
73 
75  event.getByToken(genParticlesToken_, genParticles);
76 
77  //Getting muons from Z MC
78  for (unsigned int k = 0; k < genParticles->size(); k++) {
79  const Candidate& ZCand = (*genParticles)[k];
80  int status = ZCand.status();
81 
82  if (ZCand.pdgId() == 23 && status == 3) {
83  // positive muons
84  const Candidate* muCand1 = ZCand.daughter(0);
85  if (muCand1->status() == 3) {
86  for (unsigned int d = 0; d < muCand1->numberOfDaughters(); d++) {
87  const Candidate* muCandidate = muCand1->daughter(d);
88  if (muCandidate->pdgId() == muCand1->pdgId()) {
89  muCand1 = muCand1->daughter(d);
90  }
91  }
92  }
93  // negative muons
94  const Candidate* muCand2 = ZCand.daughter(1);
95  if (muCand2->status() == 3) {
96  for (unsigned int e = 0; e < muCand2->numberOfDaughters(); e++) {
97  const Candidate* muCandidate = muCand2->daughter(e);
98  if (muCandidate->pdgId() == muCand2->pdgId()) {
99  muCand2 = muCand2->daughter(e);
100  }
101  }
102  }
103 
104  double deltaR_Mu_Sta = 0;
105  int nMurecoTemp = nMureco;
106  // getting mu matched
108  for (i = MuonsMap->begin(); i != MuonsMap->end(); i++) {
109  const Candidate /* & reco = * i -> key,*/& mc = *i->val;
110  if ((muCand1 == &mc) && (mc.pt() > ptcut_) && (std::abs(mc.eta()) < etacut_)) {
111  nMuMC++;
112  nMureco++;
113  break;
114  }
115  }
116  if (nMureco == nMurecoTemp) // I.E. MU RECO NOT FOUND!!!!
117  {
118  int nTrkTemp = nTrk;
119  int nStaTemp = nSta;
120 
121  // getting tracks matched and doing the same, CONTROLLING IF MU IS RECONSTRUCTED AS A TRACK AND NOT AS A MU
123  for (l = TracksMap->begin(); l != TracksMap->end(); l++) {
124  const Candidate /* & Trkreco = * l -> key, */& Trkmc = *l->val;
125  if ((muCand1 == &Trkmc) && (Trkmc.pt() > ptcut_) && (std::abs(Trkmc.eta()) < etacut_)) {
126  nMuMC++;
127  nTrk++;
128  break;
129  }
130  }
131  // the same for standalone
133  for (n = StandAloneMap->begin(); n != StandAloneMap->end(); n++) {
134  const Candidate &Stareco = *n->key, &Stamc = *n->val;
135  if ((muCand1 == &Stamc) && (Stamc.pt() > ptcut_) && (std::abs(Stamc.eta()) < etacut_)) {
136  nMuMC++;
137  nSta++;
138  deltaR_Mu_Sta = deltaR(Stareco, *muCand1);
139 
140  // cout<<"Ho trovato un sta reco "<<endl;
141  break;
142  }
143  }
144  // controlling if sta and trk are reconstrucetd both, and if so the get the deltaR beetween muon MC and reco sta, to controll correlation to this happening
145  if ((nSta == nStaTemp + 1) && (nTrk == nTrkTemp + 1)) {
146  nNotMuMatching++;
147  if ((deltaR_Mu_Sta < deltaRStacut_)) {
148  v_.push_back(deltaR_Mu_Sta);
149  cout << "Not matching from trk and sta matched to MC mu, to reconstruct a recoMU" << endl;
150  }
151  }
152  }
153  }
154  }
155  }
156 
157  void endJob() override {
158  cout << "--- nMuMC == " << nMuMC << endl;
159  cout << "--- nMureco == " << nMureco << endl;
160  cout << "--- nSta == " << nSta << endl;
161  cout << "--- nTrk == " << nTrk << endl;
162  cout << "--- nNotMuMatching from a trk and sta matched to a Mu MC == " << nNotMuMatching << endl;
163  if (nMuMC != 0) {
164  cout << " effMu == " << (double)nMureco / nMuMC << endl;
165  cout << " effTrk == " << (double)(nTrk + nMureco) / nMuMC << endl;
166  cout << " effSta == " << (double)(nSta + nMureco) / nMuMC << endl;
167  }
168 
169  for (unsigned int i = 0; i < v_.size(); ++i) {
170  cout << " delta R Mu Sta == " << v_[i] << endl;
171  }
172  }
173 
174 private:
183  double etacut_, ptcut_, deltaRStacut_;
184  int nMuMC, nMureco, nTrk, nSta, nNotMuMatching;
185  vector<double> v_;
186 };
187 
reco::Candidate::daughter
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode)
MCEfficiencyAnalyzer
Definition: MC_Efficiency_Analyzer.cc:29
mps_fire.i
i
Definition: mps_fire.py:355
genParticles2HepMC_cfi.genParticles
genParticles
Definition: genParticles2HepMC_cfi.py:4
MCEfficiencyAnalyzer::TracksToken_
EDGetTokenT< CandidateCollection > TracksToken_
Definition: MC_Efficiency_Analyzer.cc:178
MCEfficiencyAnalyzer::analyze
void analyze(const edm::Event &event, const edm::EventSetup &setup) override
Definition: MC_Efficiency_Analyzer.cc:52
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
ZMuMuAnalysisNtupler_cff.zMuMu
zMuMu
zMuMu vector of PSet is common to all categories except zMuTrk category
Definition: ZMuMuAnalysisNtupler_cff.py:340
CaloTowersParam_cfi.mc
mc
Definition: CaloTowersParam_cfi.py:8
mps_update.status
status
Definition: mps_update.py:69
reco::Candidate::eta
virtual double eta() const =0
momentum pseudorapidity
edm::EDGetTokenT< CandidateCollection >
edm
HLT enums.
Definition: AlignableModifier.h:19
gather_cfg.cout
cout
Definition: gather_cfg.py:144
MCEfficiencyAnalyzer::endJob
void endJob() override
Definition: MC_Efficiency_Analyzer.cc:157
reco::GenParticleCollection
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
Definition: GenParticleFwd.h:13
MCEfficiencyAnalyzer::zMuMuToken_
EDGetTokenT< CandidateCollection > zMuMuToken_
Definition: MC_Efficiency_Analyzer.cc:175
MCEfficiencyAnalyzer::v_
vector< double > v_
Definition: MC_Efficiency_Analyzer.cc:185
reco::Candidate::pt
virtual double pt() const =0
transverse momentum
reco::Candidate::status
virtual int status() const =0
status word
EDAnalyzer.h
MCEfficiencyAnalyzer::StandAloneToken_
EDGetTokenT< CandidateCollection > StandAloneToken_
Definition: MC_Efficiency_Analyzer.cc:181
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
edm::Handle
Definition: AssociativeIterator.h:50
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
CandMatchMap.h
edm::EDAnalyzer
Definition: EDAnalyzer.h:29
GenParticle.h
deltaR.h
edm::AssociationMap::end
const_iterator end() const
last iterator over the map (read only)
Definition: AssociationMap.h:171
MakerMacros.h
MCEfficiencyAnalyzer::MCEfficiencyAnalyzer
MCEfficiencyAnalyzer(const edm::ParameterSet &pset)
Definition: MC_Efficiency_Analyzer.cc:31
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
MCEfficiencyAnalyzer::MuonsMapToken_
EDGetTokenT< CandMatchMap > MuonsMapToken_
Definition: MC_Efficiency_Analyzer.cc:177
Particle.h
reco::Candidate::numberOfDaughters
virtual size_type numberOfDaughters() const =0
number of daughters
MCEfficiencyAnalyzer::StandAloneMapToken_
EDGetTokenT< CandMatchMap > StandAloneMapToken_
Definition: MC_Efficiency_Analyzer.cc:182
dqmdumpme.k
k
Definition: dqmdumpme.py:60
MCEfficiencyAnalyzer::MuonsToken_
EDGetTokenT< CandidateCollection > MuonsToken_
Definition: MC_Efficiency_Analyzer.cc:176
PbPb_ZMuSkimMuonDPG_cff.deltaR
deltaR
Definition: PbPb_ZMuSkimMuonDPG_cff.py:63
HLTTauDQMOffline_cfi.Muons
Muons
Definition: HLTTauDQMOffline_cfi.py:57
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
edm::AssociationMap
Definition: AssociationMap.h:48
gather_cfg.Tracks
Tracks
Definition: gather_cfg.py:251
edm::EventSetup
Definition: EventSetup.h:57
reco::Candidate::pdgId
virtual int pdgId() const =0
PDG identifier.
InputTag.h
cmsLHEtoEOSManager.l
l
Definition: cmsLHEtoEOSManager.py:193
MCEfficiencyAnalyzer::TracksMapToken_
EDGetTokenT< CandMatchMap > TracksMapToken_
Definition: MC_Efficiency_Analyzer.cc:179
reco::Candidate
Definition: Candidate.h:27
std
Definition: JetResolutionObject.h:76
Ref.h
MCEfficiencyAnalyzer::nTrk
int nTrk
Definition: MC_Efficiency_Analyzer.cc:184
edm::AssociationMap::begin
const_iterator begin() const
first iterator over the map (read only)
Definition: AssociationMap.h:169
MCEfficiencyAnalyzer::ptcut_
double ptcut_
Definition: MC_Efficiency_Analyzer.cc:183
ztail.d
d
Definition: ztail.py:151
Candidate.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterSet.h
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
edm::AssociationMap::const_iterator
const iterator
Definition: AssociationMap.h:76
edm::InputTag
Definition: InputTag.h:15
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
edm::OwnVector
Definition: OwnVector.h:24
MCEfficiencyAnalyzer::genParticlesToken_
EDGetTokenT< GenParticleCollection > genParticlesToken_
Definition: MC_Efficiency_Analyzer.cc:180
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37