12 fVerbose(iConfig.getUntrackedParameter(
"verbose",0)),
14 particleID(iConfig.getUntrackedParameter(
"ParticleID", 0)),
15 motherID(iConfig.getUntrackedParameter(
"MotherID", 0)),
16 chargeconju(iConfig.getUntrackedParameter(
"ChargeConjugation",
true)),
17 ndaughters(iConfig.getUntrackedParameter(
"NumberDaughters", 0)),
18 maxptcut(iConfig.getUntrackedParameter(
"MaxPt", 14000.))
22 defdauID.push_back(0);
24 vector<double> defminptcut;
25 defminptcut.push_back(0.);
27 vector<double> defminetacut;
28 defminetacut.push_back(-10.);
30 vector<double> defmaxetacut;
31 defmaxetacut.push_back(10.);
34 edm::LogInfo(
"PythiaDauVFilter") <<
"----------------------------------------------------------------------" << endl;
35 edm::LogInfo(
"PythiaDauVFilter") <<
"--- PythiaDauVFilter" << endl;
36 for (
unsigned int i=0;
i<
dauIDs.size(); ++
i) {
44 edm::LogInfo(
"PythiaDauVFilter") <<
"Creating pythia8 instance for particle properties" << endl;
70 vector<int> vparticles;
78 for (HepMC::GenEvent::particle_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p) {
85 for (HepMC::GenVertex::particles_in_const_iterator des = (*p)->production_vertex()->particles_in_const_begin();
86 des != (*p)->production_vertex()->particles_in_const_end();
89 edm::LogInfo(
"PythiaDauVFilter") <<
"mother: " << (*des)->pdg_id() <<
" pT: " << (*des)->momentum().perp() <<
" eta: " << (*des)->momentum().eta() << endl;
97 if (0 == OK)
continue;
103 edm::LogInfo(
"PythiaDauVFilter") <<
"found ID: " << (*p)->pdg_id() <<
" pT: " << (*p)->momentum().perp() <<
" eta: " << (*p)->momentum().eta() << endl;
105 vparticles.push_back((*p)->pdg_id());
106 if ((*p)->end_vertex()) {
107 for (HepMC::GenVertex::particle_iterator des=(*p)->end_vertex()->particles_begin(
HepMC::children);
112 edm::LogInfo(
"PythiaDauVFilter") <<
"ID: " << (*des)->pdg_id() <<
" pT: " << (*des)->momentum().perp() <<
" eta: " << (*des)->momentum().eta() << endl;
114 for (
unsigned int i=0;
i<
dauIDs.size(); ++
i) {
115 if ((*des)->pdg_id() !=
dauIDs[
i] )
continue ;
117 edm::LogInfo(
"PythiaDauVFilter") <<
"i = " <<
i <<
" pT = " << (*des)->momentum().perp() <<
" eta = " << (*des)->momentum().eta() << endl;
119 if ((*des)->momentum().perp() >
minptcut[
i] &&
120 (*des)->momentum().perp() <
maxptcut &&
124 vparticles.push_back((*des)->pdg_id());
126 edm::LogInfo(
"PythiaDauVFilter") <<
" accepted this particle " << (*des)->pdg_id()
127 <<
" pT = " << (*des)->momentum().perp() <<
" eta = " << (*des)->momentum().eta() << endl;
139 edm::LogInfo(
"PythiaDauVFilter") <<
" accepted this decay: ";
140 for (
unsigned int iv = 0; iv < vparticles.size(); ++iv)
edm::LogInfo(
"PythiaDauVFilter") << vparticles[iv] <<
" ";
152 for (HepMC::GenEvent::particle_iterator
p = myGenEvent->particles_begin();
153 p != myGenEvent->particles_end(); ++
p) {
160 for (HepMC::GenVertex::particles_in_const_iterator des = (*p)->production_vertex()->particles_in_const_begin();
161 des != (*p)->production_vertex()->particles_in_const_end();
164 edm::LogInfo(
"PythiaDauVFilter") <<
"mother: " << (*des)->pdg_id() <<
" pT: " << (*des)->momentum().perp() <<
" eta: " << (*des)->momentum().eta() << endl;
172 if (0 == OK)
continue;
175 edm::LogInfo(
"PythiaDauVFilter") <<
"found ID: " << (*p)->pdg_id() <<
" pT: " << (*p)->momentum().perp() <<
" eta: " << (*p)->momentum().eta() << endl;
177 vparticles.push_back((*p)->pdg_id());
180 if ((*p)->end_vertex()) {
181 for (HepMC::GenVertex::particle_iterator des=(*p)->end_vertex()->particles_begin(
HepMC::children);
186 edm::LogInfo(
"PythiaDauVFilter") <<
"ID: " << (*des)->pdg_id() <<
" pT: " << (*des)->momentum().perp() <<
" eta: " << (*des)->momentum().eta() << endl;
188 for (
unsigned int i=0;
i<
dauIDs.size(); ++
i) {
191 if ((*des)->pdg_id() != IDanti)
continue ;
193 edm::LogInfo(
"PythiaDauVFilter") <<
"i = " <<
i <<
" pT = " << (*des)->momentum().perp() <<
" eta = " << (*des)->momentum().eta() << endl;
195 if ((*des)->momentum().perp() >
minptcut[
i] &&
196 (*des)->momentum().perp() <
maxptcut &&
200 vparticles.push_back((*des)->pdg_id());
202 edm::LogInfo(
"PythiaDauVFilter") <<
" accepted this particle " << (*des)->pdg_id()
203 <<
" pT = " << (*des)->momentum().perp() <<
" eta = " << (*des)->momentum().eta() << endl;
213 edm::LogInfo(
"PythiaDauVFilter") <<
" accepted this anti-decay: ";
214 for (
unsigned int iv = 0; iv < vparticles.size(); ++iv)
edm::LogInfo(
"PythiaDauVFilter") << vparticles[iv] <<
" ";
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< Pythia8::Pythia > fLookupGen
bool getByToken(EDGetToken token, Handle< PROD > &result) const
~PythiaDauVFilter() override
const edm::EDGetTokenT< edm::HepMCProduct > token_
std::vector< double > maxetacut
std::vector< int > dauIDs
std::vector< double > minetacut
#define DEFINE_FWK_MODULE(type)
Abs< T >::type abs(const T &t)
bool filter(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
std::pair< int, edm::FunctionWithDict > OK
std::vector< double > minptcut
const HepMC::GenEvent * GetEvent() const
bool accepted(std::vector< std::string_view > const &, std::string_view)
PythiaDauVFilter(const edm::ParameterSet &)