10 #include <analysis/modules/TrackingSystematics/TrackingSystematics.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>
19 #include <Math/Vector4D.h>
29 R
"DOC(Module to remove tracks from the lists at random. Include in your code as
33 mypath.add_module("TrackingEfficiency", particleLists=['pi+:cut'], frac=0.01)
35 The module modifies the input particleLists by randomly removing tracks with the probability frac.
40 addParam(
"frac",
m_frac,
"probability to remove the particle", 0.0);
46 std::map <unsigned, bool> indexToRemove;
53 B2ERROR(
"ParticleList " << iList <<
" not found");
58 B2ERROR(
"The provided particlelist " << iList <<
" does not contain track-based particles.");
61 std::vector<unsigned int> toRemove;
62 size_t nPart = particleList->getListSize();
63 for (
size_t iPart = 0; iPart < nPart; iPart++) {
64 auto particle = particleList->getParticle(iPart);
65 unsigned mdstIndex = particle->getMdstArrayIndex();
67 if (indexToRemove.find(mdstIndex) != indexToRemove.end()) {
69 remove = indexToRemove.at(mdstIndex);
72 auto prob = gRandom->Uniform();
74 indexToRemove.insert(std::pair{mdstIndex, remove});
76 if (remove) toRemove.push_back(particle->getArrayIndex());
78 particleList->removeParticles(toRemove);
85 R
"DOC(Module to modify momentum of tracks from the lists. Include in your code as
89 mypath.add_module("TrackingMomentum", particleLists=['pi+:cut'], scale=0.999)
91 The module modifies the input particleLists by scaling track momenta as given by the parameter scale
96 addParam(
"scale",
m_scale,
"scale factor to be applied to 3-momentum", nan(
""));
105 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!");
107 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!");
109 B2FATAL(
"It's not allowed to provide both a valid value for the scalingFactorName and smearingFactorName. Please set (exactly) one of the two options!");
115 for (
const auto& i_variable : variables) {
118 B2FATAL(
"Variable '" << i_variable <<
"' is not available in Variable::Manager!");
131 B2ERROR(
"ParticleList " << iList <<
" not found");
135 size_t nPart = particleList->getListSize();
136 for (
size_t iPart = 0; iPart < nPart; iPart++) {
137 auto particle = particleList->getParticle(iPart);
150 std::map<std::string, double> values;
151 for (
const auto& i_variable : variables) {
153 double value = std::get<double>(var->function(particle));
154 values.insert(std::make_pair(i_variable, value));
158 for (
const auto& entry : info) {
159 particle->writeExtraInfo(
m_payloadName +
"_" + entry.first, entry.second);
172 std::map<std::string, double> values;
173 for (
const auto& i_variable : variables) {
175 double value = std::get<double>(var->function(particle));
176 values.insert(std::make_pair(i_variable, value));
180 for (
const auto& entry : info) {
181 particle->writeExtraInfo(
m_payloadName +
"_" + entry.first, gRandom->Gaus(1, entry.second));
190 if (particle->getParticleSource() == Particle::EParticleSourceObject::c_Composite or
191 particle->getParticleSource() == Particle::EParticleSourceObject::c_V0) {
192 for (
auto daughter : particle->getDaughters()) {
199 for (
auto daughter : particle->getDaughters()) {
200 px += daughter->getPx();
201 py += daughter->getPy();
202 pz += daughter->getPz();
203 E += daughter->getEnergy();
205 const ROOT::Math::PxPyPzEVector vec(px, py, pz,
E);
206 particle->set4Vector(vec);
207 }
else if (particle->getParticleSource() == Particle::EParticleSourceObject::c_Track) {
209 particle->setMomentumScalingFactor(
m_scale);
The ParticleType class for identifying different particle types.
static const ParticleSet chargedStableSet
set of charged stable particles
void setDescription(const std::string &description)
Sets the description of the module.
Class to store reconstructed particles.
Type-safe access to single objects in the data store.
std::vector< std::string > m_ParticleLists
input particle lists
virtual void event() override
Function to be executed at each event.
double m_frac
fraction of particles to be removed from the particlelist
TrackingEfficiencyModule()
Constructor: Sets the description, the properties and the parameters of the module.
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.
std::string m_scalingFactorName
Name of the scale factor from table.
std::string m_payloadName
Name of the table
std::unique_ptr< DBObjPtr< ParticleWeightingLookUpTable > > m_ParticleWeightingLookUpTable
Pointer to the table in DB.
void setMomentumScalingFactor(Particle *particle)
function to set momentum scaling factor
double m_scale
input momentum scale modifier
double getSmearingFactor(Particle *particle)
Returns the needed smearing factor for particle based on payloadName and smearingFactorName.
std::string m_smearingFactorName
Name of the smear factor from table.
TrackingMomentumModule()
Constructor: Sets the description, the properties and the parameters of the module.
double getScalingFactor(Particle *particle)
Returns the needed scale factor for particle based on payloadName and scalingFactorName.
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.
REG_MODULE(arichBtest)
Register the Module.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Abstract base class for different kinds of events.
A variable returning a floating-point value for a given Particle.