58std::vector<std::tuple<tkstring, tkunit_manager::units_type, double>> tkunit_manager::funits_properties = {
59 {
"Undefined", kUndef_type, 0. },
60 {
"eV", kEnergy, 1e-3 },
61 {
"keV", kEnergy, 1. },
62 {
"MeV", kEnergy, 1e3 },
63 {
"GeV", kEnergy, 1e6 },
64 {
"TeV", kEnergy, 1e9 },
65 {
"as", kTime, 1e-18 },
66 {
"fs", kTime, 1e-15 },
67 {
"ps", kTime, 1e-12 },
74 {
"d", kTime, 86400. },
75 {
"y", kTime, 31556926. },
76 {
"am", kLenght, 1e-18 },
77 {
"fm", kLenght, 1e-15 },
78 {
"pm", kLenght, 1e-12 },
79 {
"nm", kLenght, 1e-9 },
80 {
"um", kLenght, 1e-6 },
81 {
"mm", kLenght, 1e-3 },
82 {
"cm", kLenght, 1e-2 },
84 {
"K", kNoConvUnits, 1. },
85 {
"C", kNoConvUnits, 1. },
86 {
"F", kNoConvUnits, 1. },
87 {
"u", kNoConvUnits, 1. },
88 {
"", kNoConvUnits, 1. },
89 {
"%", kNoConvUnits, 1. },
94tkunit_manager::tkunit_manager() {
102 g_unit_manager =
this;
107 if ( g_unit_manager ==
nullptr ) {
111 return g_unit_manager;
116 fFactor(gunits->get_factor(fUnit_key)),
117 fValue(_value/fFactor)
134 fFactor = gunits->get_factor(fUnit_key);
135 fValue = _val*fFactor;
139 return set_unit(gunits->get_key(_unit));
143 if(_unit == gunits->Undef_unit)
return false;
149 if((gunits->get_type(fUnit_key) == gunits->kUndef_type) || (gunits->get_type(_unit) == gunits->get_type(fUnit_key))) {
151 fFactor = gunits->get_factor(fUnit_key);
155 if( ((gunits->get_type(fUnit_key) == gunits->kEnergy) && (gunits->get_type(_unit) == gunits->kTime)) ||
156 ((gunits->get_type(fUnit_key) == gunits->kTime) && (gunits->get_type(_unit) == gunits->kEnergy))) {
165 fValue = (1.054571818e-34*6.2415091e+15)*log(2) / fValue;
166 fFactor = gunits->get_factor(fUnit_key);
169 glog <<
warning_o <<
" sorry, unit conversion from " << gunits->get_name(fUnit_key) <<
" to " << gunits->get_name(_unit) <<
" not handle by TkN for the moment" <<
do_endl;
std::string with usefull tricks from TString (ROOT) and KVString (KaliVeda) and more....
Manages the different units.
units_keys
units identifiers
static std::vector< std::tuple< tkstring, units_type, double > > funits_properties
static tkunit_manager * the_unit_manager()
db_manager is a singleton
A measured value associated to its unit.
void set_value(const double &_val, const tkstring &_unit="")
set the value and unit from string, if _unit not defined, let in the current unit
bool set_unit(const tkstring &_unit)
set the unit from a string
tklog & warning_o(tklog &log)
tklog & do_endl(tklog &log)