33 #include <HepMC/GenEvent.h> 34 #include <HepMC/GenParticle.h> 58 bool isLepton(HepMC::GenVertex::particles_out_const_iterator
part);
59 bool isLeptonPlus(HepMC::GenVertex::particles_out_const_iterator part);
60 bool isLeptonMinus(HepMC::GenVertex::particles_out_const_iterator part);
61 void nLeptons(
const std::vector<int>&,
int&
e,
int&
mu);
127 UseFilter(iConfig.getUntrackedParameter(
"UseFilter",0)),
128 SSDiMuFilter(iConfig.getUntrackedParameter(
"SSDiMuFilter",0)),
130 SSDiEFilter(iConfig.getUntrackedParameter(
"SSDiEFilter",0)),
132 SSDiEMuFilter(iConfig.getUntrackedParameter(
"SSDiEMuFilter",0)),
134 SSDiLepFilter(iConfig.getUntrackedParameter(
"SSDiLepFilter",0)),
139 Vetoed3eFilter(iConfig.getUntrackedParameter(
"Vetoed3eFilter",0)),
296 std::map<std::string, int>
accept;
306 std::vector<int> leptonIDminus;
307 std::vector<int> leptonIDplus;
311 iEvent.
getByLabel(
"generator",
"unsmeared",mcEventHandle);
315 HepMC::GenEvent::particle_const_iterator
i;
316 for(i = mcEvent->particles_begin(); i!= mcEvent->particles_end(); i++){
318 bool D_part = (
std::abs((*i)->pdg_id())-5100000>0 &&
std::abs((*i)->pdg_id())-5100000<40);
319 bool S_part = (
std::abs((*i)->pdg_id())-6100000>0 &&
std::abs((*i)->pdg_id())-6100000<40 );
320 if(D_part || S_part){
323 HepMC::GenVertex* vertex = (*i)->end_vertex();
325 for(HepMC::GenVertex::particles_out_const_iterator
part = vertex->particles_out_const_begin();
326 part != vertex->particles_out_const_end();
part++ ){
329 if((*part)->status()==1){
331 HepMC::GenVertex* lepton_vertex = (*part)->end_vertex();
332 if(lepton_vertex!=
nullptr){
333 for(HepMC::GenVertex::particles_out_const_iterator lepton_part = lepton_vertex->particles_out_const_begin();
334 lepton_part != lepton_vertex->particles_out_const_end(); lepton_part++ ){
336 if((*part)->pdg_id() == (*lepton_part)->pdg_id()){
339 if((*part)->pdg_id() == (*lepton_part)->pdg_id() && (*lepton_part)->status()==1){
340 if(
isLeptonPlus(lepton_part))leptonIDplus.push_back((*lepton_part)->pdg_id());
341 if(
isLeptonMinus(lepton_part))leptonIDminus.push_back((*lepton_part)->pdg_id());
351 if((leptonIDplus.size()==1 && leptonIDminus.size()==1) || (leptonIDplus.size()==1 && leptonIDminus.size()==1)){
360 if(mu==1 && e==1)
nDiemu++;
361 if(mu==0 && e==2)
nDiee++;
366 if(leptonIDplus.size()>1 || leptonIDminus.size()>1){
372 if((leptonIDplus.size()==2 && leptonIDminus.empty()) || (leptonIDplus.empty() && leptonIDminus.size()==2)){
411 if(leptonIDplus.size()+leptonIDminus.size()==4){
432 if(leptonIDplus.size()+leptonIDminus.size()==3){
460 #ifdef THIS_IS_AN_EVENT_EXAMPLE 465 #ifdef THIS_IS_AN_EVENTSETUP_EXAMPLE 467 iSetup.
get<SetupRecord>().
get(pSetup);
486 return (
std::abs((*part)->pdg_id())==13 ||
std::abs((*part)->pdg_id())==11);
492 return ((*part)->pdg_id()==-13 || (*part)->pdg_id()==-11);
497 return ((*part)->pdg_id()==13 || (*part)->pdg_id()==11);
502 int nentries = (
int)leptons_id.size();
503 for(
int i=0;
i<nentries;
i++){
504 if(
abs(leptons_id.at(
i))==11)e++;
505 if(
abs(leptons_id.at(
i))==13)mu++;
bool isLepton(HepMC::GenVertex::particles_out_const_iterator part)
void nLeptons(const std::vector< int > &, int &e, int &mu)
bool isLeptonPlus(HepMC::GenVertex::particles_out_const_iterator part)
UEDMultiLeptonFilter(const edm::ParameterSet &)
bool filter(edm::Event &, const edm::EventSetup &) override
bool isLeptonMinus(HepMC::GenVertex::particles_out_const_iterator part)
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
#define DEFINE_FWK_MODULE(type)
~UEDMultiLeptonFilter() override
Abs< T >::type abs(const T &t)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
void AllVetoedOff(bool inclusive_message)
const HepMC::GenEvent * GetEvent() const