Diff for /imach/src/imach.c between versions 1.72 and 1.73

version 1.72, 2003/03/28 13:33:56 version 1.73, 2003/04/08 14:06:50
Line 83 Line 83
 #define ODIRSEPARATOR '\\'  #define ODIRSEPARATOR '\\'
 #endif  #endif
   
 char version[80]="Imach version 0.93, February 2003, INED-EUROREVES ";  char version[80]="Imach version 0.94, February 2003, INED-EUROREVES ";
 int erreur; /* Error number */  int erreur; /* Error number */
 int nvar;  int nvar;
 int cptcovn=0, cptcovage=0, cptcoveff=0,cptcov;  int cptcovn=0, cptcovage=0, cptcoveff=0,cptcov;
Line 1429  void  freqsummary(char fileres[], int ag Line 1429  void  freqsummary(char fileres[], int ag
   int i, m, jk, k1,i1, j1, bool, z1,z2,j;    int i, m, jk, k1,i1, j1, bool, z1,z2,j;
   int first;    int first;
   double ***freq; /* Frequencies */    double ***freq; /* Frequencies */
   double *pp;    double *pp, **prop;
   double pos, k2, dateintsum=0,k2cpt=0;    double pos,posprop, k2, dateintsum=0,k2cpt=0;
   FILE *ficresp;    FILE *ficresp;
   char fileresp[FILENAMELENGTH];    char fileresp[FILENAMELENGTH];
       
   pp=vector(1,nlstate);    pp=vector(1,nlstate);
     prop=matrix(1,nlstate,agemin,agemax+3);
   probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX);    probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX);
   strcpy(fileresp,"p");    strcpy(fileresp,"p");
   strcat(fileresp,fileres);    strcat(fileresp,fileres);
Line 1460  void  freqsummary(char fileres[], int ag Line 1461  void  freqsummary(char fileres[], int ag
         for (jk=-1; jk<=nlstate+ndeath; jk++)            for (jk=-1; jk<=nlstate+ndeath; jk++)  
           for(m=agemin; m <= agemax+3; m++)            for(m=agemin; m <= agemax+3; m++)
             freq[i][jk][m]=0;              freq[i][jk][m]=0;
   
       for (i=1; i<=nlstate; i++)  
         for(m=agemin; m <= agemax+3; m++)
           prop[i][m]=0;
               
       dateintsum=0;        dateintsum=0;
       k2cpt=0;        k2cpt=0;
Line 1476  void  freqsummary(char fileres[], int ag Line 1481  void  freqsummary(char fileres[], int ag
             if ((k2>=dateprev1) && (k2<=dateprev2)) {              if ((k2>=dateprev1) && (k2<=dateprev2)) {
               if(agev[m][i]==0) agev[m][i]=agemax+1;                if(agev[m][i]==0) agev[m][i]=agemax+1;
               if(agev[m][i]==1) agev[m][i]=agemax+2;                if(agev[m][i]==1) agev[m][i]=agemax+2;
                 if (s[m][i]>0 && s[m][i]<=nlstate) prop[s[m][i]][(int)agev[m][i]] += weight[i];
               if (m<lastpass) {                if (m<lastpass) {
                 freq[s[m][i]][s[m+1][i]][(int)agev[m][i]] += weight[i];                  freq[s[m][i]][s[m+1][i]][(int)agev[m][i]] += weight[i];
                 freq[s[m][i]][s[m+1][i]][(int) agemax+3] += weight[i];                  freq[s[m][i]][s[m+1][i]][(int) agemax+3] += weight[i];
Line 1533  void  freqsummary(char fileres[], int ag Line 1539  void  freqsummary(char fileres[], int ag
         for(jk=1; jk <=nlstate ; jk++){          for(jk=1; jk <=nlstate ; jk++){
           for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)            for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)
             pp[jk] += freq[jk][m][i];              pp[jk] += freq[jk][m][i];
         }          }       
           for(jk=1,pos=0,posprop=0; jk <=nlstate ; jk++){
         for(jk=1,pos=0; jk <=nlstate ; jk++)  
           pos += pp[jk];            pos += pp[jk];
             posprop += prop[jk][i];
           }
         for(jk=1; jk <=nlstate ; jk++){          for(jk=1; jk <=nlstate ; jk++){
           if(pos>=1.e-5){            if(pos>=1.e-5){
             if(first==1)              if(first==1)
Line 1549  void  freqsummary(char fileres[], int ag Line 1556  void  freqsummary(char fileres[], int ag
           }            }
           if( i <= (int) agemax){            if( i <= (int) agemax){
             if(pos>=1.e-5){              if(pos>=1.e-5){
               fprintf(ficresp," %d %.5f %.0f %.0f",i,pp[jk]/pos, pp[jk],pos);                fprintf(ficresp," %d %.5f %.0f %.0f",i,prop[jk][i]/posprop, prop[jk][i],posprop);
               probs[i][jk][j1]= pp[jk]/pos;                probs[i][jk][j1]= pp[jk]/pos;
               /*printf("\ni=%d jk=%d j1=%d %.5f %.0f %.0f %f",i,jk,j1,pp[jk]/pos, pp[jk],pos,probs[i][jk][j1]);*/                /*printf("\ni=%d jk=%d j1=%d %.5f %.0f %.0f %f",i,jk,j1,pp[jk]/pos, pp[jk],pos,probs[i][jk][j1]);*/
             }              }
             else              else
               fprintf(ficresp," %d NaNq %.0f %.0f",i,pp[jk],pos);                fprintf(ficresp," %d NaNq %.0f %.0f",i,prop[jk][i],posprop);
           }            }
         }          }
                   
Line 1578  void  freqsummary(char fileres[], int ag Line 1585  void  freqsummary(char fileres[], int ag
   fclose(ficresp);    fclose(ficresp);
   free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath,(int) agemin,(int) agemax+3);    free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath,(int) agemin,(int) agemax+3);
   free_vector(pp,1,nlstate);    free_vector(pp,1,nlstate);
       free_matrix(prop,1,nlstate,(int) agemin,(int) agemax+3);
   /* End of Freq */    /* End of Freq */
 }  }
   
Line 1592  void prevalence(int agemin, float agemax Line 1599  void prevalence(int agemin, float agemax
     
   int i, m, jk, k1, i1, j1, bool, z1,z2,j;    int i, m, jk, k1, i1, j1, bool, z1,z2,j;
   double ***freq; /* Frequencies */    double ***freq; /* Frequencies */
   double *pp;    double *pp, **prop;
   double pos;     double pos,posprop; 
   double  y2; /* in fractional years */    double  y2; /* in fractional years */
   
   pp=vector(1,nlstate);    pp=vector(1,nlstate);
       prop=matrix(1,nlstate,agemin,agemax+3); 
   freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,agemin,agemax+3);    freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,agemin,agemax+3);
   j1=0;    j1=0;
       
Line 1608  void prevalence(int agemin, float agemax Line 1615  void prevalence(int agemin, float agemax
     for(i1=1; i1<=ncodemax[k1];i1++){      for(i1=1; i1<=ncodemax[k1];i1++){
       j1++;        j1++;
               
       for (i=-1; i<=nlstate+ndeath; i++)          for (i=1; i<=nlstate; i++)  
         for (jk=-1; jk<=nlstate+ndeath; jk++)            for(m=agemin; m <= agemax+3; m++)
           for(m=agemin; m <= agemax+3; m++)            prop[i][m]=0;
             freq[i][jk][m]=0;  
             
       for (i=1; i<=imx; i++) { /* Each individual */        for (i=1; i<=imx; i++) { /* Each individual */
         bool=1;          bool=1;
Line 1626  void prevalence(int agemin, float agemax Line 1632  void prevalence(int agemin, float agemax
             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]=agemax+1;                if(agev[m][i]==0) agev[m][i]=agemax+1;
               if(agev[m][i]==1) agev[m][i]=agemax+2;                if(agev[m][i]==1) agev[m][i]=agemax+2;
               if (m<lastpass) {                if (s[m][i]>0 && s[m][i]<=nlstate) {
                 freq[s[m][i]][s[m+1][i]][(int)agev[m][i]] += weight[i];                  prop[s[m][i]][(int)agev[m][i]] += weight[i];
                 freq[s[m][i]][s[m+1][i]][(int)(agemax+3)] += weight[i];                   prop[s[m][i]][(int)(agemax+3)] += weight[i];
               }                }
             }              }
           } /* end selection of waves */            } /* end selection of waves */
         }          }
       }        }
       for(i=(int)agemin; i <= (int)agemax+3; i++){         for(i=(int)agemin; i <= (int)agemax+3; i++){ 
         for(jk=1; jk <=nlstate ; jk++){  
           for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)  
             pp[jk] += freq[jk][m][i];   
         }  
         for(jk=1; jk <=nlstate ; jk++){  
           for(m=-1, pos=0; m <=0 ; m++)  
             pos += freq[jk][m][i];  
         }  
                   
         for(jk=1; jk <=nlstate ; jk++){          for(jk=1,posprop=0; jk <=nlstate ; jk++) {
           for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)            posprop += prop[jk][i];
             pp[jk] += freq[jk][m][i];  
         }          }
                   
         for(jk=1,pos=0; jk <=nlstate ; jk++) pos += pp[jk];  
           
         for(jk=1; jk <=nlstate ; jk++){              for(jk=1; jk <=nlstate ; jk++){    
           if( i <= (int) agemax){            if( i <= (int) agemax){
             if(pos>=1.e-5){              if(posprop>=1.e-5){
               probs[i][jk][j1]= pp[jk]/pos;               probs[i][jk][j1]= prop[jk][i]/posprop;
             }              }
           }            }
         }/* end jk */          }/* end jk */
Line 1665  void prevalence(int agemin, float agemax Line 1660  void prevalence(int agemin, float agemax
       
   free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath,(int) agemin,(int) agemax+3);    free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath,(int) agemin,(int) agemax+3);
   free_vector(pp,1,nlstate);    free_vector(pp,1,nlstate);
       free_matrix(prop,1,nlstate,(int) agemin,(int) agemax+3);
 }  /* End of Freq */  }  /* End of Freq */
   
 /************* Waves Concatenation ***************/  /************* Waves Concatenation ***************/
Line 1744  void  concatwav(int wav[], int **dh, int Line 1739  void  concatwav(int wav[], int **dh, int
           if (j >= jmax) jmax=j;            if (j >= jmax) jmax=j;
           else if (j <= jmin)jmin=j;            else if (j <= jmin)jmin=j;
           /*        if (j<10) printf("j=%d jmin=%d num=%d ",j,jmin,i); */            /*        if (j<10) printf("j=%d jmin=%d num=%d ",j,jmin,i); */
             /*printf("%d %lf %d %d %d\n", i,agev[mw[mi][i]][i],j,s[mw[mi][i]][i] ,s[mw[mi+1][i]][i]);*/
           sum=sum+j;            sum=sum+j;
         }          }
         jk= j/stepm;          jk= j/stepm;
Line 3048  prevforecast(char fileres[], double anpr Line 3044  prevforecast(char fileres[], double anpr
      dateprev1 dateprev2 range of dates during which prevalence is computed       dateprev1 dateprev2 range of dates during which prevalence is computed
      anproj2 year of en of projection (same day and month as proj1).       anproj2 year of en of projection (same day and month as proj1).
   */    */
   int yearp, stepsize, hstepm, nhstepm, j, k, c, cptcod, i, h;    int yearp, stepsize, hstepm, nhstepm, j, k, c, cptcod, i, h, i1;
   int *popage;    int *popage;
   double agec; /* generic age */    double agec; /* generic age */
   double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean;    double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean;
Line 3093  prevforecast(char fileres[], double anpr Line 3089  prevforecast(char fileres[], double anpr
   jprojmean=yp;    jprojmean=yp;
   if(jprojmean==0) jprojmean=1;    if(jprojmean==0) jprojmean=1;
   if(mprojmean==0) jprojmean=1;    if(mprojmean==0) jprojmean=1;
   
     i1=cptcoveff;
     if (cptcovn < 1){i1=1;}
       
   fprintf(ficresf,"# Mean day of interviews %.lf/%.lf/%.lf (%.2f) between %.2f and %.2f \n",jprojmean,mprojmean,anprojmean,dateintmean,dateprev1,dateprev2);     fprintf(ficresf,"# Mean day of interviews %.lf/%.lf/%.lf (%.2f) between %.2f and %.2f \n",jprojmean,mprojmean,anprojmean,dateintmean,dateprev1,dateprev2); 
       
   fprintf(ficresf,"#****** Routine prevforecast **\n");    fprintf(ficresf,"#****** Routine prevforecast **\n");
   for(cptcov=1, k=0;cptcov<=cptcoveff;cptcov++){  
     for(cptcov=1, k=0;cptcov<=i1;cptcov++){
     for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){      for(cptcod=1;cptcod<=ncodemax[cptcoveff];cptcod++){
       k=k+1;        k=k+1;
       fprintf(ficresf,"\n#******");        fprintf(ficresf,"\n#******");

Removed from v.1.72  
changed lines
  Added in v.1.73


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