6 #include "HepMC/PythiaWrapper6_4.h" 15 particleID(iConfig.getUntrackedParameter<
int>(
"ParticleID", 0)),
16 daughterID(iConfig.getUntrackedParameter<
int>(
"DaughterID", 0)),
17 chargeconju(iConfig.getUntrackedParameter<
bool>(
"ChargeConjugation",
true)),
18 ndaughters(iConfig.getUntrackedParameter<
int>(
"NumberDaughters", 0)),
19 ndescendants(iConfig.getUntrackedParameter<
int>(
"NumberDescendants", 0)),
20 minptcut(iConfig.getUntrackedParameter<double>(
"MinPt", 0.)),
21 maxptcut(iConfig.getUntrackedParameter<double>(
"MaxPt", 14000.)),
22 minetacut(iConfig.getUntrackedParameter<double>(
"MinEta", -10.)),
23 maxetacut(iConfig.getUntrackedParameter<double>(
"MaxEta", 10.)),
24 mom_minptcut(iConfig.getUntrackedParameter<double>(
"MomMinPt", 0.)),
25 mom_maxptcut(iConfig.getUntrackedParameter<double>(
"MomMaxPt", 14000.)),
26 mom_minetacut(iConfig.getUntrackedParameter<double>(
"MomMinEta", -10.)),
27 mom_maxetacut(iConfig.getUntrackedParameter<double>(
"MomMaxEta", 10.)),
28 betaBoost(iConfig.getUntrackedParameter(
"BetaBoost",0.))
32 defdauID.push_back(0);
34 defdesID.push_back(0);
58 bool mom_accepted =
false;
68 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
78 if ( (*p)->end_vertex() ) {
79 for ( HepMC::GenVertex::particle_iterator dau =(*p)->end_vertex()->particles_begin(
HepMC::children); dau != (*p)->end_vertex()->particles_end(
HepMC::children); ++dau ) {
81 for(
unsigned int i=0;
i<
dauIDs.size(); ++
i) {
82 if( (*dau)->pdg_id() !=
dauIDs[
i] )
continue ;
87 for(HepMC::GenVertex::particle_iterator des = (*dau)->end_vertex()->particles_begin(
HepMC::children); des != (*des)->end_vertex()->particles_end(
HepMC::children); ++des ){
89 for(
unsigned int i=0;
i<
desIDs.size(); ++
i) {
90 if( (*des)->pdg_id() !=
desIDs[
i] )
continue ;
112 mom_accepted =
false;
113 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
115 if( (*p)->pdg_id() != -
particleID )
continue ;
123 if ( (*p)->end_vertex() ) {
124 for ( HepMC::GenVertex::particle_iterator dau =(*p)->end_vertex()->particles_begin(
HepMC::children); dau != (*p)->end_vertex()->particles_end(
HepMC::children); ++dau ) {
126 for(
unsigned int i=0;
i<
dauIDs.size(); ++
i) {
129 int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
130 if( has_antipart == 0 ) IDanti =
dauIDs[
i];
131 if( (*dau)->pdg_id() != IDanti )
continue ;
137 int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
138 if( has_antipart == 0 ) daughterIDanti =
daughterID;
139 if((*dau)->pdg_id() == daughterIDanti) {
140 for( HepMC::GenVertex::particle_iterator des = (*dau)->end_vertex()->particles_begin(
HepMC::children); des != (*des)->end_vertex()->particles_end(
HepMC::children); ++des ){
142 for(
unsigned int i=0;
i<
desIDs.size(); ++
i) {
145 int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
146 if( has_antipart == 0 ) IDanti =
desIDs[
i];
147 if( (*des)->pdg_id() != IDanti )
continue ;
168 return true; }
else {
return false;}
HepMC::FourVector zboost(const HepMC::FourVector &, double)
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::HepMCProduct > label_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
~PythiaMomDauFilter() override
std::vector< int > desIDs
PythiaMomDauFilter(const edm::ParameterSet &)
const HepMC::GenEvent * GetEvent() const
bool accepted(std::vector< std::string_view > const &, std::string_view)
std::vector< int > dauIDs
bool filter(edm::Event &, const edm::EventSetup &) override