65 if(
ECAT63_TEST) fprintf(stdout,
"ecat63PrintMainheader()\n");
69 if(h->
file_type==1) strcpy(tmp,
"sinogram");
70 else if(h->
file_type==2) strcpy(tmp,
"image");
71 else if(h->
file_type==3) strcpy(tmp,
"attenuation");
72 else if(h->
file_type==4) strcpy(tmp,
"normalization");
73 else strcpy(tmp,
"unknown");
74 fprintf(fp,
"file_type := %d (%s)\n", h->
file_type, tmp);
75 fprintf(fp,
"sw_version := %d\n", h->
sw_version);
76 fprintf(fp,
"scan start := %02d.%02d.%04d %02d:%02d:%02d\n",
85 fprintf(fp,
"axial_fov := %g\n", h->
axial_fov);
89 fprintf(fp,
"study_name := %.12s\n", h->
study_name);
90 fprintf(fp,
"patient_id := %.32s\n", h->
patient_id);
92 fprintf(fp,
"sex := %c\nage := %.10s\nheight := %.10s\nweigth := %.10s\ndexterity := %c\n",
95 fprintf(fp,
"physician_name := %.32s\noperator_name := %.32s\n",
98 fprintf(fp,
"num_planes := %d\n", h->
num_planes);
99 fprintf(fp,
"num_frames := %d\n", h->
num_frames);
100 fprintf(fp,
"num_gates := %d\n", h->
num_gates);
101 fprintf(fp,
"num_bed_pos := %d\n", h->
num_bed_pos);
118 if(
ECAT63_TEST) printf(
"ecat63PrintImageheader()\n");
120 fprintf(fp,
"dimension_1 := %d\n", h->
dimension_1);
121 fprintf(fp,
"dimension_2 := %d\n", h->
dimension_2);
122 fprintf(fp,
"x_origin := %g\ny_origin := %g\nrecon_scale := %g\n",
124 fprintf(fp,
"quant_scale := %g\nimage_min := %d\nimage_max := %d\n",
127 fprintf(fp,
"frame_start_time := %d\nframe_duration := %d\n",
129 fprintf(fp,
"reconstruction_start := %02d.%02d.%04d %02d:%02d:%02d\n",
132 fprintf(fp,
"filter_code := %d\nimage_rotation := %g\nintrinsic_tilt := %g\n",
134 fprintf(fp,
"filter_params :=");
135 for(i=0; i<6; i++) fprintf(fp,
" %g", h->
filter_params[i]); fprintf(fp,
"\n");
136 fprintf(fp,
"plane_eff_corr_fctr := %g\ndecay_corr_fctr := %g\nloss_corr_fctr := %g\n",
139 fprintf(fp,
"ecat_calibration_fctr := %g\nwell_counter_cal_fctr := %g\n",
141 fprintf(fp,
"annotation := %.40s\n", h->
annotation);
155 if(
ECAT63_TEST) printf(
"ecat63PrintScanheader()\n");
157 fprintf(fp,
"dimension_1 := %d\n", h->
dimension_1);
158 fprintf(fp,
"dimension_2 := %d\n", h->
dimension_2);
161 fprintf(fp,
"gate_duration := %d\nr_wave_offset := %d\n",
165 fprintf(fp,
"prompts := %d\ndelayed := %d\nmultiples := %d\nnet_trues := %d\n",
167 fprintf(fp,
"cor_singles :=");
168 for(i=0; i<16; i++) fprintf(fp,
" %8.0f", h->
cor_singles[i]); printf(
"\n");
169 fprintf(fp,
"uncor_singles :=");
170 for(i=0; i<16; i++) fprintf(fp,
" %8.0f", h->
uncor_singles[i]); printf(
"\n");
173 fprintf(fp,
"frame_start_time := %d\nframe_duration := %d\n",
187 if(
ECAT63_TEST) printf(
"ecat63PrintAttnheader()\n");
189 fprintf(fp,
"dimension_1 := %d\n", h->
dimension_1);
190 fprintf(fp,
"dimension_2 := %d\n", h->
dimension_2);
194 fprintf(fp,
"x_origin := %g\ny_origin := %g\nx_radius := %g\ny_radius := %g\n",
196 fprintf(fp,
"tilt_angle := %g\nattenuation_coeff := %g\n",
209 if(
ECAT63_TEST) printf(
"ecat63PrintNormheader()\n");
211 fprintf(fp,
"dimension_1 := %d\n", h->
dimension_1);
212 fprintf(fp,
"dimension_2 := %d\n", h->
dimension_2);
214 fprintf(fp,
"norm time := %02d.%02d.%04d %02d:%02d:%02d\n",
228 static char *ecat63_datatype[]={
240 if(dtype>=0 && dtype<10)
return(ecat63_datatype[dtype]);
241 else return(ecat63_datatype[0]);
251 static char *ecat63_unit[]={
257 "LMRUGlu umol/min/100g",
258 "LMRUGlu mg/min/100g",
271 if(dunit>=0 && dunit<18)
return(ecat63_unit[dunit]);
272 else return(ecat63_unit[0]);
283 unsigned int u, exp, mantissa;
286 memcpy(&u, buf, 4);
if(u & 1L<<31) sign=
'-';
else sign=
'+';
287 exp=u<<1; exp=exp>>24; mantissa=u<<9; mantissa=mantissa>>9;
288 printf(
"%e = %c (%u/8388608 + 1)*2^(%u-127)\n", *buf, sign, mantissa, exp);
321 fprintf(stderr,
"Error (%d): cannot read matrix list.\n", ret);
325 fprintf(stderr,
"Error: matrix list is empty.\n");
333 for(mi=nr=0; mi<mlist.
matrixNr; mi++) {
337 if(frame>=0 && frame!=matval.
frame)
continue;
338 if(plane>=0 && plane!=matval.
plane)
continue;
349 fprintf(stderr,
"Error: cannot read matrix %u subheader.\n",
354 fprintf(fp,
"Matrix: plane %d frame %d gate %d bed %d\n",
368 if(nr==0 && (plane>=0 || frame>=0)) {
369 fprintf(stderr,
"Error: specified matrices not found.\n");
void ecat63InitMatlist(MATRIXLIST *mlist)
void ecat63EmptyMatlist(MATRIXLIST *mlist)
int ecat63ReadMatlist(FILE *fp, MATRIXLIST *ml)
void ecat63PrintMatlist(MATRIXLIST *ml)
void mat_numdoc(int matnum, Matval *matval)
void ecat63PrintMainheader(ECAT63_mainheader *h, FILE *fp)
char * ecat63Unit(short int dunit)
void ecat63PrintImageheader(ECAT63_imageheader *h, FILE *fp)
void ecat63PrintScanheader(ECAT63_scanheader *h, FILE *fp)
void ecat63PrintNormheader(ECAT63_normheader *h, FILE *fp)
void float2parts(float *buf)
char * ecat63Datatype(short int dtype)
void ecat63PrintAttnheader(ECAT63_attnheader *h, FILE *fp)
int ecat6PrintSubheader(ECAT63_mainheader mh, FILE *fp, int plane, int frame, FILE *ofp)
int ecat63ReadNormheader(FILE *fp, int blk, ECAT63_normheader *h)
int ecat63ReadScanheader(FILE *fp, int blk, ECAT63_scanheader *h)
int ecat63ReadAttnheader(FILE *fp, int blk, ECAT63_attnheader *h)
int ecat63ReadImageheader(FILE *fp, int blk, ECAT63_imageheader *h)
short int scan_start_minute
short int scan_start_hour
char radiopharmaceutical[32]
char study_description[32]
char original_file_name[20]
short int scan_start_year
short int scan_start_month
short int calibration_units
short int scan_start_second
char user_process_code[10]