Skip to content
Snippets Groups Projects
Commit 1c46c0a8 authored by Christian Beckmann's avatar Christian Beckmann
Browse files

*** empty log message ***

parent 913c5bdf
No related branches found
No related tags found
No related merge requests found
/* test.cc
Christian F. Beckmann, FMRIB Analysis Group
Copyright (C) 1999-20013 University of Oxford */
/* CCOPYRIGHT */
#include "libvis/miscplot.h"
#include "miscmaths/miscmaths.h"
#include "miscmaths/miscprob.h"
#include "utils/options.h"
#include <vector>
#include <ctime>
#include "newimage/newimageall.h"
#include "melhlprfns.h"
#include <iostream>
#ifdef __APPLE__
#include <mach/mach.h>
#define memmsg(msg) { \
struct task_basic_info t_info; \
mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; \
if (KERN_SUCCESS == task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t) &t_info, &t_info_count)) \
{ \
cout << msg << " res: " << t_info.resident_size/1000000 << " virt: " << t_info.virtual_size/1000000 << "\n"; \
cout.flush(); \
} \
}
#else
#define memmsg(msg) { \
cout << msg; \
}
#endif
// a simple message macro that takes care of cout and log
#define message(msg) { \
cout << msg; \
cout.flush(); \
}
#define outMsize(msg,Mat) { \
cerr << " " << msg << " " <<Mat.Nrows() << " x " << Mat.Ncols() << endl; \
}
using namespace MISCPLOT;
using namespace MISCMATHS;
using namespace Utilities;
using namespace std;
using namespace Melodic;
// GLOBALS
clock_t tictime;
// The two strings below specify the title and example usage that is
// printed out as the help or usage message
string title=string("fsl_BLAH")+
string("\nAuthor: Christian F. Beckmann \nCopyright(c) 2008-2013 University of Oxford\n")+
string(" \n \n")+
string(" \n");
string examples="fsl_BLAH [options]";
//Command line Options {
Option<string> fnin(string("-i,--in"), string(""),
string("input file name (matrix 3D or 4D image)"),
false, requires_argument);
Option<string> fnmask(string("-m"), string(""),
string("mask file name "),
false, requires_argument);
Option<int> help(string("-h,--help"), 0,
string("display this help text"),
false,no_argument);
Option<int> xdim(string("-x,--xdim"), 0,
string("xdim"),
false,requires_argument);
Option<int> ydim(string("-y,--ydim"), 0,
string("ydim"),
false,requires_argument);
Option<int> econ(string("-e,--econ"), 0,
string("econ: how to liump stuff"),
false,requires_argument);
/*
}
*/
////////////////////////////////////////////////////////////////////////////
// Local functions
void tic(){
tictime = clock();
}
void toc(){
cerr << endl << "TOC: " << float(clock()-tictime)/CLOCKS_PER_SEC << " seconds" << endl<<endl;
}
Matrix calccorr(const Matrix& in, int econ)
{
Matrix Res;
int nrows=in.Nrows();
int ncols=in.Ncols();
Res = zeros(nrows,nrows);
if(econ>0){
RowVector colmeans(ncols);
for (int n=1; n<=ncols; n++) {
colmeans(n)=0;
for (int m=1; m<=nrows; m++) {
colmeans(n)+=in(m,n);
}
colmeans(n)/=nrows;
}
int dcol = econ;
Matrix suba;
for(int ctr=1; ctr <= in.Ncols(); ctr+=dcol){
suba=in.SubMatrix(1,nrows,ctr,Min(ctr+dcol-1,ncols));
int scolmax = suba.Ncols();
for (int n=1; n<=scolmax; n++) {
double cmean=colmeans(ctr + n - 1);
for (int m=1; m<=nrows; m++) {
suba(m,n)-=cmean;
}
}
Res += suba*suba.t() / ncols;
}
}
else
Res = cov(in.t());
return Res;
} //Matrix calccorr
void convert_to_mat(volume4D<float>& in, volume<float>& mask, Matrix& out)
{
out = in[0].vec(mask).t();
in.deletevolume(0);
while(in.tsize()>0){
out &= in[0].vec(mask).t();
in.deletevolume(0);
}
}
int do_work(int argc, char* argv[]) {
tic();
Matrix MatrixData;
volume<float> Mean;
if(xdim.value()==0 && ydim.value()==0)
{
volume4D<float> RawData;
volume<float> theMask;
toc();
//read data
message("Reading data file " << (string)fnin.value() << " ... ");
read_volume4D(RawData,fnin.value());
message(" done" << endl);
Mean = meanvol(RawData);
toc();
message("Reading mask file " << (string)fnmask.value() << " ... ");
read_volume(theMask,fnmask.value());
MatrixData = RawData.matrix();
memmsg("start");
Matrix res;
convert_to_mat(RawData,theMask, res);
memmsg(" Before reshape ");
write_ascii_matrix("mat1", res);
write_ascii_matrix("mat2", MatrixData);
}
else{
Matrix data = unifrnd(xdim.value(),ydim.value());
outMsize("data", data);
tic(); calccorr(data,econ.value()); toc();
data = unifrnd(10,100);
outMsize("data", data);
tic(); calccorr(data,econ.value()); toc();
data = unifrnd(100,1000);
outMsize("data", data);
tic(); calccorr(data,econ.value()); toc();
data = unifrnd(100,10000);
outMsize("data", data);
tic(); calccorr(data,econ.value()); toc();
data = unifrnd(300,200000);
outMsize("data", data);
tic(); calccorr(data,econ.value()); toc();
data = unifrnd(500,20000);
outMsize("data", data);
tic(); calccorr(data,econ.value()); toc();
data = unifrnd(500,200000);
outMsize("data", data);
tic(); calccorr(data,econ.value()); toc();
}
return 0;
}
////////////////////////////////////////////////////////////////////////////
int main(int argc,char *argv[]){
Tracer tr("main");
OptionParser options(title, examples);
try{
// must include all wanted options here (the order determines how
// the help message is printed)
options.add(fnin);
options.add(fnmask);
options.add(help);
options.add(xdim);
options.add(ydim);
options.add(econ);
options.parse_command_line(argc, argv);
// line below stops the program if the help was requested or
// a compulsory option was not set
if ( (help.value()) || (!options.check_compulsory_arguments(true)) ){
options.usage();
exit(EXIT_FAILURE);
}else{
// Call the local functions
return do_work(argc,argv);
}
}catch(X_OptionError& e) {
options.usage();
cerr << endl << e.what() << endl;
exit(EXIT_FAILURE);
}catch(std::exception &e) {
cerr << e.what() << endl;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment