29 if(verbose>0) {printf(
"%s(%s, dft)\n", __func__, filename); fflush(stdout);}
32 char *cptr, *line, *lptr, temp[128];
33 int ret, i, j, c, type=0, voiNr=0, frameNr=0, longest=0;
39 if(data==NULL) {strcpy(
dfterrmsg,
"invalid data");
return 1;}
43 if(verbose>1) {printf(
"opening file\n"); fflush(stdout);}
44 fp=fopen(filename,
"r");
45 if(fp==NULL) {strcpy(
dfterrmsg,
"cannot open file");
return 1;}
49 type=
dftFormat(filename);
if(verbose>1) printf(
" type := %d\n", type);
51 strcpy(
dfterrmsg,
"unknown file format");
return 1;
53 strcpy(
dfterrmsg,
"cannot read fit file");
return 1;
58 if(verbose>1) {printf(
"calling roikbqRead()\n"); fflush(stdout);}
59 ret=
roikbqRead(filename, data);
if(ret!=0)
return ret;
63 if(verbose>1) {printf(
"calling idwcRead()\n"); fflush(stdout);}
64 ret=
idwcRead(filename, data);
if(ret!=0)
return ret;
68 if(verbose>1) {printf(
"calling iftRead()\n"); fflush(stdout);}
69 ret=
ifRead(filename, data);
if(ret!=0)
return ret;
75 if(verbose>1) {printf(
"calling csvRead()\n"); fflush(stdout);}
77 if(ret==0) ret=
csv2dft(&csv, data);
98 strcpy(
dfterrmsg,
"unsupported file format");
return 1;
102 if(verbose>1) {printf(
"calling iftRead()\n"); fflush(stdout);}
107 if(verbose>1) {printf(
"re-opening file\n"); fflush(stdout);}
108 fp=fopen(filename,
"r");
114 i=0;
while((c=fgetc(fp))!=EOF) {
115 if(c==10 || c==13) {
if(i>longest) longest=i; i=0;}
else i++;}
116 if(i>longest) longest=i;
117 rewind(fp); longest+=2;
118 if(verbose>1) {printf(
" longest := %d\n", longest); fflush(stdout);}
121 line=(
char*)malloc((longest+1)*
sizeof(
char));
122 if(line==NULL) {strcpy(
dfterrmsg,
"out of memory");
iftEmpty(&ift); fclose(fp);
return 2;}
125 i=0;
while(fgets(line, longest, fp)!=NULL && *line) {
126 if(line[0]==
'#')
continue;
127 cptr=strchr(line,
'#');
if(cptr!=NULL) *cptr=(char)0;
128 for(j=0; j<(int)strlen(line); j++)
129 if(isalnum((
int)line[j]) || line[j]==
'.') {i++;
break;}
131 rewind(fp); frameNr=i;
134 if(verbose>1) {printf(
"frameNr := %d\n", frameNr); fflush(stdout);}
137 iftEmpty(&ift); free(line); fclose(fp);
return 1;
142 while(fgets(line, longest, fp)!=NULL) {
143 if(line[0]==
'#')
continue;
148 char *nline; nline=strdup(line); lptr=nline;
149 cptr=strtok(lptr,
" \t\n\r");
if(cptr==NULL) {free(nline);
continue;}
150 voiNr=0;
while((cptr=strtok(NULL,
" \t\n\r"))!=NULL) voiNr++;
155 if(verbose>1) {printf(
"voiNr := %d\n", voiNr); fflush(stdout);}
158 iftEmpty(&ift); free(line); fclose(fp);
return 1;
162 if(verbose>1) {printf(
"allocating memory\n"); fflush(stdout);}
165 iftEmpty(&ift); free(line); fclose(fp);
return 2;
170 if(verbose>1) {printf(
"setting title defaults for plain data\n"); fflush(stdout);}
171 int u, n; u=voiNr; n=1;
while((u/=10)>=1) n++;
173 for(i=0; i<voiNr; i++) {
185 if(verbose>1) {printf(
"calling dft_fill_hdr_from_IFT\n"); fflush(stdout);}
192 if(fgets(line, longest, fp)==NULL) {
193 strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 101;}
194 if(verbose>1) {printf(
"calling dftGetPmodTitle\n"); fflush(stdout);}
204 if(verbose>1) {printf(
"reading DFT title lines\n"); fflush(stdout);}
206 if(fgets(line, longest, fp)==NULL) {
207 strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 102;}
214 cptr=strchr(line,
'#');
if(cptr!=NULL) *cptr=(char)0;
216 cptr=strtok(lptr,
" \t\n\r");
if(cptr==NULL)
continue;
else i++;
218 for(j=0; j<voiNr; j++) {
219 cptr=strtok(NULL,
" \t\n\r");
220 if(cptr==NULL) {strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 103;}
221 if(strlen(cptr)>1 || *cptr!=
'.') {
236 int u, n; u=voiNr; n=1;
while((u/=10)>=1) n++;
if(n>6) n=6;
237 snprintf(data->
voi[j].
voiname, 7,
"%0*d", n, j+1);
242 if(strcmp(cptr,
".")!=0) {
244 }
else strcpy(data->
studynr,
"");
245 for(j=0; j<voiNr; j++) {
246 if((cptr=strtok(NULL,
" \t\n\r"))==NULL) {
247 strcpy(
dfterrmsg,
"missing field on 2nd line");
248 free(line); fclose(fp);
return 104;
250 if(strlen(cptr)>1 || *cptr!=
'.') {
253 strcat(data->
voi[j].
name,
" ");
260 if((cptr=strtok(NULL,
" \t\n\r"))!=NULL) {
261 strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 105;}
269 if((cptr=strtok(NULL,
" \t\n\r"))==NULL) {
270 strcpy(
dfterrmsg,
"missing field on 3rd line");
271 free(line); fclose(fp);
return 106;
275 if(ii==0 && cptr[0]==
'(' && cptr[len-1]==
')') {ii++;
continue;}
277 if(len>1 || *cptr!=
'.') {
280 strcat(data->
voi[j].
name,
" ");
295 else {strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 108;}
297 if((cptr=strtok(NULL,
" \t\n\r"))==NULL) {
298 strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 109;}
299 strcpy(temp,
""); j=sscanf(cptr,
"(%127s)", temp);
300 j=strlen(temp)-1;
if(j>=0 && temp[j]==
')') temp[j]=(char)0;
303 strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 110;}
305 for(j=0; j<voiNr; j++) {
306 if((cptr=strtok(NULL,
" \t\n\r"))==NULL) {
307 strcpy(
dfterrmsg,
"wrong format"); free(line); fclose(fp);
return 111;}
308 if(strlen(cptr)==1 && *cptr==
'.') data->
voi[j].
size=0.0;
316 if(verbose>1) {printf(
"reading data lines\n"); fflush(stdout);}
317 i=0;
while(fgets(line, longest, fp)!=NULL) {
325 cptr=strchr(line,
'#');
if(cptr!=NULL) *cptr=(char)0;
328 char *nline; nline=strdup(line); lptr=nline;
329 cptr=strtok(lptr,
" \t\n\r");
if(cptr==NULL) {free(nline);
continue;}
334 free(line); free(nline); fclose(fp);
return 130;
337 data->
x1[i]=f; cptr=strtok(NULL,
" \t\n\r");
340 free(line); free(nline); fclose(fp);
return 131;
342 data->
x[i]=0.5*(data->
x1[i]+data->
x2[i]);
345 for(j=0; j<voiNr; j++) {
346 if((cptr=strtok(NULL,
" \t\n\r"))==NULL) {
348 free(line); free(nline); fclose(fp);
return 132;
350 if(strlen(cptr)==1 && *cptr==
'.')
351 data->
voi[j].
y[i]=nan(
"");
355 free(line); free(nline); fclose(fp);
return 133;
365 if(i!=frameNr) {strcpy(
dfterrmsg,
"wrong format"); fclose(fp); free((
char*)line);
return 134;}
368 fclose(fp); free((
char*)line);
377 for(i=0; i<data->
voiNr; i++)
if(strlen(data->
voi[i].
name)<1) {
387 for(i=0; i<data->
voiNr; i++)
if(!strcasecmp(data->
voi[i].
voiname,
"weight")) {
389 for(j=0; j<data->
frameNr; j++) data->
w[j]=data->
voi[i].
y[j];
392 strcpy(
dfterrmsg,
"cannot read weight");
return 4;}
404 for(i=0; i<data->
voiNr; i++)
426 if(
CSV_TEST>0) {printf(
"%s('%s')\n", __func__, fname); fflush(stdout);}
437 while((c=fgetc(fp))!=EOF) {
438 if(isalnum(c) || isspace(c) || isgraph(c))
continue;
440 if(
CSV_TEST>1) {printf(
" invalid character %d\n", c); fflush(stdout);}
446 while(fgets(tmp, 10, fp) != NULL) {
if(strlen(tmp))
break;}
447 if(strncasecmp(tmp,
"Time[", 5)==0) {fclose(fp);
return DFT_FORMAT_PMOD;}
448 if(strncasecmp(tmp,
"Start[", 6)==0) {fclose(fp);
return DFT_FORMAT_PMOD;}
453 while(fgets(tmp, 32, fp) != NULL) {
454 if(strlen(tmp)==0)
continue;
455 if(tmp[0]==
'#')
continue;
456 if(strncmp(tmp,
"//", 2)==0)
continue;
463 else if(strncasecmp(tmp,
"FIT1", 3)==0) {fclose(fp);
return DFT_FORMAT_FIT;}
464 else if(strncasecmp(tmp,
"cpt", 3)==0) {fclose(fp);
return DFT_FORMAT_NCI;}
480 int i, commas=0, dots=0;
481 for(i=0; i<csv.
nr; i++) {
482 if(strchr(csv.
c[i].
content,
',')!=NULL) commas++;
483 else if(strchr(csv.
c[i].
content,
'.')!=NULL) dots++;
487 if(
CSV_TEST>1) printf(
" format=%d\n", format);
510 while(fgets(tmp, 4, fp) != NULL) {
if(strlen(tmp) && tmp[0]!=
'#')
break;}
514 if(strncasecmp(tmp,
"DFT", 3)==0)
return 1;
515 else if(strncasecmp(tmp,
"FIT1", 3)==0)
return 3;
516 else if(strncasecmp(tmp,
"cpt", 3)==0)
return 4;
519 while((c=fgetc(fp))!=EOF)
520 if(!isalnum(c) && !isspace(c) && !isgraph(c) && c!=169) {
521 rewind(fp);
return 0;
526 while(fgets(tmp, 10, fp) != NULL) {
if(strlen(tmp))
break;}
527 if(strncasecmp(tmp,
"Time", 4)==0) {rewind(fp);
return 5;}
529 rewind(fp);
return 2;
542 printf(
"Number of curves: %d Number of data points: %d\n",
544 printf(
"Study: '%s' Unit: '%s'\n", data->
studynr, data->
unit);
554 printf(
"Corrected for physical decay: yes\n");
556 printf(
"Corrected for physical decay: no\n");
557 printf(
"_datasize = %d\n", data->_dataSize);
558 for(voi=0; voi<data->
voiNr; voi++) {
559 if(strlen(data->
voi[voi].
name)>0)
560 printf(
"\nROI name: '%s' Size: %g\n",
563 printf(
"\nROI name: '%s' '%s' '%s' Size: %g\n",
566 for(frame=0; frame<data->
frameNr; frame++) {
567 printf(
"%03d: %11.3e %11.3e %11.3e %11.3e %11.3e %11.3e\n",
568 frame+1, data->
x[frame], data->
x1[frame], data->
x2[frame],
569 data->
voi[voi].
y[frame], data->
voi[voi].
y2[frame],
570 data->
voi[voi].
y3[frame]);
573 printf(
"Comments:\n");
575 printf(
"Weights:\n");
577 for(frame=0; frame<data->
frameNr; frame++)
578 printf(
" %03d %11.3e %11.3e %11.3e\n", frame+1,
579 data->
x1[frame], data->
x2[frame], data->
w[frame]);
581 printf(
" contains no weights.\n");
601 int i, j, n, sw, mfw, prec;
602 char tmp[1024], tmp2[128], is_stdout=0;
616 if(!strcasecmp(filename,
"stdout")) is_stdout=1;
626 if(is_stdout) fp=(FILE*)stdout;
627 else if((fp = fopen(filename,
"w")) == NULL) {strcpy(
dfterrmsg,
"cannot open file");
return 2;}
632 n=fprintf(fp,
"%s", DFT_VER);
633 if(n==0) {strcpy(
dfterrmsg,
"disk full");
if(!is_stdout) fclose(fp);
return 3;}
635 if(data->
isweight) fprintf(fp,
"\t%s",
"weight");
639 fprintf(fp,
"%s", tmp);
640 for(i=0; i<data->
voiNr; i++) {
642 else strcpy(tmp,
".");
643 fprintf(fp,
"\t%s", tmp);
645 if(data->
isweight) fprintf(fp,
"\t%s",
".");
648 if(strlen(data->
unit)) strcpy(tmp, data->
unit);
else strcpy(tmp,
".");
649 fprintf(fp,
"%s", tmp);
650 for(i=0; i<data->
voiNr; i++) {
652 else strcpy(tmp,
".");
653 fprintf(fp,
"\t%s", tmp);
655 if(data->
isweight) fprintf(fp,
"\t%s",
".");
661 strcpy(tmp,
"Distance ");
663 strcpy(tmp,
"Time ");
669 strcpy(tmp,
"Distances ");
671 strcpy(tmp,
"Times ");
675 fprintf(fp,
"%s", tmp);
676 for(i=0; i<data->
voiNr; i++) {
677 if(data->
voi[i].
size>=0.0) sprintf(tmp,
"%.*e", prec, data->
voi[i].
size);
678 else strcpy(tmp,
".");
679 fprintf(fp,
"\t%s", tmp);
681 if(data->
isweight) fprintf(fp,
"\t%s",
".");
684 char *cptr, tunit[128], cunit[128];
685 if(data->
timeunit==TUNIT_SEC) strcpy(tunit,
"seconds");
686 else if(data->
timeunit==TUNIT_MIN) strcpy(tunit,
"minutes");
688 if(
petCunitId(data->
unit)==CUNIT_UNITLESS) strcpy(cunit,
"1/1");
else strcpy(cunit, data->
unit);
689 cptr=strstr(cunit,
"mL");
if(cptr!=NULL) {*cptr=
'c'; cptr++; *cptr=
'c';}
691 else fprintf(fp,
"time[%s]", tunit);
692 for(i=0; i<data->
voiNr; i++) {
694 char *s=strdup(data->
voi[i].
name);
699 if(data->
isweight) fprintf(fp,
"\t%s",
"weight");
708 for(j=0; j<data->
frameNr; j++) {
711 case 0: fprintf(fp,
"%.5f", data->
x[j]);
break;
712 case 1: fprintf(fp,
"%.5f", data->
x1[j]);
break;
713 case 2: fprintf(fp,
"%.5f", data->
x2[j]);
break;
714 case 3: fprintf(fp,
"%.5f\t%.5f", data->
x1[j], data->
x2[j]);
break;
717 for(i=0; i<data->
voiNr; i++) {
718 if(!isnan(data->
voi[i].
y[j])) sprintf(tmp,
"%.*e", prec, data->
voi[i].
y[j]);
719 else strcpy(tmp,
".");
720 fprintf(fp,
"\t%s", tmp);
724 if(!isnan(data->
w[j])) sprintf(tmp,
"%.*e", prec, data->
w[j]);
725 else strcpy(tmp,
".");
726 fprintf(fp,
"\t%s", tmp);
730 if(n==0) {strcpy(
dfterrmsg,
"disk full");
if(!is_stdout) fclose(fp);
return 3;}
736 if(n)
for(i=0; i<n; i++) {
744 if(!is_stdout) {fflush(fp); fclose(fp);}
765 int ri, fi, is_stdout=0, ret;
766 char tmp[FILENAME_MAX];
771 strcpy(
dfterrmsg,
"invalid input to dftWriteHTML()");
772 if(dft==NULL || dft->
frameNr<1 || dft->
voiNr<1)
return(1);
773 if(fname==NULL || strlen(fname)<1)
return(1);
776 if(!strcasecmp(fname,
"stdout")) is_stdout=1;
779 if(!is_stdout && access(fname, 0) != -1) {
784 if(is_stdout) fp=(FILE*)stdout;
785 else if((fp=fopen(fname,
"w"))==NULL) {strcpy(
dfterrmsg,
"cannot open file");
return(2);}
789 strcpy(
dfterrmsg,
"disk full");
if(!is_stdout) fclose(fp);
return(3);
793 ret=fprintf(fp,
"<body>\n");
794 if(ret==0) {strcpy(
dfterrmsg,
"disk full");
if(!is_stdout) fclose(fp);
return(3);}
797 fprintf(fp,
"\n<div id=\"table\">\n");
798 fprintf(fp,
"<table>\n");
802 fprintf(fp,
"<thead>\n");
805 fprintf(fp,
"<tr><td> </td>\n");
806 for(ri=0; ri<dft->
voiNr; ri++) {
808 if(senc==NULL) fprintf(fp,
"<th>%s</th>\n", dft->
voi[ri].
voiname);
809 else {fprintf(fp,
"<th>%s</th>\n", senc); free(senc);}
811 fprintf(fp,
"</tr>\n");
813 fprintf(fp,
"<tr><th>%s</th>\n", dft->
studynr);
814 for(ri=0; ri<dft->
voiNr; ri++) {
816 if(senc==NULL) fprintf(fp,
"<th>%s</th>\n", dft->
voi[ri].
hemisphere);
817 else {fprintf(fp,
"<th>%s</th>\n", senc); free(senc);}
819 fprintf(fp,
"</tr>\n");
821 fprintf(fp,
"<tr><th>%s</th>\n", dft->
unit);
822 for(ri=0; ri<dft->
voiNr; ri++) {
824 if(senc==NULL) fprintf(fp,
"<th>%s</th>\n", dft->
voi[ri].
place);
825 else {fprintf(fp,
"<th>%s</th>\n", senc); free(senc);}
827 fprintf(fp,
"</tr>\n");
830 for(ri=0; ri<dft->
voiNr; ri++)
831 fprintf(fp,
"<th>%g</th>\n", dft->
voi[ri].
size);
832 fprintf(fp,
"</tr>\n");
833 }
else if(orientation==2) {
835 fprintf(fp,
"<tr><th>%s</th>\n", dft->
studynr);
836 fprintf(fp,
"<th>%s</th></tr>\n", dft->
unit);
839 fprintf(fp,
"</thead>\n");
843 fprintf(fp,
"<tbody>\n");
847 fprintf(fp,
"<tr><th>Region</th><th>Hemisphere</th><th>Plane</th>\n");
848 fprintf(fp,
"<th>Volume</th></tr>\n");
851 for(fi=0; fi<dft->
frameNr; fi++) {
852 if(fi%2) strcpy(tmp,
"evenframe");
else strcpy(tmp,
"oddframe");
854 fprintf(fp,
"<tr class=\"%s\"><th>%g</th>\n", tmp, dft->
x[fi]);
856 for(ri=0; ri<dft->
voiNr; ri++)
857 fprintf(fp,
"<th>%g</th>", dft->
voi[ri].
y[fi]);
858 fprintf(fp,
"</tr>\n");
861 for(ri=0; ri<dft->
voiNr; ri++) {
862 if(ri%2) strcpy(tmp,
"evenframe");
else strcpy(tmp,
"oddframe");
863 fprintf(fp,
"<tr class=\"%s\">", tmp);
867 if(senc==NULL) fprintf(fp,
"<th>%s</th>", dft->
voi[ri].
voiname);
868 else {fprintf(fp,
"<th>%s</th>", senc); free(senc);}
870 if(senc==NULL) fprintf(fp,
"<th>%s</th>", dft->
voi[ri].
hemisphere);
871 else {fprintf(fp,
"<th>%s</th>", senc); free(senc);}
873 if(senc==NULL) fprintf(fp,
"<th>%s</th>\n", dft->
voi[ri].
place);
874 else {fprintf(fp,
"<th>%s</th>\n", senc); free(senc);}
876 fprintf(fp,
"<td>%g</td>\n", dft->
voi[ri].
size);
878 for(fi=0; fi<dft->
frameNr; fi++) {
879 fprintf(fp,
"<td>%g</td>", dft->
voi[ri].
y[fi]);
881 fprintf(fp,
"</tr>\n");
885 fprintf(fp,
"</tbody></table>\n");
888 fprintf(fp,
"</div>\n");
889 ret=fprintf(fp,
"</body></html>\n\n");
892 if(!is_stdout) fclose(fp);
897 if(!is_stdout) {fflush(fp); fclose(fp);}
912 if(fp==NULL)
return(1);
913 n=fprintf(fp,
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" ");
914 n+=fprintf(fp,
"\"https://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n");
916 n=fprintf(fp,
"<html xmlns=\"https://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n\n");
933 if(fp==NULL)
return(1);
935 n=fprintf(fp,
"<head>\n");
if(n<6)
return(2);
936 fprintf(fp,
" <title>PET data</title>\n");
937 fprintf(fp,
" <meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-1\" />\n");
938 fprintf(fp,
" <meta http-equiv=\"content-language\" content=\"en-gb\" />\n");
939 fprintf(fp,
" <meta name=\"author\" content=\"%s\" />\n", author_name);
940 fprintf(fp,
" <meta name=\"ProgId\" content=\"Excel.Sheet\" />\n");
941 fprintf(fp,
" <link rel=\"icon\" href=\"https://www.turkupetcentre.net/favicon.ico\" type=\"image/x-icon\" />\n");
942 fprintf(fp,
" <link rel=\"shortcut icon\" href=\"https://www.turkupetcentre.net/favicon.ico\" type=\"image/x-icon\" />\n");
944 fprintf(fp,
" <style type=\"text/css\">\n");
945 fprintf(fp,
" thead {background-color:#999999; color:black;}\n");
946 fprintf(fp,
" table {text-align:left; width:100%%; border-collapse:collapse; empty-cells:show;}\n");
947 fprintf(fp,
" td {border:1px solid black;}\n");
948 fprintf(fp,
" .oddframe {background-color:#FFFFFF; color:black;}\n");
949 fprintf(fp,
" .evenframe {background-color:#CCCCCC; color:black;}\n");
950 fprintf(fp,
" #regcontainer ul {margin-left:0; padding-left:0;}\n");
951 fprintf(fp,
" #regcontainer ul li {display:inline; list-style-type:none;}\n");
952 fprintf(fp,
" #regcontainer a {padding:2px 4px;}\n");
953 fprintf(fp,
" <!--table\n");
954 fprintf(fp,
" {mso-displayed-decimal-separator:\"\\.\";\n");
955 fprintf(fp,
" mso-displayed-thousand-separator:\" \";}\n");
956 fprintf(fp,
" -->\n");
957 fprintf(fp,
" </style>\n");
959 fprintf(fp,
" <link rel=\"stylesheet\" type=\"text/css\" ");
960 fprintf(fp,
"href=\"https://www.turkupetcentre.net/dft.css\" />\n");
961 fprintf(fp,
"</head>\n");
977 int ki, ri, ok_nr=0, ret;
978 char keystr[256], *cptr;
983 strcpy(keystr,
"studynr"); ki=
iftGet(ift, keystr, 0);
984 if(ki==-1) {strcpy(keystr,
"study number"); ki=
iftGet(ift, keystr, 0);}
985 if(ki==-1) {strcpy(keystr,
"study_number"); ki=
iftGet(ift, keystr, 0);}
992 strcpy(keystr,
"timeunit"); ki=
iftGet(ift, keystr, 0);
993 if(ki==-1) {strcpy(keystr,
"time unit"); ki=
iftGet(ift, keystr, 0);}
994 if(ki==-1) {strcpy(keystr,
"time_unit"); ki=
iftGet(ift, keystr, 0);}
995 if(ki==-1) {strcpy(keystr,
"Time units"); ki=
iftGet(ift, keystr, 0);}
998 if(ret>=0 && ret!=TUNIT_UNKNOWN) {dft->
timeunit=ret; ok_nr++;}
1002 strcpy(keystr,
"unit"); ki=
iftGet(ift, keystr, 0);
1003 if(ki==-1) {strcpy(keystr,
"Activity units"); ki=
iftGet(ift, keystr, 0);}
1012 strcpy(keystr,
"voiname"); ki=
iftGetNth(ift, keystr, ri+1, 0);
1020 }
while(ki>=0 && ri<dft->_voidataNr);
1023 strcpy(keystr,
"sizes"); ki=
iftGet(ift, keystr, 0);
1024 if(ki==-1) {strcpy(keystr,
"volumes"); ki=
iftGet(ift, keystr, 0);}
1025 if(ki>=0 && strlen(ift->
item[ki].
value)) {
1026 ri=0; cptr=strtok(ift->
item[ki].
value,
" ;\t");
1027 while(cptr!=NULL && ri<dft->_voidataNr) {
1028 if(strcmp(cptr,
".")==0) {ri++;
continue;}
1030 cptr=strtok(NULL,
" ;\t");
1036 strcpy(keystr,
"radiopharmaceutical"); ki=
iftGet(ift, keystr, 0);
1037 if(ki>=0 && strlen(ift->
item[ki].
value)) {
1044 strcpy(keystr,
"isotope"); ki=
iftGet(ift, keystr, 0);
1045 if(ki>=0 && strlen(ift->
item[ki].
value)) {
1051 strcpy(keystr,
"decay_correction"); ki=
iftGet(ift, keystr, 0);
1052 if(ki==-1) {strcpy(keystr,
"decay correction"); ki=
iftGet(ift, keystr, 0);}
1053 if(ki>=0 && strlen(ift->
item[ki].
value)) {
1054 if(strncasecmp(ift->
item[ki].
value,
"Yes", 1)==0) {
1056 }
else if(strncasecmp(ift->
item[ki].
value,
"No", 1)==0) {
1062 strcpy(keystr,
"injection time"); ki=
iftGet(ift, keystr, 0);
1063 if(ki==-1) {strcpy(keystr,
"injection_time"); ki=
iftGet(ift, keystr, 0);}
1064 if(ki>=0 && strlen(ift->
item[ki].
value)) {
1080 strcpy(keystr,
"scan start time"); ki=
iftGet(ift, keystr, 0);
1081 if(ki==-1) {strcpy(keystr,
"scan_start_time"); ki=
iftGet(ift, keystr, 0);}
1082 if(ki==-1) {strcpy(keystr,
"scan_start"); ki=
iftGet(ift, keystr, 0);}
1083 if(ki==-1) {strcpy(keystr,
"scan start"); ki=
iftGet(ift, keystr, 0);}
1084 if(ki>=0 && strlen(ift->
item[ki].
value)) {
1125 if(strlen(title_line)<1)
return 1;
1128 cptr=title_line;
while(*cptr) {
if(*cptr==
'\t') tabs++; cptr++;}
1130 if(tabs>0) strcpy(separs,
"\t\n\r");
else strcpy(separs,
" \t\n\r");
1133 char ntl[1+strlen(title_line)], *tl;
1134 strcpy(ntl, title_line); tl=ntl;
1135 cptr=strtok(tl, separs);
if(cptr==NULL)
return 2;
1139 if(strlen(cptr)>6 && strncasecmp(cptr,
"Time[", 5)==0) {
1141 cptr2=strchr(unit,
']');
if(cptr2!=NULL) *cptr2=(char)0;
1144 }
else if(strlen(cptr)>6 && strncasecmp(cptr,
"start[", 6)==0) {
1146 cptr2=strchr(unit,
']');
if(cptr2!=NULL) *cptr2=(char)0;
1151 if(strlen(cptr)>5 && strncasecmp(cptr,
"end[", 4)==0) {
1153 cptr2=strchr(unit,
']');
if(cptr2!=NULL) *cptr2=(char)0;
1155 if(ret!=CUNIT_UNKNOWN && dft!=NULL) strcpy(dft->
unit,
petCunit(ret));
1161 cptr2=strchr(rname,
'[');
if(cptr2!=NULL) *cptr2=(char)0;
1162 while((cptr2=strchr(rname,
'_'))!=NULL) *cptr2=
' ';
1163 if(dft!=NULL && ri<dft->_voidataNr) strcpy(dft->
voi[ri].
name, rname);
1165 cptr2=strchr(cptr,
'[');
1168 cptr2=strchr(unit,
']');
if(cptr2!=NULL) *cptr2=(char)0;
1170 if(ret!=CUNIT_UNKNOWN && dft!=NULL) strcpy(dft->
unit,
petCunit(ret));
1175 cptr=strtok(NULL, separs);
1187 for(ri=0; ri<ti; ri++)
int backupExistingFile(char *filename, char *backup_ext, char *status)
int csv2dft(CSV *csv, DFT *dft)
int csvRead(CSV *csv, char *fname)
int atof_with_check(char *double_as_string, double *result_value)
double atof_dpi(char *str)
void dftSetComments(DFT *dft)
int dftCopyvoi(DFT *data, int from, int to)
int dftSetmem(DFT *data, int frameNr, int voiNr)
void dftFrametimes(DFT *data)
int dftRead(char *filename, DFT *data)
int dftFormat(char *fname)
int dft_fill_hdr_from_IFT(DFT *dft, IFT *ift)
int dftWrite(DFT *data, char *filename)
int dftWriteXHTML11_doctype(FILE *fp)
int dftWriteXHTML11_head(FILE *fp, char *author_name)
int dftWriteHTML(DFT *dft, char *fname, int orientation)
int dftGetPmodTitle(DFT *dft, char *title_line)
int fncasematch(const char *fname, const char *key)
int idwcRead(char *filename, DFT *dft)
int ifRead(char *filename, DFT *dft)
int iftRead(IFT *ift, char *filename, int is_key_required, int verbose)
int iftGet(IFT *ift, char *key, int verbose)
int iftGetNth(IFT *ift, char *key, int n, int verbose)
Header file for libtpccurveio.
#define DFT_DECAY_NOTCORRECTED
#define DFT_FORMAT_CSV_INT
int roikbqRead(char *fname, DFT *dft)
#define DFT_FORMAT_CSV_UK
#define DFT_FORMAT_STANDARD
#define DFT_DECAY_CORRECTED
#define DFT_TIME_STARTEND
#define DFT_FORMAT_UNKNOWN
int rnameCatenate(char *rname, int max_rname_len, char *name1, char *name2, char *name3, char space)
int petCunitId(const char *unit)
char * petCunit(int cunit)
int rnameSplit(char *rname, char *name1, char *name2, char *name3, int max_name_len)
#define MAX_REGIONNAME_LEN
char * strEncodeForXML(const char *s)
void strReplaceChar(char *str, char c1, char c2)
size_t strnlen(const char *s, size_t n)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
char * petTunit(int tunit)
char * strcasestr(const char *haystack, const char *needle)
int studynr_from_fname(char *fname, char *studynr)
size_t strlcat(char *dst, const char *src, size_t dstsize)
int petTunitId(const char *timeunit)
#define MAX_REGIONSUBNAME_LEN
char studynr[MAX_STUDYNR_LEN+1]
char comments[_DFT_COMMENT_LEN+1]
char unit[MAX_UNITS_LEN+1]
char radiopharmaceutical[32]
char voiname[MAX_REGIONSUBNAME_LEN+1]
char name[MAX_REGIONNAME_LEN+1]
char hemisphere[MAX_REGIONSUBNAME_LEN+1]
char place[MAX_REGIONSUBNAME_LEN+1]