My Project
ecat63.h
Go to the documentation of this file.
1 /******************************************************************************
2 
3  Copyright (c) 2003-2008 Turku PET Centre
4 
5  ecat63.h
6 
7  Date:
8  1996-10-30 VO
9  2002-01-20 VO
10  2002-02-01 VO
11  2002-02-12 VO
12  2002-08-23 VO
13  2003-07-21 VO
14  2003-08-05 VO
15  2003-09-08 VO
16  2004-06-27 VO
17  2004-12-28 VO
18  2007-02-27 VO
19  2007-03-13 VO
20  2008-07-24 VO
21 
22 
23 ******************************************************************************/
24 #ifndef _ECAT63_H_
25 #define _ECAT63_H_
26 /*****************************************************************************/
27 #define MatBLKSIZE 512
28 #define MatFirstDirBlk 2
29 /* Data types */
30 #define BYTE_TYPE 1
31 #define VAX_I2 2
32 #define VAX_I4 3
33 #define VAX_R4 4
34 #define IEEE_R4 5
35 #define SUN_I2 6
36 #define SUN_I4 7
37 /* File types */
38 #define RAW_DATA 1
39 #define IMAGE_DATA 2
40 #define ATTN_DATA 3
41 #define NORM_DATA 4
42 /*****************************************************************************/
43 #define ECAT63_SYSTEM_TYPE_DEFAULT 931
44 /*****************************************************************************/
45 /* Backup file extension */
46 #ifndef BACKUP_EXTENSION
47 #define BACKUP_EXTENSION ".bak"
48 #endif
49 /*****************************************************************************/
50 char ecat63errmsg[128];
51 /*****************************************************************************/
53 /*****************************************************************************/
54 
55 typedef struct {
56  int matnum;
57  int strtblk;
58  int endblk;
59  int matstat;
60 } MatDir;
61 
62 typedef struct {
63  int matrixNr;
66 } MATRIXLIST;
67 
68 typedef struct {
69  int frame, plane, gate, data, bed;
70 } Matval;
71 
72 typedef struct ecat63_mainheader {
73  char ecat_format[14], fill1[14];
75  short int sw_version;
76  short int data_type;
77  short int system_type;
78  short int file_type;
79  char node_id[10];
82  char isotope_code[8];
96  char facility_name[20];
100  float collimator;
102  short int fill2[20];
104 
105 typedef struct ecat63_imageheader {
106  char fill1[126];
109  short int image_min, image_max;
112  short int slice_location,
115  short int filter_code;
122  char annotation[40];
123  short int fill2[26];
125 
126 typedef struct ecat63_scanheader {
127  char fill1[126];
128  short int data_type,
136  short int scan_min, scan_max;
138  float cor_singles[16], uncor_singles[16],
143  short int fill2[22];
145 
146 typedef struct ecat63_normheader {
147  short int data_type,
153 
154 typedef struct ecat63_attnheader {
162 
163 typedef struct matdirnode {
164  int matnum;
165  int strtblk;
166  int endblk;
167  int matstat;
168  struct matdirnode *next;
169 } MatDirNode ;
170 
171 typedef struct matdirlist {
172  int nmats;
175 } MatDirList;
176 
177 typedef struct matrixdata {
178  int mat_type;
179  char *shptr;
180  char *data_ptr;
181  int nviews;
183  int nblks;
185 } MatrixData ;
186 
187 typedef struct matrix_file {
190  FILE *fptr ;
191 } Matrix_file;
192 /*****************************************************************************/
193 /* Read functions */
194 extern int ecat63ReadMainheader(FILE *fp, ECAT63_mainheader *h);
195 extern int ecat63ReadImageheader(FILE *fp, int blk, ECAT63_imageheader *h);
196 extern int ecat63ReadScanheader(FILE *fp, int blk, ECAT63_scanheader *h);
197 extern int ecat63ReadAttnheader(FILE *fp, int blk, ECAT63_attnheader *h);
198 extern int ecat63ReadNormheader(FILE *fp, int blk, ECAT63_normheader *h);
199 extern int ecat63ReadMatdata(FILE *fp, int strtblk, int blkNr, char *data, int dtype);
200 extern int ecat63ReadImageMatrix(FILE *fp, int strtblk, int lastblk, ECAT63_imageheader *h, float **f);
201 extern int ecat63ReadScanMatrix(FILE *fp, int strtblk, int lastblk, ECAT63_scanheader *h, float **f);
202 extern float ecat63rFloat(void *bufi, int isvax, int islittle);
203 extern int ecat63rInt(void *bufi, int isvax, int islittle);
204 extern int ecat63pxlbytes(short int data_type);
205 /*****************************************************************************/
206 /* Matrix list functions */
207 extern void ecat63InitMatlist(MATRIXLIST *mlist);
208 extern void ecat63EmptyMatlist(MATRIXLIST *mlist);
209 extern int ecat63ReadMatlist(FILE *fp, MATRIXLIST *ml);
210 extern void ecat63PrintMatlist(MATRIXLIST *ml);
211 extern int mat_numcod(int frame, int plane, int gate, int data, int bed);
212 extern void mat_numdoc(int matnum, Matval *matval);
213 extern int ecat63Matenter(FILE *fp, int matnum, int blkNr);
214 extern void ecat63SortMatlistByPlane(MATRIXLIST *ml);
215 extern void ecat63SortMatlistByFrame(MATRIXLIST *ml);
216 extern int ecat63CheckMatlist(MATRIXLIST *ml);
217 extern int ecat63DeleteLateFrames(MATRIXLIST *ml, int frame_nr);
218 extern int ecat63GetMatrixBlockSize(MATRIXLIST *mlist, int *blk_nr);
219 extern int ecat63GetPlaneAndFrameNr(MATRIXLIST *mlist, ECAT63_mainheader *h, int *plane_nr, int *frame_nr);
220 extern int ecat63GetNums(MATRIXLIST *ml, short int *num_planes, short int *num_frames, short int *num_gates, short int *num_bed_pos);
221 extern int ecat63GatherMatlist(MATRIXLIST *ml, short int do_planes, short int do_frames, short int do_gates, short int do_beds);
222 /*****************************************************************************/
223 /* Write functions */
224 extern int ecat63WriteMainheader(FILE *fp, ECAT63_mainheader *h);
225 extern int ecat63WriteImageheader(FILE *fp, int block, ECAT63_imageheader *h);
226 extern int ecat63WriteScanheader(FILE *fp, int block, ECAT63_scanheader *h);
227 extern int ecat63WriteAttnheader(FILE *fp, int block, ECAT63_attnheader *h);
228 extern int ecat63WriteNormheader(FILE *fp, int block, ECAT63_normheader *h);
229 extern FILE *ecat63Create(const char *fname, ECAT63_mainheader *h);
230 extern int ecat63WriteMatdata(FILE *fp, int strtblk, char *data, int pxlNr, int pxlSize);
231 extern int ecat63WriteScan(FILE *fp, int matnum, ECAT63_scanheader *h, void *data);
232 extern int ecat63WriteImage(FILE *fp, int matnum, ECAT63_imageheader *h, void *data);
233 extern int ecat63WriteNorm(FILE *fp, int matnum, ECAT63_normheader *h, void *data);
234 extern int ecat63WriteAttn(FILE *fp, int matnum, ECAT63_attnheader *h, void *data);
235 extern int ecat63WriteImageMatrix(FILE *fp, int matnum, ECAT63_imageheader *h, float *fdata);
236 extern int ecat63WriteScanMatrix(FILE *fp, int matnum, ECAT63_scanheader *h, float *fdata);
237 extern void ecat63wFloat(float *bufi, void *bufo, int tovax, int islittle);
238 extern void ecat63wInt(int *bufi, void *bufo, int tovax, int islittle);
239 extern int ecat63_is_scaling_needed(float amax, float *data, int nr);
240 /*****************************************************************************/
241 /* Printing functions */
242 extern void ecat63PrintMainheader(ECAT63_mainheader *h, FILE *fp);
243 extern void ecat63PrintImageheader(ECAT63_imageheader *h, FILE *fp);
244 extern void ecat63PrintScanheader(ECAT63_scanheader *h, FILE *fp);
245 extern void ecat63PrintAttnheader(ECAT63_attnheader *h, FILE *fp);
246 extern void ecat63PrintNormheader(ECAT63_normheader *h, FILE *fp);
247 extern int ecat6PrintSubheader(ECAT63_mainheader mh, FILE *fp,
248  int plane, int frame, FILE *ofp);
249 extern char *ecat63Datatype(short int dtype);
250 extern char *ecat63Unit(short int dunit);
251 extern void float2parts(float *buf);
252 /*****************************************************************************/
253 #endif
254 
char * ecat63Unit(short int dunit)
Definition: ecat63p.c:250
char study_description[32]
Definition: ecat63.h:91
struct matdirnode * next
Definition: ecat63.h:168
int nmats
Definition: ecat63.h:172
float uncor_singles[16]
Definition: ecat63.h:138
short int coin_samp_mode
Definition: ecat63.h:88
struct ecat63_attnheader ECAT63_attnheader
float plane_separation
Definition: ecat63.h:98
int nelements
Definition: ecat63.h:182
short int scan_start_second
Definition: ecat63.h:80
int endblk
Definition: ecat63.h:58
short int acquisition_type
Definition: ecat63.h:95
void ecat63wFloat(float *bufi, void *bufo, int tovax, int islittle)
Definition: ecat63w.c:863
short int data_type
Definition: ecat63.h:155
FILE * ecat63Create(const char *fname, ECAT63_mainheader *h)
Definition: ecat63w.c:386
short int fill2[22]
Definition: ecat63.h:143
void ecat63EmptyMatlist(MATRIXLIST *mlist)
Definition: ecat63ml.c:80
void ecat63PrintImageheader(ECAT63_imageheader *h, FILE *fp)
Definition: ecat63p.c:115
FILE * fptr
Definition: ecat63.h:190
int matrixNr
Definition: ecat63.h:63
float scale_factor
Definition: ecat63.h:135
int ecat63WriteNormheader(FILE *fp, int block, ECAT63_normheader *h)
Definition: ecat63w.c:336
short int transaxial_samp_mode
Definition: ecat63.h:88
Definition: ecat63.h:55
short int scan_start_year
Definition: ecat63.h:80
short int num_bed_pos
Definition: ecat63.h:97
short int transm_source_type
Definition: ecat63.h:86
void ecat63PrintNormheader(ECAT63_normheader *h, FILE *fp)
Definition: ecat63p.c:208
struct matdirlist MatDirList
short int norm_day
Definition: ecat63.h:150
short int norm_minute
Definition: ecat63.h:150
int atten_cor_mat_num
Definition: ecat63.h:116
float bed_offset[15]
Definition: ecat63.h:98
float decay_corr_fctr
Definition: ecat63.h:117
short int num_gates
Definition: ecat63.h:97
int ecat6PrintSubheader(ECAT63_mainheader mh, FILE *fp, int plane, int frame, FILE *ofp)
Definition: ecat63p.c:296
short int upr_true_thres
Definition: ecat63.h:99
short int scan_start_day
Definition: ecat63.h:80
short int norm_hour
Definition: ecat63.h:150
int ecat63ReadImageMatrix(FILE *fp, int strtblk, int lastblk, ECAT63_imageheader *h, float **f)
Definition: ecat63r.c:494
float ecat63rFloat(void *bufi, int isvax, int islittle)
Definition: ecat63r.c:671
short int scan_max
Definition: ecat63.h:136
short int septa_type
Definition: ecat63.h:95
short int processing_code
Definition: ecat63.h:119
int ecat63ReadAttnheader(FILE *fp, int blk, ECAT63_attnheader *h)
Definition: ecat63r.c:238
float x_radius
Definition: ecat63.h:157
int matstat
Definition: ecat63.h:59
short int scan_start_hour
Definition: ecat63.h:80
char isotope_code[8]
Definition: ecat63.h:82
int ecat63_is_scaling_needed(float amax, float *data, int nr)
Definition: ecat63w.c:672
struct matdirnode MatDirNode
MatDir * matdir
Definition: ecat63.h:65
int ecat63ReadScanheader(FILE *fp, int blk, ECAT63_scanheader *h)
Definition: ecat63r.c:296
short int dimension_1
Definition: ecat63.h:107
int nblks
Definition: ecat63.h:183
MatDirList * dirlist
Definition: ecat63.h:189
MatDirNode * first
Definition: ecat63.h:173
short int sw_version
Definition: ecat63.h:75
short int recon_start_sec
Definition: ecat63.h:112
struct ecat63_imageheader ECAT63_imageheader
char node_id[10]
Definition: ecat63.h:79
char study_name[12]
Definition: ecat63.h:91
short int data_type
Definition: ecat63.h:128
void ecat63PrintScanheader(ECAT63_scanheader *h, FILE *fp)
Definition: ecat63p.c:152
void ecat63SortMatlistByPlane(MATRIXLIST *ml)
Definition: ecat63ml.c:291
float bed_elevation
Definition: ecat63.h:85
float collimator
Definition: ecat63.h:100
void ecat63SortMatlistByFrame(MATRIXLIST *ml)
Definition: ecat63ml.c:316
float tot_avg_cor
Definition: ecat63.h:138
char user_process_code[10]
Definition: ecat63.h:101
struct matrixdata MatrixData
int ecat63DeleteLateFrames(MATRIXLIST *ml, int frame_nr)
Definition: ecat63ml.c:360
short int dimension_2
Definition: ecat63.h:128
void mat_numdoc(int matnum, Matval *matval)
Definition: ecat63ml.c:276
float pixel_size
Definition: ecat63.h:110
float gantry_rotation
Definition: ecat63.h:85
int ecat63ReadImageheader(FILE *fp, int blk, ECAT63_imageheader *h)
Definition: ecat63r.c:152
short int lwr_true_thres
Definition: ecat63.h:99
int ecat63WriteScan(FILE *fp, int matnum, ECAT63_scanheader *h, void *data)
Definition: ecat63w.c:478
short int dimension_1
Definition: ecat63.h:147
float scale_factor
Definition: ecat63.h:157
int ecat63GetMatrixBlockSize(MATRIXLIST *mlist, int *blk_nr)
Definition: ecat63ml.c:382
char * data_ptr
Definition: ecat63.h:180
float filter_params[6]
Definition: ecat63.h:121
short int recon_start_year
Definition: ecat63.h:119
int ecat63GatherMatlist(MATRIXLIST *ml, short int do_planes, short int do_frames, short int do_gates, short int do_beds)
Definition: ecat63ml.c:519
short int attenuation_type
Definition: ecat63.h:155
short int calibration_units
Definition: ecat63.h:90
char physician_name[32]
Definition: ecat63.h:91
short int fill2[26]
Definition: ecat63.h:123
short int num_planes
Definition: ecat63.h:97
int data_type
Definition: ecat63.h:184
void ecat63InitMatlist(MATRIXLIST *mlist)
Definition: ecat63ml.c:69
short int dimension_1
Definition: ecat63.h:155
char patient_weight[10]
Definition: ecat63.h:91
short int lwr_sctr_thres
Definition: ecat63.h:99
short int dimension_1
Definition: ecat63.h:128
short int recon_start_hour
Definition: ecat63.h:112
int ecat63ReadScanMatrix(FILE *fp, int strtblk, int lastblk, ECAT63_scanheader *h, float **f)
Definition: ecat63r.c:586
int ecat63GetNums(MATRIXLIST *ml, short int *num_planes, short int *num_frames, short int *num_gates, short int *num_bed_pos)
Definition: ecat63ml.c:462
short int recon_start_month
Definition: ecat63.h:119
short int recon_start_day
Definition: ecat63.h:119
struct ecat63_scanheader ECAT63_scanheader
short int wobble_speed
Definition: ecat63.h:86
Definition: ecat63.h:68
float isotope_halflife
Definition: ecat63.h:83
float isotope_halflife
Definition: ecat63.h:131
char fill1[126]
Definition: ecat63.h:106
int ecat63WriteNorm(FILE *fp, int matnum, ECAT63_normheader *h, void *data)
Definition: ecat63w.c:527
short int frame_duration_sec
Definition: ecat63.h:133
float scale_factor
Definition: ecat63.h:149
short int image_max
Definition: ecat63.h:109
short int processing_code
Definition: ecat63.h:128
short int fill2[20]
Definition: ecat63.h:102
short int scan_start_month
Definition: ecat63.h:80
float cor_singles[16]
Definition: ecat63.h:138
short int system_type
Definition: ecat63.h:77
char facility_name[20]
Definition: ecat63.h:96
int frame_duration
Definition: ecat63.h:140
char * ecat63Datatype(short int dtype)
Definition: ecat63p.c:227
int ecat63CheckMatlist(MATRIXLIST *ml)
Definition: ecat63ml.c:342
float init_bed_position
Definition: ecat63.h:98
short int norm_month
Definition: ecat63.h:150
float y_radius
Definition: ecat63.h:157
ECAT63_mainheader * mhptr
Definition: ecat63.h:188
float sample_distance
Definition: ecat63.h:131
short int dimension_2
Definition: ecat63.h:155
short int num_frames
Definition: ecat63.h:97
float y_origin
Definition: ecat63.h:157
float loss_corr_fctr
Definition: ecat63.h:117
int matnum
Definition: ecat63.h:56
float calibration_factor
Definition: ecat63.h:89
float image_rotation
Definition: ecat63.h:117
int ecat63WriteMatdata(FILE *fp, int strtblk, char *data, int pxlNr, int pxlSize)
Definition: ecat63w.c:629
short int num_dimensions
Definition: ecat63.h:107
char ecat63errmsg[128]
Definition: ecat63.h:50
int ecat63Matenter(FILE *fp, int matnum, int blkNr)
Definition: ecat63ml.c:186
int ecat63ReadMatdata(FILE *fp, int strtblk, int blkNr, char *data, int dtype)
Definition: ecat63r.c:432
char radiopharmaceutical[32]
Definition: ecat63.h:84
int ecat63ReadMainheader(FILE *fp, ECAT63_mainheader *h)
Definition: ecat63r.c:50
float tilt_angle
Definition: ecat63.h:157
int ecat63ReadNormheader(FILE *fp, int blk, ECAT63_normheader *h)
Definition: ecat63r.c:375
int total_coin_rate
Definition: ecat63.h:140
char fill1[126]
Definition: ecat63.h:127
char annotation[40]
Definition: ecat63.h:122
int ecat63pxlbytes(short int data_type)
Definition: ecat63r.c:711
int matstat
Definition: ecat63.h:167
int ecat63WriteMainheader(FILE *fp, ECAT63_mainheader *h)
Definition: ecat63w.c:73
int ecat63ReadMatlist(FILE *fp, MATRIXLIST *ml)
Definition: ecat63ml.c:97
char ecat_format[14]
Definition: ecat63.h:73
int ecat63WriteAttn(FILE *fp, int matnum, ECAT63_attnheader *h, void *data)
Definition: ecat63w.c:576
char patient_name[32]
Definition: ecat63.h:91
int frame_start_time
Definition: ecat63.h:111
short int compression_code
Definition: ecat63.h:90
float ecat_calibration_fctr
Definition: ecat63.h:121
short int slice_location
Definition: ecat63.h:112
short int norm_year
Definition: ecat63.h:150
short int file_type
Definition: ecat63.h:78
int nviews
Definition: ecat63.h:181
short int recon_start_min
Definition: ecat63.h:112
void ecat63PrintMatlist(MATRIXLIST *ml)
Definition: ecat63ml.c:160
short int data_type
Definition: ecat63.h:147
float axial_fov
Definition: ecat63.h:87
char fill1[14]
Definition: ecat63.h:73
int ecat63WriteImageMatrix(FILE *fp, int matnum, ECAT63_imageheader *h, float *fdata)
Definition: ecat63w.c:700
float attenuation_coeff
Definition: ecat63.h:157
float tot_avg_uncor
Definition: ecat63.h:138
int ECAT63_TEST
Definition: ecat63.h:52
int ecat63WriteAttnheader(FILE *fp, int block, ECAT63_attnheader *h)
Definition: ecat63w.c:221
MatDirNode * last
Definition: ecat63.h:174
float x_origin
Definition: ecat63.h:157
struct ecat63_normheader ECAT63_normheader
int ecat63rInt(void *bufi, int isvax, int islittle)
Definition: ecat63r.c:694
short int smoothing
Definition: ecat63.h:128
int endblk
Definition: ecat63.h:166
short int scan_min
Definition: ecat63.h:136
float sample_distance
Definition: ecat63.h:157
short int scan_start_minute
Definition: ecat63.h:80
void ecat63PrintMainheader(ECAT63_mainheader *h, FILE *fp)
Definition: ecat63p.c:62
int plane
Definition: ecat63.h:69
short int quant_units
Definition: ecat63.h:119
void ecat63wInt(int *bufi, void *bufo, int tovax, int islittle)
Definition: ecat63w.c:885
int ecat63WriteImage(FILE *fp, int matnum, ECAT63_imageheader *h, void *data)
Definition: ecat63w.c:429
float plane_eff_corr_fctr
Definition: ecat63.h:117
int frame_start_time
Definition: ecat63.h:140
short int rot_source_speed
Definition: ecat63.h:86
float loss_correction_fctr
Definition: ecat63.h:142
short int bed_type
Definition: ecat63.h:95
int matnum
Definition: ecat63.h:164
char patient_sex
Definition: ecat63.h:91
float well_counter_cal_fctr
Definition: ecat63.h:121
short int dimension_2
Definition: ecat63.h:147
float fov_source_width
Definition: ecat63.h:151
void ecat63PrintAttnheader(ECAT63_attnheader *h, FILE *fp)
Definition: ecat63p.c:186
short int norm_second
Definition: ecat63.h:150
short int data_type
Definition: ecat63.h:107
int ecat63WriteScanMatrix(FILE *fp, int matnum, ECAT63_scanheader *h, float *fdata)
Definition: ecat63w.c:784
short int filter_code
Definition: ecat63.h:115
struct ecat63_mainheader ECAT63_mainheader
int strtblk
Definition: ecat63.h:165
int ecat63WriteImageheader(FILE *fp, int block, ECAT63_imageheader *h)
Definition: ecat63w.c:150
float intrinsic_tilt
Definition: ecat63.h:117
char original_file_name[20]
Definition: ecat63.h:74
float transaxial_fov
Definition: ecat63.h:87
char patient_dexterity
Definition: ecat63.h:91
struct matrix_file Matrix_file
int strtblk
Definition: ecat63.h:57
float recon_scale
Definition: ecat63.h:108
float quant_scale
Definition: ecat63.h:108
int ecat63WriteScanheader(FILE *fp, int block, ECAT63_scanheader *h)
Definition: ecat63w.c:269
char patient_height[10]
Definition: ecat63.h:91
char operator_name[32]
Definition: ecat63.h:91
char * shptr
Definition: ecat63.h:179
float slice_width
Definition: ecat63.h:110
short int data_type
Definition: ecat63.h:76
int mat_type
Definition: ecat63.h:178
char patient_age[10]
Definition: ecat63.h:91
short int image_min
Definition: ecat63.h:109
short int axial_samp_mode
Definition: ecat63.h:88
void float2parts(float *buf)
Definition: ecat63p.c:282
int ecat63GetPlaneAndFrameNr(MATRIXLIST *mlist, ECAT63_mainheader *h, int *plane_nr, int *frame_nr)
Definition: ecat63ml.c:414
float gantry_tilt
Definition: ecat63.h:85
int matrixSpace
Definition: ecat63.h:64
short int dimension_2
Definition: ecat63.h:107
char patient_id[16]
Definition: ecat63.h:91
int mat_numcod(int frame, int plane, int gate, int data, int bed)
Definition: ecat63ml.c:266