12 evaluator_.setSystemOfUnits(1.
e+3, 1./1.60217733
e-25, 1.
e+9, 1./1.60217733
e-10,
28 const std::string & var,
const std::string & val)
30 std::vector<std::string>::iterator it(vars.begin()), ed(vars.end());
32 for (; it != ed; ++it) {
49 prepare(ns,name,exprValue,newVar,newVal);
51 <<
" in: " << ns <<
" " << name <<
" " << exprValue
52 <<
" pr: " << newVar <<
" " << newVal);
54 evaluator_.setVariable(newVar.c_str(), newVal.c_str());
56 case HepTool::Evaluator::WARNING_EXISTING_VARIABLE:
59 case HepTool::Evaluator::OK:
60 case HepTool::Evaluator::WARNING_EXISTING_FUNCTION:
61 case HepTool::Evaluator::WARNING_BLANK_STRING:
66 std::cout <<
"set-var: ns=" << ns <<
" nm=" << name <<
" val=" << exprValue << std::endl;
68 throwex(ns,name,exprValue,
"can't set parameter !");
76 case HepTool::Evaluator::WARNING_EXISTING_VARIABLE:
79 case HepTool::Evaluator::OK:
80 case HepTool::Evaluator::WARNING_EXISTING_FUNCTION:
81 case HepTool::Evaluator::WARNING_BLANK_STRING:
86 std::cout <<
"set-varname=" << n <<
" val=" << v << std::endl;
88 throwex(
"",n,v,
"can't set parameter !");
98 std::string pseudo(
"(evaluating)");
101 prepare(ns,pseudo,expr, pseudo,prepared);
104 if(
evaluator_.status()!=HepTool::Evaluator::OK) {
105 std::cout <<
"expr: " << prepared << std::endl;
110 throwex(ns,prepared,expr,
"can't evaluate: " + expr + std::string(
"!"));
119 if (
evaluator_.status()!=HepTool::Evaluator::OK) {
120 std::cout <<
"expr: " << expression << std::endl;
125 throwex(
"",expression,
"",
"can't evaluate: " + std::string(expression) + std::string(
"!"));
131 const std::string &
name
136 prepare(ns,name,
"0", newVar,newVal);
137 return evaluator_.findVariable(newVar.c_str());
153 const std::string &
name,
154 const std::string & exprValue,
155 std::string & nameResult,
156 std::string & valResult)
const
158 static const std::string sep(
"___");
163 nameResult = ns + sep +
name;
174 bool insideBracket =
false;
175 bool nsFound =
false;
177 std::vector<int> hasNs(1);
180 switch(exprValue[idx]) {
183 if (nsFound || insideBracket) {
185 "found a ':' outside '[..]' , or too many '[' !",idx);
192 if (!insideBracket) {
193 throwex(ns,name,exprValue,
"too many ']' !",idx);
206 if ( (!insideBracket) || nsFound ) {
208 "found a ':' outside '[..]' , or multiple ':' inside '[..]'",idx);
221 if ( insideBracket || nsFound ) {
223 "'[..]' not closed , or ':' outside of '[..]'",idx);
232 switch(exprValue[idx]) {
236 if ( !hasNs[varCount] ) {
237 valResult = valResult + ns + sep;
245 valResult = valResult + sep;
249 valResult = valResult + exprValue[idx];
259 const std::string &
name,
260 const std::string & expr,
261 const std::string &
reason,
264 std::string er = std::string(
"ClhepEvaluator ERROR: ") + reason + std::string(
"\n")
265 + std::string(
" nmspace=") + ns
266 + std::string(
"\n varname=") + name
267 + std::string(
"\n exp=") + expr
268 + std::string(
"\n at=") + expr.substr(0,idx);
295 std::string
e = std::string(
"ClhepEvaluator ERROR: forbidden character '")
296 + s[sz] + std::string(
"' found in '") + s + std::string(
"' !");
bool isDefined(const std::string &ns, const std::string &name)
check whether a variable is already defined or not
std::vector< std::string > variables_
std::vector< std::string > values_
An exception for DDD errors.
HepTool::Evaluator evaluator_
#define DCOUT_V(M_v_Y, M_v_S)
void clear()
access to the dictionary (namespace,name)->value
void checkname(const std::string &name) const
void throwex(const std::string &ns, const std::string &name, const std::string &expr, const std::string &reason, int idx=0) const
void set(const std::string &ns, const std::string &name, const std::string &exprValue)
put a new variable named 'namespace:name' into the dictionary of the evaluator
double eval(const std::string &ns, const std::string &expr)
evaluate an expression expr inside the local namespace
void prepare(const std::string &ns, const std::string &name, const std::string &exprValue, std::string &nameResult, std::string &valResult) const
void dd_exchange_value(std::vector< std::string > &vars, std::vector< std::string > &vals, const std::string &var, const std::string &val)