/* Log.h Mark Woolrich, FMRIB Image Analysis Group Copyright (C) 1999-2000 University of Oxford */ /* CCOPYRIGHT */ #if !defined(Log_h) #define Log_h #include <iostream> #include <fstream> #include <string> #include "newmatap.h" #include "newmatio.h" using namespace NEWMAT; namespace Utilities{ template<class t> string tostring(const t obj); class Log { public: static Log& getInstance(); ~Log() { delete logger; } /** Makes a directory to place results into: keeps adding "+" to pdirname until unique directory is made: */ void makeDir(const string& pdirname, const string& plogfilename = "logfile"); /** Sets an existing directory to place results into: */ void setDir(const string& pdirname, const string& plogfilename = "logfile"); const string& getDir() const { return dir; } const string& getLogFileName() const { return logfilename; } const string appendDir(const string& filename) const { return dir + "/" + filename;} void out(const string& p_fname, const Matrix& p_mat, const string& plogfilename = "logfile"); void out(const string& p_fname, const RowVector& p_mat, const string& plogfilename = "logfile"); void out(const string& p_fname, const ColumnVector& p_mat, const string& plogfilename = "logfile"); static int counter() { return count++; } ofstream& str(const string& plogfilename = "logfile"); private: Log():logEstablished(false) {} const Log& operator=(Log&); Log(Log&); static Log* logger; string dir; ofstream logfileout; string logfilename; static int count; bool logEstablished; }; inline void Log::out(const string& p_fname, const Matrix& p_mat, const string& plogfilename) { if(!logEstablished) { logfilename = plogfilename; setDir("."); } ofstream out; out.open((dir + "/" + p_fname).c_str(), ios::out); out.setf(ios::scientific, ios::floatfield); for(int i=1; i<=p_mat.Nrows(); i++) { for(int j=1; j<=p_mat.Ncols(); j++) { out << p_mat(i,j) << " "; } out << endl; } out.close(); } inline void Log::out(const string& p_fname, const ColumnVector& p_mat, const string& plogfilename) { if(!logEstablished) { logfilename = plogfilename; setDir("."); } ofstream out; out.open((dir + "/" + p_fname).c_str(), ios::out); out.setf(ios::scientific, ios::floatfield); for(int j=1; j<=p_mat.Nrows(); j++) { out << p_mat(j); out << endl; } out.close(); } inline void Log::out(const string& p_fname, const RowVector& p_mat, const string& plogfilename) { if(!logEstablished) { logfilename = plogfilename; setDir("."); } ofstream out; out.open((dir + "/" + p_fname).c_str(), ios::out); out.setf(ios::scientific, ios::floatfield); for(int j=1; j<=p_mat.Ncols(); j++) { out << p_mat(j) << " "; } out << endl; out.close(); } inline Log& Log::getInstance(){ if(logger == NULL) logger = new Log(); return *logger; } inline ofstream& Log::str(const string& plogfilename) { if(!logEstablished) { logfilename = plogfilename; setDir("."); } return logfileout; } } #endif