--- imach/src/imach.c 2002/02/20 17:19:10 1.19 +++ imach/src/imach.c 2002/02/21 18:42:24 1.21 @@ -67,6 +67,7 @@ #define AGEBASE 40 +int erreur; /* Error number */ int nvar; int cptcovn, cptcovage=0, cptcoveff=0,cptcov; int npar=NPARMAX; @@ -901,7 +902,7 @@ void mlikeli(FILE *ficres,double p[], in powell(p,xi,npar,ftol,&iter,&fret,func); printf("\n#Number of iterations = %d, -2 Log likelihood = %.12f\n",iter,func(p)); - fprintf(ficres,"#Number of iterations = %d, -2 Log likelihood = %.12f ",iter,func(p)); + fprintf(ficres,"#Number of iterations = %d, -2 Log likelihood = %.12f \n",iter,func(p)); } @@ -1318,7 +1319,7 @@ void prevalence(int agemin, int agemax, if ((k2>=dateprev1) && (k2<=dateprev2)) { if(agev[m][i]==0) agev[m][i]=agemax+1; if(agev[m][i]==1) agev[m][i]=agemax+2; - freq[s[m][i]][s[m+1][i]][(int)(agev[m][i]+1-1/12.)] += weight[i]; + freq[s[m][i]][s[m+1][i]][(int)(agev[m][i]+1-((int)calagedate %12)/12.)] += weight[i]; freq[s[m][i]][s[m+1][i]][(int)(agemax+3+1)] += weight[i]; } } @@ -2632,6 +2633,7 @@ ij=1; } fclose(ficgp); + /* end gnuplot */ chdir(path); @@ -2824,9 +2826,12 @@ fclose(fichtm); fclose(ficrespij); + if(stepm == 1) { /*---------- Forecasting ------------------*/ calagedate=(anproj1+mproj1/12.+jproj1/365.-dateintmean)*YEARM; + /*printf("calage= %f", calagedate);*/ + prevalence(agemin, agemax, s, agev, nlstate, imx,Tvar,nbcode, ncodemax,mint,anint,dateprev1,dateprev2, calagedate); @@ -2876,7 +2881,10 @@ fclose(fichtm); mprojmean=yp; yp1=modf((yp2*30.5),&yp); jprojmean=yp; - fprintf(ficresf,"Estimated date of observed prevalence: %.lf/%.lf/%.lf ",jprojmean,mprojmean,anprojmean); + if(jprojmean==0) jprojmean=1; + if(mprojmean==0) jprojmean=1; + + fprintf(ficresf,"# Estimated date of observed prevalence: %.lf/%.lf/%.lf ",jprojmean,mprojmean,anprojmean); if (popforecast==1) { if((ficpop=fopen(popfile,"r"))==NULL) { @@ -2907,11 +2915,12 @@ fclose(fichtm); fprintf(ficresf,"# StartingAge FinalAge"); for(j=1; j<=nlstate+ndeath;j++) fprintf(ficresf," P.%d",j); if (popforecast==1) fprintf(ficresf," [Population]"); - - for (cpt=0; cpt<=1;cpt++) { + + for (cpt=0; cpt<4;cpt++) { fprintf(ficresf,"\n"); - fprintf(ficresf,"\nForecasting at date %.lf/%.lf/%.lf ",jproj1,mproj1,anproj1+cpt); - for (agedeb=(fage-(1/12.)); agedeb>=(bage-(1/12.)); agedeb--){ /* If stepm=6 months */ + fprintf(ficresf,"\n# Forecasting at date %.lf/%.lf/%.lf ",jproj1,mproj1,anproj1+cpt); + + for (agedeb=(fage-((int)calagedate %12/12.)); agedeb>=(bage-((int)calagedate %12)/12.); agedeb--){ /* If stepm=6 months */ nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); nhstepm = nhstepm/hstepm; /*printf("agedeb=%.lf stepm=%d hstepm=%d nhstepm=%d \n",agedeb,stepm,hstepm,nhstepm);*/ @@ -2919,20 +2928,19 @@ fclose(fichtm); p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); oldm=oldms;savm=savms; hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); - + for (h=0; h<=nhstepm; h++){ - if (h==(int) (calagedate+12*cpt)) { - fprintf(ficresf,"h=%d ", h); - fprintf(ficresf,"\n %f %f ",agedeb,agedeb+h*hstepm/YEARM*stepm); - } + if (h==(int) (calagedate+YEARM*cpt)) { + fprintf(ficresf,"\n %.f ",agedeb+h*hstepm/YEARM*stepm); + } for(j=1; j<=nlstate+ndeath;j++) { kk1=0.;kk2=0; for(i=1; i<=nlstate;i++) { if (mobilav==1) - kk1=kk1+p3mat[i][j][h]*mobaverage[(int)agedeb][i][cptcod]; + kk1=kk1+p3mat[i][j][h]*mobaverage[(int)agedeb+1][i][cptcod]; else { kk1=kk1+p3mat[i][j][h]*probs[(int)(agedeb+1)][i][cptcod]; - /* fprintf(ficresf," p3=%.3f p=%.3f ", p3mat[i][j][h],probs[(int)(agedeb)+1][i][cptcod]);*/ + /* fprintf(ficresf," p3=%.3f p=%.3f ", p3mat[i][j][h], probs[(int)(agedeb)+1][i][cptcod]);*/ } if (popforecast==1) kk2=kk1*popeffectif[(int)agedeb]; @@ -2959,6 +2967,12 @@ fclose(fichtm); free_imatrix(s,1,maxwav+1,1,n); free_vector(weight,1,n); fclose(ficresf); + }/* End forecasting */ + else{ + erreur=108; + printf("Error %d!! You can only forecast the prevalences if the optimization\n has been performed with stepm = 1 (month) instead of %d\n", erreur, stepm); + } + /*---------- Health expectancies and variances ------------*/ strcpy(filerest,"t"); @@ -3096,7 +3110,9 @@ strcpy(fileresvpl,"vpl"); free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); - printf("End of Imach\n"); + if(erreur >0) + printf("End of Imach with error %d\n",erreur); + else printf("End of Imach\n"); /* gettimeofday(&end_time, (struct timezone*)0);*/ /* after time */ /* 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);*/