|
|
| version 1.305, 2021/02/20 15:28:30 | version 1.310, 2022/03/17 08:45:53 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ | /* $Id$ |
| $State$ | $State$ |
| $Log$ | $Log$ |
| Revision 1.310 2022/03/17 08:45:53 brouard | |
| Summary: 99r25 | |
| Improving detection of errors: result lines should be compatible with | |
| the model. | |
| Revision 1.309 2021/05/20 12:39:14 brouard | |
| Summary: Version 0.99r24 | |
| Revision 1.308 2021/03/31 13:11:57 brouard | |
| Summary: Version 0.99r23 | |
| * imach.c (Module): Still bugs in the result loop. Thank to Holly Benett | |
| Revision 1.307 2021/03/08 18:11:32 brouard | |
| Summary: 0.99r22 fixed bug on result: | |
| Revision 1.306 2021/02/20 15:44:02 brouard | |
| Summary: Version 0.99r21 | |
| * imach.c (Module): Fix bug on quitting after result lines! | |
| (Module): Version 0.99r21 | |
| Revision 1.305 2021/02/20 15:28:30 brouard | Revision 1.305 2021/02/20 15:28:30 brouard |
| * imach.c (Module): Fix bug on quitting after result lines! | * imach.c (Module): Fix bug on quitting after result lines! |
| Line 1139 typedef struct { | Line 1163 typedef struct { |
| /* $State$ */ | /* $State$ */ |
| #include "version.h" | #include "version.h" |
| char version[]=__IMACH_VERSION__; | char version[]=__IMACH_VERSION__; |
| char copyright[]="May 2019,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2020"; | char copyright[]="March 2021,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015-2020, Nihon University 2021, INED 2000-2021"; |
| char fullversion[]="$Revision$ $Date$"; | char fullversion[]="$Revision$ $Date$"; |
| char strstart[80]; | char strstart[80]; |
| char optionfilext[10], optionfilefiname[FILENAMELENGTH]; | char optionfilext[10], optionfilefiname[FILENAMELENGTH]; |
| Line 1556 char *cutl(char *blocc, char *alocc, cha | Line 1580 char *cutl(char *blocc, char *alocc, cha |
| { | { |
| /* cuts string in into blocc and alocc where blocc ends before FIRST occurence of 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') | and alocc starts after first occurence of char 'occ' : ex cutv(blocc,alocc,"abcdef2ghi2j",'2') |
| gives blocc="abcdef" and alocc="ghi2j". | gives alocc="abcdef" and blocc="ghi2j". |
| If occ is not found blocc is null and alocc is equal to in. Returns blocc | If occ is not found blocc is null and alocc is equal to in. Returns blocc |
| */ | */ |
| char *s, *t; | char *s, *t; |
| Line 5256 void concatwav(int wav[], int **dh, int | Line 5280 void concatwav(int wav[], int **dh, int |
| for(i=1; i<=imx; i++){ /* For simple cases and if state is death */ | for(i=1; i<=imx; i++){ /* For simple cases and if state is death */ |
| mi=0; /* First valid wave */ | mi=0; /* First valid wave */ |
| mli=0; /* Last valid wave */ | mli=0; /* Last valid wave */ |
| m=firstpass; | m=firstpass; /* Loop on waves */ |
| while(s[m][i] <= nlstate){ /* a live state */ | while(s[m][i] <= nlstate){ /* a live state or unknown state */ |
| if(m >firstpass && s[m][i]==s[m-1][i] && mint[m][i]==mint[m-1][i] && anint[m][i]==anint[m-1][i]){/* Two succesive identical information on wave m */ | if(m >firstpass && s[m][i]==s[m-1][i] && mint[m][i]==mint[m-1][i] && anint[m][i]==anint[m-1][i]){/* Two succesive identical information on wave m */ |
| mli=m-1;/* mw[++mi][i]=m-1; */ | mli=m-1;/* mw[++mi][i]=m-1; */ |
| }else if(s[m][i]>=1 || s[m][i]==-4 || s[m][i]==-5){ /* Since 0.98r4 if status=-2 vital status is really unknown, wave should be skipped */ | }else if(s[m][i]>=1 || s[m][i]==-4 || s[m][i]==-5){ /* Since 0.98r4 if status=-2 vital status is really unknown, wave should be skipped */ |
| mw[++mi][i]=m; | mw[++mi][i]=m; /* Valid wave: incrementing mi and updating mi; mw[mi] is the wave number of mi_th valid transition */ |
| mli=m; | mli=m; |
| } /* else might be a useless wave -1 and mi is not incremented and mw[mi] not updated */ | } /* else might be a useless wave -1 and mi is not incremented and mw[mi] not updated */ |
| if(m < lastpass){ /* m < lastpass, standard case */ | if(m < lastpass){ /* m < lastpass, standard case */ |
| m++; /* mi gives the "effective" current wave, m the current wave, go to next wave by incrementing m */ | m++; /* mi gives the "effective" current wave, m the current wave, go to next wave by incrementing m */ |
| } | } |
| else{ /* m >= lastpass, eventual special issue with warning */ | else{ /* m = lastpass, eventual special issue with warning */ |
| #ifdef UNKNOWNSTATUSNOTCONTRIBUTING | #ifdef UNKNOWNSTATUSNOTCONTRIBUTING |
| break; | break; |
| #else | #else |
| if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ | if(s[m][i]==-1 && (int) andc[i] == 9999 && (int)anint[m][i] != 9999){ /* case -2 (vital status unknown is warned later */ |
| if(firsthree == 0){ | if(firsthree == 0){ |
| printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p_{%d%d} .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); | printf("Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p_{%d%d} .\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); |
| firsthree=1; | firsthree=1; |
| } | } |
| fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p_{%d%d} .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); | fprintf(ficlog,"Information! Unknown status for individual %ld line=%d occurred at last wave %d at known date %d/%d. Please, check if your unknown date of death %d/%d means a live state %d at wave %d. This case(%d)/wave(%d) contributes to the likelihood as 1-p_{%d%d} .\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], (int) moisdc[i], (int) andc[i], s[m][i], m, i, m, s[m][i], nlstate+ndeath); |
| mw[++mi][i]=m; | mw[++mi][i]=m; /* Valid transition with unknown status */ |
| mli=m; | mli=m; |
| } | } |
| if(s[m][i]==-2){ /* Vital status is really unknown */ | if(s[m][i]==-2){ /* Vital status is really unknown */ |
| nbwarn++; | nbwarn++; |
| if((int)anint[m][i] == 9999){ /* Has the vital status really been verified? */ | if((int)anint[m][i] == 9999){ /* Has the vital status really been verified?not a transition */ |
| printf("Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); | printf("Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); |
| fprintf(ficlog,"Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); | fprintf(ficlog,"Warning! Vital status for individual %ld (line=%d) at last wave %d interviewed at date %d/%d is unknown %d. Please, check if the vital status and the date of death %d/%d are really unknown. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], (int) moisdc[i], (int) andc[i], i, m); |
| } | } |
| Line 5307 void concatwav(int wav[], int **dh, int | Line 5331 void concatwav(int wav[], int **dh, int |
| #ifndef DISPATCHINGKNOWNDEATHAFTERLASTWAVE | #ifndef DISPATCHINGKNOWNDEATHAFTERLASTWAVE |
| else if ((int) andc[i] != 9999) { /* Date of death is known */ | else if ((int) andc[i] != 9999) { /* Date of death is known */ |
| if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ | if ((int)anint[m][i]!= 9999) { /* date of last interview is known */ |
| if((andc[i]+moisdc[i]/12.) <=(anint[m][i]+mint[m][i]/12.)){ /* death occured before last wave and status should have been death instead of -1 */ | if((andc[i]+moisdc[i]/12.) <=(anint[m][i]+mint[m][i]/12.)){ /* month of death occured before last wave month and status should have been death instead of -1 */ |
| nbwarn++; | nbwarn++; |
| if(firstfiv==0){ | if(firstfiv==0){ |
| printf("Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); | printf("Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d, interviewed on %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
| firstfiv=1; | firstfiv=1; |
| }else{ | }else{ |
| fprintf(ficlog,"Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d interviewed at %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); | fprintf(ficlog,"Warning! Death for individual %ld line=%d occurred at %d/%d before last wave %d, interviewed on %d/%d and should have been coded as death instead of '%d'. This case (%d)/wave (%d) is contributing to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
| } | } |
| }else{ /* Death occured afer last wave potential bias */ | s[m][i]=nlstate+1; /* Fixing the status as death. Be careful if multiple death states */ |
| }else{ /* Month of Death occured afer last wave month, potential bias */ | |
| nberr++; | nberr++; |
| if(firstwo==0){ | if(firstwo==0){ |
| printf("Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood. Please add a new fictive wave at the date of last vital status scan, with a dead status or alive but unknown state status (-1). See documentation\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | printf("Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d with status %d. Potential bias if other individuals are still alive on this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood. Please add a new fictitious wave at the date of last vital status scan, with a dead status. See documentation\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
| firstwo=1; | firstwo=1; |
| } | } |
| fprintf(ficlog,"Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood. Please add a new fictive wave at the date of last vital status scan, with a dead status or alive but unknown state status (-1). See documentation\n\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | fprintf(ficlog,"Error! Death for individual %ld line=%d occurred at %d/%d after last wave %d interviewed at %d/%d with status %d. Potential bias if other individuals are still alive on this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood. Please add a new fictitious wave at the date of last vital status scan, with a dead status. See documentation\n\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
| } | } |
| }else{ /* if date of interview is unknown */ | }else{ /* if date of interview is unknown */ |
| /* death is known but not confirmed by death status at any wave */ | /* death is known but not confirmed by death status at any wave */ |
| if(firstfour==0){ | if(firstfour==0){ |
| printf("Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | printf("Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d with status %d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\nOthers in log file only\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
| firstfour=1; | firstfour=1; |
| } | } |
| fprintf(ficlog,"Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], i,m ); | fprintf(ficlog,"Error! Death for individual %ld line=%d occurred %d/%d but not confirmed by any death status for any wave, including last wave %d at unknown date %d/%d with status %d. Potential bias if other individuals are still alive at this date but ignored. This case (%d)/wave (%d) is skipped, no contribution to likelihood.\n",num[i],i,(int) moisdc[i], (int) andc[i], lastpass,(int)mint[m][i],(int)anint[m][i], s[m][i], i,m ); |
| } | } |
| } /* end if date of death is known */ | } /* end if date of death is known */ |
| #endif | #endif |
| wav[i]=mi; /* mi should be the last effective wave (or mli) */ | wav[i]=mi; /* mi should be the last effective wave (or mli), */ |
| /* wav[i]=mw[mi][i]; */ | /* wav[i]=mw[mi][i]; */ |
| if(mi==0){ | if(mi==0){ |
| nbwarn++; | nbwarn++; |
| if(first==0){ | if(first==0){ |
| Line 9585 int decoderesult ( char resultline[], in | Line 9610 int decoderesult ( char resultline[], in |
| char stra[80], strb[80], strc[80], strd[80],stre[80]; | char stra[80], strb[80], strc[80], strd[80],stre[80]; |
| removefirstspace(&resultline); | removefirstspace(&resultline); |
| printf("decoderesult:%s\n",resultline); | |
| if (strstr(resultline,"v") !=0){ | if (strstr(resultline,"v") !=0){ |
| printf("Error. 'v' must be in upper case 'V' result: %s ",resultline); | printf("Error. 'v' must be in upper case 'V' result: %s ",resultline); |
| Line 9600 int decoderesult ( char resultline[], in | Line 9624 int decoderesult ( char resultline[], in |
| TKresult[nres]=0; /* Combination for the nresult and the model */ | TKresult[nres]=0; /* Combination for the nresult and the model */ |
| return (0); | return (0); |
| } | } |
| if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */ | if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */ |
| printf("ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | printf("ERROR: the number of variables in the resultline, %d, differs from the number of variables used in the model line, %d.\n",j, cptcovs); |
| fprintf(ficlog,"ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs); | fprintf(ficlog,"ERROR: the number of variables in the resultline, %d, differs from the number of variables used in the model line, %d.\n",j, cptcovs); |
| } | } |
| for(k=1; k<=j;k++){ /* Loop on any covariate of the result line */ | for(k=1; k<=j;k++){ /* Loop on any covariate of the result line */ |
| if(nbocc(resultsav,'=') >1){ | if(nbocc(resultsav,'=') >1){ |
| cutl(stra,strb,resultsav,' '); /* keeps in strb after the first ' ' | cutl(stra,strb,resultsav,' '); /* keeps in strb after the first ' ' |
| resultsav= V4=1 V5=25.1 V3=0 strb=V3=0 stra= V4=1 V5=25.1 */ | resultsav= V4=1 V5=25.1 V3=0 stra= V5=25.1 V3=0 strb= V4=1 */ |
| cutl(strc,strd,strb,'='); /* strb:V4=1 strc=1 strd=V4 */ | cutl(strc,strd,strb,'='); /* strb:V4=1 strc=1 strd=V4 */ |
| }else | }else |
| cutl(strc,strd,resultsav,'='); | cutl(strc,strd,resultsav,'='); |
| Line 9633 int decoderesult ( char resultline[], in | Line 9656 int decoderesult ( char resultline[], in |
| } | } |
| } | } |
| if(match == 0){ | if(match == 0){ |
| printf("Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model); | printf("Error in result line: V%d is missing in result: %s according to model=%s\n",k1, resultline, model); |
| fprintf(ficlog,"Error in result line: V%d is missing in result: %s according to model=%s\n",k1, resultline, model); | |
| return 1; | |
| } | } |
| } | } |
| } | } |
| Line 9650 int decoderesult ( char resultline[], in | Line 9675 int decoderesult ( char resultline[], in |
| } | } |
| if(match == 0){ | if(match == 0){ |
| printf("Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model); | printf("Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model); |
| fprintf(ficlog,"Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model); | |
| return 1; | |
| }else if(match > 1){ | }else if(match > 1){ |
| printf("Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); | printf("Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); |
| fprintf(ficlog,"Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model); | |
| return 1; | |
| } | } |
| } | } |
| Line 12411 Please run with mle=-1 to get a correct | Line 12440 Please run with mle=-1 to get a correct |
| } | } |
| /* Results */ | /* Results */ |
| endishere=0; | |
| nresult=0; | nresult=0; |
| parameterline=0; | |
| do{ | do{ |
| if(!fgets(line, MAXLINE, ficpar)){ | if(!fgets(line, MAXLINE, ficpar)){ |
| endishere=1; | endishere=1; |
| parameterline=14; | parameterline=15; |
| }else if (line[0] == '#') { | }else if (line[0] == '#') { |
| /* If line starts with a # it is a comment */ | /* If line starts with a # it is a comment */ |
| numlinepar++; | numlinepar++; |
| Line 12428 Please run with mle=-1 to get a correct | Line 12459 Please run with mle=-1 to get a correct |
| parameterline=11; | parameterline=11; |
| else if(sscanf(line,"prevbackcast=%[^\n]\n",modeltemp)) | else if(sscanf(line,"prevbackcast=%[^\n]\n",modeltemp)) |
| parameterline=12; | parameterline=12; |
| else if(sscanf(line,"result:%[^\n]\n",modeltemp)) | else if(sscanf(line,"result:%[^\n]\n",modeltemp)){ |
| parameterline=13; | parameterline=13; |
| } | |
| else{ | else{ |
| parameterline=14; | parameterline=14; |
| } | } |
| switch (parameterline){ | switch (parameterline){ /* =0 only if only comments */ |
| case 11: | case 11: |
| if((num_filled=sscanf(line,"prevforecast=%d starting-proj-date=%lf/%lf/%lf final-proj-date=%lf/%lf/%lf mobil_average=%d\n",&prevfcast,&jproj1,&mproj1,&anproj1,&jproj2,&mproj2,&anproj2,&mobilavproj)) !=EOF && (num_filled == 8)){ | if((num_filled=sscanf(line,"prevforecast=%d starting-proj-date=%lf/%lf/%lf final-proj-date=%lf/%lf/%lf mobil_average=%d\n",&prevfcast,&jproj1,&mproj1,&anproj1,&jproj2,&mproj2,&anproj2,&mobilavproj)) !=EOF && (num_filled == 8)){ |
| fprintf(ficparo,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); | fprintf(ficparo,"prevforecast=%d starting-proj-date=%.lf/%.lf/%.lf final-proj-date=%.lf/%.lf/%.lf mobil_average=%d\n",prevfcast,jproj1,mproj1,anproj1,jproj2,mproj2,anproj2,mobilavproj); |
| Line 12481 Please run with mle=-1 to get a correct | Line 12513 Please run with mle=-1 to get a correct |
| } | } |
| break; | break; |
| case 13: | case 13: |
| if((num_filled=sscanf(line,"result:%[^\n]\n",resultline)) !=EOF){ | num_filled=sscanf(line,"result:%[^\n]\n",resultline); |
| if (num_filled == 0){ | nresult++; /* Sum of resultlines */ |
| resultline[0]='\0'; | printf("Result %d: result:%s\n",nresult, resultline); |
| printf("Warning %d: no result line! It should be at minimum 'result: V2=0 V1=1 or result:.\n%s\n", num_filled, line); | if(nresult > MAXRESULTLINES){ |
| fprintf(ficlog,"Warning %d: no result line! It should be at minimum 'result: V2=0 V1=1 or result:.\n%s\n", num_filled, line); | printf("ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\nYou can use the 'r' parameter file '%s' which uses option mle=0 to get other results. ",MAXRESULTLINES,nresult,rfileres); |
| break; | fprintf(ficlog,"ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\nYou can use the 'r' parameter file '%s' which uses option mle=0 to get other results. ",MAXRESULTLINES,nresult,rfileres); |
| } else if (num_filled != 1){ | goto end; |
| printf("ERROR %d: result line! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",num_filled, line); | } |
| fprintf(ficlog,"ERROR %d: result line! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",num_filled, line); | if(!decoderesult(resultline, nresult)){ /* Fills TKresult[nresult] combination and Tresult[nresult][k4+1] combination values */ |
| } | fprintf(ficparo,"result: %s\n",resultline); |
| nresult++; /* Sum of resultlines */ | fprintf(ficres,"result: %s\n",resultline); |
| printf("Result %d: result=%s\n",nresult, resultline); | fprintf(ficlog,"result: %s\n",resultline); |
| if(nresult > MAXRESULTLINES){ | } else |
| printf("ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | goto end; |
| fprintf(ficlog,"ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult); | break; |
| goto end; | case 14: |
| } | printf("Error: Unknown command '%s'\n",line); |
| decoderesult(resultline, nresult); /* Fills TKresult[nresult] combination and Tresult[nresult][k4+1] combination values */ | fprintf(ficlog,"Error: Unknown command '%s'\n",line); |
| fprintf(ficparo,"result: %s\n",resultline); | if(ncovmodel >=2 && nresult==0 ){ |
| fprintf(ficres,"result: %s\n",resultline); | printf("ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); |
| fprintf(ficlog,"result: %s\n",resultline); | fprintf(ficlog,"ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); |
| break; | |
| case 14: | |
| printf("Error: Unknown command '%s'\n",line); | |
| fprintf(ficlog,"Error: Unknown command '%s'\n",line); | |
| if(ncovmodel >=2 && nresult==0 ){ | |
| printf("ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); | |
| fprintf(ficlog,"ERROR: no result lines! It should be at minimum 'result: V2=0 V1=1 or result:.' %s\n",line); | |
| } | |
| /* goto end; */ | |
| break; | |
| default: | |
| nresult=1; | |
| decoderesult(".",nresult ); /* No covariate */ | |
| } | } |
| /* goto end; */ | |
| break; | |
| case 15: | |
| printf("End of resultlines.\n"); | |
| fprintf(ficlog,"End of resultlines.\n"); | |
| break; | |
| default: /* parameterline =0 */ | |
| nresult=1; | |
| decoderesult(".",nresult ); /* No covariate */ | |
| } /* End switch parameterline */ | } /* End switch parameterline */ |
| }while(endishere==0); /* End do */ | }while(endishere==0); /* End do */ |