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