From 49dbeb038dc686b2db2bfd9f861dac3881dd02f7 Mon Sep 17 00:00:00 2001
From: Christian Beckmann <c.beckmann@donders.ru.nl>
Date: Wed, 14 Feb 2007 13:42:34 +0000
Subject: [PATCH] *** empty log message ***

---
 miscmaths.cc | 27 ++++++++++++++++++++++++++-
 miscmaths.h  | 15 +++++++++++----
 2 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/miscmaths.cc b/miscmaths.cc
index f38dc19..8b39669 100644
--- a/miscmaths.cc
+++ b/miscmaths.cc
@@ -1177,6 +1177,31 @@ float percentile(const ColumnVector& in, float p)
   return interp1(xx,yy,p);
 }
 
+ReturnMatrix quantile(const Matrix& in, int which)
+{
+  int num = in.Ncols();
+  Matrix res(1,num);
+  for (int ctr=1; ctr<=num; ctr++){
+    ColumnVector tmp = in.Column(ctr);
+    res(1,ctr) = quantile(tmp,which);
+  }
+  res.Release();
+  return res;
+}
+
+ReturnMatrix  percentile(const Matrix& in, float p)
+{
+  int num = in.Ncols();
+  Matrix res(1,num);
+  for (int ctr=1; ctr<=num; ctr++){
+    ColumnVector tmp = in.Column(ctr);
+    res(1,ctr) = percentile(tmp,p);
+  }
+  res.Release();
+  return res;
+}
+
+
 
 void cart2sph(const ColumnVector& dir, float& th, float& ph)
 {
@@ -1239,7 +1264,7 @@ void cart2sph(const vector<ColumnVector>& dir,ColumnVector& th,ColumnVector& ph)
     th.ReSize(dir.size());
   }
 
-  if(ph.Nrows()!=dir.size()){
+  if(ph.Nrows()!=(int)dir.size()){
     ph.ReSize(dir.size());
   }
   //double _2pi=2*M_PI;
diff --git a/miscmaths.h b/miscmaths.h
index 9a5ac2e..1df1bcb 100644
--- a/miscmaths.h
+++ b/miscmaths.h
@@ -1,4 +1,4 @@
-/*  miscmaths.h
+*  miscmaths.h
 
     Mark Jenkinson & Mark Woolrich & Christian Beckmann & Tim Behrens, FMRIB Image Analysis Group
 
@@ -50,6 +50,7 @@ namespace MISCMATHS {
   ReturnMatrix read_ascii_matrix(const string& filename);
   ReturnMatrix read_vest(string p_fname);
   ReturnMatrix read_binary_matrix(const string& filename);
+  ReturnMatrix read_matrix(const string& filename);
 
   int write_ascii_matrix(const Matrix& mat, const string& filename, 
 			 int precision=-1);
@@ -162,13 +163,19 @@ namespace MISCMATHS {
 			     const Matrix& qform_mat, int qform_code,
 			     int& icode, int& jcode, int& kcode);
     
-  
+  // 1D lookup table with linear interpolation
+  float interp1(const ColumnVector& x, const ColumnVector& y, float xi);
+
   float quantile(const ColumnVector& in, int which);
   float percentile(const ColumnVector& in, float p);
-  float interp1(const ColumnVector& x, const ColumnVector& y, float xi);
-  inline float median(const ColumnVector& x){ return quantile(x,2);}
+  inline float median(const ColumnVector& in){ return quantile(in,2);}
   inline float iqr(const ColumnVector &in) { return quantile(in,3) - quantile(in,1); }
 
+  ReturnMatrix quantile(const Matrix& in, int which);
+  ReturnMatrix percentile(const Matrix& in, float p);
+  inline ReturnMatrix median(const Matrix& in){ return quantile(in,2);}
+  inline ReturnMatrix iqr(const Matrix& in){ Matrix res = quantile(in,3) - quantile(in,1); res.Release(); return res;}
+
   void cart2sph(const ColumnVector& dir, float& th, float& ph);// cartesian to sperical polar coordinates
   void cart2sph(const Matrix& dir,ColumnVector& th,ColumnVector& ph);//ditto
   void cart2sph(const vector<ColumnVector>& dir,ColumnVector& th,ColumnVector& ph);// same but in a vector
-- 
GitLab