12 #include <analysis/modules/ParticleSelector/ParticleSelectorModule.h>
15 #include <framework/datastore/StoreObjPtr.h>
18 #include <framework/logging/Logger.h>
21 #include <analysis/dataobjects/Particle.h>
22 #include <analysis/dataobjects/ParticleList.h>
44 setDescription(
"Removes Particles from given ParticleList that do not pass specified selection criteria.");
46 setPropertyFlags(c_ParallelProcessingCertified);
48 addParam(
"decayString", m_decayString,
49 "Input ParticleList name (see :ref:`DecayString`).");
51 addParam(
"cut", m_cutParameter,
52 "Selection criteria to be applied, see `cut_strings_selections`",
56 void ParticleSelectorModule::initialize()
59 bool valid = m_decaydescriptor.init(m_decayString);
61 B2ERROR(
"ParticleSelectorModule::initialize Invalid input DecayString: " << m_decayString);
63 int nProducts = m_decaydescriptor.getNDaughters();
65 B2ERROR(
"ParticleSelectorModule::initialize Invalid input DecayString " << m_decayString
66 <<
". DecayString should not contain any daughters, only the mother particle.");
71 m_listName = mother->getFullName();
74 particleList.isRequired(m_listName);
76 m_cut = Variable::Cut::compile(m_cutParameter);
78 B2INFO(
"ParticleSelector: " << m_listName);
79 B2INFO(
" -> With cuts : " << m_cutParameter);
82 void ParticleSelectorModule::event()
85 bool existingList = plist.
isValid();
88 B2WARNING(
"Input list " << m_listName <<
" was not created?");
93 if (!m_cutParameter.empty()) {
94 std::vector<unsigned int> toRemove;
95 unsigned int n = plist->getListSize();
96 for (
unsigned i = 0; i < n; i++) {
97 const Particle* part = plist->getParticle(i);
98 if (!m_cut->check(part)) toRemove.push_back(part->getArrayIndex());
100 plist->removeParticles(toRemove);