85 int ret, m, i, fi, pi, xi, yi, frame, plane, prev_frame, prev_plane;
86 int dimx, dimy, dimz, planeNr, frameNr, blkNr=0, pxlNr;
94 float *fdata=NULL, *fptr;
97 if(
IMG_TEST) printf(
"imgReadEcat7(%s, *img)\n", fname);
99 if(fname==NULL)
return(1);
130 prev_plane=plane=-1; prev_frame=frame=-1; frameNr=planeNr=0; ret=0;
134 else frame=matval.
gate;
135 if(plane!=prev_plane) {frameNr=1; planeNr++;}
136 else {frameNr++;
if(prev_frame>0 && frame!=prev_frame+1) {ret=1;
break;}}
137 prev_plane=plane; prev_frame=frame;
145 if(
IMG_TEST>2) printf(
"frameNr=%d planeNr=%d\n", frameNr, planeNr);
146 if(ret==1 || (frameNr*planeNr != mlist.
matrixNr)) {
184 planeNr=dimz=dimy=1; dimx=0;
188 default: dimx=dimy=dimz=planeNr=0; ret=-1;
191 if(ret || pxlNr<1 || planeNr<1) {
196 ret=
imgAllocate(img, planeNr, dimy, dimx, frameNr);
236 if(ret || fdata==NULL) {
273 for(i=0, fptr=fdata; i<dimz*pxlNr; i++, fptr++)
279 for(pi=0; pi<dimz; pi++) {
280 for(yi=0, fptr=fdata+pi*pxlNr; yi<dimy; yi++)
for(xi=0; xi<dimx; xi++)
281 img->
m[pi][yi][xi][fi]= *fptr++;
286 for(pi=0; pi<dimz; pi++) img->
planeNumber[pi]=pi+1;
289 prev_plane=plane=-1; prev_frame=frame=-1; pi=fi=-1;
293 else frame=matval.
gate;
294 if(plane!=prev_plane) {fi=0; pi++;}
else fi++;
305 if(ret || fdata==NULL) {
342 for(i=0, fptr=fdata; i<pxlNr; i++, fptr++)
348 for(yi=0, fptr=fdata; yi<dimy; yi++)
for(xi=0; xi<dimx; xi++)
349 img->
m[pi][yi][xi][fi]= *fptr++;
352 prev_plane=plane; prev_frame=frame;
359 for(pi=0; pi<img->
dimz; pi++)
360 for(yi=0; yi<img->
dimy; yi++)
for(xi=0; xi<img->
dimx; xi++)
361 for(fi=0; fi<img->
dimt; fi++)
385 int fi, pi, xi, yi, pxlNr, matrixId, ret;
389 if(
IMG_TEST) printf(
"imgWriteEcat7(%s, *img)\n", fname);
392 if(fname==NULL)
return(1);
409 fdata=(
float*)malloc(pxlNr*
sizeof(
float));
447 for(fi=0; fi<img->
dimt; fi++) {
454 for(pi=0; pi<img->
dimz; pi++)
455 for(yi=0; yi<img->
dimy; yi++)
for(xi=0; xi<img->
dimx; xi++)
456 *fptr++=img->
m[pi][yi][xi][fi];
475 if(
IMG_TEST) {printf(
"matrixId=%d ret=%d\n", matrixId, ret);}
480 free(fdata); fclose(fp);
503 int fi, pi, xi, yi, pxlNr, matrixId, ret;
507 if(
IMG_TEST) printf(
"imgWrite2DEcat7(%s, *img)\n", fname);
510 if(fname==NULL) {
return(1);}
528 fdata=(
float*)malloc(pxlNr*
sizeof(
float));
558 for(fi=0; fi<img->
dimt; fi++)
for(pi=0; pi<img->
dimz; pi++) {
565 for(yi=0; yi<img->
dimy; yi++)
for(xi=0; xi<img->
dimx; xi++)
566 *fptr++=img->
m[pi][yi][xi][fi];
583 if(
IMG_TEST) {printf(
"matrixId=%d ret=%d\n", matrixId, ret);}
588 free(fdata); fclose(fp);
610 int fi, pi, xi, yi, pxlNr, matrixId, ret;
614 if(
IMG_TEST) printf(
"imgWritePolarmap(%s, *img)\n", fname);
617 if(fname==NULL)
return(1);
633 fdata=(
float*)malloc(pxlNr*
sizeof(
float));
644 for(fi=0; fi<img->
dimt; fi++) {
651 for(pi=0; pi<img->
dimz; pi++)
652 for(yi=0; yi<img->
dimy; yi++)
for(xi=0; xi<img->
dimx; xi++)
653 *fptr++=img->
m[pi][yi][xi][fi];
662 if(
IMG_TEST) {printf(
"matrixId=%d ret=%d\n", matrixId, ret);}
667 free(fdata); fclose(fp);
682 #ifndef __STRICT_ANSI__
683 struct tm *scanStartTime;
692 #ifndef __STRICT_ANSI__
697 scanStartTime = localtime(<);
698 if(scanStartTime!=NULL) {
699 scanStartTime->tm_hour -= (timezone/3600);
735 #ifndef __STRICT_ANSI__
736 struct tm *scanStartTime;
755 #ifndef __STRICT_ANSI__
760 scanStartTime = localtime(<);
761 if(scanStartTime!=NULL) {
762 scanStartTime->tm_hour += (timezone/3600);
830 int planeNr, frameNr, blkNr=0;
839 if(
IMG_TEST) printf(
"\nimgReadEcat7Header(%s, *img)\n", fname);
965 for(i=0, img->
dimx=0; i<img->polarmap_num_rings; i++)
985 if(h==NULL)
return(0);
1011 if(
IMG_TEST) printf(
"\nimgReadEcat7FirstFrame(%s, *img)\n", fname);
1053 int ret, m, i, pi, xi, yi, frame, plane, seqplane, pxlNr;
1062 float *fdata=NULL, *fptr;
1065 if(
IMG_TEST) printf(
"\nimgReadEcat7Frame(%s, %d, *img, %d)\n",
1066 fname, frame_to_read, frame_index);
1101 ret=0; seqplane=-1; pxlNr=img->
dimx*img->
dimy;
1106 else frame=matval.
gate;
1107 if(frame!=frame_to_read)
continue;
1112 if(
IMG_TEST>4) printf(
"reading matrix %d,%d\n", frame, plane);
1119 }
else if(img->
dimz>1) {
1126 if(ret || fdata==NULL) {
1133 img->
mid[frame_index]=0.5*(img->
start[frame_index]+img->
end[frame_index]);
1139 img->
mid[frame_index]=0.5*(img->
start[frame_index]+img->
end[frame_index]);
1140 }
else if(img->
dimz>1) {
1143 img->
mid[frame_index]=0.5*(img->
start[frame_index]+img->
end[frame_index]);
1146 for(i=0, fptr=fdata; i<img->
dimz*pxlNr; i++, fptr++)
1153 img->
mid[frame_index]=0.5*(img->
start[frame_index]+img->
end[frame_index]);
1156 for(i=0, fptr=fdata; i<pxlNr; i++, fptr++)
1164 for(pi=0; pi<img->
dimz; pi++) {
1165 if(
IMG_TEST>5) printf(
" putting data into m[%d][][][%d]\n", pi, frame_index);
1166 for(yi=0, fptr=fdata+pi*pxlNr; yi<img->
dimy; yi++)
1167 for(xi=0; xi<img->
dimx; xi++)
1168 img->
m[pi][yi][xi][frame_index]= *fptr++;
1171 if(
IMG_TEST>5) printf(
" putting data into m[%d][][][%d]\n", seqplane, frame_index);
1172 for(yi=0, fptr=fdata; yi<img->
dimy; yi++)
1173 for(xi=0; xi<img->
dimx; xi++)
1174 img->
m[seqplane][yi][xi][frame_index]= *fptr++;
1180 for(pi=0; pi<img->
dimz; pi++)
1181 for(yi=0; yi<img->
dimy; yi++)
for(xi=0; xi<img->
dimx; xi++)
1184 if(
IMG_TEST>3) printf(
"end of matrices.\n");
1189 if(
IMG_TEST>4) printf(
"last_seqplane := %d.\n", seqplane);
1224 int ret=0, pxlNr, zi, xi, yi, matrixId;
1230 void *sub_header=NULL;
1232 float *fdata=NULL, *fptr;
1235 if(
IMG_TEST) printf(
"\nimgWriteEcat7Frame(%s, %d, *img, %d)\n",
1236 fname, frame_to_write, frame_index);
1265 if(access(fname, 0) == -1) {
1270 if(frame_to_write==0) frame_to_write=1;
1294 if(frame_to_write==0) frame_to_write=main_header.
num_frames+1;
1301 printf(
"frame_to_write := %d\n", frame_to_write);
1306 fdata=(
float*)malloc(pxlNr*
sizeof(
float));
1312 else sub_header=&image_header;
1315 else sub_header=(
void*)&image_header;
1317 sub_header=(
void*)&polmap_header;
1323 for(zi=0; zi<img->
dimz; zi++)
1324 for(yi=0; yi<img->
dimy; yi++)
for(xi=0; xi<img->
dimx; xi++)
1325 *fptr++=img->
m[zi][yi][xi][frame_index];
1335 (int)temp_roundf(1000.*(img->
end[frame_index]-img->
start[frame_index]));
1342 (int)temp_roundf(1000.*(img->
end[frame_index]-img->
start[frame_index]));
1348 for(zi=0; zi<img->
dimz; zi++, fptr+=img->
dimx*img->
dimy) {
1353 (int)temp_roundf(1000.*img->
start[frame_index]);
1355 (int)temp_roundf(1000.*(img->
end[frame_index]-img->
start[frame_index]));
1361 (int)temp_roundf(1000.*img->
start[frame_index]);
1363 (int)temp_roundf(1000.*(img->
end[frame_index]-img->
start[frame_index]));
1374 (int)temp_roundf(1000.*(img->
end[frame_index]-img->
start[frame_index]));
1377 free(fdata); fclose(fp);
1403 for(i=0; i<polmap_header->
num_rings; i++) {
1423 if(img->
dimz==239) {
1454 for(i=0; i<49; i++) image_header->
fill_user[i]=0;
int ecat7Write2DScanMatrix(FILE *fp, int matrix_id, ECAT7_2Dscanheader *h, float *fdata)
int imgAllocate(IMG *image, int planes, int rows, int columns, int frames)
int imgWritePolarmap(const char *fname, IMG *img)
char radiopharmaceutical[32]
int ecat7ReadScanMatrix(FILE *fp, int first_block, int last_block, ECAT7_scanheader *h, float **fdata)
void imgEmpty(IMG *image)
int imgGetEcat7Fileformat(ECAT7_mainheader *h)
float ecat_calibration_factor
float polarmap_ring_position[MAX_POLARMAP_NUM_RINGS]
short int patient_orientation
int ecat7WritePolarmapMatrix(FILE *fp, int matrix_id, ECAT7_polmapheader *h, float *fdata)
void imgGetEcat7MHeader(IMG *img, ECAT7_mainheader *h)
int imgReadEcat7Frame(const char *fname, int frame_to_read, IMG *img, int frame_index)
short int polarmap_start_angle
int ecat7Read2DScanMatrix(FILE *fp, int first_block, int last_block, ECAT7_2Dscanheader *h, float **fdata)
int imgWriteEcat7(const char *fname, IMG *img)
void imgUnitToEcat7(IMG *img, ECAT7_mainheader *h)
int imgWriteEcat7Frame(const char *fname, int frame_to_write, IMG *img, int frame_index)
#define IMG_STATUS_OCCUPIED
int ecat7ReadScanheader(FILE *fp, int blk, ECAT7_scanheader *h)
void imgSetEcat7MHeader(IMG *img, ECAT7_mainheader *h)
int ecat7ReadImageMatrix(FILE *fp, int first_block, int last_block, ECAT7_imageheader *h, float **fdata)
char * imgIsotope(IMG *img)
char studyDescription[32]
int ecat7ReadMainheader(FILE *fp, ECAT7_mainheader *h)
#define MAX_POLARMAP_NUM_RINGS
#define IMG_STATUS_INITIALIZED
int polarmap_sectors_per_ring[MAX_POLARMAP_NUM_RINGS]
int ecat7GatherMatlist(ECAT7_MATRIXLIST *ml, short int do_planes, short int do_frames, short int do_gates, short int do_beds)
int imgEcat7Supported(ECAT7_mainheader *h)
int ecat7ReadPolarmapMatrix(FILE *fp, int first_block, int last_block, ECAT7_polmapheader *h, float **fdata)
int imgReadEcat7Header(const char *fname, IMG *img)
#define IMG_TYPE_POLARMAP
int imgReadEcat7(const char *fname, IMG *img)
int ecat7_val_to_id(int frame, int plane, int gate, int data, int bed)
int ecat7Read2DScanheader(FILE *fp, int blk, ECAT7_2Dscanheader *h)
void ecat7SortMatlistByFrame(ECAT7_MATRIXLIST *ml)
short int polarmap_ring_angle[MAX_POLARMAP_NUM_RINGS]
int ecat7GetPlaneAndFrameNr(ECAT7_MATRIXLIST *mlist, ECAT7_mainheader *h, int *plane_nr, int *frame_nr)
void ecat7InitMatlist(ECAT7_MATRIXLIST *mlist)
void imgUnitFromEcat7(IMG *img, ECAT7_mainheader *h)
void ecat7PrintMatlist(ECAT7_MATRIXLIST *ml)
void ecat7EmptyMatlist(ECAT7_MATRIXLIST *mlist)
int ecat7ReadPolmapheader(FILE *fp, int blk, ECAT7_polmapheader *h)
char user_process_code[10]
char studyNr[MAX_STUDYNR_LEN+1]
int ecat7GetMatrixBlockSize(ECAT7_MATRIXLIST *mlist, int *blk_nr)
int ecat7WriteImageMatrix(FILE *fp, int matrix_id, ECAT7_imageheader *h, float *fdata)
int ecat7WriteMainheader(FILE *fp, ECAT7_mainheader *h)
FILE * ecat7Create(const char *fname, ECAT7_mainheader *h)
int ecat7WriteScanMatrix(FILE *fp, int matrix_id, ECAT7_scanheader *h, float *fdata)
void imgSetEcat7SHeader(IMG *img, void *h)
void ecat7_id_to_val(int matrix_id, ECAT7_Matval *matval)
int ecat7CheckMatlist(ECAT7_MATRIXLIST *ml)
int ecat7ReadMatlist(FILE *fp, ECAT7_MATRIXLIST *ml)
char study_description[32]
void ecat7SortMatlistByPlane(ECAT7_MATRIXLIST *ml)
char radiopharmaceutical[32]
int imgReadEcat7FirstFrame(const char *fname, IMG *img)
int ecat7ReadImageheader(FILE *fp, int blk, ECAT7_imageheader *h)
int imgWrite2DEcat7(const char *fname, IMG *img)
void imgSetStatus(IMG *img, int status_index)