00001 
00002 
00003 
00004 
00005 
00006    
00007 
00008 
00009 
00010 
00011 
00012 #define rWARNING( string ) fprintf( stderr, "\033[1m%s\033[0m\n", string )
00013 #define rERROR( string ) fprintf( stderr, "\007\033[2m%s\033[0m\n", string )
00014 
00015 #define R_BOUND_VAL    -250
00016 #define R_HL_BAD_VAL   -280
00017 #define R_BUTTON_SPACE    4
00018 #define R_DIST_STEP     0.1
00019 #define R_FILE_L        128
00020 
00021 #ifdef LINUX
00022 
00023 #define R_HOSTID_MASK   0xffff00ff
00024 #define R_HOSTID_VAL    0x6a8d006a
00025 
00026 #else
00027 
00028 #define R_HOSTID_MASK   0xffffff00
00029 #define R_HOSTID_VAL    0x8d6a6a00
00030 
00031 #endif
00032 
00033 typedef struct
00034 {
00035     int   x, y, z;
00036 } r_ipt_t;
00037 
00038 typedef struct
00039 {
00040     int * points;
00041     int   used;
00042     int   M;
00043 } points_t;
00044 
00045 typedef struct
00046 {
00047     Display * display;
00048 
00049     
00050 
00051     Widget    main;
00052     Widget    mainForm;
00053 
00054     int       main_is_open;
00055 
00056     Widget    save_as_file_d;   
00057 
00058     
00059 
00060     Widget    wtgr_main;        
00061     Widget    wtgr_mainRC;      
00062 
00063     Widget    wt_diag_conn_w;   
00064     Widget    wt_fill_val_w;    
00065     Widget    wt_min_nbrs_w;    
00066     Widget    wt_range_min_w;   
00067     Widget    wt_range_max_w;   
00068 
00069     Widget    gr_range_min_w;   
00070     Widget    gr_range_max_w;   
00071     Widget    gr_fill_val_w;    
00072 
00073     XmStringCharSet charset;
00074 } r_X_s;
00075 
00076 typedef struct
00077 {
00078     
00079     int     point_value;        
00080     int     point_coord;        
00081     int     adjust_point;       
00082 
00083     char    save_as_name[ R_FILE_L ];   
00084 
00085 
00086     
00087     int     wt_fill_val;                
00088     int     wt_range_min;
00089     int     wt_range_max;
00090     int     wt_diag_connect;            
00091 
00092     
00093     int     gr_fill_val;                
00094     int     gr_range_min;
00095     int     gr_range_max;
00096 
00097     int     gr_max_dist;                
00098 
00099 
00100     
00101     THD_3dim_dataset * anat;    
00102     THD_3dim_dataset * func;    
00103 
00104     short * adata;              
00105     short * fdata;              
00106     float   factor;
00107 
00108     int     nx, ny, nz;         
00109     int     nxy;
00110     int     nvox;               
00111 
00112 
00113     
00114     points_t Bold;
00115     points_t Bnew;
00116     points_t border;
00117 
00118     short  * neighbors;
00119     short  * undo_data;         
00120 
00121     int      min_nbrs;
00122     int      strong_borders;
00123 } r_alg_s;
00124 
00125 typedef struct
00126 {
00127     Widget    main;             
00128     Widget    mainRC;           
00129 
00130     Widget    fillval_w;        
00131 
00132     int       fill_val;         
00133     int       afni_undo;        
00134     points_t  A, B;             
00135 } interp_s;
00136 
00137 typedef struct
00138 {
00139     Widget   main;
00140     Widget   mainRC;
00141 
00142     Widget   fillval_w;
00143     Widget   maxsize_w;
00144 
00145     int      max_size;
00146     int      fill_val;
00147 
00148     points_t wtgr_edge;
00149     points_t gr_edge;
00150     points_t filled;
00151 } holes_s;
00152 
00153 typedef struct
00154 {
00155     points_t  plist;
00156     r_ipt_t   source;
00157     r_ipt_t   dest;
00158 
00159     int       cur_pt;           
00160 } r_pt_conn_s;
00161 
00162 
00163 r_X_s       gRX;                
00164 r_alg_s     gRA;                
00165 interp_s    gRI;                
00166 holes_s     gRH;                
00167 r_pt_conn_s gRCP;               
00168 char        gRmessage[ 1024 ];  
00169 
00170 
00171 static int      r_afni_set_fill_point    ( int *, r_alg_s * );
00172 static void     r_any_cb_apply           ( Widget, XtPointer, XtPointer );
00173 static void     r_any_cb_fill_stats      ( Widget, XtPointer, XtPointer );
00174 static void     r_any_cb_hide            ( Widget, char *, XtPointer );
00175 static void     r_any_cb_raise           ( Widget, char *, XtPointer );
00176 static void     r_any_cb_undo            ( Widget, XtPointer, XtPointer );
00177 static void     r_any_cb_unfill          ( Widget, XtPointer, XtPointer );
00178 static void     r_main_cb_help           ( Widget, XtPointer, XtPointer );
00179 static void     r_main_cb_quit           ( void );
00180 static void     r_main_cb_show_structs   ( void );
00181 static void     r_main_cb_saveas         ( Widget, int, XtPointer );
00182 static void     r_main_mk_main_shell     ( void );
00183 static void     r_main_mk_save_as_fr     ( Widget );
00184 static void     r_main_mk_show_buttons   ( void );
00185 static void     r_main_show_alg_vals     ( r_alg_s * );
00186 static void     r_main_show_HOL_vals     ( holes_s * );
00187 static void     r_main_show_INT_vals     ( interp_s * );
00188 static void     r_main_show_pt_conn_vals ( r_pt_conn_s * );
00189 
00190 static int      r_add_to_boundary        ( points_t *, int );
00191 static int      r_check_host             ( void );
00192 static void     r_histogram              ( r_alg_s *, int, int, int );
00193 static r_ipt_t  r_index2pt               ( int, int, int, int );
00194 static double   r_p_distance             ( r_ipt_t, r_ipt_t );
00195 static int      r_save_dataset_as        ( char *, int );
00196 
00197 static void     r_init_afni_vars         ( r_alg_s *, THD_3dim_dataset * );
00198 static int      r_init_Alg_values        ( r_alg_s * );
00199 static int      r_init_holes_vals        ( holes_s * );
00200 static int      r_init_interp_vals       ( interp_s * );
00201 static int      r_init_pt_conn_s         ( r_pt_conn_s * );
00202 
00203 static void     r_HL_cb_fill             ( Widget, XtPointer, XtPointer );
00204 static void     r_HL_cb_set_fill_val     ( Widget, XtPointer, XtPointer );
00205 static void     r_HL_cb_set_maxsize      ( Widget, XtPointer, XtPointer );
00206 static int      r_HL_check_neighbors     ( points_t *, int );
00207 static Widget   r_HL_mk_buttons          ( holes_s *, Widget );
00208 static Widget   r_HL_mk_fillval_fr       ( holes_s *, Widget );
00209 static void     r_HL_mk_main_shell       ( holes_s * );
00210 static Widget   r_HL_mk_maxsize_fr       ( holes_s *, Widget );
00211 
00212 static void     r_INT_cb_fill            ( Widget, XtPointer, XtPointer );
00213 static void     r_INT_cb_set_fill_val    ( Widget, XtPointer, XtPointer );
00214 static Widget   r_INT_mk_app_buttons     ( interp_s *, Widget );
00215 static Widget   r_INT_mk_fillval_fr      ( interp_s *, Widget );
00216 static void     r_INT_mk_main_shell      ( interp_s * );
00217 
00218 static void     r_gr_cb_fill             ( Widget, XtPointer, XtPointer );
00219 static void     r_gr_cb_set_max_dist     ( Widget, XtPointer, XtPointer );
00220 static void     r_gr_cb_set_range        ( Widget, XtPointer, XtPointer );
00221 static void     r_gr_set_fill_val        ( Widget, XtPointer, XtPointer );
00222 static int      r_gr_check_insert        ( r_alg_s *, points_t *, int );
00223 static Widget   r_gr_mk_fill_buttons     ( r_X_s *, Widget );
00224 static Widget   r_gr_mk_fillval_fr       ( r_X_s *, Widget );
00225 static Widget   r_gr_mk_main_frame       ( r_X_s *, Widget );
00226 static void     r_gr_mk_misc_buttons     ( r_X_s *, Widget );
00227 static Widget   r_gr_mk_max_dist_w       ( r_X_s *, Widget );
00228 static Widget   r_gr_mk_range_fr         ( r_X_s *, Widget );
00229 
00230 static int      r_wtgr_calc_max_frm_val  ( int value );
00231 static int      r_wtgr_calc_min_frm_val  ( int value );
00232 static void     r_wtgr_cb_suggest_limits ( Widget, XtPointer, XtPointer );
00233 static void     r_wtgr_mk_main_shell     ( r_X_s * );
00234  
00235 static int      r_wt_bad_ngbr_exists     ( r_alg_s *, int, int );
00236 static void     r_wt_cb_activate_SA      ( void );
00237 static void     r_wt_cb_fill             ( Widget, XtPointer, XtPointer );
00238 static void     r_wt_cb_SB_toggle        ( Widget, XtPointer, XtPointer );
00239 static void     r_wt_cb_set_diag_conn    ( Widget, XtPointer, XtPointer );
00240 static void     r_wt_cb_set_fill_val     ( Widget, XtPointer, XtPointer );
00241 static void     r_wt_cb_set_min_nbrs     ( Widget, XtPointer, XtPointer );
00242 static void     r_wt_cb_set_range        ( Widget, XtPointer, XtPointer );
00243 static int      r_wt_check_insert        ( r_alg_s *, int );
00244 static Widget   r_wt_mk_diag_conn_fr     ( r_X_s *, Widget );
00245 static void     r_wt_mk_fill_buttons     ( r_X_s *, Widget );
00246 static Widget   r_wt_mk_fillval_fr       ( r_X_s *, Widget );
00247 static Widget   r_wt_mk_main_frame       ( r_X_s *, Widget );
00248 static void     r_wt_mk_misc_buttons     ( r_X_s *, Widget );
00249 static Widget   r_wt_mk_nbrs_fr          ( r_X_s *, Widget );
00250 static Widget   r_wt_mk_range_fr         ( r_X_s *, Widget );
00251 static Widget   r_wt_mk_strong_bord_fr   ( r_X_s *, Widget );
00252 static void     r_wt_set_neighbors       ( r_alg_s * );
00253 
00254 static Widget   r_mk_scale_bar           ( Widget, char *, int, int,
00255                                           int, int, XtCallbackProc );
00256 
00257 static void r_junk (void);
00258 
00259 
00260 
00261 
00262 #ifdef R_LOG_INFO_D
00263 
00264 
00265 #define R_LOG_FILE      "/var/tmp/.rickr.log.GF"
00266 
00267 #define R_LOG( string ) fprintf( stderr, "\007\033[2m%s\033[0m\n", string )
00268 
00269 
00270 FILE * gr_logfile
00271 
00272 
00273 static int      r_open_log_file         ( void );
00274 
00275 #endif