| version 1.85, 2003/06/17 13:12:43 | version 1.86, 2003/06/17 20:04:08 | 
| Line 1 | Line 1 | 
 | /* $Id$ | /* $Id$ | 
 | $State$ | $State$ | 
 | $Log$ | $Log$ | 
 |  | 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 | Revision 1.85  2003/06/17 13:12:43  brouard | 
 | * imach.c (Repository): Check when date of death was earlier that | * imach.c (Repository): Check when date of death was earlier that | 
 | current date of interview. It may happen when the death was just | current date of interview. It may happen when the death was just | 
| Line 19 | Line 23 | 
 | place. It differs from routine "prevalence" which may be called | place. It differs from routine "prevalence" which may be called | 
 | many times. Probs is memory consuming and must be used with | many times. Probs is memory consuming and must be used with | 
 | parcimony. | 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 | Revision 1.83  2003/06/10 13:39:11  lievre | 
 | *** empty log message *** | *** empty log message *** | 
| Line 122 | Line 126 | 
 | #include <stdlib.h> | #include <stdlib.h> | 
 | #include <unistd.h> | #include <unistd.h> | 
 |  |  | 
 |  | #include <sys/time.h> | 
 |  | #include <time.h> | 
 |  | #include "timeval.h" | 
 |  |  | 
 | #define MAXLINE 256 | #define MAXLINE 256 | 
 | #define GNUPLOTPROGRAM "gnuplot" | #define GNUPLOTPROGRAM "gnuplot" | 
 | /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/ | /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/ | 
| Line 1342  double funcone( double *x) | Line 1350  double funcone( double *x) | 
 | ll[s[mw[mi][i]][i]] += 2*weight[i]*lli; | 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]); */ | /*       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){ | if(globpr){ | 
| fprintf(ficresilk,"%6d %1d %1d %1d %1d %3d %10.6f %6.4f %10.6f %10.6f %10.6f ", \ | fprintf(ficresilk,"%ld %6d %1d %1d %1d %1d %3d %10.6f %6.4f\ | 
| i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],2*weight[i]*lli,out[s1][s2],savm[s1][s2]); | %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++) | for(k=1,l=0.; k<=nlstate; k++) | 
 | fprintf(ficresilk," %10.6f",ll[k]); | fprintf(ficresilk," %10.6f",ll[k]); | 
 | fprintf(ficresilk,"\n"); | fprintf(ficresilk,"\n"); | 
| Line 1371  void likelione(FILE *ficres,double p[], | Line 1381  void likelione(FILE *ficres,double p[], | 
 | printf("Problem with resultfile: %s\n", fileresilk); | printf("Problem with resultfile: %s\n", fileresilk); | 
 | fprintf(ficlog,"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, "#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, "# i s1 s2 mi mw dh likeli weight out sav "); | 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]); */ | /*  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++) | for(k=1; k<=nlstate; k++) | 
 | fprintf(ficresilk," ll[%d]",k); | fprintf(ficresilk," ll[%d]",k); | 
| Line 1380  void likelione(FILE *ficres,double p[], | Line 1390  void likelione(FILE *ficres,double p[], | 
 | } | } | 
 |  |  | 
 | *fretone=(*funcone)(p); | *fretone=(*funcone)(p); | 
| if(globpr !=0) | if(globpr !=0){ | 
 | fclose(ficresilk); | 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<br>File of contributions to the likelihood: <a href=\"%s\">%s</a><br>\n",fileresilk); | 
 |  | fclose(fichtm); | 
 |  | } | 
 |  | } | 
 | return; | return; | 
 | } | } | 
 |  |  | 
| Line 1984  void  concatwav(int wav[], int **dh, int | Line 2004  void  concatwav(int wav[], int **dh, int | 
 | else if(j<0){ | 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]); | 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 */ | 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]); | 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); | 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); | 
 | } | } | 
| Line 3591  populforecast(char fileres[], double anp | Line 3611  populforecast(char fileres[], double anp | 
 | fclose(ficrespop); | fclose(ficrespop); | 
 | } /* End of popforecast */ | } /* 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 *****************/ | /**************** Main Program *****************/ | 
 | /***********************************************/ | /***********************************************/ | 
| Line 3644  int main(int argc, char *argv[]) | Line 3673  int main(int argc, char *argv[]) | 
 |  |  | 
 |  |  | 
 | char z[1]="c", occ; | char z[1]="c", occ; | 
| #include <sys/time.h> |  | 
| #include <time.h> |  | 
 | char stra[80], strb[80], strc[80], strd[80],stre[80],modelsav[80]; | char stra[80], strb[80], strc[80], strd[80],stre[80],modelsav[80]; | 
 | char *strt, *strtend; | char *strt, *strtend; | 
 | char *stratrunc; | char *stratrunc; | 
| Line 3664  int main(int argc, char *argv[]) | Line 3692  int main(int argc, char *argv[]) | 
 | tm = *localtime(&start_time.tv_sec); | tm = *localtime(&start_time.tv_sec); | 
 | tmg = *gmtime(&start_time.tv_sec); | tmg = *gmtime(&start_time.tv_sec); | 
 | strt=asctime(&tm); | strt=asctime(&tm); | 
 |  |  | 
 | /*  printf("Localtime (at start)=%s",strt); */ | /*  printf("Localtime (at start)=%s",strt); */ | 
 | /*  tp.tv_sec = tp.tv_sec +86400; */ | /*  tp.tv_sec = tp.tv_sec +86400; */ | 
 | /*  tm = *localtime(&start_time.tv_sec); */ | /*  tm = *localtime(&start_time.tv_sec); */ | 
| Line 3713  int main(int argc, char *argv[]) | Line 3742  int main(int argc, char *argv[]) | 
 | fprintf(ficlog,"\n%s\n%s",version,fullversion); | fprintf(ficlog,"\n%s\n%s",version,fullversion); | 
 | fprintf(ficlog,"\nEnter the parameter file name: "); | 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); | 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); | fflush(ficlog); | 
 |  |  | 
 | /* */ | /* */ | 
| Line 4224  int main(int argc, char *argv[]) | Line 4254  int main(int argc, char *argv[]) | 
 | } | } | 
 | scanf("%d",i);*/ | 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,"<body> <font size=\"2\">%s <br> %s</font> \ | 
 |  | <hr size=\"2\" color=\"#EC5E5E\"> \n\ | 
 |  | Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=%s<br>\n\ | 
 |  | \n\ | 
 |  | <hr  size=\"2\" color=\"#EC5E5E\">\ | 
 |  | <ul><li><h4>Parameter files</h4>\n\ | 
 |  | - Copy of the parameter file: <a href=\"o%s\">o%s</a><br>\n\ | 
 |  | - Log file of the run: <a href=\"%s\">%s</a><br>\n\ | 
 |  | - Gnuplot file name: <a href=\"%s\">%s</a>\n\ | 
 |  | - Date and time at start: %s</ul>\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 | /* Calculates basic frequencies. Computes observed prevalence at single age | 
 | and prints on file fileres'p'. */ | and prints on file fileres'p'. */ | 
 | 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); | 
 |  |  | 
 |  | if(fileappend(fichtm, optionfilehtm)){ | 
 |  | fprintf(fichtm,"<br>Total number of observations=%d <br>\n\ | 
 |  | Youngest age at first (selected) pass %.2f, oldest age %.2f<br>\n\ | 
 |  | Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\ | 
 |  | imx,agemin,agemax,jmin,jmax,jmean); | 
 |  | fclose(fichtm); | 
 |  | } | 
 | pmmij= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */ | pmmij= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */ | 
 | oldms= 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 */ | newms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */ | 
| Line 4239  int main(int argc, char *argv[]) | Line 4311  int main(int argc, char *argv[]) | 
 | so we point p on param[1][1] so that p[1] maps on param[1][1][1] */ | 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) */ | 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 */ | 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); | printf("First Likeli=%12.6f ipmx=%ld sw=%12.6f",fretone,ipmx,sw); | 
 | for (k=1; k<=npar;k++) | for (k=1; k<=npar;k++) | 
| Line 4413  int main(int argc, char *argv[]) | Line 4485  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(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); | 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);*/ | /*,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); | 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,"<body> <font size=\"2\">%s </font> <hr size=\"2\" color=\"#EC5E5E\"> \n\ |  | 
 | Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=%s<br>\n\ |  | 
 | \n\ |  | 
 | Total number of observations=%d <br>\n\ |  | 
 | Youngest age at first (selected) pass %.2f, oldest age %.2f<br>\n\ |  | 
 | Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n\ |  | 
 | <hr  size=\"2\" color=\"#EC5E5E\">\ |  | 
 | <ul><li><h4>Parameter files</h4>\n\ |  | 
 | - Copy of the parameter file: <a href=\"o%s\">o%s</a><br>\n\ |  | 
 | - Log file of the run: <a href=\"%s\">%s</a><br>\n\ |  | 
 | - Gnuplot file name: <a href=\"%s\">%s</a></ul>\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,\ | printinghtml(fileres,title,datafile, firstpass, lastpass, stepm, weightopt,\ | 
 | model,imx,jmin,jmax,jmean,rfileres,popforecast,estepm,\ | model,imx,jmin,jmax,jmean,rfileres,popforecast,estepm,\ | 
| Line 4800  ageminpar, agemax, s[lastpass][imx], age | Line 4837  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); | 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); | 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);*/ | /*  printf("Total time was %d uSec.\n", total_usecs);*/ | 
 |  | if(fileappend(fichtm,optionfilehtm)){ | 
 |  | fprintf(fichtm,"<br>Localtime at start %s and at end=%s<br>",strt, strtend); | 
 |  | fclose(fichtm); | 
 |  | } | 
 | /*------ End -----------*/ | /*------ End -----------*/ | 
 |  |  | 
 | end: | end: |