| version 1.142, 2014/01/26 03:57:36 | version 1.160, 2014/09/02 09:24:05 | 
| Line 1 | Line 1 | 
 | /* $Id$ | /* $Id$ | 
 | $State$ | $State$ | 
 | $Log$ | $Log$ | 
 |  | Revision 1.160  2014/09/02 09:24:05  brouard | 
 |  | *** empty log message *** | 
 |  |  | 
 |  | Revision 1.159  2014/09/01 10:34:10  brouard | 
 |  | Summary: WIN32 | 
 |  | Author: Brouard | 
 |  |  | 
 |  | Revision 1.158  2014/08/27 17:11:51  brouard | 
 |  | *** empty log message *** | 
 |  |  | 
 |  | Revision 1.157  2014/08/27 16:26:55  brouard | 
 |  | Summary: Preparing windows Visual studio version | 
 |  | Author: Brouard | 
 |  |  | 
 |  | In order to compile on Visual studio, time.h is now correct and time_t | 
 |  | and tm struct should be used. difftime should be used but sometimes I | 
 |  | just make the differences in raw time format (time(&now). | 
 |  | Trying to suppress #ifdef LINUX | 
 |  | Add xdg-open for __linux in order to open default browser. | 
 |  |  | 
 |  | Revision 1.156  2014/08/25 20:10:10  brouard | 
 |  | *** empty log message *** | 
 |  |  | 
 |  | Revision 1.155  2014/08/25 18:32:34  brouard | 
 |  | Summary: New compile, minor changes | 
 |  | Author: Brouard | 
 |  |  | 
 |  | Revision 1.154  2014/06/20 17:32:08  brouard | 
 |  | Summary: Outputs now all graphs of convergence to period prevalence | 
 |  |  | 
 |  | Revision 1.153  2014/06/20 16:45:46  brouard | 
 |  | Summary: If 3 live state, convergence to period prevalence on same graph | 
 |  | Author: Brouard | 
 |  |  | 
 |  | Revision 1.152  2014/06/18 17:54:09  brouard | 
 |  | Summary: open browser, use gnuplot on same dir than imach if not found in the path | 
 |  |  | 
 |  | Revision 1.151  2014/06/18 16:43:30  brouard | 
 |  | *** empty log message *** | 
 |  |  | 
 |  | Revision 1.150  2014/06/18 16:42:35  brouard | 
 |  | Summary: If gnuplot is not in the path try on same directory than imach binary (OSX) | 
 |  | Author: brouard | 
 |  |  | 
 |  | Revision 1.149  2014/06/18 15:51:14  brouard | 
 |  | Summary: Some fixes in parameter files errors | 
 |  | Author: Nicolas Brouard | 
 |  |  | 
 |  | Revision 1.148  2014/06/17 17:38:48  brouard | 
 |  | Summary: Nothing new | 
 |  | Author: Brouard | 
 |  |  | 
 |  | Just a new packaging for OS/X version 0.98nS | 
 |  |  | 
 |  | Revision 1.147  2014/06/16 10:33:11  brouard | 
 |  | *** empty log message *** | 
 |  |  | 
 |  | Revision 1.146  2014/06/16 10:20:28  brouard | 
 |  | Summary: Merge | 
 |  | Author: Brouard | 
 |  |  | 
 |  | Merge, before building revised version. | 
 |  |  | 
 |  | Revision 1.145  2014/06/10 21:23:15  brouard | 
 |  | Summary: Debugging with valgrind | 
 |  | Author: Nicolas Brouard | 
 |  |  | 
 |  | Lot of changes in order to output the results with some covariates | 
 |  | After the Edimburgh REVES conference 2014, it seems mandatory to | 
 |  | improve the code. | 
 |  | No more memory valgrind error but a lot has to be done in order to | 
 |  | continue the work of splitting the code into subroutines. | 
 |  | Also, decodemodel has been improved. Tricode is still not | 
 |  | optimal. nbcode should be improved. Documentation has been added in | 
 |  | the source code. | 
 |  |  | 
 |  | Revision 1.143  2014/01/26 09:45:38  brouard | 
 |  | Summary: Version 0.98nR (to be improved, but gives same optimization results as 0.98k. Nice, promising | 
 |  |  | 
 |  | * imach.c (Module): Trying to merge old staffs together while being at Tokyo. Not tested... | 
 |  | (Module): Version 0.98nR Running ok, but output format still only works for three covariates. | 
 |  |  | 
 | Revision 1.142  2014/01/26 03:57:36  brouard | Revision 1.142  2014/01/26 03:57:36  brouard | 
 | Summary: gnuplot changed plot w l 1 has to be changed to plot w l lt 2 | Summary: gnuplot changed plot w l 1 has to be changed to plot w l lt 2 | 
 |  |  | 
| Line 368 | Line 450 | 
 | begin-prev-date,... | begin-prev-date,... | 
 | open gnuplot file | open gnuplot file | 
 | open html file | open html file | 
| period (stable) prevalence | period (stable) prevalence      | pl_nom    1-1 2-2 etc by covariate | 
| for age prevalim() | for age prevalim()             | #****** V1=0  V2=1  V3=1  V4=0 ****** | 
| h Pij x | | 65 1 0 2 1 3 1 4 0  0.96326 0.03674 | 
| variance of p varprob | freexexit2 possible for memory heap. | 
|  |  | 
|  | h Pij x                         | pij_nom  ficrestpij | 
|  | # Cov Agex agex+h hpijx with i,j= 1-1 1-2     1-3     2-1     2-2     2-3 | 
|  | 1  85   85    1.00000             0.00000 0.00000 0.00000 1.00000 0.00000 | 
|  | 1  85   86    0.68299             0.22291 0.09410 0.71093 0.00000 0.28907 | 
|  |  | 
|  | 1  65   99    0.00364             0.00322 0.99314 0.00350 0.00310 0.99340 | 
|  | 1  65  100    0.00214             0.00204 0.99581 0.00206 0.00196 0.99597 | 
|  | variance of p one-step probabilities varprob  | prob_nom   ficresprob #One-step probabilities and stand. devi in () | 
|  | Standard deviation of one-step probabilities | probcor_nom   ficresprobcor #One-step probabilities and correlation matrix | 
|  | Matrix of variance covariance of one-step probabilities |  probcov_nom ficresprobcov #One-step probabilities and covariance matrix | 
|  |  | 
 | forecasting if prevfcast==1 prevforecast call prevalence() | forecasting if prevfcast==1 prevforecast call prevalence() | 
 | health expectancies | health expectancies | 
 | Variance-covariance of DFLE | Variance-covariance of DFLE | 
| Line 391 | Line 485 | 
 | #include <stdio.h> | #include <stdio.h> | 
 | #include <stdlib.h> | #include <stdlib.h> | 
 | #include <string.h> | #include <string.h> | 
 |  |  | 
 |  | #ifdef _WIN32 | 
 |  | #include <io.h> | 
 |  | #else | 
 | #include <unistd.h> | #include <unistd.h> | 
 |  | #endif | 
 |  |  | 
 | #include <limits.h> | #include <limits.h> | 
 | #include <sys/types.h> | #include <sys/types.h> | 
 | #include <sys/stat.h> | #include <sys/stat.h> | 
 | #include <errno.h> | #include <errno.h> | 
| extern int errno; | /* extern int errno; */ | 
|  |  | 
|  | /* #ifdef LINUX */ | 
|  | /* #include <time.h> */ | 
|  | /* #include "timeval.h" */ | 
|  | /* #else */ | 
|  | /* #include <sys/time.h> */ | 
|  | /* #endif */ | 
 |  |  | 
 | #ifdef LINUX |  | 
 | #include <time.h> | #include <time.h> | 
 | #include "timeval.h" |  | 
 | #else |  | 
 | #include <sys/time.h> |  | 
 | #endif |  | 
 |  |  | 
 | #ifdef GSL | #ifdef GSL | 
 | #include <gsl/gsl_errno.h> | #include <gsl/gsl_errno.h> | 
| Line 423  extern int errno; | Line 524  extern int errno; | 
 | #define GLOCK_ERROR_NOPATH              -1      /* empty path */ | #define GLOCK_ERROR_NOPATH              -1      /* empty path */ | 
 | #define GLOCK_ERROR_GETCWD              -2      /* cannot get cwd */ | #define GLOCK_ERROR_GETCWD              -2      /* cannot get cwd */ | 
 |  |  | 
| #define MAXPARM 128 /* Maximum number of parameters for the optimization */ | #define MAXPARM 128 /**< Maximum number of parameters for the optimization */ | 
| #define NPARMAX 64 /* (nlstate+ndeath-1)*nlstate*ncovmodel */ | #define NPARMAX 64 /**< (nlstate+ndeath-1)*nlstate*ncovmodel */ | 
 |  |  | 
 | #define NINTERVMAX 8 | #define NINTERVMAX 8 | 
| #define NLSTATEMAX 8 /* Maximum number of live states (for func) */ | #define NLSTATEMAX 8 /**< Maximum number of live states (for func) */ | 
| #define NDEATHMAX 8 /* Maximum number of dead states (for func) */ | #define NDEATHMAX 8 /**< Maximum number of dead states (for func) */ | 
| #define NCOVMAX 20 /* Maximum number of covariates */ | #define NCOVMAX 20 /**< Maximum number of covariates, including generated covariates V1*V2 */ | 
|  | #define codtabm(h,k)  1 & (h-1) >> (k-1) ; | 
 | #define MAXN 20000 | #define MAXN 20000 | 
| #define YEARM 12. /* Number of months per year */ | #define YEARM 12. /**< Number of months per year */ | 
 | #define AGESUP 130 | #define AGESUP 130 | 
 | #define AGEBASE 40 | #define AGEBASE 40 | 
| #define AGEGOMP 10. /* Minimal age for Gompertz adjustment */ | #define AGEGOMP 10. /**< Minimal age for Gompertz adjustment */ | 
| #ifdef UNIX | #ifdef _WIN32 | 
| #define DIRSEPARATOR '/' |  | 
| #define CHARSEPARATOR "/" |  | 
| #define ODIRSEPARATOR '\\' |  | 
| #else |  | 
 | #define DIRSEPARATOR '\\' | #define DIRSEPARATOR '\\' | 
 | #define CHARSEPARATOR "\\" | #define CHARSEPARATOR "\\" | 
 | #define ODIRSEPARATOR '/' | #define ODIRSEPARATOR '/' | 
 |  | #else | 
 |  | #define DIRSEPARATOR '/' | 
 |  | #define CHARSEPARATOR "/" | 
 |  | #define ODIRSEPARATOR '\\' | 
 | #endif | #endif | 
 |  |  | 
 | /* $Id$ */ | /* $Id$ */ | 
 | /* $State$ */ | /* $State$ */ | 
 |  |  | 
| char version[]="Imach version 0.98nR, January 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121)"; | char version[]="Imach version 0.98nX, August 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121)"; | 
 | char fullversion[]="$Revision$ $Date$"; | char fullversion[]="$Revision$ $Date$"; | 
 | char strstart[80]; | char strstart[80]; | 
 | char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | 
 | int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings  */ | int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings  */ | 
 | int nvar=0, nforce=0; /* Number of variables, number of forces */ | int nvar=0, nforce=0; /* Number of variables, number of forces */ | 
| int cptcovn=0, cptcovage=0, cptcoveff=0,cptcov=0; /* Number of covariates, of covariates with '*age' */ | /* Number of covariates model=V2+V1+ V3*age+V2*V4 */ | 
|  | int cptcovn=0; /**< cptcovn number of covariates added in the model (excepting constant and age and age*product) */ | 
|  | int cptcovt=0; /**< cptcovt number of covariates added in the model (excepting constant and age) */ | 
|  | int cptcovs=0; /**< cptcovs number of simple covariates V2+V1 =2 */ | 
|  | int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */ | 
|  | int cptcovprodnoage=0; /**< Number of covariate products without age */ | 
|  | int cptcoveff=0; /* Total number of covariates to vary for printing results */ | 
|  | int cptcov=0; /* Working variable */ | 
 | int npar=NPARMAX; | int npar=NPARMAX; | 
 | 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 */ | 
| Line 473  int **dh; /* dh[mi][i] is number of step | Line 582  int **dh; /* dh[mi][i] is number of step | 
 | int **bh; /* bh[mi][i] is the bias (+ or -) for this individual if the delay between | int **bh; /* bh[mi][i] is the bias (+ or -) for this individual if the delay between | 
 | * wave mi and wave mi+1 is not an exact multiple of stepm. */ | * wave mi and wave mi+1 is not an exact multiple of stepm. */ | 
 | double jmean=1; /* Mean space between 2 waves */ | double jmean=1; /* Mean space between 2 waves */ | 
 |  | 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 */ | 
| Line 514  char popfile[FILENAMELENGTH]; | Line 624  char popfile[FILENAMELENGTH]; | 
 |  |  | 
 | char optionfilegnuplot[FILENAMELENGTH], optionfilehtm[FILENAMELENGTH], optionfilehtmcov[FILENAMELENGTH] ; | char optionfilegnuplot[FILENAMELENGTH], optionfilehtm[FILENAMELENGTH], optionfilehtmcov[FILENAMELENGTH] ; | 
 |  |  | 
| struct timeval start_time, end_time, curr_time, last_time, forecast_time; | /* struct timeval start_time, end_time, curr_time, last_time, forecast_time; */ | 
| struct timezone tzp; | /* struct timezone tzp; */ | 
| extern int gettimeofday(); | /* extern int gettimeofday(); */ | 
| struct tm tmg, tm, tmf, *gmtime(), *localtime(); | struct tm tml, *gmtime(), *localtime(); | 
| long time_value; |  | 
| extern long time(); | extern time_t time(); | 
|  |  | 
|  | struct tm start_time, end_time, curr_time, last_time, forecast_time; | 
|  | time_t  rstart_time, rend_time, rcurr_time, rlast_time, rforecast_time; /* raw time */ | 
|  | struct tm tm; | 
|  |  | 
 | char strcurr[80], strfor[80]; | char strcurr[80], strfor[80]; | 
 |  |  | 
 | char *endptr; | char *endptr; | 
| Line 573  double dateintmean=0; | Line 688  double dateintmean=0; | 
 | double *weight; | double *weight; | 
 | int **s; /* Status */ | int **s; /* Status */ | 
 | double *agedc; | double *agedc; | 
| double  **covar; /**< covar[i,j], value of jth covariate for individual i, | double  **covar; /**< covar[j,i], value of jth covariate for individual i, | 
 | * covar=matrix(0,NCOVMAX,1,n); | * covar=matrix(0,NCOVMAX,1,n); | 
 | * cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; */ | * cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; */ | 
 | double  idx; | double  idx; | 
 | int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ | int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */ | 
 |  | int *Ndum; /** Freq of modality (tricode */ | 
 | int **codtab; /**< codtab=imatrix(1,100,1,10); */ | int **codtab; /**< codtab=imatrix(1,100,1,10); */ | 
 | int **Tvard, *Tprod, cptcovprod, *Tvaraff; | int **Tvard, *Tprod, cptcovprod, *Tvaraff; | 
 | double *lsurv, *lpop, *tpop; | double *lsurv, *lpop, *tpop; | 
 |  |  | 
| double ftol=FTOL; /* Tolerance for computing Max Likelihood */ | double ftol=FTOL; /**< Tolerance for computing Max Likelihood */ | 
| double ftolhess; /* Tolerance for computing hessian */ | double ftolhess; /**< Tolerance for computing hessian */ | 
 |  |  | 
 | /**************** split *************************/ | /**************** split *************************/ | 
 | static  int split( char *path, char *dirc, char *name, char *ext, char *finame ) | static  int split( char *path, char *dirc, char *name, char *ext, char *finame ) | 
| Line 666  char *trimbb(char *out, char *in) | Line 782  char *trimbb(char *out, char *in) | 
 | return s; | return s; | 
 | } | } | 
 |  |  | 
 |  | char *cutl(char *blocc, char *alocc, char *in, char occ) | 
 |  | { | 
 |  | /* cuts string in into blocc and alocc where blocc ends before first occurence of char 'occ' | 
 |  | and alocc starts after first occurence of char 'occ' : ex cutv(blocc,alocc,"abcdef2ghi2j",'2') | 
 |  | gives blocc="abcdef2ghi" and alocc="j". | 
 |  | If occ is not found blocc is null and alocc is equal to in. Returns blocc | 
 |  | */ | 
 |  | char *s, *t; | 
 |  | t=in;s=in; | 
 |  | while ((*in != occ) && (*in != '\0')){ | 
 |  | *alocc++ = *in++; | 
 |  | } | 
 |  | if( *in == occ){ | 
 |  | *(alocc)='\0'; | 
 |  | s=++in; | 
 |  | } | 
 |  |  | 
 |  | if (s == t) {/* occ not found */ | 
 |  | *(alocc-(in-s))='\0'; | 
 |  | in=s; | 
 |  | } | 
 |  | while ( *in != '\0'){ | 
 |  | *blocc++ = *in++; | 
 |  | } | 
 |  |  | 
 |  | *blocc='\0'; | 
 |  | return t; | 
 |  | } | 
 | char *cutv(char *blocc, char *alocc, char *in, char occ) | char *cutv(char *blocc, char *alocc, char *in, char occ) | 
 | { | { | 
 | /* cuts string in into blocc and alocc where blocc ends before last occurence of char 'occ' | /* cuts string in into blocc and alocc where blocc ends before last occurence of char 'occ' | 
| Line 729  int nbocc(char *s, char occ) | Line 873  int nbocc(char *s, char occ) | 
 | /*   } */ | /*   } */ | 
 | /* } */ | /* } */ | 
 |  |  | 
 |  | #ifdef _WIN32 | 
 |  | char * strsep(char **pp, const char *delim) | 
 |  | { | 
 |  | char *p, *q; | 
 |  |  | 
 |  | if ((p = *pp) == NULL) | 
 |  | return 0; | 
 |  | if ((q = strpbrk (p, delim)) != NULL) | 
 |  | { | 
 |  | *pp = q + 1; | 
 |  | *q = '\0'; | 
 |  | } | 
 |  | else | 
 |  | *pp = 0; | 
 |  | return p; | 
 |  | } | 
 |  | #endif | 
 |  |  | 
 | /********************** nrerror ********************/ | /********************** nrerror ********************/ | 
 |  |  | 
 | void nrerror(char error_text[]) | void nrerror(char error_text[]) | 
| Line 836  double **matrix(long nrl, long nrh, long | Line 998  double **matrix(long nrl, long nrh, long | 
 |  |  | 
 | for (i=nrl+1; i<=nrh; i++) m[i]=m[i-1]+ncol; | for (i=nrl+1; i<=nrh; i++) m[i]=m[i-1]+ncol; | 
 | return m; | return m; | 
| /* print *(*(m+1)+70) or print m[1][70]; print m+1 or print &(m[1]) | /* print *(*(m+1)+70) or print m[1][70]; print m+1 or print &(m[1]) or &(m[1][0]) | 
|  | m[i] = address of ith row of the table. &(m[i]) is its value which is another adress | 
|  | that of m[i][0]. In order to get the value p m[i][0] but it is unitialized. | 
 | */ | */ | 
 | } | } | 
 |  |  | 
| Line 949  double brent(double ax, double bx, doubl | Line 1113  double brent(double ax, double bx, doubl | 
 | { | { | 
 | int iter; | int iter; | 
 | double a,b,d,etemp; | double a,b,d,etemp; | 
| double fu,fv,fw,fx; | double fu=0,fv,fw,fx; | 
 | double ftemp; | double ftemp; | 
 | double p,q,r,tol1,tol2,u,v,w,x,xm; | double p,q,r,tol1,tol2,u,v,w,x,xm; | 
 | double e=0.0; | double e=0.0; | 
| Line 1132  void powell(double p[], double **xi, int | Line 1296  void powell(double p[], double **xi, int | 
 | xits=vector(1,n); | xits=vector(1,n); | 
 | *fret=(*func)(p); | *fret=(*func)(p); | 
 | for (j=1;j<=n;j++) pt[j]=p[j]; | for (j=1;j<=n;j++) pt[j]=p[j]; | 
 |  | rcurr_time = time(NULL); | 
 | for (*iter=1;;++(*iter)) { | for (*iter=1;;++(*iter)) { | 
 | fp=(*fret); | fp=(*fret); | 
 | ibig=0; | ibig=0; | 
 | del=0.0; | del=0.0; | 
| last_time=curr_time; | rlast_time=rcurr_time; | 
| (void) gettimeofday(&curr_time,&tzp); | /* (void) gettimeofday(&curr_time,&tzp); */ | 
| printf("\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, curr_time.tv_sec-last_time.tv_sec, curr_time.tv_sec-start_time.tv_sec);fflush(stdout); | rcurr_time = time(NULL); | 
| fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, curr_time.tv_sec-last_time.tv_sec, curr_time.tv_sec-start_time.tv_sec); fflush(ficlog); | curr_time = *localtime(&rcurr_time); | 
| /*     fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tv_sec-start_time.tv_sec); */ | printf("\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret, rcurr_time-rlast_time, rcurr_time-rstart_time);fflush(stdout); | 
|  | fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f %ld sec. %ld sec.",*iter,*fret,rcurr_time-rlast_time, rcurr_time-rstart_time); fflush(ficlog); | 
|  | /*     fprintf(ficrespow,"%d %.12f %ld",*iter,*fret,curr_time.tm_sec-start_time.tm_sec); */ | 
 | for (i=1;i<=n;i++) { | for (i=1;i<=n;i++) { | 
 | printf(" %d %.12f",i, p[i]); | printf(" %d %.12f",i, p[i]); | 
 | fprintf(ficlog," %d %.12lf",i, p[i]); | fprintf(ficlog," %d %.12lf",i, p[i]); | 
| Line 1150  void powell(double p[], double **xi, int | Line 1317  void powell(double p[], double **xi, int | 
 | fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
 | fprintf(ficrespow,"\n");fflush(ficrespow); | fprintf(ficrespow,"\n");fflush(ficrespow); | 
 | if(*iter <=3){ | if(*iter <=3){ | 
| tm = *localtime(&curr_time.tv_sec); | tml = *localtime(&rcurr_time); | 
| strcpy(strcurr,asctime(&tm)); | strcpy(strcurr,asctime(&tml)); | 
 | /*       asctime_r(&tm,strcurr); */ | /*       asctime_r(&tm,strcurr); */ | 
| forecast_time=curr_time; | rforecast_time=rcurr_time; | 
 | itmp = strlen(strcurr); | itmp = strlen(strcurr); | 
 | if(strcurr[itmp-1]=='\n')  /* Windows outputs with a new line */ | if(strcurr[itmp-1]=='\n')  /* Windows outputs with a new line */ | 
 | strcurr[itmp-1]='\0'; | strcurr[itmp-1]='\0'; | 
| printf("\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,curr_time.tv_sec-last_time.tv_sec); | printf("\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); | 
| fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,curr_time.tv_sec-last_time.tv_sec); | fprintf(ficlog,"\nConsidering the time needed for this last iteration #%d: %ld seconds,\n",*iter,rcurr_time-rlast_time); | 
 | for(niterf=10;niterf<=30;niterf+=10){ | for(niterf=10;niterf<=30;niterf+=10){ | 
| forecast_time.tv_sec=curr_time.tv_sec+(niterf-*iter)*(curr_time.tv_sec-last_time.tv_sec); | rforecast_time=rcurr_time+(niterf-*iter)*(rcurr_time-rlast_time); | 
| tmf = *localtime(&forecast_time.tv_sec); | forecast_time = *localtime(&rforecast_time); | 
 | /*      asctime_r(&tmf,strfor); */ | /*      asctime_r(&tmf,strfor); */ | 
| strcpy(strfor,asctime(&tmf)); | strcpy(strfor,asctime(&forecast_time)); | 
 | itmp = strlen(strfor); | itmp = strlen(strfor); | 
 | if(strfor[itmp-1]=='\n') | if(strfor[itmp-1]=='\n') | 
 | strfor[itmp-1]='\0'; | strfor[itmp-1]='\0'; | 
| printf("   - if your program needs %d iterations to converge, convergence will be \n   reached in %s i.e.\n   on %s (current time is %s);\n",niterf, asc_diff_time(forecast_time.tv_sec-curr_time.tv_sec,tmpout),strfor,strcurr); | printf("   - if your program needs %d iterations to converge, convergence will be \n   reached in %s i.e.\n   on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); | 
| fprintf(ficlog,"   - if your program needs %d iterations to converge, convergence will be \n   reached in %s i.e.\n   on %s (current time is %s);\n",niterf, asc_diff_time(forecast_time.tv_sec-curr_time.tv_sec,tmpout),strfor,strcurr); | fprintf(ficlog,"   - if your program needs %d iterations to converge, convergence will be \n   reached in %s i.e.\n   on %s (current time is %s);\n",niterf, asc_diff_time(rforecast_time-rcurr_time,tmpout),strfor,strcurr); | 
 | } | } | 
 | } | } | 
 | for (i=1;i<=n;i++) { | for (i=1;i<=n;i++) { | 
| Line 1271  double **prevalim(double **prlim, int nl | Line 1438  double **prevalim(double **prlim, int nl | 
 |  |  | 
 | int i, ii,j,k; | int i, ii,j,k; | 
 | double min, max, maxmin, maxmax,sumnew=0.; | double min, max, maxmin, maxmax,sumnew=0.; | 
| double **matprod2(); | /* double **matprod2(); */ /* test */ | 
 | double **out, cov[NCOVMAX+1], **pmij(); | double **out, cov[NCOVMAX+1], **pmij(); | 
 | double **newm; | double **newm; | 
 | double agefin, delaymax=50 ; /* Max number of years to converge */ | double agefin, delaymax=50 ; /* Max number of years to converge */ | 
| Line 1291  double **prevalim(double **prlim, int nl | Line 1458  double **prevalim(double **prlim, int nl | 
 |  |  | 
 | for (k=1; k<=cptcovn;k++) { | for (k=1; k<=cptcovn;k++) { | 
 | cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; | cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; | 
| /*        printf("ij=%d k=%d Tvar[k]=%d nbcode=%d cov=%lf codtab[ij][Tvar[k]]=%d \n",ij,k, Tvar[k],nbcode[Tvar[k]][codtab[ij][Tvar[k]]],cov[2+k], codtab[ij][Tvar[k]]);*/ | /*printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtab[%d][Tvar[%d]]=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtab[ij][Tvar[k]]],cov[2+k], ij, k, codtab[ij][Tvar[k]]);*/ | 
 | } | } | 
| for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | 
| for (k=1; k<=cptcovprod;k++) | /* for (k=1; k<=cptcovprod;k++) /\* Useless *\/ */ | 
| cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]] * nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | /*   cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]] * nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; */ | 
 |  |  | 
 | /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/ | /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/ | 
 | /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/ | /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/ | 
 | /*printf("ij=%d cov[3]=%lf \n",ij, cov[3]);*/ | /*printf("ij=%d cov[3]=%lf \n",ij, cov[3]);*/ | 
 |  | /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ | 
 |  | /* out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); /\* Bug Valgrind *\/ */ | 
 | out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); /* Bug Valgrind */ | out=matprod2(newm, pmij(pmmij,cov,ncovmodel,x,nlstate),1,nlstate+ndeath,1,nlstate+ndeath,1,nlstate+ndeath, oldm); /* Bug Valgrind */ | 
 |  |  | 
 | savm=oldm; | savm=oldm; | 
| Line 1312  double **prevalim(double **prlim, int nl | Line 1481  double **prevalim(double **prlim, int nl | 
 | sumnew=0; | sumnew=0; | 
 | for(k=1; k<=ndeath; k++) sumnew+=newm[i][nlstate+k]; | for(k=1; k<=ndeath; k++) sumnew+=newm[i][nlstate+k]; | 
 | prlim[i][j]= newm[i][j]/(1-sumnew); | prlim[i][j]= newm[i][j]/(1-sumnew); | 
 |  | /*printf(" prevalim i=%d, j=%d, prmlim[%d][%d]=%f, agefin=%d \n", i, j, i, j, prlim[i][j],(int)agefin);*/ | 
 | max=FMAX(max,prlim[i][j]); | max=FMAX(max,prlim[i][j]); | 
 | min=FMIN(min,prlim[i][j]); | min=FMIN(min,prlim[i][j]); | 
 | } | } | 
| Line 1392  double **pmij(double **ps, double *cov, | Line 1562  double **pmij(double **ps, double *cov, | 
 | } | } | 
 | } | } | 
 |  |  | 
|  |  | 
| /*        for(ii=1; ii<= nlstate+ndeath; ii++){ */ | /* for(ii=1; ii<= nlstate+ndeath; ii++){ */ | 
| /*       for(jj=1; jj<= nlstate+ndeath; jj++){ */ | /*   for(jj=1; jj<= nlstate+ndeath; jj++){ */ | 
| /*         printf("ddd %lf ",ps[ii][jj]); */ | /*  printf(" pmij  ps[%d][%d]=%lf ",ii,jj,ps[ii][jj]); */ | 
| /*       } */ | /*   } */ | 
| /*       printf("\n "); */ | /*   printf("\n "); */ | 
| /*        } */ | /* } */ | 
| /*        printf("\n ");printf("%lf ",cov[2]); */ | /* printf("\n ");printf("%lf ",cov[2]);*/ | 
| /* | /* | 
 | for(i=1; i<= npar; i++) printf("%f ",x[i]); | for(i=1; i<= npar; i++) printf("%f ",x[i]); | 
 | goto end;*/ | goto end;*/ | 
 | return ps; | return ps; | 
| Line 1408  double **pmij(double **ps, double *cov, | Line 1578  double **pmij(double **ps, double *cov, | 
 |  |  | 
 | /**************** Product of 2 matrices ******************/ | /**************** Product of 2 matrices ******************/ | 
 |  |  | 
| double **matprod2(double **out, double **in,long nrl, long nrh, long ncl, long nch, long ncolol, long ncoloh, double **b) | double **matprod2(double **out, double **in,int nrl, int nrh, int ncl, int nch, int ncolol, int ncoloh, double **b) | 
 | { | { | 
 | /* Computes the matrix product of in(1,nrh-nrl+1)(1,nch-ncl+1) times | /* Computes the matrix product of in(1,nrh-nrl+1)(1,nch-ncl+1) times | 
 | b(1,nch-ncl+1)(1,ncoloh-ncolol+1) into out(...) */ | b(1,nch-ncl+1)(1,ncoloh-ncolol+1) into out(...) */ | 
 | /* in, b, out are matrice of pointers which should have been initialized | /* in, b, out are matrice of pointers which should have been initialized | 
 | before: only the contents of out is modified. The function returns | before: only the contents of out is modified. The function returns | 
 | a pointer to pointers identical to out */ | a pointer to pointers identical to out */ | 
| long i, j, k; | int i, j, k; | 
 | for(i=nrl; i<= nrh; i++) | for(i=nrl; i<= nrh; i++) | 
| for(k=ncolol; k<=ncoloh; k++) | for(k=ncolol; k<=ncoloh; k++){ | 
| for(j=ncl,out[i][k]=0.; j<=nch; j++) | out[i][k]=0.; | 
| out[i][k] +=in[i][j]*b[j][k]; | for(j=ncl; j<=nch; j++) | 
|  | out[i][k] +=in[i][j]*b[j][k]; | 
|  | } | 
 | return out; | return out; | 
 | } | } | 
 |  |  | 
| Line 1462  double ***hpxij(double ***po, int nhstep | Line 1633  double ***hpxij(double ***po, int nhstep | 
 | cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; | cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; | 
 | for (k=1; k<=cptcovage;k++) | for (k=1; k<=cptcovage;k++) | 
 | cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | 
| for (k=1; k<=cptcovprod;k++) | for (k=1; k<=cptcovprod;k++) /* Useless because included in cptcovn */ | 
 | cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | 
 |  |  | 
 |  |  | 
| Line 1513  double func( double *x) | Line 1684  double func( double *x) | 
 | Then computes with function pmij which return a matrix p[i][j] giving the elementary probability | Then computes with function pmij which return a matrix p[i][j] giving the elementary probability | 
 | to be observed in j being in i according to the model. | to be observed in j being in i according to the model. | 
 | */ | */ | 
| for (k=1; k<=cptcovn;k++) cov[2+k]=covar[Tvar[k]][i]; | for (k=1; k<=cptcovn;k++){ /* Simple and product covariates without age* products */ | 
|  | cov[2+k]=covar[Tvar[k]][i]; | 
|  | } | 
 | /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] | /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] | 
 | is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] | is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] | 
 | has been calculated etc */ | has been calculated etc */ | 
| Line 1781  double funcone( double *x) | Line 1954  double funcone( double *x) | 
 | for (kk=1; kk<=cptcovage;kk++) { | for (kk=1; kk<=cptcovage;kk++) { | 
 | cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; | cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; | 
 | } | } | 
 |  | /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */ | 
 | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, | 
 | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); | 
 |  | /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */ | 
 |  | /*           1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */ | 
 | savm=oldm; | savm=oldm; | 
 | oldm=newm; | oldm=newm; | 
 | } /* end mult */ | } /* end mult */ | 
| Line 2028  double hessii(double x[], double delta, | Line 2204  double hessii(double x[], double delta, | 
 |  |  | 
 | fx=func(x); | fx=func(x); | 
 | for (i=1;i<=npar;i++) p2[i]=x[i]; | for (i=1;i<=npar;i++) p2[i]=x[i]; | 
| for(l=0 ; l <=lmax; l++){ | for(l=0 ; l <=lmax; l++){  /* Enlarging the zone around the Maximum */ | 
 | l1=pow(10,l); | l1=pow(10,l); | 
 | delts=delt; | delts=delt; | 
 | for(k=1 ; k <kmax; k=k+1){ | for(k=1 ; k <kmax; k=k+1){ | 
 | delt = delta*(l1*k); | delt = delta*(l1*k); | 
 | p2[theta]=x[theta] +delt; | p2[theta]=x[theta] +delt; | 
| k1=func(p2)-fx; | k1=func(p2)-fx;   /* Might be negative if too close to the theoretical maximum */ | 
 | p2[theta]=x[theta]-delt; | p2[theta]=x[theta]-delt; | 
 | k2=func(p2)-fx; | k2=func(p2)-fx; | 
 | /*res= (k1-2.0*fx+k2)/delt/delt; */ | /*res= (k1-2.0*fx+k2)/delt/delt; */ | 
| Line 2203  void  freqsummary(char fileres[], int ia | Line 2379  void  freqsummary(char fileres[], int ia | 
 |  |  | 
 | first=1; | first=1; | 
 |  |  | 
| for(k1=1; k1<=j;k1++){ | /* for(k1=1; k1<=j ; k1++){   /* Loop on covariates */ | 
| for(i1=1; i1<=ncodemax[k1];i1++){ | /*  for(i1=1; i1<=ncodemax[k1];i1++){ /* Now it is 2 */ | 
| j1++; | /*    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++) | 
 | for (jk=-5; jk<=nlstate+ndeath; jk++) | for (jk=-5; jk<=nlstate+ndeath; jk++) | 
 | for(m=iagemin; m <= iagemax+3; m++) | for(m=iagemin; m <= iagemax+3; m++) | 
 | freq[i][jk][m]=0; | freq[i][jk][m]=0; | 
|  |  | 
| for (i=1; i<=nlstate; i++) | for (i=1; i<=nlstate; i++) | 
| for(m=iagemin; m <= iagemax+3; m++) | for(m=iagemin; m <= iagemax+3; m++) | 
| prop[i][m]=0; | prop[i][m]=0; | 
 |  |  | 
 | dateintsum=0; | dateintsum=0; | 
 | k2cpt=0; | k2cpt=0; | 
 | for (i=1; i<=imx; i++) { | for (i=1; i<=imx; i++) { | 
 | bool=1; | bool=1; | 
| if  (cptcovn>0) { | 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++) | 
| if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtab[j1][z1]]) | if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtab[j1][z1]]){ | 
| bool=0; | /* Tests if the value of each of the covariates of i is equal to filter j1 */ | 
|  | bool=0; | 
|  | /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtab[%d][%d]=%d, nbcode[Tvaraff][codtab[%d][%d]=%d, j1=%d\n", | 
|  | bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtab[j1][z1], | 
|  | j1,z1,nbcode[Tvaraff[z1]][codtab[j1][z1]],j1);*/ | 
|  | /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtab[7][3]=1 and nbcde[3][?]=1*/ | 
|  | } | 
 | } | } | 
 |  |  | 
 | 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.); | k2=anint[m][i]+(mint[m][i]/12.); | 
| Line 2245  void  freqsummary(char fileres[], int ia | Line 2430  void  freqsummary(char fileres[], int ia | 
 | /*}*/ | /*}*/ | 
 | } | } | 
 | } | } | 
| } | } /* end i */ | 
 |  |  | 
 | /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | 
 | pstamp(ficresp); | pstamp(ficresp); | 
| Line 2253  void  freqsummary(char fileres[], int ia | Line 2438  void  freqsummary(char fileres[], int ia | 
 | fprintf(ficresp, "\n#********** Variable "); | fprintf(ficresp, "\n#********** Variable "); | 
 | for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); | for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); | 
 | fprintf(ficresp, "**********\n#"); | fprintf(ficresp, "**********\n#"); | 
 |  | fprintf(ficlog, "\n#********** Variable "); | 
 |  | for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); | 
 |  | fprintf(ficlog, "**********\n#"); | 
 | } | } | 
 | 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); | 
| Line 2329  void  freqsummary(char fileres[], int ia | Line 2517  void  freqsummary(char fileres[], int ia | 
 | printf("Others in log...\n"); | printf("Others in log...\n"); | 
 | fprintf(ficlog,"\n"); | fprintf(ficlog,"\n"); | 
 | } | } | 
| } | /*}*/ | 
 | } | } | 
 | dateintmean=dateintsum/k2cpt; | dateintmean=dateintsum/k2cpt; | 
 |  |  | 
| Line 2354  void prevalence(double ***probs, double | Line 2542  void prevalence(double ***probs, double | 
 | double pos,posprop; | double pos,posprop; | 
 | double  y2; /* in fractional years */ | double  y2; /* in fractional years */ | 
 | int iagemin, iagemax; | int iagemin, iagemax; | 
 |  | int first; /** to stop verbosity which is redirected to log file */ | 
 |  |  | 
 | iagemin= (int) agemin; | iagemin= (int) agemin; | 
 | iagemax= (int) agemax; | iagemax= (int) agemax; | 
| Line 2362  void prevalence(double ***probs, double | Line 2551  void prevalence(double ***probs, double | 
 | /*  freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,iagemin,iagemax+3);*/ | /*  freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,iagemin,iagemax+3);*/ | 
 | j1=0; | j1=0; | 
 |  |  | 
| j=cptcoveff; | /*j=cptcoveff;*/ | 
 | if (cptcovn<1) {j=1;ncodemax[1]=1;} | if (cptcovn<1) {j=1;ncodemax[1]=1;} | 
 |  |  | 
| for(k1=1; k1<=j;k1++){ | first=1; | 
| for(i1=1; i1<=ncodemax[k1];i1++){ | for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ | 
| j1++; | /*for(i1=1; i1<=ncodemax[k1];i1++){ | 
|  | j1++;*/ | 
 |  |  | 
 | for (i=1; i<=nlstate; i++) | for (i=1; i<=nlstate; i++) | 
 | for(m=iagemin; m <= iagemax+3; m++) | for(m=iagemin; m <= iagemax+3; m++) | 
| Line 2397  void prevalence(double ***probs, double | Line 2587  void prevalence(double ***probs, double | 
 | } | } | 
 | } | } | 
 | for(i=iagemin; i <= iagemax+3; i++){ | for(i=iagemin; i <= iagemax+3; i++){ | 
 |  |  | 
 | for(jk=1,posprop=0; jk <=nlstate ; jk++) { | for(jk=1,posprop=0; jk <=nlstate ; jk++) { | 
 | posprop += prop[jk][i]; | posprop += prop[jk][i]; | 
 | } | } | 
|  |  | 
 | for(jk=1; jk <=nlstate ; jk++){ | for(jk=1; jk <=nlstate ; jk++){ | 
 | if( i <=  iagemax){ | if( i <=  iagemax){ | 
 | if(posprop>=1.e-5){ | if(posprop>=1.e-5){ | 
 | probs[i][jk][j1]= prop[jk][i]/posprop; | probs[i][jk][j1]= prop[jk][i]/posprop; | 
| } else | } else{ | 
| printf("Warning Observed prevalence probs[%d][%d][%d]=%lf because of lack of cases\n",jk,i,j1,probs[i][jk][j1]); | if(first==1){ | 
|  | 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 jk */ | 
 | }/* end i */ | }/* end i */ | 
| } /* end i1 */ | /*} *//* end i1 */ | 
| } /* end k1 */ | } /* end j1 */ | 
 |  |  | 
 | /*  free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath, iagemin, iagemax+3);*/ | /*  free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath, iagemin, iagemax+3);*/ | 
 | /*free_vector(pp,1,nlstate);*/ | /*free_vector(pp,1,nlstate);*/ | 
| Line 2562  void  concatwav(int wav[], int **dh, int | Line 2755  void  concatwav(int wav[], int **dh, int | 
 | } | } | 
 |  |  | 
 | /*********** Tricode ****************************/ | /*********** Tricode ****************************/ | 
| void tricode(int *Tvar, int **nbcode, int imx) | void tricode(int *Tvar, int **nbcode, int imx, int *Ndum) | 
 | { | { | 
| /* Uses cptcovn+2*cptcovprod as the number of covariates */ | /**< Uses cptcovn+2*cptcovprod as the number of covariates */ | 
| /*      Tvar[i]=atoi(stre); /* find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1 */ | /*      Tvar[i]=atoi(stre);  find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1 | 
|  | /* Boring subroutine which should only output nbcode[Tvar[j]][k] | 
|  | * Tvar[5] in V2+V1+V3*age+V2*V4 is 2 (V2) | 
|  | /* nbcode[Tvar[j]][1]= | 
|  | */ | 
 |  |  | 
| int Ndum[20],ij=1, k=0, j=0, i=0, maxncov=NCOVMAX; | int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX; | 
 | int modmaxcovj=0; /* Modality max of covariates j */ | int modmaxcovj=0; /* Modality max of covariates j */ | 
 |  | int cptcode=0; /* Modality max of covariates j */ | 
 |  | int modmincovj=0; /* Modality min of covariates j */ | 
 |  |  | 
 |  |  | 
 | cptcoveff=0; | cptcoveff=0; | 
 |  |  | 
| for (k=0; k<maxncov; k++) Ndum[k]=0; | for (k=-1; k < maxncov; k++) Ndum[k]=0; | 
| for (k=1; k<=7; k++) ncodemax[k]=0; /* Horrible constant again */ | for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */ | 
 |  |  | 
| for (j=1; j<=(cptcovn+2*cptcovprod); j++) { /* For each covariate j */ | /* Loop on covariates without age and products */ | 
| for (i=1; i<=imx; i++) { /*reads the data file to get the maximum value of the | for (j=1; j<=(cptcovs); j++) { /* model V1 + V2*age+ V3 + V3*V4 : V1 + V3 = 2 only */ | 
|  | for (i=1; i<=imx; i++) { /* Lopp on individuals: reads the data file to get the maximum value of the | 
 | modality of this covariate Vj*/ | modality of this covariate Vj*/ | 
| ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Finds for covariate j, n=Tvar[j] of Vn . ij is the | ij=(int)(covar[Tvar[j]][i]); /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i | 
|  | * If product of Vn*Vm, still boolean *: | 
|  | * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables | 
|  | * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0   */ | 
|  | /* Finds for covariate j, n=Tvar[j] of Vn . ij is the | 
 | modality of the nth covariate of individual i. */ | modality of the nth covariate of individual i. */ | 
 |  | if (ij > modmaxcovj) | 
 |  | modmaxcovj=ij; | 
 |  | else if (ij < modmincovj) | 
 |  | modmincovj=ij; | 
 |  | if ((ij < -1) && (ij > NCOVMAX)){ | 
 |  | printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX ); | 
 |  | exit(1); | 
 |  | }else | 
 | Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ | Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/ | 
 |  | /*  If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */ | 
 | /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ | /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/ | 
 | if (ij > modmaxcovj) modmaxcovj=ij; |  | 
 | /* getting the maximum value of the modality of the covariate | /* getting the maximum value of the modality of the covariate | 
 | (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and | (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and | 
 | female is 1, then modmaxcovj=1.*/ | female is 1, then modmaxcovj=1.*/ | 
 | } | } | 
 |  | printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", j, Tvar[j], modmincovj, modmaxcovj); | 
 |  | cptcode=modmaxcovj; | 
 | /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ | /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */ | 
| for (i=0; i<=modmaxcovj; i++) { /* i=-1 ? 0 and 1*//* For each modality of model-cov j */ | /*for (i=0; i<=cptcode; i++) {*/ | 
| if( Ndum[i] != 0 ) | for (i=modmincovj;  i<=modmaxcovj; i++) { /* i=-1 ? 0 and 1*//* For each value of the modality of model-cov j */ | 
| ncodemax[j]++; | printf("Frequencies of covariates %d V%d %d\n", j, Tvar[j], Ndum[i]); | 
| /* Number of modalities of the j th covariate. In fact | if( Ndum[i] != 0 ){ /* Counts if nobody answered, empty modality */ | 
| ncodemax[j]=2 (dichotom. variables only) but it could be more for | ncodemax[j]++;  /* ncodemax[j]= Number of non-null modalities of the j th covariate. */ | 
| historical reasons */ | } | 
|  | /* In fact  ncodemax[j]=2 (dichotom. variables only) but it could be more for | 
|  | historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */ | 
 | } /* Ndum[-1] number of undefined modalities */ | } /* Ndum[-1] number of undefined modalities */ | 
 |  |  | 
 | /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ | /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */ | 
| ij=1; | /* For covariate j, modalities could be 1, 2, 3, 4. If Ndum[2]=0 ncodemax[j] is not 4 but 3 */ | 
| for (i=1; i<=ncodemax[j]; i++) { /* i= 1 to 2 for dichotomous */ | /* If Ndum[3}= 635; Ndum[4]=0; Ndum[5]=0; Ndum[6]=27; Ndum[7]=125; | 
| for (k=0; k<= modmaxcovj; k++) { /* k=-1 ? NCOVMAX*//* maxncov or modmaxcovj */ | modmincovj=3; modmaxcovj = 7; | 
|  | There are only 3 modalities non empty (or 2 if 27 is too few) : ncodemax[j]=3; | 
|  | which will be coded 0, 1, 2 which in binary on 3-1 digits are 0=00 1=01, 2=10; defining two dummy | 
|  | variables V1_1 and V1_2. | 
|  | nbcode[Tvar[j]][ij]=k; | 
|  | nbcode[Tvar[j]][1]=0; | 
|  | nbcode[Tvar[j]][2]=1; | 
|  | nbcode[Tvar[j]][3]=2; | 
|  | */ | 
|  | ij=1; /* ij is similar to i but can jumps over null modalities */ | 
|  | for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 */ | 
|  | for (k=0; k<= cptcode; k++) { /* k=-1 ? k=0 to 1 *//* Could be 1 to 4 */ | 
|  | /*recode from 0 */ | 
 | if (Ndum[k] != 0) { /* If at least one individual responded to this modality k */ | if (Ndum[k] != 0) { /* If at least one individual responded to this modality k */ | 
 | nbcode[Tvar[j]][ij]=k;  /* stores the modality in an array nbcode. | nbcode[Tvar[j]][ij]=k;  /* stores the modality in an array nbcode. | 
 | k is a modality. If we have model=V1+V1*sex | k is a modality. If we have model=V1+V1*sex | 
| Line 2610  void tricode(int *Tvar, int **nbcode, in | Line 2840  void tricode(int *Tvar, int **nbcode, in | 
 | } /* end of loop on modality */ | } /* end of loop on modality */ | 
 | } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ | } /* end of loop on model-covariate j. nbcode[Tvarj][1]=0 and nbcode[Tvarj][2]=1 sets the value of covariate j*/ | 
 |  |  | 
| for (k=0; k< maxncov; k++) Ndum[k]=0; | for (k=-1; k< maxncov; k++) Ndum[k]=0; | 
 |  |  | 
| for (i=1; i<=ncovmodel-2; i++) { /* -2, cste and age */ | for (i=1; i<=ncovmodel-2; i++) { /* -2, cste and age */ | 
| /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ | /* Listing of all covariables in statement model to see if some covariates appear twice. For example, V1 appears twice in V1+V1*V2.*/ | 
| ij=Tvar[i]; /* Tvar might be -1 if status was unknown */ | ij=Tvar[i]; /* Tvar might be -1 if status was unknown */ | 
| Ndum[ij]++; | Ndum[ij]++; | 
| } | } | 
 |  |  | 
 | ij=1; | ij=1; | 
| for (i=1; i<= maxncov; i++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ | for (i=0; i<=  maxncov-1; i++) { /* modmaxcovj is unknown here. Only Ndum[2(V2),3(age*V3), 5(V3*V2) 6(V1*V4) */ | 
|  | /*printf("Ndum[%d]=%d\n",i, Ndum[i]);*/ | 
 | if((Ndum[i]!=0) && (i<=ncovcol)){ | if((Ndum[i]!=0) && (i<=ncovcol)){ | 
| Tvaraff[ij]=i; /*For printing */ | /*printf("diff Ndum[%d]=%d\n",i, Ndum[i]);*/ | 
|  | Tvaraff[ij]=i; /*For printing (unclear) */ | 
 | ij++; | ij++; | 
| } | }else | 
|  | Tvaraff[ij]=0; | 
 | } | } | 
 | ij--; | ij--; | 
| cptcoveff=ij; /*Number of simple covariates*/ | cptcoveff=ij; /*Number of total covariates*/ | 
|  |  | 
 | } | } | 
 |  |  | 
 |  |  | 
 | /*********** Health Expectancies ****************/ | /*********** Health Expectancies ****************/ | 
 |  |  | 
 | void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[] ) | void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[] ) | 
| Line 3224  void varevsij(char optionfilefiname[], d | Line 3459  void varevsij(char optionfilefiname[], d | 
 | free_vector(gmp,nlstate+1,nlstate+ndeath); | free_vector(gmp,nlstate+1,nlstate+ndeath); | 
 | free_matrix(gradgp,1,npar,nlstate+1,nlstate+ndeath); | free_matrix(gradgp,1,npar,nlstate+1,nlstate+ndeath); | 
 | free_matrix(trgradgp,nlstate+1,nlstate+ndeath,1,npar); /* mu or p point j*/ | free_matrix(trgradgp,nlstate+1,nlstate+ndeath,1,npar); /* mu or p point j*/ | 
| fprintf(ficgp,"\nunset parametric;unset label; set ter png small;set size 0.65, 0.65"); | fprintf(ficgp,"\nunset parametric;unset label; set ter png small size 320, 240"); | 
 | /* for(j=nlstate+1; j<= nlstate+ndeath; j++){ *//* Only the first actually */ | /* for(j=nlstate+1; j<= nlstate+ndeath; j++){ *//* Only the first actually */ | 
 | fprintf(ficgp,"\n set log y; unset log x;set xlabel \"Age\"; set ylabel \"Force of mortality (year-1)\";"); | fprintf(ficgp,"\n set log y; unset log x;set xlabel \"Age\"; set ylabel \"Force of mortality (year-1)\";"); | 
 | /*   fprintf(ficgp,"\n plot \"%s\"  u 1:($3*%6.3f) not w l 1 ",fileresprobmorprev,YEARM/estepm); */ | /*   fprintf(ficgp,"\n plot \"%s\"  u 1:($3*%6.3f) not w l 1 ",fileresprobmorprev,YEARM/estepm); */ | 
 | /*   fprintf(ficgp,"\n replot \"%s\"  u 1:(($3+1.96*$4)*%6.3f) t \"95\%% interval\" w l 2 ",fileresprobmorprev,YEARM/estepm); */ | /*   fprintf(ficgp,"\n replot \"%s\"  u 1:(($3+1.96*$4)*%6.3f) t \"95\%% interval\" w l 2 ",fileresprobmorprev,YEARM/estepm); */ | 
 | /*   fprintf(ficgp,"\n replot \"%s\"  u 1:(($3-1.96*$4)*%6.3f) not w l 2 ",fileresprobmorprev,YEARM/estepm); */ | /*   fprintf(ficgp,"\n replot \"%s\"  u 1:(($3-1.96*$4)*%6.3f) not w l 2 ",fileresprobmorprev,YEARM/estepm); */ | 
| fprintf(ficgp,"\n plot \"%s\"  u 1:($3) not w l lt 2 ",subdirf(fileresprobmorprev)); | fprintf(ficgp,"\n plot \"%s\"  u 1:($3) not w l lt 1 ",subdirf(fileresprobmorprev)); | 
| fprintf(ficgp,"\n replot \"%s\"  u 1:(($3+1.96*$4)) t \"95\%% interval\" w l lt 3 ",subdirf(fileresprobmorprev)); | fprintf(ficgp,"\n replot \"%s\"  u 1:(($3+1.96*$4)) t \"95\%% interval\" w l lt 2 ",subdirf(fileresprobmorprev)); | 
| fprintf(ficgp,"\n replot \"%s\"  u 1:(($3-1.96*$4)) not w l lt 3 ",subdirf(fileresprobmorprev)); | fprintf(ficgp,"\n replot \"%s\"  u 1:(($3-1.96*$4)) not w l lt 2 ",subdirf(fileresprobmorprev)); | 
 | fprintf(fichtm,"\n<br> File (multiple files are possible if covariates are present): <A href=\"%s\">%s</a>\n",subdirf(fileresprobmorprev),subdirf(fileresprobmorprev)); | fprintf(fichtm,"\n<br> File (multiple files are possible if covariates are present): <A href=\"%s\">%s</a>\n",subdirf(fileresprobmorprev),subdirf(fileresprobmorprev)); | 
 | fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months. <br> <img src=\"%s%s.png\"> <br>\n", estepm,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit); | fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months. <br> <img src=\"%s%s.png\"> <br>\n", estepm,subdirf3(optionfilefiname,"varmuptjgr",digitp),digit); | 
 | /*  fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months and then divided by estepm and multiplied by %.0f in order to have the probability to die over a year <br> <img src=\"varmuptjgr%s%s.png\"> <br>\n", stepm,YEARM,digitp,digit); | /*  fprintf(fichtm,"\n<br> Probability is computed over estepm=%d months and then divided by estepm and multiplied by %.0f in order to have the probability to die over a year <br> <img src=\"varmuptjgr%s%s.png\"> <br>\n", stepm,YEARM,digitp,digit); | 
| Line 3342  void varprob(char optionfilefiname[], do | Line 3577  void varprob(char optionfilefiname[], do | 
 | int i, j=0,  i1, k1, l1, t, tj; | int i, j=0,  i1, k1, l1, t, tj; | 
 | int k2, l2, j1,  z1; | int k2, l2, j1,  z1; | 
 | int k=0,l, cptcode; | int k=0,l, cptcode; | 
| int first=1, first1; | int first=1, first1, first2; | 
 | double cv12, mu1, mu2, lc1, lc2, v12, v21, v11, v22,v1,v2, c12, tnalp; | double cv12, mu1, mu2, lc1, lc2, v12, v21, v11, v22,v1,v2, c12, tnalp; | 
 | double **dnewm,**doldm; | double **dnewm,**doldm; | 
 | double *xp; | double *xp; | 
 | double *gp, *gm; | double *gp, *gm; | 
 | double **gradg, **trgradg; | double **gradg, **trgradg; | 
 | double **mu; | double **mu; | 
| double age,agelim, cov[NCOVMAX]; | double age,agelim, cov[NCOVMAX+1]; | 
 | double std=2.0; /* Number of standard deviation wide of confidence ellipsoids */ | double std=2.0; /* Number of standard deviation wide of confidence ellipsoids */ | 
 | int theta; | int theta; | 
 | char fileresprob[FILENAMELENGTH]; | char fileresprob[FILENAMELENGTH]; | 
 | char fileresprobcov[FILENAMELENGTH]; | char fileresprobcov[FILENAMELENGTH]; | 
 | char fileresprobcor[FILENAMELENGTH]; | char fileresprobcor[FILENAMELENGTH]; | 
 |  |  | 
 | double ***varpij; | double ***varpij; | 
 |  |  | 
 | strcpy(fileresprob,"prob"); | strcpy(fileresprob,"prob"); | 
| Line 3428  standard deviations wide on each axis. < | Line 3662  standard deviations wide on each axis. < | 
 | To be simple, these graphs help to understand the significativity of each parameter in relation to a second other one.<br> \n"); | To be simple, these graphs help to understand the significativity of each parameter in relation to a second other one.<br> \n"); | 
 |  |  | 
 | cov[1]=1; | cov[1]=1; | 
| tj=cptcoveff; | /* tj=cptcoveff; */ | 
|  | tj = (int) pow(2,cptcoveff); | 
 | if (cptcovn<1) {tj=1;ncodemax[1]=1;} | if (cptcovn<1) {tj=1;ncodemax[1]=1;} | 
 | j1=0; | j1=0; | 
| for(t=1; t<=tj;t++){ | for(j1=1; j1<=tj;j1++){ | 
| for(i1=1; i1<=ncodemax[t];i1++){ | /*for(i1=1; i1<=ncodemax[t];i1++){ */ | 
| j1++; | /*j1++;*/ | 
 | if  (cptcovn>0) { | if  (cptcovn>0) { | 
 | fprintf(ficresprob, "\n#********** Variable "); | fprintf(ficresprob, "\n#********** Variable "); | 
 | for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); | for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtab[j1][z1]]); | 
| Line 3456  To be simple, these graphs help to under | Line 3691  To be simple, these graphs help to under | 
 | fprintf(ficresprobcor, "**********\n#"); | fprintf(ficresprobcor, "**********\n#"); | 
 | } | } | 
 |  |  | 
 |  | gradg=matrix(1,npar,1,(nlstate)*(nlstate+ndeath)); | 
 |  | trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar); | 
 |  | gp=vector(1,(nlstate)*(nlstate+ndeath)); | 
 |  | gm=vector(1,(nlstate)*(nlstate+ndeath)); | 
 | for (age=bage; age<=fage; age ++){ | for (age=bage; age<=fage; age ++){ | 
 | cov[2]=age; | cov[2]=age; | 
 | for (k=1; k<=cptcovn;k++) { | for (k=1; k<=cptcovn;k++) { | 
| cov[2+k]=nbcode[Tvar[k]][codtab[j1][Tvar[k]]]; | cov[2+k]=nbcode[Tvar[k]][codtab[j1][Tvar[k]]];/* j1 1 2 3 4 | 
|  | * 1  1 1 1 1 | 
|  | * 2  2 1 1 1 | 
|  | * 3  1 2 1 1 | 
|  | */ | 
|  | /* nbcode[1][1]=0 nbcode[1][2]=1;*/ | 
 | } | } | 
 | for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; | 
 | for (k=1; k<=cptcovprod;k++) | for (k=1; k<=cptcovprod;k++) | 
 | cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | cov[2+Tprod[k]]=nbcode[Tvard[k][1]][codtab[ij][Tvard[k][1]]]*nbcode[Tvard[k][2]][codtab[ij][Tvard[k][2]]]; | 
 |  |  | 
 | gradg=matrix(1,npar,1,(nlstate)*(nlstate+ndeath)); |  | 
 | trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar); |  | 
 | gp=vector(1,(nlstate)*(nlstate+ndeath)); |  | 
 | gm=vector(1,(nlstate)*(nlstate+ndeath)); |  | 
 |  |  | 
 | for(theta=1; theta <=npar; theta++){ | for(theta=1; theta <=npar; theta++){ | 
 | for(i=1; i<=npar; i++) | for(i=1; i<=npar; i++) | 
| Line 3506  To be simple, these graphs help to under | Line 3746  To be simple, these graphs help to under | 
 |  |  | 
 | matprod2(dnewm,trgradg,1,(nlstate)*(nlstate+ndeath),1,npar,1,npar,matcov); | matprod2(dnewm,trgradg,1,(nlstate)*(nlstate+ndeath),1,npar,1,npar,matcov); | 
 | matprod2(doldm,dnewm,1,(nlstate)*(nlstate+ndeath),1,npar,1,(nlstate)*(nlstate+ndeath),gradg); | matprod2(doldm,dnewm,1,(nlstate)*(nlstate+ndeath),1,npar,1,(nlstate)*(nlstate+ndeath),gradg); | 
 | free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath)); |  | 
 | free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath)); |  | 
 | free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); |  | 
 | free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); |  | 
 |  |  | 
 | pmij(pmmij,cov,ncovmodel,x,nlstate); | pmij(pmmij,cov,ncovmodel,x,nlstate); | 
 |  |  | 
| Line 3543  To be simple, these graphs help to under | Line 3779  To be simple, these graphs help to under | 
 | i=0; | i=0; | 
 | for (k=1; k<=(nlstate);k++){ | for (k=1; k<=(nlstate);k++){ | 
 | for (l=1; l<=(nlstate+ndeath);l++){ | for (l=1; l<=(nlstate+ndeath);l++){ | 
| i=i++; | i++; | 
 | fprintf(ficresprobcov,"\n%d %d-%d",(int)age,k,l); | fprintf(ficresprobcov,"\n%d %d-%d",(int)age,k,l); | 
 | fprintf(ficresprobcor,"\n%d %d-%d",(int)age,k,l); | fprintf(ficresprobcor,"\n%d %d-%d",(int)age,k,l); | 
 | for (j=1; j<=i;j++){ | for (j=1; j<=i;j++){ | 
 |  | /* printf(" k=%d l=%d i=%d j=%d\n",k,l,i,j);fflush(stdout); */ | 
 | fprintf(ficresprobcov," %11.3e",varpij[i][j][(int)age]); | fprintf(ficresprobcov," %11.3e",varpij[i][j][(int)age]); | 
 | fprintf(ficresprobcor," %11.3e",varpij[i][j][(int) age]/sqrt(varpij[i][i][(int) age])/sqrt(varpij[j][j][(int)age])); | fprintf(ficresprobcor," %11.3e",varpij[i][j][(int) age]/sqrt(varpij[i][i][(int) age])/sqrt(varpij[j][j][(int)age])); | 
 | } | } | 
 | } | } | 
 | }/* end of loop for state */ | }/* end of loop for state */ | 
 | } /* end of loop for age */ | } /* end of loop for age */ | 
|  | free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath)); | 
|  | free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath)); | 
|  | free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); | 
|  | free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar); | 
|  |  | 
 | /* Confidence intervalle of pij  */ | /* Confidence intervalle of pij  */ | 
 | /* | /* | 
 | fprintf(ficgp,"\nunset parametric;unset label"); | fprintf(ficgp,"\nunset parametric;unset label"); | 
| Line 3566  To be simple, these graphs help to under | Line 3807  To be simple, these graphs help to under | 
 | */ | */ | 
 |  |  | 
 | /* Drawing ellipsoids of confidence of two variables p(k1-l1,k2-l2)*/ | /* Drawing ellipsoids of confidence of two variables p(k1-l1,k2-l2)*/ | 
| first1=1; | first1=1;first2=2; | 
 | for (k2=1; k2<=(nlstate);k2++){ | for (k2=1; k2<=(nlstate);k2++){ | 
 | for (l2=1; l2<=(nlstate+ndeath);l2++){ | for (l2=1; l2<=(nlstate+ndeath);l2++){ | 
 | if(l2==k2) continue; | if(l2==k2) continue; | 
| Line 3588  To be simple, these graphs help to under | Line 3829  To be simple, these graphs help to under | 
 | lc1=((v1+v2)+sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; | lc1=((v1+v2)+sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; | 
 | lc2=((v1+v2)-sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; | lc2=((v1+v2)-sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.; | 
 | if ((lc2 <0) || (lc1 <0) ){ | if ((lc2 <0) || (lc1 <0) ){ | 
| printf("Error: One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Continuing by making them positive: WRONG RESULTS.\n", lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor); | if(first2==1){ | 
| fprintf(ficlog,"Error: One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e\n", lc1, lc2, v1, v2, cv12);fflush(ficlog); | first1=0; | 
| lc1=fabs(lc1); | printf("Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS. See log file for details...\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor); | 
| lc2=fabs(lc2); | } | 
|  | fprintf(ficlog,"Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS.\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);fflush(ficlog); | 
|  | /* lc1=fabs(lc1); */ /* If we want to have them positive */ | 
|  | /* lc2=fabs(lc2); */ | 
 | } | } | 
 |  |  | 
 | /* Eigen vectors */ | /* Eigen vectors */ | 
| Line 3613  To be simple, these graphs help to under | Line 3857  To be simple, these graphs help to under | 
 | first=0; | first=0; | 
 | fprintf(ficgp,"\nset parametric;unset label"); | fprintf(ficgp,"\nset parametric;unset label"); | 
 | fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2); | fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2); | 
| fprintf(ficgp,"\nset ter png small\nset size 0.65,0.65"); | fprintf(ficgp,"\nset ter png small size 320, 240"); | 
 | fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\ | fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\ | 
 | :<a href=\"%s%d%1d%1d-%1d%1d.png\">\ | :<a href=\"%s%d%1d%1d-%1d%1d.png\">\ | 
 | %s%d%1d%1d-%1d%1d.png</A>, ",k1,l1,k2,l2,\ | %s%d%1d%1d-%1d%1d.png</A>, ",k1,l1,k2,l2,\ | 
| Line 3644  To be simple, these graphs help to under | Line 3888  To be simple, these graphs help to under | 
 | } /* k12 */ | } /* k12 */ | 
 | } /*l1 */ | } /*l1 */ | 
 | }/* k1 */ | }/* k1 */ | 
| } /* loop covariates */ | /* } /* loop covariates */ | 
 | } | } | 
 | free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage); | free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage); | 
 | free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage); | free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage); | 
| Line 3690  void printinghtml(char fileres[], char t | Line 3934  void printinghtml(char fileres[], char t | 
 |  |  | 
 | fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>"); | fprintf(fichtm," \n<ul><li><b>Graphs</b></li><p>"); | 
 |  |  | 
| m=cptcoveff; | m=pow(2,cptcoveff); | 
 | if (cptcovn < 1) {m=1;ncodemax[1]=1;} | if (cptcovn < 1) {m=1;ncodemax[1]=1;} | 
 |  |  | 
 | jj1=0; | jj1=0; | 
| Line 3704  fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 3948  fprintf(fichtm," \n<ul><li><b>Graphs</b> | 
 | fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">"); | 
 | } | } | 
 | /* Pij */ | /* Pij */ | 
| fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s%d1.png\">%s%d1.png</a><br> \ | fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s%d_1.png\">%s%d_1.png</a><br> \ | 
| <img src=\"%s%d1.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); | <img src=\"%s%d_1.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); | 
 | /* Quasi-incidences */ | /* Quasi-incidences */ | 
 | fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i %d (stepm) months\ | fprintf(fichtm,"<br>- Pij or Conditional probabilities to be observed in state j being in state i %d (stepm) months\ | 
| before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too: <a href=\"%s%d2.png\">%s%d2.png</a><br> \ | before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too: <a href=\"%s%d_2.png\">%s%d_2.png</a><br> \ | 
| <img src=\"%s%d2.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); | <img src=\"%s%d_2.png\">",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); | 
 | /* Period (stable) prevalence in each health state */ | /* Period (stable) prevalence in each health state */ | 
| for(cpt=1; cpt<nlstate;cpt++){ | for(cpt=1; cpt<=nlstate;cpt++){ | 
| fprintf(fichtm,"<br>- Period (stable) prevalence in each health state : <a href=\"%s%d%d.png\">%s%d%d.png</a><br> \ | fprintf(fichtm,"<br>- Convergence from each state (1 to %d) to period (stable) prevalence in state %d <a href=\"%s%d_%d.png\">%s%d_%d.png</a><br> \ | 
| <img src=\"%s%d%d.png\">",subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); | <img src=\"%s%d_%d.png\">",nlstate, cpt, subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); | 
 | } | } | 
 | for(cpt=1; cpt<=nlstate;cpt++) { | for(cpt=1; cpt<=nlstate;cpt++) { | 
| fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies : <a href=\"%s%d%d.png\">%s%d%d.png</a> <br> \ | fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) : <a href=\"%s%d%d.png\">%s%d%d.png</a> <br> \ | 
| <img src=\"%s%d%d.png\">",cpt,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1); | <img src=\"%s%d%d.png\">",cpt,nlstate,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1,subdirf2(optionfilefiname,"exp"),cpt,jj1); | 
 | } | } | 
 | } /* end i1 */ | } /* end i1 */ | 
 | }/* End k1 */ | }/* End k1 */ | 
| Line 3764  fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 4008  fprintf(fichtm," \n<ul><li><b>Graphs</b> | 
 | fflush(fichtm); | fflush(fichtm); | 
 | fprintf(fichtm," <ul><li><b>Graphs</b></li><p>"); | fprintf(fichtm," <ul><li><b>Graphs</b></li><p>"); | 
 |  |  | 
| m=cptcoveff; | m=pow(2,cptcoveff); | 
 | if (cptcovn < 1) {m=1;ncodemax[1]=1;} | if (cptcovn < 1) {m=1;ncodemax[1]=1;} | 
 |  |  | 
 | jj1=0; | jj1=0; | 
| Line 3779  fprintf(fichtm," \n<ul><li><b>Graphs</b> | Line 4023  fprintf(fichtm," \n<ul><li><b>Graphs</b> | 
 | } | } | 
 | for(cpt=1; cpt<=nlstate;cpt++) { | for(cpt=1; cpt<=nlstate;cpt++) { | 
 | fprintf(fichtm,"<br>- Observed (cross-sectional) and period (incidence based) \ | fprintf(fichtm,"<br>- Observed (cross-sectional) and period (incidence based) \ | 
| prevalence (with 95%% confidence interval) in state (%d): %s%d%d.png <br>\ | prevalence (with 95%% confidence interval) in state (%d): %s%d_%d.png <br>\ | 
| <img src=\"%s%d%d.png\">",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1); | <img src=\"%s%d_%d.png\">",cpt,subdirf2(optionfilefiname,"v"),cpt,jj1,subdirf2(optionfilefiname,"v"),cpt,jj1); | 
 | } | } | 
 | fprintf(fichtm,"\n<br>- Total life expectancy by age and \ | fprintf(fichtm,"\n<br>- Total life expectancy by age and \ | 
 | health expectancies in states (1) and (2). If popbased=1 the smooth (due to the model) \ | health expectancies in states (1) and (2). If popbased=1 the smooth (due to the model) \ | 
| Line 3813  void printinggnuplot(char fileres[], cha | Line 4057  void printinggnuplot(char fileres[], cha | 
 | strcpy(dirfileres,optionfilefiname); | strcpy(dirfileres,optionfilefiname); | 
 | strcpy(optfileres,"vpl"); | strcpy(optfileres,"vpl"); | 
 | /* 1eme*/ | /* 1eme*/ | 
 |  | fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'vpl' files\n"); | 
 | for (cpt=1; cpt<= nlstate ; cpt ++) { | for (cpt=1; cpt<= nlstate ; cpt ++) { | 
| for (k1=1; k1<= m ; k1 ++) { | for (k1=1; k1<= m ; k1 ++) { /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */ | 
| fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"v"),cpt,k1); | fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"v"),cpt,k1); | 
| fprintf(ficgp,"\n#set out \"v%s%d%d.png\" \n",optionfilefiname,cpt,k1); | fprintf(ficgp,"\n#set out \"v%s%d_%d.png\" \n",optionfilefiname,cpt,k1); | 
 | fprintf(ficgp,"set xlabel \"Age\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \n\ | 
 | set ylabel \"Probability\" \n\ | set ylabel \"Probability\" \n\ | 
| set ter png small\n\ | set ter png small size 320, 240\n\ | 
| set size 0.65,0.65\n\ |  | 
 | plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"\%%lf",ageminpar,fage,subdirf2(fileres,"vpl"),k1-1,k1-1); | plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"\%%lf",ageminpar,fage,subdirf2(fileres,"vpl"),k1-1,k1-1); | 
 |  |  | 
 | for (i=1; i<= nlstate ; i ++) { | for (i=1; i<= nlstate ; i ++) { | 
 | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | 
 | else        fprintf(ficgp," \%%*lf (\%%*lf)"); | else        fprintf(ficgp," \%%*lf (\%%*lf)"); | 
 | } | } | 
| fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 1,\"%s\" every :::%d::%d u 1:($2+1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); | fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 0,\"%s\" every :::%d::%d u 1:($2+1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); | 
 | for (i=1; i<= nlstate ; i ++) { | for (i=1; i<= nlstate ; i ++) { | 
 | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | 
 | else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); | 
 | } | } | 
| fprintf(ficgp,"\" t\"95\%% CI\" w l lt 2,\"%s\" every :::%d::%d u 1:($2-1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); | fprintf(ficgp,"\" t\"95\%% CI\" w l lt 1,\"%s\" every :::%d::%d u 1:($2-1.96*$3) \"\%%lf",subdirf2(fileres,"vpl"),k1-1,k1-1); | 
 | for (i=1; i<= nlstate ; i ++) { | for (i=1; i<= nlstate ; i ++) { | 
 | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | if (i==cpt) fprintf(ficgp," \%%lf (\%%lf)"); | 
 | else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); | 
 | } | } | 
| fprintf(ficgp,"\" t\"\" w l lt 2,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence \" w l lt 3",subdirf2(fileres,"p"),k1-1,k1-1,2+4*(cpt-1)); | fprintf(ficgp,"\" t\"\" w l lt 1,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence \" w l lt 2",subdirf2(fileres,"p"),k1-1,k1-1,2+4*(cpt-1)); | 
 | } | } | 
 | } | } | 
 | /*2 eme*/ | /*2 eme*/ | 
|  | fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files\n"); | 
 | for (k1=1; k1<= m ; k1 ++) { | for (k1=1; k1<= m ; k1 ++) { | 
 | fprintf(ficgp,"\nset out \"%s%d.png\" \n",subdirf2(optionfilefiname,"e"),k1); | fprintf(ficgp,"\nset out \"%s%d.png\" \n",subdirf2(optionfilefiname,"e"),k1); | 
| fprintf(ficgp,"set ylabel \"Years\" \nset ter png small\nset size 0.65,0.65\nplot [%.f:%.f] ",ageminpar,fage); | fprintf(ficgp,"set ylabel \"Years\" \nset ter png small size 320, 240\nplot [%.f:%.f] ",ageminpar,fage); | 
 |  |  | 
 | for (i=1; i<= nlstate+1 ; i ++) { | for (i=1; i<= nlstate+1 ; i ++) { | 
 | k=2*i; | k=2*i; | 
| Line 3860  plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 4104  plot [%.f:%.f] \"%s\" every :::%d::%d u | 
 | if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); | if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); | 
 | else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); | 
 | } | } | 
| fprintf(ficgp,"\" t\"\" w l lt 1,"); | fprintf(ficgp,"\" t\"\" w l lt 0,"); | 
 | fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2+$3*2) \"\%%lf",subdirf2(fileres,"t"),k1-1,k1-1); | fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2+$3*2) \"\%%lf",subdirf2(fileres,"t"),k1-1,k1-1); | 
 | for (j=1; j<= nlstate+1 ; j ++) { | for (j=1; j<= nlstate+1 ; j ++) { | 
 | if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); | if (j==i) fprintf(ficgp," \%%lf (\%%lf)"); | 
 | else fprintf(ficgp," \%%*lf (\%%*lf)"); | else fprintf(ficgp," \%%*lf (\%%*lf)"); | 
 | } | } | 
| if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 1"); | if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 0"); | 
| else fprintf(ficgp,"\" t\"\" w l lt 1,"); | else fprintf(ficgp,"\" t\"\" w l lt 0,"); | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 3878  plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 4122  plot [%.f:%.f] \"%s\" every :::%d::%d u | 
 | /*       k=2+nlstate*(2*cpt-2); */ | /*       k=2+nlstate*(2*cpt-2); */ | 
 | k=2+(nlstate+1)*(cpt-1); | k=2+(nlstate+1)*(cpt-1); | 
 | fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"exp"),cpt,k1); | fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"exp"),cpt,k1); | 
| fprintf(ficgp,"set ter png small\n\ | fprintf(ficgp,"set ter png small size 320, 240\n\ | 
| set size 0.65,0.65\n\ |  | 
 | plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileres,"e"),k1-1,k1-1,k,cpt); | plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileres,"e"),k1-1,k1-1,k,cpt); | 
 | /*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1); | /*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1); | 
 | for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) "); | for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) "); | 
| Line 3899  plot [%.f:%.f] \"%s\" every :::%d::%d u | Line 4142  plot [%.f:%.f] \"%s\" every :::%d::%d u | 
 | } | } | 
 |  |  | 
 | /* CV preval stable (period) */ | /* CV preval stable (period) */ | 
| for (k1=1; k1<= m ; k1 ++) { | for (k1=1; k1<= m ; k1 ++) { /* For each multivariate if any */ | 
| for (cpt=1; cpt<=nlstate ; cpt ++) { | for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */ | 
 | k=3; | k=3; | 
| fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"p"),cpt,k1); | fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, cov=%d state=%d",k1, cpt); | 
|  | fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"p"),cpt,k1); | 
 | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ | fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\ | 
| set ter png small\nset size 0.65,0.65\n\ | set ter png small size 320, 240\n\ | 
 | unset log y\n\ | unset log y\n\ | 
| plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1/0):($%d/($%d",ageminpar,agemaxpar,subdirf2(fileres,"pij"),k1,k+cpt+1,k+1); | plot [%.f:%.f]  ", ageminpar, agemaxpar); | 
|  | for (i=1; i<= nlstate ; i ++){ | 
| for (i=1; i< nlstate ; i ++) | if(i==1) | 
| fprintf(ficgp,"+$%d",k+i+1); | fprintf(ficgp,"\"%s\"",subdirf2(fileres,"pij")); | 
| fprintf(ficgp,")) t\"prev(%d,%d)\" w l",cpt,cpt+1); | else | 
|  | fprintf(ficgp,", '' "); | 
| l=3+(nlstate+ndeath)*cpt; | l=(nlstate+ndeath)*(i-1)+1; | 
| fprintf(ficgp,",\"%s\" u ($1==%d ? ($3):1/0):($%d/($%d",subdirf2(fileres,"pij"),k1,l+cpt+1,l+1); | fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); | 
| for (i=1; i< nlstate ; i ++) { | for (j=1; j<= (nlstate-1) ; j ++) | 
| l=3+(nlstate+ndeath)*cpt; | fprintf(ficgp,"+$%d",k+l+j); | 
| fprintf(ficgp,"+$%d",l+i+1); | fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt); | 
| } | } /* nlstate */ | 
| fprintf(ficgp,")) t\"prev(%d,%d)\" w l\n",cpt+1,cpt+1); | fprintf(ficgp,"\n"); | 
| } | } /* end cpt state*/ | 
| } | } /* end covariate */ | 
 |  |  | 
 | /* proba elementaires */ | /* proba elementaires */ | 
 | for(i=1,jk=1; i <=nlstate; i++){ | for(i=1,jk=1; i <=nlstate; i++){ | 
| Line 3934  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4178  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | 
 | } | } | 
 | } | } | 
 | } | } | 
|  | /*goto avoid;*/ | 
 | for(ng=1; ng<=2;ng++){ /* Number of graphics: first is probabilities second is incidence per year*/ | for(ng=1; ng<=2;ng++){ /* Number of graphics: first is probabilities second is incidence per year*/ | 
 | for(jk=1; jk <=m; jk++) { | for(jk=1; jk <=m; jk++) { | 
| fprintf(ficgp,"\nset out \"%s%d%d.png\" \n",subdirf2(optionfilefiname,"pe"),jk,ng); | fprintf(ficgp,"\nset out \"%s%d_%d.png\" \n",subdirf2(optionfilefiname,"pe"),jk,ng); | 
 | if (ng==2) | if (ng==2) | 
 | fprintf(ficgp,"\nset ylabel \"Quasi-incidence per year\"\n"); | fprintf(ficgp,"\nset ylabel \"Quasi-incidence per year\"\n"); | 
 | else | else | 
 | fprintf(ficgp,"\nset title \"Probability\"\n"); | fprintf(ficgp,"\nset title \"Probability\"\n"); | 
| fprintf(ficgp,"\nset ter png small\nset size 0.65,0.65\nset log y\nplot  [%.f:%.f] ",ageminpar,agemaxpar); | fprintf(ficgp,"\nset ter png small size 320, 240\nset log y\nplot  [%.f:%.f] ",ageminpar,agemaxpar); | 
 | i=1; | i=1; | 
 | for(k2=1; k2<=nlstate; k2++) { | for(k2=1; k2<=nlstate; k2++) { | 
 | k3=i; | k3=i; | 
| Line 3954  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4198  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | 
 | fprintf(ficgp," exp(p%d+p%d*x",i,i+1); | fprintf(ficgp," exp(p%d+p%d*x",i,i+1); | 
 | ij=1;/* To be checked else nbcode[0][0] wrong */ | ij=1;/* To be checked else nbcode[0][0] wrong */ | 
 | for(j=3; j <=ncovmodel; j++) { | for(j=3; j <=ncovmodel; j++) { | 
| if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { /* Bug valgrind */ | /* if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { /\* Bug valgrind *\/ */ | 
| fprintf(ficgp,"+p%d*%d*x",i+j-1,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]); | /*        /\*fprintf(ficgp,"+p%d*%d*x",i+j-1,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]);*\/ */ | 
| ij++; | /*        ij++; */ | 
| } | /* } */ | 
| else | /* else */ | 
 | fprintf(ficgp,"+p%d*%d",i+j-1,nbcode[Tvar[j-2]][codtab[jk][j-2]]); | fprintf(ficgp,"+p%d*%d",i+j-1,nbcode[Tvar[j-2]][codtab[jk][j-2]]); | 
 | } | } | 
 | fprintf(ficgp,")/(1"); | fprintf(ficgp,")/(1"); | 
| Line 3967  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4211  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | 
 | fprintf(ficgp,"+exp(p%d+p%d*x",k3+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1); | fprintf(ficgp,"+exp(p%d+p%d*x",k3+(k1-1)*ncovmodel,k3+(k1-1)*ncovmodel+1); | 
 | ij=1; | ij=1; | 
 | for(j=3; j <=ncovmodel; j++){ | for(j=3; j <=ncovmodel; j++){ | 
| if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { | /* if(((j-2)==Tage[ij]) &&(ij <=cptcovage)) { */ | 
| fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]); | /*   fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][Tvar[j-2]]]); */ | 
| ij++; | /*   ij++; */ | 
| } | /* } */ | 
| else | /* else */ | 
 | fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][j-2]]); | fprintf(ficgp,"+p%d*%d",k3+(k1-1)*ncovmodel+1+j-2,nbcode[Tvar[j-2]][codtab[jk][j-2]]); | 
 | } | } | 
 | fprintf(ficgp,")"); | fprintf(ficgp,")"); | 
| Line 3984  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | Line 4228  plot [%.f:%.f] \"%s\" u ($1==%d ? ($3):1 | 
 | } /* end k2 */ | } /* end k2 */ | 
 | } /* end jk */ | } /* end jk */ | 
 | } /* end ng */ | } /* end ng */ | 
 |  | avoid: | 
 | fflush(ficgp); | fflush(ficgp); | 
 | }  /* end gnuplot */ | }  /* end gnuplot */ | 
 |  |  | 
| Line 4567  void printinggnuplotmort(char fileres[], | Line 4812  void printinggnuplotmort(char fileres[], | 
 | strcpy(optfileres,"vpl"); | strcpy(optfileres,"vpl"); | 
 | fprintf(ficgp,"set out \"graphmort.png\"\n "); | fprintf(ficgp,"set out \"graphmort.png\"\n "); | 
 | fprintf(ficgp,"set xlabel \"Age\"\n set ylabel \"Force of mortality (per year)\" \n "); | fprintf(ficgp,"set xlabel \"Age\"\n set ylabel \"Force of mortality (per year)\" \n "); | 
| fprintf(ficgp, "set ter png small\n set log y\n"); | fprintf(ficgp, "set ter png small size 320, 240\n set log y\n"); | 
| fprintf(ficgp, "set size 0.65,0.65\n"); | /* fprintf(ficgp, "set size 0.65,0.65\n"); */ | 
 | fprintf(ficgp,"plot [%d:100] %lf*exp(%lf*(x-%d))",agegomp,p[1],p[2],agegomp); | fprintf(ficgp,"plot [%d:100] %lf*exp(%lf*(x-%d))",agegomp,p[1],p[2],agegomp); | 
 |  |  | 
 | } | } | 
| Line 4635  int readdata(char datafile[], int firsto | Line 4880  int readdata(char datafile[], int firsto | 
 | cutv(stra, strb,line,' '); | cutv(stra, strb,line,' '); | 
 | if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ | if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ | 
 | } | } | 
| else  if(iout=sscanf(strb,"%s.") != 0){ | else  if(iout=sscanf(strb,"%s.",dummy) != 0){ | 
 | month=99; | month=99; | 
 | year=9999; | year=9999; | 
 | }else{ | }else{ | 
| Line 4666  int readdata(char datafile[], int firsto | Line 4911  int readdata(char datafile[], int firsto | 
 | cutv(stra, strb,line,' '); | cutv(stra, strb,line,' '); | 
 | if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ | if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ | 
 | } | } | 
| else  if(iout=sscanf(strb,"%s.") != 0){ | else  if(iout=sscanf(strb,"%s.", dummy) != 0){ | 
 | month=99; | month=99; | 
 | year=9999; | year=9999; | 
 | }else{ | }else{ | 
| Line 4759  int readdata(char datafile[], int firsto | Line 5004  int readdata(char datafile[], int firsto | 
 |  |  | 
 |  |  | 
 | } | } | 
|  | void removespace(char *str) { | 
| int decodemodel ( char model[], int lastobs) | char *p1 = str, *p2 = str; | 
|  | do | 
|  | while (*p2 == ' ') | 
|  | p2++; | 
|  | while (*p1++ = *p2++); | 
|  | } | 
|  |  | 
|  | int decodemodel ( char model[], int lastobs) /**< This routine decode the model and returns: | 
|  | * Model  V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age | 
|  | * - cptcovt total number of covariates of the model nbocc(+)+1 = 8 | 
|  | * - cptcovn or number of covariates k of the models excluding age*products =6 | 
|  | * - cptcovage number of covariates with age*products =2 | 
|  | * - cptcovs number of simple covariates | 
|  | * - Tvar[k] is the id of the kth covariate Tvar[1]@12 {1, 2, 3, 8, 10, 11, 8, 3, 7, 8, 5, 6}, thus Tvar[5=V7*V8]=10 | 
|  | *     which is a new column after the 9 (ncovcol) variables. | 
|  | * - if k is a product Vn*Vm covar[k][i] is filled with correct values for each individual | 
|  | * - Tprod[l] gives the kth covariates of the product Vn*Vm l=1 to cptcovprod-cptcovage | 
|  | *    Tprod[1]@2 {5, 6}: position of first product V7*V8 is 5, and second V5*V6 is 6. | 
|  | * - Tvard[k]  p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 . | 
|  | */ | 
 | { | { | 
| int i, j, k; | int i, j, k, ks; | 
 | int i1, j1, k1, k2; | int i1, j1, k1, k2; | 
 | char modelsav[80]; | char modelsav[80]; | 
| char stra[80], strb[80], strc[80], strd[80],stre[80]; | char stra[80], strb[80], strc[80], strd[80],stre[80]; | 
 |  |  | 
 |  | /*removespace(model);*/ | 
 | if (strlen(model) >1){ /* If there is at least 1 covariate */ | if (strlen(model) >1){ /* If there is at least 1 covariate */ | 
| j=0, j1=0, k1=1, k2=1; | j=0, j1=0, k1=0, k2=-1, ks=0, cptcovn=0; | 
| j=nbocc(model,'+'); /* j=Number of '+' */ | j=nbocc(model,'+'); /**< j=Number of '+' */ | 
| j1=nbocc(model,'*'); /* j1=Number of '*' */ | j1=nbocc(model,'*'); /**< j1=Number of '*' */ | 
| cptcovn=j+1; /* Number of covariates V1+V2*age+V3 =>(2 plus signs) + 1=3 | cptcovs=j+1-j1; /**<  Number of simple covariates V1+V2*age+V3 +V3*V4=> V1 + V3 =2  */ | 
| but the covariates which are product must be computed and stored. */ | cptcovt= j+1; /* Number of total covariates in the model V1 + V2*age+ V3 + V3*V4=> 4*/ | 
| cptcovprod=j1; /*Number of products  V1*V2 +v3*age = 2 */ | /* including age products which are counted in cptcovage. | 
|  | /* but the covariates which are products must be treated separately: ncovn=4- 2=2 (V1+V3). */ | 
|  | cptcovprod=j1; /**< Number of products  V1*V2 +v3*age = 2 */ | 
|  | cptcovprodnoage=0; /**< Number of covariate products without age: V3*V4 =1  */ | 
 | strcpy(modelsav,model); | strcpy(modelsav,model); | 
 | if (strstr(model,"AGE") !=0){ | if (strstr(model,"AGE") !=0){ | 
 | printf("Error. AGE must be in lower case 'age' model=%s ",model); | printf("Error. AGE must be in lower case 'age' model=%s ",model); | 
| Line 4787  int decodemodel ( char model[], int last | Line 5054  int decodemodel ( char model[], int last | 
 | return 1; | return 1; | 
 | } | } | 
 |  |  | 
 |  | /*   Design | 
 |  | *  V1   V2   V3   V4  V5  V6  V7  V8  V9 Weight | 
 |  | *  <          ncovcol=8                > | 
 |  | * Model V2 + V1 + V3*age + V3 + V5*V6 + V7*V8 + V8*age + V8 | 
 |  | *   k=  1    2      3       4     5       6      7        8 | 
 |  | *  cptcovn number of covariates (not including constant and age ) = # of + plus 1 = 7+1=8 | 
 |  | *  covar[k,i], value of kth covariate if not including age for individual i: | 
 |  | *       covar[1][i]= (V2), covar[4][i]=(V3), covar[8][i]=(V8) | 
 |  | *  Tvar[k] # of the kth covariate:  Tvar[1]=2  Tvar[4]=3 Tvar[8]=8 | 
 |  | *       if multiplied by age: V3*age Tvar[3=V3*age]=3 (V3) Tvar[7]=8 and | 
 |  | *  Tage[++cptcovage]=k | 
 |  | *       if products, new covar are created after ncovcol with k1 | 
 |  | *  Tvar[k]=ncovcol+k1; # of the kth covariate product:  Tvar[5]=ncovcol+1=10  Tvar[6]=ncovcol+1=11 | 
 |  | *  Tprod[k1]=k; Tprod[1]=5 Tprod[2]= 6; gives the position of the k1th product | 
 |  | *  Tvard[k1][1]=m Tvard[k1][2]=m; Tvard[1][1]=5 (V5) Tvard[1][2]=6 Tvard[2][1]=7 (V7) Tvard[2][2]=8 | 
 |  | *  Tvar[cptcovn+k2]=Tvard[k1][1];Tvar[cptcovn+k2+1]=Tvard[k1][2]; | 
 |  | *  Tvar[8+1]=5;Tvar[8+2]=6;Tvar[8+3]=7;Tvar[8+4]=8 inverted | 
 |  | *  V1   V2   V3   V4  V5  V6  V7  V8  V9  V10  V11 | 
 |  | *  <          ncovcol=8                > | 
 |  | *       Model V2 + V1 + V3*age + V3 + V5*V6 + V7*V8 + V8*age + V8    d1   d1   d2  d2 | 
 |  | *          k=  1    2      3       4     5       6      7        8    9   10   11  12 | 
 |  | *     Tvar[k]= 2    1      3       3    10      11      8        8    5    6    7   8 | 
 |  | * p Tvar[1]@12={2,   1,     3,      3,   11,     10,     8,       8,   7,   8,   5,  6} | 
 |  | * p Tprod[1]@2={                         6, 5} | 
 |  | *p Tvard[1][1]@4= {7, 8, 5, 6} | 
 |  | * covar[k][i]= V2   V1      ?      V3    V5*V6?   V7*V8?  ?       V8 | 
 |  | *  cov[Tage[kk]+2]=covar[Tvar[Tage[kk]]][i]*cov[2]; | 
 |  | *How to reorganize? | 
 |  | * Model V1 + V2 + V3 + V8 + V5*V6 + V7*V8 + V3*age + V8*age | 
 |  | * Tvars {2,   1,     3,      3,   11,     10,     8,       8,   7,   8,   5,  6} | 
 |  | *       {2,   1,     4,      8,    5,      6,     3,       7} | 
 |  | * Struct [] | 
 |  | */ | 
 |  |  | 
 | /* This loop fills the array Tvar from the string 'model'.*/ | /* 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 */ | /* j is the number of + signs in the model V1+V2+V3 j=2 i=3 to 1 */ | 
 | /*   modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4  */ | /*   modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4  */ | 
| Line 4799  int decodemodel ( char model[], int last | Line 5100  int decodemodel ( char model[], int last | 
 | /*  cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; */ | /*  cov[2+k]=nbcode[Tvar[k]][codtab[ij][Tvar[k]]]; */ | 
 | /*  } */ | /*  } */ | 
 | /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */ | 
| for(k=cptcovn; k>=1;k--){ | /* | 
| cutv(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' | * Treating invertedly V2+V1+V3*age+V2*V4 is as if written V2*V4 +V3*age + V1 + V2 */ | 
| modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 | for(k=cptcovt; k>=1;k--) /**< Number of covariates */ | 
| */ | Tvar[k]=0; | 
|  | cptcovage=0; | 
|  | for(k=1; k<=cptcovt;k++){ /* Loop on total covariates of the model */ | 
|  | cutl(stra,strb,modelsav,'+'); /* keeps in strb after the first '+' | 
|  | modelsav==V2+V1+V4+V3*age strb=V3*age stra=V2+V1+V4 */ | 
 | if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */ | if (nbocc(modelsav,'+')==0) strcpy(strb,modelsav); /* and analyzes it */ | 
 | /*      printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/ | /*      printf("i=%d a=%s b=%s sav=%s\n",i, stra,strb,modelsav);*/ | 
 | /*scanf("%d",i);*/ | /*scanf("%d",i);*/ | 
| if (strchr(strb,'*')) {  /* Model includes a product V2+V1+V4+V3*age strb=V3*age */ | if (strchr(strb,'*')) {  /**< Model includes a product V2+V1+V4+V3*age strb=V3*age */ | 
| cutv(strd,strc,strb,'*'); /* strd*strc  Vm*Vn: strb=V3*age strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */ | cutl(strc,strd,strb,'*'); /**< strd*strc  Vm*Vn: strb=V3*age(input) strc=age strd=V3 ; V3*V2 strc=V2, strd=V3 */ | 
| if (strcmp(strc,"age")==0) { /* Vn*age */ | if (strcmp(strc,"age")==0) { /**< Model includes age: Vn*age */ | 
|  | /* covar is not filled and then is empty */ | 
 | cptcovprod--; | cptcovprod--; | 
| cutv(strb,stre,strd,'V'); /* stre="V3" */ | cutl(stre,strb,strd,'V'); /* strd=V3(input): stre="3" */ | 
| Tvar[k]=atoi(stre);  /* V2+V1+V4+V3*age Tvar[4]=2 ; V1+V2*age Tvar[2]=2 */ | Tvar[k]=atoi(stre);  /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2 */ | 
 | cptcovage++; /* Sums the number of covariates which include age as a product */ | cptcovage++; /* Sums the number of covariates which include age as a product */ | 
 | Tage[cptcovage]=k;  /* Tage[1] = 4 */ | Tage[cptcovage]=k;  /* Tage[1] = 4 */ | 
 | /*printf("stre=%s ", stre);*/ | /*printf("stre=%s ", stre);*/ | 
 | } else if (strcmp(strd,"age")==0) { /* or age*Vn */ | } else if (strcmp(strd,"age")==0) { /* or age*Vn */ | 
 | cptcovprod--; | cptcovprod--; | 
| cutv(strb,stre,strc,'V'); | cutl(stre,strb,strc,'V'); | 
 | Tvar[k]=atoi(stre); | Tvar[k]=atoi(stre); | 
 | cptcovage++; | cptcovage++; | 
 | Tage[cptcovage]=k; | Tage[cptcovage]=k; | 
 | } else {  /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2  strb=V3*V2*/ | } else {  /* Age is not in the model product V2+V1+V1*V4+V3*age+V3*V2  strb=V3*V2*/ | 
 | /* loops on k1=1 (V3*V2) and k1=2 V4*V3 */ | /* loops on k1=1 (V3*V2) and k1=2 V4*V3 */ | 
| cutv(strb,stre,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ | cptcovn++; | 
| Tvar[k]=ncovcol+k1;  /* For model-covariate k tells which data-covariate to use but | cptcovprodnoage++;k1++; | 
|  | cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/ | 
|  | Tvar[k]=ncovcol+k1; /* For model-covariate k tells which data-covariate to use but | 
 | because this model-covariate is a construction we invent a new column | because this model-covariate is a construction we invent a new column | 
 | ncovcol + k1 | ncovcol + k1 | 
 | If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 | If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2 | 
 | Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */ | Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */ | 
| cutv(strb,strc,strd,'V'); /* strd was Vm, strc is m */ | cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */ | 
 | Tprod[k1]=k;  /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2  */ | Tprod[k1]=k;  /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2  */ | 
| Tvard[k1][1]=atoi(strc); /* m 1 for V1*/ | Tvard[k1][1] =atoi(strc); /* m 1 for V1*/ | 
| Tvard[k1][2]=atoi(stre); /* n 4 for V4*/ | Tvard[k1][2] =atoi(stre); /* n 4 for V4*/ | 
| Tvar[cptcovn+k2]=Tvard[k1][1]; /* Tvar[(cptcovn=4+k2=1)=5]= 1 (V1) */ | k2=k2+2; | 
| Tvar[cptcovn+k2+1]=Tvard[k1][2];  /* Tvar[(cptcovn=4+(k2=1)+1)=6]= 4 (V4) */ | Tvar[cptcovt+k2]=Tvard[k1][1]; /* Tvar[(cptcovt=4+k2=1)=5]= 1 (V1) */ | 
|  | Tvar[cptcovt+k2+1]=Tvard[k1][2];  /* Tvar[(cptcovt=4+(k2=1)+1)=6]= 4 (V4) */ | 
 | for (i=1; i<=lastobs;i++){ | for (i=1; i<=lastobs;i++){ | 
 | /* Computes the new covariate which is a product of | /* Computes the new covariate which is a product of | 
| covar[n][i]* covar[m][i] and stores it at ncovol+k1 */ | covar[n][i]* covar[m][i] and stores it at ncovol+k1 May not be defined */ | 
 | covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i]; | covar[ncovcol+k1][i]=covar[atoi(stre)][i]*covar[atoi(strc)][i]; | 
 | } | } | 
 | k1++; |  | 
 | k2=k2+2; |  | 
 | } /* End age is not in the model */ | } /* End age is not in the model */ | 
 | } /* End if model includes a product */ | } /* End if model includes a product */ | 
 | else { /* no more sum */ | else { /* no more sum */ | 
 | /*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/ | /*printf("d=%s c=%s b=%s\n", strd,strc,strb);*/ | 
 | /*  scanf("%d",i);*/ | /*  scanf("%d",i);*/ | 
| cutv(strd,strc,strb,'V'); | cutl(strd,strc,strb,'V'); | 
| Tvar[k]=atoi(strc); | ks++; /**< Number of simple covariates */ | 
|  | cptcovn++; | 
|  | Tvar[k]=atoi(strd); | 
 | } | } | 
 | strcpy(modelsav,stra);  /* modelsav=V2+V1+V4 stra=V2+V1+V4 */ | strcpy(modelsav,stra);  /* modelsav=V2+V1+V4 stra=V2+V1+V4 */ | 
 | /*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav); | /*printf("a=%s b=%s sav=%s\n", stra,strb,modelsav); | 
| Line 4926  calandcheckages(int imx, int maxwav, dou | Line 5235  calandcheckages(int imx, int maxwav, dou | 
 | } | } | 
 | else if(agev[m][i] >*agemax){ | else if(agev[m][i] >*agemax){ | 
 | *agemax=agev[m][i]; | *agemax=agev[m][i]; | 
| printf(" Max anint[%d][%d]=%.0f annais[%d]=%.0f, agemax=%.2f\n",m,i,anint[m][i], i,annais[i], *agemax); | /* printf(" Max anint[%d][%d]=%.0f annais[%d]=%.0f, agemax=%.2f\n",m,i,anint[m][i], i,annais[i], *agemax);*/ | 
 | } | } | 
 | /*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;*/ | 
| Line 5038  int main(int argc, char *argv[]) | Line 5347  int main(int argc, char *argv[]) | 
 | double kk1, kk2; | double kk1, kk2; | 
 | double dateprev1, dateprev2,jproj1=1,mproj1=1,anproj1=2000,jproj2=1,mproj2=1,anproj2=2000; | double dateprev1, dateprev2,jproj1=1,mproj1=1,anproj1=2000,jproj2=1,mproj2=1,anproj2=2000; | 
 | double **ximort; | double **ximort; | 
| char *alph[]={"a","a","b","c","d","e"}, str[4]; | char *alph[]={"a","a","b","c","d","e"}, str[4]="1234"; | 
 | int *dcwave; | int *dcwave; | 
 |  |  | 
 | char z[1]="c", occ; | char z[1]="c", occ; | 
| Line 5055  int main(int argc, char *argv[]) | Line 5364  int main(int argc, char *argv[]) | 
 | /*   setlocale (LC_MESSAGES, ""); */ | /*   setlocale (LC_MESSAGES, ""); */ | 
 |  |  | 
 | /*   gettimeofday(&start_time, (struct timezone*)0); */ /* at first time */ | /*   gettimeofday(&start_time, (struct timezone*)0); */ /* at first time */ | 
| (void) gettimeofday(&start_time,&tzp); | rstart_time = time(NULL); | 
|  | /*  (void) gettimeofday(&start_time,&tzp);*/ | 
|  | start_time = *localtime(&rstart_time); | 
 | curr_time=start_time; | curr_time=start_time; | 
| tm = *localtime(&start_time.tv_sec); | /*tml = *localtime(&start_time.tm_sec);*/ | 
| tmg = *gmtime(&start_time.tv_sec); | /* strcpy(strstart,asctime(&tml)); */ | 
| strcpy(strstart,asctime(&tm)); | strcpy(strstart,asctime(&start_time)); | 
 |  |  | 
 | /*  printf("Localtime (at start)=%s",strstart); */ | /*  printf("Localtime (at start)=%s",strstart); */ | 
| /*  tp.tv_sec = tp.tv_sec +86400; */ | /*  tp.tm_sec = tp.tm_sec +86400; */ | 
| /*  tm = *localtime(&start_time.tv_sec); */ | /*  tm = *localtime(&start_time.tm_sec); */ | 
 | /*   tmg.tm_year=tmg.tm_year +dsign*dyear; */ | /*   tmg.tm_year=tmg.tm_year +dsign*dyear; */ | 
 | /*   tmg.tm_mon=tmg.tm_mon +dsign*dmonth; */ | /*   tmg.tm_mon=tmg.tm_mon +dsign*dmonth; */ | 
 | /*   tmg.tm_hour=tmg.tm_hour + 1; */ | /*   tmg.tm_hour=tmg.tm_hour + 1; */ | 
| /*   tp.tv_sec = mktime(&tmg); */ | /*   tp.tm_sec = mktime(&tmg); */ | 
 | /*   strt=asctime(&tmg); */ | /*   strt=asctime(&tmg); */ | 
 | /*   printf("Time(after) =%s",strstart);  */ | /*   printf("Time(after) =%s",strstart);  */ | 
 | /*  (void) time (&time_value); | /*  (void) time (&time_value); | 
| Line 5088  int main(int argc, char *argv[]) | Line 5399  int main(int argc, char *argv[]) | 
 | i=strlen(pathr); | i=strlen(pathr); | 
 | if(pathr[i-1]=='\n') | if(pathr[i-1]=='\n') | 
 | pathr[i-1]='\0'; | pathr[i-1]='\0'; | 
 |  | i=strlen(pathr); | 
 |  | if(pathr[i-1]==' ') /* This may happen when dragging on oS/X! */ | 
 |  | pathr[i-1]='\0'; | 
 | for (tok = pathr; tok != NULL; ){ | for (tok = pathr; tok != NULL; ){ | 
 | printf("Pathr |%s|\n",pathr); | printf("Pathr |%s|\n",pathr); | 
 | while ((val = strsep(&tok, "\"" )) != NULL && *val == '\0'); | while ((val = strsep(&tok, "\"" )) != NULL && *val == '\0'); | 
| Line 5143  int main(int argc, char *argv[]) | Line 5457  int main(int argc, char *argv[]) | 
 | path=%s \n\ | path=%s \n\ | 
 | optionfile=%s\n\ | optionfile=%s\n\ | 
 | optionfilext=%s\n\ | optionfilext=%s\n\ | 
| optionfilefiname=%s\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname); | optionfilefiname='%s'\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname); | 
 |  |  | 
 | printf("Local time (at start):%s",strstart); | printf("Local time (at start):%s",strstart); | 
 | fprintf(ficlog,"Local time (at start): %s",strstart); | fprintf(ficlog,"Local time (at start): %s",strstart); | 
 | fflush(ficlog); | fflush(ficlog); | 
 | /*   (void) gettimeofday(&curr_time,&tzp); */ | /*   (void) gettimeofday(&curr_time,&tzp); */ | 
| /*   printf("Elapsed time %d\n", asc_diff_time(curr_time.tv_sec-start_time.tv_sec,tmpout)); */ | /*   printf("Elapsed time %d\n", asc_diff_time(curr_time.tm_sec-start_time.tm_sec,tmpout)); */ | 
 |  |  | 
 | /* */ | /* */ | 
 | strcpy(fileres,"r"); | strcpy(fileres,"r"); | 
| Line 5159  int main(int argc, char *argv[]) | Line 5473  int main(int argc, char *argv[]) | 
 | /*---------arguments file --------*/ | /*---------arguments file --------*/ | 
 |  |  | 
 | if((ficpar=fopen(optionfile,"r"))==NULL)    { | if((ficpar=fopen(optionfile,"r"))==NULL)    { | 
| printf("Problem with optionfile %s\n",optionfile); | printf("Problem with optionfile '%s' with errno='%s'\n",optionfile,strerror(errno)); | 
| fprintf(ficlog,"Problem with optionfile %s\n",optionfile); | fprintf(ficlog,"Problem with optionfile '%s' with errno='%s'\n",optionfile,strerror(errno)); | 
 | fflush(ficlog); | fflush(ficlog); | 
| goto end; | /* goto end; */ | 
|  | exit(70); | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 5206  int main(int argc, char *argv[]) | Line 5521  int main(int argc, char *argv[]) | 
 | ungetc(c,ficpar); | ungetc(c,ficpar); | 
 |  |  | 
 |  |  | 
| covar=matrix(0,NCOVMAX,1,n); | covar=matrix(0,NCOVMAX,1,n);  /**< used in readdata */ | 
 | cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/ | cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/ | 
 | /* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5 | /* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5 | 
 | v1+v2*age+v2*v3 makes cptcovn = 3 | v1+v2*age+v2*v3 makes cptcovn = 3 | 
 | */ | */ | 
 | if (strlen(model)>1) | if (strlen(model)>1) | 
| cptcovn=nbocc(model,'+')+1; | ncovmodel=2+nbocc(model,'+')+1; /*Number of variables including intercept and age = cptcovn + intercept + age : v1+v2+v3+v2*v4+v5*age makes 5+2=7*/ | 
| /* ncovprod */ | else | 
| ncovmodel=2+cptcovn; /*Number of variables including intercept and age = cptcovn + intercept + age : v1+v2+v3+v2*v4+v5*age makes 5+2=7*/ | ncovmodel=2; | 
 | nvar=ncovmodel-1; /* Suppressing age as a basic covariate */ | nvar=ncovmodel-1; /* Suppressing age as a basic covariate */ | 
 | nforce= (nlstate+ndeath-1)*nlstate; /* Number of forces ij from state i to j */ | nforce= (nlstate+ndeath-1)*nlstate; /* Number of forces ij from state i to j */ | 
 | npar= nforce*ncovmodel; /* Number of parameters like aij*/ | npar= nforce*ncovmodel; /* Number of parameters like aij*/ | 
| Line 5246  int main(int argc, char *argv[]) | Line 5561  int main(int argc, char *argv[]) | 
 | matcov=matrix(1,npar,1,npar); | matcov=matrix(1,npar,1,npar); | 
 | } | } | 
 | else{ | else{ | 
| /* Read guess parameters */ | /* Read guessed parameters */ | 
 | /* Reads comments: lines beginning with '#' */ | /* Reads comments: lines beginning with '#' */ | 
 | while((c=getc(ficpar))=='#' && c!= EOF){ | while((c=getc(ficpar))=='#' && c!= EOF){ | 
 | ungetc(c,ficpar); | ungetc(c,ficpar); | 
| Line 5295  run imach with mle=-1 to get a correct t | Line 5610  run imach with mle=-1 to get a correct t | 
 | } | } | 
 | fflush(ficlog); | fflush(ficlog); | 
 |  |  | 
 |  | /* Reads scales values */ | 
 | p=param[1][1]; | p=param[1][1]; | 
 |  |  | 
 | /* Reads comments: lines beginning with '#' */ | /* Reads comments: lines beginning with '#' */ | 
| Line 5333  run imach with mle=-1 to get a correct t | Line 5649  run imach with mle=-1 to get a correct t | 
 | } | } | 
 | fflush(ficlog); | fflush(ficlog); | 
 |  |  | 
 |  | /* Reads covariance matrix */ | 
 | delti=delti3[1][1]; | delti=delti3[1][1]; | 
 |  |  | 
 |  |  | 
| Line 5354  run imach with mle=-1 to get a correct t | Line 5671  run imach with mle=-1 to get a correct t | 
 | for(j=1; j <=npar; j++) matcov[i][j]=0.; | for(j=1; j <=npar; j++) matcov[i][j]=0.; | 
 |  |  | 
 | for(i=1; i <=npar; i++){ | for(i=1; i <=npar; i++){ | 
| fscanf(ficpar,"%s",&str); | fscanf(ficpar,"%s",str); | 
 | if(mle==1) | if(mle==1) | 
 | printf("%s",str); | printf("%s",str); | 
 | fprintf(ficlog,"%s",str); | fprintf(ficlog,"%s",str); | 
| Line 5411  run imach with mle=-1 to get a correct t | Line 5728  run imach with mle=-1 to get a correct t | 
 | anint=matrix(1,maxwav,1,n); | anint=matrix(1,maxwav,1,n); | 
 | s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */ | s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */ | 
 | tab=ivector(1,NCOVMAX); | tab=ivector(1,NCOVMAX); | 
| ncodemax=ivector(1,8); /* hard coded ? */ | ncodemax=ivector(1,NCOVMAX); /* Number of code per covariate; if O and 1 only, 2**ncov; V1+V2+V3+V4=>16 */ | 
 |  |  | 
 | /* Reads data from file datafile */ | /* Reads data from file datafile */ | 
 | if (readdata(datafile, firstobs, lastobs, &imx)==1) | if (readdata(datafile, firstobs, lastobs, &imx)==1) | 
| Line 5434  run imach with mle=-1 to get a correct t | Line 5751  run imach with mle=-1 to get a correct t | 
 | ncovcol + k1 | ncovcol + k1 | 
 | If already ncovcol=4 and model=V2+V1+V1*V4+age*V3 | If already ncovcol=4 and model=V2+V1+V1*V4+age*V3 | 
 | Tvar[3=V1*V4]=4+1 etc */ | Tvar[3=V1*V4]=4+1 etc */ | 
| Tprod=ivector(1,15); /* Gives the position of a product */ | Tprod=ivector(1,NCOVMAX); /* Gives the position of a product */ | 
 | /* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3 | /* 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) | if  V2+V1+V1*V4+age*V3+V3*V2   TProd[k1=2]=5 (V3*V2) | 
 | */ | */ | 
| Tvaraff=ivector(1,15); | Tvaraff=ivector(1,NCOVMAX); /* Unclear */ | 
| 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 | Tvard=imatrix(1,NCOVMAX,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. | * 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) */ | * 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 | Tage=ivector(1,NCOVMAX); /* Gives the covariate id of covariates associated with age: V2 + V1 + age*V4 + V3*age | 
 | 4 covariates (3 plus signs) | 4 covariates (3 plus signs) | 
 | Tage[1=V3*age]= 4; Tage[2=age*V4] = 3 | Tage[1=V3*age]= 4; Tage[2=age*V4] = 3 | 
 | */ | */ | 
| Line 5474  run imach with mle=-1 to get a correct t | Line 5791  run imach with mle=-1 to get a correct t | 
 | free_matrix(anint,1,maxwav,1,n);*/ | free_matrix(anint,1,maxwav,1,n);*/ | 
 | free_vector(moisdc,1,n); | free_vector(moisdc,1,n); | 
 | free_vector(andc,1,n); | free_vector(andc,1,n); | 
|  | /* */ | 
|  |  | 
 | 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); | 
| Line 5483  run imach with mle=-1 to get a correct t | Line 5800  run imach with mle=-1 to get a correct t | 
 |  |  | 
 | /* Concatenates waves */ | /* Concatenates waves */ | 
 | 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); | 
|  | /* */ | 
|  |  | 
 | /* Routine tricode is to calculate cptcoveff (real number of unique covariates) and to associate covariable number and modality */ | /* Routine tricode is to calculate cptcoveff (real number of unique covariates) and to associate covariable number and modality */ | 
 |  |  | 
 | nbcode=imatrix(0,NCOVMAX,0,NCOVMAX); | nbcode=imatrix(0,NCOVMAX,0,NCOVMAX); | 
 | ncodemax[1]=1; | ncodemax[1]=1; | 
| if (cptcovn > 0) tricode(Tvar,nbcode,imx); | Ndum =ivector(-1,NCOVMAX); | 
|  | if (ncovmodel > 2) | 
| codtab=imatrix(1,100,1,10); /* Cross tabulation to get the order of | tricode(Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */ | 
| the estimations*/ |  | 
|  | codtab=imatrix(1,100,1,10); /* codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) */ | 
|  | /*printf(" codtab[1,1],codtab[100,10]=%d,%d\n", codtab[1][1],codtab[100][10]);*/ | 
 | h=0; | h=0; | 
 |  |  | 
 |  |  | 
 |  | /*if (cptcovn > 0) */ | 
 |  |  | 
 |  |  | 
 | m=pow(2,cptcoveff); | m=pow(2,cptcoveff); | 
 |  |  | 
 | for(k=1;k<=cptcoveff; k++){ /* scans any effective covariate */ | for(k=1;k<=cptcoveff; k++){ /* scans any effective covariate */ | 
| for(i=1; i <=(m/pow(2,k));i++){ /* i=1 to 8/1=8; i=1 to 8/2=4; i=1 to 8/8=1 */ | for(i=1; i <=pow(2,cptcoveff-k);i++){ /* i=1 to 8/1=8; i=1 to 8/2=4; i=1 to 8/8=1 */ | 
| for(j=1; j <= ncodemax[k]; j++){ /* For each modality of this covariate */ | for(j=1; j <= ncodemax[k]; j++){ /* For each modality of this covariate ncodemax=2*/ | 
| 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 */ | for(cpt=1; cpt <=pow(2,k-1); cpt++){  /* cpt=1 to 8/2**(3+1-1 or 3+1-3) =1 or 4 */ | 
 | h++; | h++; | 
 | if (h>m) | if (h>m) | 
 | h=1; | h=1; | 
 |  | /**< codtab(h,k)  k   = codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) + 1 | 
 |  | *     h     1     2     3     4 | 
 |  | *______________________________ | 
 |  | *     1 i=1 1 i=1 1 i=1 1 i=1 1 | 
 |  | *     2     2     1     1     1 | 
 |  | *     3 i=2 1     2     1     1 | 
 |  | *     4     2     2     1     1 | 
 |  | *     5 i=3 1 i=2 1     2     1 | 
 |  | *     6     2     1     2     1 | 
 |  | *     7 i=4 1     2     2     1 | 
 |  | *     8     2     2     2     1 | 
 |  | *     9 i=5 1 i=3 1 i=2 1     1 | 
 |  | *    10     2     1     1     1 | 
 |  | *    11 i=6 1     2     1     1 | 
 |  | *    12     2     2     1     1 | 
 |  | *    13 i=7 1 i=4 1     2     1 | 
 |  | *    14     2     1     2     1 | 
 |  | *    15 i=8 1     2     2     1 | 
 |  | *    16     2     2     2     1 | 
 |  | */ | 
 | codtab[h][k]=j; | codtab[h][k]=j; | 
| codtab[h][Tvar[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]]); | 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]]); | 
 | } | } | 
 | } | } | 
| Line 5518  run imach with mle=-1 to get a correct t | Line 5863  run imach with mle=-1 to get a correct t | 
 | printf("\n"); | printf("\n"); | 
 | } | } | 
 | scanf("%d",i);*/ | scanf("%d",i);*/ | 
 |  |  | 
 |  | free_ivector(Ndum,-1,NCOVMAX); | 
 |  |  | 
 |  |  | 
 |  |  | 
 | /*------------ gnuplot -------------*/ | /*------------ gnuplot -------------*/ | 
 | strcpy(optionfilegnuplot,optionfilefiname); | strcpy(optionfilegnuplot,optionfilefiname); | 
| Line 5641  Interval (in months) between two waves: | Line 5990  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]);*/ | 
 |  |  | 
 |  |  | 
| Line 6035  Interval (in months) between two waves: | Line 6384  Interval (in months) between two waves: | 
 |  |  | 
 |  |  | 
 |  |  | 
| /*  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); */ | 
| /*,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/ | /* ,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2); */ | 
 |  |  | 
 | replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */ | replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */ | 
 | printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p); | printinggnuplot(fileres, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p); | 
| Line 6061  Interval (in months) between two waves: | Line 6410  Interval (in months) between two waves: | 
 |  |  | 
 |  |  | 
 | /*--------------- Prevalence limit  (period or stable prevalence) --------------*/ | /*--------------- Prevalence limit  (period or stable prevalence) --------------*/ | 
|  | #include "prevlim.h"  /* Use ficrespl, ficlog */ | 
| strcpy(filerespl,"pl"); |  | 
| strcat(filerespl,fileres); |  | 
| if((ficrespl=fopen(filerespl,"w"))==NULL) { |  | 
| printf("Problem with period (stable) prevalence resultfile: %s\n", filerespl);goto end; |  | 
| fprintf(ficlog,"Problem with period (stable) prevalence resultfile: %s\n", filerespl);goto end; |  | 
| } |  | 
| printf("Computing period (stable) prevalence: result on file '%s' \n", filerespl); |  | 
| fprintf(ficlog,"Computing period (stable) prevalence: result on file '%s' \n", filerespl); |  | 
| pstamp(ficrespl); |  | 
| fprintf(ficrespl,"# Period (stable) prevalence \n"); |  | 
| fprintf(ficrespl,"#Age "); |  | 
| for(i=1; i<=nlstate;i++) fprintf(ficrespl,"%d-%d ",i,i); |  | 
| fprintf(ficrespl,"\n"); |  | 
|  |  | 
| prlim=matrix(1,nlstate,1,nlstate); |  | 
|  |  | 
| agebase=ageminpar; |  | 
| agelim=agemaxpar; |  | 
| ftolpl=1.e-10; |  | 
| i1=cptcoveff; |  | 
| if (cptcovn < 1){i1=1;} |  | 
|  |  | 
| for(cptcov=1,k=0;cptcov<=i1;cptcov++){ |  | 
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ |  | 
| k=k+1; |  | 
| /* to clean */ |  | 
| printf("cptcov=%d cptcod=%d codtab=%d nbcode=%d\n",cptcov, cptcod,codtab[cptcod][cptcov],nbcode); |  | 
| fprintf(ficrespl,"\n#******"); |  | 
| printf("\n#******"); |  | 
| fprintf(ficlog,"\n#******"); |  | 
| for(j=1;j<=cptcoveff;j++) { |  | 
| fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |  | 
| printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |  | 
| fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |  | 
| } |  | 
| fprintf(ficrespl,"******\n"); |  | 
| printf("******\n"); |  | 
| fprintf(ficlog,"******\n"); |  | 
|  |  | 
| for (age=agebase; age<=agelim; age++){ |  | 
| prevalim(prlim, nlstate, p, age, oldm, savm,ftolpl,k); |  | 
| fprintf(ficrespl,"%.0f ",age ); |  | 
| for(j=1;j<=cptcoveff;j++) |  | 
| fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |  | 
| for(i=1; i<=nlstate;i++) |  | 
| fprintf(ficrespl," %.5f", prlim[i][i]); |  | 
| fprintf(ficrespl,"\n"); |  | 
| } |  | 
| } |  | 
| } |  | 
 | fclose(ficrespl); | fclose(ficrespl); | 
 |  |  | 
| /*------------- h Pij x at various ages ------------*/ | #ifdef FREEEXIT2 | 
|  | #include "freeexit2.h" | 
| strcpy(filerespij,"pij");  strcat(filerespij,fileres); | #endif | 
| if((ficrespij=fopen(filerespij,"w"))==NULL) { |  | 
| printf("Problem with Pij resultfile: %s\n", filerespij);goto end; |  | 
| fprintf(ficlog,"Problem with Pij resultfile: %s\n", filerespij);goto end; |  | 
| } |  | 
| printf("Computing pij: result on file '%s' \n", filerespij); |  | 
| fprintf(ficlog,"Computing pij: result on file '%s' \n", filerespij); |  | 
|  |  | 
| stepsize=(int) (stepm+YEARM-1)/YEARM; |  | 
| /*if (stepm<=24) stepsize=2;*/ |  | 
|  |  | 
| agelim=AGESUP; |  | 
| hstepm=stepsize*YEARM; /* Every year of age */ |  | 
| hstepm=hstepm/stepm; /* Typically 2 years, = 2/6 months = 4 */ |  | 
|  |  | 
| /* hstepm=1;   aff par mois*/ |  | 
| pstamp(ficrespij); |  | 
| 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++){ |  | 
| k=k+1; |  | 
| fprintf(ficrespij,"\n#****** "); |  | 
| for(j=1;j<=cptcoveff;j++) |  | 
| fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); |  | 
| fprintf(ficrespij,"******\n"); |  | 
|  |  | 
| for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */ |  | 
| nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */ |  | 
| nhstepm = nhstepm/hstepm; /* Typically 40/4=10 */ |  | 
|  |  | 
| /*      nhstepm=nhstepm*YEARM; aff par mois*/ |  | 
 |  |  | 
| p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); | /*------------- h Pij x at various ages ------------*/ | 
| oldm=oldms;savm=savms; | #include "hpijx.h" | 
| hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k); | fclose(ficrespij); | 
| fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j="); |  | 
| for(i=1; i<=nlstate;i++) |  | 
| for(j=1; j<=nlstate+ndeath;j++) |  | 
| fprintf(ficrespij," %1d-%1d",i,j); |  | 
| fprintf(ficrespij,"\n"); |  | 
| for (h=0; h<=nhstepm; h++){ |  | 
| fprintf(ficrespij,"%d %3.f %3.f",k,agedeb, agedeb+ h*hstepm/YEARM*stepm ); |  | 
| for(i=1; i<=nlstate;i++) |  | 
| for(j=1; j<=nlstate+ndeath;j++) |  | 
| fprintf(ficrespij," %.5f", p3mat[i][j][h]); |  | 
| fprintf(ficrespij,"\n"); |  | 
| } |  | 
| free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm); |  | 
| fprintf(ficrespij,"\n"); |  | 
| } |  | 
| } |  | 
| } |  | 
 |  |  | 
 |  | /*-------------- Variance of one-step probabilities---*/ | 
 |  | k=1; | 
 | varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart); | varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart); | 
 |  |  | 
 | fclose(ficrespij); |  | 
 |  |  | 
 | probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX); | probs= ma3x(1,AGESUP,1,NCOVMAX, 1,NCOVMAX); | 
 | for(i=1;i<=AGESUP;i++) | for(i=1;i<=AGESUP;i++) | 
| Line 6220  Interval (in months) between two waves: | Line 6473  Interval (in months) between two waves: | 
 | } | } | 
 | printf("Computing Health Expectancies: result on file '%s' \n", filerese); | printf("Computing Health Expectancies: result on file '%s' \n", filerese); | 
 | fprintf(ficlog,"Computing Health Expectancies: result on file '%s' \n", filerese); | fprintf(ficlog,"Computing Health Expectancies: result on file '%s' \n", filerese); | 
| for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | 
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | 
| k=k+1; |  | 
|  | for (k=1; k <= (int) pow(2,cptcoveff); k++){ | 
 | fprintf(ficreseij,"\n#****** "); | fprintf(ficreseij,"\n#****** "); | 
 | for(j=1;j<=cptcoveff;j++) { | for(j=1;j<=cptcoveff;j++) { | 
 | fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | 
| Line 6234  Interval (in months) between two waves: | Line 6488  Interval (in months) between two waves: | 
 | evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart); | evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart); | 
 |  |  | 
 | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | 
| } | /*}*/ | 
 | } | } | 
 | fclose(ficreseij); | fclose(ficreseij); | 
 |  |  | 
| Line 6279  Interval (in months) between two waves: | Line 6533  Interval (in months) between two waves: | 
 | printf("Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); | printf("Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); | 
 | fprintf(ficlog,"Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); | fprintf(ficlog,"Computing Variance-covariance of DFLEs: file '%s' \n", fileresv); | 
 |  |  | 
| for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | 
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | 
| k=k+1; |  | 
| fprintf(ficrest,"\n#****** "); | for (k=1; k <= (int) pow(2,cptcoveff); k++){ | 
|  | fprintf(ficrest,"\n#****** "); | 
 | for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) | 
 | fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | 
 | fprintf(ficrest,"******\n"); | fprintf(ficrest,"******\n"); | 
| Line 6304  Interval (in months) between two waves: | Line 6559  Interval (in months) between two waves: | 
 | eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | 
 | oldm=oldms;savm=savms; | oldm=oldms;savm=savms; | 
 | cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart); | cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart); | 
 |  | /* | 
 |  | */ | 
 |  | /* goto endfree; */ | 
 |  |  | 
 | vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | vareij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage); | 
 | pstamp(ficrest); | pstamp(ficrest); | 
 |  |  | 
 |  |  | 
 | for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/ | for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/ | 
| oldm=oldms;savm=savms; | oldm=oldms;savm=savms; /* Segmentation fault */ | 
| varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart);   fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n#  (weighted average of eij where weights are "); | varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); | 
|  | fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n#  (weighted average of eij where weights are "); | 
 | if(vpopbased==1) | if(vpopbased==1) | 
 | fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav); | fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav); | 
 | else | else | 
| Line 6353  Interval (in months) between two waves: | Line 6614  Interval (in months) between two waves: | 
 | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage); | 
 | free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage); | free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage); | 
 | free_vector(epj,1,nlstate+1); | free_vector(epj,1,nlstate+1); | 
| } | /*}*/ | 
 | } | } | 
 | free_vector(weight,1,n); | free_vector(weight,1,n); | 
| free_imatrix(Tvard,1,15,1,2); | free_imatrix(Tvard,1,NCOVMAX,1,2); | 
 | free_imatrix(s,1,maxwav+1,1,n); | free_imatrix(s,1,maxwav+1,1,n); | 
 | free_matrix(anint,1,maxwav,1,n); | free_matrix(anint,1,maxwav,1,n); | 
 | free_matrix(mint,1,maxwav,1,n); | free_matrix(mint,1,maxwav,1,n); | 
| Line 6378  Interval (in months) between two waves: | Line 6639  Interval (in months) between two waves: | 
 | } | } | 
 | printf("Computing Variance-covariance of period (stable) prevalence: file '%s' \n", fileresvpl); | printf("Computing Variance-covariance of period (stable) prevalence: file '%s' \n", fileresvpl); | 
 |  |  | 
| for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){ | 
| for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){ | for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/ | 
| k=k+1; |  | 
| fprintf(ficresvpl,"\n#****** "); | for (k=1; k <= (int) pow(2,cptcoveff); k++){ | 
|  | fprintf(ficresvpl,"\n#****** "); | 
 | for(j=1;j<=cptcoveff;j++) | for(j=1;j<=cptcoveff;j++) | 
 | fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | fprintf(ficresvpl,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtab[k][j]]); | 
 | fprintf(ficresvpl,"******\n"); | fprintf(ficresvpl,"******\n"); | 
| Line 6390  Interval (in months) between two waves: | Line 6652  Interval (in months) between two waves: | 
 | oldm=oldms;savm=savms; | oldm=oldms;savm=savms; | 
 | varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl,k,strstart); | 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); | free_matrix(varpl,1,nlstate,(int) bage, (int)fage); | 
| } | /*}*/ | 
 | } | } | 
 |  |  | 
 | fclose(ficresvpl); | fclose(ficresvpl); | 
| Line 6412  Interval (in months) between two waves: | Line 6674  Interval (in months) between two waves: | 
 | free_matrix(agev,1,maxwav,1,imx); | free_matrix(agev,1,maxwav,1,imx); | 
 | free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); | free_ma3x(param,1,nlstate,1, nlstate+ndeath-1,1,ncovmodel); | 
 |  |  | 
| free_ivector(ncodemax,1,8); | free_ivector(ncodemax,1,NCOVMAX); | 
| free_ivector(Tvar,1,15); | free_ivector(Tvar,1,NCOVMAX); | 
| free_ivector(Tprod,1,15); | free_ivector(Tprod,1,NCOVMAX); | 
| free_ivector(Tvaraff,1,15); | free_ivector(Tvaraff,1,NCOVMAX); | 
| free_ivector(Tage,1,15); | free_ivector(Tage,1,NCOVMAX); | 
 |  |  | 
 | free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX); | free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX); | 
 | free_imatrix(codtab,1,100,1,10); | free_imatrix(codtab,1,100,1,10); | 
| Line 6433  Interval (in months) between two waves: | Line 6695  Interval (in months) between two waves: | 
 | } | } | 
 | printf("See log file on %s\n",filelog); | printf("See log file on %s\n",filelog); | 
 | /*  gettimeofday(&end_time, (struct timezone*)0);*/  /* after time */ | /*  gettimeofday(&end_time, (struct timezone*)0);*/  /* after time */ | 
| (void) gettimeofday(&end_time,&tzp); | /*(void) gettimeofday(&end_time,&tzp);*/ | 
| tm = *localtime(&end_time.tv_sec); | rend_time = time(NULL); | 
| tmg = *gmtime(&end_time.tv_sec); | end_time = *localtime(&rend_time); | 
| strcpy(strtend,asctime(&tm)); | /* tml = *localtime(&end_time.tm_sec); */ | 
|  | strcpy(strtend,asctime(&end_time)); | 
 | printf("Local time at start %s\nLocal time 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); | 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 used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); | 
 |  |  | 
| printf("Total time was %ld Sec.\n", end_time.tv_sec -start_time.tv_sec); | printf("Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); | 
| fprintf(ficlog,"Total time used %s\n", asc_diff_time(end_time.tv_sec -start_time.tv_sec,tmpout)); | fprintf(ficlog,"Total time used %s\n", asc_diff_time(rend_time -rstart_time,tmpout)); | 
| fprintf(ficlog,"Total time was %ld Sec.\n", end_time.tv_sec -start_time.tv_sec); | fprintf(ficlog,"Total time was %.0lf Sec.\n", difftime(rend_time,rstart_time)); | 
 | /*  printf("Total time was %d uSec.\n", total_usecs);*/ | /*  printf("Total time was %d uSec.\n", total_usecs);*/ | 
 | /*   if(fileappend(fichtm,optionfilehtm)){ */ | /*   if(fileappend(fichtm,optionfilehtm)){ */ | 
 | fprintf(fichtm,"<br>Local time at start %s<br>Local time at end   %s<br>\n</body></html>",strstart, strtend); | fprintf(fichtm,"<br>Local time at start %s<br>Local time at end   %s<br>\n</body></html>",strstart, strtend); | 
| Line 6462  Interval (in months) between two waves: | Line 6725  Interval (in months) between two waves: | 
 | printf("Current directory %s!\n",pathcd); | printf("Current directory %s!\n",pathcd); | 
 | /*strcat(plotcmd,CHARSEPARATOR);*/ | /*strcat(plotcmd,CHARSEPARATOR);*/ | 
 | sprintf(plotcmd,"gnuplot"); | sprintf(plotcmd,"gnuplot"); | 
| #ifndef UNIX | #ifdef _WIN32 | 
 | sprintf(plotcmd,"\"%sgnuplot.exe\"",pathimach); | sprintf(plotcmd,"\"%sgnuplot.exe\"",pathimach); | 
 | #endif | #endif | 
 | if(!stat(plotcmd,&info)){ | if(!stat(plotcmd,&info)){ | 
| printf("Error gnuplot program not found: %s\n",plotcmd);fflush(stdout); | printf("Error or gnuplot program not found: '%s'\n",plotcmd);fflush(stdout); | 
 | if(!stat(getenv("GNUPLOTBIN"),&info)){ | if(!stat(getenv("GNUPLOTBIN"),&info)){ | 
| printf("Error gnuplot program not found: %s Environment GNUPLOTBIN not set.\n",plotcmd);fflush(stdout); | printf("Error or gnuplot program not found: '%s' Environment GNUPLOTBIN not set.\n",plotcmd);fflush(stdout); | 
 | }else | }else | 
 | strcpy(pplotcmd,plotcmd); | strcpy(pplotcmd,plotcmd); | 
| #ifdef UNIX | #ifdef __unix | 
 | strcpy(plotcmd,GNUPLOTPROGRAM); | strcpy(plotcmd,GNUPLOTPROGRAM); | 
 | if(!stat(plotcmd,&info)){ | if(!stat(plotcmd,&info)){ | 
| printf("Error gnuplot program not found: %s\n",plotcmd);fflush(stdout); | printf("Error gnuplot program not found: '%s'\n",plotcmd);fflush(stdout); | 
 | }else | }else | 
 | strcpy(pplotcmd,plotcmd); | strcpy(pplotcmd,plotcmd); | 
 | #endif | #endif | 
| Line 6482  Interval (in months) between two waves: | Line 6745  Interval (in months) between two waves: | 
 | strcpy(pplotcmd,plotcmd); | strcpy(pplotcmd,plotcmd); | 
 |  |  | 
 | sprintf(plotcmd,"%s %s",pplotcmd, optionfilegnuplot); | sprintf(plotcmd,"%s %s",pplotcmd, optionfilegnuplot); | 
| printf("Starting graphs with: %s\n",plotcmd);fflush(stdout); | printf("Starting graphs with: '%s'\n",plotcmd);fflush(stdout); | 
 |  |  | 
 | if((outcmd=system(plotcmd)) != 0){ | if((outcmd=system(plotcmd)) != 0){ | 
| printf("\n Problem with gnuplot\n"); | printf("gnuplot command might not be in your path: '%s', err=%d\n", plotcmd, outcmd); | 
|  | printf("\n Trying if gnuplot resides on the same directory that IMaCh\n"); | 
|  | sprintf(plotcmd,"%sgnuplot %s", pathimach, optionfilegnuplot); | 
|  | if((outcmd=system(plotcmd)) != 0) | 
|  | printf("\n Still a problem with gnuplot command %s, err=%d\n", plotcmd, outcmd); | 
 | } | } | 
| printf(" Wait..."); | printf(" Successful, please wait..."); | 
 | while (z[0] != 'q') { | while (z[0] != 'q') { | 
 | /* chdir(path); */ | /* chdir(path); */ | 
| printf("\nType e to edit output files, g to graph again and q for exiting: "); | printf("\nType e to edit results with your browser, g to graph again and q for exit: "); | 
 | scanf("%s",z); | scanf("%s",z); | 
 | /*     if (z[0] == 'c') system("./imach"); */ | /*     if (z[0] == 'c') system("./imach"); */ | 
 | if (z[0] == 'e') { | if (z[0] == 'e') { | 
| printf("Starting browser with: %s",optionfilehtm);fflush(stdout); | #ifdef __APPLE__ | 
| system(optionfilehtm); | sprintf(pplotcmd, "open %s", optionfilehtm); | 
|  | #elif __linux | 
|  | sprintf(pplotcmd, "xdg-open %s", optionfilehtm); | 
|  | #else | 
|  | sprintf(pplotcmd, "%s", optionfilehtm); | 
|  | #endif | 
|  | printf("Starting browser with: %s",pplotcmd);fflush(stdout); | 
|  | system(pplotcmd); | 
 | } | } | 
 | else if (z[0] == 'g') system(plotcmd); | else if (z[0] == 'g') system(plotcmd); | 
 | else if (z[0] == 'q') exit(0); | else if (z[0] == 'q') exit(0); | 
| Line 6506  Interval (in months) between two waves: | Line 6780  Interval (in months) between two waves: | 
 | scanf("%s",z); | scanf("%s",z); | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 |  |  |