File indexing completed on 2024-04-06 12:13:58
0001 #include "GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.h"
0002
0003 JetInputHepMC::JetInputHepMC() : ptMin(0.0) {}
0004
0005 JetInputHepMC::~JetInputHepMC() {}
0006
0007 void JetInputHepMC::setIgnoredParticles(const std::vector<unsigned int> &particleIDs) {
0008 ignoreParticleIDs = particleIDs;
0009 std::sort(ignoreParticleIDs.begin(), ignoreParticleIDs.end());
0010 }
0011
0012 static inline bool isContained(const std::vector<unsigned int> &list, int id) {
0013 unsigned int absId = (unsigned int)(id > 0 ? id : -id);
0014 std::vector<unsigned int>::const_iterator pos = std::lower_bound(list.begin(), list.end(), absId);
0015 return pos != list.end() && *pos == absId;
0016 }
0017
0018 bool JetInputHepMC::isIgnored(int pdgId) const { return isContained(ignoreParticleIDs, pdgId); }
0019
0020 JetInputHepMC::ParticleVector JetInputHepMC::operator()(const HepMC::GenEvent *event) const {
0021 ParticleVector particles;
0022 for (HepMC::GenEvent::particle_const_iterator iter = event->particles_begin(); iter != event->particles_end(); ++iter)
0023 particles.push_back(*iter);
0024
0025 std::sort(particles.begin(), particles.end());
0026 unsigned int size = particles.size();
0027
0028 ParticleBitmap selected(size, false);
0029 ParticleBitmap invalid(size, false);
0030
0031 for (unsigned int i = 0; i < size; i++) {
0032 const HepMC::GenParticle *particle = particles[i];
0033 if (invalid[i])
0034 continue;
0035 if (particle->status() == 1)
0036 selected[i] = true;
0037 }
0038
0039 ParticleVector result;
0040 for (unsigned int i = 0; i < size; i++) {
0041 const HepMC::GenParticle *particle = particles[i];
0042 if (!selected[i] || invalid[i])
0043 continue;
0044
0045
0046
0047 if (particle->momentum().perp() >= ptMin)
0048 result.push_back(particle);
0049 }
0050
0051 return result;
0052 }