#ifndef _3DSURF2VOL_H_
#define _3DSURF2VOL_H_
#define PROG_NAME "3dSurf2Vol"
#define S2V_USE_LONG 1
#define S2V_USE_SHORT 2
#define S2V_USE_HIST 3
#define S2V_USE_VERSION 4
#define S2V_F_STEPS_MIN 1
#define S2V_F_INDEX_VOXEL 0
#define S2V_F_INDEX_POINT 1
#define S2V_MAX_SURFS 2
#define S2V_DEBUG_MAX_LEV 5
#define S2V_DEBUG_TEST_NODE 7
#define CHECK_NULL_STR(str) ((str) ? (str) : "(NULL)")
/* surface to voxel mapping codes, along with command-line strings */
typedef enum
{
E_SMAP_INVALID = -1,
E_SMAP_NONE, /* do not change INVALID or NONE */
E_SMAP_MASK, E_SMAP_MASK2,
E_SMAP_AVE, E_SMAP_COUNT,
E_SMAP_MIN, E_SMAP_MAX,
E_SMAP_MAX_ABS,
E_SMAP_FINAL /* do not change FINAL */
} s2v_map_num;
/* user options */
typedef struct
{
char * gpar_file; /* AFNI grid parent filename */
char * oset_file; /* filename for ascii output */
char * spec_file; /* surface specification file */
char * sv_file; /* AFNI surface volume dataset */
char * surf_xyz_1D_file; /* input 1D surface coord file */
char * sdata_file_1D; /* input 1D surface data file */
char * sdata_file_niml; /* input niml surf data file */
char * cmask_cmd; /* 3dcalc style mask command */
char * data_expr; /* comp. float from node data */
char * map_str; /* how to map surf(s) to dset */
char * datum_str; /* data type of output dset */
char * f_index_str; /* count by voxels or points */
char * snames[S2V_MAX_SURFS]; /* list of surfaces to use */
int sxyz_ori_gpar; /* input xyz use gpar orient */
int debug; /* level of debug output */
int dnode; /* node watched for debug */
int dvox; /* voxel watched for debug */
int noscale; /* no scale of integer output */
int f_steps; /* # int steps for mask2 map */
float f_p1_fr; /* fractional dist: add to p1 */
float f_pn_fr; /* fractional dist: add to pn */
float f_p1_mm; /* mm distance to add to p1 */
float f_pn_mm; /* mm distance to add to pn */
} opts_t;
typedef struct
{
int map; /* type of mapping from surfs */
int datum; /* data type of output dset */
int noscale; /* no scale of integer output */
int debug; /* for printing extra output */
int dnode; /* node watched for debug */
int dvox; /* voxel watched for debug */
byte * cmask; /* computed mask */
int sxyz_ori_gpar; /* input xyz use gpar orient */
int f_steps; /* # int steps for mask2 map */
int f_index; /* count by voxels or points */
float f_p1_fr; /* fractional dist: add to p1 */
float f_pn_fr; /* fractional dist: add to pn */
float f_p1_mm; /* mm distance to add to p1 */
float f_pn_mm; /* mm distance to add to pn */
} s2v_opts_t;
/* PARSER stuff */
typedef struct
{
PARSER_code * pcode;
double atoz[26];
int has_sym[26];
int max_sym;
} parser_t;
/* computational parameters */
typedef struct
{
THD_3dim_dataset * gpar; /* input dataset */
THD_3dim_dataset * oset; /* output dataset */
MRI_IMAGE * sxyz_im; /* surface coordinate image */
MRI_IMAGE * sdata_im; /* sub-surface data image */
THD_fvec3 f3mm_min; /* numerical min xyz points */
THD_fvec3 f3mm_max; /* numerical max xyz points */
parser_t parser; /* code for expression eval */
int nvox; /* gpar nxyz */
int nsubs; /* number of output sub-bricks */
byte * cmask; /* computed mask */
int ncmask; /* nvox for cmask */
int ccount; /* mask size */
} param_t;
/* node list structure */
typedef struct
{
THD_fvec3 * nodes; /* depth x nnodes in size */
int depth; /* major axis */
int nnodes; /* minor axis */
float * fdata; /* data list (length as ilist) */
int * ilist; /* index list - nodes indices */
int ilen; /* length of ilist */
} node_list_t;
/* ---- function prototypes ---- */
/* library protos - rcr - move to separate file */
float dist_f3mm ( THD_fvec3 * p1, THD_fvec3 * p2 );
int s2v_map_type ( char * map_str );
int compute_results ( param_t * p, node_list_t * N, s2v_opts_t * sopt,
double * ddata, int * idata, THD_fvec3 * pary );
THD_3dim_dataset * s2v_nodes2volume(node_list_t *N,param_t *p,s2v_opts_t *sopt);
int adjust_endpts ( s2v_opts_t * sopt, THD_fvec3 * p1, THD_fvec3 * pn );
int check_datum_type ( char * datum_str, int default_type );
int check_map_func ( char * map_str );
int disp_node_list_t ( char * info, node_list_t * d );
int disp_opts_t ( char * info, opts_t * opts );
int disp_param_t ( char * info, param_t * p );
int disp_parser_t ( char * info, parser_t * d );
int disp_s2v_opts_t ( char * info, s2v_opts_t * sopt );
int f3mm_out_of_bounds( THD_fvec3 * cp, THD_fvec3 * min, THD_fvec3 * max );
int fill_node_list ( opts_t * opts, param_t * p, node_list_t * N );
int fill_SUMA_structs ( opts_t * opts, SUMA_SurfSpecFile * spec );
int final_clean_up ( node_list_t * N );
int final_computations(double *ddata, int *idata, s2v_opts_t *sopt, int nvox);
int get_mappable_surfs( SUMA_SurfaceObject ** slist, int how_many, int debug );
int init_node_list (opts_t *opts,param_t *p,s2v_opts_t *sopt,node_list_t *N);
int init_options ( opts_t * opts, int argc, char * argv [] );
int insert_list ( node_list_t * N, param_t * p, s2v_opts_t * sopt,
THD_fvec3 *pary, int nindex, double *ddata, int *idata);
int insert_value ( s2v_opts_t * sopt, double *dv, int *iv, int vox,
int node, float value );
int integral_doubles ( double * dp, int nvals );
int make_point_list ( THD_fvec3 * list, THD_fvec3 * p1, THD_fvec3 * pn,
s2v_opts_t * sopt );
int read_surf_files ( opts_t * opts, param_t * p, SUMA_SurfSpecFile * spec,
s2v_opts_t * sopt, node_list_t * N );
int read_sxyz_1D ( opts_t * opts, param_t * p );
int sdata_from_1D ( opts_t * opts, param_t * p, node_list_t * N );
int sdata_from_default( node_list_t * N );
int set_3dmm_bounds ( THD_3dim_dataset *dset, THD_fvec3 *min, THD_fvec3 *max);
int set_node_list_data( node_list_t *N, param_t *p, s2v_opts_t *sopt, int col);
int set_smap_opts ( opts_t * opts, param_t * p, s2v_opts_t * sopt );
int surf_to_node_list ( s2v_opts_t * sopt, node_list_t * N, int nsurf);
int sxyz_1D_to_nlist ( opts_t * opts, s2v_opts_t * sopt, param_t * p,
node_list_t *N, int * nsurf);
int usage ( char * prog, int level );
int validate_datasets ( opts_t * opts, param_t * p );
int validate_options ( opts_t * opts, param_t * p );
int validate_surface ( opts_t * opts, param_t * p );
int verify_node_list ( node_list_t * N );
int verify_parser_expr( opts_t * opts, param_t * p );
int write_output ( s2v_opts_t * sopt, opts_t * opts, param_t * p,
node_list_t * N, int argc, char * argv[] );
#endif /* _3DSURF2VOL_H_ */
syntax highlighted by Code2HTML, v. 0.9.1