Skip to content
Snippets Groups Projects
Log.h 3.33 KiB
Newer Older
Mark Woolrich's avatar
Mark Woolrich committed
/*  Log.h

    Mark Woolrich, FMRIB Image Analysis Group

    Copyright (C) 1999-2000 University of Oxford  */

/*  CCOPYRIGHT  */

Mark Woolrich's avatar
Mark Woolrich committed
#if !defined(Log_h)
#define Log_h

Mark Woolrich's avatar
Mark Woolrich committed
#include <iostream>
#include <fstream>
#include <string>
#include "newmatap.h"
#include "newmatio.h"

using namespace NEWMAT;
Mark Woolrich's avatar
Mark Woolrich committed
namespace Utilities{

Mark Woolrich's avatar
Mark Woolrich committed
  template<class t> string tostring(const t obj);
Mark Woolrich's avatar
Mark Woolrich committed
  
  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");

Mark Woolrich's avatar
Mark Woolrich committed
      /** Sets an existing  directory to place results into: */       
Mark Woolrich's avatar
Mark Woolrich committed
      void setDir(const string& pdirname, const string& plogfilename = "logfile"); 
      
      const string& getDir() const { return dir; }
      const string& getLogFileName() const { return logfilename; }
Mark Woolrich's avatar
Mark Woolrich committed
      const string appendDir(const string& filename) const { return dir + "/" + filename;}
Mark Woolrich's avatar
Mark Woolrich committed

      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");
Mark Woolrich's avatar
Mark Woolrich committed

      static int counter() { return count++; }
      ofstream& str(const string& plogfilename = "logfile");
Mark Woolrich's avatar
Mark Woolrich committed
      
    private:
      Log():logEstablished(false) {}
      
      const Log& operator=(Log&);
      Log(Log&);
      
      static Log* logger;
      string dir;
      ofstream logfileout;
      string logfilename;
Mark Woolrich's avatar
Mark Woolrich committed
      static int count;
Mark Woolrich's avatar
Mark Woolrich committed

      bool logEstablished;
    };
  
  inline void Log::out(const string& p_fname, const Matrix& p_mat, const string& plogfilename)
Mark Woolrich's avatar
Mark Woolrich committed
    {

      if(!logEstablished)
	{
	  logfilename = plogfilename;
Mark Woolrich's avatar
Mark Woolrich committed
	  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, const string& plogfilename)
Mark Woolrich's avatar
Mark Woolrich committed
    {
      if(!logEstablished)
	{
	  logfilename = plogfilename;
Mark Woolrich's avatar
Mark Woolrich committed
	  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, const string& plogfilename)
Mark Woolrich's avatar
Mark Woolrich committed
    {

      if(!logEstablished)
	{
	  logfilename = plogfilename;
Mark Woolrich's avatar
Mark Woolrich committed
	  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(const string& plogfilename) { 
Mark Woolrich's avatar
Mark Woolrich committed
    
    if(!logEstablished)
      {
	logfilename = plogfilename;
Mark Woolrich's avatar
Mark Woolrich committed
	setDir(".");
      }

    return logfileout; 
  }
Mark Woolrich's avatar
Mark Woolrich committed
}

Mark Woolrich's avatar
Mark Woolrich committed
#endif
Mark Woolrich's avatar
Mark Woolrich committed