Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4UnitsTable.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4UnitsTable class implementation
27//
28// Author: M.Maire, 17.05.1998 - First version
29// Revisions: G.Cosmo, 06.03.2001 - Migrated to STL vectors
30// --------------------------------------------------------------------
31
32#include <iomanip>
33#include <sstream>
34
35#include "G4SystemOfUnits.hh"
36#include "G4Threading.hh"
37#include "G4UnitsTable.hh"
38
39G4ThreadLocal G4UnitsTable* G4UnitDefinition::pUnitsTable = nullptr;
40G4ThreadLocal G4bool G4UnitDefinition::unitsTableDestroyed = false;
41
42#ifdef G4MULTITHREADED
43G4UnitsTable* G4UnitDefinition::pUnitsTableShadow = nullptr;
44
45// --------------------------------------------------------------------
46
47G4UnitsTable::~G4UnitsTable()
48{
49 for(const auto itr : *this)
50 {
51 delete itr;
52 }
53 clear();
54}
55
56#endif
57
58// --------------------------------------------------------------------
59
61 const G4String& category, G4double value)
62 : Name(name)
63 , SymbolName(symbol)
64 , Value(value)
65{
66 if(pUnitsTable == nullptr)
67 {
68 if(unitsTableDestroyed)
69 {
70 G4Exception("G4UnitDefinition::G4UnitDefinition", "UnitsTable0000",
71 FatalException, "G4UnitsTable had already deleted.");
72 }
73 pUnitsTable = new G4UnitsTable;
74#ifdef G4MULTITHREADED
76 {
77 pUnitsTableShadow = pUnitsTable;
78 }
79#endif
80 }
81
82 // Does the Category objet already exist ?
83 //
84 std::size_t nbCat = pUnitsTable->size();
85 std::size_t i = 0;
86 while((i < nbCat) && ((*pUnitsTable)[i]->GetName() != category))
87 {
88 ++i;
89 }
90 if(i == nbCat)
91 {
92 pUnitsTable->push_back(new G4UnitsCategory(category));
93 }
94 CategoryIndex = i;
95
96 // Insert this Unit in the Units table
97 //
98 ((*pUnitsTable)[CategoryIndex]->GetUnitsList()).push_back(this);
99
100 // Update string max length for name and symbol
101 //
102 (*pUnitsTable)[i]->UpdateNameMxLen((G4int) name.length());
103 (*pUnitsTable)[i]->UpdateSymbMxLen((G4int) symbol.length());
104}
105
106// --------------------------------------------------------------------
107
109{
110 *this = right;
111}
112
113// --------------------------------------------------------------------
114
115G4UnitDefinition& G4UnitDefinition::operator=(const G4UnitDefinition& right)
116{
117 if(this != &right)
118 {
119 Name = right.Name;
120 SymbolName = right.SymbolName;
121 Value = right.Value;
122 CategoryIndex = right.CategoryIndex;
123 }
124 return *this;
125}
126
127// --------------------------------------------------------------------
128
130{
131 return (this == (G4UnitDefinition*) &right);
132}
133
134// --------------------------------------------------------------------
135
137{
138 return (this != (G4UnitDefinition*) &right);
139}
140
141// --------------------------------------------------------------------
142
144{
145 if(pUnitsTable == nullptr)
146 {
147 pUnitsTable = new G4UnitsTable;
148 }
149 if(pUnitsTable->empty())
150 {
152 }
153#ifdef G4MULTITHREADED
154 if(G4Threading::IsMasterThread() && pUnitsTableShadow == nullptr)
155 {
156 pUnitsTableShadow = pUnitsTable;
157 }
158#endif
159 return *pUnitsTable;
160}
161
162// --------------------------------------------------------------------
163
165{
166 G4String name, symbol;
167 for(std::size_t i = 0; i < (GetUnitsTable()).size(); ++i)
168 {
169 G4UnitsContainer& units = (*pUnitsTable)[i]->GetUnitsList();
170 for(auto& unit : units)
171 {
172 name = unit->GetName();
173 symbol = unit->GetSymbol();
174 if(str == name || str == symbol)
175 {
176 return true;
177 }
178 }
179 }
180 return false;
181}
182
183// --------------------------------------------------------------------
184
186{
187 G4String name, symbol;
188 for(std::size_t i = 0; i < (GetUnitsTable()).size(); ++i)
189 {
190 G4UnitsContainer& units = (*pUnitsTable)[i]->GetUnitsList();
191 for(auto& unit : units)
192 {
193 name = unit->GetName();
194 symbol = unit->GetSymbol();
195 if(str == name || str == symbol)
196 {
197 return unit->GetValue();
198 }
199 }
200 }
201 std::ostringstream message;
202 message << "The unit '" << str << "' does not exist in the Units Table!";
203 G4Exception("G4UnitDefinition::GetValueOf()", "InvalidUnit", FatalException,
204 message);
205 return 0.;
206}
207
208// --------------------------------------------------------------------
209
211{
212 G4String name, symbol;
213 for(std::size_t i = 0; i < (GetUnitsTable()).size(); ++i)
214 {
215 G4UnitsContainer& units = (*pUnitsTable)[i]->GetUnitsList();
216 for(auto& unit : units)
217 {
218 name = unit->GetName();
219 symbol = unit->GetSymbol();
220 if(str == name || str == symbol)
221 {
222 return (*pUnitsTable)[i]->GetName();
223 }
224 }
225 }
226 std::ostringstream message;
227 message << "The unit '" << str << "' does not exist in the Units Table!";
228 G4Exception("G4UnitDefinition::GetCategory()", "InvalidUnit", FatalException,
229 message);
230 name = "None";
231 return name;
232}
233
234// --------------------------------------------------------------------
235
237{
238 G4int nameL = (*pUnitsTable)[CategoryIndex]->GetNameMxLen();
239 G4int symbL = (*pUnitsTable)[CategoryIndex]->GetSymbMxLen();
240 G4cout << std::setw(nameL) << Name << " (" << std::setw(symbL) << SymbolName
241 << ") = " << Value << G4endl;
242}
243
244// --------------------------------------------------------------------
245
247{
248 // Length
249 new G4UnitDefinition("parsec", "pc", "Length", parsec);
250 new G4UnitDefinition("kilometer", "km", "Length", kilometer);
251 new G4UnitDefinition("meter", "m", "Length", meter);
252 new G4UnitDefinition("centimeter", "cm", "Length", centimeter);
253 new G4UnitDefinition("millimeter", "mm", "Length", millimeter);
254 new G4UnitDefinition("micrometer", "um", "Length", micrometer);
255 new G4UnitDefinition("nanometer", "nm", "Length", nanometer);
256 new G4UnitDefinition("angstrom", "Ang", "Length", angstrom);
257 new G4UnitDefinition("fermi", "fm", "Length", fermi);
258
259 // Surface
260 new G4UnitDefinition("kilometer2", "km2", "Surface", kilometer2);
261 new G4UnitDefinition("meter2", "m2", "Surface", meter2);
262 new G4UnitDefinition("centimeter2", "cm2", "Surface", centimeter2);
263 new G4UnitDefinition("millimeter2", "mm2", "Surface", millimeter2);
264 new G4UnitDefinition("barn", "barn", "Surface", barn);
265 new G4UnitDefinition("millibarn", "mbarn", "Surface", millibarn);
266 new G4UnitDefinition("microbarn", "mubarn", "Surface", microbarn);
267 new G4UnitDefinition("nanobarn", "nbarn", "Surface", nanobarn);
268 new G4UnitDefinition("picobarn", "pbarn", "Surface", picobarn);
269
270 // Volume
271 new G4UnitDefinition("kilometer3", "km3", "Volume", kilometer3);
272 new G4UnitDefinition("meter3", "m3", "Volume", meter3);
273 new G4UnitDefinition("centimeter3", "cm3", "Volume", centimeter3);
274 new G4UnitDefinition("millimeter3", "mm3", "Volume", millimeter3);
275
276 new G4UnitDefinition("liter", "L", "Volume", liter);
277 new G4UnitDefinition("dL", "dL", "Volume", dL);
278 new G4UnitDefinition("cL", "cL", "Volume", cL);
279 new G4UnitDefinition("mL", "mL", "Volume", mL);
280
281 // Angle
282 new G4UnitDefinition("radian", "rad", "Angle", radian);
283 new G4UnitDefinition("milliradian", "mrad", "Angle", milliradian);
284 new G4UnitDefinition("degree", "deg", "Angle", degree);
285
286 // Solid angle
287 new G4UnitDefinition("steradian", "sr", "Solid angle", steradian);
288 new G4UnitDefinition("millisteradian", "msr", "Solid angle",
289 steradian * 0.001);
290
291 // Time
292 new G4UnitDefinition("second", "s", "Time", second);
293 new G4UnitDefinition("millisecond", "ms", "Time", millisecond);
294 new G4UnitDefinition("microsecond", "us", "Time", microsecond);
295 new G4UnitDefinition("nanosecond", "ns", "Time", nanosecond);
296 new G4UnitDefinition("picosecond", "ps", "Time", picosecond);
297 new G4UnitDefinition("minute", "min", "Time", minute);
298 new G4UnitDefinition("hour", "h", "Time", hour);
299 new G4UnitDefinition("day", "d", "Time", day);
300 new G4UnitDefinition("year", "y", "Time", year);
301
302 // Frequency
303 new G4UnitDefinition("hertz", "Hz", "Frequency", hertz);
304 new G4UnitDefinition("kilohertz", "kHz", "Frequency", kilohertz);
305 new G4UnitDefinition("megahertz", "MHz", "Frequency", megahertz);
306
307 // Velocity
308 new G4UnitDefinition("cm/ns", "cm/ns", "Velocity", cm/ns);
309 new G4UnitDefinition("mm/ns", "mm/ns", "Velocity", mm/ns);
310 new G4UnitDefinition("cm/us", "cm/us", "Velocity", cm/us);
311 new G4UnitDefinition("km/s" , "km/s" , "Velocity", km/s);
312 new G4UnitDefinition("cm/ms", "cm/ms", "Velocity", cm/ms);
313 new G4UnitDefinition( "m/s" , "m/s" , "Velocity", m/s);
314 new G4UnitDefinition("cm/s" , "cm/s" , "Velocity", cm/s);
315 new G4UnitDefinition("mm/s" , "mm/s" , "Velocity", mm/s);
316
317 // Electric charge
318 new G4UnitDefinition("eplus", "e+", "Electric charge", eplus);
319 new G4UnitDefinition("coulomb", "C", "Electric charge", coulomb);
320
321 // Energy
322 new G4UnitDefinition("electronvolt", "eV", "Energy", electronvolt);
323 new G4UnitDefinition("kiloelectronvolt", "keV", "Energy", kiloelectronvolt);
324 new G4UnitDefinition("megaelectronvolt", "MeV", "Energy", megaelectronvolt);
325 new G4UnitDefinition("gigaelectronvolt", "GeV", "Energy", gigaelectronvolt);
326 new G4UnitDefinition("teraelectronvolt", "TeV", "Energy", teraelectronvolt);
327 new G4UnitDefinition("petaelectronvolt", "PeV", "Energy", petaelectronvolt);
328 new G4UnitDefinition("millielectronVolt", "meV", "Energy", millielectronvolt);
329 new G4UnitDefinition("joule", "J", "Energy", joule);
330
331 //Momentum
332 new G4UnitDefinition( "eV/c", "eV/c", "Momentum", eV);
333 new G4UnitDefinition("keV/c", "keV/c", "Momentum", keV);
334 new G4UnitDefinition("MeV/c", "MeV/c", "Momentum", MeV);
335 new G4UnitDefinition("GeV/c", "GeV/c", "Momentum", GeV);
336 new G4UnitDefinition("TeV/c", "TeV/c", "Momentum", TeV);
337
338 // Energy/Length
339 new G4UnitDefinition("GeV/cm", "GeV/cm", "Energy/Length", GeV / cm);
340 new G4UnitDefinition("MeV/cm", "MeV/cm", "Energy/Length", MeV / cm);
341 new G4UnitDefinition("keV/cm", "keV/cm", "Energy/Length", keV / cm);
342 new G4UnitDefinition("eV/cm", "eV/cm", "Energy/Length", eV / cm);
343
344 // Mass
345 new G4UnitDefinition("milligram", "mg", "Mass", milligram);
346 new G4UnitDefinition("gram", "g", "Mass", gram);
347 new G4UnitDefinition("kilogram", "kg", "Mass", kilogram);
348
349 // Volumic Mass
350 new G4UnitDefinition("g/cm3", "g/cm3", "Volumic Mass", g / cm3);
351 new G4UnitDefinition("mg/cm3", "mg/cm3", "Volumic Mass", mg / cm3);
352 new G4UnitDefinition("kg/m3", "kg/m3", "Volumic Mass", kg / m3);
353
354 // Mass/Surface
355 new G4UnitDefinition("g/cm2", "g/cm2", "Mass/Surface", g / cm2);
356 new G4UnitDefinition("mg/cm2", "mg/cm2", "Mass/Surface", mg / cm2);
357 new G4UnitDefinition("kg/cm2", "kg/cm2", "Mass/Surface", kg / cm2);
358
359 // Surface/Mass
360 new G4UnitDefinition("cm2/g", "cm2/g", "Surface/Mass", cm2 / g);
361
362 // Energy.Surface/Mass
363 new G4UnitDefinition("eV*cm2/g", " eV*cm2/g", "Energy*Surface/Mass",
364 eV * cm2 / g);
365 new G4UnitDefinition("keV*cm2/g", "keV*cm2/g", "Energy*Surface/Mass",
366 keV * cm2 / g);
367 new G4UnitDefinition("MeV*cm2/g", "MeV*cm2/g", "Energy*Surface/Mass",
368 MeV * cm2 / g);
369 new G4UnitDefinition("GeV*cm2/g", "GeV*cm2/g", "Energy*Surface/Mass",
370 GeV * cm2 / g);
371
372 // Power
373 new G4UnitDefinition("watt", "W", "Power", watt);
374
375 // Force
376 new G4UnitDefinition("newton", "N", "Force", newton);
377
378 // Pressure
379 new G4UnitDefinition("pascal", "Pa", "Pressure", hep_pascal);
380 new G4UnitDefinition("bar", "bar", "Pressure", bar);
381 new G4UnitDefinition("atmosphere", "atm", "Pressure", atmosphere);
382
383 // Electric current
384 new G4UnitDefinition("ampere", "A", "Electric current", ampere);
385 new G4UnitDefinition("milliampere", "mA", "Electric current", milliampere);
386 new G4UnitDefinition("microampere", "muA", "Electric current", microampere);
387 new G4UnitDefinition("nanoampere", "nA", "Electric current", nanoampere);
388
389 // Electric potential
390 new G4UnitDefinition("volt", "V", "Electric potential", volt);
391 new G4UnitDefinition("kilovolt", "kV", "Electric potential", kilovolt);
392 new G4UnitDefinition("megavolt", "MV", "Electric potential", megavolt);
393
394 // Electric field
395 new G4UnitDefinition("volt/m", "V/m", "Electric field", volt / m);
396 new G4UnitDefinition("kilovolt/m", "kV/m", "Electric field", kilovolt / m);
397 new G4UnitDefinition("megavolt/m", "MV/m", "Electric field", megavolt / m);
398
399 // Magnetic flux
400 new G4UnitDefinition("weber", "Wb", "Magnetic flux", weber);
401
402 // Magnetic flux density
403 new G4UnitDefinition("tesla", "T", "Magnetic flux density", tesla);
404 new G4UnitDefinition("kilogauss", "kG", "Magnetic flux density", kilogauss);
405 new G4UnitDefinition("gauss", "G", "Magnetic flux density", gauss);
406
407 // Temperature
408 new G4UnitDefinition("kelvin", "K", "Temperature", kelvin);
409
410 // Amount of substance
411 new G4UnitDefinition("mole", "mol", "Amount of substance", mole);
412 new G4UnitDefinition("g/mole", "g/mol", "Molar mass", g / mole);
413
414 // Activity
415 new G4UnitDefinition("becquerel", "Bq", "Activity", becquerel);
416 new G4UnitDefinition("curie", "Ci", "Activity", curie);
417
418 // Dose
419 new G4UnitDefinition("gray", "Gy", "Dose", gray);
420}
421
422// --------------------------------------------------------------------
423
425{
426 G4cout << "\n ----- The Table of Units ----- \n";
427 if(pUnitsTable == nullptr)
428 {
429 pUnitsTable = new G4UnitsTable;
430 }
431 for(std::size_t i = 0; i < pUnitsTable->size(); ++i)
432 {
433 (*pUnitsTable)[i]->PrintCategory();
434 }
435}
436
437// --------------------------------------------------------------------
438
440{
441#ifdef G4MULTITHREADED
442 delete pUnitsTable;
443 pUnitsTable = nullptr;
445 {
446 pUnitsTableShadow = nullptr;
447 }
448#else
449 for(std::size_t i = 0; i < pUnitsTable->size(); ++i)
450 {
451 delete(*pUnitsTable)[i];
452 }
453 pUnitsTable->clear();
454#endif
455 unitsTableDestroyed = true;
456}
457
458// --------------------------------------------------------------------
459
461 : Name(name)
462{}
463
464// --------------------------------------------------------------------
465
467{
468 for(auto& i : UnitsList)
469 {
470 delete i;
471 }
472 UnitsList.clear();
473}
474
475// --------------------------------------------------------------------
476
478{
479 *this = right;
480}
481
482// --------------------------------------------------------------------
483
484G4UnitsCategory& G4UnitsCategory::operator=(const G4UnitsCategory& right)
485{
486 if(this != &right)
487 {
488 Name = right.Name;
489 UnitsList = right.UnitsList;
490 NameMxLen = right.NameMxLen;
491 SymbMxLen = right.SymbMxLen;
492 }
493 return *this;
494}
495
496// --------------------------------------------------------------------
497
499{
500 return (this == (G4UnitsCategory*) &right);
501}
502
503// --------------------------------------------------------------------
504
506{
507 return (this != (G4UnitsCategory*) &right);
508}
509
510// --------------------------------------------------------------------
511
513{
514 G4cout << "\n category: " << Name << G4endl;
515 for(auto& i : UnitsList)
516 {
517 i->PrintDefinition();
518 }
519}
520
521// --------------------------------------------------------------------
522
524 : nbOfVals(1)
525{
526 // find the category
528 std::size_t nbCat = theUnitsTable.size();
529 std::size_t i = 0;
530 while((i < nbCat) && (theUnitsTable[i]->GetName() != category))
531 {
532 ++i;
533 }
534 if(i == nbCat)
535 {
536 G4cout << " G4BestUnit: the category " << category << " does not exist !!"
537 << G4endl;
538 G4Exception("G4BestUnit::G4BestUnit()", "InvalidCall", FatalException,
539 "Missing unit category !");
540 }
541
542 Value[0] = value;
543 Value[1] = 0.;
544 Value[2] = 0.;
545 Category = category;
546 IndexOfCategory = i;
547}
548
549// --------------------------------------------------------------------
550
551G4BestUnit::G4BestUnit(const G4ThreeVector& value, const G4String& category)
552 : nbOfVals(3)
553{
554 // find the category
556 std::size_t nbCat = theUnitsTable.size();
557 std::size_t i = 0;
558 while((i < nbCat) && (theUnitsTable[i]->GetName() != category))
559 {
560 ++i;
561 }
562 if(i == nbCat)
563 {
564 G4cerr << " G4BestUnit: the category " << category << " does not exist."
565 << G4endl;
566 G4Exception("G4BestUnit::G4BestUnit()", "InvalidCall", FatalException,
567 "Missing unit category !");
568 }
569
570 Value[0] = value.x();
571 Value[1] = value.y();
572 Value[2] = value.z();
573 Category = category;
574 IndexOfCategory = i;
575}
576
577// --------------------------------------------------------------------
578
579G4BestUnit::operator G4String() const
580{
581 std::ostringstream oss;
582 oss << *this;
583 return oss.str();
584}
585
586// --------------------------------------------------------------------
587
588std::ostream& operator<<(std::ostream& flux, const G4BestUnit& a)
589{
591 G4UnitsContainer& List = theUnitsTable[a.IndexOfCategory]->GetUnitsList();
592 G4int len = theUnitsTable[a.IndexOfCategory]->GetSymbMxLen();
593
594 G4long ksup(-1), kinf(-1);
595 G4double umax(0.), umin(DBL_MAX);
596 G4double rsup(DBL_MAX), rinf(0.);
597
598 // for a ThreeVector, choose the best unit for the biggest value
599 G4double value =
600 std::max(std::max(std::fabs(a.Value[0]), std::fabs(a.Value[1])),
601 std::fabs(a.Value[2]));
602
603 //special treatement for Energy.
604 if ((a.Category == "Energy") && (value == 0.)) {
605 for (G4int j = 0; j < a.nbOfVals; ++j) {
606 flux << a.Value[j] << " ";
607 }
608 std::ios::fmtflags oldform = flux.flags();
609 flux.setf(std::ios::left, std::ios::adjustfield);
610 flux << std::setw(len) << "eV";
611 flux.flags(oldform);
612 return flux;
613 }
614
615 //here, value != 0.
616 for(std::size_t k = 0; k < List.size(); ++k)
617 {
618 G4double unit = List[k]->GetValue();
619 if(!(value != DBL_MAX))
620 {
621 if(unit > umax)
622 {
623 umax = unit;
624 ksup = k;
625 }
626 }
627 else if(value <= DBL_MIN)
628 {
629 if(unit < umin)
630 {
631 umin = unit;
632 kinf = k;
633 }
634 }
635 else
636 {
637 G4double ratio = value / unit;
638 if((ratio >= 1.) && (ratio < rsup))
639 {
640 rsup = ratio;
641 ksup = k;
642 }
643 if((ratio < 1.) && (ratio > rinf))
644 {
645 rinf = ratio;
646 kinf = k;
647 }
648 }
649 }
650
651 G4long index = ksup;
652 if(index == -1)
653 {
654 index = kinf;
655 }
656 if(index == -1)
657 {
658 index = 0;
659 }
660
661 for(G4int j = 0; j < a.nbOfVals; ++j)
662 {
663 flux << a.Value[j] / (List[index]->GetValue()) << " ";
664 }
665
666 std::ios::fmtflags oldform = flux.flags();
667
668 flux.setf(std::ios::left, std::ios::adjustfield);
669 flux << std::setw(len) << List[index]->GetSymbol();
670 flux.flags(oldform);
671
672 return flux;
673}
674
675// --------------------------------------------------------------------
676
677#ifdef G4MULTITHREADED
678
679void G4UnitsTable::Synchronize()
680{
681 G4UnitsTable* orig = &(G4UnitDefinition::GetUnitsTableShadow());
682 if(this == orig)
683 {
684 return;
685 }
686
687 for(const auto category : *orig)
688 {
689 G4String catName = category->GetName();
690 G4UnitsContainer* units = &(category->GetUnitsList());
691 for(const auto unit : *units)
692 {
693 if(!Contains(unit, catName))
694 {
695 new G4UnitDefinition(unit->GetName(), unit->GetSymbol(), catName,
696 unit->GetValue());
697 }
698 }
699 }
700}
701
702// --------------------------------------------------------------------
703
704G4bool G4UnitsTable::Contains(const G4UnitDefinition* unit,
705 const G4String& categoryName)
706{
707 for(const auto category : *this)
708 {
709 G4String catName = category->GetName();
710 if(catName != categoryName)
711 {
712 continue;
713 }
714 G4UnitsContainer* units = &(category->GetUnitsList());
715 for(const auto ucItr : *units)
716 {
717 if(ucItr->GetName() == unit->GetName() &&
718 ucItr->GetSymbol() == unit->GetSymbol())
719 {
720 return true;
721 }
722 }
723 }
724 return false;
725}
726
727#endif
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
double G4double
Definition: G4Types.hh:83
long G4long
Definition: G4Types.hh:87
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
std::ostream & operator<<(std::ostream &flux, const G4BestUnit &a)
std::vector< G4UnitDefinition * > G4UnitsContainer
std::vector< G4UnitsCategory * > G4UnitsTable
Definition: G4UnitsTable.hh:68
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
double z() const
double x() const
double y() const
G4BestUnit(G4double internalValue, const G4String &category)
static G4bool IsUnitDefined(const G4String &)
static void ClearUnitsTable()
G4UnitDefinition(const G4String &name, const G4String &symbol, const G4String &category, G4double value)
Definition: G4UnitsTable.cc:60
G4bool operator!=(const G4UnitDefinition &) const
G4bool operator==(const G4UnitDefinition &) const
static void BuildUnitsTable()
static G4double GetValueOf(const G4String &)
static G4String GetCategory(const G4String &)
static void PrintUnitsTable()
const G4String & GetName() const
static G4UnitsTable & GetUnitsTable()
const G4String & GetSymbol() const
G4UnitsCategory(const G4String &name)
G4bool operator!=(const G4UnitsCategory &) const
G4bool operator==(const G4UnitsCategory &) const
G4bool IsMasterThread()
Definition: G4Threading.cc:124
#define DBL_MIN
Definition: templates.hh:54
#define DBL_MAX
Definition: templates.hh:62
#define G4ThreadLocal
Definition: tls.hh:77
#define ns(x)
Definition: xmltok.c:1649