39 if(rname==NULL || name1==NULL || name2==NULL || name3==NULL)
return(0);
40 if(max_name_len<1)
return(0);
41 name1[0]=name2[0]=name3[0]=(char)0;
43 cptr=strtok(temp,
" _\t\n\r");
if(cptr==NULL)
return(nr);
44 cptr2=strstr(cptr,
"dx");
if(cptr2==NULL) cptr2=strstr(cptr,
"sin");
45 if(cptr2!=NULL) {strcpy(name2, cptr2); *cptr2=(char)0; nr++;}
46 else strcpy(name2,
".");
47 strncpy(name1, cptr, max_name_len); name1[max_name_len]=(char)0; nr++;
48 cptr=strtok(NULL,
" _\t\n\r");
if(cptr==NULL)
return(nr);
49 strncpy(name3, cptr, max_name_len); name3[max_name_len]=(char)0; nr++;
67 int fi, fj, ri, ii, li, rn, fn, n, ret, colNr=10, lineNr=0;
70 int title_line, roi_col, roi_nr=0, frame_nr=0;
72 if(verbose>0) printf(
"%s('%s', *dft)\n", __func__, cptfile);
75 if(cptfile==NULL || strlen(cptfile)<1 || dft==NULL) {
76 strcpy(
cpterrmsg,
"program error");
return(1);
84 ret=
iftRead(&ift, cptfile, 0, verbose-1);
89 if(verbose>0)
iftWrite(&ift,
"stdout", 0);
96 sprintf(
cpterrmsg,
"unsupported filetype");
101 cptr=strtok(tmp,
" \t\n\r");
102 if(strcasecmp(cptr,
"Frame")!=0) {
103 sprintf(
cpterrmsg,
"unsupported filetype");
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);
114 for(ii=lineNr=0; ii<ift.
keyNr; ii++) {
116 if(ii<title_line+2) {ift.
item[ii].
sw=0;
continue;}
119 ift.
item[ii].
sw=0;
continue;}
122 ift.
item[ii].
sw=0;
continue;}
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++;
131 sprintf(
cpterrmsg,
"unsupported filetype");
134 if(verbose>1) printf(
"lineNr=%d\n", lineNr);
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] );
149 for(fi=0; fi<lineNr; fi++) {
150 for(ri=0; ri<colNr; ri++) printf(
" %g", tactable[ri][fi]);
159 for(fi=1, roi_nr=frame_nr=1; fi<lineNr; fi++) {
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++;
166 if(fn==0) frame_nr++;
168 if(verbose>1) printf(
"roi_nr=%d frame_nr=%d\n", roi_nr, frame_nr);
170 for(fi=0, n=0; fi<lineNr; fi++)
if(tactable[0][fi]>n) n=tactable[0][fi];
172 sprintf(
cpterrmsg,
"frames are not consequential");
176 if(roi_nr*frame_nr!=lineNr) {
177 sprintf(
cpterrmsg,
"missing or extra samples");
188 sprintf(
cpterrmsg,
"cannot allocate memory");
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]);
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]);
207 for(
int ri=0; ri<roi_nr; ri++) {
209 for(li=0; li<lineNr; li++)
if(roi_id[ri]==(
int)(0.5+tactable[roi_col][li])) {
211 dft->
voi[ri].
y[fi]=tactable[colNr-8][li];
215 dft->
voi[ri].
size=tactable[colNr-1][li];
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]);
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]);
244 strncpy(tmp, ift.
item[ii].
value+12, 511); tmp[511]=(char)0;
245 cptr=strtok(tmp,
" \t\n\r,;");
249 strcpy(tmp,
"Units"); ii=
iftGet(&ift, tmp, 0);
262 cptr=strchr(ift.
item[ii].
key,
'\"');
266 cptr=strchr(dft->
voi[0].
name,
'\"');
267 if(cptr!=NULL) *cptr=(char)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);
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);
294 for(fi=0; fi<dft->
frameNr; fi++) dft->
w[fi]=1.0;
317 int ri, fi, ret, n, roi_id;
319 char cptfile[FILENAME_MAX], tmp[256];
322 if(dft==NULL || dft->
voiNr<1 || dft->
frameNr<1 || strlen(filename)<1) {
323 strcpy(
cpterrmsg,
"program error");
return(1);
325 if(cpt_format!=0) strcpy(
cpterrmsg,
"cpt format not supported yet");
329 strcpy(
cpterrmsg,
"error in data file");
return(2);
335 for(ri=0; ri<dft->
voiNr; ri++) {
337 strcpy(cptfile, filename);
339 snprintf(cptfile, FILENAME_MAX,
"%s_%s.cpt", filename, dft->
voi[ri].
place);
341 snprintf(cptfile, FILENAME_MAX,
"%s.cpt", filename);
344 fp=fopen(cptfile,
"w");
346 sprintf(
cpterrmsg,
"cannot open file for write");
return(5);
349 if(strlen(dft->
unit)==0) strcpy(tmp,
"unknown");
else strcpy(tmp, dft->
unit);
351 fprintf(fp,
"# In units of %s\n", tmp);
353 if(strncasecmp(dft->
voi[ri].
place,
"Pl", 2)==0)
354 sprintf(tmp,
"%d", atoi(dft->
voi[ri].
place+2));
355 else if(strlen(dft->
voi[ri].
place)==0 || strcmp(dft->
voi[ri].
place,
".")==0)
359 fprintf(fp,
"Plane %-6.6s Scan Start Date (d m y): 1 1 1980 Scan Start Time (h m s): 0 0 0\n\n", tmp);
361 fprintf(fp,
"Frame ROI ID ROI Avg #pixels ROI Total %%Stdev Offset Duration ROI Surf. ROI Vol.\n");
362 fprintf(fp,
" (screen) (sec) (sec) mmxmm mmxmmxmm\n");
364 for(fi=0, n=ri; fi<dft->
frameNr; fi++) {
372 roi_id=atoi(dft->
voi[ri].
voiname+3);
else roi_id=1;
373 fprintf(fp,
"%-6d %-3d %-8.8s %11.4e %5d %10.4e %7.1f %9.1f %9.1f %10.4e %10.4e\n",
374 fi+1, roi_id, tmp, dft->
voi[ri].
y[fi], 0, 0.0, 0.0,
375 dft->
x1[fi], dft->
x2[fi]-dft->
x1[fi], 0.0, dft->
voi[ri].
size );
377 while(n<dft->voiNr-1 && strcasecmp(dft->
voi[ri].
place, dft->
voi[n+1].
place)==0) {
383 roi_id=atoi(dft->
voi[n].
voiname+3);
else roi_id=n-ri+1;
384 fprintf(fp,
"%-6d %-3d %-8.8s %11.4e %5d %10.4e %7.1f %9.1f %9.1f %10.4e %10.4e\n",
385 fi+1, roi_id, tmp, dft->
voi[n].
y[fi], 0, 0.0, 0.0,
386 dft->
x1[fi], dft->
x2[fi]-dft->
x1[fi], 0.0, dft->
voi[n].
size );
393 fprintf(fp,
"\n# %d Frame(s) analyzed.\n", dft->
frameNr);