CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes
EmbeddingHepMCFilter Class Reference

#include <EmbeddingHepMCFilter.h>

Inheritance diagram for EmbeddingHepMCFilter:
BaseHepMCFilter

Classes

struct  CutsContainer
 
struct  DecayChannel
 

Public Member Functions

 EmbeddingHepMCFilter (const edm::ParameterSet &)
 
bool filter (const HepMC::GenEvent *evt) override
 
 ~EmbeddingHepMCFilter () override
 
- Public Member Functions inherited from BaseHepMCFilter
 BaseHepMCFilter ()
 
virtual ~BaseHepMCFilter ()
 

Private Types

enum  TauDecayMode : int { TauDecayMode::Unfilled = -1, TauDecayMode::Muon = 0, TauDecayMode::Electron = 1, TauDecayMode::Hadronic = 2 }
 

Private Member Functions

virtual bool apply_cuts (std::vector< reco::Candidate::LorentzVector > &p4VisPair)
 
virtual void decay_and_sump4Vis (HepMC::GenParticle *particle, reco::Candidate::LorentzVector &p4Vis)
 
virtual void fill_cut (std::string cut_string, EmbeddingHepMCFilter::DecayChannel &dc, CutsContainer &cut)
 
virtual void fill_cuts (std::string cut_string, EmbeddingHepMCFilter::DecayChannel &dc)
 
std::string return_mode (TauDecayMode mode)
 
virtual void sort_by_convention (std::vector< reco::Candidate::LorentzVector > &p4VisPair)
 

Private Attributes

std::vector< CutsContainercuts_
 
DecayChannel DecayChannel_
 
DecayChannel ee
 
DecayChannel eh
 
const int electron_neutrino_PDGID_ = 12
 
const int electronPDGID_ = 11
 
DecayChannel em
 
DecayChannel hh
 
DecayChannel mh
 
DecayChannel mm
 
const int muon_neutrino_PDGID_ = 14
 
const int muonPDGID_ = 13
 
const int tauon_neutrino_PDGID_ = 16
 
const int tauonPDGID_ = 15
 
const int ZPDGID_ = 23
 

Detailed Description

Definition at line 10 of file EmbeddingHepMCFilter.h.

Member Enumeration Documentation

enum EmbeddingHepMCFilter::TauDecayMode : int
strongprivate
Enumerator
Unfilled 
Muon 
Electron 
Hadronic 

Definition at line 22 of file EmbeddingHepMCFilter.h.

22  : int
23  {
24  Unfilled = -1,
25  Muon = 0,
26  Electron = 1,
27  Hadronic = 2
28  };
Definition: Muon.py:1

Constructor & Destructor Documentation

EmbeddingHepMCFilter::EmbeddingHepMCFilter ( const edm::ParameterSet iConfig)
explicit

Definition at line 6 of file EmbeddingHepMCFilter.cc.

References ee, eh, Electron, em, EmbeddingHepMCFilter::DecayChannel::fill(), fill_cuts(), edm::ParameterSet::getParameter(), Hadronic, hh, mh, mm, Muon, and AlCaHLTBitMon_QueryRunRegistry::string.

7 {
8  // Defining standard decay channels
15 
16  // Filling CutContainers
17 
18  std::string cut_string_elel = iConfig.getParameter<std::string>("ElElCut");
19  std::string cut_string_mumu = iConfig.getParameter<std::string>("MuMuCut");
20  std::string cut_string_hadhad = iConfig.getParameter<std::string>("HadHadCut");
21  std::string cut_string_elmu = iConfig.getParameter<std::string>("ElMuCut");
22  std::string cut_string_elhad = iConfig.getParameter<std::string>("ElHadCut");
23  std::string cut_string_muhad = iConfig.getParameter<std::string>("MuHadCut");
24 
25  std::vector<std::string> use_final_states = iConfig.getParameter<std::vector<std::string> >("Final_States");
26 
27  for (std::vector<std::string>::const_iterator final_state = use_final_states.begin(); final_state != use_final_states.end(); ++final_state){
28  if ( (*final_state) == "ElEl") fill_cuts(cut_string_elel,ee);
29  else if ( (*final_state) == "MuMu") fill_cuts(cut_string_mumu,mm);
30  else if ( (*final_state) == "HadHad") fill_cuts(cut_string_hadhad,hh);
31  else if ( (*final_state) == "ElMu") fill_cuts(cut_string_elmu,em);
32  else if ( (*final_state) == "ElHad") fill_cuts(cut_string_elhad,eh);
33  else if ( (*final_state) == "MuHad") fill_cuts(cut_string_muhad,mh);
34  else edm::LogWarning("EmbeddingHepMCFilter") << (*final_state) << " this decay channel is not supported. Please choose on of (ElEl,MuMu,HadHad,ElMu,ElHad,MuHad)";
35  }
36 }
T getParameter(std::string const &) const
virtual void fill_cuts(std::string cut_string, EmbeddingHepMCFilter::DecayChannel &dc)
EmbeddingHepMCFilter::~EmbeddingHepMCFilter ( )
override

Definition at line 38 of file EmbeddingHepMCFilter.cc.

39 {
40 }

Member Function Documentation

bool EmbeddingHepMCFilter::apply_cuts ( std::vector< reco::Candidate::LorentzVector > &  p4VisPair)
privatevirtual

Definition at line 160 of file EmbeddingHepMCFilter.cc.

References funct::abs(), TkAlMuonSelectors_cfi::cut, cuts_, DecayChannel_, reco::tau::disc::Eta(), EmbeddingHepMCFilter::DecayChannel::first, return_mode(), and EmbeddingHepMCFilter::DecayChannel::second.

Referenced by filter().

161 {
162  for (std::vector<CutsContainer>::const_iterator cut = cuts_.begin(); cut != cuts_.end(); ++cut)
163  {
164  if(DecayChannel_.first == cut->decaychannel.first && DecayChannel_.second == cut->decaychannel.second){ // First the match to the decay channel
165  edm::LogInfo("EmbeddingHepMCFilter") << "Cut pt1 = " << cut->pt1 << " pt2 = " << cut->pt2
166  << " abs(eta1) = " << cut->eta1 << " abs(eta2) = " << cut->eta2
167  << " decay channel: " << return_mode(cut->decaychannel.first)
168  << return_mode(cut->decaychannel.second);
169 
170  if((cut->pt1 == -1. || (p4VisPair[0].Pt() > cut->pt1)) &&
171  (cut->pt2 == -1. || (p4VisPair[1].Pt() > cut->pt2)) &&
172  (cut->eta1 == -1.|| (std::abs(p4VisPair[0].Eta()) < cut->eta1)) &&
173  (cut->eta2 == -1.|| (std::abs(p4VisPair[1].Eta()) < cut->eta2))){
174  edm::LogInfo("EmbeddingHepMCFilter") << "This cut was passed (Stop here and take the event)";
175  return true;
176  }
177  }
178  }
179  return false;
180 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::string return_mode(TauDecayMode mode)
std::vector< CutsContainer > cuts_
void EmbeddingHepMCFilter::decay_and_sump4Vis ( HepMC::GenParticle *  particle,
reco::Candidate::LorentzVector p4Vis 
)
privatevirtual

Definition at line 96 of file EmbeddingHepMCFilter.cc.

References funct::abs(), class-composition::children, DecayChannel_, Electron, electron_neutrino_PDGID_, electronPDGID_, EmbeddingHepMCFilter::DecayChannel::fill(), Hadronic, Muon, muon_neutrino_PDGID_, muonPDGID_, tauon_neutrino_PDGID_, and tauonPDGID_.

Referenced by filter().

97 {
98  bool decaymode_known = false;
99  for (HepMC::GenVertex::particle_iterator daughter = particle->end_vertex()->particles_begin(HepMC::children);
100  daughter != particle->end_vertex()->particles_end(HepMC::children); ++daughter)
101  {
102  bool neutrino = (std::abs((*daughter)->pdg_id()) == tauon_neutrino_PDGID_) ||
103  (std::abs((*daughter)->pdg_id()) == muon_neutrino_PDGID_) ||
104  (std::abs((*daughter)->pdg_id()) == electron_neutrino_PDGID_);
105 
106  // Determining DecayMode, if particle is tau lepton.
107  // Asuming, that there are only the two tauons from the Z-boson.
108  // This is the case for the simulated Z->tautau event constructed by EmbeddingLHEProducer.
109  if (std::abs(particle->pdg_id()) == tauonPDGID_ && !decaymode_known)
110  {
111  if (std::abs((*daughter)->pdg_id()) == muonPDGID_)
112  {
114  decaymode_known = true;
115  }
116  else if (std::abs((*daughter)->pdg_id()) == electronPDGID_)
117  {
119  decaymode_known = true;
120  }
121  else if (!neutrino)
122  {
124  decaymode_known = true;
125  }
126  }
127  // Adding up all visible momentum in recursive way.
128  if ((*daughter)->status() == 1 && !neutrino) p4Vis += (reco::Candidate::LorentzVector) (*daughter)->momentum();
129  else if (!neutrino) decay_and_sump4Vis((*daughter), p4Vis);
130  }
131 }
virtual void decay_and_sump4Vis(HepMC::GenParticle *particle, reco::Candidate::LorentzVector &p4Vis)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:37
void EmbeddingHepMCFilter::fill_cut ( std::string  cut_string,
EmbeddingHepMCFilter::DecayChannel dc,
CutsContainer cut 
)
privatevirtual

Definition at line 199 of file EmbeddingHepMCFilter.cc.

References EmbeddingHepMCFilter::CutsContainer::decaychannel, EmbeddingHepMCFilter::CutsContainer::eta1, EmbeddingHepMCFilter::CutsContainer::eta2, EmbeddingHepMCFilter::DecayChannel::first, mps_fire::i, EmbeddingHepMCFilter::CutsContainer::pt1, EmbeddingHepMCFilter::CutsContainer::pt2, return_mode(), EmbeddingHepMCFilter::DecayChannel::second, split, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by fill_cuts().

200 {
201  cut.decaychannel = dc;
202 
203  boost::replace_all(cut_string,"(","");
204  boost::replace_all(cut_string,")","");
205  std::vector<std::string> single_cuts;
206  boost::split(single_cuts, cut_string, boost::is_any_of("&&"), boost::token_compress_on);
207  for (unsigned int i=0; i<single_cuts.size(); ++i)
208  {
209  std::string pt1_str, pt2_str, eta1_str, eta2_str;
210  if (dc.first == dc.second)
211  {
212  pt1_str = return_mode(dc.first)+"1"+".Pt"+">";
213  pt2_str = return_mode(dc.second)+"2"+".Pt"+">";
214  eta1_str = return_mode(dc.first)+"1"+".Eta"+"<";
215  eta2_str = return_mode(dc.second)+"2"+".Eta"+"<";
216  }
217  else
218  {
219  pt1_str = return_mode(dc.first)+".Pt"+">";
220  pt2_str = return_mode(dc.second)+".Pt"+">";
221  eta1_str = return_mode(dc.first)+".Eta"+"<";
222  eta2_str = return_mode(dc.second)+".Eta"+"<";
223  }
224 
225  if(boost::find_first(single_cuts[i], pt1_str))
226  {
227  boost::erase_first(single_cuts[i], pt1_str);
228  cut.pt1 = std::stod(single_cuts[i]);
229  }
230  else if (boost::find_first(single_cuts[i], pt2_str))
231  {
232  boost::erase_first(single_cuts[i], pt2_str);
233  cut.pt2 = std::stod(single_cuts[i]);
234  }
235  else if (boost::find_first(single_cuts[i], eta1_str))
236  {
237  boost::erase_first(single_cuts[i], eta1_str);
238  cut.eta1 = std::stod(single_cuts[i]);
239  }
240  else if (boost::find_first(single_cuts[i], eta2_str))
241  {
242  boost::erase_first(single_cuts[i], eta2_str);
243  cut.eta2 = std::stod(single_cuts[i]);
244  }
245  }
void EmbeddingHepMCFilter::fill_cuts ( std::string  cut_string,
EmbeddingHepMCFilter::DecayChannel dc 
)
privatevirtual

Definition at line 182 of file EmbeddingHepMCFilter.cc.

References TkAlMuonSelectors_cfi::cut, cuts_, fill_cut(), EmbeddingHepMCFilter::DecayChannel::first, mps_fire::i, return_mode(), EmbeddingHepMCFilter::DecayChannel::second, and split.

Referenced by EmbeddingHepMCFilter().

182  {
183 
184  edm::LogInfo("EmbeddingHepMCFilter") << return_mode(dc.first) << return_mode(dc.second) << "Cut : " << cut_string;
185  boost::trim_fill(cut_string, "");
186  std::vector<std::string> cut_paths;
187  boost::split(cut_paths, cut_string, boost::is_any_of("||"), boost::token_compress_on);
188  for(unsigned int i=0; i<cut_paths.size(); ++i){
189  // Translating the cuts of a path into a struct which is later accessed to apply them on a event.
190  CutsContainer cut;
191  fill_cut(cut_paths[i], dc, cut);
192  cuts_.push_back(cut);
193  }
194 }
virtual void fill_cut(std::string cut_string, EmbeddingHepMCFilter::DecayChannel &dc, CutsContainer &cut)
std::string return_mode(TauDecayMode mode)
std::vector< CutsContainer > cuts_
double split
Definition: MVATrainer.cc:139
bool EmbeddingHepMCFilter::filter ( const HepMC::GenEvent evt)
overridevirtual

Implements BaseHepMCFilter.

Definition at line 45 of file EmbeddingHepMCFilter.cc.

References funct::abs(), apply_cuts(), decay_and_sump4Vis(), DecayChannel_, Electron, electronPDGID_, EmbeddingHepMCFilter::DecayChannel::fill(), EmbeddingHepMCFilter::DecayChannel::first, Muon, muonPDGID_, HiggsValidation_cfi::pdg_id, EmbeddingHepMCFilter::DecayChannel::reset(), return_mode(), EmbeddingHepMCFilter::DecayChannel::second, sort_by_convention(), tauonPDGID_, and ZPDGID_.

46 {
47  //Reset DecayChannel_ and p4VisPair_ at the beginning of each event.
49  std::vector<reco::Candidate::LorentzVector> p4VisPair_;
50 
51  // Going through the particle list. Mother particles are allways before their children.
52  // One can stop the loop after the second tau is reached and processed.
53  for ( HepMC::GenEvent::particle_const_iterator particle = evt->particles_begin(); particle != evt->particles_end(); ++particle )
54  {
55  int mom_id = 0; // No particle available with PDG ID 0
56  if ((*particle)->production_vertex() != nullptr){ // search for the mom via the production_vertex
57  if ((*particle)->production_vertex()->particles_in_const_begin() != (*particle)->production_vertex()->particles_in_const_end()){
58  mom_id = (*(*particle)->production_vertex()->particles_in_const_begin())->pdg_id(); // mom was found
59  }
60  }
61 
62  if (std::abs((*particle)->pdg_id()) == tauonPDGID_ && mom_id == ZPDGID_) {
64  decay_and_sump4Vis((*particle), p4Vis); // recursive access to final states.
65  p4VisPair_.push_back(p4Vis);
66  } else if (std::abs((*particle)->pdg_id()) == muonPDGID_ && mom_id == ZPDGID_) {// Also handle the option when Z-> mumu
67  reco::Candidate::LorentzVector p4Vis = (reco::Candidate::LorentzVector) (*particle)->momentum();
68  DecayChannel_.fill(TauDecayMode::Muon); // take the muon cuts
69  p4VisPair_.push_back(p4Vis);
70  } else if (std::abs((*particle)->pdg_id()) == electronPDGID_ && mom_id == ZPDGID_) {// Also handle the option when Z-> ee
71  reco::Candidate::LorentzVector p4Vis = (reco::Candidate::LorentzVector) (*particle)->momentum();
72  DecayChannel_.fill(TauDecayMode::Electron); // take the electron cuts
73  p4VisPair_.push_back(p4Vis);
74  }
75 
76  }
77  // Putting DecayChannel_ in default convention:
78  // For mixed decay channels use the Electron_Muon, Electron_Hadronic, Muon_Hadronic convention.
79  // For symmetric decay channels (e.g. Muon_Muon) use Leading_Trailing convention with respect to Pt.
80  if (p4VisPair_.size() == 2) {
81  sort_by_convention(p4VisPair_);
82  edm::LogInfo("EmbeddingHepMCFilter") << "Quantities of the visible decay products:"
83  << "\tPt's: " << " 1st " << p4VisPair_[0].Pt() << ", 2nd " << p4VisPair_[1].Pt()
84  << "\tEta's: " << " 1st " << p4VisPair_[0].Eta() << ", 2nd " << p4VisPair_[1].Eta()
85  << " decay channel: " << return_mode(DecayChannel_.first)<< return_mode(DecayChannel_.second);
86  }
87  else {
88  edm::LogError("EmbeddingHepMCFilter") << "Size less non equal two";
89  }
90 
91  return apply_cuts(p4VisPair_);
92 }
virtual void decay_and_sump4Vis(HepMC::GenParticle *particle, reco::Candidate::LorentzVector &p4Vis)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::string return_mode(TauDecayMode mode)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:37
virtual void sort_by_convention(std::vector< reco::Candidate::LorentzVector > &p4VisPair)
virtual bool apply_cuts(std::vector< reco::Candidate::LorentzVector > &p4VisPair)
std::string EmbeddingHepMCFilter::return_mode ( TauDecayMode  mode)
inlineprivate
void EmbeddingHepMCFilter::sort_by_convention ( std::vector< reco::Candidate::LorentzVector > &  p4VisPair)
privatevirtual

Definition at line 135 of file EmbeddingHepMCFilter.cc.

References DecayChannel_, Electron, EmbeddingHepMCFilter::DecayChannel::first, Hadronic, Muon, return_mode(), EmbeddingHepMCFilter::DecayChannel::reverse(), groupFilesInBlocks::reverse, and EmbeddingHepMCFilter::DecayChannel::second.

Referenced by filter().

136 {
140 
141  if (DecayChannel_.first == DecayChannel_.second && p4VisPair[0].Pt() < p4VisPair[1].Pt())
142  {
143  edm::LogVerbatim("EmbeddingHepMCFilter") << "Changing symmetric channels to Leading_Trailing convention in Pt";
144  edm::LogVerbatim("EmbeddingHepMCFilter") << "Pt's before: " << p4VisPair[0].Pt() << " " << p4VisPair[1].Pt();
145  std::reverse(p4VisPair.begin(),p4VisPair.end());
146  edm::LogVerbatim("EmbeddingHepMCFilter") << "Pt's after: " << p4VisPair[0].Pt() << " " << p4VisPair[1].Pt();
147  }
148  else if (mixed_false_order)
149  {
150  edm::LogVerbatim("EmbeddingHepMCFilter") << "Swapping order of mixed channels";
151  edm::LogVerbatim("EmbeddingHepMCFilter") << "Pt's before: " << p4VisPair[0].Pt() << " " << p4VisPair[1].Pt();
153  edm::LogVerbatim("EmbeddingHepMCFilter") << "DecayChannel: " << return_mode(DecayChannel_.first) << return_mode(DecayChannel_.second);
154  std::reverse(p4VisPair.begin(),p4VisPair.end());
155  edm::LogVerbatim("EmbeddingHepMCFilter") << "Pt's after: " << p4VisPair[0].Pt() << " " << p4VisPair[1].Pt();
156  }
157 }
std::string return_mode(TauDecayMode mode)

Member Data Documentation

std::vector<CutsContainer> EmbeddingHepMCFilter::cuts_
private

Definition at line 75 of file EmbeddingHepMCFilter.h.

Referenced by apply_cuts(), and fill_cuts().

DecayChannel EmbeddingHepMCFilter::DecayChannel_
private

Definition at line 76 of file EmbeddingHepMCFilter.h.

Referenced by apply_cuts(), decay_and_sump4Vis(), filter(), and sort_by_convention().

DecayChannel EmbeddingHepMCFilter::ee
private

Definition at line 62 of file EmbeddingHepMCFilter.h.

Referenced by EmbeddingHepMCFilter().

DecayChannel EmbeddingHepMCFilter::eh
private

Definition at line 62 of file EmbeddingHepMCFilter.h.

Referenced by EmbeddingHepMCFilter().

const int EmbeddingHepMCFilter::electron_neutrino_PDGID_ = 12
private

Definition at line 18 of file EmbeddingHepMCFilter.h.

Referenced by decay_and_sump4Vis().

const int EmbeddingHepMCFilter::electronPDGID_ = 11
private

Definition at line 19 of file EmbeddingHepMCFilter.h.

Referenced by decay_and_sump4Vis(), and filter().

DecayChannel EmbeddingHepMCFilter::em
private

Definition at line 62 of file EmbeddingHepMCFilter.h.

Referenced by EmbeddingHepMCFilter().

DecayChannel EmbeddingHepMCFilter::hh
private

Definition at line 62 of file EmbeddingHepMCFilter.h.

Referenced by EmbeddingHepMCFilter().

DecayChannel EmbeddingHepMCFilter::mh
private

Definition at line 62 of file EmbeddingHepMCFilter.h.

Referenced by EmbeddingHepMCFilter().

DecayChannel EmbeddingHepMCFilter::mm
private

Definition at line 62 of file EmbeddingHepMCFilter.h.

Referenced by EmbeddingHepMCFilter().

const int EmbeddingHepMCFilter::muon_neutrino_PDGID_ = 14
private

Definition at line 16 of file EmbeddingHepMCFilter.h.

Referenced by decay_and_sump4Vis().

const int EmbeddingHepMCFilter::muonPDGID_ = 13
private

Definition at line 17 of file EmbeddingHepMCFilter.h.

Referenced by decay_and_sump4Vis(), and filter().

const int EmbeddingHepMCFilter::tauon_neutrino_PDGID_ = 16
private

Definition at line 14 of file EmbeddingHepMCFilter.h.

Referenced by decay_and_sump4Vis().

const int EmbeddingHepMCFilter::tauonPDGID_ = 15
private

Definition at line 15 of file EmbeddingHepMCFilter.h.

Referenced by decay_and_sump4Vis(), and filter().

const int EmbeddingHepMCFilter::ZPDGID_ = 23
private

Definition at line 20 of file EmbeddingHepMCFilter.h.

Referenced by filter().