X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkAnatomicalFeatureDatabase.cxx;h=13fb26960ad2e29e20dd7c8124806c885609304e;hb=ae015f09e2fa0ebc736d24b37c9ed6c1ca0cb5b2;hp=539e17012806a970984f667cd0df786acacf56b0;hpb=5e2af376544fce0c6dc46bb3c3227d35b501c1f1;p=clitk.git diff --git a/segmentation/clitkAnatomicalFeatureDatabase.cxx b/segmentation/clitkAnatomicalFeatureDatabase.cxx index 539e170..13fb269 100644 --- a/segmentation/clitkAnatomicalFeatureDatabase.cxx +++ b/segmentation/clitkAnatomicalFeatureDatabase.cxx @@ -3,7 +3,7 @@ Authors belong to: - University of LYON http://www.universite-lyon.fr/ - - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even @@ -14,7 +14,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html - ======================================================================-====*/ + ===========================================================================**/ // clitk #include "clitkAnatomicalFeatureDatabase.h" @@ -28,7 +28,19 @@ //-------------------------------------------------------------------- clitk::AnatomicalFeatureDatabase::AnatomicalFeatureDatabase() { - SetFilename("noname.afdb"); + SetFilename("default.afdb"); + SetPath("./"); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +clitk::AnatomicalFeatureDatabase::Pointer clitk::AnatomicalFeatureDatabase::New(std::string filename) +{ + Pointer a = AnatomicalFeatureDatabase::New(); + a->SetFilename(filename); + a->Load(); + return a; } //-------------------------------------------------------------------- @@ -71,6 +83,7 @@ static inline std::string &trim(std::string &s) { //-------------------------------------------------------------------- void clitk::AnatomicalFeatureDatabase::Load() { + m_MapOfTag.clear(); // open file std::ifstream is; openFileForReading(is, GetFilename()); @@ -78,11 +91,14 @@ void clitk::AnatomicalFeatureDatabase::Load() while (!is.fail()) { std::string tag; is >> tag; - std::string value; - std::getline(is,value,'\n'); - ltrim(value); // remove leading space - m_MapOfTag[tag] = value; + if (tag != "") { + std::string value; + std::getline(is,value,'\n'); + ltrim(value); // remove leading space + m_MapOfTag[tag] = value; + } } + is.close(); } //-------------------------------------------------------------------- @@ -90,7 +106,7 @@ void clitk::AnatomicalFeatureDatabase::Load() //-------------------------------------------------------------------- void clitk::AnatomicalFeatureDatabase::SetPoint3D(std::string tag, PointType3D & p) { - ::itk::OStringStream value; + std::ostringstream value; value << p[0] << " " << p[1] << " " << p[2]; m_MapOfTag[tag] = value.str(); } @@ -106,43 +122,46 @@ double clitk::AnatomicalFeatureDatabase::GetPoint3D(std::string tag, int dim) } //-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +std::string clitk::AnatomicalFeatureDatabase::GetTagValue(std::string tag) +{ + if (!TagExist(tag)) { + clitkExceptionMacro("Could not find the tag <" << tag << "> in the DB"); + return ""; + } + std::string s = m_MapOfTag[tag]; + return s; +} +//-------------------------------------------------------------------- + + //-------------------------------------------------------------------- void clitk::AnatomicalFeatureDatabase::GetPoint3D(std::string tag, PointType3D & p) { - if (m_MapOfTag.find(tag) == m_MapOfTag.end()) { + if (!TagExist(tag)) { clitkExceptionMacro("Could not find the tag <" << tag << "> of type Point3D in the DB"); + return; } - else { - std::string s = m_MapOfTag[tag]; + + std::string s = m_MapOfTag[tag]; - // construct a stream from the string - std::stringstream strstr(s); - - // use stream iterators to copy the stream to the vector as - // whitespace separated strings - std::istream_iterator it(strstr); - std::istream_iterator end; - std::vector results(it, end); - - // parse the string into 3 doubles - for(int i=0; i<3; i++) { - p[i] = atof(results[i].c_str()); - } + // construct a stream from the string + std::stringstream strstr(s); + + // use stream iterators to copy the stream to the vector as + // whitespace separated strings + std::istream_iterator it(strstr); + std::istream_iterator end; + std::vector results(it, end); - /* - // boost - #include - #include - // parse the string into 3 doubles - boost::char_separator sep(", "); - boost::tokenizer > tokens(s, sep); - int i=0; - BOOST_FOREACH(std::string t, tokens) { - std::cout << t << "." << std::endl; - p[i] = atof(t.c_str()); - i++; + // parse the string into 3 doubles + for(int i=0; i<3; i++) { + + if (!clitk::fromString(p[i], results[i].c_str())) { + clitkExceptionMacro("Error while reading Point3D, could not convert '" + << results[i].c_str() << "' into double."); } - */ } } //-------------------------------------------------------------------- @@ -155,3 +174,46 @@ void clitk::AnatomicalFeatureDatabase::SetImageFilename(std::string tag, std::st } //-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +bool clitk::AnatomicalFeatureDatabase::TagExist(std::string tag) +{ + return (m_MapOfTag.find(tag) != m_MapOfTag.end()); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +void clitk::AnatomicalFeatureDatabase::SetDouble(std::string tag, double value) +{ + m_MapOfTag[tag] = clitk::toString(value); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +double clitk::AnatomicalFeatureDatabase::GetDouble(std::string tag) +{ + if (!TagExist(tag)) { + clitkExceptionMacro("Could not find the tag <" << tag << "> of type Double in the DB"); + return -1; + } + + double a; + if (!clitk::fromString(a, m_MapOfTag[tag])) { + clitkExceptionMacro("Error while reading Double (tag='" << tag << "'), could not convert '" + << m_MapOfTag[tag] << "' into double."); + } + return a; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +void clitk::AnatomicalFeatureDatabase::RemoveTag(TagType tag) +{ + if (TagExist(tag)) { + m_MapOfTag.erase(m_MapOfTag.find(tag)); + } +} +//--------------------------------------------------------------------