100 char *cptr, basefile[FILENAME_MAX], temp[FILENAME_MAX];
102 if(upetname==NULL || strlen(upetname)==0)
return(0);
103 if(verbose>0) printf(
"\n%s(%s, *str, *str)\n", __func__, upetname);
106 strlcpy(basefile, upetname, FILENAME_MAX);
107 cptr=strrchr(basefile,
'.');
109 if(strncasecmp(cptr,
".HDR", 4)==0 || strncasecmp(cptr,
".IMG", 4)==0 )
112 cptr=strrchr(basefile,
'.');
114 if(strncasecmp(cptr,
".IMG", 4)==0 )
117 if(verbose>1) printf(
"\n basefile := %s\n", basefile);
120 strlcpy(temp, basefile, FILENAME_MAX-4); strcat(temp,
".hdr");
121 if(access(temp, 0) == -1) {
122 strlcpy(temp, basefile, FILENAME_MAX-8); strcat(temp,
".img.hdr");
123 if(access(temp, 0) == -1) {
124 if(verbose>0) printf(
"\n hdr file not found or accessible.\n");
131 printf(
"\n %s was not identified as microPET header file.\n", temp);
135 if(hdrfile!=NULL)
strlcpy(hdrfile, temp, FILENAME_MAX);
138 strlcpy(temp, basefile, FILENAME_MAX); strcat(temp,
".img");
139 if(access(temp, 0) == -1) {
140 if(verbose>0) printf(
"\n %s not found or accessible.\n", temp);
144 if(imgfile!=NULL)
strlcpy(imgfile, temp, FILENAME_MAX);
202#pragma clang diagnostic push
203#pragma clang diagnostic ignored "-Wmissing-field-initializers"
204 struct tm scanstart={0};
205#pragma clang diagnostic pop
207 if(fp==NULL || scant==NULL)
return 1;
211 n=sscanf(tmp,
"%s %s %d %d:%d:%d %d", tmp2, tmp3, &scanstart.tm_mday,
212 &scanstart.tm_hour, &scanstart.tm_min, &scanstart.tm_sec, &i);
214 scanstart.tm_year=i-1900;
215 if(strcasecmp(tmp3,
"Jan")==0) scanstart.tm_mon=0;
216 else if(strcasecmp(tmp3,
"Feb")==0) scanstart.tm_mon=1;
217 else if(strcasecmp(tmp3,
"Mar")==0) scanstart.tm_mon=2;
218 else if(strcasecmp(tmp3,
"Apr")==0) scanstart.tm_mon=3;
219 else if(strcasecmp(tmp3,
"May")==0) scanstart.tm_mon=4;
220 else if(strcasecmp(tmp3,
"Jun")==0) scanstart.tm_mon=5;
221 else if(strcasecmp(tmp3,
"Jul")==0) scanstart.tm_mon=6;
222 else if(strcasecmp(tmp3,
"Aug")==0) scanstart.tm_mon=7;
223 else if(strcasecmp(tmp3,
"Sep")==0) scanstart.tm_mon=8;
224 else if(strcasecmp(tmp3,
"Oct")==0) scanstart.tm_mon=9;
225 else if(strcasecmp(tmp3,
"Nov")==0) scanstart.tm_mon=10;
226 else if(strcasecmp(tmp3,
"Dec")==0) scanstart.tm_mon=11;
227 scanstart.tm_isdst=-1;
229 *scant=
timegm(&scanstart);
if(*scant<0)
return 4;
253 int dimx, dimy, dimz=1, dimt=1;
254 int i, fi, data_type, data_bytes, little;
256 float f, cf, bf, *fptr;
262 if(
MICROPET_TEST) printf(
"%s(fp, ift, %d, data)\n", __func__, frame);
265 if(frame<=0 || fp==NULL || ift==NULL || data==NULL)
return(1);
271 if(i<0 || dimt<1)
return 4;
274 if(i<0 || dimx<1)
return 4;
276 if(i<0 || dimy<1)
return 4;
278 if(i<0 || dimz<1)
return 4;
279 long long pxlNr=dimx*dimy*dimz;
280 if(pxlNr<1)
return(4);
281 if(frame>dimt)
return(3);
285 if(i<0 || data_type<1)
return 5;
288 case 2: data_bytes=2; little=1;
break;
289 case 3: data_bytes=4; little=1;
break;
290 case 4: data_bytes=4; little=1;
break;
291 case 5: data_bytes=4; little=0;
break;
292 case 6: data_bytes=2; little=0;
break;
293 case 7: data_bytes=4; little=0;
break;
296 long long rawSize=pxlNr*data_bytes;
298 printf(
" data_type=%d\n data_bytes=%d\n", data_type, data_bytes);
299 printf(
" pxlNr=%lld\n rawSize=%lld\n", pxlNr, rawSize);
303 mdata=(
char*)malloc(rawSize);
if(mdata==NULL)
return(11);
306 long long start_pos=(frame-1)*rawSize;
308 fseeko(fp, start_pos, SEEK_SET);
309 if(ftello(fp)!=start_pos) {
311 free(mdata);
return(7);
317 size_t n=fread(mptr, rawSize, 1, fp);
320 printf(
"could read only %zu bytes when request was %lld\n", n, rawSize);
321 free(mdata);
return(8);
328 if(
MICROPET_TEST>0) {printf(
"byte conversion\n"); fflush(stdout);}
331 case 2:
swabip(mptr, rawSize);
break;
332 case 4:
swawbip(mptr, rawSize);
break;
334 if(
MICROPET_TEST>5) printf(
"unsupported data_type := %d\n", data_type);
335 free(mdata);
return(5);
340 strcpy(key,
"frame"); sprintf(value,
"%d", frame-1);
343 if(i<0 || f<=0.0) {free(mdata);
return(6);}
348 if(i<0 || cf<0.0) {free(mdata);
return 7;}
349 if(
MICROPET_TEST>5) printf(
" calibration_factor := %g\n", cf);
352 if(i<0 || bf<0.0) {free(mdata);
return 7;}
353 if(
MICROPET_TEST>5) printf(
" branching_fraction := %g\n", bf);
354 if(cf>0.0) {f=cf;
if(bf>0.0) f/=bf;}
358 mptr=mdata; fptr=data;
361 for(
long long i=0; i<pxlNr; i++, mptr++, fptr++) *fptr=f*(
float)(*mptr);
365 for(
long long i=0; i<pxlNr; i++, mptr+=2, fptr++) {
366 sptr=(
short int*)mptr; *fptr=f*(float)(*sptr);
371 for(
long long i=0; i<pxlNr; i++, mptr+=4, fptr++) {
372 iptr=(
int*)mptr; *fptr=f*(float)(*iptr);
377 memcpy(fptr, mptr, pxlNr*data_bytes);
378 for(
long long i=0; i<pxlNr; i++, fptr++) *fptr*=f;
382 printf(
"unsupported data_type := %d\n", data_type);
383 free(mdata);
return(5);