#include "Logger.h"
#include "nkcWinUtils.h"
// コンストラクタ
Logger::Logger()
: _logFileName(_T(""))
{
}
// ファイル出力(static)
bool Logger::Write(TCHAR* filename, TCHAR* msg) {
if (_tcslen(filename) < 1) return false;
FILE* fp = NULL;
if (_tfopen_s(&fp, filename, _T("a")) != 0) {
nkc::wut::DebugPrintf(_T("Can't open data log file.\n"));
return false;
}
}
// ログ開始
void Logger::Start(std::string subject, int visit) {
_logFileName = nkc::wut::Multi2Wide(
cv::format(DATA_LOG_FILE, nkc::wut::DateTimeStr().c_str(), subject, visit));
nkc::wut::DebugPrintf(_T("Log file : %s\n"), _logFileName.c_str());
FILE* fp;
if (_tfopen_s(&fp, _logFileName.c_str(), _T("w")) != 0) {
nkc::wut::DebugPrintf(_T("Can't open data log file.\n"));
return;
}
// ヘッダ行
_ftprintf(fp, _T("time,stimNo,stimTime,gazeVx,gazeVy,shiftX,shiftY,"
"gazeIx,gazeIy,target,contact time,Feedback,TrainLevel,RR,pupilR,pupilL,"
"H11,H12,H13,H21,H22,H23,H31,H32,H33\n"));
fclose(fp);
}
// ログ出力
void Logger::Write(Record& r) {
if (_logFileName.length() < 1) {
nkc::wut::DebugPrintf(_T("Log file is not set.\n"));
return;
}
FILE* fp = NULL;
if (_tfopen_s(&fp, _logFileName.c_str(), _T("a")) != 0) {
nkc::wut::DebugPrintf(_T("Can't open data log file.\n"));
return;
}
_ftprintf(fp, _T("%.3f"), r.ElapTime); // 経過時間
_ftprintf(fp, _T(",%d"), r.StimNo); // 刺激データ番号
_ftprintf(fp, _T(",%.3f"), r.SceneTime); // 刺激提示の経過時間
_ftprintf(fp, _T(",%.1f,%.1f"), r.GazeV.x, r.GazeV.y); // 注視点(視野カメラ座標)
_ftprintf(fp, _T(",%.1f,%.1f"), r.Shift.x, r.Shift.y); // ずれ
_ftprintf(fp, _T(",%.1f,%.1f"), r.GazeI.x, r.GazeI.y); // 注視点(画像座標)
_ftprintf(fp, _T(",%d"), r.Target); // ターゲット判定
_ftprintf(fp, _T(",%.2f"), r.ContactTime); // 目標コンタクト時間
_ftprintf(fp, _T(",%d"), r.Feedback); // フィードバック
_ftprintf(fp, _T(",%d"), r.TrainingLevel); // トレーニングレベル
_ftprintf(fp, _T(",%d"), r.RR); // バイタル出力(RR間隔)
_ftprintf(fp, _T(",%.1f,%.1f"), r.PupilR, r.PupilL); // 瞳孔径
if (!r.H.empty() && r.H.rows == 3 && r.H.cols == 3) { // ホモグラフィ行列出力
double* ptr = r.H.ptr<double>(0);
for (int i = 0; i < 9; i++) {
_ftprintf(fp, _T(",%lf"), *(ptr + i));
}
}
_ftprintf(fp, _T("\n"));
fclose(fp);
}
// ログ停止
void Logger::Stop() {
_logFileName = _T("");
}