/** * @file SpdbObsMetadata.cc */ //------------------------------------------------------------------ #include #include #include #include #include //------------------------------------------------------------------ SpdbObsMetadata::SpdbObsMetadata(void): _valuesSet(false) { } //------------------------------------------------------------------ SpdbObsMetadata::SpdbObsMetadata(const std::string &field, const TileInfo &tiling, const std::vector &thresh) : _valuesSet(true), _field(field), _thresh(thresh), _tiling(tiling), _obsTime(0) { for (size_t i=0; i= (int)_info.size()) { LOG(ERROR) << "indexing mismatch"; return; } _info[threshIndex].update(info); } //------------------------------------------------------------------ void SpdbObsMetadata::update(int threshIndex, int tileIndex, const TileObarInfo &info) { if (threshIndex < 0 || threshIndex >= (int)_info.size()) { LOG(ERROR) << "indexing mismatch"; return; } _info[threshIndex].update(tileIndex, info); } //------------------------------------------------------------------ void SpdbObsMetadata::print(void) const { printf("Obar: Field:%s Time:%s", _field.c_str(), DateTime::strn(_obsTime).c_str()); for (size_t i=0; i<_thresh.size(); ++i) { printf("thr:%.2lf ", _thresh[i]); } printf("\n"); bool verbose = false; _tiling.print(verbose); for (size_t i=0; i<_info.size(); ++i) { _info[i].print(); } } //------------------------------------------------------------------ bool SpdbObsMetadata::getTiledGrid( double obarThresh, double centerWeight, double edgeWeight, int nptSmooth, Grid2d &item) const { int threshIndex = _threshIndex(obarThresh); if (threshIndex < 0) { LOG(ERROR) << "Obar threshold not found in state " << obarThresh; return false; } return _info[threshIndex].getTiledGrid(_field, obarThresh, _tiling, centerWeight, edgeWeight, nptSmooth, item); } //------------------------------------------------------------------ void SpdbObsMetadata::printState( const time_t &t, const time_t &timeWritten, const std::vector &tiles, bool verbose) const { if (tiles.empty()) { printState(t, timeWritten, verbose); return; } printf("---------Obar information %s ---written %s, for %s----------\n", DateTime::strn(t).c_str(), DateTime::strn(timeWritten).c_str(), _field.c_str()); _tiling.print(verbose); for (size_t i=0; i<_info.size(); ++i) { _info[i].print(tiles, _tiling, verbose); } } //------------------------------------------------------------------ void SpdbObsMetadata::printState(const time_t &t, const time_t &timeWritten, bool verbose) const { printf("---------Obar information %s ---written %s, for %s----------\n", DateTime::strn(t).c_str(), DateTime::strn(timeWritten).c_str(), _field.c_str()); _tiling.print(verbose); for (size_t i=0; i<_info.size(); ++i) { _info[i].print(_tiling, verbose); } } //------------------------------------------------------------------ void SpdbObsMetadata::showTilingInfo(const time_t &time) const { printf("---------Obar tile information %s ----------\n", DateTime::strn(time).c_str()); _tiling.print(false); } //------------------------------------------------------------------ int SpdbObsMetadata::_threshIndex(double obarThresh) const { std::vector::const_iterator i; i = find(_thresh.begin(), _thresh.end(), obarThresh); if (i == _thresh.end()) { LOG(ERROR) << "Unknown obar threshold " << obarThresh; return -1; } else { return (int)(i - _thresh.begin()); } } //------------------------------------------------------------------ std::string SpdbObsMetadata::_valuesSetToXml(void) const { string s = TaXml::writeBoolean("ValuesSet", 0, _valuesSet); return s; } //------------------------------------------------------------------ std::string SpdbObsMetadata::_fieldToXml(void) const { string s2 = TaXml::writeString("Field", 0, _field); return s2; } //------------------------------------------------------------------ std::string SpdbObsMetadata::_threshToXml(void) const { string s2 = ""; for (size_t i=0; i<_thresh.size(); ++i) { s2 += TaXml::writeDouble("ObarThresh", 0, _thresh[i]); } return s2; } //------------------------------------------------------------------ std::string SpdbObsMetadata::_obsTimeToXml(void) const { string s2 = TaXml::writeTime("ObsTime", 0, _obsTime); return s2; } //------------------------------------------------------------------ std::string SpdbObsMetadata::_infoToXml(void) const { string s = ""; for (size_t i=0; i<_info.size(); ++i) { s += _info[i].toXml(0); } return s; } //------------------------------------------------------------------ bool SpdbObsMetadata::_valuesSetFromXml(const std::string &xml) { if (TaXml::readBoolean(xml, "ValuesSet", _valuesSet)) { LOG(ERROR) << "No XML for ValuesSet"; return false; } return true; } //------------------------------------------------------------------ bool SpdbObsMetadata::_fieldFromXml(const std::string &xml) { if (TaXml::readString(xml, "Field", _field)) { LOG(ERROR) << "No XML with key Field"; return false; } return true; } //------------------------------------------------------------------ bool SpdbObsMetadata::_threshFromXml(const std::string &xml) { vector vstring; if (TaXml::readStringArray(xml, "ObarThresh", vstring)) { LOG(ERROR) << "String array tag missing, ObarThresh"; return false; } _thresh.clear(); for (size_t i=0; i vstring; if (TaXml::readStringArray(xml, ThreshObarInfo::_tag, vstring)) { LOG(ERROR) << "String array tag missing, " << ThreshObarInfo::_tag; return false; } _info.clear(); for (size_t i=0; i