48 std::complex<double>
parse_cx( std::string str )
52 std::stringstream iss( str );
55 if( iss >> re >> im >> i_ch && ( i_ch ==
'i' || i_ch ==
'j' ) )
56 return std::complex<double>( re, im );
60 iss.seekg( 0, iss.beg );
61 if( iss >> im >> i_ch && ( i_ch ==
'i' || i_ch ==
'j' ) )
62 return std::complex<double>( 0.0, im );
66 iss.seekg( 0, iss.beg );
68 return std::complex<double>( re, 0.0 );
91 fh.open( fname.c_str() );
99 while( std::getline( fh, line ) )
101 std::string keyS =
"";
102 std::string dataS =
"";
109 if( line.find_first_not_of(
"\t " ) == std::string::npos )
113 mark = line.find(
"%" );
114 if( mark != std::string::npos )
115 line.erase( mark, line.length() );
118 mark = line.find(
"=" );
119 if( mark != std::string::npos )
122 keyS = line.substr( line.find_first_not_of(
"\t " ), mark - line.find_first_not_of(
"\t " ) );
123 keyS = keyS.substr( 0, keyS.find_last_not_of(
"\t " ) + 1 );
126 dataS = line.substr( mark + 1, line.length() );
127 dataS = dataS.substr( 0, dataS.find_last_not_of(
"\t " ) + 1 );
130 mark = dataS.find(
"\"" );
131 if( mark != std::string::npos )
133 dataS = dataS.substr( mark + 1, dataS.length() );
134 dataS = dataS.substr( 0, dataS.find_last_of(
"\"" ) );
137 mark = dataS.find(
"[" );
138 if( mark != std::string::npos )
140 dataS = dataS.substr( mark + 1, dataS.length() );
141 dataS = dataS.substr( 0, dataS.find_last_of(
"]" ) );
145 par_map.insert( std::pair<std::string, std::string>( keyS, dataS ) );
204 template <
typename T> arma::Col<T>
getCol(
const std::string key,
const arma::Col<T> def_val )
208 std::cout <<
"Setting default \n" << def_val << std::endl;
212 std::string row, str =
par_map.find( key )->second;
213 std::istringstream full_str( str );
214 int K =
static_cast<int>( std::count( str.begin(), str.end(),
';' ) + 1 );
216 for(
int k = 0; k < K; k++ )
218 std::getline( full_str, row,
';' );
219 std::stringstream iss( row );
258 template <
typename T> arma::Row<T>
getRow(
const std::string key,
const arma::Row<T> def_val )
262 std::cout <<
"Setting default \n" << def_val << std::endl;
266 std::string col, str =
par_map.find( key )->second;
267 std::istringstream full_str( str );
268 int K =
static_cast<int>( std::count( str.begin(), str.end(),
',' ) + 1 );
270 for(
int k = 0; k < K; k++ )
272 std::getline( full_str, col,
',' );
273 std::stringstream iss( col );
286 arma::cx_rowvec
getCxRow(
const std::string key,
const arma::cx_rowvec def_val )
290 std::cout <<
"Setting default \n" << def_val << std::endl;
294 std::string col, str =
par_map.find( key )->second;
295 std::istringstream full_str( str );
296 int K =
static_cast<int>( std::count( str.begin(), str.end(),
',' ) + 1 );
297 arma::cx_rowvec x( K );
298 for(
int k = 0; k < K; k++ )
300 std::getline( full_str, col,
',' );
312 template <
typename T> arma::Mat<T>
getMat(
const std::string key,
const arma::Mat<T> def_val )
316 std::cout <<
"Setting default \n" << def_val << std::endl;
319 std::string full_str, row, col;
320 std::istringstream iss_full;
322 full_str =
par_map.find( key )->second;
323 int R =
static_cast<int>( std::count( full_str.begin(), full_str.end(),
';' ) + 1 );
325 iss_full.str( full_str );
326 std::getline( iss_full, row,
';' );
327 int C =
static_cast<int>( std::count( row.begin(), row.end(),
',' ) + 1 );
329 arma::Mat<T> x( R, C );
331 iss_full.seekg( 0, iss_full.beg );
332 for(
int r = 0; r < R; r++ )
334 std::getline( iss_full, row,
';' );
335 std::istringstream iss_row( row );
336 for(
int c = 0; c < C; c++ )
338 std::getline( iss_row, col,
',' );
339 std::istringstream iss_col( col );
340 iss_col >> x( r, c );
353 arma::cx_mat
getCxMat(
const std::string key,
const arma::cx_mat def_val )
357 std::cout <<
"Setting default \n" << def_val << std::endl;
360 std::string full_str, row, col;
361 std::istringstream iss_full;
363 full_str =
par_map.find( key )->second;
364 int R =
static_cast<int>( std::count( full_str.begin(), full_str.end(),
';' ) + 1 );
366 iss_full.str( full_str );
367 std::getline( iss_full, row,
';' );
368 int C =
static_cast<int>( std::count( row.begin(), row.end(),
',' ) + 1 );
370 arma::cx_mat x( R, C );
372 iss_full.seekg( 0, iss_full.beg );
373 for(
int r = 0; r < R; r++ )
375 std::getline( iss_full, row,
';' );
376 std::istringstream iss_row( row );
377 for(
int c = 0; c < C; c++ )
379 std::getline( iss_row, col,
',' );