6 #include "HepMC/PythiaWrapper6_4.h"
14 label_(iConfig.getUntrackedParameter(
"moduleLabel",std::
string(
"generator"))),
15 particleID(iConfig.getUntrackedParameter(
"ParticleID", 0)),
16 daughterID(iConfig.getUntrackedParameter(
"DaughterID", 0)),
17 chargeconju(iConfig.getUntrackedParameter(
"ChargeConjugation",
true)),
18 ndaughters(iConfig.getUntrackedParameter(
"NumberDaughters", 0)),
19 ndescendants(iConfig.getUntrackedParameter(
"NumberDescendants", 0)),
20 minptcut(iConfig.getUntrackedParameter(
"MinPt", 0.)),
21 maxptcut(iConfig.getUntrackedParameter(
"MaxPt", 14000.)),
22 minetacut(iConfig.getUntrackedParameter(
"MinEta", -10.)),
23 maxetacut(iConfig.getUntrackedParameter(
"MaxEta", 10.)),
24 mom_minptcut(iConfig.getUntrackedParameter(
"MomMinPt", 0.)),
25 mom_maxptcut(iConfig.getUntrackedParameter(
"MomMaxPt", 14000.)),
26 mom_minetacut(iConfig.getUntrackedParameter(
"MomMinEta", -10.)),
27 mom_maxetacut(iConfig.getUntrackedParameter(
"MomMaxEta", 10.))
31 defdauID.push_back(0);
33 defdesID.push_back(0);
56 bool accepted =
false;
57 bool mom_accepted =
false;
61 const HepMC::GenEvent * myGenEvent = evt->GetEvent();
67 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
76 if ( (*p)->end_vertex() ) {
77 for ( HepMC::GenVertex::particle_iterator dau =(*p)->end_vertex()->particles_begin(HepMC::children); dau != (*p)->end_vertex()->particles_end(HepMC::children); ++dau ) {
79 for(
unsigned int i=0;
i<
dauIDs.size(); ++
i) {
80 if( (*dau)->pdg_id() !=
dauIDs[
i] )
continue ;
85 for(HepMC::GenVertex::particle_iterator des = (*dau)->end_vertex()->particles_begin(HepMC::children); des != (*des)->end_vertex()->particles_end(HepMC::children); ++des ){
87 for(
unsigned int i=0;
i<
desIDs.size(); ++
i) {
88 if( (*des)->pdg_id() !=
desIDs[
i] )
continue ;
109 mom_accepted =
false;
110 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
112 if( (*p)->pdg_id() != -
particleID )
continue ;
119 if ( (*p)->end_vertex() ) {
120 for ( HepMC::GenVertex::particle_iterator dau =(*p)->end_vertex()->particles_begin(HepMC::children); dau != (*p)->end_vertex()->particles_end(HepMC::children); ++dau ) {
122 for(
unsigned int i=0;
i<
dauIDs.size(); ++
i) {
125 int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
126 if( has_antipart == 0 ) IDanti =
dauIDs[
i];
127 if( (*dau)->pdg_id() != IDanti )
continue ;
132 for( HepMC::GenVertex::particle_iterator des = (*dau)->end_vertex()->particles_begin(HepMC::children); des != (*des)->end_vertex()->particles_end(HepMC::children); ++des ){
134 for(
unsigned int i=0;
i<
desIDs.size(); ++
i) {
137 int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
138 if( has_antipart == 0 ) IDanti =
desIDs[
i];
139 if( (*des)->pdg_id() != IDanti )
continue ;
159 return true; }
else {
return false;}
T getUntrackedParameter(std::string const &, T const &) const
std::vector< int > desIDs
PythiaMomDauFilter(const edm::ParameterSet &)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
virtual bool filter(edm::Event &, const edm::EventSetup &)
std::vector< int > dauIDs