TPCCLIB
Loading...
Searching...
No Matches
ecat63h.c
Go to the documentation of this file.
1
5/*****************************************************************************/
7char ecat63errmsg[128];
8/*****************************************************************************/
9#include "libtpcimgio.h"
10/*****************************************************************************/
11
12/*****************************************************************************/
21) {
22 int i;
23
24 if(h1==NULL || h2==NULL) return(1);
25 memset(h2, 0, sizeof(ECAT63_mainheader));
26
27 for(i=0; i<14; i++) h2->ecat_format[i]=h1->ecat_format[i];
28 for(i=0; i<14; i++) h2->fill1[i]=h1->fill1[i];
29 for(i=0; i<20; i++) h2->original_file_name[i]=h1->original_file_name[i];
30 h2->sw_version=h1->sw_version;
31 h2->data_type=h1->data_type;
33 h2->file_type=h1->file_type;
34 for(i=0; i<10; i++) h2->node_id[i]=h1->node_id[i];
41 for(i=0; i<8; i++) h2->isotope_code[i]=h1->isotope_code[i];
43 for(i=0; i<32; i++) h2->radiopharmaceutical[i]=h1->radiopharmaceutical[i];
50 h2->axial_fov=h1->axial_fov;
58 for(i=0; i<12; i++) h2->study_name[i]=h1->study_name[i];
59 for(i=0; i<16; i++) h2->patient_id[i]=h1->patient_id[i];
60 for(i=0; i<32; i++) h2->patient_name[i]=h1->patient_name[i];
62 for(i=0; i<10; i++) h2->patient_age[i]=h1->patient_age[i];
63 for(i=0; i<10; i++) h2->patient_height[i]=h1->patient_height[i];
64 for(i=0; i<10; i++) h2->patient_weight[i]=h1->patient_weight[i];
66 for(i=0; i<32; i++) h2->physician_name[i]=h1->physician_name[i];
67 for(i=0; i<32; i++) h2->operator_name[i]=h1->operator_name[i];
68 for(i=0; i<32; i++) h2->study_description[i]=h1->study_description[i];
70 h2->bed_type=h1->bed_type;
71 h2->septa_type=h1->septa_type;
72 for(i=0; i<20; i++) h2->facility_name[i]=h1->facility_name[i];
73 h2->num_planes=h1->num_planes;
74 h2->num_frames=h1->num_frames;
75 h2->num_gates=h1->num_gates;
78 for(i=0; i<15; i++) h2->bed_offset[i]=h1->bed_offset[i];
83 h2->collimator=h1->collimator;
84 for(i=0; i<10; i++) h2->user_process_code[i]=h1->user_process_code[i];
85 for(i=0; i<20; i++) h2->fill2[i]=h1->fill2[i];
86 return(0);
87}
88/*****************************************************************************/
89
90/*****************************************************************************/
99) {
100 int i;
101
102 if(h1==NULL || h2==NULL) return(1);
103 memset(h2, 0, sizeof(ECAT63_scanheader));
104
105 for(i=0; i<126; i++) h2->fill1[i]=h1->fill1[i];
106 h2->data_type=h1->data_type;
107 h2->dimension_1=h1->dimension_1;
108 h2->dimension_2=h1->dimension_2;
109 h2->smoothing=h1->smoothing;
117 h2->scan_min=h1->scan_min;
118 h2->scan_max=h1->scan_max;
119 h2->prompts=h1->prompts;
120 h2->delayed=h1->delayed;
121 h2->multiples=h1->multiples;
122 h2->net_trues=h1->net_trues;
123 for(i=0; i<16; i++) h2->cor_singles[i]=h1->cor_singles[i];
124 for(i=0; i<16; i++) h2->uncor_singles[i]=h1->uncor_singles[i];
125 h2->tot_avg_cor=h1->tot_avg_cor;
131 for(i=0; i<22; i++) h2->fill2[i]=h1->fill2[i];
132 return(0);
133}
134/*****************************************************************************/
135
136/*****************************************************************************/
144 char *field,
146 char *value,
148 int verbose
149) {
150// int yy, mm, dd;
151 short int si;
152 float f;
153
154 if(verbose>0) printf("ecat63EditMHeader('%s', '%s')\n", field, value);
155 si=atoi(value); f=atof(value);
156
157 if(strcmp(field, "ecat_format")==0 || strcmp(field, "magic_number")==0) {
158 strlcpy(h->ecat_format, value, 14);
159 } else if(strcmp(field, "fill1")==0) {
160 strlcpy(h->fill1, value, 14);
161 } else if(strcmp(field, "original_file_name")==0) {
162 strlcpy(h->original_file_name, value, 20);
163 } else if(strcmp(field, "sw_version")==0) {
164 if(si<=0) return(2); else h->sw_version=si;
165 } else if(strcmp(field, "data_type")==0) {
166 if(si<0) return(2); else h->data_type=si;
167 } else if(strcmp(field, "system_type")==0) {
168 if(si<0) return(2); else h->system_type=si;
169 } else if(strcmp(field, "file_type")==0) {
170 if(si<0) return(2); else h->file_type=si;
171 } else if(strcmp(field, "node_id")==0 || strcmp(field, "serial_number")==0) {
172 strlcpy(h->node_id, value, 10);
173 } else if(strcmp(field, "scan_start_day")==0) {
174 if(si<0) return(2); else h->scan_start_day=si;
175 } else if(strcmp(field, "scan_start_month")==0) {
176 if(si<0) return(2); else h->scan_start_month=si;
177 } else if(strcmp(field, "scan_start_year")==0) {
178 if(si<0) return(2); else h->scan_start_year=si;
179 } else if(strcmp(field, "scan_start_hour")==0) {
180 if(si<0) return(2); else h->scan_start_hour=si;
181 } else if(strcmp(field, "scan_start_minute")==0) {
182 if(si<0) return(2); else h->scan_start_minute=si;
183 } else if(strcmp(field, "scan_start_second")==0) {
184 if(si<0) return(2); else h->scan_start_second=si;
185 } else if(strcmp(field, "scan_start_time")==0) {
186 int YYYY, MM, DD, hh, mm, ss, n;
187 n=sscanf(value, "%d-%d-%d %d:%d:%d", &YYYY, &MM, &DD, &hh, &mm, &ss);
188 if(n!=6 && n!=3) return(2);
189 h->scan_start_year=YYYY;
190 h->scan_start_month=MM;
191 h->scan_start_day=DD;
192 if(n==6) {
193 h->scan_start_hour=hh;
194 h->scan_start_minute=mm;
195 h->scan_start_second=ss;
196 }
197 } else if(strcmp(field, "isotope_code")==0 || strcmp(field, "isotope_name")==0) {
198 strlcpy(h->isotope_code, value, 8);
199 } else if(strcmp(field, "isotope_halflife")==0) {
200 if(f<=1.0E-3) return(2); else h->isotope_halflife=f;
201 } else if(strcmp(field, "radiopharmaceutical")==0) {
202 strlcpy(h->radiopharmaceutical, value, 32);
203 } else if(strcmp(field, "gantry_tilt")==0) {
204 h->gantry_tilt=f;
205 } else if(strcmp(field, "gantry_rotation")==0) {
206 h->gantry_rotation=f;
207 } else if(strcmp(field, "bed_elevation")==0) {
208 h->bed_elevation=f;
209 } else if(strcmp(field, "rot_source_speed")==0) {
210 h->rot_source_speed=si;
211 } else if(strcmp(field, "wobble_speed")==0) {
212 h->wobble_speed=si;
213 } else if(strcmp(field, "transm_source_type")==0) {
214 h->transm_source_type=si;
215 } else if(strcmp(field, "axial_fov")==0) {
216 h->axial_fov=f;
217 } else if(strcmp(field, "transaxial_fov")==0) {
218 h->transaxial_fov=f;
219 } else if(strcmp(field, "transaxial_samp_mode")==0) {
221 } else if(strcmp(field, "coin_samp_mode")==0) {
222 h->coin_samp_mode=si;
223 } else if(strcmp(field, "axial_samp_mode")==0) {
224 h->axial_samp_mode=si;
225 } else if(strcmp(field, "calibration_factor")==0) {
227 } else if(strcmp(field, "calibration_units")==0) {
228 h->calibration_units=si;
229 } else if(strcmp(field, "compression_code")==0) {
230 h->compression_code=si;
231 } else if(strcmp(field, "study_name")==0) {
232 strlcpy(h->study_name, value, 12);
233 } else if(strcmp(field, "patient_id")==0) {
234 strlcpy(h->patient_id, value, 16);
235 } else if(strcmp(field, "patient_name")==0) {
236 strlcpy(h->patient_name, value, 32);
237 } else if(strcmp(field, "patient_sex")==0) {
238 h->patient_sex=value[0];
239 } else if(strcmp(field, "patient_age")==0) {
240 strlcpy(h->patient_name, value, 10);
241 } else if(strcmp(field, "patient_height")==0) {
242 strlcpy(h->patient_height, value, 10);
243 } else if(strcmp(field, "patient_weight")==0) {
244 strlcpy(h->patient_weight, value, 10);
245 } else if(strcmp(field, "patient_dexterity")==0) {
246 h->patient_dexterity=value[0];
247 } else if(strcmp(field, "physician_name")==0) {
248 strlcpy(h->physician_name, value, 32);
249 } else if(strcmp(field, "operator_name")==0) {
250 strlcpy(h->operator_name, value, 32);
251 } else if(strcmp(field, "study_description")==0) {
252 strlcpy(h->study_description, value, 32);
253 } else if(strcmp(field, "acquisition_type")==0) {
254 h->acquisition_type=si;
255 } else if(strcmp(field, "bed_type")==0) {
256 h->bed_type=si;
257 } else if(strcmp(field, "septa_type")==0) {
258 h->septa_type=si;
259 } else if(strcmp(field, "facility_name")==0) {
260 strlcpy(h->facility_name, value, 20);
261 } else if(strcmp(field, "num_planes")==0) {
262 h->num_planes=si;
263 } else if(strcmp(field, "num_frames")==0) {
264 h->num_frames=si;
265 } else if(strcmp(field, "num_gates")==0) {
266 h->num_gates=si;
267 } else if(strcmp(field, "num_bed_pos")==0) {
268 h->num_bed_pos=si;
269 } else if(strcmp(field, "init_bed_position")==0) {
271 } else if(strcmp(field, "bed_offset")==0) {
272 sscanf(value, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f",
273 h->bed_offset+0, h->bed_offset+1, h->bed_offset+2,
274 h->bed_offset+3, h->bed_offset+4, h->bed_offset+5,
275 h->bed_offset+6, h->bed_offset+7, h->bed_offset+8,
276 h->bed_offset+9, h->bed_offset+10, h->bed_offset+11,
277 h->bed_offset+12, h->bed_offset+13, h->bed_offset+14
278 );
279 } else if(strcmp(field, "plane_separation")==0) {
280 h->plane_separation=f;
281 } else if(strcmp(field, "lwr_sctr_thres")==0) {
282 h->lwr_sctr_thres=si;
283 } else if(strcmp(field, "lwr_true_thres")==0) {
284 h->lwr_true_thres=si;
285 } else if(strcmp(field, "upr_true_thres")==0) {
286 h->upr_true_thres=si;
287 } else if(strcmp(field, "collimator")==0) {
288 h->collimator=f;
289 } else if(strcmp(field, "user_process_code")==0) {
290 strlcpy(h->user_process_code, value, 10);
291 } else if(strcasecmp(field, "FILL2")==0) {
292 char *cptr;
293 cptr=strtok(value, " \t,;\n\r");
294 for(int i=0; i<20; i++) {
295 if(cptr==NULL) break;
296 h->fill2[i]=(short int)atoi(cptr);
297 cptr=strtok(NULL, " \t,;\n\r");
298 }
299 } else
300 return(1);
301
302 return(0);
303}
304/*****************************************************************************/
305
306/*****************************************************************************/
char ecat63errmsg[128]
Definition ecat63h.c:7
int ecat63EditMHeader(ECAT63_mainheader *h, char *field, char *value, int verbose)
Definition ecat63h.c:140
int ECAT63_TEST
Definition ecat63h.c:6
int ecat63CopyMainheader(ECAT63_mainheader *h1, ECAT63_mainheader *h2)
Definition ecat63h.c:16
int ecat63CopyScanheader(ECAT63_scanheader *h1, ECAT63_scanheader *h2)
Definition ecat63h.c:94
Header file for libtpcimgio.
size_t strlcpy(char *dst, const char *src, size_t dstsize)
Definition strext.c:245
char radiopharmaceutical[32]
short int scan_start_month
short int coin_samp_mode
short int lwr_true_thres
short int compression_code
char patient_height[10]
short int fill2[20]
short int wobble_speed
short int scan_start_second
short int num_bed_pos
short int transaxial_samp_mode
short int rot_source_speed
short int acquisition_type
short int calibration_units
short int scan_start_year
char original_file_name[20]
char study_description[32]
short int scan_start_day
short int transm_source_type
short int scan_start_minute
char user_process_code[10]
char patient_weight[10]
short int lwr_sctr_thres
short int axial_samp_mode
short int scan_start_hour
short int upr_true_thres
char physician_name[32]
short int system_type
short int dimension_2
float uncor_singles[16]
short int processing_code
short int fill2[22]
short int dimension_1
short int frame_duration_sec
float cor_singles[16]