1 #ifndef CENS_PARAMETER_MANAGER_H
2 #define CENS_PARAMETER_MANAGER_H
9 #include <boost/regex.hpp>
10 #include <boost/filesystem.hpp>
14 #include <Eigen/Geometry>
15 using namespace Eigen;
24 std::runtime_error(msg)
34 std::runtime_error(msg)
46 typedef std::map<std::string,std::string *>
strvalues;
48 typedef std::map<std::string,Vector4f *>
v4values;
50 typedef std::map<std::string,Vector3f *>
v3values;
52 typedef std::map<std::string,double *>
dvalues;
53 typedef dvalues::iterator
diter;
54 typedef std::map<std::string,float *>
fvalues;
55 typedef fvalues::iterator
fiter;
56 typedef std::map<std::string,int *>
ivalues;
57 typedef ivalues::iterator
iiter;
58 typedef std::map<int, std::string>
labels;
63 std::string _filename,
64 const char *sep=
"-------",
66 const char *filedir=
"parameters/") :
67 filename(std::string(filedir).append(_filename)),
72 if (not boost::filesystem::exists(filedir))
73 if(not boost::filesystem::create_directory(filedir))
96 strparlist[parname] = ∥
97 order[added++]=parname;
103 v4parlist[parname] = ∥
104 order[added++]=parname;
110 v3parlist[parname] = ∥
111 order[added++]=parname;
117 dparlist[parname] = ∥
118 order[added++]=parname;
124 fparlist[parname] = ∥
125 order[added++]=parname;
131 iparlist[parname] = ∥
132 order[added++]=parname;
139 std::ifstream loadstr(
141 if(!loadstr.is_open())
147 std::vector<std::string> paramfile_strings;
148 std::string line(
"");
149 while( std::getline( loadstr, line ) )
151 paramfile_strings.push_back( line );
153 paramfile_strings.push_back( line );
159 striter iter = strparlist.begin();
160 iter != strparlist.end();
165 std::string pattern =
169 .append(iter->first )
173 boost::regex re( pattern );
178 i<paramfile_strings.size();
181 if ( boost::regex_search(
182 paramfile_strings[i],
187 boost::regex_replace(
188 paramfile_strings[i] ,
191 *(iter->second) = rep;
201 v4iter iter = v4parlist.begin();
202 iter != v4parlist.end();
207 std::string pattern =
211 .append(iter->first )
215 boost::regex re( pattern );
220 i<paramfile_strings.size();
223 if ( boost::regex_search(
224 paramfile_strings[i],
228 Vector4f &v4 = *(iter->second);
231 boost::regex_replace(
232 paramfile_strings[i] ,
235 boost::sregex_token_iterator i(
238 boost::regex(vseparator), -1);
240 std::stringstream(*i++) >> v4[0];
241 std::stringstream(*i++) >> v4[1];
242 std::stringstream(*i++) >> v4[2];
243 std::stringstream(*i++) >> v4[3];
253 v3iter iter = v3parlist.begin();
254 iter != v3parlist.end();
259 std::string pattern =
263 .append(iter->first )
267 boost::regex re( pattern );
272 i<paramfile_strings.size();
275 if ( boost::regex_search(
276 paramfile_strings[i],
280 Vector3f &v3 = *(iter->second);
283 boost::regex_replace(
284 paramfile_strings[i] ,
287 boost::sregex_token_iterator i(
290 boost::regex(vseparator), -1);
292 std::stringstream(*i++) >> v3[0];
293 std::stringstream(*i++) >> v3[1];
294 std::stringstream(*i++) >> v3[2];
304 diter iter = dparlist.begin();
305 iter != dparlist.end();
310 std::string pattern =
314 .append(iter->first )
318 boost::regex re( pattern );
323 i<paramfile_strings.size();
326 if ( boost::regex_search(
327 paramfile_strings[i],
331 boost::regex_replace(
332 paramfile_strings[i] ,
334 std::stringstream(rep) >> *(iter->second);
342 fiter iter = fparlist.begin();
343 iter != fparlist.end();
348 std::string pattern =
352 .append(iter->first )
356 boost::regex re( pattern );
361 i<paramfile_strings.size();
364 if ( boost::regex_search(
365 paramfile_strings[i],
369 boost::regex_replace(
370 paramfile_strings[i] ,
372 std::stringstream(rep) >> *(iter->second);
380 iiter iter = iparlist.begin();
381 iter != iparlist.end();
386 std::string pattern =
390 .append(iter->first )
392 boost::regex re( pattern );
398 i<paramfile_strings.size();
401 if ( boost::regex_search(
402 paramfile_strings[i],
406 boost::regex_replace(
407 paramfile_strings[i] ,
409 std::stringstream(rep) >> *(iter->second);
422 std::ofstream file(filename.c_str());
425 liter iter = order.begin();
430 std::string name = iter->second;
432 if (iparlist.find(name) != iparlist.end())
433 file << *iparlist[name]
434 <<
" " << separator <<
" " << name << std::endl;
435 else if (fparlist.find(name) != fparlist.end())
436 file << *fparlist[name]
437 <<
" " << separator <<
" " << name << std::endl;
438 else if (dparlist.find(name) != dparlist.end())
439 file << *dparlist[name]
440 <<
" " << separator <<
" " << name << std::endl;
441 else if (strparlist.find(name) != strparlist.end())
442 file << *strparlist[name]
443 <<
" " << separator <<
" " << name << std::endl;
444 else if (v3parlist.find(name) != v3parlist.end())
445 file << (*v3parlist[name])[0] << vseparator
446 << (*v3parlist[name])[1] << vseparator
447 << (*v3parlist[name])[2]
448 <<
" " << separator <<
" " << name << std::endl;
449 else if (v4parlist.find(name) != v4parlist.end())
450 file << (*v4parlist[name])[0] << vseparator
451 << (*v4parlist[name])[1] << vseparator
452 << (*v4parlist[name])[2] << vseparator
453 << (*v4parlist[name])[3]
454 <<
" " << separator <<
" " << name << std::endl;
507 #endif //CENS_PARAMETER_MANAGER_H
std::map< int, std::string > labels
void addParameter(std::string parname, int &par)
std::map< std::string, double * > dvalues
void addParameter(std::string parname, Vector3f &par)
void addParameter(std::string parname, std::string &par)
void addParameter(std::string parname, Vector4f &par)
std::map< std::string, float * > fvalues
std::map< std::string, std::string * > strvalues
std::map< std::string, int * > ivalues
CENSParameterManager(std::string _filename, const char *sep="-------", const char *vsep=";", const char *filedir="parameters/")
v4values::iterator v4iter
CENSParameterDirException(std::string const &msg="parameter directory (\"./params\") not present!")
Manager of parameters' initializarion.
strvalues::iterator striter
void addParameter(std::string parname, double &par)
CENSParameterManager(const CENSParameterManager ©)
v3values::iterator v3iter
void addParameter(std::string parname, float &par)
std::map< std::string, Vector3f * > v3values
std::map< std::string, Vector4f * > v4values
CENSParameterException(std::string const &msg="parameter file not present ... initialized!")