10#include <analysis/modules/TrackingSystematics/TrackingEnergyLossCorrection.h>
12#include <framework/datastore/StoreObjPtr.h>
13#include <framework/core/ModuleParam.templateDetails.h>
14#include <analysis/VariableManager/Manager.h>
15#include <analysis/dataobjects/ParticleList.h>
17#include <Math/Vector4D.h>
28 R
"DOC(Module to modify Energy of tracks from the lists. Include in your code as
32 mypath.add_module("TrackingEnergyLossCorrection", particleLists=['pi+:cut'], correction=0.001)
34The module modifies the input particleLists by subtracting the correction value to the track energy and rescaling the momenta
40 addParam(
"correction",
m_correction,
"correction value to be subtracted from the particle energy",
49 B2FATAL(
"It's not allowed to provide both a valid value for the scale parameter and a non-empty table name. Please decide for one of the two options!");
51 B2FATAL(
"Neither a valid value for the scale parameter nor a non-empty table name was provided. Please set (exactly) one of the two options!");
57 for (
const auto& i_variable : variables) {
60 B2FATAL(
"Variable '" << i_variable <<
"' is not available in Variable::Manager!");
73 B2ERROR(
"ParticleList " << iList <<
" not found");
77 size_t nPart = particleList->getListSize();
78 for (
size_t iPart = 0; iPart < nPart; iPart++) {
79 auto particle = particleList->getParticle(iPart);
80 if (particle->getParticleSource() != Particle::EParticleSourceObject::c_Composite and
81 particle->getParticleSource() != Particle::EParticleSourceObject::c_V0 and
82 particle->getParticleSource() != Particle::EParticleSourceObject::c_Track) {
83 B2WARNING(
"particle source " << particle->getParticleSource() <<
84 " is not within the expected values. please check before continuing");
99 std::map<std::string, double> values;
100 for (
const auto& i_variable : variables) {
102 double value = std::get<double>(var->function(particle));
103 values.insert(std::make_pair(i_variable, value));
106 for (
const auto& entry : info) {
117 if (particle->
getParticleSource() == Particle::EParticleSourceObject::c_Composite or
127 px += daughter->getPx();
128 py += daughter->getPy();
129 pz += daughter->getPz();
130 E += daughter->getEnergy();
132 const ROOT::Math::PxPyPzEVector vec(px, py, pz, E);
134 }
else if (particle->
getParticleSource() == Particle::EParticleSourceObject::c_Track) {
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Class to store reconstructed particles.
void writeExtraInfo(const std::string &name, const double value)
Sets the user defined extraInfo.
std::vector< Belle2::Particle * > getDaughters() const
Returns a vector of pointers to daughter particles.
void set4Vector(const ROOT::Math::PxPyPzEVector &p4)
Sets Lorentz vector.
void setEnergyLossCorrection(double energyLossCorrection)
Sets Energy loss correction.
EParticleSourceObject getParticleSource() const
Returns particle source as defined with enum EParticleSourceObject.
double getExtraInfo(const std::string &name) const
Return given value if set.
Type-safe access to single objects in the data store.
std::vector< std::string > m_ParticleLists
input particle lists
virtual void initialize() override
Initializes the modules and checks the validity of the input parameters.
virtual void event() override
Function to be executed at each event.
double getCorrectionValue(Particle *particle)
Returns the needed correction for particle based on payloadName and correctionName.
TrackingEnergyLossCorrectionModule()
Constructor: Sets the description, the properties and the parameters of the module.
std::string m_payloadName
Name of the table
void setEnergyLossCorrection(Particle *particle)
function to set the Energy correction value
std::unique_ptr< DBObjPtr< ParticleWeightingLookUpTable > > m_ParticleWeightingLookUpTable
Pointer to the table in DB.
double m_correction
input Energy scale modifier
std::string m_correctionName
Name of the correction from table.
std::vector< std::string > resolveCollections(const std::vector< std::string > &variables)
Resolve Collection Returns variable names corresponding to the given collection or if it is not a col...
const Var * getVariable(std::string name)
Get the variable belonging to the given key.
static Manager & Instance()
get singleton instance.
std::map< std::string, double > WeightInfo
Weight information: a line from the weight lookup table.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.
A variable returning a floating-point value for a given Particle.