102 int i, j, k, l, roi_nr=0, frame_nr=0, ret, nr=0;
108 if(dft==NULL || fname==NULL) {
109 strcpy(
dfterrmsg,
"program fault");
return(1);}
114 fp=fopen(fname,
"r");
115 if(fp==NULL) {strcpy(
dfterrmsg,
"cannot open file");
return(2);}
120 roikbq_strip_spaces(line);
if(!strlen(line) || line[0]==
'#')
continue;
121 if(!isalpha((
int)line[0]))
continue;
122 if(strncasecmp(line,
"cpt2nci 3", 9)==0) {i=1;
break;}
124 if(i==0) {strcpy(
dfterrmsg,
"unsupported file format"); fclose(fp);
return(3);}
127 rewind(fp); roi_nr=frame_nr=0;
130 if(c==
'#') roikbq_move_to_next_line(fp);
else ungetc(c, fp);
131 i=roikbq_fgets(fp, 16, tmp);
132 if(i<16) {strcpy(
dfterrmsg,
"unsupported file format"); fclose(fp);
return(3);}
134 i=roikbq_fgets(fp, 14, tmp);
if(i>11 && isalnum((
int)tmp[0])) roi_nr++;
137 roikbq_move_to_next_line(fp); roikbq_move_to_next_line(fp);
140 c=fgetc(fp);
if(c==EOF)
break;
if(c!=
'\n') frame_nr++;
141 roikbq_move_to_next_line(fp);
143 if(roi_nr<1 || frame_nr<1) {
144 strcpy(
dfterrmsg,
"unsupported file format"); fclose(fp);
return(3);}
148 if(ret) {strcpy(
dfterrmsg,
"out of memory"); fclose(fp);
return(4);}
153 rewind(fp); c=fgetc(fp);
154 if(c==
'#') roikbq_move_to_next_line(fp);
else ungetc(c, fp);
156 j=roikbq_fgets(fp, 16, tmp);
157 if(j<16) {strcpy(
dfterrmsg,
"unsupported file format"); fclose(fp);
return(3);}
159 j=roikbq_fgets(fp, 14, tmp);
if(i>=roi_nr)
continue;
160 k=sscanf(tmp,
"%s %s", s1, s2);
if(k<1)
continue;
172 c=fgetc(fp);
if(c==
'#') roikbq_move_to_next_line(fp);
else ungetc(c, fp);
173 j=roikbq_fgets(fp, 16, tmp);
174 if(j<16) {strcpy(
dfterrmsg,
"unsupported file format"); fclose(fp);
return(3);}
176 roikbq_strip_spaces(dft->
studynr);
178 j=roikbq_fgets(fp, 14, tmp);
if(i>=nr)
continue;
179 k=sscanf(tmp,
"%s", s1);
if(k<1) s1[0]=
'\0';
187 for(j=i; j<nr; j++) strcpy(dft->
voi[dft->
voiNr+j].
place,
"");
189 c=fgetc(fp);
if(c==
'#') roikbq_move_to_next_line(fp);
else ungetc(c, fp);
190 j=roikbq_fgets(fp, 16, tmp);
191 if(j<16) {strcpy(
dfterrmsg,
"unsupported file format"); fclose(fp);
return(3);}
192 if(strstr(tmp,
"Times")) dft->
timetype=3;
193 else if(strstr(tmp,
"Start")) dft->
timetype=1;
194 else if(strstr(tmp,
"End")) dft->
timetype=2;
196 if(strstr(tmp,
"sec")) dft->
timeunit=TUNIT_SEC;
else dft->
timeunit=TUNIT_MIN;
198 j=roikbq_fgets(fp, 14, tmp);
if(i>=nr)
continue;
205 k=0; c=fgetc(fp);
if(c==
'#') roikbq_move_to_next_line(fp);
else ungetc(c, fp);
206 while((j=roikbq_fgets(fp, 16, tmp))>15) {
207 if(k>=frame_nr)
break;
208 roikbq_strip_spaces(tmp);
if(strlen(tmp)==0)
continue;
211 dft->
x1[k]=dft->
x2[k]=nan(
"");
213 sscanf(tmp,
"%lf %lf", &a, &b); dft->
x1[k]=a; dft->
x2[k]=b;
214 dft->
x[k]=0.5*(dft->
x1[k] + dft->
x2[k]);
216 dft->
x1[k]=dft->
x[k]=dft->
x2[k]=atof(tmp);
218 dft->
x2[k]=dft->
x[k]=dft->
x1[k]=atof(tmp);
220 if(dft->
x[k]<-3.e38) dft->
x[k]=nan(
"");
222 j=roikbq_fgets(fp, 14, tmp);
if(i>=nr || j<13)
continue;
223 roikbq_strip_spaces(tmp);
224 if(!strlen(tmp) || !strcmp(tmp,
".")) dft->
voi[dft->
voiNr+i].
y[k]=nan(
"");
232 for(l=i; l<nr; l++) dft->
voi[dft->
voiNr+l].
y[k]=nan(
"");
234 c=fgetc(fp);
if(c==
'#') roikbq_move_to_next_line(fp);
else ungetc(c, fp);
236 for(i=k; i<frame_nr; i++) {
238 for(j=dft->
voiNr; j<dft->voiNr+nr; j++) dft->
voi[j].
y[i]=nan(
"");
243 if(strstr(fname,
".nci")==NULL && strstr(fname,
".NCI")==NULL)
244 strcpy(dft->
unit,
"kBq/ml");
245 else strcpy(dft->
unit,
"nCi/ml");
248 for(i=0; i<dft->
frameNr; i++) dft->
w[i]=1.0;