33 #include <HepMC/GenEvent.h>
34 #include <HepMC/GenParticle.h>
57 virtual void endJob()
override ;
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)),
129 SSDiMuVetoedFilter(iConfig.getUntrackedParameter(
"SSDiMuVetoedFilter",0)),
130 SSDiEFilter(iConfig.getUntrackedParameter(
"SSDiEFilter",0)),
131 SSDiEVetoedFilter(iConfig.getUntrackedParameter(
"SSDiEVetoedFilter",0)),
132 SSDiEMuFilter(iConfig.getUntrackedParameter(
"SSDiEMuFilter",0)),
133 SSDiEMuVetoedFilter(iConfig.getUntrackedParameter(
"SSDiEMuVetoedFilter",0)),
134 SSDiLepFilter(iConfig.getUntrackedParameter(
"SSDiLepFilter",0)),
135 SSDiLepVetoedFilter(iConfig.getUntrackedParameter(
"SSDiLepVetoedFilter",0)),
136 Vetoed3muFilter(iConfig.getUntrackedParameter(
"Vetoed3muFilter",0)),
137 Vetoed2mu1eFilter(iConfig.getUntrackedParameter(
"Vetoed2mu1eFilter",0)),
138 Vetoed1mu2eFilter(iConfig.getUntrackedParameter(
"Vetoed1mu2eFilter",0)),
139 Vetoed3eFilter(iConfig.getUntrackedParameter(
"Vetoed3eFilter",0)),
140 Vetoed4muFilter(iConfig.getUntrackedParameter(
"Vetoed4muFilter",0)),
141 Vetoed2mu2eFilter(iConfig.getUntrackedParameter(
"Vetoed2mu2eFilter",0)),
142 Vetoed4eFilter(iConfig.getUntrackedParameter(
"Vetoed4eFilter",0))
296 std::map<std::string, int>
accept;
306 std::vector<int> leptonIDminus;
307 std::vector<int> leptonIDplus;
311 iEvent.
getByLabel(
"generator",
"unsmeared",mcEventHandle);
313 const HepMC::GenEvent* mcEvent = mcEventHandle->GetEvent() ;
315 HepMC::GenEvent::particle_const_iterator
i;
316 for(
i = mcEvent->particles_begin();
i!= mcEvent->particles_end();
i++){
318 bool D_part = (fabs((*i)->pdg_id())-5100000>0 && fabs((*i)->pdg_id())-5100000<40);
319 bool S_part = (fabs((*i)->pdg_id())-6100000>0 && fabs((*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!=0){
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.size()==0) || (leptonIDplus.size()==0 && 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 (fabs((*part)->pdg_id())==13 || fabs((*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 &)
#define DEFINE_FWK_MODULE(type)
virtual 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)
Abs< T >::type abs(const T &t)
virtual void endJob() override
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
void AllVetoedOff(bool inclusive_message)
virtual void beginJob() override