diff --git a/data-access/engine/src/vlkb-obscore/src/database/SqlSchema_INSERT.cpp b/data-access/engine/src/vlkb-obscore/src/database/SqlSchema_INSERT.cpp index bd71b7769acd593947970217e654af42f56a5b5d..88f084ac5437f41ba39b7a01241a7eef873d9cb5 100644 --- a/data-access/engine/src/vlkb-obscore/src/database/SqlSchema_INSERT.cpp +++ b/data-access/engine/src/vlkb-obscore/src/database/SqlSchema_INSERT.cpp @@ -186,6 +186,59 @@ string get_wavelen(int precision, fitsfiles::key_values_by_type key_values) } +// trim from start (in place) +inline void ltrim(std::string &s) { + s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char ch) { + return !std::isspace(ch); + })); +} + +// trim from end (in place) +inline void rtrim(std::string &s) { + s.erase(std::find_if(s.rbegin(), s.rend(), [](unsigned char ch) { + return !std::isspace(ch); + }).base(), s.end()); +} + +// trim from both ends (in place) +inline void trim(std::string &s) { + rtrim(s); + ltrim(s); +} + + +// returns band in wavelen [m] +double parse_transition(string trans) +{ + // Surveys::survTransition "num unit" <-- for images + + trim(trans); + + if(!trans.empty()) + { + string::size_type pos = trans.find(' '); + std::string num = trans.substr(0, pos); + std::string unit = trans.substr(pos+1); + + LOG_STREAM << "parse trans: " << num << " " << unit << endl; + + const double speed_of_light = 299792458.0; // [m/s] in vacuum + + double value = stod(num); + if(unit.compare("um") == 0) return value * 1e-6; + else if(unit.compare("mm") == 0) return value * 1e-3; + else if(unit.compare("m") == 0) return value; + else if(unit.compare("GHz") == 0) return (speed_of_light / (value * 1e9)); + else if(unit.compare("MHz") == 0) return (speed_of_light / (value * 1e6)); + else if(unit.compare("kHz") == 0) return (speed_of_light / (value * 1e3)); + else if(unit.compare("Hz") == 0) return (speed_of_light / (value)); + else + return 0.0; // ignore + } + else + return 0.0; +} + //---------------------------------------------------------------------- // public API @@ -374,10 +427,11 @@ void SqlSchema_INSERT::appendRow(/*const int hid, const int sid,*/ } else if(icrsBounds.size() == 2) // 2D images { - //if(!strcmp(survey.survSpecies.c_str(), "Continuum")) - // dem_min = dem_max = 0.0; // FIXME transtod(psurv->transition); + // surv.restFrequency [Hz] <-- is empty for 2D images: take from survTransition ? + // surv.survTransition "num unit" <-- for images - obscoreRow[em_min] = get_wavelen(EM_PRECISION, hdu.key_values); + double val = parse_transition(surv.survTransition); + obscoreRow[em_min] = ((val==0.0) ? "NULL" : to_string(val)); //get_wavelen(EM_PRECISION, hdu.key_values); obscoreRow[em_max] = obscoreRow[em_min]; obscoreRow[em_res_power] = "NULL"; obscoreRow[em_xel] = "NULL";