19 namespace fs = std::filesystem;
22 std::shared_ptr<spdlog::logger> logger = spdlog::get(
"citlali_logger");
24 std::vector<std::string> header;
25 Eigen::MatrixXd table;
30 table = datatable::read<double, datatable::Format::ecsv>(
31 filepath, &header, &meta_);
33 }
catch (datatable::ParseError &e) {
34 logger->warn(
"unable to read apt table file as ECSV {}: {}", filepath,
37 table = datatable::read<double, datatable::Format::ascii>(filepath,
39 }
catch (datatable::ParseError &e) {
40 logger->warn(
"unable to read apt table file as ASCII {}: {}",
45 return std::tuple {table, header, meta_};
50inline void to_ecsv_from_matrix(std::string filepath, Eigen::DenseBase<Derived> &table, std::vector<std::string> header, YAML::Node meta) {
51 namespace fs = std::filesystem;
54 std::shared_ptr<spdlog::logger> logger = spdlog::get(
"citlali_logger");
58 datatable::write<datatable::Format::ecsv>(filepath +
".ecsv", table, header, std::vector<int>{}, meta);
60 }
catch (datatable::ParseError &e) {
61 logger->warn(
"unable to read apt table file as ECSV {}: {}", filepath,
64 datatable::write<datatable::Format::ascii>(filepath +
".ascii", table, header, std::vector<int>{});
66 }
catch (datatable::ParseError &e) {
67 logger->warn(
"unable to write apt table file as ASCII {}: {}",
75 using namespace tula::ecsv;
78 std::shared_ptr<spdlog::logger> logger = spdlog::get(
"citlali_logger");
81 std::vector<std::string> header;
84 std::map<std::string, Eigen::VectorXd> table;
87 std::map<std::string, std::string> map_with_strs;
92 std::ifstream fo(filepath);
95 auto hdr = ECSVHeader::read(fo);
97 auto tbl = ECSVTable(hdr);
99 auto parser = aria::csv::CsvParser(fo).delimiter(tbl.header().delimiter());
101 tbl.load_rows(parser);
104 for (Eigen::Index i=0; i<tbl.header().colnames().size(); i++) {
105 header.push_back(tbl.header().colnames()[i]);
108 const auto map_with_bools =
109 meta_to_map<std::string, bool>(hdr.meta(), &meta);
112 meta_to_map<std::string, std::string>(meta, &meta);
115 auto int_colnames = tbl.array_data<
int>().colnames();
116 for (
auto & col : int_colnames) {
117 table[col] = tbl.col<
int>(col).
template cast<double> ();
121 auto int16_colnames = tbl.array_data<int16_t>().colnames();
122 for (
auto & col : int16_colnames) {
123 table[col] = tbl.col<int16_t>(col).
template cast<double> ();
127 auto int64_colnames = tbl.array_data<int64_t>().colnames();
128 for (
auto & col : int64_colnames) {
129 table[col] = tbl.col<int64_t>(col).
template cast<double> ();
133 auto bool_colnames = tbl.array_data<
bool>().colnames();
134 for (
auto & col : bool_colnames) {
135 table[col] = tbl.col<
bool>(col).
template cast<double> ();
139 auto float_colnames = tbl.array_data<
float>().colnames();
140 for (
auto & col : float_colnames) {
141 table[col] = tbl.col<
float>(col).
template cast<double> ();
145 auto dbl_colnames = tbl.array_data<
double>().colnames();
146 for (
auto & col : dbl_colnames) {
147 table[col] = tbl.col<
double>(col);
151 logger->error(
"cannot open input table");
152 std::exit(EXIT_FAILURE);
156 return std::tuple {table, header, map_with_strs};
void to_ecsv_from_matrix(std::string filepath, Eigen::DenseBase< Derived > &table, std::vector< std::string > header, YAML::Node meta)
Definition ecsv_io.h:50