Skip to content
Snippets Groups Projects
AutoCorrEstimator.h 2.05 KiB
Newer Older
Stephen Smith's avatar
Stephen Smith committed
/*  AutoCorrEstimator.h

    Mark Woolrich, FMRIB Image Analysis Group

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

/*  CCOPYRIGHT  */

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

#include "VolumeSeries.h"
#include "Volume.h"
#include "newmatap.h"
#include "newmatio.h"
#include "sigproc.h"

using namespace NEWMAT;
using namespace SIGPROC;
using namespace TACO;
namespace TACO {
  
#if !defined(__AutoCorrEstimator_h)
#define __AutoCorrEstimator_h
   
  class AutoCorrEstimator
    {
    public:
      AutoCorrEstimator(const VolumeSeries& pxdata) : 
	xdata(pxdata),
	vrow(),
	xrow(),
	dummy(),
	realifft(), 
	mn(pxdata.getNumSeries()),
	zeropad(0)
	{ 
	  zeropad = SIGPROC::EstablishZeroPadding(pxdata.getNumVolumes());
	  vrow.ReSize(zeropad);
	  xrow.ReSize(zeropad);
	  dummy.ReSize(zeropad);
	  realifft.ReSize(zeropad);
	}

      void calcRaw();
      void spatiallySmooth(const string& usanfname, const Volume& epivol, int masksize, const string& epifname, const string& susanpath);
      void applyConstraints();
      void filter(const ColumnVector& filterFFT);
      void fitAutoRegressiveModel();
      void pava();
      void preWhiten(VolumeSeries& in, VolumeSeries& ret);
      void preWhiten(ColumnVector& in, ColumnVector& ret, int i, Matrix& dmret);
      void setDesignMatrix(const Matrix& dm);
      int establishUsanThresh(const Volume& epivol);

      void getMeanEstimate(ColumnVector& ret);

      VolumeSeries& getEstimates() { return acEst; }

    private:
      AutoCorrEstimator();
      const AutoCorrEstimator& operator=(AutoCorrEstimator&);
      AutoCorrEstimator(AutoCorrEstimator&);

      const VolumeSeries& xdata;
      VolumeSeries acEst;

      VolumeSeries dminFFTReal;
      VolumeSeries dminFFTImag;

      ColumnVector vrow;
      ColumnVector xrow;     

      ColumnVector dm_fft_real, dm_fft_imag;
      ColumnVector x_fft_real, ac_fft_real;
      ColumnVector x_fft_im, ac_fft_im;
     
      ColumnVector dummy;
      ColumnVector realifft;
      ColumnVector mn;

      int zeropad;
    };

#endif
 
}