about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPeter Carbonetto2017-07-07 09:50:23 -0500
committerPeter Carbonetto2017-07-07 09:50:23 -0500
commitff19b2bd8f3f5c708c3156e9adf26fa94b4d4ea1 (patch)
tree6099e0b0c7d59429ebc86e46ace102ebdf975675 /src
parent3ec600364f201f36f4339261b9399681aa058323 (diff)
downloadpangemma-ff19b2bd8f3f5c708c3156e9adf26fa94b4d4ea1.tar.gz
Removed FORCE_FLOAT from mvlmm.cpp.
Diffstat (limited to 'src')
-rw-r--r--src/mvlmm.cpp840
1 files changed, 411 insertions, 429 deletions
diff --git a/src/mvlmm.cpp b/src/mvlmm.cpp
index 0049972..1c65dd1 100644
--- a/src/mvlmm.cpp
+++ b/src/mvlmm.cpp
@@ -1,6 +1,6 @@
 /*
  Genome-wide Efficient Mixed Model Association (GEMMA)
- Copyright (C) 2011  Xiang Zhou
+ Copyright (C) 2011-2017, Xiang Zhou
 
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -13,10 +13,8 @@
  GNU General Public License for more details.
 
  You should have received a copy of the GNU General Public License
- along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
 
 #include <iostream>
 #include <fstream>
@@ -44,25 +42,13 @@
 #include "lapack.h"
 #include "eigenlib.h"
 #include "gzstream.h"
-
-#ifdef FORCE_FLOAT
-#include "lmm_float.h"
-#include "mvlmm_float.h"
-#else
 #include "lmm.h"
 #include "mvlmm.h"
-#endif
-
-
 
 using namespace std;
 
-
-//in this file, X, Y are already transformed (i.e. UtX and UtY)
-
-
-void MVLMM::CopyFromParam (PARAM &cPar)
-{
+// In this file, X, Y are already transformed (i.e. UtX and UtY).
+void MVLMM::CopyFromParam (PARAM &cPar) {
 	a_mode=cPar.a_mode;
 	d_pace=cPar.d_pace;
 
@@ -105,9 +91,7 @@ void MVLMM::CopyFromParam (PARAM &cPar)
 	return;
 }
 
-
-void MVLMM::CopyToParam (PARAM &cPar)
-{
+void MVLMM::CopyToParam (PARAM &cPar) {
 	cPar.time_UtX=time_UtX;
 	cPar.time_opt=time_opt;
 
@@ -131,17 +115,19 @@ void MVLMM::CopyToParam (PARAM &cPar)
 	return;
 }
 
-
-void MVLMM::WriteFiles ()
-{
+void MVLMM::WriteFiles () {
 	string file_str;
 	file_str=path_out+"/"+file_out;
 	file_str+=".assoc.txt";
 
 	ofstream outfile (file_str.c_str(), ofstream::out);
-	if (!outfile) {cout<<"error writing file: "<<file_str.c_str()<<endl; return;}
+	if (!outfile) {
+	  cout<<"error writing file: "<<file_str.c_str()<<endl; 
+	  return;
+	}
 
-	outfile<<"chr"<<"\t"<<"rs"<<"\t"<<"ps"<<"\t"<<"n_miss"<<"\t"<<"allele1"<<"\t"<<"allele0"<<"\t"<<"af"<<"\t";
+	outfile<<"chr"<<"\t"<<"rs"<<"\t"<<"ps"<<"\t"<<"n_miss"<<"\t"
+	       <<"allele1"<<"\t"<<"allele0"<<"\t"<<"af"<<"\t";
 
 	for (size_t i=0; i<n_ph; i++) {
 		outfile<<"beta_"<<i+1<<"\t";
@@ -167,7 +153,10 @@ void MVLMM::WriteFiles ()
 	for (size_t i=0; i<snpInfo.size(); ++i) {
 		if (indicator_snp[i]==0) {continue;}
 
-		outfile<<snpInfo[i].chr<<"\t"<<snpInfo[i].rs_number<<"\t"<<snpInfo[i].base_position<<"\t"<<snpInfo[i].n_miss<<"\t"<<snpInfo[i].a_minor<<"\t"<<snpInfo[i].a_major<<"\t"<<fixed<<setprecision(3)<<snpInfo[i].maf<<"\t";
+		outfile<<snpInfo[i].chr<<"\t"<<snpInfo[i].rs_number<<"\t"
+		       <<snpInfo[i].base_position<<"\t"<<snpInfo[i].n_miss<<
+		  "\t"<<snpInfo[i].a_minor<<"\t"<<snpInfo[i].a_major<<"\t"<<
+		  fixed<<setprecision(3)<<snpInfo[i].maf<<"\t";
 
 		outfile<<scientific<<setprecision(6);
 
@@ -190,34 +179,26 @@ void MVLMM::WriteFiles ()
 		} else if (a_mode==3) {
 			outfile<<sumStat[t].p_score<<endl;
 		} else if (a_mode==4) {
-			outfile<<sumStat[t].p_wald <<"\t"<<sumStat[t].p_lrt<<"\t"<<sumStat[t].p_score<<endl;
+			outfile<<sumStat[t].p_wald <<"\t"<<sumStat[t].p_lrt<<
+			  "\t"<<sumStat[t].p_score<<endl;
 		} else {}
 
 		t++;
 	}
 
-
 	outfile.close();
 	outfile.clear();
 	return;
 }
 
-
-
-
-//below are functions for EM algorithm
-
-
-
-
-
-
-double EigenProc (const gsl_matrix *V_g, const gsl_matrix *V_e, gsl_vector *D_l, gsl_matrix *UltVeh, gsl_matrix *UltVehi)
-{
+// Below are functions for EM algorithm.
+double EigenProc (const gsl_matrix *V_g, const gsl_matrix *V_e, 
+		  gsl_vector *D_l, gsl_matrix *UltVeh, 
+		  gsl_matrix *UltVehi) {
 	size_t d_size=V_g->size1;
 	double d, logdet_Ve=0.0;
 
-	//eigen decomposition of V_e
+	// Eigen decomposition of V_e.
 	gsl_matrix *Lambda=gsl_matrix_alloc (d_size, d_size);
 	gsl_matrix *V_e_temp=gsl_matrix_alloc (d_size, d_size);
 	gsl_matrix *V_e_h=gsl_matrix_alloc (d_size, d_size);
@@ -228,7 +209,7 @@ double EigenProc (const gsl_matrix *V_g, const gsl_matrix *V_e, gsl_vector *D_l,
 	gsl_matrix_memcpy(V_e_temp, V_e);
 	EigenDecomp(V_e_temp, U_l, D_l, 0);
 
-	//calculate V_e_h and V_e_hi
+	// Calculate V_e_h and V_e_hi.
 	gsl_matrix_set_zero(V_e_h);
 	gsl_matrix_set_zero(V_e_hi);
 	for (size_t i=0; i<d_size; i++) {
@@ -243,57 +224,29 @@ double EigenProc (const gsl_matrix *V_g, const gsl_matrix *V_e, gsl_vector *D_l,
 		gsl_blas_dsyr (CblasUpper, d, &U_col.vector, V_e_hi);
 	}
 
-	//copy the upper part to lower part
+	// Copy the upper part to lower part.
 	for (size_t i=0; i<d_size; i++) {
 		for (size_t j=0; j<i; j++) {
-			gsl_matrix_set (V_e_h, i, j, gsl_matrix_get(V_e_h, j, i));
-			gsl_matrix_set (V_e_hi, i, j, gsl_matrix_get(V_e_hi, j, i));
+		  gsl_matrix_set (V_e_h, i, j, gsl_matrix_get(V_e_h, j, i));
+		  gsl_matrix_set (V_e_hi, i, j, gsl_matrix_get(V_e_hi, j, i));
 		}
 	}
 
-	//calculate Lambda=V_ehi V_g V_ehi
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, V_g, V_e_hi, 0.0, VgVehi);
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, V_e_hi, VgVehi, 0.0, Lambda);
+	// Calculate Lambda=V_ehi V_g V_ehi.
+	gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,V_g,V_e_hi,0.0,VgVehi);
+	gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,V_e_hi,VgVehi,0.0,Lambda);
 
-	//eigen decomposition of Lambda
+	// Eigen decomposition of Lambda.
 	EigenDecomp(Lambda, U_l, D_l, 0);
 
 	for (size_t i=0; i<d_size; i++) {
-		d=gsl_vector_get (D_l, i);
-		if (d<0) {gsl_vector_set (D_l, i, 0);}
+	  d=gsl_vector_get (D_l, i);
+	  if (d<0) {gsl_vector_set (D_l, i, 0);}
 	}
 
-	//calculate UltVeh and UltVehi
-	gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, U_l, V_e_h, 0.0, UltVeh);
-	gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, U_l, V_e_hi, 0.0, UltVehi);
-	/*
-	cout<<"Vg: "<<endl;
-	for (size_t i=0; i<d_size; i++) {
-		for (size_t j=0; j<d_size; j++) {
-			cout<<gsl_matrix_get (V_g, i, j)<<" ";
-		}
-		cout<<endl;
-	}
-	cout<<"Ve: "<<endl;
-	for (size_t i=0; i<d_size; i++) {
-		for (size_t j=0; j<d_size; j++) {
-			cout<<gsl_matrix_get (V_e, i, j)<<" ";
-		}
-		cout<<endl;
-	}
-
-	cout<<"Dl: "<<endl;
-	for (size_t i=0; i<d_size; i++) {
-		cout<<gsl_vector_get (D_l, i)<<endl;
-	}
-	cout<<"UltVeh: "<<endl;
-	for (size_t i=0; i<d_size; i++) {
-		for (size_t j=0; j<d_size; j++) {
-			cout<<gsl_matrix_get (UltVeh, i, j)<<" ";
-		}
-		cout<<endl;
-	}
-	*/
+	// Calculate UltVeh and UltVehi.
+	gsl_blas_dgemm(CblasTrans,CblasNoTrans,1.0,U_l,V_e_h,0.0,UltVeh);
+	gsl_blas_dgemm(CblasTrans,CblasNoTrans,1.0,U_l,V_e_hi,0.0,UltVehi);
 
 	//free memory
 	gsl_matrix_free (Lambda);
@@ -306,9 +259,9 @@ double EigenProc (const gsl_matrix *V_g, const gsl_matrix *V_e, gsl_vector *D_l,
 	return logdet_Ve;
 }
 
-//Qi=(\sum_{k=1}^n x_kx_k^T\otimes(delta_k*Dl+I)^{-1} )^{-1}
-double CalcQi (const gsl_vector *eval, const gsl_vector *D_l, const gsl_matrix *X, gsl_matrix *Qi)
-{
+//Qi=(\sum_{k=1}^n x_kx_k^T\otimes(delta_k*Dl+I)^{-1} )^{-1}.
+double CalcQi (const gsl_vector *eval, const gsl_vector *D_l, 
+	       const gsl_matrix *X, gsl_matrix *Qi) {
 	size_t n_size=eval->size, d_size=D_l->size, dc_size=Qi->size1;
 	size_t c_size=dc_size/d_size;
 
@@ -323,14 +276,14 @@ double CalcQi (const gsl_vector *eval, const gsl_vector *D_l, const gsl_matrix *
 				dl=gsl_vector_get(D_l, l);
 
 				if (j<i) {
-					d=gsl_matrix_get (Q, j*d_size+l, i*d_size+l);
+				  d=gsl_matrix_get (Q, j*d_size+l, i*d_size+l);
 				} else {
 					d=0.0;
 					for (size_t k=0; k<n_size; k++) {
-						d1=gsl_matrix_get(X, i, k);
-						d2=gsl_matrix_get(X, j, k);
-						delta=gsl_vector_get(eval, k);
-						d+=d1*d2/(dl*delta+1.0);
+					  d1=gsl_matrix_get(X, i, k);
+					  d2=gsl_matrix_get(X, j, k);
+					  delta=gsl_vector_get(eval, k);
+					  d+=d1*d2/(dl*delta+1.0);
 					}
 				}
 
@@ -339,7 +292,7 @@ double CalcQi (const gsl_vector *eval, const gsl_vector *D_l, const gsl_matrix *
 		}
 	}
 
-	//calculate LU decomposition of Q, and invert Q and calculate |Q|
+	// Calculate LU decomposition of Q, and invert Q and calculate |Q|.
 	int sig;
 	gsl_permutation * pmt=gsl_permutation_alloc (dc_size);
 	LUDecomp (Q, pmt, &sig);
@@ -353,9 +306,10 @@ double CalcQi (const gsl_vector *eval, const gsl_vector *D_l, const gsl_matrix *
 	return logdet_Q;
 }
 
-//xHiy=\sum_{k=1}^n x_k\otimes ((delta_k*Dl+I)^{-1}Ul^TVe^{-1/2}y
-void CalcXHiY(const gsl_vector *eval, const gsl_vector *D_l, const gsl_matrix *X, const gsl_matrix *UltVehiY, gsl_vector *xHiy)
-{
+// xHiy=\sum_{k=1}^n x_k\otimes ((delta_k*Dl+I)^{-1}Ul^TVe^{-1/2}y.
+void CalcXHiY(const gsl_vector *eval, const gsl_vector *D_l, 
+	      const gsl_matrix *X, const gsl_matrix *UltVehiY, 
+	      gsl_vector *xHiy) {
 	size_t n_size=eval->size, c_size=X->size1, d_size=D_l->size;
 
 	gsl_vector_set_zero (xHiy);
@@ -374,20 +328,15 @@ void CalcXHiY(const gsl_vector *eval, const gsl_vector *D_l, const gsl_matrix *X
 			gsl_vector_set(xHiy, j*d_size+i, d);
 		}
 	}
-	/*
-	cout<<"xHiy: "<<endl;
-	for (size_t i=0; i<(d_size*c_size); i++) {
-		cout<<gsl_vector_get(xHiy, i)<<endl;
-	}
-	 */
+
 	return;
 }
 
 
-//OmegaU=D_l/(delta Dl+I)^{-1}
-//OmegaE=delta D_l/(delta Dl+I)^{-1}
-void CalcOmega (const gsl_vector *eval, const gsl_vector *D_l, gsl_matrix *OmegaU, gsl_matrix *OmegaE)
-{
+// OmegaU=D_l/(delta Dl+I)^{-1}
+// OmegaE=delta D_l/(delta Dl+I)^{-1}
+void CalcOmega (const gsl_vector *eval, const gsl_vector *D_l, 
+gsl_matrix *OmegaU, gsl_matrix *OmegaE) {
 	size_t n_size=eval->size, d_size=D_l->size;
 	double delta, dl, d_u, d_e;
 
@@ -407,9 +356,8 @@ void CalcOmega (const gsl_vector *eval, const gsl_vector *D_l, gsl_matrix *Omega
 	return;
 }
 
-
-void UpdateU (const gsl_matrix *OmegaE, const gsl_matrix *UltVehiY, const gsl_matrix *UltVehiBX, gsl_matrix *UltVehiU)
-{
+void UpdateU (const gsl_matrix *OmegaE, const gsl_matrix *UltVehiY, 
+	      const gsl_matrix *UltVehiBX, gsl_matrix *UltVehiU) {
 	gsl_matrix_memcpy (UltVehiU, UltVehiY);
 	gsl_matrix_sub (UltVehiU, UltVehiBX);
 
@@ -417,9 +365,8 @@ void UpdateU (const gsl_matrix *OmegaE, const gsl_matrix *UltVehiY, const gsl_ma
 	return;
 }
 
-
-void UpdateE (const gsl_matrix *UltVehiY, const gsl_matrix *UltVehiBX, const gsl_matrix *UltVehiU, gsl_matrix *UltVehiE)
-{
+void UpdateE (const gsl_matrix *UltVehiY, const gsl_matrix *UltVehiBX, 
+	      const gsl_matrix *UltVehiU, gsl_matrix *UltVehiE) {
 	gsl_matrix_memcpy (UltVehiE, UltVehiY);
 	gsl_matrix_sub (UltVehiE, UltVehiBX);
 	gsl_matrix_sub (UltVehiE, UltVehiU);
@@ -427,10 +374,9 @@ void UpdateE (const gsl_matrix *UltVehiY, const gsl_matrix *UltVehiBX, const gsl
 	return;
 }
 
-
-
-void UpdateL_B (const gsl_matrix *X, const gsl_matrix *XXti, const gsl_matrix *UltVehiY, const gsl_matrix *UltVehiU, gsl_matrix *UltVehiBX, gsl_matrix *UltVehiB)
-{
+void UpdateL_B (const gsl_matrix *X, const gsl_matrix *XXti, 
+		const gsl_matrix *UltVehiY, const gsl_matrix *UltVehiU, 
+		gsl_matrix *UltVehiBX, gsl_matrix *UltVehiB) {
 	size_t c_size=X->size1, d_size=UltVehiY->size1;
 
 	gsl_matrix *YUX=gsl_matrix_alloc (d_size, c_size);
@@ -438,27 +384,29 @@ void UpdateL_B (const gsl_matrix *X, const gsl_matrix *XXti, const gsl_matrix *U
 	gsl_matrix_memcpy (UltVehiBX, UltVehiY);
 	gsl_matrix_sub (UltVehiBX, UltVehiU);
 
-	gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, UltVehiBX, X, 0.0, YUX);
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, YUX, XXti, 0.0, UltVehiB);
+	gsl_blas_dgemm(CblasNoTrans,CblasTrans,1.0,UltVehiBX,X,0.0,YUX);
+	gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,YUX,XXti,0.0,UltVehiB);
 
 	gsl_matrix_free(YUX);
 
 	return;
 }
 
-void UpdateRL_B (const gsl_vector *xHiy, const gsl_matrix *Qi, gsl_matrix *UltVehiB)
-{
-	size_t d_size=UltVehiB->size1, c_size=UltVehiB->size2, dc_size=Qi->size1;
+void UpdateRL_B (const gsl_vector *xHiy, const gsl_matrix *Qi, 
+		 gsl_matrix *UltVehiB) {
+	size_t d_size=UltVehiB->size1, c_size=UltVehiB->size2, 
+	  dc_size=Qi->size1;
 
 	gsl_vector *b=gsl_vector_alloc (dc_size);
 
-	//calculate b=Qiv
+	// Calculate b=Qiv.
 	gsl_blas_dgemv(CblasNoTrans, 1.0, Qi, xHiy, 0.0, b);
 
-	//copy b to UltVehiB
+	// Copy b to UltVehiB.
 	for (size_t i=0; i<c_size; i++) {
 		gsl_vector_view UltVehiB_col=gsl_matrix_column (UltVehiB, i);
-		gsl_vector_const_view b_subcol=gsl_vector_const_subvector (b, i*d_size, d_size);
+		gsl_vector_const_view b_subcol=
+		  gsl_vector_const_subvector (b, i*d_size, d_size);
 		gsl_vector_memcpy (&UltVehiB_col.vector, &b_subcol.vector);
 	}
 
@@ -467,10 +415,9 @@ void UpdateRL_B (const gsl_vector *xHiy, const gsl_matrix *Qi, gsl_matrix *UltVe
 	return;
 }
 
-
-
-void UpdateV (const gsl_vector *eval, const gsl_matrix *U, const gsl_matrix *E, const gsl_matrix *Sigma_uu, const gsl_matrix *Sigma_ee, gsl_matrix *V_g, gsl_matrix *V_e)
-{
+void UpdateV (const gsl_vector *eval, const gsl_matrix *U, 
+	      const gsl_matrix *E, const gsl_matrix *Sigma_uu, 
+	      const gsl_matrix *Sigma_ee, gsl_matrix *V_g, gsl_matrix *V_e) {
 	size_t n_size=eval->size, d_size=U->size1;
 
 	gsl_matrix_set_zero (V_g);
@@ -478,7 +425,7 @@ void UpdateV (const gsl_vector *eval, const gsl_matrix *U, const gsl_matrix *E,
 
 	double delta;
 
-	//calculate the first part: UD^{-1}U^T and EE^T
+	// Calculate the first part: UD^{-1}U^T and EE^T.
 	for (size_t k=0; k<n_size; k++) {
 		delta=gsl_vector_get (eval, k);
 		if (delta==0) {continue;}
@@ -489,7 +436,7 @@ void UpdateV (const gsl_vector *eval, const gsl_matrix *U, const gsl_matrix *E,
 
 	gsl_blas_dsyrk(CblasUpper, CblasNoTrans, 1.0, E, 0.0, V_e);
 
-	//copy the upper part to lower part
+	// Copy the upper part to lower part.
 	for (size_t i=0; i<d_size; i++) {
 		for (size_t j=0; j<i; j++) {
 			gsl_matrix_set (V_g, i, j, gsl_matrix_get(V_g, j, i));
@@ -497,42 +444,50 @@ void UpdateV (const gsl_vector *eval, const gsl_matrix *U, const gsl_matrix *E,
 		}
 	}
 
-	//add Sigma
+	// Add Sigma.
 	gsl_matrix_add (V_g, Sigma_uu);
 	gsl_matrix_add (V_e, Sigma_ee);
 
-	//scale by 1/n
+	// Scale by 1/n.
 	gsl_matrix_scale (V_g, 1.0/(double)n_size);
 	gsl_matrix_scale (V_e, 1.0/(double)n_size);
 
 	return;
 }
 
+void CalcSigma (const char func_name, const gsl_vector *eval, 
+		const gsl_vector *D_l, const gsl_matrix *X, 
+		const gsl_matrix *OmegaU, const gsl_matrix *OmegaE, 
+		const gsl_matrix *UltVeh, const gsl_matrix *Qi, 
+		gsl_matrix *Sigma_uu, gsl_matrix *Sigma_ee) {
+	if (func_name!='R' && func_name!='L' && func_name!='r' && 
+	    func_name!='l') {
+	  cout<<"func_name only takes 'R' or 'L': 'R' for log-restricted "<<
+	    "likelihood, 'L' for log-likelihood."<<endl; 
+	  return;
+	}
 
-void CalcSigma (const char func_name, const gsl_vector *eval, const gsl_vector *D_l, const gsl_matrix *X, const gsl_matrix *OmegaU, const gsl_matrix *OmegaE, const gsl_matrix *UltVeh, const gsl_matrix *Qi, gsl_matrix *Sigma_uu, gsl_matrix *Sigma_ee)
-{
-	if (func_name!='R' && func_name!='L' && func_name!='r' && func_name!='l') {cout<<"func_name only takes 'R' or 'L': 'R' for log-restricted likelihood, 'L' for log-likelihood."<<endl; return;}
-
-	size_t n_size=eval->size, c_size=X->size1, d_size=D_l->size, dc_size=Qi->size1;
+	size_t n_size=eval->size, c_size=X->size1;
+	size_t d_size=D_l->size, dc_size=Qi->size1;
 
 	gsl_matrix_set_zero(Sigma_uu);
 	gsl_matrix_set_zero(Sigma_ee);
 
 	double delta, dl, x, d;
 
-	//calculate the first diagonal term
+	// Calculate the first diagonal term.
 	gsl_vector_view Suu_diag=gsl_matrix_diagonal (Sigma_uu);
 	gsl_vector_view See_diag=gsl_matrix_diagonal (Sigma_ee);
 
 	for (size_t k=0; k<n_size; k++) {
-		gsl_vector_const_view OmegaU_col=gsl_matrix_const_column (OmegaU, k);
-		gsl_vector_const_view OmegaE_col=gsl_matrix_const_column (OmegaE, k);
+	  gsl_vector_const_view OmegaU_col=gsl_matrix_const_column (OmegaU, k);
+	  gsl_vector_const_view OmegaE_col=gsl_matrix_const_column (OmegaE, k);
 
-		gsl_vector_add (&Suu_diag.vector, &OmegaU_col.vector);
-		gsl_vector_add (&See_diag.vector, &OmegaE_col.vector);
+	  gsl_vector_add (&Suu_diag.vector, &OmegaU_col.vector);
+	  gsl_vector_add (&See_diag.vector, &OmegaE_col.vector);
 	}
 
-	//calculate the second term for reml
+	// Calculate the second term for REML.
 	if (func_name=='R' || func_name=='r') {
 		gsl_matrix *M_u=gsl_matrix_alloc(dc_size, d_size);
 		gsl_matrix *M_e=gsl_matrix_alloc(dc_size, d_size);
@@ -542,52 +497,53 @@ void CalcSigma (const char func_name, const gsl_vector *eval, const gsl_vector *
 		gsl_matrix_set_zero(M_e);
 
 		for (size_t k=0; k<n_size; k++) {
-			delta=gsl_vector_get(eval, k);
-			//if (delta==0) {continue;}
-
-			for (size_t i=0; i<d_size; i++) {
-				dl=gsl_vector_get(D_l, i);
-				for (size_t j=0; j<c_size; j++) {
-					x=gsl_matrix_get(X, j, k);
-					d=x/(delta*dl+1.0);
-					gsl_matrix_set(M_e, j*d_size+i, i, d);
-					gsl_matrix_set(M_u, j*d_size+i, i, d*dl);
-				}
-			}
-			gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Qi, M_u, 0.0, QiM);
-			gsl_blas_dgemm(CblasTrans, CblasNoTrans, delta, M_u, QiM, 1.0, Sigma_uu);
-
-			gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Qi, M_e, 0.0, QiM);
-			gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, M_e, QiM, 1.0, Sigma_ee);
-		}
-
+		  delta=gsl_vector_get(eval, k);
+		  
+		  for (size_t i=0; i<d_size; i++) {
+		    dl=gsl_vector_get(D_l, i);
+		    for (size_t j=0; j<c_size; j++) {
+		      x=gsl_matrix_get(X, j, k);
+		      d=x/(delta*dl+1.0);
+		      gsl_matrix_set(M_e, j*d_size+i, i, d);
+		      gsl_matrix_set(M_u, j*d_size+i, i, d*dl);
+		    }
+		  }
+		  gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,Qi,M_u,0.0,QiM);
+		  gsl_blas_dgemm(CblasTrans,CblasNoTrans,delta,M_u,QiM,1.0,
+				 Sigma_uu);
+		  
+		  gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,Qi,M_e,0.0,QiM);
+		  gsl_blas_dgemm(CblasTrans,CblasNoTrans,1.0,M_e,QiM,1.0,
+				 Sigma_ee);
+		}
+		
 		gsl_matrix_free(M_u);
 		gsl_matrix_free(M_e);
 		gsl_matrix_free(QiM);
 	}
 
-	//multiply both sides by VehUl
+	// Multiply both sides by VehUl.
 	gsl_matrix *M=gsl_matrix_alloc (d_size, d_size);
 
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Sigma_uu, UltVeh, 0.0, M);
-	gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, M, 0.0, Sigma_uu);
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Sigma_ee, UltVeh, 0.0, M);
-	gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, M, 0.0, Sigma_ee);
+	gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,Sigma_uu,UltVeh,0.0,M);
+	gsl_blas_dgemm(CblasTrans,CblasNoTrans,1.0,UltVeh,M,0.0,Sigma_uu);
+	gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,1.0,Sigma_ee,UltVeh,0.0,M);
+	gsl_blas_dgemm(CblasTrans, CblasNoTrans,1.0,UltVeh,M,0.0,Sigma_ee);
 
 	gsl_matrix_free(M);
 	return;
 }
 
-
-//'R' for restricted likelihood and 'L' for likelihood
-//'R' update B and 'L' don't
-//only calculate -0.5*\sum_{k=1}^n|H_k|-0.5yPxy
-double MphCalcLogL (const gsl_vector *eval, const gsl_vector *xHiy, const gsl_vector *D_l, const gsl_matrix *UltVehiY, const gsl_matrix *Qi)
-{
+// 'R' for restricted likelihood and 'L' for likelihood.
+// 'R' update B and 'L' don't.
+// only calculate -0.5*\sum_{k=1}^n|H_k|-0.5yPxy.
+double MphCalcLogL (const gsl_vector *eval, const gsl_vector *xHiy, 
+		    const gsl_vector *D_l, const gsl_matrix *UltVehiY, 
+		    const gsl_matrix *Qi) {
 	size_t n_size=eval->size, d_size=D_l->size, dc_size=Qi->size1;
 	double logl=0.0, delta, dl, y, d;
 
-	//calculate yHiy+log|H_k|
+	// Calculate yHiy+log|H_k|.
 	for (size_t k=0; k<n_size; k++) {
 		delta=gsl_vector_get(eval, k);
 		for (size_t i=0; i<d_size; i++) {
@@ -599,7 +555,7 @@ double MphCalcLogL (const gsl_vector *eval, const gsl_vector *xHiy, const gsl_ve
 		}
 	}
 
-	//calculate the rest of yPxy
+	// Calculate the rest of yPxy.
 	gsl_vector *Qiv=gsl_vector_alloc(dc_size);
 
 	gsl_blas_dgemv(CblasNoTrans, 1.0, Qi, xHiy, 0.0, Qiv);
@@ -612,15 +568,22 @@ double MphCalcLogL (const gsl_vector *eval, const gsl_vector *xHiy, const gsl_ve
 	return -0.5*logl;
 }
 
-
-
-
-
-//Y is a dxn matrix, X is a cxn matrix, B is a dxc matrix, V_g is a dxd matrix, V_e is a dxd matrix, eval is a size n vector
-//'R' for restricted likelihood and 'L' for likelihood
-double MphEM (const char func_name, const size_t max_iter, const double max_prec, const gsl_vector *eval, const gsl_matrix *X, const gsl_matrix *Y, gsl_matrix *U_hat, gsl_matrix *E_hat, gsl_matrix *OmegaU, gsl_matrix *OmegaE, gsl_matrix *UltVehiY, gsl_matrix *UltVehiBX, gsl_matrix *UltVehiU, gsl_matrix *UltVehiE, gsl_matrix *V_g, gsl_matrix *V_e, gsl_matrix *B)
-{
-	if (func_name!='R' && func_name!='L' && func_name!='r' && func_name!='l') {cout<<"func_name only takes 'R' or 'L': 'R' for log-restricted likelihood, 'L' for log-likelihood."<<endl; return 0.0;}
+// Y is a dxn matrix, X is a cxn matrix, B is a dxc matrix, V_g is a
+// dxd matrix, V_e is a dxd matrix, eval is a size n vector
+//'R' for restricted likelihood and 'L' for likelihood.
+double MphEM (const char func_name, const size_t max_iter, 
+	      const double max_prec, const gsl_vector *eval, 
+	      const gsl_matrix *X, const gsl_matrix *Y, gsl_matrix *U_hat, 
+	      gsl_matrix *E_hat, gsl_matrix *OmegaU, gsl_matrix *OmegaE, 
+	      gsl_matrix *UltVehiY, gsl_matrix *UltVehiBX, 
+	      gsl_matrix *UltVehiU, gsl_matrix *UltVehiE, 
+	      gsl_matrix *V_g, gsl_matrix *V_e, gsl_matrix *B) {
+	if (func_name!='R' && func_name!='L' && 
+	    func_name!='r' && func_name!='l') {
+	  cout<<"func_name only takes 'R' or 'L': 'R' for log-restricted "<<
+	    "likelihood, 'L' for log-likelihood."<<endl; 
+	  return 0.0;
+	}
 
 	size_t n_size=eval->size, c_size=X->size1, d_size=Y->size1;
 	size_t dc_size=d_size*c_size;
@@ -637,94 +600,88 @@ double MphEM (const char func_name, const size_t max_iter, const double max_prec
 	gsl_vector *xHiy=gsl_vector_alloc (dc_size);
 	gsl_permutation * pmt=gsl_permutation_alloc (c_size);
 
-	double logl_const=0.0, logl_old=0.0, logl_new=0.0, logdet_Q, logdet_Ve;
+	double logl_const=0.0, logl_old=0.0, logl_new=0.0;
+	double logdet_Q, logdet_Ve;
 	int sig;
 
-	//calculate |XXt| and (XXt)^{-1}
+	// Calculate |XXt| and (XXt)^{-1}.
 	gsl_blas_dsyrk (CblasUpper, CblasNoTrans, 1.0, X, 0.0, XXt);
 	for (size_t i=0; i<c_size; ++i) {
 		for (size_t j=0; j<i; ++j) {
-			gsl_matrix_set (XXt, i, j, gsl_matrix_get (XXt, j, i));
+		  gsl_matrix_set (XXt, i, j, gsl_matrix_get (XXt, j, i));
 		}
 	}
 
 	LUDecomp (XXt, pmt, &sig);
 	LUInvert (XXt, pmt, XXti);
 
-	//calculate the constant for logl
+	// Calculate the constant for logl.
 	if (func_name=='R' || func_name=='r') {
-		logl_const=-0.5*(double)(n_size-c_size)*(double)d_size*log(2.0*M_PI)+0.5*(double)d_size*LULndet (XXt);
+	  logl_const=-0.5*(double)(n_size-c_size)*
+	    (double)d_size*log(2.0*M_PI)+0.5*(double)d_size*LULndet (XXt);
 	} else {
-		logl_const=-0.5*(double)n_size*(double)d_size*log(2.0*M_PI);
+	  logl_const=-0.5*(double)n_size*(double)d_size*log(2.0*M_PI);
 	}
 
-	//start EM
+	// Start EM.
 	for (size_t t=0; t<max_iter; t++) {
-		logdet_Ve=EigenProc (V_g, V_e, D_l, UltVeh, UltVehi);
-
-		logdet_Q=CalcQi (eval, D_l, X, Qi);
-
-		gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, Y, 0.0, UltVehiY);
-		CalcXHiY(eval, D_l, X, UltVehiY, xHiy);
-
-		//calculate log likelihood/restricted likelihood value, and terminate if change is small
-		logl_new=logl_const+MphCalcLogL (eval, xHiy, D_l, UltVehiY, Qi)-0.5*(double)n_size*logdet_Ve;
-		if (func_name=='R' || func_name=='r') {
-			logl_new+=-0.5*(logdet_Q-(double)c_size*logdet_Ve);
-		}
-		if (t!=0 && abs(logl_new-logl_old)<max_prec) {break;}
-		logl_old=logl_new;
-
-		/*
-		cout<<"iteration = "<<t<<" log-likelihood = "<<logl_old<<"\t"<<logl_new<<endl;
-
-		cout<<"Vg: "<<endl;
-		for (size_t i=0; i<d_size; i++) {
-			for (size_t j=0; j<d_size; j++) {
-				cout<<gsl_matrix_get(V_g, i, j)<<"\t";
-			}
-			cout<<endl;
-		}
-		cout<<"Ve: "<<endl;
-		for (size_t i=0; i<d_size; i++) {
-			for (size_t j=0; j<d_size; j++) {
-				cout<<gsl_matrix_get(V_e, i, j)<<"\t";
-			}
-			cout<<endl;
-		}
-		*/
-
-		CalcOmega (eval, D_l, OmegaU, OmegaE);
-
-		//Update UltVehiB, UltVehiU
-		if (func_name=='R' || func_name=='r') {
-			UpdateRL_B(xHiy, Qi, UltVehiB);
-			gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehiB, X, 0.0, UltVehiBX);
-		} else if (t==0) {
-			gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, B, 0.0, UltVehiB);
-			gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehiB, X, 0.0, UltVehiBX);
-		}
-
-		UpdateU(OmegaE, UltVehiY, UltVehiBX, UltVehiU);
-
-		if (func_name=='L' || func_name=='l') {
-			//UltVehiBX is destroyed here
-			UpdateL_B(X, XXti, UltVehiY, UltVehiU, UltVehiBX, UltVehiB);
-			gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehiB, X, 0.0, UltVehiBX);
-		}
-
-		UpdateE(UltVehiY, UltVehiBX, UltVehiU, UltVehiE);
-
-		//calculate U_hat, E_hat and B
-		gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, UltVehiU, 0.0, U_hat);
-		gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, UltVehiE, 0.0, E_hat);
-		gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, UltVehiB, 0.0, B);
-
-		//calculate Sigma_uu and Sigma_ee
-		CalcSigma (func_name, eval, D_l, X, OmegaU, OmegaE, UltVeh, Qi, Sigma_uu, Sigma_ee);
-
-		//update V_g and V_e
-		UpdateV (eval, U_hat, E_hat, Sigma_uu, Sigma_ee, V_g, V_e);
+	  logdet_Ve=EigenProc (V_g, V_e, D_l, UltVeh, UltVehi);
+	  
+	  logdet_Q=CalcQi (eval, D_l, X, Qi);
+	  
+	  gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, 
+			 Y, 0.0, UltVehiY);
+	  CalcXHiY(eval, D_l, X, UltVehiY, xHiy);
+
+	  // Calculate log likelihood/restricted likelihood value, and
+	  // terminate if change is small.
+	  logl_new=logl_const+MphCalcLogL (eval, xHiy, D_l, UltVehiY, Qi) - 
+	    0.5*(double)n_size*logdet_Ve;
+	  if (func_name=='R' || func_name=='r') {
+	    logl_new+=-0.5*(logdet_Q-(double)c_size*logdet_Ve);
+	  }
+	  if (t!=0 && abs(logl_new-logl_old)<max_prec) {break;}
+	  logl_old=logl_new;
+	  
+	  CalcOmega (eval, D_l, OmegaU, OmegaE);
+
+	  // Update UltVehiB, UltVehiU.
+	  if (func_name=='R' || func_name=='r') {
+	    UpdateRL_B(xHiy, Qi, UltVehiB);
+	    gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehiB, X, 
+			   0.0, UltVehiBX);
+	  } else if (t==0) {
+	    gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, B, 
+			   0.0, UltVehiB);
+	    gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehiB, X, 
+			   0.0, UltVehiBX);
+	  }
+	  
+	  UpdateU(OmegaE, UltVehiY, UltVehiBX, UltVehiU);
+	  
+	  if (func_name=='L' || func_name=='l') {
+
+	    // UltVehiBX is destroyed here.
+	    UpdateL_B(X, XXti, UltVehiY, UltVehiU, UltVehiBX, UltVehiB);
+	    gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehiB, X, 
+			   0.0, UltVehiBX);
+	  }
+	  
+	  UpdateE(UltVehiY, UltVehiBX, UltVehiU, UltVehiE);
+
+	  // Calculate U_hat, E_hat and B.
+	  gsl_blas_dgemm(CblasTrans,CblasNoTrans,1.0,UltVeh,UltVehiU,
+			 0.0,U_hat);
+	  gsl_blas_dgemm(CblasTrans,CblasNoTrans,1.0,UltVeh,UltVehiE,
+			 0.0,E_hat);
+	  gsl_blas_dgemm(CblasTrans,CblasNoTrans,1.0,UltVeh,UltVehiB,0.0,B);
+	  
+	  // Calculate Sigma_uu and Sigma_ee.
+	  CalcSigma (func_name, eval, D_l, X, OmegaU, OmegaE, UltVeh, 
+		     Qi, Sigma_uu, Sigma_ee);
+	  
+	  // Update V_g and V_e.
+	  UpdateV (eval, U_hat, E_hat, Sigma_uu, Sigma_ee, V_g, V_e);
 	}
 
 	gsl_matrix_free(XXt);
@@ -742,15 +699,11 @@ double MphEM (const char func_name, const size_t max_iter, const double max_prec
 	return logl_new;
 }
 
-
-
-
-
-
-
-//calculate p-value, beta (d by 1 vector) and V(beta)
-double MphCalcP (const gsl_vector *eval, const gsl_vector *x_vec, const gsl_matrix *W, const gsl_matrix *Y, const gsl_matrix *V_g, const gsl_matrix *V_e, gsl_matrix *UltVehiY, gsl_vector *beta, gsl_matrix *Vbeta)
-{
+// Calculate p-value, beta (d by 1 vector) and V(beta).
+double MphCalcP (const gsl_vector *eval, const gsl_vector *x_vec, 
+		 const gsl_matrix *W, const gsl_matrix *Y, 
+		 const gsl_matrix *V_g, const gsl_matrix *V_e, 
+		 gsl_matrix *UltVehiY, gsl_vector *beta, gsl_matrix *Vbeta) {
 	size_t n_size=eval->size, c_size=W->size1, d_size=V_g->size1;
 	size_t dc_size=d_size*c_size;
 	double delta, dl, d, d1, d2, dy, dx, dw, logdet_Ve, logdet_Q, p_value;
@@ -764,7 +717,6 @@ double MphCalcP (const gsl_vector *eval, const gsl_vector *x_vec, const gsl_matr
 
 	gsl_matrix *xPx=gsl_matrix_alloc (d_size, d_size);
 	gsl_vector *xPy=gsl_vector_alloc (d_size);
-	//gsl_vector *UltVehiy=gsl_vector_alloc (d_size);
 	gsl_vector *WHiy=gsl_vector_alloc (dc_size);
 
 	gsl_matrix_set_zero (xPx);
@@ -772,16 +724,17 @@ double MphCalcP (const gsl_vector *eval, const gsl_vector *x_vec, const gsl_matr
 	gsl_vector_set_zero (xPy);
 	gsl_vector_set_zero (WHiy);
 
-	//eigen decomposition and calculate log|Ve|
+	// Eigen decomposition and calculate log|Ve|.
 	logdet_Ve=EigenProc (V_g, V_e, D_l, UltVeh, UltVehi);
 
-	//calculate Qi and log|Q|
+	// Calculate Qi and log|Q|.
 	logdet_Q=CalcQi (eval, D_l, W, Qi);
 
-	//calculate UltVehiY
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, Y, 0.0, UltVehiY);
+	// Calculate UltVehiY.
+	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, Y, 
+		       0.0, UltVehiY);
 
-	//calculate WHix, WHiy, xHiy, xHix
+	// Calculate WHix, WHiy, xHiy, xHix.
 	for (size_t i=0; i<d_size; i++) {
 		dl=gsl_vector_get(D_l, i);
 
@@ -805,7 +758,6 @@ double MphCalcP (const gsl_vector *eval, const gsl_vector *x_vec, const gsl_matr
 				dw=gsl_matrix_get(W, j, k);
 				dy=gsl_matrix_get(UltVehiY, i, k);
 
-				//if (delta==0) {continue;}
 				d1+=dx*dw/(delta*dl+1.0);
 				d2+=dy*dw/(delta*dl+1.0);
 			}
@@ -818,24 +770,23 @@ double MphCalcP (const gsl_vector *eval, const gsl_vector *x_vec, const gsl_matr
 	gsl_blas_dgemm(CblasTrans, CblasNoTrans, -1.0, WHix, QiWHix, 1.0, xPx);
 	gsl_blas_dgemv(CblasTrans, -1.0, QiWHix, WHiy, 1.0, xPy);
 
-	//calculate V(beta) and beta
+	// Calculate V(beta) and beta.
 	int sig;
 	gsl_permutation * pmt=gsl_permutation_alloc (d_size);
 	LUDecomp (xPx, pmt, &sig);
 	LUSolve (xPx, pmt, xPy, D_l);
 	LUInvert (xPx, pmt, Vbeta);
 
-	//need to multiply UltVehi on both sides or one side
+	// Need to multiply UltVehi on both sides or one side.
 	gsl_blas_dgemv(CblasTrans, 1.0, UltVeh, D_l, 0.0, beta);
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Vbeta, UltVeh, 0.0, xPx);
+	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Vbeta, UltVeh, 
+		       0.0, xPx);
 	gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, xPx, 0.0, Vbeta);
 
-	//calculate test statistic and p value
+	// Calculate test statistic and p value.
 	gsl_blas_ddot(D_l, xPy, &d);
 
 	p_value=gsl_cdf_chisq_Q (d, (double)d_size);
-	//d*=(double)(n_size-c_size-d_size)/((double)d_size*(double)(n_size-c_size-1));
-	//p_value=gsl_cdf_fdist_Q (d, (double)d_size, (double)(n_size-c_size-d_size));
 
 	gsl_vector_free(D_l);
 	gsl_matrix_free(UltVeh);
@@ -853,11 +804,12 @@ double MphCalcP (const gsl_vector *eval, const gsl_vector *x_vec, const gsl_matr
 	return p_value;
 }
 
-
-
-//calculate B and its standard error (which is a matrix of the same dimension as B)
-void MphCalcBeta (const gsl_vector *eval, const gsl_matrix *W, const gsl_matrix *Y, const gsl_matrix *V_g, const gsl_matrix *V_e, gsl_matrix *UltVehiY, gsl_matrix *B, gsl_matrix *se_B)
-{
+// Calculate B and its standard error (which is a matrix of the same
+// dimension as B).
+void MphCalcBeta (const gsl_vector *eval, const gsl_matrix *W, 
+		  const gsl_matrix *Y, const gsl_matrix *V_g, 
+		  const gsl_matrix *V_e, gsl_matrix *UltVehiY, 
+		  gsl_matrix *B, gsl_matrix *se_B) {
 	size_t n_size=eval->size, c_size=W->size1, d_size=V_g->size1;
 	size_t dc_size=d_size*c_size;
 	double delta, dl, d, dy, dw, logdet_Ve, logdet_Q;
@@ -867,7 +819,6 @@ void MphCalcBeta (const gsl_vector *eval, const gsl_matrix *W, const gsl_matrix
 	gsl_matrix *UltVehi=gsl_matrix_alloc (d_size, d_size);
 	gsl_matrix *Qi=gsl_matrix_alloc (dc_size, dc_size);
 	gsl_matrix *Qi_temp=gsl_matrix_alloc (dc_size, dc_size);
-	//gsl_vector *UltVehiy=gsl_vector_alloc (d_size);
 	gsl_vector *WHiy=gsl_vector_alloc (dc_size);
 	gsl_vector *QiWHiy=gsl_vector_alloc (dc_size);
 	gsl_vector *beta=gsl_vector_alloc (dc_size);
@@ -875,16 +826,17 @@ void MphCalcBeta (const gsl_vector *eval, const gsl_matrix *W, const gsl_matrix
 
 	gsl_vector_set_zero (WHiy);
 
-	//eigen decomposition and calculate log|Ve|
+	// Eigen decomposition and calculate log|Ve|.
 	logdet_Ve=EigenProc (V_g, V_e, D_l, UltVeh, UltVehi);
 
-	//calculate Qi and log|Q|
+	// Calculate Qi and log|Q|.
 	logdet_Q=CalcQi (eval, D_l, W, Qi);
 
-	//calculate UltVehiY
-	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, Y, 0.0, UltVehiY);
+	// Calculate UltVehiY.
+	gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, UltVehi, Y, 
+		       0.0, UltVehiY);
 
-	//calculate WHiy
+	// Calculate WHiy.
 	for (size_t i=0; i<d_size; i++) {
 		dl=gsl_vector_get(D_l, i);
 
@@ -895,7 +847,6 @@ void MphCalcBeta (const gsl_vector *eval, const gsl_matrix *W, const gsl_matrix
 				dw=gsl_matrix_get(W, j, k);
 				dy=gsl_matrix_get(UltVehiY, i, k);
 
-				//if (delta==0) {continue;}
 				d+=dy*dw/(delta*dl+1.0);
 			}
 			gsl_vector_set(WHiy, j*d_size+i, d);
@@ -904,36 +855,45 @@ void MphCalcBeta (const gsl_vector *eval, const gsl_matrix *W, const gsl_matrix
 
 	gsl_blas_dgemv(CblasNoTrans, 1.0, Qi, WHiy, 0.0, QiWHiy);
 
-	//need to multiply I_c\otimes UltVehi on both sides or one side
+	// Need to multiply I_c\otimes UltVehi on both sides or one side.
 	for (size_t i=0; i<c_size; i++) {
-		gsl_vector_view QiWHiy_sub=gsl_vector_subvector(QiWHiy, i*d_size, d_size);
-		gsl_vector_view beta_sub=gsl_vector_subvector(beta, i*d_size, d_size);
-		gsl_blas_dgemv(CblasTrans, 1.0, UltVeh, &QiWHiy_sub.vector, 0.0, &beta_sub.vector);
-
-		for (size_t j=0; j<c_size; j++) {
-			gsl_matrix_view Qi_sub=gsl_matrix_submatrix (Qi, i*d_size, j*d_size, d_size, d_size);
-			gsl_matrix_view Qitemp_sub=gsl_matrix_submatrix (Qi_temp, i*d_size, j*d_size, d_size, d_size);
-			gsl_matrix_view Vbeta_sub=gsl_matrix_submatrix (Vbeta, i*d_size, j*d_size, d_size, d_size);
-
-			if (j<i) {
-				gsl_matrix_view Vbeta_sym=gsl_matrix_submatrix (Vbeta, j*d_size, i*d_size, d_size, d_size);
-				gsl_matrix_transpose_memcpy (&Vbeta_sub.matrix, &Vbeta_sym.matrix);
-			} else {
-				gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, &Qi_sub.matrix, UltVeh, 0.0, &Qitemp_sub.matrix);
-				gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, &Qitemp_sub.matrix, 0.0, &Vbeta_sub.matrix);
-			}
-		}
-	}
-
-	//copy beta to B, and Vbeta to se_B
+	  gsl_vector_view QiWHiy_sub=
+	    gsl_vector_subvector(QiWHiy, i*d_size, d_size);
+	  gsl_vector_view beta_sub=gsl_vector_subvector(beta,i*d_size,d_size);
+	  gsl_blas_dgemv(CblasTrans, 1.0, UltVeh, &QiWHiy_sub.vector, 0.0, 
+			 &beta_sub.vector);
+	  
+	  for (size_t j=0; j<c_size; j++) {
+	    gsl_matrix_view Qi_sub=
+	      gsl_matrix_submatrix (Qi, i*d_size, j*d_size, d_size, d_size);
+	    gsl_matrix_view Qitemp_sub=
+	      gsl_matrix_submatrix (Qi_temp,i*d_size,j*d_size,d_size,d_size);
+	    gsl_matrix_view Vbeta_sub=
+	      gsl_matrix_submatrix (Vbeta, i*d_size, j*d_size, d_size, d_size);
+	    
+	    if (j<i) {
+	      gsl_matrix_view Vbeta_sym=
+		gsl_matrix_submatrix(Vbeta,j*d_size,i*d_size,d_size,d_size);
+	      gsl_matrix_transpose_memcpy(&Vbeta_sub.matrix,&Vbeta_sym.matrix);
+	    } else {
+	      gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, &Qi_sub.matrix, 
+			     UltVeh, 0.0, &Qitemp_sub.matrix);
+	      gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, 
+			     &Qitemp_sub.matrix, 0.0, &Vbeta_sub.matrix);
+	    }
+	  }
+	}
+
+	// Copy beta to B, and Vbeta to se_B.
 	for (size_t j=0; j<B->size2; j++) {
-		for (size_t i=0; i<B->size1; i++) {
-			gsl_matrix_set(B, i, j, gsl_vector_get(beta, j*d_size+i));
-			gsl_matrix_set(se_B, i, j, sqrt(gsl_matrix_get(Vbeta, j*d_size+i, j*d_size+i)));
-		}
-	}
-
-	//free matrices
+	  for (size_t i=0; i<B->size1; i++) {
+	    gsl_matrix_set(B, i, j, gsl_vector_get(beta, j*d_size+i));
+	    gsl_matrix_set(se_B, i, j, 
+			   sqrt(gsl_matrix_get(Vbeta,j*d_size+i,j*d_size+i)));
+	  }
+	}
+	
+	// Free matrices.
 	gsl_vector_free(D_l);
 	gsl_matrix_free(UltVeh);
 	gsl_matrix_free(UltVehi);
@@ -947,19 +907,15 @@ void MphCalcBeta (const gsl_vector *eval, const gsl_matrix *W, const gsl_matrix
 	return;
 }
 
+// Below are functions for Newton-Raphson's algorithm.
 
-
-//below are functions for Newton-Raphson's algorithm
-
-
-
-
-
-//calculate all Hi and return logdet_H=\sum_{k=1}^{n}log|H_k|
-//and calculate Qi and return logdet_Q
-//and calculate yPy
-void CalcHiQi (const gsl_vector *eval, const gsl_matrix *X, const gsl_matrix *V_g, const gsl_matrix *V_e, gsl_matrix *Hi_all, gsl_matrix *Qi, double &logdet_H, double &logdet_Q)
-{
+// Calculate all Hi and return logdet_H=\sum_{k=1}^{n}log|H_k|
+// and calculate Qi and return logdet_Q
+// and calculate yPy.
+void CalcHiQi (const gsl_vector *eval, const gsl_matrix *X,
+	       const gsl_matrix *V_g, const gsl_matrix *V_e,
+	       gsl_matrix *Hi_all, gsl_matrix *Qi, double &logdet_H,
+	       double &logdet_Q) {
 	gsl_matrix_set_zero (Hi_all);
 	gsl_matrix_set_zero (Qi);
 	logdet_H=0.0; logdet_Q=0.0;
@@ -972,10 +928,10 @@ void CalcHiQi (const gsl_vector *eval, const gsl_matrix *X, const gsl_matrix *V_
 	gsl_matrix *UltVehi=gsl_matrix_alloc (d_size, d_size);
 	gsl_vector *D_l=gsl_vector_alloc (d_size);
 
-	//calculate D_l, UltVeh and UltVehi
+	// Calculate D_l, UltVeh and UltVehi.
 	logdet_Ve=EigenProc (V_g, V_e, D_l, UltVeh, UltVehi);
 
-	//calculate each Hi and log|H_k|
+	// Calculate each Hi and log|H_k|.
 	logdet_H=(double)n_size*logdet_Ve;
 	for (size_t k=0; k<n_size; k++) {
 		delta=gsl_vector_get (eval, k);
@@ -991,28 +947,34 @@ void CalcHiQi (const gsl_vector *eval, const gsl_matrix *X, const gsl_matrix *V_
 			logdet_H+=log(d);
 		}
 
-		gsl_matrix_view Hi_k=gsl_matrix_submatrix(Hi_all, 0, k*d_size, d_size, d_size);
-		gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVehi, mat_dd, 0.0, &Hi_k.matrix);
+		gsl_matrix_view Hi_k=
+		  gsl_matrix_submatrix(Hi_all, 0, k*d_size, d_size, d_size);
+		gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVehi,
+			       mat_dd, 0.0, &Hi_k.matrix);
 	}
 
-	//calculate Qi, and multiply I\otimes UtVeh on both side
-	//and calculate logdet_Q, don't forget to substract c_size*logdet_Ve
+	// Calculate Qi, and multiply I\otimes UtVeh on both side
+	// and calculate logdet_Q, don't forget to substract c_size*logdet_Ve.
 	logdet_Q=CalcQi (eval, D_l, X, Qi)-(double)c_size*logdet_Ve;
 
 	for (size_t i=0; i<c_size; i++) {
 		for (size_t j=0; j<c_size; j++) {
-			gsl_matrix_view Qi_sub=gsl_matrix_submatrix (Qi, i*d_size, j*d_size, d_size, d_size);
-			if (j<i) {
-				gsl_matrix_view Qi_sym=gsl_matrix_submatrix (Qi, j*d_size, i*d_size, d_size, d_size);
-				gsl_matrix_transpose_memcpy (&Qi_sub.matrix, &Qi_sym.matrix);
-			} else {
-				gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, &Qi_sub.matrix, UltVeh, 0.0, mat_dd);
-				gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh, mat_dd, 0.0, &Qi_sub.matrix);
-			}
+		  gsl_matrix_view Qi_sub=
+		    gsl_matrix_submatrix(Qi,i*d_size,j*d_size,d_size,d_size);
+		  if (j<i) {
+		    gsl_matrix_view Qi_sym=
+		      gsl_matrix_submatrix(Qi,j*d_size,i*d_size,d_size,d_size);
+		    gsl_matrix_transpose_memcpy(&Qi_sub.matrix,&Qi_sym.matrix);
+		  } else {
+		    gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0,
+				   &Qi_sub.matrix, UltVeh, 0.0, mat_dd);
+		    gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, UltVeh,
+				   mat_dd, 0.0, &Qi_sub.matrix);
+		  }
 		}
 	}
 
-	//free memory
+	// Free memory.
 	gsl_matrix_free(mat_dd);
 	gsl_matrix_free(UltVeh);
 	gsl_matrix_free(UltVehi);
@@ -1021,31 +983,29 @@ void CalcHiQi (const gsl_vector *eval, const gsl_matrix *X, const gsl_matrix *V_
 	return;
 }
 
-
-
-
-//calculate all Hiy
-void Calc_Hiy_all (const gsl_matrix *Y, const gsl_matrix *Hi_all, gsl_matrix *Hiy_all)
-{
+// Calculate all Hiy.
+void Calc_Hiy_all (const gsl_matrix *Y, const gsl_matrix *Hi_all,
+		   gsl_matrix *Hiy_all) {
 	gsl_matrix_set_zero (Hiy_all);
 
 	size_t n_size=Y->size2, d_size=Y->size1;
 
 	for (size_t k=0; k<n_size; k++) {
-		gsl_matrix_const_view Hi_k=gsl_matrix_const_submatrix(Hi_all, 0, k*d_size, d_size, d_size);
-		gsl_vector_const_view y_k=gsl_matrix_const_column(Y, k);
+		gsl_matrix_const_view Hi_k=
+		  gsl_matrix_const_submatrix(Hi_all,0,k*d_size,d_size,d_size);
+		gsl_vector_const_view y_k=gsl_matrix_const_column(Y,k);
 		gsl_vector_view Hiy_k=gsl_matrix_column(Hiy_all, k);
 
-		gsl_blas_dgemv (CblasNoTrans, 1.0, &Hi_k.matrix, &y_k.vector, 0.0, &Hiy_k.vector);
+		gsl_blas_dgemv(CblasNoTrans,1.0,&Hi_k.matrix,&y_k.vector,
+			       0.0,&Hiy_k.vector);
 	}
 
 	return;
 }
 
-
-//calculate all xHi
-void Calc_xHi_all (const gsl_matrix *X, const gsl_matrix *Hi_all, gsl_matrix *xHi_all)
-{
+// Calculate all xHi.
+void Calc_xHi_all (const gsl_matrix *X, const gsl_matrix *Hi_all,
+		   gsl_matrix *xHi_all) {
 	gsl_matrix_set_zero (xHi_all);
 
 	size_t n_size=X->size2, c_size=X->size1, d_size=Hi_all->size1;
@@ -1053,11 +1013,14 @@ void Calc_xHi_all (const gsl_matrix *X, const gsl_matrix *Hi_all, gsl_matrix *xH
 	double d;
 
 	for (size_t k=0; k<n_size; k++) {
-		gsl_matrix_const_view Hi_k=gsl_matrix_const_submatrix(Hi_all, 0, k*d_size, d_size, d_size);
+		gsl_matrix_const_view Hi_k=
+		  gsl_matrix_const_submatrix(Hi_all,0,k*d_size,d_size,d_size);
 
 		for (size_t i=0; i<c_size; i++) {
 			d=gsl_matrix_get (X, i, k);
-			gsl_matrix_view xHi_sub=gsl_matrix_submatrix(xHi_all, i*d_size, k*d_size, d_size, d_size);
+			gsl_matrix_view xHi_sub=
+			  gsl_matrix_submatrix(xHi_all,i*d_size,k*d_size,
+					       d_size,d_size);
 			gsl_matrix_memcpy(&xHi_sub.matrix, &Hi_k.matrix);
 			gsl_matrix_scale(&xHi_sub.matrix, d);
 		}
@@ -1066,60 +1029,62 @@ void Calc_xHi_all (const gsl_matrix *X, const gsl_matrix *Hi_all, gsl_matrix *xH
 	return;
 }
 
-
-//calculate scalar yHiy
-double Calc_yHiy (const gsl_matrix *Y, const gsl_matrix *Hiy_all)
-{
+// Calculate scalar yHiy.
+double Calc_yHiy (const gsl_matrix *Y, const gsl_matrix *Hiy_all) {
 	double yHiy=0.0, d;
 	size_t n_size=Y->size2;
 
 	for (size_t k=0; k<n_size; k++) {
-		gsl_vector_const_view y_k=gsl_matrix_const_column(Y, k);
-		gsl_vector_const_view Hiy_k=gsl_matrix_const_column(Hiy_all, k);
+	  gsl_vector_const_view y_k=gsl_matrix_const_column(Y, k);
+	  gsl_vector_const_view Hiy_k=gsl_matrix_const_column(Hiy_all, k);
 
-		gsl_blas_ddot (&Hiy_k.vector, &y_k.vector, &d);
-		yHiy+=d;
+	  gsl_blas_ddot (&Hiy_k.vector, &y_k.vector, &d);
+	  yHiy+=d;
 	}
 
 	return yHiy;
 }
 
-
-//calculate the vector xHiy
-void Calc_xHiy (const gsl_matrix *Y, const gsl_matrix *xHi, gsl_vector *xHiy)
-{
+// Calculate the vector xHiy.
+void Calc_xHiy (const gsl_matrix *Y, const gsl_matrix *xHi, gsl_vector *xHiy) {
 	gsl_vector_set_zero (xHiy);
 
 	size_t n_size=Y->size2, d_size=Y->size1, dc_size=xHi->size1;
 
 	for (size_t k=0; k<n_size; k++) {
-		gsl_matrix_const_view xHi_k=gsl_matrix_const_submatrix(xHi, 0, k*d_size, dc_size, d_size);
+		gsl_matrix_const_view xHi_k=
+		  gsl_matrix_const_submatrix(xHi,0,k*d_size,dc_size,d_size);
 		gsl_vector_const_view y_k=gsl_matrix_const_column(Y, k);
 
-		gsl_blas_dgemv (CblasNoTrans, 1.0, &xHi_k.matrix, &y_k.vector, 1.0, xHiy);
+		gsl_blas_dgemv(CblasNoTrans,1.0,&xHi_k.matrix,&y_k.vector,
+			       1.0,xHiy);
 	}
 
 	return;
 }
 
-
-
-
-//0<=i,j<d_size
-size_t GetIndex (const size_t i, const size_t j, const size_t d_size)
-{
-	if (i>=d_size || j>=d_size) {cout<<"error in GetIndex."<<endl; return 0;}
+// 0<=i,j<d_size
+size_t GetIndex (const size_t i, const size_t j, const size_t d_size) {
+	if (i>=d_size || j>=d_size) {
+	  cout<<"error in GetIndex."<<endl;
+	  return 0;
+	}
 
 	size_t s, l;
-	if (j<i) {s=j; l=i;} else {s=i; l=j;}
+	if (j<i) {
+	  s=j;
+	  l=i;
+	} else {
+	  s=i;
+	  l=j;
+	}
 
 	return (2*d_size-s+1)*s/2+l-s;
 }
 
-
-
-void Calc_yHiDHiy (const gsl_vector *eval, const gsl_matrix *Hiy, const size_t i, const size_t j, double &yHiDHiy_g, double &yHiDHiy_e)
-{
+void Calc_yHiDHiy (const gsl_vector *eval, const gsl_matrix *Hiy,
+		   const size_t i, const size_t j, double &yHiDHiy_g,
+		   double &yHiDHiy_e) {
 	yHiDHiy_g=0.0;
 	yHiDHiy_e=0.0;
 
@@ -1144,10 +1109,9 @@ void Calc_yHiDHiy (const gsl_vector *eval, const gsl_matrix *Hiy, const size_t i
 	return;
 }
 
-
-
-void Calc_xHiDHiy (const gsl_vector *eval, const gsl_matrix *xHi, const gsl_matrix *Hiy, const size_t i, const size_t j, gsl_vector *xHiDHiy_g, gsl_vector *xHiDHiy_e)
-{
+void Calc_xHiDHiy (const gsl_vector *eval, const gsl_matrix *xHi,
+		   const gsl_matrix *Hiy, const size_t i, const size_t j,
+		   gsl_vector *xHiDHiy_g, gsl_vector *xHiDHiy_e) {
 	gsl_vector_set_zero(xHiDHiy_g);
 	gsl_vector_set_zero(xHiDHiy_e);
 
@@ -1158,27 +1122,29 @@ void Calc_xHiDHiy (const gsl_vector *eval, const gsl_matrix *xHi, const gsl_matr
 	for (size_t k=0; k<n_size; k++) {
 		delta=gsl_vector_get (eval, k);
 
-		gsl_vector_const_view xHi_col_i=gsl_matrix_const_column (xHi, k*d_size+i);
+		gsl_vector_const_view xHi_col_i=
+		  gsl_matrix_const_column (xHi, k*d_size+i);
 		d=gsl_matrix_get (Hiy, j, k);
 
 		gsl_blas_daxpy (d*delta, &xHi_col_i.vector, xHiDHiy_g);
 		gsl_blas_daxpy (d, &xHi_col_i.vector, xHiDHiy_e);
 
 		if (i!=j) {
-			gsl_vector_const_view xHi_col_j=gsl_matrix_const_column (xHi, k*d_size+j);
-			d=gsl_matrix_get (Hiy, i, k);
-
-			gsl_blas_daxpy (d*delta, &xHi_col_j.vector, xHiDHiy_g);
-			gsl_blas_daxpy (d, &xHi_col_j.vector, xHiDHiy_e);
+		  gsl_vector_const_view xHi_col_j=
+		    gsl_matrix_const_column (xHi, k*d_size+j);
+		  d=gsl_matrix_get (Hiy, i, k);
+		  
+		  gsl_blas_daxpy (d*delta, &xHi_col_j.vector, xHiDHiy_g);
+		  gsl_blas_daxpy (d, &xHi_col_j.vector, xHiDHiy_e);
 		}
 	}
 
 	return;
 }
 
-
-void Calc_xHiDHix (const gsl_vector *eval, const gsl_matrix *xHi, const size_t i, const size_t j, gsl_matrix *xHiDHix_g, gsl_matrix *xHiDHix_e)
-{
+void Calc_xHiDHix (const gsl_vector *eval, const gsl_matrix *xHi,
+		   const size_t i, const size_t j, gsl_matrix *xHiDHix_g,
+		   gsl_matrix *xHiDHix_e) {
 	gsl_matrix_set_zero(xHiDHix_g);
 	gsl_matrix_set_zero(xHiDHix_e);
 
@@ -1193,11 +1159,14 @@ void Calc_xHiDHix (const gsl_vector *eval, const gsl_matrix *xHi, const size_t i
 	for (size_t k=0; k<n_size; k++) {
 		delta=gsl_vector_get (eval, k);
 
-		gsl_vector_const_view xHi_col_i=gsl_matrix_const_column (xHi, k*d_size+i);
-		gsl_vector_const_view xHi_col_j=gsl_matrix_const_column (xHi, k*d_size+j);
+		gsl_vector_const_view xHi_col_i=
+		  gsl_matrix_const_column (xHi, k*d_size+i);
+		gsl_vector_const_view xHi_col_j=
+		  gsl_matrix_const_column (xHi, k*d_size+j);
 
 		gsl_matrix_set_zero (mat_dcdc);
-		gsl_blas_dger (1.0, &xHi_col_i.vector, &xHi_col_j.vector, mat_dcdc);
+		gsl_blas_dger(1.0,&xHi_col_i.vector,&xHi_col_j.vector,
+			      mat_dcdc);
 
 		gsl_matrix_transpose_memcpy (mat_dcdc_t, mat_dcdc);
 
@@ -1220,17 +1189,19 @@ void Calc_xHiDHix (const gsl_vector *eval, const gsl_matrix *xHi, const size_t i
 	return;
 }
 
-
-
-void Calc_yHiDHiDHiy (const gsl_vector *eval, const gsl_matrix *Hi, const gsl_matrix *Hiy, const size_t i1, const size_t j1, const size_t i2, const size_t j2, double &yHiDHiDHiy_gg, double &yHiDHiDHiy_ee, double &yHiDHiDHiy_ge)
-{
+void Calc_yHiDHiDHiy (const gsl_vector *eval, const gsl_matrix *Hi,
+		      const gsl_matrix *Hiy, const size_t i1,
+		      const size_t j1, const size_t i2, const size_t j2,
+		      double &yHiDHiDHiy_gg, double &yHiDHiDHiy_ee,
+		      double &yHiDHiDHiy_ge) {
 	yHiDHiDHiy_gg=0.0;
 	yHiDHiDHiy_ee=0.0;
 	yHiDHiDHiy_ge=0.0;
 
 	size_t n_size=eval->size, d_size=Hiy->size1;
 
-	double delta, d_Hiy_i1, d_Hiy_j1, d_Hiy_i2, d_Hiy_j2, d_Hi_i1i2, d_Hi_i1j2, d_Hi_j1i2, d_Hi_j1j2;
+	double delta, d_Hiy_i1, d_Hiy_j1, d_Hiy_i2, d_Hiy_j2;
+	double d_Hi_i1i2, d_Hi_i1j2, d_Hi_j1i2, d_Hi_j1j2;
 
 	for (size_t k=0; k<n_size; k++) {
 		delta=gsl_vector_get (eval, k);
@@ -1246,34 +1217,45 @@ void Calc_yHiDHiDHiy (const gsl_vector *eval, const gsl_matrix *Hi, const gsl_ma
 		d_Hi_j1j2=gsl_matrix_get (Hi, j1, k*d_size+j2);
 
 		if (i1==j1) {
-			yHiDHiDHiy_gg+=delta*delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2);
-			yHiDHiDHiy_ee+=(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2);
-			yHiDHiDHiy_ge+=delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2);
-
-			if (i2!=j2) {
-				yHiDHiDHiy_gg+=delta*delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2);
-				yHiDHiDHiy_ee+=(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2);
-				yHiDHiDHiy_ge+=delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2);
-			}
+		  yHiDHiDHiy_gg+=delta*delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2);
+		  yHiDHiDHiy_ee+=(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2);
+		  yHiDHiDHiy_ge+=delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2);
+		  
+		  if (i2!=j2) {
+		    yHiDHiDHiy_gg+=delta*delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2);
+		    yHiDHiDHiy_ee+=(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2);
+		    yHiDHiDHiy_ge+=delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2);
+		  }
 		} else {
-			yHiDHiDHiy_gg+=delta*delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2+d_Hiy_j1*d_Hi_i1i2*d_Hiy_j2);
-			yHiDHiDHiy_ee+=(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2+d_Hiy_j1*d_Hi_i1i2*d_Hiy_j2);
-			yHiDHiDHiy_ge+=delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2+d_Hiy_j1*d_Hi_i1i2*d_Hiy_j2);
-
-			if (i2!=j2) {
-				yHiDHiDHiy_gg+=delta*delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2+d_Hiy_j1*d_Hi_i1j2*d_Hiy_i2);
-				yHiDHiDHiy_ee+=(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2+d_Hiy_j1*d_Hi_i1j2*d_Hiy_i2);
-				yHiDHiDHiy_ge+=delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2+d_Hiy_j1*d_Hi_i1j2*d_Hiy_i2);
-			}
+		  yHiDHiDHiy_gg+=
+		    delta*delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2 +
+				 d_Hiy_j1*d_Hi_i1i2*d_Hiy_j2);
+		  yHiDHiDHiy_ee+=
+		    (d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2+d_Hiy_j1*d_Hi_i1i2*d_Hiy_j2);
+		  yHiDHiDHiy_ge+=
+		    delta*(d_Hiy_i1*d_Hi_j1i2*d_Hiy_j2 +
+			   d_Hiy_j1*d_Hi_i1i2*d_Hiy_j2);
+		  
+		  if (i2!=j2) {
+		    yHiDHiDHiy_gg+=
+		      delta*delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2 +
+				   d_Hiy_j1*d_Hi_i1j2*d_Hiy_i2);
+		    yHiDHiDHiy_ee+=(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2 +
+				    d_Hiy_j1*d_Hi_i1j2*d_Hiy_i2);
+		    yHiDHiDHiy_ge+=delta*(d_Hiy_i1*d_Hi_j1j2*d_Hiy_i2 +
+					  d_Hiy_j1*d_Hi_i1j2*d_Hiy_i2);
+		  }
 		}
 	}
-
+	
 	return;
 }
 
-
-void Calc_xHiDHiDHiy (const gsl_vector *eval, const gsl_matrix *Hi, const gsl_matrix *xHi, const gsl_matrix *Hiy, const size_t i1, const size_t j1, const size_t i2, const size_t j2, gsl_vector *xHiDHiDHiy_gg, gsl_vector *xHiDHiDHiy_ee, gsl_vector *xHiDHiDHiy_ge)
-{
+void Calc_xHiDHiDHiy (const gsl_vector *eval, const gsl_matrix *Hi,
+		      const gsl_matrix *xHi, const gsl_matrix *Hiy,
+		      const size_t i1, const size_t j1, const size_t i2,
+		      const size_t j2, gsl_vector *xHiDHiDHiy_gg,
+		      gsl_vector *xHiDHiDHiy_ee, gsl_vector *xHiDHiDHiy_ge) {
 	gsl_vector_set_zero(xHiDHiDHiy_gg);
 	gsl_vector_set_zero(xHiDHiDHiy_ee);
 	gsl_vector_set_zero(xHiDHiDHiy_ge);