home | help
M-ECAT(4)		    Kernel Interfaces Manual		       M-ECAT(4)

NAME
     m-ecat - CTI ECAT 6/7 medical image format (MedCon)

DESCRIPTION
  This	is  a  painful	format.  You should check the source code for more info.
  There is only read support for ECAT 7. Below you will find the specs	for  the
  ECAT	6  format.  The ECAT 7 format differs a little in header definitions and
  there is only one matrix entry per volume, while for ECAT 6 files there is one
  matrix entry per plane. All ECAT 6 image data is  written  in  one  file  with
  `.img' extension.

     -----------------------------------------------------------------------
			      Important Definitions
     -----------------------------------------------------------------------

  typedef struct mat_main_header {
	  char		  original_file_name[20];
	  Int16 	  sw_version;
	  Int16 	  data_type;
	  Int16 	  system_type;
	  Int16 	  file_type;
	  char		  node_id[10];
	  Int16 	  scan_start_day,
			  scan_start_month,
			  scan_start_year,
			  scan_start_hour,
			  scan_start_minute,
			  scan_start_second;
	  char		  isotope_code[8];
	  float 	  isotope_halflife;
	  char		  radiopharmaceutical[32];
	  float 	  gantry_tilt,
			  gantry_rotation,
			  bed_elevation;
	  Int16 	  rot_source_speed,
			  wobble_speed,
			  transm_source_type;
	  float 	  axial_fov,
			  transaxial_fov;
	  Int16 	  transaxial_samp_mode,
			  coin_samp_mode,
			  axial_samp_mode;
	  float 	  calibration_factor;
	  Int16 	  calibration_units,
			  compression_code;
	  char		  study_name[12],
			  patient_id[16],
			  patient_name[32],
			  patient_sex,
			  patient_age[10],
			  patient_height[10],
			  patient_weight[10],
			  patient_dexterity,
			  physician_name[32],
			  operator_name[32],
			  study_description[32];
	  Int16 	  acquisition_type,
			  bed_type,
			  septa_type;
	  char		  facility_name[20];
	  Int16 	  num_planes,
			  num_frames,
			  num_gates,
			  num_bed_pos;
	  float 	  init_bed_position,
			  bed_offset[15],
			  plane_separation;
	  Int16 	  lwr_sctr_thres,
			  lwr_true_thres,
			  upr_true_thres;
	  float 	  collimator;
	  char		  user_process_code[10];
	  Int16 	  acquisition_mode;

  } Main_header;

  #define MH_64_SIZE 446

  typedef struct mat_scan_subheader {
	  Int16 	  data_type,
			  dimension_1,
			  dimension_2,
			  smoothing,
			  processing_code;
	  float 	  sample_distance,
			  isotope_halflife;
	  Int16 	  frame_duration_sec;
	  Int32 	  gate_duration,
			  r_wave_offset;
	  float 	  scale_factor;
	  Int16 	  scan_min,
			  scan_max;
	  Int32 	  prompts,
			  delayed,
			  multiples,
			  net_trues;
	  float 	  cor_singles[16],
			  uncor_singles[16],
			  tot_avg_cor,
			  tot_avg_uncor;
	  Int32 	  total_coin_rate,
			  frame_start_time,
			  frame_duration;
	  float 	  loss_correction_fctr;
	  Int32 	  phy_planes[8];

  } Scan_subheader;

  #define SSH_64_SIZE 236

  typedef struct mat_image_subheader {
	  Int16 	  data_type,
			  num_dimensions,
			  dimension_1,
			  dimension_2;
	  float 	  x_origin,
			  y_origin,
			  recon_scale,	  /* Image ZOOM from reconstruction */
			  quant_scale;	  /* Scale Factor */
	  Int16 	  image_min,
			  image_max;
	  float 	  pixel_size,
			  slice_width;
	  Int32 	  frame_duration,
			  frame_start_time;
	  Int16 	  slice_location,
			  recon_start_hour,
			  recon_start_minute,
			  recon_start_sec;
	  Int32 	  gate_duration;
	  Int16 	  filter_code;
	  Int32 	  scan_matrix_num,
			  norm_matrix_num,
			  atten_cor_matrix_num;
	  float 	  image_rotation,
			  plane_eff_corr_fctr,
			  decay_corr_fctr,
			  loss_corr_fctr,
			  intrinsic_tilt ;
	  Int16 	  processing_code,
			  quant_units,
			  recon_start_day,
			  recon_start_month,
			  recon_start_year;
	  float 	  ecat_calibration_fctr,
			  well_counter_cal_fctr,
			  filter_params[6];
	  char		  annotation[40];

  } Image_subheader;

  #define ISH_64_SIZE 172

  typedef struct mat_norm_subheader {
	  Int16 	  data_type,
			  dimension_1,
			  dimension_2;
	  float 	  scale_factor;
	  Int16 	  norm_hour,
			  norm_minute,
			  norm_second,
			  norm_day,
			  norm_month,
			  norm_year;
	  float 	  fov_source_width;
	  float 	  ecat_calib_factor;

  } Norm_subheader;

  #define NSH_64_SIZE 30

  typedef struct mat_attn_subheader {
	  Int16 	  data_type,
			  attenuation_type,
			  dimension_1,
			  dimension_2;
	  float 	  scale_factor,
			  x_origin,
			  y_origin,
			  x_radius,
			  y_radius,
			  tilt_angle,
			  attenuation_coeff,
			  sample_distance;

  } Attn_subheader;

  #define ASH_64_SIZE 40

  -----------------------------------------------------------------------

  What does the format support or not support:

  ===========================================================================
  Item		  Supported				Not Supported
  ===========================================================================
  Color Map	: grayscale				      -
  File Endian	: big					    little
  Pixeltypes	: VAX Int16 (write)  | All (read)	      -
  ===========================================================================
  Scaling factors  : quantify & calibrate factors/image  are supported
  ---------------------------------------------------------------------------
  Dimensions/Image : different dimensions for each image are NOT supported
  ---------------------------------------------------------------------------
  Pixeltypes/Image : different pixeltypes for each image are NOT supported
  ===========================================================================

NOTES
  The MedCon program also supports the reading of sinogram, attenuation and nor-
  malization files for conversion purposes but it does not support writing those
  file types. In fact, they will be considered as reconstructed data!

  The format supports more pixeltypes. The reason for our restriction of writing
  only the Int16 type was our ECAT software that only supports the Int16 type.

  We consider three kinds of images (planes) in an ECAT file:

     (1) plain pixel values [no unit]		   (ppv = ppv)
	  - the planes/images are NOT normalized

     (2) quantified  values [counts/second/pixel]  (qpv = ppv * quant_scale)
	  - the planes/images are normalized

     (3) calibrated  values [uCi/ml]		   (cpv = qpv * calibr_fctr)
	  - the planes/images are normalized

  The float values in the header are stored as VAX format.

FILES
  /usr/local/xmedcon/source/m-ecat64.h	    The header file.
  /usr/local/xmedcon/source/m-ecat64.c	    The source file.
  /usr/local/xmedcon/source/m-matrix64.h    CTI header file.
  /usr/local/xmedcon/source/m-matrix64.c    CTI source file.

SEE ALSO
  medcon(1), xmedcon(1), xmedcon-config(1)

  m-acr(4), m-anlz(4), m-gif(4), m-inw(4), m-intf(4)

  medcon(3)

AUTHOR
  (X)MedCon  project  was  originally written by Erik Nolf (eNlf) for the former
  PET-Centre at Ghent University (Belgium).

  e-mail:   enlf-at-users.sourceforge.net   www:   http://xmedcon.sourceforge.net

								       M-ECAT(4)

home | help