13 edm::
InputTag(iConfig.getUntrackedParameter(
"moduleLabel",
std::
string(
"generator")),
"unsmeared"))),
14 particleID(iConfig.getUntrackedParameter(
"ParticleID", 0)),
15 minpcut(iConfig.getUntrackedParameter(
"MinP", 0.)),
16 maxpcut(iConfig.getUntrackedParameter(
"MaxP", 10000.)),
17 minptcut(iConfig.getUntrackedParameter(
"MinPt", 0.)),
18 maxptcut(iConfig.getUntrackedParameter(
"MaxPt", 10000.)),
19 minetacut(iConfig.getUntrackedParameter(
"MinEta", -10.)),
20 maxetacut(iConfig.getUntrackedParameter(
"MaxEta", 10.)),
21 minrapcut(iConfig.getUntrackedParameter(
"MinRapidity", -20.)),
22 maxrapcut(iConfig.getUntrackedParameter(
"MaxRapidity", 20.)),
23 minphicut(iConfig.getUntrackedParameter(
"MinPhi", -3.5)),
24 maxphicut(iConfig.getUntrackedParameter(
"MaxPhi", 3.5)),
25 betaBoost(iConfig.getUntrackedParameter(
"BetaBoost", 0.)),
26 motherIDs(iConfig.getUntrackedParameter(
"MotherIDs",
std::vector<
int>{0})),
27 sisterID(iConfig.getUntrackedParameter(
"SisterID", 0)),
29 nephewIDs(iConfig.getUntrackedParameter(
"NephewIDs", std::vector<int>{0})),
30 minNephewPts(iConfig.getUntrackedParameter(
"MinNephewPts", std::vector<double>{0.})) {
33 <<
"'nephewIDs' and 'minNephewPts' need same length.";
54 for (HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end();
57 double rapidity = 0.5 *
log((mom.e() + mom.pz()) / (mom.e() - mom.pz()));
63 HepMC::GenParticle* mother = (*((*p)->production_vertex()->particles_in_const_begin()));
67 if (
abs(mother->pdg_id()) ==
abs(motherID)) {
69 for (HepMC::GenVertex::particle_iterator dau = mother->end_vertex()->particles_begin(
HepMC::children);
77 for (HepMC::GenVertex::particle_iterator nephew = (*dau)->end_vertex()->particles_begin(
HepMC::children);
80 int nephew_pdgId =
abs((*nephew)->pdg_id());
84 failNephewPt += ((*nephew)->momentum().perp() <
minNephewPts.at(
i));
91 HepMC::GenVertex* v1 = (*dau)->production_vertex();
92 HepMC::GenVertex* v2 = (*dau)->end_vertex();
94 double lx12 = v1->position().x() - v2->position().x();
95 double ly12 = v1->position().y() - v2->position().y();
96 double lxy12 =
sqrt(lx12 * lx12 + ly12 * ly12);
HepMC::FourVector zboost(const HepMC::FourVector &, double)
PythiaFilterMotherSister(const edm::ParameterSet &)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< double > minNephewPts
~PythiaFilterMotherSister() override
Abs< T >::type abs(const T &t)
std::vector< int > motherIDs
bool filter(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
const HepMC::GenEvent * GetEvent() const
std::vector< int > nephewIDs
const double maxSisDisplacement
const edm::EDGetTokenT< edm::HepMCProduct > token_