Skip to content
Snippets Groups Projects
AutoCorrEstimator.h 2.7 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  */

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

#include <iostream>
#include <fstream>
Stephen Smith's avatar
Stephen Smith committed
#define WANT_STREAM
#define WANT_MATH

David Flitney's avatar
David Flitney committed
#include "miscmaths/volumeseries.h"
#include "miscmaths/volume.h"
#include "newmatap.h"
#include "newmatio.h"
#include "miscmaths/miscmaths.h"
Stephen Smith's avatar
Stephen Smith committed

using namespace NEWMAT;
David Flitney's avatar
David Flitney committed
using namespace MISCMATHS;
Mark Woolrich's avatar
Mark Woolrich committed

namespace FILM {
     
Stephen Smith's avatar
Stephen Smith committed
  class AutoCorrEstimator
    {
    public:
      AutoCorrEstimator(const VolumeSeries& pxdata) : 
	xdata(pxdata),
David Flitney's avatar
David Flitney committed
	acEst(pxdata.getNumVolumes(), pxdata.getNumSeries(), pxdata.getInfo(), pxdata.getPreThresholdPositions()),
Stephen Smith's avatar
Stephen Smith committed
	vrow(),
	xrow(),
	dummy(),
	realifft(), 
	mn(pxdata.getNumSeries()),
	zeropad(0)
	{ 
Mark Woolrich's avatar
Mark Woolrich committed
	  zeropad = MISCMATHS::nextpow2(pxdata.getNumVolumes());
Stephen Smith's avatar
Stephen Smith committed
	  vrow.ReSize(zeropad);
	  xrow.ReSize(zeropad);
	  dummy.ReSize(zeropad);
	  realifft.ReSize(zeropad);
Mark Woolrich's avatar
Mark Woolrich committed
	  countLargeE.ReSize(zeropad);
	  countLargeE = 0;
Mark Woolrich's avatar
Mark Woolrich committed
	  acEst = 0;
	  acEst.Row(1) = 1;
Stephen Smith's avatar
Stephen Smith committed
	}

Mark Woolrich's avatar
Mark Woolrich committed
      void calcRaw(int lag = 0);
      void spatiallySmooth(const string& usanfname, const Volume& epivol, int masksize, const string& epifname, const string& susanpath, int usanthresh, int lag=0);
Stephen Smith's avatar
Stephen Smith committed
      void applyConstraints();
      void filter(const ColumnVector& filterFFT);
      void fitAutoRegressiveModel();
      void pava();
      void preWhiten(VolumeSeries& in, VolumeSeries& ret);
Mark Woolrich's avatar
Mark Woolrich committed
      void preWhiten(ColumnVector& in, ColumnVector& ret, int i, Matrix& dmret, bool highfreqremovalonly=false);
Stephen Smith's avatar
Stephen Smith committed
      void setDesignMatrix(const Matrix& dm);
      int establishUsanThresh(const Volume& epivol);

      void getMeanEstimate(ColumnVector& ret);

      VolumeSeries& getEstimates() { return acEst; }
Mark Woolrich's avatar
Mark Woolrich committed
      VolumeSeries& getE() { return E; }
      ColumnVector& getCountLargeE(){ return countLargeE; }

      int getZeroPad() { return zeropad; }
      void tukey(int M);
      void multitaper(int M);
Mark Woolrich's avatar
Mark Woolrich committed
      int pacf(const ColumnVector& x, int minorder, int maxorder, ColumnVector& betas);
Stephen Smith's avatar
Stephen Smith committed

    private:
      AutoCorrEstimator();
      const AutoCorrEstimator& operator=(AutoCorrEstimator&);
      AutoCorrEstimator(AutoCorrEstimator&);
Mark Woolrich's avatar
Mark Woolrich committed
      void getSlepians(int M, int sizeTS, Matrix& slepians);
Stephen Smith's avatar
Stephen Smith committed

      const VolumeSeries& xdata;
      VolumeSeries acEst;
Mark Woolrich's avatar
Mark Woolrich committed
      VolumeSeries E;
      ColumnVector countLargeE;
Stephen Smith's avatar
Stephen Smith committed

      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;
    };
 
}

Stephen Smith's avatar
Stephen Smith committed