/*********************************************************************** * $Id: patexchange.h,v 1.2 2000/01/20 20:04:42 jwm Exp $ * Description: include file for RTOG submission * *********************************************************************** * $Log: patexchange.h,v $ * Revision 1.2 2000/01/20 20:04:42 jwm * Remove save_seed_dose from generic code * * Revision 1.1 2000/01/14 22:49:16 jwm * Remove comments originating in other development trees * * Revision 1.0 2000/01/14 22:34:49 jwm * Initial revision * ================================================================== */ /* Constant Definitions */ #define MAX_LINE_LENGTH 180 /* MAXIMUM BUFFER LINE LENGTH */ #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif #ifndef SUCCESS #define SUCCESS (0) #endif #ifndef FAILURE #define FAILURE (-1) #endif /* This should be the currently supported exchange standard. It * * should be of the form x.yz or some of the software assumptions * * will be violated jwm */ #define TAPE_STANDARD 4.00 /* TO GET AROUND 'PATH_MAX' DEFINITION ON IRIX 5.3 WE TRY CHEATING */ #ifndef PATH_MAX #define PATH_MAX 1024 #endif /* COMMENT THIS FOLLOWING #define TO ELIMINATE RTOG KEYWORD CHECKING FOR READING CODE */ #define RTOG /* GLOBAL FILE STREAM POINTER FOR LOG FILE */ extern FILE *aapm_log_file; extern char aapm_log_string[]; /* Typedefs */ /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR CT IMAGE FILES */ typedef struct ct_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int scan_f:1; /* SCAN TYPE FLAG */ unsigned int offset_f:1; /* CT OFFSET FLAG */ unsigned int grid1_f:1; /* GRID 1 UNITS FLAG */ unsigned int grid2_f:1; /* GRID 2 UNITS FLAG */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ unsigned int bytes_f:1; /* BYTES PER PIXEL FLAG */ unsigned int num_dim_f:1; /* NUMBER OF DIMENSIONS FLAG */ unsigned int siz_dim1_f:1; /* SIZE OF DIMENSION 1 FLAG */ unsigned int siz_dim2_f:1; /* SIZE OF DIMENSTION 2 FLAG */ unsigned int z_value_f:1; /* Z VALUE FLAG */ unsigned int x_offset_f:1; /* X OFFSET FLAG */ unsigned int y_offset_f:1; /* Y OFFSET FLAG */ unsigned int ct_air_f:1; /* CT AIR VALUE FLAG */ unsigned int ct_water_f:1; /* CT WATER VALUE FLAG */ /******** RTOG REQUIRED FLAGS ************************/ } ct_flags_t; /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR MR & US IMAGE FILES */ typedef struct mrus_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int scan_f:1; /* SCAN TYPE FLAG */ unsigned int offset_f:1; /* PIXEL OFFSET FLAG */ unsigned int grid1_f:1; /* GRID 1 UNITS FLAG */ unsigned int grid2_f:1; /* GRID 2 UNITS FLAG */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ unsigned int bytes_f:1; /* BYTES PER PIXEL FLAG */ unsigned int num_dim_f:1; /* NUMBER OF DIMENSIONS FLAG */ unsigned int siz_dim1_f:1; /* SIZE OF DIMENSION 1 FLAG */ unsigned int siz_dim2_f:1; /* SIZE OF DIMENSTION 2 FLAG */ unsigned int z_value_f:1; /* Z VALUE FLAG */ unsigned int x_offset_f:1; /* X OFFSET FLAG */ unsigned int y_offset_f:1; /* Y OFFSET FLAG */ /******** RTOG REQUIRED FLAGS ************************/ } mrus_flags_t; /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR STRUCTURE IMAGE FILES */ typedef struct struct_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int struct_name_f:1; /* STRUCTURE NAME FLAG */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ unsigned int base_f:1; /* STRUCTURE BASE (SCAN, ETC. ) FLAG */ unsigned int n_scans_f:1; /* # SCANS FLAG */ unsigned int max_scans_f:1; /* CT OFFSET FLAG */ unsigned int max_pts_f:1; /* MAX POINTS/SEGMENT FLAG */ unsigned int max_seg_f:1; /* MAXIMUM SEGMENTS FLAG */ /******** RTOG REQUIRED FLAGS ************************/ } struct_flags_t; /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR BEAM GEOMETRY IMAGE FILES */ typedef struct beam_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int beam_num_f:1; /* BEAM # FLAG */ unsigned int modality_f:1; /* BEAM MODALITY FLAG */ unsigned int energy_f:1; /* BEAM ENERGY FLAG */ unsigned int beam_des_f:1; /* BEAM DESCRIPTION FLAG */ unsigned int dose_p_tx_f:1; /* DOSE PER TREATMENT FLAG */ unsigned int number_tx_f; /* # OF TREATMENTS FLAG */ unsigned int fraction_id_f:1; /* FRACTION GROUP ID FLAG */ unsigned int beamtype_f:1; /* BEAM TYPE FLAG */ unsigned int plan_id_f:1; /* PLAN ID OF ORIGIN */ unsigned int coll_typ_f:1; /* COLLIMATOR TYPE FLAG */ unsigned int aper_typ_f:1; /* APERTURE TYPE FLAG */ unsigned int aper_des_f:1; /* APERTURE DESCRIPTION FLAG */ unsigned int coll_ang_f:1; /* COLLIMATOR ANGLE FLAG */ unsigned int gantry_ang_f:1; /* GANTRY ANGLE FLAG */ unsigned int couch_ang_f:1; /* COUCH ANGLE FLAG */ unsigned int iso_dist_f:1; /* ISOCENTER DISTANCE FLAG */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ /******** RTOG REQUIRED FLAGS ************************/ } beam_flags_t; /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR SEED GEOMETRY IMAGE FILES */ typedef struct seed_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int model_f:1; /* SEED MODEL FLAG */ unsigned int isotope_f:1; /* SEED ISOTOPE FLAG */ unsigned int strength_f:1; /* SEED STRENGTH FLAG */ unsigned int units_f:1; /* STRENGTH UNITS FLAG */ unsigned int date_f:1; /* DATE OF IMPLANT FLAG */ unsigned int nseeds_f; /* # OF SEEDS IN IMPLANT FLAG */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ unsigned int plan_id_f:1; /* PLAN ID OF ORIGIN */ /******** RTOG REQUIRED FLAGS ************************/ } seed_flags_t; /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR DIGITAL FILM IMAGE FILES */ typedef struct film_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int beam_num_f:1; /* BEAM # FLAG */ unsigned int beam_des_f:1; /* BEAM DESCRIPTION FLAG */ unsigned int film_num_f:1; /* FILM NUMBER FLAG */ unsigned int film_date_f:1; /* FILM DATE FLAG */ unsigned int film_type_f:1; /* FILM TYPE FLAG */ unsigned int num_dim_f:1; /* NUMBER OF DIMENSIONS FLAG */ unsigned int siz_dim1_f:1; /* SIZE OF DIMENSION 1 FLAG */ unsigned int siz_dim2_f:1; /* SIZE OF DIMENSTION 2 FLAG */ unsigned int grid1_f:1; /* GRID 1 UNITS FLAG */ unsigned int grid2_f:1; /* GRID 2 UNITS FLAG */ unsigned int src_img_dis_f:1; /* SOURCE IMAGE DISTANCE FLAG */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ unsigned int bytes_f:1; /* BYTES PER PIXEL FLAG */ unsigned int filmdesc_f:1; /* FILM DESCRIPTION REQUIRED IF BEAM # < 0 AND BEAM DESCRIPTION EMPTY */ /******** RTOG REQUIRED FLAGS ************************/ } film_flags_t; /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR DOSE IMAGE FILES */ typedef struct dose_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int dose_num_f:1; /* DOSE NUMBER FLAG */ unsigned int dose_type_f:1; /* DOSE TYPE FLAG */ unsigned int dose_unit_f:1; /* DOSE UNITS FLAG */ unsigned int orientat_f:1; /* ORIENTATION OF DOSE */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ unsigned int num_dim_f:1; /* NUMBER OF DIMENSIONS FLAG */ unsigned int siz_dim1_f:1; /* SIZE OF DIMENSION 1 FLAG */ unsigned int siz_dim2_f:1; /* SIZE OF DIMENSION 2 FLAG */ unsigned int siz_dim3_f:1; /* SIZE OF DIMENSION 3 FLAG */ unsigned int coord1_f:1; /* COORDINATE 1 OF 1ST PT FLAG */ unsigned int coord2_f:1; /* COORDINATE 2 OF 1ST PT FLAG */ unsigned int horiz_f:1; /* HORIZONTAL GRID INTERVAL */ unsigned int vert_f:1; /* VERTICAL GRID INTERVAL */ /******** RTOG REQUIRED FLAGS ************************/ unsigned int num_tx_f:1; /* NUMBER OF TX FLAG */ unsigned int fraction_id_f:1; /* FRACTION GROUP ID */ } dose_flags_t; /* FLAGS FOR REQUIRED DIRECTORY ENTRIES FOR DOSE VOLUME HISTOGRAM IMAGE FILES */ typedef struct dvh_flags_t /* BIT FIELDS FOR KEYWORDS FOUND */ { /******** SPECIFICATION REQUIRED FLAGS ************************/ unsigned int name_f:1; /* STRUCTURE NAME FLAG */ unsigned int plan_id_f:1; /* PLAN ID OF ORIGIN FLAG */ unsigned int dose_unit_f:1; /* DOSE UNITS FLAG */ unsigned int dose_flav_f:1; /* DOSE FLAVOR FLAG */ unsigned int vol_flav_f:1; /* VOLUME FLAVOR FLAG */ unsigned int num_pairs_f:1; /* NUMBER OF PAIRS FLAG */ unsigned int max_pairs_f:1; /* MAXIMUM # OF PAIRS FLAG */ unsigned int number_f:1; /* NUMBER REPRESENTATION FLAG */ /************* CONDITIONAL FLAGS ****************************/ unsigned int dose_scale_f:1; /* REQUIRED FOR NON ABSOLUTE DOSE VALUES */ unsigned int vol_scale_f:1; /* REQUIRED FOR NON ABSOLUTE VOLUME VALUES */ /******** RTOG REQUIRED FLAGS ************************/ } dvh_flags_t; typedef struct triplet_t /* 3D COORDINATE VALUE STRUCTURE */ { float x; /* X COORDINATE OF A TRIPLET */ float y; /* Y COORDINATE OF A TRIPLET */ float z; /* Z COORDINATE OF A TRIPLET */ } triplet_t; typedef struct doublet_t /* 2D COORDINATE VALUE STRUCTURE */ { float x; /* X COORDINATE OF A TRIPLET */ float y; /* Y COORDINATE OF A TRIPLET */ } doublet_t; typedef struct structurelist_t /* STRUCTURE CONTOUR LINKED LIST */ { int scan_num; /* CT SCAN NUMBER CONTOUR IS TIED TO */ float const_coord; /* POSITION COORDINATE FOR CONTOUR */ doublet_t *coords; /* CONTOUR COORDINATES */ int num_coords; /* NUMBER OF COORDINATES */ struct structurelist_t *next; /* POINTER TO NEXT STRUCTURE CONTOUR */ } structurelist_t; typedef enum /* STRUCTURE PROCESSING STATE FLAG VALUES */ { eNUM_LEVEL, eSCAN_NUM, eNUM_SEGMENTS, eNUM_POINTS, eSTRUCT_COORD } state_type; typedef enum /* AAPM STATUS REPORTING TYPE FLAG VALUES */ { eAAPM_INFO, /* INFO TO LOG FILE ONLY */ eAAPM_STATUS, /* STATUS DURING PROCESSING */ eAAPM_WARN, /* WARNING TO LOG FILE AND FOR STATUS */ eAAPM_ERROR /* ERROR TO LOG FILE AND FOR STATUS */ } aapm_status_type; typedef enum /* CT SCAN AND DOSE PLANAR ORIENTATION */ { eTRANSVERSE, /* TRANSVERSE ORIENTATION SCAN */ eSAGITTAL, /* SAGITTAL ORIENTATION SCAN */ eCORONALL /* CORONAL ORIENTATION SCAN */ } scan_type_t; typedef enum /* HEAD IN/OUT ORIENTATION FLAG VALUES FOR CT AND BEAMS*/ { eHEAD_UNKNOWN, /* DEFAULT HEAD POSITION */ eHEAD_IN, /* HEAD FIRST SCAN ORIENTATION */ eHEAD_OUT /* FEET FIRST SCAN ORIENTATION */ } head_type; typedef enum /* PATIENT ORIENTATION FLAG FOR CT */ { eNOSEUP, /* SUPINE */ eNOSEDOWN, /* PRONE */ eLEFTSIDEDOWN, /* ON LEFT SIDE */ eRIGHTSIDEDOWN /* ON RIGHT SIDE */ } scan_pos_type; typedef enum /* AAPM IMAGE FILE TYPE */ { eCOMMENT, /* COMMENT IMAGE */ eCTSCAN, /* CT SCAN IMAGE */ eMRISCAN, /* MR SCAN IMAGE */ eUSSCAN, /* US SCAN IMAGE */ eSTRUCTURE, /* ANATOMIC STRUCTURE IMAGE */ eBEAMGEOM, /* BEAM GEOMETRY IMAGE */ eDIGITALFILM, /* ON-LINE IMAGE OF DIGITIZED FILM IMAGE */ eDOSEDIST, /* DOSE DISTRIBUTION IMAGE */ eDVH, /* DOSE-VOLUME HISTOGRAM IMAGE */ eSEEDGEOM, /* SEED GEOMETRY IMAGE */ eIMAGEUNDEF /* UNDEFINED IMAGE TYPE */ } image_type_t; typedef enum /* FLAG FOR DATA TYPE CONTAINED IN AN AAPM IMAGE FILE */ { eTWOSCOMP, /* 2'S COMPLEMENT 2 BYTE INT */ eCHARACTER, /* ASCII STRINGS */ eUNSIGNEDBYTE /* UNSIGNED BYTE DATA */ } numb_type; typedef enum /* TYPE OF DOSE CONTAINED IN AAPM DOSE IMAGE FILES */ { ePHYSICAL, eEFFECTIVE, eLET, eOER, eERROR } dose_type; typedef enum /* DOSE UNITS FOR DOSES AND DVH'S. ePERCENT, eABSOLUTE AND eRELATIVE ARE MAINTAINED FOR HISTORICAL REASONS AND ARE NOT LONGER SUPPORTED BY READING PROGRAMS */ { eGRAYS, /* GRAY */ eRADS, /* RAD */ eCGYS, /* CENTIGRAY */ eCGE, /* COBALT GRAY EQUIVALENT */ eABSOLUTE, ePERCENT, eRELATIVE } dose_units_type; typedef enum { eSCANBASED, /* CONTOURS TIED TO SCANS */ eOTHERBASE /* ANYTHING ELSE IS NOT SUPPORTED */ } struct_type; typedef enum /* DOSE VALUES FOR dose_type == eERROR */ { eNOM_DOSE, /* NOMINAL DOSE */ eMIN_DOSE, /* MINIMUM PREDICTED DOSES */ eMAX_DOSE /* MAXIMUM PREDICTED DOSES */ } error_type; typedef enum /* IMAGE TYPE FOR DIGITAL FILMS */ { eSIMULATOR, /* SIMULATOR FILM */ eDRR, /* DRR IMAGE */ exPORT, /* PORT FILM */ eUNDEFFILM /* UNDEFINED FILM IMAGE */ } film_type; typedef enum /* SOURCE OF A DIGITAL FILM */ { exFILM, /* IMAGE SOURCE IS FILM */ eONLINE, /* ONLINE IMAGE SOURCE */ eCOMPUTED_IMAGE, /* COMPUTED IMAGE (I.E. DRR, ETC.) */ eUNDEFSOURCE /* UNDEFINED IMAGE SOURCE */ } film_source_type; typedef enum /* BEAM MODALITY */ { eXRAY_BEAM, /* X-RAY BEAM MODALITY */ eELECTRON_BEAM, /* ELECTRON BEAM MODALITY */ ePROTON_BEAM, /* PROTON BEAM MODALITY */ eNEUTRON_BEAM, /* NEUTRON BEAM MODALITY */ eOTHER_BEAM, /* OTHER BEAM MODALITY */ eUNDEFMOD /* UNDEFINED BEAM MODALITY */ } beam_modality_type; typedef enum /* COLLIMATION TYPE */ { eSYMMETRIC, /* SYMMETRIC COLLIMATORS */ eASYMMETRIC, /* ASYMMETRIC COLLIMATORS IN X AND Y */ eASYMMETRIC_X, /* ASYMMETRIC COLLIMATORS IN X ONLY */ eASYMMETRIC_Y, /* ASYMMETRIC COLLIMATORS IN Y ONLY */ eUNDEF_COLL /* UNDEFINED COLLIMATOR TYPE */ } collimator_type; typedef enum /* METHOD OF CUSTOM FIELD SHAPING */ { eBLOCK_PORT, /* CUSTOM BLOCK PORTAL */ eMLC_X_AXIS, /* MULTI-LEAF COLLIMATOR IN X ONLY */ eMLC_Y_AXIS, /* MULTI-LEAF COLLIMATOR IN Y ONLY */ eMLC_XY_AXIS, /* MULTI-LEAF COLLIMATOR IN X & Y */ eCOLLIMATOR, /* COLLIMATOR PORTAL SHAPE */ eUNDEF_APERTURE /* UNDEFINED APERTURE */ } aperture_type; typedef enum /* BEAM TYPE */ { eSTATIC, /* STATIC BEAM */ eARC, /* ARC BEAM */ eUNDEFBEAM /* UNDEFINED BEAM TYPE */ } beam_type; typedef enum /* COMPENSATING FILTER TYPE */ { eNO_CF, /* NO COMPENSATOR (DEFAULT) */ e1DX_CF, /* 1D COMPENSATOR IN BEAM X */ e1DY_CF, /* 1D COMPENSATOR IN BEAM Y */ e2D_CF, /* 2D COMPENSATOR (FOR SURFACE COMP) */ e3D_CF /* 3D DOSE COMPENSATOR FOR SURFACE AND HETERGENEITY */ } comp_filter_type; typedef enum /* IMAGE SOURCE TYPE */ { eNORMALSCAN, /* NOT Secondary Capture */ eSECONDARYCAPTURE /* Secondary Capture */ } image_source_t; typedef struct comment_line_t /* COMMENT FILE LINKED LIST OF STRINGS */ { char *string; /* CHARACTER STRING */ struct comment_line_t *next; /* POINTER TO NEXT LINK IN CHAIN */ } comment_line_t; typedef struct exch_cmnt_t /* COMMENT IMAGE TYPE DATA STRUCTURE */ { char *writer; /* TAPE WRITER'S NAME OR IDENTIFIER */ char *date; /* AAPM FORMAT DATE STRING */ char *unitnum; char *fileoforigin; /* NAME OF SOURCE FILE FOR THIS COMMENT FILE */ char *description; /* DESCRIPTION OF COMMENT FILE */ comment_line_t *line; /* LINKED LIST BASE FOR COMMENT LINES */ } exch_cmnt_t; typedef struct ctscan_t /* CT SCAN IMAGE TYPE DATA STRUCTURE */ { scan_type_t scan_type; /* eTRANSVERSE|eSAGITTAL|eCORONAL */ int ct_offset; /* OFFSET OF CT NUMBERS TO AVOID NEGATIVE VALUES */ float pixel_width; /* PIXEL WIDTH IN CM */ float pixel_length; /* PIXEL LENGTH IN CM */ numb_type number_type; /* eTWOSCOMP | eCHARACTER ONLY eTWOSCOMP IS SUPPORT FOR CT's */ int bytes_per_pixel; /* BYTES PER CT PIXEL VALUE */ int num_dimensions; /* NUMBER OF DIMENSIONS OF IMAGE 1,2 OR 3 */ int dimension_1; /* NUMBER OF CT COLUMNS */ int dimension_2; /* NUMBER OF CT ROWS */ float z_value; /* COUCH POSITION FOR TRANSVERSE SCANS IN CM */ float x_offset; /* X OFFSET OF ORIGIN OF PATIENT COORDINATE SYSTEM FROM CENTER OF CT IMAGES */ float y_offset; /* Y OFFSET OF ORIGIN OF PATIENT COORDINATE SYSTEM FROM CENTER OF CT IMAGES */ int ct_air; /* CT VALUE OF AIR (INCLUDES ct_offset) */ int ct_water; /* CT VALUE OF WATER (INCLUDES ct_offset) */ /***** OPTIONAL KEYWORDS IN DIRECTORY ENTRIES */ char *unit_number; /* UNIT # OR ID */ char *site; /* ANATOMIC SITE OF INTEREST */ char *description; /* DESCRIPTION OF SCAN(S) */ char *scanner_type; /* STRING IDENTIFYING SCANNER USED FOR IMAGE */ head_type head; /* eHEAD_IN|eHEAD_OUT HEAD OR FOOT FIRST SCANNING ORIENTATION */ scan_pos_type position; /* eNOSEUP|eNOSEDOWN|eLEFTSIDEDOWN| eRIGHTSIDEDOWN */ char *attitude; /* STRING DESCRIBING PATIENT POSITION RECUMBENT, SITTING, STANDING, ETC */ char *tape_of_origin; /* HELPS ORIGINATING INSTITUTION RETREIVE ORIGINAL DATA */ char *study_number; /* CT SCANNER STUDY NUMBER FOR ORIGINATING INSTITUTION RETREIVAL */ char *scan_id; /* CT SCANNER SCAN IDENTIFIER */ int scan_number; /* SCAN NUMBER IN THIS SEQUENCE */ char *scan_date; /* DATE OF SCAN IN AAPM DATE FORMAT */ char *scan_file; /* ORIGINAL SCAN FILE NAME FOR ORIGINATING INSTITUTION RETRIEVAL/REFERENCE */ float slice_thick; /* SLICE THICKNESS IN CM */ char *ct_scale; /* STRING DESCRIBING ADJUSTMENT MADE IN CT SCALE, linearized, water-equivalent, etc. */ int distrust; /* VALUE ABOVE WHICH CT NUMBERS ARE NOT CREDIBLE */ image_source_t image_source; /* eNORMALSCAN | eSECONDARYCAPTURE */ /* END OF OPTIONAL KEYWORDS */ ct_flags_t ct_flags; /* FLAGS FOR CT DATA READ */ void *pixbuf; /* PIXEL DATA OF IMAGE */ } ctscan_t; typedef struct mrusscan_t /* MR/US SCAN IMAGE DATA STRUCTURE */ { scan_type_t scan_type; /* eTRANSVERSE|eSAGITTAL|eCORONAL */ int offset; /* OFFSET TO AVOID NEGATIVE VALUES */ float pixel_width; /* PIXEL WIDTH IN CM */ float pixel_length; /* PIXEL LENGTH IN CM */ numb_type number_type; /* eTWOSCOMP | eCHARACTER ONLY eTWOSCOMP IS SUPPORTED */ int bytes_per_pixel; /* BYTES PER PIXEL VALUE */ int num_dimensions; /* # OF DIMENSIONS OF IMAGE 1,2 OR 3 */ int dimension_1; /* NUMBER OF COLUMNS */ int dimension_2; /* NUMBER OF ROWS */ float z_value; /* COUCH POSITION FOR TRANSVERSE SCANS IN CM */ float x_offset; /* X OFFSET OF ORIGIN OF PATIENT COORDINATE SYSTEM FROM CENTER OF IMAGES */ float y_offset; /* Y OFFSET OF ORIGIN OF PATIENT COORDINATE SYSTEM FROM CENTER OF IMAGES */ /***** OPTIONAL KEYWORDS IN DIRECTORY ENTRIES */ char *scan_date; /* DATE OF SCAN IN AAPM DATE FORMAT */ image_source_t image_source; /* eNORMALSCAN | eSECONDARYCAPTURE */ /* END OF OPTIONAL KEYWORDS */ mrus_flags_t mrus_flags; /* FLAGS FOR DATA READ */ void *pixbuf; /* PIXEL DATA OF IMAGE */ } mrusscan_t; typedef struct structure_t /* STRUCTURE IMAGE TYPE DATA STRUCTURE */ { char *struct_name; /* ANATOMIC STRUCTURE NAME */ numb_type number_type; /* eTWOSCOMP | eCHARACTER ONLY eCHARACTER IS SUPPORT FOR STRUCTURES */ struct_type stype; /* eSCANBASED | eOTHERBASE ONLY eSCANBASED IS CURRENTLY SUPPORTED */ int num_scans; /* TOTAL NUMBER OF CT SCANS IN DATA SET */ int max_scans; /* MAXIMUM NUMBER OF SCANS (ORIGINATOR LIMIT)*/ int max_pts_segment; /* MAXIMUM NUMBER OF POINTS IN ANY GIVEN STRUCTURE SEGMENT (ORIGINATOR LIMIT) */ int max_seg_scan; /* MAXIMUM NUMBER OF SEGMENTS OF A GIVEN STRUCTURE PER SCAN SLICE */ /***** OPTIONAL KEYWORDS IN DIRECTORY ENTRIES */ char *unit_number; /* UNIT NUMBER OF ID */ char *writer; /* NAME OF WRITER */ char *date; /* AAPM DATE FORMAT */ char *edition; /* STRUCTURE EDITION */ char *color; /* COLOR AS ORIGINATOR LIKES IT */ char *description; /* DESCRIBES STRUCTURE */ int study_num; /* STUDY NUMBER OF ORIGIN */ scan_type_t orientation; /* eTRANSVERSE|eSAGITTAL|eCORONAL */ struct_flags_t struct_flags; /* FLAGS FOR STRUCTURE DATA READ */ structurelist_t *contours; /* LINKED LIST OF CONTOURS FOR STRUCTURE */ } structure_t; typedef struct collimator_t /* COLLIMATOR SETTING VALUES (FOR SYMMETRIC AND ASYM. COLLIMATORS) */ { float x1; /* LEFT COLLIMATOR POSITION */ float x2; /* RIGHT COLLIMATOR POSITION */ float y1; /* LOWER (Y-COUCH) COLLIMATOR POSITION */ float y2; /* UPPER (Y_GANTRY) COLLIMATOR POSITION */ } collimator_t; typedef struct mlc_def_t /* MLC DEFINITION STRUCTURE */ { int number_leafs; /* NUMBER OF LEAFS */ float *thick; /* WIDTH OF EACH LEAF SHADOW AT ISOCENTER */ float *pos_value; /* COORDINATE FOR CENTER OF EACH LEAF PAIR */ float *extension1; /* EXTENSION DISTANCES (AT ISOCENTER) FOR EACH LEAF PAIR */ float *extension2; } mlc_def_t; typedef struct mlc_xy_t /* DUAL MLC STRUCTURE (RARE) */ { mlc_def_t *x_mlc_set; /* X MLC SET */ mlc_def_t *y_mlc_set; /* Y MLC SET */ } mlc_xy_t; typedef enum /* BEAM MODIFIER CONTOUR TYPE */ { eAPERTURE, /* CONTOUR IS BOUNDED BY A BLOCK (i.e. A HOLE IN THE BLOCK */ eBLOCK /* CONTOUR IS THE BLOCK */ } block_type; typedef struct block_list_t /* LINKED LIST OF BLOCK/APERTURE CONTOURS */ { struct block_list_t *next; /* POINTER TO NEXT BLOCK IN LIST */ block_type block_typ; /* BLOCK TYPE eAPERTURE | eBLOCK */ float transmission; /* FRACTIONAL TRANSMISSION */ int number_coords; /* NUMBER OF COORDINATES IN CONTOUR */ doublet_t *coords; /* BLOCK COORDINATES */ } block_list_t; typedef struct block_t /* HEAD OF A LINKED LIST OF BLOCK/APERTURE CONTOURS */ { int number_block_contours; /* NUMBER OF BLOCK CONTOURS */ block_list_t *blocks; /* BLOCK COORDINATES AND DEFINITION DATA */ } block_t; typedef struct aperture_t /* SHAPED FIELD UNION FOR MLC, OR BLOCKS */ { union { mlc_def_t *mlc; /* MLC COLLIMATOR */ mlc_xy_t *mlc_xy; /* MLC COLLIMATOR IN X AND Y */ block_t *block; /* BLOCK APERTURE */ } ap_def; } aperture_t; typedef struct beam_definition_t /* BASIC BEAM INFORMATION FROM BEAM GEOMETRY FILE */ { triplet_t isocenter; /* ISOCENTER COORDINATE */ collimator_t collimator; /* COLLIMATOR INFORMATION */ aperture_t aperture; /* APERTURE INFORMATION */ } beam_definition_t; typedef struct beamgeom_t /* BEAM GEOMETRY IMAGE TYPE DATA STRUCTURE */ { int beam_number; /* BEAM NUMBER */ beam_modality_type modality; /* BEAM MODALITY eXRAY_BEAM | eELECTRON_BEAM | ePROTON_BEAM | eNEUTRON_BEAM | eOTHER | eUNDEFBEAM */ float beam_energy; /* BEAM ENERGY IN MEV */ char *description; /* BEAM DESCRIPTION */ float rx_dose_per_tx; /* PRESCRIPTION DOSE PER TREATMENT IN GY */ int number_of_treatments; /* NUMBER OF TREATMENTS FOR THIS BEAM */ char *fraction_group_id; /* FRACTION GROUPING COMMONLY TREATED BEAMS TOGETHER */ beam_type beamtype; /* BEAM TYPE eSTATIC | eARC | eUNDEFBEAM */ char *plan_id_of_origin; /* PLAN ID OF ORIGIN */ collimator_type collimator; /* COLLIMATOR TYPE eSYMMETRIC | eASYMMETRIC | eASYMMETRIC_X | eASYMMETRIC_Y | eUNDEF_COLL */ aperture_type aperture; /* PORT SHAPE TYPE eBLOCK | eMLC_X | eMLC_Y | eMLC_XY | eCOLLIMATOR | eUNDEF_APERTURE */ char *aperture_description; /* APERTURE DESCRIPTION */ float collimator_angle; /* COLLIMATOR ANGLE IN DEGREES */ float gantry_angle; /* GANTRY ANGLE IN DEGREES */ float couch_angle; /* COUCH ANGLE IN DEGREES */ float nominal_isocenter_dist; /* NOMINAL ISOCENTER/TREATMENT DISTANCE */ numb_type number_type; /* MUST BE eCHARACTER */ /******* OPTIONAL KEYWORDS FOR BEAM GEOMETRY */ char *aperture_id; /* APERTURE IDENTIFYING STRING */ int wedge_angle; /* WEDGE ANGLE (REQUIRED IF WEDGE USED) */ int wedge_rotation_angle; /* WEDGE HEEL/TOE ORIENTATION (REQUIRED IF WEDGE USED) */ float arc_angle; /* ARC ANGLE IN DEGREES (REQUIRED IF ARC) */ comp_filter_type compensator; /* COMP FILTER TYPE eNONE | e1DX | e1DY | e2D | e3D */ beam_flags_t beam_flags; /* FLAGS FOR BEAM DATA READ */ head_type orientation; /* eHEAD_IN | eHEAD_OUT */ beam_definition_t *beam; /* STRUCTURE CONTAINING THE BEAM GEOMETRY DEFINITION DATA */ } beamgeom_t; typedef struct film_t /* DIGITAL FILM IMAGE TYPE DATA STRUCTURE */ { int beam_number; /* BEAM NUMBER FILM ASSOCIATED WITH */ char *beam_description; /* BEAM DESCRIPTION */ int film_number; /* NUMBER OF THIS FILM FOR THIS DAY */ char *film_date; /* DATE ON WHICH THIS IMAGE ACQUIRED */ film_type type; /* eSIMULATOR | eDRR | exPORT */ int number_of_dimensions; /* NUMBER OF DIMENSIONS IN IMAGE MUST == 2 */ int size_of_dimension1; /* NUMBER OF ROWS IN IMAGE */ int size_of_dimension2; /* NUMBER OF COLUMNS IN IMAGE */ float grid_1_units; /* PIXEL WIDTH IN CM */ float grid_2_units; /* PIXEL HEIGHT IN CM */ float source_image_distance; /* SOURCE TO IMAGE COLLECTION DISTANCE */ numb_type number_type; /* eTWOSCOMP | eCHARACTER | eUNSIGNEDBYTE WHERE eCHARACTER IS NOT SUPPORTED */ int bytes_per_pixel; /* NUMBER OF BYTES PER PIXEL VALUE 1 OR 2 */ /******* OPTIONAL KEYWORDS FOR DIGITAL FILM */ int offset_flag; /* FLAG FOR VALID OFFSET DEFINED 0=NO, 1=YES */ float x_offset; /* X OFFSET FROM GEOMETRIC CENTER OF IMAGE TO CENTRAL RAY OF THE BEAM */ float y_offset; /* Y OFFSET FROM GEOMETRIC CENTER OF IMAGE TO CENTRAL RAY OF THE BEAM */ char *film_description; /* DESCRIPTION OF THE FILM */ film_source_type source; /* exFILM | eONLINE | eCOMPUTED_IMAGE */ int unit_number; /* UNIT NUMBER FILM IMAGE ACQUIRED FROM */ float od_scale; /* SCALE FACTOR TO CONVERT PIXEL VALUES TO OPTICAL DENSITY */ int bits_per_pixel; /* NUMBER OF BITS USED IN PIXEL */ float collimator_angle; /* COLLIMATOR ANGLE IN DEGREES. NON-ZERO IF FILM EDGES ARE PARALLEL WITH COLLIMATOR EDGES */ film_flags_t film_flags; /* FLAGS FOR FILM DATA READ */ char *pixbuf; /* FILM PIXEL DATA POINTER */ } film_t; typedef struct dosedist_t /* DOSE IMAGE TYPE DATA STRUCTURE */ { int total_blocks; /* TOTAL # OF BLOCKS OF DATA FOR READING */ int block_size; /* DUPLICATE OF tape.block_size */ int cur_block; /* CURRENT BLOCK NUMBER BEING READ FROM */ char *data_block; /* TEXT DATA BLOCK FOR READING FROM DISK ONE BLOCK AT A TIME */ int offset; /* OFFSET FOR NEXT READ */ int dose_number; /* NUMBER IDENTIFYING THIS DISTRIBUTION */ dose_type dose_flavor; /* ePHYSICAL | eEFFECTIVE | eLET */ dose_units_type dose_units; /* eGRAYS | eRADS | eCGYS | ePERCENT | eRELATIVE */ scan_type_t orientation; /* eTRANSVERSE|eSAGITTAL|eCORONAL */ numb_type number_type; /* eTWOSCOMP | eCHARACTER ONLY eTWOSCOMP IS SUPPORT FOR CT's */ int num_dimensions; /* NUMBER OF DIMENSIONS OF DOSE (must be 3) */ int num_horiz_pts; /* NUMBER OF HORIZONTAL POINTS */ int num_vert_pts; /* NUMBER OF VERTICAL POINTS */ int num_planes; /* NUMBER OF PLANES */ float first_coord; /* FIRST COORDINATE (X FOR TRANSVERSE) */ float second_coord; /* SECOND COORDINATE (Y FOR TRANSVERSE) */ float horiz_step; /* STEP BETWEEN HORIZONTAL DOSE POINTS */ float vert_step; /* STEP BETWEEN VERTICAL DOSE POINTS */ /***** OPTIONAL KEYWORDS IN DIRECTORY ENTRIES */ char *unit_number; /* UNIT NUMBER OF ID */ char *writer; /* NAME OF WRITER */ char *date; /* AAPM DATE FORMAT */ char *edition; /* DOSE DISTRIBUTION EDITION */ char *description; /* DESCRIBES DOSE DISTRIBUTION */ int plan_num; /* PLAN NUMBER OF ORIGIN */ char *plan_edition; /* PLAN EDITION OF ORIGIN */ int study_num; /* STUDY NUMBER OF ORIGIN */ char *version; /* PLANNING PROGRAM IDENTIFICATION */ triplet_t norm_pt; /* X,Y,Z COORDINATE OF NORMALIZATION POINT */ float norm_dose; /* DOSE AT NORMALIZATION POINT WHICH WHEN MULTIPLIED TIMES EACH POINT IN THE MATRIX CONVERTS THE POINTS TO THE DOSE UNITS SPECIFIED ABOVE */ error_type dose_error; /* eNOM_DOSE | eMIN_DOSE | eMAX_DOSE */ float *doses; /* ARRAY CONTAINING DOSE INFORMATION */ float *plane_coords; /* ARRAY OF PLANE Z COORDINATES */ int number_of_treatments; /* NUMBER OF TREATMENTS FOR THIS BEAM */ char *fraction_group_id; /* FRACTION GROUPING COMMONLY TREATED BEAMS TOGETHER */ dose_flags_t dose_flags; /* FLAGS FOR DOSE DATA READ */ float dose_scale; /* SCALES DOSE VALUES IN FILE TO MATCH SPECIFIED UNITS. DEFAULTS TO 1.00 IF NOT SPECIFIED OTHERWISE. */ } dosedist_t; typedef struct dvh_t /* DOSE VOLUME HISTOGRAM IMAGE TYPE DATA STRUCTURE */ { char *struct_name; /* ANATOMIC STRUCTURE NAME */ char *plan_id_of_origin; /* PLAN ID OF ORIGIN */ dose_units_type dose_units; /* eGRAYS | eRADS | eCGYS | ePERCENT | eRELATIVE */ dose_units_type dose_flavor; /* eABSOLUTE | ePERCENT | eRELATIVE */ dose_units_type volume_flavor; /* eABSOLUTE | ePERCENT | eRELATIVE */ int number_of_pairs; /* NUMBER OF DVH DOSE BIN/VOLUME PAIRS */ int maximum_number_of_pairs; /* MAXIMUM NUMBER OF PAIRS IN FILE */ numb_type number_type; /* eTWOSCOMP | eCHARACTER ONLY eCHARACTER IS SUPPORTED FOR DVH's */ /***** OPTIONAL KEYWORDS IN DIRECTORY ENTRIES */ float dose_scale; /* SCALES DOSE VALUES IN FILE TO MATCH SPECIFIED UNITS. DEFAULTS TO 1.00 IF NOT SPECIFIED OTHERWISE. */ float volume_scale; /* SCALES VOLUME VALUES IN FILE TO MATCH SPECIFIED UNITS. DEFAULTS TO 1.00 IF NOT SPECIFIED OTHERWISE. */ char *date; /* AAPM DATE FORMAT */ dvh_flags_t dvh_flags; /* FLAGS FOR DVH DATA READ */ doublet_t *dvh_data; /* ARRAY OF DVH BINS AND COUNTS */ } dvh_t; /* SEED IMPLANT STUFF */ typedef struct seed_coord_ll_t /* Seed coordinate LL */ { struct seed_coord_ll_t *next; /* pointer to next node in LL */ triplet_t coord; /* coordinates of seed */ } seed_coord_ll_t; typedef enum { eI125, ePD103, eUNKNOWNISOTOPE } isotope_type; typedef enum { eMCI, eCGYCM2PERHR, eUNKNOWNSEEDUNIT } seed_unit_type; typedef struct seeddata_t /* SEED GEOMETRY IMAGE DATA STRUCTURE */ { char *seed_model; /* model identifier or manufacturer */ isotope_type isotope; /* eI125 or ePD103 */ float strength; /* seed strength in units specified */ seed_unit_type units; /* eMCI or eCGYCM2PERHR */ char *date; /* date of implant "DD, MM, YYYY" */ int nseeds; /* Number of seeds in implant */ numb_type number_type; /* MUST BE eCHARACTER */ char *plan_id_of_origin; /* PLAN ID OF ORIGIN */ seed_flags_t seed_flags; /* FLAGS FOR SEED GEOMETRY READ */ seed_coord_ll_t *coords; /* LL of seed coordinate positions */ /***** OPTIONAL KEYWORDS IN DIRECTORY ENTRIES */ } seeddata_t; typedef struct exch_file_t /* IMAGE FILE DIRECTORY INFORMATION (ONE PER IMAGE FILE) WITH A UNION FOR THE DIFFERENT IMAGE FILE TYPES */ { int image_number; /* IMAGE NUMBER FOR THIS TAPE */ image_type_t image_flag; /* eCOMMENT | eCTSCAN | eMRISCAN | eUSSCAN | eSTRUCTURE | eBEAMGEOM | eDIGITALFILM | eDOSEDIST | eDVH | eSEEDGEOM | eIMAGEUNDEF */ int case_number; /* (RTOG?) CASE NUMBER ON THIS TAPE */ char *patient_name; /* UBIQUITOUS PATIENT NAME STRING */ int data_size; /* SIZE OF DATA FILE (READ ONLY) */ union { exch_cmnt_t comment; ctscan_t ctscan; mrusscan_t mrusscan; structure_t structure; beamgeom_t beam_geometry; film_t film; dosedist_t dose; dvh_t dvh; seeddata_t seeddata; } image; struct exch_file_t *next; /* POINTER TO NEXT FILE ENTRY */ } exch_file_t; typedef struct case_t /* CASE INFORMATION COMMON TO ALL IMAGE FILES IN A FILE SET FOR A SINGLE PATIENT. LINKED LIST TO HANDLE MULTIPLE PATIENT DATA SETS */ { int case_number; /* CASE NUMBER ON THIS TAPE 1 = FIRST, 2 = SECOND PATIENT, ETC. */ char *patient_name; /* UBIQUITOUS PATIENT NAME STRING */ char *patient_id; /* PATIENT ID FOR SAVING/READING DATA FILES */ char *disease_site; /* DISEASE SITE */ char *physician; /* PHYSICIAN STRING */ int start_file; /* FIRST FILE WITH DATA FOR THIS PATIENT */ int stop_file; /* LAST FILE WITH DATA FOR THIS PATIENT */ exch_file_t *head_file; /* HEAD OF LINKED LIST OF FILE DIRECTORY INFORMATION */ /************************************************************************* SITE SPECIFIC STRUCTURE TO SPECIFY DATA FOR WRITING TO TAPE. THIS WOULD INCLUDE INFORMATION SUCH AS PLAN ID'S, PATHS TO THE DATA, ETC. ************************************************************************/ site_data_t site_data; /* DATA STRUCTURE BE USED FOR TRACKING PATIENT DATA TO BE WRITTEN TO TAPE */ } case_t; typedef struct tapedir_t /* OVERALL DATA FILE SET STRUCTURE WITH FILE LIST HEAD AND OTHER INFO */ { char *tape_standard; /* TAPE STANDARD NUMBER STRING */ char *intercomp_standard; /* TAPE INTERCOMPARISON STANDARD */ char *institution; /* INSTITUTION IDENTIFIER STRING */ char *date_created; /* AAPM FORMAT DATE OF TAPE CREATION */ char *writer; /* PERSON WRITING TAPE AND TO CONTACT ABOUT PROBLEMS WITH THE TAPE OR THE DATA */ char *default_patient_id; /* DEFAULT PATIENT ID FOR 1 PATIENT SETS */ case_t *patient_case; /* CASE STRUCTURE AND LIST */ char *block_data; /* DIRECTORY INFORMATION IN BLOCK FORM */ char *file_data; /* BUFFER FOR WRITING DATA BLOCKS TO TAPE */ int file_data_cnt; /* # OF BYTES IN file_data BLOCK */ int data_size; /* SIZE OF DIRECTORY DATA IN BYTES */ int block_size; /* SIZE OF TAPE BLOCKS */ int num_blocks; /* NUMBER OF DIRECTORY BLOCKS */ int offset; /* OFFSET INTO block_data FOR CURRENT READ */ int total_comment; /* TOTAL NUMBER OF COMMENT FILES */ int total_ctscan; /* TOTAL NUMBER OF CT SCAN FILES */ int total_mrscan; /* TOTAL NUMBER OF MR SCAN FILES */ int total_usscan; /* TOTAL NUMBER OF US SCAN FILES */ int total_structure; /* TOTAL NUMBER OF STRUCTURE FILES */ int total_beam_geometry; /* TOTAL NUMBER OF BEAM GEOMETRY FILES */ int total_seed_geometry; /* TOTAL NUMBER OF SEED GEOMETRY FILES */ int total_film; /* TOTAL NUMBER OF FILM FILES */ int total_dose; /* TOTAL NUMBER OF DOSE FILES */ int total_images; /* NUMBER OF TOTAL IMAGES IN DIRECTORY */ int total_dvh; /* TOTAL NUMBER OF DVH'S IN DIRECTORY */ int current_image_num; /* CURRENT IMAGE NUMBER BEING PROCESSED */ int expected_image_num; /* IMAGE NUMBER EXPECTED */ char *path; /* PATH TO TAPE FILES */ char *prefix; /* FILE NAME PREFIX FOR READING & WRITING */ char *postfix; /* FILE NAME POSTFIX FOR READING AND WRITING */ int file_num_digits; /* NUMBER OF DIGITS FOR FILE NUMBER IN FILE NAME FOR READING AND WRITING */ char *format_string; /* FORMAT STRING FOR CREATING FILENAMES */ /************** FLAGS FOR WHAT TO PROCESS READING AND WRITING *********/ int commentflag; /* FLAG FOR READING/WRITING COMMENT FILES */ int ctflag; /* FLAG FOR READING/WRITING CT SCAN FILES */ int mrflag; /* FLAG FOR READING/WRITING MR SCAN FILES */ int usflag; /* FLAG FOR READING/WRITING US SCAN FILES */ int structflag; /* FLAG FOR READING/WRITING STRUCTURE FILES */ int filmflag; /* FLAG FOR READING/WRITING FILM FILES */ int orphanflag; /* FLAG FOR READING/WRITING ORPHAN FILM FILES */ } tapedir_t; /* Extern (Global) Variable Declarations -- NOT DEFINITIONS */ /* Function Prototypes */ int aapm_blank_line /* PUT A BLANK LINE IN AN AAPM FORMAT TEXT FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ FILE *output /* FILE STREAM POINTER FOR OUTPUT */ ); int aapm_entry /* BUILD A KEYWORD/VALUE DIRECTORY ENTRY AND WRITE IT TO THE DATA BUFFER */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ int key, /* KEY TO BUILD STRING FOR */ void *key_value_addr, /* POINTER TO KEY VALUE */ key_data_type key_data, /* KEY VALUE TYPE aSTRING | aINT | aFLOAT */ FILE *output /* FILE STREAM POINTER FOR OUTPUT */ ); int aapm_status /* REPORT PROGRESS AND ERRORS IN PROCESSING AAPM FORMAT FILE SETS */ ( aapm_status_type aapm_status, /* NATURE OF MESSAGE TYPE eAAPM_INFO | eAAPM_ERROR */ char *status_line /* TEXT STRING DOCUMENTING MESSAGE */ ); int check_open /* OPEN AAPM FORMAT FILE AND ENSURE ITS' FILE LENGTH IS AN INTEGRAL MULTIPLE OF DATA BUFFERS */ ( FILE **fp, /* FILE STREAM POINTER */ char *filename, /* FILE NAME */ int block_size, /* SIZE OF BUFFER IN BYTES */ int *num_blocks, /* NUMBER OF BLOCKS IN FILE */ int *file_size /* SIZE OF FILE IN BYTES */ ); int close_aapm_file /* CLOSE AAPM FORMAT TEXT FILE AND FLUSH LAST BUFFER */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ FILE *output /* FILE STREAM POINTER FOR OUTPUT FILE */ ); char *dup_string /* LEGAL strdup REPLACEMENT */ ( char *string /* STRING TO DUPLICATE */ ); int expand_key /* EXPAND A KEYWORD FOR '#' */ ( char *string /* KEY STRING TO BE EXPANDED */ ); int extract_floats /* EXTRACT FLOATS FROM A LINE IN AN AAPM FILE */ ( char *string, /* STRING CONTAINING INTS */ float *array, /* ARRAY TO FILL WITH VALUES EXTRACTED */ int max_array /* MAXIMUM # OF ARRAY MEMBERS ALLOWED */ ); int extract_ints /* EXTRACT INTS FROM A LINE IN AN AAPM FILE */ ( char *string, /* STRING CONTAINING INTS */ int *array, /* ARRAY TO FILL WITH VALUES EXTRACTED */ int max_array /* MAXIMUM # OF ARRAY MEMBERS ALLOWED */ ); int extract_line /* EXTRACT A LINE FROM AN AAPM FORMATTED FILE */ ( char *data_block, /* DATA BLOCK WITH LINES IN IT */ int *offset, /* OFFSET IN THE BLOCK */ int max_offset, /* MAXIMUM+1 VALUE FOR OFFSET */ char *buffer, /* AREA TO PUT STRING */ int max_buffer_length /* MAXIMUM BUFFER LENGTH */ ); int file_blocks /* COUNT NUMBER OF BUFFERS IN FILE */ ( char *filename, /* FILENAME TO CHECK */ int block_size, /* BLOCK SIZE */ int *num_blocks, /* NUMBER OF BLOCKS CONTAINED */ int *file_size /* SIZE OF FILE */ ); int init_aapm_file /* OPEN AAPM BUFFERED FILE AND INITIALIZE BUFFER */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ int file_number, /* NUMBER FOR THIS FILE */ FILE **output /* FILE STREAM POINTER FOR OUTPUT FILE */ ); int key_check_beam /* ENSURE REQUIRED KEYWORDS PROVIDED FOR BEAM GEOMETRY */ ( beamgeom_t *beam /* BEAM DATA STRUCTURE */ ); int key_check_seed /* ENSURE REQUIRED KEYWORDS PROVIDED FOR SEED GEOMETRY */ ( seeddata_t *seedgeom /* SEED GEOMETRY DATA STRUCTURE */ ); int key_check_ct /* ENSURE REQUIRED KEYWORDS PROVIDED FOR CT */ ( ctscan_t *ct /* CT SCAN DATA STRUCTURE */ ); int key_check_mrus /* ENSURE REQUIRED KEYWORDS PROVIDED FOR MR/US */ ( mrusscan_t *mrus /* MR/US SCAN DATA STRUCTURE */ ); int key_check_dvh /* ENSURE REQUIRED KEYWORDS PROVIDED FOR DVH */ ( dvh_t *dvh /* DVH DATA STRUCTURE */ ); int key_check_dose /* ENSURE REQUIRED KEYWORDS PROVIDED FOR DOSE */ ( dosedist_t *film /* DOSE DATA STRUCTURE */ ); int key_check_film /* ENSURE REQUIRED KEYWORDS PROVIDED FOR DIGITAL FILM */ ( film_t *film /* FILM DATA STRUCTURE */ ); int key_check_anat /* ENSURE REQUIRED KEYWORDS PROVIDED FOR STRUCTURE */ ( structure_t *structure /* ANATOMIC STRUCTURE DATA STRUCTURE */ ); int next_entry /* PROCESS NEXT IMAGE FILE'S DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY DATA */ int *done /* FLAG TO SIGNAL END OF DIRECTORY 1 = YES */ ); int parse_anat_entry /* PARSE STRUCTURE IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ structure_t *structure, /* STRUCTURE NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_beam_entry /* PARSE BEAM GEOMETRY IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ beamgeom_t *beam, /* BEAM NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_seed_entry /* PARSE SEED GEOMETRY IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ seeddata_t *seedgeom, /* SEED NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_comment_entry /* PARSE COMMENT IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ exch_cmnt_t *comment, /* COMMENT NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_ct_entry /* PARSE CT IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ ctscan_t *ctscan, /* CT NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_dose_entry /* PARSE DOSE IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ dosedist_t *dose, /* DOSE NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_film_entry /* PARSE DIGITAL FILM IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ film_t *film, /* FILM NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_key /* GET KEY INDEX NUMBER AND VALUE STRING */ ( char *string, /* STRING PASSED IN */ char *keylist[], /* LIST OF KNOWN KEYS */ int num_keys, /* NUMBER OF KEYS IN LIST */ char **value_string /* PORTION TO RIGHT OF := SEPARATOR */ ); int parse_mrus_entry /* PARSE MR/US IMAGE FILE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ mrusscan_t *mrusscan, /* MR/US NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_value /* GET KEY VALUE INDEX NUMBER */ ( char *string, /* STRING PASSED IN */ char *keyvaluelist[], /* LIST OF KNOWN KEYS */ int num_value_keys /* NUMBER OF KEYS IN LIST */ ); int parse_dose_entry /* PARSE DOSE IMAGE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ dosedist_t *dose, /* DOSE NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int parse_dvh_entry /* PARSE DVH IMAGE DIRECTORY ENTRIES */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ dvh_t *dvh, /* DVH NODE TO FILL */ int *done /* FLAG TO SIGNAL END OF DIRECTORY */ ); int process_comment /* READ IN AAPM COMMENT IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* EXCHANGE FILE DIRECTORY ENTRY */ ); int process_ct /* READ AAPM CT IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* DIRECTORY FILE STRUCTURE */ ); int process_mrus /* READ AAPM MR/US IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* DIRECTORY FILE STRUCTURE */ ); int process_dose /* READ AAPM DOSE IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* EXCHANGE FILE DIRECTORY ENTRY */ ); int process_beam_geometry /* READ AAPM BEAM IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *cur_file /* EXCHANGE FILE DIRECTORY ENTRY */ ); int process_seed_geometry /* READ AAPM SEED IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *cur_file /* EXCHANGE FILE DIRECTORY ENTRY */ ); int process_digital_film /* READ AAPM FILM IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* EXCHANGE FILE DIRECTORY ENTRY */ ); int process_dvh /* READ AAPM DVH IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* EXCHANGE FILE DIRECTORY ENTRY */ ); int process_entry /* READ AAPM DIRECTORY ENTRY */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* DIRECTORY FILE STRUCTURE */ ); int process_structures /* READ IN STRUCTURES FROM AAPM IMAGE FILE */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* EXCHANGE FILE DIRECTORY ENTRY */ ); int read_aapm_dose_values /* READ IN AAPM DOSE TEXT VALUES */ ( FILE *input, /* INPUT FILE STREAM POINTER */ dosedist_t *doses, /* DOSE STRUCTURE */ float *array, /* ARRAY TO PUT VALUES INTO */ int max_array /* MAXIMUM NUMBER OF ENTRIES IN ARRAY */ ); int read_comment_string /* READ TEXT STRING AND STRIP ';' AND FOLLOWING TEXT */ ( char *string, /* STRING TO READ INTO */ int length, /* MAXIMUM LENGTH OF STRING */ FILE *input /* INPUT FILE STREAM POINTER */ ); char *read_dup_string /* SAME AS read_string BUT USES dup_string */ ( FILE *input /* FILE TO READ FROM */ ); int read_string /* READ STRING FROM A TEXT FILE & STRIP TERMINATORS */ ( char *string, /* STRING TO READ INTO */ int length, /* MAXIMUM LENGTH OF STRING */ FILE *input /* INPUT FILE STREAM POINTER */ ); int read_tape_directory /* READ THE DIRECTORY OF A FILE SET */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ char *filename /* TAPE DIRECTORY DISK FILE NAME */ ); void remove_quotes /* REMOVE QUOTED SECTIONS FROM A STRING */ ( char *source, /* SOURCE STRING */ char *dest /* DESTINATION STRING MUST BE SAME SIZE AS SOURCE STRING */ ); void space_remove_and_cap /* REMOVE SPACES AND FORCE TO UPPER CASE */ ( char *string /* STRING TO STRIP AND CONVERT TO UPPERCASE */ ); void strip_string /* REMOVE LEADING/TRAILING SPACES */ ( char *string /* STRING TO STRIP */ ); int string_to_aapm_block /* WRITE A STRING TO A DATA BUFFER WITH PROPER TERMINATION */ ( tapedir_t *tape, /* TAPE DIRECTORY STRUCTURE */ FILE *output, /* FILE STREAM POINTER */ char *string /* STRING TO OUTPUT */ ); int save_beam ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* FILE NODE CONTAINING A STRUCTURE */ ); int save_seed ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* FILE NODE CONTAINING A STRUCTURE */ ); int save_comment ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* TAPE FILE NODE TO BE SAVED */ ); int save_ct ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* TAPE FILE NODE TO BE SAVED */ ); int save_mrus ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* TAPE FILE NODE TO BE SAVED */ ); int save_dvh ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* FILE NODE CONTAINING A STRUCTURE */ ); int save_film ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* FILE NODE CONTAINING A STRUCTURE */ ); int save_structures ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* FILE NODE CONTAINING A STRUCTURE */ ); int save_doses ( case_t *p_case, /* PATIENT CASE */ exch_file_t *file /* FILE NODE CONTAINING A STRUCTURE */ ); /************************ End of patexchange.h ****************************/