21 std::cout <<
"Total number of accepted events = " << noAccepted << std::endl;
26 const int requested_id)
30 if (requested_id == (*p)->pdg_id())
return *
p;
39 const HepMC::GenEvent::particle_iterator
end)
41 HepMC::GenEvent::particle_iterator
p;
42 for (p = start; p !=
end; p++)
45 vector< GenParticle * >
parents;
46 HepMC::GenVertex* inVertex = (*p)->production_vertex();
47 for(std::vector<GenParticle*>::const_iterator iter = inVertex->particles_in_const_begin();
49 iter != inVertex->particles_in_const_end();iter++)
50 parents.push_back(*iter);
52 cout <<
"isC "<<(*p)->pdg_id()<<
" status "<<(*p)->status()<<
" Parents: "<<parents.size()<<
" - ";
53 for (
GenPartVectIt z = parents.begin(); z != parents.end(); z++){
54 cout << (*z)->pdg_id()<<
" ";
58 vector< GenParticle * >
child;
59 HepMC::GenVertex* outVertex = (*p)->end_vertex();
60 for(GenVertex::particles_in_const_iterator iter = outVertex->particles_in_const_begin();
61 iter != outVertex->particles_in_const_end();iter++)
62 child.push_back(*iter);
64 cout <<
" - Child: "<<child.size()<<
" - ";
66 cout << (*z)->pdg_id()<<
" ";
80 bool event_passed =
false;
83 HepMC::GenEvent::particle_const_iterator
p;
84 for (p = generated_event->particles_begin(); p != generated_event->particles_end(); p++) {
85 if (((*p)->pdg_id() < 1) && ((*p)->pdg_id() > -10)) {
88 vector< GenParticle * >
parents;
89 HepMC::GenVertex* inVertex = (*p)->production_vertex();
90 for(GenVertex::particles_in_const_iterator iter = inVertex->particles_in_const_begin();
91 iter != inVertex->particles_in_const_end();iter++)
92 parents.push_back(*iter);
94 for (
GenPartVectIt z = parents.begin(); z != parents.end(); z++){
96 vector< GenParticle * >
child;
97 HepMC::GenVertex* outVertex = (*z)->end_vertex();
98 for(GenVertex::particles_in_const_iterator iter = outVertex->particles_in_const_begin();
99 iter != outVertex->particles_in_const_end();iter++)
100 child.push_back(*iter);
102 if (findParticle(child, -(*p)->pdg_id())) foundQ.push_back(-(*p)->pdg_id());
112 ff[0]=0; ff[1]=0; ff[2]=0; ff[3]=0; ff[4]=0; ff[5]=0;
113 for (vector<int>::iterator
i = foundQ.begin();
i != foundQ.end();
i++){
118 if ((flavour>=0)&&(flavour<=3)) flavour=1;
120 if ( (ff[3] && ff[4]) || (ff[3] && ff[5]) || (ff[4] && ff[5]) ) flavour =0;
122 if (
jetType==flavour) event_passed =
true;
134 if (event_passed) noAccepted++;
136 delete generated_event;
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void printHisto(const HepMC::GenEvent::particle_iterator start, const HepMC::GenEvent::particle_iterator end)
~JetFlavourFilter() override
std::vector< HepMC::GenParticle * > GenPartVect
bool filter(edm::Event &, const edm::EventSetup &) override
HepMC::GenParticle * findParticle(const GenPartVect &genPartVect, const int requested_id)
JetFlavourFilter(const edm::ParameterSet &)
const HepMC::GenEvent * GetEvent() const
std::vector< HepMC::GenParticle * >::const_iterator GenPartVectIt