-
Mark Woolrich authoredMark Woolrich authored
AutoCorrEstimator.h 2.69 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/volumeseries.h"
#include "miscmaths/volume.h"
#include "newmatap.h"
#include "newmatio.h"
#include "miscmaths/miscmaths.h"
using namespace NEWMAT;
using namespace MISCMATHS;
namespace FILM {
class AutoCorrEstimator
{
public:
AutoCorrEstimator(const VolumeSeries& pxdata) :
xdata(pxdata),
acEst(pxdata.getNumVolumes(), pxdata.getNumSeries(), pxdata.getInfo(), pxdata.getPreThresholdPositions()),
vrow(),
xrow(),
dummy(),
realifft(),
dm_mn(),
zeropad(0)
{
zeropad = MISCMATHS::nextpow2(pxdata.getNumVolumes());
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 Volume& epivol, int masksize, const string& epifname, const string& susanpath, int usanthresh, int lag=0);
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, bool highfreqremovalonly=false);
void setDesignMatrix(const Matrix& dm);
int establishUsanThresh(const Volume& epivol);
void getMeanEstimate(ColumnVector& ret);
VolumeSeries& getEstimates() { return acEst; }
VolumeSeries& 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);
private:
AutoCorrEstimator();
const AutoCorrEstimator& operator=(AutoCorrEstimator&);
AutoCorrEstimator(AutoCorrEstimator&);
void getSlepians(int M, int sizeTS, Matrix& slepians);
const VolumeSeries& xdata;
VolumeSeries acEst;
VolumeSeries E;
ColumnVector countLargeE;
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 dm_mn;
int zeropad;
};
}
#endif