Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

afni.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006 
00007 #ifndef _AFNI_HEADER_
00008 #define _AFNI_HEADER_
00009 
00010 #include "mrilib.h"
00011 #include "imseq.h"
00012 #include "xutil.h"
00013 #include "pbar.h"
00014 #include "afni_graph.h"
00015 #include "afni_pcor.h"
00016 
00017 #include <stdio.h>
00018 #include <string.h>
00019 #include <stdlib.h>
00020 #include <math.h>
00021 #include <time.h>
00022 
00023 #include <Xm/Separator.h>
00024 #include <Xm/Display.h>
00025 #include <Xm/CascadeB.h>
00026 
00027 #include "logo.h"
00028 
00029 #define WARP_4D
00030 
00031 #ifndef DONT_USE_OPTMENUS
00032 #ifndef USE_OPTMENUS
00033 #define USE_OPTMENUS
00034 #endif
00035 #endif
00036 
00037 /*------------------------------------------------------------
00038   Global data holding command line arguments information
00039 --------------------------------------------------------------*/
00040 
00041 typedef struct {
00042       float dy , dz , gamma , gsfac ;
00043       Boolean read_images , read_sessions , auto_purge ,
00044               resize_images , keep_logo , pos_func , xtwarns ,
00045               destruct , tlrc_big , warp_4D , unique_dcs ;
00046       int ncolor , datum , ignore , allow_rt , skip_afnirc ;
00047       char orient_code[4] ;
00048       char title_name[32] ;
00049 #ifdef ALLOW_PLUGINS
00050       int noplugins , noplugouts ;
00051       int plugout_code ;
00052 #endif
00053 
00054       int first_file_arg , recurse ;
00055       int elide_quality ;
00056       int no_frivolities ;
00057       int install_cmap ;
00058       int left_is_left ;  /* 09 Oct 1998 */
00059       int read_tim ;      /* 19 Oct 1999 */
00060       int read_1D ;       /* 27 Jan 2000 */
00061 
00062       Boolean read_dsets ;    /* 17 Mar 2000 */
00063 
00064       char * layout_fname ;   /* 23 Sep 2000 */
00065 
00066       int enable_suma ;       /* 29 Aug 2001 */
00067 
00068       int quiet ;             /* 25 Aug 2001 */
00069 
00070       int yes_niml ;          /* 28 Feb 2002 */
00071       int port_niml ;         /* 10 Dec 2002 */
00072 
00073       char * script_fname ;   /* 21 Jan 2003 */
00074 } AF_options ;
00075 
00076 #ifdef MAIN
00077    AF_options GLOBAL_argopt ;
00078 #else
00079    extern AF_options GLOBAL_argopt ;
00080 #endif
00081 
00082 /*-----------------------------------------------------------*/
00083 
00084 /* define this to put "chooser" controls on the popup menu */
00085 #undef POPUP_CHOOSERS
00086 
00087 /*-----------------------------------------------------------*/
00088 
00089 #define UNDERLAY_ANAT      0
00090 #define UNDERLAY_ALLFUNC   1
00091 #define UNDERLAY_THRFUNC   2   /* 29 Jul 2003: eliminated in all code! */
00092 
00093 #define UNDERLAY_ANAT_BVAL     (1 << UNDERLAY_ANAT   )
00094 #define UNDERLAY_ALLFUNC_BVAL  (1 << UNDERLAY_ALLFUNC)
00095 #define UNDERLAY_THRFUNC_BVAL  (1 << UNDERLAY_THRFUNC)
00096 
00097 #define LAST_UNDERLAY_TYPE 1  /* 29 Jul 2003: changed from 2 */
00098 #define ISFUNC_UNDERLAY(uu) \
00099    ((uu)==UNDERLAY_ALLFUNC||(uu)==UNDERLAY_THRFUNC)
00100 
00101 static char * UNDERLAY_typestr[] =
00102    { "ULay underlay" , "OLay underlay" , "OLay@Thr underlay" } ;
00103 
00104 #define DEFAULT_FIM_SCALE 10000   /* change this and bad things will happen! */
00105 
00106 #define DMODE_BRICK      0
00107 #define DMODE_WOD        1
00108 
00109 #define DMODE_BRICK_BVAL (1 << DMODE_BRICK)
00110 #define DMODE_WOD_BVAL   (1 << DMODE_WOD  )
00111 
00112 /*------------------------------------------------------------------*/
00113 #define USE_SONNETS
00114 #define WANT_RWCOX_IMAGE
00115 #define USE_SKIT
00116 
00117 #ifdef NO_FRIVOLITIES
00118 # undef USE_SONNETS
00119 # undef WANT_RWCOX_IMAGE
00120 # undef USE_SKIT
00121 #endif
00122 
00123 #define TOPSIZE 2048
00124 
00125 #include "AFNI_label.h"
00126 #define VERSION AFNI_VERSION_LABEL    /* 21 chars long */
00127 
00128 #ifdef MAIN
00129 #define AFNI_about \
00130      "************************************************\n"  \
00131      "* GPL AFNI: Analysis of Functional NeuroImages *\n"  \
00132      "*           Version " VERSION          "       *\n"  \
00133      "*                                              *\n"  \
00134      "* Major portions are Copyright 1994-2000,      *\n"  \
00135      "*   Medical College of Wisconsin               *\n"  \
00136      "*   Milwaukee, WI 53226-0509                   *\n"  \
00137      "* See file README.copyright for information,   *\n"  \
00138      "* or the Datamode->Misc->License menu item.    *\n"  \
00139      "*                                              *\n"  \
00140      "* Released to the public by MCW under the GNU  *\n"  \
00141      "* General Public License (version 2), Dec 2000 *\n"  \
00142      "*                                              *\n"  \
00143      "* Author:  Robert W Cox, PhD                   *\n"  \
00144      "************************************************"
00145 
00146 char AFNI_tophelp[TOPSIZE] = AFNI_about ;
00147 char AFNI_abohelp[1024]    = AFNI_about ;
00148 #else
00149 extern char AFNI_tophelp[TOPSIZE] ;
00150 extern char AFNI_abohelp[1024] ;
00151 #endif
00152 
00153 #ifdef USE_SONNETS
00154 
00155     extern void AFNI_popup_sonnet( Widget,int ) ; /* 12 Dec 2001 */
00156 
00157 #   ifdef MAIN
00158 #     include "sonnets.h"
00159       static int sonnet_index = 0 ;
00160       void RESET_sonnet(void)
00161       { int ll ;
00162         sprintf( AFNI_tophelp , "                    * %d *\n" ,
00163                  sonnet_index+1 ) ; ll = strlen(AFNI_tophelp) ;
00164         strcpy( &(AFNI_tophelp[ll]) , sonnets[sonnet_index] ) ;
00165         sonnet_index = (sonnet_index+lrand48()) % NUM_SONNETS ;
00166       }
00167 #   else
00168       extern void RESET_sonnet(void) ; /* prototype */
00169 #   endif  /* MAIN */
00170 
00171 #   define RESET_AFNI_QUIT(iqqq) \
00172      { AFNI_quit_CB(NULL,(XtPointer)(iqqq),NULL) ; RESET_sonnet() ; }
00173 
00174 #else  /* don't USE_SONNETS */
00175 
00176 #   define RESET_AFNI_QUIT(iqqq) AFNI_quit_CB(NULL,(XtPointer)(iqqq),NULL)
00177 
00178 #endif /* USE_SONNETS */
00179 /*------------------------------------------------------------------*/
00180 
00181 /** macro to clear the montage information in the
00182     z-direction of a particular brick, in a particular controller **/
00183 
00184 #define CLEAR_MONTAGE(iq,bb)               \
00185   do{ int bz = abs((bb)->a123.ijk[2])-1 ;  \
00186       (iq)->vinfo->xhairs_ndown.ijk[bz] =  \
00187        (iq)->vinfo->xhairs_nup.ijk[bz]   = \
00188         (iq)->vinfo->xhairs_nskip.ijk[bz] = 0 ; } while(0)
00189 
00190 /* 31 Dec 1998: mask for xhairs orientations */
00191 
00192 #define ORIMASK_LR ((1<<ORI_R2L_TYPE) | (1<<ORI_L2R_TYPE))
00193 #define ORIMASK_AP ((1<<ORI_P2A_TYPE) | (1<<ORI_A2P_TYPE))
00194 #define ORIMASK_IS ((1<<ORI_I2S_TYPE) | (1<<ORI_S2I_TYPE))
00195 
00196 #define ORIMASK_LR_AP (ORIMASK_LR | ORIMASK_AP)
00197 #define ORIMASK_LR_IS (ORIMASK_LR | ORIMASK_IS)
00198 #define ORIMASK_AP_IS (ORIMASK_AP | ORIMASK_IS)
00199 #define ORIMASK_ALL   (ORIMASK_LR | ORIMASK_AP | ORIMASK_IS)
00200 
00201 typedef struct {                           /* 29 Mar 1999 */
00202       gen_func * receiver_func ;
00203       void *     receiver_data ;
00204       int        receiver_mask ;
00205       char *     receiver_funcname ;       /* 20 Feb 2003 */
00206 } AFNI_receiver ;
00207 
00208 typedef struct {
00209       int   i1 , j2 , k3 ;  /* integer coordinates of current point */
00210       float xi , yj , zk ;  /* float (mm) coordinates (take priority) */
00211 
00212       int   i1_old , j2_old , k3_old ;  /* for jumpback */
00213 
00214       Boolean   xhairs_show_montage , xhairs_periodic , xhairs_all ;
00215       THD_ivec3 xhairs_ndown , xhairs_nup , xhairs_nskip ; /* montage crosshairs */
00216       int       time_index , top_index , time_on ;
00217 
00218       int xhairs_orimask ;    /* 31 Dec 1998 */
00219 
00220       int       anat_index , fim_index , thr_index ; /* 30 Nov 1997 */
00221 
00222       Boolean crosshair_visible , inverted_pause ;
00223       int     crosshair_gap , crosshair_ovcolor , crosshair_gap_old ;
00224 
00225       int view_type     ,  /* one of the VIEW_ constants in 3ddata.h */
00226           underlay_type ;  /* one of the UNDERLAY_ constants above */
00227 
00228       int sess_num , anat_num , func_num ;  /* codes pointing to datasets */
00229 
00230       XmString old_crosshair_label ;
00231 
00232       Boolean    func_visible , force_anat_wod , force_func_wod ,
00233                  pts_visible , show_voxind ;
00234       float      func_threshold , resam_vox ;
00235       float      func_thresh_top ;              /* 23 Jul 1997 */
00236       int        func_resam_mode , anat_resam_mode , pts_color ;
00237       int        thr_resam_mode ;               /* 09 Dec 1997 */
00238 
00239       /* 3/24/95: range data for conversion of pbar
00240                   values to thresholding values in the data */
00241 
00242       Boolean  use_autorange , use_posfunc ;
00243       float    fim_autorange , fim_range ;
00244       XmString old_range_label , autorange_label ;
00245 
00246       char     anat_val[32] , func_val[32] , thr_val[32] ;
00247 
00248       /** Feb 1998: stuff for the "receive" modules **/
00249       /** Mar 1999: modified to allow for more than one receiver **/
00250 
00251       AFNI_receiver ** receiver ;
00252       int              num_receiver ;
00253       int              drawing_enabled , drawing_mode ;
00254       Pixel            drawing_pixel ;
00255 
00256       int writeownsize ; /* 01 Aug 1999 */
00257 
00258       int tempflag ;     /* 15 Mar 2000: for quick communication of state */
00259 
00260       int see_ttatlas ;  /* 25 Jul 2001 */
00261 
00262       int view_setter ;  /* 20 Feb 2003 */
00263 
00264       float func_pval ;  /* 06 Feb 2004 */
00265 
00266       int stats_anat_ok,     /* 29 Mar 2005: set in AFNI_range_label() */
00267           stats_func_ok,     /*   to indicate if the sub-brick range  */
00268           stats_thresh_ok ;  /*   statistics are loaded properly     */
00269 
00270 } AFNI_view_info ;
00271 
00272 #define AXIAL    1       /* 20 Feb 2003: view_setter codes */
00273 #define SAGITTAL 2
00274 #define CORONAL  3
00275 
00276 #undef USE_WRITEOWNSIZE  /* 01 Aug 1999 */
00277 
00278 #define SAVE_VPT(iqq)                           \
00279    ( (iqq)->vinfo->i1_old = (iqq)->vinfo->i1 ,  \
00280      (iqq)->vinfo->j2_old = (iqq)->vinfo->j2 ,  \
00281      (iqq)->vinfo->k3_old = (iqq)->vinfo->k3  )
00282 
00283 #define WARPED_VIEW(vvv)  ((vvv)+1)
00284 #define ISVALID_VIEW(vvv) ((vvv) >= FIRST_VIEW_TYPE && (vvv) <= LAST_VIEW_TYPE)
00285 
00286 /*-----------------------------------------------------------*/
00287 
00288 #define MAXOVSIZE 19
00289 #define MAXOVPIX  (MAXOVSIZE*(MAXOVSIZE-1))
00290 typedef struct {
00291       int numpix ;
00292       short dx[MAXOVPIX] , dy[MAXOVPIX] ;
00293 } AFNI_ovtemplate ;
00294 
00295 /*-------------------------------------------------------------------*/
00296 /*--------------- define display control widgets --------------------*/
00297 
00298 #define BKGD_COUNT 3
00299 #define INIT_BKGD_LAB(iq) \
00300    do{ int qq = ((iq)->s123!=NULL) + ((iq)->s231!=NULL) + ((iq)->s312!=NULL); \
00301        if( qq >= BKGD_COUNT || (qq > 0 && !AFNI_noenv("AFNI_VALUE_LABEL")) ){ \
00302           (iq)->vwid->imag->do_bkgd_lab = True ;                              \
00303        } else {                                                               \
00304           (iq)->vwid->imag->do_bkgd_lab = False ;                             \
00305           XtUnmanageChild(im3d->vwid->imag->pop_bkgd_lab) ;                   \
00306           XtUnmanageChild(im3d->vwid->func->bkgd_lab) ;                       \
00307           FIX_SCALE_SIZE(im3d) ;                                              \
00308        } break ; } while(0)
00309 
00310 #define AFNI_XHAIRS_OFF    0
00311 #define AFNI_XHAIRS_SINGLE 1
00312 #define AFNI_XHAIRS_MULTI  2
00313 
00314 #define AFNI_XHAIRS_LR_AP  3  /* 31 Dec 1998 */
00315 #define AFNI_XHAIRS_LR_IS  4
00316 #define AFNI_XHAIRS_AP_IS  5
00317 #define AFNI_XHAIRS_LR     6
00318 #define AFNI_XHAIRS_AP     7
00319 #define AFNI_XHAIRS_IS     8
00320 
00321 #define AFNI_XHAIRS_LASTOPTION 8
00322 
00323 typedef struct {
00324       Widget frame , rowcol ;
00325       Widget topper , popmenu , pop_bkgd_lab ,
00326              pop_jumpback_pb , pop_imageonly_pb , pop_jumpto_pb , pop_talto_pb ;
00327       Widget pop_jumpto_ijk_pb ;
00328 
00329       Widget crosshair_frame , crosshair_rowcol , crosshair_label ;
00330 
00331       Widget crosshair_menu, crosshair_dicom_pb, crosshair_spm_pb ; /* 12 Mar 2004 */
00332 
00333       Widget         xhair_rowcol ;
00334       MCW_arrowval * crosshair_av ;
00335       MCW_bbox     * xhall_bbox ;
00336 
00337       MCW_arrowval * crosshair_color_av ;
00338       MCW_arrowval * time_index_av ;
00339 
00340       Widget         gap_wrap_rowcol ;
00341       MCW_arrowval * crosshair_gap_av ;
00342       MCW_bbox     * wrap_bbox ;
00343 
00344       Widget view_frame , view_rowcol ,
00345              xyz_rowcol   , yzx_rowcol   , zxy_rowcol   ,
00346              name_xyz_lab , name_yzx_lab , name_zxy_lab ,   /* xyz = Axial    */
00347              image_xyz_pb , image_yzx_pb , image_zxy_pb ,   /* yzx = Sagittal */
00348              graph_xyz_pb , graph_yzx_pb , graph_zxy_pb  ;  /* zxy = Coronal  */
00349 
00350       Boolean do_bkgd_lab ;
00351 
00352       Widget pop_whereami_pb , pop_ttren_pb ;
00353       MCW_textwin * pop_whereami_twin ;
00354 
00355       Widget pop_sumato_pb ;
00356       Widget pop_mnito_pb ;  /* 01 May 2002 */
00357 
00358       Widget pop_environment_pb ; /* 05 Nov 2003 */
00359       Widget pop_drawdataset_pb ; /* 17 May 2005 */
00360 } AFNI_imaging_widgets ;
00361 
00362 /*--- 19 Aug 2002: Switch Surface control box ---*/
00363 
00364 typedef struct {
00365       Widget wtop , rowcol , top_lab , done_pb ;
00366       int nrow , nall ;
00367       Widget *surf_rc ;
00368       MCW_bbox **surf_bbox ;                       /* 19 Feb 2003 */
00369       MCW_arrowval **surf_node_av, **surf_line_av ;
00370       MCW_arrowval **surf_ledg_av ;                /* 26 Feb 2003 */
00371       MCW_arrowval *boxsize_av , *linewidth_av ;   /* 23 Feb 2003 */
00372 } AFNI_surface_widgets ;
00373 
00374 /*---*/
00375 
00376 typedef struct {
00377       Widget     frame , rowcol ;
00378       MCW_bbox * view_bbox ;
00379 
00380       Widget     marks_frame , marks_rowcol ;
00381       Widget     define_marks_pb ;
00382       MCW_bbox * see_marks_bbox ;
00383 
00384       Widget     func_frame , func_rowcol ;
00385       Widget     define_func_pb ;
00386       MCW_bbox * see_func_bbox ;
00387 
00388       Widget     define_dmode_pb ;
00389 
00390       Widget dataset_frame , dataset_rowcol ,
00391              choose_sess_pb    , choose_anat_pb    , choose_func_pb   ,
00392              popchoose_sess_pb , popchoose_anat_pb , popchoose_func_pb ;
00393 
00394       Boolean marks_pb_inverted , func_pb_inverted , dmode_pb_inverted ;
00395 
00396       Widget choose_surf_pb ;  /* 19 Aug 2002 */
00397       AFNI_surface_widgets *swid ;
00398 } AFNI_viewing_widgets ;
00399 
00400 #define OPEN_PANEL(iq,panel)                                            \
00401    {  XtManageChild( (iq)->vwid->  panel  ->frame ) ;                    \
00402       if( ! (iq)->vwid->view->  panel ## _pb_inverted ){                  \
00403          MCW_invert_widget( (iq)->vwid->view->define_ ## panel ## _pb ) ;  \
00404          (iq)->vwid->view->  panel ## _pb_inverted = True ; }             \
00405       XMapRaised( XtDisplay( (iq)->vwid->  panel  ->frame ) ,            \
00406                    XtWindow( (iq)->vwid->  panel  ->frame )  ) ; }
00407 
00408 #define CLOSE_PANEL(iq,panel)                                            \
00409    {  XtUnmanageChild( (iq)->vwid->  panel  ->frame ) ;                  \
00410       if( (iq)->vwid->view->  panel ## _pb_inverted ){                    \
00411          MCW_invert_widget( (iq)->vwid->view->define_ ## panel ## _pb ) ;  \
00412          (iq)->vwid->view->  panel ## _pb_inverted = False ; } }
00413 
00414 /*---*/
00415 
00416 #define MARKS_MAXPOP (MARKS_MAXNUM+10)
00417 
00418 typedef struct {
00419       Widget  frame , rowcol ;
00420 
00421       Widget  tog_frame , tog_rowcol , tog_topper ;
00422       Widget  tog[MARKS_MAXNUM] ;
00423       Widget  poptog[MARKS_MAXNUM] ;
00424       Widget  always_popup[MARKS_MAXPOP] ,
00425               sometimes_popup[MARKS_MAXPOP] ;
00426       int     num_always_popup , num_sometimes_popup ;
00427       Boolean inverted[MARKS_MAXNUM] , editable ;
00428 
00429       Widget         control_frame , control_rowcol ;
00430       MCW_bbox *     edits_bbox ;
00431       Widget         disp_frame     , disp_rowcol ;
00432       MCW_arrowval * disp_pcolor_av , * disp_scolor_av ,
00433                    * disp_size_av   , * disp_gap_av ;
00434       Widget         action_rowcol  ,
00435                      action_set_pb  , action_clear_pb ,
00436                      action_quality_pb ,
00437                      pop_set_pb     , pop_clear_pb ;
00438 
00439       Widget         transform_pb ;
00440 
00441       MCW_bbox *     tlrc_big_bbox ;
00442       AFNI_ovtemplate ov_mask ;
00443 
00444       int     ov_pcolor , ov_scolor , ov_size , ov_gap ;
00445       Boolean ov_visible , old_visible ;
00446 
00447       char tog_help[MARKS_MAXNUM][MARKS_MAXHELP] ;
00448 
00449       Boolean isprimary[MARKS_MAXNUM] ;
00450       Boolean changed ;
00451 
00452       Boolean tag_visible ;   /* 23 Oct 1998 */
00453 } AFNI_marks_widgets ;
00454 
00455 /*---*/
00456 
00457 #define THR_PVAL_LABEL_NONE "[N/A]"
00458 
00459 #define THR_TOP_EXPON  4         /* 30 Nov 1997 */
00460 #define THR_FACTOR     0.0001    /* pow(10,-THR_TOP_EXPON) */
00461 #define THR_TOP_VALUE  9999.0    /* pow(10,THR_TOP_EXPON)-1 */
00462 
00463 #undef USE_FUNC_FIM              /* 09 Dec 1997 */
00464 
00465 typedef struct {
00466       Widget frame , rowcol ;
00467 
00468       Widget thr_rowcol , thr_label , thr_scale , thr_pval_label ;
00469       MCW_arrowval * thr_top_av ;
00470 
00471       Widget inten_rowcol , inten_label ;
00472       MCW_pbar     * inten_pbar ;
00473       MCW_arrowval * inten_av ;
00474       MCW_bbox     * inten_bbox ;
00475 
00476       Widget pbar_menu , pbar_equalize_pb , pbar_settop_pb ,
00477              pbar_readin_pb , pbar_writeout_pb ;
00478       MCW_arrowval * pbar_palette_av ;
00479       Widget pbar_showtable_pb ;
00480       Widget pbar_environment_pb ; /* 10 Feb 2004 */
00481 
00482       Widget pbar_saveim_pb  ;                  /* 15 Jun 2000 */
00483       MCW_arrowval * pbar_transform0D_av ;
00484       generic_func * pbar_transform0D_func ;
00485       int            pbar_transform0D_index ;
00486       MCW_arrowval * pbar_transform2D_av ;
00487       generic_func * pbar_transform2D_func ;
00488       int            pbar_transform2D_index ;
00489 
00490       Widget options_rowcol , options_label ;
00491       MCW_bbox     * underlay_bbox ;
00492 
00493       Widget         buck_frame , buck_rowcol ;
00494       MCW_arrowval * anat_buck_av , * fim_buck_av , * thr_buck_av ;  /* 30 Nov 1997 */
00495 
00496       Widget range_frame , range_rowcol , range_label ;
00497       MCW_bbox     * range_bbox ;
00498       MCW_arrowval * range_av ;
00499 
00500 #ifdef USE_FUNC_FIM
00501       Widget fim_frame , fim_rowcol , fim_dset_label , fim_mbar ;
00502       FIM_menu * fim_menu ;
00503 #endif
00504 
00505       Widget bkgd_lab ;
00506 
00507       MCW_arrowval * range_rotate_av ;  /* 30 Mar 2001 */
00508 
00509       MCW_bbox * see_ttatlas_bbox ;     /* 25 Jul 2001 */
00510 } AFNI_function_widgets ;
00511 
00512 #define PBAR_MODEBUT  0
00513 #define PBAR_MODEPOS  (1 << PBAR_MODEBUT)
00514 
00515 #define RANGE_AUTOBUT 0
00516 #define RANGE_AUTOVAL (1 << RANGE_AUTOBUT)
00517 
00518 /** On Motif 2.0 on Linux, resized pbar pieces causes the
00519     threshold scale to behave bizarrely.  This macro is a fixup **/
00520 
00521 #ifdef FIX_SCALE_SIZE_PROBLEM
00522 #  define FIX_SCALE_SIZE(iqqq)                                           \
00523      do{ int sel_height ;  XtPointer sel_ptr ;                           \
00524          XtVaGetValues( (iqqq)->vwid->func->thr_scale ,                  \
00525                            XmNuserData , &sel_ptr , NULL ) ;             \
00526          sel_height = (int) sel_ptr ;                                    \
00527          XtVaSetValues( (iqqq)->vwid->func->thr_scale ,                  \
00528                            XmNheight , sel_height , NULL ) ;             \
00529          XtManageChild((iqqq)->vwid->func->thr_scale) ;                  \
00530        } while(0)
00531 #  define HIDE_SCALE(iqqq) XtUnmanageChild((iqqq)->vwid->func->thr_scale)
00532 #else
00533 #  define FIX_SCALE_SIZE(iqqq) /* nada */
00534 #  define HIDE_SCALE(iqqq)     /* nada */
00535 #endif
00536 
00537 #ifdef FIX_SCALE_VALUE_PROBLEM
00538 #  define BOXUP_SCALE
00539 #  define FIX_SCALE_VALUE(iqqq)                                                    \
00540    do { char buf[16] ; float th = (iqqq)->vinfo->func_threshold ;                  \
00541         if( ISVALID_3DIM_DATASET((iqqq)->fim_now) &&                               \
00542             FUNC_HAVE_THR((iqqq)->fim_now->func_type) ){                           \
00543                                                                                    \
00544           th *= (iqqq)->vinfo->func_thresh_top ;                                   \
00545              if( th <   1.0 ) sprintf(buf,"%4.2f",th) ;                            \
00546         else if( th <  10.0 ) sprintf(buf,"%4.1f",th) ;                            \
00547         else                  sprintf(buf,"%4.0f",th) ;                            \
00548         XtVaSetValues( (iqqq)->vwid->func->thr_label , LABEL_ARG(buf+1) , NULL ) ; \
00549         MCW_expose_widget( (iqqq)->vwid->func->thr_label ) ; } } while(0)
00550 #else
00551 #  define FIX_SCALE_VALUE(iqqq) /* nada */
00552 #endif
00553 
00554 typedef struct {
00555       Widget frame , rowcol ;
00556 
00557       MCW_bbox     * anatmode_bbox , * funcmode_bbox ;
00558       MCW_arrowval * anat_resam_av , * resam_vox_av ;
00559       MCW_arrowval * func_resam_av ;                   /* moved here 03 Nov 1996 */
00560       MCW_arrowval * thr_resam_av ;                    /* 09 Dec 1997 */
00561       Widget         write_rowcol , write_anat_pb , write_func_pb , write_many_pb ;
00562       Widget         rescan_rowcol , rescan_pb , rescan_all_pb , rescan_timeseries_pb ;
00563       Widget         read_rowcol , read_sess_pb , read_1D_pb , read_Web_pb ;
00564 
00565       Widget         mbar_rowcol ;
00566       MCW_bbox     * lock_bbox ;
00567       Widget         lock_enforce_pb , lock_clear_pb , lock_setall_pb ;
00568 
00569       Widget         misc_voxind_pb ;
00570       Widget         misc_hints_pb ;
00571       Widget         misc_anat_info_pb , misc_func_info_pb ;
00572       Widget         misc_vcheck_pb, misc_purge_pb, misc_tracing_pb,
00573                      misc_showmalloc_pb , misc_dumpmalloc_pb ;
00574 
00575       MCW_bbox     * time_lock_bbox ;  /* 03 Nov 1998 */
00576 
00577       Widget         misc_writeownsize_pb ;   /* 01 Aug 1999 */
00578       MCW_bbox     * misc_writeownsize_bbox ;
00579 
00580       MCW_bbox     * misc_voxind_bbox , * misc_hints_bbox ; /* 01 Aug 1999 */
00581 
00582 #ifdef ALLOW_PLUGINS
00583       Widget         misc_environ_pb ;  /* 20 Jun 2000 */
00584       Widget         misc_2dchain_pb ;  /* 03 Jul 2000 */
00585       Widget         misc_1dchain_pb ;  /* 07 Aug 2001 */
00586 #endif
00587 
00588       MCW_bbox     * ijk_lock_bbox ;    /* 11 Sep 2000 */
00589 
00590       Widget         misc_savelayout_pb ; /* 23 Sep 2000 */
00591       Widget         misc_license_pb ;    /* 03 Dec 2000 */
00592       Widget         misc_plugout_pb ;    /* 07 Nov 2001 */
00593       Widget         misc_niml_pb    ;    /* 02 Mar 2002 */
00594       Widget         misc_runscript_pb ;  /* 22 Jan 2003 */
00595 
00596       Widget         misc_readme_env_pb ; /* 05 Aug 2004 */
00597 
00598 } AFNI_datamode_widgets ;
00599 
00600 /*---*/
00601 
00602 #define USE_HIDDEN
00603 
00604 typedef struct {
00605    Widget frame , rowcol ;
00606 
00607    Widget  rc_top , clone_pb , panel_pb ;
00608    Widget  rc_bot , button_help_pb , quit_pb ;
00609    Boolean quit_first , panel_pb_inverted ;
00610 
00611 #ifdef USE_HIDDEN
00612 
00613    /** May 1995: hidden popup widgets **/
00614 
00615    Widget hidden_menu ,
00616             hidden_pts_cbut , hidden_pts_menu ,
00617             hidden_readpts_ijk_pb , hidden_readpts_xyz_pb ,
00618             hidden_writepts_ijk_pb , hidden_writepts_xyz_pb ,
00619             hidden_colorpts_pb ;
00620 
00621    Widget hidden_sonnet_pb ;
00622 
00623 #define PTS_READ_IJK   7
00624 #define PTS_READ_XYZ   8
00625 #define PTS_WRITE_IJK  9
00626 #define PTS_WRITE_XYZ 10
00627 #define PTS_SET_COLOR 11
00628 
00629    int    hidden_code ;
00630 
00631    Widget hidden_mission_pb ;  /* 06 Jun 2001 */
00632    Widget hidden_gamberi_pb ;  /* 14 Oct 2003 */
00633    Widget hidden_ranpoem_pb ;  /* 15 Oct 2003 */
00634    Widget hidden_speech_pb  ;  /* 25 Nov 2003 */
00635    Widget hidden_faces_pb   ;  /* 17 Dec 2004 */
00636    Widget hidden_browser_pb ;  /* 22 Apr 2005 */
00637    Widget hidden_broutim_pb ;  /* 06 Jun 2005 */
00638 
00639 #endif  /* USE_HIDDEN */
00640 
00641 } AFNI_program_widgets ;
00642 
00643 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
00644 #ifdef USE_HIDDEN
00645 
00646 extern void AFNI_hidden_CB    ( Widget , XtPointer , XtPointer );
00647 extern void AFNI_hidden_EV    ( Widget , XtPointer , XEvent * , Boolean * ) ;
00648 extern void AFNI_hidden_pts_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
00649 
00650 #ifdef USE_SONNETS
00651 extern void AFNI_sonnet_CB    ( Widget , XtPointer , XtPointer );
00652 #endif
00653 
00654 #endif  /* USE_HIDDEN*/
00655 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
00656 
00657 /*---*/
00658 
00659 struct PLUGIN_interface ; /* incomplete definition */
00660 
00661 typedef struct {
00662       Widget top_shell , top_form ;
00663 
00664       AFNI_imaging_widgets  * imag ;
00665       AFNI_viewing_widgets  * view ;
00666       AFNI_marks_widgets    * marks ;
00667       AFNI_function_widgets * func ;
00668       AFNI_program_widgets  * prog ;
00669       AFNI_datamode_widgets * dmode ;
00670 
00671       Widget picture ;
00672       int    picture_index ;
00673 
00674       Widget file_dialog , file_sbox ;
00675       XtCallbackProc file_cb ;
00676       XtPointer      file_cd ;
00677 
00678 #ifdef ALLOW_PLUGINS
00679       int nplugbut ;                      /* 23 Sep 2000 */
00680       Widget * plugbut ;
00681       char ** pluglab ;
00682       struct PLUGIN_interface ** plugint ;
00683 #endif
00684 
00685       /*--- Pointers to other data ---*/
00686 
00687       XtPointer parent ;
00688 
00689       int butx , buty ;        /* 17 May 2005 */
00690 } AFNI_widget_set ;
00691 
00692 /** picture controls **/
00693 
00694 #define PICTURE_ON(im)                                                      \
00695    do{ if( (im)->type == AFNI_3DDATA_VIEW )                                 \
00696         XtVaSetValues((im)->vwid->picture,XmNlabelPixmap,logo_pixmap,NULL); \
00697    } while(0)
00698 
00699 #define PICTURE_OFF(im)                                                               \
00700    do{ if( (im)->type == AFNI_3DDATA_VIEW )                                           \
00701         XtVaSetValues((im)->vwid->picture,XmNlabelPixmap,XmUNSPECIFIED_PIXMAP,NULL ); \
00702    } while(0)
00703 
00704 #define PICTURE_SET(im,px)                                            \
00705    do{ if( (im)->type == AFNI_3DDATA_VIEW )                           \
00706         XtVaSetValues((im)->vwid->picture,XmNlabelPixmap,(px),NULL ); \
00707    } while(0)
00708 
00709 /*-----------------------------*/
00710 /*----- Data for FIM-age ------*/
00711 
00712 #define FIM_ALPHA_MASK  1
00713 #define FIM_BEST_MASK   2
00714 #define FIM_PERC_MASK   4
00715 #define FIM_BASE_MASK   8
00716 #define FIM_CORR_MASK  16
00717 #define FIM_PAVE_MASK  32
00718 #define FIM_AVER_MASK  64
00719 
00720 #define FIM_PTOP_MASK 128  /* these 3 added on 03 Jan 2000 */
00721 #define FIM_TOPL_MASK 256
00722 #define FIM_SIGM_MASK 512
00723 
00724 #define FIM_DEFAULT_MASK (1 | 2 | 4 | 16)
00725 
00726 #define FIM_NUM_OPTS   10
00727 
00728 #ifdef MAIN
00729    char * fim_opt_labels[FIM_NUM_OPTS] = {
00730      "Fit Coef" , "Best Index" , "% Change"    , "Baseline" ,
00731                                  "Correlation" ,
00732                                  "% From Ave"  , "Average"  ,
00733                                  "% From Top"  , "Topline"  ,
00734                                  "Sigma Resid"
00735    } ;
00736 #else
00737    extern char * fim_opt_labels[] ;
00738 #endif
00739 
00740 typedef struct {
00741    MRI_IMAGE *        fimref ;
00742    MRI_IMAGE *        fimort ;   /* 12 Nov 1996 */
00743    THD_3dim_dataset * fimdset ;
00744    int                refadd_count ;
00745    int                init_ignore ;
00746    int                polort ;   /* 27 May 1999 */
00747 } AFNI_fimmer_type ;
00748 
00749 #define MAX_POLORT 3
00750 
00751 #define CLEAR_FIMDATA(iq)                            \
00752    ( (iq)->fimdata->fimref       = NULL ,            \
00753      (iq)->fimdata->fimort       = NULL ,            \
00754      (iq)->fimdata->fimdset      = NULL ,            \
00755      (iq)->fimdata->refadd_count = 0 ,               \
00756      (iq)->fimdata->polort       = INIT_fim_polort , \
00757      (iq)->fimdata->init_ignore  = GLOBAL_argopt.ignore )
00758 
00759 #define USABLE_FIMDATA(iq)                                         \
00760   ( IM3D_OPEN(iq) && (iq)->type == AFNI_3DDATA_VIEW              && \
00761     DSET_GRAPHABLE((iq)->fimdata->fimdset)                        && \
00762     (iq)->fimdata->fimref != NULL                                  && \
00763     (iq)->fimdata->fimref->kind == MRI_float                        && \
00764     (iq)->fimdata->fimref->nx >= DSET_NUM_TIMES((iq)->fimdata->fimdset) )
00765 
00766 #ifdef USE_FUNC_FIM
00767 #  define ALLOW_COMPUTE_FIM(iq)                                           \
00768      do{ XmString xstr ; THD_3dim_dataset * ds = (iq)->fimdata->fimdset ; \
00769          int fim_ok = USABLE_FIMDATA(iq) ,                                \
00770              ds_ok  = DSET_GRAPHABLE((iq)->fimdata->fimdset) ;            \
00771          STATUS("** Setting FIM controls") ;                              \
00772          if( ISVALID_3DIM_DATASET(ds) ){                                  \
00773             STATUS("setting fim string to dataset") ;                     \
00774             xstr = XmStringCreateLtoR(ds->dblk->diskptr->filecode,        \
00775                                     XmFONTLIST_DEFAULT_TAG);              \
00776          } else {                                                         \
00777             STATUS("setting fim string to nothing") ;                     \
00778             xstr = XmStringCreateLtoR("[FIM not set up]",                 \
00779                                     XmFONTLIST_DEFAULT_TAG);              \
00780          }                                                                \
00781          STATUS("setting fim label to fim string") ;                      \
00782          XtVaSetValues( (iq)->vwid->func->fim_dset_label ,                \
00783                            XmNlabelString , xstr , NULL ) ;               \
00784          XmStringFree(xstr) ;                                             \
00785          SENSITIZE((iq)->vwid->func->fim_menu->fim_execute_pb,fim_ok);    \
00786          if( ds_ok ) AFNI_fimmer_fix_optmenu(iq) ;                        \
00787          STATUS("** Done setting FIM controls") ;                         \
00788       } while(0)
00789 #else
00790 #  define ALLOW_COMPUTE_FIM(iq) /* nada */
00791 #endif
00792 
00793 /*-----------------------------------------------------------*/
00794 /*------------- define the central data structure -----------*/
00795 
00796 #define AFNI_NODATA_VIEW 100
00797 #define AFNI_IMAGES_VIEW 101
00798 #define AFNI_3DDATA_VIEW 102
00799 
00800 #define IM0D_VALID(ii) ((ii)!=NULL && (ii)->type==AFNI_NODATA_VIEW)
00801 #define IM3D_VALID(ii) ((ii)!=NULL && ((ii)->type==AFNI_IMAGES_VIEW || \
00802                                        (ii)->type==AFNI_3DDATA_VIEW ) )
00803 
00804 #define IM3D_OPEN(ii)  (IM3D_VALID(ii) && (ii)->opened)
00805 
00806 #define ISVALID_IM3D(ii) IM3D_VALID(ii)
00807 
00808 #define AFNI_IGNORE_NOTHING    0
00809 #define AFNI_IGNORE_REDRAWS    1
00810 #define AFNI_IGNORE_EVERYTHING 2
00811 
00812 typedef struct {
00813       int type , opened ;
00814       MCW_DC * dc ;
00815 
00816       THD_session      * ss_now ;   /* session now being viewed */
00817       THD_3dim_dataset * anat_dset[LAST_VIEW_TYPE+1] ,   /* datasets now */
00818                        * fim_dset [LAST_VIEW_TYPE+1]  ;  /* being viewed */
00819       THD_3dim_dataset * anat_now , * fim_now ;  /* REALLY now being viewed */
00820 
00821       AFNI_view_info   * vinfo ;  /* information about what's being viewed */
00822 
00823       AFNI_fimmer_type * fimdata ; /* information about fimming */
00824 
00825       FD_brick  * b123_anat , * b231_anat , * b312_anat ; /* anat */
00826       FD_brick  * b123_fim  , * b231_fim  , * b312_fim  ; /* funcs */
00827       FD_brick  * b123_ulay , * b231_ulay , * b312_ulay ; /* underlays */
00828 
00829       MCW_imseq   * s123    , * s231      , * s312 ;      /* viewers */
00830       MCW_grapher * g123    , * g231      , * g312 ;      /* graphs */
00831 
00832       AFNI_widget_set  * vwid ;
00833       char window_title[THD_MAX_NAME] ;
00834       int ignore_seq_callbacks ;
00835 
00836       THD_dataxes * wod_daxes ;                 /* 02 Nov 1996 */
00837       THD_warp * anat_voxwarp , * fim_voxwarp ;
00838       int anat_wod_flag , fim_wod_flag ;
00839 
00840       KILL_list kl ;
00841       XtPointer parent ;
00842 
00843       int brand_new ;                           /* 07 Dec 2001 */
00844 
00845       THD_warp * fim_selfwarp ;                 /* 27 Aug 2002 */
00846 
00847       int dummied ;                             /* 27 Jan 2004 */
00848 } Three_D_View ;
00849 
00850 /* 02 Nov 1996: macro to load current viewing data into current datasets */
00851 
00852 #define LOAD_ANAT_VIEW(iq)                               \
00853   do{ (iq)->anat_now->wod_daxes = (iq)->wod_daxes ;      \
00854       (iq)->anat_now->wod_flag  = (iq)->anat_wod_flag ;  \
00855       (iq)->anat_now->vox_warp  = (iq)->anat_voxwarp ;   \
00856     } while(0)
00857 
00858 #define LOAD_FUNC_VIEW(iq)                               \
00859   do{ if( ISVALID_3DIM_DATASET((iq)->fim_now) ){         \
00860          (iq)->fim_now->wod_daxes = (iq)->wod_daxes ;    \
00861          (iq)->fim_now->wod_flag  = (iq)->fim_wod_flag ; \
00862          (iq)->fim_now->vox_warp  = (iq)->fim_voxwarp ;  \
00863          (iq)->fim_now->self_warp = (iq)->fim_selfwarp ; \
00864       } } while(0)
00865 
00866 #define LOAD_DSET_VIEWS(iq) \
00867   do{ LOAD_ANAT_VIEW(iq) ; LOAD_FUNC_VIEW(iq) ; } while(0)
00868 
00869 extern int AFNI_count_controllers(void) ;
00870 extern void AFNI_controller_clonify(void) ;
00871 extern Three_D_View * new_AFNI_controller( Widget , MCW_DC * , int ) ;
00872 extern void AFNI_initialize_controller( Three_D_View * ) ;
00873 extern void AFNI_purge_dsets(int) ;
00874 extern void AFNI_purge_unused_dsets(void) ;
00875 extern int AFNI_controller_index( Three_D_View * ) ;
00876 
00877 extern Three_D_View * AFNI_find_open_controller(void) ; /* 05 Mar 2002 */
00878 extern void AFNI_popup_message( char * ) ;
00879 
00880 extern void   AFNI_start_version_check(void) ;   /* 21 Nov 2002 */
00881 extern int    AFNI_version_check      (void) ;
00882 extern char * AFNI_make_update_script (void) ;   /* 20 Nov 2003 */
00883 
00884 extern char * AFNI_get_friend(void) ;      /* 26 Feb 2001 */
00885 extern char * AFNI_get_date_trivia(void) ; /* 25 Nov 2002 */
00886 
00887 #define OPEN_CONTROLLER(iq)                                  \
00888  do{ XtRealizeWidget((iq)->vwid->top_shell) ;                \
00889      while(XtWindow((iq)->vwid->top_shell)==(Window)NULL) ;  \
00890      AFNI_startup_3dview(iq); (iq)->opened = 1;              \
00891  } while(0)
00892 
00893 #define CLOSE_CONTROLLER(iq) \
00894  ( AFNI_closedown_3dview(iq), XtUnrealizeWidget((iq)->vwid->top_shell), (iq)->opened = 0 )
00895 
00896 #define PARENTIZE(ds,par) \
00897    if( ISVALID_3DIM_DATASET((ds)) ) (ds)->parent = (XtPointer) (par)
00898 
00899 /* macros to return the analogous grapher given a viewer, and vice-versa */
00900 
00901 #define VIEWER_TO_GRAPHER(iq,ss) (((ss)==(iq)->s123) ? (iq)->g123 :  \
00902                                   ((ss)==(iq)->s231) ? (iq)->g231 :  \
00903                                   ((ss)==(iq)->s312) ? (iq)->g312 : NULL)
00904 
00905 #define GRAPHER_TO_VIEWER(iq,gg)  (((gg)==(iq)->g123) ? (iq)->s123 :  \
00906                                    ((gg)==(iq)->g231) ? (iq)->s231 :  \
00907                                    ((gg)==(iq)->g312) ? (iq)->s312 : NULL)
00908 
00909 #define UNDERLAY_TO_VIEWER(iq,bb) (((bb)==(iq)->b123_ulay) ? (iq)->s123 :  \
00910                                    ((bb)==(iq)->b231_ulay) ? (iq)->s231 :  \
00911                                    ((bb)==(iq)->b312_ulay) ? (iq)->s312 : NULL)
00912 
00913 #define UNDERLAY_TO_GRAPHER(iq,bb) (((bb)==(iq)->b123_ulay) ? (iq)->g123 :  \
00914                                     ((bb)==(iq)->b231_ulay) ? (iq)->g231 :  \
00915                                     ((bb)==(iq)->b312_ulay) ? (iq)->g312 : NULL)
00916 
00917 #define UNDERLAY_TO_OVERLAY(iq,bb) (((bb)==(iq)->b123_ulay) ? (iq)->b123_fim :  \
00918                                     ((bb)==(iq)->b231_ulay) ? (iq)->b231_fim :  \
00919                                     ((bb)==(iq)->b312_ulay) ? (iq)->b312_fim : NULL)
00920 
00921 /*-----------------------------------------------------------------------------*/
00922 /*---------------------------- Global library data ----------------------------*/
00923 
00924 #include "afni_plugin.h"
00925 #ifdef ALLOW_PLUGINS
00926 
00927    /*-- pseudo-plugin functions --*/
00928 
00929    extern PLUGIN_interface * ENV_init(void) ;            /* 20 Jun 2000 */
00930    extern void ENV_add_numeric( char * , char * ,
00931                                 int , int , int , int , generic_func * ) ;
00932    extern void ENV_add_string( char * , char * ,
00933                                int , char ** , generic_func * ) ;
00934    extern void ENV_add_yesno( char * , char * ) ;        /* 08 Aug 2001 */
00935 
00936    extern PLUGIN_interface * F2D_init(void) ;            /* 03 Jul 2000 */
00937    extern PLUGIN_interface * F1D_init(void) ;            /* 08 Aug 2001 */
00938 #endif
00939 
00940 typedef struct {                 /* windows and widgets */
00941    XtPointer_array * windows ;   /* allowed to interrupt */
00942    XtPointer_array * widgets ;   /* 'real-time' functions */
00943 } MCW_interruptables ;
00944 
00945 #ifndef MAX_CONTROLLERS
00946 #define MAX_CONTROLLERS 10  /* 12 Nov 2002: increased from 5, per MSB */
00947 #endif
00948 
00949 /*-------------- Here there be global variables.  So shoot me. --------------*/
00950 
00951 #include "afni_setup.h"  /* 19 Dec 1997 */
00952 
00953 typedef struct {
00954    MCW_DC * dc ;                                  /* display context for everyone */
00955    THD_sessionlist * sslist ;                     /* all sessions viewable */
00956    MRI_IMARR * timeseries ;                       /* all timeseries available */
00957    Three_D_View * controllers[MAX_CONTROLLERS] ;  /* all controllers available */
00958    MCW_interruptables interruptables ;            /* windows and widgets */
00959 
00960    MCW_function_list registered_0D ;              /* registered functions */
00961    MCW_function_list registered_1D ;
00962    MCW_function_list registered_2D ;
00963 
00964    int controller_lock , ignore_lock ;
00965    int have_dummy_dataset ;
00966    int sesstrail ;                                /* 23 Oct 1998 */
00967 
00968    THD_coorder cord ;
00969 
00970 #ifdef ALLOW_PLUGINS
00971    struct AFNI_plugin_array * plugins ;           /* plugins */
00972 #endif
00973 
00974    PBAR_palette_table * gpt ;
00975 
00976    int time_lock ;                                /* 03 Nov 1998 */
00977 
00978    int hints_on ;                                 /* 01 Aug 1999 */
00979 
00980    float fim_bkthr_perc ;                         /* 02 Jun 1999 */
00981 
00982    MCW_function_list registered_fim ;             /* 30 Jan 2000 */
00983 
00984    int ijk_lock ;                                 /* 11 Sep 2000 */
00985 
00986    THD_session *session ;                         /* 20 Dec 2001 */
00987 
00988    MCW_function_list registered_slice_proj ;      /* 31 Jan 2002 */
00989 
00990    Htable *warptable ;                            /* 28 Aug 2002 */
00991 
00992 } AFNI_library_type ;
00993 
00994 #ifdef MAIN
00995    AFNI_library_type GLOBAL_library ;
00996    int GLOBAL_num_dsets = 0 ;
00997 #else
00998    extern AFNI_library_type GLOBAL_library ;
00999    extern GLOBAL_num_dsets ;
01000 #endif
01001 
01002 #define FIM_THR          (0.01*GLOBAL_library.fim_bkthr_perc)  /* 02 Jun 1999 */
01003 #define SET_FIM_bkthr(v) (GLOBAL_library.fim_bkthr_perc = (v))
01004 
01005 #define DISABLE_LOCK    (GLOBAL_library.ignore_lock=1)
01006 #define ENABLE_LOCK     (GLOBAL_library.ignore_lock=0)
01007 #define BEEPIT          XBell(GLOBAL_library.dc->display,100)
01008 #define ALLOW_real_time GLOBAL_argopt.allow_rt
01009 #define ELIDE_quality   GLOBAL_argopt.elide_quality
01010 #define GPT             GLOBAL_library.gpt
01011 #define NO_frivolities  GLOBAL_argopt.no_frivolities
01012 #define SESSTRAIL       GLOBAL_library.sesstrail
01013 #define AFNI_VERBOSE    (!GLOBAL_argopt.quiet)  /* 25 Oct 2001 */
01014 
01015 #define THE_DISPLAY     (GLOBAL_library.dc->display)  /* 02 Aug 2002 */
01016 #define THE_TOPSHELL    (GLOBAL_library.controllers[0]->vwid->top_shell)
01017 
01018 # define SUMA_ENABLED   GLOBAL_argopt.enable_suma
01019 
01020 #define DOING_REALTIME_WORK (GLOBAL_library.interruptables.windows != NULL)
01021 
01022 #define UNDUMMYIZE                                                              \
01023  do { GLOBAL_library.have_dummy_dataset = 0 ;                                   \
01024       XtSetSensitive(GLOBAL_library.controllers[0]->vwid->prog->clone_pb,True); \
01025     } while(0)
01026 
01027 /*-----------------------------------------------------------*/
01028 /*------------------------ prototypes -----------------------*/
01029 
01030 extern int AFNI_vnlist_func_overlay( Three_D_View *,int, SUMA_irgba **,int * ) ;
01031 extern int AFNI_vol2surf_func_overlay( Three_D_View *, SUMA_irgba **,
01032                                        int, int, int, float **, float * );
01033 
01034 extern void AFNI_parse_args( int argc , char * argv[] );
01035 extern void FatalError(char * str);
01036 
01037 extern void AFNI_splashup   (void) ;  /* 02 Aug 1999 */
01038 extern void AFNI_splashdown (void) ;
01039 extern void AFNI_splashraise(void) ;  /* 25 Sep 2000 */
01040 extern void AFNI_faceup     (void) ;  /* 17 Dec 2004 */
01041 extern void AFNI_broutim_CB (Widget,XtPointer,XtPointer) ; /* 06 Jun 2005 */
01042 
01043 
01044 extern void AFNI_quit_CB           ( Widget wcall , XtPointer cd , XtPointer cbs );
01045 extern void AFNI_quit_timeout_CB   ( XtPointer , XtIntervalId * ) ;
01046 extern void AFNI_startup_timeout_CB( XtPointer , XtIntervalId * ) ;
01047 
01048 extern void AFNI_startup_layout_CB  ( XtPointer, XtIntervalId * ) ;    /* 23 Sep 2000 */
01049 extern void AFNI_save_layout_CB     ( Widget, XtPointer, XtPointer ) ;
01050 extern void AFNI_finalsave_layout_CB( Widget, XtPointer, MCW_choose_cbs * ) ;
01051 extern void AFNI_startup_script_CB  ( XtPointer, XtIntervalId * ) ;    /* 21 Jan 2003 */
01052 extern void AFNI_run_script_CB      ( Widget, XtPointer, XtPointer ) ; /* 22 Jan 2003 */
01053 extern void AFNI_finalrun_script_CB ( Widget, XtPointer, MCW_choose_cbs * ) ;
01054 
01055 #define AFNI_run_script(ss) AFNI_startup_script_CB((XtPointer)(ss),NULL)
01056 
01057 extern void AFNI_decode_geom( char * , int *, int *, int *, int * ) ;
01058 
01059 extern void AFNI_clone_controller_CB( Widget , XtPointer , XtPointer ) ;
01060 extern void AFNI_controller_panel_CB( Widget , XtPointer , XtPointer ) ;
01061 extern void AFNI_make_controller( int ) ;  /* 23 Sep 2000 */
01062 
01063 /* "locks" 04 Nov 1996 */
01064 extern void AFNI_lock_enforce_CB( Widget , XtPointer , XtPointer ) ;
01065 extern void AFNI_lock_change_CB ( Widget , XtPointer , XtPointer ) ;
01066 extern void AFNI_lock_clear_CB  ( Widget , XtPointer , XtPointer ) ;
01067 extern void AFNI_lock_setall_CB ( Widget , XtPointer , XtPointer ) ;
01068 extern void AFNI_lock_carryout  ( Three_D_View * ) ;
01069 
01070 extern void AFNI_time_lock_carryout( Three_D_View * ) ;  /* 03 Nov 1998 */
01071 extern void AFNI_time_lock_change_CB( Widget , XtPointer , XtPointer ) ;
01072 
01073 extern void AFNI_thresh_lock_carryout( Three_D_View * ) ; /* 06 Feb 2004 */
01074 extern void AFNI_pbar_lock_carryout  ( Three_D_View * ) ; /* 07 Feb 2004 */
01075 extern void AFNI_equate_pbars        ( Three_D_View *, Three_D_View * ) ;
01076 extern void AFNI_thrdrag_lock_carryout( Three_D_View * ) ;
01077 extern void AFNI_range_lock_carryout( Three_D_View * ) ;  /* 23 Feb 2004 */
01078 
01079 extern void AFNI_ijk_lock_change_CB( Widget , XtPointer , XtPointer ) ;
01080 
01081 extern XtPointer AFNI_brick_to_mri( int n , int type , FD_brick * br );
01082 
01083 extern THD_3dim_dataset * AFNI_read_images( int nf , char * fname[] );
01084 
01085 extern void AFNI_seq_send_CB(MCW_imseq   * seq    ,FD_brick * br,ISQ_cbs * cbs);
01086 extern void AFNI_gra_send_CB(MCW_grapher * grapher,FD_brick * br,GRA_cbs * cbs);
01087 
01088 extern void AFNI_read_inputs   ( int argc, char * argv[] );
01089 extern void AFNI_make_widgets  ( Three_D_View * im3d );
01090 extern void AFNI_closedown_3dview( Three_D_View * im3d );
01091 extern void AFNI_startup_3dview  ( Three_D_View * im3d ); /* 15 Jun 2000 */
01092 extern MRI_IMAGE * AFNI_overlay( int n , FD_brick * br );
01093 
01094 extern char * AFNI_controller_label( Three_D_View * im3d ); /* 01 Apr 1999 */
01095 extern void AFNI_set_window_titles( Three_D_View * im3d );
01096 
01097 extern void AFNI_crosshair_visible_CB( MCW_arrowval * , XtPointer ) ;
01098 extern void AFNI_view_xyz_CB         ( Widget , XtPointer , XtPointer ) ;
01099 extern void AFNI_marktog_CB          ( Widget , XtPointer , XtPointer ) ;
01100 extern void AFNI_marks_action_CB     ( Widget , XtPointer , XtPointer ) ;
01101 
01102 extern void AFNI_viewbut_EV          ( Widget, XtPointer, XEvent *, Boolean * ) ;
01103 
01104 #define AFNI_SEE_FUNC_ON(iq) ( MCW_set_bbox( (iq)->vwid->view->see_func_bbox, 1 ), \
01105                                AFNI_see_func_CB( NULL , (XtPointer)(iq) , NULL )  )
01106 
01107 #define AFNI_SEE_FUNC_OFF(iq) ( MCW_set_bbox( (iq)->vwid->view->see_func_bbox, 0), \
01108                                 AFNI_see_func_CB( NULL , (XtPointer)(iq) , NULL ) )
01109 
01110 #define AFNI_SETUP_FUNC_ON(iq)                                \
01111   do{ if( ! (iq)->vinfo->func_visible ){                      \
01112          MCW_set_bbox( (iq)->vwid->view->see_func_bbox, 1 ) ; \
01113          (iq)->vinfo->func_visible = True ;                   \
01114       } } while(0)
01115 
01116 #define AFNI_SWITCH_VIEW(iq,vv)                                    \
01117    do{ if( (iq)->vinfo->view_type != (vv) ){                       \
01118          MCW_set_bbox( (iq)->vwid->view->view_bbox , 1 << (vv) ) ; \
01119          AFNI_switchview_CB( NULL , (XtPointer)(iq) , NULL ) ;     \
01120        } } while(0) ;
01121 
01122 #define AFNI_SETUP_VIEW(iq,vv)                                     \
01123    do{ if( (iq)->vinfo->view_type != (vv) ){                       \
01124          MCW_set_bbox( (iq)->vwid->view->view_bbox , 1 << (vv) ) ; \
01125          (iq)->vinfo->view_type = (vv) ;                           \
01126        } } while(0) ;
01127 
01128 extern void AFNI_switchview_CB        ( Widget , XtPointer , XtPointer ) ;
01129 extern void AFNI_see_marks_CB         ( Widget , XtPointer , XtPointer ) ;
01130 extern void AFNI_see_func_CB          ( Widget , XtPointer , XtPointer ) ;
01131 extern void AFNI_marks_edits_CB       ( Widget , XtPointer , XtPointer ) ;
01132 extern void AFNI_marks_transform_CB   ( Widget , XtPointer , XtPointer ) ;
01133 extern void AFNI_imag_pop_CB          ( Widget , XtPointer , XtPointer ) ;
01134 extern void AFNI_define_CB            ( Widget , XtPointer , XtPointer ) ;
01135 extern void AFNI_underlay_CB          ( Widget , XtPointer , XtPointer ) ;
01136 extern void AFNI_choose_dataset_CB    ( Widget , XtPointer , XtPointer ) ;
01137 extern void AFNI_write_dataset_CB     ( Widget , XtPointer , XtPointer ) ;
01138 extern void AFNI_write_many_dataset_CB( Widget , XtPointer , XtPointer ) ; /* 23 Nov 1996 */
01139 extern void AFNI_anatmode_CB          ( Widget , XtPointer , XtPointer ) ;
01140 extern void AFNI_funcmode_CB          ( Widget , XtPointer , XtPointer ) ;
01141 extern void AFNI_raiseup_CB           ( Widget , XtPointer , XtPointer ) ;
01142 
01143 extern void AFNI_do_many_writes      ( Widget , XtPointer , MCW_choose_cbs * ) ; /* 23 Nov 1996 */
01144 extern void AFNI_finalize_dataset_CB ( Widget , XtPointer , MCW_choose_cbs * ) ;
01145 extern void AFNI_jumpto_CB           ( Widget , XtPointer , MCW_choose_cbs * ) ;
01146 extern int  AFNI_jumpto_dicom        ( Three_D_View * , float, float, float  ) ;
01147 extern int  AFNI_jumpto_ijk          ( Three_D_View * , int, int, int  ) ;
01148 extern void AFNI_jumpto_ijk_CB       ( Widget , XtPointer , MCW_choose_cbs * ) ;
01149 extern void AFNI_sumato_CB           ( Widget , XtPointer , MCW_choose_cbs * ) ;
01150 extern void AFNI_mnito_CB            ( Widget , XtPointer , MCW_choose_cbs * ) ;
01151 
01152 extern void AFNI_crosshair_pop_CB    ( Widget , XtPointer , XtPointer ) ; /* 12 Mar 2004 */
01153 extern void AFNI_crosshair_EV        ( Widget , XtPointer , XEvent * , Boolean * ) ;
01154 extern void AFNI_crosshair_relabel   ( Three_D_View * ) ;
01155 
01156 extern void AFNI_fimmer_pickref_CB   ( Widget , XtPointer , MCW_choose_cbs * ) ;
01157 extern void AFNI_fimmer_pickort_CB   ( Widget , XtPointer , MCW_choose_cbs * ) ;
01158 
01159 #ifdef USE_FUNC_FIM
01160 extern void AFNI_fimmer_fix_optmenu( Three_D_View * ) ;
01161 extern void AFNI_fimmer_menu_CB( Widget , XtPointer , XtPointer ) ;
01162 extern void AFNI_fimmer_dset_choose_CB( Widget, XtPointer, MCW_choose_cbs * ) ;
01163 # ifdef USE_OPTMENUS
01164   extern void AFNI_fimmer_ignore_choose_CB( MCW_arrowval *, XtPointer ) ;
01165 # else
01166   extern void AFNI_fimmer_ignore_choose_CB( Widget, XtPointer, MCW_choose_cbs * ) ;
01167 # endif
01168 #endif
01169 
01170 /*------------------------------------------------------------------
01171    31 Jan 2000 - this stuff for user-defined fimfuncs
01172 --------------------------------------------------------------------*/
01173 
01174 typedef struct {
01175    MRI_IMAGE * ref_ts , * ort_ts ;
01176    int nvox , ignore , polort ;
01177 } FIMdata ;
01178 
01179 extern void AFNI_register_fimfunc( char *, int, generic_func *, void * );
01180 extern void spearman_fimfunc( int, float *, void *, int, void * );
01181 extern void quadrant_fimfunc( int, float *, void *, int, void * );
01182 
01183 /*-------------------------------------------------------------------*/
01184 
01185 extern void AFNI_fimmer_setref( Three_D_View * , MRI_IMAGE * ) ;
01186 extern void AFNI_fimmer_setort( Three_D_View * , MRI_IMAGE * ) ;
01187 extern void AFNI_fimmer_setignore( Three_D_View * , int ) ;
01188 extern void AFNI_fimmer_setpolort( Three_D_View * , int ) ;
01189 extern int  AFNI_rescan_session( int ) ;
01190 extern void AFNI_rescan_CB( Widget , XtPointer , XtPointer ) ;
01191 extern void AFNI_rescan_all_CB( Widget , XtPointer , XtPointer ) ;
01192 extern void AFNI_rescan_timeseries_CB( Widget , XtPointer , XtPointer ) ;
01193 
01194 extern void AFNI_read_sess_CB( Widget , XtPointer , XtPointer ) ;
01195 extern void AFNI_finalize_read_sess_CB( Widget , XtPointer , XtPointer ) ;
01196 extern void AFNI_make_file_dialog( Three_D_View * ) ;
01197 extern void AFNI_close_file_dialog_CB( Widget , XtPointer , XtPointer ) ;
01198 extern void AFNI_read_1D_CB( Widget , XtPointer , XtPointer ) ;
01199 extern void AFNI_finalize_read_1D_CB( Widget , XtPointer , XtPointer ) ;
01200 
01201 extern int  DSET_in_global_session( THD_3dim_dataset * ) ;       /* 20 Dec 2001 */
01202 extern void AFNI_append_sessions( THD_session *, THD_session *); /* 20 Dec 2001 */
01203 
01204 extern void AFNI_read_Web_CB( Widget, XtPointer, XtPointer );    /* 26 Mar 2001 */
01205 extern void AFNI_finalize_read_Web_CB( Widget, XtPointer, MCW_choose_cbs * );
01206 
01207 extern void AFNI_fimmer_execute( Three_D_View * , int,int ) ;
01208 
01209 extern void AFNI_process_interrupts( Widget ) ;
01210 extern void AFNI_add_interruptable( Widget ) ;
01211 
01212 extern int AFNI_ts_in_library( MRI_IMAGE * tsim ) ;
01213 
01214 extern THD_3dim_dataset * AFNI_fimmer_compute( Three_D_View * ,
01215                                                THD_3dim_dataset * , MRI_IMAGE *,
01216                                                MRI_IMAGE *, THD_session *,
01217                                                int,int ) ;
01218 
01219 extern void AFNI_fimmer_redisplay( int , Three_D_View * , THD_3dim_dataset * ) ;
01220 
01221 extern void AFNI_crosshair_color_CB( MCW_arrowval * , XtPointer ) ;
01222 extern void AFNI_crosshair_gap_CB  ( MCW_arrowval * , XtPointer ) ;
01223 extern void AFNI_time_index_CB     ( MCW_arrowval * , XtPointer ) ;
01224 extern void AFNI_marks_disp_av_CB  ( MCW_arrowval * , XtPointer ) ;
01225 extern void AFNI_resam_vox_av_CB   ( MCW_arrowval * , XtPointer ) ;
01226 extern char * AFNI_resam_texter    ( MCW_arrowval * , XtPointer ) ;
01227 extern void   AFNI_resam_av_CB     ( MCW_arrowval * , XtPointer ) ;
01228 
01229 extern void   AFNI_bucket_CB      ( MCW_arrowval * , XtPointer ) ; /* 30 Nov 1997 */
01230 extern char * AFNI_bucket_label_CB( MCW_arrowval * , XtPointer ) ;
01231 
01232 extern Boolean AFNI_refashion_dataset( Three_D_View * ,
01233                                        THD_3dim_dataset *, THD_dataxes * , int ) ;
01234 
01235 #define REDISPLAY_OPTIONAL 0
01236 #define REDISPLAY_OVERLAY  1
01237 #define REDISPLAY_ALL      2
01238 
01239 extern void AFNI_set_viewpoint( Three_D_View * , int,int,int , int ) ;
01240 extern void AFNI_redisplay_func( Three_D_View * ) ; /* 05 Mar 2002 */
01241 extern void AFNI_view_setter( Three_D_View *, MCW_imseq *) ; /* 26 Feb 2003 */
01242 extern void AFNI_range_setter( Three_D_View *, MCW_imseq *); /* 04 Nov 2003 */
01243 
01244 extern XmString AFNI_crosshair_label( Three_D_View * ) ;
01245 extern XmString AFNI_range_label( Three_D_View * ) ;
01246 extern XmString AFNI_autorange_label( Three_D_View * ) ;
01247 
01248 extern void AFNI_range_bbox_CB( Widget , XtPointer , XtPointer ) ;
01249 extern void AFNI_range_av_CB  ( MCW_arrowval * , XtPointer ) ;
01250 extern void AFNI_inten_bbox_CB( Widget , XtPointer , XtPointer ) ;
01251 extern void AFNI_wrap_bbox_CB( Widget , XtPointer , XtPointer ) ;
01252 extern void AFNI_xhall_bbox_CB( Widget , XtPointer , XtPointer ) ;
01253 
01254 extern void AFNI_see_ttatlas_CB( Widget, XtPointer, XtPointer ) ; /* 25 Jul 2001 */
01255 
01256 extern void AFNI_range_rotate_av_CB( MCW_arrowval *, XtPointer ); /* 30 Mar 2001 */
01257 extern void AFNI_hintize_pbar( MCW_pbar * ,  float ) ;            /* 30 Mar 2001 */
01258 
01259 #define HINTIZE_pbar(iq)                            \
01260   AFNI_hintize_pbar( (iq)->vwid->func->inten_pbar , \
01261                     ((iq)->vinfo->fim_range != 0.0) \
01262                      ? (iq)->vinfo->fim_range       \
01263                      : (iq)->vinfo->fim_autorange )    /* 15 Aug 2001 */
01264 
01265 extern void AFNI_reset_func_range( Three_D_View * ) ;
01266 
01267 extern int AFNI_first_tog( int , Widget * ) ;
01268 extern int AFNI_all_tog  ( int , Widget * ) ;
01269 extern void AFNI_set_tog ( int , int , Widget * ) ;
01270 
01271 extern void AFNI_make_ptmask( int , int , AFNI_ovtemplate * ) ;
01272 extern void AFNI_make_tagmask( int , int , AFNI_ovtemplate * ) ; /* Oct 1998 */
01273 
01274 extern void AFNI_initialize_view( THD_3dim_dataset * , Three_D_View * ) ;
01275 
01276 extern void AFNI_setup_viewing(  Three_D_View * , Boolean ) ;
01277 extern void AFNI_modify_viewing( Three_D_View * , Boolean ) ;
01278 
01279 extern THD_warp * AFNI_find_warp( THD_3dim_dataset * ,
01280                                   THD_3dim_dataset *  ) ; /* 28 Aug 2002 */
01281 
01282 extern int AFNI_can_transform_vector( THD_3dim_dataset *, THD_3dim_dataset * );
01283 
01284 extern THD_fvec3 AFNI_transform_vector( THD_3dim_dataset * ,
01285                                         THD_fvec3 , THD_3dim_dataset * ) ;
01286 extern THD_fvec3 AFNI_backward_warp_vector( THD_warp * , THD_fvec3 ) ;
01287 extern THD_fvec3 AFNI_forward_warp_vector ( THD_warp * , THD_fvec3 ) ;
01288 
01289 extern THD_warp * AFNI_make_warp( Three_D_View * ) ;
01290 
01291 extern Boolean AFNI_marks_quality_check( Boolean , Three_D_View * ) ;
01292 
01293 extern THD_3dim_dataset * AFNI_init_warp( Three_D_View * ,
01294                                           THD_3dim_dataset * ,
01295                                           THD_warp * , float  ) ;
01296 
01297 extern void AFNI_handler( char * ) ;
01298 
01299 extern void AFNI_thr_scale_CB( Widget , XtPointer , XtPointer ) ;
01300 extern void AFNI_set_thr_pval( Three_D_View * im3d ) ;
01301 extern void AFNI_thr_scale_drag_CB( Widget , XtPointer , XtPointer ) ;
01302 
01303 extern void AFNI_inten_pbar_CB( MCW_pbar * , XtPointer , int ) ;
01304 extern void AFNI_inten_av_CB( MCW_arrowval * , XtPointer ) ;
01305 extern char * AFNI_inten_av_texter ( MCW_arrowval *, XtPointer ) ; /* 30 Jan 2003 */
01306 
01307 extern void   AFNI_set_thresh_top( Three_D_View * , float ) ;
01308 extern char * AFNI_thresh_tlabel_CB( MCW_arrowval * , XtPointer ) ;
01309 extern void   AFNI_thresh_top_CB( MCW_arrowval * , XtPointer ) ;
01310 
01311 extern void AFNI_set_valabel( FD_brick *, int, MRI_IMAGE *, char * ) ;
01312 
01313 extern void AFNI_init_niml( void ) ; /* 28 Feb 2002 */
01314 
01315 extern void AFNI_choose_surface_CB( Widget , XtPointer , XtPointer ) ; /* 19 Aug 2002 */
01316 extern void AFNI_update_surface_widgets( Three_D_View * ) ;
01317 extern void AFNI_update_all_surface_widgets( THD_session * ) ;
01318 
01319 extern void AFNI_disable_suma_overlay( int ) ;  /* 16 Jun 2003 */
01320 
01321 /*-------------------------------------------------------------------
01322   Include prototypes for actual data warping and slicing here.
01323 --------------------------------------------------------------------*/
01324 
01325 #include "afni_warp.h"
01326 
01327 /*------------------------------------------------------------------*/
01328 
01329 extern THD_3dim_dataset * AFNI_follower_dataset( THD_3dim_dataset * ,
01330                                                  THD_3dim_dataset *  ) ;
01331 
01332 extern void AFNI_make_descendants( THD_sessionlist * ) ;
01333 extern void AFNI_mark_for_death  ( THD_sessionlist * ) ;
01334 extern void AFNI_andersonville   ( THD_sessionlist * , Boolean ) ;
01335 extern void AFNI_force_adoption  ( THD_session * , Boolean ) ;
01336 
01337 extern MRI_IMAGE * AFNI_func_overlay( int , FD_brick * ) ;
01338 
01339 extern MRI_IMAGE * AFNI_newfunc_overlay( MRI_IMAGE *, float ,  /* 30 Jan 2003 */
01340                                          MRI_IMAGE *,
01341                                          float,float, rgbyte * ) ;
01342 
01343 extern void AFNI_syntax(void) ;
01344 
01345 #define AFNI_DEFAULT_CURSOR 888
01346 #define AFNI_WAITING_CURSOR 999
01347 
01348 #define SHOW_AFNI_PAUSE AFNI_set_cursor( AFNI_WAITING_CURSOR )
01349 #define SHOW_AFNI_READY AFNI_set_cursor( AFNI_DEFAULT_CURSOR )
01350 
01351 extern void AFNI_set_cursor( int ) ;
01352 extern void AFNI_imseq_clearstat( Three_D_View * ) ;
01353 
01354 extern void AFNI_copy_statistics( THD_3dim_dataset * , THD_3dim_dataset * ) ;
01355 
01356 extern void AFNI_lock_button( Three_D_View * ) ;
01357 extern void AFNI_misc_button( Three_D_View * ) ;
01358 extern void AFNI_misc_CB    ( Widget , XtPointer , XtPointer );
01359 
01360 extern void AFNI_add_timeseries( MRI_IMAGE * ) ;
01361 
01362 /*----------------------------------------------------------------*/
01363 /*----- stuff for dataset drawing, etc. (see afni_receive.c) -----*/
01364 
01365 /* coordinate converters */
01366 
01367 extern void AFNI_ijk_to_xyz( THD_3dim_dataset * ,
01368                              int,int,int, float *,float *,float *) ;
01369 
01370 extern void AFNI_xyz_to_ijk( THD_3dim_dataset * ,
01371                              float,float,float , int *,int *,int *) ;
01372 
01373 extern void AFNI_xyz_to_dicomm( THD_3dim_dataset * ,
01374                                 float,float,float , float *,float *,float *) ;
01375 
01376 extern void AFNI_dicomm_to_xyz( THD_3dim_dataset * ,
01377                                 float,float,float , float *,float *,float *) ;
01378 
01379 
01380 /* masks for input to AFNI_receive_init */
01381 
01382 #define RECEIVE_DRAWING_MASK     1
01383 #define RECEIVE_VIEWPOINT_MASK   2
01384 #define RECEIVE_OVERLAY_MASK     4    /* not implemented yet */
01385 #define RECEIVE_DRAWNOTICE_MASK  8    /* 30 Mar 1999 */
01386 #define RECEIVE_DSETCHANGE_MASK  16   /* 31 Mar 1999 */
01387 #define RECEIVE_TTATLAS_MASK     32   /* 12 Jul 2001 */
01388 #define RECEIVE_REDISPLAY_MASK   64   /* 04 Mar 2002 */
01389 #define RECEIVE_FUNCDISPLAY_MASK 128  /* 05 Mar 2002 */
01390 #define RECEIVE_TIMEINDEX_MASK   256  /* 29 Jan 2003 */
01391 
01392 #define RECEIVE_ALL_MASK       ( 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 )
01393 
01394 /* codes for input to AFNI_receive_control */
01395 
01396 #define DRAWING_LINES           BUTTON2_OPENPOLY
01397 #define DRAWING_FILL            BUTTON2_CLOSEDPOLY
01398 #define DRAWING_POINTS          BUTTON2_POINTS
01399 #define DRAWING_NODRAW          BUTTON2_NODRAW
01400 
01401 #ifdef MAIN
01402   char * DRAWING_strings[] = { "Lines" , "Filled" , "Points" , "No Draw" } ;
01403 #else
01404   extern char * DRAWING_strings[] ;
01405 #endif
01406 
01407 #define DRAWING_OVCINDEX        11
01408 #define DRAWING_X11PIXEL        12
01409 #define DRAWING_STARTUP         18
01410 #define DRAWING_SHUTDOWN        19
01411 #define DRAWING_LINEWIDTH       13   /* 08 Oct 2002 */
01412 
01413 #define VIEWPOINT_STARTUP       28
01414 #define VIEWPOINT_SHUTDOWN      29
01415 
01416 #define REDISPLAY_STARTUP       78   /* 04 Mar 2002 */
01417 #define REDISPLAY_SHUTDOWN      79
01418 
01419 #define FUNCDISPLAY_STARTUP     88   /* 05 Mar 2002 */
01420 #define FUNCDISPLAY_SHUTDOWN    89
01421 
01422 #define OVERLAY_STARTUP         38
01423 #define OVERLAY_SHUTDOWN        39
01424 
01425 #define DRAWNOTICE_STARTUP      48   /* 30 Mar 1999 */
01426 #define DRAWNOTICE_SHUTDOWN     49
01427 
01428 #define DSETCHANGE_STARTUP      58   /* 31 Mar 1999 */
01429 #define DSETCHANGE_SHUTDOWN     59
01430 
01431 #define TTATLAS_STARTUP         68   /* 11 Jul 2001 */
01432 #define TTATLAS_SHUTDOWN        69
01433 
01434 #define TIMEINDEX_STARTUP       98   /* 29 Jan 2003 */
01435 #define TIMEINDEX_SHUTDOWN      99
01436 
01437 #define EVERYTHING_SHUTDOWN    666
01438 
01439 /* whys for input to the receiver routine */
01440 
01441 #define RECEIVE_POINTS         101
01442 #define RECEIVE_VIEWPOINT      102
01443 #define RECEIVE_OVERLAY        103
01444 #define RECEIVE_CLOSURE        104
01445 #define RECEIVE_ALTERATION     105
01446 #define RECEIVE_DRAWNOTICE     106  /* 30 Mar 1999 */
01447 #define RECEIVE_DSETCHANGE     107  /* 31 Mar 1999 */
01448 #define RECEIVE_TTATLAS        108  /* 12 Jul 2001 */
01449 #define RECEIVE_REDISPLAY      109  /* 04 Mar 2002 */
01450 #define RECEIVE_FUNCDISPLAY    110  /* 04 Mar 2002 */
01451 #define RECEIVE_TIMEINDEX      111  /* 29 Jan 2003 */
01452 
01453 /* modes for the process_drawing routine */
01454 
01455 #define SINGLE_MODE           1000
01456 #define PLANAR_MODE           2000
01457 #define THREED_MODE           3000
01458 #define SPECIAL_MODE        100000
01459 #define UNDO_MODE           101000
01460 
01461 extern void AFNI_toggle_drawing ( Three_D_View * ) ;
01462 extern int AFNI_receive_init    ( Three_D_View *, int, gen_func *, void *, char * ) ;
01463 extern void AFNI_receive_destroy( Three_D_View * ) ;
01464 extern int AFNI_receive_control ( Three_D_View *, int,int, void * ) ;
01465 
01466 extern void AFNI_process_viewpoint  ( Three_D_View * ) ;
01467 extern void AFNI_process_drawnotice ( Three_D_View * ) ;
01468 extern void AFNI_process_dsetchange ( Three_D_View * ) ;
01469 extern void AFNI_process_alteration ( Three_D_View * ) ;
01470 extern void AFNI_process_drawing    ( Three_D_View *, int,int, int *,int *,int * );
01471 extern void AFNI_process_ttatlas    ( Three_D_View * ) ;
01472 extern void AFNI_process_redisplay  ( Three_D_View * ) ; /* 04 Mar 2002 */
01473 extern void AFNI_process_funcdisplay( Three_D_View * ) ; /* 05 Mar 2002 */
01474 extern void AFNI_process_timeindex  ( Three_D_View * ) ; /* 29 Jan 2003 */
01475 
01476 extern void AFNI_do_bkgd_lab( Three_D_View * ) ;         /* 08 Mar 2002 */
01477 
01478 extern MRI_IMAGE * AFNI_ttatlas_overlay(Three_D_View *, int,int,int,int, MRI_IMAGE *) ;
01479 
01480 extern void AFNI_3d_linefill( int  ,int * ,int * ,int * ,
01481                               int *,int **,int **,int ** ) ;
01482 
01483 /*-----------------------------------------------------------*/
01484 /*----------------- data for Talairach To -------------------*/
01485 
01486 #define TTO_CMAX    48
01487 #define TTO_LMAX    (TTO_CMAX+16)
01488 #define TTO_FORMAT  "%s [%3d,%3d,%3d]"
01489 
01490 typedef struct {
01491    short xx,yy,zz,tdlev,tdval ;
01492    char name[TTO_CMAX] ;
01493 } TTO_point ;
01494 
01495 #define TTO_COUNT 241
01496 
01497 #define TTO_COUNT_BROD    209
01498 #define TTO_COUNT_NONBROD 125
01499 
01500 #ifdef MAIN
01501    TTO_point TTO_list[TTO_COUNT] = {
01502       {  0, -1, -1,0,  0,"Anterior Commissure....................."} ,
01503       {  0, 23,  0,0,  0,"Posterior Commissure...................."} ,
01504       {  0,  7, 21,0,  0,"Corpus Callosum........................."} ,
01505       { 30, 24, -9,4, 68,"Left  Hippocampus......................."} ,
01506       {-30, 24, -9,4, 68,"Right Hippocampus......................."} ,
01507       { 23,  5,-15,4, 71,"Left  Amygdala.........................."} ,
01508       {-23,  5,-15,4, 71,"Right Amygdala.........................."} ,
01509       { 10, 54, 14,2, 20,"Left  Posterior Cingulate..............."} ,
01510       {-10, 54, 14,2, 20,"Right Posterior Cingulate..............."} ,
01511       {  8,-32,  7,2, 21,"Left  Anterior Cingulate................"} ,
01512       { -8,-32,  7,2, 21,"Right Anterior Cingulate................"} ,
01513       { 11,-11,-12,2, 22,"Left  Subcallosal Gyrus................."} ,
01514       {-11,-11,-12,2, 22,"Right Subcallosal Gyrus................."} ,
01515       { 50, 22, 12,2, 24,"Left  Transverse Temporal Gyrus........."} ,
01516       {-50, 22, 12,2, 24,"Right Transverse Temporal Gyrus........."} ,
01517       { 25,  2,-28,2, 25,"Left  Uncus............................."} ,
01518       {-25,  2,-28,2, 25,"Right Uncus............................."} ,
01519       {  7,-30,-23,2, 26,"Left  Rectal Gyrus......................"} ,
01520       { -7,-30,-23,2, 26,"Right Rectal Gyrus......................"} ,
01521       { 40, 48,-16,2, 27,"Left  Fusiform Gyrus...................."} ,
01522       {-40, 48,-16,2, 27,"Right Fusiform Gyrus...................."} ,
01523       { 35, 86, -7,2, 28,"Left  Inferior Occipital Gyrus.........."} ,
01524       {-35, 86, -7,2, 28,"Right Inferior Occipital Gyrus.........."} ,
01525       { 56, 39,-13,2, 29,"Left  Inferior Temporal Gyrus..........."} ,
01526       {-56, 39,-13,2, 29,"Right Inferior Temporal Gyrus..........."} ,
01527       { 39,  7,  9,2, 30,"Left  Insula............................"} ,
01528       {-39,  7,  9,2, 30,"Right Insula............................"} ,
01529       { 25, 25,-12,2, 31,"Left  Parahippocampal Gyrus............."} ,
01530       {-25, 25,-12,2, 31,"Right Parahippocampal Gyrus............."} ,
01531       { 14, 78, -3,2, 32,"Left  Lingual Gyrus....................."} ,
01532       {-14, 78, -3,2, 32,"Right Lingual Gyrus....................."} ,
01533       { 35, 83,  9,2, 33,"Left  Middle Occipital Gyrus............"} ,
01534       {-35, 83,  9,2, 33,"Right Middle Occipital Gyrus............"} ,
01535       { 11,-39,-25,2, 34,"Left  Orbital Gyrus....................."} ,
01536       {-11,-39,-25,2, 34,"Right Orbital Gyrus....................."} ,
01537       { 52, 39,  0,2, 35,"Left  Middle Temporal Gyrus............."} ,
01538       {-52, 39,  0,2, 35,"Right Middle Temporal Gyrus............."} ,
01539       { 51, 17,  0,2, 36,"Left  Superior Temporal Gyrus..........."} ,
01540       {-51, 17,  0,2, 36,"Right Superior Temporal Gyrus..........."} ,
01541       { 37, 82, 27,2, 37,"Left  Superior Occipital Gyrus.........."} ,
01542       {-37, 82, 27,2, 37,"Right Superior Occipital Gyrus.........."} ,
01543       { 44,-24,  2,2, 39,"Left  Inferior Frontal Gyrus............"} ,
01544       {-44,-24,  2,2, 39,"Right Inferior Frontal Gyrus............"} ,
01545       { 13, 83, 18,2, 40,"Left  Cuneus............................"} ,
01546       {-13, 83, 18,2, 40,"Right Cuneus............................"} ,
01547       { 45, 64, 33,2, 41,"Left  Angular Gyrus....................."} ,
01548       {-45, 64, 33,2, 41,"Right Angular Gyrus....................."} ,
01549       { 51, 48, 31,2, 42,"Left  Supramarginal Gyrus..............."} ,
01550       {-51, 48, 31,2, 42,"Right Supramarginal Gyrus..............."} ,
01551       { 10, 11, 34,2, 43,"Left  Cingulate Gyrus..................."} ,
01552       {-10, 11, 34,2, 43,"Right Cingulate Gyrus..................."} ,
01553       { 48, 41, 39,2, 44,"Left  Inferior Parietal Lobule.........."} ,
01554       {-48, 41, 39,2, 44,"Right Inferior Parietal Lobule.........."} ,
01555       { 14, 61, 41,2, 45,"Left  Precuneus........................."} ,
01556       {-14, 61, 41,2, 45,"Right Precuneus........................."} ,
01557       { 27, 59, 53,2, 46,"Left  Superior Parietal Lobule.........."} ,
01558       {-27, 59, 53,2, 46,"Right Superior Parietal Lobule.........."} ,
01559       { 37,-29, 26,2, 47,"Left  Middle Frontal Gyrus.............."} ,
01560       {-37,-29, 26,2, 47,"Right Middle Frontal Gyrus.............."} ,
01561       {  7, 32, 53,2, 48,"Left  Paracentral Lobule................"} ,
01562       { -7, 32, 53,2, 48,"Right Paracentral Lobule................"} ,
01563       { 43, 25, 43,2, 49,"Left  Postcentral Gyrus................."} ,
01564       {-43, 25, 43,2, 49,"Right Postcentral Gyrus................."} ,
01565       { 44,  8, 38,2, 50,"Left  Precentral Gyrus.................."} ,
01566       {-44,  8, 38,2, 50,"Right Precentral Gyrus.................."} ,
01567       { 19,-40, 27,2, 51,"Left  Superior Frontal Gyrus............"} ,
01568       {-19,-40, 27,2, 51,"Right Superior Frontal Gyrus............"} ,
01569       {  9,-24, 35,2, 52,"Left  Medial Frontal Gyrus.............."} ,
01570       { -9,-24, 35,2, 52,"Right Medial Frontal Gyrus.............."} ,
01571       { 22,  1,  2,2, 70,"Left  Lentiform Nucleus................."} ,
01572       {-22,  1,  2,2, 70,"Right Lentiform Nucleus................."} ,
01573       {  4,  3, -9,4, 72,"Left  Hypothalamus......................"} ,
01574       { -4,  3, -9,4, 72,"Right Hypothalamus......................"} ,
01575       {  5, 19, -4,4, 73,"Left  Red Nucleus......................."} ,
01576       { -5, 19, -4,4, 73,"Right Red Nucleus......................."} ,
01577       { 11, 18, -7,4, 74,"Left  Substantia Nigra.................."} ,
01578       {-11, 18, -7,4, 74,"Right Substantia Nigra.................."} ,
01579       { 32,  1,  5,2, 75,"Left  Claustrum........................."} ,
01580       {-32,  1,  5,2, 75,"Right Claustrum........................."} ,
01581       { 12, 19,  8,2, 76,"Left  Thalamus.........................."} ,
01582       {-12, 19,  8,2, 76,"Right Thalamus.........................."} ,
01583       { 11, -7,  9,2, 77,"Left  Caudate..........................."} ,
01584       {-11, -7,  9,2, 77,"Right Caudate..........................."} ,
01585       { 27, 35,  9,4,124,"Left  Caudate Tail......................"} ,
01586       {-27, 35,  9,4,124,"Right Caudate Tail......................"} ,
01587       { 12, -6, 14,4,125,"Left  Caudate Body......................"} ,
01588       {-12, -6, 14,4,125,"Right Caudate Body......................"} ,
01589       {  9,-13,  0,4,126,"Left  Caudate Head......................"} ,
01590       { -9,-13,  0,4,126,"Right Caudate Head......................"} ,
01591       { 11,  6,  9,4,128,"Left  Ventral Anterior Nucleus.........."} ,
01592       {-11,  6,  9,4,128,"Right Ventral Anterior Nucleus.........."} ,
01593       { 15, 20,  4,4,129,"Left  Ventral Posterior Medial Nucleus.."} ,
01594       {-15, 20,  4,4,129,"Right Ventral Posterior Medial Nucleus.."} ,
01595       { 18, 19,  5,4,130,"Left  Ventral Posterior Lateral Nucleus."} ,
01596       {-18, 19,  5,4,130,"Right Ventral Posterior Lateral Nucleus."} ,
01597       {  6, 16,  8,4,131,"Left  Medial Dorsal Nucleus............."} ,
01598       { -6, 16,  8,4,131,"Right Medial Dorsal Nucleus............."} ,
01599       { 12, 20, 16,4,132,"Left  Lateral Dorsal Nucleus............"} ,
01600       {-12, 20, 16,4,132,"Right Lateral Dorsal Nucleus............"} ,
01601       { 16, 27,  8,4,133,"Left  Pulvinar.........................."} ,
01602       {-16, 27,  8,4,133,"Right Pulvinar.........................."} ,
01603       { 17, 20, 14,4,134,"Left  Lateral Posterior Nucleus........."} ,
01604       {-17, 20, 14,4,134,"Right Lateral Posterior Nucleus........."} ,
01605       { 14, 12,  9,4,135,"Left  Ventral Lateral Nucleus..........."} ,
01606       {-14, 12,  9,4,135,"Right Ventral Lateral Nucleus..........."} ,
01607       {  7, 18, 16,4,136,"Left  Midline Nucleus..................."} ,
01608       { -7, 18, 16,4,136,"Right Midline Nucleus..................."} ,
01609       {  8,  8, 12,4,137,"Left  Anterior Nucleus.................."} ,   /* 04 Mar 2002 */
01610       { -8,  8, 12,4,137,"Right Anterior Nucleus.................."} ,
01611       { 11, 20,  2,4,138,"Left  Mammillary Body..................."} ,
01612       {-11, 20,  2,4,138,"Right Mammillary Body..................."} ,
01613       { 15,  4, -2,4,144,"Left  Medial Globus Pallidus............"} ,
01614       {-15,  4, -2,4,144,"Right Medial Globus Pallidus............"} ,
01615       { 20,  5,  0,4,145,"Left  Lateral Globus Pallidus..........."} ,
01616       {-20,  5,  0,4,145,"Right Lateral Globus Pallidus..........."} ,
01617       { 24,  0,  3,4,151,"Left  Putamen..........................."} ,
01618       {-24,  0,  3,4,151,"Right Putamen..........................."} ,
01619       { 12, -8, -8,4,146,"Left  Nucleus Accumbens................."} , /* 20 Aug */
01620       {-12, -8, -8,4,146,"Right Nucleus Accumbens................."} , /* 2001 */
01621       { 17, 24, -2,4,147,"Left  Medial Geniculum Body............."} ,
01622       {-17, 24, -2,4,147,"Right Medial Geniculum Body............."} ,
01623       { 22, 24, -1,4,148,"Left  Lateral Geniculum Body............"} ,
01624       {-22, 24, -1,4,148,"Right Lateral Geniculum Body............"} ,
01625       { 10, 13, -3,4,149,"Left  Subthalamic Nucleus..............."} ,
01626       {-10, 13, -3,4,149,"Right Subthalamic Nucleus..............."} ,
01627       { 53, 19, 50,4, 81,"Left  Brodmann area 1..................."} ,
01628       {-53, 19, 50,4, 81,"Right Brodmann area 1..................."} ,
01629       { 49, 26, 43,4, 82,"Left  Brodmann area 2..................."} ,
01630       {-49, 26, 43,4, 82,"Right Brodmann area 2..................."} ,
01631       { 39, 23, 50,4, 83,"Left  Brodmann area 3..................."} ,
01632       {-39, 23, 50,4, 83,"Right Brodmann area 3..................."} ,
01633       { 39, 18, 49,4, 84,"Left  Brodmann area 4..................."} ,
01634       {-39, 18, 49,4, 84,"Right Brodmann area 4..................."} ,
01635       { 16, 40, 57,4, 85,"Left  Brodmann area 5..................."} ,
01636       {-16, 40, 57,4, 85,"Right Brodmann area 5..................."} ,
01637       { 29,  0, 50,4, 86,"Left  Brodmann area 6..................."} ,
01638       {-29,  0, 50,4, 86,"Right Brodmann area 6..................."} ,
01639       { 16, 60, 48,4, 87,"Left  Brodmann area 7..................."} ,
01640       {-16, 60, 48,4, 87,"Right Brodmann area 7..................."} ,
01641       { 24,-30, 44,4, 88,"Left  Brodmann area 8..................."} ,
01642       {-24,-30, 44,4, 88,"Right Brodmann area 8..................."} ,
01643       { 32,-33, 30,4, 89,"Left  Brodmann area 9..................."} ,
01644       {-32,-33, 30,4, 89,"Right Brodmann area 9..................."} ,
01645       { 24,-56,  6,4, 90,"Left  Brodmann area 10.................."} ,
01646       {-24,-56,  6,4, 90,"Right Brodmann area 10.................."} ,
01647       { 17,-43,-18,4, 91,"Left  Brodmann area 11.................."} ,
01648       {-17,-43,-18,4, 91,"Right Brodmann area 11.................."} ,
01649       { 39,  4,  8,4, 93,"Left  Brodmann area 13.................."} ,
01650       {-39,  4,  8,4, 93,"Right Brodmann area 13.................."} ,
01651       { 10, 88,  5,4, 94,"Left  Brodmann area 17.................."} ,
01652       {-10, 88,  5,4, 94,"Right Brodmann area 17.................."} ,
01653       { 19, 85,  4,4, 95,"Left  Brodmann area 18.................."} ,
01654       {-19, 85,  4,4, 95,"Right Brodmann area 18.................."} ,
01655       { 34, 80, 18,4, 96,"Left  Brodmann area 19.................."} ,
01656       {-34, 80, 18,4, 96,"Right Brodmann area 19.................."} ,
01657       { 47, 21,-23,4, 97,"Left  Brodmann area 20.................."} ,
01658       {-47, 21,-23,4, 97,"Right Brodmann area 20.................."} ,
01659       { 58, 18,-10,4, 98,"Left  Brodmann area 21.................."} ,
01660       {-58, 18,-10,4, 98,"Right Brodmann area 21.................."} ,
01661       { 57, 23,  5,4, 99,"Left  Brodmann area 22.................."} ,
01662       {-57, 23,  5,4, 99,"Right Brodmann area 22.................."} ,
01663       {  4, 37, 24,4,100,"Left  Brodmann area 23.................."} ,
01664       { -4, 37, 24,4,100,"Right Brodmann area 23.................."} ,
01665       {  6, -6, 30,4,101,"Left  Brodmann area 24.................."} ,
01666       { -6, -6, 30,4,101,"Right Brodmann area 24.................."} ,
01667       {  6,-15,-13,4,102,"Left  Brodmann area 25.................."} ,
01668       { -6,-15,-13,4,102,"Right Brodmann area 25.................."} ,
01669       { 15, 35,  0,4,103,"Left  Brodmann area 27.................."} ,
01670       {-15, 35,  0,4,103,"Right Brodmann area 27.................."} ,
01671       { 22, -2,-24,4,104,"Left  Brodmann area 28.................."} ,
01672       {-22, -2,-24,4,104,"Right Brodmann area 28.................."} ,
01673       {  6, 48, 11,4,105,"Left  Brodmann area 29.................."} ,
01674       { -6, 48, 11,4,105,"Right Brodmann area 29.................."} ,
01675       { 13, 62, 10,4,106,"Left  Brodmann area 30.................."} ,
01676       {-13, 62, 10,4,106,"Right Brodmann area 30.................."} ,
01677       {  9, 47, 32,4,107,"Left  Brodmann area 31.................."} ,
01678       { -9, 47, 32,4,107,"Right Brodmann area 31.................."} ,
01679       {  8,-24, 30,4,108,"Left  Brodmann area 32.................."} ,
01680       { -8,-24, 30,4,108,"Right Brodmann area 32.................."} ,
01681       {  5,-12, 24,4,109,"Left  Brodmann area 33.................."} ,
01682       { -5,-12, 24,4,109,"Right Brodmann area 33.................."} ,
01683       { 18,  0,-16,4,110,"Left  Brodmann area 34.................."} ,
01684       {-18,  0,-16,4,110,"Right Brodmann area 34.................."} ,
01685       { 23, 25,-15,4,111,"Left  Brodmann area 35.................."} ,
01686       {-23, 25,-15,4,111,"Right Brodmann area 35.................."} ,
01687       { 33, 33,-15,4,112,"Left  Brodmann area 36.................."} ,
01688       {-33, 33,-15,4,112,"Right Brodmann area 36.................."} ,
01689       { 48, 55, -7,4,113,"Left  Brodmann area 37.................."} ,
01690       {-48, 55, -7,4,113,"Right Brodmann area 37.................."} ,
01691       { 41,-12,-23,4,114,"Left  Brodmann area 38.................."} ,
01692       {-41,-12,-23,4,114,"Right Brodmann area 38.................."} ,
01693       { 48, 64, 28,4,115,"Left  Brodmann area 39.................."} ,
01694       {-48, 64, 28,4,115,"Right Brodmann area 39.................."} ,
01695       { 51, 40, 38,4,116,"Left  Brodmann area 40.................."} ,
01696       {-51, 40, 38,4,116,"Right Brodmann area 40.................."} ,
01697       { 47, 26, 11,4,117,"Left  Brodmann area 41.................."} ,
01698       {-47, 26, 11,4,117,"Right Brodmann area 41.................."} ,
01699       { 63, 22, 12,4,118,"Left  Brodmann area 42.................."} ,
01700       {-63, 22, 12,4,118,"Right Brodmann area 42.................."} ,
01701       { 58, 10, 16,4,119,"Left  Brodmann area 43.................."} ,
01702       {-58, 10, 16,4,119,"Right Brodmann area 43.................."} ,
01703       { 53,-11, 12,4,120,"Left  Brodmann area 44.................."} ,
01704       {-53,-11, 12,4,120,"Right Brodmann area 44.................."} ,
01705       { 54,-23, 10,4,121,"Left  Brodmann area 45.................."} ,
01706       {-54,-23, 10,4,121,"Right Brodmann area 45.................."} ,
01707       { 50,-38, 16,4,122,"Left  Brodmann area 46.................."} ,
01708       {-50,-38, 16,4,122,"Right Brodmann area 46.................."} ,
01709       { 38,-24,-11,4,123,"Left  Brodmann area 47.................."} ,
01710       {-38,-24,-11,4,123,"Right Brodmann area 47.................."} ,
01711       {  2, 65,-32,2, 53,"Left  Uvula of Vermis..................."} ,
01712       { -2, 65,-32,2, 53,"Right Uvula of Vermis..................."} ,
01713       {  2, 73,-28,2, 54,"Left  Pyramis of Vermis................."} ,
01714       { -2, 73,-28,2, 54,"Right Pyramis of Vermis................."} ,
01715       {  2, 71,-24,2, 55,"Left  Tuber of Vermis..................."} ,
01716       { -2, 71,-24,2, 55,"Right Tuber of Vermis..................."} ,
01717       {  2, 72,-17,2, 56,"Left  Declive of Vermis................."} ,
01718       { -2, 72,-17,2, 56,"Right Declive of Vermis................."} ,
01719       {  3, 63, -3,2, 57,"Left  Culmen of Vermis.................."} ,
01720       { -3, 63, -3,2, 57,"Right Culmen of Vermis.................."} ,
01721       { 28, 51,-36,2, 58,"Left  Cerebellar Tonsil................."} ,
01722       {-28, 51,-36,2, 58,"Right Cerebellar Tonsil................."} ,
01723       { 29, 71,-38,2, 59,"Left  Inferior Semi-Lunar Lobule........"} ,
01724       {-29, 71,-38,2, 59,"Right Inferior Semi-Lunar Lobule........"} ,
01725       {  7, 54,-20,2, 60,"Left  Fastigium........................."} ,
01726       { -7, 54,-20,2, 60,"Right Fastigium........................."} ,
01727       {  7, 55,-27,2, 61,"Left  Nodule............................"} ,
01728       { -7, 55,-27,2, 61,"Right Nodule............................"} ,
01729       { 21, 76,-26,2, 62,"Left  Uvula............................."} ,
01730       {-21, 76,-26,2, 62,"Right Uvula............................."} ,
01731       { 27, 74,-30,2, 63,"Left  Pyramis..........................."} ,
01732       {-27, 74,-30,2, 63,"Right Pyramis..........................."} ,
01733       { 20, 46,-16,2, 66,"Left  Culmen............................"} ,
01734       {-20, 46,-16,2, 66,"Right Culmen............................"} ,
01735       { 26, 69,-17,2, 65,"Left  Declive..........................."} ,
01736       {-26, 69,-17,2, 65,"Right Declive..........................."} ,
01737       { 14, 54,-23,4,127,"Left  Dentate..........................."} ,
01738       {-14, 54,-23,4,127,"Right Dentate..........................."} ,
01739       { 44, 71,-27,2, 64,"Left  Tuber............................."} ,
01740       {-44, 71,-27,2, 64,"Right Tuber............................."} ,
01741       {  4, 45,-13,2, 67,"Left  Cerebellar Lingual................"} ,
01742       { -4, 45,-13,2, 67,"Right Cerebellar Lingual................"}
01743    } ;
01744 
01745    char * TTO_labels[TTO_COUNT] ;
01746 
01747    int TTO_labeled = 0 ;  /* flag that labels not yet computed */
01748    int TTO_current = 0 ;  /* last chosen TTO */
01749 #else
01750    extern TTO_point TTO_list[TTO_COUNT] ;
01751    extern char * TTO_labels[TTO_COUNT] ;
01752    extern int TTO_labeled ;
01753    extern int TTO_current ;
01754 #endif
01755 
01756 extern void AFNI_talto_CB( Widget, XtPointer, MCW_choose_cbs * ) ;
01757 
01758 #define CAN_TALTO(q3d)                                           \
01759  ( (q3d)->vinfo->view_type == VIEW_TALAIRACH_TYPE ||             \
01760    AFNI_can_transform_vector(                                    \
01761       (q3d)->anat_dset[VIEW_TALAIRACH_TYPE] , (q3d)->anat_now ) )
01762 
01763 extern char * AFNI_ttatlas_query( Three_D_View * ) ; /* 10 Jul 2001 */
01764 extern void AFNI_pop_whereami_kill( Three_D_View * ) ;
01765 
01766 extern void TTRR_popup( Three_D_View * ) ;  /* 12 Jul 2001 */
01767 
01768 typedef struct {
01769    int num , meth , hemi ;
01770    byte *ttbrik ;
01771    byte *ttval  ;
01772    byte *ttovc  ;
01773 } TTRR_params ;
01774 
01775 #define TTRR_METH_OFF 0
01776 #define TTRR_METH_GAF 1
01777 #define TTRR_METH_AGF 2
01778 #define TTRR_METH_FGA 3
01779 #define TTRR_METH_FAG 4
01780 
01781 #define TTRR_HEMI_LEFT  0
01782 #define TTRR_HEMI_RIGHT 1
01783 #define TTRR_HEMI_BOTH  2
01784 
01785 extern TTRR_params * TTRR_get_params(void) ;
01786 
01787 /*-------------------------------------*/
01788 /*--- driving AFNI programmatically ---*/
01789 
01790 extern int AFNI_driver( char *cmd ) ;                    /* 07 Nov 2001 */
01791 extern int AFNI_controller_code_to_index( char *code ) ;
01792 
01793 /*-------------------------------------------------------*/
01794 /*--------------  registration of functions -------------*/
01795 
01796 /* sample 0D transform functions */
01797 
01798 extern void log10_func( int, float * ) ;
01799 extern void ssqrt_func( int, float * ) ;
01800 
01801 /* sample 1D transform functions */
01802 
01803 extern void osfilt3_func( int, double,double, float * ) ;
01804 extern void median3_func( int, double,double, float * ) ;
01805 extern void absfft_func ( int, double,double, float * ) ;
01806 
01807 /* 31 Jan 2002: sample slice_proj transform functions */
01808 
01809 extern float max_proj ( int, float * ) ;
01810 extern float min_proj ( int, float * ) ;
01811 extern float mean_proj( int, float * ) ;
01812 
01813 extern float extreme_proj( int, float * ) ;  /* 02 Feb 2002 */
01814 
01815 /* sample 2D transform functions */
01816 
01817 extern void median9_box_func ( int, int, double,double, float * ) ;
01818 extern void winsor9_box_func ( int, int, double,double, float * ) ;
01819 extern void osfilt9_box_func ( int, int, double,double, float * ) ;
01820 extern void fft2D_func       ( int, int, double,double, float * ) ;
01821 extern void median21_box_func( int, int, double,double, float * ) ;
01822 extern void winsor21_box_func( int, int, double,double, float * ) ;
01823 
01824 extern void AFNI_register_nD_function( int, char *, generic_func *, int ) ;
01825 extern void AFNI_register_nD_func_init( int nd , generic_func *fin ) ;
01826 
01827 #define AFNI_register_0D_function(cc,ff) \
01828    AFNI_register_nD_function(0,(char *)(cc),(generic_func *)(ff),0)
01829 #define AFNI_register_1D_function(cc,ff) \
01830    AFNI_register_nD_function(1,(char *)(cc),(generic_func *)(ff),0)
01831 #define AFNI_register_2D_function(cc,ff) \
01832    AFNI_register_nD_function(2,(char *)(cc),(generic_func *)(ff),0)
01833 
01834 #define AFNI_register_slice_proj(cc,ff)  \
01835    AFNI_register_nD_function(-1,(char *)(cc),(generic_func *)(ff),0)   /* 31 Jan 2002 */
01836 
01837 #define AFNI_register_1D_funcstr(cc,ff)  \
01838    AFNI_register_nD_function(1,(char *)(cc),(generic_func *)(ff),RETURNS_STRING)
01839 
01840 extern void AFNI_store_dset_index(int,int) ;  /* 18 May 2000 */
01841 extern int  AFNI_needs_dset_ijk(void) ;
01842 extern int  AFNI_needs_dset_tin(void) ;
01843 
01844 /*-----------------------------------------------------------*/
01845 /*-----------------  initializations  -----------------------*/
01846 
01847 /*** June 1995: modified to allow input via XGetDefault ***/
01848 
01849 #define DEFAULT_NGRAY   80
01850 #define DEFAULT_GAMMA   1.0
01851 
01852 #define DEFAULT_NCOLOVR 40
01853 #define MAX_NCOLOVR     199
01854 
01855 /** color definitions and their labels (for 'choosers') **/
01856 
01857 #define DEFAULT_CROSSHAIR_COLOR  13   /* note indices start at 1! */
01858 #define DEFAULT_PRIMARY_COLOR    17   /* (0 index is "no color")  */
01859 #define DEFAULT_SECONDARY_COLOR  14
01860 
01861 #define DEFAULT_MARK_SIZE     8
01862 #define DEFAULT_MARK_GAP      3
01863 #define DEFAULT_CROSSHAIR_GAP 5
01864 
01865 /** initialization values (static values are used in afni.c only) **/
01866 
01867 void AFNI_load_defaults( Widget w ) ;
01868 
01869 #ifdef MAIN
01870 
01871 /** default colors **/
01872 
01873 static char * INIT_def_colovr[DEFAULT_NCOLOVR] = {
01874    "#ffff00" , "#ffcc00"   , "#ff9900"  , "#ff6900" , "#ff4400" , "#ff0000" ,
01875    "#0000ff" , "#0044ff"   , "#0069ff"  , "#0099ff" , "#00ccff" , "#00ffff" ,
01876    "green"   , "limegreen" , "violet"   , "hotpink" ,
01877    "white"   , "#dddddd"   , "#bbbbbb"  , "black"   ,
01878 
01879    "#cc1033" , "#992066"   , "#663199"  , "#3341cc" ,  /* RGB cycle */
01880    "#0051ff" , "#0074cc"   , "#009799"  , "#00b966" ,  /* 10 Jun 2002 */
01881    "#00dc33" , "#00ff00"   , "#33ff00"  , "#66ff00" ,
01882    "#99ff00" , "#ccff00"   , "#ffff00"  , "#ffcc00" ,
01883    "#ff9900" , "#ff6600"   , "#ff3300"  , "#ff0000"
01884 } ;
01885 
01886 #define RGBCYC_COUNT  20  /* 10 Jun 2002: number in RGB cycle */
01887 #define RGBCYC_FIRST  20  /*              index of first one */
01888 
01889 static char * INIT_def_labovr[DEFAULT_NCOLOVR] = {
01890    "yellow" , "yell-oran" , "oran-yell" , "orange"   , "oran-red" , "red"   ,
01891    "dk-blue", "blue"      , "lt-blue1"  , "lt-blue2" , "blue-cyan", "cyan"  ,
01892    "green"  , "limegreen" , "violet"    , "hotpink"  ,
01893    "white"  , "gry-dd"    , "gry-bb"    , "black"    ,
01894 
01895    "rbgyr20_01" , "rbgyr20_02" , "rbgyr20_03" , "rbgyr20_04" , /* RBG cycle */
01896    "rbgyr20_05" , "rbgyr20_06" , "rbgyr20_07" , "rbgyr20_08" , /* 10 Jun 2002 */
01897    "rbgyr20_09" , "rbgyr20_10" , "rbgyr20_11" , "rbgyr20_12" ,
01898    "rbgyr20_13" , "rbgyr20_14" , "rbgyr20_15" , "rbgyr20_16" ,
01899    "rbgyr20_17" , "rbgyr20_18" , "rbgyr20_19" , "rbgyr20_20"
01900 } ;
01901 
01902 /** actual colors (from defaults above, or from X11 resources) **/
01903 
01904 char * INIT_colovr[MAX_NCOLOVR] ;
01905 char * INIT_labovr[MAX_NCOLOVR] ;
01906 
01907 /** misc constants **/
01908 
01909 int INIT_ngray           = DEFAULT_NGRAY ,
01910     INIT_ncolovr         = DEFAULT_NCOLOVR ,
01911     INIT_crosshair_color = DEFAULT_CROSSHAIR_COLOR ,
01912     INIT_marks1_color    = DEFAULT_PRIMARY_COLOR ,
01913     INIT_marks2_color    = DEFAULT_SECONDARY_COLOR ,
01914     INIT_marks_size      = DEFAULT_MARK_SIZE ,
01915     INIT_marks_gap       = DEFAULT_MARK_GAP ,
01916     INIT_crosshair_gap   = DEFAULT_CROSSHAIR_GAP ,
01917     INIT_purge           = 0 ,
01918     INIT_posfunc         = 0 ,
01919     INIT_bigscroll       = 5 ,
01920     INIT_resam_anat      = RESAM_LINEAR_TYPE ,
01921     INIT_resam_func      = RESAM_NN_TYPE ,
01922     INIT_resam_thr       = RESAM_NN_TYPE   ;
01923 
01924 float INIT_gamma         = DEFAULT_GAMMA ,
01925       INIT_resam_vox     = DEFAULT_RESAMPLE_VOX ;
01926 
01927 int INIT_ignore           = 0 ;
01928 int INIT_tlrc_big         = 1 ;
01929 int INIT_montage_periodic = 1 ;
01930 int INIT_fim_polort       = 1 ; /* 30 May 1999 */
01931 
01932 #else
01933 
01934 extern int INIT_ngray           ,
01935            INIT_ncolovr         ,
01936            INIT_crosshair_color ,
01937            INIT_marks1_color    ,
01938            INIT_marks2_color    ,
01939            INIT_marks_size      ,
01940            INIT_marks_gap       ,
01941            INIT_crosshair_gap   ,
01942            INIT_purge           ,
01943            INIT_posfunc         ,
01944            INIT_bigscroll       ,
01945            INIT_resam_anat      ,
01946            INIT_resam_func      ,
01947            INIT_resam_thr        ;
01948 
01949 extern float INIT_gamma         ,
01950              INIT_resam_vox      ;
01951 
01952 extern int INIT_ignore ;
01953 extern int INIT_tlrc_big ;
01954 extern int INIT_montage_periodic ;
01955 
01956 extern int INIT_fim_polort ;
01957 
01958 extern char * INIT_colovr[] ;
01959 extern char * INIT_labovr[] ;
01960 
01961 #endif /* MAIN */
01962 
01963 /**********************************************/
01964 /***** Setup constants for the color pbar *****/
01965 
01966 extern void AFNI_setup_inten_pbar( Three_D_View * ) ;
01967 
01968 #define DEFAULT_PANES_POS  8
01969 #define DEFAULT_PANES_SGN  9
01970 
01971 #ifdef MAIN
01972 int INIT_panes_pos  = DEFAULT_PANES_POS ,
01973     INIT_panes_sgn  = DEFAULT_PANES_SGN ,
01974     INIT_panes_hide = 0 ;
01975 
01976 #define NPANE_INIT 10
01977 
01978 float INIT_pval_pos[NPANE_MAX+1][NPANE_MAX+1] = {
01979   { 0 },                                                                        /* 0 panes */
01980   { 1.00, 0.00 },                                                               /* 1 */
01981   { 1.00, 0.50,  0.00 },                                                        /* 2 */
01982   { 1.00, 0.67,  0.33,  0.00 },                                                 /* 3 */
01983   { 1.00, 0.75,  0.50,  0.25,  0.00 },                                          /* 4 */
01984   { 1.00, 0.80,  0.60,  0.40,  0.20,  0.00 },                                   /* 5 */
01985   { 1.00, 0.84,  0.67,  0.50,  0.33,  0.16,  0.00 },                            /* 6 */
01986   { 1.00, 0.90,  0.75,  0.60,  0.45,  0.30,  0.15,  0.00 },                     /* 7 */
01987   { 1.00, 0.80,  0.70,  0.60,  0.50,  0.40,  0.30,  0.15,  0.00 },              /* 8 */
01988   { 1.00, 0.90,  0.80,  0.70,  0.60,  0.50,  0.25,  0.15,  0.05,  0.00 },       /* 9 */
01989   { 1.00, 0.90,  0.80,  0.70,  0.60,  0.50,  0.40,  0.30,  0.20,  0.10,  0.00 } /*10 */
01990 } ;
01991 
01992 int INIT_ovin_pos[NPANE_MAX+1][NPANE_MAX+1] = {
01993   { 0 } ,                                    /* 0 panes */
01994   { 1 } ,                                    /* 1 */
01995   { 1 , 0 } ,                                /* 2 */
01996   { 1 , 6 , 0 } ,                            /* 3 */
01997   { 1 , 4 , 6 , 0 } ,                        /* 4 */
01998   { 1 , 3 , 5 , 6 , 0 } ,                    /* 5 */
01999   { 1 , 2 , 3 , 5 , 6 , 0 } ,                /* 6 */
02000   { 1 , 2 , 3 , 4 , 5 , 6 , 0 } ,            /* 7 */
02001   { 1 , 2 , 3 , 4 , 5 , 6 ,16 , 0 } ,        /* 8 */
02002   { 1 , 2 , 3 , 4 , 5 , 6 ,16 ,15 , 0 } ,    /* 9 */
02003   { 1 , 2 , 3 , 5 , 5 , 6 ,16 ,15 , 7 , 0 }  /*10 */
02004 } ;
02005 
02006 float INIT_pval_sgn[NPANE_MAX+1][NPANE_MAX+1] = {
02007   { 0 },                                                                        /* 0 panes */
02008   { 1.00,-1.00 },                                                               /* 1 */
02009   { 1.00, 0.00, -1.00 },                                                        /* 2 */
02010   { 1.00, 0.05, -0.05, -1.00 },                                                 /* 3 */
02011   { 1.00, 0.50,  0.00, -0.50, -1.00 },                                          /* 4 */
02012   { 1.00, 0.50,  0.05, -0.05, -0.50, -1.00 },                                   /* 5 */
02013   { 1.00, 0.66,  0.33,  0.00, -0.33, -0.66, -1.00 },                            /* 6 */
02014   { 1.00, 0.66,  0.33,  0.05, -0.05, -0.33, -0.66, -1.00 },                     /* 7 */
02015   { 1.00, 0.75,  0.50,  0.25,  0.00, -0.25, -0.50, -0.75, -1.00 },              /* 8 */
02016   { 1.00, 0.75,  0.50,  0.25,  0.05, -0.05, -0.25, -0.50, -0.75, -1.00 },       /* 9 */
02017   { 1.00, 0.80,  0.60,  0.40,  0.20,  0.00, -0.20, -0.40, -0.60, -0.80, -1.00 } /*10 */
02018 } ;
02019 
02020 int INIT_ovin_sgn[NPANE_MAX+1][NPANE_MAX+1] = {
02021   { 0 } ,
02022   { 1 } ,
02023   { 1 , 11 } ,
02024   { 1 , 0 , 11 } ,
02025   { 1 , 4 ,  8 , 11 } ,
02026   { 1 , 4 ,  0 ,  8 , 11 } ,
02027   { 1 , 3 ,  5 ,  7 ,  9 , 11 } ,
02028   { 1 , 3 ,  5 ,  0 ,  7 ,  9 , 11 } ,
02029   { 1 , 2 ,  4 ,  5 ,  8 ,  9 , 10 , 11 } ,
02030   { 1 , 2 ,  4 ,  5 ,  0 ,  8 ,  9 , 10 , 11 } ,
02031   { 1 , 2 ,  3 ,  4 ,  5 ,  7 ,  8 ,  9 , 10 , 11 }
02032 } ;
02033 #else
02034 extern int INIT_panes_pos , INIT_panes_sgn , INIT_panes_hide ;
02035 
02036 extern float INIT_pval_pos[NPANE_MAX+1][NPANE_MAX+1] ;
02037 extern int   INIT_ovin_pos[NPANE_MAX+1][NPANE_MAX+1] ;
02038 
02039 extern float INIT_pval_sgn[NPANE_MAX+1][NPANE_MAX+1] ;
02040 extern int   INIT_ovin_sgn[NPANE_MAX+1][NPANE_MAX+1] ;
02041 #endif
02042 
02043 #endif /* _AFNI_HEADER_ */
 

Powered by Plone

This site conforms to the following standards: