/* $Id$
$State$
$Log$
+ Revision 1.140 2011/09/02 10:37:54 brouard
+ Summary: times.h is ok with mingw32 now.
+
Revision 1.139 2010/06/14 07:50:17 brouard
After the theft of my laptop, I probably lost some lines of codes which were not uploaded to the CVS tree.
I remember having already fixed agemin agemax which are pointers now but not cvs saved.
#include <errno.h>
extern int errno;
-#include <sys/time.h>
-/*
+#ifdef LINUX
#include <time.h>
#include "timeval.h"
+#else
+#include <sys/time.h>
+#endif
#ifdef GSL
#include <gsl/gsl_errno.h>
/* #include <libintl.h> */
/* #define _(String) gettext (String) */
-#define MAXLINE 256
+#define MAXLINE 1024 /* Was 256. Overflow with 312 with 2 states and 4 covariates. Should be ok */
#define GNUPLOTPROGRAM "gnuplot"
/*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/
/* $Id$ */
/* $State$ */
-char version[]="Imach version 0.98m, April 2010, INED-EUROREVES-Institut de longevite ";
+char version[]="Imach version 0.98n, January 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Sicentific Research 25293121)";
char fullversion[]="$Revision$ $Date$";
char strstart[80];
char optionfilext[10], optionfilefiname[FILENAMELENGTH];
double *weight;
int **s; /* Status */
-double *agedc, **covar, idx;
-int **nbcode, *Tvar, **codtab, **Tvard, *Tprod, cptcovprod, *Tvaraff;
+double *agedc;
+double **covar; /**< covar[i,j], value of jth covariate for individual i,
+ * covar=matrix(0,NCOVMAX,1,n);
+ * cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; */
+double idx;
+int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */
+int **codtab; /**< codtab=imatrix(1,100,1,10); */
+int **Tvard, *Tprod, cptcovprod, *Tvaraff;
double *lsurv, *lpop, *tpop;
double ftol=FTOL; /* Tolerance for computing Max Likelihood */
sec_left = (sec_left) %(60*60);
minutes = (sec_left) /60;
sec_left = (sec_left) % (60);
- sprintf(ascdiff,"%d day(s) %d hour(s) %d minute(s) %d second(s)",days, hours, minutes, sec_left);
+ sprintf(ascdiff,"%ld day(s) %ld hour(s) %ld minute(s) %ld second(s)",days, hours, minutes, sec_left);
return ascdiff;
}
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]); */
if(globpr){
- fprintf(ficresilk,"%9d %6d %2d %2d %1d %1d %3d %11.6f %8.4f\
+ fprintf(ficresilk,"%9ld %6d %2d %2d %1d %1d %3d %11.6f %8.4f\
%11.6f %11.6f %11.6f ", \
num[i],i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],
2*weight[i]*lli,out[s1][s2],savm[s1][s2]);
}
jmean=sum/k;
printf("Delay (in months) between two waves Min=%d (for indiviudal %ld) Max=%d (%ld) Mean=%f\n\n ",jmin, num[ijmin], jmax, num[ijmax], jmean);
- fprintf(ficlog,"Delay (in months) between two waves Min=%d (for indiviudal %ld) Max=%d (%ld) Mean=%f\n\n ",jmin, ijmin, jmax, ijmax, jmean);
+ fprintf(ficlog,"Delay (in months) between two waves Min=%d (for indiviudal %d) Max=%d (%d) Mean=%f\n\n ",jmin, ijmin, jmax, ijmax, jmean);
}
/*********** Tricode ****************************/
fprintf(ficgp," %f*exp(p%d+p%d*x",YEARM/stepm,i,i+1);
else
fprintf(ficgp," exp(p%d+p%d*x",i,i+1);
- ij=1;
+ ij=1;/* To be checked else nbcode[0][0] wrong */
for(j=3; j <=ncovmodel; j++) {
if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) {
fprintf(ficgp,"+p%d*%d*x",i+j-1,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]);
lval=strtol(strb,&endptr,10);
/* if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/
if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);
- fprintf(ficlog,"Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog);
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a status of wave %d. Setting maxwav=%d might be wrong. Exiting.\n", strb, linei,i,line,j,maxwav);fflush(ficlog);
return 1;
}
}
month=99;
year=9999;
}else{
- printf("Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);
- fprintf(ficlog,"Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);fflush(ficlog);
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of interview (mm/yyyy or .) at wave %d. Exiting.\n",strb, linei,i, line,j);fflush(ficlog);
return 1;
}
anint[j][i]= (double) year;
month=99;
year=9999;
}else{
- printf("Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);
- fprintf(ficlog,"Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog);
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of death (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog);
return 1;
}
andc[i]=(double) year;
month=99;
year=9999;
}else{
- printf("Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);
- fprintf(ficlog,"Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog);
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy or .). Exiting.\n",strb, linei,i,line);fflush(ficlog);
return 1;
}
if (year==9999) {
- printf("Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);
- fprintf(ficlog,"Error reading data around '%s' at line number %ld for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);fflush(ficlog);
+ printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);
+ fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be a date of birth (mm/yyyy) but at least the year of birth should be given. Exiting.\n",strb, linei,i,line);fflush(ficlog);
return 1;
}
errno=0;
dval=strtod(strb,&endptr);
if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%f' at line number %ld, \"%s\" for individual %d\nShould be a weight. Exiting.\n",dval, i,line,linei);
- fprintf(ficlog,"Error reading data around '%f' at line number %ld, \"%s\" for individual %d\nShould be a weight. Exiting.\n",dval, i,line,linei);
+ printf("Error reading data around '%f' at line number %d, \"%s\" for individual %d\nShould be a weight. Exiting.\n",dval, i,line,linei);
+ fprintf(ficlog,"Error reading data around '%f' at line number %d, \"%s\" for individual %d\nShould be a weight. Exiting.\n",dval, i,line,linei);
fflush(ficlog);
return 1;
}
errno=0;
lval=strtol(strb,&endptr,10);
if( strb[0]=='\0' || (*endptr != '\0')){
- printf("Error reading data around '%d' at line number %ld for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);
- fprintf(ficlog,"Error reading data around '%d' at line number %ld for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);fflush(ficlog);
+ printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);
+ fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\nShould be a covariate value (=0 for the reference or 1 for alternative). Exiting.\n",lval, linei,i, line);fflush(ficlog);
return 1;
}
}
if(lval <-1 || lval >1){
- printf("Error reading data around '%d' at line number %ld for individual %d, '%s'\n \
+ printf("Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \
For example, for multinomial values like 1, 2 and 3,\n \
and V1=0 V2=1 for (3). V1=1 V2=1 should not exist and the corresponding\n \
output of IMaCh is often meaningless.\n \
Exiting.\n",lval,linei, i,line,j);
- fprintf(ficlog,"Error reading data around '%d' at line number %ld for individual %d, '%s'\n \
+ fprintf(ficlog,"Error reading data around '%ld' at line number %d for individual %d, '%s'\n \
Should be a value of %d(nth) covariate (0 should be the value for the reference and 1\n \
for the alternative. IMaCh does not build design variables automatically, do it yourself.\n \
For example, for multinomial values like 1, 2 and 3,\n \
fprintf(ficlog,"Error. AGE must be in lower case model=%s ",model);fflush(ficlog);
return 1;
}
+ if (strstr(model,"v") !=0){
+ printf("Error. 'v' must be in upper case 'V' model=%s ",model);
+ fprintf(ficlog,"Error. 'v' must be in upper case model=%s ",model);fflush(ficlog);
+ return 1;
+ }
/* This loop fills the array Tvar from the string 'model'.*/
/* j is the number of + signs in the model V1+V2+V3 j=2 i=3 to 1 */
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
numlinepar++;
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
fputs(line,ficlog);
}
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
numlinepar++;
- puts(line);
+ fputs(line, stdout);
+ //puts(line);
fputs(line,ficparo);
fputs(line,ficlog);
}
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
numlinepar++;
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
fputs(line,ficlog);
}
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
numlinepar++;
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
fputs(line,ficlog);
}
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
numlinepar++;
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
fputs(line,ficlog);
}
ncovcol + k1
If already ncovcol=4 and model=V2+V1+V1*V4+age*V3
Tvar[3=V1*V4]=4+1 etc */
- Tprod=ivector(1,15);
+ Tprod=ivector(1,15); /* Gives the position of a product */
/* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3
if V2+V1+V1*V4+age*V3+V3*V2 TProd[k1=2]=5 (V3*V2)
*/
Tvaraff=ivector(1,15);
- Tvard=imatrix(1,15,1,2); /* For V3*V2 Tvard[k1=2][1]=3 (V3) Tvard[k1=2][2]=2(V2) */
+ Tvard=imatrix(1,15,1,2); /* n=Tvard[k1][1] and m=Tvard[k1][2] gives the couple n,m of the k1 th product Vn*Vm
+ * For V3*V2 (in V2+V1+V1*V4+age*V3+V3*V2), V3*V2 position is 2nd.
+ * Tvard[k1=2][1]=3 (V3) Tvard[k1=2][2]=2(V2) */
Tage=ivector(1,15); /* Gives the covariate id of covariates associated with age: V2 + V1 + age*V4 + V3*age
4 covariates (3 plus signs)
Tage[1=V3*age]= 4; Tage[2=age*V4] = 3
for(j=1; j <= ncodemax[k]; j++){ /* For each modality of this covariate */
for(cpt=1; cpt <=(m/pow(2,cptcoveff+1-k)); cpt++){ /* cpt=1 to 8/2**(3+1-1 or 3+1-3) =1 or 4 */
h++;
- if (h>m) {
+ if (h>m)
h=1;
- codtab[h][k]=j;
- codtab[h][Tvar[k]]=j;
- }
+ codtab[h][k]=j;
+ codtab[h][Tvar[k]]=j;
printf("h=%d k=%d j=%d codtab[h][k]=%d Tvar[k]=%d codtab[h][Tvar[k]]=%d \n",h, k,j,codtab[h][k],Tvar[k],codtab[h][Tvar[k]]);
}
}
else{
fprintf(ficgp,"\n# %s\n", version);
fprintf(ficgp,"# %s\n", optionfilegnuplot);
- fprintf(ficgp,"set missing 'NaNq'\n");
+ //fprintf(ficgp,"set missing 'NaNq'\n");
+ fprintf(ficgp,"set datafile missing 'NaNq'\n");
}
/* fclose(ficgp);*/
/*--------- index.htm --------*/
while((c=getc(ficpar))=='#' && c!= EOF){
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
}
ungetc(c,ficpar);
while((c=getc(ficpar))=='#' && c!= EOF){
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
}
ungetc(c,ficpar);
while((c=getc(ficpar))=='#' && c!= EOF){
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
}
ungetc(c,ficpar);
while((c=getc(ficpar))=='#' && c!= EOF){
ungetc(c,ficpar);
fgets(line, MAXLINE, ficpar);
- puts(line);
+ fputs(line,stdout);
fputs(line,ficparo);
}
ungetc(c,ficpar);
/*---------- End : free ----------------*/
if (mobilav!=0) free_ma3x(mobaverage,1, AGESUP,1,NCOVMAX, 1,NCOVMAX);
free_ma3x(probs,1,AGESUP,1,NCOVMAX, 1,NCOVMAX);
-
} /* mle==-3 arrives here for freeing */
endfree:
- free_matrix(prlim,1,nlstate,1,nlstate);
+ free_matrix(prlim,1,nlstate,1,nlstate); /*here or after loop ? */
free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath);
free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath);
free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath);
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));
- printf("Total time was %d Sec.\n", end_time.tv_sec -start_time.tv_sec);
+ printf("Total time was %ld Sec.\n", end_time.tv_sec -start_time.tv_sec);
fprintf(ficlog,"Total time used %s\n", asc_diff_time(end_time.tv_sec -start_time.tv_sec,tmpout));
- fprintf(ficlog,"Total time was %d Sec.\n", end_time.tv_sec -start_time.tv_sec);
+ fprintf(ficlog,"Total time was %ld Sec.\n", end_time.tv_sec -start_time.tv_sec);
/* printf("Total time was %d uSec.\n", total_usecs);*/
/* if(fileappend(fichtm,optionfilehtm)){ */
fprintf(fichtm,"<br>Local time at start %s<br>Local time at end %s<br>\n</body></html>",strstart, strtend);