37 if(emat==NULL)
return;
40 if(emat->
f!=NULL) free(emat->
f);
53 if(ehdr==NULL)
return;
56 free(ehdr->
m); ehdr->
m=NULL; ehdr->
nr=0;
71 if(ehdr==NULL || nr<1)
return STATUS_FAULT;
73 free(ehdr->
m); ehdr->
m=NULL; ehdr->
nr=0;
75 if(ehdr->
m==NULL)
return STATUS_NOMEMORY;
94 char tmp[1024], tmp2[32];
97 if(verbose>0) printf(
"ecat7MHeaderToIFT(mh, ift)\n");
98 if(h==NULL || ift==NULL)
return STATUS_FAULT;
99 if(strncmp(h->
magic_number, ECAT7V_MAGICNR, 7)!=0)
return STATUS_UNKNOWNFORMAT;
101 if(
iftPut(ift,
"magic_number", h->
magic_number, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
104 if(
iftPut(ift,
"sw_version", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
106 if(
iftPut(ift,
"system_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
108 if(
iftPut(ift,
"file_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
111 if(!
ctime_r_int(&t, tmp)) strcpy(tmp,
"1970-01-01 00:00:00");
112 if(
iftPut(ift,
"scan_start_time", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
113 if(
iftPut(ift,
"isotope_name", h->
isotope_name, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
115 if(
iftPut(ift,
"isotope_halflife", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
118 if(
iftPut(ift,
"gantry_tilt", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
120 if(
iftPut(ift,
"gantry_rotation", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
122 if(
iftPut(ift,
"bed_elevation", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
124 if(
iftPut(ift,
"intrinsic_tilt", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
126 if(
iftPut(ift,
"wobble_speed", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
128 if(
iftPut(ift,
"transm_source_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
130 if(
iftPut(ift,
"distance_scanned", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
132 if(
iftPut(ift,
"transaxial_fov", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
134 if(
iftPut(ift,
"angular_compression", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
136 if(
iftPut(ift,
"coin_samp_mode", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
138 if(
iftPut(ift,
"axial_samp_mode", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
140 if(
iftPut(ift,
"ecat_calibration_factor", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
142 if(
iftPut(ift,
"calibration_units", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
144 if(
iftPut(ift,
"calibration_units_label", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
146 if(
iftPut(ift,
"compression_code", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
147 if(
iftPut(ift,
"study_type", h->
study_type, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
148 if(
iftPut(ift,
"patient_id", h->
patient_id, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
149 if(
iftPut(ift,
"patient_name", h->
patient_name, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
151 if(
iftPut(ift,
"patient_sex", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
153 if(
iftPut(ift,
"patient_dexterity", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
155 if(
iftPut(ift,
"patient_age", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
157 if(
iftPut(ift,
"patient_height", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
159 if(
iftPut(ift,
"patient_weight", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
161 if(!
ctime_r_int(&t, tmp)) strcpy(tmp,
"1970-01-01 00:00:00");
162 if(
iftPut(ift,
"patient_birth_date", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
167 if(
iftPut(ift,
"acquisition_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
169 if(
iftPut(ift,
"patient_orientation", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
172 if(
iftPut(ift,
"num_planes", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
174 if(
iftPut(ift,
"num_frames", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
176 if(
iftPut(ift,
"num_gates", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
178 if(
iftPut(ift,
"num_bed_pos", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
180 if(
iftPut(ift,
"init_bed_position", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
182 for(i=1; i<15; i++) {sprintf(tmp2,
" %g", h->
bed_position[i]); strcat(tmp, tmp2);}
183 if(
iftPut(ift,
"bed_position", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
185 if(
iftPut(ift,
"plane_separation", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
187 if(
iftPut(ift,
"lwr_sctr_thres", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
189 if(
iftPut(ift,
"lwr_true_thres", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
191 if(
iftPut(ift,
"upr_true_thres", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
194 if(
iftPut(ift,
"acquisition_mode", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
196 if(
iftPut(ift,
"bin_size", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
198 if(
iftPut(ift,
"branching_fraction", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
200 if(!
ctime_r_int(&t, tmp)) strcpy(tmp,
"1970-01-01 00:00:00");
201 if(
iftPut(ift,
"dose_start_time", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
202 sprintf(tmp,
"%g", h->
dosage);
203 if(
iftPut(ift,
"dosage", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
205 if(
iftPut(ift,
"well_counter_corr_factor", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
206 if(
iftPut(ift,
"data_units", h->
data_units, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
208 if(
iftPut(ift,
"septa_state", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
211 for(i=1; i<6; i++) {sprintf(tmp2,
" %d", h->
fill_cti[i]); strcat(tmp, tmp2);}
212 if(
iftPut(ift,
"fill_cti", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
231 if(verbose>0) printf(
"ecat7MainheaderFromIFT(mh, ift)\n");
232 if(h==NULL || ift==NULL)
return STATUS_FAULT;
233 if(verbose>5)
iftWrite(ift,
"stdout", 0);
235 for(ii=ret=0; ii<ift->
keyNr; ii++) {
236 if(verbose>2) printf(
" key := %s\n value := %s\n", ift->
item[ii].
key, ift->
item[ii].
value);
239 if(verbose>0) fprintf(stderr,
"Error with key '%s'\n", ift->
item[ii].
key);
243 if(ret!=0)
return STATUS_FAULT;
260 char tmp[1024], tmp2[32];
262 if(verbose>0) printf(
"%s(h, ift)\n", __func__);
263 if(h==NULL || ift==NULL)
return STATUS_FAULT;
264 if(h->
data_type<=0)
return STATUS_UNKNOWNFORMAT;
267 if(
iftPut(ift,
"data_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
269 if(
iftPut(ift,
"num_dimensions", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
271 if(
iftPut(ift,
"x_dimension", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
273 if(
iftPut(ift,
"y_dimension", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
275 if(
iftPut(ift,
"z_dimension", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
277 if(
iftPut(ift,
"x_offset", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
279 if(
iftPut(ift,
"y_offset", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
281 if(
iftPut(ift,
"z_offset", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
283 if(
iftPut(ift,
"recon_zoom", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
285 if(
iftPut(ift,
"scale_factor", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
287 if(
iftPut(ift,
"image_min", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
289 if(
iftPut(ift,
"image_max", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
291 if(
iftPut(ift,
"x_pixel_size", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
293 if(
iftPut(ift,
"y_pixel_size", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
295 if(
iftPut(ift,
"z_pixel_size", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
297 if(
iftPut(ift,
"frame_duration", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
299 if(
iftPut(ift,
"frame_start_time", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
301 if(
iftPut(ift,
"filter_code", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
303 if(
iftPut(ift,
"x_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
305 if(
iftPut(ift,
"y_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
307 if(
iftPut(ift,
"z_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
309 if(
iftPut(ift,
"num_r_elements", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
311 if(
iftPut(ift,
"num_angles", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
313 if(
iftPut(ift,
"z_rotation_angle", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
315 if(
iftPut(ift,
"decay_corr_fctr", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
317 if(
iftPut(ift,
"processing_code", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
319 if(
iftPut(ift,
"gate_duration", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
321 if(
iftPut(ift,
"r_wave_offset", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
323 if(
iftPut(ift,
"num_accepted_beats", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
325 if(
iftPut(ift,
"filter_cutoff_frequency", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
327 if(
iftPut(ift,
"filter_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
329 if(
iftPut(ift,
"filter_ramp_slope", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
331 if(
iftPut(ift,
"filter_order", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
333 if(
iftPut(ift,
"filter_scatter_fraction", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
335 if(
iftPut(ift,
"filter_scatter_slope", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
336 if(
iftPut(ift,
"annotation", h->
annotation, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
337 sprintf(tmp,
"%g", h->
mt_1_1);
338 if(
iftPut(ift,
"mt_1_1", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
339 sprintf(tmp,
"%g", h->
mt_1_2);
340 if(
iftPut(ift,
"mt_1_2", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
341 sprintf(tmp,
"%g", h->
mt_1_3);
342 if(
iftPut(ift,
"mt_1_3", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
343 sprintf(tmp,
"%g", h->
mt_2_1);
344 if(
iftPut(ift,
"mt_2_1", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
345 sprintf(tmp,
"%g", h->
mt_2_2);
346 if(
iftPut(ift,
"mt_2_2", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
347 sprintf(tmp,
"%g", h->
mt_2_3);
348 if(
iftPut(ift,
"mt_2_3", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
349 sprintf(tmp,
"%g", h->
mt_3_1);
350 if(
iftPut(ift,
"mt_3_1", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
351 sprintf(tmp,
"%g", h->
mt_3_2);
352 if(
iftPut(ift,
"mt_3_2", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
353 sprintf(tmp,
"%g", h->
mt_3_3);
354 if(
iftPut(ift,
"mt_3_3", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
356 if(
iftPut(ift,
"rfilter_cutoff", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
358 if(
iftPut(ift,
"rfilter_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
360 if(
iftPut(ift,
"rfilter_code", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
362 if(
iftPut(ift,
"rfilter_order", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
364 if(
iftPut(ift,
"zfilter_cutoff", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
366 if(
iftPut(ift,
"zfilter_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
368 if(
iftPut(ift,
"zfilter_code", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
370 if(
iftPut(ift,
"zfilter_order", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
371 sprintf(tmp,
"%g", h->
mt_1_4);
372 if(
iftPut(ift,
"mt_1_4", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
373 sprintf(tmp,
"%g", h->
mt_2_4);
374 if(
iftPut(ift,
"mt_2_4", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
375 sprintf(tmp,
"%g", h->
mt_3_4);
376 if(
iftPut(ift,
"mt_3_4", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
378 if(
iftPut(ift,
"scatter_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
380 if(
iftPut(ift,
"recon_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
382 if(
iftPut(ift,
"recon_views", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
385 for(i=1; i<87; i++) {sprintf(tmp2,
" %d", h->
fill_cti[i]); strcat(tmp, tmp2);}
386 if(
iftPut(ift,
"fill_cti", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
389 for(i=1; i<49; i++) {sprintf(tmp2,
" %d", h->
fill_user[i]); strcat(tmp, tmp2);}
390 if(
iftPut(ift,
"fill_user", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
417 char tmp[1024], tmp2[32];
419 if(verbose>0) printf(
"ecat7ScanheaderToIFT(h, ift)\n");
420 if(h==NULL || ift==NULL)
return STATUS_FAULT;
421 if(h->
data_type<=0)
return STATUS_UNKNOWNFORMAT;
424 if(
iftPut(ift,
"data_type", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
426 if(
iftPut(ift,
"num_dimensions", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
428 if(
iftPut(ift,
"num_r_elements", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
430 if(
iftPut(ift,
"num_angles", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
432 if(
iftPut(ift,
"corrections_applied", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
434 for(i=1; i<64; i++) {sprintf(tmp2,
" %d", h->
fill_cti[i]); strcat(tmp, tmp2);}
435 if(
iftPut(ift,
"num_z_elements", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
437 if(
iftPut(ift,
"ring_difference", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
439 if(
iftPut(ift,
"storage_order", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
441 if(
iftPut(ift,
"axial_compression", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
443 if(
iftPut(ift,
"x_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
445 if(
iftPut(ift,
"v_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
447 if(
iftPut(ift,
"z_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
449 if(
iftPut(ift,
"w_resolution", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
451 if(
iftPut(ift,
"gate_duration", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
453 if(
iftPut(ift,
"r_wave_offset", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
455 if(
iftPut(ift,
"num_accepted_beats", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
457 if(
iftPut(ift,
"scale_factor", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
459 if(
iftPut(ift,
"scan_min", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
461 if(
iftPut(ift,
"scan_max", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
462 sprintf(tmp,
"%d", h->
prompts);
463 if(
iftPut(ift,
"prompts", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
464 sprintf(tmp,
"%d", h->
delayed);
465 if(
iftPut(ift,
"delayed", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
467 if(
iftPut(ift,
"multiples", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
469 if(
iftPut(ift,
"net_trues", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
471 if(
iftPut(ift,
"tot_avg_cor", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
473 if(
iftPut(ift,
"tot_avg_uncor", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
475 if(
iftPut(ift,
"total_coin_rate", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
477 if(
iftPut(ift,
"frame_start_time", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
479 if(
iftPut(ift,
"frame_duration", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
481 if(
iftPut(ift,
"deadtime_correction_factor", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
483 for(i=1; i<128; i++) {sprintf(tmp2,
" %g", h->
uncor_singles[i]); strcat(tmp, tmp2);}
484 if(
iftPut(ift,
"uncor_singles", tmp, NULL, 0)!=0)
return STATUS_UNSUPPORTED;
523 if(verbose>0) printf(
"ecat7ReadSubheaderToIFT(fp, mh, %d, ift)\n", strtblk);
525 if(fp==NULL || h==NULL || strtblk<3 || ift==NULL)
return STATUS_FAULT;
532 if(ret!=0)
return STATUS_NOSUBHEADER;
533 return STATUS_UNSUPPORTED;
537 if(ret!=0)
return STATUS_NOSUBHEADER;
538 return STATUS_UNSUPPORTED;
545 if(ret!=0)
return STATUS_NOSUBHEADER;
547 if(ret!=STATUS_OK)
return ret;
553 if(ret!=0)
return STATUS_NOSUBHEADER;
555 if(ret!=STATUS_OK)
return ret;
560 if(ret!=0)
return STATUS_NOSUBHEADER;
561 return STATUS_UNSUPPORTED;
565 if(ret!=0)
return STATUS_NOSUBHEADER;
566 return STATUS_UNSUPPORTED;
570 if(ret!=0)
return STATUS_NOSUBHEADER;
571 return STATUS_UNSUPPORTED;
574 return STATUS_UNSUPPORTED;
604 if(verbose>0) printf(
"ecat7WriteSubheaderFromIFT(fp, mh, %d, ift)\n", strtblk);
606 if(fp==NULL || h==NULL || strtblk<3 || ift==NULL)
return STATUS_FAULT;
612 if(ret!=0)
return STATUS_NOSUBHEADER;
613 return STATUS_UNSUPPORTED;
617 if(ret!=0)
return STATUS_NOSUBHEADER;
618 return STATUS_UNSUPPORTED;
628 if(ret!=0)
return STATUS_NOSUBHEADER;
629 for(ii=ret=0; ii<ift->
keyNr; ii++) {
631 printf(
" key := %s\n value := %s\n",
635 if(verbose>0) fprintf(stderr,
"Error with key '%s'\n", ift->
item[ii].
key);
639 if(ret!=0)
return STATUS_FAULT;
641 if(ret!=0)
return STATUS_NOSUBHEADER;
647 if(ret!=0)
return STATUS_NOSUBHEADER;
648 for(ii=ret=0; ii<ift->
keyNr; ii++) {
649 if(verbose>7) printf(
" key := %s\n value := %s\n", ift->
item[ii].
key, ift->
item[ii].
value);
652 if(verbose>0) fprintf(stderr,
"Error with key '%s'\n", ift->
item[ii].
key);
656 if(ret!=0)
return STATUS_FAULT;
658 if(ret!=0)
return STATUS_NOSUBHEADER;
662 if(ret!=0)
return STATUS_NOSUBHEADER;
663 return STATUS_UNSUPPORTED;
667 if(ret!=0)
return STATUS_NOSUBHEADER;
668 return STATUS_UNSUPPORTED;
672 if(ret!=0)
return STATUS_NOSUBHEADER;
673 return STATUS_UNSUPPORTED;
676 return STATUS_UNSUPPORTED;
701 if(verbose>0) printf(
"ecat7ReadHeaders(%s, ehdr)\n", fname);
703 if(ehdr==NULL)
return STATUS_FAULT;
704 if(fname==NULL)
return STATUS_FAULT;
707 if(verbose>1) printf(
"open %s\n", fname);
708 if((fp=fopen(fname,
"rb")) == NULL)
return STATUS_NOFILE;
712 if(ret) {fclose(fp);
return STATUS_NOMAINHEADER;}
714 if(verbose>1) printf(
"check magic number in %s\n", fname);
715 if(strncmp(main_header.
magic_number, ECAT7V_MAGICNR, 7)!=0) {fclose(fp);
return STATUS_UNKNOWNFORMAT;}
718 if(ret!=STATUS_OK) {fclose(fp);
return ret;}
719 if(verbose>5)
iftWrite(&ehdr->
mh,
"stdout", 0);
729 for(mi=0; mi<mlist.
matrixNr; mi++) {
737 printf(
"bed := %d\n", ehdr->
m[mi].
matval.
bed);
740 &ehdr->
m[mi].
sh, verbose);
769 if(verbose>0) printf(
"ecat7WriteHeaders(%s, ehdr)\n", fname);
771 if(ehdr==NULL)
return STATUS_FAULT;
772 if(fname==NULL)
return STATUS_FAULT;
775 if((fp=fopen(fname,
"r+b")) == NULL)
return STATUS_NOFILE;
779 if(ret) {fclose(fp);
return STATUS_NOMAINHEADER;}
781 if(strncmp(main_header.
magic_number, ECAT7V_MAGICNR, 7)!=0) {fclose(fp);
return STATUS_UNKNOWNFORMAT;}
785 if(ret!=STATUS_OK) {fclose(fp);
return ret;}
789 if(ret!=0) {fclose(fp);
return STATUS_CANNOTWRITE;}
800 for(mi=0; mi<mlist.
matrixNr; mi++) {
808 printf(
"bed := %d\n", ehdr->
m[mi].
matval.
bed);
811 &ehdr->
m[mi].
sh, verbose);
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,...
int ecat7EditMHeader(ECAT7_mainheader *h, char *field, char *value, int verbose)
int ecat7EditSHeader(ECAT7_scanheader *h, char *field, char *value, int verbose)
int ecat7EditVHeader(ECAT7_imageheader *h, char *field, char *value, int verbose)
int ecat7MainheaderFromIFT(ECAT7_mainheader *h, IFT *ift, int verbose)
int ecat7ReadSubheaderToIFT(FILE *fp, ECAT7_mainheader *h, int strtblk, IFT *ift, int verbose)
int ecat7MHeaderToIFT(ECAT7_mainheader *h, IFT *ift, int verbose)
void ehdrEmpty(ECAT_HEADERS *ehdr)
int ecat7WriteHeaders(const char *fname, ECAT_HEADERS *ehdr, int verbose)
void ematEmpty(ECAT_MATRIX *emat)
int ecat7ScanheaderToIFT(ECAT7_scanheader *h, IFT *ift, int verbose)
void ehdrInitiate(ECAT_HEADERS *ehdr)
void ematInitiate(ECAT_MATRIX *emat)
int ecat7ReadHeaders(const char *fname, ECAT_HEADERS *ehdr, int verbose)
int ehdrAllocate(ECAT_HEADERS *ehdr, int nr)
int ecat7WriteSubheaderFromIFT(FILE *fp, ECAT7_mainheader *h, int strtblk, IFT *ift, int verbose)
int ecat7ImageheaderToIFT(ECAT7_imageheader *h, IFT *ift, int verbose)
void ecat7InitMatlist(ECAT7_MATRIXLIST *mlist)
void ecat7_id_to_val(int matrix_id, ECAT7_Matval *matval)
int ecat7ReadMatlist(FILE *fp, ECAT7_MATRIXLIST *ml, int verbose)
void ecat7EmptyMatlist(ECAT7_MATRIXLIST *mlist)
int ecat7CheckMatlist(ECAT7_MATRIXLIST *ml)
int ecat7ReadScanheader(FILE *fp, int blk, ECAT7_scanheader *h)
int ecat7ReadPolmapheader(FILE *fp, int blk, ECAT7_polmapheader *h)
int ecat7ReadNormheader(FILE *fp, int blk, ECAT7_normheader *h)
int ecat7ReadAttenheader(FILE *fp, int blk, ECAT7_attenheader *h)
int ecat7ReadMainheader(FILE *fp, ECAT7_mainheader *h)
int ecat7Read2DScanheader(FILE *fp, int blk, ECAT7_2Dscanheader *h)
int ecat7ReadImageheader(FILE *fp, int blk, ECAT7_imageheader *h)
int ecat7Read2DNormheader(FILE *fp, int blk, ECAT7_2Dnormheader *h)
int ecat7WriteScanheader(FILE *fp, int blk, ECAT7_scanheader *h)
int ecat7WriteImageheader(FILE *fp, int blk, ECAT7_imageheader *h)
int ecat7WriteMainheader(FILE *fp, ECAT7_mainheader *h)
int iftPut(IFT *ift, char *key, char *value, char *cmt_type, int verbose)
int iftWrite(IFT *ift, char *filename, int verbose)
Header file for libtpcimgio.
Header file for libtpcmisc.
short int compression_code
float well_counter_corr_factor
char user_process_code[10]
short int angular_compression
short int calibration_units
short int acquisition_mode
short int calibration_units_label
float ecat_calibration_factor
short int transm_source_type
short int acquisition_type
char study_description[32]
short int axial_samp_mode
char radiopharmaceutical[32]
short int patient_orientation
char original_file_name[32]