Skip to content
Snippets Groups Projects
fslcomplex.cc 6.95 KiB
/*  avwcomplex.cc

    Mark Jenkinson, FMRIB Image Analysis Group

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

/*  CCOPYRIGHT  */

#include "newimageall.h"

using namespace NEWIMAGE;

void print_usage(const string& progname) {
  cerr << "Usage: " << progname << " <-outputtype> <input> <output> [startvol [endvol]]" << endl << endl;

  cerr << "       " << progname << " -realabs complexvol absvol" 
       << " [startvol [endvol]]" << endl;
  cerr << "       " << progname << " -realphase complexvol phasevol" 
       << " [startvol [endvol]]" << endl;
  cerr << "       " << progname << " -realpolar complexvol absvol phasevol" 
       << " [startvol [endvol]]" << endl;
  cerr << "       " << progname << " -realcartesian complexvol realvol"
       << " imagvol [startvol [endvol]]" << endl;
  cerr << "       " << progname << " -complex realvol imagvol" 
       << " complexvol [startvol [endvol]]" << endl;
  cerr << "       " << progname << " -complexpolar absvol phasevol" 
       << " complexvol [startvol [endvol]]" << endl;
  cerr << "       " << progname << " -complexsplit source dest" 
       << " [startvol [endvol]]" << endl;
  cerr << "       " << progname << " -complexmerge source1 source2 dest" 
       << endl;
}

void fix_start_and_end(int& start, int& end, int mint, int maxt)
{
  if (start<0) { start=mint; }
  if (start<mint) start=mint;
  if (start>maxt) start=maxt;
  if (end<0) { end=maxt; }
  if (end<mint) end=mint;
  if (end>maxt) end=maxt;
}


void realpolar(const string& fin, const string& fabs, const string& fphase, 
	       int start, int end) 
{
  volume4D<float> vreal, vimag;
  volumeinfo vinfo;
  read_complexvolume4D(vreal, vimag, fin, vinfo);
  fix_start_and_end(start,end,vreal.mint(),vreal.maxt());

  if (fabs.size()>0) {
    volume4D<float> vabs;
    for (int n=start; n<=end; n++) {
      vabs.addvolume(abs(vreal[n],vimag[n]));
    }
    save_volume4D(vabs,fabs,vinfo);
  }

  if (fphase.size()>0) {
    volume4D<float> vphase;
    for (int n=start; n<=end; n++) {
      vphase.addvolume(phase(vreal[n],vimag[n]));
    }
    save_volume4D(vphase,fphase,vinfo);
  }
}

void realcartesian(const string& fin, const string& freal, const string& fimag,