11 #include <analysis/modules/VariablesToEventExtraInfo/VariablesToEventExtraInfoModule.h>
13 #include <framework/logging/Logger.h>
14 #include <framework/core/ModuleParam.templateDetails.h>
15 #include <framework/datastore/StoreArray.h>
17 #include <analysis/dataobjects/EventExtraInfo.h>
26 setDescription(
"For each particle in the input list the selected variables are saved in an event-extra-info field with the given name. Can be used to save MC truth information, for example, in a ntuple of reconstructed particles.");
27 setPropertyFlags(c_ParallelProcessingCertified);
29 std::map<std::string, std::string> emptymap;
30 addParam(
"particleList", m_inputListName,
"Name of particle list with reconstructed particles.");
31 addParam(
"variables", m_variables,
32 "Dictionary of variables and extraInfo names to save in the event-extra-info field.\n"
33 "Variables are taken from Variable::Manager, and are identical to those available to e.g. ParticleSelector.",
35 addParam(
"overwrite", m_overwrite,
36 "-1/0/1/2: Overwrite if lower / don't overwrite / overwrite if higher / always overwrite, in case if extra info with given name already exists",
40 VariablesToEventExtraInfoModule::~VariablesToEventExtraInfoModule() =
default;
42 void VariablesToEventExtraInfoModule::initialize()
45 m_inputList.isRequired(m_inputListName);
48 for (
const auto& pair : m_variables) {
51 B2ERROR(
"Variable '" << pair.first <<
"' is not available in Variable::Manager!");
53 m_functions.push_back(var->function);
54 m_extraInfoNames.push_back(pair.second);
60 void VariablesToEventExtraInfoModule::event()
65 B2WARNING(
"Input list " << m_inputList.getName() <<
" was not created?");
69 const unsigned int numParticles = m_inputList->getListSize();
70 for (
unsigned int i = 0; i < numParticles; i++) {
71 Particle* p = m_inputList->getParticle(i);
77 void VariablesToEventExtraInfoModule::addEventExtraInfo(
const Particle* source)
80 if (not eventExtraInfo.isValid()) eventExtraInfo.create();
82 const unsigned int nVars = m_functions.size();
83 for (
unsigned int iVar = 0; iVar < nVars; iVar++) {
84 double value = m_functions[iVar](source);
86 if (eventExtraInfo->hasExtraInfo(m_extraInfoNames[iVar])) {
87 double current = eventExtraInfo->getExtraInfo(m_extraInfoNames[iVar]);
88 if (m_overwrite == -1) {
90 eventExtraInfo->setExtraInfo(m_extraInfoNames[iVar], value);
91 }
else if (m_overwrite == 1) {
93 eventExtraInfo->setExtraInfo(m_extraInfoNames[iVar], value);
94 }
else if (m_overwrite == 0) {
95 B2WARNING(
"Extra info with given name " << m_extraInfoNames[iVar] <<
" already set, I won't set it again.");
96 }
else if (m_overwrite == 2) {
97 eventExtraInfo->setExtraInfo(m_extraInfoNames[iVar], value);
101 eventExtraInfo->addExtraInfo(m_extraInfoNames[iVar], value);