File indexing completed on 2024-04-06 12:13:27
0001 #include "GeneratorInterface/Core/interface/TaggedProtonHepMCFilter.h"
0002
0003 TaggedProtonHepMCFilter::TaggedProtonHepMCFilter(const edm::ParameterSet &iConfig)
0004 : xiMin_(iConfig.getParameter<double>("xiMin")),
0005 xiMax_(iConfig.getParameter<double>("xiMax")),
0006 oneOverbeamEnergy_(2.0 / iConfig.getParameter<double>("comEnergy")),
0007 nProtons_(iConfig.getParameter<int>("nProtons")) {}
0008
0009 bool TaggedProtonHepMCFilter::filter(const HepMC::GenEvent *evt) {
0010
0011 int nGoodProtons = 0;
0012 for (HepMC::GenEvent::particle_const_iterator particle = evt->particles_begin(); particle != evt->particles_end();
0013 ++particle) {
0014 if ((*particle)->pdg_id() == proton_PDGID_ && 1 == (*particle)->status()) {
0015 HepMC::FourVector p4 = (*particle)->momentum();
0016 double xi = (1.0 - std::abs(p4.pz()) * oneOverbeamEnergy_);
0017 if (xi > xiMin_ && xi < xiMax_)
0018 nGoodProtons++;
0019 if (nGoodProtons >= nProtons_)
0020 return true;
0021 }
0022 }
0023 return false;
0024 }