11#include <framework/logging/Logger.h>
135 VarBase(
const std::string& n,
const std::string& d,
const std::string& g,
const VariableDataType& v,
const std::string& fName =
"")
149 Var(
const std::string& n,
FunctionPtr f,
const std::string& d,
const std::string& g =
"",
150 const VariableDataType& v = VariableDataType::c_double,
const std::string& fName =
"")
159 const VariableDataType& v = VariableDataType::c_double,
const std::string& fName =
"")
168 const VariableDataType& v = VariableDataType::c_double,
const std::string& fName =
"")
187 const Var*
getVariable(
const std::string& functionName,
const std::vector<std::string>& functionArguments);
192 std::vector<const Variable::Manager::Var*>
getVariables(
const std::vector<std::string>& variables);
197 bool addAlias(
const std::string& alias,
const std::string& variable);
217 bool addCollection(
const std::string& collection,
const std::vector<std::string>& variables);
222 std::vector<std::string>
getCollection(
const std::string& collection);
227 std::vector<std::string>
resolveCollections(
const std::vector<std::string>& variables);
246 void deprecateVariable(
const std::string& name,
bool make_fatal,
const std::string& version,
const std::string& description);
270 std::vector<std::string>
getNames()
const;
291 bool createVariable(
const std::string& fullname,
const std::string& functionName,
292 const std::vector<std::string>& functionArguments);
319 const std::string& unit =
"",
const std::string& fName =
"")
325 const std::string& unit =
"",
const std::string& fName =
"")
331 const std::string& fName =
"")
351 DeprecateProxy(
const std::string& name,
bool make_fatal,
const std::string& version,
const std::string& description)
358 std::function<T> make_function(T* t)
366 auto func = std::function{t};
367 using ReturnType =
typename decltype(func)::result_type;
368 if (std::is_same_v<ReturnType, double>) {
369 return Variable::Manager::VariableDataType::c_double;
370 }
else if (std::is_same_v<ReturnType, int>) {
371 return Variable::Manager::VariableDataType::c_int;
372 }
else if (std::is_same_v<ReturnType, bool>) {
373 return Variable::Manager::VariableDataType::c_bool;
375 B2FATAL(
"Metavariables must be registered using the REGISTER_METAVARIABLE macro." << LogVar(
"Variablename", name));
382#define VARMANAGER_CONCATENATE_DETAIL(x, y) x##y
386#define VARMANAGER_CONCATENATE(x, y) VARMANAGER_CONCATENATE_DETAIL(x, y)
390#define VARMANAGER_MAKE_UNIQUE(x) VARMANAGER_CONCATENATE(x, __LINE__)
397#define REGISTER_VARIABLE_NO_UNIT(name, function, description) \
398 static Proxy VARMANAGER_MAKE_UNIQUE(_variableproxy)(std::string(name), \
399 Variable::make_function(function), std::string(description), \
400 Variable::get_function_type(name,function), std::string(""), std::string(#function));
407#define REGISTER_VARIABLE_WITH_UNIT(name, function, description, unit) \
408 static Proxy VARMANAGER_MAKE_UNIQUE(_variableproxy)(std::string(name), \
409 Variable::make_function(function), std::string(description), \
410 Variable::get_function_type(name,function), std::string(unit), std::string(#function));
417#define PICK_FIFTH_ARG(arg1, arg2, arg3, arg4, arg5, ...) arg5
424#define REGISTER_VARIABLE_MACRO_CHOOSER(...) PICK_FIFTH_ARG(__VA_ARGS__, REGISTER_VARIABLE_WITH_UNIT, REGISTER_VARIABLE_NO_UNIT, )
431#define REGISTER_VARIABLE(...) REGISTER_VARIABLE_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
438#define REGISTER_METAVARIABLE(name, function, description, variabledatatype) \
439 static Proxy VARMANAGER_MAKE_UNIQUE(_variableproxy)(std::string(name), \
440 Variable::make_function(function), std::string(description), \
441 Variable::Manager::VariableDataType(variabledatatype), std::string(#function));
448#define VARIABLE_GROUP(groupName) \
449 static GroupProxy VARMANAGER_MAKE_UNIQUE(_variablegroupproxy)(groupName);
456#define MAKE_DEPRECATED(name, make_fatal, version, description) \
457 static DeprecateProxy VARMANAGER_MAKE_UNIQUE(_deprecateproxy)(std::string(name), bool(make_fatal), std::string(version), std::string(description));
ParticleList is a container class that stores a collection of Particle objects.
Class to store reconstructed particles.
DeprecateProxy(const std::string &name, bool make_fatal, const std::string &version, const std::string &description)
constructor.
GroupProxy(const std::string &groupName)
constructor.
Global list of available variables.
Particle Object
Typedef for the cut, that we use Particles as our base objects.
std::vector< const VarBase * > m_variablesInRegistrationOrder
List of variables in registration order.
std::vector< std::string > getAliasNames() const
Return a list of all variable alias names (in reverse order added).
std::function< VarVariant(const Particle *)> FunctionPtr
functions stored take a const Particle* and return VarVariant.
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...
Manager(const Manager &)
Copy constructor disabled (not defined).
std::string m_currentGroup
Group last set via VARIABLE_GROUP().
const Var * getVariable(std::string name)
Get the variable belonging to the given key.
std::variant< double, int, bool > VarVariant
NOTE: the python interface is documented manually in analysis/doc/Variables.rst (because we use ROOT ...
std::map< std::string, std::string > m_alias
List of registered aliases.
std::map< std::string, std::shared_ptr< Var > > m_variables
List of registered variables.
void deprecateVariable(const std::string &name, bool make_fatal, const std::string &version, const std::string &description)
Make a variable deprecated.
std::map< std::string, std::shared_ptr< ParameterVar > > m_parameter_variables
List of registered parameter variables.
static Manager & Instance()
get singleton instance.
void printAliases()
Print existing aliases.
std::map< std::string, std::pair< bool, std::string > > m_deprecated
List of deprecated variables.
bool createVariable(const std::string &name)
Creates and registers a concrete variable (Var) from a MetaVar, ParameterVar or numeric constant.
void assertValidName(const std::string &name)
Abort with B2FATAL if name is not a valid name for a variable.
void clearAliases()
Clear existing aliases.
std::function< FunctionPtr(const std::vector< std::string > &)> MetaFunctionPtr
meta functions stored take a const std::vector<std::string>& and return a FunctionPtr.
std::vector< std::string > getNames() const
Return list of all variable names (in order registered).
std::map< std::string, std::vector< std::string > > m_collection
List of registered collections.
std::vector< const Variable::Manager::VarBase * > getVariables() const
Return list of all variables (in order registered).
void setVariableGroup(const std::string &groupName)
All variables registered after VARIABLE_GROUP(groupName) will be added to this group.
void registerVariable(const std::string &name, const Manager::FunctionPtr &f, const std::string &description, const Manager::VariableDataType &v, const std::string &unit="", const std::string &fName="")
Register a variable.
std::string resolveAlias(const std::string &alias)
Resolve alias Return original variable name.
std::vector< std::string > getCollection(const std::string &collection)
Get Collection Returns variable names corresponding to the given collection.
bool addAlias(const std::string &alias, const std::string &variable)
Add alias Return true if the alias was successfully added.
bool addCollection(const std::string &collection, const std::vector< std::string > &variables)
Add collection Return true if the collection was successfully added.
std::function< VarVariant(const Particle *, const std::vector< double > &)> ParameterFunctionPtr
parameter functions stored take a const Particle*, const std::vector<double>& and return VarVariant.
VariableDataType
data type of variables
void checkDeprecatedVariable(const std::string &name)
Check if a variable is deprecated.
double evaluate(const std::string &varName, const Particle *p)
Evaluate variable 'varName' on given Particle.
std::vector< double > evaluateVariables(const std::vector< std::string > &varNames, const ParticleList *plist)
Evaluate each variable in the vector 'varNames' on given ParticleList and return a flattened vector o...
std::map< std::string, std::shared_ptr< MetaVar > > m_meta_variables
List of registered meta variables.
Proxy(const std::string &name, Manager::MetaFunctionPtr f, const std::string &description, Manager::VariableDataType v, const std::string &fName="")
constructor.
Proxy(const std::string &name, Manager::FunctionPtr f, const std::string &description, Manager::VariableDataType v, const std::string &unit="", const std::string &fName="")
constructor.
Proxy(const std::string &name, Manager::ParameterFunctionPtr f, const std::string &description, Manager::VariableDataType v, const std::string &unit="", const std::string &fName="")
constructor.
Abstract base class for different kinds of events.
ParameterVar(const std::string &n, ParameterFunctionPtr f, const std::string &d, const std::string &g="", const VariableDataType &v=VariableDataType::c_double, const std::string &fName="")
ctor
ParameterFunctionPtr function
Pointer to function.
VarBase(const std::string &n, const std::string &d, const std::string &g, const VariableDataType &v, const std::string &fName="")
ctor
std::string functionName
Name of underlying function.
std::string description
Description of what this function does.
void extendDescriptionString(const std::string &d)
function to extend the description of the variable
VariableDataType variabletype
data type of variable
std::string group
Associated group.
std::string name
Unique identifier of the function, used as key.
Var(const std::string &n, FunctionPtr f, const std::string &d, const std::string &g="", const VariableDataType &v=VariableDataType::c_double, const std::string &fName="")
ctor
FunctionPtr function
Pointer to function.