diff --git a/GeneratorInterface/Core/interface/EmbeddingHepMCFilter.h b/GeneratorInterface/Core/interface/EmbeddingHepMCFilter.h index 3603526d9726c..2ce970a6e1ea1 100644 --- a/GeneratorInterface/Core/interface/EmbeddingHepMCFilter.h +++ b/GeneratorInterface/Core/interface/EmbeddingHepMCFilter.h @@ -14,7 +14,7 @@ class EmbeddingHepMCFilter : public BaseHepMCFilter { const int muonPDGID_ = 13; const int electron_neutrino_PDGID_ = 12; const int electronPDGID_ = 11; - const int ZPDGID_ = 23; + int ZPDGID_ = 23; enum class TauDecayMode : int { Unfilled = -1, Muon = 0, Electron = 1, Hadronic = 2 }; diff --git a/GeneratorInterface/Core/src/EmbeddingHepMCFilter.cc b/GeneratorInterface/Core/src/EmbeddingHepMCFilter.cc index 455f8cd5b0c62..499ae555ac108 100644 --- a/GeneratorInterface/Core/src/EmbeddingHepMCFilter.cc +++ b/GeneratorInterface/Core/src/EmbeddingHepMCFilter.cc @@ -3,7 +3,8 @@ #include "boost/algorithm/string.hpp" #include "boost/algorithm/string/trim_all.hpp" -EmbeddingHepMCFilter::EmbeddingHepMCFilter(const edm::ParameterSet &iConfig) { +EmbeddingHepMCFilter::EmbeddingHepMCFilter(const edm::ParameterSet &iConfig) + : ZPDGID_(iConfig.getParameter("BosonPDGID")) { // Defining standard decay channels ee.fill(TauDecayMode::Electron); ee.fill(TauDecayMode::Electron); @@ -118,13 +119,16 @@ void EmbeddingHepMCFilter::decay_and_sump4Vis(HepMC::GenParticle *particle, reco // Asuming, that there are only the two tauons from the Z-boson. // This is the case for the simulated Z->tautau event constructed by EmbeddingLHEProducer. if (std::abs(particle->pdg_id()) == tauonPDGID_ && !decaymode_known) { + // use these bools to protect againt taus that aren't the last copy (which "decay" to a tau and a gamma) + bool isGamma = std::abs((*daughter)->pdg_id()) == 22; + bool isTau = std::abs((*daughter)->pdg_id()) == 15; if (std::abs((*daughter)->pdg_id()) == muonPDGID_) { DecayChannel_.fill(TauDecayMode::Muon); decaymode_known = true; } else if (std::abs((*daughter)->pdg_id()) == electronPDGID_) { DecayChannel_.fill(TauDecayMode::Electron); decaymode_known = true; - } else if (!neutrino) { + } else if (!neutrino && !isGamma && !isTau) { DecayChannel_.fill(TauDecayMode::Hadronic); decaymode_known = true; } @@ -229,4 +233,4 @@ void EmbeddingHepMCFilter::fill_cut(std::string cut_string, cut.eta2 = std::stod(single_cuts[i]); } } -} \ No newline at end of file +} diff --git a/TauAnalysis/MCEmbeddingTools/python/EmbeddingPythia8Hadronizer_cfi.py b/TauAnalysis/MCEmbeddingTools/python/EmbeddingPythia8Hadronizer_cfi.py index a34664e5362e1..5c056288c8203 100644 --- a/TauAnalysis/MCEmbeddingTools/python/EmbeddingPythia8Hadronizer_cfi.py +++ b/TauAnalysis/MCEmbeddingTools/python/EmbeddingPythia8Hadronizer_cfi.py @@ -18,8 +18,9 @@ HadHadCut = cms.string('Had1.Pt > 35 && Had2.Pt > 30'), MuHadCut = cms.string('Mu.Pt > 18 && Had.Pt > 25 && Mu.Eta < 2.1'), MuMuCut = cms.string('Mu1.Pt > 17 && Mu2.Pt > 8'), - Final_States = cms.vstring('ElEl','ElHad','ElMu','HadHad','MuHad','MuMu') - ) + Final_States = cms.vstring('ElEl','ElHad','ElMu','HadHad','MuHad','MuMu'), + BosonPDGID = cms.int32(23) + ), ), pythiaPylistVerbosity = cms.untracked.int32(0), filterEfficiency = cms.untracked.double(1.0),