--- imach/src/imach.c 2014/06/18 17:54:09 1.152 +++ imach/src/imach.c 2014/09/15 20:41:41 1.161 @@ -1,6 +1,43 @@ -/* $Id: imach.c,v 1.152 2014/06/18 17:54:09 brouard Exp $ +/* $Id: imach.c,v 1.161 2014/09/15 20:41:41 brouard Exp $ $State: Exp $ $Log: imach.c,v $ + Revision 1.161 2014/09/15 20:41:41 brouard + Summary: Problem with macro SQR on Intel compiler + + Revision 1.160 2014/09/02 09:24:05 brouard + *** empty log message *** + + Revision 1.159 2014/09/01 10:34:10 brouard + Summary: WIN32 + Author: Brouard + + Revision 1.158 2014/08/27 17:11:51 brouard + *** empty log message *** + + Revision 1.157 2014/08/27 16:26:55 brouard + Summary: Preparing windows Visual studio version + Author: Brouard + + In order to compile on Visual studio, time.h is now correct and time_t + and tm struct should be used. difftime should be used but sometimes I + just make the differences in raw time format (time(&now). + Trying to suppress #ifdef LINUX + Add xdg-open for __linux in order to open default browser. + + Revision 1.156 2014/08/25 20:10:10 brouard + *** empty log message *** + + Revision 1.155 2014/08/25 18:32:34 brouard + Summary: New compile, minor changes + Author: Brouard + + Revision 1.154 2014/06/20 17:32:08 brouard + Summary: Outputs now all graphs of convergence to period prevalence + + Revision 1.153 2014/06/20 16:45:46 brouard + Summary: If 3 live state, convergence to period prevalence on same graph + Author: Brouard + Revision 1.152 2014/06/18 17:54:09 brouard Summary: open browser, use gnuplot on same dir than imach if not found in the path @@ -451,20 +488,27 @@ #include #include #include + +#ifdef _WIN32 +#include +#else #include +#endif #include #include #include #include -extern int errno; +/* extern int errno; */ + +/* #ifdef LINUX */ +/* #include */ +/* #include "timeval.h" */ +/* #else */ +/* #include */ +/* #endif */ -#ifdef LINUX #include -#include "timeval.h" -#else -#include -#endif #ifdef GSL #include @@ -496,21 +540,21 @@ extern int errno; #define AGESUP 130 #define AGEBASE 40 #define AGEGOMP 10. /**< Minimal age for Gompertz adjustment */ -#ifdef UNIX -#define DIRSEPARATOR '/' -#define CHARSEPARATOR "/" -#define ODIRSEPARATOR '\\' -#else +#ifdef _WIN32 #define DIRSEPARATOR '\\' #define CHARSEPARATOR "\\" #define ODIRSEPARATOR '/' +#else +#define DIRSEPARATOR '/' +#define CHARSEPARATOR "/" +#define ODIRSEPARATOR '\\' #endif -/* $Id: imach.c,v 1.152 2014/06/18 17:54:09 brouard Exp $ */ +/* $Id: imach.c,v 1.161 2014/09/15 20:41:41 brouard Exp $ */ /* $State: Exp $ */ -char version[]="Imach version 0.98nT, January 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121)"; -char fullversion[]="$Revision: 1.152 $ $Date: 2014/06/18 17:54:09 $"; +char version[]="Imach version 0.98nX, August 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121)"; +char fullversion[]="$Revision: 1.161 $ $Date: 2014/09/15 20:41:41 $"; char strstart[80]; char optionfilext[10], optionfilefiname[FILENAMELENGTH]; int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */ @@ -583,12 +627,17 @@ char popfile[FILENAMELENGTH]; char optionfilegnuplot[FILENAMELENGTH], optionfilehtm[FILENAMELENGTH], optionfilehtmcov[FILENAMELENGTH] ; -struct timeval start_time, end_time, curr_time, last_time, forecast_time; -struct timezone tzp; -extern int gettimeofday(); -struct tm tmg, tm, tmf, *gmtime(), *localtime(); -long time_value; -extern long time(); +/* struct timeval start_time, end_time, curr_time, last_time, forecast_time; */ +/* struct timezone tzp; */ +/* extern int gettimeofday(); */ +struct tm tml, *gmtime(), *localtime(); + +extern time_t time(); + +struct tm start_time, end_time, curr_time, last_time, forecast_time; +time_t rstart_time, rend_time, rcurr_time, rlast_time, rforecast_time; /* raw time */ +struct tm tm; + char strcurr[80], strfor[80]; char *endptr; @@ -743,7 +792,7 @@ char *cutl(char *blocc, char *alocc, cha gives blocc="abcdef2ghi" and alocc="j". If occ is not found blocc is null and alocc is equal to in. Returns blocc */ - char *s, *t, *bl; + char *s, *t; t=in;s=in; while ((*in != occ) && (*in != '\0')){ *alocc++ = *in++; @@ -827,6 +876,24 @@ int nbocc(char *s, char occ) /* } */ /* } */ +#ifdef _WIN32 +char * strsep(char **pp, const char *delim) +{ + char *p, *q; + + if ((p = *pp) == NULL) + return 0; + if ((q = strpbrk (p, delim)) != NULL) + { + *pp = q + 1; + *q = '\0'; + } + else + *pp = 0; + return p; +} +#endif + /********************** nrerror ********************/ void nrerror(char error_text[]) @@ -1049,7 +1116,7 @@ double brent(double ax, double bx, doubl { int iter; double a,b,d,etemp; - double fu,fv,fw,fx; + double fu=0,fv,fw,fx; double ftemp; double p,q,r,tol1,tol2,u,v,w,x,xm; double e=0.0; @@ -1232,15 +1299,18 @@ void powell(double p[], double **xi, int xits=vector(1,n); *fret=(*func)(p); for (j=1;j<=n;j++) pt[j]=p[j]; + rcurr_time = time(NULL); for (*iter=1;;++(*iter)) { fp=(*fret); ibig=0; del=0.0; - last_time=curr_time; - (void) gettimeofday(&curr_time,&tzp); - printf("\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, curr_time.tv_sec-last_time.tv_sec, curr_time.tv_sec-start_time.tv_sec);fflush(stdout); - fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, curr_time.tv_sec-last_time.tv_sec, curr_time.tv_sec-start_time.tv_sec); fflush(ficlog); -/* fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tv_sec-start_time.tv_sec); */ + rlast_time=rcurr_time; + /* (void) gettimeofday(&curr_time,&tzp); */ + rcurr_time = time(NULL); + curr_time = *localtime(&rcurr_time); + printf("\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, rcurr_time-rlast_time, rcurr_time-rstart_time);fflush(stdout); + fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); +/* fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tm_sec-start_time.tm_sec); */ for (i=1;i<=n;i++) { printf(" %d %.12f",i, p[i]); fprintf(ficlog," %d %.12lf",i, p[i]); @@ -1250,25 +1320,25 @@ void powell(double p[], double **xi, int fprintf(ficlog,"\n"); fprintf(ficrespow,"\n");fflush(ficrespow); if(*iter <=3){ - tm = *localtime(&curr_time.tv_sec); - strcpy(strcurr,asctime(&tm)); + tml = *localtime(&rcurr_time); + strcpy(strcurr,asctime(&tml)); /* asctime_r(&tm,strcurr); */ - forecast_time=curr_time; + rforecast_time=rcurr_time; itmp = strlen(strcurr); if(strcurr[itmp-1]=='\n') /* Windows outputs with a new line */ strcurr[itmp-1]='\0'; - printf("\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,curr_time.tv_sec-last_time.tv_sec); - fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,curr_time.tv_sec-last_time.tv_sec); + printf("\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); + fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); for(niterf=10;niterf<=30;niterf+=10){ - forecast_time.tv_sec=curr_time.tv_sec+(niterf-*iter)*(curr_time.tv_sec-last_time.tv_sec); - tmf = *localtime(&forecast_time.tv_sec); + rforecast_time=rcurr_time+(niterf-*iter)*(rcurr_time-rlast_time); + forecast_time = *localtime(&rforecast_time); /* asctime_r(&tmf,strfor); */ - strcpy(strfor,asctime(&tmf)); + strcpy(strfor,asctime(&forecast_time)); itmp = strlen(strfor); if(strfor[itmp-1]=='\n') strfor[itmp-1]='\0'; - printf(" - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(forecast_time.tv_sec-curr_time.tv_sec,tmpout),strfor,strcurr); - fprintf(ficlog," - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(forecast_time.tv_sec-curr_time.tv_sec,tmpout),strfor,strcurr); + printf(" - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); + fprintf(ficlog," - if your program needs %d iterations to converge, convergence will be \n reached in %s i.e.\n on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); } } for (i=1;i<=n;i++) { @@ -1333,23 +1403,43 @@ void powell(double p[], double **xi, int return; } if (*iter == ITMAX) nrerror("powell exceeding maximum iterations."); - for (j=1;j<=n;j++) { + for (j=1;j<=n;j++) { /* Computes an extrapolated point */ ptt[j]=2.0*p[j]-pt[j]; xit[j]=p[j]-pt[j]; pt[j]=p[j]; } fptt=(*func)(ptt); - if (fptt < fp) { - t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del)-del*SQR(fp-fptt); - if (t < 0.0) { - linmin(p,xit,n,fret,func); + if (fptt < fp) { /* If extrapolated point is better, decide if we keep that new direction or not */ + /* x1 f1=fp x2 f2=*fret x3 f3=fptt, xm fm */ + /* From x1 (P0) distance of x2 is at h and x3 is 2h */ + /* Let f"(x2) be the 2nd derivative equal everywhere. Then the parabolic through (x1,f1), (x2,f2) and (x3,f3) + will reach at f3 = fm + h^2/2 f''m ; f" = (f1 -2f2 +f3 ) / h**2 */ + /* f1-f3 = delta(2h) = 2 h**2 f'' = 2(f1- 2f2 +f3) */ + /* Thus we compare delta(2h) with observed f1-f3 */ + /* or best gain on one ancient line 'del' with total gain f1-f2 = f1 - f2 - 'del' with del */ + /* t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del)-del*SQR(fp-fptt); */ + t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del); + t= t- del*SQR(fp-fptt); + printf("t1= %.12lf, t2= %.12lf, t=%.12lf\n", 2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del),del*SQR(fp-fptt),t); + fprintf(ficlog,"t1= %.12lf, t2= %.12lf, t=%.12lf\n", 2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del),del*SQR(fp-fptt),t); +#ifdef DEBUG + printf("t3= %.12lf, t4= %.12lf, t3*= %.12lf, t4*= %.12lf\n",SQR(fp-(*fret)-del),SQR(fp-fptt), + (fp-(*fret)-del)*(fp-(*fret)-del),(fp-fptt)*(fp-fptt)); + fprintf(ficlog,"t3= %.12lf, t4= %.12lf, t3*= %.12lf, t4*= %.12lf\n",SQR(fp-(*fret)-del),SQR(fp-fptt), + (fp-(*fret)-del)*(fp-(*fret)-del),(fp-fptt)*(fp-fptt)); + printf("tt= %.12lf, t=%.12lf\n",2.0*(fp-2.0*(*fret)+fptt)*(fp-(*fret)-del)*(fp-(*fret)-del)-del*(fp-fptt)*(fp-fptt),t); + fprintf(ficlog, "tt= %.12lf, t=%.12lf\n",2.0*(fp-2.0*(*fret)+fptt)*(fp-(*fret)-del)*(fp-(*fret)-del)-del*(fp-fptt)*(fp-fptt),t); +#endif + if (t < 0.0) { /* Then we use it for last direction */ + linmin(p,xit,n,fret,func); /* computes mean on the extrapolated direction.*/ for (j=1;j<=n;j++) { - xi[j][ibig]=xi[j][n]; - xi[j][n]=xit[j]; + xi[j][ibig]=xi[j][n]; /* Replace the direction with biggest decrease by n */ + xi[j][n]=xit[j]; /* and nth direction by the extrapolated */ } + printf("Gaining to use average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig); + fprintf(ficlog,"Gaining to use average direction of P0 P%d instead of biggest increase direction :\n",n,ibig); + #ifdef DEBUG - printf("Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); - fprintf(ficlog,"Direction changed last moved %d in place of ibig=%d, new last is the average:\n",n,ibig); for(j=1;j<=n;j++){ printf(" %.12e",xit[j]); fprintf(ficlog," %.12e",xit[j]); @@ -3888,13 +3978,13 @@ fprintf(fichtm," \n
  • Graphs before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too: %s%d_2.png
    \ ",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); /* Period (stable) prevalence in each health state */ - for(cpt=1; cpt- Period (stable) prevalence in each health state : %s%d_%d.png
    \ -",subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); + for(cpt=1; cpt<=nlstate;cpt++){ + fprintf(fichtm,"
    - Convergence from each state (1 to %d) to period (stable) prevalence in state %d %s%d_%d.png
    \ +",nlstate, cpt, subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); } for(cpt=1; cpt<=nlstate;cpt++) { - fprintf(fichtm,"\n
    - Life expectancy by health state (%d) at initial age and its decomposition into health expectancies : %s%d%d.png
    \ -",cpt,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1); + fprintf(fichtm,"\n
    - Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) : %s%d%d.png
    \ +",cpt,nlstate,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1); } } /* end i1 */ }/* End k1 */ @@ -3990,6 +4080,7 @@ void printinggnuplot(char fileres[], cha strcpy(dirfileres,optionfilefiname); strcpy(optfileres,"vpl"); /* 1eme*/ + fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'vpl' files\n"); for (cpt=1; cpt<= nlstate ; cpt ++) { for (k1=1; k1<= m ; k1 ++) { /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"v"),cpt,k1); @@ -4017,7 +4108,7 @@ plot [%.f:%.f] \"%s\" every :::%d::%d u } } /*2 eme*/ - + fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files\n"); for (k1=1; k1<= m ; k1 ++) { fprintf(ficgp,"\nset out \"%s%d.png\" \n",subdirf2(optionfilefiname,"e"),k1); fprintf(ficgp,"set ylabel \"Years\" \nset ter png small size 320, 240\nplot [%.f:%.f] ",ageminpar,fage); @@ -4074,28 +4165,29 @@ plot [%.f:%.f] \"%s\" every :::%d::%d u } /* CV preval stable (period) */ - for (k1=1; k1<= m ; k1 ++) { - for (cpt=1; cpt<=nlstate ; cpt ++) { + for (k1=1; k1<= m ; k1 ++) { /* For each multivariate if any */ + for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ k=3; + fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, cov=%d state=%d",k1, cpt); fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"p"),cpt,k1); fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ set ter png small size 320, 240\n\ unset log y\n\ -plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1/0):($%d/($%d",ageminpar,agemaxpar,subdirf2(fileres,"pij"),k1,k+cpt+1,k+1); - - for (i=1; i< nlstate ; i ++) - fprintf(ficgp,"+$%d",k+i+1); - fprintf(ficgp,")) t\"prev(%d,%d)\" w l",cpt,cpt+1); - - l=3+(nlstate+ndeath)*cpt; - fprintf(ficgp,",\"%s\" u ($1==%d ? ($3):1/0):($%d/($%d",subdirf2(fileres,"pij"),k1,l+cpt+1,l+1); - for (i=1; i< nlstate ; i ++) { - l=3+(nlstate+ndeath)*cpt; - fprintf(ficgp,"+$%d",l+i+1); - } - fprintf(ficgp,")) t\"prev(%d,%d)\" w l\n",cpt+1,cpt+1); - } - } +plot [%.f:%.f] ", ageminpar, agemaxpar); + for (i=1; i<= nlstate ; i ++){ + if(i==1) + fprintf(ficgp,"\"%s\"",subdirf2(fileres,"pij")); + else + fprintf(ficgp,", '' "); + l=(nlstate+ndeath)*(i-1)+1; + fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); + for (j=1; j<= (nlstate-1) ; j ++) + fprintf(ficgp,"+$%d",k+l+j); + fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt); + } /* nlstate */ + fprintf(ficgp,"\n"); + } /* end cpt state*/ + } /* end covariate */ /* proba elementaires */ for(i=1,jk=1; i <=nlstate; i++){ @@ -5166,7 +5258,7 @@ calandcheckages(int imx, int maxwav, dou } else if(agev[m][i] >*agemax){ *agemax=agev[m][i]; - printf(" Max anint[%d][%d]=%.0f annais[%d]=%.0f, agemax=%.2f\n",m,i,anint[m][i], i,annais[i], *agemax); + /* printf(" Max anint[%d][%d]=%.0f annais[%d]=%.0f, agemax=%.2f\n",m,i,anint[m][i], i,annais[i], *agemax);*/ } /*agev[m][i]=anint[m][i]-annais[i];*/ /* agev[m][i] = age[i]+2*m;*/ @@ -5295,19 +5387,21 @@ int main(int argc, char *argv[]) /* setlocale (LC_MESSAGES, ""); */ /* gettimeofday(&start_time, (struct timezone*)0); */ /* at first time */ - (void) gettimeofday(&start_time,&tzp); + rstart_time = time(NULL); + /* (void) gettimeofday(&start_time,&tzp);*/ + start_time = *localtime(&rstart_time); curr_time=start_time; - tm = *localtime(&start_time.tv_sec); - tmg = *gmtime(&start_time.tv_sec); - strcpy(strstart,asctime(&tm)); + /*tml = *localtime(&start_time.tm_sec);*/ + /* strcpy(strstart,asctime(&tml)); */ + strcpy(strstart,asctime(&start_time)); /* printf("Localtime (at start)=%s",strstart); */ -/* tp.tv_sec = tp.tv_sec +86400; */ -/* tm = *localtime(&start_time.tv_sec); */ +/* tp.tm_sec = tp.tm_sec +86400; */ +/* tm = *localtime(&start_time.tm_sec); */ /* tmg.tm_year=tmg.tm_year +dsign*dyear; */ /* tmg.tm_mon=tmg.tm_mon +dsign*dmonth; */ /* tmg.tm_hour=tmg.tm_hour + 1; */ -/* tp.tv_sec = mktime(&tmg); */ +/* tp.tm_sec = mktime(&tmg); */ /* strt=asctime(&tmg); */ /* printf("Time(after) =%s",strstart); */ /* (void) time (&time_value); @@ -5328,6 +5422,9 @@ int main(int argc, char *argv[]) i=strlen(pathr); if(pathr[i-1]=='\n') pathr[i-1]='\0'; + i=strlen(pathr); + if(pathr[i-1]==' ') /* This may happen when dragging on oS/X! */ + pathr[i-1]='\0'; for (tok = pathr; tok != NULL; ){ printf("Pathr |%s|\n",pathr); while ((val = strsep(&tok, "\"" )) != NULL && *val == '\0'); @@ -5383,13 +5480,13 @@ int main(int argc, char *argv[]) path=%s \n\ optionfile=%s\n\ optionfilext=%s\n\ - optionfilefiname=%s\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname); + optionfilefiname='%s'\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname); printf("Local time (at start):%s",strstart); fprintf(ficlog,"Local time (at start): %s",strstart); fflush(ficlog); /* (void) gettimeofday(&curr_time,&tzp); */ -/* printf("Elapsed time %d\n", asc_diff_time(curr_time.tv_sec-start_time.tv_sec,tmpout)); */ +/* printf("Elapsed time %d\n", asc_diff_time(curr_time.tm_sec-start_time.tm_sec,tmpout)); */ /* */ strcpy(fileres,"r"); @@ -5399,8 +5496,8 @@ int main(int argc, char *argv[]) /*---------arguments file --------*/ if((ficpar=fopen(optionfile,"r"))==NULL) { - printf("Problem with optionfile %s with errno=%s\n",optionfile,strerror(errno)); - fprintf(ficlog,"Problem with optionfile %s with errno=%s\n",optionfile,strerror(errno)); + printf("Problem with optionfile '%s' with errno='%s'\n",optionfile,strerror(errno)); + fprintf(ficlog,"Problem with optionfile '%s' with errno='%s'\n",optionfile,strerror(errno)); fflush(ficlog); /* goto end; */ exit(70); @@ -6495,7 +6592,8 @@ Interval (in months) between two waves: for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/ oldm=oldms;savm=savms; /* Segmentation fault */ - varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); + cptcod= 0; /* To be deleted */ + varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); /* cptcod not initialized Intel */ fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n# (weighted average of eij where weights are "); if(vpopbased==1) fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav); @@ -6621,17 +6719,18 @@ Interval (in months) between two waves: } printf("See log file on %s\n",filelog); /* gettimeofday(&end_time, (struct timezone*)0);*/ /* after time */ - (void) gettimeofday(&end_time,&tzp); - tm = *localtime(&end_time.tv_sec); - tmg = *gmtime(&end_time.tv_sec); - strcpy(strtend,asctime(&tm)); + /*(void) gettimeofday(&end_time,&tzp);*/ + rend_time = time(NULL); + end_time = *localtime(&rend_time); + /* tml = *localtime(&end_time.tm_sec); */ + strcpy(strtend,asctime(&end_time)); printf("Local time at start %s\nLocal time at end %s",strstart, strtend); fprintf(ficlog,"Local time at start %s\nLocal time at end %s\n",strstart, strtend); - printf("Total time used %s\n", asc_diff_time(end_time.tv_sec -start_time.tv_sec,tmpout)); + printf("Total time used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); - printf("Total time was %ld Sec.\n", end_time.tv_sec -start_time.tv_sec); - fprintf(ficlog,"Total time used %s\n", asc_diff_time(end_time.tv_sec -start_time.tv_sec,tmpout)); - fprintf(ficlog,"Total time was %ld Sec.\n", end_time.tv_sec -start_time.tv_sec); + printf("Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); + fprintf(ficlog,"Total time used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); + fprintf(ficlog,"Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); /* printf("Total time was %d uSec.\n", total_usecs);*/ /* if(fileappend(fichtm,optionfilehtm)){ */ fprintf(fichtm,"
    Local time at start %s
    Local time at end %s
    \n",strstart, strtend); @@ -6650,19 +6749,19 @@ Interval (in months) between two waves: printf("Current directory %s!\n",pathcd); /*strcat(plotcmd,CHARSEPARATOR);*/ sprintf(plotcmd,"gnuplot"); -#ifndef UNIX +#ifdef _WIN32 sprintf(plotcmd,"\"%sgnuplot.exe\"",pathimach); #endif if(!stat(plotcmd,&info)){ - printf("Error gnuplot program not found: %s\n",plotcmd);fflush(stdout); + printf("Error or gnuplot program not found: '%s'\n",plotcmd);fflush(stdout); if(!stat(getenv("GNUPLOTBIN"),&info)){ - printf("Error gnuplot program not found: %s Environment GNUPLOTBIN not set.\n",plotcmd);fflush(stdout); + printf("Error or gnuplot program not found: '%s' Environment GNUPLOTBIN not set.\n",plotcmd);fflush(stdout); }else strcpy(pplotcmd,plotcmd); -#ifdef UNIX +#ifdef __unix strcpy(plotcmd,GNUPLOTPROGRAM); if(!stat(plotcmd,&info)){ - printf("Error gnuplot program not found: %s\n",plotcmd);fflush(stdout); + printf("Error gnuplot program not found: '%s'\n",plotcmd);fflush(stdout); }else strcpy(pplotcmd,plotcmd); #endif @@ -6670,29 +6769,31 @@ Interval (in months) between two waves: strcpy(pplotcmd,plotcmd); sprintf(plotcmd,"%s %s",pplotcmd, optionfilegnuplot); - printf("Starting graphs with: %s\n",plotcmd);fflush(stdout); + printf("Starting graphs with: '%s'\n",plotcmd);fflush(stdout); if((outcmd=system(plotcmd)) != 0){ - printf("\n Problem with gnuplot command %s\n", plotcmd); - printf("\n Trying on same directory\n"); + printf("gnuplot command might not be in your path: '%s', err=%d\n", plotcmd, outcmd); + printf("\n Trying if gnuplot resides on the same directory that IMaCh\n"); sprintf(plotcmd,"%sgnuplot %s", pathimach, optionfilegnuplot); if((outcmd=system(plotcmd)) != 0) - printf("\n Still a problem with gnuplot command %s\n", plotcmd); + printf("\n Still a problem with gnuplot command %s, err=%d\n", plotcmd, outcmd); } - printf(" Wait..."); + printf(" Successful, please wait..."); while (z[0] != 'q') { /* chdir(path); */ - printf("\nType e to edit output files, g to graph again and q for exiting: "); + printf("\nType e to edit results with your browser, g to graph again and q for exit: "); scanf("%s",z); /* if (z[0] == 'c') system("./imach"); */ if (z[0] == 'e') { -#ifdef OSX +#ifdef __APPLE__ sprintf(pplotcmd, "open %s", optionfilehtm); -#elsedef +#elif __linux + sprintf(pplotcmd, "xdg-open %s", optionfilehtm); +#else sprintf(pplotcmd, "%s", optionfilehtm); -#enddef - printf("Starting browser with: %s",plotcmd);fflush(stdout); - system(plotcmd); +#endif + printf("Starting browser with: %s",pplotcmd);fflush(stdout); + system(pplotcmd); } else if (z[0] == 'g') system(plotcmd); else if (z[0] == 'q') exit(0); @@ -6703,6 +6804,3 @@ Interval (in months) between two waves: scanf("%s",z); } } - - -