Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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