Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
ElectroWeakAnalysis
ZMuMu
plugins
DimuonMCMatcher.cc
Go to the documentation of this file.
1
#include "
FWCore/Framework/interface/EDProducer.h
"
2
#include "
FWCore/Utilities/interface/InputTag.h
"
3
#include "
DataFormats/Candidate/interface/Candidate.h
"
4
#include "
DataFormats/Candidate/interface/CandidateFwd.h
"
5
#include <iostream>
6
7
class
DimuonMCMatcher
:
public
edm::EDProducer
{
8
public
:
9
DimuonMCMatcher
(
const
edm::ParameterSet
&
cfg
);
10
virtual
void
produce
(
edm::Event
&,
const
edm::EventSetup
&)
override
;
11
private
:
12
edm::EDGetTokenT<reco::CandidateView>
srcToken_
;
13
};
14
15
#include "
DataFormats/HepMCCandidate/interface/GenParticle.h
"
16
#include "
DataFormats/HepMCCandidate/interface/GenParticleFwd.h
"
17
#include "
FWCore/Framework/interface/Event.h
"
18
#include "
DataFormats/Common/interface/Handle.h
"
19
#include "
FWCore/ParameterSet/interface/ParameterSet.h
"
20
#include "
DataFormats/PatCandidates/interface/Muon.h
"
21
#include "
DataFormats/PatCandidates/interface/GenericParticle.h
"
22
using namespace
std;
23
using namespace
reco
;
24
using namespace
edm;
25
26
DimuonMCMatcher::DimuonMCMatcher
(
const
edm::ParameterSet
&
cfg
) :
27
srcToken_(consumes<
CandidateView
>(cfg.getParameter<
InputTag
>(
"src"
))) {
28
produces<vector<GenParticleRef> >();
29
}
30
31
void
DimuonMCMatcher::produce
(
edm::Event
& evt,
const
edm::EventSetup
&) {
32
Handle<CandidateView>
src
;
33
evt.
getByToken
(
srcToken_
, src);
34
auto_ptr<vector<GenParticleRef> > matched(
new
vector<GenParticleRef>);
35
matched->reserve(src->size());
36
int
j
=0;
37
for
(
CandidateView::const_iterator
i
= src->begin();
i
!= src->end(); ++
i
) {
38
j++;
39
const
Candidate
* dau1 =
i
->daughter(0);
40
const
Candidate
* dau2 =
i
->daughter(1);
41
if
(dau1 == 0|| dau2 == 0)
42
throw
Exception
(
errors::InvalidReference
) <<
43
"one of the two daughter does not exist\n"
;
44
const
Candidate
*
c1
= dau1->
masterClone
().
get
();
45
GenParticleRef
mc1;
46
const
pat::Muon
* mu1 =
dynamic_cast<
const
pat::Muon
*
>
(
c1
);
47
if
(mu1 != 0) {
48
mc1 = mu1->
genParticleRef
();
49
// if (mc1.isNonnull()) cout << "DimuonMCMatcher> genParticleRef1 " << mc1->pdgId() << endl;
50
}
else
{
51
const
pat::GenericParticle
* gp1 =
dynamic_cast<
const
pat::GenericParticle
*
>
(
c1
);
52
if
(gp1 == 0)
53
throw
Exception
(
errors::InvalidReference
) <<
54
"first of two daughter is neither a pat::Muon not pat::GenericParticle\n"
;
55
mc1 = gp1->
genParticleRef
();
56
}
57
const
Candidate
*
c2
= dau2->
masterClone
().
get
();
58
GenParticleRef
mc2;
59
const
pat::Muon
* mu2 =
dynamic_cast<
const
pat::Muon
*
>
(
c2
);
60
if
(mu2 != 0) {
61
mc2 = mu2->
genParticleRef
();
62
// if (mc2.isNonnull()) cout << "DimuonMCMatcher> genParticleRef2 " << mc2->pdgId() << endl;
63
}
else
{
64
const
pat::GenericParticle
* gp2 =
dynamic_cast<
const
pat::GenericParticle
*
>
(
c2
);
65
if
(gp2 == 0)
66
throw
Exception
(
errors::InvalidReference
) <<
67
"first of two daughter is neither a pat::Muon not pat::GenericParticle\n"
;
68
mc2 = gp2->
genParticleRef
();
69
}
70
GenParticleRef
dimuonMatch;
71
// cout << "DimuonMatcher> mc1 " << mc1.isNonnull() << " mc2 " << mc2.isNonnull() << endl;
72
if
(mc1.
isNonnull
() && mc2.
isNonnull
()) {
73
int
k
=0;
74
do
{
75
k++;
76
mc1 = mc1->numberOfMothers() > 0 ? mc1->motherRef() :
GenParticleRef
();
77
mc2 = mc2->numberOfMothers() > 0 ? mc2->motherRef() :
GenParticleRef
();
78
// cout << "DimuonMCMatcher> do loop: " << k << " id1 " << mc1->pdgId() << " id2 " << mc2->pdgId() << endl;
79
}
while
(mc1 != mc2 && mc1.
isNonnull
() && mc2.
isNonnull
());
80
if
(mc1.
isNonnull
() && mc2.
isNonnull
() && mc1->pdgId()==23) {
81
dimuonMatch = mc1;
82
}
83
}
84
// cout << "DimuonMatcher> dimuonMatch " << dimuonMatch.isNonnull() << endl;
85
matched->push_back(dimuonMatch);
86
}
87
88
evt.
put
(matched);
89
}
90
91
92
#include "
FWCore/Framework/interface/MakerMacros.h
"
93
94
DEFINE_FWK_MODULE
(
DimuonMCMatcher
);
edm::RefToBase::get
value_type const * get() const
Definition:
RefToBase.h:225
i
int i
Definition:
DBlmapReader.cc:9
GenericParticle.h
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition:
Ref.h:252
looper.cfg
tuple cfg
Definition:
looper.py:259
pat::PATObject::genParticleRef
reco::GenParticleRef genParticleRef(size_t idx=0) const
Definition:
PATObject.h:217
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition:
Event.h:457
edm::Ref< GenParticleCollection >
GenParticle.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition:
MakerMacros.h:17
Event.h
alignmentValidation.c1
tuple c1
do drawing
Definition:
alignmentValidation.py:1023
reco::GenParticleRef
edm::Ref< GenParticleCollection > GenParticleRef
persistent reference to a GenParticle
Definition:
GenParticleFwd.h:14
MakerMacros.h
edm::Handle
Definition:
AssociativeIterator.h:47
reco::Candidate
Definition:
Candidate.h:28
Handle.h
dt_dqm_sourceclient_common_cff.reco
tuple reco
Definition:
dt_dqm_sourceclient_common_cff.py:106
DimuonMCMatcher::DimuonMCMatcher
DimuonMCMatcher(const edm::ParameterSet &cfg)
Definition:
DimuonMCMatcher.cc:26
edm::EDGetTokenT
Definition:
EDGetToken.h:32
edm::EDProducer
Definition:
EDProducer.h:35
DimuonMCMatcher::srcToken_
edm::EDGetTokenT< reco::CandidateView > srcToken_
Definition:
DimuonMCMatcher.cc:12
ParameterSet.h
Candidate.h
counter.c2
tuple c2
Definition:
counter.py:145
pat::GenericParticle
Analysis-level Generic Particle class (e.g. for hadron or muon not fully reconstructed) ...
Definition:
GenericParticle.h:40
edm::View
Definition:
CaloClusterFwd.h:14
edm::Event::put
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition:
Event.h:115
DimuonMCMatcher::produce
virtual void produce(edm::Event &, const edm::EventSetup &) override
Definition:
DimuonMCMatcher.cc:31
j
int j
Definition:
DBlmapReader.cc:9
GenParticleFwd.h
edm::EventSetup
Definition:
EventSetup.h:44
alcazmumu_cfi.src
tuple src
Definition:
alcazmumu_cfi.py:30
edm::errors::InvalidReference
Definition:
EDMException.h:40
DimuonMCMatcher
Definition:
DimuonMCMatcher.cc:7
EDProducer.h
edm::hlt::Exception
error
Definition:
HLTenums.h:21
Muon.h
edm::InputTag
Definition:
InputTag.h:18
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition:
View.h:85
InputTag.h
edm::ParameterSet
Definition:
ParameterSet.h:36
CandidateFwd.h
relval_steps.k
list k
Definition:
relval_steps.py:1552
edm::Event
Definition:
Event.h:61
pat::Muon
Analysis-level muon class.
Definition:
Muon.h:49
reco::Candidate::masterClone
virtual const CandidateBaseRef & masterClone() const =0
Generated for CMSSW Reference Manual by
1.8.5