Skip to content
Snippets Groups Projects
volumeseries.h 3.41 KiB
Newer Older
Mark Woolrich's avatar
Mark Woolrich committed
/*  volumeseries.h

    Mark Woolrich - FMRIB Image Analysis Group

    Copyright (C) 2002 University of Oxford  */

/*  CCOPYRIGHT  */

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

#include "newmatap.h"
#include "newmatio.h"
#include "volumeinfo.h"

#include <string>

using namespace NEWMAT;

namespace MISCMATHS {
  
#if !defined(__volumeseries_h)
#define __volumeseries_h

  // Rows are volumes
  // Columns are (time) series
  // num Rows is size of (time) series
  // num Cols is size of volumes
  class VolumeSeries : public Matrix
    {
    public:

      VolumeSeries() : Matrix() {}
      
      VolumeSeries(const VolumeInfo& pvolinfo, const ColumnVector& in) : 
	Matrix(),
	volinfo(pvolinfo),
	preThresholdPositions(in)
	{}

      VolumeSeries(int pnumVols, int pnumSeries) : 
	Matrix(pnumVols, pnumSeries), 
	means(pnumSeries){}
      
      VolumeSeries(int pnumVols, int pnumSeries, const VolumeInfo& pvolinfo, const ColumnVector& in) : 
	Matrix(pnumVols, pnumSeries), 
	volinfo(pvolinfo),
	preThresholdPositions(in),
	means(pnumSeries){}

      VolumeSeries& operator=(const VolumeSeries& vol) { 
	Matrix::operator=(vol); 
	preThresholdPositions = vol.preThresholdPositions;
	volinfo = vol.volinfo;
	means = vol.means;
	return *this;
      }
      VolumeSeries& operator=(const Matrix& mat) {
	Matrix::operator=(mat);
	return *this;
      }

      VolumeSeries& operator=(float pin) { 
	Matrix::operator=(pin); 
	return *this;
      }
      VolumeSeries(const VolumeSeries& vol){operator=(vol);}
      VolumeSeries(const Matrix& pmat) : Matrix(pmat) {}
      
      void thresholdSeries(float thresh, bool removeMean);
      void thresholdSeries();
      void unthresholdSeries();
      void unthresholdSeries(const VolumeInfo& pvolinfo,const ColumnVector& in);
      void removeSeriesMeans();

      const ColumnVector& getPreThresholdPositions() const { return preThresholdPositions; } 
      void setPreThresholdPositions(const ColumnVector& in) { preThresholdPositions = in; }

      int getNumVolumes() const { return Nrows(); }
      int getNumSeries() const { return Ncols(); }
      int nvoxels() const { return Ncols(); }
      int tsize() const { return Nrows(); }

      const ReturnMatrix getSeries(int i) const { ColumnVector tmp = Column(i);tmp.Release();return tmp; }

      ReturnMatrix getSeries(int i) { ColumnVector tmp = Column(i);tmp.Release();return tmp; }

      void setSeries(const ColumnVector& in, int i) { Column(i) = in; }

      const ReturnMatrix getVolume(int i) const { RowVector tmp = Row(i);tmp.Release();return tmp; }
      ReturnMatrix getVolume(int i) { RowVector tmp = Row(i);tmp.Release();return tmp; }

      void setVolume(const ColumnVector& in, int i) { Row(i) = in.AsRow(); }
      void setVolume(const RowVector& in, int i) { Row(i) = in; }

      void read(const std::string& fname);
      void writeAsInt(const std::string& fname);
      void writeAsFloat(const std::string& fname);
      void writeThresholdedSeriesAsFloat(const VolumeInfo& pvolinfo,const ColumnVector& in,const std::string& fname);
Mark Woolrich's avatar
Mark Woolrich committed
      
      void replaceMeans();

      const VolumeInfo& getInfo() const { return volinfo; }
      void setInfo(const VolumeInfo& pvolinfo) { volinfo = pvolinfo; }

      int getUnthresholdNumSeries() const { return volinfo.x*volinfo.y*volinfo.z; }
      
    protected:
      VolumeInfo volinfo;
      ColumnVector preThresholdPositions; 
      ColumnVector means;
    };

#endif

}