55 void endJob()
override;
70 double etamax_,
ptmin_, massMin_, massMax_, isoMax_;
126 bothMuons_(pset.getParameter<
bool>(
"bothMuons")),
128 etamax_(pset.getUntrackedParameter<double>(
"etamax")),
129 ptmin_(pset.getUntrackedParameter<double>(
"ptmin")),
130 massMin_(pset.getUntrackedParameter<double>(
"zMassMin")),
131 massMax_(pset.getUntrackedParameter<double>(
"zMassMax")),
132 isoMax_(pset.getUntrackedParameter<double>(
"isomax")) {
139 h_muon_vz = fs->
make<TH1D>(
"muonVz",
"z vertex of muons",50,-20.,20.);
141 h_dimuon_vz = fs->
make<TH1D>(
"dimuonVz",
"z vertex of dimuon",50,-20.,20.);
214 bool zMuMu_found =
false;
217 if (!zMuMu->
empty() ) {
219 for(
unsigned int i = 0;
i < zMuMu->
size(); ++
i) {
226 double trkiso0 = muonDau0.
trackIso();
228 double trkiso1 = muonDau1.
trackIso();
236 float d0signed_mu0 = (*mu0TrkRef).dxy();
237 float d0signed_mu0_respectToPV= (*mu0TrkRef).dxy( primaryVertices->begin()->position() );
238 float vz_mu0_respectToPV= (*mu0TrkRef).dz( primaryVertices->begin()->position() );
241 float d0signed_mu1 = (*mu1TrkRef).dxy();
242 float d0signed_mu1_respectToPV= (*mu1TrkRef).dxy( primaryVertices->begin()->position() );
243 float vz_mu1_respectToPV= (*mu1TrkRef).dz( primaryVertices->begin()->position() );
264 bool trig0found =
false;
265 bool trig1found =
false;
266 if( !mu0HLTMatches.empty() )
268 if( !mu1HLTMatches.empty() )
295 if (trkiso0<isoMax_ && trkiso1>=
isoMax_) {
311 bool zMuSta_found =
false;
312 if (!zMuMu_found && !zMuStandAlone->
empty() ) {
314 for(
unsigned int i = 0;
i < zMuStandAlone->
size(); ++
i) {
315 const Candidate & zMuStandAloneCand = (*zMuStandAlone)[
i];
317 GenParticleRef zMuStandAloneMatch = (*zMuStandAloneMatchMap)[zMuStandAloneCandRef];
322 double trkiso0 = muonDau0.
trackIso();
324 double trkiso1 = muonDau1.
trackIso();
329 float d0signed_mu0 = (*mu0TrkRef).dxy();
330 float d0signed_mu0_respectToPV= (*mu0TrkRef).dxy( primaryVertices->begin()->position() );
331 float vz_mu0_respectToPV= (*mu0TrkRef).dz( primaryVertices->begin()->position() );
334 float d0signed_mu1 = (*mu1TrkRef).dxy();
335 float d0signed_mu1_respectToPV= (*mu1TrkRef).dxy( primaryVertices->begin()->position() );
336 float vz_mu1_respectToPV= (*mu1TrkRef).dz( primaryVertices->begin()->position() );
338 double pt0 = zMuStandAloneCand.
daughter(0)->
pt();
340 double eta0 = zMuStandAloneCand.
daughter(0)->
eta();
341 double eta1 = zMuStandAloneCand.
daughter(1)->
eta();
342 double mass = zMuStandAloneCand.
mass();
350 bool trig0found =
false;
351 bool trig1found =
false;
352 if( !mu0HLTMatches.empty() )
354 if( !mu1HLTMatches.empty() )
358 bool trigfound =
false;
380 if (!zMuMu_found && !zMuSta_found && !zMuTrack->
empty() ) {
382 for(
unsigned int i = 0;
i < zMuTrack->
size(); ++
i) {
383 const Candidate & zMuTrackCand = (*zMuTrack)[
i];
388 double trkiso0 = muonDau0.
trackIso();
390 double trkiso1 = trackDau1.
trackIso();
395 float d0signed_mu0 = (*mu0TrkRef).dxy();
396 float d0signed_mu0_respectToPV= (*mu0TrkRef).dxy( primaryVertices->begin()->position() );
397 float vz_mu0_respectToPV= (*mu0TrkRef).dz( primaryVertices->begin()->position() );
400 float d0signed_mu1 = (*mu1TrkRef).dxy();
401 float d0signed_mu1_respectToPV= (*mu1TrkRef).dxy( primaryVertices->begin()->position() );
402 float vz_mu1_respectToPV= (*mu1TrkRef).dz( primaryVertices->begin()->position() );
416 bool trig0found =
false;
417 if( !mu0HLTMatches.empty() )
439 int partId0 = dauGen0->
pdgId();
440 int partId1 = dauGen1->
pdgId();
441 int partId2 = dauGen2->
pdgId();
442 bool muplusFound=
false;
443 bool muminusFound=
false;
445 if (partId0==13 || partId1==13 || partId2==13) muminusFound=
true;
446 if (partId0==-13 || partId1==-13 || partId2==-13) muplusFound=
true;
447 if (partId0==23 || partId1==23 || partId2==23) ZFound=
true;
448 return ( muplusFound && muminusFound && ZFound );
453 int partId0 = dauGen0->
pdgId();
454 int partId1 = dauGen1->
pdgId();
455 int partId2 = dauGen2->
pdgId();
457 if (partId0 == ipart) {
460 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
461 ptpart = dauMuGen->
pt();
465 if (partId1 == ipart) {
468 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
469 ptpart = dauMuGen->
pt();
473 if (partId2 == ipart) {
477 ptpart = dauMuGen->
pt();
486 int partId0 = dauGen0->
pdgId();
487 int partId1 = dauGen1->
pdgId();
488 int partId2 = dauGen2->
pdgId();
490 if (partId0 == ipart) {
493 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
494 etapart = dauMuGen->
eta();
498 if (partId1 == ipart) {
501 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
502 etapart = dauMuGen->
eta();
506 if (partId2 == ipart) {
510 etapart = dauMuGen->
eta();
519 int partId0 = dauGen0->
pdgId();
520 int partId1 = dauGen1->
pdgId();
521 int partId2 = dauGen2->
pdgId();
523 if (partId0 == ipart) {
526 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
527 phipart = dauMuGen->
phi();
531 if (partId1 == ipart) {
534 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
535 phipart = dauMuGen->
phi();
539 if (partId2 == ipart) {
543 phipart = dauMuGen->
phi();
552 int partId0 = dauGen0->
pdgId();
553 int partId1 = dauGen1->
pdgId();
554 int partId2 = dauGen2->
pdgId();
556 if (partId0 == ipart) {
559 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
560 p4part = dauMuGen->
p4();
564 if (partId1 == ipart) {
567 if(dauMuGen->
pdgId() == ipart && dauMuGen->
status() ==1) {
568 p4part = dauMuGen->
p4();
572 if (partId2 == ipart) {
576 p4part = dauMuGen->
p4();
EDGetTokenT< GenParticleMatch > zMuTrackMatchMapToken_
TH1D * h_zmumuSele_muon_d0signed_respectToPV
TH1D * h_zmumuNotIsoSele_muonNotIso_d0signed
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
float getParticlePt(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2)
TH1D * h_zmustaSele_sta_d0signed
EDGetTokenT< GenParticleMatch > zMuStandAloneMatchMapToken_
virtual example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
TH1D * h_zmumuNotIsoSele_muonIso_d0signed
bool check_ifZmumu(const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2)
#define DEFINE_FWK_MODULE(type)
TH1D * h_zmutrackSele_track_vz_respectToPV
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
TH1D * h_zmumuNotIsoSele_dimuon_vz
float getParticleEta(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2)
def setup(process, global_tag, zero_tesla=False)
std::vector< Vertex > VertexCollection
collection of Vertex objects
EDGetTokenT< GenParticleCollection > genParticlesToken_
T * make(const Args &...args) const
make new ROOT object
std::vector< TriggerObjectStandAlone > TriggerObjectStandAloneCollection
Collection of TriggerObjectStandAlone.
TH1D * h_zmustaSele_muon_vz
reco::TrackRef track() const override
reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
TH1D * h_zmumuSele_dimuon_vz
TH1D * h_zmustaSele_muon_vz_respectToPV
TH1D * h_zmutrackSele_track_d0signed
TH1D * h_zmutrackSele_muon_d0signed
TH1D * h_zmumuNotIsoSele_muonIso_vz
RefToBase< value_type > refAt(size_type i) const
virtual int status() const =0
status word
TH1D * h_zmutrackSele_track_d0signed_respectToPV
Analysis-level Generic Particle class (e.g. for hadron or muon not fully reconstructed) ...
TH1D * h_zmumuNotIsoSele_muonNotIso_d0signed_respectToPV
TH1D * h_zmumuSele_muon_vz_respectToPV
EDGetTokenT< GenParticleMatch > zMuMuMatchMapToken_
TH1D * h_zmumuSele_muon_d0signed
TH1D * h_muon_vz_respectToPV
bool isGlobalMuon() const override
virtual const LorentzVector & p4() const =0
four-momentum Lorentz vector
virtual int pdgId() const =0
PDG identifier.
TH1D * h_zmumuNotIsoSele_muonIso_d0signed_respectToPV
TH1D * h_zmustaSele_muon_d0signed
EDGetTokenT< CandidateView > zMuMuToken_
TH1D * h_zmustaSele_sta_d0signed_respectToPV
edm::ValueMap< float > IsolationCollection
TH1D * h_zmutrackSele_muon_vz_respectToPV
Abs< T >::type abs(const T &t)
Particle::LorentzVector getParticleP4(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2)
TH1D * h_zmumuNotIsoSele_muonNotIso_vz_respectToPV
const TriggerObjectStandAloneCollection triggerObjectMatchesByPath(const std::string &namePath, const bool pathLastFilterAccepted=false, const bool pathL3FilterAccepted=true) const
TH1D * h_zmustaSele_sta_vz_respectToPV
double vz() const override
z coordinate of vertex position
TH1D * h_zmumuNotIsoSele_muonNotIso_vz
virtual const CandidateBaseRef & masterClone() const =0
virtual double eta() const =0
momentum pseudorapidity
reco::CandidateBaseRef trackMuonCandRef_
virtual double pt() const =0
transverse momentum
reco::TrackRef track() const override
TH1D * h_zmustaSele_muon_d0signed_respectToPV
virtual double mass() const =0
mass
EDGetTokenT< CandidateView > tracksToken_
EDGetTokenT< VertexCollection > primaryVerticesToken_
ZMuMu_vtxAnalyzer(const edm::ParameterSet &pset)
EDGetTokenT< CandidateView > muonsToken_
TH1D * h_zmumuNotIsoSele_muonIso_vz_respectToPV
TH1D * h_muon_d0signed_respectToPV
lep1
print 'MRbb(1b)',event.mr_bb
EDGetTokenT< CandidateView > zMuStandAloneToken_
TH1D * h_zmustaSele_sta_vz
void analyze(const edm::Event &event, const edm::EventSetup &setup) override
TH1D * h_zmutrackSele_muon_d0signed_respectToPV
virtual size_type numberOfDaughters() const =0
number of daughters
EDGetTokenT< CandidateView > zMuTrackToken_
virtual double phi() const =0
momentum azimuthal angle
float getParticlePhi(const int ipart, const Candidate *dauGen0, const Candidate *dauGen1, const Candidate *dauGen2)
Analysis-level muon class.
TH1D * h_zmumuSele_muon_vz
math::PtEtaPhiELorentzVectorF LorentzVector
TH1D * h_zmutrackSele_track_vz
TH1D * h_zmutrackSele_muon_vz