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();
48 iter != inVertex->particles_in_const_end();iter++)
49 parents.push_back(*iter);
51 cout <<
"isC "<<(*p)->pdg_id()<<
" status "<<(*p)->status()<<
" Parents: "<<parents.size()<<
" - ";
52 for (
GenPartVectIt z = parents.begin(); z != parents.end(); z++){
53 cout << (*z)->pdg_id()<<
" ";
57 vector< GenParticle * >
child;
58 HepMC::GenVertex* outVertex = (*p)->end_vertex();
59 for(std::vector<GenParticle*>::const_iterator iter = outVertex->particles_in_const_begin();
60 iter != outVertex->particles_in_const_end();iter++)
61 child.push_back(*iter);
63 cout <<
" - Child: "<<child.size()<<
" - ";
65 cout << (*z)->pdg_id()<<
" ";
79 bool event_passed =
false;
82 HepMC::GenEvent::particle_const_iterator
p;
83 for (p = generated_event->particles_begin(); p != generated_event->particles_end(); p++) {
84 if (((*p)->pdg_id() < 1) && ((*p)->pdg_id() > -10)) {
87 vector< GenParticle * >
parents;
88 HepMC::GenVertex* inVertex = (*p)->production_vertex();
89 for(std::vector<GenParticle*>::const_iterator iter = inVertex->particles_in_const_begin();
90 iter != inVertex->particles_in_const_end();iter++)
91 parents.push_back(*iter);
93 for (
GenPartVectIt z = parents.begin(); z != parents.end(); z++){
95 vector< GenParticle * >
child;
96 HepMC::GenVertex* outVertex = (*z)->end_vertex();
97 for(std::vector<GenParticle*>::const_iterator iter = outVertex->particles_in_const_begin();
98 iter != outVertex->particles_in_const_end();iter++)
99 child.push_back(*iter);
101 if (findParticle(child, -(*p)->pdg_id())) foundQ.push_back(-(*p)->pdg_id());
111 ff[0]=0; ff[1]=0; ff[2]=0; ff[3]=0; ff[4]=0; ff[5]=0;
112 for (vector<int>::iterator
i = foundQ.begin();
i != foundQ.end();
i++){
117 if ((flavour>=0)&&(flavour<=3)) flavour=1;
119 if ( (ff[3] && ff[4]) || (ff[3] && ff[5]) || (ff[4] && ff[5]) ) flavour =0;
121 if (
jetType!=flavour) event_passed=
true;
133 if (event_passed) noAccepted++;
135 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
HepMC::GenParticle * findParticle(const GenPartVect &genPartVect, const int requested_id)
void printHisto(const HepMC::GenEvent::particle_iterator start, const HepMC::GenEvent::particle_iterator end)
~JetFlavourCutFilter() override
const HepMC::GenEvent * GetEvent() const
std::vector< HepMC::GenParticle * > GenPartVect
bool filter(edm::Event &, const edm::EventSetup &) override
std::vector< HepMC::GenParticle * >::const_iterator GenPartVectIt
JetFlavourCutFilter(const edm::ParameterSet &)