66 {
67 int fi, fj, ri, ii, li, rn, fn, n, ret, colNr=10, lineNr=0;
68 char *cptr, tmp[512];
70 int title_line, roi_col, roi_nr=0, frame_nr=0;
71
72 if(verbose>0) printf("%s('%s', *dft)\n", __func__, cptfile);
73
74
75 if(cptfile==NULL || strlen(cptfile)<1 || dft==NULL) {
76 strcpy(
cpterrmsg,
"program error");
return(1);
77 }
79
80
81
82
84 ret=
iftRead(&ift, cptfile, 0, verbose-1);
85 if(ret) {
88 }
89 if(verbose>0)
iftWrite(&ift,
"stdout", 0);
90
91
92
93
95 if(title_line<0) {
96 sprintf(
cpterrmsg,
"unsupported filetype");
98 }
99
101 cptr=strtok(tmp, " \t\n\r");
102 if(strcasecmp(cptr, "Frame")!=0) {
103 sprintf(
cpterrmsg,
"unsupported filetype");
105 }
106 cptr=strtok(NULL, " \t\n\r");
107 colNr=10; if(strcasecmp(cptr, "ROI")!=0) colNr++;
108 if(colNr==10) roi_col=1; else roi_col=2;
109 if(verbose>1) printf("title_line=%d colNr=%d\n", title_line, colNr);
110
111
112
113
114 for(ii=lineNr=0; ii<ift.
keyNr; ii++) {
115
116 if(ii<title_line+2) {ift.
item[ii].
sw=0;
continue;}
117
119 ift.
item[ii].
sw=0;
continue;}
120
122 ift.
item[ii].
sw=0;
continue;}
123
124 n=0; strncpy(tmp, ift.
item[ii].
value, 511); tmp[511]=(char)0;
125 cptr=strtok(tmp, " \t\n\r");
126 while(cptr!=NULL) {n++; cptr=strtok(NULL, " \t\n\r");}
127 if(n!=colNr) {ift.
item[ii].
sw=0;
continue;}
128 ift.
item[ii].
sw=1; lineNr++;
129 }
130 if(lineNr<1) {
131 sprintf(
cpterrmsg,
"unsupported filetype");
133 }
134 if(verbose>1) printf("lineNr=%d\n", lineNr);
135
136
137
138
139 double tactable[colNr][lineNr];
140 for(ii=0, n=0; ii<ift.
keyNr; ii++)
if(ift.
item[ii].
sw==1) {
141 ret=sscanf(ift.
item[ii].
value,
"%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",
142 &tactable[0][n], &tactable[1][n], &tactable[2][n], &tactable[3][n],
143 &tactable[4][n], &tactable[5][n], &tactable[6][n], &tactable[7][n],
144 &tactable[8][n], &tactable[9][n], &tactable[10][n] );
145 n++;
146 }
147 if(verbose>2) {
148 printf("\n");
149 for(fi=0; fi<lineNr; fi++) {
150 for(ri=0; ri<colNr; ri++) printf(" %g", tactable[ri][fi]);
151 printf("\n");
152 }
153 printf("\n");
154 }
155
156
157
158
159 for(fi=1, roi_nr=frame_nr=1; fi<lineNr; fi++) {
160
161 for(fj=0, fn=rn=0; fj<fi; fj++) {
162 if(tactable[roi_col][fj]==tactable[roi_col][fi]) rn++;
163 if(tactable[0][fj]==tactable[0][fi]) fn++;
164 }
165 if(rn==0) roi_nr++;
166 if(fn==0) frame_nr++;
167 }
168 if(verbose>1) printf("roi_nr=%d frame_nr=%d\n", roi_nr, frame_nr);
169
170 for(fi=0, n=0; fi<lineNr; fi++) if(tactable[0][fi]>n) n=tactable[0][fi];
171 if(n!=frame_nr) {
172 sprintf(
cpterrmsg,
"frames are not consequential");
174 }
175
176 if(roi_nr*frame_nr!=lineNr) {
177 sprintf(
cpterrmsg,
"missing or extra samples");
179 }
180
181
182
183
184
185
187 if(ret) {
188 sprintf(
cpterrmsg,
"cannot allocate memory");
190 }
192
193
194 int roi_id[roi_nr];
195 n=0; roi_id[n++]=tactable[roi_col][0];
196 for(fi=1; fi<lineNr; fi++) {
197 for(fj=0; fj<fi; fj++)
198 if(tactable[roi_col][fj]==tactable[roi_col][fi]) continue;
199 roi_id[n++]=(int)(0.5+tactable[roi_col][fi]);
200 }
201 if(verbose>2) {
202 printf("List of ROI ID numbers:\n");
203 for(ri=0; ri<roi_nr; ri++) printf(" %d : %d\n", ri+1, roi_id[ri]);
204 }
205
206
207 for(int ri=0; ri<roi_nr; ri++) {
208 fi=0;
209 for(li=0; li<lineNr; li++) if(roi_id[ri]==(int)(0.5+tactable[roi_col][li])) {
210
211 dft->
voi[ri].
y[fi]=tactable[colNr-8][li];
212
213 if(fi==0) {
214
215 dft->
voi[ri].
size=tactable[colNr-1][li];
216
217 sprintf(dft->
voi[ri].
voiname,
"ROI%03d", roi_id[ri]);
218 if(colNr>10) sprintf(dft->
voi[ri].
place,
"Pl%04.0f", tactable[1][ri]);
221 }
222
223 if(ri==0) {
224 dft->
x1[fi]=tactable[colNr-4][li];
225 dft->
x2[fi]=dft->
x1[fi]+tactable[colNr-3][li];
226 dft->
x[fi]=0.5*(dft->
x1[fi]+dft->
x2[fi]);
227 }
228 fi++;
229 }
230 }
231
233
234
235
236
238
239
240
241
243 if(ii>=0) {
244 strncpy(tmp, ift.
item[ii].
value+12, 511); tmp[511]=(char)0;
245 cptr=strtok(tmp, " \t\n\r,;");
248 } else {
249 strcpy(tmp,
"Units"); ii=
iftGet(&ift, tmp, 0);
250 if(ii>=0) {
253 }
254 }
255
256
257
258
261 if(ii>=0) {
262 cptr=strchr(ift.
item[ii].
key,
'\"');
263 if(cptr!=NULL) {
266 cptr=strchr(dft->
voi[0].
name,
'\"');
267 if(cptr!=NULL) *cptr=(char)0;
268 }
269 }
273 }
274
275
276
277
279 if(ii>=0) {
281 if(verbose>2) printf("Plane %d\n", n);
282 if(n>0)
for(ri=0; ri<dft->
voiNr; ri++) snprintf(dft->
voi[ri].
place, 7,
"Pl%04d", n);
283 } else {
285 if(ii>=0) {
287 if(verbose>2) printf("Plane %d\n", n);
288 if(n>0)
for(ri=0; ri<dft->
voiNr; ri++) snprintf(dft->
voi[ri].
place, 7,
"Pl%04d", n);
289 }
290 }
291
292
294 for(fi=0; fi<dft->
frameNr; fi++) dft->
w[fi]=1.0;
295
296
298 return(0);
299}
int cptrnameSplit(char *rname, char *name1, char *name2, char *name3, int max_name_len)
int dftSetmem(DFT *data, int frameNr, int voiNr)
void dftSec2min(DFT *dft)
int iftRead(IFT *ift, char *filename, int is_key_required, int verbose)
int iftWrite(IFT *ift, char *filename, int verbose)
int iftFindNthValue(IFT *ift, char *str, int n, int verbose)
int iftFindNthKey(IFT *ift, char *str, int n, int verbose)
int iftGet(IFT *ift, char *key, int verbose)
#define MAX_REGIONNAME_LEN
int studynr_from_fname(char *fname, char *studynr)
#define MAX_REGIONSUBNAME_LEN
char studynr[MAX_STUDYNR_LEN+1]
char unit[MAX_UNITS_LEN+1]
char voiname[MAX_REGIONSUBNAME_LEN+1]
char name[MAX_REGIONNAME_LEN+1]
char hemisphere[MAX_REGIONSUBNAME_LEN+1]
char place[MAX_REGIONSUBNAME_LEN+1]