Skip to content
Snippets Groups Projects
test.cc 5.99 KiB
Newer Older
Stephen Smith's avatar
Stephen Smith committed
/*  test.cc
    
    Copyright (C) 1999-2004 University of Oxford */

/*  CCOPYRIGHT  */

#include <iostream.h>
#include <iomanip>
#include "libvis/miscplot.h"
#include "libvis/miscpic.h"
Christian Beckmann's avatar
Christian Beckmann committed
#include <iostream>
#include "newmatap.h"
#include "newmatio.h"
#include "newimage/newimageall.h"
#include "miscmaths/miscmaths.h"
#include "miscmaths/miscprob.h"
#include <string>
#include "utils/log.h"
Christian Beckmann's avatar
Christian Beckmann committed
#include "melgmix.h"
#include "meloptions.h"
#include <time.h>
#include "miscmaths/miscprob.h"
Mark Jenkinson's avatar
Mark Jenkinson committed


using namespace std;
Christian Beckmann's avatar
Christian Beckmann committed
using namespace Utilities;
using namespace NEWIMAGE;
using namespace MISCPLOT;
using namespace MISCPIC;
Christian Beckmann's avatar
Christian Beckmann committed
using namespace Melodic;
Christian Beckmann's avatar
Christian Beckmann committed


Matrix calcFFT(const Matrix& Mat)
  {
    Matrix res;
    for(int ctr=1; ctr <= Mat.Ncols(); ctr++)
      {
	ColumnVector tmpCol;
	tmpCol=Mat.Column(ctr);
	ColumnVector FtmpCol_real;
	ColumnVector FtmpCol_imag;
	ColumnVector tmpPow;
	if(tmpCol.Nrows()%2 != 0){
	  Matrix empty(1,1); empty=0;
	  tmpCol &= empty;}
	RealFFT(tmpCol,FtmpCol_real,FtmpCol_imag);
	tmpPow = pow(FtmpCol_real,2)+pow(FtmpCol_imag,2);
	tmpPow = tmpPow.Rows(2,tmpPow.Nrows());
	//if(opts.logPower.value()) tmpPow = log(tmpPow);
	if(res.Storage()==0){res= tmpPow;}else{res|=tmpPow;}
      }
    return res;
  } //Matrix calc_FFT()

string float2str(float f, int width, int prec, int scientif)
	{
	    ostrstream os;
	    int redw = int(std::abs(std::log10(std::abs(f))))+1;
	    if(width>0)
	      os.width(width);
	    if(scientif>0)
	      os.setf(ios::scientific);
	    os.precision(redw+std::abs(prec));
	    os.setf(ios::internal, ios::adjustfield);
	    os << f << '\0';
	    return os.str();
	}
Mark Jenkinson's avatar
Mark Jenkinson committed

Christian Beckmann's avatar
Christian Beckmann committed
void usage(void)
{
  cout << "Usage: test infile ICfile [mixfile]" << endl;
  exit(1);
}

ReturnMatrix normpdf3(const RowVector& vals, const RowVector& mu, const RowVector& var)
{
  Matrix res(mu.Ncols(),vals.Ncols());
  for (int mc=1; mc<=res.Ncols(); mc++){
    for (int mr=1; mr<=res.Nrows(); mr++){
      res(mr,mc) = std::exp(-0.5*(std::pow(vals(mc)-mu(mr),2)/var(mr)))*std::pow(2*M_PI*var(mr),-0.5);
    }
  }

  res.Release();
  return res;
}




Mark Jenkinson's avatar
Mark Jenkinson committed
int main(int argc, char *argv[])
{
Christian Beckmann's avatar
Christian Beckmann committed

  RowVector mutmp(1);
  RowVector vartmp(1);

  RowVector valtmp(1);

  mutmp(1) =0.0;
  vartmp(1) =1.0;

  float mintmp=-1;
  float inttmp=0.1;
  for(int ctr=1; ctr<=5; ctr++){
    valtmp(1) = mintmp + ctr*inttmp;
    cerr << valtmp << "    " << normpdf(valtmp,mutmp,vartmp) << endl;
    // cerr << valtmp << "    " << normpdf(valtmp,mutmp,vartmp) << endl;
  }

  //exit(1);
Christian Beckmann's avatar
Christian Beckmann committed
  if (argc<3)
    usage();

  Matrix ICs;
  Matrix mixMatrix;
  Matrix fmixMatrix;
  volumeinfo ICvolInfo;
  volume<float> Mask;
  volume<float> Mean;

  string RAWfname;
  RAWfname = string(argv[1]);
  string ICfname;
  ICfname = string(argv[2]);

  string MIXfname;
  if (argc>3)
    MIXfname = string(argv[3]);

  string MASKfname;
  if (argc>4)
    MASKfname = string(argv[4]);



  cerr << argc << "  " << RAWfname << " " <<ICfname << " " << MIXfname << MASKfname << endl;
Christian Beckmann's avatar
Christian Beckmann committed
    volume4D<float> RawData;
    cout << " Reading orig. data " << RAWfname << " ... ";
    read_volume4D(RawData,RAWfname,ICvolInfo);
    Mean = meanvol(RawData);

    float howmuch = 0.5*(std::min(std::min(std::abs(Mean.xdim()),std::abs(Mean.ydim())),std::abs(Mean.zdim())));

    cout << " Smoothing by " << howmuch << endl;
    volume<float> tmpvol = smooth(Mean,howmuch);
Christian Beckmann's avatar
Christian Beckmann committed
 
Christian Beckmann's avatar
Christian Beckmann committed
    miscpic newpic;
    char instr[10000];

    sprintf(instr," ");
    strcat(instr,"-s 2");
    strcat(instr," -A 950 ");
    strcat(instr,string("./res/m1.png").c_str());      
    newpic.slicer(Mean, instr, &ICvolInfo); 

    char instr2[10000];

    sprintf(instr2," ");
    strcat(instr2,"-s 2");
    strcat(instr2," -A 950 ");
    strcat(instr2,string("./res/m2.png").c_str());      
    newpic.slicer(tmpvol, instr2, &ICvolInfo); 



    cout << " done! " << endl;
Christian Beckmann's avatar
Christian Beckmann committed

Christian Beckmann's avatar
Christian Beckmann committed
   {
    volume4D<float> RawIC;
    cout << "Reading components " << ICfname << "  ... ";
    read_volume4D(RawIC,ICfname);
    cout << " done" << endl;

    cout << "Creating mask   ... ";

    read_volume(Mask,MASKfname);

    //  Mask = binarise(RawIC[0],float(RawIC[0].min()),float(RawIC[0].max()));
Christian Beckmann's avatar
Christian Beckmann committed

    ICs = RawIC.matrix(Mask);
    /*if(ICs.Nrows()>1){
Christian Beckmann's avatar
Christian Beckmann committed
      Matrix DStDev=stdev(ICs);
      
      volume4D<float> tmpMask;
      tmpMask.setmatrix(DStDev,Mask);
      
      float tMmax;
      volume<float> tmpMask2;
      tmpMask2 = tmpMask[0];
      tMmax = tmpMask2.max();
      double st_mean = DStDev.Sum()/DStDev.Ncols();
      double st_std  = stdev(DStDev.t()).AsScalar();
      
      Mask = binarise(tmpMask2,(float) max((float) st_mean-3*st_std,
					   (float) 0.01*st_mean),tMmax);  
      ICs = RawIC.matrix(Mask);
    }
    else{
      Mask = binarise(RawIC[0],float(0.001),float(RawIC[0].max())) 
	+ binarise(RawIC[0],float(RawIC[0].min()),float(-0.001));
      ICs = RawIC.matrix(Mask);
    cerr << "ICs : " << ICs.Ncols() << ICs.Nrows() << endl;
Christian Beckmann's avatar
Christian Beckmann committed
    cout << " done" << endl;
  }

  if(MIXfname.length()>0){
    cout << "Reading mixing matrix " << MIXfname << " ... ";
    mixMatrix = read_ascii_matrix(MIXfname);
    if (mixMatrix.Storage()<=0) {
      cerr <<" Please specify the mixing matrix correctly" << endl;
      exit(2);
      cout << " done " << endl;
    }
  }

  cout << " ICs: " << ICs.Nrows() << " x " << ICs.Ncols() << endl;
for(int ctr=1; ctr <= ICs.Nrows(); ctr++){ 

  cout << " Plotting histogram for map " << ctr << endl;
Christian Beckmann's avatar
Christian Beckmann committed
  
    miscplot newplot;
    // newplot.add_label("legend1");
    //newplot.add_label("legend2");
    //newplot.add_ylabel(string("yll1"));
    
    //newplot.add_xlabel(string("xl1"));
    //    newplot.set_xysize(600,600);

    Matrix mu(1,3);
    Matrix pi(1,3);
    Matrix std(1,3);
    mu(1,1)=0;mu(1,2)=1.10;mu(1,3)=-1.1;
    pi(1,1)=0.96;pi(1,2)=0.02;pi(1,3)=0.02;
    std(1,1)=1;std(1,2)=0.1;std(1,3)=0.1;
    //   Matrix returnM;
    // returnM = normpdf(ICs.Row(ctr)*10,10,11);
Christian Beckmann's avatar
Christian Beckmann committed

    newplot.gmmfit(ICs.Row(ctr),mu,std,pi,string("./res/g"+num2str(ctr)+".png"),string("Title"));
    //newplot.histogram(ICs.Row(ctr),string("./res/g"+num2str(ctr)+".png"),string("Title"));
  cout << endl << endl;
Christian Beckmann's avatar
Christian Beckmann committed

  return 0;
Mark Jenkinson's avatar
Mark Jenkinson committed
}