Geant4 11.2.2
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:646
double evaluate(const char *expression)
Definition Evaluator.cc:616
int status() const
Definition Evaluator.cc:636
Author
Evgeni Chernyaev Evgue.nosp@m.ni.T.nosp@m.chern.nosp@m.iaev.nosp@m.@cern.nosp@m..ch

Definition at line 25 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 38 of file Evaluator.h.

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

Constructor & Destructor Documentation

◆ Evaluator()

HepTool::Evaluator::Evaluator ( )

Constructor.

Definition at line 601 of file Evaluator.cc.

601 {
602 Struct * s = new Struct();
603 p = (void *) s;
604 s->theExpression = 0;
605 s->thePosition = 0;
606 s->theStatus = OK;
607 s->theResult = 0.0;
608}

◆ ~Evaluator()

HepTool::Evaluator::~Evaluator ( )

Destructor.

Definition at line 611 of file Evaluator.cc.

611 {
612 delete (Struct *)(p);
613}

Member Function Documentation

◆ clear()

void HepTool::Evaluator::clear ( )

Clear all settings.

Definition at line 767 of file Evaluator.cc.

767 {
768 Struct * s = (Struct *) p;
769 s->theDictionary.clear();
770 s->theExpression = 0;
771 s->thePosition = 0;
772 s->theStatus = OK;
773 s->theResult = 0.0;
774}
dic_type theDictionary
Definition Evaluator.cc:43

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 655 of file Evaluator.cc.

656{
657 char prefix[] = "Evaluator : ";
658 std::ostringstream errn;
659 Struct * s = (Struct *) p;
660 switch (s->theStatus) {
661 case ERROR_NOT_A_NAME:
662 errn << prefix << "invalid name";
663 break;
665 errn << prefix << "syntax error";
666 break;
668 errn << prefix << "unpaired parenthesis";
669 break;
671 errn << prefix << "unexpected symbol";
672 break;
674 errn << prefix << "unknown variable";
675 break;
677 errn << prefix << "unknown function";
678 break;
680 errn << prefix << "empty parameter in function call";
681 break;
683 errn << prefix << "calculation error";
684 break;
685 default:
686 errn << " ";
687 }
688 return errn.str();
689}

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 641 of file Evaluator.cc.

641 {
642 return int(((Struct *)(p))->thePosition - ((Struct *)(p))->theExpression);
643}

◆ 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 616 of file Evaluator.cc.

616 {
617 Struct * s = (Struct *)(p);
618 if (s->theExpression != 0) { delete[] s->theExpression; }
619 s->theExpression = 0;
620 s->thePosition = 0;
621 s->theStatus = WARNING_BLANK_STRING;
622 s->theResult = 0.0;
623 if (expression != 0) {
624 s->theExpression = new char[strlen(expression)+1];
625 strcpy(s->theExpression, expression);
626 s->theStatus = engine(s->theExpression,
627 s->theExpression+strlen(expression)-1,
628 s->theResult,
629 s->thePosition,
630 s->theDictionary);
631 }
632 return s->theResult;
633}
pchar theExpression
Definition Evaluator.cc:44

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 737 of file Evaluator.cc.

737 {
738 if (name == 0 || *name == '\0') return false;
739 if (npar < 0 || npar > MAX_N_PAR) return false;
740 const char * pointer; int n; REMOVE_BLANKS;
741 if (n == 0) return false;
742 Struct * s = (Struct *)(p);
743 return ((s->theDictionary).find(sss[npar]+string(pointer,n)) ==
744 (s->theDictionary).end()) ? false : true;
745}
#define MAX_N_PAR
Definition Evaluator.cc:64
#define REMOVE_BLANKS
Definition Evaluator.cc:53

◆ 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 726 of file Evaluator.cc.

726 {
727 if (name == 0 || *name == '\0') return false;
728 const char * pointer; int n; REMOVE_BLANKS;
729 if (n == 0) return false;
730 Struct * s = (Struct *)(p);
731 return
732 ((s->theDictionary).find(string(pointer,n)) == (s->theDictionary).end()) ?
733 false : true;
734}

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 646 of file Evaluator.cc.

646 {
647 Struct * s = (Struct *) p;
648 if(s->theStatus != OK) {
649 std::cerr << error_name() << std::endl;
650 }
651 return;
652}
std::string error_name() const
Definition Evaluator.cc:655

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 757 of file Evaluator.cc.

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

◆ removeVariable()

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

Removes the variable from the dictionary.

Parameters
namename of the variable.

Definition at line 748 of file Evaluator.cc.

748 {
749 if (name == 0 || *name == '\0') return;
750 const char * pointer; int n; REMOVE_BLANKS;
751 if (n == 0) return;
752 Struct * s = (Struct *)(p);
753 (s->theDictionary).erase(string(pointer,n));
754}

◆ 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 701 of file Evaluator.cc.

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

Referenced by setStdMath().

◆ setFunction() [2/6]

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

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 705 of file Evaluator.cc.

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

◆ setFunction() [3/6]

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

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 709 of file Evaluator.cc.

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

◆ setFunction() [4/6]

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

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 713 of file Evaluator.cc.

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

◆ setFunction() [5/6]

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

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 717 of file Evaluator.cc.

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

◆ setFunction() [6/6]

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

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 721 of file Evaluator.cc.

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

◆ setStdMath()

void HepTool::Evaluator::setStdMath ( )

Sets standard mathematical functions and constants.

Definition at line 29 of file setStdMath.cc.

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

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 8 of file setSystemOfUnits.cc.

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

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 695 of file Evaluator.cc.

696{ 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 692 of file Evaluator.cc.

693{ 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 636 of file Evaluator.cc.

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

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


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