]> henry.ined.fr Git - .git/commitdiff
*** empty log message ***
authorAgnès Lièvre <agnes.lievre@education.gouv.fr>
Thu, 5 Jan 2006 20:23:19 +0000 (20:23 +0000)
committerAgnès Lièvre <agnes.lievre@education.gouv.fr>
Thu, 5 Jan 2006 20:23:19 +0000 (20:23 +0000)
src/imach.c

index 24f6196ce9d064fbc67f08daf2665b97ca90498a..cc596d4039e7ae4b836dd0cdaac1452db594ddcb 100644 (file)
@@ -1,6 +1,15 @@
 /* $Id$
   $State$
   $Log$
+  Revision 1.104  2005/09/30 16:11:43  lievre
+  (Module): sump fixed, loop imx fixed, and simplifications.
+  (Module): If the status is missing at the last wave but we know
+  that the person is alive, then we can code his/her status as -2
+  (instead of missing=-1 in earlier versions) and his/her
+  contributions to the likelihood is 1 - Prob of dying from last
+  health status (= 1-p13= p11+p12 in the easiest case of somebody in
+  the healthy state at last known wave). Version is 0.98
+
   Revision 1.103  2005/09/30 15:54:49  lievre
   (Module): sump fixed, loop imx fixed, and simplifications.
 
@@ -364,6 +373,7 @@ double *weight;
 int **s; /* Status */
 double *agedc, **covar, idx;
 int **nbcode, *Tcode, *Tvar, **codtab, **Tvard, *Tprod, cptcovprod, *Tvaraff;
+double *lsurv, *lpop, *tpop;
 
 double ftol=FTOL; /* Tolerance for computing Max Likelihood */
 double ftolhess; /* Tolerance for computing hessian */
@@ -1295,6 +1305,18 @@ double func( double *x)
            survp += out[s1][j];
          lli= survp;
        }
+       
+       else if  (s2==-4) {
+         for (j=3,survp=0. ; j<=nlstate; j++) 
+           survp += out[s1][j];
+         lli= survp;
+       }
+       
+       else if  (s2==-5) {
+         for (j=1,survp=0. ; j<=2; j++) 
+           survp += out[s1][j];
+         lli= survp;
+       }
 
 
        else{
@@ -1861,7 +1883,7 @@ void lubksb(double **a, int n, int *indx, double b[])
 } 
 
 /************ 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)
+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[])
 {  /* Some frequencies */
   
   int i, m, jk, k1,i1, j1, bool, z1,z2,j;
@@ -1881,7 +1903,7 @@ void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **ag
     fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp);
     exit(0);
   }
-  freq= ma3x(-2,nlstate+ndeath,-2,nlstate+ndeath,iagemin,iagemax+3);
+  freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin,iagemax+3);
   j1=0;
   
   j=cptcoveff;
@@ -1894,8 +1916,8 @@ void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **ag
       j1++;
       /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
        scanf("%d", i);*/
-      for (i=-2; i<=nlstate+ndeath; i++)  
-       for (jk=-2; jk<=nlstate+ndeath; jk++)  
+      for (i=-5; i<=nlstate+ndeath; i++)  
+       for (jk=-5; jk<=nlstate+ndeath; jk++)  
          for(m=iagemin; m <= iagemax+3; m++)
            freq[i][jk][m]=0;
 
@@ -1934,7 +1956,7 @@ void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **ag
       }
        
       /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
-
+fprintf(ficresp, "#Local time at start: %s", strstart);
       if  (cptcovn>0) {
        fprintf(ficresp, "\n#********** Variable "); 
        for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]);
@@ -2020,7 +2042,7 @@ void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **ag
   dateintmean=dateintsum/k2cpt; 
  
   fclose(ficresp);
-  free_ma3x(freq,-2,nlstate+ndeath,-2,nlstate+ndeath, iagemin, iagemax+3);
+  free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin, iagemax+3);
   free_vector(pp,1,nlstate);
   free_matrix(prop,1,nlstate,iagemin, iagemax+3);
   /* End of Freq */
@@ -2129,7 +2151,7 @@ void  concatwav(int wav[], int **dh, int **bh,  int **mw, int **s, double *agedc
     mi=0;
     m=firstpass;
     while(s[m][i] <= nlstate){
-      if(s[m][i]>=1 || s[m][i]==-2)
+      if(s[m][i]>=1 || s[m][i]==-2 || s[m][i]==-4 || s[m][i]==-5)
        mw[++mi][i]=m;
       if(m >=lastpass)
        break;
@@ -2169,9 +2191,9 @@ void  concatwav(int wav[], int **dh, int **bh,  int **mw, int **s, double *agedc
              nberr++;
              printf("Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]);
              j=1; /* Temporary Dangerous patch */
-             printf("   We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview.\n  You MUST fix the contradiction between dates.\n",stepm);
+             printf("   We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview. You MUST fix the contradiction between dates.\n",stepm);
              fprintf(ficlog,"Error! Negative delay (%d to death) between waves %d and %d of individual %ld at line %d who is aged %.1f with statuses from %d to %d\n ",j,mw[mi][i],mw[mi+1][i],num[i], i,agev[mw[mi][i]][i],s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]);
-             fprintf(ficlog,"   We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview.\n  You MUST fix the contradiction between dates.\n",stepm);
+             fprintf(ficlog,"   We assumed that the date of interview was correct (and not the date of death) and postponed the death %d month(s) (one stepm) after the interview. You MUST fix the contradiction between dates.\n",stepm);
            }
            k=k+1;
            if (j >= jmax) jmax=j;
@@ -2295,7 +2317,7 @@ void tricode(int *Tvar, int **nbcode, int imx)
 
 /*********** Health Expectancies ****************/
 
-void evsij(char fileres[], double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int ij, int estepm,double delti[],double **matcov )
+void evsij(char fileres[], double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int ij, int estepm,double delti[],double **matcov,char strstart[] )
 
 {
   /* Health expectancies */
@@ -2313,6 +2335,7 @@ void evsij(char fileres[], double ***eij, double x[], int nlstate, int stepm, in
   dnewm=matrix(1,nlstate*nlstate,1,npar);
   doldm=matrix(1,nlstate*nlstate,1,nlstate*nlstate);
   
+  fprintf(ficreseij,"# Local time at start: %s", strstart);
   fprintf(ficreseij,"# Health expectancies\n");
   fprintf(ficreseij,"# Age");
   for(i=1; i<=nlstate;i++)
@@ -2467,7 +2490,7 @@ void evsij(char fileres[], double ***eij, double x[], int nlstate, int stepm, in
 }
 
 /************ Variance ******************/
-void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav)
+void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav, char strstart[])
 {
   /* Variance of health expectancies */
   /*  double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/
@@ -2518,7 +2541,9 @@ void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double
     fprintf(ficlog,"Problem with resultfile: %s\n", fileresprobmorprev);
   }
   printf("Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev);
   fprintf(ficlog,"Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev);
+  fprintf(ficresprobmorprev, "#Local time at start: %s", strstart);
   fprintf(ficresprobmorprev,"# probabilities of dying before estepm=%d months for people of exact age and weighted probabilities w1*p1j+w2*p2j+... stand dev in()\n",estepm);
   fprintf(ficresprobmorprev,"# Age cov=%-d",ij);
   for(j=nlstate+1; j<=(nlstate+ndeath);j++){
@@ -2528,11 +2553,12 @@ void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double
   }  
   fprintf(ficresprobmorprev,"\n");
   fprintf(ficgp,"\n# Routine varevsij");
+ fprintf(fichtm, "#Local time at start: %s", strstart);
   fprintf(fichtm,"\n<li><h4> Computing probabilities of dying over estepm months as a weighted average (i.e global mortality independent of initial healh state)</h4></li>\n");
   fprintf(fichtm,"\n<br>%s  <br>\n",digitp);
 /*   } */
   varppt = matrix(nlstate+1,nlstate+ndeath,nlstate+1,nlstate+ndeath);
-
+ fprintf(ficresvij, "#Local time at start: %s", strstart);
   fprintf(ficresvij,"# Variance and covariance of health expectancies e.j \n#  (weighted average of eij where weights are the stable prevalence in health states i\n");
   fprintf(ficresvij,"# Age");
   for(i=1; i<=nlstate;i++)
@@ -2765,7 +2791,7 @@ void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double
 }  /* end varevsij */
 
 /************ Variance of prevlim ******************/
-void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int ij)
+void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int ij, char strstart[])
 {
   /* Variance of prevalence limit */
   /*  double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/
@@ -2778,7 +2804,7 @@ void varprevlim(char fileres[], double **varpl, double **matcov, double x[], dou
   double **gradg, **trgradg;
   double age,agelim;
   int theta;
-   
+  fprintf(ficresvpl, "#Local time at start: %s", strstart); 
   fprintf(ficresvpl,"# Standard deviation of stable prevalences \n");
   fprintf(ficresvpl,"# Age");
   for(i=1; i<=nlstate;i++)
@@ -2848,7 +2874,7 @@ void varprevlim(char fileres[], double **varpl, double **matcov, double x[], dou
 }
 
 /************ Variance of one-step probabilities  ******************/
-void varprob(char optionfilefiname[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij, int *Tvar, int **nbcode, int *ncodemax)
+void varprob(char optionfilefiname[], double **matcov, double x[], double delti[], int nlstate, double bage, double fage, int ij, int *Tvar, int **nbcode, int *ncodemax, char strstart[])
 {
   int i, j=0,  i1, k1, l1, t, tj;
   int k2, l2, j1,  z1;
@@ -2893,11 +2919,13 @@ void varprob(char optionfilefiname[], double **matcov, double x[], double delti[
   fprintf(ficlog,"Computing matrix of variance covariance of one-step probabilities: result on file '%s' \n",fileresprobcov);
   printf("and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor);
   fprintf(ficlog,"and correlation matrix of one-step probabilities: result on file '%s' \n",fileresprobcor);
-  
+  fprintf(ficresprob, "#Local time at start: %s", strstart);
   fprintf(ficresprob,"#One-step probabilities and stand. devi in ()\n");
   fprintf(ficresprob,"# Age");
+  fprintf(ficresprobcov, "#Local time at start: %s", strstart);
   fprintf(ficresprobcov,"#One-step probabilities and covariance matrix\n");
   fprintf(ficresprobcov,"# Age");
+  fprintf(ficresprobcor, "#Local time at start: %s", strstart);
   fprintf(ficresprobcor,"#One-step probabilities and correlation matrix\n");
   fprintf(ficresprobcov,"# Age");
 
@@ -3966,8 +3994,8 @@ double gompertz(double x[])
 /******************* 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;
+                 int imx,  double p[],double **matcov,double agemortsup){
+  int i,k;
 
   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);
@@ -3975,6 +4003,15 @@ void printinghtmlmort(char fileres[], char title[], char datafile[], int firstpa
     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>");
+
+fprintf(fichtm,"<ul><li><h4>Life table</h4>\n <br>");
+
+ fprintf(fichtm,"\nAge   lx     qx    dx    Lx     Tx     e(x)<br>");
+
+ for (k=agegomp;k<(agemortsup-2);k++) 
+   fprintf(fichtm,"%d %.0lf %lf %.0lf %.0lf %.0lf %lf<br>\n",k,lsurv[k],p[1]*exp(p[2]*(k-agegomp)),(p[1]*exp(p[2]*(k-agegomp)))*lsurv[k],lpop[k],tpop[k],tpop[k]/lsurv[k]);
+
   fflush(fichtm);
 }
 
@@ -4042,6 +4079,8 @@ int main(int argc, char *argv[])
   int mobilavproj=0 , prevfcast=0 ; /* moving average of prev, If prevfcast=1 prevalence projection */
   int mobilav=0,popforecast=0;
   int hstepm, nhstepm;
+  int agemortsup;
+  float  sumlpop=0.;
   double jprev1=1, mprev1=1,anprev1=2000,jprev2=1, mprev2=1,anprev2=2000;
   double jpyram=1, mpyram=1,anpyram=2000,jpyram1=1, mpyram1=1,anpyram1=2000;
 
@@ -4580,7 +4619,7 @@ int main(int argc, char *argv[])
   for (i=1; i<=imx; i++)  {
     agedc[i]=(moisdc[i]/12.+andc[i])-(moisnais[i]/12.+annais[i]);
     for(m=firstpass; (m<= lastpass); m++){
-      if(s[m][i] >0 || s[m][i]==-2){
+      if(s[m][i] >0 || s[m][i]==-2 || s[m][i]==-4 || s[m][i]==-5){
        if (s[m][i] >= nlstate+1) {
          if(agedc[i]>0)
            if((int)moisdc[i]!=99 && (int)andc[i]!=9999)
@@ -4754,7 +4793,7 @@ Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=%s<br
   
   /* Calculates basic frequencies. Computes observed prevalence at single age
      and prints on file fileres'p'. */
-  freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint);
+  freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint,strstart);
 
   fprintf(fichtm,"\n");
   fprintf(fichtm,"<br>Total number of observations=%d <br>\n\
@@ -4846,12 +4885,47 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
     printf("iter=%d MLE=%f Eq=%lf*exp(%lf*(age-%d))\n",iter,-gompertz(p),p[1],p[2],agegomp);
     for (i=1;i<=NDIM;i++) 
       printf("%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i]));
+
+lsurv=vector(1,AGESUP);
+    lpop=vector(1,AGESUP);
+    tpop=vector(1,AGESUP);
+    lsurv[agegomp]=100000;
+   
+     for (k=agegomp;k<=AGESUP;k++) {
+      agemortsup=k;
+      if (p[1]*exp(p[2]*(k-agegomp))>1) break;
+    }
+   
+      for (k=agegomp;k<agemortsup;k++)
+      lsurv[k+1]=lsurv[k]-lsurv[k]*(p[1]*exp(p[2]*(k-agegomp)));
+
+    for (k=agegomp;k<agemortsup;k++){
+      lpop[k]=(lsurv[k]+lsurv[k+1])/2.;
+      sumlpop=sumlpop+lpop[k];
+    }
+
+ tpop[agegomp]=sumlpop;
+    for (k=agegomp;k<(agemortsup-3);k++){
+      /*  tpop[k+1]=2;*/
+      tpop[k+1]=tpop[k]-lpop[k];
+       }
+   
+   
+       printf("\nAge   lx     qx    dx    Lx     Tx     e(x)\n");
+    for (k=agegomp;k<(agemortsup-2);k++) 
+      printf("%d %.0lf %lf %.0lf %.0lf %.0lf %lf\n",k,lsurv[k],p[1]*exp(p[2]*(k-agegomp)),(p[1]*exp(p[2]*(k-agegomp)))*lsurv[k],lpop[k],tpop[k],tpop[k]/lsurv[k]);
+
+
     replace_back_to_slash(pathc,path); /* Even gnuplot wants a / */
     printinggnuplotmort(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
     
     printinghtmlmort(fileres,title,datafile, firstpass, lastpass, \
                     stepm, weightopt,\
-                    model,imx,p,matcov);
+                    model,imx,p,matcov,agemortsup);
+
+    free_vector(lsurv,1,AGESUP);
+    free_vector(lpop,1,AGESUP);
+    free_vector(tpop,1,AGESUP);
   } /* Endof if mle==-3 */
 
   else{ /* For mle >=1 */
@@ -5111,6 +5185,7 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
     }
     printf("Computing stable prevalence: result on file '%s' \n", filerespl);
     fprintf(ficlog,"Computing stable prevalence: result on file '%s' \n", filerespl);
+    fprintf(ficrespl, "#Local time at start: %s", strstart);
     fprintf(ficrespl,"#Stable prevalence \n");
     fprintf(ficrespl,"#Age ");
     for(i=1; i<=nlstate;i++) fprintf(ficrespl,"%d-%d ",i,i);
@@ -5171,7 +5246,7 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
     hstepm=hstepm/stepm; /* Typically 2 years, = 2/6 months = 4 */ 
 
     /* hstepm=1;   aff par mois*/
-
+    fprintf(ficrespij, "#Local time at start: %s", strstart);
     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(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
@@ -5208,7 +5283,7 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
       }
     }
 
-    varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax);
+    varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart);
 
     fclose(ficrespij);
 
@@ -5297,16 +5372,16 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
 
        eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
        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, strstart);  
  
        vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
        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, strstart);
        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, strstart);
        }
 
+       fprintf(ficrest, "#Local time at start: %s", strstart);
        fprintf(ficrest,"#Total LEs with variances: e.. (std) ");
        for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);
        fprintf(ficrest,"\n");
@@ -5379,7 +5454,7 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
       
        varpl=matrix(1,nlstate,(int) bage, (int) fage);
        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,strstart);
        free_matrix(varpl,1,nlstate,(int) bage, (int)fage);
       }
     }
@@ -5428,7 +5503,7 @@ Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
   tm = *localtime(&end_time.tv_sec);
   tmg = *gmtime(&end_time.tv_sec);
   strcpy(strtend,asctime(&tm));
-  printf("Local time at start %s\nLocaltime at end   %s",strstart, strtend); 
+  printf("Local time at start %s\nLocal time at end   %s",strstart, strtend); 
   fprintf(ficlog,"Local time at start %s\nLocal time at end   %s\n",strstart, strtend); 
   printf("Total time used %s\n", asc_diff_time(end_time.tv_sec -start_time.tv_sec,tmpout));