Skip to content
Snippets Groups Projects
Commit 1515629d authored by Walter Lampl's avatar Walter Lampl
Browse files

Merge branch 'cherry-pick-df9bf957-master' into 'master'

Sweeping !20643 from 21.0 to master.
Add the ability to flag additional PDG codes as being non-interacting

See merge request atlas/athena!20886
parents cb0dab2a c06afcee
No related branches found
No related tags found
No related merge requests found
......@@ -92,6 +92,8 @@ def getGenParticleInteractingFilter(name="ISF_GenParticleInteractingFilter", **k
simdict = simFlags.specialConfiguration.get_Value()
if simdict is not None and "InteractingPDGCodes" in simdict:
kwargs.setdefault('AdditionalInteractingParticleTypes', simdict["InteractingPDGCodes"])
if simdict is not None and "NonInteractingPDGCodes" in simdict:
kwargs.setdefault('AdditionalNonInteractingParticleTypes', simdict["InteractingNonPDGCodes"])
return CfgMgr.ISF__GenParticleInteractingFilter(name, **kwargs)
def getEtaPhiFilter(name="ISF_EtaPhiFilter", **kwargs):
......
......@@ -22,6 +22,7 @@ ISF::GenParticleInteractingFilter::GenParticleInteractingFilter( const std::stri
: base_class(t,n,p)
{
declareProperty("AdditionalInteractingParticleTypes", m_additionalInteractingParticleTypes);
declareProperty("AdditionalNonInteractingParticleTypes", m_additionalNonInteractingParticleTypes);
}
StatusCode ISF::GenParticleInteractingFilter::initialize()
......@@ -35,6 +36,33 @@ StatusCode ISF::GenParticleInteractingFilter::initialize()
ATH_MSG_DEBUG(" " << pdg_id);
}
}
if(m_additionalNonInteractingParticleTypes.empty()) {
ATH_MSG_DEBUG("No additional particle types will be classified as non-interacting.");
}
else {
ATH_MSG_DEBUG("Will classify particles with the following additional PDG codes as non-interacting:");
for(const auto& pdg_id : m_additionalNonInteractingParticleTypes) {
ATH_MSG_DEBUG(" " << pdg_id);
}
}
if (!m_additionalInteractingParticleTypes.empty() && !m_additionalNonInteractingParticleTypes.empty()) {
//Insanity check
bool clash(false);
for (const auto& pdg_id : m_additionalInteractingParticleTypes) {
if (find(m_additionalNonInteractingParticleTypes.begin(),
m_additionalNonInteractingParticleTypes.end(),
pdg_id) != m_additionalNonInteractingParticleTypes.end())
{
ATH_MSG_ERROR("Particle with PDG code " << pdg_id << " requested to be classified as both interacting and non-interacting.");
clash=true;
}
}
if (clash) {
ATH_MSG_ERROR("Please check your configuration!");
return StatusCode::FAILURE;
}
}
return StatusCode::SUCCESS;
}
......@@ -45,6 +73,9 @@ bool ISF::GenParticleInteractingFilter::pass(const HepMC::GenParticle& particle)
const bool isInteracting = find(m_additionalInteractingParticleTypes.begin(),
m_additionalInteractingParticleTypes.end(),
pdg_id) != m_additionalInteractingParticleTypes.end();
return !MC::isNonInteracting( &particle ) || isInteracting;
const bool isNonInteracting = find(m_additionalNonInteractingParticleTypes.begin(),
m_additionalNonInteractingParticleTypes.end(),
pdg_id) != m_additionalNonInteractingParticleTypes.end();
return !(MC::isNonInteracting( &particle ) || isNonInteracting) || isInteracting;
}
......@@ -46,6 +46,9 @@ namespace ISF {
/** Additional PDG codes to classify as interacting */
std::vector<int> m_additionalInteractingParticleTypes;
/** Additional PDG codes to classify as non-interacting */
std::vector<int> m_additionalNonInteractingParticleTypes;
};
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment