TPCCLIB
Loading...
Searching...
No Matches
ecat7ift.c
Go to the documentation of this file.
1
5/*****************************************************************************/
6#include "libtpcmisc.h"
7#include "libtpcimgio.h"
8/*****************************************************************************/
9
10/*****************************************************************************/
14 ECAT_MATRIX *emat
15) {
16 emat->mnum=0;
17 iftInit(&emat->sh);
18 emat->f=(float*)NULL;
19}
23 ECAT_HEADERS *ehdr)
24{
25 iftInit(&ehdr->mh);
26 ehdr->nr=0;
27 ehdr->m=(ECAT_MATRIX*)NULL;
28}
29/*****************************************************************************/
30
31/*****************************************************************************/
35 ECAT_MATRIX *emat
36) {
37 if(emat==NULL) return;
38 emat->mnum=0;
39 iftEmpty(&emat->sh);
40 if(emat->f!=NULL) free(emat->f);
41 emat->f=NULL;
42}
43/*****************************************************************************/
44
45/*****************************************************************************/
49 ECAT_HEADERS *ehdr
50) {
51 int i;
52
53 if(ehdr==NULL) return;
54 iftEmpty(&ehdr->mh);
55 for(i=0; i<ehdr->nr; i++) {ematEmpty(&ehdr->m[i]);}
56 free(ehdr->m); ehdr->m=NULL; ehdr->nr=0;
57}
58/*****************************************************************************/
59
60/*****************************************************************************/
65 ECAT_HEADERS *ehdr,
67 int nr
68) {
69 int i;
70
71 if(ehdr==NULL || nr<1) return STATUS_FAULT;
72 for(i=0; i<ehdr->nr; i++) {ematEmpty(&ehdr->m[i]);}
73 free(ehdr->m); ehdr->m=NULL; ehdr->nr=0;
74 ehdr->m=(ECAT_MATRIX*)malloc(nr*sizeof(ECAT_MATRIX));
75 if(ehdr->m==NULL) return STATUS_NOMEMORY;
76 for(i=0; i<nr; i++) ematInitiate(&ehdr->m[i]);
77 ehdr->nr=nr;
78 return STATUS_OK;
79}
80/*****************************************************************************/
81
82/*****************************************************************************/
89 IFT *ift,
91 int verbose
92) {
93 int i;
94 char tmp[1024], tmp2[32];
95 time_t t;
96
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;
100
101 if(iftPut(ift, "magic_number", h->magic_number, NULL, 0)!=0) return STATUS_UNSUPPORTED;
102 if(iftPut(ift, "original_file_name", h->original_file_name, NULL, 0)!=0) return STATUS_UNSUPPORTED;
103 sprintf(tmp, "%d", h->sw_version);
104 if(iftPut(ift, "sw_version", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
105 sprintf(tmp, "%d", h->system_type);
106 if(iftPut(ift, "system_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
107 sprintf(tmp, "%d", h->file_type);
108 if(iftPut(ift, "file_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
109 if(iftPut(ift, "serial_number", h->serial_number, NULL, 0)!=0) return STATUS_UNSUPPORTED;
110 t=h->scan_start_time;
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;
114 sprintf(tmp, "%g", h->isotope_halflife);
115 if(iftPut(ift, "isotope_halflife", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
116 if(iftPut(ift, "radiopharmaceutical", h->radiopharmaceutical, NULL, 0)!=0) return STATUS_UNSUPPORTED;
117 sprintf(tmp, "%g", h->gantry_tilt);
118 if(iftPut(ift, "gantry_tilt", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
119 sprintf(tmp, "%g", h->gantry_rotation);
120 if(iftPut(ift, "gantry_rotation", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
121 sprintf(tmp, "%g", h->bed_elevation);
122 if(iftPut(ift, "bed_elevation", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
123 sprintf(tmp, "%g", h->intrinsic_tilt);
124 if(iftPut(ift, "intrinsic_tilt", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
125 sprintf(tmp, "%d", h->wobble_speed);
126 if(iftPut(ift, "wobble_speed", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
127 sprintf(tmp, "%d", h->transm_source_type);
128 if(iftPut(ift, "transm_source_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
129 sprintf(tmp, "%g", h->distance_scanned);
130 if(iftPut(ift, "distance_scanned", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
131 sprintf(tmp, "%g", h->transaxial_fov);
132 if(iftPut(ift, "transaxial_fov", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
133 sprintf(tmp, "%d", h->angular_compression);
134 if(iftPut(ift, "angular_compression", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
135 sprintf(tmp, "%d", h->coin_samp_mode);
136 if(iftPut(ift, "coin_samp_mode", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
137 sprintf(tmp, "%d", h->axial_samp_mode);
138 if(iftPut(ift, "axial_samp_mode", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
139 sprintf(tmp, "%E", h->ecat_calibration_factor);
140 if(iftPut(ift, "ecat_calibration_factor", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
141 sprintf(tmp, "%d", h->calibration_units);
142 if(iftPut(ift, "calibration_units", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
143 sprintf(tmp, "%d", h->calibration_units_label);
144 if(iftPut(ift, "calibration_units_label", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
145 sprintf(tmp, "%d", h->compression_code);
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;
150 sprintf(tmp, "%c", h->patient_sex);
151 if(iftPut(ift, "patient_sex", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
152 sprintf(tmp, "%c", h->patient_dexterity);
153 if(iftPut(ift, "patient_dexterity", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
154 sprintf(tmp, "%g", h->patient_age);
155 if(iftPut(ift, "patient_age", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
156 sprintf(tmp, "%g", h->patient_height);
157 if(iftPut(ift, "patient_height", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
158 sprintf(tmp, "%g", h->patient_weight);
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;
163 if(iftPut(ift, "physician_name", h->physician_name, NULL, 0)!=0) return STATUS_UNSUPPORTED;
164 if(iftPut(ift, "operator_name", h->operator_name, NULL, 0)!=0) return STATUS_UNSUPPORTED;
165 if(iftPut(ift, "study_description", h->study_description, NULL, 0)!=0) return STATUS_UNSUPPORTED;
166 sprintf(tmp, "%d", h->acquisition_type);
167 if(iftPut(ift, "acquisition_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
168 sprintf(tmp, "%d", h->patient_orientation);
169 if(iftPut(ift, "patient_orientation", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
170 if(iftPut(ift, "facility_name", h->facility_name, NULL, 0)!=0) return STATUS_UNSUPPORTED;
171 sprintf(tmp, "%d", h->num_planes);
172 if(iftPut(ift, "num_planes", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
173 sprintf(tmp, "%d", h->num_frames);
174 if(iftPut(ift, "num_frames", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
175 sprintf(tmp, "%d", h->num_gates);
176 if(iftPut(ift, "num_gates", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
177 sprintf(tmp, "%d", h->num_bed_pos);
178 if(iftPut(ift, "num_bed_pos", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
179 sprintf(tmp, "%g", h->init_bed_position);
180 if(iftPut(ift, "init_bed_position", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
181 sprintf(tmp, "%g", h->bed_position[0]);
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;
184 sprintf(tmp, "%g", h->plane_separation);
185 if(iftPut(ift, "plane_separation", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
186 sprintf(tmp, "%d", h->lwr_sctr_thres);
187 if(iftPut(ift, "lwr_sctr_thres", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
188 sprintf(tmp, "%d", h->lwr_true_thres);
189 if(iftPut(ift, "lwr_true_thres", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
190 sprintf(tmp, "%d", h->upr_true_thres);
191 if(iftPut(ift, "upr_true_thres", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
192 if(iftPut(ift, "user_process_code", h->user_process_code, NULL, 0)!=0) return STATUS_UNSUPPORTED;
193 sprintf(tmp, "%d", h->acquisition_mode);
194 if(iftPut(ift, "acquisition_mode", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
195 sprintf(tmp, "%g", h->bin_size);
196 if(iftPut(ift, "bin_size", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
197 sprintf(tmp, "%g", h->branching_fraction);
198 if(iftPut(ift, "branching_fraction", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
199 t=h->dose_start_time;
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;
204 sprintf(tmp, "%E", h->well_counter_corr_factor);
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;
207 sprintf(tmp, "%d", h->septa_state);
208 if(iftPut(ift, "septa_state", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
209
210 sprintf(tmp, "%d", h->fill_cti[0]);
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;
213
214 return STATUS_OK;
215}
216/*****************************************************************************/
217
218/*****************************************************************************/
225 IFT *ift,
227 int verbose
228) {
229 int ii, ret;
230
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);
234
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);
237 ret=ecat7EditMHeader(h, ift->item[ii].key, ift->item[ii].value, verbose-1);
238 if(ret!=0) {
239 if(verbose>0) fprintf(stderr, "Error with key '%s'\n", ift->item[ii].key);
240 break;
241 }
242 }
243 if(ret!=0) return STATUS_FAULT;
244 return STATUS_OK;
245}
246/*****************************************************************************/
247
248/*****************************************************************************/
255 IFT *ift,
257 int verbose
258) {
259 int i;
260 char tmp[1024], tmp2[32];
261
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;
265
266 sprintf(tmp, "%d", h->data_type);
267 if(iftPut(ift, "data_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
268 sprintf(tmp, "%d", h->num_dimensions);
269 if(iftPut(ift, "num_dimensions", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
270 sprintf(tmp, "%d", h->x_dimension);
271 if(iftPut(ift, "x_dimension", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
272 sprintf(tmp, "%d", h->y_dimension);
273 if(iftPut(ift, "y_dimension", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
274 sprintf(tmp, "%d", h->z_dimension);
275 if(iftPut(ift, "z_dimension", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
276 sprintf(tmp, "%g", h->x_offset);
277 if(iftPut(ift, "x_offset", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
278 sprintf(tmp, "%g", h->y_offset);
279 if(iftPut(ift, "y_offset", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
280 sprintf(tmp, "%g", h->z_offset);
281 if(iftPut(ift, "z_offset", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
282 sprintf(tmp, "%g", h->recon_zoom);
283 if(iftPut(ift, "recon_zoom", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
284 sprintf(tmp, "%E", h->scale_factor);
285 if(iftPut(ift, "scale_factor", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
286 sprintf(tmp, "%d", h->image_min);
287 if(iftPut(ift, "image_min", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
288 sprintf(tmp, "%d", h->image_max);
289 if(iftPut(ift, "image_max", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
290 sprintf(tmp, "%g", h->x_pixel_size);
291 if(iftPut(ift, "x_pixel_size", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
292 sprintf(tmp, "%g", h->y_pixel_size);
293 if(iftPut(ift, "y_pixel_size", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
294 sprintf(tmp, "%g", h->z_pixel_size);
295 if(iftPut(ift, "z_pixel_size", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
296 sprintf(tmp, "%d", h->frame_duration);
297 if(iftPut(ift, "frame_duration", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
298 sprintf(tmp, "%d", h->frame_start_time);
299 if(iftPut(ift, "frame_start_time", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
300 sprintf(tmp, "%d", h->filter_code);
301 if(iftPut(ift, "filter_code", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
302 sprintf(tmp, "%g", h->x_resolution);
303 if(iftPut(ift, "x_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
304 sprintf(tmp, "%g", h->y_resolution);
305 if(iftPut(ift, "y_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
306 sprintf(tmp, "%g", h->z_resolution);
307 if(iftPut(ift, "z_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
308 sprintf(tmp, "%g", h->num_r_elements);
309 if(iftPut(ift, "num_r_elements", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
310 sprintf(tmp, "%g", h->num_angles);
311 if(iftPut(ift, "num_angles", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
312 sprintf(tmp, "%g", h->z_rotation_angle);
313 if(iftPut(ift, "z_rotation_angle", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
314 sprintf(tmp, "%g", h->decay_corr_fctr);
315 if(iftPut(ift, "decay_corr_fctr", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
316 sprintf(tmp, "%d", h->processing_code);
317 if(iftPut(ift, "processing_code", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
318 sprintf(tmp, "%d", h->gate_duration);
319 if(iftPut(ift, "gate_duration", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
320 sprintf(tmp, "%d", h->r_wave_offset);
321 if(iftPut(ift, "r_wave_offset", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
322 sprintf(tmp, "%d", h->num_accepted_beats);
323 if(iftPut(ift, "num_accepted_beats", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
324 sprintf(tmp, "%E", h->filter_cutoff_frequency);
325 if(iftPut(ift, "filter_cutoff_frequency", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
326 sprintf(tmp, "%E", h->filter_resolution);
327 if(iftPut(ift, "filter_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
328 sprintf(tmp, "%E", h->filter_ramp_slope);
329 if(iftPut(ift, "filter_ramp_slope", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
330 sprintf(tmp, "%d", h->filter_order);
331 if(iftPut(ift, "filter_order", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
332 sprintf(tmp, "%E", h->filter_scatter_fraction);
333 if(iftPut(ift, "filter_scatter_fraction", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
334 sprintf(tmp, "%E", h->filter_scatter_slope);
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;
355 sprintf(tmp, "%g", h->rfilter_cutoff);
356 if(iftPut(ift, "rfilter_cutoff", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
357 sprintf(tmp, "%g", h->rfilter_resolution);
358 if(iftPut(ift, "rfilter_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
359 sprintf(tmp, "%d", h->rfilter_code);
360 if(iftPut(ift, "rfilter_code", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
361 sprintf(tmp, "%d", h->rfilter_order);
362 if(iftPut(ift, "rfilter_order", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
363 sprintf(tmp, "%g", h->zfilter_cutoff);
364 if(iftPut(ift, "zfilter_cutoff", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
365 sprintf(tmp, "%g", h->zfilter_resolution);
366 if(iftPut(ift, "zfilter_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
367 sprintf(tmp, "%d", h->zfilter_code);
368 if(iftPut(ift, "zfilter_code", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
369 sprintf(tmp, "%d", h->zfilter_order);
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;
377 sprintf(tmp, "%d", h->scatter_type);
378 if(iftPut(ift, "scatter_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
379 sprintf(tmp, "%d", h->recon_type);
380 if(iftPut(ift, "recon_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
381 sprintf(tmp, "%d", h->recon_views);
382 if(iftPut(ift, "recon_views", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
383
384 sprintf(tmp, "%d", h->fill_cti[0]);
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;
387
388 sprintf(tmp, "%d", h->fill_user[0]);
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;
391
392/*
393 if(iftPut(ift, "", h->, NULL)!=0) return STATUS_UNSUPPORTED;
394
395 sprintf(tmp, "%g", h->);
396 if(iftPut(ift, "", tmp, NULL)!=0) return STATUS_UNSUPPORTED;
397
398 sprintf(tmp, "%d", h->);
399 if(iftPut(ift, "", tmp, NULL)!=0) return STATUS_UNSUPPORTED;
400 */
401 return STATUS_OK;
402}
403/*****************************************************************************/
404
405/*****************************************************************************/
412 IFT *ift,
414 int verbose
415) {
416 int i;
417 char tmp[1024], tmp2[32];
418
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;
422
423 sprintf(tmp, "%d", h->data_type);
424 if(iftPut(ift, "data_type", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
425 sprintf(tmp, "%d", h->num_dimensions);
426 if(iftPut(ift, "num_dimensions", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
427 sprintf(tmp, "%d", h->num_r_elements);
428 if(iftPut(ift, "num_r_elements", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
429 sprintf(tmp, "%d", h->num_angles);
430 if(iftPut(ift, "num_angles", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
431 sprintf(tmp, "%d", h->corrections_applied);
432 if(iftPut(ift, "corrections_applied", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
433 sprintf(tmp, "%d", h->num_z_elements[0]);
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;
436 sprintf(tmp, "%d", h->ring_difference);
437 if(iftPut(ift, "ring_difference", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
438 sprintf(tmp, "%d", h->storage_order);
439 if(iftPut(ift, "storage_order", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
440 sprintf(tmp, "%d", h->axial_compression);
441 if(iftPut(ift, "axial_compression", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
442 sprintf(tmp, "%g", h->x_resolution);
443 if(iftPut(ift, "x_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
444 sprintf(tmp, "%g", h->v_resolution);
445 if(iftPut(ift, "v_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
446 sprintf(tmp, "%g", h->z_resolution);
447 if(iftPut(ift, "z_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
448 sprintf(tmp, "%g", h->w_resolution);
449 if(iftPut(ift, "w_resolution", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
450 sprintf(tmp, "%d", h->gate_duration);
451 if(iftPut(ift, "gate_duration", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
452 sprintf(tmp, "%d", h->r_wave_offset);
453 if(iftPut(ift, "r_wave_offset", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
454 sprintf(tmp, "%d", h->num_accepted_beats);
455 if(iftPut(ift, "num_accepted_beats", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
456 sprintf(tmp, "%E", h->scale_factor);
457 if(iftPut(ift, "scale_factor", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
458 sprintf(tmp, "%d", h->scan_min);
459 if(iftPut(ift, "scan_min", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
460 sprintf(tmp, "%d", h->scan_max);
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;
466 sprintf(tmp, "%d", h->multiples);
467 if(iftPut(ift, "multiples", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
468 sprintf(tmp, "%d", h->net_trues);
469 if(iftPut(ift, "net_trues", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
470 sprintf(tmp, "%g", h->tot_avg_cor);
471 if(iftPut(ift, "tot_avg_cor", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
472 sprintf(tmp, "%g", h->tot_avg_uncor);
473 if(iftPut(ift, "tot_avg_uncor", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
474 sprintf(tmp, "%d", h->total_coin_rate);
475 if(iftPut(ift, "total_coin_rate", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
476 sprintf(tmp, "%d", h->frame_start_time);
477 if(iftPut(ift, "frame_start_time", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
478 sprintf(tmp, "%d", h->frame_duration);
479 if(iftPut(ift, "frame_duration", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
480 sprintf(tmp, "%g", h->deadtime_correction_factor);
481 if(iftPut(ift, "deadtime_correction_factor", tmp, NULL, 0)!=0) return STATUS_UNSUPPORTED;
482 sprintf(tmp, "%g", h->uncor_singles[0]);
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;
485
486/*
487 if(iftPut(ift, "", h->, NULL)!=0) return STATUS_UNSUPPORTED;
488
489 sprintf(tmp, "%g", h->);
490 if(iftPut(ift, "", tmp, NULL)!=0) return STATUS_UNSUPPORTED;
491
492 sprintf(tmp, "%d", h->);
493 if(iftPut(ift, "", tmp, NULL)!=0) return STATUS_UNSUPPORTED;
494 */
495 return STATUS_OK;
496}
497/*****************************************************************************/
498
499/*****************************************************************************/
504 FILE *fp,
508 int strtblk,
510 IFT *ift,
512 int verbose
513) {
514 ECAT7_imageheader image_header;
515 ECAT7_scanheader scan_header;
516 ECAT7_2Dscanheader scan2D_header;
517 ECAT7_2Dnormheader norm2D_header;
518 ECAT7_normheader norm_header;
519 ECAT7_attenheader atten_header;
520 ECAT7_polmapheader polmap_header;
521 int ret;
522
523 if(verbose>0) printf("ecat7ReadSubheaderToIFT(fp, mh, %d, ift)\n", strtblk);
524 /* Check input */
525 if(fp==NULL || h==NULL || strtblk<3 || ift==NULL) return STATUS_FAULT;
526
527 /* Read subheader and copy into IFT */
528 //if(iftPut(ift, "test_key", "test_value", NULL)!=0) return STATUS_UNSUPPORTED;
529 switch(h->file_type) {
530 case ECAT7_ATTEN:
531 ret=ecat7ReadAttenheader(fp, strtblk, &atten_header);
532 if(ret!=0) return STATUS_NOSUBHEADER;
533 return STATUS_UNSUPPORTED;
534 break;
535 case ECAT7_3DNORM:
536 ret=ecat7ReadNormheader(fp, strtblk, &norm_header);
537 if(ret!=0) return STATUS_NOSUBHEADER;
538 return STATUS_UNSUPPORTED;
539 break;
540 case ECAT7_IMAGE8:
541 case ECAT7_IMAGE16:
542 case ECAT7_VOLUME8:
543 case ECAT7_VOLUME16:
544 ret=ecat7ReadImageheader(fp, strtblk, &image_header);
545 if(ret!=0) return STATUS_NOSUBHEADER;
546 ret=ecat7ImageheaderToIFT(&image_header, ift, verbose);
547 if(ret!=STATUS_OK) return ret;
548 break;
549 case ECAT7_3DSCAN:
550 case ECAT7_3DSCAN8:
551 case ECAT7_3DSCANFIT:
552 ret=ecat7ReadScanheader(fp, strtblk, &scan_header);
553 if(ret!=0) return STATUS_NOSUBHEADER;
554 ret=ecat7ScanheaderToIFT(&scan_header, ift, verbose);
555 if(ret!=STATUS_OK) return ret;
556 ret=ecat7WriteScanheader(fp, strtblk, &scan_header);
557 break;
558 case ECAT7_POLARMAP:
559 ret=ecat7ReadPolmapheader(fp, strtblk, &polmap_header);
560 if(ret!=0) return STATUS_NOSUBHEADER;
561 return STATUS_UNSUPPORTED;
562 break;
563 case ECAT7_2DSCAN:
564 ret=ecat7Read2DScanheader(fp, strtblk, &scan2D_header);
565 if(ret!=0) return STATUS_NOSUBHEADER;
566 return STATUS_UNSUPPORTED;
567 break;
568 case ECAT7_2DNORM:
569 ret=ecat7Read2DNormheader(fp, strtblk, &norm2D_header);
570 if(ret!=0) return STATUS_NOSUBHEADER;
571 return STATUS_UNSUPPORTED;
572 break;
573 default:
574 return STATUS_UNSUPPORTED;
575 }
576 return STATUS_OK;
577}
578/*****************************************************************************/
579
580/*****************************************************************************/
585 FILE *fp,
589 int strtblk,
591 IFT *ift,
593 int verbose
594) {
595 ECAT7_imageheader image_header;
596 ECAT7_scanheader scan_header;
597 ECAT7_2Dscanheader scan2D_header;
598 ECAT7_2Dnormheader norm2D_header;
599 ECAT7_normheader norm_header;
600 ECAT7_attenheader atten_header;
601 ECAT7_polmapheader polmap_header;
602 int ii, ret;
603
604 if(verbose>0) printf("ecat7WriteSubheaderFromIFT(fp, mh, %d, ift)\n", strtblk);
605 /* Check input */
606 if(fp==NULL || h==NULL || strtblk<3 || ift==NULL) return STATUS_FAULT;
607
608 /* Read subheader, set its contents from IFT, write subheader back */
609 switch(h->file_type) {
610 case ECAT7_ATTEN:
611 ret=ecat7ReadAttenheader(fp, strtblk, &atten_header);
612 if(ret!=0) return STATUS_NOSUBHEADER;
613 return STATUS_UNSUPPORTED;
614 break;
615 case ECAT7_3DNORM:
616 ret=ecat7ReadNormheader(fp, strtblk, &norm_header);
617 if(ret!=0) return STATUS_NOSUBHEADER;
618 return STATUS_UNSUPPORTED;
619 break;
620 case ECAT7_IMAGE8:
621 case ECAT7_IMAGE16:
622 case ECAT7_VOLUME8:
623 case ECAT7_VOLUME16:
624/*
625 ret=ecat7ImageheaderToIFT(&image_header, ift); if(ret!=STATUS_OK) return ret;
626*/
627 ret=ecat7ReadImageheader(fp, strtblk, &image_header);
628 if(ret!=0) return STATUS_NOSUBHEADER;
629 for(ii=ret=0; ii<ift->keyNr; ii++) {
630 if(verbose>7)
631 printf(" key := %s\n value := %s\n",
632 ift->item[ii].key, ift->item[ii].value);
633 ret=ecat7EditVHeader(&image_header, ift->item[ii].key, ift->item[ii].value, verbose-2);
634 if(ret!=0) {
635 if(verbose>0) fprintf(stderr, "Error with key '%s'\n", ift->item[ii].key);
636 break;
637 }
638 }
639 if(ret!=0) return STATUS_FAULT;
640 ret=ecat7WriteImageheader(fp, strtblk, &image_header);
641 if(ret!=0) return STATUS_NOSUBHEADER;
642 break;
643 case ECAT7_3DSCAN:
644 case ECAT7_3DSCAN8:
645 case ECAT7_3DSCANFIT:
646 ret=ecat7ReadScanheader(fp, strtblk, &scan_header);
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);
650 ret=ecat7EditSHeader(&scan_header, ift->item[ii].key, ift->item[ii].value, verbose-2);
651 if(ret!=0) {
652 if(verbose>0) fprintf(stderr, "Error with key '%s'\n", ift->item[ii].key);
653 break;
654 }
655 }
656 if(ret!=0) return STATUS_FAULT;
657 ret=ecat7WriteScanheader(fp, strtblk, &scan_header);
658 if(ret!=0) return STATUS_NOSUBHEADER;
659 break;
660 case ECAT7_POLARMAP:
661 ret=ecat7ReadPolmapheader(fp, strtblk, &polmap_header);
662 if(ret!=0) return STATUS_NOSUBHEADER;
663 return STATUS_UNSUPPORTED;
664 break;
665 case ECAT7_2DSCAN:
666 ret=ecat7Read2DScanheader(fp, strtblk, &scan2D_header);
667 if(ret!=0) return STATUS_NOSUBHEADER;
668 return STATUS_UNSUPPORTED;
669 break;
670 case ECAT7_2DNORM:
671 ret=ecat7Read2DNormheader(fp, strtblk, &norm2D_header);
672 if(ret!=0) return STATUS_NOSUBHEADER;
673 return STATUS_UNSUPPORTED;
674 break;
675 default:
676 return STATUS_UNSUPPORTED;
677 }
678 return STATUS_OK;
679}
680/*****************************************************************************/
681
682/*****************************************************************************/
689 const char *fname,
691 ECAT_HEADERS *ehdr,
693 int verbose
694) {
695 ECAT7_mainheader main_header;
696 ECAT7_MATRIXLIST mlist;
697 FILE *fp;
698 int ret, mi;
699
700
701 if(verbose>0) printf("ecat7ReadHeaders(%s, ehdr)\n", fname);
702 /* Check the arguments */
703 if(ehdr==NULL) return STATUS_FAULT;
704 if(fname==NULL) return STATUS_FAULT;
705
706 /* Open the file */
707 if(verbose>1) printf("open %s\n", fname);
708 if((fp=fopen(fname, "rb")) == NULL) return STATUS_NOFILE;
709
710 /* Read main header */
711 ret=ecat7ReadMainheader(fp, &main_header);
712 if(ret) {fclose(fp); return STATUS_NOMAINHEADER;}
713 /* Check for magic number */
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;}
716 /* Copy main header information into IFT */
717 ret=ecat7MHeaderToIFT(&main_header, &ehdr->mh, verbose);
718 if(ret!=STATUS_OK) {fclose(fp); return ret;}
719 if(verbose>5) iftWrite(&ehdr->mh, "stdout", 0);
720
721 /* Read matrix list */
722 ecat7InitMatlist(&mlist);
723 ret=ecat7ReadMatlist(fp, &mlist, verbose-1);
724 if(ret || mlist.matrixNr<1 || ecat7CheckMatlist(&mlist)) {fclose(fp); return STATUS_INVALIDMATLIST;}
725 /* Allocate space for each matrix */
726 ret=ehdrAllocate(ehdr, mlist.matrixNr);
727 if(ret!=STATUS_OK) {fclose(fp); ecat7EmptyMatlist(&mlist); return ret;}
728 /* Read one subheader at a time */
729 for(mi=0; mi<mlist.matrixNr; mi++) {
730 ehdr->m[mi].mnum=mlist.matdir[mi].id;
731 ecat7_id_to_val(mlist.matdir[mi].id, &ehdr->m[mi].matval);
732 if(verbose>2) {
733 printf("frame := %d\n", ehdr->m[mi].matval.frame);
734 printf("plane := %d\n", ehdr->m[mi].matval.plane);
735 printf("gate := %d\n", ehdr->m[mi].matval.gate);
736 printf("data := %d\n", ehdr->m[mi].matval.data);
737 printf("bed := %d\n", ehdr->m[mi].matval.bed);
738 }
739 ret=ecat7ReadSubheaderToIFT(fp, &main_header, mlist.matdir[mi].strtblk,
740 &ehdr->m[mi].sh, verbose);
741 if(ret!=STATUS_OK) {fclose(fp); ecat7EmptyMatlist(&mlist); return ret;}
742 //iftWrite(&ehdr->m[mi].sh, "stdout");
743 } // next matrix
744 fclose(fp); ecat7EmptyMatlist(&mlist);
745
746 return STATUS_OK;
747}
748/*****************************************************************************/
749
750/*****************************************************************************/
757 const char *fname,
759 ECAT_HEADERS *ehdr,
761 int verbose
762) {
763 ECAT7_mainheader main_header;
764 ECAT7_MATRIXLIST mlist;
765 FILE *fp;
766 int ret, mi;
767
768
769 if(verbose>0) printf("ecat7WriteHeaders(%s, ehdr)\n", fname);
770 /* Check the arguments */
771 if(ehdr==NULL) return STATUS_FAULT;
772 if(fname==NULL) return STATUS_FAULT;
773
774 /* Open the file */
775 if((fp=fopen(fname, "r+b")) == NULL) return STATUS_NOFILE;
776
777 /* Read main header */
778 ret=ecat7ReadMainheader(fp, &main_header);
779 if(ret) {fclose(fp); return STATUS_NOMAINHEADER;}
780 /* Check for magic number */
781 if(strncmp(main_header.magic_number, ECAT7V_MAGICNR, 7)!=0) {fclose(fp); return STATUS_UNKNOWNFORMAT;}
782 /* Copy IFT contents into main header */
783 //iftWrite(&ehdr->mh, "stdout");
784 ret=ecat7MainheaderFromIFT(&main_header, &ehdr->mh, verbose);
785 if(ret!=STATUS_OK) {fclose(fp); return ret;}
786 //if(HEADER_TEST>5) iftWrite(&ehdr->mh, "stdout");
787 /* Write mainheader */
788 ret=ecat7WriteMainheader(fp, &main_header);
789 if(ret!=0) {fclose(fp); return STATUS_CANNOTWRITE;}
790 /* Read matrix list */
791 ecat7InitMatlist(&mlist);
792 ret=ecat7ReadMatlist(fp, &mlist, verbose-1);
793 if(ret || mlist.matrixNr<1 || ecat7CheckMatlist(&mlist)) {fclose(fp); return STATUS_INVALIDMATLIST;}
794#if(0)
795 /* Allocate space for each matrix */
796 ret=ehdrAllocate(ehdr, mlist.matrixNr);
797 if(ret!=STATUS_OK) {fclose(fp); ecat7EmptyMatlist(&mlist); return ret;}
798#endif
799 /* Edit one subheader at a time */
800 for(mi=0; mi<mlist.matrixNr; mi++) {
801 ehdr->m[mi].mnum=mlist.matdir[mi].id;
802 ecat7_id_to_val(mlist.matdir[mi].id, &ehdr->m[mi].matval);
803 if(verbose>2) {
804 printf("frame := %d\n", ehdr->m[mi].matval.frame);
805 printf("plane := %d\n", ehdr->m[mi].matval.plane);
806 printf("gate := %d\n", ehdr->m[mi].matval.gate);
807 printf("data := %d\n", ehdr->m[mi].matval.data);
808 printf("bed := %d\n", ehdr->m[mi].matval.bed);
809 }
810 ret=ecat7WriteSubheaderFromIFT(fp, &main_header, mlist.matdir[mi].strtblk,
811 &ehdr->m[mi].sh, verbose);
812 if(ret!=STATUS_OK) {fclose(fp); ecat7EmptyMatlist(&mlist); return ret;}
813 //iftWrite(&ehdr->m[mi].sh, "stdout");
814 } // next matrix
815 fclose(fp); ecat7EmptyMatlist(&mlist);
816
817 return STATUS_OK;
818}
819/*****************************************************************************/
820
821/*****************************************************************************/
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,...
Definition datetime.c:110
int ecat7EditMHeader(ECAT7_mainheader *h, char *field, char *value, int verbose)
Definition ecat7h.c:16
int ecat7EditSHeader(ECAT7_scanheader *h, char *field, char *value, int verbose)
Definition ecat7h.c:199
int ecat7EditVHeader(ECAT7_imageheader *h, char *field, char *value, int verbose)
Definition ecat7h.c:320
int ecat7MainheaderFromIFT(ECAT7_mainheader *h, IFT *ift, int verbose)
Definition ecat7ift.c:221
int ecat7ReadSubheaderToIFT(FILE *fp, ECAT7_mainheader *h, int strtblk, IFT *ift, int verbose)
Definition ecat7ift.c:502
int ecat7MHeaderToIFT(ECAT7_mainheader *h, IFT *ift, int verbose)
Definition ecat7ift.c:85
void ehdrEmpty(ECAT_HEADERS *ehdr)
Definition ecat7ift.c:47
int ecat7WriteHeaders(const char *fname, ECAT_HEADERS *ehdr, int verbose)
Definition ecat7ift.c:755
void ematEmpty(ECAT_MATRIX *emat)
Definition ecat7ift.c:33
int ecat7ScanheaderToIFT(ECAT7_scanheader *h, IFT *ift, int verbose)
Definition ecat7ift.c:408
void ehdrInitiate(ECAT_HEADERS *ehdr)
Definition ecat7ift.c:21
void ematInitiate(ECAT_MATRIX *emat)
Definition ecat7ift.c:12
int ecat7ReadHeaders(const char *fname, ECAT_HEADERS *ehdr, int verbose)
Definition ecat7ift.c:687
int ehdrAllocate(ECAT_HEADERS *ehdr, int nr)
Definition ecat7ift.c:63
int ecat7WriteSubheaderFromIFT(FILE *fp, ECAT7_mainheader *h, int strtblk, IFT *ift, int verbose)
Definition ecat7ift.c:583
int ecat7ImageheaderToIFT(ECAT7_imageheader *h, IFT *ift, int verbose)
Definition ecat7ift.c:251
void ecat7InitMatlist(ECAT7_MATRIXLIST *mlist)
Definition ecat7ml.c:15
void ecat7_id_to_val(int matrix_id, ECAT7_Matval *matval)
Definition ecat7ml.c:262
int ecat7ReadMatlist(FILE *fp, ECAT7_MATRIXLIST *ml, int verbose)
Definition ecat7ml.c:41
void ecat7EmptyMatlist(ECAT7_MATRIXLIST *mlist)
Definition ecat7ml.c:26
int ecat7CheckMatlist(ECAT7_MATRIXLIST *ml)
Definition ecat7ml.c:329
int ecat7ReadScanheader(FILE *fp, int blk, ECAT7_scanheader *h)
Definition ecat7r.c:536
int ecat7ReadPolmapheader(FILE *fp, int blk, ECAT7_polmapheader *h)
Definition ecat7r.c:397
int ecat7ReadNormheader(FILE *fp, int blk, ECAT7_normheader *h)
Definition ecat7r.c:472
int ecat7ReadAttenheader(FILE *fp, int blk, ECAT7_attenheader *h)
Definition ecat7r.c:311
int ecat7ReadMainheader(FILE *fp, ECAT7_mainheader *h)
Definition ecat7r.c:15
int ecat7Read2DScanheader(FILE *fp, int blk, ECAT7_2Dscanheader *h)
Definition ecat7r.c:631
int ecat7ReadImageheader(FILE *fp, int blk, ECAT7_imageheader *h)
Definition ecat7r.c:162
int ecat7Read2DNormheader(FILE *fp, int blk, ECAT7_2Dnormheader *h)
Definition ecat7r.c:725
int ecat7WriteScanheader(FILE *fp, int blk, ECAT7_scanheader *h)
Definition ecat7w.c:383
int ecat7WriteImageheader(FILE *fp, int blk, ECAT7_imageheader *h)
Definition ecat7w.c:113
int ecat7WriteMainheader(FILE *fp, ECAT7_mainheader *h)
Definition ecat7w.c:16
int iftPut(IFT *ift, char *key, char *value, char *cmt_type, int verbose)
Definition ift.c:82
void iftEmpty(IFT *ift)
Definition ift.c:60
void iftInit(IFT *ift)
Definition ift.c:45
int iftWrite(IFT *ift, char *filename, int verbose)
Definition iftfile.c:282
Header file for libtpcimgio.
#define ECAT7_VOLUME8
#define ECAT7_ATTEN
#define ECAT7_3DSCAN
#define ECAT7_3DSCAN8
#define ECAT7_IMAGE16
#define ECAT7_3DSCANFIT
#define ECAT7_VOLUME16
#define ECAT7_3DNORM
#define ECAT7_IMAGE8
#define ECAT7_2DNORM
#define ECAT7_POLARMAP
#define ECAT7_2DSCAN
Header file for libtpcmisc.
ECAT7_MatDir * matdir
short int fill_cti[87]
float filter_scatter_fraction
short int filter_code
short int image_max
short int image_min
short int zfilter_order
short int fill_user[49]
short int rfilter_code
float filter_cutoff_frequency
short int zfilter_code
short int filter_order
short int y_dimension
short int z_dimension
short int recon_type
short int scatter_type
short int recon_views
short int num_dimensions
short int rfilter_order
short int x_dimension
short int data_type
short int file_type
short int compression_code
float bed_position[15]
short int system_type
char facility_name[20]
short int num_frames
char operator_name[32]
short int coin_samp_mode
char data_units[32]
char magic_number[14]
float well_counter_corr_factor
char study_type[12]
char user_process_code[10]
short int angular_compression
short int calibration_units
char patient_name[32]
short int fill_cti[6]
short int septa_state
short int num_gates
short int num_planes
short int lwr_true_thres
char physician_name[32]
short int wobble_speed
short int acquisition_mode
short int calibration_units_label
char serial_number[10]
short int num_bed_pos
float ecat_calibration_factor
short int sw_version
short int transm_source_type
short int acquisition_type
char study_description[32]
short int axial_samp_mode
char patient_id[16]
char radiopharmaceutical[32]
short int patient_orientation
short int upr_true_thres
short int lwr_sctr_thres
char original_file_name[32]
short int scan_min
short int num_r_elements
short int num_angles
short int data_type
float deadtime_correction_factor
short int fill_cti[90]
short int num_dimensions
short int axial_compression
short int storage_order
float uncor_singles[128]
short int scan_max
short int num_z_elements[64]
short int ring_difference
short int corrections_applied
ECAT_MATRIX * m
ECAT7_Matval matval
int keyNr
Definition libtpcmisc.h:270
IFT_KEY_AND_VALUE * item
Definition libtpcmisc.h:279