Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
146
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
}