Skip to content
Snippets Groups Projects
AutoCorrEstimator.h 2.64 KiB
/*  AutoCorrEstimator.h

    Mark Woolrich, FMRIB Image Analysis Group

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

/*  CCOPYRIGHT  */

#if !defined(__AutoCorrEstimator_h)
#define __AutoCorrEstimator_h

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

#include "miscmaths/miscmaths.h"
#include "newimage/newimageall.h"

using namespace NEWMAT;
using namespace MISCMATHS;
using namespace NEWIMAGE;

namespace FILM {
     
  class AutoCorrEstimator
    {
    public:
      AutoCorrEstimator(const Matrix& pxdata) : 
        sizeTS(pxdata.Nrows()),
	numTS(pxdata.Ncols()),
	xdata(pxdata),
	acEst(pxdata.Nrows(), pxdata.Ncols()),
	vrow(),
	xrow(),
	dummy(),
	realifft(), 
	dm_mn(),
	zeropad(0)
	{ 
	  zeropad = MISCMATHS::nextpow2(pxdata.Nrows());
	  vrow.ReSize(zeropad);
	  xrow.ReSize(zeropad);
	  dummy.ReSize(zeropad);
	  realifft.ReSize(zeropad);
	  countLargeE.ReSize(zeropad);
	  countLargeE = 0;
	  acEst = 0;
	  acEst.Row(1) = 1;
	}

      void calcRaw(int lag = 0);
      void spatiallySmooth(const string& usanfname, const ColumnVector& epivol, int masksize, const string& epifname, int usanthresh, int lag=0);
      void applyConstraints();
      void filter(const ColumnVector& filterFFT);
      Matrix fitAutoRegressiveModel();
      void pava();
      //void preWhiten(VolumeSeries& in, VolumeSeries& ret);
      void preWhiten(ColumnVector& in, ColumnVector& ret, int i, Matrix& dmret, bool highfreqremovalonly=false);
      void setDesignMatrix(const Matrix& dm);
      int establishUsanThresh(const ColumnVector& epivol);

      void getMeanEstimate(ColumnVector& ret);

      Matrix& getEstimates() { return acEst; }
      Matrix& getE() { return E; }
      ColumnVector& getCountLargeE(){ return countLargeE; }

      int getZeroPad() { return zeropad; }
      void tukey(int M);
      void multitaper(int M);
      int pacf(const ColumnVector& x, int minorder, int maxorder, ColumnVector& betas);
      
      volume<float> mask;

    private:
      const int sizeTS;
      const int numTS;
      AutoCorrEstimator();
      const AutoCorrEstimator& operator=(AutoCorrEstimator&);
      AutoCorrEstimator(AutoCorrEstimator&);
      void getSlepians(int M, int sizeTS, Matrix& slepians);

      const Matrix& xdata;
      Matrix acEst;
      Matrix E;
      ColumnVector countLargeE;

      Matrix dminFFTReal;
      Matrix 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 dm_mn;

      int zeropad;
    };
 
}

#endif