5#ifndef SEVN_REVISED_IO_H
6#define SEVN_REVISED_IO_H
63 IO(
int argc,
char **argv){
101 void load(
int n,
char** val);
108 template <
typename T>
void fill_matrix_test(std::vector< std::vector<T> > &matrix, std::ifstream &file){
110 std::vector<T> vline;
111 std::string line, value;
112 std::istringstream stream;
114 std::cout<<
" Filling matrix "<<std::endl;
118 vline.erase(vline.begin(), vline.end());
121 if(file.eof() || line.length()==0 )
break;
126 if(line[0]==
'/' or line[0]==
'#')
133 vline.push_back(utilities::s2n<T>(value, __FILE__, __LINE__));
140 matrix.push_back(vline);
162 std::random_device
rd;
205 void print_output(std::vector<std::vector<double>> &
printmatrix,
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID,
const bool binaryprint=
false);
207 inline void print_formatted_output(std::vector<std::vector<double>> &
printmatrix,
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID,
const bool binaryprint=
false){
217 if(out == OutputOption::_ascii)
219 else if (out == OutputOption::_csv)
221 else if (out == OutputOption::_binary)
224 else if (out == OutputOption::_hdf5)
240 void print_evolved_summary(
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID);
248 void print_failed_summary(
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID);
256 std::ofstream output_file;
257 output_file.open(fname);
266 void print_log(std::string filename=
"logfile.dat");
273 void log_put(std::string& loginfo);
283 void print_timelog(
Star *s);
288 #if defined(__linux__)
289 int results = mkdir(name.c_str(), 0777);
292 int results = system((
"mkdir -p "+name).c_str());
332 std::ifstream table_file;
333 std::vector<std::vector<double>> Matrix;
339 table_file.open(
get_SEVNpath() +
"auxiliary_data/" + name);
341 if (table_file.is_open()) {
345 svlog.
critical(
"Raised an error reading auxiliary table file " + name +
346 ". Check if the file exist, if you specified the right path in the run script, and if you have reading permission.",
369 #pragma omp threadprivate(IO::h5)
379#pragma omp threadprivate(IO::liststars)
380#pragma omp threadprivate(IO::failedstars)
381#pragma omp threadprivate(IO::failedinits)
382#pragma omp threadprivate(IO::outputfile)
383#pragma omp threadprivate(IO::logfile)
384#pragma omp threadprivate(IO::logstring)
388 static std::ofstream timelog;
389#pragma omp threadprivate(IO::timelog)
423 void columns_to_print(std::string &list_cols, std::vector<std::string> &printcolumns);
425 void read(std::vector<std::vector<std::vector<std::vector<double>>>>&
tables,
426 const std::string&
tables_dir,
const std::vector<std::string>&
zstring, std::vector<double>&
Z);
447 template <
typename T>
void fill_matrix(std::vector< std::vector<T> > &matrix, std::ifstream &file,
bool reset=
false)
const{
449 std::vector<T> vline;
450 std::string line, value;
451 std::istringstream stream;
459 vline.erase(vline.begin(), vline.end());
462 if(file.eof() || line.length()==0 )
break;
467 if (line[0]==
'#' or line[0]==
'/')
472 if(stream >> value and stream.str()[0]!=
'/' and stream.str()[0]!=
'#'){
473 vline.push_back(utilities::s2n<T>(value, __FILE__, __LINE__));
480 matrix.push_back(vline);
487 void print_list_summary(std::ofstream& outstream, std::string basename,
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID);
493 void print_hdf5(std::vector<std::vector<double>> &
printmatrix,
const std::string &_name,
const bool binaryprint);
512 void print_formatted_ascii(
const std::string &filename,std::vector<std::vector<double>> &
printmatrix,
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID,
const bool binaryprint,
const std::string &separator,
513 const size_t &_w_id,
const size_t &_w_name,
const size_t &_w_header,
const size_t &_precision,
const std::string &comment);
515 void print_ascii(std::vector<std::vector<double>> &
printmatrix,
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID,
const bool binaryprint);
516 void print_csv(std::vector<std::vector<double>> &
printmatrix,
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID,
const bool binaryprint);
517 void print_bin(std::vector<std::vector<double>> &
printmatrix,
const std::string &_name,
const unsigned long &_rseed,
const size_t &_ID,
const bool binaryprint);
525 void inspect_dir(
const std::string &motherdir, std::vector<std::string>& _zstring, std::vector<double>& _Z,std::string inspectdir=
"") {
527 std::string dir = motherdir +
"/" + inspectdir;
532 svlog.
critical(
"You are trying to inspect an empty directory: " + dir, __FILE__, __LINE__);
535 auto directory = opendir(dir.c_str());
538 if(
nullptr == directory)
539 svlog.
critical(
"Cannot open directory " + dir, __FILE__, __LINE__);
541 dirent *gotobject = readdir(directory);
544 while(gotobject !=
nullptr) {
546 gotobject = readdir(directory);
555 void inspect_object(dirent *
object,
const std::string &motherdir, std::vector<std::string>& _zstring, std::vector<double>& _Z) {
558 if (object->d_name[0] ==
'.') {
562 if (object->d_type == DT_DIR) {
564 _zstring.emplace_back(object->d_name);
566 _Z.push_back(utilities::dirname2n<double>(std::string(object->d_name), __FILE__, __LINE__));
570 inspect_dir(motherdir, _zstring, _Z, std::string(object->d_name));
576 if (object->d_type == DT_REG) {
578 std::string filename = motherdir +
"/" + _zstring[_zstring.size()-1] +
"/" + std::string(object->d_name);
582 svlog.
warning(
"The unexpected file '"+std::string(object->d_name)+
"' has been found in the directory "+
583 motherdir +
"/" + _zstring[_zstring.size()-1] +
". It will be not loaded. Check if this is a misspelled table."
589 svlog.
critical(
"This filename should not be empty: " + filename, __FILE__, __LINE__);
596 svlog.
critical(
"This is nor a file or a directory: " + std::string(object->d_name), __FILE__, __LINE__);
613 if (!std::is_sorted(
Z.begin(),
Z.end()))
616 if (!std::is_sorted(
Z_HE.begin(),
Z_HE.end()))
619 for (
auto& zams_table :
allzams){
620 if (!std::is_sorted(zams_table.begin(),zams_table.end()))
625 if (!std::is_sorted(zams_table.begin(),zams_table.end()))
640 unsigned int N_expected = 8;
644 if (is_binary and inchoice==InputBinaryOption::_new){
646 "Mass_1",
"Z_1",
"spin_1",
"SN_1",
"Tstart_1",
647 "a",
"e",
"Tend",
"Dtout"};
649 else if (is_binary and inchoice==InputBinaryOption::_legacy)
651 "a",
"e",
"Tend",
"Tstart",
"dt",
"SN_0",
"SN_1",
"Dtout"};
652 else if (!is_binary){
void fill_matrix_test(std::vector< std::vector< T > > &matrix, std::ifstream &file)
Definition: IO.h:108
void print_evolved_summary(const std::string &_name, const unsigned long &_rseed, const size_t &_ID)
Definition: IO.cpp:406
void inspect_dir(const std::string &motherdir, std::vector< std::string > &_zstring, std::vector< double > &_Z, std::string inspectdir="")
Definition: IO.h:525
void print_formatted_output(std::vector< std::vector< double > > &printmatrix, const std::string &_name, const unsigned long &_rseed, const size_t &_ID, const bool binaryprint=false)
Definition: IO.h:207
static std::ofstream failedinits
Definition: IO.h:373
void read(std::vector< std::vector< std::vector< std::vector< double > > > > &tables, const std::string &tables_dir, const std::vector< std::string > &zstring, std::vector< double > &Z)
Definition: IO.cpp:156
std::vector< std::string > printcolumns_binary
Definition: IO.h:168
std::random_device rd
Definition: IO.h:162
std::string GW_mode
Definition: IO.h:183
std::vector< std::string > zstring
Definition: IO.h:415
void print_log(std::string filename="logfile.dat")
Definition: IO.cpp:653
bool load_called
Definition: IO.h:393
std::string output_mode
Definition: IO.h:178
void inspect_object(dirent *object, const std::string &motherdir, std::vector< std::string > &_zstring, std::vector< double > &_Z)
Definition: IO.h:555
IO(int argc, char **argv)
Definition: IO.h:63
std::vector< std::vector< std::string > > STARS_MATRIX
Definition: IO.h:160
void load_tables()
Definition: IO.cpp:112
void print_failed_summary(const std::string &_name, const unsigned long &_rseed, const size_t &_ID)
Definition: IO.cpp:410
std::string tides_mode
Definition: IO.h:182
SEVNpar svpar
Definition: IO.h:198
std::vector< std::vector< double > > load_auxiliary_table(std::string name) const
Definition: IO.h:330
std::string winds_mode
Definition: IO.h:180
static std::ofstream failedstars
Definition: IO.h:372
static std::ofstream outputfile
Definition: IO.h:374
std::string CIRC_mode
Definition: IO.h:187
static std::vector< std::string > labels_STARMATRIX
Definition: IO.h:396
std::string list_file
Definition: IO.h:407
std::vector< std::string > zstring_HE
Definition: IO.h:415
void print_formatted_ascii(const std::string &filename, std::vector< std::vector< double > > &printmatrix, const std::string &_name, const unsigned long &_rseed, const size_t &_ID, const bool binaryprint, const std::string &separator, const size_t &_w_id, const size_t &_w_name, const size_t &_w_header, const size_t &_precision, const std::string &comment)
Definition: IO.cpp:445
static std::string logstring
Definition: IO.h:376
void load(int n, char **val)
Definition: IO.cpp:36
void print_csv(std::vector< std::vector< double > > &printmatrix, const std::string &_name, const unsigned long &_rseed, const size_t &_ID, const bool binaryprint)
Definition: IO.cpp:564
std::vector< size_t > printIDs_binary
Definition: IO.h:172
static std::ofstream liststars
Definition: IO.h:371
int nthreads
Definition: IO.h:177
void reset_log()
Definition: IO.h:106
void log_put(std::string &loginfo)
Definition: IO.cpp:668
void load_stars()
Definition: IO.cpp:126
bool rseed_provided()
Parameters call.
Definition: IO.h:195
std::string output_folder_name
Definition: IO.h:398
std::string tables_dir_HE
Definition: IO.h:407
static std::ofstream logfile
Definition: IO.h:375
std::string SNK_mode
Definition: IO.h:188
void columns_to_print(std::string &list_cols, std::vector< std::string > &printcolumns)
Definition: IO.cpp:585
void print_ascii(std::vector< std::vector< double > > &printmatrix, const std::string &_name, const unsigned long &_rseed, const size_t &_ID, const bool binaryprint)
Definition: IO.cpp:550
std::vector< std::vector< std::vector< std::vector< double > > > > tables_HE
Definition: IO.h:157
void inspect_tables()
Definition: IO.cpp:242
size_t ntables
Definition: IO.h:175
void print_bin(std::vector< std::vector< double > > &printmatrix, const std::string &_name, const unsigned long &_rseed, const size_t &_ID, const bool binaryprint)
Definition: IO.cpp:579
void inspect_dirs()
Definition: IO.h:520
void print_failed_initilisation_summary(const size_t &_ID)
Definition: IO.cpp:414
std::vector< std::vector< double > > allzams
Definition: IO.h:159
std::vector< size_t > printIDs_star
Definition: IO.h:171
std::string get_logstring()
Definition: IO.h:105
std::string CE_mode
Definition: IO.h:189
void set_init_variables()
Definition: IO.h:355
bool check_sorted()
Definition: IO.h:610
std::ifstream in
Definition: IO.h:413
std::string binput_mode
Definition: IO.h:179
std::string HARD_mode
Definition: IO.h:186
void print_list_summary(std::ofstream &outstream, std::string basename, const std::string &_name, const unsigned long &_rseed, const size_t &_ID)
Definition: IO.cpp:333
int tablesloaded
Definition: IO.h:202
std::string list_cols_binary
Definition: IO.h:409
SevnLogging svlog
Definition: IO.h:403
std::string mix_mode
Definition: IO.h:184
std::string tables_dir
Definition: IO.h:407
std::string RL_mode
Definition: IO.h:181
std::vector< std::vector< double > > printmatrix
Definition: IO.h:401
std::string get_output_folder_name()
Definition: IO.h:319
std::vector< std::vector< double > > allzams_HE
Definition: IO.h:159
std::vector< std::vector< std::vector< std::vector< double > > > > tables
Definition: IO.h:157
void print_output(std::vector< std::vector< double > > &printmatrix, const std::string &_name, const unsigned long &_rseed, const size_t &_ID, const bool binaryprint=false)
Definition: IO.cpp:297
void fill_matrix(std::vector< std::vector< T > > &matrix, std::ifstream &file, bool reset=false) const
Definition: IO.h:447
std::vector< double > Z_HE
Definition: IO.h:158
std::string COLL_mode
Definition: IO.h:185
std::string list_cols_star
Definition: IO.h:408
std::string SEVNpath
Definition: IO.h:190
std::vector< double > Z
Definition: IO.h:158
std::string get_SEVNpath() const
Definition: IO.h:320
void print_params(std::string filename="used_params.svpar")
Definition: IO.h:252
void read_tables()
Definition: IO.h:428
void set_STARMATRIX_labels()
Definition: IO.h:637
void create_folder(const std::string &name)
Definition: IO.h:287
std::vector< std::string > printcolumns_star
Definition: IO.h:165
std::string print(bool use_default=false)
Definition: params.h:417
bool get_bool(std::string name)
Definition: params.h:158
void debug(std::string errstate, const char *file_input=nullptr, int line_input=-1) const
Definition: sevnlog.cpp:194
void critical(std::string errstate, const char *file_input=nullptr, int line_input=-1) const
Definition: sevnlog.cpp:85
void pdebug() const
Variadic prints.
Definition: sevnlog.h:191
void warning(std::string errstate, const char *file_input=nullptr, int line_input=-1) const
Definition: sevnlog.cpp:137
Definition: lookup_and_phases.h:17
OutputOption
Definition: lookup_and_phases.h:91
const FILEMAP filemap
Definition: lookup_and_phases.cpp:69
@ _Ntables
Definition: lookup_and_phases.h:38
const INPUTMAPBIN inputmapbin
Definition: lookup_and_phases.cpp:112
const FILEMAP filemap_optional
Definition: lookup_and_phases.cpp:78
const OUTPUTMAP outputmap
Definition: lookup_and_phases.cpp:92