// // Created by dominik on 8/14/24. // #include "io.h" #include #include #include #include #include #include #include #include #include std::unordered_map parse_arguments(const char *infile) { std::ifstream instream(infile); std::unordered_map parameter; std::string line; std::string delim = "="; std::string key; std::string value; size_t delim_pos; // TODO this needs a check for file existence while (std::getline(instream, line)) { line.erase(std::remove(line.begin(), line.end(), ' '), line.end()); delim_pos = line.find('='); key = line.substr(0, delim_pos); value = line.substr(delim_pos+1); parameter[key] = std::stod(value); } std::cout << "Found parameter\n"; for (const auto& [key, value]: parameter) { std::cout << " " << key << ": " << std::to_string(value) << "\n"; } std::cout << std::endl; return parameter; } void fid_write_out(const std::string& filename, const std::vector& x, const std::vector& y, const double tau, const double t_evo) { auto size = x.size(); std::ostringstream sfile; sfile << filename << "_"; sfile << std::setprecision(6) << std::scientific; sfile << "tau=" << tau << "_tevo=" << t_evo << ".dat"; { std::string outfile = sfile.str(); std::ofstream fid_file(outfile, std::ios::out); for (unsigned int i = 0; i < size; i++) { fid_file << x[i] << "\t" << y[i] << "\n"; } } } void fid_write_out(const std::string& filename, const std::vector& x, const std::map>& y, const double tau) { auto size = x.size(); std::ostringstream sfile; sfile << filename << "_"; sfile << std::setprecision(6) << std::scientific; sfile << "tau=" << tau << ".dat"; { std::string outfile = sfile.str(); std::ofstream fid_file(outfile, std::ios::out); fid_file << "#"; for (const auto& [t_echo_j, _] : y) { fid_file << t_echo_j << "\t"; } fid_file << std::endl; for (unsigned int i = 0; i < size; i++) { fid_file << x[i]; for (const auto& [_, fid_j] : y) { fid_file << "\t" << fid_j[i]; } fid_file << "\n"; } } }