Diff for /imach/src/imach.c between versions 1.94 and 1.103

version 1.94, 2003/06/27 13:00:02 version 1.103, 2005/09/30 15:54:49
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
     Revision 1.103  2005/09/30 15:54:49  lievre
     (Module): sump fixed, loop imx fixed, and simplifications.
   
     Revision 1.102  2004/09/15 17:31:30  brouard
     Add the possibility to read data file including tab characters.
   
     Revision 1.101  2004/09/15 10:38:38  brouard
     Fix on curr_time
   
     Revision 1.100  2004/07/12 18:29:06  brouard
     Add version for Mac OS X. Just define UNIX in Makefile
   
     Revision 1.99  2004/06/05 08:57:40  brouard
     *** empty log message ***
   
     Revision 1.98  2004/05/16 15:05:56  brouard
     New version 0.97 . First attempt to estimate force of mortality
     directly from the data i.e. without the need of knowing the health
     state at each age, but using a Gompertz model: log u =a + b*age .
     This is the basic analysis of mortality and should be done before any
     other analysis, in order to test if the mortality estimated from the
     cross-longitudinal survey is different from the mortality estimated
     from other sources like vital statistic data.
   
     The same imach parameter file can be used but the option for mle should be -3.
   
     Agnès, who wrote this part of the code, tried to keep most of the
     former routines in order to include the new code within the former code.
   
     The output is very simple: only an estimate of the intercept and of
     the slope with 95% confident intervals.
   
     Current limitations:
     A) Even if you enter covariates, i.e. with the
     model= V1+V2 equation for example, the programm does only estimate a unique global model without covariates.
     B) There is no computation of Life Expectancy nor Life Table.
   
     Revision 1.97  2004/02/20 13:25:42  lievre
     Version 0.96d. Population forecasting command line is (temporarily)
     suppressed.
   
     Revision 1.96  2003/07/15 15:38:55  brouard
     * imach.c (Repository): Errors in subdirf, 2, 3 while printing tmpout is
     rewritten within the same printf. Workaround: many printfs.
   
     Revision 1.95  2003/07/08 07:54:34  brouard
     * imach.c (Repository):
     (Repository): Using imachwizard code to output a more meaningful covariance
     matrix (cov(a12,c31) instead of numbers.
   
   Revision 1.94  2003/06/27 13:00:02  brouard    Revision 1.94  2003/06/27 13:00:02  brouard
   Just cleaning    Just cleaning
   
Line 161 Line 211
 #include <stdlib.h>  #include <stdlib.h>
 #include <unistd.h>  #include <unistd.h>
   
 #include <sys/time.h>  /* #include <sys/time.h> */
 #include <time.h>  #include <time.h>
 #include "timeval.h"  #include "timeval.h"
   
   /* #include <libintl.h> */
   /* #define _(String) gettext (String) */
   
 #define MAXLINE 256  #define MAXLINE 256
 #define GNUPLOTPROGRAM "gnuplot"  #define GNUPLOTPROGRAM "gnuplot"
 /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/  /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/
Line 185 Line 238
 #define YEARM 12. /* Number of months per year */  #define YEARM 12. /* Number of months per year */
 #define AGESUP 130  #define AGESUP 130
 #define AGEBASE 40  #define AGEBASE 40
 #ifdef unix  #define AGEGOMP 10. /* Minimal age for Gompertz adjustment */
   #ifdef UNIX
 #define DIRSEPARATOR '/'  #define DIRSEPARATOR '/'
 #define ODIRSEPARATOR '\\'  #define ODIRSEPARATOR '\\'
 #else  #else
Line 196 Line 250
 /* $Id$ */  /* $Id$ */
 /* $State$ */  /* $State$ */
   
 char version[]="Imach version 0.96b, June 2003, INED-EUROREVES ";  char version[]="Imach version 0.97c, September 2004, INED-EUROREVES ";
 char fullversion[]="$Revision$ $Date$";   char fullversion[]="$Revision$ $Date$"; 
 int erreur, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings  */  int erreur, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings  */
 int nvar;  int nvar;
Line 226  int globpr; /* Global variable for print Line 280  int globpr; /* Global variable for print
 double fretone; /* Only one call to likelihood */  double fretone; /* Only one call to likelihood */
 long ipmx; /* Number of contributions */  long ipmx; /* Number of contributions */
 double sw; /* Sum of weights */  double sw; /* Sum of weights */
   char filerespow[FILENAMELENGTH];
 char fileresilk[FILENAMELENGTH]; /* File of individual contributions to the likelihood */  char fileresilk[FILENAMELENGTH]; /* File of individual contributions to the likelihood */
 FILE *ficresilk;  FILE *ficresilk;
 FILE *ficgp,*ficresprob,*ficpop, *ficresprobcov, *ficresprobcor;  FILE *ficgp,*ficresprob,*ficpop, *ficresprobcov, *ficresprobcor;
Line 240  char fileresvpl[FILENAMELENGTH]; Line 295  char fileresvpl[FILENAMELENGTH];
 char title[MAXLINE];  char title[MAXLINE];
 char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH],  filerespl[FILENAMELENGTH];  char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH],  filerespl[FILENAMELENGTH];
 char optionfilext[10], optionfilefiname[FILENAMELENGTH], plotcmd[FILENAMELENGTH];  char optionfilext[10], optionfilefiname[FILENAMELENGTH], plotcmd[FILENAMELENGTH];
 char tmpout[FILENAMELENGTH];   char tmpout[FILENAMELENGTH],  tmpout2[FILENAMELENGTH]; 
 char command[FILENAMELENGTH];  char command[FILENAMELENGTH];
 int  outcmd=0;  int  outcmd=0;
   
Line 288  static double maxarg1,maxarg2; Line 343  static double maxarg1,maxarg2;
 static double sqrarg;  static double sqrarg;
 #define SQR(a) ((sqrarg=(a)) == 0.0 ? 0.0 :sqrarg*sqrarg)  #define SQR(a) ((sqrarg=(a)) == 0.0 ? 0.0 :sqrarg*sqrarg)
 #define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;}   #define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;} 
   int agegomp= AGEGOMP;
   
 int imx;   int imx; 
 int stepm;  int stepm=1;
 /* Stepm, step in month: minimum step interpolation*/  /* Stepm, step in month: minimum step interpolation*/
   
 int estepm;  int estepm;
Line 298  int estepm; Line 354  int estepm;
   
 int m,nb;  int m,nb;
 long *num;  long *num;
 int firstpass=0, lastpass=4,*cod, *ncodemax, *Tage;  int firstpass=0, lastpass=4,*cod, *ncodemax, *Tage,*cens;
 double **agev,*moisnais, *annais, *moisdc, *andc,**mint, **anint;  double **agev,*moisnais, *annais, *moisdc, *andc,**mint, **anint;
 double **pmmij, ***probs;  double **pmmij, ***probs;
   double *ageexmed,*agecens;
 double dateintmean=0;  double dateintmean=0;
   
 double *weight;  double *weight;
Line 314  double ftolhess; /* Tolerance for comput Line 371  double ftolhess; /* Tolerance for comput
 /**************** split *************************/  /**************** split *************************/
 static  int split( char *path, char *dirc, char *name, char *ext, char *finame )  static  int split( char *path, char *dirc, char *name, char *ext, char *finame )
 {  {
     /* From a file name with full path (either Unix or Windows) we extract the directory (dirc)
        the name of the file (name), its extension only (ext) and its first part of the name (finame)
     */ 
   char  *ss;                            /* pointer */    char  *ss;                            /* pointer */
   int   l1, l2;                         /* length counters */    int   l1, l2;                         /* length counters */
   
Line 345  static int split( char *path, char *dirc Line 405  static int split( char *path, char *dirc
 #endif  #endif
   */    */
   ss = strrchr( name, '.' );            /* find last / */    ss = strrchr( name, '.' );            /* find last / */
   ss++;    if (ss >0){
   strcpy(ext,ss);                       /* save extension */      ss++;
   l1= strlen( name);      strcpy(ext,ss);                     /* save extension */
   l2= strlen(ss)+1;      l1= strlen( name);
   strncpy( finame, name, l1-l2);      l2= strlen(ss)+1;
   finame[l1-l2]= 0;      strncpy( finame, name, l1-l2);
       finame[l1-l2]= 0;
     }
   return( 0 );                          /* we're done */    return( 0 );                          /* we're done */
 }  }
   
Line 383  int nbocc(char *s, char occ) Line 445  int nbocc(char *s, char occ)
   
 void cutv(char *u,char *v, char*t, char occ)  void cutv(char *u,char *v, char*t, char occ)
 {  {
   /* cuts string t into u and v where u is ended by char occ excluding it    /* cuts string t into u and v where u ends before first occurence of char 'occ' 
      and v is after occ excluding it too : ex cutv(u,v,"abcdef2ghi2j",2)       and v starts after first occurence of char 'occ' : ex cutv(u,v,"abcdef2ghi2j",'2')
      gives u="abcedf" and v="ghi2j" */       gives u="abcedf" and v="ghi2j" */
   int i,lg,j,p=0;    int i,lg,j,p=0;
   i=0;    i=0;
Line 813  void powell(double p[], double **xi, int Line 875  void powell(double p[], double **xi, int
     last_time=curr_time;      last_time=curr_time;
     (void) gettimeofday(&curr_time,&tzp);      (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);      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);      /*    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);
     fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tv_sec-start_time.tv_sec);      fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tv_sec-start_time.tv_sec);
     for (i=1;i<=n;i++) {      */
      for (i=1;i<=n;i++) {
       printf(" %d %.12f",i, p[i]);        printf(" %d %.12f",i, p[i]);
       fprintf(ficlog," %d %.12lf",i, p[i]);        fprintf(ficlog," %d %.12lf",i, p[i]);
       fprintf(ficrespow," %.12lf", p[i]);        fprintf(ficrespow," %.12lf", p[i]);
Line 825  void powell(double p[], double **xi, int Line 888  void powell(double p[], double **xi, int
     fprintf(ficrespow,"\n");fflush(ficrespow);      fprintf(ficrespow,"\n");fflush(ficrespow);
     if(*iter <=3){      if(*iter <=3){
       tm = *localtime(&curr_time.tv_sec);        tm = *localtime(&curr_time.tv_sec);
       strcpy(strcurr,asctime(&tmf));        strcpy(strcurr,asctime(&tm));
 /*       asctime_r(&tm,strcurr); */  /*       asctime_r(&tm,strcurr); */
       forecast_time=curr_time;        forecast_time=curr_time; 
       itmp = strlen(strcurr);        itmp = strlen(strcurr);
       if(strcurr[itmp-1]=='\n')        if(strcurr[itmp-1]=='\n')  /* Windows outputs with a new line */
         strcurr[itmp-1]='\0';          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);        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);        fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,curr_time.tv_sec-last_time.tv_sec);
Line 841  void powell(double p[], double **xi, int Line 904  void powell(double p[], double **xi, int
         itmp = strlen(strfor);          itmp = strlen(strfor);
         if(strfor[itmp-1]=='\n')          if(strfor[itmp-1]=='\n')
         strfor[itmp-1]='\0';          strfor[itmp-1]='\0';
         printf("   - if your program needs %d iterations to converge, convergence will be \n   reached in %s or\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(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 or\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);
       }        }
     }      }
     for (i=1;i<=n;i++) {       for (i=1;i<=n;i++) { 
Line 1007  double **pmij(double **ps, double *cov, Line 1070  double **pmij(double **ps, double *cov,
   int i,j,j1, nc, ii, jj;    int i,j,j1, nc, ii, jj;
   
     for(i=1; i<= nlstate; i++){      for(i=1; i<= nlstate; i++){
     for(j=1; j<i;j++){        for(j=1; j<i;j++){
       for (nc=1, s2=0.;nc <=ncovmodel; nc++){          for (nc=1, s2=0.;nc <=ncovmodel; nc++){
         /*s2 += param[i][j][nc]*cov[nc];*/            /*s2 += param[i][j][nc]*cov[nc];*/
         s2 += x[(i-1)*nlstate*ncovmodel+(j-1)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];            s2 += x[(i-1)*nlstate*ncovmodel+(j-1)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];
         /*printf("Int j<i s1=%.17e, s2=%.17e\n",s1,s2);*/  /*       printf("Int j<i s1=%.17e, s2=%.17e\n",s1,s2); */
       }          }
       ps[i][j]=s2;          ps[i][j]=s2;
       /*printf("s1=%.17e, s2=%.17e\n",s1,s2);*/  /*      printf("s1=%.17e, s2=%.17e\n",s1,s2); */
     }        }
     for(j=i+1; j<=nlstate+ndeath;j++){        for(j=i+1; j<=nlstate+ndeath;j++){
       for (nc=1, s2=0.;nc <=ncovmodel; nc++){          for (nc=1, s2=0.;nc <=ncovmodel; nc++){
         s2 += x[(i-1)*nlstate*ncovmodel+(j-2)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];            s2 += x[(i-1)*nlstate*ncovmodel+(j-2)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];
         /*printf("Int j>i s1=%.17e, s2=%.17e %lx %lx\n",s1,s2,s1,s2);*/  /*        printf("Int j>i s1=%.17e, s2=%.17e %lx %lx\n",s1,s2,s1,s2); */
           }
           ps[i][j]=s2;
       }        }
       ps[i][j]=s2;  
     }      }
   }  
     /*ps[3][2]=1;*/      /*ps[3][2]=1;*/
       
   for(i=1; i<= nlstate; i++){      for(i=1; i<= nlstate; i++){
      s1=0;        s1=0;
     for(j=1; j<i; j++)        for(j=1; j<i; j++)
       s1+=exp(ps[i][j]);          s1+=exp(ps[i][j]);
     for(j=i+1; j<=nlstate+ndeath; j++)        for(j=i+1; j<=nlstate+ndeath; j++)
       s1+=exp(ps[i][j]);          s1+=exp(ps[i][j]);
     ps[i][i]=1./(s1+1.);        ps[i][i]=1./(s1+1.);
     for(j=1; j<i; j++)        for(j=1; j<i; j++)
       ps[i][j]= exp(ps[i][j])*ps[i][i];          ps[i][j]= exp(ps[i][j])*ps[i][i];
     for(j=i+1; j<=nlstate+ndeath; j++)        for(j=i+1; j<=nlstate+ndeath; j++)
       ps[i][j]= exp(ps[i][j])*ps[i][i];          ps[i][j]= exp(ps[i][j])*ps[i][i];
     /* ps[i][nlstate+1]=1.-s1- ps[i][i];*/ /* Sum should be 1 */        /* ps[i][nlstate+1]=1.-s1- ps[i][i];*/ /* Sum should be 1 */
   } /* end i */      } /* end i */
       
   for(ii=nlstate+1; ii<= nlstate+ndeath; ii++){      for(ii=nlstate+1; ii<= nlstate+ndeath; ii++){
     for(jj=1; jj<= nlstate+ndeath; jj++){        for(jj=1; jj<= nlstate+ndeath; jj++){
       ps[ii][jj]=0;          ps[ii][jj]=0;
       ps[ii][ii]=1;          ps[ii][ii]=1;
         }
     }      }
   }      
   
   
   /*   for(ii=1; ii<= nlstate+ndeath; ii++){  /*        for(ii=1; ii<= nlstate+ndeath; ii++){ */
     for(jj=1; jj<= nlstate+ndeath; jj++){  /*       for(jj=1; jj<= nlstate+ndeath; jj++){ */
      printf("%lf ",ps[ii][jj]);  /*         printf("ddd %lf ",ps[ii][jj]); */
    }  /*       } */
     printf("\n ");  /*       printf("\n "); */
     }  /*        } */
     printf("\n ");printf("%lf ",cov[2]);*/  /*        printf("\n ");printf("%lf ",cov[2]); */
 /*         /*
   for(i=1; i<= npar; i++) printf("%f ",x[i]);        for(i=1; i<= npar; i++) printf("%f ",x[i]);
   goto end;*/        goto end;*/
     return ps;      return ps;
 }  }
   
Line 1181  double func( double *x) Line 1244  double func( double *x)
         } /* end mult */          } /* end mult */
               
         /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */          /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */
         /* But now since version 0.9 we anticipate for bias and large stepm.          /* But now since version 0.9 we anticipate for bias at large stepm.
          * If stepm is larger than one month (smallest stepm) and if the exact delay            * If stepm is larger than one month (smallest stepm) and if the exact delay 
          * (in months) between two waves is not a multiple of stepm, we rounded to            * (in months) between two waves is not a multiple of stepm, we rounded to 
          * the nearest (and in case of equal distance, to the lowest) interval but now           * the nearest (and in case of equal distance, to the lowest) interval but now
          * we keep into memory the bias bh[mi][i] and also the previous matrix product           * we keep into memory the bias bh[mi][i] and also the previous matrix product
          * (i.e to dh[mi][i]-1) saved in 'savm'. The we inter(extra)polate the           * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the
          * probability in order to take into account the bias as a fraction of the way           * probability in order to take into account the bias as a fraction of the way
          * from savm to out if bh is neagtive or even beyond if bh is positive. bh varies           * from savm to out if bh is negative or even beyond if bh is positive. bh varies
          * -stepm/2 to stepm/2 .           * -stepm/2 to stepm/2 .
          * For stepm=1 the results are the same as for previous versions of Imach.           * For stepm=1 the results are the same as for previous versions of Imach.
          * For stepm > 1 the results are less biased than in previous versions.            * For stepm > 1 the results are less biased than in previous versions. 
Line 1196  double func( double *x) Line 1259  double func( double *x)
         s1=s[mw[mi][i]][i];          s1=s[mw[mi][i]][i];
         s2=s[mw[mi+1][i]][i];          s2=s[mw[mi+1][i]][i];
         bbh=(double)bh[mi][i]/(double)stepm;           bbh=(double)bh[mi][i]/(double)stepm; 
         /* bias is positive if real duration          /* bias bh is positive if real duration
          * is higher than the multiple of stepm and negative otherwise.           * is higher than the multiple of stepm and negative otherwise.
          */           */
         /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/          /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/
         if( s2 > nlstate){           if( s2 > nlstate){ 
           /* i.e. if s2 is a death state and if the date of death is known then the contribution            /* i.e. if s2 is a death state and if the date of death is known then the contribution
              to the likelihood is the probability to die between last step unit time and current                to the likelihood is the probability to die between last step unit time and current 
              step unit time, which is also the differences between probability to die before dh                step unit time, which is also equal to probability to die before dh 
              and probability to die before dh-stepm .                minus probability to die before dh-stepm . 
              In version up to 0.92 likelihood was computed               In version up to 0.92 likelihood was computed
         as if date of death was unknown. Death was treated as any other          as if date of death was unknown. Death was treated as any other
         health state: the date of the interview describes the actual state          health state: the date of the interview describes the actual state
Line 1500  void mlikeli(FILE *ficres,double p[], in Line 1563  void mlikeli(FILE *ficres,double p[], in
   double **xi;    double **xi;
   double fret;    double fret;
   double fretone; /* Only one call to likelihood */    double fretone; /* Only one call to likelihood */
   char filerespow[FILENAMELENGTH];    /*  char filerespow[FILENAMELENGTH];*/
   xi=matrix(1,npar,1,npar);    xi=matrix(1,npar,1,npar);
   for (i=1;i<=npar;i++)    for (i=1;i<=npar;i++)
     for (j=1;j<=npar;j++)      for (j=1;j<=npar;j++)
Line 1535  void hesscov(double **matcov, double p[] Line 1598  void hesscov(double **matcov, double p[]
   int i, j,jk;    int i, j,jk;
   int *indx;    int *indx;
   
   double hessii(double p[], double delta, int theta, double delti[]);    double hessii(double p[], double delta, int theta, double delti[],double (*func)(double []),int npar);
   double hessij(double p[], double delti[], int i, int j);    double hessij(double p[], double delti[], int i, int j,double (*func)(double []),int npar);
   void lubksb(double **a, int npar, int *indx, double b[]) ;    void lubksb(double **a, int npar, int *indx, double b[]) ;
   void ludcmp(double **a, int npar, int *indx, double *d) ;    void ludcmp(double **a, int npar, int *indx, double *d) ;
     double gompertz(double p[]);
   hess=matrix(1,npar,1,npar);    hess=matrix(1,npar,1,npar);
   
   printf("\nCalculation of the hessian matrix. Wait...\n");    printf("\nCalculation of the hessian matrix. Wait...\n");
Line 1547  void hesscov(double **matcov, double p[] Line 1610  void hesscov(double **matcov, double p[]
   for (i=1;i<=npar;i++){    for (i=1;i<=npar;i++){
     printf("%d",i);fflush(stdout);      printf("%d",i);fflush(stdout);
     fprintf(ficlog,"%d",i);fflush(ficlog);      fprintf(ficlog,"%d",i);fflush(ficlog);
     hess[i][i]=hessii(p,ftolhess,i,delti);     
     /*printf(" %f ",p[i]);*/       hess[i][i]=hessii(p,ftolhess,i,delti,func,npar);
     /*printf(" %lf ",hess[i][i]);*/      
       /*  printf(" %f ",p[i]);
           printf(" %lf %lf %lf",hess[i][i],ftolhess,delti[i]);*/
   }    }
       
   for (i=1;i<=npar;i++) {    for (i=1;i<=npar;i++) {
Line 1557  void hesscov(double **matcov, double p[] Line 1622  void hesscov(double **matcov, double p[]
       if (j>i) {         if (j>i) { 
         printf(".%d%d",i,j);fflush(stdout);          printf(".%d%d",i,j);fflush(stdout);
         fprintf(ficlog,".%d%d",i,j);fflush(ficlog);          fprintf(ficlog,".%d%d",i,j);fflush(ficlog);
         hess[i][j]=hessij(p,delti,i,j);          hess[i][j]=hessij(p,delti,i,j,func,npar);
           
         hess[j][i]=hess[i][j];              hess[j][i]=hess[i][j];    
         /*printf(" %lf ",hess[i][j]);*/          /*printf(" %lf ",hess[i][j]);*/
       }        }
Line 1628  void hesscov(double **matcov, double p[] Line 1694  void hesscov(double **matcov, double p[]
 }  }
   
 /*************** hessian matrix ****************/  /*************** hessian matrix ****************/
 double hessii( double x[], double delta, int theta, double delti[])  double hessii(double x[], double delta, int theta, double delti[], double (*func)(double []), int npar)
 {  {
   int i;    int i;
   int l=1, lmax=20;    int l=1, lmax=20;
   double k1,k2;    double k1,k2;
   double p2[NPARMAX+1];    double p2[NPARMAX+1];
   double res;    double res;
   double delt, delts, nkhi=10.,nkhif=1., khi=1.e-4;    double delt=0.0001, delts, nkhi=10.,nkhif=1., khi=1.e-4;
   double fx;    double fx;
   int k=0,kmax=10;    int k=0,kmax=10;
   double l1;    double l1;
Line 1675  double hessii( double x[], double delta, Line 1741  double hessii( double x[], double delta,
       
 }  }
   
 double hessij( double x[], double delti[], int thetai,int thetaj)  double hessij( double x[], double delti[], int thetai,int thetaj,double (*func)(double []),int npar)
 {  {
   int i;    int i;
   int l=1, l1, lmax=20;    int l=1, l1, lmax=20;
Line 2291  void evsij(char fileres[], double ***eij Line 2357  void evsij(char fileres[], double ***eij
   
     hf=hstepm*stepm/YEARM;  /* Duration of hstepm expressed in year unit. */      hf=hstepm*stepm/YEARM;  /* Duration of hstepm expressed in year unit. */
   
     /* Computing Variances of health expectancies */      /* Computing  Variances of health expectancies */
   
      for(theta=1; theta <=npar; theta++){       for(theta=1; theta <=npar; theta++){
       for(i=1; i<=npar; i++){         for(i=1; i<=npar; i++){ 
Line 2845  void varprob(char optionfilefiname[], do Line 2911  void varprob(char optionfilefiname[], do
   fprintf(fichtm,"\n<li><h4> Computing and drawing one step probabilities with their confidence intervals</h4></li>\n");    fprintf(fichtm,"\n<li><h4> Computing and drawing one step probabilities with their confidence intervals</h4></li>\n");
   fprintf(fichtm,"\n");    fprintf(fichtm,"\n");
   
   fprintf(fichtm,"\n<li><h4> <a href=\"%s\">Computing matrix of variance-covariance of step probabilities</a></h4></li>\n",optionfilehtmcov);    fprintf(fichtm,"\n<li><h4> <a href=\"%s\">Matrix of variance-covariance of pairs of step probabilities (drawings)</a></h4></li>\n",optionfilehtmcov);
   fprintf(fichtmcov,"\n<h4>Computing matrix of variance-covariance of step probabilities</h4>\n\    fprintf(fichtmcov,"\n<h4>Matrix of variance-covariance of pairs of step probabilities</h4>\n\
   file %s<br>\n",optionfilehtmcov);    file %s<br>\n",optionfilehtmcov);
   fprintf(fichtmcov,"\nEllipsoids of confidence centered on point (p<inf>ij</inf>, p<inf>kl</inf>) are estimated\    fprintf(fichtmcov,"\nEllipsoids of confidence centered on point (p<inf>ij</inf>, p<inf>kl</inf>) are estimated\
 and drawn. It helps understanding how is the covariance between two incidences.\  and drawn. It helps understanding how is the covariance between two incidences.\
Line 2879  To be simple, these graphs help to under Line 2945  To be simple, these graphs help to under
         fprintf(ficgp, "**********\n#\n");          fprintf(ficgp, "**********\n#\n");
                   
                   
         fprintf(fichtm, "\n<hr  size=\"2\" color=\"#EC5E5E\">********** Variable ");           fprintf(fichtmcov, "\n<hr  size=\"2\" color=\"#EC5E5E\">********** Variable "); 
         for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);          for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
         fprintf(fichtm, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");          fprintf(fichtmcov, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");
                   
         fprintf(ficresprobcor, "\n#********** Variable ");              fprintf(ficresprobcor, "\n#********** Variable ");    
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);          for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
Line 3090  void printinghtml(char fileres[], char t Line 3156  void printinghtml(char fileres[], char t
                   double jprev1, double mprev1,double anprev1, \                    double jprev1, double mprev1,double anprev1, \
                   double jprev2, double mprev2,double anprev2){                    double jprev2, double mprev2,double anprev2){
   int jj1, k1, i1, cpt;    int jj1, k1, i1, cpt;
   /*char optionfilehtm[FILENAMELENGTH];*/  
 /*   if((fichtm=fopen(optionfilehtm,"a"))==NULL)    { */  
 /*     printf("Problem with %s \n",optionfilehtm), exit(0); */  
 /*     fprintf(ficlog,"Problem with %s \n",optionfilehtm), exit(0); */  
 /*   } */  
   
    fprintf(fichtm,"<ul><li><h4>Result files (first order: no variance)</h4>\n \     fprintf(fichtm,"<ul><li><h4>Result files (first order: no variance)</h4>\n \
  - Observed prevalence in each state (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> <br>\n \   - Observed prevalence in each state (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> <br>\n ",
  - Estimated transition probabilities over %d (stepm) months: <a href=\"%s\">%s</a><br>\n \             jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirf2(fileres,"p"),subdirf2(fileres,"p"));
  - Stable prevalence in each health state: <a href=\"%s\">%s</a> <br>\n \     fprintf(fichtm,"\
    - Estimated transition probabilities over %d (stepm) months: <a href=\"%s\">%s</a><br>\n ",
              stepm,subdirf2(fileres,"pij"),subdirf2(fileres,"pij"));
      fprintf(fichtm,"\
    - Stable prevalence in each health state: <a href=\"%s\">%s</a> <br>\n",
              subdirf2(fileres,"pl"),subdirf2(fileres,"pl"));
      fprintf(fichtm,"\
  - Life expectancies by age and initial health status (estepm=%2d months): \   - Life expectancies by age and initial health status (estepm=%2d months): \
    <a href=\"%s\">%s</a> <br>\n</li>", \     <a href=\"%s\">%s</a> <br>\n</li>",
            jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirf2(fileres,"p"),subdirf2(fileres,"p"),\  
            stepm,subdirf2(fileres,"pij"),subdirf2(fileres,"pij"),\  
            subdirf2(fileres,"pl"),subdirf2(fileres,"pl"),\  
            estepm,subdirf2(fileres,"e"),subdirf2(fileres,"e"));             estepm,subdirf2(fileres,"e"),subdirf2(fileres,"e"));
   
 fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>");  fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>");
Line 3138  fprintf(fichtm," \n<ul><li><b>Graphs</b> Line 3202  fprintf(fichtm," \n<ul><li><b>Graphs</b>
         fprintf(fichtm,"\n<br>- Health life expectancies by age and initial health state (%d): %s%d%d.png <br> \          fprintf(fichtm,"\n<br>- Health life expectancies by age and initial health state (%d): %s%d%d.png <br> \
 <img src=\"%s%d%d.png\">",cpt,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1);  <img src=\"%s%d%d.png\">",cpt,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1);
      }       }
      fprintf(fichtm,"\n<br>- Total life expectancy by age and \  
 health expectancies in states (1) and (2): %s%d.png<br>\  
 <img src=\"%s%d.png\">",subdirf2(optionfilefiname,"e"),jj1,subdirf2(optionfilefiname,"e"),jj1);  
    } /* end i1 */     } /* end i1 */
  }/* End k1 */   }/* End k1 */
  fprintf(fichtm,"</ul>");   fprintf(fichtm,"</ul>");
   
   
  fprintf(fichtm,"\n<br><li><h4> Result files (second order: variances)</h4>\n\   fprintf(fichtm,"\
  - Parameter file with estimated parameters and covariance matrix: <a href=\"%s\">%s</a> <br>\n\  \n<br><li><h4> Result files (second order: variances)</h4>\n\
  - Variance of one-step probabilities: <a href=\"%s\">%s</a> <br>\n\   - Parameter file with estimated parameters and covariance matrix: <a href=\"%s\">%s</a> <br>\n", rfileres,rfileres);
  - Variance-covariance of one-step probabilities: <a href=\"%s\">%s</a> <br>\n\  
  - Correlation matrix of one-step probabilities: <a href=\"%s\">%s</a> <br>\n\   fprintf(fichtm," - Variance of one-step probabilities: <a href=\"%s\">%s</a> <br>\n",
  - Variances and covariances of life expectancies by age and initial health status (estepm=%d months): <a href=\"%s\">%s</a><br>\n\           subdirf2(fileres,"prob"),subdirf2(fileres,"prob"));
  - Health expectancies with their variances (no covariance): <a href=\"%s\">%s</a> <br>\n\   fprintf(fichtm,"\
    - Variance-covariance of one-step probabilities: <a href=\"%s\">%s</a> <br>\n",
            subdirf2(fileres,"probcov"),subdirf2(fileres,"probcov"));
   
    fprintf(fichtm,"\
    - Correlation matrix of one-step probabilities: <a href=\"%s\">%s</a> <br>\n",
            subdirf2(fileres,"probcor"),subdirf2(fileres,"probcor"));
    fprintf(fichtm,"\
    - Variances and covariances of life expectancies by age and initial health status (estepm=%d months): <a href=\"%s\">%s</a><br>\n",
            estepm, subdirf2(fileres,"v"),subdirf2(fileres,"v"));
    fprintf(fichtm,"\
    - Health expectancies with their variances (no covariance): <a href=\"%s\">%s</a> <br>\n",
            subdirf2(fileres,"t"),subdirf2(fileres,"t"));
    fprintf(fichtm,"\
  - Standard deviation of stable prevalences: <a href=\"%s\">%s</a> <br>\n",\   - Standard deviation of stable prevalences: <a href=\"%s\">%s</a> <br>\n",\
          rfileres,rfileres,\  
          subdirf2(fileres,"prob"),subdirf2(fileres,"prob"),\  
          subdirf2(fileres,"probcov"),subdirf2(fileres,"probcov"),\  
          subdirf2(fileres,"probcor"),subdirf2(fileres,"probcor"),\  
          estepm, subdirf2(fileres,"v"),subdirf2(fileres,"v"),\  
          subdirf2(fileres,"t"),subdirf2(fileres,"t"),\  
          subdirf2(fileres,"vpl"),subdirf2(fileres,"vpl"));           subdirf2(fileres,"vpl"),subdirf2(fileres,"vpl"));
   
 /*  if(popforecast==1) fprintf(fichtm,"\n */  /*  if(popforecast==1) fprintf(fichtm,"\n */
Line 3168  health expectancies in states (1) and (2 Line 3236  health expectancies in states (1) and (2
 /*      <br>",fileres,fileres,fileres,fileres); */  /*      <br>",fileres,fileres,fileres,fileres); */
 /*  else  */  /*  else  */
 /*    fprintf(fichtm,"\n No population forecast: popforecast = %d (instead of 1) or stepm = %d (instead of 1) or model=%s (instead of .)<br><br></li>\n",popforecast, stepm, model); */  /*    fprintf(fichtm,"\n No population forecast: popforecast = %d (instead of 1) or stepm = %d (instead of 1) or model=%s (instead of .)<br><br></li>\n",popforecast, stepm, model); */
 fprintf(fichtm," <ul><li><b>Graphs</b></li><p>");   fflush(fichtm);
    fprintf(fichtm," <ul><li><b>Graphs</b></li><p>");
   
  m=cptcoveff;   m=cptcoveff;
  if (cptcovn < 1) {m=1;ncodemax[1]=1;}   if (cptcovn < 1) {m=1;ncodemax[1]=1;}
Line 3184  fprintf(fichtm," <ul><li><b>Graphs</b></ Line 3253  fprintf(fichtm," <ul><li><b>Graphs</b></
        fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");         fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
      }       }
      for(cpt=1; cpt<=nlstate;cpt++) {       for(cpt=1; cpt<=nlstate;cpt++) {
        fprintf(fichtm,"<br>- Observed and period prevalence (with confident\         fprintf(fichtm,"<br>- Observed (cross-sectional) and period (incidence based) \
 interval) in state (%d): %s%d%d.png <br>\  prevalence (with 95%% confidence interval) in state (%d): %s%d%d.png <br>\
 <img src=\"%s%d%d.png\">",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1);    <img src=\"%s%d%d.png\">",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1);  
      }       }
        fprintf(fichtm,"\n<br>- Total life expectancy by age and \
   health expectancies in states (1) and (2): %s%d.png<br>\
   <img src=\"%s%d.png\">",subdirf2(optionfilefiname,"e"),jj1,subdirf2(optionfilefiname,"e"),jj1);
    } /* end i1 */     } /* end i1 */
  }/* End k1 */   }/* End k1 */
  fprintf(fichtm,"</ul>");   fprintf(fichtm,"</ul>");
Line 3842  void prwizard(int ncovmodel, int nlstate Line 3914  void prwizard(int ncovmodel, int nlstate
         } /* end k*/          } /* end k*/
       } /*end j */        } /*end j */
     } /* end i */      } /* end i */
   }    } /* end itimes */
   
 } /* end of prwizard */  } /* end of prwizard */
   /******************* Gompertz Likelihood ******************************/
   double gompertz(double x[])
   { 
     double A,B,L=0.0,sump=0.,num=0.;
     int i,n=0; /* n is the size of the sample */
     for (i=0;i<=imx-1 ; i++) {
       sump=sump+weight[i];
       /*    sump=sump+1;*/
       num=num+1;
     }
    
    
     /* for (i=0; i<=imx; i++) 
        if (wav[i]>0) printf("i=%d ageex=%lf agecens=%lf agedc=%lf cens=%d %d\n" ,i,ageexmed[i],agecens[i],agedc[i],cens[i],wav[i]);*/
   
     for (i=1;i<=imx ; i++)
       {
         if (cens[i]==1 & wav[i]>1)
           A=-x[1]/(x[2])*(exp(x[2]*(agecens[i]-agegomp))-exp(x[2]*(ageexmed[i]-agegomp)));
         
         if (cens[i]==0 & wav[i]>1)
           A=-x[1]/(x[2])*(exp(x[2]*(agedc[i]-agegomp))-exp(x[2]*(ageexmed[i]-agegomp)))
                +log(x[1]/YEARM)+x[2]*(agedc[i]-agegomp)+log(YEARM);  
         
         if (wav[i]>1 & agecens[i]>15) {
           L=L+A*weight[i];
           /*      printf("\ni=%d A=%f L=%lf x[1]=%lf x[2]=%lf ageex=%lf agecens=%lf cens=%d agedc=%lf weight=%lf\n",i,A,L,x[1],x[2],ageexmed[i]*12,agecens[i]*12,cens[i],agedc[i]*12,weight[i]);*/
         }
       }
   
    /*printf("x1=%2.9f x2=%2.9f x3=%2.9f L=%f\n",x[1],x[2],x[3],L);*/
    
     return -2*L*num/sump;
   }
   
   /******************* Printing html file ***********/
   void printinghtmlmort(char fileres[], char title[], char datafile[], int firstpass, \
                     int lastpass, int stepm, int weightopt, char model[],\
                     int imx,  double p[],double **matcov){
     int i;
   
     fprintf(fichtm,"<ul><li><h4>Result files </h4>\n Force of mortality. Parameters of the Gompertz fit (with confidence interval in brackets):<br>");
     fprintf(fichtm,"  mu(age) =%lf*exp(%lf*(age-%d)) per year<br><br>",p[1],p[2],agegomp);
     for (i=1;i<=2;i++) 
       fprintf(fichtm," p[%d] = %lf [%f ; %f]<br>\n",i,p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i]));
     fprintf(fichtm,"<br><br><img src=\"graphmort.png\">");
     fprintf(fichtm,"</ul>");
     fflush(fichtm);
   }
   
   /******************* Gnuplot file **************/
   void printinggnuplotmort(char fileres[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , char pathc[], double p[]){
   
     char dirfileres[132],optfileres[132];
     int m,cpt,k1,i,k,j,jk,k2,k3,ij,l;
     int ng;
   
   
     /*#ifdef windows */
     fprintf(ficgp,"cd \"%s\" \n",pathc);
       /*#endif */
   
   
     strcpy(dirfileres,optionfilefiname);
     strcpy(optfileres,"vpl");
     fprintf(ficgp,"set out \"graphmort.png\"\n "); 
     fprintf(ficgp,"set xlabel \"Age\"\n set ylabel \"Force of mortality (per year)\" \n "); 
     fprintf(ficgp, "set ter png small\n set log y\n"); 
     fprintf(ficgp, "set size 0.65,0.65\n");
     fprintf(ficgp,"plot [%d:100] %lf*exp(%lf*(x-%d))",agegomp,p[1],p[2],agegomp);
   
   } 
   
   
   
   
 /***********************************************/  /***********************************************/
Line 3855  int main(int argc, char *argv[]) Line 4001  int main(int argc, char *argv[])
 {  {
   int movingaverage(double ***probs, double bage,double fage, double ***mobaverage, int mobilav);    int movingaverage(double ***probs, double bage,double fage, double ***mobaverage, int mobilav);
   int i,j, k, n=MAXN,iter,m,size=100,cptcode, cptcod;    int i,j, k, n=MAXN,iter,m,size=100,cptcode, cptcod;
   int jj, imk;    int jj, ll, li, lj, lk, imk;
   int numlinepar=0; /* Current linenumber of parameter file */    int numlinepar=0; /* Current linenumber of parameter file */
     int itimes;
     int NDIM=2;
   
     char ca[32], cb[32], cc[32];
   /*  FILE *fichtm; *//* Html File */    /*  FILE *fichtm; *//* Html File */
   /* FILE *ficgp;*/ /*Gnuplot File */    /* FILE *ficgp;*/ /*Gnuplot File */
   double agedeb, agefin,hf;    double agedeb, agefin,hf;
Line 3871  int main(int argc, char *argv[]) Line 4021  int main(int argc, char *argv[])
   int *indx;    int *indx;
   char line[MAXLINE], linepar[MAXLINE];    char line[MAXLINE], linepar[MAXLINE];
   char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE],model[MAXLINE];    char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE],model[MAXLINE];
   char pathr[MAXLINE];     char pathr[MAXLINE], pathimach[MAXLINE]; 
   int firstobs=1, lastobs=10;    int firstobs=1, lastobs=10;
   int sdeb, sfin; /* Status at beginning and end */    int sdeb, sfin; /* Status at beginning and end */
   int c,  h , cpt,l;    int c,  h , cpt,l;
Line 3898  int main(int argc, char *argv[]) Line 4048  int main(int argc, char *argv[])
   double *epj, vepp;    double *epj, vepp;
   double kk1, kk2;    double kk1, kk2;
   double dateprev1, dateprev2,jproj1=1,mproj1=1,anproj1=2000,jproj2=1,mproj2=1,anproj2=2000;    double dateprev1, dateprev2,jproj1=1,mproj1=1,anproj1=2000,jproj2=1,mproj2=1,anproj2=2000;
     double **ximort;
   char *alph[]={"a","a","b","c","d","e"}, str[4];    char *alph[]={"a","a","b","c","d","e"}, str[4];
     int *dcwave;
   
   char z[1]="c", occ;    char z[1]="c", occ;
   
Line 3911  int main(int argc, char *argv[]) Line 4061  int main(int argc, char *argv[])
   
   long total_usecs;    long total_usecs;
     
   /*   setlocale (LC_ALL, ""); */
   /*   bindtextdomain (PACKAGE, LOCALEDIR); */
   /*   textdomain (PACKAGE); */
   /*   setlocale (LC_CTYPE, ""); */
   /*   setlocale (LC_MESSAGES, ""); */
   
   /*   gettimeofday(&start_time, (struct timezone*)0); */ /* at first time */    /*   gettimeofday(&start_time, (struct timezone*)0); */ /* at first time */
   (void) gettimeofday(&start_time,&tzp);    (void) gettimeofday(&start_time,&tzp);
   curr_time=start_time;    curr_time=start_time;
Line 3951  int main(int argc, char *argv[]) Line 4107  int main(int argc, char *argv[])
     printf("pathtot=%s, path=%s, optionfile=%s\n",pathtot,path,optionfile);*/      printf("pathtot=%s, path=%s, optionfile=%s\n",pathtot,path,optionfile);*/
   /* cutv(path,optionfile,pathtot,'\\');*/    /* cutv(path,optionfile,pathtot,'\\');*/
   
     split(argv[0],pathimach,optionfile,optionfilext,optionfilefiname);
    /*   strcpy(pathimach,argv[0]); */
   split(pathtot,path,optionfile,optionfilext,optionfilefiname);    split(pathtot,path,optionfile,optionfilext,optionfilefiname);
   printf("pathtot=%s,\npath=%s,\noptionfile=%s \noptionfilext=%s \noptionfilefiname=%s\n",pathtot,path,optionfile,optionfilext,optionfilefiname);    printf("pathimach=%s, pathtot=%s,\npath=%s,\noptionfile=%s \noptionfilext=%s \noptionfilefiname=%s\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname);
   chdir(path);    chdir(path);
   strcpy(command,"mkdir ");    strcpy(command,"mkdir ");
   strcat(command,optionfilefiname);    strcat(command,optionfilefiname);
Line 3977  int main(int argc, char *argv[]) Line 4135  int main(int argc, char *argv[])
   }    }
   fprintf(ficlog,"Log filename:%s\n",filelog);    fprintf(ficlog,"Log filename:%s\n",filelog);
   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: \n");
   fprintf(ficlog,"pathtot=%s\n\    fprintf(ficlog,"pathimach=%s\npathtot=%s\n\
  path=%s \n\   path=%s \n\
  optionfile=%s\n\   optionfile=%s\n\
  optionfilext=%s\n\   optionfilext=%s\n\
  optionfilefiname=%s\n",pathtot,path,optionfile,optionfilext,optionfilefiname);   optionfilefiname=%s\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname);
   
   printf("Local time (at start):%s",strstart);    printf("Local time (at start):%s",strstart);
   fprintf(ficlog,"Local time (at start): %s",strstart);    fprintf(ficlog,"Local time (at start): %s",strstart);
Line 4050  int main(int argc, char *argv[]) Line 4208  int main(int argc, char *argv[])
   
   ncovmodel=2+cptcovn; /*Number of variables = cptcovn + intercept + age */    ncovmodel=2+cptcovn; /*Number of variables = cptcovn + intercept + age */
   nvar=ncovmodel-1; /* Suppressing age as a basic covariate */    nvar=ncovmodel-1; /* Suppressing age as a basic covariate */
      npar= (nlstate+ndeath-1)*nlstate*ncovmodel; /* Number of parameters*/
   
     delti3= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
     delti=delti3[1][1];
     /*delti=vector(1,npar); *//* Scale of each paramater (output from hesscov)*/
   if(mle==-1){ /* Print a wizard for help writing covariance matrix */    if(mle==-1){ /* Print a wizard for help writing covariance matrix */
     prwizard(ncovmodel, nlstate, ndeath, model, ficparo);      prwizard(ncovmodel, nlstate, ndeath, model, ficparo);
     printf(" You choose mle=-1, look at file %s for a template of covariance matrix \n",filereso);      printf(" You choose mle=-1, look at file %s for a template of covariance matrix \n",filereso);
     fprintf(ficlog," You choose mle=-1, look at file %s for a template of covariance matrix \n",filereso);      fprintf(ficlog," You choose mle=-1, look at file %s for a template of covariance matrix \n",filereso);
       free_ma3x(delti3,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); 
     fclose (ficparo);      fclose (ficparo);
     fclose (ficlog);      fclose (ficlog);
     exit(0);      exit(0);
   }    }
   /* Read guess parameters */    else if(mle==-3) {
   /* Reads comments: lines beginning with '#' */      prwizard(ncovmodel, nlstate, ndeath, model, ficparo);
   while((c=getc(ficpar))=='#' && c!= EOF){      printf(" You choose mle=-3, look at file %s for a template of covariance matrix \n",filereso);
     ungetc(c,ficpar);      fprintf(ficlog," You choose mle=-3, look at file %s for a template of covariance matrix \n",filereso);
     fgets(line, MAXLINE, ficpar);      param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
     numlinepar++;      matcov=matrix(1,npar,1,npar);
     puts(line);  
     fputs(line,ficparo);  
     fputs(line,ficlog);  
   }    }
   ungetc(c,ficpar);    else{
       /* Read guess parameters */
   param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);      /* Reads comments: lines beginning with '#' */
   for(i=1; i <=nlstate; i++){      while((c=getc(ficpar))=='#' && c!= EOF){
     j=0;        ungetc(c,ficpar);
     for(jj=1; jj <=nlstate+ndeath; jj++){        fgets(line, MAXLINE, ficpar);
       if(jj==i) continue;  
       j++;  
       fscanf(ficpar,"%1d%1d",&i1,&j1);  
       if ((i1 != i) && (j1 != j)){  
         printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);  
         exit(1);  
       }  
       fprintf(ficparo,"%1d%1d",i1,j1);  
       if(mle==1)  
         printf("%1d%1d",i,j);  
       fprintf(ficlog,"%1d%1d",i,j);  
       for(k=1; k<=ncovmodel;k++){  
         fscanf(ficpar," %lf",&param[i][j][k]);  
         if(mle==1){  
           printf(" %lf",param[i][j][k]);  
           fprintf(ficlog," %lf",param[i][j][k]);  
         }  
         else  
           fprintf(ficlog," %lf",param[i][j][k]);  
         fprintf(ficparo," %lf",param[i][j][k]);  
       }  
       fscanf(ficpar,"\n");  
       numlinepar++;        numlinepar++;
       if(mle==1)        puts(line);
         printf("\n");        fputs(line,ficparo);
       fprintf(ficlog,"\n");        fputs(line,ficlog);
       fprintf(ficparo,"\n");  
     }      }
   }        ungetc(c,ficpar);
   fflush(ficlog);      
       param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
       for(i=1; i <=nlstate; i++){
         j=0;
         for(jj=1; jj <=nlstate+ndeath; jj++){
           if(jj==i) continue;
           j++;
           fscanf(ficpar,"%1d%1d",&i1,&j1);
           if ((i1 != i) && (j1 != j)){
             printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);
             exit(1);
           }
           fprintf(ficparo,"%1d%1d",i1,j1);
           if(mle==1)
             printf("%1d%1d",i,j);
           fprintf(ficlog,"%1d%1d",i,j);
           for(k=1; k<=ncovmodel;k++){
             fscanf(ficpar," %lf",&param[i][j][k]);
             if(mle==1){
               printf(" %lf",param[i][j][k]);
               fprintf(ficlog," %lf",param[i][j][k]);
             }
             else
               fprintf(ficlog," %lf",param[i][j][k]);
             fprintf(ficparo," %lf",param[i][j][k]);
           }
           fscanf(ficpar,"\n");
           numlinepar++;
           if(mle==1)
             printf("\n");
           fprintf(ficlog,"\n");
           fprintf(ficparo,"\n");
         }
       }  
       fflush(ficlog);
   
   npar= (nlstate+ndeath-1)*nlstate*ncovmodel; /* Number of parameters*/  
   
   p=param[1][1];      p=param[1][1];
         
   /* Reads comments: lines beginning with '#' */      /* Reads comments: lines beginning with '#' */
   while((c=getc(ficpar))=='#' && c!= EOF){      while((c=getc(ficpar))=='#' && c!= EOF){
         ungetc(c,ficpar);
         fgets(line, MAXLINE, ficpar);
         numlinepar++;
         puts(line);
         fputs(line,ficparo);
         fputs(line,ficlog);
       }
     ungetc(c,ficpar);      ungetc(c,ficpar);
     fgets(line, MAXLINE, ficpar);  
     numlinepar++;  
     puts(line);  
     fputs(line,ficparo);  
     fputs(line,ficlog);  
   }  
   ungetc(c,ficpar);  
   
   delti3= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);      for(i=1; i <=nlstate; i++){
   /* delti=vector(1,npar); *//* Scale of each paramater (output from hesscov) */        for(j=1; j <=nlstate+ndeath-1; j++){
   for(i=1; i <=nlstate; i++){          fscanf(ficpar,"%1d%1d",&i1,&j1);
     for(j=1; j <=nlstate+ndeath-1; j++){          if ((i1-i)*(j1-j)!=0){
       fscanf(ficpar,"%1d%1d",&i1,&j1);            printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);
       if ((i1-i)*(j1-j)!=0){            exit(1);
         printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);          }
         exit(1);          printf("%1d%1d",i,j);
       }          fprintf(ficparo,"%1d%1d",i1,j1);
       printf("%1d%1d",i,j);          fprintf(ficlog,"%1d%1d",i1,j1);
       fprintf(ficparo,"%1d%1d",i1,j1);          for(k=1; k<=ncovmodel;k++){
       fprintf(ficlog,"%1d%1d",i1,j1);            fscanf(ficpar,"%le",&delti3[i][j][k]);
       for(k=1; k<=ncovmodel;k++){            printf(" %le",delti3[i][j][k]);
         fscanf(ficpar,"%le",&delti3[i][j][k]);            fprintf(ficparo," %le",delti3[i][j][k]);
         printf(" %le",delti3[i][j][k]);            fprintf(ficlog," %le",delti3[i][j][k]);
         fprintf(ficparo," %le",delti3[i][j][k]);          }
         fprintf(ficlog," %le",delti3[i][j][k]);          fscanf(ficpar,"\n");
           numlinepar++;
           printf("\n");
           fprintf(ficparo,"\n");
           fprintf(ficlog,"\n");
       }        }
       fscanf(ficpar,"\n");  
       numlinepar++;  
       printf("\n");  
       fprintf(ficparo,"\n");  
       fprintf(ficlog,"\n");  
     }      }
   }      fflush(ficlog);
   fflush(ficlog);  
   
   delti=delti3[1][1];      delti=delti3[1][1];
   
   
   /* free_ma3x(delti3,1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); */ /* Hasn't to to freed here otherwise delti is no more allocated */      /* free_ma3x(delti3,1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); */ /* Hasn't to to freed here otherwise delti is no more allocated */
       
   /* Reads comments: lines beginning with '#' */      /* Reads comments: lines beginning with '#' */
   while((c=getc(ficpar))=='#' && c!= EOF){      while((c=getc(ficpar))=='#' && c!= EOF){
         ungetc(c,ficpar);
         fgets(line, MAXLINE, ficpar);
         numlinepar++;
         puts(line);
         fputs(line,ficparo);
         fputs(line,ficlog);
       }
     ungetc(c,ficpar);      ungetc(c,ficpar);
     fgets(line, MAXLINE, ficpar);  
     numlinepar++;  
     puts(line);  
     fputs(line,ficparo);  
     fputs(line,ficlog);  
   }  
   ungetc(c,ficpar);  
       
   matcov=matrix(1,npar,1,npar);      matcov=matrix(1,npar,1,npar);
   for(i=1; i <=npar; i++){      for(i=1; i <=npar; i++){
     fscanf(ficpar,"%s",&str);        fscanf(ficpar,"%s",&str);
     if(mle==1)        if(mle==1)
       printf("%s",str);          printf("%s",str);
     fprintf(ficlog,"%s",str);        fprintf(ficlog,"%s",str);
     fprintf(ficparo,"%s",str);        fprintf(ficparo,"%s",str);
     for(j=1; j <=i; j++){        for(j=1; j <=i; j++){
       fscanf(ficpar," %le",&matcov[i][j]);          fscanf(ficpar," %le",&matcov[i][j]);
       if(mle==1){          if(mle==1){
         printf(" %.5le",matcov[i][j]);            printf(" %.5le",matcov[i][j]);
           }
           fprintf(ficlog," %.5le",matcov[i][j]);
           fprintf(ficparo," %.5le",matcov[i][j]);
       }        }
       fprintf(ficlog," %.5le",matcov[i][j]);        fscanf(ficpar,"\n");
       fprintf(ficparo," %.5le",matcov[i][j]);        numlinepar++;
         if(mle==1)
           printf("\n");
         fprintf(ficlog,"\n");
         fprintf(ficparo,"\n");
     }      }
     fscanf(ficpar,"\n");      for(i=1; i <=npar; i++)
     numlinepar++;        for(j=i+1;j<=npar;j++)
           matcov[i][j]=matcov[j][i];
       
     if(mle==1)      if(mle==1)
       printf("\n");        printf("\n");
     fprintf(ficlog,"\n");      fprintf(ficlog,"\n");
     fprintf(ficparo,"\n");  
   }  
   for(i=1; i <=npar; i++)  
     for(j=i+1;j<=npar;j++)  
       matcov[i][j]=matcov[j][i];  
      
   if(mle==1)  
     printf("\n");  
   fprintf(ficlog,"\n");  
   
   fflush(ficlog);  
   
   /*-------- Rewriting paramater file ----------*/  
   strcpy(rfileres,"r");    /* "Rparameterfile */  
   strcat(rfileres,optionfilefiname);    /* Parameter file first name*/  
   strcat(rfileres,".");    /* */  
   strcat(rfileres,optionfilext);    /* Other files have txt extension */  
   if((ficres =fopen(rfileres,"w"))==NULL) {  
     printf("Problem writing new parameter file: %s\n", fileres);goto end;  
     fprintf(ficlog,"Problem writing new parameter file: %s\n", fileres);goto end;  
   }  
   fprintf(ficres,"#%s\n",version);  
           
       fflush(ficlog);
       
       /*-------- Rewriting parameter file ----------*/
       strcpy(rfileres,"r");    /* "Rparameterfile */
       strcat(rfileres,optionfilefiname);    /* Parameter file first name*/
       strcat(rfileres,".");    /* */
       strcat(rfileres,optionfilext);    /* Other files have txt extension */
       if((ficres =fopen(rfileres,"w"))==NULL) {
         printf("Problem writing new parameter file: %s\n", fileres);goto end;
         fprintf(ficlog,"Problem writing new parameter file: %s\n", fileres);goto end;
       }
       fprintf(ficres,"#%s\n",version);
     }    /* End of mle != -3 */
   
   /*-------- data file ----------*/    /*-------- data file ----------*/
   if((fic=fopen(datafile,"r"))==NULL)    {    if((fic=fopen(datafile,"r"))==NULL)    {
     printf("Problem with datafile: %s\n", datafile);goto end;      printf("Problem with datafile: %s\n", datafile);goto end;
Line 4234  int main(int argc, char *argv[]) Line 4403  int main(int argc, char *argv[])
   i=1;    i=1;
   while (fgets(line, MAXLINE, fic) != NULL)    {    while (fgets(line, MAXLINE, fic) != NULL)    {
     if ((i >= firstobs) && (i <=lastobs)) {      if ((i >= firstobs) && (i <=lastobs)) {
                 for(j=0; line[j] != '\n';j++){  /* Untabifies line */
           if(line[j] == '\t')
             line[j] = ' ';
         }
       for (j=maxwav;j>=1;j--){        for (j=maxwav;j>=1;j--){
         cutv(stra, strb,line,' '); s[j][i]=atoi(strb);           cutv(stra, strb,line,' '); s[j][i]=atoi(strb); 
         strcpy(line,stra);          strcpy(line,stra);
Line 4457  int main(int argc, char *argv[]) Line 4629  int main(int argc, char *argv[])
   
 }*/  }*/
   
   
   printf("Total number of individuals= %d, Agemin = %.2f, Agemax= %.2f\n\n", imx, agemin, agemax);    printf("Total number of individuals= %d, Agemin = %.2f, Agemax= %.2f\n\n", imx, agemin, agemax);
   fprintf(ficlog,"Total number of individuals= %d, Agemin = %.2f, Agemax= %.2f\n\n", imx, agemin, agemax);     fprintf(ficlog,"Total number of individuals= %d, Agemin = %.2f, Agemax= %.2f\n\n", imx, agemin, agemax); 
   
     agegomp=(int)agemin;
   free_vector(severity,1,maxwav);    free_vector(severity,1,maxwav);
   free_imatrix(outcome,1,maxwav+1,1,n);    free_imatrix(outcome,1,maxwav+1,1,n);
   free_vector(moisnais,1,n);    free_vector(moisnais,1,n);
Line 4513  int main(int argc, char *argv[]) Line 4687  int main(int argc, char *argv[])
           
   /*------------ gnuplot -------------*/    /*------------ gnuplot -------------*/
   strcpy(optionfilegnuplot,optionfilefiname);    strcpy(optionfilegnuplot,optionfilefiname);
     if(mle==-3)
       strcat(optionfilegnuplot,"-mort");
   strcat(optionfilegnuplot,".gp");    strcat(optionfilegnuplot,".gp");
   
   if((ficgp=fopen(optionfilegnuplot,"w"))==NULL) {    if((ficgp=fopen(optionfilegnuplot,"w"))==NULL) {
     printf("Problem with file %s",optionfilegnuplot);      printf("Problem with file %s",optionfilegnuplot);
   }    }
Line 4526  int main(int argc, char *argv[]) Line 4703  int main(int argc, char *argv[])
   /*--------- index.htm --------*/    /*--------- index.htm --------*/
   
   strcpy(optionfilehtm,optionfilefiname); /* Main html file */    strcpy(optionfilehtm,optionfilefiname); /* Main html file */
     if(mle==-3)
       strcat(optionfilehtm,"-mort");
   strcat(optionfilehtm,".htm");    strcat(optionfilehtm,".htm");
   if((fichtm=fopen(optionfilehtm,"w"))==NULL)    {    if((fichtm=fopen(optionfilehtm,"w"))==NULL)    {
     printf("Problem with %s \n",optionfilehtm), exit(0);      printf("Problem with %s \n",optionfilehtm), exit(0);
Line 4583  Interval (in months) between two waves: Line 4762  Interval (in months) between two waves:
   p=param[1][1]; /* *(*(*(param +1)+1)+0) */    p=param[1][1]; /* *(*(*(param +1)+1)+0) */
   
   globpr=0; /* To get the number ipmx of contributions and the 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 */    if (mle==-3){
   printf("First Likeli=%12.6f ipmx=%ld sw=%12.6f",fretone,ipmx,sw);      ximort=matrix(1,NDIM,1,NDIM);
   for (k=1; k<=npar;k++)      cens=ivector(1,n);
     printf(" %d %8.5f",k,p[k]);      ageexmed=vector(1,n);
   printf("\n");      agecens=vector(1,n);
   globpr=1; /* to print the contributions */      dcwave=ivector(1,n);
   likelione(ficres, p, npar, nlstate, &globpr, &ipmx, &sw, &fretone, funcone); /* Prints the contributions to the likelihood */   
   printf("Second Likeli=%12.6f ipmx=%ld sw=%12.6f",fretone,ipmx,sw);      for (i=1; i<=imx; i++){
   for (k=1; k<=npar;k++)        dcwave[i]=-1;
     printf(" %d %8.5f",k,p[k]);        for (j=1; j<=lastpass; j++)
   printf("\n");          if (s[j][i]>nlstate) {
   if(mle>=1){ /* Could be 1 or 2 */            dcwave[i]=j;
     mlikeli(ficres,p, npar, ncovmodel, nlstate, ftol, func);            /*    printf("i=%d j=%d s=%d dcwave=%d\n",i,j, s[j][i],dcwave[i]);*/
             break;
           }
       }
   
       for (i=1; i<=imx; i++) {
         if (wav[i]>0){
           ageexmed[i]=agev[mw[1][i]][i];
           j=wav[i];agecens[i]=1.; 
           if (ageexmed[i]>1 & wav[i]>0) agecens[i]=agev[mw[j][i]][i];
           cens[i]=1;
           
           if (ageexmed[i]<1) cens[i]=-1;
           if (agedc[i]< AGESUP & agedc[i]>1 & dcwave[i]>firstpass & dcwave[i]<=lastpass) cens[i]=0 ;
         }
         else cens[i]=-1;
       }
       
       for (i=1;i<=NDIM;i++) {
         for (j=1;j<=NDIM;j++)
           ximort[i][j]=(i == j ? 1.0 : 0.0);
       }
   
       p[1]=0.1; p[2]=0.1;
       /*printf("%lf %lf", p[1], p[2]);*/
       
       
     printf("Powell\n");  fprintf(ficlog,"Powell\n");
     strcpy(filerespow,"pow-mort"); 
     strcat(filerespow,fileres);
     if((ficrespow=fopen(filerespow,"w"))==NULL) {
       printf("Problem with resultfile: %s\n", filerespow);
       fprintf(ficlog,"Problem with resultfile: %s\n", filerespow);
   }    }
     fprintf(ficrespow,"# Powell\n# iter -2*LL");
     /*  for (i=1;i<=nlstate;i++)
       for(j=1;j<=nlstate+ndeath;j++)
         if(j!=i)fprintf(ficrespow," p%1d%1d",i,j);
     */
     fprintf(ficrespow,"\n");
   
       powell(p,ximort,NDIM,ftol,&iter,&fret,gompertz);
       fclose(ficrespow);
           
   /*--------- results files --------------*/      hesscov(matcov, p, NDIM,delti, 1e-4, gompertz); 
   fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nlstate, ndeath, maxwav, weightopt,model);  
     
   
   jk=1;      for(i=1; i <=NDIM; i++)
   fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");        for(j=i+1;j<=NDIM;j++)
   printf("# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");          matcov[i][j]=matcov[j][i];
   fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");      
   for(i=1,jk=1; i <=nlstate; i++){      printf("\nCovariance matrix\n ");
     for(k=1; k <=(nlstate+ndeath); k++){      for(i=1; i <=NDIM; i++) {
       if (k != i)         for(j=1;j<=NDIM;j++){ 
         {          printf("%f ",matcov[i][j]);
         }
         printf("\n ");
       }
       
       printf("iter=%d MLE=%f Eq=%lf*exp(%lf*(age-%d))\n",iter,-gompertz(p),p[1],p[2],agegomp);
       for (i=1;i<=NDIM;i++) 
         printf("%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i]));
       replace_back_to_slash(pathc,path); /* Even gnuplot wants a / */
       printinggnuplotmort(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
       
       printinghtmlmort(fileres,title,datafile, firstpass, lastpass, \
                        stepm, weightopt,\
                        model,imx,p,matcov);
     } /* Endof if mle==-3 */
   
     else{ /* For mle >=1 */
     
       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++)
         printf(" %d %8.5f",k,p[k]);
       printf("\n");
       globpr=1; /* to print the contributions */
       likelione(ficres, p, npar, nlstate, &globpr, &ipmx, &sw, &fretone, funcone); /* Prints the contributions to the likelihood */
       printf("Second Likeli=%12.6f ipmx=%ld sw=%12.6f",fretone,ipmx,sw);
       for (k=1; k<=npar;k++)
         printf(" %d %8.5f",k,p[k]);
       printf("\n");
       if(mle>=1){ /* Could be 1 or 2 */
         mlikeli(ficres,p, npar, ncovmodel, nlstate, ftol, func);
       }
       
       /*--------- results files --------------*/
       fprintf(ficres,"title=%s datafile=%s lastobs=%d firstpass=%d lastpass=%d\nftol=%e stepm=%d ncovcol=%d nlstate=%d ndeath=%d maxwav=%d mle= 0 weight=%d\nmodel=%s\n", title, datafile, lastobs, firstpass,lastpass,ftol, stepm, ncovcol, nlstate, ndeath, maxwav, weightopt,model);
       
       
       fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");
       printf("# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");
       fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");
       for(i=1,jk=1; i <=nlstate; i++){
         for(k=1; k <=(nlstate+ndeath); k++){
           if (k != i) {
           printf("%d%d ",i,k);            printf("%d%d ",i,k);
           fprintf(ficlog,"%d%d ",i,k);            fprintf(ficlog,"%d%d ",i,k);
           fprintf(ficres,"%1d%1d ",i,k);            fprintf(ficres,"%1d%1d ",i,k);
Line 4623  Interval (in months) between two waves: Line 4883  Interval (in months) between two waves:
           fprintf(ficlog,"\n");            fprintf(ficlog,"\n");
           fprintf(ficres,"\n");            fprintf(ficres,"\n");
         }          }
         }
     }      }
   }      if(mle!=0){
   if(mle!=0){        /* Computing hessian and covariance matrix */
     /* Computing hessian and covariance matrix */        ftolhess=ftol; /* Usually correct */
     ftolhess=ftol; /* Usually correct */        hesscov(matcov, p, npar, delti, ftolhess, func);
     hesscov(matcov, p, npar, delti, ftolhess, func);      }
   }      fprintf(ficres,"# Scales (for hessian or gradient estimation)\n");
   fprintf(ficres,"# Scales (for hessian or gradient estimation)\n");      printf("# Scales (for hessian or gradient estimation)\n");
   printf("# Scales (for hessian or gradient estimation)\n");      fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");
   fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");      for(i=1,jk=1; i <=nlstate; i++){
   for(i=1,jk=1; i <=nlstate; i++){        for(j=1; j <=nlstate+ndeath; j++){
     for(j=1; j <=nlstate+ndeath; j++){          if (j!=i) {
       if (j!=i) {            fprintf(ficres,"%1d%1d",i,j);
         fprintf(ficres,"%1d%1d",i,j);            printf("%1d%1d",i,j);
         printf("%1d%1d",i,j);            fprintf(ficlog,"%1d%1d",i,j);
         fprintf(ficlog,"%1d%1d",i,j);            for(k=1; k<=ncovmodel;k++){
         for(k=1; k<=ncovmodel;k++){              printf(" %.5e",delti[jk]);
           printf(" %.5e",delti[jk]);              fprintf(ficlog," %.5e",delti[jk]);
           fprintf(ficlog," %.5e",delti[jk]);              fprintf(ficres," %.5e",delti[jk]);
           fprintf(ficres," %.5e",delti[jk]);              jk++;
           jk++;            }
             printf("\n");
             fprintf(ficlog,"\n");
             fprintf(ficres,"\n");
         }          }
         printf("\n");  
         fprintf(ficlog,"\n");  
         fprintf(ficres,"\n");  
       }        }
     }      }
   }      
          fprintf(ficres,"# Covariance matrix \n# 121 Var(a12)\n# 122 Cov(b12,a12) Var(b12)\n#   ...\n# 232 Cov(b23,a12)  Cov(b23,b12) ... Var (b23)\n");
   fprintf(ficres,"# Covariance matrix \n# 121 Var(a12)\n# 122 Cov(b12,a12) Var(b12)\n#   ...\n# 232 Cov(b23,a12)  Cov(b23,b12) ... Var (b23)\n");      if(mle>=1)
   if(mle==1)        printf("# Covariance matrix \n# 121 Var(a12)\n# 122 Cov(b12,a12) Var(b12)\n#   ...\n# 232 Cov(b23,a12)  Cov(b23,b12) ... Var (b23)\n");
     printf("# Covariance matrix \n# 121 Var(a12)\n# 122 Cov(b12,a12) Var(b12)\n#   ...\n# 232 Cov(b23,a12)  Cov(b23,b12) ... Var (b23)\n");      fprintf(ficlog,"# Covariance matrix \n# 121 Var(a12)\n# 122 Cov(b12,a12) Var(b12)\n#   ...\n# 232 Cov(b23,a12)  Cov(b23,b12) ... Var (b23)\n");
   fprintf(ficlog,"# Covariance matrix \n# 121 Var(a12)\n# 122 Cov(b12,a12) Var(b12)\n#   ...\n# 232 Cov(b23,a12)  Cov(b23,b12) ... Var (b23)\n");      /* # 121 Var(a12)\n\ */
   for(i=1,k=1;i<=npar;i++){      /* # 122 Cov(b12,a12) Var(b12)\n\ */
     /*  if (k>nlstate) k=1;      /* # 131 Cov(a13,a12) Cov(a13,b12, Var(a13)\n\ */
         i1=(i-1)/(ncovmodel*nlstate)+1;       /* # 132 Cov(b13,a12) Cov(b13,b12, Cov(b13,a13) Var(b13)\n\ */
         fprintf(ficres,"%s%d%d",alph[k],i1,tab[i]);      /* # 212 Cov(a21,a12) Cov(a21,b12, Cov(a21,a13) Cov(a21,b13) Var(a21)\n\ */
         printf("%s%d%d",alph[k],i1,tab[i]);      /* # 212 Cov(b21,a12) Cov(b21,b12, Cov(b21,a13) Cov(b21,b13) Cov(b21,a21) Var(b21)\n\ */
       /* # 232 Cov(a23,a12) Cov(a23,b12, Cov(a23,a13) Cov(a23,b13) Cov(a23,a21) Cov(a23,b21) Var(a23)\n\ */
       /* # 232 Cov(b23,a12) Cov(b23,b12) ... Var (b23)\n" */
       
       
       /* Just to have a covariance matrix which will be more understandable
          even is we still don't want to manage dictionary of variables
     */      */
     fprintf(ficres,"%3d",i);      for(itimes=1;itimes<=2;itimes++){
     if(mle==1)        jj=0;
       printf("%3d",i);        for(i=1; i <=nlstate; i++){
     fprintf(ficlog,"%3d",i);          for(j=1; j <=nlstate+ndeath; j++){
     for(j=1; j<=i;j++){            if(j==i) continue;
       fprintf(ficres," %.5e",matcov[i][j]);            for(k=1; k<=ncovmodel;k++){
       if(mle==1)              jj++;
         printf(" %.5e",matcov[i][j]);              ca[0]= k+'a'-1;ca[1]='\0';
       fprintf(ficlog," %.5e",matcov[i][j]);              if(itimes==1){
                 if(mle>=1)
                   printf("#%1d%1d%d",i,j,k);
                 fprintf(ficlog,"#%1d%1d%d",i,j,k);
                 fprintf(ficres,"#%1d%1d%d",i,j,k);
               }else{
                 if(mle>=1)
                   printf("%1d%1d%d",i,j,k);
                 fprintf(ficlog,"%1d%1d%d",i,j,k);
                 fprintf(ficres,"%1d%1d%d",i,j,k);
               }
               ll=0;
               for(li=1;li <=nlstate; li++){
                 for(lj=1;lj <=nlstate+ndeath; lj++){
                   if(lj==li) continue;
                   for(lk=1;lk<=ncovmodel;lk++){
                     ll++;
                     if(ll<=jj){
                       cb[0]= lk +'a'-1;cb[1]='\0';
                       if(ll<jj){
                         if(itimes==1){
                           if(mle>=1)
                             printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
                           fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
                           fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
                         }else{
                           if(mle>=1)
                             printf(" %.5e",matcov[jj][ll]); 
                           fprintf(ficlog," %.5e",matcov[jj][ll]); 
                           fprintf(ficres," %.5e",matcov[jj][ll]); 
                         }
                       }else{
                         if(itimes==1){
                           if(mle>=1)
                             printf(" Var(%s%1d%1d)",ca,i,j);
                           fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);
                           fprintf(ficres," Var(%s%1d%1d)",ca,i,j);
                         }else{
                           if(mle>=1)
                             printf(" %.5e",matcov[jj][ll]); 
                           fprintf(ficlog," %.5e",matcov[jj][ll]); 
                           fprintf(ficres," %.5e",matcov[jj][ll]); 
                         }
                       }
                     }
                   } /* end lk */
                 } /* end lj */
               } /* end li */
               if(mle>=1)
                 printf("\n");
               fprintf(ficlog,"\n");
               fprintf(ficres,"\n");
               numlinepar++;
             } /* end k*/
           } /*end j */
         } /* end i */
       } /* end itimes */
       
       fflush(ficlog);
       fflush(ficres);
       
       while((c=getc(ficpar))=='#' && c!= EOF){
         ungetc(c,ficpar);
         fgets(line, MAXLINE, ficpar);
         puts(line);
         fputs(line,ficparo);
     }      }
     fprintf(ficres,"\n");  
     if(mle==1)  
       printf("\n");  
     fprintf(ficlog,"\n");  
     k++;  
   }  
      
   while((c=getc(ficpar))=='#' && c!= EOF){  
     ungetc(c,ficpar);      ungetc(c,ficpar);
     fgets(line, MAXLINE, ficpar);      
     puts(line);      estepm=0;
     fputs(line,ficparo);      fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm);
   }      if (estepm==0 || estepm < stepm) estepm=stepm;
   ungetc(c,ficpar);      if (fage <= 2) {
         bage = ageminpar;
   estepm=0;        fage = agemaxpar;
   fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm);      }
   if (estepm==0 || estepm < stepm) estepm=stepm;      
   if (fage <= 2) {      fprintf(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");
     bage = ageminpar;      fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);
     fage = agemaxpar;      fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);
   }      
          while((c=getc(ficpar))=='#' && c!= EOF){
   fprintf(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");        ungetc(c,ficpar);
   fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);        fgets(line, MAXLINE, ficpar);
   fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);        puts(line);
            fputs(line,ficparo);
   while((c=getc(ficpar))=='#' && c!= EOF){      }
     ungetc(c,ficpar);  
     fgets(line, MAXLINE, ficpar);  
     puts(line);  
     fputs(line,ficparo);  
   }  
   ungetc(c,ficpar);  
     
   fscanf(ficpar,"begin-prev-date=%lf/%lf/%lf end-prev-date=%lf/%lf/%lf mov_average=%d\n",&jprev1, &mprev1,&anprev1,&jprev2, &mprev2,&anprev2,&mobilav);  
   fprintf(ficparo,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);  
   fprintf(ficres,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);  
   printf("begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);  
   fprintf(ficlog,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);  
      
   while((c=getc(ficpar))=='#' && c!= EOF){  
     ungetc(c,ficpar);      ungetc(c,ficpar);
     fgets(line, MAXLINE, ficpar);      
     puts(line);      fscanf(ficpar,"begin-prev-date=%lf/%lf/%lf end-prev-date=%lf/%lf/%lf mov_average=%d\n",&jprev1, &mprev1,&anprev1,&jprev2, &mprev2,&anprev2,&mobilav);
     fputs(line,ficparo);      fprintf(ficparo,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);
   }      fprintf(ficres,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);
   ungetc(c,ficpar);      printf("begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);
        fprintf(ficlog,"begin-prev-date=%.lf/%.lf/%.lf end-prev-date=%.lf/%.lf/%.lf mov_average=%d\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,mobilav);
       
   dateprev1=anprev1+(mprev1-1)/12.+(jprev1-1)/365.;      while((c=getc(ficpar))=='#' && c!= EOF){
   dateprev2=anprev2+(mprev2-1)/12.+(jprev2-1)/365.;        ungetc(c,ficpar);
         fgets(line, MAXLINE, ficpar);
   fscanf(ficpar,"pop_based=%d\n",&popbased);        puts(line);
   fprintf(ficparo,"pop_based=%d\n",popbased);           fputs(line,ficparo);
   fprintf(ficres,"pop_based=%d\n",popbased);         }
     
   while((c=getc(ficpar))=='#' && c!= EOF){  
     ungetc(c,ficpar);      ungetc(c,ficpar);
     fgets(line, MAXLINE, ficpar);      
     puts(line);      
     fputs(line,ficparo);      dateprev1=anprev1+(mprev1-1)/12.+(jprev1-1)/365.;
   }      dateprev2=anprev2+(mprev2-1)/12.+(jprev2-1)/365.;
   ungetc(c,ficpar);      
       fscanf(ficpar,"pop_based=%d\n",&popbased);
   fscanf(ficpar,"prevforecast=%d starting-proj-date=%lf/%lf/%lf final-proj-date=%lf/%lf/%lf mobil_average=%d\n",&prevfcast,&jproj1,&mproj1,&anproj1,&jproj2,&mproj2,&anproj2,&mobilavproj);      fprintf(ficparo,"pop_based=%d\n",popbased);   
   fprintf(ficparo,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);      fprintf(ficres,"pop_based=%d\n",popbased);   
   printf("prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);      
   fprintf(ficlog,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);      while((c=getc(ficpar))=='#' && c!= EOF){
   fprintf(ficres,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);        ungetc(c,ficpar);
   /* day and month of proj2 are not used but only year anproj2.*/        fgets(line, MAXLINE, ficpar);
         puts(line);
   while((c=getc(ficpar))=='#' && c!= EOF){        fputs(line,ficparo);
       }
     ungetc(c,ficpar);      ungetc(c,ficpar);
     fgets(line, MAXLINE, ficpar);      
     puts(line);      fscanf(ficpar,"prevforecast=%d starting-proj-date=%lf/%lf/%lf final-proj-date=%lf/%lf/%lf mobil_average=%d\n",&prevfcast,&jproj1,&mproj1,&anproj1,&jproj2,&mproj2,&anproj2,&mobilavproj);
     fputs(line,ficparo);      fprintf(ficparo,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);
   }      printf("prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);
   ungetc(c,ficpar);      fprintf(ficlog,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);
       fprintf(ficres,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj);
   fscanf(ficpar,"popforecast=%d popfile=%s popfiledate=%lf/%lf/%lf last-popfiledate=%lf/%lf/%lf\n",&popforecast,popfile,&jpyram,&mpyram,&anpyram,&jpyram1,&mpyram1,&anpyram1);      /* day and month of proj2 are not used but only year anproj2.*/
   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);*/      /*,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
       
   replace_back_to_slash(pathc,path); /* Even gnuplot wants a / */      replace_back_to_slash(pathc,path); /* Even gnuplot wants a / */
   printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);      printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
       
   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,\
                jprev1,mprev1,anprev1,jprev2,mprev2,anprev2);                   jprev1,mprev1,anprev1,jprev2,mprev2,anprev2);
          
   /*------------ free_vector  -------------*/     /*------------ free_vector  -------------*/
   /*  chdir(path); */     /*  chdir(path); */
     
   free_ivector(wav,1,imx);      free_ivector(wav,1,imx);
   free_imatrix(dh,1,lastpass-firstpass+1,1,imx);      free_imatrix(dh,1,lastpass-firstpass+1,1,imx);
   free_imatrix(bh,1,lastpass-firstpass+1,1,imx);      free_imatrix(bh,1,lastpass-firstpass+1,1,imx);
   free_imatrix(mw,1,lastpass-firstpass+1,1,imx);         free_imatrix(mw,1,lastpass-firstpass+1,1,imx);   
   free_lvector(num,1,n);      free_lvector(num,1,n);
   free_vector(agedc,1,n);      free_vector(agedc,1,n);
   /*free_matrix(covar,0,NCOVMAX,1,n);*/      /*free_matrix(covar,0,NCOVMAX,1,n);*/
   /*free_matrix(covar,1,NCOVMAX,1,n);*/      /*free_matrix(covar,1,NCOVMAX,1,n);*/
   fclose(ficparo);      fclose(ficparo);
   fclose(ficres);      fclose(ficres);
   
   
   /*--------------- Prevalence limit  (stable prevalence) --------------*/      /*--------------- Prevalence limit  (stable prevalence) --------------*/
       
   strcpy(filerespl,"pl");      strcpy(filerespl,"pl");
   strcat(filerespl,fileres);      strcat(filerespl,fileres);
   if((ficrespl=fopen(filerespl,"w"))==NULL) {      if((ficrespl=fopen(filerespl,"w"))==NULL) {
     printf("Problem with stable prevalence resultfile: %s\n", filerespl);goto end;        printf("Problem with stable prevalence resultfile: %s\n", filerespl);goto end;
     fprintf(ficlog,"Problem with stable prevalence resultfile: %s\n", filerespl);goto end;        fprintf(ficlog,"Problem with stable prevalence resultfile: %s\n", filerespl);goto end;
   }      }
   printf("Computing stable prevalence: result on file '%s' \n", filerespl);      printf("Computing stable prevalence: result on file '%s' \n", filerespl);
   fprintf(ficlog,"Computing stable prevalence: result on file '%s' \n", filerespl);      fprintf(ficlog,"Computing stable prevalence: result on file '%s' \n", filerespl);
   fprintf(ficrespl,"#Stable prevalence \n");      fprintf(ficrespl,"#Stable prevalence \n");
   fprintf(ficrespl,"#Age ");      fprintf(ficrespl,"#Age ");
   for(i=1; i<=nlstate;i++) fprintf(ficrespl,"%d-%d ",i,i);      for(i=1; i<=nlstate;i++) fprintf(ficrespl,"%d-%d ",i,i);
   fprintf(ficrespl,"\n");      fprintf(ficrespl,"\n");
       
   prlim=matrix(1,nlstate,1,nlstate);      prlim=matrix(1,nlstate,1,nlstate);
   
   agebase=ageminpar;      agebase=ageminpar;
   agelim=agemaxpar;      agelim=agemaxpar;
   ftolpl=1.e-10;      ftolpl=1.e-10;
   i1=cptcoveff;      i1=cptcoveff;
   if (cptcovn < 1){i1=1;}      if (cptcovn < 1){i1=1;}
   
   for(cptcov=1,k=0;cptcov<=i1;cptcov++){      for(cptcov=1,k=0;cptcov<=i1;cptcov++){
     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){        for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
       k=k+1;          k=k+1;
       /*printf("cptcov=%d cptcod=%d codtab=%d nbcode=%d\n",cptcov, cptcod,Tcode[cptcode],codtab[cptcod][cptcov]);*/          /*printf("cptcov=%d cptcod=%d codtab=%d nbcode=%d\n",cptcov, cptcod,Tcode[cptcode],codtab[cptcod][cptcov]);*/
       fprintf(ficrespl,"\n#******");          fprintf(ficrespl,"\n#******");
       printf("\n#******");          printf("\n#******");
       fprintf(ficlog,"\n#******");          fprintf(ficlog,"\n#******");
       for(j=1;j<=cptcoveff;j++) {          for(j=1;j<=cptcoveff;j++) {
         fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);            fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
         printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);            printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
         fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);            fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
       }          }
       fprintf(ficrespl,"******\n");          fprintf(ficrespl,"******\n");
       printf("******\n");          printf("******\n");
       fprintf(ficlog,"******\n");          fprintf(ficlog,"******\n");
                   
       for (age=agebase; age<=agelim; age++){          for (age=agebase; age<=agelim; age++){
         prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k);            prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k);
         fprintf(ficrespl,"%.0f ",age );            fprintf(ficrespl,"%.0f ",age );
         for(j=1;j<=cptcoveff;j++)            for(j=1;j<=cptcoveff;j++)
           fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);              fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
         for(i=1; i<=nlstate;i++)            for(i=1; i<=nlstate;i++)
           fprintf(ficrespl," %.5f", prlim[i][i]);              fprintf(ficrespl," %.5f", prlim[i][i]);
         fprintf(ficrespl,"\n");            fprintf(ficrespl,"\n");
           }
       }        }
     }      }
   }      fclose(ficrespl);
   fclose(ficrespl);  
   
   /*------------- h Pij x at various ages ------------*/      /*------------- h Pij x at various ages ------------*/
       
   strcpy(filerespij,"pij");  strcat(filerespij,fileres);      strcpy(filerespij,"pij");  strcat(filerespij,fileres);
   if((ficrespij=fopen(filerespij,"w"))==NULL) {      if((ficrespij=fopen(filerespij,"w"))==NULL) {
     printf("Problem with Pij resultfile: %s\n", filerespij);goto end;        printf("Problem with Pij resultfile: %s\n", filerespij);goto end;
     fprintf(ficlog,"Problem with Pij resultfile: %s\n", filerespij);goto end;        fprintf(ficlog,"Problem with Pij resultfile: %s\n", filerespij);goto end;
   }      }
   printf("Computing pij: result on file '%s' \n", filerespij);      printf("Computing pij: result on file '%s' \n", filerespij);
   fprintf(ficlog,"Computing pij: result on file '%s' \n", filerespij);      fprintf(ficlog,"Computing pij: result on file '%s' \n", filerespij);
       
   stepsize=(int) (stepm+YEARM-1)/YEARM;      stepsize=(int) (stepm+YEARM-1)/YEARM;
   /*if (stepm<=24) stepsize=2;*/      /*if (stepm<=24) stepsize=2;*/
   
   agelim=AGESUP;      agelim=AGESUP;
   hstepm=stepsize*YEARM; /* Every year of age */      hstepm=stepsize*YEARM; /* Every year of age */
   hstepm=hstepm/stepm; /* Typically 2 years, = 2/6 months = 4 */       hstepm=hstepm/stepm; /* Typically 2 years, = 2/6 months = 4 */ 
   
   /* hstepm=1;   aff par mois*/      /* hstepm=1;   aff par mois*/
   
   fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x ");      fprintf(ficrespij,"#****** h Pij x Probability to be in state j at age x+h being in i at x ");
   for(cptcov=1,k=0;cptcov<=i1;cptcov++){      for(cptcov=1,k=0;cptcov<=i1;cptcov++){
     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){        for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
       k=k+1;          k=k+1;
       fprintf(ficrespij,"\n#****** ");          fprintf(ficrespij,"\n#****** ");
       for(j=1;j<=cptcoveff;j++)           for(j=1;j<=cptcoveff;j++) 
         fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);            fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
       fprintf(ficrespij,"******\n");          fprintf(ficrespij,"******\n");
                   
       for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */          for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */
         nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */             nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */ 
         nhstepm = nhstepm/hstepm; /* Typically 40/4=10 */            nhstepm = nhstepm/hstepm; /* Typically 40/4=10 */
   
         /*        nhstepm=nhstepm*YEARM; aff par mois*/            /*      nhstepm=nhstepm*YEARM; aff par mois*/
   
         p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);            p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);
         oldm=oldms;savm=savms;            oldm=oldms;savm=savms;
         hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k);              hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k);  
         fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j=");            fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j=");
         for(i=1; i<=nlstate;i++)  
           for(j=1; j<=nlstate+ndeath;j++)  
             fprintf(ficrespij," %1d-%1d",i,j);  
         fprintf(ficrespij,"\n");  
         for (h=0; h<=nhstepm; h++){  
           fprintf(ficrespij,"%d %3.f %3.f",k,agedeb, agedeb+ h*hstepm/YEARM*stepm );  
           for(i=1; i<=nlstate;i++)            for(i=1; i<=nlstate;i++)
             for(j=1; j<=nlstate+ndeath;j++)              for(j=1; j<=nlstate+ndeath;j++)
               fprintf(ficrespij," %.5f", p3mat[i][j][h]);                fprintf(ficrespij," %1d-%1d",i,j);
             fprintf(ficrespij,"\n");
             for (h=0; h<=nhstepm; h++){
               fprintf(ficrespij,"%d %3.f %3.f",k,agedeb, agedeb+ h*hstepm/YEARM*stepm );
               for(i=1; i<=nlstate;i++)
                 for(j=1; j<=nlstate+ndeath;j++)
                   fprintf(ficrespij," %.5f", p3mat[i][j][h]);
               fprintf(ficrespij,"\n");
             }
             free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);
           fprintf(ficrespij,"\n");            fprintf(ficrespij,"\n");
         }          }
         free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);  
         fprintf(ficrespij,"\n");  
       }        }
     }      }
   }  
   
   varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax);  
   
   fclose(ficrespij);      varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax);
   
   probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX);      fclose(ficrespij);
   
   /*---------- Forecasting ------------------*/      probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX);
   /*if((stepm == 1) && (strcmp(model,".")==0)){*/      for(i=1;i<=AGESUP;i++)
   if(prevfcast==1){        for(j=1;j<=NCOVMAX;j++)
     /*    if(stepm ==1){*/          for(k=1;k<=NCOVMAX;k++)
             probs[i][j][k]=0.;
   
       /*---------- Forecasting ------------------*/
       /*if((stepm == 1) && (strcmp(model,".")==0)){*/
       if(prevfcast==1){
         /*    if(stepm ==1){*/
       prevforecast(fileres, anproj1, mproj1, jproj1, agemin, agemax, dateprev1, dateprev2, mobilavproj, bage, fage, firstpass, lastpass, anproj2, p, cptcoveff);        prevforecast(fileres, anproj1, mproj1, jproj1, agemin, agemax, dateprev1, dateprev2, mobilavproj, bage, fage, firstpass, lastpass, anproj2, p, cptcoveff);
       /* (popforecast==1) populforecast(fileres, anpyram,mpyram,jpyram, agemin,agemax, dateprev1, dateprev2,mobilav, agedeb, fage, popforecast, popfile, anpyram1,p, i1);*/        /* (popforecast==1) populforecast(fileres, anpyram,mpyram,jpyram, agemin,agemax, dateprev1, dateprev2,mobilav, agedeb, fage, popforecast, popfile, anpyram1,p, i1);*/
 /*      }  */        /*      }  */
 /*      else{ */        /*      else{ */
 /*        erreur=108; */        /*        erreur=108; */
 /*        printf("Warning %d!! You can only forecast the prevalences if the optimization\n  has been performed with stepm = 1 (month) instead of %d or model=. instead of '%s'\n", erreur, stepm, model); */        /*        printf("Warning %d!! You can only forecast the prevalences if the optimization\n  has been performed with stepm = 1 (month) instead of %d or model=. instead of '%s'\n", erreur, stepm, model); */
 /*        fprintf(ficlog,"Warning %d!! You can only forecast the prevalences if the optimization\n  has been performed with stepm = 1 (month) instead of %d or model=. instead of '%s'\n", erreur, stepm, model); */        /*        fprintf(ficlog,"Warning %d!! You can only forecast the prevalences if the optimization\n  has been performed with stepm = 1 (month) instead of %d or model=. instead of '%s'\n", erreur, stepm, model); */
 /*      } */        /*      } */
   }      }
       
   
   /*---------- Health expectancies and variances ------------*/      /*---------- Health expectancies and variances ------------*/
   
   strcpy(filerest,"t");      strcpy(filerest,"t");
   strcat(filerest,fileres);      strcat(filerest,fileres);
   if((ficrest=fopen(filerest,"w"))==NULL) {      if((ficrest=fopen(filerest,"w"))==NULL) {
     printf("Problem with total LE resultfile: %s\n", filerest);goto end;        printf("Problem with total LE resultfile: %s\n", filerest);goto end;
     fprintf(ficlog,"Problem with total LE resultfile: %s\n", filerest);goto end;        fprintf(ficlog,"Problem with total LE resultfile: %s\n", filerest);goto end;
   }      }
   printf("Computing Total LEs with variances: file '%s' \n", filerest);       printf("Computing Total LEs with variances: file '%s' \n", filerest); 
   fprintf(ficlog,"Computing Total LEs with variances: file '%s' \n", filerest);       fprintf(ficlog,"Computing Total LEs with variances: file '%s' \n", filerest); 
   
   
   strcpy(filerese,"e");      strcpy(filerese,"e");
   strcat(filerese,fileres);      strcat(filerese,fileres);
   if((ficreseij=fopen(filerese,"w"))==NULL) {      if((ficreseij=fopen(filerese,"w"))==NULL) {
     printf("Problem with Health Exp. resultfile: %s\n", filerese); exit(0);        printf("Problem with Health Exp. resultfile: %s\n", filerese); exit(0);
     fprintf(ficlog,"Problem with Health Exp. resultfile: %s\n", filerese); exit(0);        fprintf(ficlog,"Problem with Health Exp. resultfile: %s\n", filerese); exit(0);
   }      }
   printf("Computing Health Expectancies: result on file '%s' \n", filerese);      printf("Computing Health Expectancies: result on file '%s' \n", filerese);
   fprintf(ficlog,"Computing Health Expectancies: result on file '%s' \n", filerese);      fprintf(ficlog,"Computing Health Expectancies: result on file '%s' \n", filerese);
   
   strcpy(fileresv,"v");      strcpy(fileresv,"v");
   strcat(fileresv,fileres);      strcat(fileresv,fileres);
   if((ficresvij=fopen(fileresv,"w"))==NULL) {      if((ficresvij=fopen(fileresv,"w"))==NULL) {
     printf("Problem with variance resultfile: %s\n", fileresv);exit(0);        printf("Problem with variance resultfile: %s\n", fileresv);exit(0);
     fprintf(ficlog,"Problem with variance resultfile: %s\n", fileresv);exit(0);        fprintf(ficlog,"Problem with variance resultfile: %s\n", fileresv);exit(0);
   }      }
   printf("Computing Variance-covariance of DFLEs: file '%s' \n", fileresv);      printf("Computing Variance-covariance of DFLEs: file '%s' \n", fileresv);
   fprintf(ficlog,"Computing Variance-covariance of DFLEs: file '%s' \n", fileresv);      fprintf(ficlog,"Computing Variance-covariance of DFLEs: file '%s' \n", fileresv);
   
   /* Computes prevalence between agemin (i.e minimal age computed) and no more ageminpar */      /* Computes prevalence between agemin (i.e minimal age computed) and no more ageminpar */
   prevalence(probs, agemin, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass);      prevalence(probs, agemin, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass);
   /*  printf("ageminpar=%f, agemax=%f, s[lastpass][imx]=%d, agev[lastpass][imx]=%f, nlstate=%d, imx=%d,  mint[lastpass][imx]=%f, anint[lastpass][imx]=%f,dateprev1=%f, dateprev2=%f, firstpass=%d, lastpass=%d\n",\      /*  printf("ageminpar=%f, agemax=%f, s[lastpass][imx]=%d, agev[lastpass][imx]=%f, nlstate=%d, imx=%d,  mint[lastpass][imx]=%f, anint[lastpass][imx]=%f,dateprev1=%f, dateprev2=%f, firstpass=%d, lastpass=%d\n",\
 ageminpar, agemax, s[lastpass][imx], agev[lastpass][imx], nlstate, imx, mint[lastpass][imx],anint[lastpass][imx], dateprev1, dateprev2, firstpass, lastpass);          ageminpar, agemax, s[lastpass][imx], agev[lastpass][imx], nlstate, imx, mint[lastpass][imx],anint[lastpass][imx], dateprev1, dateprev2, firstpass, lastpass);
   */      */
   
   if (mobilav!=0) {      if (mobilav!=0) {
     mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX);        mobaverage= ma3x(1, AGESUP,1,NCOVMAX, 1,NCOVMAX);
     if (movingaverage(probs, bage, fage, mobaverage,mobilav)!=0){        if (movingaverage(probs, bage, fage, mobaverage,mobilav)!=0){
       fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav);          fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav);
       printf(" Error in movingaverage mobilav=%d\n",mobilav);          printf(" Error in movingaverage mobilav=%d\n",mobilav);
         }
     }      }
   }  
   
   for(cptcov=1,k=0;cptcov<=i1;cptcov++){      for(cptcov=1,k=0;cptcov<=i1;cptcov++){
     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){        for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
       k=k+1;           k=k+1; 
       fprintf(ficrest,"\n#****** ");          fprintf(ficrest,"\n#****** ");
       for(j=1;j<=cptcoveff;j++)           for(j=1;j<=cptcoveff;j++) 
         fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);            fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
       fprintf(ficrest,"******\n");          fprintf(ficrest,"******\n");
   
       fprintf(ficreseij,"\n#****** ");          fprintf(ficreseij,"\n#****** ");
       for(j=1;j<=cptcoveff;j++)           for(j=1;j<=cptcoveff;j++) 
         fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);            fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
       fprintf(ficreseij,"******\n");          fprintf(ficreseij,"******\n");
   
       fprintf(ficresvij,"\n#****** ");          fprintf(ficresvij,"\n#****** ");
       for(j=1;j<=cptcoveff;j++)           for(j=1;j<=cptcoveff;j++) 
         fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);            fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
       fprintf(ficresvij,"******\n");          fprintf(ficresvij,"******\n");
   
       eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);          eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
       oldm=oldms;savm=savms;          oldm=oldms;savm=savms;
       evsij(fileres, eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov);            evsij(fileres, eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov);  
     
       vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);          vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
       oldm=oldms;savm=savms;          oldm=oldms;savm=savms;
       varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,0, mobilav);          varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,0, mobilav);
       if(popbased==1){          if(popbased==1){
         varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,popbased,mobilav);            varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,popbased,mobilav);
       }          }
   
     
       fprintf(ficrest,"#Total LEs with variances: e.. (std) ");          fprintf(ficrest,"#Total LEs with variances: e.. (std) ");
       for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);          for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);
       fprintf(ficrest,"\n");          fprintf(ficrest,"\n");
   
       epj=vector(1,nlstate+1);          epj=vector(1,nlstate+1);
       for(age=bage; age <=fage ;age++){          for(age=bage; age <=fage ;age++){
         prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k);            prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k);
         if (popbased==1) {            if (popbased==1) {
           if(mobilav ==0){              if(mobilav ==0){
             for(i=1; i<=nlstate;i++)                for(i=1; i<=nlstate;i++)
               prlim[i][i]=probs[(int)age][i][k];                  prlim[i][i]=probs[(int)age][i][k];
           }else{ /* mobilav */               }else{ /* mobilav */ 
             for(i=1; i<=nlstate;i++)                for(i=1; i<=nlstate;i++)
               prlim[i][i]=mobaverage[(int)age][i][k];                  prlim[i][i]=mobaverage[(int)age][i][k];
               }
           }            }
         }  
                   
         fprintf(ficrest," %4.0f",age);            fprintf(ficrest," %4.0f",age);
         for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){            for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){
           for(i=1, epj[j]=0.;i <=nlstate;i++) {              for(i=1, epj[j]=0.;i <=nlstate;i++) {
             epj[j] += prlim[i][i]*eij[i][j][(int)age];                epj[j] += prlim[i][i]*eij[i][j][(int)age];
             /*  printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/                /*  printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/
               }
               epj[nlstate+1] +=epj[j];
           }            }
           epj[nlstate+1] +=epj[j];  
         }  
   
         for(i=1, vepp=0.;i <=nlstate;i++)            for(i=1, vepp=0.;i <=nlstate;i++)
           for(j=1;j <=nlstate;j++)              for(j=1;j <=nlstate;j++)
             vepp += vareij[i][j][(int)age];                vepp += vareij[i][j][(int)age];
         fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp));            fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp));
         for(j=1;j <=nlstate;j++){            for(j=1;j <=nlstate;j++){
           fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age]));              fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age]));
             }
             fprintf(ficrest,"\n");
         }          }
         fprintf(ficrest,"\n");          free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);
       }          free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage);
       free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);          free_vector(epj,1,nlstate+1);
       free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage);        }
       free_vector(epj,1,nlstate+1);      }
     }      free_vector(weight,1,n);
   }      free_imatrix(Tvard,1,15,1,2);
   free_vector(weight,1,n);      free_imatrix(s,1,maxwav+1,1,n);
   free_imatrix(Tvard,1,15,1,2);      free_matrix(anint,1,maxwav,1,n); 
   free_imatrix(s,1,maxwav+1,1,n);      free_matrix(mint,1,maxwav,1,n);
   free_matrix(anint,1,maxwav,1,n);       free_ivector(cod,1,n);
   free_matrix(mint,1,maxwav,1,n);      free_ivector(tab,1,NCOVMAX);
   free_ivector(cod,1,n);      fclose(ficreseij);
   free_ivector(tab,1,NCOVMAX);      fclose(ficresvij);
   fclose(ficreseij);      fclose(ficrest);
   fclose(ficresvij);      fclose(ficpar);
   fclose(ficrest);    
   fclose(ficpar);      /*------- Variance of stable prevalence------*/   
     
   /*------- Variance of stable prevalence------*/         strcpy(fileresvpl,"vpl");
       strcat(fileresvpl,fileres);
   strcpy(fileresvpl,"vpl");      if((ficresvpl=fopen(fileresvpl,"w"))==NULL) {
   strcat(fileresvpl,fileres);        printf("Problem with variance of stable prevalence  resultfile: %s\n", fileresvpl);
   if((ficresvpl=fopen(fileresvpl,"w"))==NULL) {        exit(0);
     printf("Problem with variance of stable prevalence  resultfile: %s\n", fileresvpl);      }
     exit(0);      printf("Computing Variance-covariance of stable prevalence: file '%s' \n", fileresvpl);
   }  
   printf("Computing Variance-covariance of stable prevalence: file '%s' \n", fileresvpl);      for(cptcov=1,k=0;cptcov<=i1;cptcov++){
         for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
   for(cptcov=1,k=0;cptcov<=i1;cptcov++){          k=k+1;
     for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){          fprintf(ficresvpl,"\n#****** ");
       k=k+1;          for(j=1;j<=cptcoveff;j++) 
       fprintf(ficresvpl,"\n#****** ");            fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);
       for(j=1;j<=cptcoveff;j++)           fprintf(ficresvpl,"******\n");
         fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]);  
       fprintf(ficresvpl,"******\n");  
               
       varpl=matrix(1,nlstate,(int) bage, (int) fage);          varpl=matrix(1,nlstate,(int) bage, (int) fage);
       oldm=oldms;savm=savms;          oldm=oldms;savm=savms;
       varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k);          varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k);
       free_matrix(varpl,1,nlstate,(int) bage, (int)fage);          free_matrix(varpl,1,nlstate,(int) bage, (int)fage);
         }
     }      }
   }  
   
   fclose(ficresvpl);      fclose(ficresvpl);
   
   /*---------- End : free ----------------*/      /*---------- End : free ----------------*/
   free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath);      if (mobilav!=0) free_ma3x(mobaverage,1, AGESUP,1,NCOVMAX, 1,NCOVMAX);
   free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath);      free_ma3x(probs,1,AGESUP,1,NCOVMAX, 1,NCOVMAX);
   free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath);  
   free_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath);    }  /* mle==-3 arrives here for freeing */
         free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath);
   free_matrix(covar,0,NCOVMAX,1,n);      free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath);
   free_matrix(matcov,1,npar,1,npar);      free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath);
   /*free_vector(delti,1,npar);*/      free_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath);
   free_ma3x(delti3,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel);     
   free_matrix(agev,1,maxwav,1,imx);      free_matrix(covar,0,NCOVMAX,1,n);
   free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel);      free_matrix(matcov,1,npar,1,npar);
   if (mobilav!=0) free_ma3x(mobaverage,1, AGESUP,1,NCOVMAX, 1,NCOVMAX);      /*free_vector(delti,1,npar);*/
   free_ma3x(probs,1,AGESUP,1,NCOVMAX, 1,NCOVMAX);      free_ma3x(delti3,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); 
       free_matrix(agev,1,maxwav,1,imx);
       free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel);
   
       free_ivector(ncodemax,1,8);
       free_ivector(Tvar,1,15);
       free_ivector(Tprod,1,15);
       free_ivector(Tvaraff,1,15);
       free_ivector(Tage,1,15);
       free_ivector(Tcode,1,100);
   
   free_ivector(ncodemax,1,8);  
   free_ivector(Tvar,1,15);  
   free_ivector(Tprod,1,15);  
   free_ivector(Tvaraff,1,15);  
   free_ivector(Tage,1,15);  
   free_ivector(Tcode,1,100);  
   
   fflush(fichtm);    fflush(fichtm);
   fflush(ficgp);    fflush(ficgp);
       
   
   if((nberr >0) || (nbwarn>0)){    if((nberr >0) || (nbwarn>0)){
     printf("End of Imach with %d errors and/or warnings %d\n",nberr,nbwarn);      printf("End of Imach with %d errors and/or %d warnings\n",nberr,nbwarn);
     fprintf(ficlog,"End of Imach with %d errors and/or warnings %d\n",nberr,nbwarn);      fprintf(ficlog,"End of Imach with %d errors and/or warnings %d\n",nberr,nbwarn);
   }else{    }else{
     printf("End of Imach\n");      printf("End of Imach\n");
Line 5118  ageminpar, agemax, s[lastpass][imx], age Line 5434  ageminpar, agemax, s[lastpass][imx], age
   /*------ End -----------*/    /*------ End -----------*/
   
   chdir(path);    chdir(path);
   strcpy(plotcmd,GNUPLOTPROGRAM);    strcpy(plotcmd,"\"");
     strcat(plotcmd,pathimach);
     strcat(plotcmd,GNUPLOTPROGRAM);
     strcat(plotcmd,"\"");
   strcat(plotcmd," ");    strcat(plotcmd," ");
   strcat(plotcmd,optionfilegnuplot);    strcat(plotcmd,optionfilegnuplot);
   printf("Starting graphs with: %s",plotcmd);fflush(stdout);    printf("Starting graphs with: %s",plotcmd);fflush(stdout);
Line 5131  ageminpar, agemax, s[lastpass][imx], age Line 5450  ageminpar, agemax, s[lastpass][imx], age
     printf("\nType e to edit output files, g to graph again and q for exiting: ");      printf("\nType e to edit output files, g to graph again and q for exiting: ");
     scanf("%s",z);      scanf("%s",z);
 /*     if (z[0] == 'c') system("./imach"); */  /*     if (z[0] == 'c') system("./imach"); */
     if (z[0] == 'e') system(optionfilehtm);      if (z[0] == 'e') {
         printf("Starting browser with: %s",optionfilehtm);fflush(stdout);
         system(optionfilehtm);
       }
     else if (z[0] == 'g') system(plotcmd);      else if (z[0] == 'g') system(plotcmd);
     else if (z[0] == 'q') exit(0);      else if (z[0] == 'q') exit(0);
   }    }

Removed from v.1.94  
changed lines
  Added in v.1.103


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>