27 std::vector<std::string> functionPatterns;
31 const std::vector<std::string>& patterns() {
32 if (functionPatterns.empty()) {
33 const std::string array[6] = {
"E",
"P",
"theta",
"phi",
"pT",
"pZ"};
34 functionPatterns.assign(array, array + 6);
36 return functionPatterns;
42 const std::string tformulaVariables[4] = {
"x",
"y",
"z",
"t"};
45 std::map<std::string, Smear::KinType> kinTypes;
48 const std::map<std::string, Smear::KinType>& kinTypeTable() {
49 if (kinTypes.empty()) {
50 kinTypes.insert(std::make_pair(
"E", Smear::kE));
51 kinTypes.insert(std::make_pair(
"P", Smear::kP));
52 kinTypes.insert(std::make_pair(
"theta", Smear::kTheta));
53 kinTypes.insert(std::make_pair(
"phi", Smear::kPhi));
54 kinTypes.insert(std::make_pair(
"pT", Smear::kPt));
55 kinTypes.insert(std::make_pair(
"pZ", Smear::kPz));
82 std::string f =
Parse(formula);
83 mFormula =
new TFormula(TUUID().AsString(), f.c_str());
87 if (args.size() != mVariables.size()) {
88 std::cerr <<
"FormulaString::Eval() got " << args.size() <<
89 " arguments, expected " << mVariables.size() << std::endl;
93 std::vector<double> a(args);
95 return mFormula->Eval(a.at(0), a.at(1), a.at(2), a.at(3));
109 std::map<int, string> args;
110 typedef vector<string>::const_iterator StrIter;
111 for (StrIter i = patterns().begin(); i != patterns().end(); ++i) {
112 size_t position = formula.find(*i);
113 if (position != string::npos) {
114 args.insert(std::make_pair(position, *i));
121 std::list<string> substitutions(tformulaVariables,
122 tformulaVariables + 4);
124 for (std::map<int, string>::const_iterator i = args.begin();
125 i != args.end(); ++i) {
126 s.ReplaceAll(i->second, substitutions.front());
127 substitutions.pop_front();
130 return string(s.Data());
136 str = mFormula->GetTitle();
146 KinType type(kInvalidKinType);
147 if (kinTypeTable().find(name) != kinTypeTable().end()) {
148 type = kinTypes[name];
155 std::map<std::string, KinType>::const_iterator i;
156 for (i = kinTypeTable().begin(); i != kinTypeTable().end(); ++i) {
157 if (i->second == type) {