#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include "swap.h"
#include "petc99.h"
#include "include/ecat7.h"
Go to the source code of this file.
Functions | |
int | ecat7WriteMainheader (FILE *fp, ECAT7_mainheader *h) |
int | ecat7WriteImageheader (FILE *fp, int blk, ECAT7_imageheader *h) |
int | ecat7WriteAttenheader (FILE *fp, int blk, ECAT7_attenheader *h) |
int | ecat7WritePolmapheader (FILE *fp, int blk, ECAT7_polmapheader *h) |
int | ecat7WriteNormheader (FILE *fp, int blk, ECAT7_normheader *h) |
int | ecat7WriteScanheader (FILE *fp, int blk, ECAT7_scanheader *h) |
int | ecat7Write2DScanheader (FILE *fp, int blk, ECAT7_2Dscanheader *h) |
int | ecat7Write2DNormheader (FILE *fp, int blk, ECAT7_2Dnormheader *h) |
FILE * | ecat7Create (const char *fname, ECAT7_mainheader *h) |
int | ecat7_is_scaling_needed (float amax, float *data, int nr) |
int | ecat7WriteImageMatrix (FILE *fp, int matrix_id, ECAT7_imageheader *h, float *fdata) |
int | ecat7Write2DScanMatrix (FILE *fp, int matrix_id, ECAT7_2Dscanheader *h, float *fdata) |
int | ecat7WriteScanMatrix (FILE *fp, int matrix_id, ECAT7_scanheader *h, float *fdata) |
int | ecat7WritePolarmapMatrix (FILE *fp, int matrix_id, ECAT7_polmapheader *h, float *fdata) |
int | ecat7WriteMatrixdata (FILE *fp, int start_block, char *data, int pxl_nr, int pxl_size) |
int ecat7_is_scaling_needed | ( | float | amax, |
float * | data, | ||
int | nr | ||
) |
Check if pixel float values need to be scaled to be saved as short ints, or if they are already all very close to integers.
amax | absolute maximum value |
data | float array |
nr | float array size |
Definition at line 657 of file ecat7w.c.
Referenced by ecat7Write2DScanMatrix(), ecat7WriteImageMatrix(), ecat7WritePolarmapMatrix(), and ecat7WriteScanMatrix().
FILE* ecat7Create | ( | const char * | fname, |
ECAT7_mainheader * | h | ||
) |
Create a new ECAT 7.x file. If file exists, it is renamed as fname% if possible. Directory list is written in big endian byte order.
fname | filename |
h | Ecat7 main header |
Definition at line 616 of file ecat7w.c.
References ECAT7_TEST, ecat7WriteMainheader(), MatBLKSIZE, and MatFirstDirBlk.
Referenced by imgWrite2DEcat7(), imgWriteEcat7(), imgWriteEcat7Frame(), and imgWritePolarmap().
int ecat7Write2DNormheader | ( | FILE * | fp, |
int | blk, | ||
ECAT7_2Dnormheader * | h | ||
) |
Write ECAT 7.x 2D normalization header.
fp | file pointer |
blk | header block number, blk >= 2 |
h | Ecat7 2D normalization header |
Definition at line 566 of file ecat7w.c.
References ecat7_2Dnormheader::data_type, ECAT7_IEEER4, ECAT7_SUNI2, ECAT7_SUNI4, ECAT7_TEST, ECAT7_VAXI2, ECAT7_VAXI4, ECAT7_VAXR4, ecat7_2Dnormheader::fill_cti, ecat7_2Dnormheader::fill_user, ecat7_2Dnormheader::fov_source_width, MatBLKSIZE, ecat7_2Dnormheader::norm_max, ecat7_2Dnormheader::norm_min, ecat7_2Dnormheader::norm_quality_factor, ecat7_2Dnormheader::norm_quality_factor_code, ecat7_2Dnormheader::num_angles, ecat7_2Dnormheader::num_dimensions, ecat7_2Dnormheader::num_r_elements, ecat7_2Dnormheader::num_z_elements, ecat7_2Dnormheader::ring_difference, ecat7_2Dnormheader::scale_factor, ecat7_2Dnormheader::span, and ecat7_2Dnormheader::storage_order.
int ecat7Write2DScanheader | ( | FILE * | fp, |
int | blk, | ||
ECAT7_2Dscanheader * | h | ||
) |
Write ECAT 7.x 2D scan header
fp | output file pointer |
blk | header block number, blk >= 2 |
h | Ecat7 2D scan header |
Definition at line 499 of file ecat7w.c.
References ecat7_2Dscanheader::cor_singles, ecat7_2Dscanheader::corrections_applied, ecat7_2Dscanheader::data_type, ecat7_2Dscanheader::deadtime_correction_factor, ecat7_2Dscanheader::delayed, ECAT7_IEEER4, ECAT7_SUNI2, ECAT7_SUNI4, ECAT7_TEST, ECAT7_VAXI2, ECAT7_VAXI4, ECAT7_VAXR4, ecat7_2Dscanheader::fill_cti, ecat7_2Dscanheader::fill_gate, ecat7_2Dscanheader::fill_user, ecat7_2Dscanheader::frame_duration, ecat7_2Dscanheader::frame_start_time, ecat7_2Dscanheader::gate_duration, MatBLKSIZE, ecat7_2Dscanheader::multiples, ecat7_2Dscanheader::net_trues, ecat7_2Dscanheader::num_accepted_beats, ecat7_2Dscanheader::num_angles, ecat7_2Dscanheader::num_dimensions, ecat7_2Dscanheader::num_r_elements, ecat7_2Dscanheader::num_z_elements, ecat7_2Dscanheader::physical_planes, ecat7_2Dscanheader::prompts, ecat7_2Dscanheader::r_wave_offset, ecat7_2Dscanheader::ring_difference, ecat7_2Dscanheader::scale_factor, ecat7_2Dscanheader::scan_max, ecat7_2Dscanheader::scan_min, ecat7_2Dscanheader::tot_avg_cor, ecat7_2Dscanheader::tot_avg_uncor, ecat7_2Dscanheader::total_coin_rate, ecat7_2Dscanheader::uncor_singles, ecat7_2Dscanheader::w_resolution, ecat7_2Dscanheader::x_resolution, ecat7_2Dscanheader::y_resolution, and ecat7_2Dscanheader::z_resolution.
Referenced by ecat7Write2DScanMatrix().
int ecat7Write2DScanMatrix | ( | FILE * | fp, |
int | matrix_id, | ||
ECAT7_2Dscanheader * | h, | ||
float * | fdata | ||
) |
Write ECAT 7.x 2D sinogram matrix header and data
fp | output file pointer |
matrix_id | coded matrix id |
h | Ecat7 2D image scan header |
fdata | float data to be written |
Definition at line 767 of file ecat7w.c.
References ecat7_2Dscanheader::data_type, ecat7_is_scaling_needed(), ECAT7_SUNI2, ECAT7_TEST, ecat7EnterMatrix(), ecat7errmsg, ecat7pxlbytes(), ecat7Write2DScanheader(), ecat7WriteMatrixdata(), MatBLKSIZE, ecat7_2Dscanheader::num_angles, ecat7_2Dscanheader::num_dimensions, ecat7_2Dscanheader::num_r_elements, ecat7_2Dscanheader::num_z_elements, ecat7_2Dscanheader::scale_factor, ecat7_2Dscanheader::scan_max, and ecat7_2Dscanheader::scan_min.
Referenced by imgWrite2DEcat7(), and imgWriteEcat7Frame().
int ecat7WriteAttenheader | ( | FILE * | fp, |
int | blk, | ||
ECAT7_attenheader * | h | ||
) |
Write ECAT 7.x attenuation header
fp | output file pointer |
blk | header block number, blk >= 2 |
h | Ecat7 attenuation header |
Definition at line 258 of file ecat7w.c.
References ecat7_attenheader::additional_atten_coeff, ecat7_attenheader::attenuation_coeff, ecat7_attenheader::attenuation_max, ecat7_attenheader::attenuation_min, ecat7_attenheader::attenuation_type, ecat7_attenheader::data_type, ECAT7_IEEER4, ECAT7_SUNI2, ECAT7_SUNI4, ECAT7_TEST, ECAT7_VAXI2, ECAT7_VAXI4, ECAT7_VAXR4, ecat7_attenheader::edge_finding_threshold, ecat7_attenheader::fill_cti, ecat7_attenheader::fill_user, MatBLKSIZE, ecat7_attenheader::num_additional_atten_coeff, ecat7_attenheader::num_angles, ecat7_attenheader::num_dimensions, ecat7_attenheader::num_r_elements, ecat7_attenheader::num_z_elements, ecat7_attenheader::ring_difference, ecat7_attenheader::scale_factor, ecat7_attenheader::skull_thickness, ecat7_attenheader::span, ecat7_attenheader::storage_order, ecat7_attenheader::tilt_angle, ecat7_attenheader::w_resolution, ecat7_attenheader::x_offset, ecat7_attenheader::x_radius, ecat7_attenheader::x_resolution, ecat7_attenheader::y_offset, ecat7_attenheader::y_radius, ecat7_attenheader::y_resolution, ecat7_attenheader::z_elements, and ecat7_attenheader::z_resolution.
int ecat7WriteImageheader | ( | FILE * | fp, |
int | blk, | ||
ECAT7_imageheader * | h | ||
) |
Write ECAT 7.x image header. Changes data type to big endian.
fp | output file pointer |
blk | header block number, blk >= 2 |
h | Ecat7 image header |
Definition at line 164 of file ecat7w.c.
References ecat7_imageheader::annotation, ecat7_imageheader::data_type, ecat7_imageheader::decay_corr_fctr, ECAT7_IEEER4, ECAT7_SUNI2, ECAT7_SUNI4, ECAT7_TEST, ECAT7_VAXI2, ECAT7_VAXI4, ECAT7_VAXR4, ecat7_imageheader::fill_cti, ecat7_imageheader::fill_user, ecat7_imageheader::filter_code, ecat7_imageheader::filter_cutoff_frequency, ecat7_imageheader::filter_order, ecat7_imageheader::filter_ramp_slope, ecat7_imageheader::filter_resolution, ecat7_imageheader::filter_scatter_fraction, ecat7_imageheader::filter_scatter_slope, ecat7_imageheader::frame_duration, ecat7_imageheader::frame_start_time, ecat7_imageheader::gate_duration, ecat7_imageheader::image_max, ecat7_imageheader::image_min, MatBLKSIZE, ecat7_imageheader::mt_1_1, ecat7_imageheader::mt_1_2, ecat7_imageheader::mt_1_3, ecat7_imageheader::mt_1_4, ecat7_imageheader::mt_2_1, ecat7_imageheader::mt_2_2, ecat7_imageheader::mt_2_3, ecat7_imageheader::mt_2_4, ecat7_imageheader::mt_3_1, ecat7_imageheader::mt_3_2, ecat7_imageheader::mt_3_3, ecat7_imageheader::mt_3_4, ecat7_imageheader::num_accepted_beats, ecat7_imageheader::num_angles, ecat7_imageheader::num_dimensions, ecat7_imageheader::num_r_elements, ecat7_imageheader::processing_code, ecat7_imageheader::r_wave_offset, ecat7_imageheader::recon_type, ecat7_imageheader::recon_views, ecat7_imageheader::recon_zoom, ecat7_imageheader::rfilter_code, ecat7_imageheader::rfilter_cutoff, ecat7_imageheader::rfilter_order, ecat7_imageheader::rfilter_resolution, ecat7_imageheader::scale_factor, ecat7_imageheader::scatter_type, ecat7_imageheader::x_dimension, ecat7_imageheader::x_offset, ecat7_imageheader::x_pixel_size, ecat7_imageheader::x_resolution, ecat7_imageheader::y_dimension, ecat7_imageheader::y_offset, ecat7_imageheader::y_pixel_size, ecat7_imageheader::y_resolution, ecat7_imageheader::z_dimension, ecat7_imageheader::z_offset, ecat7_imageheader::z_pixel_size, ecat7_imageheader::z_resolution, ecat7_imageheader::z_rotation_angle, ecat7_imageheader::zfilter_code, ecat7_imageheader::zfilter_cutoff, ecat7_imageheader::zfilter_order, and ecat7_imageheader::zfilter_resolution.
Referenced by ecat7WriteImageMatrix().
int ecat7WriteImageMatrix | ( | FILE * | fp, |
int | matrix_id, | ||
ECAT7_imageheader * | h, | ||
float * | fdata | ||
) |
Write ECAT 7.x image or volume matrix header and data
fp | output file pointer |
matrix_id | coded matrix id |
h | Ecat7 image header |
fdata | float data to be written |
Definition at line 682 of file ecat7w.c.
References ecat7_imageheader::data_type, ecat7_is_scaling_needed(), ECAT7_SUNI2, ECAT7_TEST, ecat7EnterMatrix(), ecat7errmsg, ecat7pxlbytes(), ecat7WriteImageheader(), ecat7WriteMatrixdata(), ecat7_imageheader::image_max, ecat7_imageheader::image_min, MatBLKSIZE, ecat7_imageheader::num_dimensions, ecat7_imageheader::scale_factor, ecat7_imageheader::x_dimension, ecat7_imageheader::y_dimension, and ecat7_imageheader::z_dimension.
Referenced by imgWrite2DEcat7(), imgWriteEcat7(), and imgWriteEcat7Frame().
int ecat7WriteMainheader | ( | FILE * | fp, |
ECAT7_mainheader * | h | ||
) |
Write ECAT 7.x main header.
fp | output file pointer |
h | Ecat7 main header Writes header always in big endian byte order. |
Definition at line 73 of file ecat7w.c.
References ecat7_mainheader::acquisition_mode, ecat7_mainheader::acquisition_type, ecat7_mainheader::angular_compression, ecat7_mainheader::axial_samp_mode, ecat7_mainheader::bed_elevation, ecat7_mainheader::bed_position, ecat7_mainheader::bin_size, ecat7_mainheader::branching_fraction, ecat7_mainheader::calibration_units, ecat7_mainheader::calibration_units_label, ecat7_mainheader::coin_samp_mode, ecat7_mainheader::compression_code, ecat7_mainheader::data_units, ecat7_mainheader::distance_scanned, ecat7_mainheader::dosage, ecat7_mainheader::dose_start_time, ECAT7_TEST, ecat7_mainheader::ecat_calibration_factor, ecat7_mainheader::facility_name, ecat7_mainheader::file_type, ecat7_mainheader::fill_cti, ecat7_mainheader::gantry_rotation, ecat7_mainheader::gantry_tilt, ecat7_mainheader::init_bed_position, ecat7_mainheader::intrinsic_tilt, ecat7_mainheader::isotope_halflife, ecat7_mainheader::isotope_name, ecat7_mainheader::lwr_sctr_thres, ecat7_mainheader::lwr_true_thres, ecat7_mainheader::magic_number, MatBLKSIZE, ecat7_mainheader::num_bed_pos, ecat7_mainheader::num_frames, ecat7_mainheader::num_gates, ecat7_mainheader::num_planes, ecat7_mainheader::operator_name, ecat7_mainheader::original_file_name, ecat7_mainheader::patient_age, ecat7_mainheader::patient_birth_date, ecat7_mainheader::patient_dexterity, ecat7_mainheader::patient_height, ecat7_mainheader::patient_id, ecat7_mainheader::patient_name, ecat7_mainheader::patient_orientation, ecat7_mainheader::patient_sex, ecat7_mainheader::patient_weight, ecat7_mainheader::physician_name, ecat7_mainheader::plane_separation, ecat7_mainheader::radiopharmaceutical, ecat7_mainheader::scan_start_time, ecat7_mainheader::septa_state, ecat7_mainheader::serial_number, ecat7_mainheader::study_description, ecat7_mainheader::study_type, ecat7_mainheader::sw_version, ecat7_mainheader::system_type, ecat7_mainheader::transaxial_fov, ecat7_mainheader::transm_source_type, ecat7_mainheader::upr_true_thres, ecat7_mainheader::user_process_code, ecat7_mainheader::well_counter_corr_factor, and ecat7_mainheader::wobble_speed.
Referenced by ecat7Create(), and imgWriteEcat7Frame().
int ecat7WriteMatrixdata | ( | FILE * | fp, |
int | start_block, | ||
char * | data, | ||
int | pxl_nr, | ||
int | pxl_size | ||
) |
Write ECAT 7.x matrix data to a specified file position. Data does not need to be allocated for full blocks. Data must be represented in current machines byte order, and it is always saved in big endian byte order.
fp | Pointer to an opened ECAT file |
start_block | Block number where matrix data is written |
data | Pointer to matrix data |
pxl_nr | Number of pixels |
pxl_size | Size of data for one pixel in bytes |
Definition at line 1027 of file ecat7w.c.
References ECAT7_TEST, and MatBLKSIZE.
Referenced by ecat7Write2DScanMatrix(), ecat7WriteImageMatrix(), ecat7WritePolarmapMatrix(), and ecat7WriteScanMatrix().
int ecat7WriteNormheader | ( | FILE * | fp, |
int | blk, | ||
ECAT7_normheader * | h | ||
) |
Write ECAT 7.x 3D normalization header
fp | output file pointer |
blk | header block number, blk >= 2 |
h | Ecat7 normalization header |
Definition at line 380 of file ecat7w.c.
References ecat7_normheader::crystal_dtcor, ecat7_normheader::crystals_per_ring, ecat7_normheader::data_type, ECAT7_IEEER4, ECAT7_SUNI2, ECAT7_SUNI4, ECAT7_TEST, ECAT7_VAXI2, ECAT7_VAXI4, ECAT7_VAXR4, ecat7_normheader::fill_cti, ecat7_normheader::fill_user, ecat7_normheader::lld, MatBLKSIZE, ecat7_normheader::max_ring_diff, ecat7_normheader::norm_quality_factor, ecat7_normheader::norm_quality_factor_code, ecat7_normheader::num_crystal_rings, ecat7_normheader::num_geo_corr_planes, ecat7_normheader::num_r_elements, ecat7_normheader::num_transaxial_crystals, ecat7_normheader::ring_dtcor1, ecat7_normheader::ring_dtcor2, ecat7_normheader::scatter_energy, ecat7_normheader::span, and ecat7_normheader::uld.
int ecat7WritePolarmapMatrix | ( | FILE * | fp, |
int | matrix_id, | ||
ECAT7_polmapheader * | h, | ||
float * | fdata | ||
) |
Write ECAT 7.x polarmap matrix header and data
fp | output file pointer |
matrix_id | coded matrix information |
h | Ecat7 polar map header |
fdata | float data |
Definition at line 939 of file ecat7w.c.
References ecat7_polmapheader::data_type, ecat7_is_scaling_needed(), ECAT7_SUNI2, ECAT7_TEST, ecat7EnterMatrix(), ecat7errmsg, ecat7pxlbytes(), ecat7WriteMatrixdata(), ecat7WritePolmapheader(), ecat7_polmapheader::image_max, ecat7_polmapheader::image_min, MatBLKSIZE, ecat7_polmapheader::num_rings, ecat7_polmapheader::scale_factor, and ecat7_polmapheader::sectors_per_ring.
Referenced by imgWriteEcat7Frame(), and imgWritePolarmap().
int ecat7WritePolmapheader | ( | FILE * | fp, |
int | blk, | ||
ECAT7_polmapheader * | h | ||
) |
Write ECAT 7.x polar map header
fp | output file pointer |
blk | header block number, blk >= 2 |
h | Ecat7 polar map header |
Definition at line 321 of file ecat7w.c.
References ecat7_polmapheader::annotation, ecat7_polmapheader::data_type, ecat7_polmapheader::database_name, ECAT7_IEEER4, ECAT7_SUNI2, ECAT7_SUNI4, ECAT7_TEST, ECAT7_VAXI2, ECAT7_VAXI4, ECAT7_VAXR4, ecat7_polmapheader::fill_cti, ecat7_polmapheader::frame_duration, ecat7_polmapheader::frame_start_time, ecat7_polmapheader::gate_duration, ecat7_polmapheader::image_max, ecat7_polmapheader::image_min, ecat7_polmapheader::long_axis_left, ecat7_polmapheader::long_axis_right, MatBLKSIZE, ecat7_polmapheader::num_accepted_beats, ecat7_polmapheader::num_rings, ecat7_polmapheader::pixel_size, ecat7_polmapheader::polar_map_protocol, ecat7_polmapheader::polar_map_type, ecat7_polmapheader::position_data, ecat7_polmapheader::processing_code, ecat7_polmapheader::quant_units, ecat7_polmapheader::r_wave_offset, ecat7_polmapheader::ring_angle, ecat7_polmapheader::ring_position, ecat7_polmapheader::scale_factor, ecat7_polmapheader::sectors_per_ring, and ecat7_polmapheader::start_angle.
Referenced by ecat7WritePolarmapMatrix().
int ecat7WriteScanheader | ( | FILE * | fp, |
int | blk, | ||
ECAT7_scanheader * | h | ||
) |
Write ECAT 7.x 3D scan header (512 bytes) Changes data type to big endian.
fp | pointer to output file |
blk | block number, blk >= 2 |
h | Ecat7 scan header |
Definition at line 433 of file ecat7w.c.
References ecat7_scanheader::axial_compression, ecat7_scanheader::corrections_applied, ecat7_scanheader::data_type, ecat7_scanheader::deadtime_correction_factor, ecat7_scanheader::delayed, ECAT7_IEEER4, ECAT7_SUNI2, ECAT7_SUNI4, ECAT7_TEST, ECAT7_VAXI2, ECAT7_VAXI4, ECAT7_VAXR4, ecat7_scanheader::fill_cti, ecat7_scanheader::fill_gate, ecat7_scanheader::fill_user, ecat7_scanheader::frame_duration, ecat7_scanheader::frame_start_time, ecat7_scanheader::gate_duration, MatBLKSIZE, ecat7_scanheader::multiples, ecat7_scanheader::net_trues, ecat7_scanheader::num_accepted_beats, ecat7_scanheader::num_angles, ecat7_scanheader::num_dimensions, ecat7_scanheader::num_r_elements, ecat7_scanheader::num_z_elements, ecat7_scanheader::prompts, ecat7_scanheader::r_wave_offset, ecat7_scanheader::ring_difference, ecat7_scanheader::scale_factor, ecat7_scanheader::scan_max, ecat7_scanheader::scan_min, ecat7_scanheader::storage_order, ecat7_scanheader::tot_avg_cor, ecat7_scanheader::tot_avg_uncor, ecat7_scanheader::total_coin_rate, ecat7_scanheader::uncor_singles, ecat7_scanheader::v_resolution, ecat7_scanheader::w_resolution, ecat7_scanheader::x_resolution, and ecat7_scanheader::z_resolution.
Referenced by ecat7WriteScanMatrix().
int ecat7WriteScanMatrix | ( | FILE * | fp, |
int | matrix_id, | ||
ECAT7_scanheader * | h, | ||
float * | fdata | ||
) |
Write ECAT 7.x 3D sinogram matrix header and data
fp | output file pointer |
matrix_id | coded matrix id |
h | Ecat7 scan header |
fdata | float data |
Definition at line 852 of file ecat7w.c.
References ecat7_scanheader::data_type, ecat7_is_scaling_needed(), ECAT7_SUNI2, ECAT7_TEST, ecat7EnterMatrix(), ecat7errmsg, ecat7pxlbytes(), ecat7WriteMatrixdata(), ecat7WriteScanheader(), MatBLKSIZE, ecat7_scanheader::num_angles, ecat7_scanheader::num_r_elements, ecat7_scanheader::num_z_elements, ecat7_scanheader::scale_factor, ecat7_scanheader::scan_max, and ecat7_scanheader::scan_min.
Referenced by imgWriteEcat7(), and imgWriteEcat7Frame().