Geant4 Cross Reference |
1 // -*- C++ -*- 2 // ---------------------------------------------------------------------- 3 4 #include "CLHEP/Evaluator/Evaluator.h" 5 6 namespace HepTool { 7 8 void Evaluator::setSystemOfUnits(double meter, 9 double kilogram, 10 double second, 11 double ampere, 12 double kelvin, 13 double mole, 14 double candela) 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 } 424 425 } // namespace HepTool 426