Diff for /imach/src/imach.c between versions 1.213 and 1.214

version 1.213, 2015/12/11 18:22:17 version 1.214, 2015/12/16 06:57:54
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
     Revision 1.214  2015/12/16 06:57:54  brouard
     Summary: temporary not working
   
   Revision 1.213  2015/12/11 18:22:17  brouard    Revision 1.213  2015/12/11 18:22:17  brouard
   Summary: 0.98r4    Summary: 0.98r4
   
Line 827  double **matprod2(); /* test */ Line 830  double **matprod2(); /* test */
 double **oldm, **newm, **savm; /* Working pointers to matrices */  double **oldm, **newm, **savm; /* Working pointers to matrices */
 double **oldms, **newms, **savms; /* Fixed working pointers to matrices */  double **oldms, **newms, **savms; /* Fixed working pointers to matrices */
 /*FILE *fic ; */ /* Used in readdata only */  /*FILE *fic ; */ /* Used in readdata only */
 FILE *ficpar, *ficparo,*ficres, *ficresp, *ficresphtm, *ficrespl, *ficrespij, *ficrest,*ficresf,*ficrespop;  FILE *ficpar, *ficparo,*ficres, *ficresp, *ficresphtm, *ficresphtmfr, *ficrespl, *ficrespij, *ficrest,*ficresf,*ficrespop;
 FILE *ficlog, *ficrespow;  FILE *ficlog, *ficrespow;
 int globpr=0; /* Global variable for printing or not */  int globpr=0; /* Global variable for printing or not */
 double fretone; /* Only one call to likelihood */  double fretone; /* Only one call to likelihood */
Line 2249  double ***hpxij(double ***po, int nhstep Line 2252  double ***hpxij(double ***po, int nhstep
   double **out, cov[NCOVMAX+1];    double **out, cov[NCOVMAX+1];
   double **newm;    double **newm;
   double agexact;    double agexact;
     double agebegin, ageend;
   
   /* Hstepm could be zero and should return the unit matrix */    /* Hstepm could be zero and should return the unit matrix */
   for (i=1;i<=nlstate+ndeath;i++)    for (i=1;i<=nlstate+ndeath;i++)
Line 2262  double ***hpxij(double ***po, int nhstep Line 2266  double ***hpxij(double ***po, int nhstep
       newm=savm;        newm=savm;
       /* Covariates have to be included here again */        /* Covariates have to be included here again */
       cov[1]=1.;        cov[1]=1.;
       agexact=age+((h-1)*hstepm + (d-1))*stepm/YEARM;        agexact=age+((h-1)*hstepm + (d-1))*stepm/YEARM; /* age just before transition */
       cov[2]=agexact;        cov[2]=agexact;
       if(nagesqr==1)        if(nagesqr==1)
         cov[3]= agexact*agexact;          cov[3]= agexact*agexact;
Line 2633  double funcone( double *x) Line 2637  double funcone( double *x)
   int s1, s2;    int s1, s2;
   double bbh, survp;    double bbh, survp;
   double agexact;    double agexact;
     double agebegin, ageend;
   /*extern weight */    /*extern weight */
   /* We are differentiating ll according to initial status */    /* We are differentiating ll according to initial status */
   /*  for (i=1;i<=npar;i++) printf("%f ", x[i]);*/    /*  for (i=1;i<=npar;i++) printf("%f ", x[i]);*/
Line 2651  double funcone( double *x) Line 2656  double funcone( double *x)
           oldm[ii][j]=(ii==j ? 1.0 : 0.0);            oldm[ii][j]=(ii==j ? 1.0 : 0.0);
           savm[ii][j]=(ii==j ? 1.0 : 0.0);            savm[ii][j]=(ii==j ? 1.0 : 0.0);
         }          }
       for(d=0; d<dh[mi][i]; d++){        
         agebegin=agev[mw[mi][i]][i]; /* Age at beginning of effective wave */
         ageend=agev[mw[mi][i]][i] + (dh[mi][i])*stepm/YEARM; /* Age at end of effective wave and at the end of transition */
         for(d=0; d<dh[mi][i]; d++){  /* Delay between two effective waves */
           /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i]
             and mw[mi+1][i]. dh depends on stepm.*/
         newm=savm;          newm=savm;
         agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;          agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;
         cov[2]=agexact;          cov[2]=agexact;
Line 2699  double funcone( double *x) Line 2709  double funcone( double *x)
       ll[s[mw[mi][i]][i]] += 2*weight[i]*lli;        ll[s[mw[mi][i]][i]] += 2*weight[i]*lli;
       /*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */        /*printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */
       if(globpr){        if(globpr){
         fprintf(ficresilk,"%9ld %6.1f %6d %2d %2d %2d %2d %3d %11.6f %8.4f %8.3f\          fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %11.6f %8.4f %8.3f\
  %11.6f %11.6f %11.6f ", \   %11.6f %11.6f %11.6f ", \
                 num[i], agexact, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw,                  num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw,
                 2*weight[i]*lli,out[s1][s2],savm[s1][s2]);                  2*weight[i]*lli,out[s1][s2],savm[s1][s2]);
         for(k=1,llt=0.,l=0.; k<=nlstate; k++){          for(k=1,llt=0.,l=0.; k<=nlstate; k++){
           llt +=ll[k]*gipmx/gsw;            llt +=ll[k]*gipmx/gsw;
Line 2739  void likelione(FILE *ficres,double p[], Line 2749  void likelione(FILE *ficres,double p[],
       printf("Problem with resultfile: %s\n", fileresilk);        printf("Problem with resultfile: %s\n", fileresilk);
       fprintf(ficlog,"Problem with resultfile: %s\n", fileresilk);        fprintf(ficlog,"Problem with resultfile: %s\n", fileresilk);
     }      }
     fprintf(ficresilk, "#individual(line's_record) count age s1 s2 wave# effective_wave# number_of_matrices_product pij weight weight/gpw -2ln(pij)*weight 0pij_x 0pij_(x-stepm) cumulating_loglikeli_by_health_state(reweighted=-2ll*weightXnumber_of_contribs/sum_of_weights) and_total\n");      fprintf(ficresilk, "#individual(line's_record) count ageb ageend s1 s2 wave# effective_wave# number_of_matrices_product pij weight weight/gpw -2ln(pij)*weight 0pij_x 0pij_(x-stepm) cumulating_loglikeli_by_health_state(reweighted=-2ll*weightXnumber_of_contribs/sum_of_weights) and_total\n");
     fprintf(ficresilk, "#num_i age i s1 s2 mi mw dh likeli weight %%weight 2wlli out sav ");      fprintf(ficresilk, "#num_i ageb agend i s1 s2 mi mw dh likeli weight %%weight 2wlli out sav ");
     /*  i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],2*weight[i]*lli,out[s1][s2],savm[s1][s2]); */      /*  i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],2*weight[i]*lli,out[s1][s2],savm[s1][s2]); */
     for(k=1; k<=nlstate; k++)       for(k=1; k<=nlstate; k++) 
       fprintf(ficresilk," -2*gipw/gsw*weight*ll[%d]++",k);        fprintf(ficresilk," -2*gipw/gsw*weight*ll[%d]++",k);
Line 3214  void pstamp(FILE *fichier) Line 3224  void pstamp(FILE *fichier)
 }  }
   
 /************ Frequencies ********************/  /************ Frequencies ********************/
 void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, int *Tvaraff, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[])  void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \
                     int *Tvaraff, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[],\
                     int firstpass,  int lastpass, int stepm, int weightopt, char model[])
 {  /* Some frequencies */  {  /* Some frequencies */
       
   int i, m, jk, j1, bool, z1,j;    int i, m, jk, j1, bool, z1,j;
     int mi; /* Effective wave */
   int first;    int first;
   double ***freq; /* Frequencies */    double ***freq; /* Frequencies */
   double *pp, **prop;    double *pp, **prop;
   double pos,posprop, k2, dateintsum=0,k2cpt=0;    double pos,posprop, k2, dateintsum=0,k2cpt=0;
   char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH];    char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH];
       double agebegin, ageend;
       
   pp=vector(1,nlstate);    pp=vector(1,nlstate);
   prop=matrix(1,nlstate,iagemin,iagemax+3);    prop=matrix(1,nlstate,iagemin,iagemax+3);
   strcpy(fileresp,"P_");    strcpy(fileresp,"P_");
Line 3234  void  freqsummary(char fileres[], int ia Line 3248  void  freqsummary(char fileres[], int ia
     fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp);      fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp);
     exit(0);      exit(0);
   }    }
   printf("Problem with prevalence resultfile: %s\n", fileresp);  
   strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm"));    strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm"));
   if((ficresphtm=fopen(fileresphtm,"w"))==NULL) {    if((ficresphtm=fopen(fileresphtm,"w"))==NULL) {
     printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));      printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));
Line 3242  void  freqsummary(char fileres[], int ia Line 3256  void  freqsummary(char fileres[], int ia
     fflush(ficlog);      fflush(ficlog);
     exit(70);       exit(70); 
   }    }
     else{
       fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
   <hr size=\"2\" color=\"#EC5E5E\"> \n\
   Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\
             fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
     }
       fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition</h4>\n",fileresphtm, fileresphtm);
       
     strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm"));
     if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) {
       printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
       fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
       fflush(ficlog);
       exit(70); 
     }
     else{
       fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
   <hr size=\"2\" color=\"#EC5E5E\"> \n\
   Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\
             fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
     }
     fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr);
   
   freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin,iagemax+3);    freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin,iagemax+3);
   j1=0;    j1=0;
       
Line 3250  void  freqsummary(char fileres[], int ia Line 3287  void  freqsummary(char fileres[], int ia
   
   first=1;    first=1;
   
   /* for(k1=1; k1<=j ; k1++){ */  /* Loop on covariates */    for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){ /* Loop on covariates combination */
   /*  for(i1=1; i1<=ncodemax[k1];i1++){ */ /* Now it is 2 */  
   /*    j1++; */  
   for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){  
       /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);        /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
         scanf("%d", i);*/          scanf("%d", i);*/
       for (i=-5; i<=nlstate+ndeath; i++)          for (i=-5; i<=nlstate+ndeath; i++)  
Line 3267  void  freqsummary(char fileres[], int ia Line 3301  void  freqsummary(char fileres[], int ia
               
       dateintsum=0;        dateintsum=0;
       k2cpt=0;        k2cpt=0;
       for (i=1; i<=imx; i++) {        for (i=1; i<=imx; i++) { /* For each individual i */
         bool=1;          bool=1;
         if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */          if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
           for (z1=1; z1<=cptcoveff; z1++)                   for (z1=1; z1<=cptcoveff; z1++)       
Line 3280  void  freqsummary(char fileres[], int ia Line 3314  void  freqsummary(char fileres[], int ia
               /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/                /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/
             }               } 
         } /* cptcovn > 0 */          } /* cptcovn > 0 */
    
         if (bool==1){          if (bool==1){
           for(m=firstpass; m<=lastpass; m++){            /* for(m=firstpass; m<=lastpass; m++){ */
             k2=anint[m][i]+(mint[m][i]/12.);            for(mi=1; mi<wav[i];mi++){
             /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/              m=mw[mi][i];
               if(agev[m][i]==0) agev[m][i]=iagemax+1;              /* dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective (mi) waves m=mw[mi][i]
               if(agev[m][i]==1) agev[m][i]=iagemax+2;                 and mw[mi+1][i]. dh depends on stepm. */
               if (s[m][i]>0 && s[m][i]<=nlstate)              agebegin=agev[m][i]; /* Age at beginning of wave before transition*/
                 prop[s[m][i]][(int)agev[m][i]] += weight[i];              ageend=agev[m][i]+(dh[m][i])*stepm/YEARM; /* Age at end of wave and transition */
               if(m >=firstpass && m <=lastpass){
                 k2=anint[m][i]+(mint[m][i]/12.);
                 /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
                 if(agev[m][i]==0) agev[m][i]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */
                 if(agev[m][i]==1) agev[m][i]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */
                 if (s[m][i]>0 && s[m][i]<=nlstate)  /* If status at wave m is known and a live state */
                   prop[s[m][i]][(int)agev[m][i]] += weight[i];  /* At age of beginning of transition, where status is known */
               if (m<lastpass) {                if (m<lastpass) {
                 freq[s[m][i]][s[m+1][i]][(int)agev[m][i]] += weight[i];                  /* if(s[m][i]==4 && s[m+1][i]==4) */
                 freq[s[m][i]][s[m+1][i]][iagemax+3] += weight[i];                  /*   printf(" num=%ld m=%d, i=%d s1=%d s2=%d agev at m=%d\n", num[i], m, i,s[m][i],s[m+1][i], (int)agev[m][i]); */
                   if(s[m][i]==-1)
                     printf(" num=%ld m=%d, i=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[i], m, i,s[m][i],s[m+1][i], (int)agev[m][i],agebegin, ageend, (int)((agebegin+ageend)/2.));
                   freq[s[m][i]][s[m+1][i]][(int)agev[m][i]] += weight[i]; /* At age of beginning of transition, where status is known */
                   /* freq[s[m][i]][s[m+1][i]][(int)((agebegin+ageend)/2.)] += weight[i]; */
                   freq[s[m][i]][s[m+1][i]][iagemax+3] += weight[i]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */
               }                }
                             }  
               if ((agev[m][i]>1) && (agev[m][i]< (iagemax+3)) && (anint[m][i]!=9999) && (mint[m][i]!=99)) {              if ((agev[m][i]>1) && (agev[m][i]< (iagemax+3)) && (anint[m][i]!=9999) && (mint[m][i]!=99)) {
                 dateintsum=dateintsum+k2;                dateintsum=dateintsum+k2;
                 k2cpt++;                k2cpt++;
                 /* printf("i=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",i, dateintsum/k2cpt, dateintsum,k2cpt, k2); */                /* printf("i=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",i, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
               }              }
               /*}*/              /*}*/
           } /* end m */            } /* end m */
         } /* end bool */          } /* end bool */
       } /* end i = 1 to imx */        } /* end i = 1 to imx */
Line 3308  void  freqsummary(char fileres[], int ia Line 3354  void  freqsummary(char fileres[], int ia
       pstamp(ficresp);        pstamp(ficresp);
       if  (cptcovn>0) {        if  (cptcovn>0) {
         fprintf(ficresp, "\n#********** Variable ");           fprintf(ficresp, "\n#********** Variable "); 
         fprintf(ficresphtm, "\n<h3>********** Variable ");           fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); 
           fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); 
         for (z1=1; z1<=cptcoveff; z1++){          for (z1=1; z1<=cptcoveff; z1++){
           fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);            fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
           fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);            fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
             fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         }          }
           fprintf(ficresp, "**********\n#");            fprintf(ficresp, "**********\n#");
         fprintf(ficresphtm, "**********</h3>\n#");          fprintf(ficresphtm, "**********</h3>\n");
           fprintf(ficresphtmfr, "**********</h3>\n");
         fprintf(ficlog, "\n#********** Variable ");           fprintf(ficlog, "\n#********** Variable "); 
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);          for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficlog, "**********\n#");          fprintf(ficlog, "**********\n");
       }        }
       fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\"><th></th>");        fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">");
       for(i=1; i<=nlstate;i++) {        for(i=1; i<=nlstate;i++) {
         fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);          fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);
         fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i);          fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i);
Line 3327  void  freqsummary(char fileres[], int ia Line 3376  void  freqsummary(char fileres[], int ia
       fprintf(ficresp, "\n");        fprintf(ficresp, "\n");
       fprintf(ficresphtm, "\n");        fprintf(ficresphtm, "\n");
               
         /* Header of frequency table by age */
         fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");
         fprintf(ficresphtmfr,"<th>Age</th> ");
         for(jk=-1; jk <=nlstate+ndeath; jk++){
           for(m=-1; m <=nlstate+ndeath; m++){
             if(jk!=0 && m!=0)
               fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);
           }
         }
         fprintf(ficresphtmfr, "\n");
         
         /* For each age */
       for(i=iagemin; i <= iagemax+3; i++){        for(i=iagemin; i <= iagemax+3; i++){
         fprintf(ficresphtm,"<tr>");          fprintf(ficresphtm,"<tr>");
         if(i==iagemax+3){          if(i==iagemax+1){
             fprintf(ficlog,"1");
             fprintf(ficresphtmfr,"<tr><th>0</th> ");
           }else if(i==iagemax+2){
             fprintf(ficlog,"0");
             fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");
           }else if(i==iagemax+3){
           fprintf(ficlog,"Total");            fprintf(ficlog,"Total");
             fprintf(ficresphtmfr,"<tr><th>Total</th> ");
         }else{          }else{
           if(first==1){            if(first==1){
             first=0;              first=0;
             printf("See log file for details...\n");              printf("See log file for details...\n");
           }            }
             fprintf(ficresphtmfr,"<tr><th>%d</th> ",i);
           fprintf(ficlog,"Age %d", i);            fprintf(ficlog,"Age %d", i);
         }          }
         for(jk=1; jk <=nlstate ; jk++){          for(jk=1; jk <=nlstate ; jk++){
Line 3389  void  freqsummary(char fileres[], int ia Line 3458  void  freqsummary(char fileres[], int ia
           }            }
         }          }
                   
         for(jk=-1; jk <=nlstate+ndeath; jk++)          for(jk=-1; jk <=nlstate+ndeath; jk++){
           for(m=-1; m <=nlstate+ndeath; m++)            for(m=-1; m <=nlstate+ndeath; m++){
             if(freq[jk][m][i] !=0 ) {              if(freq[jk][m][i] !=0 ) { /* minimizing output */
             if(first==1)                if(first==1){
               printf(" %d%d=%.0f",jk,m,freq[jk][m][i]);                  printf(" %d%d=%.0f",jk,m,freq[jk][m][i]);
                 }
               fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][i]);                fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][i]);
             }              }
               if(jk!=0 && m!=0)
                 fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][i]);
             }
           }
           fprintf(ficresphtmfr,"</tr>\n ");
         if(i <= iagemax){          if(i <= iagemax){
           fprintf(ficresp,"\n");            fprintf(ficresp,"\n");
           fprintf(ficresphtm,"</tr>\n");            fprintf(ficresphtm,"</tr>\n");
Line 3405  void  freqsummary(char fileres[], int ia Line 3480  void  freqsummary(char fileres[], int ia
         fprintf(ficlog,"\n");          fprintf(ficlog,"\n");
       } /* end loop i */        } /* end loop i */
       fprintf(ficresphtm,"</table>\n");        fprintf(ficresphtm,"</table>\n");
         fprintf(ficresphtmfr,"</table>\n");
       /*}*/        /*}*/
   } /* end j1 */    } /* end j1 */
   dateintmean=dateintsum/k2cpt;     dateintmean=dateintsum/k2cpt; 
     
   fclose(ficresp);    fclose(ficresp);
   fclose(ficresphtm);    fclose(ficresphtm);
     fclose(ficresphtmfr);
   free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin, iagemax+3);    free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin, iagemax+3);
   free_vector(pp,1,nlstate);    free_vector(pp,1,nlstate);
   free_matrix(prop,1,nlstate,iagemin, iagemax+3);    free_matrix(prop,1,nlstate,iagemin, iagemax+3);
Line 3426  void prevalence(double ***probs, double Line 3503  void prevalence(double ***probs, double
   */    */
     
   int i, m, jk, j1, bool, z1,j;    int i, m, jk, j1, bool, z1,j;
     int mi; /* Effective wave */
     int iage;
     double agebegin, ageend;
   
   double **prop;    double **prop;
   double posprop;     double posprop; 
Line 3445  void prevalence(double ***probs, double Line 3525  void prevalence(double ***probs, double
       
   first=1;    first=1;
   for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){    for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){
     /*for(i1=1; i1<=ncodemax[k1];i1++){      for (i=1; i<=nlstate; i++)  
       j1++;*/        for(iage=iagemin; iage <= iagemax+3; iage++)
                 prop[i][iage]=0.0;
       for (i=1; i<=nlstate; i++)        
         for(m=iagemin; m <= iagemax+3; m++)      for (i=1; i<=imx; i++) { /* Each individual */
           prop[i][m]=0.0;        bool=1;
              if  (cptcovn>0) {  /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
       for (i=1; i<=imx; i++) { /* Each individual */          for (z1=1; z1<=cptcoveff; z1++) 
         bool=1;            if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) 
         if  (cptcovn>0) {              bool=0;
           for (z1=1; z1<=cptcoveff; z1++)         } 
             if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)])         if (bool==1) { 
               bool=0;          /* for(m=firstpass; m<=lastpass; m++){/\* Other selection (we can limit to certain interviews*\/ */
         }           for(mi=1; mi<wav[i];mi++){
         if (bool==1) {             m=mw[mi][i];
           for(m=firstpass; m<=lastpass; m++){/* Other selection (we can limit to certain interviews*/            agebegin=agev[m][i]; /* Age at beginning of wave before transition*/
             /* ageend=agev[m][i]+(dh[m][i])*stepm/YEARM; /\* Age at end of wave and transition *\/ */
             if(m >=firstpass && m <=lastpass){
             y2=anint[m][i]+(mint[m][i]/12.); /* Fractional date in year */              y2=anint[m][i]+(mint[m][i]/12.); /* Fractional date in year */
             if ((y2>=dateprev1) && (y2<=dateprev2)) { /* Here is the main selection (fractional years) */              if ((y2>=dateprev1) && (y2<=dateprev2)) { /* Here is the main selection (fractional years) */
               if(agev[m][i]==0) agev[m][i]=iagemax+1;                if(agev[m][i]==0) agev[m][i]=iagemax+1;
               if(agev[m][i]==1) agev[m][i]=iagemax+2;                if(agev[m][i]==1) agev[m][i]=iagemax+2;
               if((int)agev[m][i] <iagemin || (int)agev[m][i] >iagemax+3) printf("Error on individual =%d agev[m][i]=%f m=%d\n",i, agev[m][i],m);                 if((int)agev[m][i] <iagemin || (int)agev[m][i] >iagemax+3) printf("Error on individual =%d agev[m][i]=%f m=%d\n",i, agev[m][i],m); 
               if (s[m][i]>0 && s[m][i]<=nlstate) {                 if (s[m][i]>0 && s[m][i]<=nlstate) { 
                 /*if(i>4620) printf(" i=%d m=%d s[m][i]=%d (int)agev[m][i]=%d weight[i]=%f prop=%f\n",i,m,s[m][i],(int)agev[m][m],weight[i],prop[s[m][i]][(int)agev[m][i]]);*/                  /*if(i>4620) printf(" i=%d m=%d s[m][i]=%d (int)agev[m][i]=%d weight[i]=%f prop=%f\n",i,m,s[m][i],(int)agev[m][m],weight[i],prop[s[m][i]][(int)agev[m][i]]);*/
                 prop[s[m][i]][(int)agev[m][i]] += weight[i];                  prop[s[m][i]][(int)agev[m][i]] += weight[i];/* At age of beginning of transition, where status is known */
                 prop[s[m][i]][iagemax+3] += weight[i];                   prop[s[m][i]][iagemax+3] += weight[i]; 
               }                 } /* end valid statuses */ 
             }              } /* end selection of dates */
           } /* end selection of waves */            } /* end selection of waves */
         }          } /* end effective waves */
       }        } /* end bool */
       for(i=iagemin; i <= iagemax+3; i++){        }
         for(jk=1,posprop=0; jk <=nlstate ; jk++) {       for(i=iagemin; i <= iagemax+3; i++){  
           posprop += prop[jk][i];         for(jk=1,posprop=0; jk <=nlstate ; jk++) { 
         }           posprop += prop[jk][i]; 
                 } 
         for(jk=1; jk <=nlstate ; jk++){             
           if( i <=  iagemax){         for(jk=1; jk <=nlstate ; jk++){       
             if(posprop>=1.e-5){           if( i <=  iagemax){ 
               probs[i][jk][j1]= prop[jk][i]/posprop;            if(posprop>=1.e-5){ 
             } else{              probs[i][jk][j1]= prop[jk][i]/posprop;
               if(first==1){            } else{
                 first=0;              if(first==1){
                 printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\nSee others on log file...\n",jk,i,j1,probs[i][jk][j1]);                first=0;
               }                printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\nSee others on log file...\n",jk,i,j1,probs[i][jk][j1]);
             }              }
           }             }
         }/* end jk */           } 
       }/* end i */         }/* end jk */ 
       }/* end i */ 
     /*} *//* end i1 */      /*} *//* end i1 */
   } /* end j1 */    } /* end j1 */
       
Line 3515  void  concatwav(int wav[], int **dh, int Line 3598  void  concatwav(int wav[], int **dh, int
   int i, mi, m;    int i, mi, m;
   /* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1;    /* int j, k=0,jk, ju, jl,jmin=1e+5, jmax=-1;
      double sum=0., jmean=0.;*/       double sum=0., jmean=0.;*/
   int first;    int first, firstwo;
   int j, k=0,jk, ju, jl;    int j, k=0,jk, ju, jl;
   double sum=0.;    double sum=0.;
   first=0;    first=0;
     firstwo=0;
   jmin=100000;    jmin=100000;
   jmax=-1;    jmax=-1;
   jmean=0.;    jmean=0.;
   for(i=1; i<=imx; i++){    for(i=1; i<=imx; i++){  /* For simple cases and if state is death */
     mi=0;      mi=0;
     m=firstpass;      m=firstpass;
     while(s[m][i] <= nlstate){      while(s[m][i] <= nlstate){  /* a live state */
       if(s[m][i]>=1 || s[m][i]==-2 || s[m][i]==-4 || s[m][i]==-5)        if(s[m][i]>=1 || s[m][i]==-2 || s[m][i]==-4 || s[m][i]==-5)
         mw[++mi][i]=m;          mw[++mi][i]=m;
       if(m >=lastpass)        if(m >=lastpass)
Line 3533  void  concatwav(int wav[], int **dh, int Line 3617  void  concatwav(int wav[], int **dh, int
       else        else
         m++;          m++;
     }/* end while */      }/* end while */
     if (s[m][i] > nlstate){      if (s[m][i] > nlstate){  /* In a death state */
       mi++;     /* Death is another wave */        mi++;     /* Death is another wave */
       /* if(mi==0)  never been interviewed correctly before death */        /* if(mi==0)  never been interviewed correctly before death */
          /* Only death is a correct wave */           /* Only death is a correct wave */
       mw[mi][i]=m;        mw[mi][i]=m;
       }else if (andc[i] != 9999) { /* A death occured after lastpass */
         m++;
         mi++;
         s[m][i]=nlstate+1;  /* We are setting the status to the last of non live state */
         mw[mi][i]=m;
         nbwarn++;
         if(firstwo==0){
           printf("Warning! Death for individual %ld line=%d  occurred after last wave %d. Since 0.98r4 we considered a status %d at wave %d\nOthers in log file only\n",num[i],i,lastpass,nlstate+1, m);
           fprintf(ficlog,"Warning! Death for individual %ld line=%d  occurred after last wave %d. Since 0.98r4 we considered a status %d at wave %d\n",num[i],i,lastpass,nlstate+1, m);
           firstwo=1;
         }
         if(firstwo==1){
           fprintf(ficlog,"Warning! Death for individual %ld line=%d  occurred after last wave %d. Since 0.98r4 we considered a status %d at wave %d\n",num[i],i,lastpass,nlstate+1, m);
         }
     }      }
   
     wav[i]=mi;      wav[i]=mi;
     if(mi==0){      if(mi==0){
       nbwarn++;        nbwarn++;
Line 3552  void  concatwav(int wav[], int **dh, int Line 3649  void  concatwav(int wav[], int **dh, int
       }        }
     } /* end mi==0 */      } /* end mi==0 */
   } /* End individuals */    } /* End individuals */
     /* wav and mw are no more changed */
   
     
   for(i=1; i<=imx; i++){    for(i=1; i<=imx; i++){
     for(mi=1; mi<wav[i];mi++){      for(mi=1; mi<wav[i];mi++){
       if (stepm <=0)        if (stepm <=0)
Line 4875  void printinghtml(char fileresu[], char Line 4974  void printinghtml(char fileresu[], char
    fprintf(fichtm,"<ul><li><a href='#firstorder'>Result files (first order: no variance)</a>\n \     fprintf(fichtm,"<ul><li><a href='#firstorder'>Result files (first order: no variance)</a>\n \
    <li><a href='#secondorder'>Result files (second order (variance)</a>\n \     <li><a href='#secondorder'>Result files (second order (variance)</a>\n \
 </ul>");  </ul>");
    fprintf(fichtm,"<ul><li><h4><a name='firstorder'>Result files (first order: no variance)</a></h4>\n \     fprintf(fichtm,"<ul><li><h4><a name='firstorder'>Result files (first order: no variance)</a></h4>\n");
  - Observed prevalence in each state (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> (html file) ",     fprintf(fichtm,"<li>- Observed frequency between two states (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> (html file)<br/>\n",
              jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirfext3(optionfilefiname,"PHTMFR_",".htm"),subdirfext3(optionfilefiname,"PHTMFR_",".htm"));
      fprintf(fichtm,"<li> - Observed prevalence in each state (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> (html file) ",
            jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirfext3(optionfilefiname,"PHTM_",".htm"),subdirfext3(optionfilefiname,"PHTM_",".htm"));             jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirfext3(optionfilefiname,"PHTM_",".htm"),subdirfext3(optionfilefiname,"PHTM_",".htm"));
    fprintf(fichtm,",  <a href=\"%s\">%s</a> (text file) <br>\n",subdirf2(fileresu,"P_"),subdirf2(fileresu,"P_"));     fprintf(fichtm,",  <a href=\"%s\">%s</a> (text file) <br>\n",subdirf2(fileresu,"P_"),subdirf2(fileresu,"P_"));
    fprintf(fichtm,"\     fprintf(fichtm,"\
Line 4943  divided by h: <sub>h</sub>P<sub>ij</sub> Line 5044  divided by h: <sub>h</sub>P<sub>ij</sub>
     if(prevfcast==1){      if(prevfcast==1){
       /* Projection of prevalence up to period (stable) prevalence in each health state */        /* Projection of prevalence up to period (stable) prevalence in each health state */
       for(cpt=1; cpt<=nlstate;cpt++){        for(cpt=1; cpt<=nlstate;cpt++){
         fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %f to %f) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \          fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \
 <img src=\"%s_%d-%d.svg\">", dateprev1, dateprev2, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1);  <img src=\"%s_%d-%d.svg\">", dateprev1, dateprev2, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1);
       }        }
     }      }
Line 5063  true period expectancies (those weighted Line 5164  true period expectancies (those weighted
 /* replot exp(p1+p2*x)/(1+exp(p1+p2*x)+exp(p3+p4*x)+exp(p5+p6*x)) t "p12(x)"  */  /* replot exp(p1+p2*x)/(1+exp(p1+p2*x)+exp(p3+p4*x)+exp(p5+p6*x)) t "p12(x)"  */
     /* fprintf(ficgp,"\nset out \"%s.svg\";",subdirf2(optionfilefiname,"ILK_")); */      /* fprintf(ficgp,"\nset out \"%s.svg\";",subdirf2(optionfilefiname,"ILK_")); */
     fprintf(ficgp,"\nset out \"%s-dest.png\";",subdirf2(optionfilefiname,"ILK_"));      fprintf(ficgp,"\nset out \"%s-dest.png\";",subdirf2(optionfilefiname,"ILK_"));
     fprintf(ficgp,"\nset log y;plot  \"%s\" u 2:(-$12):5 t \"All sample, transitions colored by destination\" with dots lc variable; set out;\n",subdirf(fileresilk));      fprintf(ficgp,"\nset log y;plot  \"%s\" u 2:(-$13):6 t \"All sample, transitions colored by destination\" with dots lc variable; set out;\n",subdirf(fileresilk));
     fprintf(ficgp,"\nset out \"%s-ori.png\";",subdirf2(optionfilefiname,"ILK_"));      fprintf(ficgp,"\nset out \"%s-ori.png\";",subdirf2(optionfilefiname,"ILK_"));
     fprintf(ficgp,"\nset log y;plot  \"%s\" u 2:(-$12):4 t \"All sample, transitions colored by origin\" with dots lc variable; set out;\n\n",subdirf(fileresilk));      fprintf(ficgp,"\nset log y;plot  \"%s\" u 2:(-$13):5 t \"All sample, transitions colored by origin\" with dots lc variable; set out;\n\n",subdirf(fileresilk));
     for (i=1; i<= nlstate ; i ++) {      for (i=1; i<= nlstate ; i ++) {
       fprintf(ficgp,"\nset out \"%s-p%dj.png\";set ylabel \"Probability for each individual/wave\";",subdirf2(optionfilefiname,"ILK_"),i);        fprintf(ficgp,"\nset out \"%s-p%dj.png\";set ylabel \"Probability for each individual/wave\";",subdirf2(optionfilefiname,"ILK_"),i);
       fprintf(ficgp,"unset log;\n# plot weighted, mean weight should have point size of 0.5\n plot  \"%s\"",subdirf(fileresilk));        fprintf(ficgp,"unset log;\n# plot weighted, mean weight should have point size of 0.5\n plot  \"%s\"",subdirf(fileresilk));
       fprintf(ficgp,"  u  2:($4 == %d && $5==%d ? $9 : 1/0):($11/4.):5 t \"p%d%d\" with points pointtype 7 ps variable lc variable \\\n",i,1,i,1);        fprintf(ficgp,"  u  2:($5 == %d && $6==%d ? $10 : 1/0):($12/4.):6 t \"p%d%d\" with points pointtype 7 ps variable lc variable \\\n",i,1,i,1);
       for (j=2; j<= nlstate+ndeath ; j ++) {        for (j=2; j<= nlstate+ndeath ; j ++) {
         fprintf(ficgp,",\\\n \"\" u  2:($4 == %d && $5==%d ? $9 : 1/0):($11/4.):5 t \"p%d%d\" with points pointtype 7 ps variable lc variable ",i,j,i,j);          fprintf(ficgp,",\\\n \"\" u  2:($5 == %d && $6==%d ? $10 : 1/0):($12/4.):6 t \"p%d%d\" with points pointtype 7 ps variable lc variable ",i,j,i,j);
       }        }
       fprintf(ficgp,";\nset out; unset ylabel;\n");         fprintf(ficgp,";\nset out; unset ylabel;\n"); 
     }      }
Line 5593  void prevforecast(char fileres[], double Line 5694  void prevforecast(char fileres[], double
      in each health status at the date of interview (if between dateprev1 and dateprev2).       in each health status at the date of interview (if between dateprev1 and dateprev2).
      We still use firstpass and lastpass as another selection.       We still use firstpass and lastpass as another selection.
   */    */
     /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint,strstart,\ */
     /*          firstpass, lastpass,  stepm,  weightopt, model); */
   prevalence(probs, ageminpar, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass);    prevalence(probs, ageminpar, agemax, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass);
     
   strcpy(fileresf,"F_");     strcpy(fileresf,"F_"); 
Line 6536  int calandcheckages(int imx, int maxwav, Line 6639  int calandcheckages(int imx, int maxwav,
   for (i=1; i<=imx; i++)  {    for (i=1; i<=imx; i++)  {
     agedc[i]=(moisdc[i]/12.+andc[i])-(moisnais[i]/12.+annais[i]);      agedc[i]=(moisdc[i]/12.+andc[i])-(moisnais[i]/12.+annais[i]);
     for(m=firstpass; (m<= lastpass); m++){      for(m=firstpass; (m<= lastpass); m++){
       if(s[m][i] >0 || s[m][i]==-2 || s[m][i]==-4 || s[m][i]==-5){        if(s[m][i] >0  || s[m][i]==-1 || s[m][i]==-2 || s[m][i]==-4 || s[m][i]==-5){ /* What if s[m][i]=-1 */
         if (s[m][i] >= nlstate+1) {          if (s[m][i] >= nlstate+1) {
           if(agedc[i]>0){            if(agedc[i]>0){
             if((int)moisdc[i]!=99 && (int)andc[i]!=9999){              if((int)moisdc[i]!=99 && (int)andc[i]!=9999){
               agev[m][i]=agedc[i];                agev[m][i]=agedc[i];
           /*if(moisdc[i]==99 && andc[i]==9999) s[m][i]=-1;*/                /*if(moisdc[i]==99 && andc[i]==9999) s[m][i]=-1;*/
             }else {              }else {
               if ((int)andc[i]!=9999){                if ((int)andc[i]!=9999){
                 nbwarn++;                  nbwarn++;
Line 6551  int calandcheckages(int imx, int maxwav, Line 6654  int calandcheckages(int imx, int maxwav,
               }                }
             }              }
           } /* agedc > 0 */            } /* agedc > 0 */
         }          } /* end if */
         else if(s[m][i] !=9){ /* Standard case, age in fractional          else if(s[m][i] !=9){ /* Standard case, age in fractional
                                  years but with the precision of a month */                                   years but with the precision of a month */
           agev[m][i]=(mint[m][i]/12.+1./24.+anint[m][i])-(moisnais[i]/12.+1./24.+annais[i]);            agev[m][i]=(mint[m][i]/12.+1./24.+anint[m][i])-(moisnais[i]/12.+1./24.+annais[i]);
Line 6567  int calandcheckages(int imx, int maxwav, Line 6670  int calandcheckages(int imx, int maxwav,
           }            }
           /*agev[m][i]=anint[m][i]-annais[i];*/            /*agev[m][i]=anint[m][i]-annais[i];*/
           /*     agev[m][i] = age[i]+2*m;*/            /*     agev[m][i] = age[i]+2*m;*/
         }          } /* en if 9*/
         else { /* =9 */          else { /* =9 */
             /* printf("Debug num[%d]=%ld s[%d][%d]=%d\n",i,num[i], m,i, s[m][i]); */
           agev[m][i]=1;            agev[m][i]=1;
           s[m][i]=-1;            s[m][i]=-1;
         }          }
       }        }
       else /*= 0 Unknown */        else if(s[m][i]==0) /*= 0 Unknown */
         agev[m][i]=1;          agev[m][i]=1;
     }        else{
               printf("Warning, num[%d]=%ld, s[%d][%d]=%d\n", i, num[i], m, i,s[m][i]); 
           fprintf(ficlog, "Warning, num[%d]=%ld, s[%d][%d]=%d\n", i, num[i], m, i,s[m][i]); 
           agev[m][i]=0;
         }
       } /* End for lastpass */
   }    }
       
   for (i=1; i<=imx; i++)  {    for (i=1; i<=imx; i++)  {
     for(m=firstpass; (m<=lastpass); m++){      for(m=firstpass; (m<=lastpass); m++){
       if (s[m][i] > (nlstate+ndeath)) {        if (s[m][i] > (nlstate+ndeath)) {
Line 7581  Please run with mle=-1 to get a correct Line 7690  Please run with mle=-1 to get a correct
   /* */    /* */
       
   wav=ivector(1,imx);    wav=ivector(1,imx);
   dh=imatrix(1,lastpass-firstpass+1,1,imx);    /* dh=imatrix(1,lastpass-firstpass+1,1,imx); */
   bh=imatrix(1,lastpass-firstpass+1,1,imx);    /* bh=imatrix(1,lastpass-firstpass+1,1,imx); */
   mw=imatrix(1,lastpass-firstpass+1,1,imx);    /* mw=imatrix(1,lastpass-firstpass+1,1,imx); */
     dh=imatrix(1,lastpass-firstpass+2,1,imx); /* We are adding a wave if status is unknown at last wave but death occurs after last wave.*/
     bh=imatrix(1,lastpass-firstpass+2,1,imx);
     mw=imatrix(1,lastpass-firstpass+2,1,imx);
         
   /* Concatenates waves */    /* Concatenates waves */
     /* Concatenates waves: wav[i] is the number of effective (useful waves) of individual i.
        Death is a valid wave (if date is known).
        mw[mi][i] is the number of (mi=1 to wav[i]) effective wave out of mi of individual i
        dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i]
        and mw[mi+1][i]. dh depends on stepm.
     */
   
   concatwav(wav, dh, bh, mw, s, agedc, agev,  firstpass, lastpass, imx, nlstate, stepm);    concatwav(wav, dh, bh, mw, s, agedc, agev,  firstpass, lastpass, imx, nlstate, stepm);
   /* */    /* */
     
Line 7792  Title=%s <br>Datafile=%s Firstpass=%d La Line 7911  Title=%s <br>Datafile=%s Firstpass=%d La
       
   /* Calculates basic frequencies. Computes observed prevalence at single age    /* Calculates basic frequencies. Computes observed prevalence at single age
      and prints on file fileres'p'. */       and prints on file fileres'p'. */
   freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint,strstart);    freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint,strstart,\
                 firstpass, lastpass,  stepm,  weightopt, model);
   
   fprintf(fichtm,"\n");    fprintf(fichtm,"\n");
   fprintf(fichtm,"<br>Total number of observations=%d <br>\n\    fprintf(fichtm,"<br>Total number of observations=%d <br>\n\
Line 8329  Please run with mle=-1 to get a correct Line 8449  Please run with mle=-1 to get a correct
    /*  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+2,1,imx);
     free_imatrix(bh,1,lastpass-firstpass+1,1,imx);      free_imatrix(bh,1,lastpass-firstpass+2,1,imx);
     free_imatrix(mw,1,lastpass-firstpass+1,1,imx);         free_imatrix(mw,1,lastpass-firstpass+2,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);*/

Removed from v.1.213  
changed lines
  Added in v.1.214


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