diff --git a/Log.cc b/Log.cc new file mode 100644 index 0000000000000000000000000000000000000000..17ac986bd55b2fa9e721a480315e9d61b9de30b7 --- /dev/null +++ b/Log.cc @@ -0,0 +1,62 @@ +/* Log.cc + + Mark Woolrich, FMRIB Image Analysis Group + + Copyright (C) 1999-2000 University of Oxford */ + +/* CCOPYRIGHT */ + +#include "Log.h" + +namespace Utilities { + + Log* Log::logger = NULL; + + void Log::makeDir(const string& pdirname, const string& plogfilename) + { + dir = pdirname; + logfilename = plogfilename; + + // make directory to place results into: + // keep adding "+" until directory is made: + int count = 0; + while(true) + { + if(count >= 20) + { + string s("Cannot create directory " + dir); + throw Exception(s.c_str()); + } + + int ret = system(("mkdir "+ dir).c_str()); + if(ret == 0) + { + break; + } + dir = dir + "+"; + count++; + } + + // setup logfile + logfileout.open((dir + "/" + logfilename).c_str(), ios::out); + + logEstablished = true; + } + +void Log::setDir(const string& pdirname, const string& plogfilename) + { + dir = pdirname; + logfilename = plogfilename; + + // setup logfile + logfileout.open((dir + "/" + logfilename).c_str(), ios::out); + + logEstablished = true; + } +} + + + + + + diff --git a/Log.h b/Log.h new file mode 100644 index 0000000000000000000000000000000000000000..1b35c9148b6520115020ea2936181cc6979905eb --- /dev/null +++ b/Log.h @@ -0,0 +1,147 @@ +/* Log.h + + Mark Woolrich, FMRIB Image Analysis Group + + Copyright (C) 1999-2000 University of Oxford */ + +/* CCOPYRIGHT */ + +#include <iostream> +#include <fstream> +#include <string> +#include "newmatap.h" +#include "newmatio.h" + +using namespace NEWMAT; +namespace Utilities{ + +#if !defined(Log_h) +#define Log_h + + 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 appendFileName(const string& filename) const { return dir + "/" + filename;} + + void out(const string& p_fname, const Matrix& p_mat); + void out(const string& p_fname, const RowVector& p_mat); + void out(const string& p_fname, const ColumnVector& p_mat); + + ofstream& str(); + + private: + Log():logEstablished(false) {} + + const Log& operator=(Log&); + Log(Log&); + + static Log* logger; + string dir; + ofstream logfileout; + string logfilename; + + bool logEstablished; + }; + + inline void Log::out(const string& p_fname, const Matrix& p_mat) + { + + if(!logEstablished) + { + logfilename = "logfile"; + 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) + { + if(!logEstablished) + { + logfilename = "logfile"; + 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) + { + + if(!logEstablished) + { + logfilename = "logfile"; + 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() { + + if(!logEstablished) + { + logfilename = "logfile"; + setDir("."); + } + + return logfileout; + } + +#endif + +} + +