8 #include <analysis/modules/TagUniqueSignal/TagUniqueSignalModule.h>
10 #include <analysis/dataobjects/Particle.h>
11 #include <mdst/dataobjects/MCParticle.h>
12 #include <analysis/dataobjects/ParticleList.h>
14 #include <framework/datastore/StoreObjPtr.h>
15 #include <framework/logging/Logger.h>
31 setDescription(
"Mark true (target=1) candidates from input list via extra-info field. Only the first true candidate associated with an MCParticle is marked.");
32 setPropertyFlags(c_ParallelProcessingCertified);
35 addParam(
"particleList", m_particleList,
"Input ParticleList name");
36 addParam(
"target", m_targetVariable,
"Variable which defines signal and background.", std::string(
"isSignal"));
37 addParam(
"extraInfoName", m_extraInfoName,
38 "Extra-info field added to all particles in the input list. 1 for unique signal, 0 for background or duplicates.",
39 string(
"uniqueSignal"));
42 void TagUniqueSignalModule::initialize()
48 m_targetVar = manager.getVariable(m_targetVariable);
49 if (m_targetVar ==
nullptr) {
50 B2ERROR(
"TagUniqueSignal: Variable::Manager doesn't have variable" << m_targetVariable);
54 void TagUniqueSignalModule::event()
61 const int size = inPList->getListSize();
62 std::set<const MCParticle*> foundMCParticles;
63 for (
int i = 0; i < size; i++) {
64 Particle* part = inPList->getParticle(i);
66 float extraInfoValue = 0.0;
67 if (mcp and m_targetVar->function(part)) {
68 const bool was_inserted = foundMCParticles.insert(mcp).second;
72 if (part->hasExtraInfo(m_extraInfoName)) {
73 B2WARNING(
"Extra Info with given name is already set! This module can only be used once per particle.");
75 part->addExtraInfo(m_extraInfoName, extraInfoValue);
A Class to store the Monte Carlo particle information.
Class to store reconstructed particles.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
Type-safe access to single objects in the data store.
Loops through the particle list finds a unique signal candidate for each event.
Global list of available variables.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.