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);
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;
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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
140
141
142
143
144
145
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;
}