Newer
Older
/* 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;
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");
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 = 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)
{
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)
{
if(!logEstablished)
{
logfilename = plogfilename;
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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 = plogfilename;