29 int m, ret, blkNr=0, dim_x=0, dim_y=0;
30 int frameNr, planeNr, del_nr=0;
31 int frame, plane, prev_frame, prev_plane, seqplane;
43 char *mdata=NULL, *mptr;
47 if(
IMG_TEST) printf(
"ecat63ReadAllToImg(%s, *img)\n", fname);
55 if((fp=fopen(fname,
"rb")) == NULL) {
79 for(
int i=0; i<mlist.
matrixNr-1; i++)
80 for(
int j=i+1; j<mlist.
matrixNr; j++) {
87 printf(
"matrix list after sorting:\n");
95 printf(
" %d entries in matrix list will not be used.\n", del_nr);
100 prev_plane=plane=-1; prev_frame=frame=-1; frameNr=planeNr=0; ret=0;
106 else frame=matval.
gate;
107 if(
IMG_TEST>2) printf(
"frame=%d plane=%d\n", frame, plane);
109 if(plane!=prev_plane) {
110 frameNr=1; planeNr++;
114 if(prev_frame>0 && frame!=prev_frame+1) {ret=1;
break;}
116 prev_plane=plane; prev_frame=frame;
124 if(
IMG_TEST) printf(
"frameNr=%d planeNr=%d\n", frameNr, planeNr);
125 if(ret==1 || (frameNr*planeNr != mlist.
matrixNr-del_nr)) {
149 sprintf(
ecat63errmsg,
"cannot read matrix %u subheader",
155 if(
IMG_TEST>1) printf(
"allocating memory for %d blocks\n", blkNr);
156 mdata=(
char*)malloc((
size_t)blkNr*
MatBLKSIZE);
if(mdata==NULL) {
161 ret=
imgAllocate(img, planeNr, dim_y, dim_x, frameNr);
175 if(
IMG_TEST>0) printf(
"invalid scan_start_time in mainheader\n");
218 prev_plane=plane=-1; seqplane=-1;
224 if(plane!=prev_plane) {seqplane++; frame=1;}
else frame++;
240 img->
mid[frame-1]=0.5*(img->
start[frame-1]+img->
end[frame-1]);
256 img->
mid[frame-1]=0.5*(img->
start[frame-1]+img->
end[frame-1]);
288 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr++) {
289 img->
m[seqplane][i][j][frame-1]=scale*(float)(*mptr);
292 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr+=2) {
293 sptr=(
short int*)mptr;
294 img->
m[seqplane][i][j][frame-1]=scale*(float)(*sptr);
297 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr+=4) {
299 img->
m[seqplane][i][j][frame-1]=1.0;
302 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr+=4) {
303 memcpy(&img->
m[seqplane][i][j][frame-1], mptr, 4);
304 img->
m[seqplane][i][j][frame-1]*=scale;
336 int frame, plane, m, ret=0;
337 float f, fmax, fmin, g, scale;
338 short int *sdata, *sptr, smin, smax;
345 if(
IMG_TEST) printf(
"ecat63WriteAllImg(%s, *img)\n", fname);
347 if(fname==NULL) {strcpy(
ecat63errmsg,
"invalid ECAT filename");
return(1);}
349 strcpy(
ecat63errmsg,
"image data is empty");
return(2);}
354 strcpy(
ecat63errmsg,
"too large matrix size");
return(1);}
369 else {strcpy(
ecat63errmsg,
"invalid filetype");
return(1);}
387 printf(
" img->scanStart := %ld\n", (
long int)img->
scanStart);
388 printf(
" -> tm_year := %d\n", tm.tm_year);
389 printf(
" -> tm_hour := %d\n", tm.tm_hour);
398 if(
IMG_TEST>0) printf(
"invalid scan_start_time in IMG\n");
410 sdata=(
short int*)malloc((
size_t)img->
dimx*img->
dimy*
sizeof(
short int));
411 if(sdata==NULL) {strcpy(
ecat63errmsg,
"out of memory");
return(4);}
415 if(fp==NULL) {strcpy(
ecat63errmsg,
"cannot write ECAT file");
return(3);}
455 for(plane=1; plane<=img->
dimz;plane++)
for(frame=1;frame<=img->
dimt;frame++) {
458 fmin=fmax=f=img->
m[plane-1][0][0][frame-1];
459 for(
int i=0; i<img->
dimy; i++)
for(
int j=0; j<img->
dimx; j++) {
460 f=img->
m[plane-1][i][j][frame-1];
461 if(f>fmax) fmax=f;
else if(f<fmin) fmin=f;
464 if(fabs(fmin)>fabs(fmax)) g=fabs(fmin);
else g=fabs(fmax);
466 sprintf(
ecat63errmsg,
"invalid pixel values on pl%02d fr%02d (%d).", plane, frame, ret);
467 fclose(fp); remove(fname); free(sdata);
470 if(g>0.0) scale=32766./g;
else scale=1.0;
471 if(!isfinite(scale)) scale=1.0;
475 for(
int i=0; i<img->
dimy; i++)
for(
int j=0; j<img->
dimx; j++) {
476 *sptr=(
short int)
temp_roundf(scale*img->
m[plane-1][i][j][frame-1]);
508 if(
IMG_TEST) printf(
" writing matnum=%d\n", m);
517 sprintf(
ecat63errmsg,
"cannot write data on pl%02d fr%02d (%d).",
519 fclose(fp); remove(fname); free(sdata);
524 if(
IMG_TEST) printf(
" %d matrices written in %s\n", n, fname);
527 fclose(fp); free(sdata);
551 int m, ret, blkNr=0, dim_x=0, dim_y=0, del_nr=0;
552 int frameNr, planeNr, datatype=0, firstm=0, isFirst=0;
553 int frame, plane, prev_frame, prev_plane, prev_frameNr=0;
565 char *mdata=NULL, *mptr;
569 if(
IMG_TEST) printf(
"ecat63ReadPlaneToImg(%s, *img)\n", fname);
571 if(fname==NULL) {strcpy(
ecat63errmsg,
"invalid ECAT filename");
return(2);}
573 strcpy(
ecat63errmsg,
"image data not initialized");
return(2);}
576 if((fp=fopen(fname,
"rb")) == NULL) {
577 strcpy(
ecat63errmsg,
"cannot open ECAT file");
return(3);}
581 sprintf(
ecat63errmsg,
"cannot read main header (%d)", ret);
582 fclose(fp);
return(4);
590 sprintf(
ecat63errmsg,
"cannot read matrix list (%d)", ret);
591 fclose(fp);
return(5);
594 strcpy(
ecat63errmsg,
"matrix list is empty"); fclose(fp);
return(5);}
596 for(
int i=0; i<mlist.
matrixNr-1; i++)
for(
int j=i+1; j<mlist.
matrixNr; j++) {
598 tmpMatdir=mlist.
matdir[i];
606 printf(
" %d entries in matrix list will not be used.\n", del_nr);
612 isFirst=0; prev_frameNr=img->
dimt;
626 if(matval.
plane>prev_plane) {plane=matval.
plane;
break;}
632 sprintf(
ecat63errmsg,
"ECAT file contains no matrices");
635 sprintf(
ecat63errmsg,
"ECAT file contains no more planes");
640 if(
IMG_TEST) printf(
"Next plane to read: %d\n", plane);
645 prev_frame=frame=-1; frameNr=0; ret=0; planeNr=1;
649 if(matval.
plane<plane)
continue;
else if(matval.
plane>plane)
break;
651 else frame=matval.
gate;
654 if(prev_frame>0 && frame!=prev_frame+1) {ret=1;
break;}
674 if(!isFirst && frameNr!=prev_frameNr) {
675 strcpy(
ecat63errmsg,
"different frame nr in different planes");
694 sprintf(
ecat63errmsg,
"cannot read matrix %u subheader",
700 if(
IMG_TEST) printf(
"allocating memory for %d blocks\n", blkNr);
701 mdata=(
char*)malloc((
size_t)blkNr*
MatBLKSIZE);
if(mdata==NULL) {
706 ret=
imgAllocate(img, planeNr, dim_y, dim_x, frameNr);
720 if(
IMG_TEST>0) printf(
"invalid scan_start_time in mainheader\n");
766 if(matval.
plane>plane)
break;
780 img->
mid[frame-1]=0.5*(img->
start[frame-1]+img->
end[frame-1]);
794 img->
mid[frame-1]=0.5*(img->
start[frame-1]+img->
end[frame-1]);
811 sprintf(
ecat63errmsg,
"cannot read matrix %u subheader",
817 if(
IMG_TEST>2) printf(
"scale=%e datatype=%d\n", scale, datatype);
828 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr++) {
829 img->
m[0][i][j][frame-1]=scale*(float)(*mptr);
832 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr+=2) {
833 sptr=(
short int*)mptr;
834 img->
m[0][i][j][frame-1]=scale*(float)(*sptr);
837 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr+=4) {
839 img->
m[0][i][j][frame-1]=scale*(float)(*iptr);
842 for(
int i=0; i<dim_y; i++)
for(
int j=0; j<dim_x; j++, mptr+=4) {
843 memcpy(&img->
m[0][i][j][frame-1], mptr, 4);
844 img->
m[0][i][j][frame-1]*=scale;
884 int n, m, ret=0, add=0;
885 int frameNr, planeNr;
886 int frame, plane, prev_plane;
887 float f, fmax, fmin, g, scale;
888 short int *sdata, *sptr, smin, smax;
898 if(
IMG_TEST) printf(
"ecat63AddImg(%s, *img)\n", fname);
901 if(fname==NULL) {strcpy(
ecat63errmsg,
"invalid ECAT filename");
return(1);}
903 strcpy(
ecat63errmsg,
"image data is empty");
return(2);}
908 strcpy(
ecat63errmsg,
"too large matrix size");
return(2);}
923 else {strcpy(
ecat63errmsg,
"invalid filetype");
return(1);}
941 printf(
" img->scanStart := %ld\n", (
long int)img->
scanStart);
942 printf(
" -> tm_year := %d\n", tm.tm_year);
943 printf(
" -> tm_hour := %d\n", tm.tm_hour);
952 if(
IMG_TEST>0) printf(
"invalid scan_start_time in IMG\n");
963 if(access(fname, 0) != -1) {
964 if(
IMG_TEST) printf(
"Opening existing ECAT file.\n");
967 if((fp=fopen(fname,
"rb+")) == NULL) {
968 strcpy(
ecat63errmsg,
"cannot create ECAT file");
return(3);}
971 sprintf(
ecat63errmsg,
"cannot read main header (%d)", ret);
972 fclose(fp);
return(3);
981 fclose(fp);
return(3);
984 if(
IMG_TEST) printf(
"ECAT file does not exist.\n");
988 if(fp==NULL) {strcpy(
ecat63errmsg,
"cannot create ECAT file");
return(3);}
993 sdata=(
short int*)malloc((
size_t)img->
dimx*img->
dimy*
sizeof(
short int));
994 if(sdata==NULL) {strcpy(
ecat63errmsg,
"out of memory");
return(4);}
1033 for(plane=1; plane<=img->
dimz;plane++)
for(frame=1;frame<=img->
dimt;frame++) {
1036 fmin=fmax=f=img->
m[plane-1][0][0][frame-1];
1037 for(
int i=0; i<img->
dimy; i++)
for(
int j=0; j<img->
dimx; j++) {
1038 f=img->
m[plane-1][i][j][frame-1];
1039 if(f>fmax) fmax=f;
else if(f<fmin) fmin=f;
1042 if(fabs(fmin)>fabs(fmax)) g=fabs(fmin);
else g=fabs(fmax);
1044 sprintf(
ecat63errmsg,
"invalid pixel values on pl%02d fr%02d (%d).", plane, frame, ret);
1045 fclose(fp); remove(fname); free(sdata);
1048 if(g>0.0) scale=32766./g;
else scale=1.0;
1049 if(!isfinite(scale)) scale=1.0;
1053 for(
int i=0; i<img->
dimy; i++)
for(
int j=0; j<img->
dimx; j++) {
1054 *sptr=(
short int)
temp_roundf(scale*img->
m[plane-1][i][j][frame-1]);
1083 if(
IMG_TEST) printf(
" writing matnum=%d\n", m);
1092 sprintf(
ecat63errmsg,
"cannot write data on pl%02d fr%02d (%d).",
1094 fclose(fp); remove(fname); free(sdata);
1099 if(
IMG_TEST) printf(
" %d matrices written in %s\n", n, fname);
1111 sprintf(
ecat63errmsg,
"cannot read matrix list (%d)", ret);
1112 fclose(fp);
return(21);
1115 strcpy(
ecat63errmsg,
"matrix list is empty"); fclose(fp);
return(21);}
1117 for(
int i=0; i<mlist.
matrixNr-1; i++)
for(
int j=i+1; j<mlist.
matrixNr; j++) {
1119 tmpMatdir=mlist.
matdir[i];
1124 prev_plane=plane=-1; frameNr=planeNr=0;
1125 for(
int m=0; m<mlist.
matrixNr; m++) {
1128 if(plane!=prev_plane) {frameNr=1; planeNr++;}
else {frameNr++;}
1136 sprintf(
ecat63errmsg,
"cannot write mainheader (%d)", ret);
1137 fclose(fp);
return(22);
1156 if(h==NULL)
return(0);
1174 if(
IMG_TEST>0) printf(
"imgGetEcat63MHeader()\n");
1185 if(
IMG_TEST>0) printf(
"invalid scan_start_time in mainheader\n");
1188 char buf1[32], buf2[32];
1226 memset(&tm, 0,
sizeof(
struct tm));
1228 if(
IMG_TEST>0) printf(
"imgSetEcat63MHeader()\n");
1232 fprintf(stdout,
" scan_start_time := %s\n", buf);
1258 printf(
" img->scanStart := %ld\n", (
long int)img->
scanStart);
1259 printf(
" -> tm_year := %d\n", tm.tm_year);
1260 printf(
" -> tm_hour := %d\n", tm.tm_hour);
1269 if(
IMG_TEST>0) printf(
"invalid scan_start_time in IMG\n");
1322 int m, blkNr=0, ret=0;
1323 int frameNr, planeNr;
1333 if(
IMG_TEST>0) printf(
"\nimgReadEcat63Header(%s, *img)\n", fname);
1336 if(img==NULL)
return STATUS_FAULT;
1339 if(fname==NULL)
return STATUS_FAULT;
1342 if((fp=fopen(fname,
"rb")) == NULL)
return STATUS_NOFILE;
1346 fclose(fp);
return STATUS_NOMAINHEADER;}
1349 fclose(fp);
return STATUS_UNSUPPORTED;}
1360 if(ret) {fclose(fp);
return STATUS_NOMATLIST;}
1399 if(ret)
return STATUS_NOSUBHEADER;
1460 if(
IMG_TEST) printf(
"\nimgReadEcat63FirstFrame(%s, *img)\n", fname);
1462 if(img==NULL)
return STATUS_FAULT;
1465 if(fname==NULL)
return STATUS_FAULT;
1474 if(ret)
return STATUS_NOMEMORY;
1504 const char *fname,
int frame_to_read,
IMG *img,
int frame_index
1506 int ret=0, blkNr=0, frame, plane, seqplane=-1;
1507 int local_data_type=0;
1518 char *mdata=NULL, *mptr;
1522 if(
IMG_TEST) printf(
"\nimgReadEcat63Frame(%s, %d, *img, %d)\n",
1523 fname, frame_to_read, frame_index);
1526 if(img==NULL)
return STATUS_FAULT;
1529 if(fname==NULL)
return STATUS_FAULT;
1530 if(frame_index<0 || frame_index>img->
dimt-1)
return STATUS_FAULT;
1531 if(frame_to_read<1)
return STATUS_FAULT;
1534 if((fp=fopen(fname,
"rb")) == NULL)
return STATUS_NOFILE;
1538 fclose(fp);
return STATUS_NOMAINHEADER;}
1543 if(ret) {fclose(fp);
return STATUS_NOMATLIST;}
1554 if(
IMG_TEST>6) printf(
"allocating memory for %d blocks\n", blkNr);
1555 mdata=(
char*)malloc((
size_t)blkNr*
MatBLKSIZE);
1566 else frame=matval.
gate;
1567 if(frame!=frame_to_read)
continue;
1573 return STATUS_MISSINGMATRIX;
1577 if(
IMG_TEST>4) printf(
"reading subheader for matrix %d,%d\n", frame, plane);
1587 img->
mid[frame_index]=0.5*(img->
start[frame_index]+img->
end[frame_index]);
1607 img->
mid[frame_index]=0.5*(img->
start[frame_index]+img->
end[frame_index]);
1624 return STATUS_NOSUBHEADER;
1629 if(
IMG_TEST>4) printf(
"reading matrix data\n");
1632 mdata, local_data_type);
1635 return STATUS_MISSINGMATRIX;
1637 if(
IMG_TEST>4) printf(
"converting matrix data to floats\n");
1640 for(
int yi=0; yi<img->
dimy; yi++)
1641 for(
int xi=0; xi<img->
dimx; xi++, mptr++) {
1642 img->
m[seqplane][yi][xi][frame_index]=scale*(float)(*mptr);
1644 }
else if(local_data_type==
VAX_I2 || local_data_type==
SUN_I2) {
1645 for(
int yi=0; yi<img->
dimy; yi++)
1646 for(
int xi=0; xi<img->
dimx; xi++, mptr+=2) {
1647 sptr=(
short int*)mptr;
1648 img->
m[seqplane][yi][xi][frame_index]=scale*(float)(*sptr);
1650 }
else if(local_data_type==
VAX_I4 || local_data_type==
SUN_I4) {
1651 for(
int yi=0; yi<img->
dimy; yi++)
1652 for(
int xi=0; xi<img->
dimx; xi++, mptr+=4) {
1654 img->
m[seqplane][yi][xi][frame_index]=1.0;
1656 }
else if(local_data_type==
VAX_R4 || local_data_type==
IEEE_R4) {
1657 for(
int yi=0; yi<img->
dimy; yi++)
1658 for(
int xi=0; xi<img->
dimx; xi++, mptr+=4) {
1659 memcpy(&img->
m[seqplane][yi][xi][frame_index], mptr, 4);
1660 img->
m[seqplane][yi][xi][frame_index]*=scale;
1664 if(
IMG_TEST>3) printf(
"end of matrices.\n");
1671 if(
IMG_TEST>4) printf(
"last_seqplane := %d.\n", seqplane);
1672 if(seqplane<0) {
imgSetStatus(img, STATUS_NOMATRIX);
return STATUS_NOMATRIX;}
1675 if(seqplane+1 != img->
dimz) {
1677 return STATUS_MISSINGMATRIX;
1712 const char *fname,
int frame_to_write,
IMG *img,
int frame_index
1715 int ret=0, matrixId;
1719 void *sub_header=NULL;
1721 float *fdata=NULL, *fptr;
1724 if(
IMG_TEST>0) printf(
"\nimgWriteEcat63Frame(%s, %d, *img, %d)\n",
1725 fname, frame_to_write, frame_index);
1730 fprintf(stdout,
" scan_start_time := %s\n", buf);
1736 if(fname==NULL)
return STATUS_FAULT;
1737 if(img==NULL)
return STATUS_FAULT;
1739 if(frame_to_write<0)
return STATUS_FAULT;
1740 if(frame_index<0 || frame_index>=img->
dimt)
return STATUS_FAULT;
1745 strcpy(
ecat63errmsg,
"too large matrix size");
return(1);}
1760 if(access(fname, 0) == -1) {
1762 if(
IMG_TEST>1) printf(
" new file\n");
1768 if(frame_to_write==0) frame_to_write=1;
1772 fp=
ecat63Create(fname, &main_header);
if(fp==NULL)
return STATUS_NOWRITEPERM;
1776 if(
IMG_TEST>1) printf(
" existing file\n");
1782 strcpy(buf,
"1900-01-01 00:00:00");
1783 fprintf(stdout,
"scan_start_time := %s\n", buf);
1787 return STATUS_WRONGFILETYPE;
1791 return STATUS_VARMATSIZE;
1795 if((fp=fopen(fname,
"r+b"))==NULL)
return STATUS_NOWRITEPERM;
1799 return STATUS_NOMAINHEADER;
1800 if(frame_to_write==0) frame_to_write=main_header.
num_frames+1;
1804 return STATUS_NOWRITEPERM;
1812 printf(
"frame_to_write := %d\n", frame_to_write);
1817 fdata=(
float*)malloc(pxlNr*
sizeof(
float));
1818 if(fdata==NULL) {fclose(fp);
return STATUS_NOMEMORY;}
1823 else {fclose(fp);
return STATUS_FAULT;}
1828 for(
int zi=0; zi<img->
dimz; zi++)
1829 for(
int yi=0; yi<img->
dimy; yi++)
1830 for(
int xi=0; xi<img->
dimx; xi++)
1831 *fptr++=img->
m[zi][yi][xi][frame_index];
1835 for(
int zi=0; zi<img->
dimz; zi++, fptr+=img->
dimx*img->
dimy) {
1859 free(fdata); fclose(fp);
1860 if(ret)
return STATUS_DISKFULL;
char * ctime_r_int(const time_t *t, char *buf)
Convert calendard time t into a null-terminated string of the form YYYY-MM-DD hh:mm:ss,...
struct tm * gmtime_r(const time_t *t, struct tm *tm)
Convert time_t to GMT struct tm.
int ecat63ReadMatlist(FILE *fp, MATRIXLIST *ml, int verbose)
int ecat63GetPlaneAndFrameNr(MATRIXLIST *mlist, ECAT63_mainheader *h, int *plane_nr, int *frame_nr)
void ecat63InitMatlist(MATRIXLIST *mlist)
void ecat63EmptyMatlist(MATRIXLIST *mlist)
int ecat63GatherMatlist(MATRIXLIST *ml, short int do_planes, short int do_frames, short int do_gates, short int do_beds)
int mat_numcod(int frame, int plane, int gate, int data, int bed)
int ecat63GetMatrixBlockSize(MATRIXLIST *mlist, int *blk_nr)
int ecat63DeleteLateFrames(MATRIXLIST *ml, int frame_nr)
void ecat63SortMatlistByPlane(MATRIXLIST *ml)
void ecat63PrintMatlist(MATRIXLIST *ml)
void mat_numdoc(int matnum, Matval *matval)
void ecat63SortMatlistByFrame(MATRIXLIST *ml)
void ecat63PrintMainheader(ECAT63_mainheader *h, FILE *fp)
void ecat63PrintImageheader(ECAT63_imageheader *h, FILE *fp)
void ecat63PrintScanheader(ECAT63_scanheader *h, FILE *fp)
char * ecat63ScanstarttimeInt(const ECAT63_mainheader *h, char *buf)
Convert scan_start_time in ECAT 6.3 main header into a null-terminated string of the form YYYY-MM-DD ...
int ecat63ReadNormheader(FILE *fp, int blk, ECAT63_normheader *h, int verbose, char *errmsg)
int ecat63ReadScanheader(FILE *fp, int blk, ECAT63_scanheader *h, int verbose, char *errmsg)
int ecat63ReadMatdata(FILE *fp, int strtblk, int blkNr, char *data, int dtype)
int ecat63ReadAttnheader(FILE *fp, int blk, ECAT63_attnheader *h, int verbose, char *errmsg)
int ecat63ReadImageheader(FILE *fp, int blk, ECAT63_imageheader *h, int verbose, char *errmsg)
int ecat63ReadMainheader(FILE *fp, ECAT63_mainheader *h)
int ecat63WriteScan(FILE *fp, int matnum, ECAT63_scanheader *h, void *data)
int ecat63WriteScanMatrix(FILE *fp, int matnum, ECAT63_scanheader *h, float *fdata)
int ecat63WriteImageMatrix(FILE *fp, int matnum, ECAT63_imageheader *h, float *fdata)
int ecat63WriteImage(FILE *fp, int matnum, ECAT63_imageheader *h, void *data)
FILE * ecat63Create(const char *fname, ECAT63_mainheader *h)
int ecat63WriteMainheader(FILE *fp, ECAT63_mainheader *h)
time_t ecat63Scanstarttime(const ECAT63_mainheader *h)
Get calendar time from ECAT 6.3 main header.
int imgAllocate(IMG *image, int planes, int rows, int columns, int frames)
void imgSetStatus(IMG *img, int status_index)
void imgEmpty(IMG *image)
int ecat63ReadPlaneToImg(const char *fname, IMG *img)
int imgGetEcat63Fileformat(ECAT63_mainheader *h)
int imgEcat63Supported(ECAT63_mainheader *h)
int ecat63WriteAllImg(const char *fname, IMG *img)
void imgSetEcat63SHeader(IMG *img, void *h)
int imgWriteEcat63Frame(const char *fname, int frame_to_write, IMG *img, int frame_index)
int imgReadEcat63FirstFrame(const char *fname, IMG *img)
int ecat63AddImg(const char *fname, IMG *img)
void imgGetEcat63MHeader(IMG *img, ECAT63_mainheader *h)
int imgReadEcat63Header(const char *fname, IMG *img)
void imgSetEcat63MHeader(IMG *img, ECAT63_mainheader *h)
int imgReadEcat63Frame(const char *fname, int frame_to_read, IMG *img, int frame_index)
int ecat63ReadAllToImg(const char *fname, IMG *img)
char * imgIsotope(IMG *img)
int imgUnitToEcat6(IMG *img)
void imgUnitFromEcat(IMG *img, int ecat_unit)
Header file for libtpcimgio.
#define NIFTI_XFORM_UNKNOWN
#define IMG_STATUS_OCCUPIED
#define ECAT63_SYSTEM_TYPE_DEFAULT
#define IMG_STATUS_INITIALIZED
#define IMG_DC_NONCORRECTED
#define NIFTI_XFORM_SCANNER_ANAT
#define IMG_STATUS_UNINITIALIZED
size_t strlcpy(char *dst, const char *src, size_t dstsize)
int studynr_validity_check(char *studynr)
char radiopharmaceutical[32]
short int scan_start_month
short int scan_start_second
short int calibration_units
short int scan_start_year
char study_description[32]
short int scan_start_minute
char user_process_code[10]
short int scan_start_hour
char studyDescription[32]
char radiopharmaceutical[32]
char studyNr[MAX_STUDYNR_LEN+1]