78 if(
ECAT63_TEST) printf(
"ecat63WriteMainheader()\n");
79 little=little_endian();
85 tovax=1;
else tovax=0;
102 memcpy(buf+472, h->
fill2, 40);
121 memcpy(buf+14, h->
fill1, 14);
152 int i, little, tovax;
155 if(
ECAT63_TEST) printf(
"ecat63WriteImageheader(fp, %d, ih)\n", block);
156 little=little_endian();
160 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
162 tovax=1;
else tovax=0;
173 memcpy(buf+460, h->
fill2, 52);
225 if(
ECAT63_TEST) printf(
"ecat63WriteAttnheader(fp, %d, ah)\n", block);
226 little=little_endian();
230 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
232 tovax=1;
else tovax=0;
252 if(ftell(fp)!=(block-1)*
MatBLKSIZE)
return(2);
271 int i, little, tovax;
274 if(
ECAT63_TEST) printf(
"ecat63WriteScanheader(fp, %d, ih)\n", block);
275 little=little_endian();
279 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
281 tovax=1;
else tovax=0;
289 memcpy(buf+468, h->
fill2, 44);
297 for(i=0; i<16; i++) {
317 memcpy(buf+0, h->
fill1, 126);
341 if(
ECAT63_TEST) printf(
"ecat63WriteNormheader(fp, %d, nh)\n", block);
342 little=little_endian();
346 if(fp==NULL || block<3 || h->data_type<1 || h->data_type>7)
return(1);
348 tovax=1;
else tovax=0;
368 if(ftell(fp)!=(block-1)*
MatBLKSIZE)
return(2);
430 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
432 if(
ECAT63_TEST) printf(
"ecat63WriteImage(fp, %d, ih, data)\n", matnum);
433 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
451 data_size=pxlNr*pxlSize;
461 if(ret)
return(50+ret);
479 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
481 if(
ECAT63_TEST) printf(
"ecat63WriteScan(fp, %d, sh, data)\n", matnum);
482 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
500 data_size=pxlNr*pxlSize;
510 if(ret)
return(50+ret);
528 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
530 if(
ECAT63_TEST) printf(
"ecat63WriteNorm(fp, %d, nh, data)\n", matnum);
531 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
549 data_size=pxlNr*pxlSize;
559 if(ret)
return(50+ret);
577 int nxtblk, blkNr, data_size, pxlNr, pxlSize, ret;
579 if(
ECAT63_TEST) printf(
"ecat63WriteAttn(fp, %d, ah, data)\n", matnum);
580 if(fp==NULL || matnum<1 || h==NULL || data==NULL)
return(1);
598 data_size=pxlNr*pxlSize;
608 if(ret)
return(50+ret);
632 int i, blkNr, dataSize, byteNr, little;
634 if(
ECAT63_TEST) printf(
"ecat63WriteMatdata(fp, %d, data, %d, %d)\n", strtblk, pxlNr, pxlSize);
635 if(fp==NULL || strtblk<1 || data==NULL || pxlNr<1 || pxlSize<1)
return(1);
636 little=little_endian(); memset(buf, 0,
MatBLKSIZE);
637 dataSize=pxlNr*pxlSize;
if(dataSize<1)
return(1);
644 for(i=0, dptr=data; i<blkNr && dataSize>0; i++) {
646 memcpy(buf, dptr, byteNr);
648 if(!little_endian()) {
649 if(pxlSize==2) swabip(buf, byteNr);
650 else if(pxlSize==4) swawbip(buf, byteNr);
701 int i, nxtblk, blkNr, data_size, pxlNr, ret;
702 float *fptr, fmin, fmax, g, f;
708 if(
ECAT63_TEST) printf(
"ecat63WriteImageMatrix(fp, %d, h, data)\n", matnum);
709 if(fp==NULL || matnum<1 || h==NULL || fdata==NULL) {
727 mdata=(
char*)calloc(blkNr,
MatBLKSIZE);
if(mdata==NULL) {
732 fptr=fdata; fmin=fmax=*fptr;
733 for(i=0; i<pxlNr; i++, fptr++) {
734 if(*fptr>fmax) fmax=*fptr;
else if(*fptr<fmin) fmin=*fptr;
736 if(fabs(fmin)>fabs(fmax)) g=fabs(fmin);
else g=fabs(fmax);
737 if(g>0) f=32766./g;
else f=1.0;
743 sptr=(
short int*)mdata; fptr=fdata;
744 for(i=0; i<pxlNr; i++, sptr++, fptr++) *sptr=(
short int)temp_roundf(f*(*fptr));
746 h->
image_min=(
short int)temp_roundf(f*fmin);
747 h->
image_max=(
short int)temp_roundf(f*fmax);
750 sprintf(
ecat63errmsg,
"cannot determine matrix block (%d).\n", -nxtblk);
751 free(mdata);
return(8);
753 if(
ECAT63_TEST>2) printf(
" block=%d fmin=%g fmax=%g\n", nxtblk, fmin, fmax);
756 sprintf(
ecat63errmsg,
"cannot write subheader (%d).\n", ret);
757 free(mdata);
return(10);
764 sprintf(
ecat63errmsg,
"cannot write matrix data (%d).\n", ret);
785 int i, nxtblk, blkNr, data_size, pxlNr, ret;
786 float *fptr, fmin, fmax, g, f;
791 if(
ECAT63_TEST) printf(
"ecat63WriteScanMatrix(fp, %d, h, data)\n", matnum);
792 if(fp==NULL || matnum<1 || h==NULL || fdata==NULL) {
810 mdata=(
char*)calloc(blkNr,
MatBLKSIZE);
if(mdata==NULL) {
815 fptr=fdata; fmin=fmax=*fptr;
816 for(i=0; i<pxlNr; i++, fptr++) {
817 if(*fptr>fmax) fmax=*fptr;
else if(*fptr<fmin) fmin=*fptr;
819 if(fabs(fmin)>fabs(fmax)) g=fabs(fmin);
else g=fabs(fmax);
820 if(g>0) f=32766./g;
else f=1.0;
826 sptr=(
short int*)mdata; fptr=fdata;
827 for(i=0; i<pxlNr; i++, sptr++, fptr++) *sptr=(
short int)temp_roundf(f*(*fptr));
829 h->
scan_min=(
short int)temp_roundf(f*fmin);
830 h->
scan_max=(
short int)temp_roundf(f*fmax);
833 sprintf(
ecat63errmsg,
"cannot determine matrix block (%d).\n", -nxtblk);
834 free(mdata);
return(8);
836 if(
ECAT63_TEST>2) printf(
" block=%d fmin=%g fmax=%g\n", nxtblk, fmin, fmax);
839 sprintf(
ecat63errmsg,
"cannot write subheader (%d).\n", ret);
840 free(mdata);
return(10);
847 sprintf(
ecat63errmsg,
"cannot write matrix data (%d).\n", ret);
short int scan_start_minute
short int acquisition_type
short int scan_start_hour
char radiopharmaceutical[32]
short int axial_samp_mode
char study_description[32]
char original_file_name[20]
short int transm_source_type
short int compression_code
short int rot_source_speed
short int scan_start_year
short int scan_start_month
short int calibration_units
short int scan_start_second
char user_process_code[10]
short int transaxial_samp_mode