| 
 |   
| version 1.300, 2019/05/22 19:09:45 | version 1.308, 2021/03/31 13:11:57 | 
|---|---|
| Line 1 | Line 1 | 
| /* $Id$ | /* $Id$ | 
| $State$ | $State$ | 
| $Log$ | $Log$ | 
| Revision 1.308 2021/03/31 13:11:57 brouard | |
| Summary: Version 0.99r23 | |
| * imach.c (Module): Still bugs in the result loop. Thank to Holly Benett | |
| Revision 1.307 2021/03/08 18:11:32 brouard | |
| Summary: 0.99r22 fixed bug on result: | |
| Revision 1.306 2021/02/20 15:44:02 brouard | |
| Summary: Version 0.99r21 | |
| * imach.c (Module): Fix bug on quitting after result lines! | |
| (Module): Version 0.99r21 | |
| Revision 1.305 2021/02/20 15:28:30 brouard | |
| * imach.c (Module): Fix bug on quitting after result lines! | |
| Revision 1.304 2021/02/12 11:34:20 brouard | |
| * imach.c (Module): The use of a Windows BOM (huge) file is now an error | |
| Revision 1.303 2021/02/11 19:50:15 brouard | |
| * (Module): imach.c Someone entered 'results:' instead of 'result:'. Now it is an error which is printed. | |
| Revision 1.302 2020/02/22 21:00:05 brouard | |
| * (Module): imach.c Update mle=-3 (for computing Life expectancy | |
| and life table from the data without any state) | |
| Revision 1.301 2019/06/04 13:51:20 brouard | |
| Summary: Error in 'r'parameter file backcast yearsbproj instead of yearsfproj | |
| Revision 1.300 2019/05/22 19:09:45 brouard | Revision 1.300 2019/05/22 19:09:45 brouard | 
| Summary: version 0.99r19 of May 2019 | Summary: version 0.99r19 of May 2019 | 
| Line 1123 typedef struct { | Line 1154 typedef struct { | 
| /* $State$ */ | /* $State$ */ | 
| #include "version.h" | #include "version.h" | 
| char version[]=__IMACH_VERSION__; | char version[]=__IMACH_VERSION__; | 
| char copyright[]="May 2019,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2020"; | char copyright[]="March 2021,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2020, Nihon University 2021, INED 2000-2021"; | 
| char fullversion[]="$Revision$ $Date$"; | char fullversion[]="$Revision$ $Date$"; | 
| char strstart[80]; | char strstart[80]; | 
| char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | 
| Line 1149 int nqtveff=0; /**< ntqveff number of ef | Line 1180 int nqtveff=0; /**< ntqveff number of ef | 
| int cptcov=0; /* Working variable */ | int cptcov=0; /* Working variable */ | 
| int nobs=10; /* Number of observations in the data lastobs-firstobs */ | int nobs=10; /* Number of observations in the data lastobs-firstobs */ | 
| int ncovcombmax=NCOVMAX; /* Maximum calculated number of covariate combination = pow(2, cptcoveff) */ | int ncovcombmax=NCOVMAX; /* Maximum calculated number of covariate combination = pow(2, cptcoveff) */ | 
| int npar=NPARMAX; | int npar=NPARMAX; /* Number of parameters (nlstate+ndeath-1)*nlstate*ncovmodel; */ | 
| int nlstate=2; /* Number of live states */ | int nlstate=2; /* Number of live states */ | 
| int ndeath=1; /* Number of dead states */ | int ndeath=1; /* Number of dead states */ | 
| int ncovmodel=0, ncovcol=0; /* Total number of covariables including constant a12*1 +b12*x ncovmodel=2 */ | int ncovmodel=0, ncovcol=0; /* Total number of covariables including constant a12*1 +b12*x ncovmodel=2 */ | 
| Line 2412 void powell(double p[], double **xi, int | Line 2443 void powell(double p[], double **xi, int | 
| /* But p and xit have been updated at the end of linmin, *fret corresponds to new p, xit */ | /* But p and xit have been updated at the end of linmin, *fret corresponds to new p, xit */ | 
| /* New value of last point Pn is not computed, P(n-1) */ | /* New value of last point Pn is not computed, P(n-1) */ | 
| for(j=1;j<=n;j++) { | for(j=1;j<=n;j++) { | 
| if(flatdir[j] >0){ | if(flatdir[j] >0){ | 
| printf(" p(%d)=%lf flat=%d ",j,p[j],flatdir[j]); | printf(" p(%d)=%lf flat=%d ",j,p[j],flatdir[j]); | 
| fprintf(ficlog," p(%d)=%lf flat=%d ",j,p[j],flatdir[j]); | fprintf(ficlog," p(%d)=%lf flat=%d ",j,p[j],flatdir[j]); | 
| } | } | 
| /* printf("\n"); */ | /* printf("\n"); */ | 
| /* fprintf(ficlog,"\n"); */ | /* fprintf(ficlog,"\n"); */ | 
| } | } | 
| /* if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /\* Did we reach enough precision? *\/ */ | /* if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) { /\* Did we reach enough precision? *\/ */ | 
| if (2.0*fabs(fp-(*fret)) <= ftol) { /* Did we reach enough precision? */ | if (2.0*fabs(fp-(*fret)) <= ftol) { /* Did we reach enough precision? */ | 
| /* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */ | /* We could compare with a chi^2. chisquare(0.95,ddl=1)=3.84 */ | 
| Line 3027 double **pmij(double **ps, double *cov, | Line 3058 double **pmij(double **ps, double *cov, | 
| /* double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, double ***dnewm, double **doldm, double **dsavm, int ij ) */ | /* double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, double ***dnewm, double **doldm, double **dsavm, int ij ) */ | 
| double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, int ij ) | double **bmij(double **ps, double *cov, int ncovmodel, double *x, int nlstate, double ***prevacurrent, int ij ) | 
| { | { | 
| /* Computes the backward probability at age agefin and covariate combination ij. In fact cov is already filled and x too. | /* Computes the backward probability at age agefin, cov[2], and covariate combination 'ij'. In fact cov is already filled and x too. | 
| * Call to pmij(cov and x), call to cross prevalence, sums and inverses, left multiply, and returns in **ps as well as **bmij. | * Call to pmij(cov and x), call to cross prevalence, sums and inverses, left multiply, and returns in **ps as well as **bmij. | 
| */ | */ | 
| int i, ii, j,k; | int i, ii, j,k; | 
| Line 5257 void concatwav(int wav[], int **dh, int | Line 5288 void concatwav(int wav[], int **dh, int | 
| #else | #else | 
| if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ | if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ | 
| if(firsthree == 0){ | if(firsthree == 0){ | 
| printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p%d%d .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); | printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p_{%d%d} .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); | 
| firsthree=1; | firsthree=1; | 
| } | } | 
| fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p%d%d .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); | fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p_{%d%d} .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); | 
| mw[++mi][i]=m; | mw[++mi][i]=m; | 
| mli=m; | mli=m; | 
| } | } | 
| Line 8502 void prevforecast(char fileres[], double | Line 8533 void prevforecast(char fileres[], double | 
| */ | */ | 
| int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1, k4, nres=0; | int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1, k4, nres=0; | 
| double agec; /* generic age */ | double agec; /* generic age */ | 
| double agelim, ppij, ppi, yp,yp1,yp2,jintmean,mintmean,aintmean; | double agelim, ppij, ppi, yp,yp1,yp2; /* ,jintmean,mintmean,aintmean;*/ | 
| double *popeffectif,*popcount; | double *popeffectif,*popcount; | 
| double ***p3mat; | double ***p3mat; | 
| /* double ***mobaverage; */ | /* double ***mobaverage; */ | 
| Line 9058 void prwizard(int ncovmodel, int nlstate | Line 9089 void prwizard(int ncovmodel, int nlstate | 
| /******************* Gompertz Likelihood ******************************/ | /******************* Gompertz Likelihood ******************************/ | 
| double gompertz(double x[]) | double gompertz(double x[]) | 
| { | { | 
| double A,B,L=0.0,sump=0.,num=0.; | double A=0.0,B=0.,L=0.0,sump=0.,num=0.; | 
| int i,n=0; /* n is the size of the sample */ | int i,n=0; /* n is the size of the sample */ | 
| for (i=1;i<=imx ; i++) { | for (i=1;i<=imx ; i++) { | 
| Line 9066 double gompertz(double x[]) | Line 9097 double gompertz(double x[]) | 
| /* sump=sump+1;*/ | /* sump=sump+1;*/ | 
| num=num+1; | num=num+1; | 
| } | } | 
| L=0.0; | |
| /* agegomp=AGEGOMP; */ | |
| /* for (i=0; i<=imx; i++) | /* for (i=0; i<=imx; i++) | 
| if (wav[i]>0) printf("i=%d ageex=%lf agecens=%lf agedc=%lf cens=%d %d\n" ,i,ageexmed[i],agecens[i],agedc[i],cens[i],wav[i]);*/ | if (wav[i]>0) printf("i=%d ageex=%lf agecens=%lf agedc=%lf cens=%d %d\n" ,i,ageexmed[i],agecens[i],agedc[i],cens[i],wav[i]);*/ | 
| for (i=1;i<=imx ; i++) | for (i=1;i<=imx ; i++) { | 
| { | /* mu(a)=mu(agecomp)*exp(teta*(age-agegomp)) | 
| if (cens[i] == 1 && wav[i]>1) | mu(a)=x[1]*exp(x[2]*(age-agegomp)); x[1] and x[2] are per year. | 
| A=-x[1]/(x[2])*(exp(x[2]*(agecens[i]-agegomp))-exp(x[2]*(ageexmed[i]-agegomp))); | * L= Product mu(agedeces)exp(-\int_ageexam^agedc mu(u) du ) for a death between agedc (in month) | 
| * and agedc +1 month, cens[i]=0: log(x[1]/YEARM) | |
| if (cens[i] == 0 && wav[i]>1) | * + | 
| * exp(-\int_ageexam^agecens mu(u) du ) when censored, cens[i]=1 | |
| */ | |
| if (wav[i] > 1 || agedc[i] < AGESUP) { | |
| if (cens[i] == 1){ | |
| A=-x[1]/(x[2])*(exp(x[2]*(agecens[i]-agegomp))-exp(x[2]*(ageexmed[i]-agegomp))); | |
| } else if (cens[i] == 0){ | |
| A=-x[1]/(x[2])*(exp(x[2]*(agedc[i]-agegomp))-exp(x[2]*(ageexmed[i]-agegomp))) | A=-x[1]/(x[2])*(exp(x[2]*(agedc[i]-agegomp))-exp(x[2]*(ageexmed[i]-agegomp))) | 
| +log(x[1]/YEARM)+x[2]*(agedc[i]-agegomp)+log(YEARM); | +log(x[1]/YEARM) +x[2]*(agedc[i]-agegomp)+log(YEARM); | 
| } else | |
| printf("Gompertz cens[%d] neither 1 nor 0\n",i); | |
| /*if (wav[i] > 1 && agecens[i] > 15) {*/ /* ??? */ | /*if (wav[i] > 1 && agecens[i] > 15) {*/ /* ??? */ | 
| if (wav[i] > 1 ) { /* ??? */ | L=L+A*weight[i]; | 
| 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("\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);*/ | /*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; | return -2*L*num/sump; | 
| } | } | 
| Line 9096 double gompertz(double x[]) | Line 9133 double gompertz(double x[]) | 
| /******************* Gompertz_f Likelihood ******************************/ | /******************* Gompertz_f Likelihood ******************************/ | 
| double gompertz_f(const gsl_vector *v, void *params) | double gompertz_f(const gsl_vector *v, void *params) | 
| { | { | 
| double A,B,LL=0.0,sump=0.,num=0.; | double A=0.,B=0.,LL=0.0,sump=0.,num=0.; | 
| double *x= (double *) v->data; | double *x= (double *) v->data; | 
| int i,n=0; /* n is the size of the sample */ | int i,n=0; /* n is the size of the sample */ | 
| Line 9189 int readdata(char datafile[], int firsto | Line 9226 int readdata(char datafile[], int firsto | 
| int i=0, j=0, n=0, iv=0, v; | int i=0, j=0, n=0, iv=0, v; | 
| int lstra; | int lstra; | 
| int linei, month, year,iout; | int linei, month, year,iout; | 
| int noffset=0; /* This is the offset if BOM data file */ | |
| char line[MAXLINE], linetmp[MAXLINE]; | char line[MAXLINE], linetmp[MAXLINE]; | 
| char stra[MAXLINE], strb[MAXLINE]; | char stra[MAXLINE], strb[MAXLINE]; | 
| char *stratrunc; | char *stratrunc; | 
| Line 9222 int readdata(char datafile[], int firsto | Line 9260 int readdata(char datafile[], int firsto | 
| fprintf(ficlog,"Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(ficlog);return 1; | fprintf(ficlog,"Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(ficlog);return 1; | 
| } | } | 
| i=1; | /* Is it a BOM UTF-8 Windows file? */ | 
| /* First data line */ | |
| linei=0; | linei=0; | 
| while(fgets(line, MAXLINE, fic)) { | |
| noffset=0; | |
| if( line[0] == (char)0xEF && line[1] == (char)0xBB) /* EF BB BF */ | |
| { | |
| noffset=noffset+3; | |
| printf("# Data file '%s' is an UTF8 BOM file, please convert to UTF8 or ascii file and rerun.\n",datafile);fflush(stdout); | |
| fprintf(ficlog,"# Data file '%s' is an UTF8 BOM file, please convert to UTF8 or ascii file and rerun.\n",datafile); | |
| fflush(ficlog); return 1; | |
| } | |
| /* else if( line[0] == (char)0xFE && line[1] == (char)0xFF)*/ | |
| else if( line[0] == (char)0xFF && line[1] == (char)0xFE) | |
| { | |
| noffset=noffset+2; | |
| printf("# Error Data file '%s' is a huge UTF16BE BOM file, please convert to UTF8 or ascii file (for example with dos2unix) and rerun.\n",datafile);fflush(stdout); | |
| fprintf(ficlog,"# Error Data file '%s' is a huge UTF16BE BOM file, please convert to UTF8 or ascii file (for example with dos2unix) and rerun.\n",datafile); | |
| fflush(ficlog); return 1; | |
| } | |
| else if( line[0] == 0 && line[1] == 0) | |
| { | |
| if( line[2] == (char)0xFE && line[3] == (char)0xFF){ | |
| noffset=noffset+4; | |
| printf("# Error Data file '%s' is a huge UTF16BE BOM file, please convert to UTF8 or ascii file (for example with dos2unix) and rerun.\n",datafile);fflush(stdout); | |
| fprintf(ficlog,"# Error Data file '%s' is a huge UTF16BE BOM file, please convert to UTF8 or ascii file (for example with dos2unix) and rerun.\n",datafile); | |
| fflush(ficlog); return 1; | |
| } | |
| } else{ | |
| ;/*printf(" Not a BOM file\n");*/ | |
| } | |
| /* If line starts with a # it is a comment */ | |
| if (line[noffset] == '#') { | |
| linei=linei+1; | |
| break; | |
| }else{ | |
| break; | |
| } | |
| } | |
| fclose(fic); | |
| if((fic=fopen(datafile,"r"))==NULL) { | |
| printf("Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(stdout); | |
| fprintf(ficlog,"Problem while opening datafile: %s with errno='%s'\n", datafile,strerror(errno));fflush(ficlog);return 1; | |
| } | |
| /* Not a Bom file */ | |
| i=1; | |
| while ((fgets(line, MAXLINE, fic) != NULL) &&((i >= firstobs) && (i <=lastobs))) { | while ((fgets(line, MAXLINE, fic) != NULL) &&((i >= firstobs) && (i <=lastobs))) { | 
| linei=linei+1; | linei=linei+1; | 
| for(j=strlen(line); j>=0;j--){ /* Untabifies line */ | for(j=strlen(line); j>=0;j--){ /* Untabifies line */ | 
| Line 9344 int readdata(char datafile[], int firsto | Line 9427 int readdata(char datafile[], int firsto | 
| return 1; | return 1; | 
| } | } | 
| anint[j][i]= (double) year; | anint[j][i]= (double) year; | 
| mint[j][i]= (double)month; | mint[j][i]= (double)month; | 
| /* if( (int)anint[j][i]+ (int)(mint[j][i])/12. < (int) (moisnais[i]/12.+annais[i])){ */ | |
| /* printf("Warning reading data around '%s' at line number %d for individual %d, '%s'\nThe date of interview (%2d/%4d) at wave %d occurred before the date of birth (%2d/%4d).\n",strb, linei,i, line, mint[j][i],anint[j][i], moisnais[i],annais[i]); */ | |
| /* fprintf(ficlog,"Warning reading data around '%s' at line number %d for individual %d, '%s'\nThe date of interview (%2d/%4d) at wave %d occurred before the date of birth (%2d/%4d).\n",strb, linei,i, line, mint[j][i],anint[j][i], moisnais[i],annais[i]); */ | |
| /* } */ | |
| strcpy(line,stra); | strcpy(line,stra); | 
| } /* End loop on waves */ | } /* End loop on waves */ | 
| Line 9383 int readdata(char datafile[], int firsto | Line 9470 int readdata(char datafile[], int firsto | 
| } | } | 
| annais[i]=(double)(year); | annais[i]=(double)(year); | 
| moisnais[i]=(double)(month); | moisnais[i]=(double)(month); | 
| for (j=1;j<=maxwav;j++){ | |
| if( (int)anint[j][i]+ (int)(mint[j][i])/12. < (int) (moisnais[i]/12.+annais[i])){ | |
| printf("Warning reading data around '%s' at line number %d for individual %d, '%s'\nThe date of interview (%2d/%4d) at wave %d occurred before the date of birth (%2d/%4d).\n",strb, linei,i, line, (int)mint[j][i],(int)anint[j][i], j,(int)moisnais[i],(int)annais[i]); | |
| fprintf(ficlog,"Warning reading data around '%s' at line number %d for individual %d, '%s'\nThe date of interview (%2d/%4d) at wave %d occurred before the date of birth (%2d/%4d).\n",strb, linei,i, line, (int)mint[j][i],(int)anint[j][i], j, (int)moisnais[i],(int)annais[i]); | |
| } | |
| } | |
| strcpy(line,stra); | strcpy(line,stra); | 
| /* Sample weight */ | /* Sample weight */ | 
| Line 9506 int decoderesult ( char resultline[], in | Line 9600 int decoderesult ( char resultline[], in | 
| char stra[80], strb[80], strc[80], strd[80],stre[80]; | char stra[80], strb[80], strc[80], strd[80],stre[80]; | 
| removefirstspace(&resultline); | removefirstspace(&resultline); | 
| printf("decoderesult:%s\n",resultline); | |
| if (strstr(resultline,"v") !=0){ | if (strstr(resultline,"v") !=0){ | 
| printf("Error. 'v' must be in upper case 'V' result: %s ",resultline); | printf("Error. 'v' must be in upper case 'V' result: %s ",resultline); | 
| Line 9521 int decoderesult ( char resultline[], in | Line 9614 int decoderesult ( char resultline[], in | 
| TKresult[nres]=0; /* Combination for the nresult and the model */ | TKresult[nres]=0; /* Combination for the nresult and the model */ | 
| return (0); | return (0); | 
| } | } | 
| if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */ | if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */ | 
| printf("ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | printf("ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | 
| fprintf(ficlog,"ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | fprintf(ficlog,"ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | 
| Line 11082 int main(int argc, char *argv[]) | Line 11174 int main(int argc, char *argv[]) | 
| noffset=noffset+3; | noffset=noffset+3; | 
| printf("# File is an UTF8 Bom.\n"); // 0xBF | printf("# File is an UTF8 Bom.\n"); // 0xBF | 
| } | } | 
| else if( line[0] == (char)0xFE && line[1] == (char)0xFF) | /* else if( line[0] == (char)0xFE && line[1] == (char)0xFF)*/ | 
| else if( line[0] == (char)0xFF && line[1] == (char)0xFE) | |
| { | { | 
| noffset=noffset+2; | noffset=noffset+2; | 
| printf("# File is an UTF16BE BOM file\n"); | printf("# File is an UTF16BE BOM file\n"); | 
| Line 11170 int main(int argc, char *argv[]) | Line 11263 int main(int argc, char *argv[]) | 
| } | } | 
| if((num_filled=sscanf(line,"model=1+age%[^.\n]", model)) !=EOF){ | if((num_filled=sscanf(line,"model=1+age%[^.\n]", model)) !=EOF){ | 
| if (num_filled != 1){ | if (num_filled != 1){ | 
| printf("ERROR %d: Model should be at minimum 'model=1+age' %s\n",num_filled, line); | printf("ERROR %d: Model should be at minimum 'model=1+age+' instead of '%s'\n",num_filled, line); | 
| fprintf(ficlog,"ERROR %d: Model should be at minimum 'model=1+age' %s\n",num_filled, line); | fprintf(ficlog,"ERROR %d: Model should be at minimum 'model=1+age+' instead of '%s'\n",num_filled, line); | 
| model[0]='\0'; | model[0]='\0'; | 
| goto end; | goto end; | 
| } | } | 
| Line 11857 Interval (in months) between two waves: | Line 11950 Interval (in months) between two waves: | 
| ximort[i][j]=(i == j ? 1.0 : 0.0); | ximort[i][j]=(i == j ? 1.0 : 0.0); | 
| } | } | 
| /*p[1]=0.0268; p[NDIM]=0.083;*/ | p[1]=0.0268; p[NDIM]=0.083; | 
| /*printf("%lf %lf", p[1], p[2]);*/ | /* printf("%lf %lf", p[1], p[2]); */ | 
| #ifdef GSL | #ifdef GSL | 
| Line 11984 Interval (in months) between two waves: | Line 12077 Interval (in months) between two waves: | 
| printf("%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i])); | printf("%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i])); | 
| fprintf(ficlog,"%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i])); | fprintf(ficlog,"%f [%f ; %f]\n",p[i],p[i]-2*sqrt(matcov[i][i]),p[i]+2*sqrt(matcov[i][i])); | 
| } | } | 
| lsurv=vector(1,AGESUP); | lsurv=vector(agegomp,AGESUP); | 
| lpop=vector(1,AGESUP); | lpop=vector(agegomp,AGESUP); | 
| tpop=vector(1,AGESUP); | tpop=vector(agegomp,AGESUP); | 
| lsurv[agegomp]=100000; | lsurv[agegomp]=100000; | 
| for (k=agegomp;k<=AGESUP;k++) { | for (k=agegomp;k<=AGESUP;k++) { | 
| Line 12033 Please run with mle=-1 to get a correct | Line 12126 Please run with mle=-1 to get a correct | 
| stepm, weightopt,\ | stepm, weightopt,\ | 
| model,imx,p,matcov,agemortsup); | model,imx,p,matcov,agemortsup); | 
| free_vector(lsurv,1,AGESUP); | free_vector(lsurv,agegomp,AGESUP); | 
| free_vector(lpop,1,AGESUP); | free_vector(lpop,agegomp,AGESUP); | 
| free_vector(tpop,1,AGESUP); | free_vector(tpop,agegomp,AGESUP); | 
| free_matrix(ximort,1,NDIM,1,NDIM); | free_matrix(ximort,1,NDIM,1,NDIM); | 
| free_ivector(dcwave,firstobs,lastobs); | free_ivector(dcwave,firstobs,lastobs); | 
| free_vector(agecens,firstobs,lastobs); | free_vector(agecens,firstobs,lastobs); | 
| Line 12331 Please run with mle=-1 to get a correct | Line 12424 Please run with mle=-1 to get a correct | 
| } | } | 
| /* Results */ | /* Results */ | 
| endishere=0; | |
| nresult=0; | nresult=0; | 
| parameterline=0; | |
| do{ | do{ | 
| if(!fgets(line, MAXLINE, ficpar)){ | if(!fgets(line, MAXLINE, ficpar)){ | 
| endishere=1; | endishere=1; | 
| parameterline=14; | parameterline=15; | 
| }else if (line[0] == '#') { | }else if (line[0] == '#') { | 
| /* If line starts with a # it is a comment */ | /* If line starts with a # it is a comment */ | 
| numlinepar++; | numlinepar++; | 
| Line 12348 Please run with mle=-1 to get a correct | Line 12443 Please run with mle=-1 to get a correct | 
| parameterline=11; | parameterline=11; | 
| else if(sscanf(line,"prevbackcast=%[^\n]\n",modeltemp)) | else if(sscanf(line,"prevbackcast=%[^\n]\n",modeltemp)) | 
| parameterline=12; | parameterline=12; | 
| else if(sscanf(line,"result:%[^\n]\n",modeltemp)) | else if(sscanf(line,"result:%[^\n]\n",modeltemp)){ | 
| parameterline=13; | parameterline=13; | 
| } | |
| else{ | else{ | 
| parameterline=14; | parameterline=14; | 
| } | } | 
| switch (parameterline){ | switch (parameterline){ /* =0 only if only comments */ | 
| case 11: | case 11: | 
| if((num_filled=sscanf(line,"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)) !=EOF && (num_filled == 8)){ | if((num_filled=sscanf(line,"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)) !=EOF && (num_filled == 8)){ | 
| 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(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); | 
| Line 12366 Please run with mle=-1 to get a correct | Line 12462 Please run with mle=-1 to get a correct | 
| prvforecast = 1; | prvforecast = 1; | 
| } | } | 
| else if((num_filled=sscanf(line,"prevforecast=%d yearsfproj=%lf mobil_average=%d\n",&prevfcast,&yrfproj,&mobilavproj)) !=EOF){/* && (num_filled == 3))*/ | else if((num_filled=sscanf(line,"prevforecast=%d yearsfproj=%lf mobil_average=%d\n",&prevfcast,&yrfproj,&mobilavproj)) !=EOF){/* && (num_filled == 3))*/ | 
| printf("prevforecast=%d yearsfproj=%lf mobil_average=%d\n",prevfcast,yrfproj,mobilavproj); | printf("prevforecast=%d yearsfproj=%lf.2 mobil_average=%d\n",prevfcast,yrfproj,mobilavproj); | 
| fprintf(ficlog,"prevforecast=%d yearsfproj=%lf mobil_average=%d\n",prevfcast,yrfproj,mobilavproj); | fprintf(ficlog,"prevforecast=%d yearsfproj=%lf.2 mobil_average=%d\n",prevfcast,yrfproj,mobilavproj); | 
| fprintf(ficres,"prevforecast=%d yearsfproj=%lf mobil_average=%d\n",prevfcast,yrfproj,mobilavproj); | fprintf(ficres,"prevforecast=%d yearsfproj=%lf.2 mobil_average=%d\n",prevfcast,yrfproj,mobilavproj); | 
| prvforecast = 2; | prvforecast = 2; | 
| } | } | 
| else { | else { | 
| Line 12389 Please run with mle=-1 to get a correct | Line 12485 Please run with mle=-1 to get a correct | 
| prvbackcast = 1; | prvbackcast = 1; | 
| } | } | 
| else if((num_filled=sscanf(line,"prevbackcast=%d yearsbproj=%lf mobil_average=%d\n",&prevbcast,&yrbproj,&mobilavproj)) ==3){/* && (num_filled == 3))*/ | else if((num_filled=sscanf(line,"prevbackcast=%d yearsbproj=%lf mobil_average=%d\n",&prevbcast,&yrbproj,&mobilavproj)) ==3){/* && (num_filled == 3))*/ | 
| printf("prevbackcast=%d yearsbproj=%lf mobil_average=%d\n",prevbcast,yrbproj,mobilavproj); | printf("prevbackcast=%d yearsbproj=%lf.2 mobil_average=%d\n",prevbcast,yrbproj,mobilavproj); | 
| fprintf(ficlog,"prevbackcast=%d yearsfproj=%lf mobil_average=%d\n",prevbcast,yrbproj,mobilavproj); | fprintf(ficlog,"prevbackcast=%d yearsbproj=%lf.2 mobil_average=%d\n",prevbcast,yrbproj,mobilavproj); | 
| fprintf(ficres,"prevbackcast=%d yearsfproj=%lf mobil_average=%d\n",prevbcast,yrbproj,mobilavproj); | fprintf(ficres,"prevbackcast=%d yearsbproj=%lf.2 mobil_average=%d\n",prevbcast,yrbproj,mobilavproj); | 
| prvbackcast = 2; | prvbackcast = 2; | 
| } | } | 
| else { | else { | 
| Line 12401 Please run with mle=-1 to get a correct | Line 12497 Please run with mle=-1 to get a correct | 
| } | } | 
| break; | break; | 
| case 13: | case 13: | 
| if((num_filled=sscanf(line,"result:%[^\n]\n",resultline)) !=EOF){ | num_filled=sscanf(line,"result:%[^\n]\n",resultline); | 
| if (num_filled == 0){ | nresult++; /* Sum of resultlines */ | 
| resultline[0]='\0'; | printf("Result %d: result:%s\n",nresult, resultline); | 
| printf("Warning %d: no result line! It should be at minimum 'result: V2=0 V1=1 or result:.\n%s\n", num_filled, line); | if(nresult > MAXRESULTLINES){ | 
| fprintf(ficlog,"Warning %d: no result line! It should be at minimum 'result: V2=0 V1=1 or result:.\n%s\n", num_filled, line); | printf("ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\nYou can use the 'r' parameter file '%s' which uses option mle=0 to get other results. ",MAXRESULTLINES,nresult,rfileres); | 
| break; | fprintf(ficlog,"ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\nYou can use the 'r' parameter file '%s' which uses option mle=0 to get other results. ",MAXRESULTLINES,nresult,rfileres); | 
| } else if (num_filled != 1){ | goto end; | 
| printf("ERROR %d: result line! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",num_filled, line); | |
| fprintf(ficlog,"ERROR %d: result line! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",num_filled, line); | |
| } | |
| nresult++; /* Sum of resultlines */ | |
| printf("Result %d: result=%s\n",nresult, resultline); | |
| if(nresult > MAXRESULTLINES){ | |
| printf("ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | |
| fprintf(ficlog,"ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | |
| goto end; | |
| } | |
| decoderesult(resultline, nresult); /* Fills TKresult[nresult] combination and Tresult[nresult][k4+1] combination values */ | |
| fprintf(ficparo,"result: %s\n",resultline); | |
| fprintf(ficres,"result: %s\n",resultline); | |
| fprintf(ficlog,"result: %s\n",resultline); | |
| break; | |
| case 14: | |
| if(ncovmodel >2 && nresult==0 ){ | |
| printf("ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); | |
| goto end; | |
| } | |
| break; | |
| default: | |
| nresult=1; | |
| decoderesult(".",nresult ); /* No covariate */ | |
| } | } | 
| decoderesult(resultline, nresult); /* Fills TKresult[nresult] combination and Tresult[nresult][k4+1] combination values */ | |
| fprintf(ficparo,"result: %s\n",resultline); | |
| fprintf(ficres,"result: %s\n",resultline); | |
| fprintf(ficlog,"result: %s\n",resultline); | |
| break; | |
| case 14: | |
| printf("Error: Unknown command '%s'\n",line); | |
| fprintf(ficlog,"Error: Unknown command '%s'\n",line); | |
| if(ncovmodel >=2 && nresult==0 ){ | |
| printf("ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); | |
| fprintf(ficlog,"ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); | |
| } | |
| /* goto end; */ | |
| break; | |
| case 15: | |
| printf("End of resultlines.\n"); | |
| fprintf(ficlog,"End of resultlines.\n"); | |
| break; | |
| default: /* parameterline =0 */ | |
| nresult=1; | |
| decoderesult(".",nresult ); /* No covariate */ | |
| } /* End switch parameterline */ | } /* End switch parameterline */ | 
| }while(endishere==0); /* End do */ | }while(endishere==0); /* End do */ |