=================================================================== RCS file: /home/cvs/OpenXM/src/hgm/mh/src/mh.c,v retrieving revision 1.5 retrieving revision 1.8 diff -u -p -r1.5 -r1.8 --- OpenXM/src/hgm/mh/src/mh.c 2013/02/25 12:11:23 1.5 +++ OpenXM/src/hgm/mh/src/mh.c 2013/03/05 07:03:37 1.8 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/hgm/mh/src/mh.c,v 1.4 2013/02/24 21:36:49 takayama Exp $ */ +/* $OpenXM: OpenXM/src/hgm/mh/src/mh.c,v 1.7 2013/03/05 06:35:54 takayama Exp $ */ #include #include "sfile.h" #include "mh.h" @@ -22,7 +22,12 @@ struct cWishart *new_cWishart(int rank) { } struct cWishart *mh_cwishart_gen(int m,int n,double beta[],double x0, - int approxDeg,double h, int dp, double x,int mode) { + int approxDeg,double h, int dp, double x,int modep[]) { + /* + modep[0]. Do Koev-Edelman (ignored for now). + modep[1]. Do the HGM + modep[2]. Return modep[2] intermediate data. + */ struct SFILE *fp; char swork[WSIZE]; char *argv[WSIZE]; @@ -86,7 +91,7 @@ struct cWishart *mh_cwishart_gen(int m,int n,double be /* deallocate the memory */ for (i=0; isize; i++) mh_fclose((rp->sfpp)[i]); /* todo, mh_free_??(rp); free Iv's */ - if (mode == 0) return(cw); + if (!modep[1]) return(cw); if (MH_DEBUG) printf("\n\n%s\n",(char *)cw->aux); /* This output is strange. */ @@ -107,7 +112,6 @@ struct cWishart *mh_cwishart_gen(int m,int n,double be cw->aux = (char *) mh_malloc(sfp->len+1); mh_outstr((char *)cw->aux,sfp->len+1,sfp); } - sfp = (rp->sfpp)[1]; if (sfp) { cw->aux2 = (char *) mh_malloc(sfp->len+1); @@ -122,7 +126,8 @@ struct cWishart *mh_cwishart_gen(int m,int n,double be Wishart matrix by Series */ struct cWishart *mh_cwishart_s(int m,int n,double beta[],double x0, int approxDeg,double h, int dp, double x) { - return(mh_cwishart_gen(m,n,beta,x0,approxDeg,h,dp,x,0)); + int modep[]={1,0,0}; + return(mh_cwishart_gen(m,n,beta,x0,approxDeg,h,dp,x,modep)); } /* Cumulative probability distribution function of the first eigenvalue of @@ -130,13 +135,18 @@ struct cWishart *mh_cwishart_s(int m,int n,double beta struct cWishart *mh_cwishart_hgm(int m,int n,double beta[],double x0, int approxDeg, double h, int dp , double x) { - return(mh_cwishart_gen(m,n,beta,x0,approxDeg,h,dp,x,1)); + int modep[]={1,1,0}; + return(mh_cwishart_gen(m,n,beta,x0,approxDeg,h,dp,x,modep)); } #ifdef STANDALONE main() { double beta[5]={1.0,2.0,3.0,4.0,5.0}; struct cWishart *cw; + struct SFILE *sfp; + char *s; + char str[1024]; + double x; cw=mh_cwishart_hgm(3,5,beta,0.3,7, 0.01,1,10); if (cw != NULL) { printf("x=%lf, y=%lf\n",cw->x,(cw->f)[0]); @@ -145,7 +155,13 @@ main() { cw=mh_cwishart_hgm(4,5,beta,0.3,7, 0.01,1,10); if (cw != NULL) { printf("x=%lf, y=%lf\n",cw->x,(cw->f)[0]); + s = (char *)cw->aux; /* printf("%s",(char *)cw->aux); */ + sfp = mh_fopen(s,"r",0); + while (mh_fgets(str,1024,sfp)) { + sscanf(str,"%lg",&x); printf("%lg\n",x); + } + mh_fclose(sfp); } } main1() {