Newer
Older
PrismSoftware / ECTrainer2 / Logger.cpp
#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("");
}