43G4UnitsTable* G4UnitDefinition::pUnitsTableShadow =
nullptr;
51G4UnitsTable::~G4UnitsTable()
53 for(
auto itr = cbegin(); itr != cend(); ++itr)
74 G4Exception(
"G4UnitDefinition::G4UnitDefinition",
"UnitsTable0000",
102 ((*pUnitsTable)[
CategoryIndex]->GetUnitsList()).push_back(
this);
106 (*pUnitsTable)[i]->UpdateNameMxLen((
G4int)
name.length());
107 (*pUnitsTable)[i]->UpdateSymbMxLen((
G4int) symbol.length());
161#ifdef G4MULTITHREADED
178 for(std::size_t j = 0; j < units.size(); ++j)
180 name = units[j]->GetName();
181 symbol = units[j]->GetSymbol();
182 if(str ==
name || str == symbol)
199 for(std::size_t j = 0; j < units.size(); ++j)
201 name = units[j]->GetName();
202 symbol = units[j]->GetSymbol();
203 if(str ==
name || str == symbol)
205 return units[j]->GetValue();
209 std::ostringstream message;
210 message <<
"The unit '" << str <<
"' does not exist in the Units Table!";
224 for(std::size_t j = 0; j < units.size(); ++j)
226 name = units[j]->GetName();
227 symbol = units[j]->GetSymbol();
228 if(str ==
name || str == symbol)
234 std::ostringstream message;
235 message <<
"The unit '" << str <<
"' does not exist in the Units Table!";
434 G4cout <<
"\n ----- The Table of Units ----- \n";
439 for(std::size_t i = 0; i <
pUnitsTable->size(); ++i)
441 (*pUnitsTable)[i]->PrintCategory();
449#ifdef G4MULTITHREADED
454 pUnitsTableShadow =
nullptr;
457 for(std::size_t i = 0; i <
pUnitsTable->size(); ++i)
459 delete(*pUnitsTable)[i];
477 for(std::size_t i = 0; i <
UnitsList.size(); ++i)
524 for(std::size_t i = 0; i <
UnitsList.size(); ++i)
537 std::size_t nbCat = theUnitsTable.size();
539 while((i < nbCat) && (theUnitsTable[i]->GetName() != category))
545 G4cout <<
" G4BestUnit: the category " << category <<
" does not exist !!"
548 "Missing unit category !");
565 std::size_t nbCat = theUnitsTable.size();
567 while((i < nbCat) && (theUnitsTable[i]->GetName() != category))
573 G4cerr <<
" G4BestUnit: the category " << category <<
" does not exist."
576 "Missing unit category !");
594 std::ostringstream oss;
607 G4int ksup(-1), kinf(-1);
614 std::fabs(a.
Value[2]));
617 if ((a.
Category ==
"Energy") && (value == 0.)) {
619 flux << a.
Value[j] <<
" ";
621 std::ios::fmtflags oldform = flux.flags();
622 flux.setf(std::ios::left, std::ios::adjustfield);
623 flux << std::setw(len) <<
"eV";
629 for(std::size_t k = 0; k < List.size(); ++k)
631 G4double unit = List[k]->GetValue();
651 if((ratio >= 1.) && (ratio < rsup))
656 if((ratio < 1.) && (ratio > rinf))
676 flux << a.
Value[j] / (List[index]->GetValue()) <<
" ";
679 std::ios::fmtflags oldform = flux.flags();
681 flux.setf(std::ios::left, std::ios::adjustfield);
682 flux << std::setw(len) << List[index]->GetSymbol();
690#ifdef G4MULTITHREADED
692void G4UnitsTable::Synchronize()
694 G4UnitsTable* orig = &(G4UnitDefinition::GetUnitsTableShadow());
698 for(
auto utItr = orig->cbegin(); utItr != orig->cend(); ++utItr)
703 for(
auto ucItr = units->cbegin(); ucItr != units->cend(); ++ucItr)
706 if(!Contains(unit, catName))
720 for(
auto utItr = cbegin(); utItr != cend(); ++utItr)
724 if(catName != categoryName)
727 for(
auto ucItr = units->cbegin(); ucItr != units->cend(); ++ucItr)
729 if((*ucItr)->GetName() == unit->
GetName() &&
730 (*ucItr)->GetSymbol() == unit->
GetSymbol())
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
static constexpr double centimeter
static constexpr double kilogauss
static constexpr double centimeter3
static constexpr double newton
static constexpr double steradian
static constexpr double petaelectronvolt
static constexpr double nanoampere
static constexpr double picobarn
static constexpr double megaelectronvolt
static constexpr double kelvin
static constexpr double millisecond
static constexpr double micrometer
static constexpr double volt
static constexpr double mL
static constexpr double kg
static constexpr double gauss
static constexpr double ampere
static constexpr double milliradian
static constexpr double megahertz
static constexpr double electronvolt
static constexpr double us
static constexpr double ms
static constexpr double millimeter3
static constexpr double gray
static constexpr double gram
static constexpr double kilogram
static constexpr double mole
static constexpr double cm3
static constexpr double milliampere
static constexpr double minute
static constexpr double meter3
static constexpr double kilometer
static constexpr double m
static constexpr double gigaelectronvolt
static constexpr double coulomb
static constexpr double joule
static constexpr double hertz
static constexpr double teraelectronvolt
static constexpr double tesla
static constexpr double kilohertz
static constexpr double hep_pascal
static constexpr double watt
static constexpr double nanobarn
static constexpr double kilovolt
static constexpr double liter
static constexpr double barn
static constexpr double day
static constexpr double millimeter
static constexpr double meter
static constexpr double curie
static constexpr double microsecond
static constexpr double cm2
static constexpr double megavolt
static constexpr double parsec
static constexpr double angstrom
static constexpr double microbarn
static constexpr double s
static constexpr double millibarn
static constexpr double mm
static constexpr double eplus
static constexpr double second
static constexpr double keV
static constexpr double fermi
static constexpr double m3
static constexpr double picosecond
static constexpr double atmosphere
static constexpr double eV
static constexpr double nanosecond
static constexpr double centimeter2
static constexpr double km
static constexpr double g
static constexpr double milligram
static constexpr double cL
static constexpr double kiloelectronvolt
static constexpr double nanometer
static constexpr double mg
static constexpr double GeV
static constexpr double microampere
static constexpr double millielectronvolt
static constexpr double MeV
static constexpr double degree
static constexpr double dL
static constexpr double year
static constexpr double bar
static constexpr double weber
static constexpr double becquerel
static constexpr double cm
static constexpr double hour
static constexpr double TeV
static constexpr double radian
static constexpr double millimeter2
static constexpr double kilometer2
static constexpr double meter2
static constexpr double kilometer3
std::vector< G4UnitDefinition * > G4UnitsContainer
std::vector< G4UnitsCategory * > G4UnitsTable
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
std::size_t IndexOfCategory
G4BestUnit(G4double internalValue, const G4String &category)
G4UnitDefinition & operator=(const G4UnitDefinition &)
static G4bool IsUnitDefined(const G4String &)
static void ClearUnitsTable()
std::size_t CategoryIndex
static G4ThreadLocal G4bool unitsTableDestroyed
G4UnitDefinition(const G4String &name, const G4String &symbol, const G4String &category, G4double value)
G4bool operator!=(const G4UnitDefinition &) const
G4bool operator==(const G4UnitDefinition &) const
static G4ThreadLocal G4UnitsTable * pUnitsTable
static void BuildUnitsTable()
G4double GetValue() const
static G4double GetValueOf(const G4String &)
static G4String GetCategory(const G4String &)
static void PrintUnitsTable()
const G4String & GetName() const
static G4UnitsTable & GetUnitsTable()
const G4String & GetSymbol() const
const G4String & GetName() const
G4UnitsCategory & operator=(const G4UnitsCategory &)
G4UnitsContainer UnitsList
G4UnitsContainer & GetUnitsList()
G4UnitsCategory(const G4String &name)
G4bool operator!=(const G4UnitsCategory &) const
G4bool operator==(const G4UnitsCategory &) const
std::ostream & operator<<(std::ostream &, const BasicVector3D< float > &)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
const char * name(G4int ptype)