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
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
- ======================================================================-====*/
+ ===========================================================================**/
// clitk
#include "clitkAnatomicalFeatureDatabase.h"
// std
#include <iterator>
#include <sstream>
-#include <cctype>\r
-#include <functional>\r
+#include <cctype>
+#include <functional>
//--------------------------------------------------------------------
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;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
void clitk::AnatomicalFeatureDatabase::Load()
{
+ m_MapOfTag.clear();
// open file
std::ifstream is;
openFileForReading(is, GetFilename());
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();
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
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();
}
//--------------------------------------------------------------------
+//--------------------------------------------------------------------
+double clitk::AnatomicalFeatureDatabase::GetPoint3D(std::string tag, int dim)
+{
+ PointType3D p;
+ GetPoint3D(tag, p);
+ return p[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<std::string> it(strstr);
- std::istream_iterator<std::string> end;
- std::vector<std::string> 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);
- /*
- // boost
- #include <boost/foreach.hpp>
- #include <boost/tokenizer.hpp>
- // parse the string into 3 doubles
- boost::char_separator<char> sep(", ");
- boost::tokenizer<boost::char_separator<char> > tokens(s, sep);
- int i=0;
- BOOST_FOREACH(std::string t, tokens) {
- std::cout << t << "." << std::endl;
- p[i] = atof(t.c_str());
- i++;
+ // use stream iterators to copy the stream to the vector as
+ // whitespace separated strings
+ std::istream_iterator<std::string> it(strstr);
+ std::istream_iterator<std::string> end;
+ std::vector<std::string> results(it, end);
+
+ // parse the string into 3 doubles
+ for(int i=0; i<3; i++) {
+
+ if (!clitk::fromString<double>(p[i], results[i].c_str())) {
+ clitkExceptionMacro("Error while reading Point3D, could not convert '"
+ << results[i].c_str() << "' into double.");
}
- */
}
}
//--------------------------------------------------------------------
}
//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+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<double>(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));
+ }
+}
+//--------------------------------------------------------------------