/*  ContrastMgr.h

    Mark Woolrich, FMRIB Image Analysis Group

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

/*  CCOPYRIGHT  */

#if !defined(__ContrastMgr_h)
#define __ContrastMgr_h

#include <iostream>
#include <fstream>
#define WANT_STREAM
#define WANT_MATH

#include "newmatap.h"
#include "newmatio.h"
#include "Volume.h"
#include "paradigm.h"
#include "miscmaths/miscmaths.h"

using namespace NEWMAT;

namespace FILM {

  class ContrastMgr
    {
    public:
      ContrastMgr();

      void run();

    private:
      ContrastMgr(const ContrastMgr&);
      ContrastMgr& operator=(const ContrastMgr& p_ContrastMgr);

    protected:

      void Load();
      void SaveFContrast(const string& suffix);
      void SaveTContrast(const string& suffix);

      void ComputeVarCope();
      void ComputeCope();
      void ComputeNeff();
      void ComputeZStat();
      void ComputeFStat();

      const ColumnVector& GetVarCope() const {return varcb;}
      const ColumnVector& GetCope() const {return cb;}
      const ColumnVector& GetDof() const {return dof;}
      
      void SetTContrast(const int p_num, const int p_c_counter) 
	{
	  tc = parad.getTContrasts().Row(p_num).t();
	  c_counter = p_c_counter;
	  contrast_num = p_num;
	}

      void SetFContrast(const int p_num, const int p_c_counter);

      void GetCorrection(Matrix& corr, const int ind);

      // Contrasts:      
      ColumnVector tc;
      Matrix fc;
      int c_counter;
      int numParams;
      int num_Ccontrasts_in_Fcontrast;
      bool contrast_valid;
      int contrast_num;

      Paradigm parad;

      // Loaded data:
      VolumeSeries corrections;
      Matrix b;
      Volume dof;
      Volume sigmaSquareds;

      // Calculated data:
      Volume varcb;
      Volume cb;
      Volume neff;      
      Volume tstat;
      Volume fstat;
      Volume zstat;

      // Other:
      int numTS;
      bool is_avw_corrections;
    };

}

#endif