Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
HepTool::Evaluator Class Reference

#include <Evaluator.h>

+ Inheritance diagram for HepTool::Evaluator:

Public Types

enum  {
  OK , WARNING_EXISTING_VARIABLE , WARNING_EXISTING_FUNCTION , WARNING_BLANK_STRING ,
  ERROR_NOT_A_NAME , ERROR_SYNTAX_ERROR , ERROR_UNPAIRED_PARENTHESIS , ERROR_UNEXPECTED_SYMBOL ,
  ERROR_UNKNOWN_VARIABLE , ERROR_UNKNOWN_FUNCTION , ERROR_EMPTY_PARAMETER , ERROR_CALCULATION_ERROR
}
 

Public Member Functions

 Evaluator ()
 
 ~Evaluator ()
 
double evaluate (const char *expression)
 
int status () const
 
int error_position () const
 
void print_error () const
 
std::string error_name () const
 
void setVariable (const char *name, double value)
 
void setVariable (const char *name, const char *expression)
 
void setFunction (const char *name, double(*fun)())
 
void setFunction (const char *name, double(*fun)(double))
 
void setFunction (const char *name, double(*fun)(double, double))
 
void setFunction (const char *name, double(*fun)(double, double, double))
 
void setFunction (const char *name, double(*fun)(double, double, double, double))
 
void setFunction (const char *name, double(*fun)(double, double, double, double, double))
 
bool findVariable (const char *name) const
 
bool findFunction (const char *name, int npar) const
 
void removeVariable (const char *name)
 
void removeFunction (const char *name, int npar)
 
void clear ()
 
void setStdMath ()
 
void setSystemOfUnits (double meter=1.0, double kilogram=1.0, double second=1.0, double ampere=1.0, double kelvin=1.0, double mole=1.0, double candela=1.0)
 

Detailed Description

Evaluator of arithmetic expressions with an extendable dictionary. Example:

eval.setStdMath();
double res = eval.evaluate("sin(30*degree)");
void print_error() const
Definition: Evaluator.cc:641
double evaluate(const char *expression)
Definition: Evaluator.cc:611
int status() const
Definition: Evaluator.cc:631
Author
Evgeni Chernyaev Evgue.nosp@m.ni.T.nosp@m.chern.nosp@m.iaev.nosp@m.@cern.nosp@m..ch

Definition at line 26 of file Evaluator.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

List of possible statuses. Status of the last operation can be obtained with status(). In case if status() is an ERROR the corresponding error message can be printed with print_error().

See also
status
error_position
print_error
Enumerator
OK 

Everything OK

WARNING_EXISTING_VARIABLE 

Redefinition of existing variable

WARNING_EXISTING_FUNCTION 

Redefinition of existing function

WARNING_BLANK_STRING 

Empty input string

ERROR_NOT_A_NAME 

Not allowed sysmbol in the name of variable or function

ERROR_SYNTAX_ERROR 

Systax error

ERROR_UNPAIRED_PARENTHESIS 

Unpaired parenthesis

ERROR_UNEXPECTED_SYMBOL 

Unexpected sysbol

ERROR_UNKNOWN_VARIABLE 

Non-existing variable

ERROR_UNKNOWN_FUNCTION 

Non-existing function

ERROR_EMPTY_PARAMETER 

Function call has empty parameter

ERROR_CALCULATION_ERROR 

Error during calculation

Definition at line 39 of file Evaluator.h.

39 {
40 OK, /**< Everything OK */
41 WARNING_EXISTING_VARIABLE, /**< Redefinition of existing variable */
42 WARNING_EXISTING_FUNCTION, /**< Redefinition of existing function */
43 WARNING_BLANK_STRING, /**< Empty input string */
44 ERROR_NOT_A_NAME, /**< Not allowed sysmbol in the name of variable or function */
45 ERROR_SYNTAX_ERROR, /**< Systax error */
46 ERROR_UNPAIRED_PARENTHESIS, /**< Unpaired parenthesis */
47 ERROR_UNEXPECTED_SYMBOL, /**< Unexpected sysbol */
48 ERROR_UNKNOWN_VARIABLE, /**< Non-existing variable */
49 ERROR_UNKNOWN_FUNCTION, /**< Non-existing function */
50 ERROR_EMPTY_PARAMETER, /**< Function call has empty parameter */
51 ERROR_CALCULATION_ERROR /**< Error during calculation */
52 };
@ ERROR_UNPAIRED_PARENTHESIS
Definition: Evaluator.h:46

Constructor & Destructor Documentation

◆ Evaluator()

HepTool::Evaluator::Evaluator ( )

Constructor.

Definition at line 596 of file Evaluator.cc.

596 {
597 Struct * s = new Struct();
598 p = (void *) s;
599 s->theExpression = 0;
600 s->thePosition = 0;
601 s->theStatus = OK;
602 s->theResult = 0.0;
603}
pchar thePosition
Definition: Evaluator.cc:43
pchar theExpression
Definition: Evaluator.cc:42
int theStatus
Definition: Evaluator.cc:44
double theResult
Definition: Evaluator.cc:45

◆ ~Evaluator()

HepTool::Evaluator::~Evaluator ( )

Destructor.

Definition at line 606 of file Evaluator.cc.

606 {
607 delete (Struct *)(p);
608}

Member Function Documentation

◆ clear()

void HepTool::Evaluator::clear ( )

Clear all settings.

Definition at line 762 of file Evaluator.cc.

762 {
763 Struct * s = (Struct *) p;
764 s->theDictionary.clear();
765 s->theExpression = 0;
766 s->thePosition = 0;
767 s->theStatus = OK;
768 s->theResult = 0.0;
769}
dic_type theDictionary
Definition: Evaluator.cc:41

Referenced by G4GDMLEvaluator::Clear(), and G4GDMLEvaluator::G4GDMLEvaluator().

◆ error_name()

std::string HepTool::Evaluator::error_name ( ) const

get a string defining the error name

Definition at line 650 of file Evaluator.cc.

651{
652 char prefix[] = "Evaluator : ";
653 std::ostringstream errn;
654 Struct * s = (Struct *) p;
655 switch (s->theStatus) {
656 case ERROR_NOT_A_NAME:
657 errn << prefix << "invalid name";
658 break;
660 errn << prefix << "syntax error";
661 break;
663 errn << prefix << "unpaired parenthesis";
664 break;
666 errn << prefix << "unexpected symbol";
667 break;
669 errn << prefix << "unknown variable";
670 break;
672 errn << prefix << "unknown function";
673 break;
675 errn << prefix << "empty parameter in function call";
676 break;
678 errn << prefix << "calculation error";
679 break;
680 default:
681 errn << " ";
682 }
683 return errn.str();
684}

Referenced by print_error().

◆ error_position()

int HepTool::Evaluator::error_position ( ) const

Returns position in the input string where the problem occured.

Definition at line 636 of file Evaluator.cc.

636 {
637 return ((Struct *)(p))->thePosition - ((Struct *)(p))->theExpression;
638}

◆ evaluate()

double HepTool::Evaluator::evaluate ( const char *  expression)

Evaluates the arithmetic expression given as character string. The expression may consist of numbers, variables and functions separated by arithmetic (+, - , /, *, ^, **) and logical operators (==, !=, >, >=, <, <=, &&, ||).

Parameters
expressioninput expression.
Returns
result of the evaluation.
See also
status
error_position
print_error

Definition at line 611 of file Evaluator.cc.

611 {
612 Struct * s = (Struct *)(p);
613 if (s->theExpression != 0) { delete[] s->theExpression; }
614 s->theExpression = 0;
615 s->thePosition = 0;
617 s->theResult = 0.0;
618 if (expression != 0) {
619 s->theExpression = new char[strlen(expression)+1];
620 strcpy(s->theExpression, expression);
621 s->theStatus = engine(s->theExpression,
622 s->theExpression+strlen(expression)-1,
623 s->theResult,
624 s->thePosition,
625 s->theDictionary);
626 }
627 return s->theResult;
628}

Referenced by G4GDMLEvaluator::Evaluate(), and G4tgrUtils::GetDouble().

◆ findFunction()

bool HepTool::Evaluator::findFunction ( const char *  name,
int  npar 
) const

Finds the function in the dictionary.

Parameters
namename of the function to be unset.
nparnumber of parameters of the function.
Returns
true if such a function exists, false otherwise.

Definition at line 732 of file Evaluator.cc.

732 {
733 if (name == 0 || *name == '\0') return false;
734 if (npar < 0 || npar > MAX_N_PAR) return false;
735 const char * pointer; int n; REMOVE_BLANKS;
736 if (n == 0) return false;
737 Struct * s = (Struct *)(p);
738 return ((s->theDictionary).find(sss[npar]+string(pointer,n)) ==
739 (s->theDictionary).end()) ? false : true;
740}
#define MAX_N_PAR
Definition: Evaluator.cc:62
#define REMOVE_BLANKS
Definition: Evaluator.cc:51

◆ findVariable()

bool HepTool::Evaluator::findVariable ( const char *  name) const

Finds the variable in the dictionary.

Parameters
namename of the variable.
Returns
true if such a variable exists, false otherwise.

Definition at line 721 of file Evaluator.cc.

721 {
722 if (name == 0 || *name == '\0') return false;
723 const char * pointer; int n; REMOVE_BLANKS;
724 if (n == 0) return false;
725 Struct * s = (Struct *)(p);
726 return
727 ((s->theDictionary).find(string(pointer,n)) == (s->theDictionary).end()) ?
728 false : true;
729}

Referenced by G4GDMLEvaluator::DefineConstant(), G4GDMLEvaluator::DefineVariable(), and G4GDMLEvaluator::GetConstant().

◆ print_error()

void HepTool::Evaluator::print_error ( ) const

Prints error message if status() is an ERROR.

Definition at line 641 of file Evaluator.cc.

641 {
642 Struct * s = (Struct *) p;
643 if(s->theStatus != OK) {
644 std::cerr << error_name() << std::endl;
645 }
646 return;
647}
std::string error_name() const
Definition: Evaluator.cc:650

Referenced by G4GDMLEvaluator::Evaluate(), and G4tgrEvaluator::print_error().

◆ removeFunction()

void HepTool::Evaluator::removeFunction ( const char *  name,
int  npar 
)

Removes the function from the dictionary.

Parameters
namename of the function to be unset.
nparnumber of parameters of the function.

Definition at line 752 of file Evaluator.cc.

752 {
753 if (name == 0 || *name == '\0') return;
754 if (npar < 0 || npar > MAX_N_PAR) return;
755 const char * pointer; int n; REMOVE_BLANKS;
756 if (n == 0) return;
757 Struct * s = (Struct *)(p);
758 (s->theDictionary).erase(sss[npar]+string(pointer,n));
759}

◆ removeVariable()

void HepTool::Evaluator::removeVariable ( const char *  name)

Removes the variable from the dictionary.

Parameters
namename of the variable.

Definition at line 743 of file Evaluator.cc.

743 {
744 if (name == 0 || *name == '\0') return;
745 const char * pointer; int n; REMOVE_BLANKS;
746 if (n == 0) return;
747 Struct * s = (Struct *)(p);
748 (s->theDictionary).erase(string(pointer,n));
749}

◆ setFunction() [1/6]

void HepTool::Evaluator::setFunction ( const char *  name,
double(*)()  fun 
)

Adds to the dictionary a function without parameters. If such a function already exist in the dictionary, then status will be set to WARNING_EXISTING_FUNCTION.

Parameters
namefunction name.
funpointer to the real function in the user code.

Definition at line 696 of file Evaluator.cc.

698{ setItem("0", name, Item(reinterpret_cast<voidfuncptr>(fun)), (Struct *)p); }
void(* voidfuncptr)()
Definition: Evaluator.cc:21

Referenced by setStdMath().

◆ setFunction() [2/6]

void HepTool::Evaluator::setFunction ( const char *  name,
double(*)(double)  fun 
)

Adds to the dictionary a function with one parameter. If such a function already exist in the dictionary, then status will be set to WARNING_EXISTING_FUNCTION.

Parameters
namefunction name.
funpointer to the real function in the user code.

Definition at line 700 of file Evaluator.cc.

702{ setItem("1", name, Item(reinterpret_cast<voidfuncptr>(fun)), (Struct *)p); }

◆ setFunction() [3/6]

void HepTool::Evaluator::setFunction ( const char *  name,
double(*)(double, double)  fun 
)

Adds to the dictionary a function with two parameters. If such a function already exist in the dictionary, then status will be set to WARNING_EXISTING_FUNCTION.

Parameters
namefunction name.
funpointer to the real function in the user code.

Definition at line 704 of file Evaluator.cc.

706{ setItem("2", name, Item(reinterpret_cast<voidfuncptr>(fun)), (Struct *)p); }

◆ setFunction() [4/6]

void HepTool::Evaluator::setFunction ( const char *  name,
double(*)(double, double, double)  fun 
)

Adds to the dictionary a function with three parameters. If such a function already exist in the dictionary, then status will be set to WARNING_EXISTING_FUNCTION.

Parameters
namefunction name.
funpointer to the real function in the user code.

Definition at line 708 of file Evaluator.cc.

710{ setItem("3", name, Item(reinterpret_cast<voidfuncptr>(fun)), (Struct *)p); }

◆ setFunction() [5/6]

void HepTool::Evaluator::setFunction ( const char *  name,
double(*)(double, double, double, double)  fun 
)

Adds to the dictionary a function with four parameters. If such a function already exist in the dictionary, then status will be set to WARNING_EXISTING_FUNCTION.

Parameters
namefunction name.
funpointer to the real function in the user code.

Definition at line 712 of file Evaluator.cc.

714{ setItem("4", name, Item(reinterpret_cast<voidfuncptr>(fun)), (Struct *)p); }

◆ setFunction() [6/6]

void HepTool::Evaluator::setFunction ( const char *  name,
double(*)(double, double, double, double, double)  fun 
)

Adds to the dictionary a function with five parameters. If such a function already exist in the dictionary, then status will be set to WARNING_EXISTING_FUNCTION.

Parameters
namefunction name.
funpointer to the real function in the user code.

Definition at line 716 of file Evaluator.cc.

718{ setItem("5", name, Item(reinterpret_cast<voidfuncptr>(fun)), (Struct *)p); }

◆ setStdMath()

void HepTool::Evaluator::setStdMath ( )

Sets standard mathematical functions and constants.

Definition at line 30 of file setStdMath.cc.

30 {
31
32 // S E T S T A N D A R D C O N S T A N T S
33
34 setVariable("pi", 3.14159265358979323846);
35 setVariable("e", 2.7182818284590452354);
36 setVariable("gamma", 0.577215664901532861);
37 setVariable("radian", 1.0);
38 setVariable("rad", 1.0);
39 setVariable("degree", 3.14159265358979323846/180.);
40 setVariable("deg", 3.14159265358979323846/180.);
41
42 // S E T S T A N D A R D F U N C T I O N S
43
44 setFunction("abs", eval_abs);
45 setFunction("min", eval_min);
46 setFunction("max", eval_max);
47 setFunction("sqrt", eval_sqrt);
48 setFunction("pow", eval_pow);
49 setFunction("sin", eval_sin);
50 setFunction("cos", eval_cos);
51 setFunction("tan", eval_tan);
52 setFunction("asin", eval_asin);
53 setFunction("acos", eval_acos);
54 setFunction("atan", eval_atan);
55 setFunction("atan2", eval_atan2);
56 setFunction("sinh", eval_sinh);
57 setFunction("cosh", eval_cosh);
58 setFunction("tanh", eval_tanh);
59 setFunction("exp", eval_exp);
60 setFunction("log", eval_log);
61 setFunction("log10", eval_log10);
62}
void setFunction(const char *name, double(*fun)())
Definition: Evaluator.cc:696
void setVariable(const char *name, double value)
Definition: Evaluator.cc:687

Referenced by G4GDMLEvaluator::Clear(), and G4GDMLEvaluator::G4GDMLEvaluator().

◆ setSystemOfUnits()

void HepTool::Evaluator::setSystemOfUnits ( double  meter = 1.0,
double  kilogram = 1.0,
double  second = 1.0,
double  ampere = 1.0,
double  kelvin = 1.0,
double  mole = 1.0,
double  candela = 1.0 
)

Sets system of units. Default is the SI system of units. To set the CGS (Centimeter-Gram-Second) system of units one should call: setSystemOfUnits(100., 1000., 1.0, 1.0, 1.0, 1.0, 1.0);

To set system of units accepted in the GEANT4 simulation toolkit one should call:

setSystemOfUnits(1.e+3, 1./1.60217733e-25, 1.e+9, 1./1.60217733e-10,
1.0, 1.0, 1.0);
void setSystemOfUnits(double meter=1.0, double kilogram=1.0, double second=1.0, double ampere=1.0, double kelvin=1.0, double mole=1.0, double candela=1.0)

The basic units in GEANT4 are:

millimeter (millimeter = 1.)
nanosecond (nanosecond = 1.)
Mega electron Volt (MeV = 1.)
positron charge (eplus = 1.)
degree Kelvin (kelvin = 1.)
the amount of substance (mole = 1.)
luminous intensity (candela = 1.)
radian (radian = 1.)
steradian (steradian = 1.)

Definition at line 9 of file setSystemOfUnits.cc.

16{
17 const double kilo_ = 1.e+03; // chilioi (Greek) "thousand"
18 const double mega_ = 1.e+06; // megas (Greek) "large"
19 const double giga_ = 1.e+09; // gigas (Greek) "giant"
20 const double tera_ = 1.e+12; // teras (Greek) "monster"
21 const double peta_ = 1.e+15; // pente (Greek) "five"
22
23 const double deci_ = 1.e-01; // decimus (Latin) "tenth"
24 const double centi_ = 1.e-02; // centum (Latin) "hundred"
25 const double milli_ = 1.e-03; // mille (Latin) "thousand"
26 const double micro_ = 1.e-06; // micro (Latin) or mikros (Greek) "small"
27 const double nano_ = 1.e-09; // nanus (Latin) or nanos (Greek) "dwarf"
28 const double pico_ = 1.e-12; // pico (Spanish) "bit"
29
30 // ======================================================================
31 //
32 // Base (default) SI units
33 // for the basic measurable quantities (dimensions):
34 //
35 // ======================================================================
36
37 // Length
38 // metrum (Latin) and metron (Greek) "measure"
39 const double m = meter;
40 setVariable("meter", m);
41 setVariable("metre", m);
42 setVariable("m", m);
43
44 // Mass
45 const double kg = kilogram;
46 setVariable("kilogram", kg);
47 setVariable("kg", kg);
48
49 // Time
50 // minuta secundam (Latin) "second small one"
51 const double s = second;
52 setVariable("second", s);
53 setVariable("s", s);
54
55 // Current
56 // --- honors Andre-Marie Ampere (1775-1836) of France
57 const double A = ampere;
58 setVariable("ampere", A);
59 setVariable("amp", A);
60 setVariable("A", A);
61
62 // Temperature
63 // --- honors William Thomson, 1st Baron Lord Kelvin (1824-1907) of England
64 const double K = kelvin;
65 setVariable("kelvin", K);
66 setVariable("K", K);
67
68 // Amount of substance
69 const double mol = mole;
70 setVariable("mole", mol);
71 setVariable("mol", mol);
72
73 // Luminous intensity
74 const double cd = candela;
75 setVariable("candela", cd);
76 setVariable("cd", cd);
77
78 // ======================================================================
79 //
80 // Supplementary SI units having special symbols:
81 //
82 // ======================================================================
83
84 // Plane angle
85 const double rad = 1.;
86 setVariable("radian", rad);
87 setVariable("rad", rad);
88 setVariable("milliradian", milli_ * rad);
89 setVariable("mrad", milli_ * rad);
90
91 const double pi = 3.14159265358979323846;
92 const double deg = rad*pi/180.;
93 setVariable("degree", deg);
94 setVariable("deg", deg);
95
96 // Solid angle
97 const double sr = 1.;
98 setVariable("steradian", sr);
99 setVariable("sr", sr);
100
101 // ======================================================================
102 //
103 // Derived SI units having special symbols:
104 //
105 // ======================================================================
106
107 // Frequency
108 // --- honors Heinrich Rudolf Hertz (1857-1894) of Germany
109 const double Hz = 1./s;
110 setVariable("hertz", Hz);
111 setVariable("Hz", Hz);
112
113 // Force
114 // --- honors Sir Isaac Newton (1642-1727) of England
115 const double N = m * kg / (s*s);
116 setVariable("newton", N);
117 setVariable("N", N);
118
119 // Pressure
120 // --- honors Blaise Pascal (1623-1662) of France
121 const double Pa = N / (m*m);
122 setVariable("pascal", Pa);
123 setVariable("Pa", Pa);
124
125 const double atm = 101325. * Pa;
126 setVariable("atmosphere", atm);
127 setVariable("atm", atm);
128
129 const double bar = 100000*Pa;
130 setVariable("bar", bar);
131
132 // Energy
133 // --- honors James Prescott Joule (1818-1889) of England
134 const double J = N * m;
135 setVariable("joule", J);
136 setVariable("J", J);
137
138 // Power
139 // --- honors James Watt (1736-1819) of Scotland
140 const double W = J / s;
141 setVariable("watt", W);
142 setVariable("W", W);
143
144 // Electric charge
145 // --- honors Charles-Augustin de Coulomb (1736-1806) of France
146 const double C = A * s;
147 setVariable("coulomb", C);
148 setVariable("C", C);
149
150 // Electric potential
151 // --- honors Count Alessandro Volta (1745-1827) of Italy
152 const double V = J / C;
153 setVariable("volt", V);
154 setVariable("V", V);
155
156 // Electric resistance
157 // --- honors Georg Simon Ohm (1787-1854) of Germany
158 const double ohm = V / A;
159 setVariable("ohm", ohm);
160
161 // Electric conductance
162 // --- honors Ernst Werner von Siemens (1816-1892) or
163 // his brother Sir William (Karl Wilhelm von) Siemens (1823-1883)
164 // of Germany (England)
165 const double S = 1./ ohm;
166 setVariable("siemens", S);
167 setVariable("S", S);
168
169 // Electric capacitance
170 // --- honors Michael Faraday (1791-1867) of England
171 const double F = C / V;
172 setVariable("farad", F);
173 setVariable("F", F);
174
175 // Magnetic flux density
176 // --- honors Nikola Tesla (1856-1943) of Croatia (United States)
177 const double T = V * s / (m*m);
178 setVariable("tesla", T);
179 setVariable("T", T);
180
181 // --- honors Karl Friedrich Gauss (1777-1855) of Germany
182 const double Gs = 1.e-4*T;
183 setVariable("gauss", Gs);
184 setVariable("Gs", Gs);
185
186 // Magnetic flux
187 // --- honors Wilhelm Eduard Weber (1804-1891) of Germany
188 const double Wb = V * s;
189 setVariable("weber", Wb);
190 setVariable("Wb", Wb);
191
192 // Inductance
193 // --- honors Joseph Henry (1797-1878) of the United States
194 const double H = Wb / A;
195 setVariable("henry", H);
196 setVariable("H", H);
197
198 // Luminous flux
199 const double lm = cd * sr;
200 setVariable("lumen", lm);
201 setVariable("lm", lm);
202
203 // Illuminace
204 const double lx = lm / (m*m);
205 setVariable("lux", lx);
206 setVariable("lx", lx);
207
208 // Radioactivity
209 // --- honors Antoine-Henri Becquerel (1852-1908) of France
210 const double Bq = 1./s;
211 setVariable("becquerel", Bq);
212 setVariable("Bq", Bq);
213
214 // --- honors Pierre Curie (1859-1906) of France
215 // and Marie Sklodowska Curie (1867-1934) of Poland
216 setVariable("curie", 3.7e+10 * Bq);
217 setVariable("Ci", 3.7e+10 * Bq);
218
219 // Specific energy
220 // --- honors Louis Harold Gray, F.R.S. (1905-1965) of England
221 const double Gy = J / kg;
222 setVariable("gray", Gy);
223 setVariable("Gy", Gy);
224
225 // Dose equivalent
226 const double Sv = J / kg;
227 setVariable("sievert", Sv);
228 setVariable("Sv", Sv);
229
230 // ======================================================================
231 //
232 // Selected units:
233 //
234 // ======================================================================
235
236 // Length
237
238 const double mm = milli_ * m;
239 setVariable("millimeter", mm);
240 setVariable("mm", mm);
241
242 const double cm = centi_ * m;
243 setVariable("centimeter", cm);
244 setVariable("cm", cm);
245
246 setVariable("decimeter", deci_ * m);
247
248 const double km = kilo_ * m;
249 setVariable("kilometer", km);
250 setVariable("km", km);
251
252 setVariable("micrometer", micro_ * m);
253 setVariable("micron", micro_ * m);
254 setVariable("nanometer", nano_ * m);
255
256 // --- honors Anders Jonas Angstrom (1814-1874) of Sweden
257 setVariable("angstrom", 1.e-10 * m);
258
259 // --- honors Enrico Fermi (1901-1954) of Italy
260 setVariable("fermi", 1.e-15 * m);
261
262 // Length^2
263
264 setVariable("m2", m*m);
265 setVariable("mm2", mm*mm);
266 setVariable("cm2", cm*cm);
267 setVariable("km2", km*km);
268
269 const double barn = 1.e-28 * m*m;
270 setVariable("barn", barn);
271 setVariable("millibarn", milli_ * barn);
272 setVariable("mbarn", milli_ * barn);
273 setVariable("microbarn", micro_ * barn);
274 setVariable("nanobarn", nano_ * barn);
275 setVariable("picobarn", pico_ * barn);
276
277 // LengthL^3
278
279 setVariable("m3", m*m*m);
280 setVariable("mm3", mm*mm*mm);
281 setVariable("cm3", cm*cm*cm);
282 setVariable("cc", cm*cm*cm);
283 setVariable("km3", km*km*km);
284
285 const double L = 1.e-3*m*m*m;
286 setVariable("liter", L);
287 setVariable("litre", L);
288 setVariable("L", L);
289 setVariable("centiliter", centi_ * L);
290 setVariable("cL", centi_ * L);
291 setVariable("milliliter", milli_ * L);
292 setVariable("mL", milli_ * L);
293
294 // Length^-1
295
296 const double dpt = 1./m;
297 setVariable("diopter", dpt);
298 setVariable("dioptre", dpt);
299 setVariable("dpt", dpt);
300
301 // Mass
302
303 const double g = 0.001*kg;
304 setVariable("gram", g);
305 setVariable("g", g);
306 setVariable("milligram", milli_ * g);
307 setVariable("mg", milli_ * g);
308
309 // Time
310
311 setVariable("millisecond", milli_ * s);
312 setVariable("ms", milli_ * s);
313 setVariable("microsecond", micro_ * s);
314 setVariable("nanosecond", nano_ * s);
315 setVariable("ns", nano_ * s);
316 setVariable("picosecond", pico_ * s);
317
318 // Current
319
320 setVariable("milliampere", milli_ * A);
321 setVariable("mA", milli_ * A);
322 setVariable("microampere", micro_ * A);
323 setVariable("nanoampere", nano_ * A);
324
325 // Frequency
326
327 setVariable("kilohertz", kilo_ * Hz);
328 setVariable("kHz", kilo_ * Hz);
329 setVariable("megahertz", mega_ * Hz);
330 setVariable("MHz", mega_ * Hz);
331
332 // Force
333 setVariable("kilonewton", kilo_ * N);
334 setVariable("kN", kilo_ * N);
335
336 // Pressure
337 setVariable("kilobar", kilo_ * bar);
338 setVariable("kbar", kilo_ * bar);
339 setVariable("millibar", milli_ * bar);
340 setVariable("mbar", milli_ * bar);
341
342 // Energy
343 setVariable("kilojoule", kilo_ * J);
344 setVariable("kJ", kilo_ * J);
345 setVariable("megajoule", mega_ * J);
346 setVariable("MJ", mega_ * J);
347 setVariable("gigajoule", giga_ * J);
348 setVariable("GJ", giga_ * J);
349
350 const double e_SI = 1.60217733e-19; // positron charge in coulomb
351 const double ePlus = e_SI * C; // positron charge
352 const double eV = ePlus * V;
353 setVariable("electronvolt", eV);
354 setVariable("eV", eV);
355 setVariable("kiloelectronvolt", kilo_ * eV);
356 setVariable("keV", kilo_ * eV);
357 setVariable("megaelectronvolt", mega_ * eV);
358 setVariable("MeV", mega_ * eV);
359 setVariable("gigaelectronvolt", giga_ * eV);
360 setVariable("GeV", giga_ * eV);
361 setVariable("teraelectronvolt", tera_ * eV);
362 setVariable("TeV", tera_ * eV);
363 setVariable("petaelectronvolt", peta_ * eV);
364 setVariable("PeV", peta_ * eV);
365
366 // Power
367 setVariable("kilowatt", kilo_ * W);
368 setVariable("kW", kilo_ * W);
369 setVariable("megawatt", mega_ * W);
370 setVariable("MW", mega_ * W);
371 setVariable("gigawatt", giga_ * W);
372 setVariable("GW", giga_ * W);
373
374 // Electric potential
375 setVariable("kilovolt", kilo_ * V);
376 setVariable("kV", kilo_ * V);
377 setVariable("megavolt", mega_ * V);
378 setVariable("MV", mega_ * V);
379
380 // Electric capacitance
381 setVariable("millifarad", milli_ * F);
382 setVariable("mF", milli_ * F);
383 setVariable("microfarad", micro_ * F);
384 setVariable("uF", micro_ * F);
385 setVariable("nanofarad", nano_ * F);
386 setVariable("nF", nano_ * F);
387 setVariable("picofarad", pico_ * F);
388 setVariable("pF", pico_ * F);
389
390 // Magnetic flux density
391 setVariable("kilogauss", kilo_ * Gs);
392 setVariable("kGs", kilo_ * Gs);
393}
const G4double pi

Referenced by G4GDMLEvaluator::Clear(), and G4GDMLEvaluator::G4GDMLEvaluator().

◆ setVariable() [1/2]

void HepTool::Evaluator::setVariable ( const char *  name,
const char *  expression 
)

Adds to the dictionary a variable with an arithmetic expression assigned to it. If a variable with such a name already exist in the dictionary, then status will be set to WARNING_EXISTING_VARIABLE.

Parameters
namename of the variable.
expressionarithmetic expression.

Definition at line 690 of file Evaluator.cc.

691{ setItem("", name, Item(expression), (Struct *)p); }

◆ setVariable() [2/2]

void HepTool::Evaluator::setVariable ( const char *  name,
double  value 
)

Adds to the dictionary a variable with given value. If a variable with such a name already exist in the dictionary, then status will be set to WARNING_EXISTING_VARIABLE.

Parameters
namename of the variable.
valuevalue assigned to the variable.

Definition at line 687 of file Evaluator.cc.

688{ setItem("", name, Item(value), (Struct *)p); }

Referenced by G4GDMLEvaluator::DefineConstant(), G4GDMLEvaluator::DefineVariable(), setStdMath(), setSystemOfUnits(), and G4GDMLEvaluator::SetVariable().

◆ status()

int HepTool::Evaluator::status ( ) const

Returns status of the last operation with the evaluator.

Definition at line 631 of file Evaluator.cc.

631 {
632 return ((Struct *)(p))->theStatus;
633}

Referenced by G4GDMLEvaluator::Evaluate(), and G4tgrUtils::GetDouble().


The documentation for this class was generated from the following files: