Diff for /imach/src/imach.c between versions 1.97 and 1.98

version 1.97, 2004/02/20 13:25:42 version 1.98, 2004/05/16 15:05:56
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
     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    Revision 1.97  2004/02/20 13:25:42  lievre
   Version 0.96d. Population forecasting command line is (temporarily)    Version 0.96d. Population forecasting command line is (temporarily)
   suppressed.    suppressed.
Line 201 Line 223
 #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
   #define AGEGOMP 10. /* Minimal age for Gompertz adjustment */
 #ifdef unix  #ifdef unix
 #define DIRSEPARATOR '/'  #define DIRSEPARATOR '/'
 #define ODIRSEPARATOR '\\'  #define ODIRSEPARATOR '\\'
Line 212 Line 235
 /* $Id$ */  /* $Id$ */
 /* $State$ */  /* $State$ */
   
 char version[]="Imach version 0.96d, February 2004, INED-EUROREVES ";  char version[]="Imach version 0.70, May 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 242  int globpr; /* Global variable for print Line 265  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 304  static double maxarg1,maxarg2; Line 328  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 314  int estepm; Line 339  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 829  void powell(double p[], double **xi, int Line 855  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 1516  void mlikeli(FILE *ficres,double p[], in Line 1543  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 1551  void hesscov(double **matcov, double p[] Line 1578  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 1563  void hesscov(double **matcov, double p[] Line 1590  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 1573  void hesscov(double **matcov, double p[] Line 1602  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 1644  void hesscov(double **matcov, double p[] Line 1674  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 1691  double hessii( double x[], double delta, Line 1721  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 3867  void prwizard(int ncovmodel, int nlstate Line 3897  void prwizard(int ncovmodel, int nlstate
   } /* end itimes */    } /* 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=1; 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=0;i<=imx-1 ; i++)
       {
         if (cens[i]==1 & wav[i]>1)
           A=-x[1]/(x[2])*
             (exp(x[2]/YEARM*(agecens[i]*12-agegomp*12))-exp(x[2]/YEARM*(ageexmed[i]*12-agegomp*12)));
         
         if (cens[i]==0 & wav[i]>1)
           A=-x[1]/(x[2])*
                (exp(x[2]/YEARM*(agedc[i]*12-agegomp*12))-exp(x[2]/YEARM*(ageexmed[i]*12-agegomp*12)))
             +log(x[1]/YEARM)+x[2]/YEARM*(agedc[i]*12-agegomp*12)+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 3880  int main(int argc, char *argv[]) Line 3986  int main(int argc, char *argv[])
   int jj, ll, li, lj, lk, 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 itimes;
     int NDIM=2;
   
   char ca[32], cb[32], cc[32];    char ca[32], cb[32], cc[32];
   /*  FILE *fichtm; *//* Html File */    /*  FILE *fichtm; *//* Html File */
Line 3923  int main(int argc, char *argv[]) Line 4030  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 4081  int main(int argc, char *argv[]) Line 4188  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 4492  int main(int argc, char *argv[]) Line 4610  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 4545  int main(int argc, char *argv[]) Line 4664  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 4558  int main(int argc, char *argv[]) Line 4680  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 4615  Interval (in months) between two waves: Line 4739  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);  
     
   
   fprintf(ficres,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");      for(i=1; i <=NDIM; i++)
   printf("# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");        for(j=i+1;j<=NDIM;j++)
   fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");          matcov[i][j]=matcov[j][i];
   for(i=1,jk=1; i <=nlstate; i++){      
     for(k=1; k <=(nlstate+ndeath); k++){      printf("\nCovariance matrix\n ");
       if (k != i) {      for(i=1; i <=NDIM; i++) {
         printf("%d%d ",i,k);        for(j=1;j<=NDIM;j++){ 
         fprintf(ficlog,"%d%d ",i,k);          printf("%f ",matcov[i][j]);
         fprintf(ficres,"%1d%1d ",i,k);  
         for(j=1; j <=ncovmodel; j++){  
           printf("%f ",p[jk]);  
           fprintf(ficlog,"%f ",p[jk]);  
           fprintf(ficres,"%f ",p[jk]);  
           jk++;   
         }  
         printf("\n");  
         fprintf(ficlog,"\n");  
         fprintf(ficres,"\n");  
       }        }
         printf("\n ");
     }      }
   }      
   if(mle!=0){      printf("iter=%d MLE=%f Eq=%lf*exp(%lf*(age-%d))\n",iter,-gompertz(p),p[1],p[2],agegomp);
     /* Computing hessian and covariance matrix */      for (i=1;i<=NDIM;i++) 
     ftolhess=ftol; /* Usually correct */        printf("%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i]));
     hesscov(matcov, p, npar, delti, ftolhess, func);      replace_back_to_slash(pathc,path); /* Even gnuplot wants a / */
   }      printinggnuplotmort(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
   fprintf(ficres,"# Scales (for hessian or gradient estimation)\n");      
   printf("# Scales (for hessian or gradient estimation)\n");      printinghtmlmort(fileres,title,datafile, firstpass, lastpass, \
   fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");                       stepm, weightopt,\
   for(i=1,jk=1; i <=nlstate; i++){                       model,imx,p,matcov);
     for(j=1; j <=nlstate+ndeath; j++){    } /* Endof if mle==-3 */
       if (j!=i) {  
         fprintf(ficres,"%1d%1d",i,j);    else{ /* For mle >=1 */
         printf("%1d%1d",i,j);    
         fprintf(ficlog,"%1d%1d",i,j);      likelione(ficres, p, npar, nlstate, &globpr, &ipmx, &sw, &fretone, funcone); /* Prints the contributions to the likelihood */
         for(k=1; k<=ncovmodel;k++){      printf("First Likeli=%12.6f ipmx=%ld sw=%12.6f",fretone,ipmx,sw);
           printf(" %.5e",delti[jk]);      for (k=1; k<=npar;k++)
           fprintf(ficlog," %.5e",delti[jk]);        printf(" %d %8.5f",k,p[k]);
           fprintf(ficres," %.5e",delti[jk]);      printf("\n");
           jk++;      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);
             fprintf(ficlog,"%d%d ",i,k);
             fprintf(ficres,"%1d%1d ",i,k);
             for(j=1; j <=ncovmodel; j++){
               printf("%f ",p[jk]);
               fprintf(ficlog,"%f ",p[jk]);
               fprintf(ficres,"%f ",p[jk]);
               jk++; 
             }
             printf("\n");
             fprintf(ficlog,"\n");
             fprintf(ficres,"\n");
         }          }
         printf("\n");  
         fprintf(ficlog,"\n");  
         fprintf(ficres,"\n");  
       }        }
     }      }
   }      if(mle!=0){
            /* Computing hessian and covariance matrix */
   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");        ftolhess=ftol; /* Usually correct */
   if(mle>=1)        hesscov(matcov, p, npar, delti, ftolhess, func);
     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(ficres,"# Scales (for hessian or gradient estimation)\n");
 /* # 121 Var(a12)\n\ */      printf("# Scales (for hessian or gradient estimation)\n");
 /* # 122 Cov(b12,a12) Var(b12)\n\ */      fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");
 /* # 131 Cov(a13,a12) Cov(a13,b12, Var(a13)\n\ */      for(i=1,jk=1; i <=nlstate; i++){
 /* # 132 Cov(b13,a12) Cov(b13,b12, Cov(b13,a13) Var(b13)\n\ */  
 /* # 212 Cov(a21,a12) Cov(a21,b12, Cov(a21,a13) Cov(a21,b13) Var(a21)\n\ */  
 /* # 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  
 */  
   for(itimes=1;itimes<=2;itimes++){  
     jj=0;  
     for(i=1; i <=nlstate; i++){  
       for(j=1; j <=nlstate+ndeath; j++){        for(j=1; j <=nlstate+ndeath; j++){
         if(j==i) continue;          if (j!=i) {
         for(k=1; k<=ncovmodel;k++){            fprintf(ficres,"%1d%1d",i,j);
           jj++;            printf("%1d%1d",i,j);
           ca[0]= k+'a'-1;ca[1]='\0';            fprintf(ficlog,"%1d%1d",i,j);
           if(itimes==1){            for(k=1; k<=ncovmodel;k++){
             if(mle>=1)              printf(" %.5e",delti[jk]);
               printf("#%1d%1d%d",i,j,k);              fprintf(ficlog," %.5e",delti[jk]);
             fprintf(ficlog,"#%1d%1d%d",i,j,k);              fprintf(ficres," %.5e",delti[jk]);
             fprintf(ficres,"#%1d%1d%d",i,j,k);              jk++;
           }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;            printf("\n");
           for(li=1;li <=nlstate; li++){            fprintf(ficlog,"\n");
             for(lj=1;lj <=nlstate+ndeath; lj++){            fprintf(ficres,"\n");
               if(lj==li) continue;          }
               for(lk=1;lk<=ncovmodel;lk++){        }
                 ll++;      }
                 if(ll<=jj){      
                   cb[0]= lk +'a'-1;cb[1]='\0';      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(ll<jj){      if(mle>=1)
                     if(itimes==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");
                       if(mle>=1)      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");
                         printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);      /* # 121 Var(a12)\n\ */
                       fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);      /* # 122 Cov(b12,a12) Var(b12)\n\ */
                       fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);      /* # 131 Cov(a13,a12) Cov(a13,b12, Var(a13)\n\ */
                     }else{      /* # 132 Cov(b13,a12) Cov(b13,b12, Cov(b13,a13) Var(b13)\n\ */
                       if(mle>=1)      /* # 212 Cov(a21,a12) Cov(a21,b12, Cov(a21,a13) Cov(a21,b13) Var(a21)\n\ */
                         printf(" %.5e",matcov[jj][ll]);       /* # 212 Cov(b21,a12) Cov(b21,b12, Cov(b21,a13) Cov(b21,b13) Cov(b21,a21) Var(b21)\n\ */
                       fprintf(ficlog," %.5e",matcov[jj][ll]);       /* # 232 Cov(a23,a12) Cov(a23,b12, Cov(a23,a13) Cov(a23,b13) Cov(a23,a21) Cov(a23,b21) Var(a23)\n\ */
                       fprintf(ficres," %.5e",matcov[jj][ll]);       /* # 232 Cov(b23,a12) Cov(b23,b12) ... Var (b23)\n" */
                     }      
                   }else{      
                     if(itimes==1){      /* Just to have a covariance matrix which will be more understandable
                       if(mle>=1)         even is we still don't want to manage dictionary of variables
                         printf(" Var(%s%1d%1d)",ca,i,j);      */
                       fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);      for(itimes=1;itimes<=2;itimes++){
                       fprintf(ficres," Var(%s%1d%1d)",ca,i,j);        jj=0;
         for(i=1; i <=nlstate; i++){
           for(j=1; j <=nlstate+ndeath; j++){
             if(j==i) continue;
             for(k=1; k<=ncovmodel;k++){
               jj++;
               ca[0]= k+'a'-1;ca[1]='\0';
               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{                      }else{
                       if(mle>=1)                        if(itimes==1){
                         printf(" %.5e",matcov[jj][ll]);                           if(mle>=1)
                       fprintf(ficlog," %.5e",matcov[jj][ll]);                             printf(" Var(%s%1d%1d)",ca,i,j);
                       fprintf(ficres," %.5e",matcov[jj][ll]);                           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 lk */                } /* end lj */
             } /* end lj */              } /* end li */
           } /* end li */              if(mle>=1)
           if(mle>=1)                printf("\n");
             printf("\n");              fprintf(ficlog,"\n");
           fprintf(ficlog,"\n");              fprintf(ficres,"\n");
           fprintf(ficres,"\n");              numlinepar++;
           numlinepar++;            } /* end k*/
         } /* end k*/          } /*end j */
       } /*end j */        } /* end i */
     } /* end i */      } /* end itimes */
   } /* end itimes */      
       fflush(ficlog);
   fflush(ficlog);      fflush(ficres);
   fflush(ficres);      
       while((c=getc(ficpar))=='#' && c!= EOF){
   while((c=getc(ficpar))=='#' && c!= EOF){        ungetc(c,ficpar);
     ungetc(c,ficpar);        fgets(line, MAXLINE, ficpar);
     fgets(line, MAXLINE, ficpar);        puts(line);
     puts(line);        fputs(line,ficparo);
     fputs(line,ficparo);      }
   }  
   ungetc(c,ficpar);  
   
   estepm=0;  
   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) {  
     bage = ageminpar;  
     fage = agemaxpar;  
   }  
      
   fprintf(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");  
   fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);  
   fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);  
      
   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;
   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);        fage = agemaxpar;
   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(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");
   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);      fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);
          fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d\n",ageminpar,agemaxpar,bage,fage, estepm);
   while((c=getc(ficpar))=='#' && c!= EOF){      
       while((c=getc(ficpar))=='#' && c!= EOF){
         ungetc(c,ficpar);
         fgets(line, MAXLINE, ficpar);
         puts(line);
         fputs(line,ficparo);
       }
     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);
   for(i=1;i<=AGESUP;i++)  
     for(j=1;j<=NCOVMAX;j++)  
       for(k=1;k<=NCOVMAX;k++)  
         probs[i][j][k]=0.;  
   
   /*---------- 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);

Removed from v.1.97  
changed lines
  Added in v.1.98


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