From a0fa7b44df1ebad38213180adafb5c839c7c768e Mon Sep 17 00:00:00 2001
From: Tim Behrens <behrens@fmrib.ox.ac.uk>
Date: Thu, 14 Jul 2005 13:36:33 +0000
Subject: [PATCH] *** empty log message ***

---
 fibre.h          | 48 +++++++++++++++++++++++-------------------------
 xfibresoptions.h |  5 +++++
 2 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/fibre.h b/fibre.h
index f01e99b..0df75be 100644
--- a/fibre.h
+++ b/fibre.h
@@ -11,10 +11,12 @@
 #include "libprob.h"
 #include <cmath>
 #include "miscmaths/miscprob.h"
+#include "xfibresoptions.h"
 
 using namespace std; 
 using namespace NEWMAT;
 using namespace MISCMATHS;
+using namespace Xfibres;
 
 namespace FIBRE{
   
@@ -56,11 +58,12 @@ namespace FIBRE{
     const ColumnVector& m_alpha;
     const ColumnVector& m_beta;
     const Matrix& m_bvals;
-  public:
+    xfibresOptions& opts;
+ public:
     //constructors::
     Fibre( const ColumnVector& alpha, const ColumnVector& beta, 
 	   const Matrix& bvals,const float& d):
-      m_d(d), m_alpha(alpha), m_beta(beta), m_bvals(bvals){
+      m_d(d), m_alpha(alpha), m_beta(beta), m_bvals(bvals),opts(xfibresOptions::getInstance()){
 
 	m_th=M_PI/2;
 	m_th_old=m_th;
@@ -106,7 +109,7 @@ namespace FIBRE{
 	  const float& th, const float& ph, const float& f, 
 	  const float& lam, const bool lam_jump=true) : 
       m_th(th), m_ph(ph), m_f(f), m_lam(lam),m_lam_jump(lam_jump), m_d(d),  
-      m_alpha(alpha), m_beta(beta), m_bvals(bvals)
+      m_alpha(alpha), m_beta(beta), m_bvals(bvals),opts(xfibresOptions::getInstance())
      {
       m_th_old=m_th;
       m_ph_old=m_ph;
@@ -144,7 +147,7 @@ namespace FIBRE{
      
     }
     Fibre(const Fibre& rhs): 
-      m_d(rhs.m_d), m_alpha(rhs.m_alpha), m_beta(rhs.m_beta), m_bvals(rhs.m_bvals){
+      m_d(rhs.m_d), m_alpha(rhs.m_alpha), m_beta(rhs.m_beta), m_bvals(rhs.m_bvals),opts(xfibresOptions::getInstance()){
       *this=rhs;
     }
 
@@ -218,13 +221,8 @@ namespace FIBRE{
       if (m_f<0 | m_f>=1 )
 	return true;
       else{
-	//m_f_prior=-(log(m_lam) + (m_lam-1)*log(1-m_f)); //THIS IS THE BETA DISTRIBUTION UNMARGINALISED
-	if(m_lam_jump)
-	  m_f_prior=log(1-m_f) + 2*log(fabs(log(1-m_f))); //-log(1/(1-f)*1/log(1-f)^2) which is the marginalised energy
-	else
-	  m_f_prior=0;
-	
-	m_f_prior=3*m_f_prior;
+	m_f_prior=-(log(m_lam) + (m_lam-1)*log(1-m_f));
+	m_f_prior=opts.fudge.value()*m_f_prior;
 	return false;
       }
     }
@@ -698,20 +696,20 @@ namespace FIBRE{
 	  }
 	  
 	  
-	  // if(!m_fibres[f].propose_lam()){ //not jumping lam because of marginalised reference prior
-	  // 	    compute_prior();
-	  // 	    compute_energy();
-	  // 	    if(test_energy()){
-	  // 	      m_fibres[f].accept_lam();
-	  // 	    }
-	  // 	    else{
-	  // 	      m_fibres[f].reject_lam();
-	  // 	      restore_energy_no_lik();
-	  // 	    }
-	  // 	  }
-	  // 	  else{
-	  // 	    m_fibres[f].reject_lam();
-	  // 	  }
+	  if(!m_fibres[f].propose_lam()){
+	    compute_prior();
+	    compute_energy();
+	    if(test_energy()){
+	      m_fibres[f].accept_lam();
+	    }
+	    else{
+	      m_fibres[f].reject_lam();
+	      restore_energy_no_lik();
+	    }
+	  }
+	  else{
+	    m_fibres[f].reject_lam();
+	  }
       
  
       }
diff --git a/xfibresoptions.h b/xfibresoptions.h
index c3b51ce..09d9234 100644
--- a/xfibresoptions.h
+++ b/xfibresoptions.h
@@ -36,6 +36,7 @@ class xfibresOptions {
   Option<string> bvecsfile;
   Option<string> bvalsfile;
   Option<int> nfibres;
+  Option<float> fudge;
   Option<int> njumps;
   Option<int> nburn;
   Option<int> sampleevery;
@@ -87,6 +88,9 @@ class xfibresOptions {
   nfibres(string("--nf,--nfibres"),1,
 	 string("Maximum nukmber of fibres to fit in each voxel (default 1)"),
 	 false,requires_argument),
+  fudge(string("fudge"),1,
+	 string("ARD fudge factor"),
+	 false,requires_argument),
   njumps(string("--nj,--njumps"),5000,
 	 string("Num of jumps to be made by MCMC (default is 5000)"),
 	 false,requires_argument),
@@ -115,6 +119,7 @@ class xfibresOptions {
        options.add(bvecsfile);
        options.add(bvalsfile);
        options.add(nfibres);
+       options.add(fudge);
        options.add(njumps);
        options.add(nburn);
        options.add(sampleevery);
-- 
GitLab