--- imach/src/imach.c 2003/06/17 13:12:43 1.85 +++ imach/src/imach.c 2003/06/17 20:04:08 1.86 @@ -1,6 +1,10 @@ -/* $Id: imach.c,v 1.85 2003/06/17 13:12:43 brouard Exp $ +/* $Id: imach.c,v 1.86 2003/06/17 20:04:08 brouard Exp $ $State: Exp $ $Log: imach.c,v $ + Revision 1.86 2003/06/17 20:04:08 brouard + (Module): Change position of html and gnuplot routines and added + routine fileappend. + Revision 1.85 2003/06/17 13:12:43 brouard * imach.c (Repository): Check when date of death was earlier that current date of interview. It may happen when the death was just @@ -19,7 +23,7 @@ place. It differs from routine "prevalence" which may be called many times. Probs is memory consuming and must be used with parcimony. - Version 0.95a2 (should output exactly the same maximization than 0.8a2) + Version 0.95a3 (should output exactly the same maximization than 0.8a2) Revision 1.83 2003/06/10 13:39:11 lievre *** empty log message *** @@ -122,6 +126,10 @@ #include #include +#include +#include +#include "timeval.h" + #define MAXLINE 256 #define GNUPLOTPROGRAM "gnuplot" /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/ @@ -150,11 +158,11 @@ #define ODIRSEPARATOR '/' #endif -/* $Id: imach.c,v 1.85 2003/06/17 13:12:43 brouard Exp $ */ +/* $Id: imach.c,v 1.86 2003/06/17 20:04:08 brouard Exp $ */ /* $State: Exp $ */ char version[]="Imach version 0.95a2, June 2003, INED-EUROREVES "; -char fullversion[]="$Revision: 1.85 $ $Date: 2003/06/17 13:12:43 $"; +char fullversion[]="$Revision: 1.86 $ $Date: 2003/06/17 20:04:08 $"; int erreur; /* Error number */ int nvar; int cptcovn=0, cptcovage=0, cptcoveff=0,cptcov; @@ -1342,8 +1350,10 @@ double funcone( double *x) ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; /* printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */ if(globpr){ - fprintf(ficresilk,"%6d %1d %1d %1d %1d %3d %10.6f %6.4f %10.6f %10.6f %10.6f ", \ - i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],2*weight[i]*lli,out[s1][s2],savm[s1][s2]); + fprintf(ficresilk,"%ld %6d %1d %1d %1d %1d %3d %10.6f %6.4f\ + %10.6f %10.6f %10.6f ", \ + num[i],i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i], + 2*weight[i]*lli,out[s1][s2],savm[s1][s2]); for(k=1,l=0.; k<=nlstate; k++) fprintf(ficresilk," %10.6f",ll[k]); fprintf(ficresilk,"\n"); @@ -1371,8 +1381,8 @@ void likelione(FILE *ficres,double p[], printf("Problem with resultfile: %s\n", fileresilk); fprintf(ficlog,"Problem with resultfile: %s\n", fileresilk); } - fprintf(ficresilk, "# individual(line's record) s1 s2 wave# effective_wave# number_of_product_matrix pij weight 2ln(pij)*weight 0pij_x 0pij_(x-stepm) cumulating_loglikeli_by_health_state"); - fprintf(ficresilk, "# i s1 s2 mi mw dh likeli weight out sav "); + fprintf(ficresilk, "#individual(line's record) s1 s2 wave# effective_wave# number_of_product_matrix pij weight 2ln(pij)*weight 0pij_x 0pij_(x-stepm) cumulating_loglikeli_by_health_state\n"); + fprintf(ficresilk, "#num_i i s1 s2 mi mw dh likeli weight out sav "); /* i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],2*weight[i]*lli,out[s1][s2],savm[s1][s2]); */ for(k=1; k<=nlstate; k++) fprintf(ficresilk," ll[%d]",k); @@ -1380,8 +1390,18 @@ void likelione(FILE *ficres,double p[], } *fretone=(*funcone)(p); - if(globpr !=0) + if(globpr !=0){ fclose(ficresilk); + if((fichtm=fopen(optionfilehtm,"a"))==NULL) { + printf("Problem with html file: %s\n", optionfilehtm); + fprintf(ficlog,"Problem with html file: %s\n", optionfilehtm); + exit(0); + } + else{ + fprintf(fichtm,"\n
File of contributions to the likelihood: %s
\n",fileresilk); + fclose(fichtm); + } + } return; } @@ -1984,7 +2004,7 @@ void concatwav(int wav[], int **dh, int else if(j<0){ printf("Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); j=1; /* Careful Patch */ - printf(" We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview.\n You MUST fixe the contradiction between dates.\n",stepm); + printf(" We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview.\n You MUST fix the contradiction between dates.\n",stepm); printf("Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]); fprintf(ficlog," We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview.\n You MUST fix the contradiction between dates.\n",stepm); } @@ -3591,6 +3611,15 @@ populforecast(char fileres[], double anp fclose(ficrespop); } /* End of popforecast */ +int fileappend(FILE *fichier, char *optionfile) +{ + if((fichier=fopen(optionfile,"a"))==NULL) { + printf("Problem with file: %s\n", optionfile); + fprintf(ficlog,"Problem with file: %s\n", optionfile); + return (1); + } + +} /***********************************************/ /**************** Main Program *****************/ /***********************************************/ @@ -3644,8 +3673,7 @@ int main(int argc, char *argv[]) char z[1]="c", occ; -#include -#include + char stra[80], strb[80], strc[80], strd[80],stre[80],modelsav[80]; char *strt, *strtend; char *stratrunc; @@ -3664,6 +3692,7 @@ int main(int argc, char *argv[]) tm = *localtime(&start_time.tv_sec); tmg = *gmtime(&start_time.tv_sec); strt=asctime(&tm); + /* printf("Localtime (at start)=%s",strt); */ /* tp.tv_sec = tp.tv_sec +86400; */ /* tm = *localtime(&start_time.tv_sec); */ @@ -3713,8 +3742,9 @@ int main(int argc, char *argv[]) fprintf(ficlog,"\n%s\n%s",version,fullversion); fprintf(ficlog,"\nEnter the parameter file name: "); fprintf(ficlog,"pathtot=%s, path=%s, optionfile=%s optionfilext=%s optionfilefiname=%s\n",pathtot,path,optionfile,optionfilext,optionfilefiname); - printf("Localtime (at start)=%s",strt); - fprintf(ficlog,"Localtime (at start)=%s",strt); + + printf("Localtime (at start)=%s",strt); + fprintf(ficlog,"Localtime (at start)=%s",strt); fflush(ficlog); /* */ @@ -4224,10 +4254,52 @@ int main(int argc, char *argv[]) } scanf("%d",i);*/ + /*------------ gnuplot -------------*/ + strcpy(optionfilegnuplot,optionfilefiname); + strcat(optionfilegnuplot,".gp"); + if((ficgp=fopen(optionfilegnuplot,"w"))==NULL) { + printf("Problem with file %s",optionfilegnuplot); + } + else{ + fprintf(ficgp,"\n# %s\n", version); + fprintf(ficgp,"# %s\n", optionfilegnuplot); + fprintf(ficgp,"set missing 'NaNq'\n"); + } + fclose(ficgp); + /*--------- index.htm --------*/ + + strcpy(optionfilehtm,optionfile); + strcat(optionfilehtm,".htm"); + if((fichtm=fopen(optionfilehtm,"w"))==NULL) { + printf("Problem with %s \n",optionfilehtm), exit(0); + } + + fprintf(fichtm," %s
%s
\ +
\n\ +Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=%s
\n\ +\n\ +
\ +
  • Parameter files

    \n\ + - Copy of the parameter file: o%s
    \n\ + - Log file of the run: %s
    \n\ + - Gnuplot file name: %s\n\ + - Date and time at start: %s
\n",\ + version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt,\ + model,fileres,fileres,\ + filelog,filelog,optionfilegnuplot,optionfilegnuplot,strt); + fclose(fichtm); + /* Calculates basic frequencies. Computes observed prevalence at single age and prints on file fileres'p'. */ freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); + if(fileappend(fichtm, optionfilehtm)){ + fprintf(fichtm,"
Total number of observations=%d
\n\ +Youngest age at first (selected) pass %.2f, oldest age %.2f
\n\ +Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf
\n",\ + imx,agemin,agemax,jmin,jmax,jmean); + fclose(fichtm); + } pmmij= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */ oldms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */ newms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */ @@ -4239,7 +4311,7 @@ int main(int argc, char *argv[]) so we point p on param[1][1] so that p[1] maps on param[1][1][1] */ p=param[1][1]; /* *(*(*(param +1)+1)+0) */ - globpr=0; /* To get ipmx number of contributions and sum of weights*/ + globpr=0; /* To get the number ipmx of contributions and the sum of weights*/ likelione(ficres, p, npar, nlstate, &globpr, &ipmx, &sw, &fretone, funcone); /* Prints the contributions to the likelihood */ printf("First Likeli=%12.6f ipmx=%ld sw=%12.6f",fretone,ipmx,sw); for (k=1; k<=npar;k++) @@ -4413,45 +4485,10 @@ int main(int argc, char *argv[]) fprintf(ficparo,"popforecast=%d popfile=%s popfiledate=%.lf/%.lf/%.lf last-popfiledate=%.lf/%.lf/%.lf\n",popforecast,popfile,jpyram,mpyram,anpyram,jpyram1,mpyram1,anpyram1); fprintf(ficres,"popforecast=%d popfile=%s popfiledate=%.lf/%.lf/%.lf last-popfiledate=%.lf/%.lf/%.lf\n",popforecast,popfile,jpyram,mpyram,anpyram,jpyram1,mpyram1,anpyram1); - freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); + /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint);*/ /*,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ - /*------------ gnuplot -------------*/ - strcpy(optionfilegnuplot,optionfilefiname); - strcat(optionfilegnuplot,".gp"); - if((ficgp=fopen(optionfilegnuplot,"w"))==NULL) { - printf("Problem with file %s",optionfilegnuplot); - } - else{ - fprintf(ficgp,"\n# %s\n", version); - fprintf(ficgp,"# %s\n", optionfilegnuplot); - fprintf(ficgp,"set missing 'NaNq'\n"); - } - fclose(ficgp); printinggnuplot(fileres, ageminpar,agemaxpar,fage, pathc,p); - /*--------- index.htm --------*/ - - strcpy(optionfilehtm,optionfile); - strcat(optionfilehtm,".htm"); - if((fichtm=fopen(optionfilehtm,"w"))==NULL) { - printf("Problem with %s \n",optionfilehtm), exit(0); - } - - fprintf(fichtm," %s
\n\ -Title=%s
Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=%s
\n\ -\n\ -Total number of observations=%d
\n\ -Youngest age at first (selected) pass %.2f, oldest age %.2f
\n\ -Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf
\n\ -
\ -
  • Parameter files

    \n\ - - Copy of the parameter file: o%s
    \n\ - - Log file of the run: %s
    \n\ - - Gnuplot file name: %s
\n",\ - version,title,datafile,firstpass,lastpass,stepm, weightopt,\ - model,imx,agemin,agemax,jmin,jmax,jmean,fileres,fileres,\ - filelog,filelog,optionfilegnuplot,optionfilegnuplot); - fclose(fichtm); printinghtml(fileres,title,datafile, firstpass, lastpass, stepm, weightopt,\ model,imx,jmin,jmax,jmean,rfileres,popforecast,estepm,\ @@ -4800,6 +4837,10 @@ ageminpar, agemax, s[lastpass][imx], age printf("Total time was %d Sec. %d uSec.\n", end_time.tv_sec -start_time.tv_sec, end_time.tv_usec -start_time.tv_usec); fprintf(ficlog,"Total time was %d Sec. %d uSec.\n", end_time.tv_sec -start_time.tv_sec, end_time.tv_usec -start_time.tv_usec); /* printf("Total time was %d uSec.\n", total_usecs);*/ + if(fileappend(fichtm,optionfilehtm)){ + fprintf(fichtm,"
Localtime at start %s and at end=%s
",strt, strtend); + fclose(fichtm); + } /*------ End -----------*/ end: