23 std::map<std::string, std::string>
35 std::cout <<
"SigPack: Parameter " + key +
" not found!" << std::endl;
53 std::stringstream iss(str);
56 if (iss >> re >> im >> i_ch && (i_ch ==
'i' || i_ch ==
'j'))
57 return std::complex<double>(re, im);
61 iss.seekg(0, iss.beg);
62 if (iss >> im >> i_ch && (i_ch ==
'i' || i_ch ==
'j'))
63 return std::complex<double>(0.0, im);
67 iss.seekg(0, iss.beg);
69 return std::complex<double>(re, 0.0);
92 fh.open(fname.c_str());
100 while (std::getline(fh, line))
102 std::string keyS =
"";
103 std::string dataS =
"";
110 if (line.find_first_not_of(
"\t ") == std::string::npos)
114 mark = line.find(
"%");
115 if (mark != std::string::npos)
116 line.erase(mark, line.length());
119 mark = line.find(
"=");
120 if (mark != std::string::npos)
123 keyS = line.substr(line.find_first_not_of(
"\t "),
124 mark - line.find_first_not_of(
"\t "));
125 keyS = keyS.substr(0, keyS.find_last_not_of(
"\t ") + 1);
128 dataS = line.substr(mark + 1, line.length());
129 dataS = dataS.substr(0, dataS.find_last_not_of(
"\t ") + 1);
132 mark = dataS.find(
"\"");
133 if (mark != std::string::npos)
135 dataS = dataS.substr(mark + 1, dataS.length());
136 dataS = dataS.substr(0, dataS.find_last_of(
"\""));
139 mark = dataS.find(
"[");
140 if (mark != std::string::npos)
142 dataS = dataS.substr(mark + 1, dataS.length());
143 dataS = dataS.substr(0, dataS.find_last_of(
"]"));
147 par_map.insert(std::pair<std::string, std::string>(keyS, dataS));
168 template <
typename T> T
getParam(
const std::string key,
const T def_val)
172 std::cout <<
"Setting default " << def_val << std::endl;
175 std::istringstream iss(
par_map.find(key)->second);
188 std::string
getString(
const std::string key,
const std::string def_val)
192 std::cout <<
"Setting default " << def_val << std::endl;
195 return par_map.find(key)->second;
204 template <
typename T>
205 arma::Col<T>
getCol(
const std::string key,
const arma::Col<T> def_val)
209 std::cout <<
"Setting default \n" << def_val << std::endl;
213 std::string row, str =
par_map.find(key)->second;
214 std::istringstream full_str(str);
215 int K =
static_cast<int>(std::count(str.begin(), str.end(),
';') + 1);
217 for (
int k = 0; k < K; k++)
219 std::getline(full_str, row,
';');
220 std::stringstream iss(row);
233 arma::cx_vec
getCxCol(
const std::string key,
const arma::cx_vec def_val)
237 std::cout <<
"Setting default \n" << def_val << std::endl;
241 std::string row, str =
par_map.find(key)->second;
242 std::istringstream full_str(str);
243 int K =
static_cast<int>(std::count(str.begin(), str.end(),
';') + 1);
245 for (
int k = 0; k < K; k++)
247 std::getline(full_str, row,
';');
259 template <
typename T>
260 arma::Row<T>
getRow(
const std::string key,
const arma::Row<T> def_val)
264 std::cout <<
"Setting default \n" << def_val << std::endl;
268 std::string col, str =
par_map.find(key)->second;
269 std::istringstream full_str(str);
270 int K =
static_cast<int>(std::count(str.begin(), str.end(),
',') + 1);
272 for (
int k = 0; k < K; k++)
274 std::getline(full_str, col,
',');
275 std::stringstream iss(col);
288 arma::cx_rowvec
getCxRow(
const std::string key,
const arma::cx_rowvec def_val)
292 std::cout <<
"Setting default \n" << def_val << std::endl;
296 std::string col, str =
par_map.find(key)->second;
297 std::istringstream full_str(str);
298 int K =
static_cast<int>(std::count(str.begin(), str.end(),
',') + 1);
299 arma::cx_rowvec x(K);
300 for (
int k = 0; k < K; k++)
302 std::getline(full_str, col,
',');
314 template <
typename T>
315 arma::Mat<T>
getMat(
const std::string key,
const arma::Mat<T> def_val)
319 std::cout <<
"Setting default \n" << def_val << std::endl;
322 std::string full_str, row, col;
323 std::istringstream iss_full;
325 full_str =
par_map.find(key)->second;
327 static_cast<int>(std::count(full_str.begin(), full_str.end(),
';') + 1);
329 iss_full.str(full_str);
330 std::getline(iss_full, row,
';');
331 int C =
static_cast<int>(std::count(row.begin(), row.end(),
',') + 1);
333 arma::Mat<T> x(R, C);
335 iss_full.seekg(0, iss_full.beg);
336 for (
int r = 0; r < R; r++)
338 std::getline(iss_full, row,
';');
339 std::istringstream iss_row(row);
340 for (
int c = 0; c < C; c++)
342 std::getline(iss_row, col,
',');
343 std::istringstream iss_col(col);
357 arma::cx_mat
getCxMat(
const std::string key,
const arma::cx_mat def_val)
361 std::cout <<
"Setting default \n" << def_val << std::endl;
364 std::string full_str, row, col;
365 std::istringstream iss_full;
367 full_str =
par_map.find(key)->second;
369 static_cast<int>(std::count(full_str.begin(), full_str.end(),
';') + 1);
371 iss_full.str(full_str);
372 std::getline(iss_full, row,
';');
373 int C =
static_cast<int>(std::count(row.begin(), row.end(),
',') + 1);
375 arma::cx_mat x(R, C);
377 iss_full.seekg(0, iss_full.beg);
378 for (
int r = 0; r < R; r++)
380 std::getline(iss_full, row,
';');
381 std::istringstream iss_row(row);
382 for (
int c = 0; c < C; c++)
384 std::getline(iss_row, col,
',');
T getParam(const std::string key, const T def_val)
Generic type get function.
arma::cx_mat getCxMat(const std::string key, const arma::cx_mat def_val)
cx_mat type get function.
std::string getString(const std::string key, const std::string def_val)
String type get function.
arma::cx_vec getCxCol(const std::string key, const arma::cx_vec def_val)
cx_vec type get function.
arma::cx_rowvec getCxRow(const std::string key, const arma::cx_rowvec def_val)
cx_rowvec type get function.
arma::Mat< T > getMat(const std::string key, const arma::Mat< T > def_val)
Mat type get function.
bool valid_key(const std::string &key)
Check if key is valid.
std::map< std::string, std::string > par_map
Map structure to store parameter and value.
parser(const std::string &fname)
Constructor.
arma::Col< T > getCol(const std::string key, const arma::Col< T > def_val)
Col type get function.
std::complex< double > parse_cx(std::string str)
Parse complex value.
arma::Row< T > getRow(const std::string key, const arma::Row< T > def_val)
Row type get function.