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 File Reference

#include "mrilib.h"
#include "imseq.h"
#include "xutil.h"
#include "pbar.h"
#include "afni_graph.h"
#include "afni_pcor.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <Xm/Separator.h>
#include <Xm/Display.h>
#include <Xm/CascadeB.h>
#include "logo.h"
#include "AFNI_label.h"
#include "afni_plugin.h"
#include "afni_setup.h"
#include "afni_warp.h"
#include "sonnets.h"

Go to the source code of this file.


Data Structures

struct  AF_options
struct  AFNI_datamode_widgets
struct  AFNI_fimmer_type
struct  AFNI_function_widgets
struct  AFNI_imaging_widgets
struct  AFNI_library_type
struct  AFNI_marks_widgets
struct  AFNI_ovtemplate
struct  AFNI_program_widgets
struct  AFNI_receiver
struct  AFNI_surface_widgets
struct  AFNI_view_info
struct  AFNI_viewing_widgets
struct  AFNI_widget_set
struct  FIMdata
struct  MCW_interruptables
struct  Three_D_View
struct  TTO_point
struct  TTRR_params

Defines

#define WARP_4D
#define UNDERLAY_ANAT   0
#define UNDERLAY_ALLFUNC   1
#define UNDERLAY_THRFUNC   2
#define UNDERLAY_ANAT_BVAL   (1 << UNDERLAY_ANAT )
#define UNDERLAY_ALLFUNC_BVAL   (1 << UNDERLAY_ALLFUNC)
#define UNDERLAY_THRFUNC_BVAL   (1 << UNDERLAY_THRFUNC)
#define LAST_UNDERLAY_TYPE   1
#define ISFUNC_UNDERLAY(uu)   ((uu)==UNDERLAY_ALLFUNC||(uu)==UNDERLAY_THRFUNC)
#define DEFAULT_FIM_SCALE   10000
#define DMODE_BRICK   0
#define DMODE_WOD   1
#define DMODE_BRICK_BVAL   (1 << DMODE_BRICK)
#define DMODE_WOD_BVAL   (1 << DMODE_WOD )
#define USE_SONNETS
#define WANT_RWCOX_IMAGE
#define USE_SKIT
#define TOPSIZE   2048
#define VERSION   AFNI_VERSION_LABEL
#define RESET_AFNI_QUIT(iqqq)   { AFNI_quit_CB(NULL,(XtPointer)(iqqq),NULL) ; RESET_sonnet() ; }
#define CLEAR_MONTAGE(iq, bb)
#define ORIMASK_LR   ((1<<ORI_R2L_TYPE) | (1<<ORI_L2R_TYPE))
#define ORIMASK_AP   ((1<<ORI_P2A_TYPE) | (1<<ORI_A2P_TYPE))
#define ORIMASK_IS   ((1<<ORI_I2S_TYPE) | (1<<ORI_S2I_TYPE))
#define ORIMASK_LR_AP   (ORIMASK_LR | ORIMASK_AP)
#define ORIMASK_LR_IS   (ORIMASK_LR | ORIMASK_IS)
#define ORIMASK_AP_IS   (ORIMASK_AP | ORIMASK_IS)
#define ORIMASK_ALL   (ORIMASK_LR | ORIMASK_AP | ORIMASK_IS)
#define AXIAL   1
#define SAGITTAL   2
#define CORONAL   3
#define SAVE_VPT(iqq)
#define WARPED_VIEW(vvv)   ((vvv)+1)
#define ISVALID_VIEW(vvv)   ((vvv) >= FIRST_VIEW_TYPE && (vvv) <= LAST_VIEW_TYPE)
#define MAXOVSIZE   19
#define MAXOVPIX   (MAXOVSIZE*(MAXOVSIZE-1))
#define BKGD_COUNT   3
#define INIT_BKGD_LAB(iq)
#define AFNI_XHAIRS_OFF   0
#define AFNI_XHAIRS_SINGLE   1
#define AFNI_XHAIRS_MULTI   2
#define AFNI_XHAIRS_LR_AP   3
#define AFNI_XHAIRS_LR_IS   4
#define AFNI_XHAIRS_AP_IS   5
#define AFNI_XHAIRS_LR   6
#define AFNI_XHAIRS_AP   7
#define AFNI_XHAIRS_IS   8
#define AFNI_XHAIRS_LASTOPTION   8
#define OPEN_PANEL(iq, panel)
#define CLOSE_PANEL(iq, panel)
#define MARKS_MAXPOP   (MARKS_MAXNUM+10)
#define THR_PVAL_LABEL_NONE   "[N/A]"
#define THR_TOP_EXPON   4
#define THR_FACTOR   0.0001
#define THR_TOP_VALUE   9999.0
#define PBAR_MODEBUT   0
#define PBAR_MODEPOS   (1 << PBAR_MODEBUT)
#define RANGE_AUTOBUT   0
#define RANGE_AUTOVAL   (1 << RANGE_AUTOBUT)
#define FIX_SCALE_SIZE(iqqq)
#define HIDE_SCALE(iqqq)   XtUnmanageChild((iqqq)->vwid->func->thr_scale)
#define FIX_SCALE_VALUE(iqqq)
#define USE_HIDDEN
#define PTS_READ_IJK   7
#define PTS_READ_XYZ   8
#define PTS_WRITE_IJK   9
#define PTS_WRITE_XYZ   10
#define PTS_SET_COLOR   11
#define PICTURE_ON(im)
#define PICTURE_OFF(im)
#define PICTURE_SET(im, px)
#define FIM_ALPHA_MASK   1
#define FIM_BEST_MASK   2
#define FIM_PERC_MASK   4
#define FIM_BASE_MASK   8
#define FIM_CORR_MASK   16
#define FIM_PAVE_MASK   32
#define FIM_AVER_MASK   64
#define FIM_PTOP_MASK   128
#define FIM_TOPL_MASK   256
#define FIM_SIGM_MASK   512
#define FIM_DEFAULT_MASK   (1 | 2 | 4 | 16)
#define FIM_NUM_OPTS   10
#define MAX_POLORT   3
#define CLEAR_FIMDATA(iq)
#define USABLE_FIMDATA(iq)
#define ALLOW_COMPUTE_FIM(iq)
#define AFNI_NODATA_VIEW   100
#define AFNI_IMAGES_VIEW   101
#define AFNI_3DDATA_VIEW   102
#define IM0D_VALID(ii)   ((ii)!=NULL && (ii)->type==AFNI_NODATA_VIEW)
#define IM3D_VALID(ii)
#define IM3D_OPEN(ii)   (IM3D_VALID(ii) && (ii)->opened)
#define ISVALID_IM3D(ii)   IM3D_VALID(ii)
#define AFNI_IGNORE_NOTHING   0
#define AFNI_IGNORE_REDRAWS   1
#define AFNI_IGNORE_EVERYTHING   2
#define LOAD_ANAT_VIEW(iq)
#define LOAD_FUNC_VIEW(iq)
#define LOAD_DSET_VIEWS(iq)   do{ LOAD_ANAT_VIEW(iq) ; LOAD_FUNC_VIEW(iq) ; } while(0)
#define OPEN_CONTROLLER(iq)
#define CLOSE_CONTROLLER(iq)   ( AFNI_closedown_3dview(iq), XtUnrealizeWidget((iq)->vwid->top_shell), (iq)->opened = 0 )
#define PARENTIZE(ds, par)   if( ISVALID_3DIM_DATASET((ds)) ) (ds)->parent = (XtPointer) (par)
#define VIEWER_TO_GRAPHER(iq, ss)
#define GRAPHER_TO_VIEWER(iq, gg)
#define UNDERLAY_TO_VIEWER(iq, bb)
#define UNDERLAY_TO_GRAPHER(iq, bb)
#define UNDERLAY_TO_OVERLAY(iq, bb)
#define MAX_CONTROLLERS   10
#define FIM_THR   (0.01*GLOBAL_library.fim_bkthr_perc)
#define SET_FIM_bkthr(v)   (GLOBAL_library.fim_bkthr_perc = (v))
#define DISABLE_LOCK   (GLOBAL_library.ignore_lock=1)
#define ENABLE_LOCK   (GLOBAL_library.ignore_lock=0)
#define BEEPIT   XBell(GLOBAL_library.dc->display,100)
#define ALLOW_real_time   GLOBAL_argopt.allow_rt
#define ELIDE_quality   GLOBAL_argopt.elide_quality
#define GPT   GLOBAL_library.gpt
#define NO_frivolities   GLOBAL_argopt.no_frivolities
#define SESSTRAIL   GLOBAL_library.sesstrail
#define AFNI_VERBOSE   (!GLOBAL_argopt.quiet)
#define THE_DISPLAY   (GLOBAL_library.dc->display)
#define THE_TOPSHELL   (GLOBAL_library.controllers[0]->vwid->top_shell)
#define SUMA_ENABLED   GLOBAL_argopt.enable_suma
#define DOING_REALTIME_WORK   (GLOBAL_library.interruptables.windows != NULL)
#define UNDUMMYIZE
#define AFNI_run_script(ss)   AFNI_startup_script_CB((XtPointer)(ss),NULL)
#define AFNI_SEE_FUNC_ON(iq)
#define AFNI_SEE_FUNC_OFF(iq)
#define AFNI_SETUP_FUNC_ON(iq)
#define AFNI_SWITCH_VIEW(iq, vv)
#define AFNI_SETUP_VIEW(iq, vv)
#define REDISPLAY_OPTIONAL   0
#define REDISPLAY_OVERLAY   1
#define REDISPLAY_ALL   2
#define HINTIZE_pbar(iq)
#define AFNI_DEFAULT_CURSOR   888
#define AFNI_WAITING_CURSOR   999
#define SHOW_AFNI_PAUSE   AFNI_set_cursor( AFNI_WAITING_CURSOR )
#define SHOW_AFNI_READY   AFNI_set_cursor( AFNI_DEFAULT_CURSOR )
#define RECEIVE_DRAWING_MASK   1
#define RECEIVE_VIEWPOINT_MASK   2
#define RECEIVE_OVERLAY_MASK   4
#define RECEIVE_DRAWNOTICE_MASK   8
#define RECEIVE_DSETCHANGE_MASK   16
#define RECEIVE_TTATLAS_MASK   32
#define RECEIVE_REDISPLAY_MASK   64
#define RECEIVE_FUNCDISPLAY_MASK   128
#define RECEIVE_TIMEINDEX_MASK   256
#define RECEIVE_ALL_MASK   ( 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 )
#define DRAWING_LINES   BUTTON2_OPENPOLY
#define DRAWING_FILL   BUTTON2_CLOSEDPOLY
#define DRAWING_POINTS   BUTTON2_POINTS
#define DRAWING_NODRAW   BUTTON2_NODRAW
#define DRAWING_OVCINDEX   11
#define DRAWING_X11PIXEL   12
#define DRAWING_STARTUP   18
#define DRAWING_SHUTDOWN   19
#define DRAWING_LINEWIDTH   13
#define VIEWPOINT_STARTUP   28
#define VIEWPOINT_SHUTDOWN   29
#define REDISPLAY_STARTUP   78
#define REDISPLAY_SHUTDOWN   79
#define FUNCDISPLAY_STARTUP   88
#define FUNCDISPLAY_SHUTDOWN   89
#define OVERLAY_STARTUP   38
#define OVERLAY_SHUTDOWN   39
#define DRAWNOTICE_STARTUP   48
#define DRAWNOTICE_SHUTDOWN   49
#define DSETCHANGE_STARTUP   58
#define DSETCHANGE_SHUTDOWN   59
#define TTATLAS_STARTUP   68
#define TTATLAS_SHUTDOWN   69
#define TIMEINDEX_STARTUP   98
#define TIMEINDEX_SHUTDOWN   99
#define EVERYTHING_SHUTDOWN   666
#define RECEIVE_POINTS   101
#define RECEIVE_VIEWPOINT   102
#define RECEIVE_OVERLAY   103
#define RECEIVE_CLOSURE   104
#define RECEIVE_ALTERATION   105
#define RECEIVE_DRAWNOTICE   106
#define RECEIVE_DSETCHANGE   107
#define RECEIVE_TTATLAS   108
#define RECEIVE_REDISPLAY   109
#define RECEIVE_FUNCDISPLAY   110
#define RECEIVE_TIMEINDEX   111
#define SINGLE_MODE   1000
#define PLANAR_MODE   2000
#define THREED_MODE   3000
#define SPECIAL_MODE   100000
#define UNDO_MODE   101000
#define TTO_CMAX   48
#define TTO_LMAX   (TTO_CMAX+16)
#define TTO_FORMAT   "%s [%3d,%3d,%3d]"
#define TTO_COUNT   241
#define TTO_COUNT_BROD   209
#define TTO_COUNT_NONBROD   125
#define CAN_TALTO(q3d)
#define TTRR_METH_OFF   0
#define TTRR_METH_GAF   1
#define TTRR_METH_AGF   2
#define TTRR_METH_FGA   3
#define TTRR_METH_FAG   4
#define TTRR_HEMI_LEFT   0
#define TTRR_HEMI_RIGHT   1
#define TTRR_HEMI_BOTH   2
#define AFNI_register_0D_function(cc, ff)   AFNI_register_nD_function(0,(char *)(cc),(generic_func *)(ff),0)
#define AFNI_register_1D_function(cc, ff)   AFNI_register_nD_function(1,(char *)(cc),(generic_func *)(ff),0)
#define AFNI_register_2D_function(cc, ff)   AFNI_register_nD_function(2,(char *)(cc),(generic_func *)(ff),0)
#define AFNI_register_slice_proj(cc, ff)   AFNI_register_nD_function(-1,(char *)(cc),(generic_func *)(ff),0)
#define AFNI_register_1D_funcstr(cc, ff)   AFNI_register_nD_function(1,(char *)(cc),(generic_func *)(ff),RETURNS_STRING)
#define DEFAULT_NGRAY   80
#define DEFAULT_GAMMA   1.0
#define DEFAULT_NCOLOVR   40
#define MAX_NCOLOVR   199
#define DEFAULT_CROSSHAIR_COLOR   13
#define DEFAULT_PRIMARY_COLOR   17
#define DEFAULT_SECONDARY_COLOR   14
#define DEFAULT_MARK_SIZE   8
#define DEFAULT_MARK_GAP   3
#define DEFAULT_CROSSHAIR_GAP   5
#define DEFAULT_PANES_POS   8
#define DEFAULT_PANES_SGN   9

Functions

void AFNI_popup_sonnet (Widget, int)
void RESET_sonnet (void)
void AFNI_hidden_CB (Widget, XtPointer, XtPointer)
void AFNI_hidden_EV (Widget, XtPointer, XEvent *, Boolean *)
void AFNI_hidden_pts_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_sonnet_CB (Widget, XtPointer, XtPointer)
int AFNI_count_controllers (void)
void AFNI_controller_clonify (void)
Three_D_Viewnew_AFNI_controller (Widget, MCW_DC *, int)
void AFNI_initialize_controller (Three_D_View *)
void AFNI_purge_dsets (int)
void AFNI_purge_unused_dsets (void)
int AFNI_controller_index (Three_D_View *)
Three_D_ViewAFNI_find_open_controller (void)
void AFNI_popup_message (char *)
void AFNI_start_version_check (void)
int AFNI_version_check (void)
char * AFNI_make_update_script (void)
char * AFNI_get_friend (void)
char * AFNI_get_date_trivia (void)
PLUGIN_interface * ENV_init (void)
void ENV_add_numeric (char *, char *, int, int, int, int, generic_func *)
void ENV_add_string (char *, char *, int, char **, generic_func *)
void ENV_add_yesno (char *, char *)
PLUGIN_interface * F2D_init (void)
PLUGIN_interface * F1D_init (void)
int AFNI_vnlist_func_overlay (Three_D_View *, int, SUMA_irgba **, int *)
int AFNI_vol2surf_func_overlay (Three_D_View *, SUMA_irgba **, int, int, int, float **, float *)
void AFNI_parse_args (int argc, char *argv[])
void FatalError (char *str)
void AFNI_splashup (void)
void AFNI_splashdown (void)
void AFNI_splashraise (void)
void AFNI_faceup (void)
void AFNI_broutim_CB (Widget, XtPointer, XtPointer)
void AFNI_quit_CB (Widget wcall, XtPointer cd, XtPointer cbs)
void AFNI_quit_timeout_CB (XtPointer, XtIntervalId *)
void AFNI_startup_timeout_CB (XtPointer, XtIntervalId *)
void AFNI_startup_layout_CB (XtPointer, XtIntervalId *)
void AFNI_save_layout_CB (Widget, XtPointer, XtPointer)
void AFNI_finalsave_layout_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_startup_script_CB (XtPointer, XtIntervalId *)
void AFNI_run_script_CB (Widget, XtPointer, XtPointer)
void AFNI_finalrun_script_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_decode_geom (char *, int *, int *, int *, int *)
void AFNI_clone_controller_CB (Widget, XtPointer, XtPointer)
void AFNI_controller_panel_CB (Widget, XtPointer, XtPointer)
void AFNI_make_controller (int)
void AFNI_lock_enforce_CB (Widget, XtPointer, XtPointer)
void AFNI_lock_change_CB (Widget, XtPointer, XtPointer)
void AFNI_lock_clear_CB (Widget, XtPointer, XtPointer)
void AFNI_lock_setall_CB (Widget, XtPointer, XtPointer)
void AFNI_lock_carryout (Three_D_View *)
void AFNI_time_lock_carryout (Three_D_View *)
void AFNI_time_lock_change_CB (Widget, XtPointer, XtPointer)
void AFNI_thresh_lock_carryout (Three_D_View *)
void AFNI_pbar_lock_carryout (Three_D_View *)
void AFNI_equate_pbars (Three_D_View *, Three_D_View *)
void AFNI_thrdrag_lock_carryout (Three_D_View *)
void AFNI_range_lock_carryout (Three_D_View *)
void AFNI_ijk_lock_change_CB (Widget, XtPointer, XtPointer)
XtPointer AFNI_brick_to_mri (int n, int type, FD_brick *br)
THD_3dim_datasetAFNI_read_images (int nf, char *fname[])
void AFNI_seq_send_CB (MCW_imseq *seq,FD_brick *br, ISQ_cbs *cbs)
void AFNI_gra_send_CB (MCW_grapher *grapher, FD_brick *br, GRA_cbs *cbs)
void AFNI_read_inputs (int argc, char *argv[])
void AFNI_make_widgets (Three_D_View *im3d)
void AFNI_closedown_3dview (Three_D_View *im3d)
void AFNI_startup_3dview (Three_D_View *im3d)
MRI_IMAGEAFNI_overlay (int n, FD_brick *br)
char * AFNI_controller_label (Three_D_View *im3d)
void AFNI_set_window_titles (Three_D_View *im3d)
void AFNI_crosshair_visible_CB (MCW_arrowval *, XtPointer)
void AFNI_view_xyz_CB (Widget, XtPointer, XtPointer)
void AFNI_marktog_CB (Widget, XtPointer, XtPointer)
void AFNI_marks_action_CB (Widget, XtPointer, XtPointer)
void AFNI_viewbut_EV (Widget, XtPointer, XEvent *, Boolean *)
void AFNI_switchview_CB (Widget, XtPointer, XtPointer)
void AFNI_see_marks_CB (Widget, XtPointer, XtPointer)
void AFNI_see_func_CB (Widget, XtPointer, XtPointer)
void AFNI_marks_edits_CB (Widget, XtPointer, XtPointer)
void AFNI_marks_transform_CB (Widget, XtPointer, XtPointer)
void AFNI_imag_pop_CB (Widget, XtPointer, XtPointer)
void AFNI_define_CB (Widget, XtPointer, XtPointer)
void AFNI_underlay_CB (Widget, XtPointer, XtPointer)
void AFNI_choose_dataset_CB (Widget, XtPointer, XtPointer)
void AFNI_write_dataset_CB (Widget, XtPointer, XtPointer)
void AFNI_write_many_dataset_CB (Widget, XtPointer, XtPointer)
void AFNI_anatmode_CB (Widget, XtPointer, XtPointer)
void AFNI_funcmode_CB (Widget, XtPointer, XtPointer)
void AFNI_raiseup_CB (Widget, XtPointer, XtPointer)
void AFNI_do_many_writes (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_finalize_dataset_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_jumpto_CB (Widget, XtPointer, MCW_choose_cbs *)
int AFNI_jumpto_dicom (Three_D_View *, float, float, float)
int AFNI_jumpto_ijk (Three_D_View *, int, int, int)
void AFNI_jumpto_ijk_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_sumato_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_mnito_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_crosshair_pop_CB (Widget, XtPointer, XtPointer)
void AFNI_crosshair_EV (Widget, XtPointer, XEvent *, Boolean *)
void AFNI_crosshair_relabel (Three_D_View *)
void AFNI_fimmer_pickref_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_fimmer_pickort_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_register_fimfunc (char *, int, generic_func *, void *)
void spearman_fimfunc (int, float *, void *, int, void *)
void quadrant_fimfunc (int, float *, void *, int, void *)
void AFNI_fimmer_setref (Three_D_View *, MRI_IMAGE *)
void AFNI_fimmer_setort (Three_D_View *, MRI_IMAGE *)
void AFNI_fimmer_setignore (Three_D_View *, int)
void AFNI_fimmer_setpolort (Three_D_View *, int)
int AFNI_rescan_session (int)
void AFNI_rescan_CB (Widget, XtPointer, XtPointer)
void AFNI_rescan_all_CB (Widget, XtPointer, XtPointer)
void AFNI_rescan_timeseries_CB (Widget, XtPointer, XtPointer)
void AFNI_read_sess_CB (Widget, XtPointer, XtPointer)
void AFNI_finalize_read_sess_CB (Widget, XtPointer, XtPointer)
void AFNI_make_file_dialog (Three_D_View *)
void AFNI_close_file_dialog_CB (Widget, XtPointer, XtPointer)
void AFNI_read_1D_CB (Widget, XtPointer, XtPointer)
void AFNI_finalize_read_1D_CB (Widget, XtPointer, XtPointer)
int DSET_in_global_session (THD_3dim_dataset *)
void AFNI_append_sessions (THD_session *, THD_session *)
void AFNI_read_Web_CB (Widget, XtPointer, XtPointer)
void AFNI_finalize_read_Web_CB (Widget, XtPointer, MCW_choose_cbs *)
void AFNI_fimmer_execute (Three_D_View *, int, int)
void AFNI_process_interrupts (Widget)
void AFNI_add_interruptable (Widget)
int AFNI_ts_in_library (MRI_IMAGE *tsim)
THD_3dim_datasetAFNI_fimmer_compute (Three_D_View *, THD_3dim_dataset *, MRI_IMAGE *, MRI_IMAGE *, THD_session *, int, int)
void AFNI_fimmer_redisplay (int, Three_D_View *, THD_3dim_dataset *)
void AFNI_crosshair_color_CB (MCW_arrowval *, XtPointer)
void AFNI_crosshair_gap_CB (MCW_arrowval *, XtPointer)
void AFNI_time_index_CB (MCW_arrowval *, XtPointer)
void AFNI_marks_disp_av_CB (MCW_arrowval *, XtPointer)
void AFNI_resam_vox_av_CB (MCW_arrowval *, XtPointer)
char * AFNI_resam_texter (MCW_arrowval *, XtPointer)
void AFNI_resam_av_CB (MCW_arrowval *, XtPointer)
void AFNI_bucket_CB (MCW_arrowval *, XtPointer)
char * AFNI_bucket_label_CB (MCW_arrowval *, XtPointer)
Boolean AFNI_refashion_dataset (Three_D_View *, THD_3dim_dataset *, THD_dataxes *, int)
void AFNI_set_viewpoint (Three_D_View *, int, int, int, int)
void AFNI_redisplay_func (Three_D_View *)
void AFNI_view_setter (Three_D_View *, MCW_imseq *)
void AFNI_range_setter (Three_D_View *, MCW_imseq *)
XmString AFNI_crosshair_label (Three_D_View *)
XmString AFNI_range_label (Three_D_View *)
XmString AFNI_autorange_label (Three_D_View *)
void AFNI_range_bbox_CB (Widget, XtPointer, XtPointer)
void AFNI_range_av_CB (MCW_arrowval *, XtPointer)
void AFNI_inten_bbox_CB (Widget, XtPointer, XtPointer)
void AFNI_wrap_bbox_CB (Widget, XtPointer, XtPointer)
void AFNI_xhall_bbox_CB (Widget, XtPointer, XtPointer)
void AFNI_see_ttatlas_CB (Widget, XtPointer, XtPointer)
void AFNI_range_rotate_av_CB (MCW_arrowval *, XtPointer)
void AFNI_hintize_pbar (MCW_pbar *, float)
void AFNI_reset_func_range (Three_D_View *)
int AFNI_first_tog (int, Widget *)
int AFNI_all_tog (int, Widget *)
void AFNI_set_tog (int, int, Widget *)
void AFNI_make_ptmask (int, int, AFNI_ovtemplate *)
void AFNI_make_tagmask (int, int, AFNI_ovtemplate *)
void AFNI_initialize_view (THD_3dim_dataset *, Three_D_View *)
void AFNI_setup_viewing (Three_D_View *, Boolean)
void AFNI_modify_viewing (Three_D_View *, Boolean)
THD_warpAFNI_find_warp (THD_3dim_dataset *, THD_3dim_dataset *)
int AFNI_can_transform_vector (THD_3dim_dataset *, THD_3dim_dataset *)
THD_fvec3 AFNI_transform_vector (THD_3dim_dataset *, THD_fvec3, THD_3dim_dataset *)
THD_fvec3 AFNI_backward_warp_vector (THD_warp *, THD_fvec3)
THD_fvec3 AFNI_forward_warp_vector (THD_warp *, THD_fvec3)
THD_warpAFNI_make_warp (Three_D_View *)
Boolean AFNI_marks_quality_check (Boolean, Three_D_View *)
THD_3dim_datasetAFNI_init_warp (Three_D_View *, THD_3dim_dataset *, THD_warp *, float)
void AFNI_handler (char *)
void AFNI_thr_scale_CB (Widget, XtPointer, XtPointer)
void AFNI_set_thr_pval (Three_D_View *im3d)
void AFNI_thr_scale_drag_CB (Widget, XtPointer, XtPointer)
void AFNI_inten_pbar_CB (MCW_pbar *, XtPointer, int)
void AFNI_inten_av_CB (MCW_arrowval *, XtPointer)
char * AFNI_inten_av_texter (MCW_arrowval *, XtPointer)
void AFNI_set_thresh_top (Three_D_View *, float)
char * AFNI_thresh_tlabel_CB (MCW_arrowval *, XtPointer)
void AFNI_thresh_top_CB (MCW_arrowval *, XtPointer)
void AFNI_set_valabel (FD_brick *, int, MRI_IMAGE *, char *)
void AFNI_init_niml (void)
void AFNI_choose_surface_CB (Widget, XtPointer, XtPointer)
void AFNI_update_surface_widgets (Three_D_View *)
void AFNI_update_all_surface_widgets (THD_session *)
void AFNI_disable_suma_overlay (int)
THD_3dim_datasetAFNI_follower_dataset (THD_3dim_dataset *, THD_3dim_dataset *)
void AFNI_make_descendants (THD_sessionlist *)
void AFNI_mark_for_death (THD_sessionlist *)
void AFNI_andersonville (THD_sessionlist *, Boolean)
void AFNI_force_adoption (THD_session *, Boolean)
MRI_IMAGEAFNI_func_overlay (int, FD_brick *)
MRI_IMAGEAFNI_newfunc_overlay (MRI_IMAGE *, float, MRI_IMAGE *, float, float, rgbyte *)
void AFNI_syntax (void)
void AFNI_set_cursor (int)
void AFNI_imseq_clearstat (Three_D_View *)
void AFNI_copy_statistics (THD_3dim_dataset *, THD_3dim_dataset *)
void AFNI_lock_button (Three_D_View *)
void AFNI_misc_button (Three_D_View *)
void AFNI_misc_CB (Widget, XtPointer, XtPointer)
void AFNI_add_timeseries (MRI_IMAGE *)
void AFNI_ijk_to_xyz (THD_3dim_dataset *, int, int, int, float *, float *, float *)
void AFNI_xyz_to_ijk (THD_3dim_dataset *, float, float, float, int *, int *, int *)
void AFNI_xyz_to_dicomm (THD_3dim_dataset *, float, float, float, float *, float *, float *)
void AFNI_dicomm_to_xyz (THD_3dim_dataset *, float, float, float, float *, float *, float *)
void AFNI_toggle_drawing (Three_D_View *)
int AFNI_receive_init (Three_D_View *, int, gen_func *, void *, char *)
void AFNI_receive_destroy (Three_D_View *)
int AFNI_receive_control (Three_D_View *, int, int, void *)
void AFNI_process_viewpoint (Three_D_View *)
void AFNI_process_drawnotice (Three_D_View *)
void AFNI_process_dsetchange (Three_D_View *)
void AFNI_process_alteration (Three_D_View *)
void AFNI_process_drawing (Three_D_View *, int, int, int *, int *, int *)
void AFNI_process_ttatlas (Three_D_View *)
void AFNI_process_redisplay (Three_D_View *)
void AFNI_process_funcdisplay (Three_D_View *)
void AFNI_process_timeindex (Three_D_View *)
void AFNI_do_bkgd_lab (Three_D_View *)
MRI_IMAGEAFNI_ttatlas_overlay (Three_D_View *, int, int, int, int, MRI_IMAGE *)
void AFNI_3d_linefill (int,int *,int *,int *, int *, int **, int **, int **)
void AFNI_talto_CB (Widget, XtPointer, MCW_choose_cbs *)
char * AFNI_ttatlas_query (Three_D_View *)
void AFNI_pop_whereami_kill (Three_D_View *)
void TTRR_popup (Three_D_View *)
TTRR_paramsTTRR_get_params (void)
int AFNI_driver (char *cmd)
int AFNI_controller_code_to_index (char *code)
void log10_func (int, float *)
void ssqrt_func (int, float *)
void osfilt3_func (int, double, double, float *)
void median3_func (int, double, double, float *)
void absfft_func (int, double, double, float *)
float max_proj (int, float *)
float min_proj (int, float *)
float mean_proj (int, float *)
float extreme_proj (int, float *)
void median9_box_func (int, int, double, double, float *)
void winsor9_box_func (int, int, double, double, float *)
void osfilt9_box_func (int, int, double, double, float *)
void fft2D_func (int, int, double, double, float *)
void median21_box_func (int, int, double, double, float *)
void winsor21_box_func (int, int, double, double, float *)
void AFNI_register_nD_function (int, char *, generic_func *, int)
void AFNI_register_nD_func_init (int nd, generic_func *fin)
void AFNI_store_dset_index (int, int)
int AFNI_needs_dset_ijk (void)
int AFNI_needs_dset_tin (void)
void AFNI_load_defaults (Widget w)
void AFNI_setup_inten_pbar (Three_D_View *)

Variables

AF_options GLOBAL_argopt
char * UNDERLAY_typestr []
char AFNI_tophelp [TOPSIZE]
char AFNI_abohelp [1024]
char * fim_opt_labels []
AFNI_library_type GLOBAL_library
 GLOBAL_num_dsets
char * DRAWING_strings []
TTO_point TTO_list [TTO_COUNT]
char * TTO_labels [TTO_COUNT]
int TTO_labeled
int TTO_current
int INIT_ngray
int INIT_ncolovr
int INIT_crosshair_color
int INIT_marks1_color
int INIT_marks2_color
int INIT_marks_size
int INIT_marks_gap
int INIT_crosshair_gap
int INIT_purge
int INIT_posfunc
int INIT_bigscroll
int INIT_resam_anat
int INIT_resam_func
int INIT_resam_thr
float INIT_gamma
float INIT_resam_vox
int INIT_ignore
int INIT_tlrc_big
int INIT_montage_periodic
int INIT_fim_polort
char * INIT_colovr []
char * INIT_labovr []
int INIT_panes_pos
int INIT_panes_sgn
int INIT_panes_hide
float INIT_pval_pos [NPANE_MAX+1][NPANE_MAX+1]
int INIT_ovin_pos [NPANE_MAX+1][NPANE_MAX+1]
float INIT_pval_sgn [NPANE_MAX+1][NPANE_MAX+1]
int INIT_ovin_sgn [NPANE_MAX+1][NPANE_MAX+1]

Define Documentation

#define AFNI_3DDATA_VIEW   102
 

Definition at line 798 of file afni.h.

Referenced by AFNI_brick_to_mri(), AFNI_fimmer_compute(), AFNI_fimmer_execute(), AFNI_fimmer_pickort_CB(), AFNI_fimmer_pickref_CB(), AFNI_fimmer_setignore(), AFNI_fimmer_setort(), AFNI_fimmer_setpolort(), AFNI_fimmer_setref(), AFNI_imag_pop_CB(), AFNI_initialize_view(), AFNI_jumpto_CB(), AFNI_jumpto_ijk_CB(), AFNI_make_widgets(), AFNI_mnito_CB(), AFNI_modify_viewing(), AFNI_plugin_button(), AFNI_set_viewpoint(), AFNI_startup_timeout_CB(), AFNI_sumato_CB(), AFNI_talto_CB(), and MAIN_workprocess().

#define AFNI_DEFAULT_CURSOR   888
 

Definition at line 1345 of file afni.h.

Referenced by AFNI_set_cursor().

#define AFNI_IGNORE_EVERYTHING   2
 

Definition at line 810 of file afni.h.

Referenced by AFNI_gra_send_CB(), AFNI_seq_send_CB(), AFNI_set_viewpoint(), and AFNI_underlay_CB().

#define AFNI_IGNORE_NOTHING   0
 

Definition at line 808 of file afni.h.

Referenced by AFNI_gra_send_CB(), AFNI_make_wid2(), AFNI_seq_send_CB(), AFNI_set_viewpoint(), and AFNI_underlay_CB().

#define AFNI_IGNORE_REDRAWS   1
 

Definition at line 809 of file afni.h.

Referenced by AFNI_underlay_CB().

#define AFNI_IMAGES_VIEW   101
 

Definition at line 797 of file afni.h.

Referenced by AFNI_crosshair_label(), AFNI_view_xyz_CB(), and MAIN_workprocess().

#define AFNI_NODATA_VIEW   100
 

Definition at line 796 of file afni.h.

#define AFNI_register_0D_function cc,
ff       AFNI_register_nD_function(0,(char *)(cc),(generic_func *)(ff),0)
 

Definition at line 1827 of file afni.h.

Referenced by MAIN_workprocess().

#define AFNI_register_1D_funcstr cc,
ff       AFNI_register_nD_function(1,(char *)(cc),(generic_func *)(ff),RETURNS_STRING)
 

Definition at line 1837 of file afni.h.

Referenced by MAIN_workprocess().

#define AFNI_register_1D_function cc,
ff       AFNI_register_nD_function(1,(char *)(cc),(generic_func *)(ff),0)
 

Definition at line 1829 of file afni.h.

Referenced by F1D_init(), and MAIN_workprocess().

#define AFNI_register_2D_function cc,
ff       AFNI_register_nD_function(2,(char *)(cc),(generic_func *)(ff),0)
 

Definition at line 1831 of file afni.h.

Referenced by F2D_init(), MAIN_workprocess(), and PLUGIN_init().

#define AFNI_register_slice_proj cc,
ff       AFNI_register_nD_function(-1,(char *)(cc),(generic_func *)(ff),0)
 

Definition at line 1834 of file afni.h.

Referenced by MAIN_workprocess().

#define AFNI_run_script ss       AFNI_startup_script_CB((XtPointer)(ss),NULL)
 

Definition at line 1055 of file afni.h.

#define AFNI_SEE_FUNC_OFF iq   
 

Value:

( MCW_set_bbox( (iq)->vwid->view->see_func_bbox, 0), \
                                AFNI_see_func_CB( NULL , (XtPointer)(iq) , NULL ) )

Definition at line 1107 of file afni.h.

#define AFNI_SEE_FUNC_ON iq   
 

Value:

( MCW_set_bbox( (iq)->vwid->view->see_func_bbox, 1 ), \
                               AFNI_see_func_CB( NULL , (XtPointer)(iq) , NULL )  )

Definition at line 1104 of file afni.h.

Referenced by AFNI_fimmer_execute(), and DRAW_finalize_dset_CB().

#define AFNI_SETUP_FUNC_ON iq   
 

Value:

do{ if( ! (iq)->vinfo->func_visible ){                      \
         MCW_set_bbox( (iq)->vwid->view->see_func_bbox, 1 ) ; \
         (iq)->vinfo->func_visible = True ;                   \
      } } while(0)

Definition at line 1110 of file afni.h.

Referenced by RT_tell_afni_one().

#define AFNI_SETUP_VIEW iq,
vv   
 

Value:

do{ if( (iq)->vinfo->view_type != (vv) ){                       \
         MCW_set_bbox( (iq)->vwid->view->view_bbox , 1 << (vv) ) ; \
         (iq)->vinfo->view_type = (vv) ;                           \
       } } while(0) ;

Definition at line 1122 of file afni.h.

Referenced by RT_tell_afni_one().

#define AFNI_SWITCH_VIEW iq,
vv   
 

Value:

do{ if( (iq)->vinfo->view_type != (vv) ){                       \
         MCW_set_bbox( (iq)->vwid->view->view_bbox , 1 << (vv) ) ; \
         AFNI_switchview_CB( NULL , (XtPointer)(iq) , NULL ) ;     \
       } } while(0) ;

Definition at line 1116 of file afni.h.

#define AFNI_VERBOSE   (!GLOBAL_argopt.quiet)
 

Definition at line 1013 of file afni.h.

Referenced by main(), and PLUTO_report().

#define AFNI_WAITING_CURSOR   999
 

Definition at line 1346 of file afni.h.

Referenced by AFNI_set_cursor().

#define AFNI_XHAIRS_AP   7
 

Definition at line 318 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_AP_IS   5
 

Definition at line 316 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_IS   8
 

Definition at line 319 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_LASTOPTION   8
 

Definition at line 321 of file afni.h.

#define AFNI_XHAIRS_LR   6
 

Definition at line 317 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_LR_AP   3
 

Definition at line 314 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_LR_IS   4
 

Definition at line 315 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_MULTI   2
 

Definition at line 312 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_OFF   0
 

Definition at line 310 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define AFNI_XHAIRS_SINGLE   1
 

Definition at line 311 of file afni.h.

Referenced by AFNI_crosshair_visible_CB(), and AFNI_startup_layout_CB().

#define ALLOW_COMPUTE_FIM iq   
 

Definition at line 790 of file afni.h.

Referenced by AFNI_fimmer_setignore(), AFNI_fimmer_setort(), AFNI_fimmer_setpolort(), AFNI_fimmer_setref(), and AFNI_setup_viewing().

#define ALLOW_real_time   GLOBAL_argopt.allow_rt
 

Definition at line 1008 of file afni.h.

Referenced by main(), MAIN_workprocess(), and PLUGIN_init().

#define AXIAL   1
 

Definition at line 272 of file afni.h.

Referenced by AFNI_get_xhair_node(), and AFNI_view_setter().

#define BEEPIT   XBell(GLOBAL_library.dc->display,100)
 

Definition at line 1007 of file afni.h.

Referenced by AFNI_choose_dataset_CB(), AFNI_faceup(), AFNI_fimmer_execute(), AFNI_finalize_read_palette_CB(), AFNI_finalize_saveim_CB(), AFNI_finalize_write_palette_CB(), AFNI_finalsave_layout_CB(), AFNI_marks_quality_check(), AFNI_pbar_CB(), AFNI_rescan_session_NEW(), AFNI_rescan_session_OLD(), AFNI_rescan_timeseries_CB(), AFNI_set_pbar_top_CB(), AFNI_write_dataset_CB(), AFNI_write_many_dataset_CB(), ENV_cwd(), PLUTO_popup_dset_chooser(), TAG_add_CB(), TAG_beep_CB(), TAG_clear_CB(), TAG_clearall_CB(), TAG_copy_CB(), TAG_delete_CB(), TAG_dset_CB(), TAG_get_copy_CB(), TAG_get_dset_CB(), TAG_read_CB(), TAG_relabel_CB(), TAG_save_CB(), TAG_set_CB(), TAG_tog_CB(), TAG_value_CB(), TAG_write_CB(), and TTRR_action_CB().

#define BKGD_COUNT   3
 

Definition at line 298 of file afni.h.

#define CAN_TALTO q3d   
 

Value:

( (q3d)->vinfo->view_type == VIEW_TALAIRACH_TYPE ||             \
   AFNI_can_transform_vector(                                    \
      (q3d)->anat_dset[VIEW_TALAIRACH_TYPE] , (q3d)->anat_now ) )

Definition at line 1758 of file afni.h.

Referenced by AFNI_imag_pop_CB(), AFNI_mnito_CB(), AFNI_setup_viewing(), AFNI_talto_CB(), AFNI_ttatlas_query(), DRAW_main(), and DRAW_ttatlas_CB().

#define CLEAR_FIMDATA iq   
 

Value:

( (iq)->fimdata->fimref       = NULL ,            \
     (iq)->fimdata->fimort       = NULL ,            \
     (iq)->fimdata->fimdset      = NULL ,            \
     (iq)->fimdata->refadd_count = 0 ,               \
     (iq)->fimdata->polort       = INIT_fim_polort , \
     (iq)->fimdata->init_ignore  = GLOBAL_argopt.ignore )

Definition at line 751 of file afni.h.

Referenced by AFNI_closedown_3dview().

#define CLEAR_MONTAGE iq,
bb   
 

Value:

do{ int bz = abs((bb)->a123.ijk[2])-1 ;  \
      (iq)->vinfo->xhairs_ndown.ijk[bz] =  \
       (iq)->vinfo->xhairs_nup.ijk[bz]   = \
        (iq)->vinfo->xhairs_nskip.ijk[bz] = 0 ; } while(0)
macro to clear the montage information in the z-direction of a particular brick, in a particular controller *

Definition at line 184 of file afni.h.

Referenced by AFNI_seq_send_CB(), and AFNI_underlay_CB().

#define CLOSE_CONTROLLER iq       ( AFNI_closedown_3dview(iq), XtUnrealizeWidget((iq)->vwid->top_shell), (iq)->opened = 0 )
 

Definition at line 893 of file afni.h.

Referenced by AFNI_drive_close_window(), and AFNI_quit_CB().

#define CLOSE_PANEL iq,
panel   
 

Value:

{  XtUnmanageChild( (iq)->vwid->  panel  ->frame ) ;                  \
      if( (iq)->vwid->view->  panel ## _pb_inverted ){                    \
         MCW_invert_widget( (iq)->vwid->view->define_ ## panel ## _pb ) ;  \
         (iq)->vwid->view->  panel ## _pb_inverted = False ; } }

Definition at line 408 of file afni.h.

Referenced by AFNI_controller_panel_CB(), AFNI_define_CB(), and AFNI_marks_action_CB().

#define CORONAL   3
 

Definition at line 274 of file afni.h.

Referenced by AFNI_get_xhair_node(), and AFNI_view_setter().

#define DEFAULT_CROSSHAIR_COLOR   13
 

color definitions and their labels (for 'choosers') *

Definition at line 1857 of file afni.h.

#define DEFAULT_CROSSHAIR_GAP   5
 

Definition at line 1863 of file afni.h.

#define DEFAULT_FIM_SCALE   10000
 

Definition at line 104 of file afni.h.

Referenced by AFNI_autorange_label(), and AFNI_make_wid2().

#define DEFAULT_GAMMA   1.0
 

Definition at line 1850 of file afni.h.

#define DEFAULT_MARK_GAP   3
 

Definition at line 1862 of file afni.h.

#define DEFAULT_MARK_SIZE   8
 

Definition at line 1861 of file afni.h.

#define DEFAULT_NCOLOVR   40
 

Definition at line 1852 of file afni.h.

#define DEFAULT_NGRAY   80
 

Definition at line 1849 of file afni.h.

Referenced by AFNI_syntax().

#define DEFAULT_PANES_POS   8
 

Definition at line 1968 of file afni.h.

#define DEFAULT_PANES_SGN   9
 

Definition at line 1969 of file afni.h.

#define DEFAULT_PRIMARY_COLOR   17
 

Definition at line 1858 of file afni.h.

#define DEFAULT_SECONDARY_COLOR   14
 

Definition at line 1859 of file afni.h.

#define DISABLE_LOCK   (GLOBAL_library.ignore_lock=1)
 

Definition at line 1005 of file afni.h.

Referenced by AFNI_initialize_view(), and AFNI_modify_viewing().

#define DMODE_BRICK   0
 

Definition at line 106 of file afni.h.

Referenced by AFNI_do_many_writes(), AFNI_setup_viewing(), and AFNI_write_dataset_CB().

#define DMODE_BRICK_BVAL   (1 << DMODE_BRICK)
 

Definition at line 109 of file afni.h.

Referenced by AFNI_anatmode_CB(), AFNI_funcmode_CB(), and AFNI_setup_viewing().

#define DMODE_WOD   1
 

Definition at line 107 of file afni.h.

#define DMODE_WOD_BVAL   (1 << DMODE_WOD )
 

Definition at line 110 of file afni.h.

Referenced by AFNI_setup_viewing().

#define DOING_REALTIME_WORK   (GLOBAL_library.interruptables.windows != NULL)
 

Definition at line 1020 of file afni.h.

Referenced by AFNI_thr_scale_CB().

#define DRAWING_FILL   BUTTON2_CLOSEDPOLY
 

Definition at line 1397 of file afni.h.

Referenced by AFNI_process_drawing(), and AFNI_receive_control().

#define DRAWING_LINES   BUTTON2_OPENPOLY
 

Definition at line 1396 of file afni.h.

Referenced by AFNI_make_wid2(), AFNI_process_drawing(), AFNI_receive_control(), and AFNI_receive_destroy().

#define DRAWING_LINEWIDTH   13
 

Definition at line 1411 of file afni.h.

Referenced by AFNI_receive_control(), and DRAW_mode_CB().

#define DRAWING_NODRAW   BUTTON2_NODRAW
 

Definition at line 1399 of file afni.h.

Referenced by AFNI_process_drawing(), and AFNI_receive_control().

#define DRAWING_OVCINDEX   11
 

Definition at line 1407 of file afni.h.

Referenced by AFNI_receive_control(), DRAW_color_CB(), and DRAW_finalize_dset_CB().

#define DRAWING_POINTS   BUTTON2_POINTS
 

Definition at line 1398 of file afni.h.

Referenced by AFNI_process_drawing(), and AFNI_receive_control().

#define DRAWING_SHUTDOWN   19
 

Definition at line 1410 of file afni.h.

Referenced by AFNI_receive_control(), DRAW_quit_CB(), and r_save_dataset_as().

#define DRAWING_STARTUP   18
 

Definition at line 1409 of file afni.h.

Referenced by AFNI_receive_control().

#define DRAWING_X11PIXEL   12
 

Definition at line 1408 of file afni.h.

Referenced by AFNI_receive_control().

#define DRAWNOTICE_SHUTDOWN   49
 

Definition at line 1426 of file afni.h.

Referenced by AFNI_receive_control().

#define DRAWNOTICE_STARTUP   48
 

Definition at line 1425 of file afni.h.

Referenced by AFNI_receive_control().

#define DSETCHANGE_SHUTDOWN   59
 

Definition at line 1429 of file afni.h.

Referenced by AFNI_receive_control().

#define DSETCHANGE_STARTUP   58
 

Definition at line 1428 of file afni.h.

Referenced by AFNI_receive_control().

#define ELIDE_quality   GLOBAL_argopt.elide_quality
 

Definition at line 1009 of file afni.h.

Referenced by AFNI_marks_quality_check().

#define ENABLE_LOCK   (GLOBAL_library.ignore_lock=0)
 

Definition at line 1006 of file afni.h.

Referenced by AFNI_initialize_view(), AFNI_modify_viewing(), and main().

#define EVERYTHING_SHUTDOWN   666
 

Definition at line 1437 of file afni.h.

Referenced by AFNI_receive_control(), DRAW_done_CB(), DRAW_quit_CB(), DSET2_dset_recv(), DSETN_dset_recv(), RCREND_done_CB(), REND_done_CB(), and TTget_main().

#define FIM_ALPHA_MASK   1
 

Definition at line 712 of file afni.h.

Referenced by AFNI_fimmer_compute(), and GRA_fim_CB().

#define FIM_AVER_MASK   64
 

Definition at line 718 of file afni.h.

Referenced by AFNI_fimmer_compute().

#define FIM_BASE_MASK   8
 

Definition at line 715 of file afni.h.

Referenced by AFNI_fimmer_compute().

#define FIM_BEST_MASK   2
 

Definition at line 713 of file afni.h.

Referenced by AFNI_fimmer_compute().

#define FIM_CORR_MASK   16
 

Definition at line 716 of file afni.h.

Referenced by AFNI_fimmer_compute(), and GRA_fim_CB().

#define FIM_DEFAULT_MASK   (1 | 2 | 4 | 16)
 

Definition at line 724 of file afni.h.

Referenced by AFNI_new_fim_menu(), and GRA_fim_CB().

#define FIM_NUM_OPTS   10
 

Definition at line 726 of file afni.h.

Referenced by AFNI_new_fim_menu(), and GRA_fim_CB().

#define FIM_PAVE_MASK   32
 

Definition at line 717 of file afni.h.

Referenced by AFNI_fimmer_compute(), and GRA_fim_CB().

#define FIM_PERC_MASK   4
 

Definition at line 714 of file afni.h.

Referenced by AFNI_fimmer_compute(), and GRA_fim_CB().

#define FIM_PTOP_MASK   128
 

Definition at line 720 of file afni.h.

Referenced by AFNI_fimmer_compute(), and GRA_fim_CB().

#define FIM_SIGM_MASK   512
 

Definition at line 722 of file afni.h.

Referenced by AFNI_fimmer_compute().

#define FIM_THR   (0.01*GLOBAL_library.fim_bkthr_perc)
 

Definition at line 1002 of file afni.h.

#define FIM_TOPL_MASK   256
 

Definition at line 721 of file afni.h.

Referenced by AFNI_fimmer_compute().

#define FIX_SCALE_SIZE iqqq   
 

Value:

do{ int sel_height ;  XtPointer sel_ptr ;                           \
         XtVaGetValues( (iqqq)->vwid->func->thr_scale ,                  \
                           XmNuserData , &sel_ptr , NULL ) ;             \
         sel_height = (int) sel_ptr ;                                    \
         XtVaSetValues( (iqqq)->vwid->func->thr_scale ,                  \
                           XmNheight , sel_height , NULL ) ;             \
         XtManageChild((iqqq)->vwid->func->thr_scale) ;                  \
       } while(0)
On Motif 2.0 on Linux, resized pbar pieces causes the threshold scale to behave bizarrely. This macro is a fixup *

Definition at line 522 of file afni.h.

Referenced by AFNI_define_CB(), AFNI_do_bkgd_lab(), AFNI_drive_set_pbar_all(), AFNI_drive_set_pbar_number(), AFNI_inten_av_CB(), AFNI_inten_bbox_CB(), AFNI_pbar_CB(), AFNI_set_pbar_top_CB(), AFNI_set_thresh_top(), AFNI_setup_viewing(), AFNI_thr_scale_CB(), and load_PBAR_palette_array().

#define FIX_SCALE_VALUE iqqq   
 

Definition at line 551 of file afni.h.

Referenced by AFNI_define_CB(), AFNI_set_thresh_top(), AFNI_setup_viewing(), AFNI_thr_scale_CB(), and AFNI_thr_scale_drag_CB().

#define FUNCDISPLAY_SHUTDOWN   89
 

Definition at line 1420 of file afni.h.

Referenced by AFNI_receive_control().

#define FUNCDISPLAY_STARTUP   88
 

Definition at line 1419 of file afni.h.

Referenced by AFNI_receive_control().

#define GPT   GLOBAL_library.gpt
 

Definition at line 1010 of file afni.h.

Referenced by AFNI_finalize_read_palette_CB(), AFNI_palette_av_CB(), AFNI_palette_label_CB(), AFNI_process_setup(), dump_PBAR_palette_table(), main(), RCREND_func_widgets(), RCREND_palette_av_CB(), RCREND_pbarmenu_EV(), REND_func_widgets(), REND_palette_av_CB(), and REND_pbarmenu_EV().

#define GRAPHER_TO_VIEWER iq,
gg   
 

Value:

(((gg)==(iq)->g123) ? (iq)->s123 :  \
                                   ((gg)==(iq)->g231) ? (iq)->s231 :  \
                                   ((gg)==(iq)->g312) ? (iq)->s312 : NULL)

Definition at line 905 of file afni.h.

Referenced by AFNI_gra_send_CB().

#define HIDE_SCALE iqqq       XtUnmanageChild((iqqq)->vwid->func->thr_scale)
 

Definition at line 531 of file afni.h.

Referenced by AFNI_define_CB(), AFNI_drive_set_pbar_all(), AFNI_drive_set_pbar_number(), AFNI_inten_av_CB(), AFNI_inten_bbox_CB(), AFNI_pbar_CB(), AFNI_set_pbar_top_CB(), and load_PBAR_palette_array().

#define HINTIZE_pbar iq   
 

Value:

AFNI_hintize_pbar( (iq)->vwid->func->inten_pbar , \
                    ((iq)->vinfo->fim_range != 0.0) \
                     ? (iq)->vinfo->fim_range       \
                     : (iq)->vinfo->fim_autorange )

Definition at line 1259 of file afni.h.

Referenced by AFNI_reset_func_range(), and AFNI_underlay_CB().

#define IM0D_VALID ii       ((ii)!=NULL && (ii)->type==AFNI_NODATA_VIEW)
 

Definition at line 800 of file afni.h.

#define IM3D_OPEN ii       (IM3D_VALID(ii) && (ii)->opened)
 

Definition at line 804 of file afni.h.

Referenced by AFNI_brick_to_mri(), AFNI_bucket_CB(), AFNI_choose_surface_CB(), AFNI_controller_panel_CB(), AFNI_crosshair_EV(), AFNI_crosshair_label(), AFNI_crosshair_relabel(), AFNI_do_bkgd_lab(), AFNI_do_many_writes(), AFNI_drive_close_window(), AFNI_drive_open_window(), AFNI_drive_pbar_rotate(), AFNI_drive_rescan_controller(), AFNI_drive_save_jpeg(), AFNI_drive_set_dicom_xyz(), AFNI_drive_set_ijk(), AFNI_drive_set_pbar_all(), AFNI_drive_set_pbar_number(), AFNI_drive_set_pbar_sign(), AFNI_drive_set_spm_xyz(), AFNI_drive_set_threshnew(), AFNI_drive_set_threshold(), AFNI_drive_set_view(), AFNI_drive_set_xhairs(), AFNI_drive_switch_anatomy(), AFNI_drive_switch_function(), AFNI_drive_switch_session(), AFNI_equate_pbars(), AFNI_fimmer_compute(), AFNI_fimmer_execute(), AFNI_finalize_saveim_CB(), AFNI_finalize_write_palette_CB(), AFNI_finalsave_layout_CB(), AFNI_get_xhair_node(), AFNI_lock_carryout(), AFNI_misc_CB(), AFNI_modify_viewing(), AFNI_niml_redisplay_CB(), AFNI_niml_viewpoint_CB(), AFNI_open_panel(), AFNI_pbar_CB(), AFNI_pbar_EV(), AFNI_pbar_lock_carryout(), AFNI_process_plugout(), AFNI_quit_CB(), AFNI_range_label(), AFNI_range_lock_carryout(), AFNI_range_setter(), AFNI_redisplay(), AFNI_refashion_dataset(), AFNI_rescan_all_CB(), AFNI_rescan_CB(), AFNI_rescan_session_OLD(), AFNI_set_cursor(), AFNI_set_func_autorange(), AFNI_set_func_range(), AFNI_set_func_resam(), AFNI_set_func_visible(), AFNI_set_pbar_top_CB(), AFNI_set_thresh_top(), AFNI_set_viewpoint(), AFNI_set_window_titles(), AFNI_surf_bbox_CB(), AFNI_surf_done_CB(), AFNI_surf_redraw_CB(), AFNI_thr_scale_drag_CB(), AFNI_thrdrag_lock_carryout(), AFNI_thresh_lock_carryout(), AFNI_thresh_top_CB(), AFNI_time_lock_carryout(), AFNI_toggle_drawing(), AFNI_ttatlas_query(), AFNI_underlay_CB(), AFNI_update_all_surface_widgets(), AFNI_update_surface_widgets(), AFNI_view_setter(), AFNI_write_many_dataset_CB(), DRAW_main(), ENV_globalrange(), ENV_sesstrail(), new_RT_input(), NOTES_main(), NUD_main(), PLUTO_dset_redisplay_mode(), PLUTO_fixup_names(), PLUTO_force_rebar(), PLUTO_force_redisplay(), PLUTO_popup_worker(), PV2S_process_args(), RCREND_main(), RCREND_xhair_recv(), REND_main(), RT_main(), RT_process_info(), RT_set_grapher_pinnums(), RT_start_dataset(), RT_tell_afni_one(), TAG_add_CB(), TAG_clear_CB(), TAG_clearall_CB(), TAG_copy_CB(), TAG_delete_CB(), TAG_dset_CB(), TAG_get_copy_CB(), TAG_get_dset_CB(), TAG_main(), TAG_read_CB(), TAG_relabel_CB(), TAG_save_CB(), TAG_set_CB(), TAG_tog_CB(), TAG_value_CB(), TAG_write_CB(), TTget_main(), and TTget_recv().

#define IM3D_VALID ii   
 

Value:

((ii)!=NULL && ((ii)->type==AFNI_IMAGES_VIEW || \
                                       (ii)->type==AFNI_3DDATA_VIEW ) )

Definition at line 801 of file afni.h.

Referenced by AFNI_anatmode_CB(), AFNI_choose_dataset_CB(), AFNI_closedown_3dview(), AFNI_crosshair_color_CB(), AFNI_crosshair_gap_CB(), AFNI_crosshair_label(), AFNI_crosshair_visible_CB(), AFNI_define_CB(), AFNI_drive_open_window(), AFNI_fimmer_pickort_CB(), AFNI_fimmer_pickref_CB(), AFNI_fimmer_setignore(), AFNI_fimmer_setort(), AFNI_fimmer_setpolort(), AFNI_fimmer_setref(), AFNI_finalize_dataset_CB(), AFNI_finalize_read_palette_CB(), AFNI_funcmode_CB(), AFNI_gra_send_CB(), AFNI_ijk_lock_change_CB(), AFNI_imag_pop_CB(), AFNI_imseq_clearstat(), AFNI_initialize_view(), AFNI_inten_bbox_CB(), AFNI_inten_pbar_CB(), AFNI_jumpto_CB(), AFNI_jumpto_ijk_CB(), AFNI_lock_change_CB(), AFNI_lock_clear_CB(), AFNI_lock_setall_CB(), AFNI_make_widgets(), AFNI_marks_action_CB(), AFNI_marks_disp_av_CB(), AFNI_marks_edits_CB(), AFNI_marks_transform_CB(), AFNI_marktog_CB(), AFNI_misc_CB(), AFNI_mnito_CB(), AFNI_overlay(), AFNI_palette_av_CB(), AFNI_palette_tran_CB(), AFNI_plugin_button(), AFNI_process_alteration(), AFNI_process_drawing(), AFNI_process_drawnotice(), AFNI_process_dsetchange(), AFNI_process_funcdisplay(), AFNI_process_redisplay(), AFNI_process_timeindex(), AFNI_process_viewpoint(), AFNI_purge_dsets(), AFNI_range_bbox_CB(), AFNI_receive_control(), AFNI_receive_destroy(), AFNI_receive_init(), AFNI_resam_av_CB(), AFNI_resam_vox_av_CB(), AFNI_reset_func_range(), AFNI_see_func_CB(), AFNI_see_marks_CB(), AFNI_seq_send_CB(), AFNI_set_thr_pval(), AFNI_set_valabel(), AFNI_setup_inten_pbar(), AFNI_setup_viewing(), AFNI_sonnet_CB(), AFNI_startup_3dview(), AFNI_sumato_CB(), AFNI_switchview_CB(), AFNI_talto_CB(), AFNI_thr_scale_CB(), AFNI_time_index_CB(), AFNI_time_lock_change_CB(), AFNI_view_xyz_CB(), AFNI_viewbut_EV(), AFNI_vnlist_func_overlay(), AFNI_vol2surf_func_overlay(), AFNI_wrap_bbox_CB(), AFNI_write_dataset_CB(), AFNI_xhall_bbox_CB(), PLUG_choose_dataset_CB(), and PLUTO_add_dset().

#define INIT_BKGD_LAB iq   
 

Value:

do{ int qq = ((iq)->s123!=NULL) + ((iq)->s231!=NULL) + ((iq)->s312!=NULL); \
       if( qq >= BKGD_COUNT || (qq > 0 && !AFNI_noenv("AFNI_VALUE_LABEL")) ){ \
          (iq)->vwid->imag->do_bkgd_lab = True ;                              \
       } else {                                                               \
          (iq)->vwid->imag->do_bkgd_lab = False ;                             \
          XtUnmanageChild(im3d->vwid->imag->pop_bkgd_lab) ;                   \
          XtUnmanageChild(im3d->vwid->func->bkgd_lab) ;                       \
          FIX_SCALE_SIZE(im3d) ;                                              \
       } break ; } while(0)

Definition at line 299 of file afni.h.

Referenced by AFNI_seq_send_CB(), and AFNI_view_xyz_CB().

#define ISFUNC_UNDERLAY uu       ((uu)==UNDERLAY_ALLFUNC||(uu)==UNDERLAY_THRFUNC)
 

Definition at line 98 of file afni.h.

#define ISVALID_IM3D ii       IM3D_VALID(ii)
 

Definition at line 806 of file afni.h.

#define ISVALID_VIEW vvv       ((vvv) >= FIRST_VIEW_TYPE && (vvv) <= LAST_VIEW_TYPE)
 

Definition at line 284 of file afni.h.

Referenced by AFNI_define_CB(), AFNI_marks_action_CB(), AFNI_marks_edits_CB(), and AFNI_marks_transform_CB().

#define LAST_UNDERLAY_TYPE   1
 

Definition at line 97 of file afni.h.

Referenced by AFNI_underlay_CB().

#define LOAD_ANAT_VIEW iq   
 

Value:

do{ (iq)->anat_now->wod_daxes = (iq)->wod_daxes ;      \
      (iq)->anat_now->wod_flag  = (iq)->anat_wod_flag ;  \
      (iq)->anat_now->vox_warp  = (iq)->anat_voxwarp ;   \
    } while(0)

Definition at line 852 of file afni.h.

Referenced by AFNI_initialize_view(), AFNI_jumpto_dicom(), AFNI_jumpto_ijk(), AFNI_lock_carryout(), AFNI_marks_action_CB(), AFNI_marktog_CB(), AFNI_mnito_CB(), AFNI_modify_viewing(), AFNI_setup_viewing(), and AFNI_talto_CB().

#define LOAD_DSET_VIEWS iq       do{ LOAD_ANAT_VIEW(iq) ; LOAD_FUNC_VIEW(iq) ; } while(0)
 

Definition at line 866 of file afni.h.

Referenced by AFNI_brick_to_mri(), AFNI_func_overlay(), AFNI_overlay(), AFNI_seq_send_CB(), AFNI_set_viewpoint(), and AFNI_write_dataset_CB().

#define LOAD_FUNC_VIEW iq   
 

Value:

do{ if( ISVALID_3DIM_DATASET((iq)->fim_now) ){         \
         (iq)->fim_now->wod_daxes = (iq)->wod_daxes ;    \
         (iq)->fim_now->wod_flag  = (iq)->fim_wod_flag ; \
         (iq)->fim_now->vox_warp  = (iq)->fim_voxwarp ;  \
         (iq)->fim_now->self_warp = (iq)->fim_selfwarp ; \
      } } while(0)

Definition at line 858 of file afni.h.

Referenced by AFNI_setup_viewing().

#define MARKS_MAXPOP   (MARKS_MAXNUM+10)
 

Definition at line 416 of file afni.h.

#define MAX_CONTROLLERS   10
 

Definition at line 946 of file afni.h.

Referenced by AFNI_controller_code_to_index(), AFNI_crosshair_pop_CB(), AFNI_do_many_writes(), AFNI_finalize_read_palette_CB(), AFNI_finalsave_layout_CB(), AFNI_ijk_lock_change_CB(), AFNI_init_niml(), AFNI_lock_carryout(), AFNI_lock_change_CB(), AFNI_lock_clear_CB(), AFNI_lock_setall_CB(), AFNI_misc_CB(), AFNI_pbar_lock_carryout(), AFNI_process_plugout(), AFNI_purge_dsets(), AFNI_range_lock_carryout(), AFNI_redisplay(), AFNI_rescan_all_CB(), AFNI_rescan_CB(), AFNI_rescan_session_OLD(), AFNI_set_cursor(), AFNI_setup_viewing(), AFNI_startup_layout_CB(), AFNI_thrdrag_lock_carryout(), AFNI_thresh_lock_carryout(), AFNI_time_lock_carryout(), AFNI_time_lock_change_CB(), AFNI_update_all_surface_widgets(), ENV_globalrange(), ENV_redraw_titles(), ENV_sesstrail(), main(), PLUTO_dset_redisplay_mode(), PLUTO_fixup_names(), PLUTO_force_rebar(), PLUTO_force_redisplay(), RT_start_dataset(), and RT_tell_afni_one().

#define MAX_NCOLOVR   199
 

Definition at line 1853 of file afni.h.

Referenced by AFNI_drive_add_overlay_color(), AFNI_load_defaults(), and AFNI_process_setup().

#define MAX_POLORT   3
 

Definition at line 749 of file afni.h.

#define MAXOVPIX   (MAXOVSIZE*(MAXOVSIZE-1))
 

Definition at line 289 of file afni.h.

#define MAXOVSIZE   19
 

Definition at line 288 of file afni.h.

Referenced by AFNI_load_defaults().

#define NO_frivolities   GLOBAL_argopt.no_frivolities
 

Definition at line 1011 of file afni.h.

Referenced by AFNI_sonnet_CB(), and PLUGIN_seq_send_CB().

#define OPEN_CONTROLLER iq   
 

Value:

do{ XtRealizeWidget((iq)->vwid->top_shell) ;                \
     while(XtWindow((iq)->vwid->top_shell)==(Window)NULL) ;  \
     AFNI_startup_3dview(iq); (iq)->opened = 1;              \
 } while(0)

Definition at line 887 of file afni.h.

Referenced by AFNI_drive_open_window(), and MAIN_workprocess().

#define OPEN_PANEL iq,
panel   
 

Value:

{  XtManageChild( (iq)->vwid->  panel  ->frame ) ;                    \
      if( ! (iq)->vwid->view->  panel ## _pb_inverted ){                  \
         MCW_invert_widget( (iq)->vwid->view->define_ ## panel ## _pb ) ;  \
         (iq)->vwid->view->  panel ## _pb_inverted = True ; }             \
      XMapRaised( XtDisplay( (iq)->vwid->  panel  ->frame ) ,            \
                   XtWindow( (iq)->vwid->  panel  ->frame )  ) ; }

Definition at line 400 of file afni.h.

Referenced by AFNI_define_CB().

#define ORIMASK_ALL   (ORIMASK_LR | ORIMASK_AP | ORIMASK_IS)
 

Definition at line 199 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define ORIMASK_AP   ((1<<ORI_P2A_TYPE) | (1<<ORI_A2P_TYPE))
 

Definition at line 193 of file afni.h.

Referenced by AFNI_crosshair_visible_CB(), get_xhair_points(), RCREND_xhair_overlay(), RCREND_xhair_underlay(), REND_xhair_overlay(), and REND_xhair_underlay().

#define ORIMASK_AP_IS   (ORIMASK_AP | ORIMASK_IS)
 

Definition at line 198 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define ORIMASK_IS   ((1<<ORI_I2S_TYPE) | (1<<ORI_S2I_TYPE))
 

Definition at line 194 of file afni.h.

Referenced by AFNI_crosshair_visible_CB(), get_xhair_points(), RCREND_xhair_overlay(), RCREND_xhair_underlay(), REND_xhair_overlay(), and REND_xhair_underlay().

#define ORIMASK_LR   ((1<<ORI_R2L_TYPE) | (1<<ORI_L2R_TYPE))
 

Definition at line 192 of file afni.h.

Referenced by AFNI_crosshair_visible_CB(), get_xhair_points(), RCREND_xhair_overlay(), RCREND_xhair_underlay(), REND_xhair_overlay(), and REND_xhair_underlay().

#define ORIMASK_LR_AP   (ORIMASK_LR | ORIMASK_AP)
 

Definition at line 196 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define ORIMASK_LR_IS   (ORIMASK_LR | ORIMASK_IS)
 

Definition at line 197 of file afni.h.

Referenced by AFNI_crosshair_visible_CB().

#define OVERLAY_SHUTDOWN   39
 

Definition at line 1423 of file afni.h.

Referenced by AFNI_receive_control().

#define OVERLAY_STARTUP   38
 

Definition at line 1422 of file afni.h.

Referenced by AFNI_receive_control().

#define PARENTIZE ds,
par       if( ISVALID_3DIM_DATASET((ds)) ) (ds)->parent = (XtPointer) (par)
 

Definition at line 896 of file afni.h.

#define PBAR_MODEBUT   0
 

Definition at line 512 of file afni.h.

Referenced by AFNI_drive_set_pbar_sign(), and AFNI_inten_bbox_CB().

#define PBAR_MODEPOS   (1 << PBAR_MODEBUT)
 

Definition at line 513 of file afni.h.

Referenced by AFNI_inten_bbox_CB().

#define PICTURE_OFF im   
 

Value:

do{ if( (im)->type == AFNI_3DDATA_VIEW )                                           \
        XtVaSetValues((im)->vwid->picture,XmNlabelPixmap,XmUNSPECIFIED_PIXMAP,NULL ); \
   } while(0)

Definition at line 699 of file afni.h.

Referenced by AFNI_quit_CB(), AFNI_set_cursor(), and AFNI_startup_timeout_CB().

#define PICTURE_ON im   
 

Value:

do{ if( (im)->type == AFNI_3DDATA_VIEW )                                 \
        XtVaSetValues((im)->vwid->picture,XmNlabelPixmap,logo_pixmap,NULL); \
   } while(0)
picture controls *

Definition at line 694 of file afni.h.

Referenced by AFNI_quit_CB(), AFNI_set_cursor(), and MAIN_workprocess().

#define PICTURE_SET im,
px   
 

Value:

do{ if( (im)->type == AFNI_3DDATA_VIEW )                           \
        XtVaSetValues((im)->vwid->picture,XmNlabelPixmap,(px),NULL ); \
   } while(0)

Definition at line 704 of file afni.h.

Referenced by AFNI_startup_timeout_CB().

#define PLANAR_MODE   2000
 

Definition at line 1456 of file afni.h.

Referenced by AFNI_seq_send_CB(), and DRAW_receiver().

#define PTS_READ_IJK   7
 

Definition at line 623 of file afni.h.

#define PTS_READ_XYZ   8
 

Definition at line 624 of file afni.h.

#define PTS_SET_COLOR   11
 

Definition at line 627 of file afni.h.

#define PTS_WRITE_IJK   9
 

Definition at line 625 of file afni.h.

#define PTS_WRITE_XYZ   10
 

Definition at line 626 of file afni.h.

#define RANGE_AUTOBUT   0
 

Definition at line 515 of file afni.h.

Referenced by AFNI_range_bbox_CB(), AFNI_reset_func_range(), and AFNI_set_func_autorange().

#define RANGE_AUTOVAL   (1 << RANGE_AUTOBUT)
 

Definition at line 516 of file afni.h.

Referenced by AFNI_range_bbox_CB().

#define RECEIVE_ALL_MASK   ( 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 )
 

Definition at line 1392 of file afni.h.

Referenced by AFNI_receive_control(), and AFNI_receive_init().

#define RECEIVE_ALTERATION   105
 

Definition at line 1445 of file afni.h.

Referenced by AFNI_process_alteration(), DRAW_receiver(), DSET2_dset_recv(), and DSETN_dset_recv().

#define RECEIVE_CLOSURE   104
 

Definition at line 1444 of file afni.h.

Referenced by AFNI_receive_destroy(), and DRAW_receiver().

#define RECEIVE_DRAWING_MASK   1
 

Definition at line 1382 of file afni.h.

Referenced by AFNI_process_drawing(), AFNI_receive_control(), AFNI_toggle_drawing(), and DRAW_finalize_dset_CB().

#define RECEIVE_DRAWNOTICE   106
 

Definition at line 1446 of file afni.h.

Referenced by AFNI_process_drawnotice(), RCREND_xhair_recv(), and REND_xhair_recv().

#define RECEIVE_DRAWNOTICE_MASK   8
 

Definition at line 1385 of file afni.h.

Referenced by AFNI_process_drawnotice(), AFNI_receive_control(), RCREND_main(), and REND_main().

#define RECEIVE_DSETCHANGE   107
 

Definition at line 1447 of file afni.h.

Referenced by AFNI_process_dsetchange(), DRAW_receiver(), DSET2_dset_recv(), DSETN_dset_recv(), RCREND_xhair_recv(), and REND_xhair_recv().

#define RECEIVE_DSETCHANGE_MASK   16
 

Definition at line 1386 of file afni.h.

Referenced by AFNI_process_dsetchange(), AFNI_receive_control(), DRAW_finalize_dset_CB(), DSET2_main(), DSETN_main(), RCREND_main(), and REND_main().

#define RECEIVE_FUNCDISPLAY   110
 

Definition at line 1450 of file afni.h.

Referenced by AFNI_process_funcdisplay().

#define RECEIVE_FUNCDISPLAY_MASK   128
 

Definition at line 1389 of file afni.h.

Referenced by AFNI_init_niml(), AFNI_process_funcdisplay(), and AFNI_receive_control().

#define RECEIVE_OVERLAY   103
 

Definition at line 1443 of file afni.h.

#define RECEIVE_OVERLAY_MASK   4
 

Definition at line 1384 of file afni.h.

Referenced by AFNI_receive_control().

#define RECEIVE_POINTS   101
 

Definition at line 1441 of file afni.h.

Referenced by AFNI_process_drawing(), and DRAW_receiver().

#define RECEIVE_REDISPLAY   109
 

Definition at line 1449 of file afni.h.

Referenced by AFNI_process_redisplay().

#define RECEIVE_REDISPLAY_MASK   64
 

Definition at line 1388 of file afni.h.

Referenced by AFNI_process_redisplay(), and AFNI_receive_control().

#define RECEIVE_TIMEINDEX   111
 

Definition at line 1451 of file afni.h.

Referenced by AFNI_process_timeindex(), and RCREND_xhair_recv().

#define RECEIVE_TIMEINDEX_MASK   256
 

Definition at line 1390 of file afni.h.

Referenced by AFNI_process_timeindex(), AFNI_receive_control(), and RCREND_main().

#define RECEIVE_TTATLAS   108
 

Definition at line 1448 of file afni.h.

#define RECEIVE_TTATLAS_MASK   32
 

Definition at line 1387 of file afni.h.

#define RECEIVE_VIEWPOINT   102
 

Definition at line 1442 of file afni.h.

Referenced by AFNI_process_viewpoint(), RCREND_xhair_recv(), REND_xhair_recv(), and TTget_recv().

#define RECEIVE_VIEWPOINT_MASK   2
 

Definition at line 1383 of file afni.h.

Referenced by AFNI_init_niml(), AFNI_process_viewpoint(), AFNI_receive_control(), RCREND_main(), REND_main(), and TTget_main().

#define REDISPLAY_ALL   2
 

Definition at line 1237 of file afni.h.

Referenced by AFNI_bucket_CB(), AFNI_drive_set_ijk(), AFNI_initialize_view(), AFNI_jumpto_dicom(), AFNI_jumpto_ijk(), AFNI_lock_carryout(), AFNI_modify_viewing(), AFNI_process_plugout(), AFNI_set_viewpoint(), AFNI_talto_CB(), AFNI_underlay_CB(), AFNI_view_xyz_CB(), PLUTO_dset_redisplay_mode(), and PLUTO_force_redisplay().

#define REDISPLAY_OPTIONAL   0
 

Definition at line 1235 of file afni.h.

Referenced by AFNI_gra_send_CB(), AFNI_seq_send_CB(), AFNI_thr_scale_CB(), PLUTO_dset_redisplay(), and PLUTO_dset_redisplay_mode().

#define REDISPLAY_OVERLAY   1
 

Definition at line 1236 of file afni.h.

Referenced by AFNI_bucket_CB(), AFNI_crosshair_color_CB(), AFNI_crosshair_gap_CB(), AFNI_crosshair_visible_CB(), AFNI_define_CB(), AFNI_do_many_writes(), AFNI_gra_send_CB(), AFNI_imag_pop_CB(), AFNI_marks_action_CB(), AFNI_marks_disp_av_CB(), AFNI_marktog_CB(), AFNI_misc_CB(), AFNI_redisplay(), AFNI_redisplay_func(), AFNI_see_marks_CB(), AFNI_see_ttatlas_CB(), AFNI_seq_send_CB(), AFNI_surf_bbox_CB(), AFNI_surf_redraw_CB(), AFNI_thr_scale_CB(), AFNI_write_dataset_CB(), AFNI_xhall_bbox_CB(), PLUTO_dset_redisplay_mode(), TAG_quit_CB(), and TAG_redraw().

#define REDISPLAY_SHUTDOWN   79
 

Definition at line 1417 of file afni.h.

Referenced by AFNI_receive_control().

#define REDISPLAY_STARTUP   78
 

Definition at line 1416 of file afni.h.

Referenced by AFNI_receive_control().

#define RESET_AFNI_QUIT iqqq       { AFNI_quit_CB(NULL,(XtPointer)(iqqq),NULL) ; RESET_sonnet() ; }
 

Definition at line 171 of file afni.h.

Referenced by AFNI_anatmode_CB(), AFNI_choose_dataset_CB(), AFNI_closedown_3dview(), AFNI_controller_panel_CB(), AFNI_crosshair_color_CB(), AFNI_crosshair_gap_CB(), AFNI_crosshair_visible_CB(), AFNI_define_CB(), AFNI_funcmode_CB(), AFNI_ijk_lock_change_CB(), AFNI_imag_pop_CB(), AFNI_jumpto_CB(), AFNI_jumpto_ijk_CB(), AFNI_lock_change_CB(), AFNI_lock_enforce_CB(), AFNI_marks_action_CB(), AFNI_marks_disp_av_CB(), AFNI_marks_edits_CB(), AFNI_marktog_CB(), AFNI_mnito_CB(), AFNI_quit_timeout_CB(), AFNI_resam_av_CB(), AFNI_resam_vox_av_CB(), AFNI_see_func_CB(), AFNI_see_marks_CB(), AFNI_startup_timeout_CB(), AFNI_sumato_CB(), AFNI_switchview_CB(), AFNI_thr_scale_CB(), AFNI_time_index_CB(), AFNI_time_lock_change_CB(), AFNI_view_xyz_CB(), AFNI_wrap_bbox_CB(), and AFNI_xhall_bbox_CB().

#define SAGITTAL   2
 

Definition at line 273 of file afni.h.

Referenced by AFNI_get_xhair_node(), and AFNI_view_setter().

#define SAVE_VPT iqq   
 

Value:

( (iqq)->vinfo->i1_old = (iqq)->vinfo->i1 ,  \
     (iqq)->vinfo->j2_old = (iqq)->vinfo->j2 ,  \
     (iqq)->vinfo->k3_old = (iqq)->vinfo->k3  )

Definition at line 278 of file afni.h.

Referenced by AFNI_imag_pop_CB(), AFNI_initialize_view(), AFNI_jumpto_dicom(), AFNI_jumpto_ijk(), AFNI_lock_carryout(), AFNI_marktog_CB(), AFNI_modify_viewing(), AFNI_seq_send_CB(), and AFNI_talto_CB().

#define SESSTRAIL   GLOBAL_library.sesstrail
 

Definition at line 1012 of file afni.h.

Referenced by AFNI_parse_args(), AFNI_set_window_titles(), AFNI_update_surface_widgets(), AFNI_write_many_dataset_CB(), ENV_init(), ENV_sesstrail(), make_PLUGIN_dataset_link(), PLUTO_commandstring(), and TAG_get_dset_CB().

#define SET_FIM_bkthr v       (GLOBAL_library.fim_bkthr_perc = (v))
 

Definition at line 1003 of file afni.h.

Referenced by GRA_bkthr_choose_CB(), and main().

#define SHOW_AFNI_PAUSE   AFNI_set_cursor( AFNI_WAITING_CURSOR )
 

Definition at line 1348 of file afni.h.

Referenced by AFNI_anatmode_CB(), AFNI_bucket_CB(), AFNI_do_many_writes(), AFNI_fimmer_execute(), AFNI_finalize_dataset_CB(), AFNI_finalize_read_Web_CB(), AFNI_funcmode_CB(), AFNI_resam_av_CB(), AFNI_resam_vox_av_CB(), AFNI_rescan_all_CB(), AFNI_rescan_CB(), AFNI_switchview_CB(), AFNI_underlay_CB(), AFNI_view_xyz_CB(), AFNI_write_dataset_CB(), DRAW_3D_sphere(), PLUG_action_CB(), PLUG_startup_plugin_CB(), RT_registration_2D_atend(), RT_registration_2D_realtime(), RT_registration_3D_atend(), RT_registration_3D_realtime(), RT_tell_afni_one(), RT_worker(), and TTRR_setup_widgets().

#define SHOW_AFNI_READY   AFNI_set_cursor( AFNI_DEFAULT_CURSOR )
 

Definition at line 1349 of file afni.h.

Referenced by AFNI_anatmode_CB(), AFNI_bucket_CB(), AFNI_do_many_writes(), AFNI_fimmer_execute(), AFNI_finalize_dataset_CB(), AFNI_finalize_read_Web_CB(), AFNI_funcmode_CB(), AFNI_marks_transform_CB(), AFNI_resam_av_CB(), AFNI_resam_vox_av_CB(), AFNI_rescan_all_CB(), AFNI_rescan_CB(), AFNI_startup_timeout_CB(), AFNI_switchview_CB(), AFNI_underlay_CB(), AFNI_view_xyz_CB(), AFNI_write_dataset_CB(), DRAW_3D_sphere(), PLUG_action_CB(), PLUG_startup_plugin_CB(), RT_registration_2D_atend(), RT_registration_2D_realtime(), RT_registration_3D_atend(), RT_registration_3D_realtime(), RT_tell_afni_one(), RT_worker(), and TTRR_setup_widgets().

#define SINGLE_MODE   1000
 

Definition at line 1455 of file afni.h.

Referenced by AFNI_gra_send_CB(), and DRAW_receiver().

#define SPECIAL_MODE   100000
 

Definition at line 1458 of file afni.h.

#define SUMA_ENABLED   GLOBAL_argopt.enable_suma
 

Definition at line 1018 of file afni.h.

Referenced by AFNI_brick_to_mri(), and AFNI_process_plugout().

#define THE_DISPLAY   (GLOBAL_library.dc->display)
 

Definition at line 1015 of file afni.h.

Referenced by RT_finish_dataset(), and RT_process_xevents().

#define THE_TOPSHELL   (GLOBAL_library.controllers[0]->vwid->top_shell)
 

Definition at line 1016 of file afni.h.

Referenced by RT_process_xevents(), RT_registration_2D_atend(), RT_registration_2D_realtime(), RT_registration_3D_atend(), RT_registration_3D_realtime(), and RT_tell_afni_one().

#define THR_FACTOR   0.0001
 

Definition at line 460 of file afni.h.

Referenced by AFNI_drive_set_threshnew(), AFNI_drive_set_threshold(), AFNI_finalsave_layout_CB(), AFNI_thr_scale_CB(), AFNI_thr_scale_drag_CB(), AFNI_thrdrag_lock_carryout(), RCREND_state_to_widgets(), RCREND_thr_scale_CB(), RCREND_thr_scale_drag_CB(), REND_state_to_widgets(), REND_thr_scale_CB(), and REND_thr_scale_drag_CB().

#define THR_PVAL_LABEL_NONE   "[N/A]"
 

Definition at line 457 of file afni.h.

Referenced by AFNI_set_thr_pval(), RCREND_func_widgets(), RCREND_set_thr_pval(), REND_func_widgets(), and REND_set_thr_pval().

#define THR_TOP_EXPON   4
 

Definition at line 459 of file afni.h.

Referenced by AFNI_drive_set_threshnew(), AFNI_drive_set_threshold(), AFNI_set_thresh_top(), AFNI_thrdrag_lock_carryout(), RCREND_func_widgets(), RCREND_state_to_widgets(), RCREND_thresh_top_CB(), REND_func_widgets(), REND_state_to_widgets(), and REND_thresh_top_CB().

#define THR_TOP_VALUE   9999.0
 

Definition at line 461 of file afni.h.

Referenced by AFNI_drive_set_threshnew().

#define THREED_MODE   3000
 

Definition at line 1457 of file afni.h.

#define TIMEINDEX_SHUTDOWN   99
 

Definition at line 1435 of file afni.h.

Referenced by AFNI_receive_control().

#define TIMEINDEX_STARTUP   98
 

Definition at line 1434 of file afni.h.

Referenced by AFNI_receive_control().

#define TOPSIZE   2048
 

Definition at line 123 of file afni.h.

#define TTATLAS_SHUTDOWN   69
 

Definition at line 1432 of file afni.h.

#define TTATLAS_STARTUP   68
 

Definition at line 1431 of file afni.h.

#define TTO_CMAX   48
 

Definition at line 1486 of file afni.h.

#define TTO_COUNT   241
 

Definition at line 1495 of file afni.h.

Referenced by AFNI_imag_pop_CB(), AFNI_talto_CB(), DRAW_make_widgets(), TT_whereami(), and TTRR_setup_widgets().

#define TTO_COUNT_BROD   209
 

Definition at line 1497 of file afni.h.

#define TTO_COUNT_NONBROD   125
 

Definition at line 1498 of file afni.h.

#define TTO_FORMAT   "%s [%3d,%3d,%3d]"
 

Definition at line 1488 of file afni.h.

Referenced by AFNI_imag_pop_CB().

#define TTO_LMAX   (TTO_CMAX+16)
 

Definition at line 1487 of file afni.h.

Referenced by AFNI_imag_pop_CB().

#define TTRR_HEMI_BOTH   2
 

Definition at line 1783 of file afni.h.

Referenced by AFNI_ttatlas_overlay(), DRAW_ttatlas_CB(), RCREND_overlay_ttatlas(), and REND_overlay_ttatlas().

#define TTRR_HEMI_LEFT   0
 

Definition at line 1781 of file afni.h.

Referenced by AFNI_ttatlas_overlay(), DRAW_ttatlas_CB(), RCREND_overlay_ttatlas(), and REND_overlay_ttatlas().

#define TTRR_HEMI_RIGHT   1
 

Definition at line 1782 of file afni.h.

Referenced by AFNI_ttatlas_overlay(), DRAW_ttatlas_CB(), RCREND_overlay_ttatlas(), and REND_overlay_ttatlas().

#define TTRR_METH_AGF   2
 

Definition at line 1777 of file afni.h.

#define TTRR_METH_FAG   4
 

Definition at line 1779 of file afni.h.

Referenced by AFNI_ttatlas_overlay(), RCREND_overlay_ttatlas(), and REND_overlay_ttatlas().

#define TTRR_METH_FGA   3
 

Definition at line 1778 of file afni.h.

Referenced by AFNI_ttatlas_overlay(), RCREND_overlay_ttatlas(), and REND_overlay_ttatlas().

#define TTRR_METH_GAF   1
 

Definition at line 1776 of file afni.h.

Referenced by AFNI_ttatlas_overlay(), RCREND_overlay_ttatlas(), and REND_overlay_ttatlas().

#define TTRR_METH_OFF   0
 

Definition at line 1775 of file afni.h.

Referenced by TTRR_get_params().

#define UNDERLAY_ALLFUNC   1
 

Definition at line 90 of file afni.h.

Referenced by AFNI_setup_viewing(), and AFNI_underlay_CB().

#define UNDERLAY_ALLFUNC_BVAL   (1 << UNDERLAY_ALLFUNC)
 

Definition at line 94 of file afni.h.

#define UNDERLAY_ANAT   0
 

Definition at line 89 of file afni.h.

Referenced by AFNI_brick_to_mri(), AFNI_make_wid2(), AFNI_setup_viewing(), and AFNI_underlay_CB().

#define UNDERLAY_ANAT_BVAL   (1 << UNDERLAY_ANAT )
 

Definition at line 93 of file afni.h.

#define UNDERLAY_THRFUNC   2
 

Definition at line 91 of file afni.h.

#define UNDERLAY_THRFUNC_BVAL   (1 << UNDERLAY_THRFUNC)
 

Definition at line 95 of file afni.h.

#define UNDERLAY_TO_GRAPHER iq,
bb   
 

Value:

(((bb)==(iq)->b123_ulay) ? (iq)->g123 :  \
                                    ((bb)==(iq)->b231_ulay) ? (iq)->g231 :  \
                                    ((bb)==(iq)->b312_ulay) ? (iq)->g312 : NULL)

Definition at line 913 of file afni.h.

Referenced by AFNI_brick_to_mri(), and AFNI_overlay().

#define UNDERLAY_TO_OVERLAY iq,
bb   
 

Value:

(((bb)==(iq)->b123_ulay) ? (iq)->b123_fim :  \
                                    ((bb)==(iq)->b231_ulay) ? (iq)->b231_fim :  \
                                    ((bb)==(iq)->b312_ulay) ? (iq)->b312_fim : NULL)

Definition at line 917 of file afni.h.

Referenced by AFNI_overlay().

#define UNDERLAY_TO_VIEWER iq,
bb   
 

Value:

(((bb)==(iq)->b123_ulay) ? (iq)->s123 :  \
                                   ((bb)==(iq)->b231_ulay) ? (iq)->s231 :  \
                                   ((bb)==(iq)->b312_ulay) ? (iq)->s312 : NULL)

Definition at line 909 of file afni.h.

#define UNDO_MODE   101000
 

Definition at line 1459 of file afni.h.

Referenced by AFNI_seq_send_CB(), and DRAW_receiver().

#define UNDUMMYIZE
 

Value:

do { GLOBAL_library.have_dummy_dataset = 0 ;                                   \
      XtSetSensitive(GLOBAL_library.controllers[0]->vwid->prog->clone_pb,True); \
    } while(0)

Definition at line 1022 of file afni.h.

Referenced by AFNI_finalize_read_sess_CB(), AFNI_finalize_read_Web_CB(), process_NIML_AFNI_dataset(), and RT_tell_afni_one().

#define USABLE_FIMDATA iq   
 

Value:

( IM3D_OPEN(iq) && (iq)->type == AFNI_3DDATA_VIEW              && \
    DSET_GRAPHABLE((iq)->fimdata->fimdset)                        && \
    (iq)->fimdata->fimref != NULL                                  && \
    (iq)->fimdata->fimref->kind == MRI_float                        && \
    (iq)->fimdata->fimref->nx >= DSET_NUM_TIMES((iq)->fimdata->fimdset) )

Definition at line 759 of file afni.h.

#define USE_HIDDEN
 

Definition at line 602 of file afni.h.

#define USE_SKIT
 

Definition at line 115 of file afni.h.

#define USE_SONNETS
 

Definition at line 113 of file afni.h.

#define VERSION   AFNI_VERSION_LABEL
 

Definition at line 126 of file afni.h.

#define VIEWER_TO_GRAPHER iq,
ss   
 

Value:

(((ss)==(iq)->s123) ? (iq)->g123 :  \
                                  ((ss)==(iq)->s231) ? (iq)->g231 :  \
                                  ((ss)==(iq)->s312) ? (iq)->g312 : NULL)

Definition at line 901 of file afni.h.

Referenced by AFNI_seq_send_CB().

#define VIEWPOINT_SHUTDOWN   29
 

Definition at line 1414 of file afni.h.

Referenced by AFNI_receive_control().

#define VIEWPOINT_STARTUP   28
 

Definition at line 1413 of file afni.h.

Referenced by AFNI_receive_control().

#define WANT_RWCOX_IMAGE
 

Definition at line 114 of file afni.h.

#define WARP_4D
 

Definition at line 29 of file afni.h.

Referenced by AFNI_syntax().

#define WARPED_VIEW vvv       ((vvv)+1)
 

Definition at line 283 of file afni.h.

Referenced by AFNI_define_CB(), AFNI_init_warp(), AFNI_marks_action_CB(), AFNI_marks_edits_CB(), and AFNI_marks_transform_CB().


Function Documentation

void absfft_func int   ,
double   ,
double   ,
float *   
 

Definition at line 91 of file afni_transforms.c.

References CABS, csfft_cox(), csfft_nextup(), dt, free, get_linear_trend(), complex::i, malloc, complex::r, and vec.

00092 {
00093    static complex *cx=NULL ;
00094    static int      ncx=0 , numold=0 ;
00095    float f0,f1 ;
00096    int ii ;
00097 
00098    if( num < 2 ) return ;
00099    if( num > numold ){
00100       numold = num ;
00101       ncx    = csfft_nextup(numold) ;
00102       if( cx != NULL ) free(cx) ;
00103       cx = (complex *) malloc(sizeof(complex)*ncx) ;
00104    }
00105 
00106    get_linear_trend( num , vec , &f0,&f1 ) ;  /* thd_detrend.c */
00107 
00108    for( ii=0 ; ii < num ; ii++ ){ cx[ii].r = vec[ii]-(f0+f1*ii); cx[ii].i = 0.0; }
00109    for(      ; ii < ncx ; ii++ ){ cx[ii].r = cx[ii].i = 0.0 ; }
00110 
00111    csfft_cox( -1 , ncx , cx ) ;               /* csfft.c */
00112 
00113    vec[0] = 0.0 ;
00114    for( ii=1 ; ii < num ; ii++ ) vec[ii] = CABS(cx[ii]) ;
00115 
00116    return ;
00117 }

void AFNI_3d_linefill int   ,
int *   ,
int *   ,
int *   ,
int *   ,
int **   ,
int **   ,
int **   
 

Definition at line 772 of file afni_receive.c.

References abs, ENTRY, malloc, x2, y1, and z1.

Referenced by AFNI_process_drawing().

00774 {
00775    int * xut , * yut , * zut ;
00776    int   nut , iin , jout , nall ;
00777    int   x1,y1,z1 , x2,y2,z2 , dx,dy,dz , adx,ady,adz , xlast,ylast,zlast ;
00778    float fdxyz , fdx,fdy,fdz , fx,fy,fz ;
00779 
00780 ENTRY("AFNI_3d_linefill") ;
00781 
00782    /* sanity check */
00783 
00784    if( nin <= 0 || xin == NULL || yin == NULL || zin == NULL ){
00785       *nout = 0 ; *xout = *yout = *zout = NULL ; EXRETURN ;
00786    }
00787 
00788    /* trivial case */
00789 
00790    if( nin == 1 ){
00791       nut = 1 ;                                             *nout = nut ;
00792       xut = (int *) malloc(sizeof(int)) ; xut[0] = xin[0] ; *xout = xut ;
00793       yut = (int *) malloc(sizeof(int)) ; yut[0] = yin[0] ; *yout = yut ;
00794       zut = (int *) malloc(sizeof(int)) ; zut[0] = zin[0] ; *zout = zut ;
00795       EXRETURN ;
00796    }
00797 
00798    /* setup to scan through lines */
00799 
00800    nall = nin ;
00801    xut  = (int *) malloc( sizeof(int) * nall ) ;
00802    yut  = (int *) malloc( sizeof(int) * nall ) ;
00803    zut  = (int *) malloc( sizeof(int) * nall ) ;
00804    nut  = 0 ;
00805 
00806 #undef  ADDPT
00807 #define ADDPT(i,j,k)                                          \
00808   do{ if( nut == nall ){                                      \
00809          nall += 128 ;                                        \
00810          xut = (int *) realloc( xut , sizeof(int) * nall ) ;  \
00811          yut = (int *) realloc( yut , sizeof(int) * nall ) ;  \
00812          zut = (int *) realloc( zut , sizeof(int) * nall ) ;  \
00813       }                                                       \
00814       xut[nut] = xlast = (i) ;                                \
00815       yut[nut] = ylast = (j) ;                                \
00816       zut[nut] = zlast = (k) ; nut++ ; } while(0)
00817 
00818    /* draw line from point #iin to #iin+1 */
00819 
00820    x2 = xin[0] ; y2 = yin[0] ; z2 = zin[0] ;
00821    for( iin=0 ; iin < nin-1 ; iin++ ){
00822       x1  = x2         ; y1  = y2         ; z1  = z2 ;
00823       x2  = xin[iin+1] ; y2  = yin[iin+1] ; z2  = zin[iin+1] ;
00824       dx  = x2 - x1    ; dy  = y2 - y1    ; dz  = z2 - z1 ;
00825       adx = abs(dx)    ; ady = abs(dy)    ; adz = abs(dz) ;
00826 
00827       /* add start point to list */
00828 
00829       ADDPT(x1,y1,z1) ;
00830 
00831       /* special case: neighbors ==> skip to next line */
00832 
00833       if( adx <= 1 && ady <= 1 && adz <= 1 ) continue ;
00834 
00835       /* OK, we have to do work (moan) */
00836 
00837 #define SFRAC 0.495
00838 
00839       fdxyz = adx + ady + adz ;                /* Manhattan distance */
00840       fdx   = SFRAC * dx / fdxyz ;             /* steps */
00841       fdy   = SFRAC * dy / fdxyz ;
00842       fdz   = SFRAC * dz / fdxyz ;
00843 
00844       /* step thru in small increments,
00845          adding new integer points, and stopping at line's end */
00846 
00847 #if 0
00848 fprintf(stderr,"linefill: from %d %d %d to %d %d %d\n",
00849         x1,y1,z1 , x2,y2,z2 ) ;
00850 #endif
00851 
00852       fx = x1+fdx+0.499 ; fy = y1+fdy+0.499 ; fz = z1+fdz+0.499 ;
00853       do {
00854          fx = fx + fdx ; fy = fy + fdy ; fz = fz + fdz ;
00855          x1 = (int) fx ; y1 = (int) fy ; z1 = (int) fz ;
00856 
00857 #if 0
00858 fprintf(stderr,"   at %d %d %d\n",x1,y1,z1) ;
00859 #endif
00860 
00861          if( x1 == x2    && y1 == y2    && z1 == z2    ) break ;
00862 
00863          if( x1 != xlast || y1 != ylast || z1 != zlast ) ADDPT(x1,y1,z1) ;
00864       } while(1) ;
00865 
00866    } /* end of loop over lines */
00867 
00868    ADDPT(x2,y2,z2) ;  /* add last point */
00869 
00870    *nout = nut ; *xout = xut ; *yout = yut ; *zout = zut ;
00871    EXRETURN ;
00872 }

void AFNI_add_interruptable Widget   
 

Definition at line 2031 of file afni_fimmer.c.

References ADDTO_XTARR, XtPointer_array::ar, DESTROY_XTARR, GLOBAL_library, INIT_XTARR, AFNI_library_type::interruptables, MCW_set_widget_cursor(), NORMAL_cursorize, XtPointer_array::num, MCW_interruptables::widgets, and MCW_interruptables::windows.

Referenced by RCREND_autocompute_CB(), RCREND_read_exec_CB(), REND_autocompute_CB(), and REND_read_exec_CB().

02032 {
02033    Window wwin , wroot , wpar ;
02034    int    ii ;
02035    Window *     wchild ;
02036    unsigned int nchild ;
02037 
02038    /* input Widget is NULL is the signal to reset everything */
02039 
02040    if( w == NULL ){
02041       if( GLOBAL_library.interruptables.windows != NULL ){ /* just toss this list */
02042          DESTROY_XTARR( GLOBAL_library.interruptables.windows ) ;
02043          GLOBAL_library.interruptables.windows = NULL ;
02044       }
02045 
02046       if( GLOBAL_library.interruptables.widgets != NULL ){ /* must reset cursors */
02047          for( ii=0 ; ii < GLOBAL_library.interruptables.widgets->num ; ii++ )
02048             MCW_set_widget_cursor( GLOBAL_library.interruptables.widgets->ar[ii] , 0 );
02049 
02050          DESTROY_XTARR( GLOBAL_library.interruptables.widgets ) ;
02051          GLOBAL_library.interruptables.widgets = NULL ;
02052       }
02053       return ;
02054    }
02055 
02056    /* non-NULL widget --> add it and its sub-windows to the list */
02057 
02058    if( ! XtIsRealized(w) ) return ;
02059    wwin = XtWindowOfObject(w) ; if( wwin == (Window) NULL ) return ;
02060 
02061    /* get list of all sub-windows into wchild */
02062 
02063    nchild = 0 ;
02064    (void) XQueryTree( XtDisplay(w) , wwin , &wroot , &wpar , &wchild , &nchild ) ;
02065 
02066    if( GLOBAL_library.interruptables.windows == NULL )       /* initialize lists */
02067       INIT_XTARR( GLOBAL_library.interruptables.windows ) ;
02068 
02069    if( GLOBAL_library.interruptables.widgets == NULL )
02070       INIT_XTARR( GLOBAL_library.interruptables.widgets ) ;
02071 
02072    ADDTO_XTARR( GLOBAL_library.interruptables.windows , wwin ) ;  /* add to lists */
02073    ADDTO_XTARR( GLOBAL_library.interruptables.widgets , w    ) ;
02074 
02075    for( ii=0 ; ii < nchild ; ii++ )
02076       ADDTO_XTARR( GLOBAL_library.interruptables.windows , wchild[ii] ) ;
02077 
02078    XFree( wchild ) ;  /* return this to Xlib */
02079 
02080    NORMAL_cursorize( w) ;
02081 
02082    return ;
02083 }

void AFNI_add_timeseries MRI_IMAGE  
 

Definition at line 10176 of file afni.c.

References ADDTO_IMARR, ENTRY, GLOBAL_library, POPDOWN_timeseries_chooser, and AFNI_library_type::timeseries.

Referenced by AFNI_finalize_read_Web_CB(), AFNI_gra_send_CB(), AFNI_read_inputs(), PLUTO_register_timeseries(), and process_NIML_MRI_IMAGE().

10177 {
10178 ENTRY("AFNI_add_timeseries") ;
10179 
10180    if( tsim != NULL ){
10181       POPDOWN_timeseries_chooser ;
10182       ADDTO_IMARR(GLOBAL_library.timeseries,tsim) ;
10183    }
10184    EXRETURN ;
10185 }

int AFNI_all_tog int   ,
Widget *   
 

void AFNI_anatmode_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

check to see which ones are in the old list *

Definition at line 3408 of file afni_func.c.

References AFNI_modify_viewing(), AFNI_datamode_widgets::anatmode_bbox, AFNI_widget_set::dmode, DMODE_BRICK_BVAL, ENTRY, AFNI_view_info::force_anat_wod, IM3D_VALID, MCW_val_bbox(), RESET_AFNI_QUIT, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, STATUS, AFNI_view_info::tempflag, Three_D_View::vinfo, and Three_D_View::vwid.

03409 {
03410    Three_D_View *im3d = (Three_D_View *) cd ;
03411    int old_val , new_val ;
03412    THD_fvec3 fv ;
03413    THD_ivec3 iv ;
03414 
03415 ENTRY("AFNI_anatmode_CB") ;
03416 
03417    if( ! IM3D_VALID(im3d) ) EXRETURN ;
03418 
03419    old_val = 1 << im3d->vinfo->force_anat_wod ;
03420    new_val = MCW_val_bbox( im3d->vwid->dmode->anatmode_bbox ) ;
03421 
03422 if(PRINT_TRACING){
03423  char str[256] ; sprintf(str,"old_val=%d new_val=%d",old_val,new_val) ;
03424  STATUS(str) ; }
03425 
03426    if( new_val != old_val ){
03427      im3d->vinfo->force_anat_wod = (new_val != DMODE_BRICK_BVAL) ;
03428      SHOW_AFNI_PAUSE ;
03429      im3d->vinfo->tempflag = 1 ;           /* 15 Mar 2000 */
03430      AFNI_modify_viewing( im3d , True ) ;  /* redisplay */
03431      SHOW_AFNI_READY ;
03432    }
03433 
03434    RESET_AFNI_QUIT(im3d) ;
03435    EXRETURN ;
03436 }

void AFNI_andersonville THD_sessionlist  ,
Boolean   
 

Definition at line 4253 of file afni_func.c.

References THD_3dim_dataset::death_mark, DOOMED, THD_session::dsset, ENTRY, FIRST_VIEW_TYPE, GLOBAL_library, ISVALID_3DIM_DATASET, ISVALID_SESSION, ISVALID_SESSIONLIST, LAST_VIEW_TYPE, myXtFree, THD_session::num_dsset, THD_sessionlist::num_sess, AFNI_library_type::session, THD_sessionlist::ssar, STATUS, THD_delete_3dim_dataset(), and VIEW_ORIGINAL_TYPE.

Referenced by AFNI_marks_transform_CB(), and AFNI_rescan_session_OLD().

04254 {
04255    int iss , jdd , kvv , num_killed=0 ;
04256    THD_session *ss ;
04257    THD_3dim_dataset *dset ;
04258    Boolean kill_me ;
04259 
04260 ENTRY("AFNI_andersonville") ;
04261 
04262    if( ! ISVALID_SESSIONLIST(ssl) ) EXRETURN ;
04263 
04264    /* loop over each session */
04265 
04266    for( iss=0 ; iss < ssl->num_sess ; iss++ ){
04267       ss = ssl->ssar[iss] ;
04268       if( !ISVALID_SESSION(ss) ) continue ;  /* no good ==> skip */
04269 
04270       if( ss == GLOBAL_library.session ) continue ; /* 21 Dec 2001 */
04271 
04272       /* loop over datasets in this session */
04273 
04274       for( jdd=0 ; jdd < ss->num_dsset ; jdd++ ){
04275          for( kvv=FIRST_VIEW_TYPE ; kvv <= LAST_VIEW_TYPE ; kvv++ ){
04276 
04277             dset = ss->dsset[jdd][kvv] ;
04278 
04279             if( ISVALID_3DIM_DATASET(dset) &&    /* good dset */
04280                 dset->death_mark == DOOMED   ){  /* alas, poor Yorick */
04281 
04282                kill_me = (kvv == VIEW_ORIGINAL_TYPE) ? False : kill_files ;
04283                THD_delete_3dim_dataset( dset , kill_me ) ;
04284                myXtFree( dset ) ;
04285                ss->dsset[jdd][kvv] = NULL ; num_killed ++ ;
04286             }
04287          }
04288       }
04289 
04290    }  /* end of loop over sessions */
04291 
04292 #ifdef AFNI_DEBUG
04293 { char str[256] ;
04294   sprintf(str,"total # datasets killed = %d",num_killed) ;
04295   STATUS(str) ; }
04296 #endif
04297 
04298    EXRETURN ;
04299 }

void AFNI_append_sessions THD_session   ssa,
THD_session   ssb
 

Append datasets in THD_session ssb to those in ssa.

Date:
20 Dec 2001

Definition at line 2491 of file afni_func.c.

References THD_session::dsset, ENTRY, ISVALID_SESSION, LAST_VIEW_TYPE, THD_session::num_dsset, qs, THD_session::sessname, THD_equiv_files(), and THD_MAX_SESSION_SIZE.

Referenced by AFNI_finalize_read_sess_CB(), AFNI_read_inputs(), and AFNI_rescan_session_OLD().

02492 {
02493    int qs, qd, vv ;
02494 
02495 ENTRY("AFNI_append_sessions") ;
02496 
02497    if( !ISVALID_SESSION(ssa) || !ISVALID_SESSION(ssb) ) EXRETURN ;
02498    if( THD_equiv_files(ssa->sessname,ssb->sessname)   ) EXRETURN ;
02499 
02500    qs = ssa->num_dsset ;
02501    for( qd=0; qd < ssb->num_dsset && qd+qs < THD_MAX_SESSION_SIZE ; qd++ )
02502       for( vv=0 ; vv <= LAST_VIEW_TYPE ; vv++ )
02503          ssa->dsset[qd+qs][vv] = ssb->dsset[qd][vv] ;
02504    ssa->num_dsset += qd ;
02505 
02506    EXRETURN ;
02507 }

XmString AFNI_autorange_label Three_D_View  
 

Definition at line 4431 of file afni_func.c.

References AV_fval_to_char(), THD_statistics::bstat, DEFAULT_FIM_SCALE, DSET_VALID_BSTAT, ENTRY, AFNI_view_info::fim_autorange, AFNI_view_info::fim_index, Three_D_View::fim_now, ISVALID_3DIM_DATASET, ISVALID_STATISTIC, THD_brick_stats::max, THD_brick_stats::min, RELOAD_STATS, RETURN, s2, THD_3dim_dataset::stats, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_reset_func_range().

04432 {
04433    XmString xstr ;
04434    float rrr ;
04435    char buf[32] , qbuf[16] ;
04436 
04437 ENTRY("AFNI_autorange_label") ;
04438 
04439    if( ! ISVALID_3DIM_DATASET(im3d->fim_now) ){  /* no function */
04440      rrr = DEFAULT_FIM_SCALE ;
04441    } else {
04442      RELOAD_STATS(im3d->fim_now) ;
04443      if( ISVALID_STATISTIC(im3d->fim_now->stats) ){
04444        float s1 , s2 ; int iv ;
04445 
04446        iv = im3d->vinfo->fim_index ;
04447 
04448        if( DSET_VALID_BSTAT(im3d->fim_now,iv) ){
04449          s1  = fabs(im3d->fim_now->stats->bstat[iv].min) ,
04450          s2  = fabs(im3d->fim_now->stats->bstat[iv].max) ;
04451          rrr = (s1<s2) ? s2 : s1 ;                      /* largest fim */
04452        } else {
04453          rrr = DEFAULT_FIM_SCALE ;                      /* don't have stats */
04454        }
04455      } else {
04456        rrr = DEFAULT_FIM_SCALE ;                        /* don't have stats */
04457      }
04458    }
04459    im3d->vinfo->fim_autorange = rrr ;
04460    AV_fval_to_char( rrr , qbuf ) ;
04461    sprintf( buf , "autoRange:%s" , qbuf ) ;
04462    xstr = XmStringCreateLtoR( buf , XmFONTLIST_DEFAULT_TAG ) ;
04463 
04464 #ifdef AFNI_DEBUG
04465 { STATUS(buf) ;
04466   sprintf(buf,"rrr=%g",rrr) ; STATUS(buf) ; }
04467 #endif
04468 
04469    RETURN(xstr) ;
04470 }

THD_fvec3 AFNI_backward_warp_vector THD_warp  ,
THD_fvec3   
 

Definition at line 504 of file Vecwarp.c.

00505 {
00506    THD_fvec3 new_fv ;
00507 
00508    if( warp == NULL ) return old_fv ;
00509 
00510    switch( warp->type ){
00511 
00512       default: new_fv = old_fv ; break ;
00513 
00514       case WARP_TALAIRACH_12_TYPE:{
00515          THD_linear_mapping map ;
00516          int iw ;
00517 
00518          /* test if input is in bot..top of each defined map */
00519 
00520          for( iw=0 ; iw < 12 ; iw++ ){
00521             map = warp->tal_12.warp[iw] ;
00522 
00523             if( old_fv.xyz[0] >= map.bot.xyz[0] &&
00524                 old_fv.xyz[1] >= map.bot.xyz[1] &&
00525                 old_fv.xyz[2] >= map.bot.xyz[2] &&
00526                 old_fv.xyz[0] <= map.top.xyz[0] &&
00527                 old_fv.xyz[1] <= map.top.xyz[1] &&
00528                 old_fv.xyz[2] <= map.top.xyz[2]   ) break ;  /* leave loop */
00529          }
00530          new_fv = MATVEC_SUB(map.mbac,old_fv,map.svec) ;
00531       }
00532       break ;
00533 
00534       case WARP_AFFINE_TYPE:{
00535          THD_linear_mapping map = warp->rig_bod.warp ;
00536          new_fv = MATVEC_SUB(map.mbac,old_fv,map.svec) ;
00537       }
00538       break ;
00539 
00540    }
00541    return new_fv ;
00542 }

XtPointer AFNI_brick_to_mri int    n,
int    type,
FD_brick   br
 

Definition at line 1927 of file afni.c.

References FD_brick::a123, a2, abs, AFNI_3DDATA_VIEW, AFNI_do_bkgd_lab(), AFNI_get_xhair_node(), AFNI_gra_send_CB(), AFNI_noenv(), AFNI_overlay(), AFNI_seq_send_CB(), AFNI_set_valabel(), AFNI_yesenv(), AFNI_view_info::anat_index, Three_D_View::anat_now, AFNI_view_info::anat_val, MCW_imseq_status::aux, MCW_grapher_status::aux, AFNI_surface_widgets::boxsize_av, create_memplot_surely(), AFNI_view_info::crosshair_gap, AFNI_view_info::crosshair_ovcolor, AFNI_view_info::crosshair_visible, CURRENT_DAXES, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, Three_D_View::dc, DC_parse_color(), DCOV_BLUEBYTE, DCOV_GREENBYTE, DCOV_REDBYTE, FD_brick::del1, FD_brick::del2, FD_brick::del3, DESTROY_MEMPLOT, FD_brick::dset, DSET_NVALS, ENTRY, EQUIV_DSETS, FD_brick_to_series(), FD_warp_to_mri(), AFNI_view_info::fim_index, Three_D_View::fim_now, get_active_memplot(), getenv(), GLOBAL_library, graCR_getseries, graCR_getstatus, AFNI_view_info::i1, i1, i2, SUMA_ixyz::id, THD_ivec3::ijk, SUMA_surface::ijk, IM3D_OPEN, AFNI_widget_set::imag, isqCR_getimage, isqCR_getlabel, isqCR_getmemplot, isqCR_getoverlay, isqCR_getqimage, isqCR_getstatus, MCW_arrowval::ival, SUMA_surface::ixyz, AFNI_view_info::j2, AFNI_view_info::k3, MRI_IMAGE::kind, AFNI_surface_widgets::linewidth_av, LOAD_DSET_VIEWS, LOAD_FVEC3, LOAD_IVEC3, MCW_grapher::mat, MCW_set_widget_label(), MCW_val_bbox(), MEMPLOT_NLINE, MIN, mp, myXtNew, FD_brick::n1, FD_brick::n2, FD_brick::n3, FD_brick::namecode, MCW_grapher_status::namecode, AFNI_surface_widgets::nrow, SUMA_surface::num_ijk, SUMA_surface::num_ixyz, MCW_imseq_status::num_series, MCW_grapher_status::num_series, MCW_imseq_status::num_total, MCW_grapher_status::num_total, THD_datablock::nvals, MCW_grapher_status::nx, MCW_grapher_status::ny, MCW_grapher_status::nz, MCW_imseq_status::parent, FD_brick::parent, MCW_grapher_status::parent, plotline_memplot(), plotrect_memplot(), AFNI_imaging_widgets::pop_bkgd_lab, AFNI_library_type::registered_0D, AFNI_library_type::registered_1D, AFNI_library_type::registered_2D, AFNI_library_type::registered_slice_proj, RETURN, s2, SCLADD_FVEC3, MCW_imseq_status::send_CB, MCW_grapher_status::send_CB, SESSION_HAS_SUMA, set_color_memplot(), set_thick_memplot(), MCW_imseq_status::slice_proj, Three_D_View::ss_now, STATUS, strtod(), THD_session::su_num, THD_session::su_surf, SUMA_ENABLED, SUMA_find_node_id(), AFNI_surface_widgets::surf_bbox, AFNI_surface_widgets::surf_ledg_av, AFNI_surface_widgets::surf_line_av, AFNI_surface_widgets::surf_node_av, AFNI_viewing_widgets::swid, TEMP_IVEC3, THD_3dfind_to_fdfind(), THD_3dind_to_3dmm(), THD_3dind_to_fdind(), THD_3dmm_to_3dfind(), THD_3dmm_to_dicomm(), THD_dicomm_to_3dmm(), THD_fdind_to_3dind(), MCW_imseq_status::transforms0D, MCW_grapher_status::transforms0D, MCW_grapher_status::transforms1D, MCW_imseq_status::transforms2D, Three_D_View::type, UNDERLAY_ANAT, UNDERLAY_TO_GRAPHER, AFNI_view_info::underlay_type, AFNI_widget_set::view, Three_D_View::vinfo, Three_D_View::vwid, SUMA_ixyz::x, AFNI_view_info::xhairs_all, AFNI_view_info::xhairs_ndown, AFNI_view_info::xhairs_nskip, AFNI_view_info::xhairs_nup, AFNI_view_info::xhairs_orimask, AFNI_view_info::xhairs_periodic, AFNI_view_info::xhairs_show_montage, THD_dataxes::xxmax, THD_dataxes::xxmin, THD_dataxes::xxorient, THD_fvec3::xyz, SUMA_ixyz::y, THD_dataxes::yymax, THD_dataxes::yymin, THD_dataxes::yyorient, SUMA_ixyz::z, THD_dataxes::zzmax, THD_dataxes::zzmin, and THD_dataxes::zzorient.

Referenced by AFNI_view_xyz_CB().

01928 {
01929    MRI_IMAGE * im ;
01930    MCW_imseq_status * stat ;
01931    int i1,i2,jb,bb , dd1,dd2,tt1,tt2 ;
01932 
01933 ENTRY("AFNI_brick_to_mri") ;
01934 
01935 if(PRINT_TRACING){ char str[256] ; sprintf(str,"n=%d type=%d",n,type) ; STATUS(str) ; }
01936 
01937    /*-------------------------------------------------*/
01938    /*-------- May 1996: graph callbacks first --------*/
01939 
01940    if( type == graCR_getstatus ){
01941       MCW_grapher_status * grstat = myXtNew( MCW_grapher_status ) ;
01942 
01943       grstat->num_total  = grstat->num_series = br->dset->dblk->nvals ;
01944       grstat->nx         = br->n1 ;
01945       grstat->ny         = br->n2 ;
01946       grstat->nz         = br->n3 ;
01947 
01948       grstat->send_CB    = AFNI_gra_send_CB ;
01949       grstat->parent     = (XtPointer) br ;
01950       grstat->aux        = NULL ;
01951 
01952       grstat->transforms0D = & (GLOBAL_library.registered_0D) ;
01953       grstat->transforms1D = & (GLOBAL_library.registered_1D) ;
01954 
01955       strcpy( grstat->namecode , br->namecode ) ;
01956 
01957       RETURN( (XtPointer) grstat ) ;
01958    }
01959 
01960    if( type == graCR_getseries ){
01961       im = FD_brick_to_series( n , br ) ;
01962       RETURN( (XtPointer) im ) ;
01963    }
01964 
01965    /*----------------------------------------*/
01966    /*-------- Now do imseq callbacks --------*/
01967 
01968    if( n < 0 || n >= br->n3 ) RETURN(NULL) ;
01969 
01970    /*--- overlay # n ---*/
01971 
01972    if( type == isqCR_getoverlay  ){
01973       Three_D_View * im3d = (Three_D_View *) br->parent ;
01974 
01975 STATUS("get overlay") ;
01976 
01977       im = AFNI_overlay( n , br ) ;
01978       if( !AFNI_noenv("AFNI_VALUE_LABEL") ) AFNI_do_bkgd_lab( im3d ) ;
01979       RETURN( (XtPointer) im ) ;
01980    }
01981 
01982    /*--- status ---*/
01983 
01984    if( type == isqCR_getstatus ){
01985 
01986 STATUS("get status") ;
01987 
01988       stat = myXtNew( MCW_imseq_status ) ;
01989 
01990       stat->num_total  = br->n3 ;
01991       stat->num_series = br->n3 ;
01992       stat->send_CB    = AFNI_seq_send_CB ;
01993       stat->parent     = (XtPointer) br ;
01994       stat->aux        = NULL ;
01995 
01996       stat->transforms0D = & (GLOBAL_library.registered_0D) ;
01997       stat->transforms2D = & (GLOBAL_library.registered_2D) ;
01998       stat->slice_proj   = & (GLOBAL_library.registered_slice_proj) ;
01999 
02000       RETURN( (XtPointer) stat ) ;
02001    }
02002 
02003    /*--- 26 Feb 2001: return a memplot drawing struct ---*/
02004    /*--- 22 Mar 2002: add crosshairs to surface stuff ---*/
02005 
02006 #define RX 0.2
02007    if( type == isqCR_getmemplot ){
02008      Three_D_View *im3d = (Three_D_View *) br->parent ;
02009      int do_xhar=(im3d->vinfo->crosshair_visible && AFNI_yesenv("AFNI_CROSSHAIR_LINES"));
02010      int do_surf;
02011      MEM_plotdata *mp ;
02012      AFNI_surface_widgets *swid = im3d->vwid->view->swid ;  /* 19 Aug 2002 */
02013      THD_session *suss=im3d->ss_now ;                       /* 20 Jan 2004 */
02014      THD_dataxes *daxes=CURRENT_DAXES(br->dset) ;
02015 
02016      if( !IM3D_OPEN(im3d) )     RETURN(NULL) ;
02017 
02018      /* 20 Jan 2004: surfaces are now in the session, not on the dataset! */
02019 
02020      do_surf = SUMA_ENABLED && SESSION_HAS_SUMA(suss) ;
02021      if( !do_surf && !do_xhar ) RETURN(NULL) ;  /* nothing to do */
02022 
02023      /* get ready to plot */
02024 
02025 STATUS("creating memplot for image overlay") ;
02026      create_memplot_surely( "SUMA_plot" , 1.0 ) ;
02027      mp = get_active_memplot() ;
02028 
02029      /* plot surface stuff, if any */
02030 
02031     if( do_surf ){
02032      int ks ;
02033      int kbest=-1 , ibest=-1 ;          /* 24 Feb 2003 */
02034 
02035      AFNI_get_xhair_node( im3d , &kbest , &ibest ) ;   /* 24 Feb 2003 */
02036 
02037      for( ks=0 ; ks < suss->su_num ; ks++ ){  /* 14 Aug 2002: loop over surfaces */
02038       SUMA_surface *ag = suss->su_surf[ks] ;
02039       int nn , ii,jj ;
02040       SUMA_ixyz *nod ;
02041       THD_ivec3 iv,ivp,ivm ;
02042       THD_fvec3 fv,fvp,fvm ;
02043       float s1=1.0/br->n1 , s2=1.0/br->n2 , dxyz ;
02044       float rr_box=1.0,gg_box=0.0,bb_box=0.0 ;   /* white */
02045       float rr_lin=0.4,gg_lin=0.0,bb_lin=0.7 ;   /* dark blue */
02046       float rr_led=1.0,gg_led=0.0,bb_led=0.0 ;
02047       char str[32] , *eee ;
02048       float rx=RX ;         /* default rectangle halfsize */
02049       int   kkk=0 ;
02050       float xyz=0.0,xyzp,xyzm , rxm,rxp ;
02051       int skip_boxes=1 , skip_lines=0 , skip_lcen=0, skip_ledg=1 ;
02052       float boxsize=RX , linewidth=0.0 ;      /* 23 Feb 2003 */
02053       int firstb ;                            /* 23 Jan 2004 */
02054 
02055       if( ag == NULL ) continue ;             /* skip this non-existent one */
02056       nn = ag->num_ixyz ; nod = ag->ixyz ;
02057       if( nn < 1 || nod == NULL ) continue ;  /* nothing to do */
02058 
02059       /* define parameters for node boxes and triangle lines */
02060 
02061 STATUS("defining surface drawing parameters") ;
02062       if( swid != NULL && ks < swid->nrow ){     /* 19 Aug 2002: the new way */
02063         int cc, dd ;                             /*           to set colors: */
02064                                                  /* from the surface widgets */
02065 
02066         cc = MCW_val_bbox(swid->surf_bbox[ks]) ; /* 19 Feb 2003: skip it all? */
02067         if( cc == 0 ){
02068           skip_boxes = skip_lines = 1 ;
02069         } else {                                 /* see what is turned on */
02070           cc = swid->surf_node_av[ks]->ival ;
02071           skip_boxes = (cc == 0) ;
02072           if( !skip_boxes ){
02073             rr_box = DCOV_REDBYTE(im3d->dc,cc)   / 255.0 ;
02074             gg_box = DCOV_GREENBYTE(im3d->dc,cc) / 255.0 ;
02075             bb_box = DCOV_BLUEBYTE(im3d->dc,cc)  / 255.0 ;
02076           }
02077           cc = swid->surf_line_av[ks]->ival ;
02078           dd = swid->surf_ledg_av[ks]->ival ;             /* 26 Feb 2003 */
02079           skip_lcen  = (cc == 0) ;
02080           skip_ledg  = (dd == 0) ;
02081           skip_lines = (skip_lcen && skip_ledg) ;
02082           if( cc > 0 ){
02083             rr_lin = DCOV_REDBYTE(im3d->dc,cc)   / 255.0 ;
02084             gg_lin = DCOV_GREENBYTE(im3d->dc,cc) / 255.0 ;
02085             bb_lin = DCOV_BLUEBYTE(im3d->dc,cc)  / 255.0 ;
02086           }
02087           if( dd > 0 ){                                   /* 26 Feb 2003 */
02088             rr_led = DCOV_REDBYTE(im3d->dc,dd)   / 255.0 ;
02089             gg_led = DCOV_GREENBYTE(im3d->dc,dd) / 255.0 ;
02090             bb_led = DCOV_BLUEBYTE(im3d->dc,dd)  / 255.0 ;
02091           }
02092           boxsize   = swid->boxsize_av->ival   * 0.1   ;  /* 23 Feb 2003 */
02093           linewidth = swid->linewidth_av->ival * 0.002 ;
02094         }
02095 
02096       } else {                                   /* the old way    */
02097                                                  /* to set colors:  */
02098         eee = getenv("AFNI_SUMA_BOXCOLOR") ;     /* from environment */
02099         if( eee != NULL ){
02100           if( strcmp(eee,"none") == 0 || strcmp(eee,"skip") == 0 )
02101             skip_boxes = 1 ;                  /* don't do boxes */
02102           else
02103             DC_parse_color( im3d->dc , eee , &rr_box,&gg_box,&bb_box ) ;
02104         }
02105 
02106         eee = getenv("AFNI_SUMA_LINECOLOR") ;
02107         if( eee != NULL ){
02108           if( (strcmp(eee,"none")==0 || strcmp(eee,"skip")==0) )
02109             skip_lines = 1 ;
02110           else
02111             DC_parse_color( im3d->dc , eee , &rr_lin,&gg_lin,&bb_lin ) ;
02112         }
02113 
02114         eee = getenv("AFNI_SUMA_BOXSIZE") ;  /* maybe set boxsize? */
02115         if( eee != NULL ){
02116           float val=strtod(eee,NULL) ;
02117           if( val > 0.0 ) boxsize = val ;
02118         } else if( swid != NULL ){
02119           boxsize = swid->boxsize_av->ival * 0.1 ;
02120         }
02121 
02122         eee = getenv( "AFNI_SUMA_LINESIZE" ) ; /* maybe set linewidth? */
02123         if( eee != NULL ){
02124           float val = strtod(eee,NULL) ;
02125           if( val < 0.0 || val > 0.1 ) val = 0.0 ;
02126           linewidth = val ;
02127         } else if( swid != NULL ){
02128           linewidth = swid->linewidth_av->ival * 0.002 ;
02129         }
02130       }
02131 
02132       if( skip_boxes && skip_lines ) continue ; /* nothing to do? */
02133 
02134       /** 21 Mar 2002:
02135           We calculate plotting coordinates in "fdfind" coordinates,
02136           which are floating point indexes into the FD_brick.  However,
02137           these run from 0..n1-1 (in x), which are the centers of the
02138           voxels.  In turn these must be mapped to screen locations.
02139           For example, with n1=5, we have these voxels
02140 
02141               0   1   2   3   4    = index of voxel
02142             ---------------------
02143             |   |   |   |   |   |
02144             ---------------------
02145            0.0                 1.0 = screen coordinate (for memplot)
02146 
02147           Thus voxel index i maps to screen location (i+0.5)/n1.
02148           Previously, I forgot the +0.5, which didn't matter much,
02149           until the introduction of the image zoom feature last week. **/
02150 
02151       rx  = boxsize ;                /* 23 Feb 2003 */
02152       rxm = rx-0.5 ; rxp = rx+0.5 ;  /* The 0.5 voxel shift */
02153 
02154       /* find DICOM coordinates of next slice and previous slice */
02155 
02156       LOAD_IVEC3(iv,0,0,n+1) ;                     /* next */
02157       ivp = THD_fdind_to_3dind( br , iv ) ;
02158       fvp = THD_3dind_to_3dmm ( br->dset , ivp ) ;
02159       fvp = THD_3dmm_to_dicomm( br->dset , fvp ) ;
02160       LOAD_IVEC3(iv,0,0,n-1) ;                     /* previous */
02161       ivm = THD_fdind_to_3dind( br , iv ) ;
02162       fvm = THD_3dind_to_3dmm ( br->dset , ivm ) ;
02163       fvm = THD_3dmm_to_dicomm( br->dset , fvm ) ;
02164 
02165       /* threshold for determining which axis this slice is along */
02166 
02167       dxyz = MIN(br->del1,br->del2) ;
02168       dxyz = MIN(dxyz    ,br->del3) ; dxyz *= 0.1 ;
02169 
02170       set_color_memplot(rr_box,gg_box,bb_box) ;  /* box drawing colors */
02171       set_thick_memplot(0.0) ;
02172       firstb = 1 ;                               /* 23 Jan 2004 */
02173 
02174       /* find nodes inside this slice */
02175 
02176       if( skip_boxes ) STATUS("finding slice planes") ;
02177       else             STATUS("drawing node boxes") ;
02178 
02179       if( fabs(fvm.xyz[0]-fvp.xyz[0]) > dxyz ){               /* search x */
02180          float xb=fvm.xyz[0] , xt=fvp.xyz[0] , xm,xw ;        /* range of  */
02181          if( xb > xt ){ float t=xb ; xb=xt ; xt=t ; }         /* x in slice */
02182          xm = 0.5*(xb+xt); xw = 0.25*(xt-xb); xb = xm-xw; xt = xm+xw;
02183 STATUS(" - x plane") ;
02184          if( !skip_boxes ){
02185           for( ii=0 ; ii < nn ; ii++ ){
02186             if( nod[ii].x >= xb && nod[ii].x <= xt ){         /* inside?  */
02187                LOAD_FVEC3(fv,nod[ii].x,nod[ii].y,nod[ii].z) ; /* convert  */
02188                fv = THD_dicomm_to_3dmm( br->dset , fv ) ;     /* coords   */
02189                fv = THD_3dmm_to_3dfind( br->dset , fv ) ;     /* to slice */
02190                fv = THD_3dfind_to_fdfind( br , fv ) ;         /* indexes  */
02191 
02192                if( firstb ){
02193                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02194                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  );
02195                  firstb = 0 ;
02196                }
02197 
02198                plotrect_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02199                                  s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  ) ;
02200 
02201                if( ks == kbest && nod[ii].id == ibest ){   /* 24 Feb 2003 */
02202                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02203                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  );
02204                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]+rxp),
02205                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]-rxm)  );
02206                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]+0.5),
02207                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+0.5)  );
02208                  plotline_memplot( s1*(fv.xyz[0]+0.5), 1.0-s2*(fv.xyz[1]-rxm),
02209                                    s1*(fv.xyz[0]+0.5), 1.0-s2*(fv.xyz[1]+rxp)  );
02210                }
02211             }
02212           }
02213          }
02214          kkk = 0; xyz = xm; xyzp = xt; xyzm = xb;  /* for the triangles/lines below */
02215       }
02216       else if( fabs(fvm.xyz[1]-fvp.xyz[1]) > dxyz ){          /* search y */
02217          float yb=fvm.xyz[1] , yt=fvp.xyz[1] , ym,yw ;
02218          if( yb > yt ){ float t=yb ; yb=yt ; yt=t ; }
02219          ym = 0.5*(yb+yt); yw = 0.25*(yt-yb); yb = ym-yw; yt = ym+yw;
02220 STATUS(" - y plane") ;
02221          if( !skip_boxes ){
02222           for( ii=0 ; ii < nn ; ii++ ){
02223             if( nod[ii].y >= yb && nod[ii].y <= yt ){
02224                LOAD_FVEC3(fv,nod[ii].x,nod[ii].y,nod[ii].z) ;
02225                fv = THD_dicomm_to_3dmm( br->dset , fv ) ;
02226                fv = THD_3dmm_to_3dfind( br->dset , fv ) ;
02227                fv = THD_3dfind_to_fdfind( br , fv ) ;
02228 
02229                if( firstb ){
02230                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02231                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  );
02232                  firstb = 0 ;
02233                }
02234 
02235                plotrect_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02236                                  s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  ) ;
02237 
02238                if( ks == kbest && nod[ii].id == ibest ){   /* 24 Feb 2003 */
02239                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02240                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  );
02241                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]+rxp),
02242                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]-rxm)  );
02243                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]+0.5),
02244                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+0.5)  );
02245                  plotline_memplot( s1*(fv.xyz[0]+0.5), 1.0-s2*(fv.xyz[1]-rxm),
02246                                    s1*(fv.xyz[0]+0.5), 1.0-s2*(fv.xyz[1]+rxp)  );
02247                }
02248             }
02249           }
02250          }
02251          kkk = 1; xyz = ym; xyzp = yt; xyzm = yb;  /* for the triangles/lines below */
02252       }
02253       else if( fabs(fvm.xyz[2]-fvp.xyz[2]) > dxyz ){          /* search z */
02254          float zb=fvm.xyz[2] , zt=fvp.xyz[2] , zm,zw ;
02255          if( zb > zt ){ float t=zb ; zb=zt ; zt=t ; }
02256          zm = 0.5*(zb+zt); zw = 0.25*(zt-zb); zb = zm-zw; zt = zm+zw;
02257 STATUS(" - z plane") ;
02258          if( !skip_boxes ){
02259           for( ii=0 ; ii < nn ; ii++ ){
02260             if( nod[ii].z >= zb && nod[ii].z <= zt ){
02261                LOAD_FVEC3(fv,nod[ii].x,nod[ii].y,nod[ii].z) ;
02262                fv = THD_dicomm_to_3dmm( br->dset , fv ) ;
02263                fv = THD_3dmm_to_3dfind( br->dset , fv ) ;
02264                fv = THD_3dfind_to_fdfind( br , fv ) ;
02265 
02266                if( firstb ){
02267                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02268                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  );
02269                  firstb = 0 ;
02270                }
02271 
02272                plotrect_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02273                                  s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  ) ;
02274 
02275                if( ks == kbest && nod[ii].id == ibest ){   /* 24 Feb 2003 */
02276                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]-rxm),
02277                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+rxp)  );
02278                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]+rxp),
02279                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]-rxm)  );
02280                  plotline_memplot( s1*(fv.xyz[0]-rxm), 1.0-s2*(fv.xyz[1]+0.5),
02281                                    s1*(fv.xyz[0]+rxp), 1.0-s2*(fv.xyz[1]+0.5)  );
02282                  plotline_memplot( s1*(fv.xyz[0]+0.5), 1.0-s2*(fv.xyz[1]-rxm),
02283                                    s1*(fv.xyz[0]+0.5), 1.0-s2*(fv.xyz[1]+rxp)  );
02284                }
02285             }
02286           }
02287          }
02288          kkk = 2; xyz = zm; xyzp = zt; xyzm = zb;  /* for the triangles/lines below */
02289       }
02290 
02291       /* 10 Mar 2002:
02292          For each triangle that crosses the plane of the slice,
02293          plot a line segment at the intersection of the plane and triangle.
02294          The plane is along DICOM axis #kkk at coordinate xyz;
02295          these variables were set just above in the node display code. */
02296 
02297       if( !skip_lines && ag->num_ijk > 0 && ag->ijk != NULL ){
02298         SUMA_ijk *tr = ag->ijk ;        /* triangle list  */
02299         int      ntr = ag->num_ijk ;    /* number of triangles */
02300         int id,jd,kd ;
02301         THD_fvec3 fvijk[3] ;
02302         float ci,cj,ck , xlev ;
02303         int ilev ;
02304 
02305         for( ilev=0 ; ilev <= 2 ; ilev++ ){  /* 26 Feb 2003: loop over levels: */
02306                                              /* slice center, top & bot edges  */
02307           if( ilev == 0 ){
02308             if( skip_lcen ) continue ;  /* don't do center plane */
02309             xlev = xyz ;
02310             set_color_memplot(rr_lin,gg_lin,bb_lin) ;  /* line drawing colors */
02311             set_thick_memplot(linewidth) ;
02312           } else {
02313             if( skip_ledg ) continue ;  /* don't do edge planes */
02314             xlev = (ilev == 1) ? xyzp : xyzm ;
02315             set_color_memplot(rr_led,gg_led,bb_led) ;
02316             set_thick_memplot(0.0) ;
02317           }
02318 
02319 STATUS("drawing triangle lines") ;
02320 
02321           /* loop over triangles */
02322 
02323           for( ii=0 ; ii < ntr ; ii++ ){
02324 
02325             /* get indexes of triangle's nodes (from their id's) */
02326 
02327             id = SUMA_find_node_id(ag,tr[ii].id); if( id < 0 ) continue;
02328             jd = SUMA_find_node_id(ag,tr[ii].jd); if( jd < 0 ) continue;
02329             kd = SUMA_find_node_id(ag,tr[ii].kd); if( kd < 0 ) continue;
02330 
02331             /* load DICOM coords of triangle's nodes */
02332 
02333             LOAD_FVEC3(fvijk[0], nod[id].x, nod[id].y, nod[id].z) ;
02334             LOAD_FVEC3(fvijk[1], nod[jd].x, nod[jd].y, nod[jd].z) ;
02335             LOAD_FVEC3(fvijk[2], nod[kd].x, nod[kd].y, nod[kd].z) ;
02336 
02337             /* want 1 node on one size of plane, and 2 on the other */
02338 
02339             ci = fvijk[0].xyz[kkk] - xlev;      /* differences from center */
02340             cj = fvijk[1].xyz[kkk] - xlev;      /* of current slice plane */
02341             ck = fvijk[2].xyz[kkk] - xlev;
02342             jj = 4*(ci > 0.0) + 2*(cj > 0.0) + (ck > 0.0) ;
02343             if( jj == 0 || jj == 7 ) continue ; /* all have same sign */
02344 
02345             /* setup id,jd,kd so fvijk[id] is on one side of plane,
02346                and so that fvijk[jd] and fvijk[kd] are on other side */
02347 
02348             switch( jj ){
02349                case 6:
02350                case 1: id = 2 ; jd = 0 ; kd = 1 ; break ;  /* kd is the 1 */
02351                case 5:
02352                case 2: id = 1 ; jd = 0 ; kd = 2 ; break ;  /* jd is the 1 */
02353                case 4:
02354                case 3: id = 0 ; jd = 1 ; kd = 2 ; break ;  /* id is the 1 */
02355             }
02356 
02357             /* linearly interpolate between fvijk[id] and fvijk[jd]
02358                to find the point where this line hits the slice plane */
02359 
02360             ci = fvijk[id].xyz[kkk] - xlev;
02361             cj = fvijk[id].xyz[kkk] - fvijk[jd].xyz[kkk] ;
02362             if( cj == 0.0 ) continue ;            /* should not happen */
02363             ck = ci / cj ;
02364             if( ck < 0.0 || ck > 1.0 ) continue ; /* should not happen */
02365             cj = 1.0 - ck ;
02366             fvp = SCLADD_FVEC3(cj,fvijk[id],ck,fvijk[jd]) ;
02367 
02368             /* linearly interpolate between fvijk[id] and fvijk[kd] */
02369 
02370             cj = fvijk[id].xyz[kkk] - fvijk[kd].xyz[kkk] ;
02371             if( cj == 0.0 ) continue ;
02372             ck = ci / cj ;
02373             if( ck < 0.0 || ck > 1.0 ) continue ;
02374             cj = 1.0 - ck ;
02375             fvm = SCLADD_FVEC3(cj,fvijk[id],ck,fvijk[kd]) ;
02376 
02377             /* transform interpolated points to FD_brick coords */
02378 
02379             fvp = THD_dicomm_to_3dmm( br->dset , fvp ) ;
02380             if( fvp.xyz[0] < daxes->xxmin ||
02381                 fvp.xyz[0] > daxes->xxmax ||
02382                 fvp.xyz[1] < daxes->yymin ||
02383                 fvp.xyz[1] > daxes->yymax ||
02384                 fvp.xyz[2] < daxes->zzmin ||
02385                 fvp.xyz[2] > daxes->zzmax   ) continue ;  /* 08 Jan 2004 */
02386             fvp = THD_3dmm_to_3dfind( br->dset , fvp ) ;
02387             fvp = THD_3dfind_to_fdfind( br , fvp ) ;
02388 
02389             fvm = THD_dicomm_to_3dmm( br->dset , fvm ) ;
02390             if( fvm.xyz[0] < daxes->xxmin ||
02391                 fvm.xyz[0] > daxes->xxmax ||
02392                 fvm.xyz[1] < daxes->yymin ||
02393                 fvm.xyz[1] > daxes->yymax ||
02394                 fvm.xyz[2] < daxes->zzmin ||
02395                 fvm.xyz[2] > daxes->zzmax   ) continue ;  /* 08 Jan 2004 */
02396             fvm = THD_3dmm_to_3dfind( br->dset , fvm ) ;
02397             fvm = THD_3dfind_to_fdfind( br , fvm ) ;
02398 
02399             /* plot a line segment between them, in the plane of the slice */
02400             /* [21 Mar 2002: include the 0.5 shift mentioned way up above] */
02401 
02402             plotline_memplot( s1*(fvp.xyz[0]+0.5) , 1.0-s2*(fvp.xyz[1]+0.5) ,
02403                               s1*(fvm.xyz[0]+0.5) , 1.0-s2*(fvm.xyz[1]+0.5)  ) ;
02404 
02405           } /* end of loop over triangles */
02406           set_thick_memplot(0.0) ;              /* 15 Jan 2003 */
02407         } /* end of loop over levels: 26 Feb 2003 */
02408       } /* end of if over doing lines */
02409      } /* end of loop over surface index ks */
02410     } /* end of plotting surface stuff */
02411 
02412      /*----- put crosshairs on with lines, if desired -----*/
02413      /****** 22 Mar 2002: adapted from pixel overlay  ******/
02414 
02415      if( do_xhar ){
02416       MCW_grapher * grapher = UNDERLAY_TO_GRAPHER(im3d,br) ;
02417 
02418       THD_ivec3 ib = THD_3dind_to_fdind( br ,
02419                                          TEMP_IVEC3( im3d->vinfo->i1 ,
02420                                                      im3d->vinfo->j2 ,
02421                                                      im3d->vinfo->k3  ) ) ;
02422 STATUS("drawing crosshairs") ;
02423       set_thick_memplot(0.0) ;
02424 
02425       if( n == ib.ijk[2] || im3d->vinfo->xhairs_all ){
02426          int jp,ip , jcen,icen , gappp , jj,ii ;
02427          int idown,iup,iskip , jdown,jup,jskip , imon,jmon ;
02428          int a1 = br->a123.ijk[0] ,   /* x axis of the brick?    */
02429              ax = abs(a1) - 1       ; /* 0,1,2 for dataset x,y,z */
02430          int a2 = br->a123.ijk[1] ,   /* y axis of the brick?    */
02431              ay = abs(a2) - 1       ; /* 0,1,2 for dataset x,y,z */
02432          int a3 = br->a123.ijk[2] ,   /* z axis of the brick?    */
02433              az = abs(a3) - 1       ; /* 0,1,2 for dataset x,y,z */
02434 
02435          int gap,icr,jcr , nx=br->n1 , ny=br->n2 ;
02436 
02437          float rr,gg,bb ;             /* colors */
02438          float s1=1.0/br->n1 , s2=1.0/br->n2 ;  /* scale pixels to plot coords */
02439 #define PSX(i) (s1*((i)+0.5))
02440 #define PSY(j) (1.0-s2*((j)+0.5))
02441 
02442          /* spatial orientations of image axes */
02443 
02444          int ox = (ax==0) ? br->dset->daxes->xxorient :
02445                   (ax==1) ? br->dset->daxes->yyorient : br->dset->daxes->zzorient ;
02446 
02447          int oy = (ay==0) ? br->dset->daxes->xxorient :
02448                   (ay==1) ? br->dset->daxes->yyorient : br->dset->daxes->zzorient ;
02449 
02450          jp = im3d->vinfo->crosshair_ovcolor ;
02451          rr = DCOV_REDBYTE  (im3d->dc,jp) / 255.0 ;
02452          gg = DCOV_GREENBYTE(im3d->dc,jp) / 255.0 ;
02453          bb = DCOV_BLUEBYTE (im3d->dc,jp) / 255.0 ;
02454          set_color_memplot(rr,gg,bb) ;
02455 
02456          gap  = (grapher==NULL) ? im3d->vinfo->crosshair_gap : (grapher->mat+1)/2 ;
02457 
02458          icen = ib.ijk[0] ;  /* x-index of image pixel at focus */
02459          jcen = ib.ijk[1] ;  /* y-index */
02460 
02461          /** initialize montage steps **/
02462 
02463          if( im3d->vinfo->xhairs_show_montage ){           /* in "Multi" mode */
02464             iskip = im3d->vinfo->xhairs_nskip.ijk[ax] + 1 ;
02465             jskip = im3d->vinfo->xhairs_nskip.ijk[ay] + 1 ;
02466             if( a1 > 0 ){
02467                idown = im3d->vinfo->xhairs_ndown.ijk[ax] ;
02468                iup   = im3d->vinfo->xhairs_nup.ijk[ax] ;
02469             } else {
02470                iup   = im3d->vinfo->xhairs_ndown.ijk[ax] ;
02471                idown = im3d->vinfo->xhairs_nup.ijk[ax] ;
02472             }
02473             if( a2 > 0 ){
02474                jdown = im3d->vinfo->xhairs_ndown.ijk[ay] ;
02475                jup   = im3d->vinfo->xhairs_nup.ijk[ay] ;
02476             } else {
02477                jup   = im3d->vinfo->xhairs_ndown.ijk[ay] ;
02478                jdown = im3d->vinfo->xhairs_nup.ijk[ay] ;
02479             }
02480 
02481          } else {                                          /* in "Single" Mode */
02482            idown = iup = jdown = jup = iskip = jskip = 0 ;
02483            if( grapher != NULL ){ idown=-(iup+1); jdown=-(jup+1); } /* skip lines? */
02484          }
02485 
02486          /* draw vertical lines first */
02487 
02488          if( (im3d->vinfo->xhairs_orimask & (1<<oy)) != 0 ){
02489            for( imon=-idown ; imon <= iup ; imon++ ){
02490              icr = icen + imon * iskip ;
02491 
02492              if( im3d->vinfo->xhairs_periodic ){
02493                 while( icr < 0 )   icr += nx ;
02494                 while( icr >= nx ) icr -= nx ;
02495              } else {
02496                 if( icr < 0 || icr >= nx ) continue ;
02497              }
02498 
02499              gappp = (abs(icr-icen) <= gap) ? gap : -1 ; /* no gap if far from center */
02500 
02501              if( gappp < 0 ){  /* no gap => 1 vertical line */
02502 
02503                 plotline_memplot( PSX(icr) , 0.0 , PSX(icr) , 1.0 ) ;
02504 
02505              } else {          /* gap => 2 vertical lines */
02506 
02507                 jj = jcen-gappp-1 ;
02508                 if( jj >= 0 )
02509                   plotline_memplot( PSX(icr) , 1.0 , PSX(icr) , PSY(jj+0.5) ) ;
02510 
02511                 jj = jcen+gappp+1 ;
02512                 if( jj < ny )
02513                   plotline_memplot( PSX(icr) , PSY(jj-0.5) , PSX(icr) , 0.0 ) ;
02514              }
02515 
02516            }
02517          }
02518 
02519          /* draw horizontal lines */
02520 
02521          if( (im3d->vinfo->xhairs_orimask & (1<<ox)) != 0 ){  /* 31 Dec 1998 */
02522            for( jmon=-jdown ; jmon <= jup ; jmon++ ){
02523              jcr = jcen + jmon * jskip ;
02524              if( im3d->vinfo->xhairs_periodic ){
02525                 while( jcr < 0 )   jcr += ny ;
02526                 while( jcr >= ny ) jcr -= ny ;
02527              } else {
02528                 if( jcr < 0 || jcr >= ny ) continue ;
02529              }
02530 
02531              gappp = (abs(jcr-jcen) <= gap) ? gap : -1 ; /* no gap if far from center */
02532 
02533              if( gappp < 0 ){  /* no gap => 1 horizontal line */
02534 
02535                 plotline_memplot( 0.0 , PSY(jcr) , 1.0 , PSY(jcr) ) ;
02536 
02537              } else {          /* gap => 2 horizontal lines */
02538 
02539                 ii = icen-gappp-1 ;
02540                 if( ii >= 0 )
02541                   plotline_memplot( 0.0 , PSY(jcr) , PSX(ii+0.5) , PSY(jcr) ) ;
02542 
02543                 ii = icen+gappp+1 ;
02544                 if( ii < nx )
02545                   plotline_memplot( PSX(ii-0.5) , PSY(jcr) , 1.0 , PSY(jcr) ) ;
02546              }
02547            }
02548          }
02549 
02550          /* draw grapher frame, if needed */
02551 
02552          if( grapher != NULL ){
02553             int gs = gap , gb = (grapher->mat +2)/2 ;
02554 
02555             jcr = jcen ; icr = icen ;
02556 
02557             ip = icr - gb ; if( ip < 0   ) ip = 0 ;
02558             ii = icr + gs ; if( ii >= nx ) ii = nx-1 ;
02559 
02560             jp = jcr - gb ; if( jp <  0  ) jp = 0 ;
02561             jj = jcr + gs ; if( jj >= ny ) jj = ny-1 ;
02562 
02563             plotline_memplot( PSX(ip+0.5),PSY(jp+0.5) , PSX(ii-0.5),PSY(jp+0.5) ) ;
02564             plotline_memplot( PSX(ii-0.5),PSY(jp+0.5) , PSX(ii-0.5),PSY(jj-0.5) ) ;
02565             plotline_memplot( PSX(ii-0.5),PSY(jj-0.5) , PSX(ip+0.5),PSY(jj-0.5) ) ;
02566             plotline_memplot( PSX(ip+0.5),PSY(jj-0.5) , PSX(ip+0.5),PSY(jp+0.5) ) ;
02567 
02568          } /* end if "if grapher exists" */
02569 
02570       } /* end of "if correct slice" (or do all slices) */
02571      } /* end of crosshairs */
02572 
02573      /*----- return the completed plot -----*/
02574 
02575      if( MEMPLOT_NLINE(mp) < 1 ) DESTROY_MEMPLOT(mp) ;
02576 
02577      RETURN(mp) ; /* will be destroyed in imseq */
02578    }
02579 
02580    /*--- 20 Sep 2001: image label ---*/
02581 
02582    if( type == isqCR_getlabel ){
02583       Three_D_View * im3d = (Three_D_View *) br->parent ;
02584       char *lab , str[32] , *dd ;
02585       THD_ivec3 iv,ivp,ivm ;
02586       THD_fvec3 fv,fvp,fvm ;
02587       float dxyz , cc ;
02588       int ii ;
02589 
02590       if( im3d->type != AFNI_3DDATA_VIEW ) RETURN(NULL) ;
02591 
02592       LOAD_IVEC3(iv,0,0,n) ;
02593       ivp = THD_fdind_to_3dind( br , iv ) ;
02594       fvp = THD_3dind_to_3dmm ( br->dset , ivp ) ;
02595       fvp = THD_3dmm_to_dicomm( br->dset , fvp ) ;
02596 
02597       if( n == 0 ) LOAD_IVEC3(iv,0,0,1) ;
02598       else         LOAD_IVEC3(iv,0,0,n-1) ;
02599       ivm = THD_fdind_to_3dind( br , iv ) ;
02600       fvm = THD_3dind_to_3dmm ( br->dset , ivm ) ;
02601       fvm = THD_3dmm_to_dicomm( br->dset , fvm ) ;
02602 
02603       dxyz = MIN(br->del1,br->del2) ;
02604       dxyz = MIN(dxyz    ,br->del3) ; dxyz *= 0.1 ;
02605 
02606       if( fabs(fvm.xyz[0]-fvp.xyz[0]) > dxyz ){ /* +=R -=L */
02607          cc = fvp.xyz[0] ;
02608          dd = ( cc >= 0.0 ) ? "L" : "R" ;
02609       } else if( fabs(fvm.xyz[1]-fvp.xyz[1]) > dxyz ){ /* +=P -=A */
02610          cc = fvp.xyz[1] ;
02611          dd = ( cc >= 0.0 ) ? "P" : "A" ;
02612       } else if( fabs(fvm.xyz[2]-fvp.xyz[2]) > dxyz ){ /* +=S -=I */
02613          cc = fvp.xyz[2] ;
02614          dd = ( cc >= 0.0 ) ? "S" : "I" ;
02615       } else {
02616         RETURN(NULL) ;   /* should never happen */
02617       }
02618 
02619       sprintf(str,"%6.2f",fabs(cc)) ;
02620       for( ii=strlen(str)-1 ; ii > 0 && str[ii] == '0' ; ii-- ) str[ii] = '\0' ;
02621       if( str[ii] == '.' ) str[ii] = '\0' ;
02622       strcat(str,dd) ; lab = strdup(str) ; RETURN(lab) ;
02623    }
02624 
02625    /*--- underlay image # n ---*/
02626 
02627    if( type == isqCR_getimage || type == isqCR_getqimage ){
02628       Three_D_View * im3d = (Three_D_View *) br->parent ;
02629       int ival ;
02630 
02631       /*** decide which 3D brick to extract data from (ival) ***/
02632 
02633       if( EQUIV_DSETS(br->dset,im3d->anat_now) )      /* underlay dataset */
02634         ival = im3d->vinfo->anat_index ;
02635       else if( EQUIV_DSETS(br->dset,im3d->fim_now) )  /* overlay dataset */
02636         ival = im3d->vinfo->fim_index ;
02637       else
02638         ival = 0 ;                                    /* shouldn't happen */
02639 
02640            if( type == isqCR_getqimage      ) ival = -1 ; /* get empty image */
02641       else if( ival >= DSET_NVALS(br->dset) ) ival = br->dset->dblk->nvals -1 ;
02642 
02643 if(PRINT_TRACING)
02644 { char str[256] ;
02645   sprintf(str,"getting image n1=%d n2=%d ival=%d",br->n1,br->n2,ival) ;
02646   STATUS(str) ; }
02647 
02648       LOAD_DSET_VIEWS(im3d) ;  /* 02 Nov 1996 */
02649 
02650       im = FD_warp_to_mri( n , ival , br ) ; /* actually get image from dataset */
02651 
02652       if( ival < 0 ) RETURN( (XtPointer) im ) ;  /* return fake image */
02653 
02654       /* Load value of current pixel into display label */
02655       /* April 1996: only if image is at current slice  */
02656 
02657       { char buf[64] = "\0" ; int ibest=-1 ;
02658         AFNI_set_valabel( br , n , im , buf ) ;
02659         if( buf[0] != '\0' ){
02660           if( im3d->vinfo->underlay_type == UNDERLAY_ANAT )
02661             strcpy( im3d->vinfo->anat_val , buf ) ;
02662           else
02663             im3d->vinfo->anat_val[0] = '\0' ;
02664 
02665           if( !AFNI_noenv("AFNI_VALUE_LABEL") ) AFNI_do_bkgd_lab( im3d ) ;
02666 
02667           if( im->kind != MRI_complex && im->kind != MRI_rgb ){
02668             char qbuf[64] = "bg =" ;
02669             strcat(qbuf,buf) ; strcpy(buf,qbuf) ;
02670           }
02671           AFNI_get_xhair_node( im3d , NULL , &ibest ) ;   /* 21 Feb 2003 */
02672           if( ibest >= 0 ){
02673             char qbuf[64]; sprintf(qbuf,"\nxh = #%d",ibest); strcat(buf,qbuf);
02674           }
02675           MCW_set_widget_label( im3d->vwid->imag->pop_bkgd_lab , buf ) ;
02676           XtManageChild( im3d->vwid->imag->pop_bkgd_lab ) ;
02677         }
02678       }
02679 
02680       RETURN( (XtPointer) im ) ;
02681    }
02682 
02683 STATUS("get something else, but I don't care!") ;
02684 
02685    RETURN( NULL ) ;
02686 }

void AFNI_broutim_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 798 of file afni_splash.c.

References mri_free(), NC_broutim, NLINE_broutim, NX_broutim, NY_broutim, PLUTO_popup_image(), and SPLASH_decodexx().

00799 {
00800    MRI_IMAGE *imbr ;
00801    imbr = SPLASH_decodexx( NX_broutim,NY_broutim,NLINE_broutim,NC_broutim,
00802                            RMAP_broutim,GMAP_broutim,BMAP_broutim,BAR_broutim);
00803    (void) PLUTO_popup_image( NULL , imbr ) ;
00804    mri_free(imbr) ; return ;
00805 }

void AFNI_bucket_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 4645 of file afni_func.c.

References AFNI_process_funcdisplay(), AFNI_set_viewpoint(), AFNI_setup_viewing(), AFNI_function_widgets::anat_buck_av, AFNI_view_info::anat_index, Three_D_View::anat_now, AV_assign_ival(), DSET_NUM_TIMES, DSET_NVALS, ENTRY, AFNI_function_widgets::fim_buck_av, AFNI_view_info::fim_index, Three_D_View::fim_now, AFNI_widget_set::func, AFNI_view_info::func_visible, IM3D_OPEN, AFNI_widget_set::imag, MCW_arrowval::ival, REDISPLAY_ALL, REDISPLAY_OVERLAY, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, AFNI_view_info::tempflag, AFNI_function_widgets::thr_buck_av, AFNI_view_info::thr_index, AFNI_imaging_widgets::time_index_av, AFNI_view_info::time_on, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_gra_send_CB().

04646 {
04647    Three_D_View *im3d = (Three_D_View *) cd ;
04648    int doit = 0 , iv , redisplay ;
04649 
04650 ENTRY("AFNI_bucket_CB") ;
04651 
04652    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
04653 
04654    /** Anat sub-brick [29 Jul 2003: lock to time_index controller as well] **/
04655 
04656    if( av == im3d->vwid->func->anat_buck_av ){
04657      iv = av->ival ;
04658      if( iv >= 0 && iv < DSET_NVALS(im3d->anat_now) ){
04659        doit = (iv != im3d->vinfo->anat_index) ;
04660        im3d->vinfo->anat_index = iv ;
04661        redisplay = REDISPLAY_ALL ;
04662        if( doit && im3d->vinfo->time_on )
04663          AV_assign_ival( im3d->vwid->imag->time_index_av , iv ) ;
04664      }
04665    }
04666 
04667    /** Func sub-brick **/
04668 
04669    else if( av == im3d->vwid->func->fim_buck_av ){
04670      iv = av->ival ;
04671      if( iv >= 0 && iv < DSET_NVALS(im3d->fim_now) ){
04672        doit = (iv != im3d->vinfo->fim_index) ;
04673        im3d->vinfo->fim_index = iv ;
04674        redisplay = REDISPLAY_OVERLAY ;
04675        if( doit && im3d->vinfo->time_on && DSET_NUM_TIMES(im3d->anat_now) == 1 )
04676          AV_assign_ival( im3d->vwid->imag->time_index_av , iv ) ;
04677      }
04678    }
04679 
04680    /** Thresh sub-brick **/
04681 
04682    else if( av == im3d->vwid->func->thr_buck_av ){
04683      iv = av->ival ;
04684      if( iv >= 0 && iv < DSET_NVALS(im3d->fim_now) ){
04685        doit = (iv != im3d->vinfo->thr_index) ;
04686        im3d->vinfo->thr_index = iv ;
04687        redisplay = REDISPLAY_OVERLAY ;
04688      }
04689    }
04690 
04691    /** Change the view, if required **/
04692 
04693    if( doit ){
04694       SHOW_AFNI_PAUSE ;
04695       im3d->vinfo->tempflag = 1 ;
04696       AFNI_setup_viewing( im3d , False ) ;
04697       AFNI_set_viewpoint( im3d , -1,-1,-1 , redisplay ) ; /* redraw */
04698       if( redisplay == REDISPLAY_OVERLAY &&
04699           im3d->vinfo->func_visible        ) AFNI_process_funcdisplay(im3d) ;
04700       SHOW_AFNI_READY ;
04701    }
04702 
04703    EXRETURN ;
04704 }

char* AFNI_bucket_label_CB MCW_arrowval   av,
XtPointer    cd
 

Prepare a bucket label for a menu. 21 Jun 2004: modified to allow label length to be different from 14. ----------------------------------------------------------------------------

Definition at line 4711 of file afni_func.c.

References AFNI_numenv(), DSET_BRICK_LAB, DSET_BRICK_LABEL, DSET_NVALS, ENTRY, ISVALID_3DIM_DATASET, ISVALID_DSET, MCW_arrowval::ival, malloc, and RETURN.

04712 {
04713    static THD_3dim_dataset *dset_last = NULL ;
04714    static int               nsiz_last = 4 ;
04715 
04716    THD_3dim_dataset *dset = (THD_3dim_dataset *) cd ;
04717    static char *fmt[3]={NULL,NULL,NULL} , sfmt[16] , blab[48] ;
04718    int nlab ;
04719    static int nlab_old = 0 ;
04720 
04721 ENTRY("AFNI_bucket_label_CB") ;
04722 
04723    /** 04 May 2005: customize width to this dataset **/
04724 
04725    if( dset != dset_last && ISVALID_DSET(dset) ){
04726      int nvals,kk,blw,mblw=4 ; char *lab ;
04727      dset_last = dset ;
04728      nvals = DSET_NVALS(dset) ;
04729      for( kk=0 ; kk < nvals ; kk++ ){
04730        lab = DSET_BRICK_LAB(dset,kk) ;
04731        if( lab != NULL ){ blw=strlen(lab) ; if(blw>mblw)mblw=blw ; }
04732      }
04733      if( mblw > 32 ) mblw = 32 ;
04734      nsiz_last = mblw ;
04735    }
04736 
04737    /* see if the environment overrides the above */
04738 
04739 #if 0
04740    nlab = (int)AFNI_numenv("AFNI_BUCKET_LABELSIZE") ;
04741         if( nlab <= 0 ) nlab = nsiz_last ;
04742    else if( nlab > 32 ) nlab = 32 ;
04743 #else
04744    nlab = nsiz_last ;
04745 #endif
04746 
04747    /* make the format for the label string: left justified, width=nlab */
04748 
04749    if( nlab != nlab_old ){
04750      nlab_old = nlab ;
04751      sprintf(sfmt,"%%-%d.%ds",nlab,nlab) ;
04752      if( fmt[0] == NULL ){
04753        fmt[0] = malloc(32); fmt[1] = malloc(32); fmt[2] = malloc(32);
04754      }
04755 
04756      /* and now the formats including the sub-brick index and the label */
04757 
04758 #ifdef USE_RIGHT_BUCK_LABELS
04759      sprintf(fmt[0],"%s #%%1d",sfmt) ;   /* if the #xxx goes to the right */
04760      sprintf(fmt[1],"%s #%%2d",sfmt) ;
04761      sprintf(fmt[2],"%s #%%3d",sfmt) ;
04762 #else
04763      sprintf(fmt[0],"#%%1d %s",sfmt) ;   /* if the #xxx goes to the left */
04764      sprintf(fmt[1],"#%%2d %s",sfmt) ;
04765      sprintf(fmt[2],"#%%3d %s",sfmt) ;
04766 #endif
04767    }
04768 
04769    /* now actually make the label for this particular sub-brick */
04770 
04771    if( ISVALID_3DIM_DATASET(dset) ){
04772 
04773 #ifdef USE_RIGHT_BUCK_LABELS
04774      if( DSET_NVALS(dset) < 10 )
04775        sprintf(blab, fmt[0] , DSET_BRICK_LABEL(dset,av->ival) , av->ival ) ;
04776      else if( DSET_NVALS(dset) < 100 )
04777        sprintf(blab, fmt[1] , DSET_BRICK_LABEL(dset,av->ival) , av->ival ) ;
04778      else
04779        sprintf(blab, fmt[2] , DSET_BRICK_LABEL(dset,av->ival) , av->ival ) ;
04780 #else
04781      if( DSET_NVALS(dset) < 10 )
04782        sprintf(blab, fmt[0] , av->ival , DSET_BRICK_LABEL(dset,av->ival) ) ;
04783      else if( DSET_NVALS(dset) < 100 )
04784        sprintf(blab, fmt[1] , av->ival , DSET_BRICK_LABEL(dset,av->ival) ) ;
04785      else
04786        sprintf(blab, fmt[2] , av->ival , DSET_BRICK_LABEL(dset,av->ival) ) ;
04787 #endif
04788    }
04789    else
04790      sprintf(blab," #%d ",av->ival) ; /* shouldn't hapeen, but you never know */
04791 
04792    RETURN(blab) ;
04793 }

int AFNI_can_transform_vector THD_3dim_dataset   old_dset,
THD_3dim_dataset   new_dset
 

12 Dec 2001: only refit menus if dataset has changed *

Definition at line 7294 of file afni.c.

References THD_3dim_dataset::anat_parent, VIEW_ORIGINAL_TYPE, THD_3dim_dataset::view_type, and THD_3dim_dataset::warp_parent.

07296 {
07297    if( old_dset==NULL || new_dset==NULL  ) return 0 ;
07298 
07299    if( old_dset == new_dset->warp_parent ) return 1 ;
07300 
07301    if( old_dset->warp_parent == new_dset ) return 1 ;
07302 
07303    if( old_dset->warp_parent == new_dset->warp_parent &&
07304        old_dset->warp_parent != NULL                   ) return 1 ;
07305 
07306    if( new_dset->view_type   == VIEW_ORIGINAL_TYPE &&
07307        old_dset->view_type   != VIEW_ORIGINAL_TYPE &&
07308        old_dset->anat_parent != NULL               &&
07309        old_dset->anat_parent->warp_parent != NULL      ) return 1 ;
07310 
07311    if( old_dset->view_type   == VIEW_ORIGINAL_TYPE &&
07312        new_dset->view_type   != VIEW_ORIGINAL_TYPE &&
07313        new_dset->anat_parent != NULL               &&
07314        new_dset->anat_parent->warp_parent != NULL      ) return 1 ;
07315 
07316    return 0 ;
07317 }

void AFNI_choose_dataset_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 1938 of file afni_func.c.

References AFNI_finalize_dataset_CB(), AFNI_view_info::anat_num, BEEPIT, AFNI_viewing_widgets::choose_anat_pb, AFNI_viewing_widgets::choose_func_pb, AFNI_viewing_widgets::choose_sess_pb, THD_3dim_dataset::dblk, Three_D_View::dc, THD_datablock::diskptr, MCW_DC::display, dset_choice, DSET_COMPRESSED, DSET_GRAPHABLE, DSET_in_global_session(), DSET_NUM_TIMES, DSET_NVALS, DSET_PREFIXSTR, THD_session::dsset, ENTRY, FIRST_VIEW_TYPE, AFNI_view_info::func_num, GLOBAL_library, AFNI_library_type::have_dummy_dataset, IM3D_VALID, ISBUCKET, ISVALID_3DIM_DATASET, LAST_VIEW_TYPE, THD_session::lastname, MAX, MCW_choose_strlist(), MCW_strncpy, MIN, THD_session::num_dsset, THD_sessionlist::num_sess, AFNI_viewing_widgets::popchoose_anat_pb, AFNI_viewing_widgets::popchoose_func_pb, AFNI_viewing_widgets::popchoose_sess_pb, THD_diskptr::prefix, RESET_AFNI_QUIT, AFNI_view_info::sess_num, Three_D_View::ss_now, THD_sessionlist::ssar, AFNI_library_type::sslist, STRLIST_SIZE, THD_MAX_CHOICES, THD_MAX_PREFIX, AFNI_widget_set::view, Three_D_View::vinfo, Three_D_View::vwid, and XtMalloc.

01939 {
01940    static char *strlist[THD_MAX_CHOICES] ;  /* strings to choose between */
01941    static int first_call = 1 ;              /* initialization flag */
01942 
01943    int num_str , ii , init_str , vv , jj ;
01944    char *label ;
01945    Widget wpar ;
01946    Three_D_View *im3d = (Three_D_View *) cd ;
01947    int llen , ltop ;
01948 
01949 ENTRY("AFNI_choose_dataset_CB") ;
01950 
01951    /*--- initialize ---*/
01952 
01953    if( ! IM3D_VALID(im3d) ) EXRETURN ;
01954    if( GLOBAL_library.have_dummy_dataset ){ BEEPIT ; EXRETURN ; }
01955 
01956    if( first_call ){
01957       for( ii=0 ; ii < THD_MAX_CHOICES ; ii++ )
01958          strlist[ii] = (char*)XtMalloc( sizeof(char) * (STRLIST_SIZE+1) ) ;
01959       first_call = 0 ;
01960    }
01961 
01962    /*--- make a list of session names ---*/
01963 
01964    if( w == im3d->vwid->view->choose_sess_pb ||
01965        w == im3d->vwid->view->popchoose_sess_pb ){
01966 
01967       wpar    = im3d->vwid->view->choose_sess_pb ;
01968       num_str = GLOBAL_library.sslist->num_sess ;
01969       if( num_str < 1 ) EXRETURN ;
01970 
01971       for( ii=0 ; ii < num_str ; ii++ ){
01972          MCW_strncpy( strlist[ii] ,
01973                       GLOBAL_library.sslist->ssar[ii]->lastname ,
01974                       STRLIST_SIZE ) ;
01975       }
01976 
01977       init_str = im3d->vinfo->sess_num ;
01978       label    = dset_choice[0] ;
01979 
01980    /*--- make a list of anatomy names ---*/
01981 
01982    } else if( w == im3d->vwid->view->choose_anat_pb ||
01983               w == im3d->vwid->view->popchoose_anat_pb ){
01984 
01985       wpar    = im3d->vwid->view->choose_anat_pb ;
01986       num_str = im3d->ss_now->num_dsset ;
01987       if( num_str < 1 ) EXRETURN ;
01988 
01989       ltop = 4 ;
01990       for( ii=0 ; ii < num_str ; ii++ ){
01991          for( vv=FIRST_VIEW_TYPE ; vv <= LAST_VIEW_TYPE ; vv++ )
01992             if( ISVALID_3DIM_DATASET(im3d->ss_now->dsset[ii][vv]) ) break ;
01993 
01994          if( vv <= LAST_VIEW_TYPE ){
01995             llen = strlen( im3d->ss_now->dsset[ii][vv]->dblk->diskptr->prefix ) ;
01996             ltop = MAX( ltop , llen ) ;
01997          }
01998       }
01999       ltop = MIN(ltop,STRLIST_SIZE-24) ;  /* 06 Aug 2002 */
02000 
02001       for( ii=0 ; ii < num_str ; ii++ ){
02002          for( vv=FIRST_VIEW_TYPE ; vv <= LAST_VIEW_TYPE ; vv++ )
02003             if( ISVALID_3DIM_DATASET(im3d->ss_now->dsset[ii][vv]) ) break ;
02004 
02005          if( vv <= LAST_VIEW_TYPE ){
02006             sprintf( strlist[ii] , "%-*s" ,
02007                      ltop,im3d->ss_now->dsset[ii][vv]->dblk->diskptr->prefix ) ;
02008 
02009             strcat( strlist[ii] , " [" ) ;
02010             strcat( strlist[ii] , DSET_PREFIXSTR(im3d->ss_now->dsset[ii][vv]) ) ;
02011 
02012             if( DSET_NUM_TIMES(im3d->ss_now->dsset[ii][vv]) > 1 ){
02013                int ll = strlen(strlist[ii]) ;
02014                sprintf( strlist[ii]+ll , ":3D+t:%d]" ,
02015                         DSET_NUM_TIMES(im3d->ss_now->dsset[ii][vv]) ) ;
02016             } else if( ISBUCKET(im3d->ss_now->dsset[ii][vv]) ){
02017                int ll = strlen(strlist[ii]) ;
02018                sprintf( strlist[ii]+ll , ":%d]" ,
02019                         DSET_NVALS(im3d->ss_now->dsset[ii][vv]) ) ;
02020             } else {
02021                strcat( strlist[ii] , "]" ) ;
02022             }
02023 
02024             if( DSET_GRAPHABLE(im3d->ss_now->dsset[ii][vv]) )
02025                strcat( strlist[ii] , "*" ) ;
02026 
02027             if( DSET_COMPRESSED(im3d->ss_now->dsset[ii][vv]) )
02028                strcat( strlist[ii] , "z" ) ;
02029 
02030             /* 20 Dec 2001: mark if this is a global dataset */
02031 
02032             if( DSET_in_global_session(im3d->ss_now->dsset[ii][vv]) )
02033               strcat( strlist[ii] , "G" ) ;
02034 
02035          } else
02036             MCW_strncpy( strlist[ii] , "??*BAD*??" , THD_MAX_PREFIX ) ;
02037       }
02038 
02039       init_str = im3d->vinfo->anat_num ;
02040       label    = dset_choice[1] ;
02041 
02042    /*--- make a list of function names ---*/
02043 
02044    } else if( w == im3d->vwid->view->choose_func_pb ||
02045               w == im3d->vwid->view->popchoose_func_pb ){
02046 
02047       wpar    = im3d->vwid->view->choose_func_pb ;
02048       num_str = im3d->ss_now->num_dsset ;
02049       if( num_str < 1 ) EXRETURN ;
02050 
02051       ltop = 4 ;
02052       for( ii=0 ; ii < num_str ; ii++ ){
02053          for( vv=FIRST_VIEW_TYPE ; vv <= LAST_VIEW_TYPE ; vv++ )
02054             if( ISVALID_3DIM_DATASET(im3d->ss_now->dsset[ii][vv]) ) break ;
02055 
02056          if( vv <= LAST_VIEW_TYPE ){
02057             llen = strlen( im3d->ss_now->dsset[ii][vv]->dblk->diskptr->prefix ) ;
02058             ltop = MAX( ltop , llen ) ;
02059          }
02060       }
02061       ltop = MIN(ltop,STRLIST_SIZE-24) ;  /* 06 Aug 2002 */
02062 
02063       for( ii=0 ; ii < num_str ; ii++ ){
02064          for( vv=FIRST_VIEW_TYPE ; vv <= LAST_VIEW_TYPE ; vv++ )
02065             if( ISVALID_3DIM_DATASET(im3d->ss_now->dsset[ii][vv]) ) break ;
02066 
02067          if( vv <= LAST_VIEW_TYPE ){
02068             sprintf( strlist[ii] , "%-*s" ,
02069                      ltop , im3d->ss_now->dsset[ii][vv]->dblk->diskptr->prefix ) ;
02070 
02071             strcat( strlist[ii] , " [" ) ;
02072             strcat( strlist[ii] , DSET_PREFIXSTR(im3d->ss_now->dsset[ii][vv]) ) ;
02073 
02074             if( DSET_NUM_TIMES(im3d->ss_now->dsset[ii][vv]) > 1 ){
02075                int ll = strlen(strlist[ii]) ;
02076                sprintf( strlist[ii]+ll , ":3D+t:%d]" ,
02077                         DSET_NUM_TIMES(im3d->ss_now->dsset[ii][vv]) ) ;
02078             } else if( ISBUCKET(im3d->ss_now->dsset[ii][vv]) ){
02079                int ll = strlen(strlist[ii]) ;
02080                sprintf( strlist[ii]+ll , ":%d]" ,
02081                         DSET_NVALS(im3d->ss_now->dsset[ii][vv]) ) ;
02082             } else {
02083                strcat( strlist[ii] , "]" ) ;
02084             }
02085 
02086             if( DSET_COMPRESSED(im3d->ss_now->dsset[ii][vv]) )
02087                strcat( strlist[ii] , "z" ) ;
02088 
02089             /* 20 Dec 2001: mark if this is a global dataset */
02090 
02091             if( DSET_in_global_session(im3d->ss_now->dsset[ii][vv]) )
02092               strcat( strlist[ii] , "G" ) ;
02093 
02094          } else
02095             MCW_strncpy( strlist[ii] , "**?BAD?**" , THD_MAX_PREFIX ) ;
02096 
02097       }
02098 
02099       init_str = im3d->vinfo->func_num ;
02100       label    = dset_choice[2] ;
02101 
02102    } else {
02103       XBell( im3d->dc->display , 100 ) ; EXRETURN ;  /* bad news! */
02104    }
02105 
02106    /*--- call the chooser ---*/
02107 
02108    MCW_choose_strlist( wpar , label , num_str , init_str , strlist ,
02109                        AFNI_finalize_dataset_CB , (XtPointer) im3d ) ;
02110 
02111    RESET_AFNI_QUIT(im3d) ;
02112    EXRETURN ;
02113 }

void AFNI_choose_surface_CB Widget    w,
XtPointer    cd,
XtPointer    cbs
 

Callback for Switch Surface pushbutton [19 Aug 2002]. --------------------------------------------------------------------------

Definition at line 775 of file afni_sumafunc.c.

References AFNI_make_surface_widgets(), AFNI_update_surface_widgets(), ENTRY, IM3D_OPEN, AFNI_surface_widgets::rowcol, Three_D_View::ss_now, THD_session::su_num, AFNI_viewing_widgets::swid, AFNI_widget_set::view, Three_D_View::vwid, WAIT_for_window, and AFNI_surface_widgets::wtop.

00776 {
00777    Three_D_View *im3d = (Three_D_View *) cd ;
00778    AFNI_surface_widgets *swid ;
00779    int num , ii , nwid,nall ;
00780 
00781 ENTRY("AFNI_choose_surface_CB") ;
00782 
00783    if( !IM3D_OPEN(im3d) || im3d->ss_now == NULL ) EXRETURN ;  /* bad */
00784 
00785    num  = im3d->ss_now->su_num ;
00786    swid = im3d->vwid->view->swid ;
00787 
00788    /* no surfaces ==> nothing to do */
00789 
00790    if( num == 0 ) EXRETURN ;
00791 
00792    /* make widgets? */
00793 
00794    if( swid == NULL ){
00795      AFNI_make_surface_widgets(im3d,num) ;
00796      swid = im3d->vwid->view->swid ;
00797    }
00798 
00799    /* make control panel visible, if it isn't already */
00800 
00801    XtMapWidget( swid->wtop ) ;
00802    XRaiseWindow( XtDisplay(swid->wtop), XtWindow(swid->wtop) ) ;
00803 
00804    /* put proper labels on widgets, etc. */
00805 
00806    AFNI_update_surface_widgets(im3d) ;
00807 
00808    /* Mac OS X mangles up the widgets on first display,
00809       so unmanage and remanage them -- this solves that problem */
00810 
00811    WAIT_for_window( swid->rowcol ) ;
00812    XtUnmanageChild( swid->rowcol ) ;
00813    WAIT_for_window( swid->rowcol ) ;
00814    XtManageChild  ( swid->rowcol ) ;
00815 
00816    /* wait for user to press some button */
00817 
00818    EXRETURN ;
00819 }

void AFNI_clone_controller_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7606 of file afni_widg.c.

Referenced by RT_start_dataset().

void AFNI_close_file_dialog_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 2345 of file afni_func.c.

References ENTRY, AFNI_widget_set::file_dialog, RWC_XtPopdown(), and Three_D_View::vwid.

Referenced by AFNI_make_file_dialog().

02346 {
02347    Three_D_View *im3d = (Three_D_View *) cd ;
02348 
02349 ENTRY("AFNI_close_file_dialog") ;
02350 
02351    if( im3d->vwid->file_dialog != NULL )
02352       RWC_XtPopdown( im3d->vwid->file_dialog ) ;
02353 
02354    EXRETURN ;
02355 }

void AFNI_closedown_3dview Three_D_View   im3d
 

Definition at line 4527 of file afni.c.

References AFNI_controller_panel_CB(), AFNI_fimmer_setref(), AFNI_purge_unused_dsets(), AFNI_receive_destroy(), Three_D_View::anat_now, Three_D_View::b123_anat, Three_D_View::b123_fim, Three_D_View::b123_ulay, Three_D_View::b231_anat, Three_D_View::b231_fim, Three_D_View::b231_ulay, Three_D_View::b312_anat, Three_D_View::b312_fim, Three_D_View::b312_ulay, CLEAR_FIMDATA, drive_MCW_grapher(), drive_MCW_imseq(), ENTRY, Three_D_View::fim_now, AFNI_viewing_widgets::frame, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_destroy, IM3D_VALID, isqDR_destroy, LOAD_IVEC3, myXtFree, RESET_AFNI_QUIT, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, AFNI_viewing_widgets::swid, AFNI_widget_set::view, Three_D_View::vinfo, Three_D_View::vwid, AFNI_surface_widgets::wtop, AFNI_view_info::xhairs_ndown, AFNI_view_info::xhairs_nskip, and AFNI_view_info::xhairs_nup.

04528 {
04529 ENTRY("AFNI_closedown_3dview") ;
04530 
04531    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04532 
04533    /* Mar 1999: shutoff receivers, if any */
04534 
04535    AFNI_receive_destroy( im3d ) ;
04536 
04537    /* destroy any viewers attached */
04538 
04539    drive_MCW_imseq( im3d->s123 , isqDR_destroy , NULL ) ;
04540    drive_MCW_imseq( im3d->s231 , isqDR_destroy , NULL ) ;
04541    drive_MCW_imseq( im3d->s312 , isqDR_destroy , NULL ) ;
04542 
04543    drive_MCW_grapher( im3d->g123 , graDR_destroy , NULL ) ;
04544    drive_MCW_grapher( im3d->g231 , graDR_destroy , NULL ) ;
04545    drive_MCW_grapher( im3d->g312 , graDR_destroy , NULL ) ;
04546 
04547    /* erase FD bricks */
04548 
04549    myXtFree(im3d->b123_anat) ;
04550    myXtFree(im3d->b231_anat) ;
04551    myXtFree(im3d->b312_anat) ;
04552 
04553    myXtFree(im3d->b123_fim)  ;
04554    myXtFree(im3d->b231_fim)  ;
04555    myXtFree(im3d->b312_fim)  ;
04556 
04557    im3d->b123_ulay = im3d->b231_ulay = im3d->b312_ulay = NULL ;
04558 
04559    if( XtIsManaged(im3d->vwid->view->frame) == True )
04560       AFNI_controller_panel_CB( NULL , im3d , NULL ) ;
04561 
04562    /* null out montage info */
04563 
04564    LOAD_IVEC3(im3d->vinfo->xhairs_ndown,0,0,0) ;
04565    LOAD_IVEC3(im3d->vinfo->xhairs_nup  ,0,0,0) ;
04566    LOAD_IVEC3(im3d->vinfo->xhairs_nskip,0,0,0) ;
04567 
04568    /* de-fim */
04569 
04570    AFNI_fimmer_setref(im3d,NULL) ; CLEAR_FIMDATA(im3d) ;
04571 
04572    RESET_AFNI_QUIT(im3d) ;
04573 
04574    im3d->anat_now = im3d->fim_now = NULL ;
04575 
04576    AFNI_purge_unused_dsets() ;
04577 
04578    /* 19 Aug 2002: close surface widgets, too */
04579 
04580    if( im3d->vwid->view->swid != NULL )
04581      XtUnmapWidget( im3d->vwid->view->swid->wtop ) ;
04582 
04583    MPROBE ;
04584    EXRETURN ;
04585 }

void AFNI_controller_clonify void   
 

at this point, ii = index of a controller to use *

Definition at line 7687 of file afni_widg.c.

Referenced by AFNI_drive_open_window(), and AFNI_quit_CB().

int AFNI_controller_code_to_index char *    code
 

Definition at line 262 of file afni_driver.c.

References ENTRY, MAX_CONTROLLERS, and RETURN.

Referenced by AFNI_drive_close_window(), AFNI_drive_open_plugin(), AFNI_drive_open_window(), AFNI_drive_pbar_rotate(), AFNI_drive_rescan_controller(), AFNI_drive_save_jpeg(), AFNI_drive_set_dicom_xyz(), AFNI_drive_set_ijk(), AFNI_drive_set_pbar_all(), AFNI_drive_set_pbar_number(), AFNI_drive_set_pbar_sign(), AFNI_drive_set_spm_xyz(), AFNI_drive_set_threshnew(), AFNI_drive_set_threshold(), AFNI_drive_set_view(), AFNI_drive_set_xhairs(), AFNI_drive_switch_anatomy(), AFNI_drive_switch_function(), AFNI_drive_switch_session(), AFNI_open_panel(), AFNI_set_func_autorange(), AFNI_set_func_range(), AFNI_set_func_resam(), and AFNI_set_func_visible().

00263 {
00264    int ic ;
00265 ENTRY("AFNI_controller_code_to_index") ;
00266    if( code    == NULL || *code   == '\0' ) RETURN(-1) ;
00267    if( code[1] != '\0' && code[1] != '.' && code[1] != ' ' ) RETURN(-1) ;
00268    ic = *code - 'A' ;
00269    if( ic < 0 || ic >= MAX_CONTROLLERS ) ic = -1 ;
00270    RETURN(ic) ;
00271 }

int AFNI_controller_index Three_D_View  
 

Definition at line 7204 of file afni_widg.c.

Referenced by AFNI_controller_label(), AFNI_equate_pbars(), AFNI_finalsave_layout_CB(), AFNI_imag_pop_CB(), AFNI_lock_carryout(), AFNI_pbar_lock_carryout(), AFNI_range_lock_carryout(), AFNI_setup_viewing(), AFNI_thrdrag_lock_carryout(), AFNI_thresh_lock_carryout(), AFNI_time_lock_carryout(), AFNI_view_xyz_CB(), DRAW_main(), and RT_tell_afni_one().

char* AFNI_controller_label Three_D_View   im3d
 

July 1996: get the sequences to send their montaging status *

Definition at line 1825 of file afni_func.c.

References AFNI_controller_index().

Referenced by AFNI_make_surface_widgets(), AFNI_set_window_titles(), AFNI_update_surface_widgets(), DRAW_main(), NOTES_main(), NUD_main(), PLUG_startup_plugin_CB(), RCREND_main(), REND_main(), RT_tell_afni_one(), and TAG_main().

01826 {
01827    static char clabel[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
01828    static char str[8] ;
01829    int ic ;
01830 
01831    ic = AFNI_controller_index( im3d ) ;
01832    if( ic < 0 || ic > 26 ) strcpy (str,"   ") ;
01833    else                    sprintf(str,"[%c] ",clabel[ic]) ;
01834    return str ;
01835 }

void AFNI_controller_panel_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 4590 of file afni.c.

References AFNI_marks_action_CB(), CLOSE_PANEL, AFNI_widget_set::dmode, ENTRY, AFNI_datamode_widgets::frame, AFNI_function_widgets::frame, AFNI_marks_widgets::frame, AFNI_viewing_widgets::frame, AFNI_widget_set::func, IM3D_OPEN, AFNI_widget_set::marks, MCW_invert_widget(), AFNI_program_widgets::panel_pb, AFNI_program_widgets::panel_pb_inverted, AFNI_widget_set::prog, RESET_AFNI_QUIT, AFNI_widget_set::view, and Three_D_View::vwid.

Referenced by AFNI_closedown_3dview().

04591 {
04592    Three_D_View * im3d = (Three_D_View *) cd ;
04593 
04594 ENTRY("AFNI_controller_panel_CB") ;
04595 
04596    if( ! IM3D_OPEN(im3d) || im3d->vwid->prog->panel_pb == NULL ) EXRETURN ;
04597 
04598    /** if view frame is open, close it and all its children **/
04599 
04600    if( XtIsManaged(im3d->vwid->view->frame) == True ){
04601 
04602       if( XtIsManaged(im3d->vwid->marks->frame) == True ){
04603          AFNI_marks_action_CB( NULL , (XtPointer) im3d , NULL ) ;
04604       }
04605 
04606       if( XtIsManaged(im3d->vwid->func->frame) ){
04607          CLOSE_PANEL(im3d,func) ;
04608       }
04609 
04610       if( XtIsManaged(im3d->vwid->dmode->frame) ){
04611          CLOSE_PANEL(im3d,dmode) ;
04612       }
04613 
04614       XtUnmanageChild(im3d->vwid->view->frame) ;
04615       if( im3d->vwid->prog->panel_pb_inverted ){
04616          MCW_invert_widget(im3d->vwid->prog->panel_pb) ;
04617          im3d->vwid->prog->panel_pb_inverted = False ;
04618       }
04619 
04620    } else {  /** open the view frame (but not its children) **/
04621 
04622       XtManageChild(im3d->vwid->view->frame) ;
04623       if( ! im3d->vwid->prog->panel_pb_inverted ){
04624          MCW_invert_widget(im3d->vwid->prog->panel_pb) ;
04625          im3d->vwid->prog->panel_pb_inverted = True ;
04626       }
04627    }
04628 
04629    RESET_AFNI_QUIT(im3d) ;
04630    EXRETURN ;
04631 }

void AFNI_copy_statistics THD_3dim_dataset  ,
THD_3dim_dataset  
 

Definition at line 50 of file adwarp.c.

References ADDTO_KILL, THD_statistics::bstat, THD_3dim_dataset::dblk, ENTRY, INVALIDATE_BSTAT, ISVALID_3DIM_DATASET, ISVALID_STATISTIC, THD_3dim_dataset::kl, myXtNew, THD_statistics::nbstat, THD_datablock::nvals, THD_statistics::parent, STATISTICS_TYPE, THD_3dim_dataset::stats, THD_statistics::type, XtMalloc, and XtRealloc.

Referenced by adwarp_follower_dataset(), AFNI_follower_dataset(), and AFNI_init_warp().

00051 {
00052    int ibr , nvold , nvnew ;
00053    THD_statistics *stold , *stnew ;
00054 
00055 ENTRY("AFNI_copy_statistics") ;
00056 
00057    if( !ISVALID_3DIM_DATASET(dsold) || !ISVALID_3DIM_DATASET(dsnew) ) EXRETURN ;
00058 
00059    nvold = dsold->dblk->nvals ;
00060    nvnew = dsnew->dblk->nvals ;
00061    stold = dsold->stats ;
00062    stnew = dsnew->stats ;
00063    if( !ISVALID_STATISTIC(stold) ) EXRETURN ;
00064 
00065    if( stnew == NULL ){
00066       dsnew->stats  = stnew = myXtNew( THD_statistics ) ;
00067       stnew->type   = STATISTICS_TYPE ;
00068       stnew->nbstat = nvnew ;
00069       stnew->bstat  = (THD_brick_stats *)
00070                         XtMalloc( sizeof(THD_brick_stats) * nvnew ) ;
00071       ADDTO_KILL(dsnew->kl,stnew) ;
00072       stnew->parent = (XtPointer) dsnew ;
00073    } else {
00074       stnew->nbstat = nvnew ;
00075       stnew->bstat  = (THD_brick_stats *)
00076                         XtRealloc( (char *) stnew->bstat ,
00077                                    sizeof(THD_brick_stats) * nvnew ) ;
00078    }
00079 
00080    for( ibr=0 ; ibr < nvnew ; ibr++ ){
00081       if( ibr < nvold )
00082          stnew->bstat[ibr] = stold->bstat[ibr] ;
00083       else
00084          INVALIDATE_BSTAT(stnew->bstat[ibr]) ;
00085    }
00086 
00087    EXRETURN ;
00088 }

int AFNI_count_controllers void   
 

popup on picture widget (right of Quit button) *

Definition at line 7160 of file afni_widg.c.

Referenced by AFNI_drive_close_window(), AFNI_quit_CB(), and RT_start_dataset().

void AFNI_crosshair_color_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 4746 of file afni.c.

References AFNI_set_viewpoint(), client_data, AFNI_view_info::crosshair_ovcolor, AFNI_view_info::crosshair_visible, ENTRY, IM3D_VALID, ipx, MCW_arrowval::ival, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, and Three_D_View::vinfo.

04747 {
04748    Three_D_View * im3d = (Three_D_View *) client_data ;
04749    int ipx = av->ival ;
04750 
04751 ENTRY("AFNI_crosshair_color_CB") ;
04752 
04753    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04754 
04755    im3d->vinfo->crosshair_ovcolor = ipx ;
04756    if( im3d->vinfo->crosshair_visible ){
04757       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
04758    }
04759 
04760    RESET_AFNI_QUIT(im3d) ;
04761    EXRETURN ;
04762 }

void AFNI_crosshair_EV Widget   ,
XtPointer   ,
XEvent *   ,
Boolean *   
 

Definition at line 7756 of file afni.c.

References AFNI_widget_set::butx, AFNI_widget_set::buty, AFNI_imaging_widgets::crosshair_label, AFNI_imaging_widgets::crosshair_menu, ENTRY, ev, event, IM3D_OPEN, AFNI_widget_set::imag, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, and Three_D_View::vwid.

07758 {
07759    Three_D_View *im3d = (Three_D_View *)cd ;
07760 
07761 ENTRY("AFNI_crosshair_EV") ;
07762 
07763    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
07764 
07765    /*** handle events ***/
07766 
07767    switch( ev->type ){
07768 
07769      /*----- take button press -----*/
07770 
07771      case ButtonPress:{
07772        XButtonEvent *event = (XButtonEvent *)ev ;
07773 
07774        if( event->button == Button3 ||
07775            (event->button == Button1 &&
07776             (event->state & (ShiftMask|ControlMask))) ){
07777 
07778          im3d->vwid->butx = event->x_root ;  /* 17 May 2005 */
07779          im3d->vwid->buty = event->y_root ;
07780          event->button    = Button3 ;                                /* fake  */
07781          XmMenuPosition( im3d->vwid->imag->crosshair_menu , event ); /* where */
07782          XtManageChild ( im3d->vwid->imag->crosshair_menu ) ;        /* popup */
07783        }
07784 
07785        else {
07786          (void) MCW_popup_message( im3d->vwid->imag->crosshair_label ,
07787                                    " The road goes ever on and on\n"
07788                                    " Out from the door from where it began.\n"
07789                                    " Now, far ahead the road has gone\n"
07790                                    " And I must follow if I can.\n"
07791                                    " Pursuing it with eager feet\n"
07792                                    " Until it meets some other way\n"
07793                                    " Where many paths and errands meet\n"
07794                                    " And whither then I cannot say." ,
07795                                 MCW_USER_KILL | MCW_TIMER_KILL ) ;
07796        }
07797      }
07798      break ;
07799 
07800      /*----- take key press -----*/
07801 
07802 #if 0
07803      case KeyPress:{
07804        XKeyEvent * event = (XKeyEvent *) ev ;
07805        char           buf[32] ;
07806        KeySym         ks ;
07807        int            nbuf ;
07808 
07809        buf[0] = '\0' ;
07810        nbuf = XLookupString( event , buf , 32 , &ks , NULL ) ;
07811 
07812        switch( buf[0] ){
07813          default: break ;
07814        }
07815      }
07816      break ;
07817 #endif
07818    }
07819 
07820    EXRETURN ;
07821 }

void AFNI_crosshair_gap_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 4766 of file afni.c.

References AFNI_set_viewpoint(), client_data, AFNI_view_info::crosshair_gap, AFNI_view_info::crosshair_gap_old, AFNI_view_info::crosshair_visible, ENTRY, IM3D_VALID, ipx, MCW_arrowval::ival, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, and Three_D_View::vinfo.

Referenced by AFNI_seq_send_CB().

04767 {
04768    Three_D_View * im3d = (Three_D_View *) client_data ;
04769    int ipx ;
04770 
04771 ENTRY("AFNI_crosshair_gap_CB") ;
04772 
04773    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04774 
04775    if( av != NULL ){
04776       ipx = av->ival ;
04777    } else {
04778       if( im3d->vinfo->crosshair_gap_old > 0 ){
04779          ipx = im3d->vinfo->crosshair_gap_old ;
04780          im3d->vinfo->crosshair_gap_old = 0 ;
04781       } else {
04782          im3d->vinfo->crosshair_gap_old = im3d->vinfo->crosshair_gap ;
04783          ipx = 0 ;
04784       }
04785    }
04786 
04787    im3d->vinfo->crosshair_gap = ipx ;
04788    if( im3d->vinfo->crosshair_visible ){
04789       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
04790    }
04791 
04792    RESET_AFNI_QUIT(im3d) ;
04793    EXRETURN ;
04794 }

XmString AFNI_crosshair_label Three_D_View   im3d
 

initialize montage steps *

Definition at line 5958 of file afni.c.

References AFNI_IMAGES_VIEW, AFNI_library_type::cord, DSET_INMEMORY, ENTRY, Three_D_View::fim_now, THD_coorder::first, AFNI_view_info::func_visible, GLOBAL_library, AFNI_view_info::i1, THD_ivec3::ijk, IM3D_OPEN, IM3D_VALID, ISVALID_3DIM_DATASET, AFNI_view_info::j2, AFNI_view_info::k3, THD_coorder::orcode, RETURN, THD_coorder::second, AFNI_view_info::show_voxind, STATUS, TEMP_FVEC3, THD_3dmm_to_3dind(), THD_dicomm_to_3dmm(), THD_coorder::third, Three_D_View::type, Three_D_View::vinfo, THD_3dim_dataset::wod_flag, AFNI_view_info::xi, THD_coorder::xxsign, AFNI_view_info::yj, THD_coorder::yysign, AFNI_view_info::zk, and THD_coorder::zzsign.

Referenced by AFNI_crosshair_relabel().

05959 {
05960    char buf[128] ;
05961    XmString xstr ;
05962    static char * RR="[R]" , * LL="[L]" ,
05963                * PP="[P]" , * AA="[A]" ,
05964                * SS="[S]" , * II="[I]" , * ZZ="   " ;
05965    char * xx , * yy , * zz ;
05966    float xval,yval,zval ;
05967 
05968 ENTRY("AFNI_crosshair_label") ;
05969 
05970    if( ! IM3D_VALID(im3d) ) RETURN( NULL );
05971 
05972    if( ! IM3D_OPEN(im3d) ){
05973 
05974       buf[0] = '\0' ;
05975       if( im3d->type != AFNI_IMAGES_VIEW ) strcat(buf," \n") ;
05976       strcat(buf, "1234567890123456789\n"
05977                   "1234567890123456789\n"
05978                   "1234567890123456789"  ) ;
05979 
05980    } else if( im3d->type == AFNI_IMAGES_VIEW || im3d->vinfo->show_voxind ){
05981 
05982 STATUS("voxel indexes") ;
05983 
05984       if( ISVALID_3DIM_DATASET(im3d->fim_now) &&
05985           im3d->vinfo->func_visible && DSET_INMEMORY(im3d->fim_now) ){
05986          THD_fvec3 fv ;
05987          THD_ivec3 iv ;
05988          int flag ;
05989 
05990          flag = im3d->fim_now->wod_flag ;
05991          im3d->fim_now->wod_flag = False ;
05992 
05993          fv = THD_dicomm_to_3dmm( im3d->fim_now ,
05994                                   TEMP_FVEC3(im3d->vinfo->xi,im3d->vinfo->yj,im3d->vinfo->zk) ) ;
05995          iv = THD_3dmm_to_3dind( im3d->fim_now , fv ) ;
05996 
05997          im3d->fim_now->wod_flag = flag ;
05998 
05999          sprintf( buf , "x: an=%4d fun=%4d\ny: an=%4d fun=%4d\nz: an=%4d fun=%4d" ,
06000                   im3d->vinfo->i1,iv.ijk[0] ,
06001                   im3d->vinfo->j2,iv.ijk[1] ,
06002                   im3d->vinfo->k3,iv.ijk[2]  ) ;
06003       } else {
06004          sprintf( buf , "voxel x = %4d\nvoxel y = %4d\nvoxel z = %4d" ,
06005                   im3d->vinfo->i1 , im3d->vinfo->j2 , im3d->vinfo->k3  ) ;
06006       }
06007    } else {
06008       char bxyz[3][32] , *cname ;
06009 
06010 STATUS("voxel coordinates") ;
06011 
06012       xval = im3d->vinfo->xi ;
06013       yval = im3d->vinfo->yj ;
06014       zval = im3d->vinfo->zk ;
06015 
06016       xx = (xval==0.0) ? (ZZ) : ( (xval<0.0) ? (RR) : (LL) ) ;
06017       yy = (yval==0.0) ? (ZZ) : ( (yval<0.0) ? (AA) : (PP) ) ;
06018       zz = (zval==0.0) ? (ZZ) : ( (zval<0.0) ? (II) : (SS) ) ;
06019 
06020       /** 16 July 1997 **/
06021 #if 1
06022       sprintf( bxyz[0] , "=%9.3f mm %s" ,
06023                GLOBAL_library.cord.xxsign * xval , xx ) ;
06024 
06025       sprintf( bxyz[1] , "=%9.3f mm %s" ,
06026                GLOBAL_library.cord.yysign * yval , yy ) ;
06027 
06028       sprintf( bxyz[2] , "=%9.3f mm %s" ,
06029                GLOBAL_library.cord.zzsign * zval , zz ) ;
06030 
06031       if( strcmp(GLOBAL_library.cord.orcode,"RAI") == 0 )
06032         cname = "=DICOM" ;
06033       else if( strcmp(GLOBAL_library.cord.orcode,"LPI") == 0 )
06034         cname = "=SPM  " ;
06035       else
06036         cname = "      " ;
06037 
06038       sprintf( buf , "[order: %s%s]\nx %17s\ny %17s\nz %17s"   ,
06039                GLOBAL_library.cord.orcode       , cname ,
06040                bxyz[GLOBAL_library.cord.first]  ,
06041                bxyz[GLOBAL_library.cord.second] ,
06042                bxyz[GLOBAL_library.cord.third]   ) ;
06043 #else
06044       sprintf( buf , "x =%9.3f mm %s\ny =%9.3f mm %s\nz =%9.3f mm %s" ,
06045                xval,xx , yval,yy , zval,zz ) ;
06046 #endif
06047    }
06048 
06049    xstr = XmStringCreateLtoR( buf , XmFONTLIST_DEFAULT_TAG ) ;
06050 
06051    RETURN( xstr ) ;
06052 }

void AFNI_crosshair_pop_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7861 of file afni.c.

References AFNI_crosshair_relabel(), client_data, AFNI_library_type::controllers, AFNI_library_type::cord, AFNI_imaging_widgets::crosshair_dicom_pb, AFNI_imaging_widgets::crosshair_spm_pb, ENTRY, GLOBAL_argopt, GLOBAL_library, AFNI_widget_set::imag, MAX_CONTROLLERS, MCW_strncpy, AF_options::orient_code, POPDOWN_string_chooser, THD_coorder_fill(), and Three_D_View::vwid.

07863 {
07864    Three_D_View *im3d = (Three_D_View *)client_data ;
07865    static char *cord_dicom="RAI" , *cord_spm="LPI" ;
07866    char *val=NULL ;
07867    int ii ;
07868 
07869 ENTRY("AFNI_crosshair_pop_CB") ;
07870 
07871         if( w == im3d->vwid->imag->crosshair_dicom_pb ) val = cord_dicom ;
07872    else if ( w == im3d->vwid->imag->crosshair_spm_pb  ) val = cord_spm   ;
07873 
07874    if( val != NULL && strcmp(GLOBAL_argopt.orient_code,val) != 0 ){
07875      POPDOWN_string_chooser ;   /* in case "Jumpto xyz" is open */
07876      MCW_strncpy(GLOBAL_argopt.orient_code,val,4) ;
07877      THD_coorder_fill( GLOBAL_argopt.orient_code , &GLOBAL_library.cord ) ;
07878      for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
07879        AFNI_crosshair_relabel( GLOBAL_library.controllers[ii] ) ;
07880    }
07881    EXRETURN ;
07882 }

void AFNI_crosshair_relabel Three_D_View  
 

Definition at line 7827 of file afni.c.

References AFNI_crosshair_label(), AFNI_imaging_widgets::crosshair_label, ENTRY, IM3D_OPEN, AFNI_widget_set::imag, MCW_expose_widget(), AFNI_view_info::old_crosshair_label, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_crosshair_pop_CB(), and AFNI_set_viewpoint().

07828 {
07829    XmString xstr ;
07830    Boolean same ;
07831 
07832 ENTRY("AFNI_crosshair_relabel") ;
07833 
07834    if( !IM3D_OPEN(im3d) ) EXRETURN ;
07835    xstr = AFNI_crosshair_label( im3d ) ; if( xstr == NULL ) EXRETURN ;
07836    if( im3d->vinfo->old_crosshair_label == (XmString)NULL ) /* shouldn't */
07837      same = False ;                                         /* happen   */
07838    else
07839      same = XmStringCompare( xstr , im3d->vinfo->old_crosshair_label ) ;
07840 
07841    if( same == False ){
07842       XtVaSetValues( im3d->vwid->imag->crosshair_label ,       /* redisplay */
07843                         XmNlabelString , xstr ,                /* if changed */
07844                      NULL ) ;
07845       MCW_expose_widget( im3d->vwid->imag->crosshair_label ) ; /* redraw now! */
07846       if( im3d->vinfo->old_crosshair_label != (XmString)NULL )
07847         XmStringFree(im3d->vinfo->old_crosshair_label) ;       /* toss old */
07848       im3d->vinfo->old_crosshair_label = xstr ;                /* new old */
07849    } else {
07850       XmStringFree( xstr ) ;  /* was same --> don't need this copy */
07851    }
07852 
07853    EXRETURN ;
07854 }

void AFNI_crosshair_visible_CB MCW_arrowval   av,
XtPointer    client_data
 

open the view frame (but not its children) *

Definition at line 4637 of file afni.c.

References AFNI_process_viewpoint(), AFNI_set_viewpoint(), AFNI_XHAIRS_AP, AFNI_XHAIRS_AP_IS, AFNI_XHAIRS_IS, AFNI_XHAIRS_LR, AFNI_XHAIRS_LR_AP, AFNI_XHAIRS_LR_IS, AFNI_XHAIRS_MULTI, AFNI_XHAIRS_OFF, AFNI_XHAIRS_SINGLE, client_data, AFNI_view_info::crosshair_visible, ENTRY, IM3D_VALID, MCW_arrowval::ival, MCW_arrowval::old_ival, ORIMASK_ALL, ORIMASK_AP, ORIMASK_AP_IS, ORIMASK_IS, ORIMASK_LR, ORIMASK_LR_AP, ORIMASK_LR_IS, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, Three_D_View::vinfo, AFNI_view_info::xhairs_orimask, and AFNI_view_info::xhairs_show_montage.

Referenced by AFNI_drive_set_xhairs(), and AFNI_startup_layout_CB().

04638 {
04639    Three_D_View * im3d = (Three_D_View *) client_data ;
04640    int val , omold ;
04641 
04642 ENTRY("AFNI_crosshair_visible_CB") ;
04643 
04644    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04645 
04646    if( av->ival == av->old_ival ) EXRETURN ;
04647 
04648    switch( av->ival ){
04649       case AFNI_XHAIRS_OFF:
04650          im3d->vinfo->crosshair_visible   = False ;
04651          im3d->vinfo->xhairs_show_montage = False ;
04652       break ;
04653 
04654       case AFNI_XHAIRS_SINGLE:
04655          im3d->vinfo->crosshair_visible   = True ;
04656          im3d->vinfo->xhairs_show_montage = False ;
04657       break ;
04658 
04659       default:                                     /* 31 Dec 1998:  */
04660       case AFNI_XHAIRS_MULTI:                      /*   new options */
04661          im3d->vinfo->crosshair_visible   = True ; /*   like Multi  */
04662          im3d->vinfo->xhairs_show_montage = True ;
04663       break ;
04664    }
04665 
04666    /* 31 Dec 1998: only allow crosshairs of some orientations */
04667 
04668    omold = im3d->vinfo->xhairs_orimask ;  /* 02 Jun 1999 */
04669 
04670    switch( av->ival ){
04671       default:                im3d->vinfo->xhairs_orimask = ORIMASK_ALL  ; break;
04672       case AFNI_XHAIRS_LR_AP: im3d->vinfo->xhairs_orimask = ORIMASK_LR_AP; break;
04673       case AFNI_XHAIRS_LR_IS: im3d->vinfo->xhairs_orimask = ORIMASK_LR_IS; break;
04674       case AFNI_XHAIRS_AP_IS: im3d->vinfo->xhairs_orimask = ORIMASK_AP_IS; break;
04675       case AFNI_XHAIRS_LR:    im3d->vinfo->xhairs_orimask = ORIMASK_LR   ; break;
04676       case AFNI_XHAIRS_AP:    im3d->vinfo->xhairs_orimask = ORIMASK_AP   ; break;
04677       case AFNI_XHAIRS_IS:    im3d->vinfo->xhairs_orimask = ORIMASK_IS   ; break;
04678    }
04679 
04680    AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
04681 
04682    /* 02 Jun 1999: if xhairs layout has changed, send a notice */
04683 
04684    if( omold != im3d->vinfo->xhairs_orimask ) AFNI_process_viewpoint( im3d ) ;
04685 
04686    RESET_AFNI_QUIT(im3d) ;
04687    EXRETURN ;
04688 }

void AFNI_decode_geom char *   ,
int *   ,
int *   ,
int *   ,
int *   
 

Definition at line 852 of file afni_splash.c.

References geom.

Referenced by AFNI_drive_geom_graph(), AFNI_drive_open_plugin(), AFNI_drive_open_window(), and AFNI_startup_layout_CB().

00853 {
00854    int has_x , has_plus ;
00855 
00856    *ww = *hh = *xx = *yy = -1 ;
00857    if( geom == NULL || geom[0] == '\0' ) return ;
00858 
00859    has_x    = strstr(geom,"x") != NULL ;
00860    has_plus = strstr(geom,"+") != NULL ;
00861 
00862    if( has_x && has_plus )
00863       sscanf(geom,"%dx%d+%d+%d",ww,hh,xx,yy) ;
00864    else if( has_x )
00865       sscanf(geom,"%dx%d",ww,hh) ;
00866    else if( has_plus )
00867       sscanf(geom,"+%d+%d",xx,yy) ;
00868 
00869    return ;
00870 }

void AFNI_define_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7488 of file afni.c.

References AFNI_marks_widgets::action_rowcol, AFNI_marks_action_CB(), AFNI_marks_edits_CB(), AFNI_see_marks_CB(), AFNI_set_viewpoint(), Three_D_View::anat_now, AV_SENSITIZE, AFNI_marks_widgets::changed, client_data, CLOSE_PANEL, AFNI_marks_widgets::control_frame, AFNI_marks_widgets::control_rowcol, AFNI_viewing_widgets::define_dmode_pb, AFNI_viewing_widgets::define_func_pb, AFNI_viewing_widgets::define_marks_pb, AFNI_marks_widgets::disp_gap_av, AFNI_marks_widgets::disp_scolor_av, AFNI_marks_widgets::disp_size_av, AFNI_widget_set::dmode, AFNI_marks_widgets::edits_bbox, ENTRY, FIX_SCALE_SIZE, FIX_SCALE_VALUE, AFNI_datamode_widgets::frame, AFNI_function_widgets::frame, AFNI_marks_widgets::frame, AFNI_widget_set::func, HIDE_SCALE, IM3D_VALID, AFNI_function_widgets::inten_pbar, AFNI_function_widgets::inten_rowcol, ISVALID_VIEW, MAIN_app, THD_3dim_dataset::markers, AFNI_widget_set::marks, MCW_set_bbox(), THD_marker_set::numset, AFNI_marks_widgets::old_visible, OPEN_PANEL, AFNI_function_widgets::options_rowcol, AFNI_marks_widgets::ov_visible, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, AFNI_function_widgets::rowcol, AFNI_marks_widgets::rowcol, AFNI_viewing_widgets::see_marks_bbox, SENSITIZE, STATUS, AFNI_function_widgets::thr_rowcol, AFNI_marks_widgets::tlrc_big_bbox, AFNI_marks_widgets::tog_frame, AFNI_marks_widgets::tog_rowcol, AFNI_marks_widgets::transform_pb, update_MCW_pbar(), AFNI_widget_set::view, VIEW_TALAIRACH_TYPE, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, WARPED_VIEW, and MCW_bbox::wrowcol.

Referenced by AFNI_open_panel().

07489 {
07490    Three_D_View * im3d = (Three_D_View *) client_data ;
07491    int vwarp ;
07492 
07493 ENTRY("AFNI_define_CB") ;
07494 
07495    if( ! IM3D_VALID(im3d) ) EXRETURN ;
07496 
07497    /*-----  define marks panel -----*/
07498 
07499    if( w == im3d->vwid->view->define_marks_pb ){
07500 
07501       AFNI_viewing_widgets  * view  = im3d->vwid->view  ;
07502       AFNI_marks_widgets    * marks = im3d->vwid->marks ;
07503 
07504       if( XtIsManaged(marks->frame) == True ){  /* close it down */
07505 
07506 STATUS("closing marks") ;
07507 
07508          AFNI_marks_action_CB( NULL , (XtPointer) im3d , NULL ) ;
07509 
07510       } else {                                  /* open it up */
07511 
07512 STATUS("opening marks") ;
07513 
07514          marks->old_visible = marks->ov_visible ;
07515          marks->ov_visible  = True ;
07516          marks->changed     = False ;  /* not changed yet! */
07517 
07518          MCW_set_bbox( marks->edits_bbox , 0 ) ;
07519          AFNI_marks_edits_CB( NULL , (XtPointer) im3d , NULL ) ;
07520 
07521          MCW_set_bbox( view->see_marks_bbox , 1 ) ;
07522          if( marks->old_visible != marks->ov_visible )
07523             AFNI_see_marks_CB( NULL , (XtPointer) im3d , NULL ) ;
07524 
07525          /* Oct 1998: turn off some controls if no markers present */
07526 
07527          if( im3d->anat_now->markers == NULL ){
07528             SENSITIZE( marks->edits_bbox->wrowcol , False ) ;
07529             SENSITIZE( marks->tlrc_big_bbox->wrowcol , False ) ;
07530             AV_SENSITIZE( marks->disp_scolor_av , False ) ;
07531             AV_SENSITIZE( marks->disp_size_av   , False ) ;
07532             AV_SENSITIZE( marks->disp_gap_av    , False ) ;
07533             SENSITIZE( marks->action_rowcol , False ) ;
07534             SENSITIZE( marks->transform_pb , False ) ;
07535          } else {
07536             vwarp = WARPED_VIEW(im3d->vinfo->view_type) ;
07537             SENSITIZE( marks->edits_bbox->wrowcol ,
07538                             (Boolean) ISVALID_VIEW(vwarp) ) ;
07539             SENSITIZE( marks->tlrc_big_bbox->wrowcol ,
07540                        (Boolean) (vwarp==VIEW_TALAIRACH_TYPE) ) ;
07541             AV_SENSITIZE( marks->disp_scolor_av , True ) ;
07542             AV_SENSITIZE( marks->disp_size_av   , True ) ;
07543             AV_SENSITIZE( marks->disp_gap_av    , True ) ;
07544             SENSITIZE( marks->action_rowcol , True ) ;
07545          }
07546 
07547    /*** I don't know why this is needed, but it prevents the
07548         marks panels geometry from getting screwed up, so it's here ***/
07549 
07550 #ifndef USING_LESSTIF
07551 #define REMANAGE_MARKS 1
07552 #else
07553 #define REMANAGE_MARKS 0
07554 #endif
07555 
07556 #if 1
07557        { static int first=1 ;
07558          if( REMANAGE_MARKS || first ){               /* CYGWIN: must do 1st time in */
07559            XtUnmanageChild( marks->rowcol ) ;         /* but not on later times --   */
07560            XtUnmanageChild( marks->tog_rowcol ) ;     /* probably a LessTif bug      */
07561            XtUnmanageChild( marks->control_rowcol ) ;
07562            XtUnmanageChild( marks->control_frame ) ;
07563            XtUnmanageChild( marks->tog_frame ) ;
07564            first = 0 ;
07565          }
07566        }
07567 #endif
07568 
07569          OPEN_PANEL(im3d,marks) ;
07570 
07571 #if 1
07572 #if 0
07573          XFlush( XtDisplay(marks->rowcol) ) ; XSync( XtDisplay(marks->rowcol),False ) ;
07574 #endif
07575          if( im3d->anat_now->markers != NULL ){  /* Oct 1998 */
07576             XtManageChild( marks->tog_rowcol ) ;
07577             XtManageChild( marks->tog_frame ) ;
07578          }
07579          XtManageChild( marks->control_rowcol ) ;
07580          XtManageChild( marks->control_frame ) ;
07581          XtManageChild( marks->rowcol ) ;
07582 #endif
07583 
07584       /* redraw markers if not visible already (if there are any to redraw) */
07585 
07586          if( marks->old_visible != True &&
07587              im3d->anat_now->markers != NULL &&
07588              im3d->anat_now->markers->numset > 0 )
07589 
07590             AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
07591       }
07592 
07593       EXRETURN ;
07594    }
07595 
07596    /*----- define function panel -----*/
07597 
07598    if( w == im3d->vwid->view->define_func_pb ){
07599       AFNI_viewing_widgets  * view  = im3d->vwid->view  ;
07600       AFNI_function_widgets * func  = im3d->vwid->func ;
07601 
07602       if( XtIsManaged(func->frame) ){
07603 
07604 STATUS("closing function") ;
07605 
07606          CLOSE_PANEL(im3d,func) ;
07607       } else {
07608 
07609 STATUS("opening function" ) ;
07610 
07611 #ifndef USING_LESSTIF
07612 #define REMANAGE_FUNC
07613 #endif
07614 
07615 #ifdef REMANAGE_FUNC
07616 STATUS("unmanaging children") ;
07617          XtUnmanageChild( im3d->vwid->func->rowcol ) ;
07618          XtUnmanageChild( im3d->vwid->func->thr_rowcol ) ;
07619          XtUnmanageChild( im3d->vwid->func->inten_rowcol ) ;
07620          XtUnmanageChild( im3d->vwid->func->options_rowcol ) ;
07621 #endif
07622 
07623 STATUS("opening panel") ;
07624          OPEN_PANEL(im3d,func) ;
07625 
07626 #ifdef REMANAGE_FUNC
07627 STATUS("remanaging children") ;
07628          XtManageChild( im3d->vwid->func->thr_rowcol ) ;
07629          XtManageChild( im3d->vwid->func->inten_rowcol ) ;
07630          XtManageChild( im3d->vwid->func->options_rowcol ) ;
07631          XtManageChild( im3d->vwid->func->rowcol ) ;
07632 #endif
07633          HIDE_SCALE(im3d) ;
07634          update_MCW_pbar( im3d->vwid->func->inten_pbar ) ;
07635          FIX_SCALE_SIZE(im3d) ; FIX_SCALE_VALUE(im3d) ;
07636 
07637 #ifdef FIX_SCALE_SIZE_LATER
07638         (void) XtAppAddTimeOut( MAIN_app,50,fixscale,im3d ) ; /* 09 May 2001 */
07639 #endif
07640 
07641 /***     XtManageChild( im3d->vwid->func->inten_bbox->wrowcol ) ; ***/
07642       }
07643 
07644       EXRETURN ;
07645    }
07646 
07647    /*-- define datamode panel --*/
07648 
07649    if( w == im3d->vwid->view->define_dmode_pb ){
07650       AFNI_viewing_widgets  * view  = im3d->vwid->view  ;
07651       AFNI_datamode_widgets * dmode = im3d->vwid->dmode ;
07652 
07653       if( XtIsManaged(dmode->frame) ){
07654 
07655 STATUS("closing dmode") ;
07656 
07657          CLOSE_PANEL(im3d,dmode) ;
07658       } else {
07659 
07660 STATUS("opening dmode" ) ;
07661 
07662          OPEN_PANEL(im3d,dmode) ;
07663       }
07664 
07665       EXRETURN ;
07666    }
07667 
07668    RESET_AFNI_QUIT(im3d) ;
07669    EXRETURN ;
07670 }

void AFNI_dicomm_to_xyz THD_3dim_dataset  ,
float   ,
float   ,
float   ,
float *   ,
float *   ,
float *   
 

Definition at line 923 of file afni_receive.c.

References ISVALID_DSET, TEMP_FVEC3, THD_3dmm_to_dicomm(), and THD_fvec3::xyz.

00926 {
00927    THD_fvec3 fv ;
00928 
00929    if( ! ISVALID_DSET(dset) ) return ;
00930 
00931    fv  = THD_3dmm_to_dicomm( dset , TEMP_FVEC3(xd,yd,zd) ) ;
00932    *xx = fv.xyz[0] ;
00933    *yy = fv.xyz[1] ;
00934    *zz = fv.xyz[2] ;
00935    return ;
00936 }

void AFNI_disable_suma_overlay int   
 

Definition at line 573 of file afni_niml.c.

References dont_overlay_suma.

Referenced by AFNI_see_func_CB().

00574 {
00575    dont_overlay_suma = aa ;
00576 }

void AFNI_do_bkgd_lab Three_D_View  
 

Definition at line 5230 of file afni.c.

References AFNI_view_info::anat_val, AFNI_function_widgets::bkgd_lab, AFNI_imaging_widgets::do_bkgd_lab, FIX_SCALE_SIZE, AFNI_widget_set::func, AFNI_view_info::func_val, IM3D_OPEN, AFNI_widget_set::imag, MCW_set_widget_label(), AFNI_view_info::thr_val, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_brick_to_mri(), and AFNI_set_viewpoint().

05231 {
05232    char str[256] ;
05233 
05234    if( !IM3D_OPEN(im3d) || !im3d->vwid->imag->do_bkgd_lab ) return ;
05235 
05236 #define VSTR(x) ( ((x)[0] == '\0') ? ("?") : (x) )
05237 
05238    sprintf(str,"ULay = %s\n"
05239                "OLay = %s\n"
05240                "Thr  = %s" ,
05241            VSTR(im3d->vinfo->anat_val),
05242            VSTR(im3d->vinfo->func_val),
05243            VSTR(im3d->vinfo->thr_val ) ) ;
05244 
05245 #undef VSTR
05246 
05247    MCW_set_widget_label( im3d->vwid->func->bkgd_lab , str ) ;
05248    XtManageChild( im3d->vwid->func->bkgd_lab ) ;
05249    FIX_SCALE_SIZE(im3d) ;
05250 }

void AFNI_do_many_writes Widget    wpar,
XtPointer    cd,
MCW_choose_cbs   cbs
 

scan once to find longest string name *

Definition at line 3647 of file afni_func.c.

References AFNI_refashion_dataset(), AFNI_reset_func_range(), AFNI_set_viewpoint(), AFNI_speak(), Three_D_View::anat_now, AFNI_view_info::anat_resam_mode, AFNI_datamode_widgets::anatmode_bbox, AFNI_library_type::controllers, CURRENT_DAXES, DATAXES_TYPE, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, THD_diskptr::directory_name, THD_datablock::diskptr, AFNI_widget_set::dmode, DMODE_BRICK, DSET_WRITEABLE, ENTRY, THD_diskptr::filecode, Three_D_View::fim_now, AFNI_view_info::func_resam_mode, AFNI_datamode_widgets::funcmode_bbox, GLOBAL_library, MCW_choose_cbs::ilist, IM3D_OPEN, ISFUNC, MAX_CONTROLLERS, MCW_CALLER_KILL, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, MCW_choose_cbs::nilist, PLUTO_find_dset(), REDISPLAY_OVERLAY, AFNI_view_info::resam_vox, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, STATUS, THD_edit_dataxes(), THD_MAX_NAME, THD_dataxes::type, Three_D_View::vinfo, Three_D_View::vwid, MCW_bbox::wbut, and AFNI_view_info::writeownsize.

Referenced by AFNI_write_many_dataset_CB().

03648 {
03649    MCW_idcode *idclist = (MCW_idcode *) cd ;
03650    Three_D_View *im3d = NULL , *qq3d ;
03651    THD_3dim_dataset *dset ;
03652    THD_dataxes      new_daxes ;
03653    int ib , resam_mode ;
03654    Boolean good ;
03655    Widget wmsg ;
03656    int cc , ccanat[MAX_CONTROLLERS] , ccfunc[MAX_CONTROLLERS] ;
03657 
03658 ENTRY("AFNI_do_many_writes") ;
03659 
03660    XtVaGetValues( wpar , XmNuserData , &im3d , NULL ) ;
03661    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
03662 
03663    SHOW_AFNI_PAUSE ;
03664 
03665    /** mark all controllers as untouched **/
03666 
03667    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ) ccanat[cc] = ccfunc[cc] = 0 ;
03668 
03669    wmsg = MCW_popup_message( wpar ,
03670             "*******************************\n"
03671             "** Please wait for dataset   **\n"
03672             "** computations and disk I/O **\n"
03673             "*******************************" , MCW_CALLER_KILL ) ;
03674    AFNI_speak("Writing",0) ;
03675 
03676    /** loop through selected datasets and do the dirty work **/
03677 
03678    for( ib=0 ; ib < cbs->nilist ; ib++ ){
03679       dset = PLUTO_find_dset( idclist + cbs->ilist[ib] ) ;
03680       if( DSET_WRITEABLE(dset) ){
03681 
03682          fprintf(stderr,"-- writing dataset %s%s (%d of %d)\n" ,
03683                         dset->dblk->diskptr->directory_name ,
03684                         dset->dblk->diskptr->filecode ,
03685                         ib+1 , cbs->nilist ) ;
03686 
03687          new_daxes.type = DATAXES_TYPE ;
03688 
03689 #ifdef USE_WRITEOWNSIZE
03690          if( im3d->vinfo->writeownsize )
03691             THD_edit_dataxes( im3d->vinfo->resam_vox , dset->daxes , &new_daxes ) ;
03692          else
03693 #endif
03694             THD_edit_dataxes( im3d->vinfo->resam_vox ,
03695                               CURRENT_DAXES(im3d->anat_now) , &new_daxes ) ;
03696 
03697          resam_mode = (ISFUNC(dset)) ? im3d->vinfo->func_resam_mode
03698                                      : im3d->vinfo->anat_resam_mode ;
03699 
03700          good = AFNI_refashion_dataset( im3d , dset , &new_daxes , resam_mode ) ;
03701 
03702          /** if the output failed, put a message to the screen **/
03703 
03704          if( ! good ){  /* bad news! */
03705             char str[THD_MAX_NAME+128] ;
03706             sprintf( str , "**\n"      "** Attempt to write dataset\n"
03707                            "** %s%s\n" "** failed for unknown reasons!\n**" ,
03708                      dset->dblk->diskptr->directory_name ,
03709                      dset->dblk->diskptr->filecode ) ;
03710             (void) MCW_popup_message( wpar , str , MCW_USER_KILL | MCW_TIMER_KILL ) ;
03711 
03712             fprintf(stderr,"   [output of %s%s failed!]\n",
03713                            dset->dblk->diskptr->directory_name ,
03714                            dset->dblk->diskptr->filecode ) ;
03715 
03716           /** otherwise, check if the dataset just done is
03717               the active anatomy or function in any open controller window **/
03718 
03719          } else {
03720             for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
03721                qq3d = GLOBAL_library.controllers[cc] ;
03722                if( ! IM3D_OPEN(qq3d) ) continue ;
03723                if( dset == qq3d->anat_now ) ccanat[cc] = 1 ;  /* flag their  */
03724                if( dset == qq3d->fim_now  ) ccfunc[cc] = 1 ;  /* controllers */
03725             }
03726          }
03727       }
03728    }
03729 
03730    /** for any controllers whose active datasets were written out,
03731        we need to set the "See Brick" buttons to be sensitive.     **/
03732 
03733    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
03734       qq3d = GLOBAL_library.controllers[cc] ;
03735       if( ! IM3D_OPEN(qq3d) ) continue ;
03736 
03737       if( ccfunc[cc] ){
03738 STATUS("resetting 'use func brick' button") ;
03739          XtSetSensitive( qq3d->vwid->dmode->funcmode_bbox->wbut[DMODE_BRICK] , True ) ;
03740          AFNI_reset_func_range( qq3d ) ;
03741          AFNI_set_viewpoint( qq3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
03742       }
03743 
03744       if( ccanat[cc] ){
03745 STATUS("resetting 'use anat brick' button") ;
03746          XtSetSensitive( qq3d->vwid->dmode->anatmode_bbox->wbut[DMODE_BRICK] , True ) ;
03747       }
03748    }
03749 
03750    XtDestroyWidget( wmsg ) ;
03751    SHOW_AFNI_READY ;
03752    EXRETURN ;
03753 }

int AFNI_driver char *    cmd
 

Definition at line 147 of file afni_driver.c.

References ENTRY, free, AFNI_driver_pair::fun, AFNI_driver_pair::nam, and RETURN.

Referenced by AFNI_equate_pbars(), AFNI_imag_pop_CB(), AFNI_niml_driver(), AFNI_niml_workproc(), AFNI_process_plugout(), AFNI_range_lock_carryout(), AFNI_startup_script_CB(), AFNI_startup_timeout_CB(), AFNI_thresh_lock_carryout(), and RT_process_info().

00148 {
00149    int clen , rval , ii , dd , dlen ;
00150    char *cmd , *dmd ;
00151 
00152 ENTRY("AFNI_driver") ;
00153 
00154    if( cmdd == NULL || *cmdd == '\0' ) RETURN(-1) ;  /* bad */
00155 
00156    dmd = cmd = strdup(cmdd) ; clen = strlen(cmd) ;
00157 
00158    /* skip leading blanks */
00159 
00160    for( ii=0 ; ii < clen ; ii++ )
00161       if( !isspace(cmd[ii]) ) break ;
00162 
00163    if( ii == clen ){ free(dmd); RETURN(-1); }  /* all blanks? */
00164 
00165    cmd += ii ; clen = strlen(cmd) ;
00166 
00167    /* 19 Dec 2002: trim trailing blanks */
00168 
00169    for( ii=clen-1 ; ii > 0 && isspace(cmd[ii]) ; ii-- )
00170      cmd[ii] = '\0' ;
00171 
00172    clen = strlen(cmd) ;
00173 
00174    /* scan dpair list for command */
00175 
00176    for( dd=0 ; dpair[dd].nam != NULL ; dd++ ){
00177 
00178       dlen = strlen(dpair[dd].nam) ;
00179       if( clen >= dlen                         &&
00180           strncmp(cmd,dpair[dd].nam,dlen) == 0   ){  /* found it */
00181 
00182          for( ii=dlen ; ii < clen ; ii++ )      /* skip blanks */
00183             if( !isspace(cmd[ii]) ) break ;     /* after command name */
00184 
00185          rval = dpair[dd].fun( cmd+ii ) ;       /* execute command */
00186          free(dmd) ; RETURN(rval) ;
00187       }
00188    }
00189 
00190    free(dmd) ; RETURN(-1) ;  /* not in the list */
00191 }

void AFNI_equate_pbars Three_D_View  ,
Three_D_View  
 

Definition at line 382 of file afni_lock.c.

References AFNI_controller_index(), AFNI_driver(), AV_uformat_fval(), MCW_pbar::bigflip, MCW_pbar::bigmode, MCW_pbar::bigrota, MCW_pbar::bigtop, AFNI_library_type::dc, ENTRY, AFNI_widget_set::func, GLOBAL_library, IM3D_OPEN, AFNI_function_widgets::inten_pbar, MCW_DCOV::label_ov, MCW_pbar::mode, MCW_pbar::num_panes, MCW_pbar::ov_index, MCW_DC::ovc, MCW_pbar::pval, and Three_D_View::vwid.

Referenced by AFNI_pbar_lock_carryout().

00383 {
00384    MCW_pbar *lbar , *rbar ;
00385    char cmd[1024] ;
00386    int cc , qq ;
00387    MCW_DCOV *ovc = GLOBAL_library.dc->ovc ;
00388 
00389 ENTRY("AFNI_equate_pbars") ;
00390 
00391    if( !IM3D_OPEN(lh3d) || !IM3D_OPEN(rh3d) ) EXRETURN ;
00392 
00393    lbar = lh3d->vwid->func->inten_pbar ;
00394    rbar = rh3d->vwid->func->inten_pbar ;
00395 
00396    cc = AFNI_controller_index(lh3d) ; if( cc < 0 ) EXRETURN ;
00397 
00398    if( !rbar->bigmode ){
00399      sprintf(cmd,"SET_PBAR_ALL %c.%c%d" , 'A'+cc ,
00400              (rbar->mode) ? '+' : '-' , rbar->num_panes ) ;
00401      for( qq=0 ; qq < rbar->num_panes ; qq++ )
00402        sprintf(cmd+strlen(cmd)," %s=%s",
00403                AV_uformat_fval(rbar->pval[qq]) ,
00404                ovc->label_ov[rbar->ov_index[qq]] ) ;
00405    } else {
00406      sprintf(cmd,"SET_PBAR_ALL %c.%c%d %f %s\n" , 'A'+cc ,
00407              (rbar->mode) ? '+' : '-' , 99 ,
00408              rbar->bigtop , PBAR_get_bigmap(rbar) ) ;
00409      if( rbar->bigflip )
00410        sprintf(cmd+strlen(cmd)," FLIP") ;
00411      if( rbar->bigrota )
00412        sprintf(cmd+strlen(cmd)," ROTA=%d",rbar->bigrota) ;
00413    }
00414 
00415    AFNI_driver( cmd ) ; EXRETURN ;
00416 }

void AFNI_faceup void   
 

Definition at line 647 of file afni_splash.c.

References AFNI_facedown(), AFNI_find_jpegs(), BEEPIT, AFNI_library_type::dc, drive_MCW_imseq(), ENTRY, face_phan, fim, fname_face, gcd(), generic_func, getenv(), GLOBAL_library, MCW_DC::height, isqDR_periodicmont, isqDR_record_disable, mri_dup2D(), mri_free(), mri_read_stuff(), mri_zeropad_2D(), NI_clock_time(), NI_sleep(), num_face, MRI_IMAGE::nx, NXY, MRI_IMAGE::ny, PLUTO_imseq_addto(), PLUTO_imseq_popim(), PLUTO_imseq_retitle(), PLUTO_imseq_setim(), and MCW_DC::width.

00648 {
00649    MRI_IMAGE *im , *fim ;
00650    int ii , nx,ny , nxdown,nxup , nydown,nyup ;
00651    int ctold,ctnew,mmss , ddss ;
00652    int jj , j0,dj=1 ;
00653 
00654 ENTRY("AFNI_faceup") ;
00655 
00656    if( num_face <  0 ){ BEEPIT; EXRETURN; }
00657    if( num_face == 0 ){
00658      num_face = AFNI_find_jpegs( "face_" , &fname_face ) ;
00659      if( num_face <= 0 ){ BEEPIT; EXRETURN; }
00660    }
00661    if( face_phan != NULL ){
00662      PLUGIN_imseq *ph = (PLUGIN_imseq *)face_phan ;
00663      XMapRaised( XtDisplay(ph->seq->wtop) , XtWindow(ph->seq->wtop) ) ;
00664      EXRETURN ;
00665    }
00666 
00667    ctold = NI_clock_time() ;
00668 
00669    ddss = num_face + 16449/num_face ; if( ddss > 222 ) ddss = 222 ;
00670 
00671    if( num_face > 4 ){
00672      ii = num_face / 2 ;
00673      do{ dj = 1 + lrand48() % ii ; } while( gcd(num_face,dj) > 1 ) ;
00674    }
00675    j0 = lrand48() % num_face ;
00676 
00677    for( ii=0 ; ii < num_face ; ii++ ){
00678      jj = (j0 + ii*dj) % num_face ;
00679      im = mri_read_stuff( fname_face[jj] ) ;
00680      if( im == NULL ) continue ;
00681      nx = im->nx ; ny = im->ny ;
00682 
00683      nxdown = (NXY-nx) / 2 ; nxup = NXY - nx - nxdown ;
00684      nydown = (NXY-ny) / 2 ; nyup = NXY - ny - nydown ;
00685      if( nxdown != 0 || nydown != 0 || nxup != 0 || nyup != 0 ){
00686        fim = mri_zeropad_2D( nxdown,nxup , nydown,nyup , im ) ;
00687        if( fim != NULL ){ mri_free(im) ; im = fim ; }
00688      }
00689      fim = mri_dup2D(2,im) ; mri_free(im) ;  /* double size for fun */
00690      if( face_phan == NULL ){
00691        int sxx,syy ; char *sen ; PLUGIN_imseq *ph ;
00692 
00693        face_phan = PLUTO_imseq_popim( fim,(generic_func *)AFNI_facedown,NULL );
00694        sxx = (GLOBAL_library.dc->width-4*NXY)/2 ; if( sxx < 1 ) sxx = 1 ;
00695        syy = 100 ;
00696        sen = getenv("AFNI_SPLASH_XY") ;
00697        if( sen != NULL ){
00698          int n,x,y ;
00699          n = sscanf(sen,"%d:%d",&x,&y) ;
00700          if( n == 2 && x >= 0 && x < GLOBAL_library.dc->width &&
00701                        y >= 0 && y < GLOBAL_library.dc->height  ){
00702             sxx = x ; syy = y ;
00703          }
00704        }
00705        ph = (PLUGIN_imseq *)face_phan ;
00706        XtVaSetValues( ph->seq->wtop , XmNx,sxx , XmNy,syy , NULL ) ;
00707        drive_MCW_imseq( ph->seq , isqDR_record_disable , (XtPointer)0 ) ;
00708        drive_MCW_imseq( ph->seq , isqDR_periodicmont   , (XtPointer)1 ) ;
00709 
00710      } else {
00711        PLUTO_imseq_addto( face_phan , fim ) ;
00712      }
00713      mri_free(fim) ;
00714 
00715      ctnew = NI_clock_time() ;      /* show 1 image every ddss ms [27 Dec 2004] */
00716      mmss  = ddss - (ctnew-ctold) ;
00717      ctold = ctnew ; ddss-- ;
00718      NI_sleep(mmss) ;
00719    }
00720    if( face_phan != NULL ){
00721      PLUTO_imseq_retitle( face_phan , "Faces of AFNI" ) ;
00722      PLUTO_imseq_setim( face_phan , 0 ) ;
00723    } else {
00724      BEEPIT ;
00725    }
00726 
00727    EXRETURN ;
00728 }

THD_3dim_dataset* AFNI_fimmer_compute Three_D_View   im3d,
THD_3dim_dataset   dset_time,
MRI_IMAGE   ref_ts,
MRI_IMAGE   ort_ts,
THD_session   sess,
int    code,
int    ucode
 

01 Feb 2000: added ucode, for user written functions *

Definition at line 268 of file afni_fimmer.c.

References abs, ADN_brick_fac, ADN_datum_all, ADN_func_type, ADN_malloc_type, ADN_none, ADN_ntt, ADN_nvals, ADN_prefix, ADN_stat_aux, ADN_type, AFNI_3DDATA_VIEW, AFNI_CALL_fim_function, AFNI_GOOD_FUNC_DTYPE, calloc, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::dblk, DESTROY_IMARR, THD_diskptr::dimsizes, THD_datablock::diskptr, THD_slist_find::dset, DSET_ARRAY, DSET_BRICK, DSET_BRICK_BYTES, DSET_BRICK_TYPE, DSET_GRAPHABLE, DSET_NUM_TIMES, DSET_NVALS, DSET_PREFIX, EDIT_add_brick(), EDIT_BRICK_FACTOR, EDIT_BRICK_LABEL, EDIT_BRICK_TO_FICO, EDIT_clip_float(), EDIT_dset_items(), EDIT_empty_copy(), ENTRY, fd, FIM_ALPHA_MASK, FIM_AVER_MASK, FIM_BASE_MASK, FIM_BEST_MASK, FIM_CORR_MASK, FIM_PAVE_MASK, FIM_PERC_MASK, FIM_PTOP_MASK, FIM_SIGM_MASK, FIM_THR, FIM_TOPL_MASK, Three_D_View::fimdata, FIND_PREFIX, MCW_function_list::flags, free, free_PCOR_references(), free_PCOR_voxel_corr(), FUNC_BUCK_TYPE, FUNC_COR_SCALE_SHORT, MCW_function_list::func_data, FUNC_FIM_TYPE, THD_3dim_dataset::func_type, MCW_function_list::funcs, GEN_FUNC_TYPE, generic_func, GLOBAL_library, HEAD_FUNC_TYPE, FIMdata::ignore, IM3D_OPEN, IMARR_SUBIMAGE, AFNI_fimmer_type::init_ignore, ISHEAD, ISVALID_SESSION, MRI_IMAGE::kind, malloc, MAX, MAX_STAT_AUX, MCW_popdown_meter(), MCW_popup_meter(), MCW_set_meter(), MCW_strncpy, METER_TOP_WIDE, MIN, mri_fix_data_pointer(), MRI_FLOAT_PTR, my_getenv(), new_PCOR_references(), new_PCOR_voxel_corr(), MCW_function_list::num, THD_datablock::nvals, FIMdata::nvox, MRI_IMAGE::nx, MRI_IMAGE::ny, FIMdata::ort_ts, PCOR_get_coef(), PCOR_get_pcor(), PCOR_get_perc(), PCOR_get_stdev(), PCOR_update_float(), AFNI_fimmer_type::polort, FIMdata::polort, FIMdata::ref_ts, AFNI_library_type::registered_fim, RETURN, STATUS, strtod(), THD_count_databricks(), THD_delete_3dim_dataset(), THD_dset_in_session(), THD_extract_many_series(), THD_load_datablock(), THD_MAX_PREFIX, AFNI_widget_set::top_shell, Three_D_View::type, update_PCOR_references(), Three_D_View::vwid, and XtRealloc.

Referenced by AFNI_fimmer_execute().

00272 {
00273    THD_3dim_dataset * new_dset=NULL ;
00274    char new_prefix[THD_MAX_PREFIX] ;
00275    char old_prefix[THD_MAX_PREFIX] ;
00276    THD_slist_find fff ;
00277    int ifim , it,iv , nvox , ngood_ref , ntime , it1 , dtyp , nxyz , itbot ;
00278    float * vval, * tsar, * aval, * rbest, * abest, * pbest, * pval, * bbest, * bval;
00279    int   * indx ;
00280    short * bar ;
00281    short * ibest ;  /* 15 Dec 1997 */
00282    void  * ptr ;
00283    float stataux[MAX_STAT_AUX] ;
00284    float fthr , topval ;
00285    int nx_ref , ny_ref , ivec , nnow ;
00286    PCOR_references ** pc_ref ;
00287    PCOR_voxel_corr ** pc_vc ;
00288 
00289    int fim_nref , nx_ort , ny_ort , internal_ort ;
00290    float * ortar ;
00291    static float * ref_vec = NULL ;
00292    static int    nref_vec = -666 ;
00293 
00294    int ibr_best , ibr_perc , ibr_fim , ibr_corr , ibr_base , nbrik ;
00295 
00296    int polort = im3d->fimdata->polort , ip ;  /* 30 May 1999 */
00297 
00298    float top_perc = 0.0 ;                     /* 30 Aug 1999 */
00299 
00300    int ibr_pave , ibr_aver ;                        /* 08 Sep 1999 */
00301    float * paval , * avval , * pabest , * avbest ;  /* 08 Sep 1999 */
00302 
00303    int ibr_ptop , ibr_topl , ibr_sigm ;             /* 03 Jan 2000 */
00304    float * ptval , * tlval , *sgval ,
00305          * ptbest, * tlbest, *sgbest ;
00306 
00307 #ifndef DONT_USE_METER
00308    Widget meter = NULL ;
00309    int meter_perc , meter_pold ;
00310 #endif
00311 
00312    int nupdt      = 0 ,  /* number of updates done yet */
00313        min_updt   = 5 ,  /* min number needed for display */
00314        first_updt = 1 ;  /* flag to indicate that first update is yet to be displayed */
00315 
00316 ENTRY("AFNI_fimmer_compute") ;
00317 
00318    /*--- check for legal inputs ---*/
00319 
00320    if( ! DSET_GRAPHABLE(dset_time)    ||
00321        ref_ts == NULL                 ||
00322        ref_ts->kind != MRI_float      ||
00323        ! IM3D_OPEN(im3d)              ||
00324        im3d->type != AFNI_3DDATA_VIEW ||
00325        (code == 0 && ucode == 0)      ||           /* Jan 1998 & Feb 2000 */
00326        ref_ts->nx < DSET_NUM_TIMES(dset_time) ){
00327 
00328 if(PRINT_TRACING)
00329 { char str[256] ;
00330   sprintf(str,"illegal inputs: ntime=%d num_ts=%d",
00331           DSET_NUM_TIMES(dset_time), (ref_ts==NULL) ? (0) : (ref_ts->nx) ) ;
00332   STATUS(str) ; }
00333 
00334       RETURN(NULL) ;
00335    }
00336 
00337    /** 13 Nov 1996: allow for orts **/
00338 
00339    if( ort_ts != NULL ){
00340       nx_ort = ort_ts->nx ;
00341       ny_ort = ort_ts->ny ;
00342       ortar  = MRI_FLOAT_PTR(ort_ts) ;
00343 
00344       internal_ort = (nx_ort < DSET_NUM_TIMES(dset_time)) ;
00345    } else {
00346       internal_ort = 1 ;
00347    }
00348    fim_nref = (internal_ort) ? (polort+2) : (ny_ort+polort+2) ;
00349 
00350    if( nref_vec < fim_nref ){
00351        ref_vec = (float *) XtRealloc( (char *)ref_vec, sizeof(float)*fim_nref ) ;
00352       nref_vec = fim_nref ;
00353    }
00354 
00355    itbot     = im3d->fimdata->init_ignore ;
00356    nx_ref    = ref_ts->nx ;
00357    ny_ref    = ref_ts->ny ;
00358    ntime     = DSET_NUM_TIMES(dset_time) ;
00359    ngood_ref = 0 ;
00360    it1       = -1 ;
00361    for( ivec=0 ; ivec < ny_ref ; ivec++ ){
00362       tsar = MRI_FLOAT_PTR(ref_ts) + (ivec*nx_ref) ;
00363       ifim = 0 ;
00364       for( it=itbot ; it < ntime ; it++ ){
00365          if( tsar[it] < WAY_BIG ){ ifim++ ; if( it1 < 0 ) it1 = it ; }
00366       }
00367 
00368       if( ifim < min_updt ){
00369          STATUS("ref_ts has too few good entries!") ;
00370          RETURN(NULL) ;
00371       }
00372 
00373       ngood_ref = MAX( ifim , ngood_ref ) ;
00374    }
00375 
00376    /** at this point, ngood_ref = max number of good reference points,
00377        and                  it1 = index of first point used in first reference **/
00378 
00379    dtyp = DSET_BRICK_TYPE(dset_time,it1) ;
00380    if( ! AFNI_GOOD_FUNC_DTYPE(dtyp) ){
00381       STATUS("illegal input data type!") ;
00382       RETURN(NULL) ;
00383    }
00384 
00385    /*--- Create a new prefix ---*/
00386 
00387    MCW_strncpy( old_prefix , DSET_PREFIX(dset_time) , THD_MAX_PREFIX-3 ) ;
00388 
00389    if( ! ISVALID_SESSION(sess) ){
00390       sprintf( new_prefix , "%s@%d" , old_prefix , 1 ) ;
00391    } else {
00392       for( ifim=1 ; ifim < 99 ; ifim++ ){
00393          sprintf( new_prefix , "%s@%d" , old_prefix , ifim ) ;
00394          fff = THD_dset_in_session( FIND_PREFIX , new_prefix , sess ) ;
00395          if( fff.dset == NULL ) break ;
00396       }
00397       if( ifim == 99 ){
00398          STATUS("can't create new prefix!") ;
00399          RETURN(NULL) ;  /* can't make a new prefix! */
00400       }
00401    }
00402 
00403 if(PRINT_TRACING)
00404 { char str[256] ;
00405   sprintf(str,"new prefix = %s",new_prefix) ; STATUS(str) ; }
00406 
00407    /*--- FIM: find values above threshold to fim ---*/
00408 
00409    THD_load_datablock( dset_time->dblk ) ;
00410 
00411    nxyz =  dset_time->dblk->diskptr->dimsizes[0]
00412          * dset_time->dblk->diskptr->dimsizes[1]
00413          * dset_time->dblk->diskptr->dimsizes[2] ;
00414 
00415    /** find the mean of the first array,
00416        compute the threshold (fthr) from it,
00417        make indx[i] be the 3D index of the i-th voxel above threshold **/
00418 
00419    switch( dtyp ){
00420 
00421       case MRI_short:{
00422          short * dar = (short *) DSET_ARRAY(dset_time,it1) ;
00423          for( iv=0,fthr=0.0 ; iv < nxyz ; iv++ ) fthr += abs(dar[iv]) ;
00424          fthr = FIM_THR * fthr / nxyz ;
00425 
00426 if(PRINT_TRACING)
00427 { char str[256] ; sprintf(str,"fthr = %g",fthr) ; STATUS(str) ; }
00428 
00429          for( iv=0,nvox=0 ; iv < nxyz ; iv++ )
00430             if( abs(dar[iv]) > fthr ) nvox++ ;
00431          indx = (int *) malloc( sizeof(int) * nvox ) ;
00432          if( indx == NULL ){
00433             fprintf(stderr,"\n*** indx malloc failure in AFNI_fimmer_compute\n") ;
00434             RETURN(NULL) ;
00435          }
00436          for( iv=0,nvox=0 ; iv < nxyz ; iv++ )
00437             if( abs(dar[iv]) > fthr ) indx[nvox++] = iv ;
00438       }
00439       break ;
00440 
00441       case MRI_float:{
00442          float * dar = (float *) DSET_ARRAY(dset_time,it1) ;
00443          for( iv=0,fthr=0.0 ; iv < nxyz ; iv++ ) fthr += fabs(dar[iv]) ;
00444          fthr = FIM_THR * fthr / nxyz ;
00445 
00446 if(PRINT_TRACING)
00447 { char str[256] ; sprintf(str,"fthr = %g",fthr) ; STATUS(str) ; }
00448 
00449          for( iv=0,nvox=0 ; iv < nxyz ; iv++ )
00450             if( fabs(dar[iv]) > fthr ) nvox++ ;
00451          indx = (int *) malloc( sizeof(int) * nvox ) ;
00452          if( indx == NULL ){
00453             fprintf(stderr,"\n*** indx malloc failure in AFNI_fimmer_compute\n") ;
00454             RETURN(NULL) ;
00455          }
00456          for( iv=0,nvox=0 ; iv < nxyz ; iv++ )
00457             if( fabs(dar[iv]) > fthr ) indx[nvox++] = iv ;
00458       }
00459       break ;
00460 
00461       case MRI_byte:{
00462          byte * dar = (byte *) DSET_ARRAY(dset_time,it1) ;
00463          for( iv=0,fthr=0.0 ; iv < nxyz ; iv++ ) fthr += dar[iv] ;
00464          fthr = FIM_THR * fthr / nxyz ;
00465 
00466 if(PRINT_TRACING)
00467 { char str[256] ; sprintf(str,"fthr = %g",fthr) ; STATUS(str) ; }
00468 
00469          for( iv=0,nvox=0 ; iv < nxyz ; iv++ )
00470             if( dar[iv] > fthr ) nvox++ ;
00471          indx = (int *) malloc( sizeof(int) * nvox ) ;
00472          if( indx == NULL ){
00473             fprintf(stderr,"\n*** indx malloc failure in AFNI_fimmer_compute\n") ;
00474             RETURN(NULL) ;
00475          }
00476          for( iv=0,nvox=0 ; iv < nxyz ; iv++ )
00477             if( dar[iv] > fthr ) indx[nvox++] = iv ;
00478       }
00479       break ;
00480    }
00481 
00482 if(PRINT_TRACING)
00483 { char str[256] ; sprintf(str,"number of voxels = %d",nvox) ; STATUS(str) ; }
00484 
00485    /** 10 May 2000: check if nothing was found to work on **/
00486 
00487    if( nvox == 0 ){
00488       fprintf(stderr,"\n*** no voxels to FIM on!"
00489                      "\n*** try setting the Bkg Thresh lower"
00490                      "\n    [on the FIM -> Edit Ideal menu]\a\n") ;
00491       free(indx) ; RETURN(NULL) ;
00492    }
00493 
00494    /** allocate space for voxel values **/
00495 
00496    vval = (float *) malloc( sizeof(float) * nvox) ;
00497    if( vval == NULL ){
00498       fprintf(stderr,"\n*** vval malloc failure in AFNI_fimmer_compute\n") ;
00499       free(indx) ; RETURN(NULL) ;
00500    }
00501 
00502    /** compute number of output bricks **/
00503 
00504    ibr_fim=ibr_corr=ibr_best=ibr_perc=ibr_base = -1 ; nbrik = 0 ;
00505    ibr_pave = ibr_aver = -1 ;
00506    ibr_ptop = ibr_topl = ibr_sigm = -1 ;
00507 
00508    if( (code & FIM_ALPHA_MASK)!= 0)              { ibr_fim  = nbrik; nbrik++; }
00509    if( (code & FIM_BEST_MASK) != 0 && ny_ref > 1){ ibr_best = nbrik; nbrik++; }
00510    if( (code & FIM_PERC_MASK) != 0)              { ibr_perc = nbrik; nbrik++; }
00511    if( (code & FIM_PAVE_MASK) != 0)              { ibr_pave = nbrik; nbrik++; }
00512    if( (code & FIM_BASE_MASK) != 0)              { ibr_base = nbrik; nbrik++; }
00513    if( (code & FIM_AVER_MASK) != 0)              { ibr_aver = nbrik; nbrik++; }
00514    if( (code & FIM_CORR_MASK) != 0)              { ibr_corr = nbrik; nbrik++; }
00515    if( (code & FIM_PTOP_MASK) != 0)              { ibr_ptop = nbrik; nbrik++; }
00516    if( (code & FIM_TOPL_MASK) != 0)              { ibr_topl = nbrik; nbrik++; }
00517    if( (code & FIM_SIGM_MASK) != 0)              { ibr_sigm = nbrik; nbrik++; }
00518 
00519    /** 01 Feb 2000: if no normal FIM stuff (code), skip to the ucode stuff **/
00520 
00521 if(PRINT_TRACING)
00522 { char str[256] ; sprintf(str,"number of bricks = %d",nbrik) ; STATUS(str) ; }
00523 
00524    if( nbrik == 0 ){
00525 
00526 #ifndef DONT_USE_METER
00527    meter = MCW_popup_meter( im3d->vwid->top_shell , METER_TOP_WIDE ) ;
00528    meter_pold = 0 ;
00529 #endif
00530 
00531       goto ucode_stuff ;  /* way below */
00532    }
00533 
00534    /** normal case: do the normal recursive FIMming **/
00535 
00536 if(PRINT_TRACING)
00537 { char str[256] ;
00538   sprintf(str,"code of FIM_MASKs = %d",code) ; STATUS(str) ; }
00539 
00540    /** allocate extra space for comparing results from multiple ref vectors **/
00541 
00542    if( ny_ref > 1 ){
00543       aval  = (float *) malloc(sizeof(float) * nvox) ;
00544       rbest = (float *) malloc(sizeof(float) * nvox) ;
00545       abest = (float *) malloc(sizeof(float) * nvox) ;
00546       ibest = (short *) malloc(sizeof(short) * nvox) ;  /* 15 Dec 1997 */
00547       pbest = (float *) malloc(sizeof(float) * nvox) ;  /* 16 Jan 1998 */
00548       bbest = (float *) malloc(sizeof(float) * nvox) ;  /* 16 Jan 1998 */
00549       pval  = (float *) malloc(sizeof(float) * nvox) ;  /* 16 Jan 1998 */
00550       bval  = (float *) malloc(sizeof(float) * nvox) ;  /* 16 Jan 1998 */
00551 
00552       paval  = (float *) malloc(sizeof(float) * nvox) ; /* 08 Sep 1999 */
00553       avval  = (float *) malloc(sizeof(float) * nvox) ; /* 08 Sep 1999 */
00554       pabest = (float *) malloc(sizeof(float) * nvox) ; /* 16 Jan 1998 */
00555       avbest = (float *) malloc(sizeof(float) * nvox) ; /* 16 Jan 1998 */
00556 
00557       ptval  = (float *) malloc(sizeof(float) * nvox) ; /* 03 Jan 2000 */
00558       tlval  = (float *) malloc(sizeof(float) * nvox) ; /* 03 Jan 2000 */
00559       sgval  = (float *) malloc(sizeof(float) * nvox) ; /* 03 Jan 2000 */
00560       ptbest = (float *) malloc(sizeof(float) * nvox) ; /* 03 Jan 2000 */
00561       tlbest = (float *) malloc(sizeof(float) * nvox) ; /* 03 Jan 2000 */
00562       sgbest = (float *) malloc(sizeof(float) * nvox) ; /* 03 Jan 2000 */
00563 
00564       if( sgbest == NULL ){
00565          fprintf(stderr,"\n*** 'best' malloc failure in AFNI_fimmer_compute\n") ;
00566          free(vval) ; free(indx) ;
00567          if( aval  != NULL ) free(aval)  ;
00568          if( rbest != NULL ) free(rbest) ;
00569          if( abest != NULL ) free(abest) ;
00570          if( ibest != NULL ) free(ibest) ;  /* 15 Dec 1997 */
00571          if( pbest != NULL ) free(pbest) ;  /* 16 Jan 1998 */
00572          if( bbest != NULL ) free(bbest) ;  /* 16 Jan 1998 */
00573          if( pval  != NULL ) free(pval)  ;  /* 16 Jan 1998 */
00574          if( bval  != NULL ) free(bval)  ;  /* 16 Jan 1998 */
00575          if( paval != NULL ) free(paval) ;  /* 08 Sep 1999 */
00576          if( avval != NULL ) free(avval) ;  /* 08 Sep 1999 */
00577          if( pabest!= NULL ) free(pabest);  /* 08 Sep 1999 */
00578          if( avbest!= NULL ) free(avbest);  /* 08 Sep 1999 */
00579          if( ptval != NULL ) free(ptval) ;  /* 03 Jan 2000 */
00580          if( tlval != NULL ) free(tlval) ;  /* 03 Jan 2000 */
00581          if( sgval != NULL ) free(sgval) ;  /* 03 Jan 2000 */
00582          if( ptbest!= NULL ) free(ptbest);  /* 03 Jan 2000 */
00583          if( tlbest!= NULL ) free(tlbest);  /* 03 Jan 2000 */
00584          if( sgbest!= NULL ) free(sgbest);  /* 03 Jan 2000 */
00585          RETURN(NULL) ;
00586       }
00587    } else {
00588       aval = rbest = abest = pbest = bbest = pval = bval = NULL ;
00589       paval = avval = pabest = avbest = NULL ;  /* 08 Sep 1999 */
00590       ptval = tlval = ptbest = tlbest = NULL ;  /* 03 Jan 2000 */
00591       sgval = sgbest = NULL ;                   /* 03 Jan 2000 */
00592       ibest = NULL ;                            /* 15 Dec 1997 */
00593    }
00594 
00595 if(PRINT_TRACING)
00596 { char str[256] ;
00597   sprintf(str,"nxyz = %d  nvox = %d",nxyz,nvox) ; STATUS(str) ; }
00598 
00599    /*--- FIM: initialize recursive updates ---*/
00600 
00601    pc_ref = (PCOR_references **) malloc( sizeof(PCOR_references *) * ny_ref ) ;
00602    pc_vc  = (PCOR_voxel_corr **) malloc( sizeof(PCOR_voxel_corr *) * ny_ref ) ;
00603 
00604    if( pc_ref == NULL || pc_vc == NULL ){
00605       free(vval) ; free(indx) ; free(pc_ref) ; free(pc_vc) ;
00606       if( aval  != NULL ) free(aval) ;
00607       if( rbest != NULL ) free(rbest) ;
00608       if( abest != NULL ) free(abest) ;
00609       if( ibest != NULL ) free(ibest) ;  /* 15 Dec 1997 */
00610       if( pbest != NULL ) free(pbest) ;  /* 16 Jan 1998 */
00611       if( bbest != NULL ) free(bbest) ;  /* 16 Jan 1998 */
00612       if( pval  != NULL ) free(pval)  ;  /* 16 Jan 1998 */
00613       if( bval  != NULL ) free(bval)  ;  /* 16 Jan 1998 */
00614       if( paval != NULL ) free(paval) ;  /* 08 Sep 1999 */
00615       if( avval != NULL ) free(avval) ;  /* 08 Sep 1999 */
00616       if( pabest!= NULL ) free(pabest);  /* 08 Sep 1999 */
00617       if( avbest!= NULL ) free(avbest);  /* 08 Sep 1999 */
00618       if( ptval != NULL ) free(ptval) ;  /* 03 Jan 2000 */
00619       if( tlval != NULL ) free(tlval) ;  /* 03 Jan 2000 */
00620       if( sgval != NULL ) free(sgval) ;  /* 03 Jan 2000 */
00621       if( ptbest!= NULL ) free(ptbest);  /* 03 Jan 2000 */
00622       if( tlbest!= NULL ) free(tlbest);  /* 03 Jan 2000 */
00623       if( sgbest!= NULL ) free(sgbest);  /* 03 Jan 2000 */
00624       fprintf(stderr,"\n*** FIM initialization fails in AFNI_fimmer_compute\n") ;
00625       RETURN(NULL) ;
00626    }
00627 
00628    ifim = 0 ;
00629    for( ivec=0 ; ivec < ny_ref ; ivec++ ){
00630       pc_ref[ivec] = new_PCOR_references( fim_nref ) ;
00631       pc_vc[ivec]  = new_PCOR_voxel_corr( nvox , fim_nref ) ;
00632       if( pc_ref[ivec] == NULL || pc_vc[ivec] == NULL ) ifim++ ;
00633    }
00634 
00635    if( ifim > 0 ){
00636       for( ivec=0 ; ivec < ny_ref ; ivec++ ){
00637          free_PCOR_references(pc_ref[ivec]) ;
00638          free_PCOR_voxel_corr(pc_vc[ivec]) ;
00639       }
00640       free(vval) ; free(indx) ; free(pc_ref) ; free(pc_vc) ;
00641       if( aval  != NULL ) free(aval) ;
00642       if( rbest != NULL ) free(rbest) ;
00643       if( abest != NULL ) free(abest) ;
00644       if( ibest != NULL ) free(ibest) ;  /* 15 Dec 1997 */
00645       if( pbest != NULL ) free(pbest) ;  /* 16 Jan 1998 */
00646       if( bbest != NULL ) free(bbest) ;  /* 16 Jan 1998 */
00647       if( pval  != NULL ) free(pval)  ;  /* 16 Jan 1998 */
00648       if( bval  != NULL ) free(bval)  ;  /* 16 Jan 1998 */
00649       if( paval != NULL ) free(paval) ;  /* 08 Sep 1999 */
00650       if( avval != NULL ) free(avval) ;  /* 08 Sep 1999 */
00651       if( pabest!= NULL ) free(pabest);  /* 08 Sep 1999 */
00652       if( avbest!= NULL ) free(avbest);  /* 08 Sep 1999 */
00653       if( ptval != NULL ) free(ptval) ;  /* 03 Jan 2000 */
00654       if( tlval != NULL ) free(tlval) ;  /* 03 Jan 2000 */
00655       if( sgval != NULL ) free(sgval) ;  /* 03 Jan 2000 */
00656       if( ptbest!= NULL ) free(ptbest);  /* 03 Jan 2000 */
00657       if( tlbest!= NULL ) free(tlbest);  /* 03 Jan 2000 */
00658       if( sgbest!= NULL ) free(sgbest);  /* 03 Jan 2000 */
00659       fprintf(stderr,"\n*** FIM initialization fails in AFNI_fimmer_compute\n") ;
00660       RETURN(NULL) ;
00661    }
00662 
00663    /*--- Make a new dataset to hold the output ---*/
00664 
00665 STATUS("making new dataset") ;
00666 
00667    new_dset = EDIT_empty_copy( dset_time ) ;
00668 
00669    if( nbrik == 1 && ucode == 0 ){           /* 1 brick out --> a 'fim' dataset */
00670       it = EDIT_dset_items( new_dset ,
00671                                ADN_prefix      , new_prefix ,
00672                                ADN_malloc_type , DATABLOCK_MEM_MALLOC ,
00673                                ADN_type        , ISHEAD(dset_time)
00674                                                  ? HEAD_FUNC_TYPE : GEN_FUNC_TYPE ,
00675                                ADN_func_type   , FUNC_FIM_TYPE ,
00676                                ADN_nvals       , 1 ,
00677                                ADN_datum_all   , MRI_short ,
00678                                ADN_ntt         , 0 ,
00679                             ADN_none ) ;
00680                                              /* 2 bricks, 2nd corr --> 'fico' */
00681    } else if( nbrik == 2 && ibr_corr == 1 && ucode == 0 ){
00682       it = EDIT_dset_items( new_dset ,
00683                                ADN_prefix      , new_prefix ,
00684                                ADN_malloc_type , DATABLOCK_MEM_MALLOC ,
00685                                ADN_type        , ISHEAD(dset_time)
00686                                                  ? HEAD_FUNC_TYPE : GEN_FUNC_TYPE ,
00687                                ADN_func_type   , FUNC_COR_TYPE ,
00688                                ADN_nvals       , 2 ,
00689                                ADN_datum_all   , MRI_short ,
00690                                ADN_ntt         , 0 ,
00691                             ADN_none ) ;
00692 
00693    } else if( nbrik > 0 ){                   /* otherwise --> 'fbuc' (bucket) */
00694       it = EDIT_dset_items( new_dset ,
00695                                ADN_prefix      , new_prefix ,
00696                                ADN_malloc_type , DATABLOCK_MEM_MALLOC ,
00697                                ADN_type        , ISHEAD(dset_time)
00698                                                  ? HEAD_FUNC_TYPE : GEN_FUNC_TYPE ,
00699                                ADN_func_type   , FUNC_BUCK_TYPE ,
00700                                ADN_nvals       , nbrik ,
00701                                ADN_datum_all   , MRI_short ,
00702                                ADN_ntt         , 0 ,
00703                             ADN_none ) ;
00704    } else {
00705       it = 999 ;
00706    }
00707 
00708    if( it > 0 ){
00709       fprintf(stderr,
00710               "\n*** EDIT_dset_items error %d in AFNI_fimmer_compute\n",it) ;
00711       THD_delete_3dim_dataset( new_dset , False ) ;
00712       for( ivec=0 ; ivec < ny_ref ; ivec++ ){
00713          free_PCOR_references(pc_ref[ivec]) ;
00714          free_PCOR_voxel_corr(pc_vc[ivec]) ;
00715       }
00716       free(vval) ; free(indx) ; free(pc_ref) ; free(pc_vc) ;
00717       if( aval  != NULL ) free(aval) ;
00718       if( rbest != NULL ) free(rbest) ;
00719       if( abest != NULL ) free(abest) ;
00720       if( ibest != NULL ) free(ibest) ;  /* 15 Dec 1997 */
00721       if( pbest != NULL ) free(pbest) ;  /* 16 Jan 1998 */
00722       if( bbest != NULL ) free(bbest) ;  /* 16 Jan 1998 */
00723       if( pval  != NULL ) free(pval)  ;  /* 16 Jan 1998 */
00724       if( bval  != NULL ) free(bval)  ;  /* 16 Jan 1998 */
00725       if( paval != NULL ) free(paval) ;  /* 08 Sep 1999 */
00726       if( avval != NULL ) free(avval) ;  /* 08 Sep 1999 */
00727       if( pabest!= NULL ) free(pabest);  /* 08 Sep 1999 */
00728       if( avbest!= NULL ) free(avbest);  /* 08 Sep 1999 */
00729       if( ptval != NULL ) free(ptval) ;  /* 03 Jan 2000 */
00730       if( tlval != NULL ) free(tlval) ;  /* 03 Jan 2000 */
00731       if( sgval != NULL ) free(sgval) ;  /* 03 Jan 2000 */
00732       if( ptbest!= NULL ) free(ptbest);  /* 03 Jan 2000 */
00733       if( tlbest!= NULL ) free(tlbest);  /* 03 Jan 2000 */
00734       if( sgbest!= NULL ) free(sgbest);  /* 03 Jan 2000 */
00735       RETURN(NULL) ;
00736    }
00737 
00738    /* modify labels for each brick */
00739 
00740    if( ibr_fim >= 0 )
00741       EDIT_BRICK_LABEL( new_dset , ibr_fim  , "Fit Coef" ) ;
00742    if( ibr_corr >= 0 )
00743       EDIT_BRICK_LABEL( new_dset , ibr_corr , "Correlation" ) ;
00744    if( ibr_best >= 0 )
00745       EDIT_BRICK_LABEL( new_dset , ibr_best , "Best Index" ) ;
00746    if( ibr_perc >= 0 )
00747       EDIT_BRICK_LABEL( new_dset , ibr_perc , "% Change" ) ;
00748    if( ibr_base >= 0 )
00749       EDIT_BRICK_LABEL( new_dset , ibr_base , "Baseline" ) ;
00750 
00751    if( ibr_pave >= 0 )
00752       EDIT_BRICK_LABEL( new_dset , ibr_pave , "% From Ave" ) ;  /* 08 Sep 1999 */
00753    if( ibr_aver >= 0 )
00754       EDIT_BRICK_LABEL( new_dset , ibr_aver , "Average" ) ;
00755 
00756    if( ibr_ptop >= 0 )
00757       EDIT_BRICK_LABEL( new_dset , ibr_ptop , "% From Top" ) ;  /* 03 Jan 2000 */
00758    if( ibr_topl >= 0 )
00759       EDIT_BRICK_LABEL( new_dset , ibr_topl , "Topline" ) ;
00760    if( ibr_sigm >= 0 )
00761       EDIT_BRICK_LABEL( new_dset , ibr_sigm , "Sigma Resid" ) ;
00762 
00763    /*-- 30 Aug 1999: set limits on percent change --*/
00764 
00765    if( ibr_perc >= 0 || ibr_pave >= 0 || ibr_ptop >= 0 ){
00766       char * cp = my_getenv("AFNI_FIM_PERCENT_LIMIT") ;
00767       if( cp != NULL ){
00768          float tp = strtod(cp,NULL) ;
00769          if( tp > 0.0 ) top_perc = tp ;
00770       }
00771    }
00772 
00773    /* create bricks */
00774 
00775 STATUS("making output bricks") ;
00776 
00777    for( iv=0 ; iv < new_dset->dblk->nvals ; iv++ ){
00778       ptr = malloc( DSET_BRICK_BYTES(new_dset,iv) ) ;
00779       mri_fix_data_pointer( ptr ,  DSET_BRICK(new_dset,iv) ) ;
00780    }
00781 
00782    if( THD_count_databricks(new_dset->dblk) < new_dset->dblk->nvals ){
00783       fprintf(stderr,
00784               "\n*** failure to malloc new bricks in AFNI_fimmer_compute\n") ;
00785       THD_delete_3dim_dataset( new_dset , False ) ;
00786       for( ivec=0 ; ivec < ny_ref ; ivec++ ){
00787          free_PCOR_references(pc_ref[ivec]) ;
00788          free_PCOR_voxel_corr(pc_vc[ivec]) ;
00789       }
00790       free(vval) ; free(indx) ; free(pc_ref) ; free(pc_vc) ;
00791       if( aval  != NULL ) free(aval) ;
00792       if( rbest != NULL ) free(rbest) ;
00793       if( abest != NULL ) free(abest) ;
00794       if( ibest != NULL ) free(ibest) ;  /* 15 Dec 1997 */
00795       if( pbest != NULL ) free(pbest) ;  /* 16 Jan 1998 */
00796       if( bbest != NULL ) free(bbest) ;  /* 16 Jan 1998 */
00797       if( pval  != NULL ) free(pval)  ;  /* 16 Jan 1998 */
00798       if( bval  != NULL ) free(bval)  ;  /* 16 Jan 1998 */
00799       if( paval != NULL ) free(paval) ;  /* 08 Sep 1999 */
00800       if( avval != NULL ) free(avval) ;  /* 08 Sep 1999 */
00801       if( pabest!= NULL ) free(pabest);  /* 08 Sep 1999 */
00802       if( avbest!= NULL ) free(avbest);  /* 08 Sep 1999 */
00803       if( ptval != NULL ) free(ptval) ;  /* 03 Jan 2000 */
00804       if( tlval != NULL ) free(tlval) ;  /* 03 Jan 2000 */
00805       if( sgval != NULL ) free(sgval) ;  /* 03 Jan 2000 */
00806       if( ptbest!= NULL ) free(ptbest);  /* 03 Jan 2000 */
00807       if( tlbest!= NULL ) free(tlbest);  /* 03 Jan 2000 */
00808       if( sgbest!= NULL ) free(sgbest);  /* 03 Jan 2000 */
00809       RETURN(NULL) ;
00810    }
00811 
00812    /*---------------------------------*/
00813    /*--- FIM: do recursive updates ---*/
00814 
00815 #ifndef DONT_USE_METER
00816    meter = MCW_popup_meter( im3d->vwid->top_shell , METER_TOP_WIDE ) ;
00817    meter_pold = 0 ;
00818 #endif
00819 
00820 STATUS("starting recursive least squares") ;
00821 
00822    for( it=itbot ; it < ntime ; it++ ){  /* loop over time */
00823 
00824       nnow = 0 ;  /* number of updates done at this time point */
00825 
00826       for( ivec=0 ; ivec < ny_ref ; ivec++ ){  /* loop over ref vects */
00827 
00828          tsar = MRI_FLOAT_PTR(ref_ts) + (ivec*nx_ref) ; /* ptr to vect */
00829          if( tsar[it] >= WAY_BIG ) continue ;           /* skip this */
00830 
00831          ref_vec[0] = 1.0 ;         /* we always supply ort for constant */
00832          for( ip=1 ; ip <= polort ; ip++ )              /* 30 May 1999:    */
00833             ref_vec[ip] = ref_vec[ip-1] * ((float)it) ; /* and polynomials */
00834 
00835          if( internal_ort ){         /* no external orts */
00836             ref_vec[ip] = tsar[it] ; /* ref value */
00837          } else {
00838             for( iv=0 ; iv < ny_ort ; iv++ )             /* external */
00839                ref_vec[iv+ip] = ortar[it + iv*nx_ort] ;  /* orts */
00840 
00841             ref_vec[ny_ort+ip] = tsar[it] ;              /* ref value */
00842          }
00843 
00844 if(PRINT_TRACING)
00845 { char str[256] ;
00846   sprintf(str,"time index=%d  ideal[%d]=%f" , it,ivec,tsar[it] ) ;
00847   STATUS(str) ; }
00848 
00849          /* process the ort+ref update */
00850 
00851          update_PCOR_references( ref_vec , pc_ref[ivec] ) ;
00852 
00853          /* first time thru: load data from dataset */
00854 
00855          if( nnow == 0 ){
00856             float fac ;
00857             switch( dtyp ){
00858                case MRI_short:{
00859                   short * dar = (short *) DSET_ARRAY(dset_time,it) ;
00860                   for( iv=0; iv < nvox; iv++ ) vval[iv] = (float) dar[indx[iv]];
00861                }
00862                break ;
00863 
00864                case MRI_float:{
00865                   float * dar = (float *) DSET_ARRAY(dset_time,it) ;
00866                   for( iv=0; iv < nvox; iv++ ) vval[iv] = (float) dar[indx[iv]];
00867                }
00868                break ;
00869 
00870                case MRI_byte:{
00871                   byte * dar = (byte *) DSET_ARRAY(dset_time,it) ;
00872                   for( iv=0; iv < nvox; iv++ ) vval[iv] = (float) dar[indx[iv]];
00873                }
00874                break ;
00875             }
00876             fac = DSET_BRICK_FACTOR(dset_time,it) ;  /* 21 Jul 2004: Ooopsie. */
00877             if( fac > 0.0 )
00878               for( iv=0 ; iv < nvox ; iv++ ) vval[iv] *= fac ;
00879          }
00880 
00881          /* process the data update */
00882 
00883          PCOR_update_float( vval , pc_ref[ivec] , pc_vc[ivec] ) ;
00884          nnow++ ;  /* one more update at this time point */
00885       }  /* end of loop over ref vects */
00886 
00887       if( nnow > 0 ) nupdt++ ;  /* number of time points that had updates */
00888 
00889 #ifndef DONT_USE_METER
00890       meter_perc = (int) ( 100.0 * nupdt / ngood_ref ) ;
00891       if( meter_perc != meter_pold ){
00892          MCW_set_meter( meter , meter_perc ) ;
00893          meter_pold = meter_perc ;
00894       }
00895 #endif
00896 
00897    }  /* end of loop over time */
00898 
00899    /*-------------------------------------------*/
00900    /*--- Load final results into the dataset ---*/
00901 
00902    /*--- set the statistical parameters ---*/
00903 
00904    stataux[0] = nupdt ;               /* number of points used */
00905    stataux[1] = (ny_ref==1) ? 1 : 2 ; /* number of references  */
00906    stataux[2] = fim_nref - 1 ;        /* number of orts        */
00907    for( iv=3 ; iv < MAX_STAT_AUX ; iv++ ) stataux[iv] = 0.0 ;
00908 
00909    if( ibr_corr >= 0 ){
00910       if( new_dset->func_type == FUNC_COR_TYPE )
00911          EDIT_dset_items( new_dset, ADN_stat_aux, stataux, ADN_none ) ;
00912 
00913       EDIT_BRICK_TO_FICO( new_dset, ibr_corr, stataux[0],stataux[1],stataux[2] ) ;
00914    }
00915 
00916 #ifndef DONT_USE_METER
00917 # define METERIZE(ib) do { meter_perc = (int) ( 100.0 * (ib) / nbrik ) ; \
00918                            if( meter_perc != meter_pold ){               \
00919                               MCW_set_meter( meter , meter_perc ) ;      \
00920                               meter_pold = meter_perc ;                  \
00921                            } } while(0)
00922 #else
00923 # define METERIZE(ib) /*nada*/
00924 #endif
00925 
00926    /*** Compute brick arrays for new dataset ***/
00927    /*  [load scale factors into stataux, too]  */
00928 
00929    if( ny_ref == 1 ){
00930 
00931    /*** Just 1 ref vector --> load values directly into dataset ***/
00932 
00933       if( ibr_fim >= 0 ){
00934 
00935 STATUS("getting 1 ref alpha") ;
00936 
00937          PCOR_get_coef( pc_ref[0] , pc_vc[0] , vval ) ;
00938 
00939          topval = 0.0 ;
00940          for( iv=0 ; iv < nvox ; iv++ )
00941             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
00942 
00943          bar = DSET_ARRAY( new_dset , ibr_fim ) ;
00944          memset( bar , 0 , sizeof(short)*nxyz ) ;
00945 
00946          if( topval > 0.0 ){
00947             topval = MRI_TYPE_maxval[MRI_short] / topval ;
00948             for( iv=0 ; iv < nvox ; iv++ )
00949                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
00950 
00951             stataux[ibr_fim] = 1.0/topval ;
00952          } else {
00953             stataux[ibr_fim] = 0.0 ;
00954          }
00955 
00956          METERIZE(ibr_fim) ;
00957       }
00958 
00959       if( ibr_corr >= 0 ){
00960 
00961 STATUS("getting 1 ref pcor") ;
00962 
00963          PCOR_get_pcor( pc_ref[0] , pc_vc[0] , vval ) ;
00964 
00965          bar = DSET_ARRAY( new_dset , ibr_corr ) ;
00966          memset( bar , 0 , sizeof(short)*nxyz ) ;
00967 
00968          for( iv=0 ; iv < nvox ; iv++ )
00969             bar[indx[iv]] = (short)(FUNC_COR_SCALE_SHORT * vval[iv] + 0.499) ;
00970 
00971          stataux[ibr_corr] = 1.0 / FUNC_COR_SCALE_SHORT ;
00972 
00973          METERIZE(ibr_corr) ;
00974       }
00975 
00976       if( ibr_perc >= 0 ){
00977 
00978 STATUS("getting 1 ref perc") ;
00979 
00980          PCOR_get_perc( pc_ref[0] , pc_vc[0] , vval , NULL , 0 ) ;
00981 
00982          if( top_perc > 0.0 ) EDIT_clip_float( top_perc , nvox , vval ) ;
00983 
00984          topval = 0.0 ;
00985          for( iv=0 ; iv < nvox ; iv++ )
00986             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
00987 
00988          bar = DSET_ARRAY( new_dset , ibr_perc ) ;
00989          memset( bar , 0 , sizeof(short)*nxyz ) ;
00990 
00991          if( topval > 0.0 ){
00992             topval = MRI_TYPE_maxval[MRI_short] / topval ;
00993             for( iv=0 ; iv < nvox ; iv++ )
00994                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
00995 
00996             stataux[ibr_perc] = 1.0/topval ;
00997          } else {
00998             stataux[ibr_perc] = 0.0 ;
00999          }
01000 
01001          METERIZE(ibr_perc) ;
01002       }
01003 
01004       if( ibr_pave >= 0 ){  /* 08 Sep 1999 */
01005 
01006 STATUS("getting 1 ref pave") ;
01007 
01008          PCOR_get_perc( pc_ref[0] , pc_vc[0] , vval , NULL , 1 ) ;
01009 
01010          if( top_perc > 0.0 ) EDIT_clip_float( top_perc , nvox , vval ) ;
01011 
01012          topval = 0.0 ;
01013          for( iv=0 ; iv < nvox ; iv++ )
01014             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
01015 
01016          bar = DSET_ARRAY( new_dset , ibr_pave ) ;
01017          memset( bar , 0 , sizeof(short)*nxyz ) ;
01018 
01019          if( topval > 0.0 ){
01020             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01021             for( iv=0 ; iv < nvox ; iv++ )
01022                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
01023 
01024             stataux[ibr_pave] = 1.0/topval ;
01025          } else {
01026             stataux[ibr_pave] = 0.0 ;
01027          }
01028 
01029          METERIZE(ibr_pave) ;
01030       }
01031 
01032       if( ibr_ptop >= 0 ){  /* 03 Jan 2000 */
01033 
01034 STATUS("getting 1 ref ptop") ;
01035 
01036          PCOR_get_perc( pc_ref[0] , pc_vc[0] , vval , NULL , 2 ) ;
01037 
01038          if( top_perc > 0.0 ) EDIT_clip_float( top_perc , nvox , vval ) ;
01039 
01040          topval = 0.0 ;
01041          for( iv=0 ; iv < nvox ; iv++ )
01042             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
01043 
01044          bar = DSET_ARRAY( new_dset , ibr_ptop ) ;
01045          memset( bar , 0 , sizeof(short)*nxyz ) ;
01046 
01047          if( topval > 0.0 ){
01048             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01049             for( iv=0 ; iv < nvox ; iv++ )
01050                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
01051 
01052             stataux[ibr_ptop] = 1.0/topval ;
01053          } else {
01054             stataux[ibr_ptop] = 0.0 ;
01055          }
01056 
01057          METERIZE(ibr_ptop) ;
01058       }
01059 
01060       if( ibr_base >= 0 ){
01061 
01062 STATUS("getting 1 ref base") ;
01063 
01064          PCOR_get_perc( pc_ref[0] , pc_vc[0] , NULL , vval , 0 ) ;
01065 
01066          topval = 0.0 ;
01067          for( iv=0 ; iv < nvox ; iv++ )
01068             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
01069 
01070          bar = DSET_ARRAY( new_dset , ibr_base ) ;
01071          memset( bar , 0 , sizeof(short)*nxyz ) ;
01072 
01073          if( topval > 0.0 ){
01074             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01075             for( iv=0 ; iv < nvox ; iv++ )
01076                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
01077 
01078             stataux[ibr_base] = 1.0/topval ;
01079          } else {
01080             stataux[ibr_base] = 0.0 ;
01081          }
01082 
01083          METERIZE(ibr_base) ;
01084       }
01085 
01086       if( ibr_aver >= 0 ){  /* 08 Sep 1999 */
01087 
01088 STATUS("getting 1 ref aver") ;
01089 
01090          PCOR_get_perc( pc_ref[0] , pc_vc[0] , NULL , vval , 1 ) ;
01091 
01092          topval = 0.0 ;
01093          for( iv=0 ; iv < nvox ; iv++ )
01094             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
01095 
01096          bar = DSET_ARRAY( new_dset , ibr_aver ) ;
01097          memset( bar , 0 , sizeof(short)*nxyz ) ;
01098 
01099          if( topval > 0.0 ){
01100             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01101             for( iv=0 ; iv < nvox ; iv++ )
01102                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
01103 
01104             stataux[ibr_aver] = 1.0/topval ;
01105          } else {
01106             stataux[ibr_aver] = 0.0 ;
01107          }
01108 
01109          METERIZE(ibr_aver) ;
01110       }
01111 
01112       if( ibr_topl >= 0 ){  /* 03 Jan 2000 */
01113 
01114 STATUS("getting 1 ref topl") ;
01115 
01116          PCOR_get_perc( pc_ref[0] , pc_vc[0] , NULL , vval , 2 ) ;
01117 
01118          topval = 0.0 ;
01119          for( iv=0 ; iv < nvox ; iv++ )
01120             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
01121 
01122          bar = DSET_ARRAY( new_dset , ibr_topl ) ;
01123          memset( bar , 0 , sizeof(short)*nxyz ) ;
01124 
01125          if( topval > 0.0 ){
01126             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01127             for( iv=0 ; iv < nvox ; iv++ )
01128                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
01129 
01130             stataux[ibr_topl] = 1.0/topval ;
01131          } else {
01132             stataux[ibr_topl] = 0.0 ;
01133          }
01134 
01135          METERIZE(ibr_topl) ;
01136       }
01137 
01138       if( ibr_sigm >= 0 ){  /* 03 Jan 2000 */
01139 
01140 STATUS("getting 1 ref sigm") ;
01141 
01142          PCOR_get_stdev( pc_vc[0] , vval ) ;
01143 
01144          topval = 0.0 ;
01145          for( iv=0 ; iv < nvox ; iv++ )
01146             if( fabs(vval[iv]) > topval ) topval = fabs(vval[iv]) ;
01147 
01148          bar = DSET_ARRAY( new_dset , ibr_sigm ) ;
01149          memset( bar , 0 , sizeof(short)*nxyz ) ;
01150 
01151          if( topval > 0.0 ){
01152             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01153             for( iv=0 ; iv < nvox ; iv++ )
01154                bar[indx[iv]] = (short)(topval * vval[iv] + 0.499) ;
01155 
01156             stataux[ibr_sigm] = 1.0/topval ;
01157          } else {
01158             stataux[ibr_sigm] = 0.0 ;
01159          }
01160 
01161          METERIZE(ibr_sigm) ;
01162       }
01163 
01164    } else {
01165 
01166    /*** Multiple references --> find best correlation at each voxel ***/
01167 
01168       /*--- get first ref results into abest and rbest (best so far) ---*/
01169 
01170 STATUS("getting first ref results") ;
01171 
01172       PCOR_get_coef( pc_ref[0] , pc_vc[0] , abest ) ;
01173       PCOR_get_pcor( pc_ref[0] , pc_vc[0] , rbest ) ;
01174       PCOR_get_perc( pc_ref[0] , pc_vc[0] , pbest , bbest , 0 ) ;
01175       PCOR_get_perc( pc_ref[0] , pc_vc[0] , pabest, avbest, 1 ) ;
01176       PCOR_get_perc( pc_ref[0] , pc_vc[0] , ptbest, tlbest, 2 ) ;
01177       PCOR_get_stdev( pc_vc[0] , sgbest ) ;
01178 
01179       for( iv=0 ; iv < nvox ; iv++ ) ibest[iv] = 1 ;  /* 15 Dec 1997 */
01180 
01181       /*--- for each succeeding ref vector,
01182             get results into aval and vval,
01183             if |vval| > |rbest|, then use that result instead ---*/
01184 
01185       for( ivec=1 ; ivec < ny_ref ; ivec++ ){
01186 
01187 STATUS(" == getting results for next ref") ;
01188 
01189          PCOR_get_coef( pc_ref[ivec] , pc_vc[ivec] , aval ) ;
01190          PCOR_get_pcor( pc_ref[ivec] , pc_vc[ivec] , vval ) ;
01191          PCOR_get_perc( pc_ref[ivec] , pc_vc[ivec] , pval , bval , 0 ) ;
01192          PCOR_get_perc( pc_ref[ivec] , pc_vc[ivec] , paval, avval, 1 ) ;
01193          PCOR_get_perc( pc_ref[ivec] , pc_vc[ivec] , ptval, tlval, 2 ) ;
01194          PCOR_get_stdev( pc_vc[ivec] , sgval ) ;
01195 
01196 STATUS(" == and finding the best results") ;
01197 
01198          for( iv=0 ; iv < nvox ; iv++ ){
01199             if( fabs(vval[iv]) > fabs(rbest[iv]) ){
01200                rbest[iv] = vval[iv] ;
01201                abest[iv] = aval[iv] ;
01202                ibest[iv] = (ivec+1) ;   /* 15 Dec 1997 */
01203                pbest[iv] = pval[iv] ;   /* Jan 1998 */
01204                bbest[iv] = bval[iv] ;
01205                pabest[iv]= paval[iv] ;  /* 08 Sep 1999 */
01206                avbest[iv]= avval[iv] ;
01207                ptbest[iv]= ptval[iv] ;  /* 03 Jan 1999 */
01208                tlbest[iv]= tlval[iv] ;
01209                sgbest[iv]= sgval[iv] ;
01210             }
01211          }
01212       }
01213 
01214       /*--- at this point, abest and rbest are the best
01215             results, so scale them into the dataset bricks ---*/
01216 
01217       /** fim brick **/
01218 
01219       if( ibr_fim >= 0 ){
01220 
01221 if(PRINT_TRACING)
01222 { char str[256]; sprintf(str,"getting ibr_fim=%d",ibr_fim); STATUS(str); }
01223 
01224          topval = 0.0 ;
01225          for( iv=0 ; iv < nvox ; iv++ )
01226             if( fabs(abest[iv]) > topval ) topval = fabs(abest[iv]) ;
01227 
01228          bar = DSET_ARRAY( new_dset , ibr_fim ) ;
01229          memset( bar , 0 , sizeof(short)*nxyz ) ;
01230 
01231          if( topval > 0.0 ){
01232             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01233             for( iv=0 ; iv < nvox ; iv++ )
01234                bar[indx[iv]] = (short)(topval * abest[iv] + 0.499) ;
01235 
01236             stataux[ibr_fim] = 1.0/topval ;
01237          } else {
01238             stataux[ibr_fim] = 0.0 ;
01239          }
01240 
01241          METERIZE(ibr_fim) ;
01242       }
01243 
01244       /** threshold brick **/
01245 
01246       if( ibr_corr >= 0 ){
01247 
01248 if(PRINT_TRACING)
01249 { char str[256]; sprintf(str,"getting ibr_corr=%d",ibr_corr); STATUS(str); }
01250 
01251          bar = DSET_ARRAY( new_dset , ibr_corr ) ;
01252          memset( bar , 0 , sizeof(short)*nxyz ) ;
01253 
01254          for( iv=0 ; iv < nvox ; iv++ )
01255             bar[indx[iv]] = (short)(FUNC_COR_SCALE_SHORT * rbest[iv] + 0.499) ;
01256 
01257          stataux[ibr_corr] = 1.0 / FUNC_COR_SCALE_SHORT ;
01258 
01259          METERIZE(ibr_corr) ;
01260       }
01261 
01262       /** best index brick (15 Dec 1997) */
01263 
01264       if( ibr_best >= 0 ){
01265 
01266 if(PRINT_TRACING)
01267 { char str[256]; sprintf(str,"getting ibr_best=%d",ibr_best); STATUS(str); }
01268 
01269          bar = DSET_ARRAY( new_dset , ibr_best ) ;
01270          memset( bar , 0 , sizeof(short)*nxyz ) ;
01271          for( iv=0 ; iv < nvox ; iv++ ) bar[indx[iv]] = ibest[iv] ;
01272          stataux[ibr_best] = 0.0 ;  /* no scaling */
01273 
01274          METERIZE(ibr_best) ;
01275       }
01276 
01277       /** perc brick */
01278 
01279       if( ibr_perc >= 0 ){
01280 
01281 if(PRINT_TRACING)
01282 { char str[256]; sprintf(str,"getting ibr_perc=%d",ibr_perc); STATUS(str); }
01283 
01284          if( top_perc > 0.0 ) EDIT_clip_float( top_perc , nvox , pbest ) ;
01285 
01286          topval = 0.0 ;
01287          for( iv=0 ; iv < nvox ; iv++ )
01288             if( fabs(pbest[iv]) > topval ) topval = fabs(pbest[iv]) ;
01289 
01290          bar = DSET_ARRAY( new_dset , ibr_perc ) ;
01291          memset( bar , 0 , sizeof(short)*nxyz ) ;
01292 
01293          if( topval > 0.0 ){
01294             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01295             for( iv=0 ; iv < nvox ; iv++ )
01296                bar[indx[iv]] = (short)(topval * pbest[iv] + 0.499) ;
01297 
01298             stataux[ibr_perc] = 1.0/topval ;
01299          } else {
01300             stataux[ibr_perc] = 0.0 ;
01301          }
01302 
01303          METERIZE(ibr_perc) ;
01304       }
01305 
01306       /** pave brick [08 Sep 1999] */
01307 
01308       if( ibr_pave >= 0 ){
01309 
01310 if(PRINT_TRACING)
01311 { char str[256]; sprintf(str,"getting ibr_pave=%d",ibr_pave); STATUS(str); }
01312 
01313          if( top_perc > 0.0 ) EDIT_clip_float( top_perc , nvox , pabest ) ;
01314 
01315          topval = 0.0 ;
01316          for( iv=0 ; iv < nvox ; iv++ )
01317             if( fabs(pabest[iv]) > topval ) topval = fabs(pabest[iv]) ;
01318 
01319          bar = DSET_ARRAY( new_dset , ibr_pave ) ;
01320          memset( bar , 0 , sizeof(short)*nxyz ) ;
01321 
01322          if( topval > 0.0 ){
01323             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01324             for( iv=0 ; iv < nvox ; iv++ )
01325                bar[indx[iv]] = (short)(topval * pabest[iv] + 0.499) ;
01326 
01327             stataux[ibr_pave] = 1.0/topval ;
01328          } else {
01329             stataux[ibr_pave] = 0.0 ;
01330          }
01331 
01332          METERIZE(ibr_pave) ;
01333       }
01334 
01335       /** ptop brick [03 Jan 2000] */
01336 
01337       if( ibr_ptop >= 0 ){
01338 
01339 if(PRINT_TRACING)
01340 { char str[256]; sprintf(str,"getting ibr_ptop=%d",ibr_ptop); STATUS(str); }
01341 
01342          if( top_perc > 0.0 ) EDIT_clip_float( top_perc , nvox , ptbest ) ;
01343 
01344          topval = 0.0 ;
01345          for( iv=0 ; iv < nvox ; iv++ )
01346             if( fabs(ptbest[iv]) > topval ) topval = fabs(ptbest[iv]) ;
01347 
01348          bar = DSET_ARRAY( new_dset , ibr_ptop ) ;
01349          memset( bar , 0 , sizeof(short)*nxyz ) ;
01350 
01351          if( topval > 0.0 ){
01352             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01353             for( iv=0 ; iv < nvox ; iv++ )
01354                bar[indx[iv]] = (short)(topval * ptbest[iv] + 0.499) ;
01355 
01356             stataux[ibr_ptop] = 1.0/topval ;
01357          } else {
01358             stataux[ibr_ptop] = 0.0 ;
01359          }
01360 
01361          METERIZE(ibr_ptop) ;
01362       }
01363 
01364       /** base brick */
01365 
01366       if( ibr_base >= 0 ){
01367 
01368 if(PRINT_TRACING)
01369 { char str[256]; sprintf(str,"getting ibr_base=%d",ibr_base); STATUS(str); }
01370 
01371          topval = 0.0 ;
01372          for( iv=0 ; iv < nvox ; iv++ )
01373             if( fabs(bbest[iv]) > topval ) topval = fabs(bbest[iv]) ;
01374 
01375          bar = DSET_ARRAY( new_dset , ibr_base ) ;
01376          memset( bar , 0 , sizeof(short)*nxyz ) ;
01377 
01378          if( topval > 0.0 ){
01379             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01380             for( iv=0 ; iv < nvox ; iv++ )
01381                bar[indx[iv]] = (short)(topval * bbest[iv] + 0.499) ;
01382 
01383             stataux[ibr_base] = 1.0/topval ;
01384          } else {
01385             stataux[ibr_base] = 0.0 ;
01386          }
01387 
01388          METERIZE(ibr_base) ;
01389       }
01390 
01391       /** aver brick [08 Sep 1999] */
01392 
01393       if( ibr_aver >= 0 ){
01394 
01395 if(PRINT_TRACING)
01396 { char str[256]; sprintf(str,"getting ibr_aver=%d",ibr_aver); STATUS(str); }
01397 
01398          topval = 0.0 ;
01399          for( iv=0 ; iv < nvox ; iv++ )
01400             if( fabs(avbest[iv]) > topval ) topval = fabs(avbest[iv]) ;
01401 
01402          bar = DSET_ARRAY( new_dset , ibr_aver ) ;
01403          memset( bar , 0 , sizeof(short)*nxyz ) ;
01404 
01405          if( topval > 0.0 ){
01406             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01407             for( iv=0 ; iv < nvox ; iv++ )
01408                bar[indx[iv]] = (short)(topval * avbest[iv] + 0.499) ;
01409 
01410             stataux[ibr_aver] = 1.0/topval ;
01411          } else {
01412             stataux[ibr_aver] = 0.0 ;
01413          }
01414 
01415          METERIZE(ibr_aver) ;
01416       }
01417 
01418       /** topl brick [03 Jan 2000] */
01419 
01420       if( ibr_topl >= 0 ){
01421 
01422 if(PRINT_TRACING)
01423 { char str[256]; sprintf(str,"getting ibr_topl=%d",ibr_topl); STATUS(str); }
01424 
01425          topval = 0.0 ;
01426          for( iv=0 ; iv < nvox ; iv++ )
01427             if( fabs(tlbest[iv]) > topval ) topval = fabs(tlbest[iv]) ;
01428 
01429          bar = DSET_ARRAY( new_dset , ibr_topl ) ;
01430          memset( bar , 0 , sizeof(short)*nxyz ) ;
01431 
01432          if( topval > 0.0 ){
01433             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01434             for( iv=0 ; iv < nvox ; iv++ )
01435                bar[indx[iv]] = (short)(topval * tlbest[iv] + 0.499) ;
01436 
01437             stataux[ibr_topl] = 1.0/topval ;
01438          } else {
01439             stataux[ibr_topl] = 0.0 ;
01440          }
01441 
01442          METERIZE(ibr_topl) ;
01443       }
01444 
01445       /** sigm brick [03 Jan 2000]**/
01446 
01447       if( ibr_sigm >= 0 ){
01448 
01449 if(PRINT_TRACING)
01450 { char str[256]; sprintf(str,"getting ibr_sigm=%d",ibr_sigm); STATUS(str); }
01451 
01452          topval = 0.0 ;
01453          for( iv=0 ; iv < nvox ; iv++ )
01454             if( fabs(sgbest[iv]) > topval ) topval = fabs(sgbest[iv]) ;
01455 
01456          bar = DSET_ARRAY( new_dset , ibr_sigm ) ;
01457          memset( bar , 0 , sizeof(short)*nxyz ) ;
01458 
01459          if( topval > 0.0 ){
01460             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01461             for( iv=0 ; iv < nvox ; iv++ )
01462                bar[indx[iv]] = (short)(topval * sgbest[iv] + 0.499) ;
01463 
01464             stataux[ibr_sigm] = 1.0/topval ;
01465          } else {
01466             stataux[ibr_sigm] = 0.0 ;
01467          }
01468 
01469          METERIZE(ibr_sigm) ;
01470       }
01471 
01472    }  /* end of multiple reference case */
01473 
01474    /*** Set the brick factors for the new dataset,
01475         no matter how it was computed above.       ***/
01476 
01477 STATUS("setting brick_fac") ;
01478 
01479    (void) EDIT_dset_items( new_dset , ADN_brick_fac , stataux , ADN_none ) ;
01480 
01481 #ifndef DONT_USE_METER
01482    MCW_set_meter( meter , 100 ) ;
01483 #endif
01484 
01485    /*--- End of recursive updates; now free temporary workspaces ---*/
01486 
01487    for( ivec=0 ; ivec < ny_ref ; ivec++ ){
01488       free_PCOR_references(pc_ref[ivec]) ;
01489       free_PCOR_voxel_corr(pc_vc[ivec]) ;
01490    }
01491    free(pc_ref) ; free(pc_vc) ;
01492    if( aval  != NULL ) free(aval) ;
01493    if( rbest != NULL ) free(rbest) ;
01494    if( abest != NULL ) free(abest) ;
01495    if( ibest != NULL ) free(ibest) ;  /* 15 Dec 1997 */
01496    if( pbest != NULL ) free(pbest) ;  /* 16 Jan 1998 */
01497    if( bbest != NULL ) free(bbest) ;  /* 16 Jan 1998 */
01498    if( pval  != NULL ) free(pval) ;   /* 16 Jan 1998 */
01499    if( bval  != NULL ) free(bval) ;   /* 16 Jan 1998 */
01500    if( paval != NULL ) free(paval) ;  /* 08 Sep 1999 */
01501    if( avval != NULL ) free(avval) ;  /* 08 Sep 1999 */
01502    if( pabest!= NULL ) free(pabest);  /* 08 Sep 1999 */
01503    if( avbest!= NULL ) free(avbest);  /* 08 Sep 1999 */
01504    if( ptval != NULL ) free(ptval) ;  /* 03 Jan 2000 */
01505    if( tlval != NULL ) free(tlval) ;  /* 03 Jan 2000 */
01506    if( sgval != NULL ) free(sgval) ;  /* 03 Jan 2000 */
01507    if( ptbest!= NULL ) free(ptbest);  /* 03 Jan 2000 */
01508    if( tlbest!= NULL ) free(tlbest);  /* 03 Jan 2000 */
01509    if( sgbest!= NULL ) free(sgbest);  /* 03 Jan 2000 */
01510 
01511    /*-----------------------------------------------------*/
01512    /*--- 01 Feb 2000: execute user specified functions ---*/
01513 
01514 ucode_stuff:
01515 
01516 #define MAXUFUN 64  /* should be at least sizeof(int) */
01517 #define MAXTS   32  /* number of timeseries to process at once */
01518 
01519    if( ucode != 0 ){
01520       MCW_function_list * rlist = &(GLOBAL_library.registered_fim) ;
01521       int uuse[MAXUFUN] , nbrik[MAXUFUN] , brik1[MAXUFUN] ;
01522       void * udata[MAXUFUN] ;
01523       generic_func * ufunc[MAXUFUN] ;
01524       int nuse , uu , newbrik , oldbrik ;
01525       FIMdata fd ;
01526       MRI_IMAGE * tsim ;
01527       float     * tsar , * val , ** vbr ;
01528       short     * sar ;
01529       int         nts , jts , nbad=0 ;
01530       MRI_IMARR * imar ;
01531 
01532       /* mark which ones to execute */
01533 
01534       for( newbrik=nuse=uu=0 ; uu < rlist->num && nuse < MAXUFUN ; uu++ ){
01535          if( (ucode & (1<<uu)) != 0 ){
01536             uuse [nuse] = uu ;
01537             ufunc[nuse] = rlist->funcs[uu] ;     /* user_func for this func */
01538             nbrik[nuse] = rlist->flags[uu] ;     /* new bricks for this func */
01539             udata[nuse] = rlist->func_data[uu] ; /* user_data for this func */
01540             brik1[nuse] = newbrik ;              /* index of 1st brick */
01541             newbrik    += nbrik[nuse] ;          /* total number of new bricks */
01542             nuse++ ;
01543          }
01544       }
01545 
01546       if( nuse == 0 ) goto final_exit ; /* shouldn't happen */
01547 
01548       /* do the initialization calls to the user_func functions */
01549 
01550       fd.ref_ts = ref_ts ;
01551       fd.ort_ts = ort_ts ;
01552       fd.nvox   = nvox   ;
01553       fd.ignore = im3d->fimdata->init_ignore ;
01554       fd.polort = polort ;
01555 
01556 #ifndef DONT_USE_METER
01557       MCW_set_meter( meter , 0 ) ; meter_pold = 0.0 ;
01558 #endif
01559 
01560       for( uu=0 ; uu < nuse ; uu++ )
01561 #if 0
01562          ufunc[uu]( ntime , NULL , udata[uu] , nbrik[uu] , (void *)(&fd) ) ;
01563 #else
01564          AFNI_CALL_fim_function( ufunc[uu] ,
01565                                  ntime, NULL, udata[uu], nbrik[uu], &fd ) ;
01566 #endif
01567 
01568       /* loop over voxels,
01569          assemble time series,
01570          call functions to put results in val[],
01571          store float outputs in vbr[][]          */
01572 
01573       vbr = (float **) malloc(sizeof(float *)*newbrik) ;
01574       for( iv=0 ; iv < newbrik ; iv++ )
01575          vbr[iv] = (float *) malloc(sizeof(float)*nvox) ;
01576 
01577       val = (float *) malloc(sizeof(float)*newbrik) ;
01578 
01579       for( iv=0 ; iv < nvox ; iv+=MAXTS ){
01580          nts  = MIN( MAXTS , nvox-iv ) ;
01581          imar = THD_extract_many_series( nts,indx+iv , dset_time ) ;
01582 
01583          for( jts=0 ; jts < nts ; jts++ ){
01584             tsim = IMARR_SUBIMAGE(imar,jts) ;                     /* data */
01585             tsar = MRI_FLOAT_PTR(tsim) ;
01586 
01587             for( uu=0 ; uu < nuse ; uu++ ){
01588 #if 0
01589                ufunc[uu]( ntime , tsar ,                          /* func */
01590                           udata[uu] , nbrik[uu] , (void *) val ) ;
01591 #else
01592                AFNI_CALL_fim_function( ufunc[uu] ,
01593                                        ntime, tsar, udata[uu], nbrik[uu], val ) ;
01594 #endif
01595 
01596                for( it=0 ; it < nbrik[uu] ; it++ )             /* storage */
01597                   vbr[it+brik1[uu]][iv+jts] = val[it] ;
01598             }
01599          }
01600 
01601          DESTROY_IMARR(imar) ;                        /* garbage disposal */
01602 
01603 #ifndef DONT_USE_METER
01604          meter_perc = (int) ( 100.0 * iv / nvox ) ;
01605          if( meter_perc != meter_pold ){
01606             MCW_set_meter( meter , meter_perc ) ;
01607             meter_pold = meter_perc ;
01608          }
01609 #endif
01610       }
01611       free(val) ;  /* no longer needed */
01612 #ifndef DONT_USE_METER
01613       MCW_set_meter( meter , 100 ) ;
01614 #endif
01615 
01616       /* if necessary, make the new dataset now */
01617 
01618       if( new_dset != NULL ){
01619          oldbrik = DSET_NVALS(new_dset) ;  /* number of bricks it has now */
01620       } else {
01621          oldbrik = 0 ;
01622 
01623          new_dset = EDIT_empty_copy( dset_time ) ;
01624 
01625          EDIT_dset_items( new_dset ,
01626                              ADN_prefix      , new_prefix ,
01627                              ADN_malloc_type , DATABLOCK_MEM_MALLOC ,
01628                              ADN_type        , ISHEAD(dset_time)
01629                                                ? HEAD_FUNC_TYPE : GEN_FUNC_TYPE ,
01630                              ADN_func_type   , FUNC_BUCK_TYPE ,
01631                              ADN_nvals       , newbrik ,
01632                              ADN_datum_all   , MRI_short ,
01633                              ADN_ntt         , 0 ,
01634                           ADN_none ) ;
01635       }
01636 
01637       /* for each output brick:
01638            make short space for it,
01639            scale and stored floats into this space ,
01640            attach it to the output dataset as a new brick */
01641 
01642       for( iv=0 ; iv < newbrik ; iv++ ){
01643          tsar   = vbr[iv] ;              /* float data */
01644          topval = 0.0 ;                  /* find range of data */
01645 
01646          nbad += thd_floatscan( nvox , tsar ) ;  /* 08 Aug 2000 */
01647 
01648          for( it=0 ; it < nvox ; it++ )
01649             if( fabs(tsar[it]) > topval ) topval = fabs(tsar[it]) ;
01650 
01651          sar = (short *) calloc(sizeof(short),nxyz) ;  /* new brick */
01652 
01653          if( topval > 0.0 ){                           /* scale to shorts */
01654             topval = MRI_TYPE_maxval[MRI_short] / topval ;
01655             for( it=0 ; it < nvox ; it++ )
01656                sar[indx[it]] = (short)(topval * tsar[it] + 0.499) ;
01657 
01658             topval = 1.0/topval ;  /* scale factor */
01659          }
01660 
01661          free(tsar) ;
01662 
01663          if( oldbrik > 0 ){
01664             EDIT_add_brick( new_dset , MRI_short , topval , sar ) ;
01665          } else {
01666             mri_fix_data_pointer( sar , DSET_BRICK(new_dset,iv) ) ;
01667             EDIT_BRICK_FACTOR( new_dset , iv , topval ) ;
01668          }
01669       }
01670       free(vbr) ;
01671 
01672       /* do the ending calls to user_func */
01673 
01674       for( uu=0 ; uu < nuse ; uu++ )
01675 #if 0
01676          ufunc[uu]( -(brik1[uu]+oldbrik) , NULL ,
01677                     udata[uu] , nbrik[uu] , (void *) new_dset ) ;
01678 #else
01679          AFNI_CALL_fim_function( ufunc[uu] ,
01680                                  -(brik1[uu]+oldbrik) , NULL ,
01681                                  udata[uu] , nbrik[uu] , new_dset ) ;
01682 #endif
01683 
01684       if( nbad > 0 )
01685          fprintf(stderr,
01686                  "++ Warning: %d bad floats computed by user fimfuncs!\n\a",
01687                  nbad ) ;
01688 
01689    } /* 01 Feb 2000: end of user_func addition to FIMming */
01690 
01691 final_exit:
01692    free(vval) ; free(indx) ;  /* can finally free these */
01693 
01694    /*--- Return new dataset ---*/
01695 
01696 #ifndef DONT_USE_METER
01697    MCW_popdown_meter(meter) ;
01698 #endif
01699 
01700    RETURN(new_dset) ;
01701 }

void AFNI_fimmer_execute Three_D_View   im3d,
int    code,
int    ucode
 

sigm brick [03 Jan 2000]*

Definition at line 1904 of file afni_fimmer.c.

References AFNI_3DDATA_VIEW, AFNI_fimmer_compute(), AFNI_fimmer_redisplay(), AFNI_force_adoption(), AFNI_make_descendants(), AFNI_SEE_FUNC_ON, Three_D_View::anat_now, BEEPIT, Three_D_View::dc, MCW_DC::display, DSET_GRAPHABLE, DSET_HEADNAME, ENTRY, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, AFNI_fimmer_type::fimort, AFNI_fimmer_type::fimref, GLOBAL_library, AFNI_library_type::have_dummy_dataset, IM3D_OPEN, AFNI_fimmer_type::init_ignore, ISVALID_SESSION, MRI_IMAGE::name, THD_session::num_dsset, AFNI_fimmer_type::polort, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, Three_D_View::ss_now, AFNI_library_type::sslist, THD_MAX_SESSION_SIZE, THD_write_3dim_dataset(), tross_Append_History(), tross_Copy_History(), and Three_D_View::type.

Referenced by AFNI_gra_send_CB().

01905 {
01906    THD_3dim_dataset * new_dset , * dset_time ;
01907    MRI_IMAGE * ref_ts , * ort_ts ;
01908    THD_session * sess ;
01909    int ifunc ;
01910 
01911 ENTRY("AFNI_fimmer_execute") ;
01912 
01913    if( ! IM3D_OPEN(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
01914    if( GLOBAL_library.have_dummy_dataset ){ BEEPIT ; EXRETURN ; }
01915 
01916 #if 0
01917    dset_time = im3d->anat_now ;
01918 #else
01919    dset_time = im3d->fimdata->fimdset ;
01920 #endif
01921 
01922    if( ! DSET_GRAPHABLE(dset_time) ){ XBell(im3d->dc->display,100) ; EXRETURN ; }
01923 
01924    ref_ts = im3d->fimdata->fimref ;
01925    ort_ts = im3d->fimdata->fimort ;
01926    if( ref_ts == NULL ){ XBell(im3d->dc->display,100) ; EXRETURN ; }
01927 
01928    sess = im3d->ss_now ;
01929    if( ! ISVALID_SESSION(sess) || sess->num_dsset >= THD_MAX_SESSION_SIZE ){
01930       XBell(im3d->dc->display,100) ; EXRETURN ;
01931    }
01932 
01933    SHOW_AFNI_PAUSE ;
01934 
01935    /*--- Start lots of CPU time ---*/
01936 
01937    new_dset = AFNI_fimmer_compute( im3d, dset_time, ref_ts, ort_ts,
01938                                               sess, code,ucode ) ;
01939 
01940    /*--- End lots of CPU time ---*/
01941 
01942    if( new_dset == NULL ){
01943        SHOW_AFNI_READY ;
01944        XBell(im3d->dc->display,100) ; EXRETURN ;
01945    }
01946 
01947    AFNI_fimmer_redisplay( 1 , im3d , new_dset ) ;
01948    AFNI_SEE_FUNC_ON(im3d) ;
01949 
01950    /* Sep 1999: add some history */
01951 
01952    { char his[512] ; int hh ;
01953      tross_Copy_History( dset_time , new_dset ) ;
01954      sprintf(his,"afni FIM: 3D+time=%s ignore=%d polort=%d",
01955              DSET_HEADNAME(dset_time) ,
01956              im3d->fimdata->init_ignore , im3d->fimdata->polort ) ;
01957      if( ref_ts->name != NULL ){
01958         hh = strlen(his) ; sprintf(his+hh," ref=%s",ref_ts->name) ;
01959      }
01960      if( ort_ts != NULL && ort_ts->name != NULL ){
01961         hh = strlen(his) ; sprintf(his+hh," ort=%s",ort_ts->name) ;
01962      }
01963      tross_Append_History( new_dset , his ) ;
01964    }
01965 
01966    /* write to disk */
01967 
01968    (void) THD_write_3dim_dataset( NULL,NULL , new_dset , True ) ;
01969 
01970    /*** At this point, FIM is computed and written to disk ***/
01971 
01972    AFNI_force_adoption( sess , False ) ;
01973    AFNI_make_descendants( GLOBAL_library.sslist ) ;
01974 
01975    SHOW_AFNI_READY ;
01976    EXRETURN ;
01977 }

void AFNI_fimmer_pickort_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 61 of file afni_fimmer.c.

References AFNI_3DDATA_VIEW, AFNI_fimmer_setort(), ENTRY, GLOBAL_library, IM3D_VALID, IMARR_COUNT, IMARR_SUBIMAGE, MCW_choose_cbs::ival, mcwCR_timeseries, MCW_choose_cbs::reason, AFNI_library_type::timeseries, and Three_D_View::type.

00063 {
00064    Three_D_View * im3d = (Three_D_View *) cd ;
00065    int its ;
00066    MRI_IMAGE * tsim ;
00067 
00068 ENTRY("AFNI_fimmer_pickort_CB") ;
00069 
00070    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
00071    if( cbs->reason != mcwCR_timeseries ) EXRETURN ;  /* error */
00072 
00073    its = cbs->ival ;
00074    if( its >= 0 && its < IMARR_COUNT(GLOBAL_library.timeseries) ){
00075 
00076       tsim = IMARR_SUBIMAGE(GLOBAL_library.timeseries,its) ;
00077       AFNI_fimmer_setort( im3d , tsim ) ;
00078    }
00079 
00080    EXRETURN ;
00081 }

void AFNI_fimmer_pickref_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 36 of file afni_fimmer.c.

References AFNI_3DDATA_VIEW, AFNI_fimmer_setref(), ENTRY, Three_D_View::fimdata, GLOBAL_library, IM3D_VALID, IMARR_COUNT, IMARR_SUBIMAGE, MCW_choose_cbs::ival, mcwCR_timeseries, MCW_choose_cbs::reason, AFNI_fimmer_type::refadd_count, AFNI_library_type::timeseries, and Three_D_View::type.

00038 {
00039    Three_D_View * im3d = (Three_D_View *) cd ;
00040    int its ;
00041    MRI_IMAGE * tsim ;
00042 
00043 ENTRY("AFNI_fimmer_pickref_CB") ;
00044 
00045    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
00046    if( cbs->reason != mcwCR_timeseries ) EXRETURN ;  /* error */
00047 
00048    its = cbs->ival ;
00049    if( its >= 0 && its < IMARR_COUNT(GLOBAL_library.timeseries) ){
00050 
00051       tsim = IMARR_SUBIMAGE(GLOBAL_library.timeseries,its) ;
00052       AFNI_fimmer_setref( im3d , tsim ) ;
00053       im3d->fimdata->refadd_count = 1 ;
00054    }
00055 
00056    EXRETURN ;
00057 }

void AFNI_fimmer_redisplay int   ,
Three_D_View  ,
THD_3dim_dataset  
 

Definition at line 1981 of file afni_fimmer.c.

References AFNI_initialize_view(), AFNI_redisplay_func(), AFNI_reset_func_range(), AFNI_set_thr_pval(), Three_D_View::anat_now, DSET_NVALS, THD_session::dsset, ENTRY, AFNI_view_info::fim_index, AFNI_view_info::func_num, THD_session::num_dsset, Three_D_View::ss_now, STATUS, THD_load_statistics(), AFNI_view_info::thr_index, THD_3dim_dataset::view_type, and Three_D_View::vinfo.

Referenced by AFNI_fimmer_execute().

01983 {
01984    int ifunc ;
01985    THD_session * sess = im3d->ss_now ;
01986 
01987 ENTRY("AFNI_fimmer_redisplay") ;
01988 
01989    if( first_call ){
01990 
01991 STATUS("first_call mode") ;
01992 
01993       /*** Fit the new dataset into its place in the session ***/
01994 
01995       ifunc = sess->num_dsset ;
01996       sess->dsset[ifunc][new_dset->view_type] = new_dset ;
01997       sess->num_dsset ++ ;
01998       im3d->vinfo->func_num = ifunc ;
01999 
02000 STATUS("loading statistics") ;
02001       THD_load_statistics( new_dset ) ;
02002 
02003       im3d->vinfo->fim_index = 0 ;
02004       im3d->vinfo->thr_index = 1 ;
02005       if( DSET_NVALS(new_dset) == 1 ) im3d->vinfo->thr_index = 0 ;
02006 
02007       AFNI_initialize_view( im3d->anat_now , im3d ) ;
02008 
02009    } else {
02010 
02011 STATUS("redisplay mode") ;
02012 
02013       /*** Just redisplay the new dataset ***/
02014 
02015 STATUS("loading statistics") ;
02016       THD_load_statistics( new_dset ) ;
02017       AFNI_reset_func_range( im3d ) ;
02018       AFNI_set_thr_pval( im3d ) ;
02019 
02020       AFNI_redisplay_func( im3d ) ;  /* 05 Mar 2002 */
02021    }
02022 
02023    EXRETURN ;
02024 }

void AFNI_fimmer_setignore Three_D_View  ,
int   
 

Definition at line 197 of file afni_fimmer.c.

References AFNI_3DDATA_VIEW, ALLOW_COMPUTE_FIM, Three_D_View::anat_now, drive_MCW_grapher(), DSET_GRAPHABLE, ENTRY, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_setignore, IM3D_VALID, AFNI_fimmer_type::init_ignore, and Three_D_View::type.

Referenced by AFNI_gra_send_CB().

00198 {
00199    int ii ;
00200 
00201 ENTRY("AFNI_fimmer_setignore") ;
00202 
00203    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
00204 
00205    if( im3d->g123 != NULL )
00206       drive_MCW_grapher( im3d->g123 , graDR_setignore , (XtPointer) new_ignore ) ;
00207 
00208    if( im3d->g231 != NULL )
00209       drive_MCW_grapher( im3d->g231 , graDR_setignore , (XtPointer) new_ignore ) ;
00210 
00211    if( im3d->g312 != NULL )
00212       drive_MCW_grapher( im3d->g312 , graDR_setignore , (XtPointer) new_ignore ) ;
00213 
00214    im3d->fimdata->init_ignore = new_ignore ;
00215 
00216    if( DSET_GRAPHABLE(im3d->anat_now) )
00217       im3d->fimdata->fimdset = im3d->anat_now ;
00218 
00219    ALLOW_COMPUTE_FIM(im3d) ;
00220    EXRETURN ;
00221 }

void AFNI_fimmer_setort Three_D_View  ,
MRI_IMAGE  
 

Definition at line 141 of file afni_fimmer.c.

References AFNI_3DDATA_VIEW, AFNI_ts_in_library(), ALLOW_COMPUTE_FIM, Three_D_View::anat_now, drive_MCW_grapher(), DSET_GRAPHABLE, ENTRY, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, AFNI_fimmer_type::fimort, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_addort_ts, IM3D_VALID, mri_free(), MRI_IMAGE::name, STATUS, and Three_D_View::type.

Referenced by AFNI_fimmer_pickort_CB(), and AFNI_gra_send_CB().

00142 {
00143    int ii ;
00144 
00145 ENTRY("AFNI_fimmer_setort") ;
00146 
00147    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
00148 
00149 if(PRINT_TRACING)
00150 { char str[256] ;
00151   sprintf(str,"setting fimort to %s",
00152      (tsim==NULL) ? "Nothing" : (tsim->name==NULL) ? "NoName" : tsim->name) ;
00153   STATUS(str) ; }
00154 
00155    if( im3d->g123 != NULL )
00156       drive_MCW_grapher( im3d->g123 , graDR_addort_ts , (XtPointer) tsim ) ;
00157 
00158    if( im3d->g231 != NULL )
00159       drive_MCW_grapher( im3d->g231 , graDR_addort_ts , (XtPointer) tsim ) ;
00160 
00161    if( im3d->g312 != NULL )
00162       drive_MCW_grapher( im3d->g312 , graDR_addort_ts , (XtPointer) tsim ) ;
00163 
00164    ii = AFNI_ts_in_library( tsim ) ;
00165 
00166 if(PRINT_TRACING)
00167 { char str[256] ; sprintf(str,"found new ort in library at ii=%d",ii) ;
00168   STATUS(str) ; }
00169 
00170    ii = AFNI_ts_in_library( im3d->fimdata->fimort ) ;
00171 
00172    /* 12 Nov 1996: fix problem with freeing old
00173                    ort that might be in the library */
00174 
00175 if(PRINT_TRACING)
00176 { char str[256] ; sprintf(str,"found old ort in library at ii=%d",ii) ;
00177   STATUS(str) ; }
00178 
00179    if( ii < 0 && im3d->fimdata->fimort != NULL ){
00180       mri_free(im3d->fimdata->fimort) ;
00181 STATUS("freed old ort since wasn't in library") ;
00182    }
00183 
00184    im3d->fimdata->fimort = tsim ;
00185 
00186    if( DSET_GRAPHABLE(im3d->anat_now) )
00187       im3d->fimdata->fimdset = im3d->anat_now ;
00188 
00189    ALLOW_COMPUTE_FIM(im3d) ;
00190    EXRETURN ;
00191 }

void AFNI_fimmer_setpolort Three_D_View  ,
int   
 

Definition at line 227 of file afni_fimmer.c.

References AFNI_3DDATA_VIEW, ALLOW_COMPUTE_FIM, Three_D_View::anat_now, drive_MCW_grapher(), DSET_GRAPHABLE, ENTRY, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_polort, IM3D_VALID, AFNI_fimmer_type::polort, and Three_D_View::type.

Referenced by AFNI_gra_send_CB().

00228 {
00229    int ii ;
00230 
00231 ENTRY("AFNI_fimmer_setpolort") ;
00232 
00233    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
00234 
00235    if( im3d->g123 != NULL )
00236       drive_MCW_grapher( im3d->g123 , graDR_polort , (XtPointer) new_polort ) ;
00237 
00238    if( im3d->g231 != NULL )
00239       drive_MCW_grapher( im3d->g231 , graDR_polort , (XtPointer) new_polort ) ;
00240 
00241    if( im3d->g312 != NULL )
00242       drive_MCW_grapher( im3d->g312 , graDR_polort , (XtPointer) new_polort ) ;
00243 
00244    im3d->fimdata->polort = new_polort ;
00245 
00246    if( DSET_GRAPHABLE(im3d->anat_now) )
00247       im3d->fimdata->fimdset = im3d->anat_now ;
00248 
00249    ALLOW_COMPUTE_FIM(im3d) ;
00250    EXRETURN ;
00251 }

void AFNI_fimmer_setref Three_D_View  ,
MRI_IMAGE  
 

Definition at line 87 of file afni_fimmer.c.

References AFNI_3DDATA_VIEW, AFNI_ts_in_library(), ALLOW_COMPUTE_FIM, Three_D_View::anat_now, drive_MCW_grapher(), DSET_GRAPHABLE, ENTRY, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, AFNI_fimmer_type::fimref, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_addref_ts, IM3D_VALID, mri_free(), MRI_IMAGE::name, STATUS, and Three_D_View::type.

Referenced by AFNI_closedown_3dview(), AFNI_fimmer_pickref_CB(), AFNI_gra_send_CB(), and MAIN_workprocess().

00088 {
00089    int ii ;
00090 
00091 ENTRY("AFNI_fimmer_setref") ;
00092 
00093    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
00094 
00095 if(PRINT_TRACING)
00096 { char str[256] ;
00097   sprintf(str,"setting fimref to %s",
00098      (tsim==NULL) ? "Nothing" : (tsim->name==NULL) ? "NoName" : tsim->name) ;
00099   STATUS(str) ; }
00100 
00101    if( im3d->g123 != NULL )
00102       drive_MCW_grapher( im3d->g123 , graDR_addref_ts , (XtPointer) tsim ) ;
00103 
00104    if( im3d->g231 != NULL )
00105       drive_MCW_grapher( im3d->g231 , graDR_addref_ts , (XtPointer) tsim ) ;
00106 
00107    if( im3d->g312 != NULL )
00108       drive_MCW_grapher( im3d->g312 , graDR_addref_ts , (XtPointer) tsim ) ;
00109 
00110    ii = AFNI_ts_in_library( tsim ) ;
00111 
00112 if(PRINT_TRACING)
00113 { char str[256] ; sprintf(str,"found new ref in library at ii=%d",ii) ;
00114   STATUS(str) ; }
00115 
00116    ii = AFNI_ts_in_library( im3d->fimdata->fimref ) ;
00117 
00118    /* 12 Nov 1996: fix problem with freeing old
00119                    ref that might be in the library */
00120 
00121 if(PRINT_TRACING)
00122 { char str[256] ; sprintf(str,"found old ref in library at ii=%d",ii) ;
00123   STATUS(str) ; }
00124 
00125    if( ii < 0 && im3d->fimdata->fimref != NULL ){
00126       mri_free(im3d->fimdata->fimref) ;
00127 STATUS("freed old ref since wasn't in library") ;
00128    }
00129 
00130    im3d->fimdata->fimref = tsim ;
00131 
00132    if( DSET_GRAPHABLE(im3d->anat_now) )
00133       im3d->fimdata->fimdset = im3d->anat_now ;
00134 
00135    ALLOW_COMPUTE_FIM(im3d) ;
00136    EXRETURN ;
00137 }

void AFNI_finalize_dataset_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 2117 of file afni_func.c.

References AFNI_initialize_view(), Three_D_View::anat_now, AFNI_view_info::anat_num, AFNI_viewing_widgets::choose_anat_pb, AFNI_viewing_widgets::choose_func_pb, AFNI_viewing_widgets::choose_sess_pb, Three_D_View::dc, MCW_DC::display, THD_session::dsset, ENTRY, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, FIRST_VIEW_TYPE, AFNI_view_info::func_num, GLOBAL_library, IM3D_VALID, ISVALID_3DIM_DATASET, MCW_choose_cbs::ival, LAST_VIEW_TYPE, MCW_invert_widget(), MCW_set_bbox(), THD_session::num_dsset, THD_sessionlist::num_sess, AFNI_view_info::sess_num, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, THD_sessionlist::ssar, AFNI_library_type::sslist, AFNI_widget_set::view, AFNI_viewing_widgets::view_bbox, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, and MCW_bbox::wbut.

Referenced by AFNI_choose_dataset_CB(), AFNI_drive_switch_anatomy(), AFNI_drive_switch_function(), AFNI_drive_switch_session(), DRAW_finalize_dset_CB(), process_NIML_Node_ROI(), and process_NIML_SUMA_ixyz().

02119 {
02120    Three_D_View *im3d = (Three_D_View *) cd ;
02121    int old_sess , old_anat , old_func , old_view ;
02122    int new_sess=-1 , new_anat=-1 , new_func=-1 , new_view=-1 ;
02123    int ii , vv , ff ;
02124    THD_session *ss_new ;
02125 
02126 ENTRY("AFNI_finalize_dataset_CB") ;
02127 
02128    if( ! IM3D_VALID(im3d) ) EXRETURN ;
02129 
02130    old_sess = im3d->vinfo->sess_num ;     /* record current status */
02131    old_anat = im3d->vinfo->anat_num ;
02132    old_func = im3d->vinfo->func_num ;
02133    old_view = im3d->vinfo->view_type ;
02134 
02135    /*--- switch sessions ---*/
02136 
02137    if( wcall == im3d->vwid->view->choose_sess_pb ){
02138 
02139       new_sess = cbs->ival ;
02140       if( new_sess < 0 || new_sess >= GLOBAL_library.sslist->num_sess ){
02141          XBell( im3d->dc->display , 100 ) ; EXRETURN ;  /* bad! */
02142       }
02143 
02144       ss_new = GLOBAL_library.sslist->ssar[new_sess] ;
02145 
02146       /* find an anat in new session to match current anat */
02147 
02148       if( ISVALID_3DIM_DATASET(ss_new->dsset[old_anat][old_view]) ){  /* are OK */
02149         new_anat = old_anat ;
02150       } else {
02151         for( ii=0 ; ii < ss_new->num_dsset ; ii++ )
02152           if( ISVALID_3DIM_DATASET(ss_new->dsset[ii][old_view]) ){
02153              new_anat = ii ; break ;
02154           }
02155       }
02156       if( new_anat < 0 ) new_anat = 0 ;  /* use 1st if no match */
02157 
02158       /* find a view to fit this chosen anat */
02159 
02160       if( ISVALID_3DIM_DATASET(ss_new->dsset[new_anat][old_view]) ){ /* are OK */
02161          new_view = old_view ;
02162       } else {
02163          for( vv=old_view-1 ; vv >= FIRST_VIEW_TYPE ; vv-- )  /* look below */
02164             if( ISVALID_3DIM_DATASET(ss_new->dsset[new_anat][vv]) ) break ;
02165 
02166          if( vv >= FIRST_VIEW_TYPE ){  /* found it below */
02167             new_view = vv ;
02168          } else {                      /* look above */
02169             for( vv=old_view+1 ; vv <= LAST_VIEW_TYPE ; vv++ )
02170                if( ISVALID_3DIM_DATASET(ss_new->dsset[new_anat][vv]) ) break ;
02171 
02172             if( vv <= LAST_VIEW_TYPE ){  /* found it above */
02173                new_view = vv ;
02174             } else {
02175                XBell(im3d->dc->display,100) ; EXRETURN ;  /* bad news */
02176             }
02177          }
02178       }
02179 
02180       /* find a func in new session that fits the new view */
02181 
02182 #define FINDAFUNC
02183 #ifdef FINDAFUNC
02184       if( ISVALID_3DIM_DATASET(ss_new->dsset[old_func][new_view]) ){  /* are OK */
02185 
02186          new_func = old_func ;
02187       } else {
02188          for( ff=0 ; ff < ss_new->num_dsset ; ff++ )  /* search */
02189             if( ISVALID_3DIM_DATASET(ss_new->dsset[ff][new_view]) ) break ;
02190 
02191          if( ff < ss_new->num_dsset ) new_func = ff ;  /* found one */
02192       }
02193       if( new_func < 0 ) new_func = 0 ;  /* no match */
02194 #else
02195       new_func = old_func ;
02196 #endif
02197 
02198    /*--- switch anatomy ---*/
02199 
02200    } else if( wcall == im3d->vwid->view->choose_anat_pb ){
02201 
02202       new_sess = old_sess ;
02203       ss_new   = GLOBAL_library.sslist->ssar[new_sess] ;
02204 
02205       new_anat = cbs->ival ;
02206       if( new_anat < 0 || new_anat >= ss_new->num_dsset ){
02207          XBell( im3d->dc->display , 100 ) ; EXRETURN ;  /* bad! */
02208       }
02209 
02210       /* find a view to fit this chosen anat */
02211 
02212       if( ISVALID_3DIM_DATASET(ss_new->dsset[new_anat][old_view]) ){ /* are OK */
02213          new_view = old_view ;
02214       } else {
02215          for( vv=old_view-1 ; vv >= FIRST_VIEW_TYPE ; vv-- )  /* look below */
02216             if( ISVALID_3DIM_DATASET(ss_new->dsset[new_anat][vv]) ) break ;
02217 
02218          if( vv >= FIRST_VIEW_TYPE ){  /* found it below */
02219             new_view = vv ;
02220          } else {                      /* look above */
02221             for( vv=old_view+1 ; vv <= LAST_VIEW_TYPE ; vv++ )
02222                if( ISVALID_3DIM_DATASET(ss_new->dsset[new_anat][vv]) ) break ;
02223 
02224             if( vv <= LAST_VIEW_TYPE ){  /* found it above */
02225                new_view = vv ;
02226             } else {
02227                XBell(im3d->dc->display,100) ; EXRETURN ;  /* bad news */
02228             }
02229          }
02230       }
02231 
02232       /* find a func to match this view */
02233 
02234 #ifdef FINDAFUNC
02235       if( ISVALID_3DIM_DATASET(ss_new->dsset[old_func][new_view]) ){ /* are OK */
02236 
02237          new_func = old_func ;
02238       } else {
02239          for( ff=0 ; ff < ss_new->num_dsset ; ff++ )  /* search */
02240             if( ISVALID_3DIM_DATASET(ss_new->dsset[ff][new_view]) ) break ;
02241 
02242          if( ff < ss_new->num_dsset ) new_func = ff ;  /* found one */
02243       }
02244       if( new_func < 0 ) new_func = 0 ;  /* no match */
02245 #else
02246       new_func = old_func ;
02247 #endif
02248 
02249    /*--- switch function ---*/
02250 
02251    } else if( wcall == im3d->vwid->view->choose_func_pb ){
02252 
02253       new_sess = old_sess ;
02254       ss_new   = GLOBAL_library.sslist->ssar[new_sess] ;
02255 
02256       new_func = cbs->ival ;
02257       if( new_func < 0 || new_func >= ss_new->num_dsset ){
02258          XBell( im3d->dc->display , 100 ) ; EXRETURN ;  /* bad! */
02259       }
02260 
02261       /* find a view to fit this chosen func */
02262 
02263       if( ISVALID_3DIM_DATASET(ss_new->dsset[new_func][old_view]) ){ /* are OK */
02264          new_view = old_view ;
02265       } else {
02266          for( vv=old_view-1 ; vv >= FIRST_VIEW_TYPE ; vv-- )  /* look below */
02267             if( ISVALID_3DIM_DATASET(ss_new->dsset[new_func][vv]) ) break ;
02268 
02269          if( vv >= FIRST_VIEW_TYPE ){  /* found it below */
02270             new_view = vv ;
02271          } else {                      /* look above */
02272             for( vv=old_view+1 ; vv <= LAST_VIEW_TYPE ; vv++ )
02273                if( ISVALID_3DIM_DATASET(ss_new->dsset[new_func][vv]) ) break ;
02274 
02275             if( vv <= LAST_VIEW_TYPE ){  /* found it above */
02276                new_view = vv ;
02277             } else {
02278                XBell(im3d->dc->display,100) ; EXRETURN ;  /* bad news */
02279             }
02280          }
02281       }
02282 
02283       /* find an anat to go with the new view (this is NOT optional) */
02284 
02285       if( ISVALID_3DIM_DATASET(ss_new->dsset[old_anat][new_view]) ){  /* are OK */
02286 
02287          new_anat = old_anat ;
02288       } else {
02289          for( ff=0 ; ff < ss_new->num_dsset ; ff++ )  /* search */
02290             if( ISVALID_3DIM_DATASET(ss_new->dsset[ff][new_view]) ) break ;
02291 
02292          if( ff < ss_new->num_dsset ) new_anat = ff ;  /* found one */
02293       }
02294       if( new_anat < 0 ){
02295          XBell( im3d->dc->display , 100 ) ; EXRETURN ;  /* bad! */
02296       }
02297 
02298    /*--- switch to Hell? ---*/
02299 
02300    } else {
02301       XBell( im3d->dc->display , 100 ) ; EXRETURN ;  /* bad! */
02302    }
02303 
02304    /*--- make sure all values are set OK-ly ---*/
02305 
02306    if( new_view < 0 || new_sess < 0 || new_anat < 0 || new_func < 0 ){
02307       XBell( im3d->dc->display , 100 ) ; EXRETURN ;  /* bad! */
02308    }
02309 
02310    /*- beep & flash viewing control box if view type changes -*/
02311 
02312    if( old_view != new_view ){
02313       XBell( im3d->dc->display , 100 ) ;
02314       MCW_set_bbox( im3d->vwid->view->view_bbox , 1 << new_view ) ;
02315       MCW_invert_widget( im3d->vwid->view->view_bbox->wbut[new_view] ) ;
02316    }
02317 
02318    /*----- actually do the switch -----*/
02319 
02320    if( im3d->vinfo->sess_num != new_sess )  /* disable FIMage in a new session */
02321       im3d->fimdata->fimdset = NULL ;
02322 
02323    im3d->vinfo->view_type = new_view ;
02324    im3d->vinfo->sess_num  = new_sess ;
02325    im3d->vinfo->anat_num  = new_anat ;
02326    im3d->vinfo->func_num  = new_func ;
02327 
02328    SHOW_AFNI_PAUSE ;
02329    AFNI_initialize_view( im3d->anat_now , im3d ) ;
02330    SHOW_AFNI_READY ;
02331 
02332    if( old_view != new_view ){            /* end flash */
02333       XBell( im3d->dc->display , 100 ) ;
02334       MCW_invert_widget( im3d->vwid->view->view_bbox->wbut[new_view] ) ;
02335    }
02336 
02337    EXRETURN ;
02338 }

void AFNI_finalize_read_1D_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 2744 of file afni_func.c.

References Three_D_View::dc, MCW_DC::display, ENTRY, far, AFNI_widget_set::file_dialog, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, MRI_FLOAT_PTR, mri_free(), mri_read_1D(), myXtFree, MRI_IMAGE::nvox, MRI_IMAGE::nx, PLUTO_register_timeseries(), RWC_XtPopdown(), and Three_D_View::vwid.

Referenced by AFNI_read_1D_CB().

02745 {
02746    Three_D_View *im3d = (Three_D_View *) cd ;
02747    XmFileSelectionBoxCallbackStruct *cbs = (XmFileSelectionBoxCallbackStruct *) cb ;
02748 
02749 ENTRY("AFNI_finalize_read_1D_CB") ;
02750 
02751    switch( cbs->reason ){
02752 
02753       /** close the file selection dialog **/
02754 
02755       case XmCR_CANCEL:
02756          RWC_XtPopdown( im3d->vwid->file_dialog ) ;
02757       break ;
02758 
02759       /** try to read a new timeseries **/
02760 
02761       case XmCR_OK:{
02762          char *text = NULL ;
02763          MRI_IMAGE *flim ;
02764          float *far ;
02765          int ii ;
02766 
02767          XmStringGetLtoR( cbs->value , XmFONTLIST_DEFAULT_TAG , &text ) ;
02768          flim = mri_read_1D( text ) ;
02769          if( flim == NULL || flim->nx < 2 ){
02770             XBell(im3d->dc->display,100) ;
02771             (void) MCW_popup_message( w ,
02772                                        "********************************\n"
02773                                        "** Cannot read data from file **\n"
02774                                        "********************************"
02775                                       , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02776             myXtFree(text) ;
02777             break ;
02778          }
02779 
02780          far = MRI_FLOAT_PTR(flim) ;
02781          for( ii=0 ; ii < flim->nvox ; ii++ )
02782             if( fabs(far[ii]) >= 33333.0 ) far[ii] = WAY_BIG ;
02783 
02784          PLUTO_register_timeseries( text , flim ) ;
02785          mri_free(flim) ;
02786          myXtFree(text) ;
02787          RWC_XtPopdown( im3d->vwid->file_dialog ) ;
02788       }
02789       break ;
02790 
02791       case XmCR_HELP:
02792          (void) MCW_popup_message( w ,
02793                     "To choose a new timeseries, use the\n"
02794                     "Directories and Files selectors,\n"
02795                     "and the Filter entry and button,\n"
02796                     "to get the 'Selection' box correct;\n"
02797                     "that is, 'Selection' should show the\n"
02798                     "name of the 1D file which will be input.\n"
02799                     "Then press 'Set'.\n"
02800                  , MCW_USER_KILL ) ;
02801       break ;
02802    }
02803    EXRETURN ;
02804 }

void AFNI_finalize_read_sess_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 2515 of file afni_func.c.

References AFNI_append_sessions(), AFNI_rescan_timeseries_CB(), Three_D_View::dc, destroy_Htable(), MCW_DC::display, AFNI_widget_set::dmode, THD_session::dsset, ENTRY, AFNI_widget_set::file_dialog, GLOBAL_library, AFNI_library_type::have_dummy_dataset, LAST_VIEW_TYPE, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, myXtFree, new_Htable(), THD_session::num_dsset, THD_sessionlist::num_sess, THD_session::parent, PARENTIZE, AFNI_datamode_widgets::read_sess_pb, RWC_XtPopdown(), AFNI_library_type::session, THD_session::sessname, THD_sessionlist::ssar, AFNI_library_type::sslist, STATUS, subsume_Htable(), THD_equiv_files(), THD_init_session(), THD_is_directory(), THD_is_file(), THD_MAX_NUM_SESSION, THD_reconcile_parents(), UNDUMMYIZE, Three_D_View::vwid, THD_session::warptable, and AFNI_library_type::warptable.

Referenced by AFNI_read_sess_CB().

02516 {
02517    Three_D_View *im3d = (Three_D_View *) cd ;
02518    XmFileSelectionBoxCallbackStruct *cbs = (XmFileSelectionBoxCallbackStruct *) cb ;
02519 
02520 ENTRY("AFNI_finalize_read_sess_CB") ;
02521 
02522    switch( cbs->reason ){
02523 
02524       /** close the file selection dialog **/
02525 
02526       case XmCR_CANCEL:
02527          RWC_XtPopdown( im3d->vwid->file_dialog ) ;
02528       break ;
02529 
02530       /** try to read a new session **/
02531 
02532       case XmCR_OK:{
02533          char *text = NULL ;
02534          XmStringGetLtoR( cbs->value , XmFONTLIST_DEFAULT_TAG , &text ) ;
02535          if( text != NULL ){
02536 
02537             THD_session *new_ss = NULL ;
02538 
02539             /** if the user selected a file, strip it back to a directory **/
02540 
02541 if(PRINT_TRACING)
02542 { char str[256] ; sprintf(str,"input text = %s",text) ; STATUS(str) ; }
02543 
02544             if( THD_is_file(text) ){
02545                int ii = strlen(text)-1 ;
02546                for( ; ii > 0 && text[ii] != '/' ; ii-- ) text[ii] = '\0' ;
02547 
02548 if(PRINT_TRACING)
02549 { char str[256] ; sprintf(str,"defiled text = %s",text) ; STATUS(str) ; }
02550             }
02551 
02552             /** if the name given is a directory, try to read it **/
02553 
02554             if( THD_is_directory(text) ){
02555                int ii , eq ;
02556                THD_session *old_ss ;
02557 
02558                /** 1st check if this is the same as some other session **/
02559 
02560 STATUS("comparing to other sessions") ;
02561                for( ii=0 ; ii < GLOBAL_library.sslist->num_sess ; ii++ ){
02562                   old_ss = GLOBAL_library.sslist->ssar[ii] ;
02563                   eq     = THD_equiv_files( old_ss->sessname , text ) ;
02564                   if( eq == 1 ) break ;
02565                }
02566 
02567                if( eq == 1 ){
02568 STATUS("illegal duplicate session") ;
02569                   XBell(im3d->dc->display,100) ;
02570                   (void) MCW_popup_message( w ,
02571                                              "*******************************\n"
02572                                              "** Illegal duplicate session **\n"
02573                                              "*******************************"
02574                                             , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02575                   break ;
02576                } else {
02577 STATUS("reading new session") ;
02578                   new_ss = THD_init_session( text ) ;  /*** Read session! ***/
02579                }
02580             } else { /** wasn't a directory!? **/
02581 
02582 STATUS("wasn't a directory") ;
02583                XBell(im3d->dc->display,100) ;
02584                (void) MCW_popup_message( w ,
02585                                           "***********************************\n"
02586                                           "** Cannot find session directory **\n"
02587                                           "***********************************"
02588                                          , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02589                break ;
02590             }
02591 
02592             /** OK, was a directory and we tried to read it **/
02593 
02594             if( new_ss == NULL || new_ss->num_dsset == 0 ){ /** failed to read anything **/
02595 
02596 STATUS("failed to read new session") ;
02597                XBell(im3d->dc->display,100) ;
02598                (void) MCW_popup_message( w ,
02599                                            "******************************\n"
02600                                            "** Cannot read any datasets **\n"
02601                                            "******************************"
02602                                          , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02603 
02604             } else if( GLOBAL_library.sslist->num_sess >= THD_MAX_NUM_SESSION ){
02605 
02606 STATUS("too many sessions") ;
02607                XBell(im3d->dc->display,100) ;
02608                (void) MCW_popup_message( w ,
02609                                            "****************************\n"
02610                                            "** Max number of sessions **\n"
02611                                            "** exceeded -- Sorry!     **\n"
02612                                            "****************************"
02613                                          , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02614 
02615             } else {  /** GOOD!  Actually process a new session.   **/
02616                       /** (The following is from AFNI_read_inputs) **/
02617                int qd , vv ;
02618                char str[356] ;  /* for messages */
02619 
02620 STATUS("processing new session") ;
02621 
02622                new_ss->parent = NULL ;
02623 
02624                for( qd=0 ; qd < new_ss->num_dsset ; qd++ )       /* parentize */
02625                   for( vv=0 ; vv <= LAST_VIEW_TYPE ; vv++ )
02626                      PARENTIZE( new_ss->dsset[qd][vv] , NULL ) ;
02627 
02628                /* 20 Dec 2001: if have global datasets, put them in here */
02629 
02630                AFNI_append_sessions( new_ss , GLOBAL_library.session ) ;
02631 
02632                /* if we were living with a dummy, fix that */
02633 
02634                if( GLOBAL_library.have_dummy_dataset ) UNDUMMYIZE ;
02635 
02636                /* put the new session into place in the list of sessions */
02637 
02638 STATUS("adding new session to list") ;
02639                GLOBAL_library.sslist->ssar[GLOBAL_library.sslist->num_sess] = new_ss ;
02640                (GLOBAL_library.sslist->num_sess)++ ;
02641                THD_reconcile_parents( GLOBAL_library.sslist ) ;
02642 
02643                sprintf(str," \n Session #%2d"
02644                             "\n %s"
02645                             "\n %d datasets\n" ,
02646                        GLOBAL_library.sslist->num_sess ,
02647                        new_ss->sessname, new_ss->num_dsset ) ;
02648 
02649                (void) MCW_popup_message( im3d->vwid->dmode->read_sess_pb,
02650                                          str, MCW_USER_KILL | MCW_TIMER_KILL ) ;
02651 
02652 STATUS("rescanning timeseries files") ;
02653                AFNI_rescan_timeseries_CB(NULL,NULL,NULL) ;
02654 
02655                /* 28 Aug 2002: deal with warptables */
02656 
02657                if( new_ss->warptable != NULL ){
02658                  if( GLOBAL_library.warptable == NULL ) /* create global warptable */
02659                    GLOBAL_library.warptable = new_Htable(101) ;
02660                  subsume_Htable( new_ss->warptable , GLOBAL_library.warptable ) ;
02661                  destroy_Htable( new_ss->warptable ) ;
02662                  new_ss->warptable = NULL ;
02663                }
02664 
02665                RWC_XtPopdown( im3d->vwid->file_dialog ) ;
02666             }
02667 
02668 STATUS("freeing 'text' variable") ;
02669             myXtFree(text) ;
02670          }
02671       }
02672       break ;
02673 
02674       case XmCR_HELP:
02675          (void) MCW_popup_message( w ,
02676                     "To choose a new session, use the\n"
02677                     "Directories and Files selectors,\n"
02678                     "and the Filter entry and button,\n"
02679                     "to get the 'Selection' box correct;\n"
02680                     "that is, 'Selection' should either\n"
02681                     "be the name of the session directory,\n"
02682                     "or the name of a file in the session\n"
02683                     "directory.  Then press 'Set'.\n"
02684                     "\n"
02685                     "N.B.: To see datasets in the new\n"
02686                     "      session, you must use the\n"
02687                     "      'Switch Session' button."
02688                  , MCW_USER_KILL ) ;
02689       break ;
02690    }
02691    EXRETURN ;
02692 }

void AFNI_finalize_read_Web_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 2828 of file afni_func.c.

References ADDTO_XTARR, AFNI_add_timeseries(), AFNI_initialize_view(), AFNI_view_info::anat_num, MCW_choose_cbs::cval, AFNI_widget_set::dmode, DSET_delete, THD_session::dsset, ENTRY, FREE_XTARR, AFNI_view_info::func_num, GLOBAL_library, AFNI_library_type::have_dummy_dataset, IC_DSET, IC_FLIM, INIT_XTARR, ISVALID_DSET, LAST_VIEW_TYPE, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, mcwCR_string, XtPointer_array::num, THD_session::num_dsset, AFNI_datamode_widgets::read_Web_pb, MCW_choose_cbs::reason, AFNI_view_info::sess_num, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, THD_sessionlist::ssar, AFNI_library_type::sslist, THD_fetch_dataset(), THD_fetch_many_datasets(), THD_MAX_SESSION_SIZE, UNDUMMYIZE, THD_3dim_dataset::view_type, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, XTARR_IC, and XTARR_XT.

Referenced by AFNI_read_Web_CB().

02829 {
02830    Three_D_View *im3d = (Three_D_View *) cd ;
02831    THD_3dim_dataset *dset ;
02832    XtPointer_array *dsar ;
02833    THD_session *ss = GLOBAL_library.sslist->ssar[im3d->vinfo->sess_num] ;
02834    char str[256] ;
02835    int nds,dd,vv , nn, na=-1,nf=-1 ,nts ;
02836 
02837 ENTRY("AFNI_finalize_read_Web_CB") ;
02838 
02839    if( cbs->reason  != mcwCR_string ||
02840        cbs->cval    == NULL         ||
02841        cbs->cval[0] == '\0'         ||
02842        (strstr(cbs->cval,"http://")==NULL && strstr(cbs->cval,"ftp://")==NULL) ){
02843 
02844       (void) MCW_popup_message( im3d->vwid->dmode->read_Web_pb ,
02845                                   " \n** Illegal URL **\n " ,
02846                                 MCW_USER_KILL | MCW_TIMER_KILL      ) ;
02847 
02848       XBell( XtDisplay(w) , 100 ) ; EXRETURN ;
02849    }
02850 
02851    /** read a list of datasets? **/
02852 
02853    if( strstr(cbs->cval,"AFNILIST") != NULL ){
02854 
02855       SHOW_AFNI_PAUSE ;
02856       dsar = THD_fetch_many_datasets( cbs->cval ) ; /* get array of datasets */
02857       SHOW_AFNI_READY ;
02858       if( dsar == NULL || dsar->num == 0 ){
02859          (void) MCW_popup_message( im3d->vwid->dmode->read_Web_pb ,
02860                                      " \n"
02861                                      "** Can't get datasets **\n"
02862                                      "** from that URL!     **\n " ,
02863                                    MCW_USER_KILL | MCW_TIMER_KILL      ) ;
02864          XBell( XtDisplay(w) , 100 ) ; EXRETURN ;
02865       }
02866 
02867    } else {  /** read one dataset **/
02868 
02869       SHOW_AFNI_PAUSE ;
02870       dset = THD_fetch_dataset( cbs->cval ) ;
02871       SHOW_AFNI_READY ;
02872       if( dset == NULL ){
02873          (void) MCW_popup_message( im3d->vwid->dmode->read_Web_pb ,
02874                                      " \n"
02875                                      "** Can't get a dataset **\n"
02876                                      "** from that URL!      **\n " ,
02877                                    MCW_USER_KILL | MCW_TIMER_KILL      ) ;
02878          XBell( XtDisplay(w) , 100 ) ; EXRETURN ;
02879       }
02880       INIT_XTARR(dsar) ; ADDTO_XTARR(dsar,dset) ; XTARR_IC(dsar,0) = IC_DSET ;
02881    }
02882 
02883    /** loop over all datasets in array, place in current session **/
02884 
02885    for( nts=nds=dd=0 ; dd < dsar->num ; dd++ ){
02886 
02887       if( XTARR_IC(dsar,dd) == IC_FLIM ){  /* process a 1D file */
02888          AFNI_add_timeseries( (MRI_IMAGE *) XTARR_XT(dsar,dd) ) ;
02889          nts++ ; continue ;
02890       }
02891       if( XTARR_IC(dsar,dd) != IC_DSET ) continue ;    /* bad */
02892 
02893       dset = (THD_3dim_dataset *) XTARR_XT(dsar,dd) ;
02894       if( !ISVALID_DSET(dset) ) continue ;             /* bad */
02895       vv = dset->view_type ;
02896       nn = ss->num_dsset ;
02897       if( nn >= THD_MAX_SESSION_SIZE ){
02898         fprintf(stderr,"\a\n*** too many anatomical datasets!\n") ;
02899         DSET_delete(dset) ;  /* 01 Nov 2001 */
02900       } else {
02901         ss->dsset[nn][vv] = dset ;
02902         ss->num_dsset++ ; nds++ ;
02903         if( vv == im3d->vinfo->view_type && na == -1 ) na = nn ;
02904       }
02905    } /* end of loop over dd=datasets in dsar */
02906 
02907    FREE_XTARR(dsar) ;
02908 
02909    /*-- popup a message saying what happened --*/
02910 
02911    if( nts > 0 )
02912       sprintf(str," \n Read %d datasets and \n"
02913                      "      %d timeseries from\n"
02914                      " %s\n ",nds,nts,cbs->cval  ) ;
02915    else
02916       sprintf(str," \n Read %d datasets from\n"
02917                      " %s\n ",nds,cbs->cval    ) ;
02918 
02919    (void) MCW_popup_message( im3d->vwid->dmode->read_Web_pb ,
02920                              str , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02921 
02922    if( nds == 0 ){ XBell(XtDisplay(w),100); EXRETURN; }
02923 
02924    /*-- prepare to switch back to AFNI --*/
02925 
02926    if( na >= 0 ) im3d->vinfo->anat_num = na ; /* 1st new anat in current view */
02927    if( nf >= 0 ) im3d->vinfo->func_num = nf ; /* 1st new func in current view */
02928 
02929    if( GLOBAL_library.have_dummy_dataset ){
02930       UNDUMMYIZE ;
02931       if( na < 0 && ss->num_dsset > 1 ){
02932          im3d->vinfo->anat_num = 1 ;
02933          for( vv=0 ; vv <= LAST_VIEW_TYPE ; vv++ ){
02934             if( ISVALID_DSET(ss->dsset[1][vv]) ){ im3d->vinfo->view_type = vv; break; }
02935          }
02936       } else if( na < 0 ){                         /* should be impossible */
02937          (void) MCW_popup_message( im3d->vwid->dmode->read_Web_pb ,
02938                                    " \n** No datasets available **\n " ,
02939                                    MCW_USER_KILL | MCW_TIMER_KILL ) ;
02940       }
02941    }
02942 
02943    AFNI_initialize_view( NULL , im3d ) ;
02944    EXRETURN ;
02945 }

void AFNI_finalrun_script_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 1723 of file afni_splash.c.

References AFNI_startup_script_CB(), MCW_choose_cbs::cval, and ENTRY.

Referenced by AFNI_run_script_CB().

01724 {
01725    Three_D_View *im3d = (Three_D_View *) cd ;
01726 
01727 ENTRY("AFNI_finalrun_script_CB") ;
01728 
01729    AFNI_startup_script_CB( (XtPointer) cbs->cval , NULL ) ;
01730    EXRETURN ;
01731 }

void AFNI_finalsave_layout_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 1420 of file afni_splash.c.

References AFNI_controller_index(), AV_uformat_fval(), BEEPIT, MCW_pbar::bigmode, MCW_pbar::bigtop, AFNI_library_type::controllers, MCW_choose_cbs::cval, AFNI_library_type::dc, Three_D_View::dc, drive_MCW_imseq(), ENTRY, MCW_grapher::fdw_graph, AFNI_function_widgets::frame, AFNI_widget_set::func, AFNI_view_info::func_resam_mode, AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, AFNI_view_info::func_visible, MCW_arrowval::fval, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, GLOBAL_library, IM3D_OPEN, MCW_imseq::image_frac, AFNI_function_widgets::inten_pbar, isq, isqDR_getopacity, MCW_DCOV::label_ov, MCW_grapher::mat, MAX_CONTROLLERS, MCW_widget_geom(), MCW_widget_visible(), MIN_PIN, MCW_pbar::mode, MCW_imseq::mont_gap, MCW_imseq::mont_gapcolor, MCW_imseq::mont_nx, MCW_imseq::mont_ny, MCW_imseq::mont_skip, MCW_DCOV::name_ov, MCW_DCOV::ncol_ov, AFNI_widget_set::nplugbut, MCW_pbar::num_panes, MCW_imseq::onoff_state, MCW_pbar::ov_index, MCW_DC::ovc, MCW_grapher::pin_top, AFNI_widget_set::plugint, AFNI_widget_set::pluglab, MCW_pbar::pval, AFNI_function_widgets::range_av, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, THD_filename_ok(), THR_FACTOR, AFNI_view_info::thr_resam_mode, AFNI_widget_set::top_shell, AFNI_view_info::use_autorange, Three_D_View::vinfo, Three_D_View::vwid, and MCW_imseq::wtop.

Referenced by AFNI_save_layout_CB().

01421 {
01422    Three_D_View *im3d = (Three_D_View *) cd ;
01423    int cc,ww , gww,ghh,gxx,gyy ;
01424    FILE *fp , *gp ;
01425    MCW_imseq   *isq ;
01426    MCW_grapher *gra ;
01427    float ifrac ;
01428    char mont[128] ;
01429    int matrix , pinnum ;
01430 
01431    char *abet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
01432    char *wnam[3] = { "axial" , "sagittal" , "coronal" } ;
01433 
01434    int ipl , qq , ll ;
01435    char *plab ;
01436 
01437    Three_D_View *qm3d         = GLOBAL_library.controllers[0]; /* already open */
01438 
01439 #ifdef ALLOW_PLUGINS
01440    int      npbut              = qm3d->vwid->nplugbut;      /* how many plugins */
01441    char **  pluglab            = qm3d->vwid->pluglab;       /* their labels     */
01442    PLUGIN_interface ** plugint = qm3d->vwid->plugint;       /* their interfaces */
01443 #endif
01444 
01445    MCW_DCOV     *ovc          = GLOBAL_library.dc->ovc ;   /* 22 Jan 2003 */
01446    Three_D_View *zm3d ;
01447 
01448 ENTRY("AFNI_finalsave_layout_CB") ;
01449 
01450    if( strcmp(cbs->cval,".afnirc") == 0 ){ BEEPIT; EXRETURN; } /* 12 Oct 2000 */
01451 
01452    /*-- 23 Jan 2003: open layout file if name is "OK", else don't use it --*/
01453 
01454    if( THD_filename_ok(cbs->cval) ){
01455      fp = fopen( cbs->cval , "w" ) ;
01456      if( fp == NULL ){ BEEPIT; EXRETURN; }
01457    } else {
01458      fp = NULL ;
01459    }
01460 
01461    if( fp != NULL ) fprintf(fp,"\n***LAYOUT\n") ;
01462 
01463    /*-- 22 Jan 2002: maybe write a startup script to do same things --*/
01464 
01465    if( fp == NULL )
01466      gp = fopen( ".afni.startup_script" , "w" ) ;
01467    else
01468      gp = NULL ;
01469 
01470    if( gp != NULL ){
01471 
01472      fprintf(gp,"// AFNI startup script, from Datamode->Misc->Save Layout\n") ;
01473 
01474      /* put in any extra overlay colors */
01475 
01476      for( qq=DEFAULT_NCOLOVR+1 ; qq < ovc->ncol_ov ; qq++ )
01477        fprintf(gp,"ADD_OVERLAY_COLOR %s %s\n",
01478                ovc->name_ov[qq] , ovc->label_ov[qq] ) ;
01479    } else {
01480      if( fp == NULL ){ BEEPIT; EXRETURN; }
01481    }
01482 
01483    /*-- loop over controllers --*/
01484 
01485    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
01486 
01487       /*-- controller open? */
01488 
01489       zm3d = GLOBAL_library.controllers[cc] ;
01490 
01491       if( !IM3D_OPEN(zm3d) ) continue ; /* skip */
01492 
01493       /* print controller info */
01494 
01495       MCW_widget_geom( zm3d->vwid->top_shell ,
01496                        NULL,NULL , &gxx,&gyy ) ;
01497 
01498       if( fp != NULL ) fprintf(fp,"  %c geom=+%d+%d\n" , abet[cc] , gxx,gyy ) ;
01499 
01500       /*-- 22 Jan 2003: parallel output for startup script --*/
01501 
01502       if( gp != NULL ){
01503         MCW_pbar *pbar = zm3d->vwid->func->inten_pbar ;
01504 
01505         fprintf(gp,"OPEN_WINDOW %c geom=+%d+%d\n" , abet[cc] , gxx,gyy ) ;
01506 
01507         if( XtIsManaged(zm3d->vwid->func->frame) )
01508           fprintf(gp,"OPEN_PANEL %c.Define_Overlay\n" , abet[cc] ) ;
01509 
01510         fprintf(gp,"SET_THRESHOLD %c.%04d %d\n" , abet[cc] ,
01511                     (int)(zm3d->vinfo->func_threshold/THR_FACTOR) ,
01512                     (int)(log10(zm3d->vinfo->func_thresh_top)+.01) ) ;
01513 
01514         if( !pbar->bigmode ){
01515           fprintf(gp,"SET_PBAR_ALL %c.%c%d" , abet[cc] ,
01516                      (pbar->mode) ? '+' : '-' , pbar->num_panes ) ;
01517           for( qq=0 ; qq < pbar->num_panes ; qq++ )
01518             fprintf(gp," %s=%s",
01519                        AV_uformat_fval(pbar->pval[qq]) ,
01520                        ovc->label_ov[pbar->ov_index[qq]] ) ;
01521           fprintf(gp,"\n") ;
01522         } else {
01523           fprintf(gp,"SET_PBAR_ALL %c.%c%d %f %s\n" , abet[cc] ,
01524                      (pbar->mode) ? '+' : '-' , 99 ,
01525                      pbar->bigtop , PBAR_get_bigmap(pbar) ) ;
01526         }
01527 
01528         fprintf(gp,"SET_FUNC_VISIBLE %c.%c\n" , abet[cc] ,
01529                 (zm3d->vinfo->func_visible) ? '+' : '-'   ) ;
01530 
01531         fprintf(gp,"SET_FUNC_RESAM %c.%s.%s\n" , abet[cc] ,
01532                 RESAM_shortstr[zm3d->vinfo->func_resam_mode] ,
01533                 RESAM_shortstr[zm3d->vinfo->thr_resam_mode]   ) ;
01534 
01535         if( im3d->vinfo->use_autorange )
01536           fprintf(gp,"SET_FUNC_AUTORANGE %c.+\n" , abet[cc] ) ;
01537         else
01538           fprintf(gp,"SET_FUNC_RANGE %c.%f\n" , abet[cc] ,
01539                   im3d->vwid->func->range_av->fval        ) ;
01540 
01541       } /* end of startup script stuff */
01542 
01543       /*-- loop over image viewers in this controller --*/
01544 
01545       for( ww=0 ; ww < 3 ; ww++ ){
01546 
01547          isq = (ww == 0) ? zm3d->s123     /* get the image */
01548               :(ww == 1) ? zm3d->s231     /* viewer struct */
01549               :            zm3d->s312 ;
01550 
01551          if( isq == NULL ) continue ;   /* skip */
01552 
01553          /* get and print image viewer info */
01554 
01555          MCW_widget_geom( isq->wtop , &gww,&ghh , &gxx,&gyy ) ;
01556 
01557          ifrac = (isq->onoff_state) ? isq->image_frac : 1.0 ;
01558 
01559          if( isq->mont_nx > 1 || isq->mont_ny > 1 ){
01560             sprintf(mont,"%dx%d:%d:%d:%s" ,
01561                     isq->mont_nx , isq->mont_ny , isq->mont_skip+1 , isq->mont_gap ,
01562                     zm3d->dc->ovc->label_ov[isq->mont_gapcolor]);
01563          } else {
01564             mont[0] = '\0' ;
01565          }
01566 
01567          if( fp != NULL ){
01568            if( mont[0] == '\0' ){
01569               fprintf(fp, "  %c.%simage geom=%dx%d+%d+%d ifrac=%s\n" ,
01570                           abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , AV_uformat_fval(ifrac) ) ;
01571            } else {
01572               fprintf(fp, "  %c.%simage geom=%dx%d+%d+%d ifrac=%s mont=%s\n" ,
01573                           abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , AV_uformat_fval(ifrac) , mont ) ;
01574            }
01575          }
01576 
01577          /*-- 22 Jan 2003: startup script stuff for image viewers --*/
01578 
01579          if( gp != NULL ){
01580            int opval=9 ;
01581            drive_MCW_imseq( isq , isqDR_getopacity , &opval ) ;
01582            if( mont[0] == '\0' ){
01583               fprintf(gp, "OPEN_WINDOW %c.%simage geom=+%d+%d ifrac=%s opacity=%d\n" ,
01584                           abet[cc] , wnam[ww] , gxx,gyy , AV_uformat_fval(ifrac) , opval ) ;
01585            } else {
01586               fprintf(gp, "OPEN_WINDOW %c.%simage geom=+%d+%d ifrac=%s mont=%s opacity=%d\n" ,
01587                           abet[cc] , wnam[ww] , gxx,gyy , AV_uformat_fval(ifrac) , mont , opval ) ;
01588            }
01589         }
01590       }
01591 
01592       /*-- loop over graph viewers --*/
01593 
01594       for( ww=0 ; ww < 3 ; ww++ ){
01595 
01596          gra = (ww == 0) ? zm3d->g123    /* get the graph */
01597               :(ww == 1) ? zm3d->g231    /* viewer struct */
01598               :            zm3d->g312 ;
01599 
01600          if( gra == NULL ) continue ;   /* ERROR */
01601 
01602          MCW_widget_geom( gra->fdw_graph , &gww,&ghh , &gxx,&gyy ) ;
01603 
01604          pinnum = (gra->pin_top < MIN_PIN) ? 0 : gra->pin_top ;
01605          matrix = gra->mat ;
01606 
01607          if( fp != NULL ){
01608            if( pinnum > 0 ){
01609               fprintf(fp , "  %c.%sgraph geom=%dx%d+%d+%d matrix=%d pinnum=%d\n" ,
01610                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix,pinnum ) ;
01611            } else {
01612               fprintf(fp , "  %c.%sgraph geom=%dx%d+%d+%d matrix=%d\n" ,
01613                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix ) ;
01614            }
01615          }
01616 
01617          /*-- 22 Jan 2003: startup script stuff for graph viewers --*/
01618 
01619          if( gp != NULL ){
01620            if( pinnum > 0 ){
01621               fprintf(gp , "OPEN_WINDOW %c.%sgraph geom=%dx%d+%d+%d matrix=%d pinnum=%d\n" ,
01622                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix,pinnum ) ;
01623            } else {
01624               fprintf(gp , "OPEN_WINDOW %c.%sgraph geom=%dx%d+%d+%d matrix=%d\n" ,
01625                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix ) ;
01626            }
01627          }
01628       }
01629 
01630    } /* end of loop over controllers */
01631 
01632 #ifdef ALLOW_PLUGINS
01633    /*-- loop over plugins --*/
01634 
01635    for( ipl=0 ; ipl < npbut ; ipl++ ){
01636 
01637       if( plugint[ipl]->wid == NULL || plugint[ipl]->wid->shell == NULL ) continue ;
01638 
01639       cc = AFNI_controller_index( plugint[ipl]->im3d ) ;
01640 
01641       if( cc < 0 || cc >= MAX_CONTROLLERS || !IM3D_OPEN(plugint[ipl]->im3d) ) continue ;
01642 
01643       if( ! MCW_widget_visible(plugint[ipl]->wid->shell) ) continue ;
01644 
01645       /* it passed all the test, so get its location */
01646 
01647       MCW_widget_geom( plugint[ipl]->wid->shell , &gww,&ghh , &gxx,&gyy ) ;
01648 
01649       /* make a label for the plugin, stripping trailing
01650          blanks and replacing interior blanks with underscores */
01651 
01652       plab = strdup( pluglab[ipl] ) ;
01653       for( ll=strlen(plab) ;                         /* truncate trailing blanks */
01654            ll >= 0 && isspace(plab[ll]) ; ll-- ) plab[ll] = '\0' ;
01655       if( ll < 0 ) continue ;                        /* all blanks?! ERROR */
01656       ll++ ;
01657       for( qq=0 ; qq < ll ; qq++ ) if( isspace(plab[qq]) ) plab[qq] = '_' ;
01658 
01659       if( fp != NULL ) fprintf(fp , "  %c.plugin.%s geom=+%d+%d\n" ,
01660                                     abet[cc] , plab , gxx,gyy ) ;
01661    }
01662 #endif
01663 
01664    /*-- finito! --*/
01665 
01666    if( fp != NULL ) fclose(fp) ;
01667    if( gp != NULL ) fclose(gp) ;
01668    EXRETURN ;
01669 }

Three_D_View* AFNI_find_open_controller void   
 

Find first open controller [05 Mar 2002]. ---------------------------------------------------------------------

Definition at line 7176 of file afni_widg.c.

Referenced by new_RT_input(), PLUG_startup_plugin_CB(), PLUTO_popup_worker(), process_NIML_AFNI_dataset(), process_NIML_Node_ROI(), process_NIML_SUMA_crosshair_xyz(), process_NIML_SUMA_ixyz(), and RT_start_dataset().

THD_warp* AFNI_find_warp THD_3dim_dataset   dset_to,
THD_3dim_dataset   dset_from
 

Find the warp that takes one dataset to another, if it exists. [28 Aug 2002] ------------------------------------------------------------------------

Definition at line 6749 of file afni.c.

References findin_Htable(), GLOBAL_library, THD_3dim_dataset::idcode, MCW_idcode::str, and AFNI_library_type::warptable.

Referenced by AFNI_setup_viewing(), and AFNI_transform_vector().

06750 {
06751    THD_warp *swarp = NULL ;
06752    char idkey[256] ;
06753 
06754    if( GLOBAL_library.warptable == NULL ||
06755        dset_to   == NULL                ||
06756        dset_from == NULL                  ) return NULL ;
06757 
06758    sprintf(idkey,"%s,%s",dset_to->idcode.str,dset_from->idcode.str) ;
06759    swarp = (THD_warp *) findin_Htable( idkey , GLOBAL_library.warptable ) ;
06760    return swarp ;
06761 }

int AFNI_first_tog int   ,
Widget *   
 

Definition at line 6139 of file afni.c.

References ENTRY, and RETURN.

Referenced by AFNI_marks_action_CB(), AFNI_marktog_CB(), AFNI_switchview_CB(), and AFNI_underlay_CB().

06140 {
06141    int ib ;
06142 
06143 ENTRY("AFNI_first_tog") ;
06144 
06145    for( ib=0 ; ib < ntog ; ib++ )
06146       if( XmToggleButtonGetState(tog[ib]) ) break ;
06147 
06148    if( ib >= ntog ) ib = -1 ;
06149    RETURN(ib) ;
06150 }

THD_3dim_dataset* AFNI_follower_dataset THD_3dim_dataset  ,
THD_3dim_dataset  
 

Definition at line 426 of file afni_func.c.

References ADDTO_KILL, AFNI_concatenate_warp(), AFNI_copy_statistics(), THD_3dim_dataset::anat_parent, THD_3dim_dataset::anat_parent_idcode, THD_3dim_dataset::anat_parent_name, THD_datablock::atr, THD_datablock::brick, THD_datablock::brick_bytes, THD_datablock::brick_fac, THD_datablock::brick_lab, THD_diskptr::byte_order, COPY_LMAP_BOUNDS, DATABLOCK_MEM_UNDEFINED, DATABLOCK_TYPE, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, THD_3dim_dataset::death_mark, THD_diskptr::dimsizes, THD_diskptr::directory_name, THD_datablock::diskptr, DISKPTR_TYPE, DSET_HEADNAME, DSET_NUM_TIMES, DSET_unlock, THD_timeaxis::dz_sl, ENTRY, THD_3dim_dataset::func_type, GLOBAL_argopt, THD_3dim_dataset::idcode, IDENTITY_WARP, INIT_KILL, INIT_STAT_AUX, ISVALID_3DIM_DATASET, ISVALID_WARP, THD_3dim_dataset::kl, THD_datablock::kl, THD_3dim_dataset::label1, THD_3dim_dataset::label2, THD_datablock::malloc_type, THD_3dim_dataset::markers, THD_datablock::master_bytes, THD_datablock::master_ival, THD_datablock::master_nvals, MAX_STAT_AUX, MCW_new_idcode, MCW_strncpy, myXtNew, THD_datablock::natr, THD_datablock::natr_alloc, THD_timeaxis::nsl, THD_datablock::nvals, THD_diskptr::nvals, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, THD_datablock::parent, THD_3dim_dataset::parent, PARENTIZE, THD_diskptr::prefix, THD_diskptr::rank, RETURN, THD_warp::rig_bod, THD_3dim_dataset::self_name, THD_3dim_dataset::self_warp, THD_3dim_dataset::stat_aux, THD_3dim_dataset::stats, STATUS, THD_diskptr::storage_mode, STORAGE_UNDEFINED, THD_3dim_dataset::tagset, THD_warp::tal_12, THD_3dim_dataset::taxis, THD_3dim_dataset::tcat_len, THD_3dim_dataset::tcat_list, THD_3dim_dataset::tcat_num, THD_copy_datablock_auxdata(), THD_get_write_order(), THD_init_datablock_brick(), THD_init_datablock_labels(), THD_init_diskptr_names(), THD_MAX_LABEL, THD_MAX_NAME, THD_timeaxis::toff_sl, tross_Copy_History(), THD_3dim_dataset::type, THD_warp::type, THD_datablock::type, THD_diskptr::type, THD_3dim_dataset::view_type, THD_3dim_dataset::vox_warp, THD_3dim_dataset::warp, THD_affine_warp::warp, THD_talairach_12_warp::warp, AF_options::warp_4D, WARP_AFFINE_TYPE, THD_3dim_dataset::warp_parent, THD_3dim_dataset::warp_parent_idcode, THD_3dim_dataset::warp_parent_name, WARP_TALAIRACH_12_TYPE, THD_3dim_dataset::wod_daxes, THD_3dim_dataset::wod_flag, and THD_timeaxis::zorg_sl.

Referenced by AFNI_make_descendants_old().

00428 {
00429    THD_3dim_dataset *new_dset ;
00430    int ii ;
00431 
00432 ENTRY("AFNI_follower_dataset") ;
00433 
00434    /* sanity checks */
00435 
00436    if( ! ISVALID_3DIM_DATASET(anat_parent) ||
00437        ! ISVALID_3DIM_DATASET(data_parent)   ) RETURN(NULL) ;
00438 
00439    /* can't warp a time-dependent dataset (OK, maybe you can) */
00440 
00441    if( DSET_NUM_TIMES(data_parent) > 1 && ! GLOBAL_argopt.warp_4D ) RETURN(NULL) ;
00442 
00443 if(PRINT_TRACING)
00444 { char str[256] ;
00445   sprintf(str,"anat_parent=%s  data_parent=%s",
00446           DSET_HEADNAME(anat_parent) , DSET_HEADNAME(data_parent) ) ;
00447   STATUS(str); }
00448 
00449    /* make new dataset, copying appropriate fields from its various parents */
00450 
00451    new_dset = myXtNew( THD_3dim_dataset ) ; INIT_KILL( new_dset->kl ) ;
00452 
00453    new_dset->type      = data_parent->type ;        /* same data type */
00454    new_dset->func_type = data_parent->func_type ;
00455    new_dset->view_type = anat_parent->view_type ;   /* but different view type */
00456 
00457    new_dset->anat_parent = anat_parent ;            /* what else makes sense? */
00458 
00459    new_dset->tagset = NULL ;  /* Oct 1998 */
00460 
00461    MCW_strncpy( new_dset->anat_parent_name ,
00462                 anat_parent->self_name , THD_MAX_NAME ) ;
00463 
00464    new_dset->anat_parent_idcode = anat_parent->idcode ;
00465 
00466    /* 11/09/94 addition: the data_parent may itself be a warp;
00467        in this case, we want the true warp parent to be the original data */
00468 
00469    new_dset->warp_parent =  (data_parent->warp_parent != NULL)
00470                           ? (data_parent->warp_parent) : (data_parent) ;
00471 
00472    MCW_strncpy( new_dset->warp_parent_name ,
00473                 new_dset->warp_parent->self_name , THD_MAX_NAME ) ;
00474 
00475    new_dset->warp_parent_idcode = new_dset->warp_parent->idcode ;
00476 
00477    new_dset->idcode = MCW_new_idcode() ;
00478 
00479    /* make the actual warp from the warp_parent to this dataset */
00480 
00481    new_dset->vox_warp       = NULL ;
00482    new_dset->warp           = myXtNew( THD_warp ) ;
00483    *(new_dset->warp)        = IDENTITY_WARP ;  /* start with (Dicom) identity */
00484    new_dset->self_warp      = NULL ;  /* 26 Aug 2002 */
00485 
00486    /* follow the links backward from desired view to original view */
00487 
00488    AFNI_concatenate_warp( new_dset->warp , anat_parent->warp ) ;
00489    AFNI_concatenate_warp( new_dset->warp , data_parent->warp ) ;
00490 
00491    /* reset the bounds in the new warp to be the same as in the anat_parent */
00492 
00493    if( ISVALID_WARP(anat_parent->warp) &&
00494        anat_parent->warp->type == new_dset->warp->type ){
00495 
00496       switch( anat_parent->warp->type ){
00497 
00498          case WARP_AFFINE_TYPE:
00499             COPY_LMAP_BOUNDS( new_dset->warp->rig_bod.warp ,
00500                               anat_parent->warp->rig_bod.warp ) ;
00501          break ;
00502 
00503          case WARP_TALAIRACH_12_TYPE:
00504             for( ii=0 ; ii < 12 ; ii++ )
00505                COPY_LMAP_BOUNDS( new_dset->warp->tal_12.warp[ii] ,
00506                                  anat_parent->warp->tal_12.warp[ii] ) ;
00507          break ;
00508       }
00509    }
00510 
00511    /* make up some names for this new dataset */
00512 
00513    MCW_strncpy( new_dset->self_name  ,
00514                 new_dset->warp_parent->self_name , THD_MAX_NAME ) ;
00515    ii = strlen( new_dset->self_name ) ;
00516    new_dset->self_name[ii++] = '@' ;
00517    MCW_strncpy( &(new_dset->self_name[ii]) ,
00518                 VIEW_typestr[new_dset->view_type] , THD_MAX_NAME-ii ) ;
00519 
00520    MCW_strncpy( new_dset->label1 , data_parent->label1 , THD_MAX_LABEL ) ;
00521    MCW_strncpy( new_dset->label2 , data_parent->label2 , THD_MAX_LABEL ) ;
00522 
00523    /* set the axes for this new dataset
00524       (same as anatomy parent, since that's the meaning of this routine) */
00525 
00526    new_dset->daxes     = myXtNew( THD_dataxes ) ; /* copy data axes of */
00527    *(new_dset->daxes)  = *(anat_parent->daxes)  ; /* anatomy parent   */
00528 
00529    new_dset->wod_daxes = NULL ;
00530    new_dset->wod_flag  = True ;
00531 
00532    /* 06 Aug 1996: added ability to use 3D+t datasets here */
00533 
00534    if( DSET_NUM_TIMES(data_parent) < 2 ){
00535       new_dset->taxis = NULL ;
00536    } else {
00537       new_dset->taxis  = myXtNew( THD_timeaxis ) ;  /* new */
00538     *(new_dset->taxis) = *(data_parent->taxis) ;  /* copy insides */
00539 
00540       new_dset->taxis->nsl     = 0 ;                      /* no slice stuff */
00541       new_dset->taxis->toff_sl = NULL ;
00542       new_dset->taxis->zorg_sl = 0.0 ;
00543       new_dset->taxis->dz_sl   = 0.0 ;
00544    }
00545 
00546    /* create a datablock and diskptr, in case the data is ever
00547       filled into memory (instead of wod) and written to disk */
00548 
00549    new_dset->dblk = myXtNew( THD_datablock ) ; INIT_KILL( new_dset->dblk->kl ) ;
00550 
00551    new_dset->dblk->type        = DATABLOCK_TYPE ;
00552    new_dset->dblk->nvals       = data_parent->dblk->nvals ;
00553    new_dset->dblk->malloc_type = DATABLOCK_MEM_UNDEFINED ;
00554    new_dset->dblk->natr        = new_dset->dblk->natr_alloc  = 0 ;
00555    new_dset->dblk->atr         = NULL ;
00556    new_dset->dblk->parent      = (XtPointer) new_dset ;
00557 
00558    if( data_parent->dblk->brick_lab == NULL ){
00559       THD_init_datablock_labels( new_dset->dblk ) ; /* 30 Nov 1997 */
00560    } else {
00561       THD_copy_datablock_auxdata( data_parent->dblk , new_dset->dblk ) ;
00562    }
00563 
00564    DSET_unlock(new_dset) ;  /* Feb 1998 */
00565 
00566    new_dset->dblk->diskptr               = myXtNew( THD_diskptr ) ;
00567    new_dset->dblk->diskptr->type         = DISKPTR_TYPE ;
00568    new_dset->dblk->diskptr->nvals        = data_parent->dblk->nvals ;
00569    new_dset->dblk->diskptr->rank         = 3 ;
00570    new_dset->dblk->diskptr->storage_mode = STORAGE_UNDEFINED ;
00571    new_dset->dblk->diskptr->byte_order   = THD_get_write_order() ;  /* 25 April 1998 */
00572    new_dset->dblk->diskptr->dimsizes[0]  = new_dset->daxes->nxx ;
00573    new_dset->dblk->diskptr->dimsizes[1]  = new_dset->daxes->nyy ;
00574    new_dset->dblk->diskptr->dimsizes[2]  = new_dset->daxes->nzz ;
00575 
00576    new_dset->dblk->brick_fac   = NULL ;  /* initialized below */
00577    new_dset->dblk->brick_bytes = NULL ;
00578    new_dset->dblk->brick       = NULL ;
00579    THD_init_datablock_brick( new_dset->dblk , -1 , data_parent->dblk ) ;
00580 
00581    new_dset->dblk->master_nvals = 0 ;     /* 11 Jan 1999 */
00582    new_dset->dblk->master_ival  = NULL ;
00583    new_dset->dblk->master_bytes = NULL ;
00584 
00585    /* create the names for storage on disk (if ever)
00586       -- note we put it in the same directory as the data_parent */
00587 
00588    THD_init_diskptr_names( new_dset->dblk->diskptr ,
00589                            data_parent->dblk->diskptr->directory_name , NULL ,
00590                            data_parent->dblk->diskptr->prefix ,
00591                            new_dset->view_type , True ) ;
00592 
00593    ADDTO_KILL( new_dset->dblk->kl , new_dset->dblk->diskptr ) ;
00594 
00595    /* oh yeah, set the new_dset kill list,
00596       copy statistics if available, and NULL out any unused stuff */
00597 
00598    ADDTO_KILL( new_dset->kl , new_dset->warp ) ;
00599    ADDTO_KILL( new_dset->kl , new_dset->daxes ) ;
00600    ADDTO_KILL( new_dset->kl , new_dset->dblk ) ;
00601 
00602    new_dset->stats = NULL ;
00603    AFNI_copy_statistics( data_parent , new_dset ) ;
00604 
00605    INIT_STAT_AUX( new_dset , MAX_STAT_AUX , data_parent->stat_aux ) ;
00606 
00607    new_dset->markers     = NULL ;  /* no markers */
00608    new_dset->death_mark  = 0 ;     /* don't kill me! */
00609    new_dset->tcat_list   = 0 ;
00610    new_dset->tcat_num    = 0 ;
00611    new_dset->tcat_len    = NULL ;
00612 
00613 #ifdef ALLOW_DATASET_VLIST
00614    new_dset->pts         = NULL ;
00615 #endif
00616 
00617    PARENTIZE(new_dset,data_parent->parent) ;
00618 
00619    tross_Copy_History( data_parent , new_dset ) ; /* 18 Oct 1999 */
00620 
00621    RETURN(new_dset) ;
00622 }

void AFNI_force_adoption THD_session  ,
Boolean   
 

Definition at line 765 of file afni_func.c.

References AFNI_noenv(), THD_3dim_dataset::anat_parent, DSET_HEADNAME, DSET_in_global_session(), THD_session::dsset, ENTRY, GLOBAL_library, ISANAT, ISVALID_3DIM_DATASET, ISVALID_DSET, ISVALID_SESSION, LAST_VIEW_TYPE, THD_session::lastname, THD_3dim_dataset::markers, THD_session::num_dsset, THD_marker_set::numset, AFNI_library_type::session, STATUS, and VIEW_ORIGINAL_TYPE.

Referenced by AFNI_fimmer_execute(), AFNI_marks_transform_CB(), AFNI_read_inputs(), AFNI_rescan_session_NEW(), AFNI_rescan_session_OLD(), PLUTO_add_dset(), and RT_tell_afni_one().

00766 {
00767    int aa , ff , vv , apref=0 , aset=-1 ;
00768    THD_3dim_dataset *dset ;
00769    int quiet = !AFNI_noenv("AFNI_NO_ADOPTION_WARNING") ; /* 03 Dec 1999 */
00770    int first = 1 ;
00771 
00772 ENTRY("AFNI_force_adoption") ;
00773 
00774    if( ! ISVALID_SESSION(ss) || ss->num_dsset == 0 ) EXRETURN ;
00775 
00776    if( ss == GLOBAL_library.session ) EXRETURN ; /* 21 Dec 2001 */
00777 
00778    /* find a "preferred" parent (one with the most number of markers set) */
00779 
00780    for( aa=0 ; aa < ss->num_dsset ; aa++ ){
00781 
00782 if(PRINT_TRACING)
00783 { char str[256] ;
00784   sprintf(str,"scanning dataset %d for markers",aa) ; STATUS(str) ; }
00785 
00786       dset = ss->dsset[aa][0] ;             /* original view */
00787 
00788       if( ISVALID_3DIM_DATASET(dset) &&     /* if a good dataset */
00789           ISANAT(dset)               &&     /* and is anatomical */
00790           dset->markers != NULL        ){   /* and has markers   */
00791 
00792          if( dset->markers->numset > aset ){ /* and has more markers than before */
00793             apref = aa ;                     /* try this as our "preferred" parent */
00794             aset  = dset->markers->numset ;
00795          }
00796       }
00797    }
00798 
00799    /* count potential parents [08 Dec 1999: modified from 03 Dec 1999 code] */
00800 
00801    vv = 0 ;
00802    if( aset >= 0 ){
00803      for( aa=0 ; aa < ss->num_dsset ; aa++ ){
00804        dset = ss->dsset[aa][0] ;
00805        if( ISVALID_DSET(dset)    &&
00806            ISANAT(dset)          &&
00807            dset->markers != NULL && dset->markers->numset >= aset ) vv++ ;
00808      }
00809    }
00810 
00811    quiet = ( quiet || vv <= 1 ) ; /* be quiet if ordered, or if no alternatives */
00812 
00813 if(aset >= 0 && PRINT_TRACING)
00814 { char str[256] ;
00815   sprintf(str,"session %s: apref=%d [%s] aset=%d",
00816           ss->lastname,apref,DSET_HEADNAME(ss->dsset[apref][0]),aset) ;
00817   STATUS(str) ; }
00818 
00819    /* scan through all datasets, all views */
00820 
00821    for( ff=0 ; ff < ss->num_dsset ; ff++ ){
00822       for( vv=VIEW_ORIGINAL_TYPE ; vv <= LAST_VIEW_TYPE ; vv++ ){
00823 
00824          dset = ss->dsset[ff][vv] ;  /* function that needs parent */
00825 
00826          if( ! ISVALID_3DIM_DATASET(dset) ||
00827              dset->anat_parent != NULL      ) continue ; /* nothing to do */
00828 
00829          if( !do_anats && ISANAT(dset)      ) continue ; /* 28 Jul 2003 */
00830 
00831          if( DSET_in_global_session(dset) ) continue ; /* 25 Dec 2001 */
00832 
00833          if( ISVALID_3DIM_DATASET(ss->dsset[apref][vv]) ){  /* if preferred is OK, */
00834             dset->anat_parent = ss->dsset[apref][vv] ;      /* use it here         */
00835          } else {
00836             for( aa=0 ; aa < ss->num_dsset ; aa++ ){          /* search for something, */
00837                if( ISVALID_3DIM_DATASET(ss->dsset[aa][vv])
00838                    && ISANAT(ss->dsset[aa][vv])           ){  /* anything, and use it  */
00839                   dset->anat_parent = ss->dsset[aa][vv] ; break ;
00840                }
00841             }
00842          }
00843 
00844          if( !quiet && dset->anat_parent != NULL && dset->anat_parent != dset ){
00845             if( first ){
00846               first = 0 ;
00847               fprintf(stderr,
00848                       "\nDatasets with a 'forced adoption' of anat parent:\n") ;
00849             }
00850             fprintf(stderr,
00851                     " %s gets parent %s\n",
00852                     DSET_HEADNAME(dset) ,
00853                     DSET_HEADNAME(dset->anat_parent) ) ;
00854          }
00855       }
00856    }
00857 
00858    EXRETURN ;
00859 }

THD_fvec3 AFNI_forward_warp_vector THD_warp  ,
THD_fvec3   
 

Definition at line 459 of file Vecwarp.c.

00460 {
00461    THD_fvec3 new_fv ;
00462 
00463    if( warp == NULL ) return old_fv ;
00464 
00465    switch( warp->type ){
00466 
00467       default: new_fv = old_fv ; break ;
00468 
00469       case WARP_TALAIRACH_12_TYPE:{
00470          THD_linear_mapping map ;
00471          int iw ;
00472 
00473          /* forward transform each possible case,
00474             and test if result is in bot..top of defined map */
00475 
00476          for( iw=0 ; iw < 12 ; iw++ ){
00477             map    = warp->tal_12.warp[iw] ;
00478             new_fv = MATVEC_SUB(map.mfor,old_fv,map.bvec) ;
00479 
00480             if( new_fv.xyz[0] >= map.bot.xyz[0] &&
00481                 new_fv.xyz[1] >= map.bot.xyz[1] &&
00482                 new_fv.xyz[2] >= map.bot.xyz[2] &&
00483                 new_fv.xyz[0] <= map.top.xyz[0] &&
00484                 new_fv.xyz[1] <= map.top.xyz[1] &&
00485                 new_fv.xyz[2] <= map.top.xyz[2]   ) break ;  /* leave loop */
00486          }
00487       }
00488       break ;
00489 
00490       case WARP_AFFINE_TYPE:{
00491          THD_linear_mapping map = warp->rig_bod.warp ;
00492          new_fv = MATVEC_SUB(map.mfor,old_fv,map.bvec) ;
00493       }
00494       break ;
00495 
00496    }
00497    return new_fv ;
00498 }

MRI_IMAGE* AFNI_func_overlay int    n,
FD_brick   br_fim
 

Make a functional overlay -- very simple routine at present; n = slice index , br_fim = data structure to extract slice from. Note that imseq requires that the overlay be an image of shorts. This routine requires that the function and threshold images be bytes, shorts, or floats (complex-valued functional images are not supported). (The underlay image may be any legal type; this image is not used here.) -------------------------------------------------------------------------

Definition at line 937 of file afni_func.c.

References AFNI_CALL_0D_function, AFNI_CALL_2D_function, AFNI_GOOD_FUNC_DTYPE, AFNI_newfunc_overlay(), AFNI_reset_func_range(), AFNI_set_valabel(), AFNI_yesenv(), MCW_pbar::bigbot, MCW_pbar::bigcolor, MCW_pbar::bigmode, MCW_pbar::bigtop, FD_brick::dset, DSET_BRICK_FACTOR, DSET_load, DSET_NVALS, MRI_IMAGE::dx, MRI_IMAGE::dy, ENTRY, FD_warp_to_mri(), AFNI_view_info::fim_autorange, AFNI_view_info::fim_index, Three_D_View::fim_now, AFNI_view_info::fim_range, AFNI_widget_set::func, AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, AFNI_view_info::func_val, ind, AFNI_function_widgets::inten_pbar, KILL_1MRI, MRI_IMAGE::kind, LOAD_DSET_VIEWS, MRI_BYTE_PTR, mri_copy(), mri_edgize(), MRI_FLOAT_PTR, mri_free(), mri_maxabs(), mri_new(), mri_rgb_transform_nD(), MRI_SHORT_PTR, mri_threshold(), mri_to_float(), MRI_TYPE_NAME, NPANE_MAX, MCW_pbar::num_panes, MRI_IMAGE::nvox, MRI_IMAGE::nx, MRI_IMAGE::ny, MCW_pbar::ov_index, FD_brick::parent, AFNI_function_widgets::pbar_transform0D_func, AFNI_function_widgets::pbar_transform2D_func, MCW_pbar::pval, RETURN, AFNI_view_info::stats_func_ok, AFNI_view_info::stats_thresh_ok, STATUS, AFNI_view_info::thr_index, AFNI_view_info::thr_val, AFNI_view_info::use_posfunc, Three_D_View::vinfo, Three_D_View::vwid, and ZREJ.

Referenced by AFNI_overlay().

00938 {
00939    Three_D_View *im3d ;
00940    MRI_IMAGE *im_thr , *im_fim , *im_ov ;
00941    short *ar_ov ;
00942    short fim_ovc[NPANE_MAX+1] ;
00943    int npix , ii , lp , num_lp , ival ;
00944    float scale_factor , scale_thr ;
00945    MCW_pbar *pbar ;
00946    int simult_thr , need_thr ;
00947    int reject_zero = !AFNI_yesenv("AFNI_OVERLAY_ZERO") ; /* 20 Apr 2005 */
00948 
00949 ENTRY("AFNI_func_overlay") ;
00950 
00951    /* sanity check */
00952 
00953    if( br_fim == NULL || n < 0 ) RETURN(NULL) ;  /* nothing to do */
00954 
00955    im3d = (Three_D_View *) br_fim->parent ;
00956 
00957    ival = im3d->vinfo->thr_index ;  /* threshold sub-brick index */
00958 
00959    /* get the component images */
00960 
00961    LOAD_DSET_VIEWS(im3d) ; /* 02 Nov 1996 */
00962 
00963    need_thr = im3d->vinfo->func_threshold > 0.0 ;
00964 
00965    /* 29 Mar 2005: make sure statistics of overlay dataset are ready */
00966 
00967    DSET_load( im3d->fim_now ) ;
00968    if( !im3d->vinfo->stats_func_ok || (!im3d->vinfo->stats_thresh_ok && need_thr) )
00969      AFNI_reset_func_range( im3d ) ;
00970 
00971    /* get the threshold image? */
00972 
00973    if( need_thr ){
00974 STATUS("fetch im_thr") ;
00975      im_thr = FD_warp_to_mri( n , ival , br_fim ) ;
00976    } else{
00977 STATUS("don't need im_thr") ;
00978      im_thr = NULL ;
00979    }
00980 
00981 #if 1
00982    scale_thr = 1.0f ;   /* FD_warp_to_mri() already scales this */
00983 #else
00984    scale_thr = DSET_BRICK_FACTOR(br_fim->dset,ival) ;
00985    if( scale_thr == 0.0f ) scale_thr = 1.0f ;
00986 #endif
00987 
00988    /* get function image */
00989 
00990    { int ind ;
00991 
00992      ind = im3d->vinfo->fim_index ;
00993      if( ind >= DSET_NVALS(br_fim->dset) )
00994        ind = DSET_NVALS(br_fim->dset) - 1 ;
00995 
00996      if( im_thr != NULL && ind == ival ){   /* 06 Feb 2003: allow for */
00997 STATUS("copy im_thr to im_fim") ;
00998        im_fim = mri_copy( im_thr ) ;        /* func image = thr image */
00999      } else {
01000 STATUS("fetch im_fim") ;
01001        im_fim = FD_warp_to_mri( n, ind, br_fim ) ;  /* get func image */
01002      }
01003      scale_factor = im3d->vinfo->fim_range ;
01004      if( scale_factor == 0.0 ) scale_factor = im3d->vinfo->fim_autorange ;
01005      if( scale_factor == 0.0 ) scale_factor = 1.0 ;
01006 
01007      AFNI_set_valabel( br_fim , n , im_fim , im3d->vinfo->func_val ) ;
01008    }
01009 
01010    /* 04 Mar 2003: convert thresh to float if its datum is unacceptable */
01011    /* 21 Dec 2004: also allow RGB images as threshold via this mechanism */
01012 
01013    if( im_thr != NULL && !(im_thr->kind == MRI_float ||
01014                            im_thr->kind == MRI_short ||
01015                            im_thr->kind == MRI_byte    ) ){
01016 
01017      MRI_IMAGE *qim = mri_to_float(im_thr) ;
01018 STATUS("scaled im_thr to floats") ;
01019      mri_free(im_thr) ; im_thr = qim ; scale_thr = 1.0f ;
01020    }
01021 
01022    AFNI_set_valabel( br_fim , n , im_thr , im3d->vinfo->thr_val ) ;
01023 
01024    /* if component images not good, quit now */
01025 
01026    if( im_fim == NULL ){
01027 STATUS("couldn't get Func image!") ;
01028       KILL_1MRI(im_thr) ; RETURN(NULL) ;
01029    }
01030 
01031    /* 15 Apr 2002: allow overlay image to be pure RBG (no colorscale) */
01032    /* 20 Dec 2004: allow thresholding of RGB overlays */
01033 
01034    if( im_fim->kind == MRI_rgb ){                  /* 15 Apr 2002: RGB overlays */
01035 
01036      if( im_thr != NULL && im_thr != im_fim ){     /* 20 Dec 2004: threshold */
01037        float thresh = im3d->vinfo->func_threshold
01038                     * im3d->vinfo->func_thresh_top / scale_thr ;
01039        mri_threshold( -thresh,thresh , im_thr , im_fim ) ;  /* in place */
01040      }
01041 
01042      /* 27 Apr 2005: transform RGB func image in place? */
01043 
01044      mri_rgb_transform_nD( im_fim, 0, im3d->vwid->func->pbar_transform0D_func );
01045      mri_rgb_transform_nD( im_fim, 2, im3d->vwid->func->pbar_transform2D_func );
01046 
01047      if( im_thr != im_fim ) KILL_1MRI(im_thr) ;  /* toss the trash */
01048      RETURN(im_fim) ;
01049    }
01050 
01051    if( ! AFNI_GOOD_FUNC_DTYPE(im_fim->kind) ){   /* should never happen! */
01052      MRI_IMAGE *qim = mri_to_float(im_fim) ;     /* (but fix it if it does) */
01053 STATUS("had to convert im_fim to floats?????") ;
01054      mri_free(im_fim) ; im_fim = qim ;
01055    }
01056 
01057    /* 15 Jun 2000: transformation of functional image? */
01058 
01059    if( im3d->vwid->func->pbar_transform0D_func != NULL ){
01060      MRI_IMAGE *tim = mri_to_float(im_fim) ;
01061      STATUS("transform0D of im_fim") ;
01062 #if 0
01063      im3d->vwid->func->pbar_transform0D_func( tim->nvox , MRI_FLOAT_PTR(tim) ) ;
01064 #else
01065      AFNI_CALL_0D_function( im3d->vwid->func->pbar_transform0D_func ,
01066                             tim->nvox , MRI_FLOAT_PTR(tim)           ) ;
01067 #endif
01068      if( im_fim != im_thr ) mri_free(im_fim) ;
01069      im_fim = tim ;
01070    }
01071 
01072    if( im3d->vwid->func->pbar_transform2D_func != NULL ){
01073      MRI_IMAGE *tim = mri_to_float(im_fim) ;
01074      STATUS("transform2D of im_fim") ;
01075 #if 0
01076      im3d->vwid->func->pbar_transform2D_func( tim->nx, tim->ny,
01077                                               tim->dx, tim->dy,
01078                                               MRI_FLOAT_PTR(tim) ) ;
01079 #else
01080      AFNI_CALL_2D_function( im3d->vwid->func->pbar_transform2D_func ,
01081                             tim->nx, tim->ny, tim->dx, tim->dy, MRI_FLOAT_PTR(tim) ) ;
01082 #endif
01083      if( im_fim != im_thr ) mri_free(im_fim) ;
01084      im_fim = tim ;
01085    }
01086 
01087    pbar = im3d->vwid->func->inten_pbar ;
01088 
01089    /** 30 Jan 2003:
01090        if the pbar is in "big" mode,
01091        then create an RGB overlay in a separate function **/
01092 
01093    if( pbar->bigmode ){
01094      float thresh ;
01095      thresh =  im3d->vinfo->func_threshold
01096              * im3d->vinfo->func_thresh_top / scale_thr ;
01097 
01098 if( PRINT_TRACING && im_thr != NULL )
01099 { char str[256] ; float tmax ;
01100   sprintf(str,"im_thr: nx=%d ny=%d kind=%s",
01101           im_thr->nx,im_thr->ny,MRI_TYPE_NAME(im_thr)) ; STATUS(str) ;
01102   tmax = (float)mri_maxabs(im_thr) ;
01103   sprintf(str,"maxabs(im_thr)=%g scale_thr=%g thresh=%g",tmax,scale_thr,thresh);
01104   STATUS(str) ;
01105   sprintf(str,"func_threshold=%g func_thresh_top=%g",
01106           im3d->vinfo->func_threshold,im3d->vinfo->func_thresh_top); STATUS(str);
01107 }
01108 
01109      im_ov = AFNI_newfunc_overlay( im_thr , thresh ,
01110                                    im_fim ,
01111                                    scale_factor*pbar->bigbot ,
01112                                    scale_factor*pbar->bigtop ,
01113                                    pbar->bigcolor              ) ;
01114      goto CLEANUP ;
01115    }
01116 
01117    /** create output image the old way (indexes into overlay colors) **/
01118 
01119    npix  = im_fim->nx * im_fim->ny ;
01120    im_ov = mri_new( im_fim->nx , im_fim->ny , MRI_short ) ;
01121    ar_ov = MRI_SHORT_PTR( im_ov ) ;
01122 
01123    /* set overlay colors */
01124 
01125    num_lp = pbar->num_panes ;
01126 
01127    for( lp=0 ; lp < num_lp ; lp++ ) fim_ovc[lp] = pbar->ov_index[lp] ;
01128 
01129    fim_ovc[num_lp] = (im3d->vinfo->use_posfunc) ? (0) : (fim_ovc[num_lp-1]) ;
01130 
01131    /** process im_fim into overlay, depending on data type **/
01132 
01133    simult_thr = (im_thr != NULL) &&                     /* do threshold    */
01134                 (im3d->vinfo->func_threshold > 0.0) &&  /* simultaneously? */
01135                 (im_fim->kind == im_thr->kind) ;        /* (July 15, 1996) */
01136 
01137    switch( im_fim->kind ){
01138 
01139       default:                             /* should not happen! */
01140          if( im_thr != im_fim ) mri_free(im_thr) ;
01141          mri_free(im_fim) ; mri_free(im_ov) ;
01142 STATUS("bad im_fim->kind!") ;
01143       RETURN(NULL) ;
01144 
01145       case MRI_short:{
01146          short *ar_fim = MRI_SHORT_PTR(im_fim) ;
01147          float fim_thr[NPANE_MAX] ;  /* 13 Nov 1996: changed from short */
01148 
01149          for( lp=0 ; lp < num_lp ; lp++ )
01150            fim_thr[lp] = scale_factor * pbar->pval[lp+1] ;
01151 
01152          if( simult_thr ){
01153            float thresh = im3d->vinfo->func_threshold
01154                         * im3d->vinfo->func_thresh_top / scale_thr ;
01155            short *ar_thr = MRI_SHORT_PTR(im_thr) ;
01156            for( ii=0 ; ii < npix ; ii++ ){
01157              if( (ar_thr[ii] > -thresh && ar_thr[ii] < thresh) || ZREJ(ar_fim[ii]) ){
01158                ar_ov[ii] = 0 ;
01159              } else {
01160                for( lp=0 ; lp < num_lp && ar_fim[ii] < fim_thr[lp] ; lp++ ) ; /*nada*/
01161                ar_ov[ii] = fim_ovc[lp] ;
01162              }
01163            }
01164          } else {
01165            for( ii=0 ; ii < npix ; ii++ ){
01166              if( ZREJ(ar_fim[ii]) ){
01167                ar_ov[ii] = 0 ;
01168              } else {
01169                for( lp=0 ; lp < num_lp && ar_fim[ii] < fim_thr[lp] ; lp++ ) ; /*nada*/
01170                  ar_ov[ii] = fim_ovc[lp] ;
01171              }
01172            }
01173          }
01174       }
01175       break ;
01176 
01177       case MRI_byte:{
01178          byte *ar_fim = MRI_BYTE_PTR(im_fim) ;
01179          float fim_thr[NPANE_MAX] ;  /* 13 Nov 1996: changed from short */
01180 
01181          for( lp=0 ; lp < num_lp ; lp++ )
01182            fim_thr[lp] = (pbar->pval[lp+1] > 0.0) ? scale_factor*pbar->pval[lp+1]
01183                                                   : 0.0                          ;
01184 
01185          if( simult_thr ){
01186            float thresh = im3d->vinfo->func_threshold
01187                          * im3d->vinfo->func_thresh_top / scale_thr ;
01188            byte *ar_thr = MRI_BYTE_PTR(im_thr) ;
01189 
01190            for( ii=0 ; ii < npix ; ii++ ){
01191              if( ar_thr[ii] < thresh || ZREJ(ar_fim[ii]) ){
01192                ar_ov[ii] = 0 ;
01193              } else {
01194                for( lp=0 ; lp < num_lp && ar_fim[ii] < fim_thr[lp] ; lp++ ) ; /*nada*/
01195                ar_ov[ii] = fim_ovc[lp] ;
01196              }
01197            }
01198          } else {
01199            for( ii=0 ; ii < npix ; ii++ ){
01200              if( ZREJ(ar_fim[ii]) ){
01201                ar_ov[ii] = 0 ;
01202              } else {
01203                for( lp=0 ; lp < num_lp && ar_fim[ii] < fim_thr[lp] ; lp++ ) ; /*nada*/
01204                  ar_ov[ii] = fim_ovc[lp] ;
01205              }
01206            }
01207          }
01208       }
01209       break ;
01210 
01211       case MRI_float:{
01212          float *ar_fim = MRI_FLOAT_PTR(im_fim) ;
01213          float fim_thr[NPANE_MAX] ;
01214 
01215          for( lp=0 ; lp < num_lp ; lp++ )
01216            fim_thr[lp] = scale_factor * pbar->pval[lp+1] ;
01217 
01218          if( simult_thr ){
01219            float thresh = im3d->vinfo->func_threshold * im3d->vinfo->func_thresh_top ;
01220            float *ar_thr = MRI_FLOAT_PTR(im_thr) ;
01221 
01222            for( ii=0 ; ii < npix ; ii++ ){
01223              if( (ar_thr[ii] > -thresh && ar_thr[ii] < thresh) || ZREJ(ar_fim[ii])  ){
01224                ar_ov[ii] = 0 ;
01225              } else {
01226                for( lp=0 ; lp < num_lp && ar_fim[ii] < fim_thr[lp] ; lp++ ) ; /*nada*/
01227                ar_ov[ii] = fim_ovc[lp] ;
01228              }
01229            }
01230          } else {
01231            for( ii=0 ; ii < npix ; ii++ ){
01232              if( ZREJ(ar_fim[ii]) ){
01233                ar_ov[ii] = 0 ;
01234              } else {
01235                for( lp=0 ; lp < num_lp && ar_fim[ii] < fim_thr[lp] ; lp++ ) ; /*nada*/
01236                ar_ov[ii] = fim_ovc[lp] ;
01237              }
01238            }
01239          }
01240       }
01241       break ;
01242    }
01243 
01244    /** if have yet to do threshold, clip the overlay **/
01245 
01246    if( im_thr != NULL && im3d->vinfo->func_threshold > 0.0 && !simult_thr ){
01247 
01248      switch( im_thr->kind ){
01249 
01250        case MRI_short:{
01251          float thresh = im3d->vinfo->func_threshold
01252                       * im3d->vinfo->func_thresh_top / scale_thr ;
01253          short *ar_thr = MRI_SHORT_PTR(im_thr) ;
01254 
01255          for( ii=0 ; ii < npix ; ii++ )
01256            if( ar_thr[ii] > -thresh && ar_thr[ii] < thresh ) ar_ov[ii] = 0 ;
01257        }
01258        break ;
01259 
01260        case MRI_byte:{
01261          float thresh = im3d->vinfo->func_threshold
01262                       * im3d->vinfo->func_thresh_top / scale_thr ;
01263          byte *ar_thr = MRI_BYTE_PTR(im_thr) ;
01264 
01265          for( ii=0 ; ii < npix ; ii++ )
01266            if( ar_thr[ii] < thresh ) ar_ov[ii] = 0 ;
01267        }
01268        break ;
01269 
01270        case MRI_float:{
01271          float thresh = im3d->vinfo->func_threshold * im3d->vinfo->func_thresh_top ;
01272          float *ar_thr = MRI_FLOAT_PTR(im_thr) ;
01273 
01274          for( ii=0 ; ii < npix ; ii++ )
01275            if( ar_thr[ii] > -thresh && ar_thr[ii] < thresh ) ar_ov[ii] = 0 ;
01276        }
01277        break ;
01278      }
01279    }
01280 
01281    /* delete the overlay if it contains nothing */
01282 
01283    for( ii=0 ; ii < npix ; ii++ ) if( ar_ov[ii] != 0 ) break ;
01284    if( ii == npix ) KILL_1MRI(im_ov) ;  /* no nonzero values --> no overlay */
01285 
01286    /** time to trot, Bwana **/
01287 
01288 CLEANUP:
01289    if( im_thr != NULL && im_thr != im_fim ) mri_free( im_thr ) ;
01290    mri_free( im_fim ) ;
01291 
01292    /* 21 Mar 2005: Hollow out overlay? */
01293 
01294    if( AFNI_yesenv("AFNI_EDGIZE_OVERLAY") ) mri_edgize(im_ov) ;
01295 
01296    RETURN(im_ov) ;
01297 }

void AFNI_funcmode_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 3442 of file afni_func.c.

References AFNI_modify_viewing(), AFNI_widget_set::dmode, DMODE_BRICK_BVAL, ENTRY, AFNI_view_info::force_func_wod, AFNI_datamode_widgets::funcmode_bbox, IM3D_VALID, MCW_val_bbox(), RESET_AFNI_QUIT, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, STATUS, AFNI_view_info::tempflag, Three_D_View::vinfo, and Three_D_View::vwid.

03443 {
03444    Three_D_View *im3d = (Three_D_View *) cd ;
03445    int old_val , new_val ;
03446    THD_fvec3 fv ;
03447    THD_ivec3 iv ;
03448 
03449 ENTRY("AFNI_funcmode_CB") ;
03450 
03451    if( ! IM3D_VALID(im3d) ) EXRETURN ;
03452 
03453    old_val = 1 << im3d->vinfo->force_func_wod ;
03454    new_val = MCW_val_bbox( im3d->vwid->dmode->funcmode_bbox ) ;
03455 
03456 if(PRINT_TRACING){
03457  char str[256] ; sprintf(str,"old_val=%d new_val=%d",old_val,new_val) ;
03458  STATUS(str) ; }
03459 
03460    if( new_val != old_val ){
03461      im3d->vinfo->force_func_wod = (new_val != DMODE_BRICK_BVAL) ;
03462      SHOW_AFNI_PAUSE ;
03463      im3d->vinfo->tempflag = 1 ;           /* 15 Mar 2000 */
03464      AFNI_modify_viewing( im3d , True ) ;  /* redisplay */
03465      SHOW_AFNI_READY ;
03466    }
03467 
03468    RESET_AFNI_QUIT(im3d) ;
03469    EXRETURN ;
03470 }

char* AFNI_get_date_trivia void   
 

Return today's date trivia string.

Definition at line 719 of file afni_friends.c.

References mday::day, mday::label, mday::mon, NOV, NTMAX, OCT, SEP, and tt.

Referenced by SPLASH_imseq_getim().

00720 {
00721    time_t tt ;
00722    struct tm *lt ;
00723    int ii , ntar ;
00724    char *tar[NTMAX] ;
00725 
00726    tt = time(NULL) ;         /* seconds since 01 Jan 1970 */
00727    lt = localtime( &tt ) ;   /* break into pieces */
00728 
00729    /**** find this month and day in the trivia list, if present ****/
00730 
00731    for( ii=ntar=0 ; ntar < NTMAX && holiday[ii].day != 0 ; ii++ )
00732      if( holiday[ii].mon == lt->tm_mon+1 && holiday[ii].day == lt->tm_mday )
00733        tar[ntar++] = holiday[ii].label ;
00734 
00735    /**** Special days not on fixed dates ****/
00736 
00737    /* Day of month = 13 and weekday = Friday */
00738 
00739    if( ntar < NTMAX && lt->tm_mday == 13 && lt->tm_wday == 5 )
00740       tar[ntar++] = "Friday the 13th" ;
00741 
00742    /* 1st Monday in September */
00743 
00744    if( ntar < NTMAX && lt->tm_mon+1 == SEP && lt->tm_wday == 1 && lt->tm_mday <= 7 )
00745       tar[ntar++] = "Labor Day (USA)" ;
00746 
00747    /* 4th Thursday in November */
00748 
00749    if( ntar < NTMAX && lt->tm_mon+1 == NOV && lt->tm_wday == 4 &&
00750                        lt->tm_mday <= 28 && lt->tm_mday >= 22 )
00751       tar[ntar++] = "Thanksgiving (USA)" ;
00752 
00753    /* 1st Monday in October */
00754 
00755    if( ntar < NTMAX && lt->tm_mon+1 == OCT && lt->tm_wday == 1 && lt->tm_mday <= 7 )
00756       tar[ntar++] = "Opening of Supreme Court (USA)" ;
00757 
00758    /* 1st Tuesday after 1st Monday in November */
00759 
00760    if( ntar < NTMAX && lt->tm_mon+1 == NOV && lt->tm_wday == 2 &&
00761                        lt->tm_mday >= 2 && lt->tm_mday <= 8 )
00762       tar[ntar++] = "Election Day (USA)" ;
00763 
00764    /**** select which one to return ***/
00765 
00766    if( ntar == 1 ){
00767      return tar[0] ;
00768    } else if( ntar > 1 ){
00769      static int iold=-1 ;
00770      ii = (lrand48()>>8) % ntar ;
00771      if( ii == iold ) ii = (ii+1)%ntar ;
00772      iold = ii ; return tar[ii] ;
00773    }
00774 
00775    /* default trivia */
00776 
00777    return "[Elen sila lumenn' omentielvo]" ;
00778 }

char* AFNI_get_friend void   
 

Return a "thanks" string (static storage - don't free it).

Definition at line 87 of file afni_friends.c.

References afni_helptypes, AFNI_friend::helpmask, INSPIRATION, KLOSEK, name, NUM_FRIENDS, NUM_HELPTYPES, and YOU_KNOW_WHAT.

Referenced by main(), and SPLASH_imseq_getim().

00088 {
00089    static char buf[256] ; int nf , nh , hmask , qq=0 ;
00090    nf = lrand48() % NUM_FRIENDS ;
00091    do{
00092      nh = lrand48() % NUM_HELPTYPES ; hmask = 1 << nh ; qq++ ;
00093    } while( qq < 73 && (hmask & afni_friends[nf].helpmask) == 0 ) ;
00094 
00095    if( nh == YOU_KNOW_WHAT && nf != KLOSEK ) nh = INSPIRATION; /* only Gosia */
00096 
00097    sprintf( buf  ,
00098             "Thanks go to %s for %s" ,
00099             afni_friends[nf].name , afni_helptypes[nh] ) ;
00100    return buf ;
00101 }

void AFNI_gra_send_CB MCW_grapher   grapher,
FD_brick   br,
GRA_cbs   cbs
 

July 1996: an image viewer changed montage layout *

Definition at line 3454 of file afni.c.

References FD_brick::a123, abs, AFNI_add_timeseries(), AFNI_bucket_CB(), AFNI_fimmer_execute(), AFNI_fimmer_setignore(), AFNI_fimmer_setort(), AFNI_fimmer_setpolort(), AFNI_fimmer_setref(), AFNI_IGNORE_EVERYTHING, AFNI_IGNORE_NOTHING, AFNI_process_drawing(), AFNI_set_viewpoint(), AFNI_time_index_CB(), AFNI_ts_in_library(), AFNI_view_setter(), AFNI_function_widgets::anat_buck_av, AFNI_view_info::anat_index, AV_assign_ival(), AFNI_view_info::crosshair_visible, drive_MCW_grapher(), drive_MCW_imseq(), ENTRY, MCW_grapher::fdw_graph, Three_D_View::fimdata, AFNI_fimmer_type::fimort, AFNI_fimmer_type::fimref, AFNI_widget_set::func, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, GLOBAL_library, graCR_button2_points, graCR_clearfim, graCR_clearort, graCR_destroy, graCR_dofim, graCR_newxyzm, graCR_pickort, graCR_pickref, graCR_polort, graCR_refadd, graCR_refequals, graCR_refsmooth, graCR_setignore, graCR_setindex, graCR_timeseries_library, graCR_winaver, graDR_winaver, AFNI_imaging_widgets::graph_xyz_pb, AFNI_imaging_widgets::graph_yzx_pb, AFNI_imaging_widgets::graph_zxy_pb, GRAPHER_TO_VIEWER, Three_D_View::ignore_seq_callbacks, THD_ivec3::ijk, IM3D_VALID, AFNI_widget_set::imag, IMARR_COUNT, AFNI_fimmer_type::init_ignore, isqDR_overlay, GRA_cbs::key, GRA_cbs::mat, MCW_choose_timeseries(), MCW_invert_widget(), MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, MIN, MRI_FLOAT_PTR, mri_free(), mri_to_float(), myXtFree, FD_brick::n1, FD_brick::n2, FD_brick::n3, NORMAL_cursorize, MRI_IMAGE::nvox, MRI_IMAGE::nx, MRI_IMAGE::ny, MCW_grapher::option_rowcol, OSFILT, MCW_grapher::parent, GRA_cbs::reason, REDISPLAY_OPTIONAL, REDISPLAY_OVERLAY, AFNI_fimmer_type::refadd_count, SINGLE_MODE, MCW_grapher::status, STATUS, TEMP_IVEC3, THD_fdind_to_3dind(), AFNI_imaging_widgets::time_index_av, AFNI_view_info::time_on, AFNI_library_type::timeseries, GRA_cbs::userdata, Three_D_View::vinfo, Three_D_View::vwid, GRA_cbs::xcen, GRA_cbs::ycen, and GRA_cbs::zcen.

Referenced by AFNI_brick_to_mri().

03455 {
03456    Three_D_View *im3d = (Three_D_View *)grapher->parent ;
03457 
03458 ENTRY("AFNI_gra_send_CB") ;
03459 
03460 if(PRINT_TRACING)
03461 { char str[256] ; sprintf(str,"reason=%d",cbs->reason) ; STATUS(str) ; }
03462 
03463    if( ! IM3D_VALID(im3d) ||
03464        (im3d->ignore_seq_callbacks==AFNI_IGNORE_EVERYTHING) ) EXRETURN ;
03465 
03466    switch( cbs->reason ){
03467 
03468       default: break ;  /* unimplemented reasons */
03469 
03470       /*** Death ***/
03471 
03472       case graCR_destroy:{
03473          MCW_grapher * gxyz = im3d->g123 ,
03474                      * gyzx = im3d->g231 ,
03475                      * gzxy = im3d->g312  ;
03476          MCW_imseq * seq = GRAPHER_TO_VIEWER(im3d,grapher) ;
03477          Widget w ;
03478 
03479               if( grapher == gxyz ){
03480                  w = im3d->vwid->imag->graph_xyz_pb ; im3d->g123 = NULL ;
03481                  STATUS("destruction of g123") ;
03482          }
03483          else if( grapher == gyzx ){
03484                  w = im3d->vwid->imag->graph_yzx_pb ; im3d->g231 = NULL ;
03485                  STATUS("destruction of g231") ;
03486          }
03487          else if( grapher == gzxy ){
03488                  w = im3d->vwid->imag->graph_zxy_pb ; im3d->g312 = NULL ;
03489                  STATUS("destruction of g312") ;
03490          }
03491          else
03492                  EXRETURN ;  /* something goofy happened? */
03493 
03494          myXtFree( grapher->status ) ;  /* 08 Mar 1999: via mcw_malloc.c */
03495          myXtFree( grapher ) ;          /* free the data space */
03496          MCW_invert_widget(w) ;         /* back to normal */
03497          NORMAL_cursorize(w) ;          /* 20 Jul 2005 */
03498 
03499          /* redisplay the crosshairs, if needed */
03500 
03501          if( seq != NULL && im3d->vinfo->crosshair_visible==True &&
03502              im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING     )
03503 
03504             drive_MCW_imseq( seq , isqDR_overlay , (XtPointer) -1 ) ;
03505       }
03506       MPROBE ;
03507       break ;  /* end of destroy */
03508 
03509       /*** User sets new location ***/
03510 
03511       case graCR_newxyzm:{
03512          THD_ivec3 id ;
03513 
03514          if( cbs->xcen >= 0 && cbs->xcen < br->n1 &&
03515              cbs->ycen >= 0 && cbs->ycen < br->n2 &&
03516              cbs->zcen >= 0 && cbs->zcen < br->n3   ){
03517 
03518             id = THD_fdind_to_3dind(
03519                     br , TEMP_IVEC3(cbs->xcen,cbs->ycen,cbs->zcen) );
03520 
03521 if(PRINT_TRACING)
03522 { char str[256] ;
03523   sprintf(str," 3D dataset coordinates %d %d %d",
03524           id.ijk[0],id.ijk[1],id.ijk[2] ) ; STATUS(str) ; }
03525 
03526             if( im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING ){
03527                AFNI_view_setter(im3d,NULL) ;
03528                AFNI_set_viewpoint(
03529                   im3d ,
03530                   id.ijk[0] , id.ijk[1] , id.ijk[2] ,
03531                   (im3d->vinfo->crosshair_visible==True) ?
03532                   REDISPLAY_OVERLAY : REDISPLAY_OPTIONAL ) ;
03533             }
03534          }
03535       }
03536       break ; /* end of newxyzm */
03537 
03538       /*** User asks for a reference function ***/
03539 
03540       case graCR_pickref:{
03541 
03542 STATUS("graCR_pickref") ;
03543 
03544          if( IMARR_COUNT(GLOBAL_library.timeseries) > 0 ){
03545             int init_ts = AFNI_ts_in_library( im3d->fimdata->fimref ) ;
03546 
03547             MCW_choose_timeseries( grapher->fdw_graph , "FIM Reference Vector" ,
03548                                    GLOBAL_library.timeseries , init_ts ,
03549                                    AFNI_fimmer_pickref_CB , (XtPointer) im3d ) ;
03550          } else {
03551             (void) MCW_popup_message(
03552                       grapher->option_rowcol ,
03553                       "No timeseries library\nexists to pick from!" ,
03554                       MCW_USER_KILL | MCW_TIMER_KILL ) ;
03555          }
03556       }
03557       break ; /* end of pickref */
03558 
03559       /*** User asks for an ort function ***/
03560 
03561       case graCR_pickort:{
03562 
03563 STATUS("graCR_pickort") ;
03564 
03565          if( IMARR_COUNT(GLOBAL_library.timeseries) > 0 ){
03566             int init_ts = AFNI_ts_in_library( im3d->fimdata->fimort ) ;
03567 
03568             MCW_choose_timeseries( grapher->fdw_graph , "FIM Ort Vector" ,
03569                                    GLOBAL_library.timeseries , init_ts ,
03570                                    AFNI_fimmer_pickort_CB , (XtPointer) im3d ) ;
03571          } else {
03572             (void) MCW_popup_message(
03573                       grapher->option_rowcol ,
03574                       "No timeseries library\nexists to pick from!" ,
03575                       MCW_USER_KILL | MCW_TIMER_KILL ) ;
03576          }
03577       }
03578       break ; /* end of pickort */
03579 
03580 
03581       /*** User asks to clear FIM ***/
03582 
03583       case graCR_clearfim:{
03584          AFNI_fimmer_setref( im3d , NULL ) ;
03585          im3d->fimdata->refadd_count = 0 ;
03586       }
03587       break ; /* end of clearfim */
03588 
03589       /*** User asks to clear Ort ***/
03590 
03591       case graCR_clearort:{
03592          AFNI_fimmer_setort( im3d , NULL ) ;
03593       }
03594       break ; /* end of clearfim */
03595 
03596       /*** 27 Jan 2004:
03597            User toggled WinAver on in one graph window,
03598            so we toggle it off in the other windows.    ***/
03599 
03600       case graCR_winaver:{
03601         if( im3d->g123 != NULL && im3d->g123 != grapher )
03602           drive_MCW_grapher( im3d->g123 , graDR_winaver , 0 ) ;
03603         if( im3d->g231 != NULL && im3d->g231 != grapher )
03604           drive_MCW_grapher( im3d->g231 , graDR_winaver , 0 ) ;
03605         if( im3d->g312 != NULL && im3d->g312 != grapher )
03606           drive_MCW_grapher( im3d->g312 , graDR_winaver , 0 ) ;
03607       }
03608       break ; /* end of winaver */
03609 
03610       /*** 12 Nov 1996:
03611            User supplies a timeseries to add to the global library ***/
03612 
03613       case graCR_timeseries_library:{
03614          MRI_IMAGE * tsim = (MRI_IMAGE *) cbs->userdata ;
03615 
03616          AFNI_add_timeseries( tsim ) ;
03617       }
03618       break ; /* end of timeseries_library */
03619 
03620       /*** User supplies a timeseries for FIM (equals or add) ***/
03621 
03622       case graCR_refadd:
03623       case graCR_refequals:{
03624          MRI_IMAGE * tsim = (MRI_IMAGE *) cbs->userdata ;
03625          MRI_IMAGE * qim , * sim ;
03626          float * sar , * qar ;
03627 
03628          if( tsim != NULL ){
03629             qim = mri_to_float( tsim ) ;        /* make a copy of input */
03630             if( im3d->fimdata->fimref == NULL   ||
03631                 cbs->reason == graCR_refequals  ||
03632                 im3d->fimdata->refadd_count < 1   ){
03633 
03634                /** equals **/
03635 
03636                AFNI_fimmer_setref( im3d , qim ) ;
03637                im3d->fimdata->refadd_count = 1 ;
03638 
03639             } else {
03640                int jj,ii , nxs , nyy , nxq , nxx , npix ;
03641                float fs , fq ;
03642 
03643                /** average **/
03644 
03645                sim  = mri_to_float( im3d->fimdata->fimref ) ; /* add into this copy */
03646                sar  = MRI_FLOAT_PTR(sim) ;
03647                qar  = MRI_FLOAT_PTR(qim) ;
03648                nxs  = sim->nx ; nxq = qim->nx ; nxx = MIN(nxs,nxq) ;
03649                nyy  = MIN( sim->ny , qim->ny ) ;
03650                npix = MIN( sim->nvox , qim->nvox ) ;
03651 
03652                fq = 1.0/( im3d->fimdata->refadd_count + 1.0 ) ;
03653                fs = 1.0 - fq ;
03654 
03655                for( jj=0 ; jj < nyy ; jj++ ){
03656                   for( ii=0 ; ii < nxx ; ii++ ){
03657                      if( sar[ii+jj*nxs] >= WAY_BIG || qar[ii+jj*nxq] >= WAY_BIG )
03658                         sar[ii+jj*nxs] = WAY_BIG ;
03659                      else
03660                         sar[ii+jj*nxs] = fs * sar[ii+jj*nxs] + fq * qar[ii+jj*nxq] ;
03661                   }
03662                }
03663                mri_free( qim ) ;
03664 
03665                AFNI_fimmer_setref( im3d , sim ) ;  /* since caller may free it later */
03666                im3d->fimdata->refadd_count++ ;
03667             }
03668          }
03669       }
03670       break ;
03671 
03672       /*** User asks to smooth reference ***/
03673 
03674       case graCR_refsmooth:{
03675          if( im3d->fimdata->fimref != NULL ){
03676             MRI_IMAGE * sim = mri_to_float(im3d->fimdata->fimref) ; /* copy */
03677             float * sar = MRI_FLOAT_PTR(sim) ;
03678             float aa,bb,cc ;
03679             int ii,jj , nx=sim->nx , ny=sim->ny ;
03680 
03681             for( jj=0 ; jj < ny ; jj++ ){
03682                bb = sar[jj*nx] ; cc = sar[1+jj*nx] ;
03683                for( ii=1 ; ii < nx-1 ; ii++ ){
03684                   aa = bb ; bb = cc ; cc = sar[ii+1+jj*nx] ;
03685                   if( aa < WAY_BIG && bb < WAY_BIG &&
03686                       cc < WAY_BIG && ii > im3d->fimdata->init_ignore )
03687                      sar[ii+jj*nx] = OSFILT(aa,bb,cc) ;
03688                }
03689             }
03690             AFNI_fimmer_setref( im3d , sim ) ;
03691          }
03692       }
03693       break ;
03694 
03695       /*** User asks to do fim! ***/
03696 
03697       case graCR_dofim:{
03698          AFNI_fimmer_execute( im3d , cbs->key , cbs->mat ) ;
03699       }
03700       break ; /* end of dofim */
03701 
03702       /*** User sets initial ignore count ***/
03703 
03704       case graCR_setignore:{
03705          AFNI_fimmer_setignore( im3d , cbs->key ) ;
03706       }
03707       break ;
03708 
03709       /*** User sets the polort order [27 May 1999] ***/
03710 
03711       case graCR_polort:{
03712          AFNI_fimmer_setpolort( im3d , cbs->key ) ;
03713       }
03714       break ;
03715 
03716       /*** User sets time_index (from graph) ***/
03717       /*** 24 Jan 2001: or bucket index      ***/
03718       /*** 29 Jul 2003: time_index and anat_index are almost merged now ***/
03719 
03720       case graCR_setindex:{
03721          MCW_arrowval *tav = im3d->vwid->imag->time_index_av ;
03722          MCW_arrowval *aav = im3d->vwid->func->anat_buck_av ;
03723          int new_index = cbs->key ;
03724 
03725          if( new_index != im3d->vinfo->anat_index ){
03726            if( im3d->vinfo->time_on ){
03727              AV_assign_ival( tav , new_index ) ;               /* set time_index */
03728              AFNI_time_index_CB( tav, (XtPointer) im3d ); /* will set anat_index */
03729            } else {
03730              AV_assign_ival( aav, new_index ) ;       /* set anat index directly */
03731              AFNI_bucket_CB( aav, im3d ) ;
03732            }
03733          }
03734       }
03735       break ;
03736 
03737       /*** Feb 1998: user clicked button2 ***/
03738 
03739       case graCR_button2_points:{
03740          THD_ivec3 id ;
03741          int fixed_plane ;
03742 
03743          if( cbs->xcen >= 0 && cbs->xcen < br->n1 &&
03744              cbs->ycen >= 0 && cbs->ycen < br->n2 &&
03745              cbs->zcen >= 0 && cbs->zcen < br->n3   ){
03746 
03747             /* translate image to dataset coordinates */
03748 
03749             id = THD_fdind_to_3dind(
03750                     br , TEMP_IVEC3(cbs->xcen,cbs->ycen,cbs->zcen) );
03751 
03752             /* send a single point */
03753 
03754             fixed_plane = abs(br->a123.ijk[2]) ;
03755 
03756             AFNI_process_drawing( im3d , SINGLE_MODE + fixed_plane ,
03757                                   1, &id.ijk[0], &id.ijk[1], &id.ijk[2] ) ;
03758          }
03759       }
03760       break ;
03761 
03762    } /* end of switch on callback reasons */
03763 
03764   EXRETURN ;
03765 }

void AFNI_handler char *    msg
 

16 July 1997: orientation code change *

Definition at line 78 of file aiv.c.

Referenced by main().

00078 { return ; } /* hide X11 warnings */

void AFNI_hidden_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7912 of file afni_func.c.

void AFNI_hidden_EV Widget    w,
XtPointer    cd,
XEvent *    ev,
Boolean *    continue_to_dispatch
 

add files we found to list *

Definition at line 8196 of file afni_func.c.

void AFNI_hidden_pts_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

void AFNI_hintize_pbar MCW_pbar  ,
float   
 

Definition at line 248 of file afni_func.c.

References AV_fval_to_char(), MCW_pbar::bigfac, MCW_pbar::bigmode, ENTRY, MCW_register_hint(), MCW_pbar::num_panes, MCW_pbar::panes, MCW_pbar::pval, sb, and top.

Referenced by AFNI_drive_set_pbar_all(), AFNI_inten_pbar_CB(), AFNI_range_bbox_CB(), RCREND_choose_av_CB(), RCREND_color_pbar_CB(), RCREND_finalize_func_CB(), RCREND_range_av_CB(), RCREND_range_bbox_CB(), REND_choose_av_CB(), REND_color_pbar_CB(), REND_finalize_func_CB(), REND_range_av_CB(), and REND_range_bbox_CB().

00249 {
00250    int ip , np ;
00251    Widget w ;
00252    char sbot[16],stop[16] , hint[64] , *sb,*st ;
00253    float bot , top ;
00254 
00255 ENTRY("AFNI_hintize_pbar") ;
00256 
00257    if( pbar == NULL || fac == 0.0 ) EXRETURN ;  /* bad */
00258 
00259    if( pbar->bigmode ){
00260      MCW_register_hint( pbar->panes[0] ,
00261                         "Button-1=flip;  Button-3=menu" ) ;
00262      pbar->bigfac = fac ;                      /* 11 Feb 2003 */
00263    } else {
00264      np = pbar->num_panes ;
00265      for( ip=0 ; ip < np ; ip++ ){
00266        w   = pbar->panes[ip] ;          /* the widget for the ip-th pane */
00267        top = pbar->pval[ip]   * fac ;   /* scaled top value */
00268        bot = pbar->pval[ip+1] * fac ;   /* scaled bot value */
00269        AV_fval_to_char( bot , sbot ) ;  /* convert to a nice string */
00270        AV_fval_to_char( top , stop ) ;
00271        sb = (sbot[0] == ' ') ? sbot+1 : sbot ;  /* skip leading blanks */
00272        st = (stop[0] == ' ') ? stop+1 : stop ;
00273        sprintf(hint,"%s .. %s",sb,st) ;         /* create hint */
00274        MCW_register_hint( w , hint ) ;          /* send to hint system */
00275      }
00276    }
00277 
00278    EXRETURN ;
00279 }

void AFNI_ijk_lock_change_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 273 of file afni_lock.c.

References AFNI_library_type::controllers, AFNI_widget_set::dmode, ENTRY, GLOBAL_library, AFNI_library_type::ijk_lock, AFNI_datamode_widgets::ijk_lock_bbox, IM3D_VALID, MAX_CONTROLLERS, MCW_set_bbox(), MCW_val_bbox(), RESET_AFNI_QUIT, and Three_D_View::vwid.

00274 {
00275    Three_D_View *im3d = (Three_D_View *) cd ;
00276    Three_D_View *qq3d ;
00277    int           bval , ii , bold ;
00278 
00279 ENTRY("AFNI_ijk_lock_change_CB") ;
00280 
00281    if( ! IM3D_VALID(im3d) ) EXRETURN ;
00282 
00283    /* get current global setting and compare to changed lock box */
00284 
00285    bold = GLOBAL_library.ijk_lock ;
00286    bval = MCW_val_bbox( im3d->vwid->dmode->ijk_lock_bbox ) ;
00287    if( bval == bold ) EXRETURN ;                     /* same --> nothing to do */
00288 
00289    /* new value --> save in global setting */
00290 
00291    GLOBAL_library.ijk_lock = bval ;
00292 
00293    /* set all other controller lock boxes to the same value */
00294 
00295    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
00296      qq3d = GLOBAL_library.controllers[ii] ;
00297      if( qq3d == im3d || ! IM3D_VALID(qq3d) ) continue ;
00298 
00299      MCW_set_bbox( qq3d->vwid->dmode->ijk_lock_bbox , bval ) ;
00300    }
00301    RESET_AFNI_QUIT(im3d) ;
00302    EXRETURN ;
00303 }

void AFNI_ijk_to_xyz THD_3dim_dataset  ,
int   ,
int   ,
int   ,
float *   ,
float *   ,
float *   
 

Definition at line 878 of file afni_receive.c.

References ISVALID_DSET, TEMP_IVEC3, THD_3dind_to_3dmm(), and THD_fvec3::xyz.

00881 {
00882    THD_fvec3 fv ;
00883 
00884    if( ! ISVALID_DSET(dset) ) return ;
00885 
00886    fv  = THD_3dind_to_3dmm( dset , TEMP_IVEC3(ii,jj,kk) ) ;
00887    *xx = fv.xyz[0] ;
00888    *yy = fv.xyz[1] ;
00889    *zz = fv.xyz[2] ;
00890    return ;
00891 }

void AFNI_imag_pop_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7888 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_controller_index(), AFNI_driver(), AFNI_jumpto_CB(), AFNI_jumpto_ijk_CB(), AFNI_misc_CB(), AFNI_mnito_CB(), AFNI_pop_whereami_kill(), AFNI_set_viewpoint(), AFNI_sumato_CB(), AFNI_talto_CB(), AFNI_ttatlas_query(), AFNI_view_setter(), AFNI_widget_set::butx, AFNI_widget_set::buty, CAN_TALTO, client_data, AFNI_library_type::cord, AFNI_widget_set::dmode, drive_MCW_imseq(), ENTRY, free, GLOBAL_library, AFNI_view_info::i1_old, IM3D_VALID, AFNI_widget_set::imag, ISQ_REALZ, isqDR_onoffwid, isqDR_togwid, AFNI_view_info::j2_old, AFNI_view_info::k3_old, malloc, MCW_choose_string(), MCW_choose_strlist(), MCW_register_help(), MCW_register_hint(), MCW_textwinkill_CB(), MCW_widget_geom(), AFNI_datamode_widgets::misc_environ_pb, name, new_MCW_textwin_2001(), NULLIFY_ON_DESTROY, THD_coorder::orcode, AFNI_imaging_widgets::pop_drawdataset_pb, AFNI_imaging_widgets::pop_environment_pb, AFNI_imaging_widgets::pop_imageonly_pb, AFNI_imaging_widgets::pop_jumpback_pb, AFNI_imaging_widgets::pop_jumpto_ijk_pb, AFNI_imaging_widgets::pop_jumpto_pb, AFNI_imaging_widgets::pop_mnito_pb, AFNI_imaging_widgets::pop_sumato_pb, AFNI_imaging_widgets::pop_talto_pb, AFNI_imaging_widgets::pop_ttren_pb, AFNI_imaging_widgets::pop_whereami_pb, AFNI_imaging_widgets::pop_whereami_twin, AFNI_imaging_widgets::popmenu, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, SAVE_VPT, SESSION_HAS_SUMA, Three_D_View::ss_now, TEXT_READONLY, AFNI_widget_set::top_shell, TTO_COUNT, TTO_current, TTO_FORMAT, TTO_labeled, TTO_labels, TTO_list, TTO_LMAX, TTRR_popup(), Three_D_View::type, VIEW_TALAIRACH_TYPE, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, MCW_imseq::wbar, MCW_textwin::wshell, and MCW_textwin::wtext.

07890 {
07891    Three_D_View *im3d = (Three_D_View *) client_data ;
07892    MCW_imseq *seq ;
07893 
07894 ENTRY("AFNI_imag_pop_CB") ;
07895 
07896    if( ! IM3D_VALID(im3d) ) EXRETURN ;
07897 
07898    XtVaGetValues( im3d->vwid->imag->popmenu, XmNuserData, &seq, NULL ) ;
07899    AFNI_view_setter(im3d,seq) ;
07900 
07901    /*-- jump back to old location --*/
07902 
07903    if( w == im3d->vwid->imag->pop_jumpback_pb ){
07904      int ij,jj,kk ;
07905 
07906      ij = im3d->vinfo->i1_old ;  /* extract old place */
07907      jj = im3d->vinfo->j2_old ;
07908      kk = im3d->vinfo->k3_old ;
07909 
07910      SAVE_VPT(im3d) ;  /* save current place as old one */
07911      AFNI_set_viewpoint( im3d , ij,jj,kk , REDISPLAY_OVERLAY ) ; /* jump */
07912    }
07913 
07914    /*-- switch window display mode --*/
07915 
07916    else if( w == im3d->vwid->imag->pop_imageonly_pb ){
07917       if( ISQ_REALZ(seq) )
07918          drive_MCW_imseq( seq , isqDR_onoffwid , (XtPointer) isqDR_togwid ) ;
07919    }
07920 
07921    /*-- jump to a point --*/
07922 
07923    else if( w == im3d->vwid->imag->pop_jumpto_pb &&
07924             im3d->type == AFNI_3DDATA_VIEW         ){
07925 
07926       char tbuf[128] ;
07927 
07928       if( ISQ_REALZ(seq) ){
07929         sprintf(tbuf , "Enter new x y z (%s mm):" , GLOBAL_library.cord.orcode ) ;
07930         MCW_choose_string( seq->wbar , tbuf , NULL ,
07931                            AFNI_jumpto_CB , (XtPointer) im3d ) ;
07932       }
07933    }
07934 
07935    else if( w == im3d->vwid->imag->pop_jumpto_ijk_pb &&
07936             im3d->type == AFNI_3DDATA_VIEW             ){
07937 
07938       if( ISQ_REALZ(seq) ){
07939          MCW_choose_string( seq->wbar , "Enter new i j k:" , NULL ,
07940                             AFNI_jumpto_ijk_CB , (XtPointer) im3d ) ;
07941       }
07942    }
07943 
07944    /*-- 01 May 2002: jump to MNI coordinates --*/
07945 
07946    else if( w == im3d->vwid->imag->pop_mnito_pb &&
07947             im3d->type == AFNI_3DDATA_VIEW        ){
07948 
07949       if( ISQ_REALZ(seq) && CAN_TALTO(im3d) ){
07950          MCW_choose_string( seq->wbar , "Enter MNI x,y,z:" , NULL ,
07951                             AFNI_mnito_CB , (XtPointer) im3d ) ;
07952       } else {
07953          XBell(XtDisplay(w),100) ; /* should never happen */
07954       }
07955    }
07956 
07957    /*-- 06 Mar 2002: jump to a node in a surface --*/
07958 
07959    else if( w == im3d->vwid->imag->pop_sumato_pb &&
07960             SESSION_HAS_SUMA(im3d->ss_now)       &&
07961             im3d->type == AFNI_3DDATA_VIEW         ){
07962 
07963       if( ISQ_REALZ(seq) ){
07964          MCW_choose_string( seq->wbar , "Enter SUMA node ID:" , NULL ,
07965                             AFNI_sumato_CB , (XtPointer) im3d ) ;
07966       }
07967    }
07968 
07969    /*-- jump to a predetermined Talairach anatomical reference point --*/
07970 
07971    else if( w == im3d->vwid->imag->pop_talto_pb &&
07972             im3d->type == AFNI_3DDATA_VIEW      &&
07973             CAN_TALTO(im3d)                       ){
07974 
07975       if( ! TTO_labeled ){  /* initialize labels */
07976          int ii ;
07977          for( ii=0 ; ii < TTO_COUNT ; ii++ ){
07978             TTO_labels[ii] = (char *) malloc( sizeof(char) * TTO_LMAX ) ;
07979             sprintf( TTO_labels[ii] , TTO_FORMAT , TTO_list[ii].name ,
07980                      TTO_list[ii].xx , TTO_list[ii].yy , TTO_list[ii].zz ) ;
07981          }
07982          TTO_labeled = 1 ;
07983       }
07984       if( ISQ_REALZ(seq) ){
07985          MCW_choose_strlist( seq->wbar ,
07986                              "Brain Structure (from San Antonio Talairach Daemon)" ,
07987                              TTO_COUNT , TTO_current , TTO_labels ,
07988                              AFNI_talto_CB , (XtPointer) im3d ) ;
07989       }
07990    }
07991 
07992    /*---- 10 Jul 2001: Talairach "Where Am I?" ----*/
07993 
07994    else if( w == im3d->vwid->imag->pop_whereami_pb &&
07995             w != NULL                              &&
07996             im3d->type == AFNI_3DDATA_VIEW         &&
07997             CAN_TALTO(im3d)                          ){
07998 
07999       char *tlab ;
08000 
08001       /*- if one is already open, kill it -*/
08002 
08003       if( im3d->vwid->imag->pop_whereami_twin != NULL ){
08004          MCW_textwinkill_CB(NULL,
08005                             (XtPointer)im3d->vwid->imag->pop_whereami_twin,NULL);
08006          im3d->vwid->imag->pop_whereami_twin = NULL ;
08007       }
08008 
08009       /*- get TT atlas location, if any -*/
08010 
08011       tlab = AFNI_ttatlas_query( im3d ) ;
08012 
08013       /*- open a window to show it -*/
08014 
08015       if( tlab != NULL ){
08016 
08017          im3d->vwid->imag->pop_whereami_twin =
08018            new_MCW_textwin_2001( seq->wbar , tlab , TEXT_READONLY ,
08019                                  AFNI_pop_whereami_kill , im3d     ) ;
08020 
08021 #if 0
08022          /* 31 Jul 2001: NULL out the pointer when the window is destroyed */
08023 
08024          NULLIFY_ON_DESTROY( im3d->vwid->imag->pop_whereami_twin ,
08025                              im3d->vwid->imag->pop_whereami_twin->wshell ) ;
08026 #endif
08027 
08028          XtVaSetValues( im3d->vwid->imag->pop_whereami_twin->wtext ,
08029                           XmNresizeHeight , True ,
08030                           XmNresizeWidth  , True ,
08031                         NULL ) ;
08032 
08033          MCW_register_hint( im3d->vwid->imag->pop_whereami_twin->wtext ,
08034                             "Use BHelp for documentation" ) ;
08035 
08036          MCW_register_help( im3d->vwid->imag->pop_whereami_twin->wtext ,
08037           "Lists the brain structures near the crosshair focus point\n"
08038           "according to the Talairach Daemon database (kindly provided\n"
08039           "by Jack Lancaster and Peter Fox of RIC UTHSCSA).\n"
08040           "\n"
08041           "The search is conducted outwards from the focus point, until\n"
08042           "9 different structures are found, or a 7 mm radius is reached,\n"
08043           "whichever occurs first. (Distances are rounded to nearest 1 mm,\n"
08044           "the grid spacing on which the database is constructed.) Labels\n"
08045           "reported on different output lines came from different voxels.\n"
08046           "\n"
08047           "In the database, some voxels have 2 labels - a larger scale\n"
08048           "'gyral' name and a finer scale 'area' name.  Locations that\n"
08049           "are doubly labeled will appear with a listing like\n"
08050           "    Within 2 mm: Right Precuneus -AND- Right Brodmann area 31\n"
08051           "In the database there are\n"
08052           "    1,205,737 voxels with at least one label\n"
08053           "      709,953 voxels with only a 'gyral' label\n"
08054           "       15,898 voxels with only a 'area' label\n"
08055           "      479,886 voxels with both types of labels\n"
08056           "A list of all the labels (of either type) is presented by the\n"
08057           "'Talairach to' control.  In the database, there are\n"
08058           "           50 'gyral' labels (times 2 for Left and Right)\n"
08059           "           68 'area' labels\n"
08060           "          355 distinct combinations of labels\n"
08061           "Note Very Well:\n"
08062           "* This feature of AFNI is experimental, and is subject to change.\n"
08063           "* The Atlas is only useful as a ROUGH guide to determining where\n"
08064           "    you are in any individual brain.  Do not rely exclusively on\n"
08065           "    the Atlas for brain region identification: you must use your\n"
08066           "    knowledge, skills, and abilities as well.\n"
08067           "* Do NOT use this feature for surgical or therapeutic planning!!!"
08068          ) ;
08069 
08070          free(tlab) ;
08071       }
08072    }
08073 
08074    /*---- 12 Jul 2001 ----*/
08075 
08076    else if( w == im3d->vwid->imag->pop_ttren_pb           &&
08077             w != NULL                                     &&
08078             im3d->type == AFNI_3DDATA_VIEW                &&
08079             im3d->vinfo->view_type == VIEW_TALAIRACH_TYPE && /* 01 Aug 2001 */
08080             CAN_TALTO(im3d)                                 ){
08081 
08082       TTRR_popup( im3d ) ;
08083    }
08084 
08085    /*---- 05 Nov 2003: start the Edit Environment pseudo-plugin ----*/
08086 
08087    else if( w == im3d->vwid->imag->pop_environment_pb &&
08088             w != NULL                                   ){
08089 
08090      AFNI_misc_CB( im3d->vwid->dmode->misc_environ_pb ,
08091                    (XtPointer) im3d , (XtPointer) NULL ) ;
08092    }
08093 
08094    /*---- 17 May 2005: open Draw Dataset plugin ----*/
08095 
08096    else if( w == im3d->vwid->imag->pop_drawdataset_pb &&
08097             w != NULL                                   ){
08098 
08099      char cmd[128] , cc='A'+AFNI_controller_index(im3d) ;
08100      int xx,yy ;
08101 
08102 #if 0
08103      MCW_widget_geom(im3d->vwid->top_shell,NULL,NULL,&xx,&yy); xx+=29; yy+=19;
08104 #else
08105      xx = im3d->vwid->butx ; yy = im3d->vwid->buty ;
08106 #endif
08107      sprintf(cmd,"OPEN_WINDOW %c.plugin.Draw_Dataset geom=+%d+%d",cc,xx,yy) ;
08108      (void) AFNI_driver(cmd) ;
08109    }
08110 
08111    /*--- unmap of the popup itself [elided] ---*/
08112 
08113    /*--- exit ---*/
08114 
08115    RESET_AFNI_QUIT(im3d) ;
08116    EXRETURN ;
08117 }

void AFNI_imseq_clearstat Three_D_View  
 

Definition at line 4303 of file afni_func.c.

References drive_MCW_imseq(), ENTRY, IM3D_VALID, isqDR_clearstat, Three_D_View::s123, Three_D_View::s231, and Three_D_View::s312.

Referenced by PLUTO_dset_redisplay_mode().

04304 {
04305 
04306 ENTRY("AFNI_imseq_clearstat") ;
04307 
04308    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04309 
04310    if( im3d->s123 != NULL )
04311       drive_MCW_imseq( im3d->s123 , isqDR_clearstat , NULL ) ;
04312 
04313    if( im3d->s231 != NULL )
04314       drive_MCW_imseq( im3d->s231 , isqDR_clearstat , NULL ) ;
04315 
04316    if( im3d->s312 != NULL )
04317       drive_MCW_imseq( im3d->s312 , isqDR_clearstat , NULL ) ;
04318 
04319    EXRETURN ;
04320 }

void AFNI_init_niml void   
 

Initialize NIML listening. -------------------------------------------------------------------------

Definition at line 212 of file afni_niml.c.

References AFNI_niml_atexit(), AFNI_niml_driver(), AFNI_niml_redisplay_CB(), AFNI_niml_viewpoint_CB(), AFNI_niml_workproc(), AFNI_numenv(), AFNI_receive_init(), AFNI_yesenv(), atexit(), AFNI_library_type::controllers, ENTRY, g_show_as_popup, GLOBAL_argopt, GLOBAL_library, MAX_CONTROLLERS, NI_register_doer(), NIML_TCP_FIRST_PORT, ns_flags, ns_name, NUM_NIML, PLUTO_register_workproc(), AF_options::port_niml, RECEIVE_FUNCDISPLAY_MASK, RECEIVE_VIEWPOINT_MASK, redisplay_key, sendit, serrit, started, and viewpoint_key.

Referenced by AFNI_misc_CB(), and AFNI_startup_timeout_CB().

00213 {
00214    int cc , ii ;
00215 
00216 ENTRY("AFNI_init_niml") ;
00217 
00218    if( started ) EXRETURN ;
00219 
00220    PLUTO_register_workproc( AFNI_niml_workproc , NULL ) ;
00221 #if 0
00222    atexit( AFNI_niml_atexit ) ;
00223 #endif
00224 
00225    /* initialize status and names of all listening NI_streams */
00226 
00227    for( cc=0 ; cc < NUM_NIML ; cc++ ){
00228      ns_listen[cc] = NULL ;
00229      ns_flags[cc]  = 0 ;
00230    }
00231 
00232    /* 10 Dec 2002: allow user to specify NIML port number */
00233 
00234    cc = GLOBAL_argopt.port_niml ;
00235    if( cc < 1024 || cc > 65535 ) cc = SUMA_TCP_PORT ;
00236    sprintf( ns_name[0] , "tcp:host:%d" , cc ) ;
00237 
00238    /* 09 Mar 2005: add extra ports */
00239 
00240    cc = AFNI_numenv( "AFNI_NIML_FIRST_PORT" ) ;
00241    if( cc < 1024 || cc > 65535 ) cc = NIML_TCP_FIRST_PORT ;
00242    for( ii=1 ; ii < NUM_NIML ; ii++ )
00243      sprintf( ns_name[ii] , "tcp:host:%d" , (cc+ii-1) ) ;
00244 
00245    /* initialize all receive keys (cf. afni_receive.c) */
00246 
00247    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00248      redisplay_key[cc] = -1 ;
00249      viewpoint_key[cc] = -1 ;
00250    }
00251 
00252    /* set up to receive notifications (callbacks)
00253       when the functional overlay is redisplayed (controller A only) */
00254 
00255    redisplay_key[0] = AFNI_receive_init( GLOBAL_library.controllers[0] ,
00256                                          RECEIVE_FUNCDISPLAY_MASK ,
00257                                          AFNI_niml_redisplay_CB ,
00258                                          GLOBAL_library.controllers[0] ,
00259                                          "AFNI_niml_redisplay_CB" ) ;
00260 
00261    /* set up to receive notifications (callbacks)
00262       when the viewpoint is altered by the user  (controller A only) */
00263 
00264    viewpoint_key[0] = AFNI_receive_init( GLOBAL_library.controllers[0] ,
00265                                          RECEIVE_VIEWPOINT_MASK ,
00266                                          AFNI_niml_viewpoint_CB ,
00267                                          GLOBAL_library.controllers[0] ,
00268                                          "AFNI_niml_viewpoint_CB" ) ;
00269 
00270    /* determine if we actually want to send data */
00271 
00272    sendit = !AFNI_yesenv("AFNI_NIML_DONTSEND") ;
00273    serrit = !sendit || AFNI_yesenv("AFNI_NIML_STDERR") ;   /* debugging */
00274 
00275    /* 12 Feb 2003: setup ni_do "DRIVE_AFNI" verb */
00276 
00277    NI_register_doer( "DRIVE_AFNI" , AFNI_niml_driver ) ;
00278 
00279    /* 04 Jan 2005 [rickr]: check for AFNI_SHOW_SURF_POPUPS */
00280 
00281         if( AFNI_yesenv("AFNI_SHOW_SURF_POPUPS") ) g_show_as_popup =  1 ;
00282    else if( AFNI_yesenv("AFNI_KILL_SURF_POPUPS") ) g_show_as_popup = -1 ;
00283 
00284    /* and we're off to see the wizard */
00285 
00286    started = 1 ; EXRETURN ;
00287 }

THD_3dim_dataset* AFNI_init_warp Three_D_View  ,
THD_3dim_dataset  ,
THD_warp  ,
float   
 

Definition at line 9154 of file afni.c.

References ADDTO_KILL, THD_marker_set::aflags, AFNI_concatenate_warp(), AFNI_copy_statistics(), THD_3dim_dataset::anat_parent, THD_3dim_dataset::anat_parent_idcode, THD_3dim_dataset::anat_parent_name, ATLAS_BBOX_ANT, ATLAS_BBOX_INF, ATLAS_BBOX_INF_NEW, ATLAS_BBOX_LAT, ATLAS_BBOX_POS, ATLAS_BBOX_SUP, THD_datablock::atr, base, THD_linear_mapping::bot, THD_datablock::brick, THD_datablock::brick_bytes, THD_datablock::brick_fac, THD_linear_mapping::bvec, THD_diskptr::byte_order, DATABLOCK_MEM_UNDEFINED, DATABLOCK_TYPE, DATAXES_TYPE, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, THD_3dim_dataset::death_mark, THD_diskptr::dimsizes, THD_diskptr::directory_name, THD_datablock::diskptr, DISKPTR_TYPE, DSET_unlock, DUMP_FVEC3, DUMP_LMAP, DUMP_T12_WARP, EMPTY_STRING, ENTRY, FIRST_WARP_TYPE, THD_3dim_dataset::func_type, HEAD_ANAT_TYPE, THD_marker_set::help, THD_3dim_dataset::idcode, THD_ivec3::ijk, INIT_KILL, INIT_STAT_AUX, THD_datablock::kl, THD_3dim_dataset::kl, THD_marker_set::label, THD_3dim_dataset::label1, THD_3dim_dataset::label2, LAST_WARP_TYPE, LOAD_DIAG_MAT, LOAD_FVEC3, THD_datablock::malloc_type, THD_3dim_dataset::markers, AFNI_widget_set::marks, MARKS_MAXFLAG, MARKS_MAXHELP, MARKS_MAXLAB, MARKS_MAXNUM, THD_datablock::master_bytes, THD_datablock::master_ival, THD_datablock::master_nvals, MATVEC_SUB, MAX_FVEC3, MAX_STAT_AUX, MCW_new_idcode, MCW_strncpy, MCW_val_bbox(), THD_linear_mapping::mfor, MIN_FVEC3, myXtNew, THD_datablock::natr, THD_datablock::natr_alloc, NMARK_BOUNDING, THD_marker_set::numdef, THD_marker_set::numset, THD_datablock::nvals, THD_diskptr::nvals, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, ORI_A2P_TYPE, ORI_I2S_TYPE, ORI_R2L_TYPE, THD_marker_set::ovcolor, THD_3dim_dataset::parent, THD_dataxes::parent, THD_datablock::parent, PARENTIZE, THD_diskptr::prefix, THD_diskptr::rank, RETURN, THD_warp::rig_bod, THD_3dim_dataset::self_name, THD_3dim_dataset::self_warp, THD_3dim_dataset::stat_aux, THD_3dim_dataset::stats, STATUS, THD_diskptr::storage_mode, STORAGE_UNDEFINED, THD_3dim_dataset::tagset, THD_warp::tal_12, THD_3dim_dataset::taxis, THD_3dim_dataset::tcat_len, THD_3dim_dataset::tcat_list, THD_3dim_dataset::tcat_num, THD_3dmm_to_dicomm(), THD_copy_datablock_auxdata(), THD_get_write_order(), THD_init_datablock_brick(), THD_init_diskptr_names(), THD_MAX_LABEL, THD_MAX_NAME, THD_null_datablock_auxdata, AFNI_marks_widgets::tlrc_big_bbox, THD_dataxes::to_dicomm, THD_linear_mapping::top, THD_marker_set::type, THD_dataxes::type, THD_datablock::type, THD_diskptr::type, THD_3dim_dataset::type, THD_warp::type, THD_marker_set::valid, VIEW_ACPCALIGNED_TYPE, THD_3dim_dataset::view_type, THD_3dim_dataset::vox_warp, Three_D_View::vwid, THD_affine_warp::warp, THD_3dim_dataset::warp, WARP_AFFINE_TYPE, THD_3dim_dataset::warp_parent, THD_3dim_dataset::warp_parent_idcode, THD_3dim_dataset::warp_parent_name, WARP_TALAIRACH_12_TYPE, WARPED_VIEW, THD_3dim_dataset::wod_daxes, THD_3dim_dataset::wod_flag, THD_dataxes::xxdel, THD_dataxes::xxmax, THD_dataxes::xxmin, THD_dataxes::xxorg, THD_dataxes::xxorient, THD_marker_set::xyz, THD_fvec3::xyz, THD_dataxes::yydel, THD_dataxes::yymax, THD_dataxes::yymin, THD_dataxes::yyorg, THD_dataxes::yyorient, ZERO_IDCODE, THD_dataxes::zzdel, THD_dataxes::zzmax, THD_dataxes::zzmin, THD_dataxes::zzorg, and THD_dataxes::zzorient.

Referenced by AFNI_marks_transform_CB().

09157 {
09158    THD_3dim_dataset * adam_dset ;  /* the farthest ancestor */
09159    THD_warp         * warp_total ; /* the warp from that ancestor */
09160    THD_fvec3          xnew_bot , xnew_top ;
09161 
09162    THD_3dim_dataset * new_dset ;
09163    THD_datablock    * new_dblk  , * adam_dblk  , * parent_dblk ;
09164    THD_dataxes      * new_daxes , * adam_daxes , * parent_daxes ;
09165    THD_diskptr      * new_dkptr , * adam_dkptr , * parent_dkptr ;
09166    THD_marker_set   * new_markers ;
09167 
09168    int new_nx , new_ny , new_nz , ii ;
09169    THD_ivec3 ivbot , ivtop ;
09170 
09171 ENTRY("AFNI_init_warp") ;
09172 
09173    /*----- It is possible that this warp is one in a succession
09174            of warps.  In that case, the actual transformation is
09175            to be done directly from the "adam" dataset, rather
09176            than in succession from the parent.  The reason for
09177            this is to avoid repeated interpolation.  Thus, we
09178            first scan backward along the line of descent, and
09179            create the total warp from "adam" to the new dataset -----*/
09180 
09181    adam_dset   = parent_dset ;
09182    warp_total  = myXtNew( THD_warp ) ;  /* copy initial warp into final warp */
09183    *warp_total = *warp_init ;
09184 
09185    while( adam_dset->warp != NULL ){
09186       AFNI_concatenate_warp( warp_total , adam_dset->warp ) ;
09187       adam_dset = adam_dset->warp_parent ;
09188    }
09189 
09190    if( warp_total->type < FIRST_WARP_TYPE ||
09191        warp_total->type > LAST_WARP_TYPE    ) RETURN(NULL) ;  /* error! */
09192 
09193 #ifdef AFNI_DEBUG
09194 { char str[256] ;
09195   sprintf(str,"parent = %s ; adam = %s",
09196           parent_dset->self_name , adam_dset->self_name ) ;
09197   STATUS(str) ;
09198 
09199   STATUS("warp_total dump:") ;
09200   if( warp_total->type == WARP_AFFINE_TYPE ){
09201      DUMP_LMAP(warp_total->rig_bod.warp) ;
09202   } else {
09203      DUMP_T12_WARP(warp_total->tal_12) ;
09204   }
09205 }
09206 #endif
09207 
09208    adam_dblk  = adam_dset->dblk ;
09209    adam_daxes = adam_dset->daxes ;
09210    adam_dkptr = adam_dblk->diskptr ;
09211 
09212    parent_dblk  = parent_dset->dblk ;
09213    parent_daxes = parent_dset->daxes ;
09214    parent_dkptr = parent_dblk->diskptr ;
09215 
09216    /*----- We now determine the bounding box of the new dataset.
09217            This depends on the warp type:
09218               affine warps   --> use transformed bounding box of adam;
09219               Talairach warp --> use Talairach standard geometry;
09220            The results are in the vectors xnew_bot and xnew_top. -----*/
09221 
09222    switch( warp_total->type ){
09223 
09224       default:  RETURN(NULL) ;  /* something bad happened */
09225 
09226       /*--- 12 case Talairach mapping
09227             (sizes chosen to include borders of Atlas figures) ---*/
09228 
09229       case WARP_TALAIRACH_12_TYPE:{
09230          int   use_tlrc_big=MCW_val_bbox( im3d->vwid->marks->tlrc_big_bbox ) ;
09231          float xtop=ATLAS_BBOX_LAT ,
09232                ybot=ATLAS_BBOX_ANT ,
09233                ytop=ATLAS_BBOX_POS ,
09234                zbot=(use_tlrc_big) ? ATLAS_BBOX_INF_NEW : ATLAS_BBOX_INF ,
09235                ztop=ATLAS_BBOX_SUP ;
09236 
09237 #define GETVAL(vvv,nnn) do{ char *eee = getenv(nnn) ;                            \
09238                             if( eee != NULL ){                                   \
09239                               float val=strtod(eee,NULL); if(val>0.0) vvv = val; \
09240                             } } while(0)
09241 
09242          GETVAL(xtop,"AFNI_TLRC_BBOX_LAT") ;  /* 16 Apr 2002: get new bounding box */
09243          GETVAL(ybot,"AFNI_TLRC_BBOX_ANT") ;  /* from environment variables, maybe */
09244          GETVAL(ytop,"AFNI_TLRC_BBOX_POS") ;
09245          GETVAL(zbot,"AFNI_TLRC_BBOX_INF") ;
09246          GETVAL(ztop,"AFNI_TLRC_BBOX_SUP") ;
09247 
09248 #undef GETVAL
09249 
09250          LOAD_FVEC3( xnew_bot ,-xtop,-ybot,-zbot ) ;
09251          LOAD_FVEC3( xnew_top , xtop, ytop, ztop ) ;
09252       }
09253       break ;
09254 
09255       /*--- linear warp ---*/
09256 
09257       case WARP_AFFINE_TYPE:{
09258          THD_fvec3 corner , base , xnew , aff_bot , aff_top ;
09259          THD_mat33 to_new ;
09260 
09261          to_new  = warp_total->rig_bod.warp.mfor ;
09262          base    = warp_total->rig_bod.warp.bvec ;
09263 
09264          /*--- transform each of the 8 corner locations in
09265                the adam dataset to the aligned system, and
09266                determine the outer limits of the new datablock ---*/
09267 
09268          LOAD_FVEC3(corner,adam_daxes->xxmin,
09269                            adam_daxes->yymin,adam_daxes->zzmin) ;  /* 1 */
09270          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09271          xnew_bot = xnew_top = MATVEC_SUB(to_new,corner,base) ;
09272 
09273          LOAD_FVEC3(corner,adam_daxes->xxmax,
09274                            adam_daxes->yymin,adam_daxes->zzmin) ;  /* 2 */
09275          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09276          xnew     = MATVEC_SUB(to_new,corner,base) ;
09277          xnew_bot = MIN_FVEC3(xnew_bot,xnew) ;
09278          xnew_top = MAX_FVEC3(xnew_top ,xnew ) ;
09279 
09280          LOAD_FVEC3(corner,adam_daxes->xxmin,
09281                            adam_daxes->yymax,adam_daxes->zzmin) ;  /* 3 */
09282          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09283          xnew     = MATVEC_SUB(to_new,corner,base) ;
09284          xnew_bot = MIN_FVEC3(xnew_bot,xnew) ;
09285          xnew_top = MAX_FVEC3(xnew_top ,xnew ) ;
09286 
09287          LOAD_FVEC3(corner,adam_daxes->xxmax,
09288                            adam_daxes->yymax,adam_daxes->zzmin) ;  /* 4 */
09289          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09290          xnew     = MATVEC_SUB(to_new,corner,base) ;
09291          xnew_bot = MIN_FVEC3(xnew_bot,xnew) ;
09292          xnew_top = MAX_FVEC3(xnew_top ,xnew ) ;
09293 
09294          LOAD_FVEC3(corner,adam_daxes->xxmin,
09295                            adam_daxes->yymin,adam_daxes->zzmax) ;  /* 5 */
09296          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09297          xnew     = MATVEC_SUB(to_new,corner,base) ;
09298          xnew_bot = MIN_FVEC3(xnew_bot,xnew) ;
09299          xnew_top = MAX_FVEC3(xnew_top ,xnew ) ;
09300 
09301          LOAD_FVEC3(corner,adam_daxes->xxmax,
09302                            adam_daxes->yymin,adam_daxes->zzmax) ;  /* 6 */
09303          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09304          xnew     = MATVEC_SUB(to_new,corner,base) ;
09305          xnew_bot = MIN_FVEC3(xnew_bot,xnew) ;
09306          xnew_top = MAX_FVEC3(xnew_top ,xnew ) ;
09307 
09308          LOAD_FVEC3(corner,adam_daxes->xxmin,
09309                            adam_daxes->yymax,adam_daxes->zzmax) ;  /* 7 */
09310          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09311          xnew     = MATVEC_SUB(to_new,corner,base) ;
09312          xnew_bot = MIN_FVEC3(xnew_bot,xnew) ;
09313          xnew_top = MAX_FVEC3(xnew_top ,xnew ) ;
09314 
09315          LOAD_FVEC3(corner,adam_daxes->xxmax,
09316                            adam_daxes->yymax,adam_daxes->zzmax) ;  /* 8 */
09317          corner   = THD_3dmm_to_dicomm( adam_dset , corner ) ;
09318          xnew     = MATVEC_SUB(to_new,corner,base) ;
09319          xnew_bot = MIN_FVEC3(xnew_bot,xnew) ;
09320          xnew_top = MAX_FVEC3(xnew_top ,xnew ) ;
09321 
09322          /* If the warp had any data in it about
09323             the region to map to, apply that data. */
09324 
09325          aff_bot = warp_total->rig_bod.warp.bot  ;
09326          aff_top = warp_total->rig_bod.warp.top  ;
09327 
09328          if( (aff_bot.xyz[0] < aff_top.xyz[0]) &&
09329              (aff_bot.xyz[1] < aff_top.xyz[1]) &&
09330              (aff_bot.xyz[2] < aff_top.xyz[2])   ){
09331 
09332    /* 3/25/95: use the bot & top INSTEAD of the corners
09333                (old version used in ADDITION to corners) */
09334 
09335 #if 0
09336             xnew_bot = MIN_FVEC3(xnew_bot,aff_bot) ;
09337             xnew_top = MAX_FVEC3(xnew_top,aff_top) ;
09338 #else
09339             xnew_bot = aff_bot ;
09340             xnew_top = aff_top ;
09341 #endif
09342          }
09343 
09344       }  /* end of affine warp case */
09345       break ;
09346 
09347    } /* end of xnew_bot & xnew_top computed from warp */
09348 
09349    /* force bounds to be integral multiples of resampling size */
09350 
09351 #define FLOOR(qq) ( ((qq) >= 0) ? ((int)(qq)) : (-1+(int)(qq)) )
09352 
09353    ivbot.ijk[0] = FLOOR( 0.01 + xnew_bot.xyz[0] / resam_vox ) ;
09354    ivbot.ijk[1] = FLOOR( 0.01 + xnew_bot.xyz[1] / resam_vox ) ;
09355    ivbot.ijk[2] = FLOOR( 0.01 + xnew_bot.xyz[2] / resam_vox ) ;
09356 
09357    ivtop.ijk[0] = FLOOR( 0.99 + xnew_top.xyz[0] / resam_vox ) ;
09358    ivtop.ijk[1] = FLOOR( 0.99 + xnew_top.xyz[1] / resam_vox ) ;
09359    ivtop.ijk[2] = FLOOR( 0.99 + xnew_top.xyz[2] / resam_vox ) ;
09360 
09361 #undef FLOOR
09362 
09363    xnew_bot.xyz[0] = ivbot.ijk[0] * resam_vox ;
09364    xnew_bot.xyz[1] = ivbot.ijk[1] * resam_vox ;
09365    xnew_bot.xyz[2] = ivbot.ijk[2] * resam_vox ;
09366 
09367    xnew_top.xyz[0] = ivtop.ijk[0] * resam_vox ;
09368    xnew_top.xyz[1] = ivtop.ijk[1] * resam_vox ;
09369    xnew_top.xyz[2] = ivtop.ijk[2] * resam_vox ;
09370 
09371    /* compute dimensions of the new brick */
09372 
09373    new_nx = (xnew_top.xyz[0] - xnew_bot.xyz[0])/resam_vox + 1.5 ;
09374    new_ny = (xnew_top.xyz[1] - xnew_bot.xyz[1])/resam_vox + 1.5 ;
09375    new_nz = (xnew_top.xyz[2] - xnew_bot.xyz[2])/resam_vox + 1.5 ;
09376 
09377    xnew_top.xyz[0] = xnew_bot.xyz[0] + (new_nx-1) * resam_vox ;
09378    xnew_top.xyz[1] = xnew_bot.xyz[1] + (new_ny-1) * resam_vox ;
09379    xnew_top.xyz[2] = xnew_bot.xyz[2] + (new_nz-1) * resam_vox ;
09380 
09381 #ifdef AFNI_DEBUG
09382 DUMP_FVEC3("  -- xnew_bot",xnew_bot) ;
09383 DUMP_FVEC3("  -- xnew_top",xnew_top) ;
09384 printf("  ==> new nx=%d ny=%d nz=%d\n",new_nx,new_ny,new_nz) ;
09385 #endif
09386 
09387    /*----- make a new 3D dataset !!! -----*/
09388 
09389    new_dset    =                     myXtNew( THD_3dim_dataset ) ;
09390    new_dblk    = new_dset->dblk    = myXtNew( THD_datablock ) ;
09391    new_daxes   = new_dset->daxes   = myXtNew( THD_dataxes ) ;
09392    new_markers = new_dset->markers = NULL ;                 /* later, dude */
09393    new_dkptr   = new_dblk->diskptr = myXtNew( THD_diskptr ) ;
09394 
09395    INIT_KILL(new_dset->kl) ; INIT_KILL(new_dblk->kl) ;
09396 
09397    ADDTO_KILL(new_dset->kl,new_dblk)  ;
09398    ADDTO_KILL(new_dset->kl,new_daxes) ;
09399    ADDTO_KILL(new_dset->kl,new_dkptr) ;
09400 
09401    ADDTO_KILL(new_dset->kl,warp_total) ;
09402 
09403    new_dset->wod_daxes = NULL ;
09404    new_dset->wod_flag  = True ;
09405 
09406    new_dset->taxis = NULL ;
09407    new_dset->tagset = NULL ;  /* Oct 1998 */
09408 
09409    INIT_STAT_AUX( new_dset , MAX_STAT_AUX , parent_dset->stat_aux ) ;
09410 
09411 #define PARENT_MYSELF  /* 14 Dec 1999 */
09412 
09413    new_dset->idcode             = MCW_new_idcode() ;
09414    new_dset->warp_parent_idcode = adam_dset->idcode ;
09415 #ifndef PARENT_MYSELF
09416    ZERO_IDCODE(new_dset->anat_parent_idcode) ;
09417    new_dset->anat_parent = NULL ;
09418 #else
09419    new_dset->anat_parent_idcode = new_dset->idcode ; /* 14 Dec 1999 */
09420    new_dset->anat_parent        = new_dset ;         /* 14 Dec 1999 */
09421 #endif
09422 
09423    EMPTY_STRING(new_dset->anat_parent_name) ;
09424 
09425    /*------------ initialize dataset fields -------------*/
09426    /**** July 1997: be careful about adam and parent ****/
09427 
09428 STATUS("init new_dset") ;
09429 
09430    new_dset->type      = parent_dset->type;                    /* data types */
09431    new_dset->func_type = parent_dset->func_type;
09432    new_dset->view_type = WARPED_VIEW(parent_dset->view_type) ; /* view type */
09433 
09434    new_dset->warp      = warp_total ;                          /* warp info */
09435    new_dset->vox_warp  = NULL ;
09436    new_dset->self_warp = NULL ;    /* 26 Aug 2002 */
09437 
09438    new_dset->warp_parent = adam_dset ;
09439    MCW_strncpy( new_dset->warp_parent_name ,
09440                 adam_dset->self_name       , THD_MAX_NAME ) ;
09441 
09442    MCW_strncpy( new_dset->label1 , parent_dset->label1 , THD_MAX_LABEL ) ;
09443    MCW_strncpy( new_dset->label2 , parent_dset->label2 , THD_MAX_LABEL ) ;
09444 
09445    MCW_strncpy( new_dset->self_name  ,
09446                 parent_dset->self_name , THD_MAX_NAME ) ;  /* make up */
09447    ii = strlen( new_dset->self_name ) ;                    /* a new name */
09448    new_dset->self_name[ii++] = '+' ;
09449    MCW_strncpy( &(new_dset->self_name[ii]) ,
09450                 VIEW_typestr[new_dset->view_type] ,
09451                 THD_MAX_NAME-ii ) ;
09452 
09453    new_dset->death_mark  = 0 ;
09454    new_dset->tcat_list   = 0 ;
09455    new_dset->tcat_num    = 0 ;
09456    new_dset->tcat_len    = NULL ;
09457 
09458    /*--- initialize disk pointer fields ---*/
09459 
09460 STATUS("init new_dkptr") ;
09461 
09462    new_dkptr->type         = DISKPTR_TYPE ;
09463    new_dkptr->rank         = 3 ;
09464    new_dkptr->nvals        = adam_dkptr->nvals ;
09465    new_dkptr->dimsizes[0]  = new_nx ;
09466    new_dkptr->dimsizes[1]  = new_ny ;
09467    new_dkptr->dimsizes[2]  = new_nz ;
09468    new_dkptr->storage_mode = STORAGE_UNDEFINED ;
09469    new_dkptr->byte_order   = THD_get_write_order() ;  /* 25 April 1998 */
09470 
09471    THD_init_diskptr_names( new_dkptr ,
09472                            parent_dkptr->directory_name, NULL, parent_dkptr->prefix ,
09473                            new_dset->view_type , True ) ;
09474 
09475    /*--- initialize datablock fields ---*/
09476 
09477 STATUS("init new_dblk") ;
09478 
09479    new_dblk->type        = DATABLOCK_TYPE ;
09480    new_dblk->nvals       = adam_dblk->nvals ;
09481    new_dblk->malloc_type = DATABLOCK_MEM_UNDEFINED ;
09482    new_dblk->natr        = new_dblk->natr_alloc = 0 ;
09483    new_dblk->atr         = NULL ;
09484    new_dblk->parent      = (XtPointer) new_dset ;
09485 
09486    new_dblk->brick_fac   = NULL ;  /* THD_init_datablock_brick */
09487    new_dblk->brick_bytes = NULL ;  /* will initialize these arrays */
09488    new_dblk->brick       = NULL ;
09489    THD_init_datablock_brick( new_dblk , -1 , adam_dblk ) ;
09490 
09491    new_dblk->master_nvals = 0 ;     /* 11 Jan 1999 */
09492    new_dblk->master_ival  = NULL ;
09493    new_dblk->master_bytes = NULL ;
09494 
09495    DSET_unlock(new_dset) ;
09496 
09497    THD_null_datablock_auxdata( new_dblk ) ;
09498    THD_copy_datablock_auxdata( adam_dblk , new_dblk ) ; /* 30 Nov 1997 */
09499 
09500    /*--- initialize data axes fields ---*/
09501 
09502 STATUS("init new_daxes") ;
09503 
09504    new_daxes->type     = DATAXES_TYPE ;
09505    new_daxes->nxx      = new_nx ;
09506    new_daxes->nyy      = new_ny ;
09507    new_daxes->nzz      = new_nz ;
09508    new_daxes->xxorg    = xnew_bot.xyz[0] ;
09509    new_daxes->yyorg    = xnew_bot.xyz[1] ;
09510    new_daxes->zzorg    = xnew_bot.xyz[2] ;
09511    new_daxes->xxdel    = resam_vox ;       /* cubical voxels */
09512    new_daxes->yydel    = resam_vox ;
09513    new_daxes->zzdel    = resam_vox ;
09514    new_daxes->xxmin    = xnew_bot.xyz[0] ; /* save new bounding box */
09515    new_daxes->yymin    = xnew_bot.xyz[1] ;
09516    new_daxes->zzmin    = xnew_bot.xyz[2] ;
09517    new_daxes->xxmax    = xnew_top.xyz[0] ;
09518    new_daxes->yymax    = xnew_top.xyz[1] ;
09519    new_daxes->zzmax    = xnew_top.xyz[2] ;
09520    new_daxes->parent   = (XtPointer) new_dset ;
09521 
09522    new_daxes->xxorient = ORI_R2L_TYPE ;    /* Dicom standard axes! */
09523    new_daxes->yyorient = ORI_A2P_TYPE ;
09524    new_daxes->zzorient = ORI_I2S_TYPE ;
09525    LOAD_DIAG_MAT(new_daxes->to_dicomm,1,1,1) ;  /* identity matrix */
09526 
09527    /*--- if view type is appropriate, set new markers ---*/
09528 
09529    switch( new_dset->view_type ){
09530 
09531       default:
09532 STATUS("no new_markers") ;
09533       break ;   /* no markers */
09534 
09535       /*--- AC-PC aligned ==> can do the BOUNDING set of markers ---*/
09536 
09537       case VIEW_ACPCALIGNED_TYPE:
09538       if( new_dset->type == HEAD_ANAT_TYPE ){
09539          int ii , jj ;
09540 
09541 STATUS("init new_markers") ;
09542 
09543          new_markers = new_dset->markers = myXtNew( THD_marker_set ) ;
09544          ADDTO_KILL(new_dset->kl,new_markers) ;
09545 
09546          new_markers->numdef = NMARK_BOUNDING ;
09547          new_markers->numset = 0 ;                /* null data out */
09548          for( ii=0 ; ii < MARKS_MAXNUM ; ii++ ){
09549 
09550             new_markers->xyz[ii][0] =
09551               new_markers->xyz[ii][1] =
09552                 new_markers->xyz[ii][2] = -99999999.99 ;
09553 
09554             for( jj=0 ; jj < MARKS_MAXLAB ; jj++ )
09555                new_markers->label[ii][jj] = '\0' ;
09556 
09557             for( jj=0 ; jj < MARKS_MAXHELP ; jj++ )
09558                new_markers->help[ii][jj] = '\0' ;
09559 
09560             new_markers->valid[ii]   = False ;
09561             new_markers->ovcolor[ii] = -1 ;    /* not used yet */
09562          }
09563 
09564          for( ii=0 ; ii < NMARK_BOUNDING ; ii++ ){       /* copy strings in */
09565             MCW_strncpy( &(new_markers->label[ii][0]) ,
09566                          THD_bounding_label[ii] , MARKS_MAXLAB ) ;
09567             MCW_strncpy( &(new_markers->help[ii][0]) ,
09568                          THD_bounding_help[ii] , MARKS_MAXHELP ) ;
09569          }
09570 
09571          for( ii=0 ; ii < MARKS_MAXFLAG ; ii++ )     /* copy flags in */
09572             new_markers->aflags[ii] = THD_bounding_aflags[ii] ;
09573          new_markers->type = new_markers->aflags[0] ;
09574       }
09575       break ;  /* end of BOUNDING markers */
09576 
09577    }  /* end of marker creation */
09578 
09579    /*----- copy statistics, if any -----*/
09580 
09581    new_dset->stats = NULL ;
09582    AFNI_copy_statistics( adam_dset , new_dset ) ;
09583 
09584 #ifdef ALLOW_DATASET_VLIST
09585    new_dset->pts = NULL ;
09586 #endif
09587 
09588    /*----- dataset ready for warping -----*/
09589 
09590    PARENTIZE(new_dset,adam_dset->parent) ;
09591 
09592 STATUS("initialization complete") ;
09593 
09594    RETURN( new_dset ) ;
09595 }

void AFNI_initialize_controller Three_D_View  
 

Definition at line 7418 of file afni_widg.c.

Referenced by AFNI_drive_open_window(), and MAIN_workprocess().

void AFNI_initialize_view THD_3dim_dataset  ,
Three_D_View  
 

Definition at line 6546 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_marks_action_CB(), AFNI_purge_unused_dsets(), AFNI_set_viewpoint(), AFNI_setup_viewing(), AFNI_transform_vector(), AFNI_view_setter(), AFNI_marks_widgets::always_popup, Three_D_View::anat_dset, Three_D_View::anat_now, AFNI_view_info::anat_num, AF_options::auto_purge, THD_3dim_dataset::daxes, AFNI_viewing_widgets::define_marks_pb, DISABLE_LOCK, THD_session::dsset, Three_D_View::dummied, AFNI_marks_widgets::editable, AFNI_marks_widgets::edits_bbox, ENABLE_LOCK, ENTRY, Three_D_View::fim_dset, Three_D_View::fim_now, AFNI_marks_widgets::frame, AFNI_view_info::func_num, GLOBAL_argopt, GLOBAL_library, AFNI_library_type::have_dummy_dataset, THD_marker_set::help, AFNI_view_info::i1, THD_ivec3::ijk, IM3D_VALID, AFNI_marks_widgets::inverted, ISVALID_3DIM_DATASET, AFNI_view_info::j2, AFNI_view_info::k3, THD_marker_set::label, LAST_VIEW_TYPE, LOAD_ANAT_VIEW, LOAD_IVEC3, THD_3dim_dataset::markers, AFNI_widget_set::marks, MARKS_MAXHELP, MARKS_MAXNUM, MCW_invert_widget(), MCW_set_bbox(), MCW_set_widget_label(), MCW_strncpy, MCW_val_bbox(), AFNI_marks_widgets::num_always_popup, AFNI_marks_widgets::num_sometimes_popup, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, AFNI_marks_widgets::ov_visible, AFNI_marks_widgets::pop_clear_pb, AFNI_marks_widgets::pop_set_pb, AFNI_marks_widgets::poptog, REDISPLAY_ALL, SAVE_VPT, AFNI_viewing_widgets::see_marks_bbox, SENSITIZE, AFNI_view_info::sess_num, AFNI_marks_widgets::sometimes_popup, Three_D_View::ss_now, THD_sessionlist::ssar, AFNI_library_type::sslist, STATUS, AFNI_marks_widgets::tag_visible, TEMP_FVEC3, THD_3dmm_to_3dind(), THD_dicomm_to_3dmm(), AFNI_marks_widgets::tog, AFNI_marks_widgets::tog_help, Three_D_View::type, THD_marker_set::valid, AFNI_widget_set::view, AFNI_viewing_widgets::view_bbox, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, MCW_bbox::wbut, MCW_bbox::wrowcol, AFNI_view_info::xi, AFNI_view_info::yj, and AFNI_view_info::zk.

Referenced by AFNI_drive_open_window(), AFNI_fimmer_redisplay(), AFNI_finalize_dataset_CB(), AFNI_finalize_read_Web_CB(), AFNI_rescan_session_OLD(), AFNI_switchview_CB(), MAIN_workprocess(), PLUTO_add_dset(), and RT_tell_afni_one().

06547 {
06548    int vvv , itog , lll , sss , aaa , fff , id ;
06549    THD_3dim_dataset     * dset , * new_anat , * new_func ;
06550    THD_marker_set       * markers ;
06551    AFNI_viewing_widgets * view ;
06552    AFNI_marks_widgets   * marks ;
06553    THD_fvec3 fv ;
06554    THD_ivec3 iv ;
06555 
06556 ENTRY("AFNI_initialize_view") ;
06557 
06558    if( ! IM3D_VALID(im3d) ) EXRETURN ;
06559 
06560    vvv = im3d->vinfo->view_type ;  /* locations of new data to view */
06561    sss = im3d->vinfo->sess_num ;
06562    aaa = im3d->vinfo->anat_num ;
06563    fff = im3d->vinfo->func_num ;
06564 
06565 if(PRINT_TRACING)
06566 { char str[256] ;
06567   sprintf(str,"view=%d session=%d anat=%d func=%d",vvv,sss,aaa,fff);
06568   STATUS(str) ; }
06569 
06570    new_anat = GLOBAL_library.sslist->ssar[sss]->dsset[aaa][vvv] ;
06571    new_func = GLOBAL_library.sslist->ssar[sss]->dsset[fff][vvv] ;
06572 
06573    /*----------------------------------------------*/
06574    /*--- if the old dataset has markers and the
06575          marker panel is open, shut it down now ---*/
06576 
06577    if( old_anat != NULL     && /** old_anat->markers != NULL && **/
06578        old_anat != new_anat && XtIsManaged(im3d->vwid->marks->frame) ){
06579 
06580       AFNI_marks_action_CB( NULL, (XtPointer) im3d, NULL) ; /* "done" */
06581    }
06582 
06583    if( GLOBAL_argopt.auto_purge == True ){ /* purge old datasets? */
06584 
06585 STATUS("purging old datasets from memory (maybe)") ;
06586 
06587       im3d->anat_now = new_anat ;
06588       im3d->fim_now  = new_func ;
06589       AFNI_purge_unused_dsets() ;
06590    }
06591 
06592    /*---------------------------------------------------------*/
06593    /* set the new datasets that we will deal with from now on */
06594 
06595    for( id=0 ; id <= LAST_VIEW_TYPE ; id++ ){
06596       im3d->anat_dset[id] = GLOBAL_library.sslist->ssar[sss]->dsset[aaa][id] ;
06597       im3d->fim_dset[id]  = GLOBAL_library.sslist->ssar[sss]->dsset[fff][id] ;
06598 
06599       if( ISVALID_3DIM_DATASET(im3d->anat_dset[id]) )
06600          SENSITIZE( im3d->vwid->view->view_bbox->wbut[id], True ) ;
06601       else
06602          SENSITIZE( im3d->vwid->view->view_bbox->wbut[id], False) ;
06603    }
06604 
06605    im3d->anat_now = im3d->anat_dset[vvv] ;
06606    im3d->fim_now  = im3d->fim_dset[vvv] ;
06607    im3d->ss_now   = GLOBAL_library.sslist->ssar[sss] ;
06608 
06609    /*------------------------------------------------*/
06610    /*--- if markers are defined, then set them up ---*/
06611 
06612    dset    = im3d->anat_now ;
06613    markers = dset->markers ;
06614    view    = im3d->vwid->view ;
06615    marks   = im3d->vwid->marks ;
06616 
06617    if( markers == NULL ){   /*--------- markers NOT defined ---------*/
06618 
06619 STATUS("turning markers off") ;
06620 
06621       /* turn controls off */
06622 
06623 #if 0
06624       SENSITIZE(  view->define_marks_pb , False ) ;
06625       SENSITIZE(  view->see_marks_bbox->wrowcol , False ) ;
06626 #endif
06627 
06628       marks->editable = False ;
06629 
06630       vvv = MCW_val_bbox( view->see_marks_bbox ) ;
06631       marks->tag_visible = marks->ov_visible = (vvv) ? True : False ;
06632 
06633       XtUnmanageChildren( marks->always_popup    , marks->num_always_popup    ) ;
06634       XtUnmanageChildren( marks->sometimes_popup , marks->num_sometimes_popup ) ;
06635 
06636    } else {   /*------------- markers ARE defined ----------------*/
06637 
06638 STATUS("turning markers on") ;
06639 
06640       /* turn controls on */
06641 
06642       SENSITIZE( view->define_marks_pb , True ) ;
06643       SENSITIZE( view->see_marks_bbox->wrowcol , True ) ;
06644 
06645       vvv = MCW_val_bbox( view->see_marks_bbox ) ;
06646       marks->tag_visible = marks->ov_visible = (vvv) ? True : False ;
06647 
06648       marks->editable = False ;
06649       MCW_set_bbox( marks->edits_bbox , 0 ) ;
06650 
06651       SENSITIZE( marks->pop_set_pb   , marks->editable ) ;
06652       SENSITIZE( marks->pop_clear_pb , marks->editable ) ;
06653 
06654       /* copy help into location where MCW_help will find it */
06655 
06656       for( itog=0 ; itog < MARKS_MAXNUM ; itog++ ){
06657          MCW_strncpy( &(marks->tog_help[itog][0]) ,
06658                       &(markers->help[itog][0]) , MARKS_MAXHELP ) ;
06659       }
06660 
06661       /* copy the non-empty labels into the toggle labels,
06662          and make the toggle buttons active (panel AND popup) */
06663 
06664       XtManageChildren( marks->always_popup ,
06665                         marks->num_always_popup ) ;
06666 
06667       for( itog=0 ; itog < MARKS_MAXNUM ; itog++ ){
06668          lll = strlen( &(markers->label[itog][0]) ) ;
06669 
06670          if( lll == 0 ){
06671             XtUnmanageChild( marks->tog[itog] ) ;   /* empty label! */
06672             XtUnmanageChild( marks->poptog[itog] ) ;
06673          } else {
06674             MCW_set_widget_label( marks->tog[itog] ,
06675                                   &(markers->label[itog][0]) ) ;
06676             SENSITIZE( marks->tog[itog] , True ) ;
06677             XtManageChild( marks->tog[itog] ) ;
06678 
06679             MCW_set_widget_label( marks->poptog[itog] ,
06680                                   &(markers->label[itog][0]) ) ;
06681             SENSITIZE( marks->poptog[itog] , True ) ;
06682             XtManageChild( marks->poptog[itog] ) ;
06683 
06684             if( markers->valid[itog] && ! marks->inverted[itog] ){
06685                MCW_invert_widget( marks->tog[itog] ) ;
06686                MCW_invert_widget( marks->poptog[itog] ) ;
06687                marks->inverted[itog] = True ;
06688             }
06689 
06690             if( ! markers->valid[itog] && marks->inverted[itog] ){
06691                MCW_invert_widget( marks->tog[itog] ) ;
06692                MCW_invert_widget( marks->poptog[itog] ) ;
06693                marks->inverted[itog] = False ;
06694             }
06695          }
06696       } /* end of loop over markers */
06697 
06698    } /* end of dealing with markers */
06699 
06700    /*------------------------------*/
06701    /*----- set up for viewing -----*/
06702 
06703    AFNI_setup_viewing( im3d , True ) ;
06704 
06705    /*-----------------------------------------------------*/
06706    /*----- reset viewpoint to same Dicom coordinates -----*/
06707 
06708    if( im3d->type == AFNI_3DDATA_VIEW ){
06709       fv = AFNI_transform_vector(
06710               old_anat ,
06711               TEMP_FVEC3( im3d->vinfo->xi, im3d->vinfo->yj, im3d->vinfo->zk ),
06712               dset ) ;
06713 
06714       LOAD_ANAT_VIEW(im3d) ;  /* 02 Nov 1996 */
06715 
06716       fv = THD_dicomm_to_3dmm( dset , fv ) ;
06717       iv = THD_3dmm_to_3dind( dset , fv ) ;
06718    } else {
06719       LOAD_IVEC3( iv, im3d->vinfo->i1, im3d->vinfo->j2, im3d->vinfo->k3 ) ;
06720    }
06721 
06722    /* 27 Jan 2004: set coordinate to center of dataset
06723                    if we were formerly looking at the dummy dataset */
06724 
06725    if( im3d->dummied && !GLOBAL_library.have_dummy_dataset ){
06726      im3d->dummied = 0 ;
06727      LOAD_IVEC3( iv , im3d->anat_now->daxes->nxx/2 ,
06728                       im3d->anat_now->daxes->nyy/2 ,
06729                       im3d->anat_now->daxes->nzz/2  ) ;
06730    }
06731 
06732    DISABLE_LOCK ;  /* 11 Nov 1996 */
06733 
06734    AFNI_view_setter(im3d,NULL) ;
06735    AFNI_set_viewpoint( im3d, iv.ijk[0],iv.ijk[1],iv.ijk[2] , REDISPLAY_ALL ) ;
06736 
06737    ENABLE_LOCK ;   /* 11 Nov 1996 */
06738 
06739    SAVE_VPT(im3d) ;  /* save current location as jumpback */
06740 
06741    EXRETURN ;
06742 }

void AFNI_inten_av_CB MCW_arrowval   av,
XtPointer    cd
 

load the values for the current pane count *

Definition at line 389 of file afni_func.c.

References AFNI_inten_pbar_CB(), alter_MCW_pbar(), MCW_pbar::bigmode, FIX_SCALE_SIZE, HIDE_SCALE, MCW_arrowval::ival, MCW_pbar::mode, NORMAL_cursorize, NPANE_MAX, MCW_pbar::num_panes, MCW_pbar::panew, MCW_pbar::parent, PBAR_set_bigmode(), pmax, pmin, POPUP_cursorize, and MCW_pbar::pval_save.

00390 {
00391    MCW_pbar *pbar = (MCW_pbar *) cd ;
00392    Three_D_View *im3d = (Three_D_View *) pbar->parent ;
00393 
00394    HIDE_SCALE(im3d) ;
00395    if( av->ival > NPANE_MAX ){
00396      int npane=pbar->num_panes , jm=pbar->mode ;
00397      float pmax=pbar->pval_save[npane][0][jm] ,
00398            pmin=pbar->pval_save[npane][npane][jm] ;
00399      PBAR_set_bigmode( pbar , 1 , pmin,pmax ) ;
00400      AFNI_inten_pbar_CB( pbar , im3d , 0 ) ;
00401      POPUP_cursorize( pbar->panew ) ;  /* 08 Apr 2005 */
00402    } else {
00403      pbar->bigmode = 0 ;
00404      alter_MCW_pbar( pbar , av->ival , NULL ) ;
00405      NORMAL_cursorize( pbar->panew ) ;  /* 08 Apr 2005 */
00406    }
00407    FIX_SCALE_SIZE(im3d) ;
00408 }

char* AFNI_inten_av_texter MCW_arrowval  ,
XtPointer   
 

Definition at line 410 of file afni_func.c.

References MCW_arrowval::ival, and NPANE_MAX.

00411 {
00412    static char buf[4] ;
00413    if( av->ival > NPANE_MAX ) strcpy (buf,"**") ;
00414    else                       sprintf(buf,"%d",av->ival) ;
00415    return buf ;
00416 }

void AFNI_inten_bbox_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 4536 of file afni_func.c.

References AFNI_inten_pbar_CB(), AFNI_redisplay_func(), alter_MCW_pbar(), AV_assign_ival(), MCW_pbar::bigmode, MCW_pbar::bigset, ENTRY, FIX_SCALE_SIZE, AFNI_widget_set::func, HIDE_SCALE, IM3D_VALID, AFNI_function_widgets::inten_av, AFNI_function_widgets::inten_bbox, AFNI_function_widgets::inten_pbar, MCW_val_bbox(), MCW_pbar::mode, MCW_pbar::npan_save, NPANE_MAX, MCW_pbar::num_panes, PBAR_MODEBUT, PBAR_MODEPOS, PBAR_set_bigmode(), pmax, pmin, MCW_pbar::pval_save, AFNI_view_info::use_posfunc, Three_D_View::vinfo, Three_D_View::vwid, and MCW_bbox::wbut.

Referenced by AFNI_drive_set_pbar_sign().

04537 {
04538    Three_D_View *im3d = (Three_D_View *) cd ;
04539    Boolean new_pos ;
04540    int jm ;
04541    MCW_pbar *pbar ;
04542 
04543 ENTRY("AFNI_inten_bbox_CB") ;
04544 
04545    if( ! IM3D_VALID(im3d) ||
04546        w != im3d->vwid->func->inten_bbox->wbut[PBAR_MODEBUT] ) EXRETURN ;
04547 
04548    new_pos = (MCW_val_bbox(im3d->vwid->func->inten_bbox) & PBAR_MODEPOS) != 0 ;
04549 
04550    if( new_pos != im3d->vinfo->use_posfunc ){  /* new button value */
04551 
04552       im3d->vinfo->use_posfunc = new_pos ;   /* record for later use */
04553 
04554       pbar = im3d->vwid->func->inten_pbar ;
04555       jm   = pbar->mode = (new_pos) ? 1 : 0 ;  /* pbar mode */
04556 
04557       /* re-panel the pbar befitting its new mode */
04558 
04559       HIDE_SCALE(im3d) ;
04560       if( pbar->bigmode ){               /* 30 Jan 2003 */
04561         int npane=pbar->num_panes ;
04562         float pmax=pbar->pval_save[npane][0][jm] ,
04563               pmin=pbar->pval_save[npane][npane][jm] ;
04564         pbar->bigset = 0 ;
04565         PBAR_set_bigmode( pbar , 1 , pmin,pmax ) ;
04566         AFNI_inten_pbar_CB( pbar , im3d , 0 ) ;
04567       } else {
04568         alter_MCW_pbar( pbar , pbar->npan_save[jm] , NULL ) ;
04569       }
04570       FIX_SCALE_SIZE(im3d) ;
04571 
04572       /* set the count on the pbar control arrowval to match */
04573 
04574       if( pbar->bigmode )
04575         AV_assign_ival( im3d->vwid->func->inten_av, NPANE_MAX+1 ) ;
04576       else
04577         AV_assign_ival( im3d->vwid->func->inten_av, pbar->npan_save[jm] ) ;
04578 
04579       AFNI_redisplay_func( im3d ) ;
04580    }
04581 
04582    EXRETURN ;
04583 }

void AFNI_inten_pbar_CB MCW_pbar  ,
XtPointer   ,
int   
 

Definition at line 286 of file afni_func.c.

References AFNI_hintize_pbar(), AFNI_pbar_lock_carryout(), AFNI_redisplay_func(), ENTRY, AFNI_view_info::fim_autorange, AFNI_view_info::fim_range, AFNI_view_info::func_visible, IM3D_VALID, and Three_D_View::vinfo.

Referenced by AFNI_drive_set_pbar_all(), AFNI_drive_set_pbar_number(), AFNI_inten_av_CB(), AFNI_inten_bbox_CB(), AFNI_set_pbar_top_CB(), and RCREND_color_bbox_CB().

00287 {
00288    Three_D_View *im3d = (Three_D_View *) cd ;
00289    float fac ;
00290 
00291 ENTRY("AFNI_inten_pbar_CB") ;
00292 
00293    if( ! IM3D_VALID(im3d) ) EXRETURN ;
00294 
00295    if( im3d->vinfo->func_visible )
00296       AFNI_redisplay_func( im3d ) ;
00297 
00298    AFNI_hintize_pbar( pbar ,
00299                       (im3d->vinfo->fim_range != 0.0) ? im3d->vinfo->fim_range
00300                                                       : im3d->vinfo->fim_autorange ) ;
00301 
00302    FIX_SCALE_SIZE(im3d) ;
00303 
00304    AFNI_pbar_lock_carryout(im3d) ; /* 07 Feb 2004 */
00305    EXRETURN ;
00306 }

void AFNI_jumpto_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 8298 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_jumpto_dicom(), AFNI_library_type::cord, MCW_choose_cbs::cval, Three_D_View::dc, MCW_DC::display, ENTRY, GLOBAL_library, IM3D_VALID, mcwCR_string, MCW_choose_cbs::reason, RESET_AFNI_QUIT, THD_coorder_to_dicom(), and Three_D_View::type.

Referenced by AFNI_imag_pop_CB().

08299 {
08300    Three_D_View * im3d = (Three_D_View *) cd ;
08301    float xx,yy,zz ;
08302    char dum1[32],dum2[32];
08303    int nn ;
08304 
08305 ENTRY("AFNI_jumpto_CB") ;
08306 
08307    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
08308    if( cbs->reason != mcwCR_string ) EXRETURN ;  /* error */
08309 
08310    nn = sscanf( cbs->cval , "%f%[ ,]%f%[ ,]%f" , &xx,dum1,&yy,dum2,&zz ) ;
08311    if( nn != 5 ){ XBell( im3d->dc->display , 100 ) ; EXRETURN ; }
08312 
08313    THD_coorder_to_dicom( &GLOBAL_library.cord , &xx,&yy,&zz ) ;
08314 
08315    nn = AFNI_jumpto_dicom( im3d , xx,yy,zz ) ;
08316    if( nn < 0 ) XBell( im3d->dc->display , 100 ) ;
08317 
08318    RESET_AFNI_QUIT(im3d) ;
08319    EXRETURN ;
08320 }

int AFNI_jumpto_dicom Three_D_View  ,
float   ,
float   ,
float   
 

Definition at line 8324 of file afni.c.

References AFNI_set_viewpoint(), Three_D_View::anat_now, CURRENT_DAXES, Three_D_View::dc, MCW_DC::display, ENTRY, THD_ivec3::ijk, LOAD_ANAT_VIEW, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, REDISPLAY_ALL, RETURN, SAVE_VPT, TEMP_FVEC3, THD_3dmm_to_3dind(), and THD_dicomm_to_3dmm().

Referenced by AFNI_drive_set_dicom_xyz(), AFNI_drive_set_spm_xyz(), AFNI_jumpto_CB(), AFNI_mnito_CB(), AFNI_process_plugout(), AFNI_sumato_CB(), process_NIML_SUMA_crosshair_xyz(), and TAG_tog_CB().

08325 {
08326    THD_dataxes  * daxes ;
08327    THD_fvec3 fv ; THD_ivec3 iv ;
08328    int ii,jj,kk ;
08329 
08330 ENTRY("AFNI_jumpto_dicom") ;
08331 
08332    LOAD_ANAT_VIEW(im3d) ;  /* 02 Nov 1996 */
08333 
08334    fv = THD_dicomm_to_3dmm( im3d->anat_now , TEMP_FVEC3(xx,yy,zz) ) ;
08335    iv = THD_3dmm_to_3dind ( im3d->anat_now , fv ) ;
08336    ii = iv.ijk[0] ; jj = iv.ijk[1] ; kk = iv.ijk[2] ;
08337 
08338    daxes = CURRENT_DAXES(im3d->anat_now) ;
08339    if( ii >= 0 && ii < daxes->nxx &&
08340        jj >= 0 && jj < daxes->nyy && kk >= 0 && kk < daxes->nzz ){
08341 
08342       SAVE_VPT(im3d) ;
08343       AFNI_set_viewpoint( im3d , ii,jj,kk , REDISPLAY_ALL ) ; /* jump */
08344       RETURN(1) ;
08345    } else {
08346       XBell( im3d->dc->display , 100 ) ;
08347       RETURN(-1) ;
08348    }
08349 }

int AFNI_jumpto_ijk Three_D_View  ,
int   ,
int   ,
int   
 

Definition at line 8353 of file afni.c.

References AFNI_set_viewpoint(), Three_D_View::anat_now, CURRENT_DAXES, Three_D_View::dc, MCW_DC::display, ENTRY, LOAD_ANAT_VIEW, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, REDISPLAY_ALL, RETURN, and SAVE_VPT.

Referenced by AFNI_jumpto_ijk_CB().

08354 {
08355    THD_dataxes * daxes ;
08356 
08357 ENTRY("AFNI_jumpto_ijk") ;
08358 
08359    LOAD_ANAT_VIEW(im3d) ;
08360 
08361    daxes = CURRENT_DAXES(im3d->anat_now) ;
08362    if( ii >= 0 && ii < daxes->nxx &&
08363        jj >= 0 && jj < daxes->nyy && kk >= 0 && kk < daxes->nzz ){
08364 
08365       SAVE_VPT(im3d) ;
08366       AFNI_set_viewpoint( im3d , ii,jj,kk , REDISPLAY_ALL ) ; /* jump */
08367       RETURN(1) ;
08368    } else {
08369       XBell( im3d->dc->display , 100 ) ;
08370       RETURN(-1) ;
08371    }
08372 }

void AFNI_jumpto_ijk_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 8376 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_jumpto_ijk(), MCW_choose_cbs::cval, Three_D_View::dc, MCW_DC::display, ENTRY, IM3D_VALID, mcwCR_string, MCW_choose_cbs::reason, RESET_AFNI_QUIT, and Three_D_View::type.

Referenced by AFNI_imag_pop_CB().

08377 {
08378    Three_D_View * im3d = (Three_D_View *) cd ;
08379    int ii,jj,kk ;
08380    int nn ;
08381    char dum1[32],dum2[32];
08382 
08383 ENTRY("AFNI_jumpto_CB") ;
08384 
08385    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
08386    if( cbs->reason != mcwCR_string ) EXRETURN ;  /* error */
08387 
08388    nn = sscanf( cbs->cval , "%d%[ ,]%d%[ ,]%d" , &ii,dum1,&jj,dum2,&kk ) ;
08389    if( nn != 5 ){ XBell( im3d->dc->display , 100 ) ; EXRETURN ; }
08390 
08391    nn = AFNI_jumpto_ijk( im3d , ii,jj,kk ) ;
08392    if( nn < 0 ) XBell( im3d->dc->display , 100 ) ;
08393 
08394    RESET_AFNI_QUIT(im3d) ;
08395    EXRETURN ;
08396 }

void AFNI_load_defaults Widget    w
 

initialization values (static values are used in afni.c only) *

Definition at line 5665 of file to3d.c.

05666 {
05667    char    * xdef ;
05668    Display * display ;
05669    int       ival ;
05670    float     fval ;
05671    char *    cpt ;
05672 
05673 ENTRY("AFNI_load_defaults") ;
05674 
05675    if( w == NULL ) EXRETURN ;
05676    display = XtDisplay( w ) ;
05677 
05678    /** initialize display and overlay colors **/
05679 
05680    NAME2INT("ncolors",INIT_ngray,3,MAX_COLORS) ;
05681 
05682    NAME2FLOAT("gamma",INIT_gamma,0.1,9.9) ;
05683 
05684    NAME2FLOAT("init_fov",INIT_fov,1.0,1000.0) ;
05685    INIT_fov = 0.1 * ( (int)(10*INIT_fov) ) ;
05686 
05687    EXRETURN ;
05688 }

void AFNI_lock_button Three_D_View  
 

Definition at line 7715 of file afni_widg.c.

void AFNI_lock_carryout Three_D_View  
 

Definition at line 190 of file afni_lock.c.

References AFNI_controller_index(), AFNI_set_viewpoint(), AFNI_transform_vector(), Three_D_View::anat_now, AFNI_library_type::controller_lock, AFNI_library_type::controllers, CURRENT_DAXES, ENTRY, GLOBAL_library, AFNI_view_info::i1, AFNI_library_type::ignore_lock, THD_ivec3::ijk, AFNI_library_type::ijk_lock, IM3D_OPEN, AFNI_view_info::j2, AFNI_view_info::k3, LOAD_ANAT_VIEW, LOAD_FVEC3, MAX_CONTROLLERS, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, REDISPLAY_ALL, SAVE_VPT, THD_3dmm_to_3dind(), THD_dicomm_to_3dmm(), Three_D_View::vinfo, AFNI_view_info::xi, AFNI_view_info::yj, and AFNI_view_info::zk.

Referenced by AFNI_lock_enforce_CB(), and AFNI_set_viewpoint().

00191 {
00192    Three_D_View *qq3d ;
00193    int ii,jj,kk , cc , glock ;
00194    THD_fvec3 old_fv , fv ;
00195    THD_ivec3 iv ;
00196    THD_dataxes *qaxes , *daxes ;
00197    static int busy = 0 ;  /* !=0 if this routine is "busy" */
00198 
00199 ENTRY("AFNI_lock_carryout") ;
00200 
00201    /* first, determine if there is anything to do */
00202 
00203    glock = GLOBAL_library.controller_lock ;
00204 
00205    if( busy )                       EXRETURN ;  /* routine already busy */
00206    if( glock == 0 )                 EXRETURN ;  /* nothing to do */
00207    if( !IM3D_OPEN(im3d) )           EXRETURN ;  /* bad input */
00208    if( GLOBAL_library.ignore_lock ) EXRETURN ;  /* ordered not to do anything */
00209 
00210    ii = AFNI_controller_index(im3d) ;           /* which one am I? */
00211 
00212    if( ii < 0 ) EXRETURN ;                      /* nobody? bad input! */
00213    if( ((1<<ii) & glock) == 0 ) EXRETURN ;      /* input not locked */
00214 
00215    /* something to do? */
00216 
00217    busy = 1 ;  /* don't let this routine be called recursively */
00218 
00219    /* load Dicom location of current point of view in this controller */
00220 
00221    LOAD_FVEC3( old_fv , im3d->vinfo->xi, im3d->vinfo->yj, im3d->vinfo->zk ) ;
00222 
00223    LOAD_ANAT_VIEW(im3d) ;  /* prepare coordinates */
00224    daxes = CURRENT_DAXES(im3d->anat_now) ;
00225 
00226    /* loop through other controllers:
00227         for those that ARE open, ARE NOT the current one,
00228         and ARE locked, transform the above vector to the
00229         controller's dataset, and then jump to that point */
00230 
00231    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00232 
00233      qq3d = GLOBAL_library.controllers[cc] ; /* controller */
00234 
00235      if( IM3D_OPEN(qq3d) && qq3d != im3d && ((1<<cc) & glock) != 0 ){
00236 
00237        LOAD_ANAT_VIEW(qq3d) ;  /* prepare coordinates */
00238        qaxes = CURRENT_DAXES(qq3d->anat_now) ;
00239 
00240        if( !GLOBAL_library.ijk_lock ){  /* xyz coord lock */
00241 
00242          fv = AFNI_transform_vector( im3d->anat_now, old_fv, qq3d->anat_now ) ;
00243          fv = THD_dicomm_to_3dmm( qq3d->anat_now , fv ) ;
00244          iv = THD_3dmm_to_3dind ( qq3d->anat_now , fv ) ;
00245          ii = iv.ijk[0] ; jj = iv.ijk[1] ; kk = iv.ijk[2] ;
00246 
00247        } else {   /* 11 Sep 2000: ijk index lock */
00248 
00249          ii = im3d->vinfo->i1 * qaxes->nxx / daxes->nxx ;
00250          jj = im3d->vinfo->j2 * qaxes->nyy / daxes->nyy ;
00251          kk = im3d->vinfo->k3 * qaxes->nzz / daxes->nzz ;
00252        }
00253 
00254        /* if have good new ijk coords, jump to them */
00255 
00256        if( ii >= 0 && ii < qaxes->nxx &&
00257            jj >= 0 && jj < qaxes->nyy && kk >= 0 && kk < qaxes->nzz   ){
00258 
00259          SAVE_VPT(qq3d) ;
00260          AFNI_set_viewpoint( qq3d , ii,jj,kk , REDISPLAY_ALL ) ; /* jump */
00261        }
00262      }
00263    }
00264 
00265    busy = 0 ;  /* OK, let this routine be activated again */
00266    EXRETURN ;
00267 }

void AFNI_lock_change_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 116 of file afni_lock.c.

References AFNI_library_type::controller_lock, AFNI_library_type::controllers, AFNI_widget_set::dmode, ENTRY, GLOBAL_library, IM3D_VALID, AFNI_datamode_widgets::lock_bbox, MAX_CONTROLLERS, MCW_set_bbox(), MCW_val_bbox(), RESET_AFNI_QUIT, and Three_D_View::vwid.

00117 {
00118    Three_D_View *im3d = (Three_D_View *) cd ;
00119    Three_D_View *qq3d ;
00120    int           bval , ii , bold ;
00121 
00122 ENTRY("AFNI_lock_change_CB") ;
00123 
00124    if( ! IM3D_VALID(im3d) ) EXRETURN ;
00125 
00126    /* get current global setting and compare to changed lock box */
00127 
00128    bold = GLOBAL_library.controller_lock ;
00129    bval = MCW_val_bbox( im3d->vwid->dmode->lock_bbox ) ;
00130    if( bval == bold ) EXRETURN ;                     /* same --> nothing to do */
00131 
00132    /* new value --> save in global setting */
00133 
00134    GLOBAL_library.controller_lock = bval ;
00135 
00136    /* set all other controller lock boxes to the same value */
00137 
00138    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
00139      qq3d = GLOBAL_library.controllers[ii] ;
00140      if( qq3d == im3d || ! IM3D_VALID(qq3d) ) continue ;
00141 
00142      MCW_set_bbox( qq3d->vwid->dmode->lock_bbox , bval ) ;
00143    }
00144    RESET_AFNI_QUIT(im3d) ;
00145    EXRETURN ;
00146 }

void AFNI_lock_clear_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 150 of file afni_lock.c.

References AFNI_library_type::controller_lock, AFNI_library_type::controllers, AFNI_widget_set::dmode, ENTRY, GLOBAL_library, IM3D_VALID, AFNI_datamode_widgets::lock_bbox, MAX_CONTROLLERS, MCW_set_bbox(), and Three_D_View::vwid.

00151 {
00152    Three_D_View *qq3d ;
00153    int ii ;
00154 
00155 ENTRY("AFNI_lock_clear_CB") ;
00156 
00157    GLOBAL_library.controller_lock = 0 ;
00158    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
00159      qq3d = GLOBAL_library.controllers[ii] ;
00160      if( IM3D_VALID(qq3d) )
00161        MCW_set_bbox( qq3d->vwid->dmode->lock_bbox , 0 ) ;
00162    }
00163    EXRETURN ;
00164 }

void AFNI_lock_enforce_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 103 of file afni_lock.c.

References AFNI_lock_carryout(), AFNI_time_lock_carryout(), ENTRY, and RESET_AFNI_QUIT.

00104 {
00105    Three_D_View *im3d = (Three_D_View *) cd ;
00106 
00107 ENTRY("AFNI_lock_enforce_CB") ;
00108    AFNI_lock_carryout( im3d ) ;
00109    AFNI_time_lock_carryout( im3d ) ;  /* 03 Nov 1998 */
00110    RESET_AFNI_QUIT(im3d) ;
00111    EXRETURN ;
00112 }

void AFNI_lock_setall_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 168 of file afni_lock.c.

References AFNI_library_type::controller_lock, AFNI_library_type::controllers, AFNI_widget_set::dmode, ENTRY, GLOBAL_library, IM3D_VALID, AFNI_datamode_widgets::lock_bbox, MAX_CONTROLLERS, MCW_set_bbox(), and Three_D_View::vwid.

00169 {
00170    Three_D_View *qq3d ;
00171    int ii ;
00172 
00173 ENTRY("AFNI_lock_setall_CB") ;
00174 
00175    GLOBAL_library.controller_lock = 0 ;
00176    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
00177      GLOBAL_library.controller_lock |= (1<<ii) ;
00178 
00179    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
00180      qq3d = GLOBAL_library.controllers[ii] ;
00181      if( IM3D_VALID(qq3d) )
00182        MCW_set_bbox( qq3d->vwid->dmode->lock_bbox ,
00183                      GLOBAL_library.controller_lock ) ;
00184    }
00185    EXRETURN ;
00186 }

void AFNI_make_controller int   
 

Definition at line 7587 of file afni_widg.c.

Referenced by AFNI_drive_open_window(), and AFNI_startup_layout_CB().

void AFNI_make_descendants THD_sessionlist  
 

Definition at line 659 of file afni_func.c.

References AFNI_make_descendants_old(), VIEW_ACPCALIGNED_TYPE, and VIEW_ORIGINAL_TYPE.

Referenced by AFNI_fimmer_execute(), AFNI_marks_transform_CB(), AFNI_read_inputs(), AFNI_rescan_session_NEW(), AFNI_rescan_session_OLD(), PLUTO_add_dset(), and RT_tell_afni_one().

00660 {
00661    AFNI_make_descendants_old( ssl , VIEW_ORIGINAL_TYPE ) ;
00662 #if 0
00663    AFNI_make_descendants_old( ssl , VIEW_ACPCALIGNED_TYPE ) ; /* doesn't work */
00664 #endif
00665    return ;
00666 }

void AFNI_make_file_dialog Three_D_View  
 

Definition at line 2362 of file afni_func.c.

References AFNI_close_file_dialog_CB(), Three_D_View::dc, MCW_DC::display, ENTRY, AFNI_widget_set::file_cb, AFNI_widget_set::file_cd, AFNI_widget_set::file_dialog, AFNI_widget_set::file_sbox, MCW_hotcolor(), MCW_set_widget_bg(), STATUS, AFNI_widget_set::top_shell, and Three_D_View::vwid.

Referenced by AFNI_pbar_CB(), AFNI_read_1D_CB(), and AFNI_read_sess_CB().

02363 {
02364 
02365 ENTRY("AFNI_make_file_dialog") ;
02366 
02367    /*** make a new dialog? ***/
02368 
02369    if( im3d->vwid->file_dialog == NULL ){
02370       XmString oklabel , cancellabel ;
02371 
02372 STATUS("creating new dialog") ;
02373 
02374       im3d->vwid->file_dialog =
02375          XtVaCreatePopupShell(
02376            "menu" , xmDialogShellWidgetClass , im3d->vwid->top_shell ,
02377               XmNtitle , "GPL AFNI" ,
02378               XmNdeleteResponse , XmDO_NOTHING ,
02379               XmNinitialResourcesPersistent , False ,
02380            NULL ) ;
02381 
02382       XmAddWMProtocolCallback(           /* make "Close" window menu work */
02383            im3d->vwid->file_dialog ,
02384            XmInternAtom( im3d->dc->display , "WM_DELETE_WINDOW" , False ) ,
02385            AFNI_close_file_dialog_CB , (XtPointer) im3d ) ;
02386 
02387       /** change button labels to conform to other AFNI dialogs **/
02388 
02389       oklabel     = XmStringCreateLtoR( "Set"  , XmFONTLIST_DEFAULT_TAG ) ;
02390       cancellabel = XmStringCreateLtoR( "Quit" , XmFONTLIST_DEFAULT_TAG ) ;
02391 
02392       im3d->vwid->file_sbox =
02393          XtVaCreateManagedWidget(
02394            "menu" , xmFileSelectionBoxWidgetClass , im3d->vwid->file_dialog ,
02395               XmNfileTypeMask      , XmFILE_ANY_TYPE ,
02396               XmNcancelLabelString , cancellabel ,
02397               XmNokLabelString     , oklabel ,
02398               XmNtraversalOn       , False ,
02399               XmNinitialResourcesPersistent , False ,
02400            NULL ) ;
02401 
02402       XmStringFree(oklabel) ; XmStringFree(cancellabel) ;
02403 
02404       im3d->vwid->file_cb = NULL ;
02405       im3d->vwid->file_cd = NULL ;
02406 
02407 #if 1
02408       { Widget www ;
02409         www = XmFileSelectionBoxGetChild( im3d->vwid->file_sbox ,
02410                                           XmDIALOG_TEXT ) ;
02411         if( www != NULL ) MCW_set_widget_bg( www , MCW_hotcolor(www) , 0 ) ;
02412       }
02413 #endif
02414 
02415    } else if( im3d->vwid->file_cb != NULL ){
02416 
02417 STATUS("re-initializing old dialog") ;
02418 
02419       /*** re-initialize an old dialog to have no callbacks ***/
02420 
02421       XtRemoveCallback( im3d->vwid->file_sbox , XmNokCallback ,
02422                         im3d->vwid->file_cb , im3d->vwid->file_cd ) ;
02423 
02424       XtRemoveCallback( im3d->vwid->file_sbox , XmNcancelCallback ,
02425                         im3d->vwid->file_cb , im3d->vwid->file_cd ) ;
02426 
02427       XtRemoveCallback( im3d->vwid->file_sbox , XmNhelpCallback ,
02428                         im3d->vwid->file_cb , im3d->vwid->file_cd ) ;
02429 
02430       XtVaSetValues( im3d->vwid->file_sbox , XmNpattern,NULL , NULL ) ;
02431 
02432       im3d->vwid->file_cb = NULL ;
02433       im3d->vwid->file_cd = NULL ;
02434    }
02435 
02436    EXRETURN ;
02437 }

void AFNI_make_ptmask int   ,
int   ,
AFNI_ovtemplate  
 

Definition at line 6413 of file afni.c.

References abs, CHKPIX, ENTRY, AFNI_ovtemplate::numpix, and PUTPIX.

Referenced by AFNI_marks_disp_av_CB().

06414 {
06415    register int ix , npix=0 , ax ;
06416 
06417 ENTRY("AFNI_make_ptmask") ;
06418 
06419    for( ix=-size ; ix <= size ; ix++ ){
06420       PUTPIX(ix,-size) ; CHKPIX ;
06421       PUTPIX(ix, size) ; CHKPIX ;
06422       ax = abs(ix) ;
06423       if( ax != size ){ PUTPIX( size,ix); CHKPIX; PUTPIX(-size,ix); CHKPIX; }
06424       if( ax >  gap  ){ PUTPIX(ix,0)    ; CHKPIX; PUTPIX(0,ix)    ; CHKPIX; }
06425    }
06426 
06427    tem->numpix = npix ;
06428    EXRETURN ;
06429 }

void AFNI_make_tagmask int   ,
int   ,
AFNI_ovtemplate  
 

Definition at line 6433 of file afni.c.

References abs, CHKPIX, ENTRY, AFNI_ovtemplate::numpix, and PUTPIX.

Referenced by AFNI_overlay().

06434 {
06435    register int ix , npix=0 , ax ;
06436 
06437 ENTRY("AFNI_make_tagmask") ;
06438 
06439    PUTPIX(-size,0) ; PUTPIX(size,0) ;
06440    for( ix=-size+1 ; ix < size ; ix++ ){
06441       ax = abs(ix) ;
06442       PUTPIX(ix,ax-size) ; CHKPIX ;
06443       PUTPIX(ix,size-ax) ; CHKPIX ;
06444 
06445       if( ax > gap ){ PUTPIX(ix,0); CHKPIX; PUTPIX(0,ix); CHKPIX; }
06446    }
06447 
06448    tem->numpix = npix ;
06449    EXRETURN ;
06450 }

char* AFNI_make_update_script void   
 

Definition at line 409 of file afni_version.c.

Referenced by AFNI_startup_timeout_CB().

00409 { return NULL; }

THD_warp* AFNI_make_warp Three_D_View  
 

Definition at line 8592 of file afni.c.

References AFNI_marks_quality_check(), AFNI_transform_vector(), Three_D_View::anat_now, ATLAS_AC_TO_LAT, ATLAS_AC_TO_PC, ATLAS_AC_TO_TOP, ATLAS_ALIGNBOX_ANT, ATLAS_ALIGNBOX_INF, ATLAS_ALIGNBOX_LAT, ATLAS_ALIGNBOX_POS, ATLAS_ALIGNBOX_SUP, ATLAS_BOT_TO_AC, ATLAS_FRONT_TO_AC, ATLAS_PC_TO_BACK, THD_linear_mapping::bot, THD_linear_mapping::bvec, CROSS_FVEC3, DOT_FVEC3, DUMP_LMAP, ENTRY, gamma, IMARK_ACPM, IMARK_ACSE, IMARK_MANT, IMARK_MINF, IMARK_MLEF, IMARK_MPOS, IMARK_MRIG, IMARK_MSA1, IMARK_MSA2, IMARK_MSUP, IMARK_PCIE, L, LOAD_FVEC3, MAPPING_LINEAR_TYPE, THD_3dim_dataset::markers, MARKSET_ALIGN, MARKSET_BOUNDING, THD_mat33::mat, MATVEC, THD_linear_mapping::mbac, THD_linear_mapping::mfor, MVEC, myXtNew, NEGATE_FVEC3, NORMALIZE_FVEC3, RETURN, S, SCLADD_FVEC3, STATUS, SUB_FVEC3, THD_linear_mapping::svec, THD_3dmm_to_dicomm(), THD_linear_mapping::top, TRANSPOSE_MAT, THD_linear_mapping::type, THD_affine_warp::type, THD_talairach_12_warp::type, THD_marker_set::type, THD_affine_warp::warp, WARP_AFFINE_TYPE, THD_3dim_dataset::warp_parent, WARP_TALAIRACH_12_TYPE, THD_fvec3::xyz, and THD_marker_set::xyz.

Referenced by AFNI_marks_transform_CB().

08593 {
08594    THD_3dim_dataset * anat    = im3d->anat_now ;
08595    THD_marker_set   * markers = im3d->anat_now->markers ;
08596    THD_warp         * warp ;
08597    Boolean good ;
08598 
08599 ENTRY("AFNI_make_warp") ;
08600 
08601    /*--- check the markers for OK-osity ---*/
08602 
08603    good = AFNI_marks_quality_check( False , im3d ) ;
08604    if( !good ) RETURN(NULL) ;
08605 
08606    /*--- make a new warp, and then construct it,
08607          based on the type of marker set we have here ---*/
08608 
08609    warp = myXtNew( THD_warp ) ;
08610 
08611    switch( markers->type ){  /* type of marker set */
08612 
08613       default: RETURN(NULL) ;      /* something bad happened */
08614 
08615       /*--- bounding box markers set ---*/
08616 
08617       case MARKSET_BOUNDING:{
08618          THD_talairach_12_warp * twarp = (THD_talairach_12_warp *) warp ;
08619          THD_fvec3 mant,mpos,msup,minf,mrig,mlef , pcie ;
08620          float dist_sup , dist_inf , dist_ant , dist_med , dist_pos ,
08621                dist_lef , dist_rig ;
08622          float scale_S , scale_I , scale_A , scale_M , scale_P ,
08623                scale_L , scale_R , shift_P ;
08624          float bot_S   , bot_I   , bot_A   , bot_M   , bot_P ,
08625                bot_L   , bot_R ;
08626          float top_S   , top_I   , top_A   , top_M   , top_P ,
08627                top_L   , top_R ;
08628          THD_fvec3 bv_A , bv_M , bv_P , sv_A , sv_M , sv_P ;
08629 
08630          /* let the world know what kind of warp is being built */
08631 
08632          twarp->type = WARP_TALAIRACH_12_TYPE ;
08633 
08634          /* extract the marker vectors, put in Dicom coords */
08635 
08636          mant = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MANT) ) ;
08637          mpos = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MPOS) ) ;
08638          msup = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MSUP) ) ;
08639          minf = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MINF) ) ;
08640          mrig = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MRIG) ) ;
08641          mlef = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MLEF) ) ;
08642 
08643          /* convert Posterior Commissure from parent to current coords */
08644 
08645          LOAD_FVEC3( pcie ,
08646                      anat->warp_parent->markers->xyz[IMARK_PCIE][0] ,
08647                      anat->warp_parent->markers->xyz[IMARK_PCIE][1] ,
08648                      anat->warp_parent->markers->xyz[IMARK_PCIE][2]  ) ;
08649 
08650          pcie = THD_3dmm_to_dicomm( anat->warp_parent , pcie ) ;
08651          pcie = AFNI_transform_vector( anat->warp_parent , pcie , anat ) ;
08652 
08653          /* compute distances between points in various directions */
08654 
08655          dist_ant = -mant.xyz[1] ;
08656          dist_med =  pcie.xyz[1] ;
08657          dist_pos =  mpos.xyz[1] - pcie.xyz[1] ;
08658 
08659          dist_sup =  msup.xyz[2] ;
08660          dist_inf = -minf.xyz[2] ;
08661          dist_lef =  mlef.xyz[0] ;
08662          dist_rig = -mrig.xyz[0] ;
08663 
08664          /* from these, compute the scalings needed in each
08665             direction and the shift needed posterior to the PC */
08666 
08667          scale_A = ATLAS_FRONT_TO_AC / dist_ant ;
08668          scale_M = ATLAS_AC_TO_PC    / dist_med ;
08669          scale_P = ATLAS_PC_TO_BACK  / dist_pos ;
08670          scale_S = ATLAS_AC_TO_TOP   / dist_sup ;
08671          scale_I = ATLAS_BOT_TO_AC   / dist_inf ;
08672          scale_L = ATLAS_AC_TO_LAT   / dist_lef ;
08673          scale_R = ATLAS_AC_TO_LAT   / dist_rig ;
08674 
08675          shift_P = scale_P * dist_med - ATLAS_AC_TO_PC ;
08676 
08677          /* shift vectors in each direction, for each y cell (A,M,P) */
08678 
08679          LOAD_FVEC3( bv_A , 0,0,0 ) ; bv_M = sv_A = sv_M = bv_A ;
08680 
08681          LOAD_FVEC3( bv_P , 0 , shift_P , 0 ) ;
08682          LOAD_FVEC3( sv_P , 0 , -shift_P / scale_P , 0 ) ;
08683 
08684          /* bounds information for each direction, for each cell */
08685 
08686          bot_A = -9999.0        ; top_A = 0.0 ;
08687          bot_M =     0.0        ; top_M = ATLAS_AC_TO_PC ;
08688          bot_P = ATLAS_AC_TO_PC ; top_P = 9999.0 ;
08689 
08690          bot_R = -9999.0        ; top_R =    0.0 ;
08691          bot_L =     0.0        ; top_L = 9999.9 ;
08692 
08693          bot_I = -9999.0        ; top_I =    0.0 ;
08694          bot_S =     0.0        ; top_S = 9999.9 ;
08695 
08696          /* Compute the 12 linear maps:
08697                They are all linear scalings (diagonal matrices);
08698                posterior to the PC, they also contain shifts
08699                to align stuff to the nominal PC location.
08700             N.B.: these are maps from AC-PC aligned coordinates
08701                   to the Talairach system.  Maps from the
08702                   original data to the Talairach system
08703                   will be computed later (in AFNI_concatenate_warps). */
08704 
08705    /* ------- a macro to automate map making:
08706               xx = R or L , yy = A, M, or P , zz = I or S --------*/
08707 
08708 #define MAKE_MAP(xx,yy,zz) \
08709 (\
08710    LOAD_DIAG_MAT( twarp->warp[W_ ## xx ## yy ## zz].mfor ,      \
08711                   scale_ ## xx , scale_ ## yy , scale_ ## zz ) ,\
08712 \
08713    LOAD_DIAG_MAT( twarp->warp[W_ ## xx ## yy ## zz].mbac ,                 \
08714            1.0 / scale_ ## xx , 1.0 / scale_ ## yy , 1.0 / scale_ ## zz ) ,\
08715 \
08716    twarp->warp[W_ ## xx ## yy ## zz].bvec = bv_ ## yy , \
08717 \
08718    twarp->warp[W_ ## xx ## yy ## zz].svec = sv_ ## yy , \
08719 \
08720    LOAD_FVEC3( twarp->warp[W_ ## xx ## yy ## zz].bot ,   \
08721                bot_ ## xx , bot_ ## yy , bot_ ## zz   ) ,\
08722 \
08723    LOAD_FVEC3( twarp->warp[W_ ## xx ## yy ## zz].top ,   \
08724                top_ ## xx , top_ ## yy , top_ ## zz   )  \
08725 )
08726 
08727    /*------- end of MAKE_MAP macro --------*/
08728 
08729          MAKE_MAP(R,A,S) ;   /* right-anterior -superior */
08730          MAKE_MAP(L,A,S) ;   /* left -anterior -superior */
08731          MAKE_MAP(R,M,S) ;   /* right-medial   -superior */
08732          MAKE_MAP(L,M,S) ;   /* left -medial   -superior */
08733          MAKE_MAP(R,P,S) ;   /* right-posterior-superior */
08734          MAKE_MAP(L,P,S) ;   /* left -posterior-superior */
08735          MAKE_MAP(R,A,I) ;   /* right-anterior -inferior */
08736          MAKE_MAP(L,A,I) ;   /* left -anterior -inferior */
08737          MAKE_MAP(R,M,I) ;   /* right-medial   -inferior */
08738          MAKE_MAP(L,M,I) ;   /* left -medial   -inferior */
08739          MAKE_MAP(R,P,I) ;   /* right-posterior-inferior */
08740          MAKE_MAP(L,P,I) ;   /* left -posterior-inferior */
08741 
08742 #undef MAKE_MAP
08743 
08744       }
08745       break ; /* end of Bounding markers set */
08746 
08747       /*--- AC-PC alignment markers set ---*/
08748 
08749       case MARKSET_ALIGN:{
08750          THD_affine_warp * awarp = (THD_affine_warp *) warp ;
08751 
08752          THD_fvec3 acsup , acpos , pcinf , msag1 , msag2 ,
08753                    alpha1,alpha2,alpha,beta,gamma,rr1,rr2,rr , dif ;
08754          THD_mat33 to_al ;
08755          float size ;
08756 
08757          /* let the world know what kind of warp is being built */
08758 
08759          awarp->type = WARP_AFFINE_TYPE ;
08760 
08761          /* extract the marker vectors, put in Dicom coords */
08762 
08763          acsup = THD_3dmm_to_dicomm( anat , MVEC(IMARK_ACSE) ) ;
08764          acpos = THD_3dmm_to_dicomm( anat , MVEC(IMARK_ACPM) ) ;
08765          pcinf = THD_3dmm_to_dicomm( anat , MVEC(IMARK_PCIE) ) ;
08766          msag1 = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MSA1) ) ;
08767          msag2 = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MSA2) ) ;
08768 
08769          /*--- new y direction (beta) ---*/
08770 
08771          beta = SUB_FVEC3(pcinf,acsup) ;  beta = NORMALIZE_FVEC3(beta) ;
08772 
08773          /*--- new x direction (alpha) ---*/
08774 
08775          rr     = SUB_FVEC3(msag1,acsup) ;
08776          alpha1 = CROSS_FVEC3(beta,rr) ; alpha1 = NORMALIZE_FVEC3(alpha1) ;
08777 
08778          rr     = SUB_FVEC3(msag2,acsup) ;
08779          alpha2 = CROSS_FVEC3(beta,rr) ; alpha2 = NORMALIZE_FVEC3(alpha2) ;
08780 
08781          alpha  = SCLADD_FVEC3(0.5,alpha1,0.5,alpha2) ;
08782          alpha  = NORMALIZE_FVEC3(alpha) ;
08783 
08784          /*--- new z direction (gamma) ---*/
08785 
08786          gamma = CROSS_FVEC3(alpha,beta) ; gamma = NORMALIZE_FVEC3(gamma) ;
08787 
08788          /*--- origin of Talairach coordinates (rr) --*/
08789 
08790          dif  = SUB_FVEC3(acsup,acpos) ;
08791          size = DOT_FVEC3(dif,gamma) ;
08792          rr1  = SCLADD_FVEC3(1.0,acpos,size,gamma) ;
08793 
08794          size = DOT_FVEC3(dif,beta) ;
08795          rr2  = SCLADD_FVEC3(1.0,acsup,-size,beta) ;
08796 
08797          rr   = SCLADD_FVEC3(0.5,rr1,0.5,rr2) ;
08798 
08799          /*--- at this point, have:
08800                   new origin in rr ;
08801                   new axes directions in alpha,beta,gamma.
08802                Now construct the transformation between
08803                the Dicom coordinate systems ---------------------*/
08804 
08805          to_al.mat[0][0] = alpha.xyz[0] ;  /* first row is alpha */
08806          to_al.mat[0][1] = alpha.xyz[1] ;
08807          to_al.mat[0][2] = alpha.xyz[2] ;
08808 
08809          to_al.mat[1][0] = beta.xyz[0] ;   /* second row is beta */
08810          to_al.mat[1][1] = beta.xyz[1] ;
08811          to_al.mat[1][2] = beta.xyz[2] ;
08812 
08813          to_al.mat[2][0] = gamma.xyz[0] ;  /* third row is gamma */
08814          to_al.mat[2][1] = gamma.xyz[1] ;
08815          to_al.mat[2][2] = gamma.xyz[2] ;
08816 
08817          /*--- put into warp structure ---*/
08818 
08819          awarp->warp.type = MAPPING_LINEAR_TYPE ;
08820          awarp->warp.mfor = to_al ;
08821          awarp->warp.mbac = TRANSPOSE_MAT(to_al) ;  /* orthog^(-1) */
08822          awarp->warp.bvec = MATVEC(to_al,rr) ;
08823          awarp->warp.svec = rr ;  NEGATE_FVEC3(awarp->warp.svec) ;
08824 
08825          /* load bot & top with largest possible excursions from
08826             origin (the ALIGNBOX dimensions were added 3/25/95)  */
08827 
08828          LOAD_FVEC3(awarp->warp.bot,
08829                     -ATLAS_ALIGNBOX_LAT,-ATLAS_ALIGNBOX_ANT,-ATLAS_ALIGNBOX_INF);
08830          LOAD_FVEC3(awarp->warp.top,
08831                      ATLAS_ALIGNBOX_LAT, ATLAS_ALIGNBOX_POS, ATLAS_ALIGNBOX_SUP);
08832 
08833 #ifdef AFNI_DEBUG
08834 STATUS("Original -> Aligned Map::") ;
08835 DUMP_LMAP(awarp->warp) ;
08836 #endif
08837 
08838       }  /* end of AC-PC alignment case */
08839       break ;
08840 
08841    } /* end of switch on marker set type */
08842 
08843    RETURN(warp) ;
08844 }

void AFNI_make_widgets Three_D_View   im3d
 

Definition at line 312 of file afni_widg.c.

References ADDTO_KILL, afni16_pixmap, AFNI_3DDATA_VIEW, AFNI_make_wid1(), AFNI_make_wid2(), AFNI_make_wid3(), AFNI_plugin_button(), AFNI_tophelp, AFNI_yesenv(), AFNI_widget_set::butx, AFNI_widget_set::buty, Three_D_View::dc, DC_find_closest_overlay_color(), MCW_DC::display, AFNI_widget_set::dmode, ENTRY, FatalError, AFNI_widget_set::file_dialog, AFNI_imaging_widgets::frame, AFNI_viewing_widgets::frame, AFNI_marks_widgets::frame, AFNI_function_widgets::frame, AFNI_datamode_widgets::frame, AFNI_program_widgets::frame, AFNI_widget_set::func, getenv(), IM3D_VALID, AFNI_widget_set::imag, MRI_IMAGE::kind, Three_D_View::kl, last_color, logo_pixmap, AFNI_widget_set::marks, MCW_kill_XImage(), MCW_register_help(), mri_clear_data_pointer, mri_fix_data_pointer(), mri_free(), mri_new_vol_empty(), mri_read_just_one(), myXtNew, MCW_DC::ncol_im, MCW_DCOV::ncol_ov, AFNI_widget_set::nplugbut, num_entry, MRI_IMAGE::nx, MRI_IMAGE::ny, MCW_DC::origGC, MCW_DCOV::ov_darkest, MCW_DC::ovc, AFNI_widget_set::parent, MCW_DC::pix_im, MCW_DCOV::pix_ov, MCW_DC::planes, AFNI_widget_set::prog, REFRESH, rgb_to_XImage(), MCW_DC::screen, STATUS, AFNI_widget_set::top_form, AFNI_widget_set::top_shell, Three_D_View::type, vers_pixmap, AFNI_widget_set::view, MCW_DC::visual_class, and Three_D_View::vwid.

00313 {
00314 
00315 ENTRY("AFNI_make_widgets") ;
00316 
00317    /*---- initialize -----*/
00318 
00319    if( ! IM3D_VALID(im3d) )
00320      FatalError("illegal call to AFNI_make_widgets") ;
00321 
00322    num_entry++ ;
00323 
00324    last_color = im3d->dc->ovc->ncol_ov - 1 ;
00325 
00326    vwid         = im3d->vwid ;
00327    vwid->parent = im3d ;
00328 
00329    vwid->butx = vwid->buty = 9 ; /* 17 May 2005 */
00330 
00331 #define AFNI_FORM_SPACING 9
00332 
00333 STATUS("creating top_form") ;
00334 
00335    vwid->top_form =
00336       XtVaCreateWidget(
00337          "dialog" , xmFormWidgetClass , vwid->top_shell ,
00338             XmNborderWidth , 0 ,
00339             XmNmarginHeight , AFNI_FORM_SPACING ,
00340             XmNmarginWidth  , AFNI_FORM_SPACING ,
00341             XmNtraversalOn , False ,
00342             XmNinitialResourcesPersistent , False ,
00343          NULL ) ;
00344 
00345    MCW_register_help( vwid->top_form , AFNI_tophelp ) ;
00346 
00347    vwid->file_dialog = NULL ; /* Mar 1997 */
00348 
00349    /* create pixmaps, if desired */
00350 
00351 #if defined(WANT_LOGO_BITMAP) || defined(WANT_AFNI_BITMAP)
00352    {  Pixel bg_pix  , fg_pix  ;  /* colors: from control window */
00353       Pixel bot_pix , top_pix ;  /* colors: from image windows  */
00354 
00355 #ifdef USE_IMPIX              /** which colors to use for program icons **/
00356 #  define ICON_bg bot_pix     /* use image display pixels */
00357 #  define ICON_fg top_pix
00358 #else
00359 #  define ICON_bg bg_pix      /* use widget pixels (e.g., FALLback in afni.h) */
00360 #  define ICON_fg fg_pix
00361 #endif
00362 
00363       XtVaGetValues( vwid->top_form ,
00364                        XmNforeground , &bg_pix ,  /* note reversal of roles here! */
00365                        XmNbackground , &fg_pix ,
00366                       NULL ) ;
00367 
00368       bot_pix = im3d->dc->pix_im[0] ;
00369       top_pix = im3d->dc->pix_im[im3d->dc->ncol_im-1] ;
00370 
00371 #ifdef WANT_LOGO_BITMAP
00372 STATUS("WANT_LOGO_BITMAP") ;
00373       if( logo_pixmap == XmUNSPECIFIED_PIXMAP ){
00374 
00375 #ifndef NO_FRIVOLITIES
00376 #include "lll.h"
00377         if( im3d->dc->visual_class == TrueColor ){  /* 23 Sep 2001 */
00378           MRI_IMAGE *bim ; XImage *xim ;
00379           bim = mri_new_vol_empty( lll_width,lll_height,1 , MRI_rgb ) ;
00380           mri_fix_data_pointer( lll_rgb , bim ) ;
00381           logo_pixmap = XCreatePixmap( im3d->dc->display ,
00382                                        RootWindowOfScreen(im3d->dc->screen) ,
00383                                        lll_width , lll_height ,
00384                                        im3d->dc->planes ) ;
00385           xim = rgb_to_XImage( im3d->dc , bim ) ;
00386           if( xim != NULL )
00387              XPutImage( im3d->dc->display ,
00388                         logo_pixmap ,
00389                         im3d->dc->origGC ,
00390                         xim , 0,0 , 0,0 , lll_width , lll_height ) ;
00391           MCW_kill_XImage( xim );
00392 
00393           mri_fix_data_pointer( vvv_rgb , bim ) ;      /* 08 Aug 2005 */
00394           vers_pixmap = XCreatePixmap( im3d->dc->display ,
00395                                        RootWindowOfScreen(im3d->dc->screen) ,
00396                                        lll_width , lll_height ,
00397                                        im3d->dc->planes ) ;
00398           xim = rgb_to_XImage( im3d->dc , bim ) ;
00399           if( xim != NULL )
00400              XPutImage( im3d->dc->display ,
00401                         vers_pixmap ,
00402                         im3d->dc->origGC ,
00403                         xim , 0,0 , 0,0 , lll_width , lll_height ) ;
00404           MCW_kill_XImage( xim );
00405           mri_clear_data_pointer(bim); mri_free(bim);
00406         }
00407 #endif
00408 
00409         if( logo_pixmap == XmUNSPECIFIED_PIXMAP )         /* original code */
00410           logo_pixmap = XCreatePixmapFromBitmapData(      /* B&W pixmap logo */
00411                           XtDisplay(vwid->top_shell) ,
00412                           RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00413                           logo_bits , logo_width , logo_height ,
00414                           fg_pix , bg_pix ,
00415                           DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00416       }
00417 #endif
00418 
00419 #ifdef WANT_AFNI_BITMAP
00420 STATUS("WANT_AFNI_BITMAP") ;
00421       if( afni48_pixmap == XmUNSPECIFIED_PIXMAP )
00422         afni48_pixmap = XCreatePixmapFromBitmapData(
00423                          XtDisplay(vwid->top_shell) ,
00424                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00425                          afni48_bits , afni48_width , afni48_height ,
00426                          ICON_fg , ICON_bg ,
00427                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00428 
00429       if( afni48cor_pixmap == XmUNSPECIFIED_PIXMAP )
00430         afni48cor_pixmap = XCreatePixmapFromBitmapData(
00431                          XtDisplay(vwid->top_shell) ,
00432                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00433                          afni48cor_bits , afni48cor_width , afni48cor_height ,
00434                          ICON_fg , ICON_bg ,
00435                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00436 
00437       if( afni48sag_pixmap == XmUNSPECIFIED_PIXMAP )
00438         afni48sag_pixmap = XCreatePixmapFromBitmapData(
00439                          XtDisplay(vwid->top_shell) ,
00440                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00441                          afni48sag_bits , afni48sag_width , afni48sag_height ,
00442                          ICON_fg , ICON_bg ,
00443                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00444 
00445       if( afni48axi_pixmap == XmUNSPECIFIED_PIXMAP )
00446         afni48axi_pixmap = XCreatePixmapFromBitmapData(
00447                          XtDisplay(vwid->top_shell) ,
00448                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00449                          afni48axi_bits , afni48axi_width , afni48axi_height ,
00450                          ICON_fg , ICON_bg ,
00451                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00452 
00453       if( afni48gra_pixmap == XmUNSPECIFIED_PIXMAP )
00454         afni48gra_pixmap = XCreatePixmapFromBitmapData(
00455                          XtDisplay(vwid->top_shell) ,
00456                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00457                          afni48gra_bits , afni48gra_width , afni48gra_height ,
00458                          ICON_fg , ICON_bg ,
00459                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00460 
00461       if( afni48graaxi_pixmap == XmUNSPECIFIED_PIXMAP )
00462         afni48graaxi_pixmap = XCreatePixmapFromBitmapData(
00463                          XtDisplay(vwid->top_shell) ,
00464                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00465                          afni48graaxi_bits , afni48graaxi_width , afni48graaxi_height ,
00466                          ICON_fg , ICON_bg ,
00467                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00468 
00469       if( afni48grasag_pixmap == XmUNSPECIFIED_PIXMAP )
00470         afni48grasag_pixmap = XCreatePixmapFromBitmapData(
00471                          XtDisplay(vwid->top_shell) ,
00472                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00473                          afni48grasag_bits , afni48grasag_width , afni48grasag_height ,
00474                          ICON_fg , ICON_bg ,
00475                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00476 
00477       if( afni48gracor_pixmap == XmUNSPECIFIED_PIXMAP )
00478         afni48gracor_pixmap = XCreatePixmapFromBitmapData(
00479                          XtDisplay(vwid->top_shell) ,
00480                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00481                          afni48gracor_bits , afni48gracor_width , afni48gracor_height ,
00482                          ICON_fg , ICON_bg ,
00483                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00484 
00485       /* 28 Jan 2004: just for fun, background pixmaps for top forms */
00486 
00487       if( im3d->dc->visual_class == TrueColor &&
00488           AFNI_yesenv("AFNI_LOGO16")          &&
00489           afni16_pixmap[num_entry-1] == XmUNSPECIFIED_PIXMAP ){
00490 
00491         MRI_IMAGE *bim ; XImage *xim ; char ename[32], *ept ;
00492         sprintf(ename,"AFNI_LOGO16_IMAGE_%c" , 'A'+num_entry-1 ) ;
00493         ept = getenv(ename) ;
00494         if( ept == NULL ) ept = getenv( "AFNI_LOGO16_IMAGE" ) ;
00495         if( ept != NULL ){
00496           bim = mri_read_just_one( ept ) ;
00497           if( bim != NULL ){
00498             if( bim->kind == MRI_rgb ){
00499               xim = rgb_to_XImage( im3d->dc , bim ) ;
00500               if( xim != NULL ){
00501                 afni16_pixmap[num_entry-1] = XCreatePixmap( im3d->dc->display ,
00502                                                  RootWindowOfScreen(im3d->dc->screen) ,
00503                                                  bim->nx , bim->ny , im3d->dc->planes ) ;
00504                 XPutImage( im3d->dc->display , afni16_pixmap[num_entry-1] ,
00505                            im3d->dc->origGC , xim , 0,0 , 0,0 , bim->nx , bim->ny ) ;
00506                 MCW_kill_XImage( xim ) ;
00507               }
00508             }
00509             mri_free(bim) ;
00510           }
00511         }
00512       }
00513 
00514 #if 0
00515       if( afni16_pixmap[num_entry-1] == XmUNSPECIFIED_PIXMAP && AFNI_yesenv("AFNI_LOGO16") ){
00516         Pixel fg16=ICON_bg, bg16=ICON_fg ; int ic ; char ename[32] ;
00517         char *fgn[7] = { "red", "blue-cyan", "green", "violet", "orange", "gray70", "yellow" };
00518 
00519         sprintf(ename,"AFNI_LOGO16_FOREGROUND_%c" , 'A'+num_entry-1 ) ;
00520                      ic = DC_find_closest_overlay_color(im3d->dc, getenv(ename) ) ;
00521         if( ic < 0 ) ic = DC_find_closest_overlay_color(im3d->dc, getenv("AFNI_LOGO16_FOREGROUND")) ;
00522         if( ic < 0 ) ic = DC_find_closest_overlay_color(im3d->dc, fgn[(num_entry-1)%7] ) ;
00523         if( ic >= 0 ) fg16 = im3d->dc->ovc->pix_ov[ic] ;
00524 
00525         sprintf(ename,"AFNI_LOGO16_BACKGROUND_%c" , 'A'+num_entry-1 ) ;
00526                      ic = DC_find_closest_overlay_color(im3d->dc, getenv(ename) ) ;
00527         if( ic < 0 ) ic = DC_find_closest_overlay_color(im3d->dc, getenv("AFNI_LOGO16_BACKGROUND")) ;
00528 #if 0
00529         if( ic < 0 ) ic = im3d->dc->ovc->ov_darkest ;
00530 #endif
00531         if( ic >= 0 ) bg16 = im3d->dc->ovc->pix_ov[ic] ;
00532 
00533         afni16_pixmap[num_entry-1] = XCreatePixmapFromBitmapData(
00534                                       XtDisplay(vwid->top_shell) ,
00535                                       RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00536                                       afni16_bits , afni16_width , afni16_height ,
00537                                       fg16 , bg16 ,
00538                                       DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00539       }
00540 #endif
00541 
00542 #endif  /* WANT_AFNI_BITMAP */
00543    }
00544 #endif  /* if WANT any of the BITMAPs */
00545 
00546    if( afni16_pixmap[num_entry-1] != XmUNSPECIFIED_PIXMAP )
00547      XtVaSetValues( vwid->top_form , XmNbackgroundPixmap,afni16_pixmap[num_entry-1] , NULL ) ;
00548 
00549    /* create each control panel, and a container frame for each */
00550 
00551 STATUS("creating control panels") ;
00552 
00553    imag =vwid->imag = myXtNew(AFNI_imaging_widgets) ;ADDTO_KILL(im3d->kl,imag);
00554    view =vwid->view = myXtNew(AFNI_viewing_widgets) ;ADDTO_KILL(im3d->kl,view);
00555    marks=vwid->marks= myXtNew(AFNI_marks_widgets)   ;ADDTO_KILL(im3d->kl,marks);
00556    func =vwid->func = myXtNew(AFNI_function_widgets);ADDTO_KILL(im3d->kl,func);
00557    prog =vwid->prog = myXtNew(AFNI_program_widgets) ;ADDTO_KILL(im3d->kl,prog);
00558    dmode=vwid->dmode= myXtNew(AFNI_datamode_widgets);ADDTO_KILL(im3d->kl,dmode);
00559 
00560    imag->frame =
00561       XtVaCreateWidget(
00562          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00563             XmNleftAttachment , XmATTACH_FORM ,
00564             XmNtopAttachment  , XmATTACH_FORM ,
00565             XmNleftOffset     , AFNI_FORM_SPACING ,
00566             XmNtopOffset      , AFNI_FORM_SPACING ,
00567             XmNshadowType , XmSHADOW_ETCHED_IN ,
00568             XmNshadowThickness , 5 ,
00569             XmNtraversalOn , False ,
00570             XmNinitialResourcesPersistent , False ,
00571          NULL ) ;
00572 
00573    view->frame =
00574       XtVaCreateWidget(
00575          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00576             XmNleftAttachment , XmATTACH_WIDGET ,
00577             XmNleftWidget     , imag->frame ,
00578             XmNtopAttachment  , XmATTACH_FORM ,
00579             XmNleftOffset     , AFNI_FORM_SPACING ,
00580             XmNtopOffset      , AFNI_FORM_SPACING ,
00581             XmNshadowType , XmSHADOW_ETCHED_IN ,
00582             XmNshadowThickness , 5 ,
00583             XmNtraversalOn , False ,
00584             XmNinitialResourcesPersistent , False ,
00585          NULL ) ;
00586 
00587    marks->frame =
00588       XtVaCreateWidget(
00589          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00590             XmNleftAttachment , XmATTACH_WIDGET ,
00591             XmNleftWidget     , view->frame ,
00592             XmNtopAttachment  , XmATTACH_FORM ,
00593             XmNleftOffset     , AFNI_FORM_SPACING ,
00594             XmNtopOffset      , AFNI_FORM_SPACING ,
00595             XmNshadowType , XmSHADOW_ETCHED_IN ,
00596             XmNshadowThickness , 5 ,
00597             XmNtraversalOn , False ,
00598             XmNinitialResourcesPersistent , False ,
00599          NULL ) ;
00600 
00601    func->frame =
00602       XtVaCreateWidget(
00603          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00604             XmNleftAttachment , XmATTACH_WIDGET ,
00605             XmNleftWidget     , view->frame ,
00606             XmNtopAttachment  , XmATTACH_FORM ,
00607             XmNleftOffset     , AFNI_FORM_SPACING ,
00608             XmNtopOffset      , AFNI_FORM_SPACING ,
00609             XmNshadowType , XmSHADOW_ETCHED_IN ,
00610             XmNshadowThickness , 5 ,
00611             XmNtraversalOn , False ,
00612             XmNinitialResourcesPersistent , False ,
00613          NULL ) ;
00614 
00615    dmode->frame =
00616       XtVaCreateWidget(
00617          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00618             XmNleftAttachment   , XmATTACH_WIDGET ,
00619             XmNleftWidget       , view->frame ,
00620             XmNtopAttachment    , XmATTACH_FORM ,
00621             XmNleftOffset       , AFNI_FORM_SPACING ,
00622             XmNtopOffset        , AFNI_FORM_SPACING ,
00623             XmNshadowType , XmSHADOW_ETCHED_IN ,
00624             XmNshadowThickness , 5 ,
00625             XmNtraversalOn , False ,
00626             XmNinitialResourcesPersistent , False ,
00627          NULL ) ;
00628 
00629    prog->frame =
00630       XtVaCreateWidget(
00631          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00632             XmNtopAttachment    , XmATTACH_WIDGET ,
00633             XmNtopWidget        , imag->frame ,
00634             XmNleftAttachment   , XmATTACH_FORM ,
00635             XmNleftOffset     , AFNI_FORM_SPACING ,
00636             XmNtopOffset      , AFNI_FORM_SPACING ,
00637             XmNshadowType , XmSHADOW_ETCHED_IN ,
00638             XmNshadowThickness , 5 ,
00639             XmNtraversalOn , False ,
00640             XmNinitialResourcesPersistent , False ,
00641          NULL ) ;
00642 
00643    /************* call other routines to create rest of widgets  *************/
00644 
00645                             REFRESH ;
00646    AFNI_make_wid1( im3d ) ; REFRESH ;
00647    AFNI_make_wid2( im3d ) ; REFRESH ;
00648    AFNI_make_wid3( im3d ) ; REFRESH ;
00649 
00650 #ifdef ALLOW_PLUGINS
00651    im3d->vwid->nplugbut = 0 ;
00652    AFNI_plugin_button( im3d ) ; /* 07 Oct 1996 */
00653 #endif
00654 
00655    /*---------------------------------------------------*/
00656    /**************  finish up widgets *******************/
00657    /*---------------------------------------------------*/
00658 
00659    XtManageChild( imag->frame ) ;
00660    if( im3d->type == AFNI_3DDATA_VIEW ){
00661       XtManageChild( view->frame ) ;
00662    }
00663    XtManageChild( prog->frame ) ;
00664 
00665    XtManageChild( vwid->top_form ) ;
00666 
00667    EXRETURN ;
00668 }
00669 
00670 /*------------------------------------------------------------------*/
00671 
00672 void AFNI_raiseup_CB( Widget w , XtPointer cd , XtPointer cb )
00673 {
00674    XMapRaised( XtDisplay(w) , XtWindow(XtParent(w)) ) ;
00675 }
00676 
00677 /*--------------------------------------------------------------------*/
00678 
00679 void AFNI_make_wid1( Three_D_View * im3d )
00680 {
00681    int ii ;
00682 
00683 ENTRY("AFNI_make_wid1") ;
00684 
00685    /*----------------------------------------------------------*/
00686    /***************** imaging controls *************************/
00687    /*----------------------------------------------------------*/
00688 
00689    /*--- vertical rowcol to hold all imaging stuff ---*/
00690 
00691 STATUS("making imag->rowcol") ;
00692 
00693    imag->rowcol =
00694       XtVaCreateWidget(
00695          "dialog" , xmRowColumnWidgetClass , imag->frame ,
00696             XmNpacking      , XmPACK_TIGHT ,
00697             XmNorientation  , XmVERTICAL   ,
00698             XmNtraversalOn , False ,
00699             XmNinitialResourcesPersistent , False ,
00700          NULL ) ;
00701 
00702    /*--- popup menu to handle special imaging concerns ---*/
00703 
00704    imag->topper =           /* invisible widget to be parent of popup */
00705       XtVaCreateManagedWidget(
00706          "dialog" , xmSeparatorWidgetClass , imag->rowcol ,
00707             XmNseparatorType , XmNO_LINE ,
00708          NULL ) ;
00709 
00710 #ifdef BAD_BUTTON3_POPUPS   /* 21 Jul 2003 */
00711    imag->popmenu =
00712       XmCreatePopupMenu( vwid->top_form, "menu" , NULL , 0 ) ;
00713 #else
00714    imag->popmenu =
00715       XmCreatePopupMenu( imag->topper  , "menu" , NULL , 0 ) ;
00716 #endif
00717 
00718    SAVEUNDERIZE(XtParent(imag->popmenu)) ; /* 27 Feb 2001 */
00719 
00720    VISIBILIZE_WHEN_MAPPED(imag->popmenu) ;
00721 
00722 /***
00723    XtAddCallback( imag->popmenu ,
00724                   XmNunmapCallback , AFNI_imag_pop_CB , im3d ) ;
00725 ***/
00726 
00727    XtVaSetValues( imag->popmenu ,
00728                      XmNradioBehavior , True ,
00729                      XmNradioAlwaysOne , False ,
00730                      XmNspacing      , 1 ,
00731                      XmNmarginHeight , 0 ,
00732                      XmNmarginWidth  , 0 ,
00733                   NULL ) ;
00734 
00735    /*--- jumpback button in menu ---*/
00736 
00737    imag->pop_jumpback_pb =
00738       XtVaCreateManagedWidget(
00739          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00740             LABEL_ARG("Jumpback") ,
00741             XmNmarginHeight , 0 ,
00742             XmNtraversalOn , False ,
00743             XmNinitialResourcesPersistent , False ,
00744          NULL ) ;
00745 
00746    XtAddCallback( imag->pop_jumpback_pb , XmNactivateCallback ,
00747                   AFNI_imag_pop_CB , im3d ) ;
00748 
00749    /*--- jumpto button in menu ---*/
00750 
00751    if( im3d->type == AFNI_3DDATA_VIEW ){
00752       imag->pop_jumpto_pb =
00753          XtVaCreateManagedWidget(
00754             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00755                LABEL_ARG("Jump to (xyz)") ,
00756                XmNmarginHeight , 0 ,
00757                XmNtraversalOn , False ,
00758                XmNinitialResourcesPersistent , False ,
00759             NULL ) ;
00760 
00761       XtAddCallback( imag->pop_jumpto_pb , XmNactivateCallback ,
00762                      AFNI_imag_pop_CB , im3d ) ;
00763    } else {
00764       imag->pop_jumpto_pb = NULL ;
00765    }
00766 
00767    if( im3d->type == AFNI_3DDATA_VIEW ){
00768       imag->pop_jumpto_ijk_pb =
00769          XtVaCreateManagedWidget(
00770             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00771                LABEL_ARG("Jump to (ijk)") ,
00772                XmNmarginHeight , 0 ,
00773                XmNtraversalOn , False ,
00774                XmNinitialResourcesPersistent , False ,
00775             NULL ) ;
00776 
00777       XtAddCallback( imag->pop_jumpto_ijk_pb , XmNactivateCallback ,
00778                      AFNI_imag_pop_CB , im3d ) ;
00779    } else {
00780       imag->pop_jumpto_ijk_pb = NULL ;
00781    }
00782 
00783    /*--- mnito button in menu [01 May 2002] ---*/
00784 
00785    if( im3d->type == AFNI_3DDATA_VIEW ){
00786       imag->pop_mnito_pb =
00787          XtVaCreateManagedWidget(
00788             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00789                LABEL_ARG("Jump to (MNI)") ,
00790                XmNmarginHeight , 0 ,
00791                XmNtraversalOn , False ,
00792                XmNinitialResourcesPersistent , False ,
00793             NULL ) ;
00794 
00795       XtAddCallback( imag->pop_mnito_pb , XmNactivateCallback ,
00796                      AFNI_imag_pop_CB , im3d ) ;
00797    } else {
00798       imag->pop_mnito_pb = NULL ;
00799    }
00800 
00801    /*--- sumato button in menu ---*/
00802 
00803    if( im3d->type == AFNI_3DDATA_VIEW ){
00804       imag->pop_sumato_pb =
00805          XtVaCreateManagedWidget(
00806             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00807                LABEL_ARG("SUMA to (node)") ,
00808                XmNmarginHeight , 0 ,
00809                XmNtraversalOn , False ,
00810                XmNinitialResourcesPersistent , False ,
00811             NULL ) ;
00812 
00813       XtAddCallback( imag->pop_sumato_pb , XmNactivateCallback ,
00814                      AFNI_imag_pop_CB , im3d ) ;
00815    } else {
00816       imag->pop_sumato_pb = NULL ;
00817    }
00818 
00819    /*--- Talairach To button in menu ---*/
00820 
00821    if( im3d->type == AFNI_3DDATA_VIEW ){
00822       imag->pop_talto_pb =
00823          XtVaCreateManagedWidget(
00824             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00825                LABEL_ARG("-Talairach to") ,
00826                XmNmarginHeight , 0 ,
00827                XmNtraversalOn , False ,
00828                XmNinitialResourcesPersistent , False ,
00829             NULL ) ;
00830 
00831       XtAddCallback( imag->pop_talto_pb , XmNactivateCallback ,
00832                      AFNI_imag_pop_CB , im3d ) ;
00833 
00834       if( TT_load_atlas() > 0 ){
00835          imag->pop_whereami_pb =        /* 10 Jul 2001 */
00836             XtVaCreateManagedWidget(
00837                "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00838                   LABEL_ARG("-Where Am I?") ,
00839                   XmNmarginHeight , 0 ,
00840                   XmNtraversalOn , False ,
00841                   XmNinitialResourcesPersistent , False ,
00842                NULL ) ;
00843 
00844          XtAddCallback( imag->pop_whereami_pb , XmNactivateCallback ,
00845                         AFNI_imag_pop_CB , im3d ) ;
00846 
00847          imag->pop_ttren_pb =
00848             XtVaCreateManagedWidget(
00849                "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00850                   LABEL_ARG("-Atlas Colors") ,
00851                   XmNmarginHeight , 0 ,
00852                   XmNtraversalOn , False ,
00853                   XmNinitialResourcesPersistent , False ,
00854                NULL ) ;
00855 
00856          XtAddCallback( imag->pop_ttren_pb , XmNactivateCallback ,
00857                         AFNI_imag_pop_CB , im3d ) ;
00858 
00859       } else {
00860         static int first=1 ;
00861         imag->pop_ttren_pb = imag->pop_whereami_pb = NULL ;
00862         if( first ){
00863           first = 0 ;
00864           fprintf(stderr,
00865            "\n++ WARNING: Can't find TTatlas+tlrc or TTatlas.nii.gz dataset for 'whereami'!\n"
00866              "++--------- See http://afni.nimh.nih.gov/pub/dist/data/\n" ) ;
00867         }
00868       }
00869       imag->pop_whereami_twin = NULL ;
00870    } else {
00871       imag->pop_talto_pb = NULL ;
00872       imag->pop_ttren_pb = imag->pop_whereami_pb = NULL ; /* 10 Jul 2001 */
00873       imag->pop_whereami_twin = NULL ;
00874    }
00875 
00876    /*--- imageonly button in menu ---*/
00877 
00878    imag->pop_imageonly_pb =
00879       XtVaCreateManagedWidget(
00880          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00881             LABEL_ARG("Image display") ,
00882             XmNmarginHeight , 0 ,
00883             XmNtraversalOn , False ,
00884             XmNinitialResourcesPersistent , False ,
00885          NULL ) ;
00886 
00887    XtAddCallback( imag->pop_imageonly_pb , XmNactivateCallback ,
00888                   AFNI_imag_pop_CB , im3d ) ;
00889 
00890    /*--- environment button in menu [05 Nov 2003] ---*/
00891 
00892 #ifdef ALLOW_PLUGINS
00893    imag->pop_environment_pb =
00894       XtVaCreateManagedWidget(
00895          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00896             LABEL_ARG("Edit Environment") ,
00897             XmNmarginHeight , 0 ,
00898             XmNtraversalOn , False ,
00899             XmNinitialResourcesPersistent , False ,
00900          NULL ) ;
00901    XtAddCallback( imag->pop_environment_pb , XmNactivateCallback ,
00902                   AFNI_imag_pop_CB , im3d ) ;
00903 
00904    imag->pop_drawdataset_pb =
00905       XtVaCreateManagedWidget(
00906          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00907             LABEL_ARG("Draw ROI plugin") ,
00908             XmNmarginHeight , 0 ,
00909             XmNtraversalOn , False ,
00910             XmNinitialResourcesPersistent , False ,
00911          NULL ) ;
00912    XtAddCallback( imag->pop_drawdataset_pb , XmNactivateCallback ,
00913                   AFNI_imag_pop_CB , im3d ) ;
00914 #else
00915    imag->pop_environment_pb = NULL ;
00916    imag->pop_drawdataset_pb = NULL ;
00917 #endif
00918 
00919    /*--- frame to hold all crosshair stuff ---*/
00920 
00921    imag->crosshair_frame =
00922       XtVaCreateManagedWidget(
00923          "dialog" , xmFrameWidgetClass , imag->rowcol ,
00924             XmNshadowType , XmSHADOW_ETCHED_IN ,
00925             XmNshadowThickness , 2 ,
00926             XmNtraversalOn , False ,
00927             XmNinitialResourcesPersistent , False ,
00928          NULL ) ;
00929 
00930    /*--- rowcol to manage crosshair stuff ---*/
00931 
00932    imag->crosshair_rowcol =
00933       XtVaCreateWidget(
00934          "dialog" , xmRowColumnWidgetClass , imag->crosshair_frame ,
00935             XmNpacking      , XmPACK_TIGHT ,
00936             XmNorientation  , XmVERTICAL   ,
00937             XmNtraversalOn , False ,
00938             XmNinitialResourcesPersistent , False ,
00939          NULL ) ;
00940 
00941    /*--- label to display the crosshair location ---*/
00942 
00943    im3d->vinfo->old_crosshair_label = xstr = AFNI_crosshair_label( im3d ) ;
00944 
00945    im3d->vinfo->view_setter = -1 ;  /* 20 Feb 2003 */
00946 
00947    imag->crosshair_label =
00948       XtVaCreateManagedWidget(
00949          "dialog" , xmLabelWidgetClass , imag->crosshair_rowcol ,
00950             XmNrecomputeSize , False ,
00951             XmNlabelString , xstr ,
00952             XmNtraversalOn , False ,
00953             XmNinitialResourcesPersistent , False ,
00954          NULL ) ;
00955 
00956    MCW_register_help( imag->crosshair_label , AFNI_crosshair_label_help ) ;
00957    MCW_register_hint( imag->crosshair_label , "Coordinates of crosshair point" ) ;
00958 
00959    /*--- 12 Mar 2004: coordinate order popup menu ---*/
00960 
00961    if( im3d->type == AFNI_3DDATA_VIEW ){
00962     imag->crosshair_menu =
00963       XmCreatePopupMenu( imag->crosshair_label  , "menu" , NULL , 0 ) ;
00964 
00965     SAVEUNDERIZE(XtParent(imag->crosshair_menu)) ;
00966     VISIBILIZE_WHEN_MAPPED(imag->crosshair_menu) ;
00967 
00968     XtInsertEventHandler( imag->crosshair_label , /* handle events in label */
00969                              ButtonPressMask ,    /* button presses */
00970                              FALSE ,              /* nonmaskable events? */
00971                              AFNI_crosshair_EV ,  /* handler */
00972                              (XtPointer) im3d ,   /* client data */
00973                              XtListTail           /* last in queue */
00974                          ) ;
00975 
00976     (void) XtVaCreateManagedWidget(
00977              "menu" , xmLabelWidgetClass , imag->crosshair_menu ,
00978                 LABEL_ARG("-Set Coord Order-") ,
00979                 XmNrecomputeSize , False ,
00980                 XmNinitialResourcesPersistent , False ,
00981              NULL ) ;
00982 
00983     (void) XtVaCreateManagedWidget(
00984              "menu" , xmSeparatorWidgetClass , imag->crosshair_menu ,
00985               XmNseparatorType , XmSINGLE_LINE , NULL ) ;
00986 
00987     imag->crosshair_dicom_pb =
00988        XtVaCreateManagedWidget(
00989           "menu" , xmPushButtonWidgetClass , imag->crosshair_menu ,
00990              LABEL_ARG(" RAI=DICOM order") ,
00991              XmNmarginHeight , 0 ,
00992              XmNtraversalOn , False ,
00993              XmNinitialResourcesPersistent , False ,
00994           NULL ) ;
00995     XtAddCallback( imag->crosshair_dicom_pb , XmNactivateCallback ,
00996                    AFNI_crosshair_pop_CB , im3d ) ;
00997 
00998     imag->crosshair_spm_pb =
00999        XtVaCreateManagedWidget(
01000           "menu" , xmPushButtonWidgetClass , imag->crosshair_menu ,
01001              LABEL_ARG(" LPI=SPM order") ,
01002              XmNmarginHeight , 0 ,
01003              XmNtraversalOn , False ,
01004              XmNinitialResourcesPersistent , False ,
01005           NULL ) ;
01006     XtAddCallback( imag->crosshair_spm_pb , XmNactivateCallback ,
01007                    AFNI_crosshair_pop_CB , im3d ) ;
01008 
01009    } /*- end of crosshair_label popup menu -*/
01010 
01011    /*--- 01 Jan 1997: horizontal rowcol for crosshair stuff ---*/
01012 
01013 STATUS("making imag->xhair_rowcol") ;
01014 
01015      imag->xhair_rowcol =
01016         XtVaCreateWidget(
01017          "dialog" , xmRowColumnWidgetClass , imag->crosshair_rowcol ,
01018             XmNpacking     , XmPACK_TIGHT ,
01019             XmNorientation , XmHORIZONTAL ,
01020             XmNmarginHeight, 0 ,
01021             XmNmarginWidth , 0 ,
01022             XmNtraversalOn , False ,
01023             XmNinitialResourcesPersistent , False ,
01024          NULL ) ;
01025 
01026    /*--- arrowval to control crosshair visibility ---*/
01027 
01028    if( im3d->vinfo->crosshair_visible )
01029       ii = (im3d->vinfo->xhairs_show_montage) ? AFNI_XHAIRS_MULTI
01030                                               : AFNI_XHAIRS_SINGLE ;
01031    else
01032       ii = AFNI_XHAIRS_OFF ;
01033 
01034    im3d->vinfo->xhairs_orimask = ORIMASK_ALL ;  /* 31 Dec 1998 */
01035 
01036 STATUS("making imag->crosshair_av") ;
01037 
01038    imag->crosshair_av = new_MCW_arrowval(
01039                           imag->xhair_rowcol ,        /* parent Widget */
01040                           "Xhairs" ,                  /* label */
01041                           AVOPT_STYLE ,               /* option menu style */
01042                           AFNI_XHAIRS_OFF ,           /* first option */
01043                           AFNI_XHAIRS_LASTOPTION ,    /* last option */
01044                           ii ,                        /* initial selection */
01045                           MCW_AV_readtext ,           /* ignored but needed */
01046                           0 ,                         /* ditto */
01047                           AFNI_crosshair_visible_CB , /* callback when changed */
01048                           (XtPointer) im3d ,          /* data for above */
01049                           MCW_av_substring_CB ,       /* text creation routine */
01050                           AFNI_crosshair_av_label     /* data for above */
01051                         ) ;
01052 
01053    if( AVOPT_STYLE == MCW_AV_optmenu )
01054       AVOPT_columnize( imag->crosshair_av , 3 ) ;
01055 
01056    imag->crosshair_av->parent     = (XtPointer) im3d ;
01057    imag->crosshair_av->allow_wrap = True ;
01058 
01059    MCW_reghelp_children( imag->crosshair_av->wrowcol , AFNI_crosshair_av_help ) ;
01060    MCW_reghint_children( imag->crosshair_av->wrowcol , "Crosshairs style" ) ;
01061 
01062    ADDTO_KILL(im3d->kl,imag->crosshair_av) ;
01063 
01064    /*--- 01 Jan 1997: buttonbox to control "all" or "one" xhairs in montage ---*/
01065 
01066 STATUS("making imag->xhall_bbox") ;
01067 
01068    imag->xhall_bbox = new_MCW_bbox( imag->xhair_rowcol ,
01069                                      1 , AFNI_xhall_bbox_label ,
01070                                      MCW_BB_check ,
01071                                      MCW_BB_noframe ,
01072                                      AFNI_xhall_bbox_CB , (XtPointer) im3d ) ;
01073 
01074    MCW_set_bbox( imag->xhall_bbox , im3d->vinfo->xhairs_all ? 1 : 0 ) ;
01075 
01076    ADDTO_KILL(im3d->kl , imag->xhall_bbox) ;
01077 
01078    MCW_reghelp_children( imag->xhall_bbox->wrowcol ,
01079       "IN:  Montage will show crosshairs in all slices\n"
01080       "OUT: Montage will show crosshairs in one slice"
01081    ) ;
01082    MCW_reghint_children( imag->xhall_bbox->wrowcol ,
01083                          "All-or-One Montage crosshairs" ) ;
01084 
01085 STATUS("managing imag->xhair_rowcol") ;
01086 
01087    XtManageChild( imag->xhair_rowcol ) ;
01088 
01089    /*--- arrowval to control crosshair color ---*/
01090 
01091    ii = AVOPT_STYLE ;
01092 
01093 STATUS("making imag->crosshair_color_av") ;
01094 
01095    if( ii == MCW_AV_downup ){
01096       imag->crosshair_color_av =
01097          new_MCW_arrowval( imag->crosshair_rowcol ,        /* parent */
01098                            "Color " ,                      /* label */
01099                            MCW_AV_downup ,                 /* arrow directions */
01100                            1 ,                             /* min value */
01101                            last_color ,                    /* max value */
01102                            im3d->vinfo->crosshair_ovcolor ,/* init value */
01103                            MCW_AV_readtext ,               /* readonly text */
01104                            0 ,                             /* 0 decimal shift */
01105                            AFNI_crosshair_color_CB ,       /* click routine */
01106                            (XtPointer) im3d ,              /* data for above */
01107                            MCW_DC_ovcolor_text ,           /* text routine */
01108                            (XtPointer) im3d->dc            /* data for text */
01109                          ) ;
01110 
01111       (void) MCW_DC_ovcolor_text( imag->crosshair_color_av ,
01112                                   im3d->dc ) ;    /* set color now! */
01113 
01114       imag->crosshair_color_av->fastdelay  = 333 ;  /* slow down repeat action */
01115       imag->crosshair_color_av->allow_wrap = 1 ;
01116 
01117    } else {
01118       imag->crosshair_color_av =
01119          new_MCW_colormenu( imag->crosshair_rowcol , "Color " , im3d->dc ,
01120                             1 , last_color , im3d->vinfo->crosshair_ovcolor ,
01121                             AFNI_crosshair_color_CB , (XtPointer) im3d ) ;
01122    }
01123 
01124    imag->crosshair_color_av->parent     = (XtPointer) im3d ;
01125    imag->crosshair_color_av->fastdelay  = 333 ;  /* slow down repeat action */
01126    imag->crosshair_color_av->allow_wrap = 1 ;
01127 
01128    MCW_reghelp_children( imag->crosshair_color_av->wrowcol ,
01129                          AFNI_crosshair_color_help ) ;
01130    MCW_reghint_children( imag->crosshair_color_av->wrowcol , "Crosshairs color" ) ;
01131 
01132    ADDTO_KILL(im3d->kl,imag->crosshair_color_av) ;
01133 
01134    /**** 1 Aug 1996:
01135          put crosshair gap into a horizontal rowcol so
01136          can attach a toggle for periodic montages here, too ****/
01137 
01138 STATUS("making imag->gap_wrap_rowcol") ;
01139 
01140    imag->gap_wrap_rowcol =
01141       XtVaCreateWidget(
01142          "dialog" , xmRowColumnWidgetClass , imag->crosshair_rowcol ,
01143             XmNpacking     , XmPACK_TIGHT ,
01144             XmNorientation , XmHORIZONTAL ,
01145             XmNmarginHeight, 0 ,
01146             XmNmarginWidth , 0 ,
01147             XmNtraversalOn , False ,
01148             XmNinitialResourcesPersistent , False ,
01149          NULL ) ;
01150 
01151    /*--- arrowval to control crosshair gap ---*/
01152 
01153 STATUS("making imag->crosshair_gap_av") ;
01154 
01155    imag->crosshair_gap_av =
01156       new_MCW_arrowval( imag->gap_wrap_rowcol ,      /* parent */
01157                         "Gap   " ,                   /* label */
01158                         AVOPT_STYLE ,                /* arrow directions */
01159                         -1  ,                        /* min value */
01160                         MAXOVSIZE ,                  /* max value */
01161                         im3d->vinfo->crosshair_gap , /* init value */
01162                         MCW_AV_editext ,             /* input/output text */
01163                         0 ,                          /* 0 decimal shift */
01164                         AFNI_crosshair_gap_CB ,      /* click routine */
01165                         (XtPointer) im3d ,           /* data */
01166                         NULL , NULL
01167                       ) ;
01168 
01169    if( AVOPT_STYLE == MCW_AV_optmenu && MAXOVSIZE >= COLSIZE )
01170       AVOPT_columnize( imag->crosshair_gap_av , 1+(MAXOVSIZE+1)/COLSIZE ) ;
01171 
01172    imag->crosshair_gap_av->parent    = (XtPointer) im3d ;
01173    imag->crosshair_gap_av->fastdelay = 333 ;  /* slow down repeat action */
01174 
01175    MCW_reghelp_children( imag->crosshair_gap_av->wrowcol ,
01176                          AFNI_crosshair_gap_help ) ;
01177    MCW_reghint_children( imag->crosshair_gap_av->wrowcol ,
01178                          "Gap in crosshairs" ) ;
01179 
01180    ADDTO_KILL(im3d->kl,imag->crosshair_gap_av) ;
01181 
01182    /*--- 1 Aug 1996:
01183          toggle button box to control periodic montages ---*/
01184 
01185 STATUS("making imag->wrap_bbox") ;
01186 
01187    imag->wrap_bbox = new_MCW_bbox( imag->gap_wrap_rowcol ,
01188                                      1 , AFNI_wrap_bbox_label ,
01189                                      MCW_BB_check ,
01190                                      MCW_BB_noframe ,
01191                                      AFNI_wrap_bbox_CB , (XtPointer) im3d ) ;
01192 
01193    MCW_set_bbox( imag->wrap_bbox , im3d->vinfo->xhairs_periodic ? 1 : 0 ) ;
01194 
01195    ADDTO_KILL(im3d->kl , imag->wrap_bbox) ;
01196 
01197    MCW_reghelp_children( imag->wrap_bbox->wrowcol ,
01198       "IN:  Montage layout wraps around when slices\n"
01199       "       go past an edge of the dataset.\n"
01200       "OUT: Montage layout shows blanks for slices\n"
01201       "       past an edge of the dataset."
01202    ) ;
01203    MCW_reghint_children( imag->wrap_bbox->wrowcol ,
01204                          "Wrap montage past edge of volume?" ) ;
01205 
01206 STATUS("managing imag->gap_wrap_rowcol") ;
01207 
01208    XtManageChild( imag->gap_wrap_rowcol ) ;
01209 
01210    /*--- arrowval to control time index we are viewing ---*/
01211 
01212 STATUS("making imag->time_index_av") ;
01213 
01214    imag->time_index_av =
01215       new_MCW_arrowval( imag->crosshair_rowcol ,     /* parent */
01216                         "Index " ,                   /* label */
01217                         MCW_AV_downup ,              /* arrow directions */
01218                         0  ,                         /* min value */
01219                         im3d->vinfo->top_index ,     /* max value */
01220                         im3d->vinfo->time_index ,    /* init value */
01221                         MCW_AV_editext ,             /* input/output text */
01222                         0 ,                          /* 0 decimal shift */
01223                         AFNI_time_index_CB ,         /* click routine */
01224                         (XtPointer) im3d ,           /* data */
01225                         NULL , NULL
01226                       ) ;
01227    imag->time_index_av->parent     = (XtPointer) im3d ;
01228    imag->time_index_av->allow_wrap = 1 ;
01229 
01230    MCW_reghelp_children( imag->time_index_av->wrowcol ,
01231                          "Controls the time index\n"
01232                          "of the images being viewed.\n"
01233                          "[For time-dependent datasets.]" ) ;
01234    MCW_reghint_children( imag->time_index_av->wrowcol ,
01235                          "Set index in time" ) ;
01236 
01237    ADDTO_KILL(im3d->kl,imag->time_index_av) ;
01238 
01239    /*--- frame to hold all viewing control stuff ---*/
01240 
01241 STATUS("imag->view_frame") ;
01242 
01243    imag->view_frame =
01244       XtVaCreateManagedWidget(
01245          "dialog" , xmFrameWidgetClass , imag->rowcol ,
01246             XmNshadowType , XmSHADOW_ETCHED_IN ,
01247             XmNshadowThickness , 2 ,
01248             XmNinitialResourcesPersistent , False ,
01249          NULL ) ;
01250 
01251    /*--- rowcol to manage viewing control stuff ---*/
01252 
01253    imag->view_rowcol =
01254       XtVaCreateWidget(
01255          "dialog" , xmRowColumnWidgetClass , imag->view_frame ,
01256             XmNpacking      , XmPACK_TIGHT ,
01257             XmNorientation  , XmVERTICAL   ,
01258             XmNtraversalOn , False ,
01259             XmNinitialResourcesPersistent , False ,
01260          NULL ) ;
01261 
01262    /*--- pushbuttons to turn different views on ---*/
01263 
01264 #define xyz_3DIM "Axial   "
01265 #define yzx_3DIM "Sagittal"
01266 #define zxy_3DIM "Coronal "
01267 
01268    /*--------------------------------------------------------------*/
01269    imag->xyz_rowcol =
01270       XtVaCreateWidget(
01271          "dialog" , xmRowColumnWidgetClass , imag->view_rowcol ,
01272             XmNpacking     , XmPACK_TIGHT ,
01273             XmNorientation , XmHORIZONTAL ,
01274             XmNmarginHeight, 0 ,
01275             XmNmarginWidth , 0 ,
01276             XmNtraversalOn , False ,
01277             XmNinitialResourcesPersistent , False ,
01278          NULL ) ;
01279 
01280    imag->name_xyz_lab =
01281       XtVaCreateManagedWidget(
01282          "dialog" , xmLabelWidgetClass , imag->xyz_rowcol ,
01283             LABEL_ARG( xyz_3DIM ) ,
01284             XmNmarginHeight, 0 ,
01285             XmNmarginWidth , 0 ,
01286             XmNrecomputeSize , False ,
01287             XmNtraversalOn   , False ,
01288             XmNinitialResourcesPersistent , False ,
01289          NULL ) ;
01290 
01291    imag->image_xyz_pb =
01292       XtVaCreateManagedWidget(
01293          "dialog" , xmPushButtonWidgetClass , imag->xyz_rowcol ,
01294             LABEL_ARG("Image") ,
01295             XmNmarginHeight, 0 ,
01296             XmNmarginWidth , 0 ,
01297             XmNrecomputeSize , False ,
01298             XmNtraversalOn   , False ,
01299             XmNinitialResourcesPersistent , False ,
01300          NULL ) ;
01301 
01302    imag->graph_xyz_pb =
01303       XtVaCreateManagedWidget(
01304          "dialog" , xmPushButtonWidgetClass , imag->xyz_rowcol ,
01305             LABEL_ARG("Graph") ,
01306             XmNmarginHeight, 0 ,
01307             XmNmarginWidth , 0 ,
01308             XmNrecomputeSize , False ,
01309             XmNtraversalOn   , False ,
01310             XmNinitialResourcesPersistent , False ,
01311          NULL ) ;
01312 
01313    XtManageChild( imag->xyz_rowcol ) ;
01314    /*----------------------------------------------------------------*/
01315 
01316    /*--------------------------------------------------------------*/
01317    imag->yzx_rowcol =
01318       XtVaCreateWidget(
01319          "dialog" , xmRowColumnWidgetClass , imag->view_rowcol ,
01320             XmNpacking     , XmPACK_TIGHT ,
01321             XmNorientation , XmHORIZONTAL ,
01322             XmNmarginHeight, 0 ,
01323             XmNmarginWidth , 0 ,
01324             XmNtraversalOn , False ,
01325             XmNinitialResourcesPersistent , False ,
01326          NULL ) ;
01327 
01328    imag->name_yzx_lab =
01329       XtVaCreateManagedWidget(
01330          "dialog" , xmLabelWidgetClass , imag->yzx_rowcol ,
01331             LABEL_ARG( yzx_3DIM ) ,
01332             XmNmarginHeight, 0 ,
01333             XmNmarginWidth , 0 ,
01334             XmNrecomputeSize , False ,
01335             XmNtraversalOn   , False ,
01336             XmNinitialResourcesPersistent , False ,
01337          NULL ) ;
01338 
01339    imag->image_yzx_pb =
01340       XtVaCreateManagedWidget(
01341          "dialog" , xmPushButtonWidgetClass , imag->yzx_rowcol ,
01342             LABEL_ARG("Image") ,
01343             XmNmarginHeight, 0 ,
01344             XmNmarginWidth , 0 ,
01345             XmNrecomputeSize , False ,
01346             XmNtraversalOn   , False ,
01347             XmNinitialResourcesPersistent , False ,
01348          NULL ) ;
01349 
01350    imag->graph_yzx_pb =
01351       XtVaCreateManagedWidget(
01352          "dialog" , xmPushButtonWidgetClass , imag->yzx_rowcol ,
01353             LABEL_ARG("Graph") ,
01354             XmNmarginHeight, 0 ,
01355             XmNmarginWidth , 0 ,
01356             XmNrecomputeSize , False ,
01357             XmNtraversalOn   , False ,
01358             XmNinitialResourcesPersistent , False ,
01359          NULL ) ;
01360 
01361    XtManageChild( imag->yzx_rowcol ) ;
01362    /*----------------------------------------------------------------*/
01363 
01364    /*--------------------------------------------------------------*/
01365    imag->zxy_rowcol =
01366       XtVaCreateWidget(
01367          "dialog" , xmRowColumnWidgetClass , imag->view_rowcol ,
01368             XmNpacking     , XmPACK_TIGHT ,
01369             XmNorientation , XmHORIZONTAL ,
01370             XmNmarginHeight, 0 ,
01371             XmNmarginWidth , 0 ,
01372             XmNtraversalOn , False ,
01373             XmNinitialResourcesPersistent , False ,
01374          NULL ) ;
01375 
01376    imag->name_zxy_lab =
01377       XtVaCreateManagedWidget(
01378          "dialog" , xmLabelWidgetClass , imag->zxy_rowcol ,
01379             LABEL_ARG( zxy_3DIM ) ,
01380             XmNmarginHeight, 0 ,
01381             XmNmarginWidth , 0 ,
01382             XmNrecomputeSize , False ,
01383             XmNtraversalOn   , False ,
01384             XmNinitialResourcesPersistent , False ,
01385          NULL ) ;
01386 
01387    imag->image_zxy_pb =
01388       XtVaCreateManagedWidget(
01389          "dialog" , xmPushButtonWidgetClass , imag->zxy_rowcol ,
01390             LABEL_ARG("Image") ,
01391             XmNmarginHeight, 0 ,
01392             XmNmarginWidth , 0 ,
01393             XmNrecomputeSize , False ,
01394             XmNtraversalOn   , False ,
01395             XmNinitialResourcesPersistent , False ,
01396          NULL ) ;
01397 
01398    imag->graph_zxy_pb =
01399       XtVaCreateManagedWidget(
01400          "dialog" , xmPushButtonWidgetClass , imag->zxy_rowcol ,
01401             LABEL_ARG("Graph") ,
01402             XmNmarginHeight, 0 ,
01403             XmNmarginWidth , 0 ,
01404             XmNrecomputeSize , False ,
01405             XmNtraversalOn   , False ,
01406             XmNinitialResourcesPersistent , False ,
01407          NULL ) ;
01408 
01409    XtManageChild( imag->zxy_rowcol ) ;
01410    /*----------------------------------------------------------------*/
01411 
01412    XtAddCallback( imag->image_xyz_pb , XmNactivateCallback ,
01413                   AFNI_view_xyz_CB , im3d ) ;
01414 
01415    XtAddCallback( imag->image_yzx_pb , XmNactivateCallback ,
01416                   AFNI_view_xyz_CB , im3d ) ;
01417 
01418    XtAddCallback( imag->image_zxy_pb , XmNactivateCallback ,
01419                   AFNI_view_xyz_CB , im3d ) ;
01420 
01421    XtAddCallback( imag->graph_xyz_pb , XmNactivateCallback ,
01422                   AFNI_view_xyz_CB , im3d ) ;
01423 
01424    XtAddCallback( imag->graph_yzx_pb , XmNactivateCallback ,
01425                   AFNI_view_xyz_CB , im3d ) ;
01426 
01427    XtAddCallback( imag->graph_zxy_pb , XmNactivateCallback ,
01428                   AFNI_view_xyz_CB , im3d ) ;
01429 
01430    MCW_reghelp_children( imag->xyz_rowcol , AFNI_view_help ) ;
01431    MCW_reghelp_children( imag->yzx_rowcol , AFNI_view_help ) ;
01432    MCW_reghelp_children( imag->zxy_rowcol , AFNI_view_help ) ;
01433 
01434    MCW_reghint_children( imag->xyz_rowcol , "Open/raise viewing window" ) ;
01435    MCW_reghint_children( imag->yzx_rowcol , "Open/raise viewing window" ) ;
01436    MCW_reghint_children( imag->zxy_rowcol , "Open/raise viewing window" ) ;
01437 
01438    XtInsertEventHandler( imag->image_xyz_pb ,
01439                            ButtonPressMask , FALSE ,
01440                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01441    XtInsertEventHandler( imag->graph_xyz_pb ,
01442                            ButtonPressMask , FALSE ,
01443                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01444    XtInsertEventHandler( imag->image_yzx_pb ,
01445                            ButtonPressMask , FALSE ,
01446                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01447    XtInsertEventHandler( imag->graph_yzx_pb ,
01448                            ButtonPressMask , FALSE ,
01449                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01450    XtInsertEventHandler( imag->image_zxy_pb ,
01451                            ButtonPressMask , FALSE ,
01452                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01453    XtInsertEventHandler( imag->graph_zxy_pb ,
01454                            ButtonPressMask , FALSE ,
01455                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01456 
01457    /* imaging column finished, so manage its pieces */
01458 
01459    XtManageChild( imag->crosshair_rowcol ) ;
01460    XtManageChild( imag->view_rowcol ) ;
01461    XtManageChild( imag->rowcol ) ;
01462 
01463    /*-------------------------------------------------------*/
01464    /************ Controls for which view we see *************/
01465    /*-------------------------------------------------------*/
01466 
01467    marks->ov_visible = marks->tag_visible = False ;
01468 
01469    /*--- vertical rowcol to hold all viewing controls stuff ---*/
01470 
01471 STATUS("making view->rowcol") ;
01472 
01473    view->rowcol =
01474       XtVaCreateWidget(
01475          "dialog" , xmRowColumnWidgetClass , view->frame ,
01476             XmNpacking      , XmPACK_TIGHT ,
01477             XmNorientation  , XmVERTICAL   ,
01478             XmNtraversalOn , False ,
01479             XmNinitialResourcesPersistent , False ,
01480          NULL ) ;
01481 
01482    view_count = 0 ;  /* count of widgets in this column */
01483 
01484    /*--- radio box to control which view we see ---*/
01485 
01486    view->view_bbox =
01487       new_MCW_bbox( view->rowcol ,
01488                     LAST_VIEW_TYPE+1 ,
01489                     VIEW_typestr ,
01490                     MCW_BB_radio_one ,
01491                     MCW_BB_frame ,
01492                     AFNI_switchview_CB , (XtPointer) im3d ) ;
01493 
01494    for( id=0 ; id <= LAST_VIEW_TYPE ; id++ ){
01495       if( im3d->anat_dset[id] == NULL )
01496          XtSetSensitive( view->view_bbox->wbut[id] , False ) ;
01497    }
01498 
01499    MCW_set_bbox( view->view_bbox , 1 << im3d->vinfo->view_type ) ;
01500 
01501    ADDTO_KILL(im3d->kl,view->view_bbox) ;
01502 
01503    MCW_reghelp_children( view->view_bbox->wrowcol ,
01504       "Use these to select the\n"
01505       "type of view for your data" ) ;
01506 
01507    { char * hh[] = { "View data in original coordinates" ,
01508                      "View data in AC-PC aligned coordinates" ,
01509                      "View data in Talairach coordinates" } ;
01510      MCW_bbox_hints( view->view_bbox , 3 , hh ) ;
01511    }
01512 
01513    view_count += LAST_VIEW_TYPE+1 ;
01514 
01515    /*--- frame for marks buttons ---*/
01516 
01517    view->marks_frame =
01518       XtVaCreateManagedWidget(
01519          "dialog" , xmFrameWidgetClass , view->rowcol ,
01520             XmNshadowType , XmSHADOW_ETCHED_IN ,
01521             XmNshadowThickness , 2 ,
01522             XmNtraversalOn , False ,
01523             XmNinitialResourcesPersistent , False ,
01524          NULL ) ;
01525 
01526    view->marks_rowcol =
01527       XtVaCreateWidget(
01528          "dialog" , xmRowColumnWidgetClass , view->marks_frame ,
01529             XmNpacking      , XmPACK_TIGHT ,
01530             XmNorientation  , XmVERTICAL   ,
01531             XmNtraversalOn , False ,
01532             XmNinitialResourcesPersistent , False ,
01533          NULL ) ;
01534 
01535    /*--- pushbutton to allow user to define marks ---*/
01536 
01537    view->define_marks_pb =
01538       XtVaCreateManagedWidget(
01539          "dialog" , xmPushButtonWidgetClass , view->marks_rowcol ,
01540             LABEL_ARG("Define Markers") ,
01541             XmNmarginHeight , 1 ,
01542             XmNtraversalOn , False ,
01543             XmNinitialResourcesPersistent , False ,
01544          NULL ) ;
01545 
01546    view->marks_pb_inverted = False ;
01547 
01548    XtAddCallback( view->define_marks_pb , XmNactivateCallback ,
01549                   AFNI_define_CB , im3d ) ;
01550 
01551    MCW_register_help( view->define_marks_pb ,
01552       "Use this to allow you to define\n"
01553       "the markers for this view type" ) ;
01554    MCW_register_hint( view->define_marks_pb ,
01555                       "Open/close Talairach markers control panel" ) ;
01556 
01557    view_count ++ ;
01558 
01559    /*--- bbox to allow the user to turn marks off and on ---*/
01560 
01561    view->see_marks_bbox =
01562       new_MCW_bbox( view->marks_rowcol ,
01563                     1 , AFNI_see_marks_bbox_label ,
01564                     MCW_BB_check ,
01565                     MCW_BB_noframe ,
01566                     AFNI_see_marks_CB , (XtPointer) im3d ) ;
01567 
01568    view->see_marks_bbox->parent = (XtPointer) im3d ;
01569 
01570    MCW_set_bbox( view->see_marks_bbox , (marks->ov_visible) ? 0 : 1 ) ;
01571 
01572    MCW_reghelp_children( view->see_marks_bbox->wrowcol ,
01573                          AFNI_see_marks_bbox_help ) ;
01574    MCW_reghint_children( view->see_marks_bbox->wrowcol ,
01575                          "Visibility of Talairach markers and Tags" ) ;
01576 
01577    ADDTO_KILL(im3d->kl,view->see_marks_bbox) ;
01578 
01579    view_count ++ ;
01580 
01581    /*--- frame for func buttons ---*/
01582 
01583    im3d->vinfo->func_visible = False ;
01584 
01585    view->func_frame =
01586       XtVaCreateManagedWidget(
01587          "dialog" , xmFrameWidgetClass , view->rowcol ,
01588             XmNshadowType , XmSHADOW_ETCHED_IN ,
01589             XmNshadowThickness , 2 ,
01590             XmNtraversalOn , False ,
01591             XmNinitialResourcesPersistent , False ,
01592          NULL ) ;
01593 
01594    view->func_rowcol =
01595       XtVaCreateWidget(
01596          "dialog" , xmRowColumnWidgetClass , view->func_frame ,
01597             XmNpacking      , XmPACK_TIGHT ,
01598             XmNorientation  , XmVERTICAL   ,
01599             XmNtraversalOn , False ,
01600             XmNinitialResourcesPersistent , False ,
01601          NULL ) ;
01602 
01603    /*--- pushbutton to allow user to define functions ---*/
01604 
01605    view->define_func_pb =
01606       XtVaCreateManagedWidget(
01607          "dialog" , xmPushButtonWidgetClass , view->func_rowcol ,
01608             LABEL_ARG("Define OverLay") ,
01609             XmNmarginHeight , 1 ,
01610             XmNtraversalOn , False ,
01611             XmNinitialResourcesPersistent , False ,
01612          NULL ) ;
01613 
01614    view->func_pb_inverted = False ;
01615 
01616    XtAddCallback( view->define_func_pb , XmNactivateCallback ,
01617                   AFNI_define_CB , im3d ) ;
01618 
01619    MCW_register_help( view->define_func_pb ,
01620      "Use this to control the thresholds,\n"
01621       "colors, etc. for overlays" ) ;
01622    MCW_register_hint( view->define_func_pb ,
01623                       "Open/close overlay control panel" ) ;
01624 
01625    view_count ++ ;
01626 
01627    /*--- bbox to allow the user to turn function overlay off and on ---*/
01628 
01629    view->see_func_bbox =
01630       new_MCW_bbox( view->func_rowcol ,
01631                     1 , AFNI_see_func_bbox_label ,
01632                     MCW_BB_check ,
01633                     MCW_BB_noframe ,
01634                     AFNI_see_func_CB , (XtPointer) im3d ) ;
01635 
01636    view->see_func_bbox->parent = (XtPointer) im3d ;
01637 
01638    MCW_set_bbox( view->see_func_bbox , (im3d->vinfo->func_visible) ? 1 : 0 ) ;
01639 
01640    MCW_reghelp_children( view->see_func_bbox->wrowcol ,
01641                          AFNI_see_func_bbox_help ) ;
01642    MCW_reghint_children( view->see_func_bbox->wrowcol ,
01643                          "Visibility of color overlay" ) ;
01644 
01645    ADDTO_KILL(im3d->kl,view->see_func_bbox) ;
01646 
01647    view_count ++ ;
01648 
01649    /*--- pushbutton to allow user to define datamode ---*/
01650 
01651    view->define_dmode_pb =
01652       XtVaCreateManagedWidget(
01653          "dialog" , xmPushButtonWidgetClass , view->rowcol ,
01654             LABEL_ARG("Define Datamode") ,
01655             XmNmarginHeight , 1 ,
01656             XmNtraversalOn , False ,
01657             XmNinitialResourcesPersistent , False ,
01658          NULL ) ;
01659 
01660    view->dmode_pb_inverted = False ;
01661 
01662    XtAddCallback( view->define_dmode_pb , XmNactivateCallback ,
01663                   AFNI_define_CB , im3d ) ;
01664 
01665    MCW_register_help( view->define_dmode_pb ,
01666      "Use this to control the mode in which\n"
01667      "the anatomy data is viewed, and also\n"
01668      "to save 3D datasets to disk" ) ;
01669    MCW_register_hint( view->define_dmode_pb ,
01670                       "Open/close data manipulation control panel" ) ;
01671 
01672    view_count ++ ;
01673 
01674    /*--- frame for dataset choosers ---*/
01675 
01676    view->dataset_frame =
01677       XtVaCreateManagedWidget(
01678          "dialog" , xmFrameWidgetClass , view->rowcol ,
01679             XmNshadowType , XmSHADOW_ETCHED_IN ,
01680             XmNshadowThickness , 2 ,
01681             XmNtraversalOn , False ,
01682             XmNinitialResourcesPersistent , False ,
01683          NULL ) ;
01684 
01685    view->dataset_rowcol =
01686       XtVaCreateWidget(
01687          "dialog" , xmRowColumnWidgetClass , view->dataset_frame ,
01688             XmNpacking      , XmPACK_TIGHT ,
01689             XmNorientation  , XmVERTICAL   ,
01690             XmNtraversalOn , False ,
01691             XmNinitialResourcesPersistent , False ,
01692          NULL ) ;
01693 
01694    /*--- pushbuttons for dataset choice ---*/
01695 
01696    view->choose_sess_pb =
01697       XtVaCreateManagedWidget(
01698          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01699             LABEL_ARG("Switch Session") ,
01700             XmNmarginHeight , 1 ,
01701             XmNtraversalOn , False ,
01702             XmNinitialResourcesPersistent , False ,
01703          NULL ) ;
01704 
01705    XtAddCallback( view->choose_sess_pb , XmNactivateCallback ,
01706                   AFNI_choose_dataset_CB , im3d ) ;
01707 
01708    MCW_register_help( view->choose_sess_pb ,
01709      "Use this to choose from which\n"
01710      "session 3D datasets may be viewed." ) ;
01711    MCW_register_hint( view->choose_sess_pb ,
01712                       "Switch between session directories" ) ;
01713 
01714    view_count ++ ;
01715 
01716    view->choose_anat_pb =
01717       XtVaCreateManagedWidget(
01718          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01719             LABEL_ARG("Switch UnderLay") ,
01720             XmNmarginHeight , 1 ,
01721             XmNtraversalOn , False ,
01722             XmNinitialResourcesPersistent , False ,
01723          NULL ) ;
01724 
01725    XtAddCallback( view->choose_anat_pb , XmNactivateCallback ,
01726                   AFNI_choose_dataset_CB , im3d ) ;
01727 
01728    MCW_register_help( view->choose_anat_pb ,
01729         "Use this to choose which 3D\n"
01730         "dataset to view as the underlay\n"
01731         "(from the current session).\n\n"
01732         "N.B.: Datasets which can be\n"
01733         "  graphed are marked with a\n"
01734         "  '*' after their names.\n"
01735         "  Datasets that are compressed\n"
01736         "  have 'z' after their names."
01737    ) ;
01738    MCW_register_hint( view->choose_anat_pb ,
01739                       "Switch datasets for underlay/graphs" ) ;
01740 
01741    view_count ++ ;
01742 
01743    view->choose_func_pb =
01744       XtVaCreateManagedWidget(
01745          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01746             LABEL_ARG("Switch OverLay") ,
01747             XmNmarginHeight , 1 ,
01748             XmNtraversalOn , False ,
01749             XmNinitialResourcesPersistent , False ,
01750          NULL ) ;
01751 
01752    XtAddCallback( view->choose_func_pb , XmNactivateCallback ,
01753                   AFNI_choose_dataset_CB , im3d ) ;
01754 
01755    MCW_register_help( view->choose_func_pb ,
01756      "Use this to choose which\n"
01757      "overlay 3D dataset to view\n"
01758      "(from the current session).\n"
01759      "N.B.: Datasets that are compressed\n"
01760      "  have 'z' after their names."
01761     ) ;
01762    MCW_register_hint( view->choose_func_pb ,
01763                       "Switch datasets for color overlay" ) ;
01764 
01765    view_count ++ ;
01766 
01767    /* 19 Aug 2002: Surface chooser! */
01768 
01769    view->choose_surf_pb =
01770       XtVaCreateManagedWidget(
01771          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01772             LABEL_ARG("Control Surface") ,
01773             XmNmarginHeight , 1 ,
01774             XmNtraversalOn , False ,
01775             XmNinitialResourcesPersistent , False ,
01776          NULL ) ;
01777 
01778    XtAddCallback( view->choose_surf_pb , XmNactivateCallback ,
01779                   AFNI_choose_surface_CB , im3d ) ;
01780 
01781    MCW_register_help( view->choose_surf_pb ,
01782                        "Use this to control the display of\n"
01783                        "overlaid surfaces in image viewers:\n"
01784                        "\n"
01785                        "Surface nodes will have little boxes\n"
01786                        "  drawn, when they appear inside a slice.\n"
01787                        "Surface triangles will have line segments\n"
01788                        "  drawn, where they intersect a slice\n"
01789                        "  center-plane."
01790                     ) ;
01791    MCW_register_hint( view->choose_surf_pb ,
01792                       "Control surface overlay" ) ;
01793 
01794    view->swid = NULL ;   /* no widgets for surface yet */
01795 
01796    view_count ++ ;
01797 
01798 #ifdef POPUP_CHOOSERS
01799    (void) XtVaCreateManagedWidget(
01800             "dialog" , xmSeparatorWidgetClass , imag->popmenu ,
01801                 XmNseparatorType , XmDOUBLE_LINE ,
01802             NULL ) ;
01803 
01804    view->popchoose_sess_pb =
01805       XtVaCreateManagedWidget(
01806          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
01807             LABEL_ARG("Switch Session") ,
01808             XmNmarginHeight , 0 ,
01809             XmNtraversalOn , False ,
01810             XmNinitialResourcesPersistent , False ,
01811          NULL ) ;
01812 
01813    XtAddCallback( view->popchoose_sess_pb , XmNactivateCallback ,
01814                   AFNI_choose_dataset_CB , im3d ) ;
01815 
01816    view->popchoose_anat_pb =
01817       XtVaCreateManagedWidget(
01818          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
01819             LABEL_ARG("Switch UnderLay") ,
01820             XmNmarginHeight , 0 ,
01821             XmNtraversalOn , False ,
01822             XmNinitialResourcesPersistent , False ,
01823          NULL ) ;
01824 
01825    XtAddCallback( view->popchoose_anat_pb , XmNactivateCallback ,
01826                   AFNI_choose_dataset_CB , im3d ) ;
01827 
01828    view->popchoose_func_pb =
01829       XtVaCreateManagedWidget(
01830          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
01831             LABEL_ARG("Switch OverLay") ,
01832             XmNmarginHeight , 0 ,
01833             XmNtraversalOn , False ,
01834             XmNinitialResourcesPersistent , False ,
01835          NULL ) ;
01836 
01837    XtAddCallback( view->popchoose_func_pb , XmNactivateCallback ,
01838                   AFNI_choose_dataset_CB , im3d ) ;
01839 
01840    if( im3d->type == AFNI_IMAGES_VIEW ){
01841       XtUnmanageChild( view->popchoose_func_pb ) ;
01842       XtUnmanageChild( view->popchoose_anat_pb ) ;
01843       XtUnmanageChild( view->popchoose_sess_pb ) ;
01844    }
01845 
01846 #else  /* don't POPUP_CHOOSERS */
01847 
01848    view->popchoose_func_pb =
01849      view->popchoose_anat_pb =
01850        view->popchoose_sess_pb = NULL ;
01851 
01852 #endif /* POPUP_CHOOSERS*/
01853 
01854    /*--- all view controls made, now manage them ---*/
01855 
01856    XtManageChild( view->marks_rowcol ) ;
01857    XtManageChild( view->func_rowcol ) ;
01858    XtManageChild( view->dataset_rowcol ) ;
01859    XtManageChild( view->rowcol ) ;
01860 
01861    /** compute height of widgets in the view-> column **/
01862 
01863    xstr = XmStringCreateLtoR("(y[M",XmFONTLIST_DEFAULT_TAG );
01864    XtVaGetValues( view->choose_func_pb , XmNfontList , &xflist , NULL ) ;
01865    view_height = (10 + XmStringHeight(xflist,xstr)) * view_count ;
01866    XmStringFree( xstr ) ;
01867 
01868    EXRETURN ;
01869 }
01870 
01871 /*--------------------------------------------------------------------*/
01872 
01873 void AFNI_make_wid2( Three_D_View * im3d )
01874 {
01875    int ii ;
01876    Widget hrc ;  /* 30 Mar 2001 */
01877 
01878 ENTRY("AFNI_make_wid2") ;
01879 
01880    /*-------------------------------------------------------*/
01881    /************  Marker controls (lots of them) ************/
01882    /*-------------------------------------------------------*/
01883 
01884    /*----- horizontal rowcol to hold the two columns of controls -----*/
01885 
01886 STATUS("making marks->rowcol") ;
01887 
01888    marks->rowcol =
01889       XtVaCreateWidget(
01890          "dialog" , xmRowColumnWidgetClass , marks->frame ,
01891             XmNpacking     , XmPACK_TIGHT ,
01892             XmNorientation , XmHORIZONTAL ,
01893             XmNtraversalOn , False ,
01894             XmNinitialResourcesPersistent , False ,
01895          NULL ) ;
01896 
01897    /*---------------------------------------------------------------*/
01898    /*----- COLUMN 1: the toggle switches for selecting markers -----*/
01899    /*---------------------------------------------------------------*/
01900 
01901    marks->tog_frame =
01902       XtVaCreateManagedWidget(
01903          "dialog" , xmFrameWidgetClass , marks->rowcol ,
01904             XmNshadowType , XmSHADOW_ETCHED_IN ,
01905             XmNshadowThickness , 2 ,
01906             XmNinitialResourcesPersistent , False ,
01907          NULL ) ;
01908 
01909    /*--- rowcol to manage toggle buttons stuff ---*/
01910 
01911    marks->tog_rowcol =
01912       XtVaCreateWidget(
01913          "dialog" , xmRowColumnWidgetClass , marks->tog_frame ,
01914             XmNpacking     , XmPACK_TIGHT ,
01915             XmNorientation , XmVERTICAL   ,
01916             XmNtraversalOn , False ,
01917             XmNinitialResourcesPersistent , False ,
01918          NULL ) ;
01919 
01920    /*----- create radio buttons in pairs,
01921            one in the rowcol and one in the popmenu;
01922            N.B.: they are created unmanaged and will be managed
01923                  later, depending on defined marks for the view -----*/
01924 
01925    XtVaSetValues( marks->tog_rowcol ,
01926                      XmNradioBehavior , True ,
01927                      XmNradioAlwaysOne , False ,
01928                      XmNspacing      , 1 ,
01929                      XmNmarginHeight , 0 ,
01930                      XmNmarginWidth  , 0 ,
01931                   NULL ) ;
01932 
01933    marks->num_sometimes_popup = 0 ;
01934    marks->num_always_popup    = 0 ;
01935 
01936    marks->always_popup[(marks->num_always_popup)++] =
01937       XtVaCreateWidget(
01938          "dialog" , xmSeparatorWidgetClass , imag->popmenu ,
01939              XmNseparatorType , XmDOUBLE_LINE ,
01940          NULL ) ;
01941 
01942    { int ib ;
01943      Dimension isiz ;
01944      Pixel  fg_pix ;
01945 
01946      XtVaGetValues( marks->tog_rowcol , XmNforeground , &fg_pix , NULL ) ;
01947 
01948      for( ib=0 ; ib < MARKS_MAXNUM ; ib++ ){
01949 
01950         marks->tog[ib] =
01951            XtVaCreateWidget(
01952               "dialog" , xmToggleButtonWidgetClass , marks->tog_rowcol ,
01953                  XmNvisibleWhenOff , True ,
01954                  XmNmarginHeight , 0 ,
01955                  XmNmarginWidth  , 0 ,
01956                  XmNselectColor  , fg_pix ,
01957                  XmNtraversalOn  , False ,
01958                  XmNinitialResourcesPersistent , False ,
01959               NULL ) ;
01960 
01961      /* we set XmNindicatorSize resource for the popup to same as the
01962         menu above, since menu default size is tiny and looks bad! */
01963 
01964         if( ib==0 )
01965            XtVaGetValues( marks->tog[0],XmNindicatorSize,&isiz,NULL ) ;
01966 
01967         marks->sometimes_popup[(marks->num_sometimes_popup)++] =
01968         marks->poptog[ib] =
01969            XtVaCreateWidget(
01970               "dialog" , xmToggleButtonWidgetClass , imag->popmenu ,
01971                  XmNindicatorSize , isiz ,
01972                  XmNvisibleWhenOff , True ,
01973                  XmNmarginHeight , 0 ,
01974                  XmNmarginWidth  , 0 ,
01975                  XmNselectColor  , fg_pix ,
01976                  XmNtraversalOn  , False ,
01977                  XmNinitialResourcesPersistent , False ,
01978               NULL ) ;
01979 
01980         MCW_register_help( marks->tog[ib],&(marks->tog_help[ib][0]) ) ;
01981 
01982         XtAddCallback( marks->tog[ib] ,
01983                        XmNdisarmCallback ,
01984                        AFNI_marktog_CB , im3d ) ;
01985 
01986         XtAddCallback( marks->poptog[ib] ,
01987                        XmNvalueChangedCallback ,
01988                        AFNI_marktog_CB , im3d ) ;
01989 
01990         marks->inverted[ib] = False ;
01991      }  /* end of loop creating toggle buttons */
01992    }  /* end of radio toggle creation */
01993 
01994    /*----------------------------------------------------*/
01995    /*----- COLUMN 2: controls to manage the markers -----*/
01996    /*----------------------------------------------------*/
01997 
01998    marks->control_frame =
01999       XtVaCreateManagedWidget(
02000          "dialog" , xmFrameWidgetClass , marks->rowcol ,
02001             XmNshadowType , XmSHADOW_ETCHED_IN ,
02002             XmNshadowThickness , 2 ,
02003             XmNinitialResourcesPersistent , False ,
02004          NULL ) ;
02005 
02006    /*--- rowcol to manage marker control stuff ---*/
02007 
02008    marks->control_rowcol =
02009       XtVaCreateWidget(
02010          "dialog" , xmRowColumnWidgetClass , marks->control_frame ,
02011             XmNpacking     , XmPACK_TIGHT ,
02012             XmNorientation , XmVERTICAL   ,
02013             XmNtraversalOn , False ,
02014             XmNinitialResourcesPersistent , False ,
02015          NULL ) ;
02016 
02017    /*--- bbox to control editability of marks ---*/
02018 
02019    marks->edits_bbox =
02020       new_MCW_bbox( marks->control_rowcol ,
02021                     1 , AFNI_marks_edits_bbox_label ,
02022                     MCW_BB_check ,
02023                     MCW_BB_noframe ,
02024                     AFNI_marks_edits_CB , (XtPointer) im3d ) ;
02025 
02026    marks->edits_bbox->parent = (XtPointer) im3d ;
02027 
02028    MCW_reghelp_children( marks->edits_bbox->wrowcol ,
02029                          AFNI_marks_edits_bbox_help ) ;
02030    MCW_reghint_children( marks->edits_bbox->wrowcol ,
02031                          "Press IN to allow changes to markers" ) ;
02032 
02033    ADDTO_KILL(im3d->kl,marks->edits_bbox) ;
02034 
02035    /*----- frame to hold markers display stuff -----*/
02036 
02037    marks->disp_frame =
02038       XtVaCreateManagedWidget(
02039          "frame" , xmFrameWidgetClass , marks->control_rowcol ,
02040             XmNshadowType , XmSHADOW_ETCHED_IN ,
02041             XmNshadowThickness , 2 ,
02042             XmNinitialResourcesPersistent , False ,
02043          NULL ) ;
02044 
02045    /*----- rowcol to hold markers display stuff -----*/
02046 
02047    marks->disp_rowcol =
02048       XtVaCreateWidget(
02049          "dialog" , xmRowColumnWidgetClass , marks->disp_frame ,
02050             XmNpacking      , XmPACK_TIGHT ,
02051             XmNorientation  , XmVERTICAL   ,
02052             XmNtraversalOn , False ,
02053             XmNinitialResourcesPersistent , False ,
02054          NULL ) ;
02055 
02056    /*--- arrowval to control primary color ---*/
02057 
02058    marks->ov_pcolor = MIN(last_color,INIT_marks1_color) ;
02059    marks->ov_scolor = MIN(last_color,INIT_marks2_color) ;
02060 
02061    ii = AVOPT_STYLE ;
02062 
02063    if( ii == MCW_AV_downup ){
02064       marks->disp_pcolor_av =
02065          new_MCW_arrowval(
02066             marks->disp_rowcol ,    /* parent */
02067             "Pcolor" ,              /* label */
02068             MCW_AV_downup ,         /* arrow directions */
02069             0 ,                     /* min value */
02070             last_color ,            /* max value */
02071             marks->ov_pcolor ,      /* init value */
02072             MCW_AV_readtext ,       /* readonly text display */
02073             0 ,                     /* 0 decimal shift */
02074             AFNI_marks_disp_av_CB , /* click routine */
02075             (XtPointer) im3d ,      /* data */
02076             MCW_DC_ovcolor_text ,   /* text routine */
02077             (XtPointer) im3d->dc    /* data */
02078           ) ;
02079       marks->disp_pcolor_av->fastdelay  = 333 ;  /* slow down repeat action */
02080       marks->disp_pcolor_av->allow_wrap = 1 ;
02081       (void) MCW_DC_ovcolor_text( marks->disp_pcolor_av ,
02082                                   im3d->dc               ) ;  /* set color! */
02083    } else {
02084       marks->disp_pcolor_av =
02085          new_MCW_colormenu( marks->disp_rowcol , "Pcolor" , im3d->dc ,
02086                             0 , last_color , marks->ov_pcolor ,
02087                             AFNI_marks_disp_av_CB , (XtPointer) im3d ) ;
02088    }
02089 
02090    marks->disp_pcolor_av->parent = (XtPointer) im3d ;
02091 
02092    MCW_reghelp_children( marks->disp_pcolor_av->wrowcol ,
02093                          AFNI_disp_pcolor_help ) ;
02094    MCW_reghint_children( marks->disp_pcolor_av->wrowcol ,
02095                          "Color of primary marker" ) ;
02096 
02097    ADDTO_KILL(im3d->kl,marks->disp_pcolor_av) ;
02098 
02099    /*--- arrowval to control secondary color ---*/
02100 
02101    if( ii == MCW_AV_downup ){
02102       marks->disp_scolor_av =
02103          new_MCW_arrowval(
02104             marks->disp_rowcol ,    /* parent */
02105             "Scolor" ,              /* label */
02106             MCW_AV_downup ,         /* arrow directions */
02107             0 ,                     /* min value */
02108             last_color ,            /* max value */
02109             marks->ov_scolor ,      /* init value */
02110             MCW_AV_readtext ,       /* readonly text display */
02111             0 ,                     /* 0 decimal shift */
02112             AFNI_marks_disp_av_CB , /* click routine */
02113             (XtPointer) im3d ,      /* data */
02114             MCW_DC_ovcolor_text ,   /* text routine */
02115             (XtPointer) im3d->dc    /* data */
02116           ) ;
02117       marks->disp_scolor_av->fastdelay  = 333 ;  /* slow down repeat action */
02118       marks->disp_scolor_av->allow_wrap = 1 ;
02119       (void) MCW_DC_ovcolor_text( marks->disp_scolor_av ,
02120                                   im3d->dc               ) ;  /* set color! */
02121    } else {
02122       marks->disp_scolor_av =
02123          new_MCW_colormenu( marks->disp_rowcol , "Scolor" , im3d->dc ,
02124                             0 , last_color , marks->ov_scolor ,
02125                             AFNI_marks_disp_av_CB , (XtPointer) im3d ) ;
02126    }
02127 
02128    marks->disp_scolor_av->parent = (XtPointer) im3d ;
02129 
02130    MCW_reghelp_children( marks->disp_scolor_av->wrowcol ,
02131                          AFNI_disp_scolor_help ) ;
02132    MCW_reghint_children( marks->disp_scolor_av->wrowcol ,
02133                          "Color of secondary markers" ) ;
02134 
02135    ADDTO_KILL(im3d->kl,marks->disp_scolor_av) ;
02136 
02137    /*--- arrowval to control point size  ---*/
02138 
02139    marks->ov_size = INIT_marks_size ;  /* initialize overlay mask */
02140    marks->ov_gap  = INIT_marks_gap ;
02141    AFNI_make_ptmask( marks->ov_size , marks->ov_gap , &(marks->ov_mask) ) ;
02142 
02143    marks->disp_size_av =
02144       new_MCW_arrowval(
02145          marks->disp_rowcol ,    /* parent */
02146          "Size  " ,              /* label */
02147          AVOPT_STYLE ,           /* arrow directions */
02148          1  ,                    /* min value */
02149          MAXOVSIZE ,             /* max value */
02150          marks->ov_size ,        /* init value */
02151          MCW_AV_editext ,        /* input/output text display */
02152          0 ,                     /* 0 decimal shift */
02153          AFNI_marks_disp_av_CB , /* routine to call after click */
02154          (XtPointer) im3d ,      /* data to pass */
02155          NULL ,                  /* routine to call for text display */
02156          NULL                    /* data for text display routine */
02157       ) ;
02158 
02159    if( AVOPT_STYLE == MCW_AV_optmenu && MAXOVSIZE >= COLSIZE )
02160       AVOPT_columnize( marks->disp_size_av , 1+(MAXOVSIZE+1)/COLSIZE ) ;
02161 
02162    marks->disp_size_av->parent    = (XtPointer) im3d ;
02163    marks->disp_size_av->fastdelay = 333 ;  /* slow down repeat action */
02164 
02165    MCW_reghelp_children( marks->disp_size_av->wrowcol ,
02166                          AFNI_disp_size_help ) ;
02167    MCW_reghint_children( marks->disp_size_av->wrowcol ,
02168                          "Size of markers" ) ;
02169 
02170    ADDTO_KILL(im3d->kl,marks->disp_size_av) ;
02171 
02172    /*--- arrowval to control point gap  ---*/
02173 
02174    marks->disp_gap_av =
02175       new_MCW_arrowval(
02176          marks->disp_rowcol ,    /* parent */
02177          "Gap   " ,              /* label */
02178          AVOPT_STYLE ,           /* arrow directions */
02179          1  ,                    /* min value */
02180          MAXOVSIZE ,             /* max value */
02181          marks->ov_gap ,         /* init value */
02182          MCW_AV_editext ,        /* input/output text display */
02183          0 ,                     /* 0 decimal shift */
02184          AFNI_marks_disp_av_CB , /* routine to call after click */
02185          (XtPointer) im3d ,      /* data to pass */
02186          NULL ,                  /* routine to call for text display */
02187          NULL                    /* data for text display routine */
02188       ) ;
02189 
02190    if( AVOPT_STYLE == MCW_AV_optmenu && MAXOVSIZE >= COLSIZE )
02191       AVOPT_columnize( marks->disp_gap_av , 1+(MAXOVSIZE+1)/COLSIZE ) ;
02192 
02193    marks->disp_size_av->parent    = (XtPointer) im3d ;
02194    marks->disp_size_av->fastdelay = 333 ;  /* slow down repeat action */
02195 
02196    MCW_reghelp_children( marks->disp_gap_av->wrowcol ,
02197                          AFNI_disp_gap_help ) ;
02198    MCW_reghint_children( marks->disp_gap_av->wrowcol ,
02199                          "Size of gap in markers" ) ;
02200 
02201    ADDTO_KILL(im3d->kl,marks->disp_size_av) ;
02202 
02203    /*----- rowcol to hold action pushbuttons -----*/
02204 
02205    marks->action_rowcol =
02206       XtVaCreateWidget(
02207          "dialog" , xmRowColumnWidgetClass , marks->control_rowcol ,
02208             XmNorientation  , XmHORIZONTAL ,
02209             XmNtraversalOn , False ,
02210             XmNinitialResourcesPersistent , False ,
02211          NULL ) ;
02212 
02213    /*----- set point pushbutton -----*/
02214 
02215    marks->action_set_pb =
02216       XtVaCreateManagedWidget(
02217          "dialog" , xmPushButtonWidgetClass , marks->action_rowcol ,
02218             LABEL_ARG("Set") ,
02219             XmNtraversalOn , False ,
02220             XmNinitialResourcesPersistent , False ,
02221          NULL ) ;
02222 
02223    XtAddCallback( marks->action_set_pb , XmNactivateCallback ,
02224                   AFNI_marks_action_CB , im3d ) ;
02225 
02226    MCW_register_help( marks->action_set_pb , AFNI_marks_set_help ) ;
02227    MCW_register_hint( marks->action_set_pb , "Set marker at crosshairs" ) ;
02228 
02229    /*----- clear point pushbutton -----*/
02230 
02231    marks->action_clear_pb =
02232       XtVaCreateManagedWidget(
02233          "dialog" , xmPushButtonWidgetClass , marks->action_rowcol ,
02234             LABEL_ARG("Clear") ,
02235             XmNtraversalOn , False ,
02236             XmNinitialResourcesPersistent , False ,
02237          NULL ) ;
02238 
02239    XtAddCallback( marks->action_clear_pb , XmNactivateCallback ,
02240                   AFNI_marks_action_CB , im3d ) ;
02241 
02242    MCW_register_help( marks->action_clear_pb , AFNI_marks_clear_help ) ;
02243    MCW_register_hint( marks->action_clear_pb , "Un-set primary marker" ) ;
02244 
02245    /*----- copies of these pushbuttons on the popup menu -----*/
02246 
02247    marks->always_popup[(marks->num_always_popup)++] =
02248       XtVaCreateManagedWidget(
02249              "dialog" , xmSeparatorWidgetClass , imag->popmenu ,
02250                  XmNseparatorType , XmDOUBLE_LINE ,
02251              NULL ) ;
02252 
02253    marks->always_popup[(marks->num_always_popup)++] =
02254    marks->pop_set_pb =
02255       XtVaCreateWidget(
02256          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
02257             LABEL_ARG("Set") ,
02258             XmNmarginHeight , 0 ,
02259             XmNtraversalOn , False ,
02260             XmNinitialResourcesPersistent , False ,
02261          NULL ) ;
02262 
02263    XtAddCallback( marks->pop_set_pb , XmNactivateCallback ,
02264                   AFNI_marks_action_CB , im3d ) ;
02265 
02266    marks->always_popup[(marks->num_always_popup)++] =
02267    marks->pop_clear_pb =
02268       XtVaCreateWidget(
02269          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
02270             LABEL_ARG("Clear") ,
02271             XmNmarginHeight , 0 ,
02272             XmNtraversalOn , False ,
02273             XmNinitialResourcesPersistent , False ,
02274          NULL ) ;
02275 
02276    XtAddCallback( marks->pop_clear_pb , XmNactivateCallback ,
02277                   AFNI_marks_action_CB , im3d ) ;
02278 
02279    /*----- a "quality" button (not on the popup menu) -----*/
02280 
02281    marks->action_quality_pb =
02282       XtVaCreateManagedWidget(
02283          "dialog" , xmPushButtonWidgetClass , marks->action_rowcol ,
02284             LABEL_ARG("Quality?") ,
02285             XmNtraversalOn , False ,
02286             XmNinitialResourcesPersistent , False ,
02287          NULL ) ;
02288 
02289    XtAddCallback( marks->action_quality_pb , XmNactivateCallback ,
02290                   AFNI_marks_action_CB , im3d ) ;
02291 
02292    MCW_register_help( marks->action_quality_pb , AFNI_marks_quality_help ) ;
02293    MCW_register_hint( marks->action_quality_pb , "Check markers for consistency" ) ;
02294 
02295    /*----- below the line, put the transformation controls -----*/
02296 
02297    (void) XtVaCreateManagedWidget(
02298              "dialog" , xmSeparatorWidgetClass , marks->control_rowcol ,
02299                  XmNseparatorType , XmDOUBLE_LINE ,
02300              NULL ) ;
02301 
02302    /*----- the transformation control -----*/
02303 
02304    marks->transform_pb =
02305       XtVaCreateManagedWidget(
02306          "dialog" , xmPushButtonWidgetClass , marks->control_rowcol ,
02307             LABEL_ARG("Transform Data") ,
02308             XmNtraversalOn , False ,
02309             XmNinitialResourcesPersistent , False ,
02310          NULL ) ;
02311 
02312    XtAddCallback( marks->transform_pb , XmNactivateCallback ,
02313                   AFNI_marks_transform_CB , im3d ) ;
02314 
02315    MCW_register_help( marks->transform_pb , AFNI_marks_transform_help ) ;
02316    MCW_register_hint( marks->transform_pb , "Compute transformation from markers" ) ;
02317 
02318    /*----- 3/06/96: the "big Talairach box" button -----*/
02319 
02320    marks->tlrc_big_bbox =
02321       new_MCW_bbox( marks->control_rowcol ,
02322                     1 , AFNI_tlrc_big_bbox_label ,
02323                     MCW_BB_check , MCW_BB_noframe ,
02324                     NULL , NULL                    ) ;    /* no callback */
02325 
02326    marks->tlrc_big_bbox->parent = (XtPointer) im3d ;
02327 
02328    MCW_reghelp_children( marks->tlrc_big_bbox->wrowcol ,
02329                          AFNI_tlrc_big_bbox_help ) ;
02330    MCW_reghint_children( marks->tlrc_big_bbox->wrowcol ,
02331                          "Use 'big' Talairach bounding box" ) ;
02332 
02333    ADDTO_KILL(im3d->kl,marks->tlrc_big_bbox) ;
02334 
02335    if( GLOBAL_argopt.tlrc_big )
02336       MCW_set_bbox( marks->tlrc_big_bbox , 1 ) ;
02337 
02338    /*----- manage the managers -----*/
02339 
02340    XtManageChild( marks->tog_rowcol ) ;
02341    XtManageChild( marks->disp_rowcol ) ;
02342    XtManageChild( marks->action_rowcol ) ;
02343    XtManageChild( marks->control_rowcol ) ;
02344    XtManageChild( marks->rowcol ) ;
02345 
02346    /*-----------------------------------------------------*/
02347    /**************** Function controls ********************/
02348    /*-----------------------------------------------------*/
02349 
02350 /** old hard-wired definition */
02351 #define SELECTOR_HEIGHT 240
02352 
02353    sel_height = view_height - 19 ;
02354 
02355 STATUS("making func->rowcol") ;
02356 
02357    func->rowcol =
02358       XtVaCreateWidget(
02359          "dialog" , xmRowColumnWidgetClass , func->frame ,
02360             XmNorientation , XmHORIZONTAL ,
02361             XmNpacking , XmPACK_TIGHT ,
02362             XmNtraversalOn , False ,
02363             XmNinitialResourcesPersistent , False ,
02364          NULL ) ;
02365 
02366    /*-- threshold stuff --*/
02367 
02368    func->thr_rowcol =
02369       XtVaCreateWidget(
02370          "dialog" , xmRowColumnWidgetClass , func->rowcol ,
02371             XmNorientation , XmVERTICAL ,
02372             XmNpacking , XmPACK_TIGHT ,
02373             XmNmarginHeight, 0 ,
02374             XmNmarginWidth , 0 ,
02375             XmNtraversalOn , False ,
02376             XmNinitialResourcesPersistent , False ,
02377          NULL ) ;
02378 
02379    func->thr_label =
02380       XtVaCreateManagedWidget(
02381          "dialog" , xmLabelWidgetClass , func->thr_rowcol ,
02382             LABEL_ARG("Thr") ,
02383             XmNrecomputeSize , False ,
02384             XmNinitialResourcesPersistent , False ,
02385          NULL ) ;
02386 
02387 #ifdef FIX_SCALE_VALUE_PROBLEM
02388    MCW_register_help( func->thr_label ,
02389       "This version of AFNI has been\n"
02390       "compiled to show the slider value\n"
02391       "here, since there is a bug in the\n"
02392       "Motif library for this computer system."
02393    ) ;
02394 #else
02395 #endif
02396    MCW_register_help( func->thr_label ,
02397       "Shows the type of threshold\n"
02398       "statistic that is available\n"
02399       "at this moment.  Names mean:\n\n"
02400       FUNC_THR_LABEL " = " FUNC_THR_DESCRIPTOR "\n"
02401       FUNC_COR_LABEL " = " FUNC_COR_DESCRIPTOR "\n"
02402       FUNC_TT_LABEL  " = " FUNC_TT_DESCRIPTOR  "\n"
02403       FUNC_FT_LABEL  " = " FUNC_FT_DESCRIPTOR  "\n"
02404       FUNC_ZT_LABEL  " = " FUNC_ZT_DESCRIPTOR  "\n"
02405       FUNC_CT_LABEL  " = " FUNC_CT_DESCRIPTOR  "\n"
02406       FUNC_BT_LABEL  " = " FUNC_BT_DESCRIPTOR  "\n"
02407       FUNC_BN_LABEL  " = " FUNC_BN_DESCRIPTOR  "\n"
02408       FUNC_GT_LABEL  " = " FUNC_GT_DESCRIPTOR  "\n"
02409       FUNC_PT_LABEL  " = " FUNC_PT_DESCRIPTOR  "\n"
02410    ) ;
02411    MCW_register_hint( func->thr_label , "Type of threshold statistic" ) ;
02412 
02413    FIX_SCALE_VALUE(im3d) ;
02414 
02415 #define SCALE_EXTRA 66
02416 
02417   {Widget qqq ; int iqqq ;
02418    char thr_str[] = "-----------" ;
02419    char zork[2] ;
02420 
02421    int smax , stop , decim , sstep ;                  /* 30 Nov 1997:       */
02422    decim = THR_TOP_EXPON ;                            /* compute parameters */
02423    smax  = (int)( pow(10.0,decim) + 0.001 ) ;         /* for scale display. */
02424    stop  = smax - 1 ;
02425    sstep = smax / 1000 ;
02426    { char *eee = getenv("AFNI_THRESH_BIGSTEP") ;      /* 09 May 2003 */
02427      if( eee != NULL ){ iqqq=strtol(eee,NULL,10); if(iqqq > 0) sstep=iqqq; }
02428    }
02429    if( sstep < 1 ) sstep = 1 ; else if( sstep > (smax/10) ) sstep = (smax/10) ;
02430 
02431 #ifdef BOXUP_SCALE
02432    qqq = XtVaCreateManagedWidget(
02433            "dialog" , xmFrameWidgetClass , func->thr_rowcol ,
02434             XmNshadowType , XmSHADOW_ETCHED_IN ,
02435             XmNtraversalOn , False ,
02436             XmNinitialResourcesPersistent , False ,
02437          NULL ) ;
02438 #else
02439    qqq = func->thr_rowcol ;
02440 #endif
02441 
02442    func->thr_scale =
02443       XtVaCreateManagedWidget(
02444          "scale" , xmScaleWidgetClass , qqq ,
02445             XmNminimum , 0 ,             /* 30 Nov 1997: changed */
02446             XmNmaximum , stop ,          /* range to be computed */
02447             XmNscaleMultiple , sstep ,
02448             XmNdecimalPoints , decim ,
02449 #ifdef FIX_SCALE_VALUE_PROBLEM
02450             XmNshowValue , False ,
02451 #else
02452             XmNshowValue , True ,
02453 #endif
02454             XmNvalue , (int)(smax*im3d->vinfo->func_threshold) ,
02455             XmNorientation , XmVERTICAL ,
02456             XmNheight , sel_height ,
02457             XmNborderWidth , 0 ,
02458             XmNtraversalOn , False ,
02459             XmNinitialResourcesPersistent , False ,
02460          NULL ) ;
02461 
02462 #ifdef FIX_SCALE_SIZE_PROBLEM
02463    XtVaSetValues( func->thr_scale ,
02464                     XmNuserData , (XtPointer) sel_height ,
02465                   NULL ) ;
02466 #endif
02467 
02468 #ifdef USING_LESSTIF
02469    XtVaSetValues( func->thr_scale , XmNscaleWidth,24 , NULL ) ;
02470 #endif
02471 
02472 #ifdef FIX_SCALE_VALUE_PROBLEM
02473    for( iqqq=0 ; iqqq < strlen(thr_str) ; iqqq++ ){
02474       zork[0] = thr_str[iqqq] ; zork[1] = '\0' ;
02475       XtVaCreateManagedWidget( zork,xmLabelWidgetClass,func->thr_scale,NULL ) ;
02476    }
02477 #endif
02478   }
02479 
02480    XtAddCallback( func->thr_scale , XmNvalueChangedCallback ,
02481                   AFNI_thr_scale_CB , im3d ) ;
02482 
02483    XtAddCallback( func->thr_scale , XmNdragCallback ,
02484                   AFNI_thr_scale_drag_CB , im3d ) ;
02485 
02486    MCW_reghelp_children( func->thr_scale ,
02487       "Drag the slider bar to\n"
02488       "adjust the threshold\n"
02489       "for overlay display.\n\n"
02490       "* Threshold doesn't apply\n"
02491       "  if dataset is RGB-format.\n"
02492       "* Threshold applies to 'Thr'\n"
02493       "  sub-brick.\n"
02494     ) ;
02495 #if 0
02496    MCW_register_hint( func->thr_scale , "Threshold for color overlay" ) ;
02497 #endif
02498 
02499    /** Mar 1996: label for computed p-value, under scale **/
02500 
02501    func->thr_pval_label =
02502       XtVaCreateManagedWidget(
02503          "dialog" , xmLabelWidgetClass , func->thr_rowcol ,
02504             LABEL_ARG( THR_PVAL_LABEL_NONE ) ,
02505             XmNrecomputeSize , False ,
02506             XmNinitialResourcesPersistent , False ,
02507          NULL ) ;
02508 
02509    MCW_register_help( func->thr_pval_label ,
02510          "Shows the estimated significance\n"
02511          "(p value) of the threshold above,\n"
02512          "if possible.\n"
02513          "* If not possible, will display as\n"
02514          "   '[N/A]' instead.\n"
02515          "* p's that display as 1.2-7 should\n"
02516          "   be interpreted as 1.2 x 10^(-7).\n"
02517          "* This is the significance PER VOXEL." ) ;
02518    MCW_register_hint( func->thr_pval_label , "Nominal p-value per voxel" ) ;
02519 
02520    /** Jul 1997: optmenu to choose top value for scale **/
02521 
02522    func->thr_top_av = new_MCW_arrowval( func->thr_rowcol ,
02523                                         "**" ,
02524                                         AVOPT_STYLE ,
02525                                         0,THR_TOP_EXPON,0 ,
02526                                         MCW_AV_notext , 0 ,
02527                                         AFNI_thresh_top_CB , (XtPointer) im3d ,
02528                                         AFNI_thresh_tlabel_CB , NULL ) ;
02529 
02530    im3d->vinfo->func_thresh_top = 1.0 ;
02531 
02532    MCW_reghelp_children( func->thr_top_av->wrowcol ,
02533                            "Use this to set\n"
02534                            "the power-of-10\n"
02535                            "range of the\n"
02536                            "threshold slider\n"
02537                            "above."
02538                        ) ;
02539 
02540    MCW_reghint_children( func->thr_top_av->wrowcol ,
02541                          "Power-of-10 range of slider" ) ;
02542 
02543    /*-- intensity threshold stuff --*/
02544 
02545    func->inten_rowcol =
02546       XtVaCreateWidget(
02547          "dialog" , xmRowColumnWidgetClass , func->rowcol ,
02548             XmNorientation , XmVERTICAL ,
02549             XmNmarginHeight, 0 ,
02550             XmNmarginWidth , 0 ,
02551             XmNpacking , XmPACK_TIGHT ,
02552             XmNtraversalOn , False ,
02553             XmNinitialResourcesPersistent , False ,
02554          NULL ) ;
02555 
02556    func->inten_label =
02557       XtVaCreateManagedWidget(
02558          "dialog" , xmLabelWidgetClass , func->inten_rowcol ,
02559             LABEL_ARG("Inten") ,
02560             XmNinitialResourcesPersistent , False ,
02561          NULL ) ;
02562 
02563    /**-- 17 Dec 1997: pbar menu hidden on the inten_label --**/
02564 
02565 #ifdef BAD_BUTTON3_POPUPS   /* 21 Jul 2003 */
02566    func->pbar_menu = XmCreatePopupMenu( func->inten_rowcol, "menu", NULL, 0 ) ;
02567 #else
02568    func->pbar_menu = XmCreatePopupMenu( func->inten_label , "menu", NULL, 0 ) ;
02569 #endif
02570 
02571    SAVEUNDERIZE(XtParent(func->pbar_menu)) ; /* 27 Feb 2001 */
02572 
02573    VISIBILIZE_WHEN_MAPPED(func->pbar_menu) ;
02574 
02575    XtInsertEventHandler( func->inten_label ,      /* handle events in label */
02576 
02577                                0
02578                              | ButtonPressMask   /* button presses */
02579                             ,
02580                             FALSE ,              /* nonmaskable events? */
02581                             AFNI_pbar_EV ,       /* handler */
02582                             (XtPointer) im3d ,   /* client data */
02583                             XtListTail           /* last in queue */
02584                           ) ;
02585 
02586 #if 0
02587    allow_MCW_optmenu_popup(0) ;  /* 12 Dec 2001 */
02588 #endif
02589 
02590    (void) XtVaCreateManagedWidget(
02591             "dialog" , xmLabelWidgetClass , func->pbar_menu ,
02592                LABEL_ARG("--- Cancel ---") ,
02593                XmNrecomputeSize , False ,
02594                XmNinitialResourcesPersistent , False ,
02595             NULL ) ;
02596 
02597    (void) XtVaCreateManagedWidget(
02598             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02599              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02600 
02601    /*--- environment button in menu [10 Feb 2004] ---*/
02602 
02603 #ifdef ALLOW_PLUGINS
02604    func->pbar_environment_pb =
02605       XtVaCreateManagedWidget(
02606          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02607             LABEL_ARG("Edit Environment") ,
02608             XmNmarginHeight , 0 ,
02609             XmNtraversalOn , False ,
02610             XmNinitialResourcesPersistent , False ,
02611          NULL ) ;
02612    XtAddCallback( func->pbar_environment_pb , XmNactivateCallback ,
02613                   AFNI_pbar_CB , im3d ) ;
02614 #else
02615    func->pbar_environment_pb = NULL ;
02616 #endif
02617 
02618    func->pbar_equalize_pb =
02619       XtVaCreateManagedWidget(
02620          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02621             LABEL_ARG("Equalize Spacing") ,
02622             XmNmarginHeight , 0 ,
02623             XmNtraversalOn , False ,
02624             XmNinitialResourcesPersistent , False ,
02625          NULL ) ;
02626 
02627    XtAddCallback( func->pbar_equalize_pb , XmNactivateCallback ,
02628                   AFNI_pbar_CB , im3d ) ;
02629 
02630    MCW_register_hint( func->pbar_equalize_pb , "Space separators equally" ) ;
02631 
02632    func->pbar_settop_pb =
02633       XtVaCreateManagedWidget(
02634          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02635             LABEL_ARG("Set Top Value") ,
02636             XmNmarginHeight , 0 ,
02637             XmNtraversalOn , False ,
02638             XmNinitialResourcesPersistent , False ,
02639          NULL ) ;
02640 
02641    XtAddCallback( func->pbar_settop_pb , XmNactivateCallback ,
02642                   AFNI_pbar_CB , im3d ) ;
02643 
02644    MCW_register_hint( func->pbar_settop_pb , "Is scaled by 'range' controls" ) ;
02645 
02646    (void) XtVaCreateManagedWidget(
02647             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02648              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02649 
02650    func->pbar_readin_pb =
02651       XtVaCreateManagedWidget(
02652          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02653             LABEL_ARG("Read in palette") ,
02654             XmNmarginHeight , 0 ,
02655             XmNtraversalOn , False ,
02656             XmNinitialResourcesPersistent , False ,
02657          NULL ) ;
02658 
02659    MCW_register_hint( func->pbar_readin_pb , "Read in a palette file" ) ;
02660 
02661    XtAddCallback( func->pbar_readin_pb , XmNactivateCallback ,
02662                   AFNI_pbar_CB , im3d ) ;
02663 
02664    func->pbar_writeout_pb =
02665       XtVaCreateManagedWidget(
02666          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02667             LABEL_ARG("Write out palette") ,
02668             XmNmarginHeight , 0 ,
02669             XmNtraversalOn , False ,
02670             XmNinitialResourcesPersistent , False ,
02671          NULL ) ;
02672 
02673    MCW_register_hint( func->pbar_writeout_pb ,
02674                       "Write out a palette file" ) ;
02675 
02676    XtAddCallback( func->pbar_writeout_pb , XmNactivateCallback ,
02677                   AFNI_pbar_CB , im3d ) ;
02678 
02679    /* 15 Jun 2000: image save button */
02680 
02681    func->pbar_saveim_pb =
02682       XtVaCreateManagedWidget(
02683          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02684             LABEL_ARG("Save to PPM") ,
02685             XmNmarginHeight , 0 ,
02686             XmNtraversalOn , False ,
02687             XmNinitialResourcesPersistent , False ,
02688          NULL ) ;
02689 
02690    MCW_register_hint( func->pbar_saveim_pb ,
02691                       "Write out as image file" );
02692 
02693    XtAddCallback( func->pbar_saveim_pb , XmNactivateCallback ,
02694                   AFNI_pbar_CB , im3d ) ;
02695 
02696    func->pbar_showtable_pb =
02697       XtVaCreateManagedWidget(
02698          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02699             LABEL_ARG("Show Palette Table") ,
02700             XmNmarginHeight , 0 ,
02701             XmNtraversalOn , False ,
02702             XmNinitialResourcesPersistent , False ,
02703          NULL ) ;
02704 
02705    XtAddCallback( func->pbar_showtable_pb , XmNactivateCallback ,
02706                   AFNI_pbar_CB , im3d ) ;
02707 
02708    MCW_register_hint( func->pbar_showtable_pb , "Will popup a listing window" ) ;
02709 
02710    (void) XtVaCreateManagedWidget(
02711             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02712              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02713 
02714    func->pbar_palette_av = new_MCW_arrowval(
02715                              func->pbar_menu ,     /* parent Widget */
02716                              "Set Pal " ,          /* label */
02717                              MCW_AV_optmenu ,      /* option menu style */
02718                              0 ,                   /* first option */
02719                              1 ,                   /* last option */
02720                              0 ,                   /* initial selection */
02721                              MCW_AV_readtext ,     /* ignored but needed */
02722                              0 ,                   /* ditto */
02723                              AFNI_palette_av_CB ,  /* callback when changed */
02724                              (XtPointer) im3d ,    /* data for above */
02725                              MCW_av_substring_CB , /* text creation routine */
02726                              AFNI_dummy_av_label   /* data for above */
02727                            ) ;
02728 
02729    MCW_reghint_children( func->pbar_palette_av->wrowcol , "Choose a palette" ) ;
02730 
02731    if( GPT != NULL && PALTAB_NUM(GPT) > 0 ){
02732       refit_MCW_optmenu( func->pbar_palette_av ,
02733                            0 ,                     /* new minval */
02734                            PALTAB_NUM(GPT)-1 ,     /* new maxval */
02735                            0 ,                     /* new inival */
02736                            0 ,                     /* new decim? */
02737                            AFNI_palette_label_CB , /* text routine */
02738                            NULL                    /* text data */
02739                         ) ;
02740    } else {
02741       XtUnmanageChild( func->pbar_palette_av->wrowcol ) ;
02742    }
02743 
02744    /*-- 15 Jun 2000: 0D func list --*/
02745 
02746    (void) XtVaCreateManagedWidget(
02747             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02748              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02749 
02750    func->pbar_transform0D_av = new_MCW_arrowval(
02751                              func->pbar_menu ,     /* parent Widget */
02752                              "Tran 0D " ,          /* label */
02753                              MCW_AV_optmenu ,      /* option menu style */
02754                              0 ,                   /* first option */
02755                              1 ,                   /* last option */
02756                              0 ,                   /* initial selection */
02757                              MCW_AV_readtext ,     /* ignored but needed */
02758                              0 ,                   /* ditto */
02759                              AFNI_palette_tran_CB, /* callback when changed */
02760                              (XtPointer) im3d ,    /* data for above */
02761                              MCW_av_substring_CB , /* text creation routine */
02762                              AFNI_dummy_av_label   /* data for above */
02763                            ) ;
02764 
02765    MCW_reghint_children( func->pbar_transform0D_av->wrowcol ,
02766                          "Transform overlay image values" ) ;
02767    XtUnmanageChild( func->pbar_transform0D_av->wrowcol ) ;
02768    func->pbar_transform0D_index = 0 ;
02769    func->pbar_transform0D_func  = NULL ;
02770 
02771    /*-- 16 Jun 2000: 2D func list --*/
02772 
02773    (void) XtVaCreateManagedWidget(
02774             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02775              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02776 
02777    func->pbar_transform2D_av = new_MCW_arrowval(
02778                              func->pbar_menu ,     /* parent Widget */
02779                              "Tran 2D " ,          /* label */
02780                              MCW_AV_optmenu ,      /* option menu style */
02781                              0 ,                   /* first option */
02782                              1 ,                   /* last option */
02783                              0 ,                   /* initial selection */
02784                              MCW_AV_readtext ,     /* ignored but needed */
02785                              0 ,                   /* ditto */
02786                              AFNI_palette_tran_CB, /* callback when changed */
02787                              (XtPointer) im3d ,    /* data for above */
02788                              MCW_av_substring_CB , /* text creation routine */
02789                              AFNI_dummy_av_label   /* data for above */
02790                            ) ;
02791 
02792    MCW_reghint_children( func->pbar_transform2D_av->wrowcol ,
02793                          "Transform overlay image values" ) ;
02794    XtUnmanageChild( func->pbar_transform2D_av->wrowcol ) ;
02795    func->pbar_transform2D_index = 0 ;
02796    func->pbar_transform2D_func  = NULL ;
02797 
02798 #if 0
02799    allow_MCW_optmenu_popup(1) ;  /* 12 Dec 2001 */
02800 #endif
02801 
02802    /**-- Color pbar to control intensity-to-color mapping --**/
02803 
02804    { float pmin , pmax ;  /* posfunc added 3/21/95 */
02805 
02806      pmax  = 1.0 ;
02807      pmin  = (im3d->vinfo->use_posfunc) ? (0.0) : (-1.0) ;
02808      npane = (im3d->vinfo->use_posfunc) ? INIT_panes_pos
02809                                         : INIT_panes_sgn ;
02810 
02811 #if 0
02812      sel_height -= (8+view_height/view_count) * 1 ; /* 1 = widgets below pbar */
02813 #else
02814      sel_height -= (8+view_height/view_count) * 0.5 ;
02815 #endif
02816 
02817      func->inten_pbar = new_MCW_pbar(
02818                           func->inten_rowcol ,        /* parent */
02819                           im3d->dc ,                  /* display */
02820                           npane ,                     /* number panes */
02821                           sel_height / npane ,        /* init pane height */
02822                           pmin , pmax ,               /* value range */
02823                           AFNI_inten_pbar_CB ,        /* callback */
02824                           (XtPointer) im3d    );      /* callback data */
02825 
02826      /* 04 Feb 2002: colorscale-ize? */
02827 
02828      if( im3d->dc->visual_class == TrueColor ){
02829        char *eee = getenv("AFNI_COLORSCALE_DEFAULT") ;
02830        if( eee == NULL ) eee = getenv("AFNI_COLOR_SCALE_DEFAULT") ;
02831        if( eee == NULL || strcmp(eee,"NO") != 0 ){
02832          PBAR_set_bigmode( func->inten_pbar , 1 , pmin,pmax ) ;
02833          PBAR_set_bigmap( func->inten_pbar , eee ) ;
02834        }
02835      }
02836    }
02837 
02838    func->inten_pbar->parent       = (XtPointer) im3d ;
02839    func->inten_pbar->mode         = (im3d->vinfo->use_posfunc) ? (1) : (0) ;
02840    func->inten_pbar->npan_save[0] = INIT_panes_sgn ;
02841    func->inten_pbar->npan_save[1] = INIT_panes_pos ;
02842    func->inten_pbar->hide_changes = INIT_panes_hide ;
02843 
02844    AFNI_setup_inten_pbar( im3d ) ;  /* other setup stuff (afni_func.c) */
02845 
02846    MCW_reghelp_children( func->inten_pbar->panew ,
02847       "Drag the separator bars to alter the thresholds.\n"
02848       "Click in a pane to alter the color for that range.\n\n"
02849       "The overlay dataset value that maps to 1.0 is\n"
02850       "determined by the 'autoRange' controls to the right.\n"
02851       "\n"
02852       "In 'continuous' colorscale mode, Button-1 click flips\n"
02853       "colors top-to-bottom;  Button-3 click shows a menu of\n"
02854       "available colorscales.\n"
02855    ) ;
02856 
02857    MCW_reghelp_children( func->inten_pbar->top ,
02858       "Drag the separator bars to alter the thresholds.\n"
02859       "Click in a pane to alter the color for that range.\n\n"
02860       "The overlay dataset value that maps to 1.0 is\n"
02861       "determined by the 'autoRange' controls to the right.\n"
02862       "\n"
02863       "In 'continuous' colorscale mode, Button-1 click flips\n"
02864       "colors top-to-bottom;  Button-3 click shows a menu of\n"
02865       "available colorscales.\n"
02866    ) ;
02867 
02868    MCW_register_help( func->inten_label ,
02869       "Drag the separator bars to alter the thresholds.\n"
02870       "Click in a pane to alter the color for that range.\n\n"
02871       "The overlay dataset value that maps to 1.0 is\n"
02872       "determined by the 'autoRange' controls to the right.\n\n"
02873       "N.B.: A popup menu to control the palette\n"
02874       "      setup is 'hidden' under this label."
02875    ) ;
02876 
02877    MCW_register_hint( func->inten_label ,
02878                       "Control overlay colors" ) ;
02879 
02880    (void) XtVaCreateManagedWidget(
02881             "dialog" , xmSeparatorWidgetClass , func->inten_rowcol ,
02882                 XmNseparatorType , XmSINGLE_LINE ,
02883             NULL ) ;
02884 
02885    func->inten_av = new_MCW_arrowval(
02886                        func->inten_rowcol ,
02887                         "#" ,
02888                         AVOPT_STYLE ,
02889                         NPANE_MIN , NPANE_MAX+1 ,
02890                         (func->inten_pbar->bigmode) ? NPANE_MAX+1 : npane ,
02891                         MCW_AV_notext , 0 ,
02892                         AFNI_inten_av_CB , func->inten_pbar ,
02893                         AFNI_inten_av_texter,NULL ) ;
02894 
02895    if( AVOPT_STYLE == MCW_AV_optmenu )
02896       AVOPT_columnize( func->inten_av , 2 ) ;
02897 
02898    func->inten_av->fastdelay  = 4000 ;  /* slow down repeat action */
02899    func->inten_av->parent     = im3d ;  /* Daddy! */
02900    func->inten_av->allow_wrap = 1 ;
02901 
02902    MCW_reghelp_children( func->inten_av->wrowcol ,
02903      "Controls the number of panes\n"
02904      "in the intensity color/threshold\n"
02905      "selector above (the 'pbar')"
02906    ) ;
02907    MCW_reghint_children( func->inten_av->wrowcol ,
02908                          "Number of color panes" ) ;
02909 
02910    /*--- toggle button to control posfunc option for pbar ---*/
02911 
02912    func->inten_bbox =
02913       new_MCW_bbox( func->inten_rowcol ,
02914                     1 , AFNI_inten_bbox_label ,
02915                     MCW_BB_check ,
02916                     MCW_BB_noframe ,
02917                     AFNI_inten_bbox_CB , (XtPointer) im3d ) ;
02918 
02919    func->inten_bbox->parent = (XtPointer) im3d ;
02920 
02921    MCW_set_bbox( func->inten_bbox ,
02922                  (im3d->vinfo->use_posfunc) ? (1) : (0) ) ;
02923 
02924    MCW_reghelp_children( func->inten_bbox->wrowcol ,
02925                          "Pressed In: Displays only positive overlay\n"
02926                          "            values in the 'pbar' above and\n"
02927                          "            in the color overlays.\n"
02928                          "       Out: Displays positive and negative\n"
02929                          "            overlay values.\n\n"
02930                          "N.B.: Zero overlay values are never overlaid." ) ;
02931    MCW_reghint_children( func->inten_bbox->wrowcol ,
02932                          "Use positive-only or signed overlay values" ) ;
02933 
02934    ADDTO_KILL(im3d->kl,func->inten_bbox) ;
02935 
02936    /*-- options controls --*/
02937 
02938    func->options_rowcol =
02939       XtVaCreateWidget(
02940          "dialog" , xmRowColumnWidgetClass , func->rowcol ,
02941             XmNorientation , XmVERTICAL ,
02942             XmNpacking , XmPACK_TIGHT ,
02943             XmNmarginHeight, 0 ,
02944             XmNmarginWidth , 0 ,
02945             XmNtraversalOn , False ,
02946             XmNinitialResourcesPersistent , False ,
02947          NULL ) ;
02948 
02949    func->options_label =
02950       XtVaCreateManagedWidget(
02951          "dialog" , xmLabelWidgetClass , func->options_rowcol ,
02952             LABEL_ARG("Options") ,
02953             XmNinitialResourcesPersistent , False ,
02954          NULL ) ;
02955 
02956    /*-- underlay type --*/
02957 
02958    func->underlay_bbox =
02959       new_MCW_bbox( func->options_rowcol ,
02960                     LAST_UNDERLAY_TYPE+1 , UNDERLAY_typestr ,
02961                     MCW_BB_radio_one ,
02962                     MCW_BB_frame ,
02963                     AFNI_underlay_CB , (XtPointer) im3d ) ;
02964 
02965    func->underlay_bbox->parent = (XtPointer) im3d ;
02966 
02967    MCW_set_bbox( func->underlay_bbox , 1 << im3d->vinfo->underlay_type ) ;
02968 
02969    MCW_reghelp_children( func->underlay_bbox->wrowcol ,
02970       "Use these buttons to choose\n"
02971       "whether the underlay or\n"
02972       "overlay images appear\n"
02973       "as the background display" ) ;
02974 
02975    { char * hh[] = { "Use underlay dataset for background" ,
02976                      "Use overlay dataset for background" ,
02977                      "Use thresholded overlay dataset for background" } ;
02978      MCW_bbox_hints( func->underlay_bbox , 3 , hh ) ;
02979    }
02980 
02981    ADDTO_KILL(im3d->kl,func->underlay_bbox) ;
02982 
02983    /*--- 30 Nov 1997: bucket managers ---*/
02984 
02985    func->buck_frame =
02986       XtVaCreateWidget(
02987          "dialog" , xmFrameWidgetClass , func->options_rowcol ,
02988             XmNshadowType , XmSHADOW_ETCHED_IN ,
02989             XmNshadowThickness , 2 ,
02990             XmNtraversalOn , False ,
02991             XmNinitialResourcesPersistent , False ,
02992          NULL ) ;
02993 
02994    func->buck_rowcol =
02995       XtVaCreateWidget(
02996          "dialog" , xmRowColumnWidgetClass , func->buck_frame ,
02997             XmNorientation , XmVERTICAL ,
02998             XmNpacking , XmPACK_TIGHT ,
02999             XmNtraversalOn , False ,
03000             XmNinitialResourcesPersistent , False ,
03001          NULL ) ;
03002 
03003    /*--- 30 Nov 1997: anatomy bucket arrowval ---*/
03004    /*    (Actual labels are set when used)       */
03005 
03006    func->anat_buck_av = new_MCW_arrowval(
03007                           func->buck_rowcol    ,  /* parent Widget */
03008                           "ULay" ,                /* label */
03009                           MCW_AV_optmenu ,        /* option menu style */
03010                           0 ,                     /* first option */
03011                           1 ,                     /* last option */
03012                           0 ,                     /* initial selection */
03013                           MCW_AV_readtext ,       /* ignored but needed */
03014                           0 ,                     /* ditto */
03015                           AFNI_bucket_CB ,        /* callback when changed */
03016                           (XtPointer) im3d ,      /* data for above */
03017                           MCW_av_substring_CB ,   /* text creation routine */
03018                           AFNI_dummy_av_label     /* data for above */
03019                         ) ;
03020 
03021    func->anat_buck_av->parent     = (XtPointer) im3d ;
03022    func->anat_buck_av->allow_wrap = True ;
03023 
03024    MCW_reghelp_children( func->anat_buck_av->wrowcol ,
03025                          "Use this to choose which\n"
03026                          "sub-brick of the overlay\n"
03027                          "dataset to display (='ULay').\n"
03028                          "(The sub-brick labels are\n"
03029                          " assigned when the dataset\n"
03030                          " is created.  The [index]\n"
03031                          " values show the numerical\n"
03032                          " location of the sub-brick\n"
03033                          " in the dataset.)"           ) ;
03034    MCW_reghint_children( func->anat_buck_av->wrowcol ,
03035                          "Choose UnderLay sub-brick" ) ;
03036 
03037    ADDTO_KILL(im3d->kl,func->anat_buck_av) ;
03038 
03039    XtUnmanageChild( func->anat_buck_av->wrowcol ) ;
03040 
03041    /*--- 30 Nov 1997: function bucket arrowval ---*/
03042 
03043    func->fim_buck_av = new_MCW_arrowval(
03044                           func->buck_rowcol    ,  /* parent Widget */
03045                           "OLay" ,                /* label */
03046                           MCW_AV_optmenu ,        /* option menu style */
03047                           0 ,                     /* first option */
03048                           1 ,                     /* last option */
03049                           0 ,                     /* initial selection */
03050                           MCW_AV_readtext ,       /* ignored but needed */
03051                           0 ,                     /* ditto */
03052                           AFNI_bucket_CB ,        /* callback when changed */
03053                           (XtPointer) im3d ,      /* data for above */
03054                           MCW_av_substring_CB ,   /* text creation routine */
03055                           AFNI_dummy_av_label     /* data for above */
03056                         ) ;
03057 
03058    func->fim_buck_av->parent     = (XtPointer) im3d ;
03059    func->fim_buck_av->allow_wrap = True ;
03060 
03061    MCW_reghelp_children( func->fim_buck_av->wrowcol ,
03062                          "Use this to choose which\n"
03063                          "sub-brick of the overlay\n"
03064                          "dataset to display (='OLay').\n"
03065                          "(The sub-brick labels are\n"
03066                          " assigned when the dataset\n"
03067                          " is created.  The [index]\n"
03068                          " values show the numerical\n"
03069                          " location of the sub-brick\n"
03070                          " in the dataset.)"           ) ;
03071    MCW_reghint_children( func->fim_buck_av->wrowcol ,
03072                          "Choose overlay sub-brick" ) ;
03073 
03074    ADDTO_KILL(im3d->kl,func->fim_buck_av) ;
03075 
03076    XtUnmanageChild( func->fim_buck_av->wrowcol ) ;
03077 
03078    /*--- 30 Nov 1997: threshold bucket arrowval ---*/
03079 
03080    func->thr_buck_av = new_MCW_arrowval(
03081                           func->buck_rowcol    ,  /* parent Widget */
03082                           "Thr " ,                /* label */
03083                           MCW_AV_optmenu ,        /* option menu style */
03084                           0 ,                     /* first option */
03085                           1 ,                     /* last option */
03086                           0 ,                     /* initial selection */
03087                           MCW_AV_readtext ,       /* ignored but needed */
03088                           0 ,                     /* ditto */
03089                           AFNI_bucket_CB ,        /* callback when changed */
03090                           (XtPointer) im3d ,      /* data for above */
03091                           MCW_av_substring_CB ,   /* text creation routine */
03092                           AFNI_dummy_av_label     /* data for above */
03093                         ) ;
03094 
03095    func->thr_buck_av->parent     = (XtPointer) im3d ;
03096    func->thr_buck_av->allow_wrap = True ;
03097 
03098    MCW_reghelp_children( func->thr_buck_av->wrowcol ,
03099                          "Use this to choose which\n"
03100                          "sub-brick of the overlay\n"
03101                          "dataset with which to threshold\n"
03102                          "the OLay sub-brick (='Thr').\n"
03103                          "(The sub-brick labels are\n"
03104                          " assigned when the dataset\n"
03105                          " is created.  The [index]\n"
03106                          " values show the numerical\n"
03107                          " location of the sub-brick\n"
03108                          " in the dataset.)"           ) ;
03109    MCW_reghint_children( func->thr_buck_av->wrowcol ,
03110                          "Choose Thr sub-brick" ) ;
03111 
03112    ADDTO_KILL(im3d->kl,func->thr_buck_av) ;
03113 
03114    XtUnmanageChild( func->thr_buck_av->wrowcol ) ;
03115 
03116    /*--- range controls ---*/
03117 
03118    func->range_frame =
03119       XtVaCreateManagedWidget(
03120          "dialog" , xmFrameWidgetClass , func->options_rowcol ,
03121             XmNshadowType , XmSHADOW_ETCHED_IN ,
03122             XmNshadowThickness , 2 ,
03123             XmNtraversalOn , False ,
03124             XmNinitialResourcesPersistent , False ,
03125          NULL ) ;
03126 
03127    func->range_rowcol =
03128       XtVaCreateWidget(
03129          "dialog" , xmRowColumnWidgetClass , func->range_frame ,
03130             XmNorientation , XmVERTICAL ,
03131             XmNpacking , XmPACK_TIGHT ,
03132             XmNtraversalOn , False ,
03133             XmNinitialResourcesPersistent , False ,
03134          NULL ) ;
03135 
03136    /*--- label to show the ranges ---*/
03137 
03138    im3d->vinfo->old_range_label = xstr = AFNI_range_label( NULL ) ;
03139 
03140    func->range_label =
03141       XtVaCreateManagedWidget(
03142          "dialog" , xmLabelWidgetClass , func->range_rowcol ,
03143             XmNrecomputeSize , False ,
03144             XmNlabelString , xstr ,
03145             XmNtraversalOn , False ,
03146             XmNinitialResourcesPersistent , False ,
03147          NULL ) ;
03148 
03149    MCW_register_help( func->range_label ,
03150                         "These are the range of values in the\n"
03151                         "UnderLay and OverLay 3D datasets.\n"
03152                         "The overlay values may be useful\n"
03153                         "for choosing the Range for the pbar.\n"
03154                         "[If a dataset is warped from a\n"
03155                         " 'parent', these statistics are\n"
03156                         " taken from the parent dataset.]"   ) ;
03157 
03158    MCW_register_hint( func->range_label , "Ranges of dataset values" ) ;
03159 
03160    /*--- toggle button to control automatic range scaling for pbar ---*/
03161 
03162    im3d->vinfo->autorange_label =
03163       XmStringCreateLtoR( AFNI_range_bbox_label[0] , XmFONTLIST_DEFAULT_TAG ) ;
03164 
03165    func->range_bbox =
03166       new_MCW_bbox( func->range_rowcol ,
03167                     1 , AFNI_range_bbox_label ,
03168                     MCW_BB_check ,
03169                     MCW_BB_noframe ,
03170                     AFNI_range_bbox_CB , (XtPointer) im3d ) ;
03171 
03172    func->range_bbox->parent = (XtPointer) im3d ;
03173 
03174    MCW_set_bbox( func->range_bbox ,
03175                  (im3d->vinfo->use_autorange) ? (1) : (0) ) ;
03176 
03177    MCW_reghelp_children( func->range_bbox->wrowcol ,
03178                          "This button determines whether the program\n"
03179                          "or the user sets the OLay value that maps\n"
03180                          "to the color pbar level 1.0:\n\n"
03181                          "Pressed In: use 'autoRange' value for pbar 1.0\n"
03182                          "       Out: user controls Range value (below)"
03183                        ) ;
03184    MCW_reghint_children( func->range_bbox->wrowcol ,
03185                          "Automatic or user-controlled color range scaling" ) ;
03186 
03187    ADDTO_KILL(im3d->kl,func->range_bbox) ;
03188 
03189    /*--- 30 Mar 2001: put the next 2 things in a horizontal rowcol ---*/
03190 
03191    hrc = XtVaCreateWidget(
03192          "dialog" , xmRowColumnWidgetClass , func->range_rowcol ,
03193             XmNorientation , XmHORIZONTAL ,
03194             XmNpacking , XmPACK_TIGHT ,
03195             XmNtraversalOn , False ,
03196             XmNinitialResourcesPersistent , False ,
03197          NULL ) ;
03198 
03199    /*--- arrowval to provide user control for pbar scaling ---*/
03200 
03201    func->range_av =
03202       new_MCW_arrowval(
03203          hrc ,                             /* parent */
03204          NULL ,                            /* label */
03205          MCW_AV_downup ,                   /* arrow directions */
03206          0  ,                              /* min value */
03207          9999999 ,                         /* max value */
03208          (int) (im3d->vinfo->fim_range) ,  /* init value */
03209          MCW_AV_editext ,                  /* input/output text display */
03210          0 ,                               /* decimal shift */
03211          AFNI_range_av_CB ,                /* routine to call when button */
03212          (XtPointer) im3d ,                /* is pressed, and its data */
03213          NULL,NULL                         /* no special display */
03214       ) ;
03215 
03216    func->range_av->parent = (XtPointer) im3d ;
03217 
03218    MCW_reghelp_children( func->range_av->wrowcol ,
03219                          "When the autoRange button above is Out, this\n"
03220                          "selector is used to set the OLay level which\n"
03221                          "maps to 1.0 on the color pbar."
03222                        ) ;
03223    MCW_reghint_children( func->range_av->wrowcol ,
03224                          "OLay value that maps to 1.0 for color overlay" ) ;
03225 
03226    ADDTO_KILL(im3d->kl,func->range_av) ;
03227 
03228    AV_SENSITIZE( func->range_av , ! im3d->vinfo->use_autorange ) ;
03229 
03230    /*--- 30 Mar 2001: rotate pbar ---*/
03231 
03232    func->range_rotate_av = new_MCW_arrowval(
03233                              hrc , "Rota" ,
03234                              MCW_AV_downup , 0,0,0 ,
03235                              MCW_AV_notext , 0 ,
03236                              AFNI_range_rotate_av_CB , (XtPointer) func->inten_pbar ,
03237                              NULL,NULL ) ;
03238 
03239    func->range_rotate_av->parent = (XtPointer) im3d ;
03240 
03241    MCW_reghelp_children( func->range_rotate_av->wrowcol ,
03242                          "Rotate the colors on\n"
03243                          "the 'pbar' up or down.\n"
03244                          "[Press with Shift  to]\n"
03245                          "[rotate in steps of 4]"  ) ;
03246    MCW_reghint_children( func->range_rotate_av->wrowcol ,
03247                          "Rotate pbar colors" ) ;
03248 
03249    ADDTO_KILL(im3d->kl,func->range_rotate_av) ;
03250 
03251    XtManageChild( hrc ) ;
03252 
03253 #ifdef USE_FUNC_FIM
03254    /*--- fim execution controls ---*/
03255 
03256    func->fim_frame =
03257       XtVaCreateManagedWidget(
03258          "dialog" , xmFrameWidgetClass , func->options_rowcol ,
03259             XmNshadowType , XmSHADOW_ETCHED_IN ,
03260             XmNshadowThickness , 2 ,
03261             XmNtraversalOn , False ,
03262             XmNinitialResourcesPersistent , False ,
03263          NULL ) ;
03264 
03265    func->fim_rowcol =
03266       XtVaCreateWidget(
03267          "dialog" , xmRowColumnWidgetClass , func->fim_frame ,
03268             XmNorientation , XmHORIZONTAL ,
03269             XmNpacking , XmPACK_TIGHT ,
03270             XmNtraversalOn , False ,
03271             XmNinitialResourcesPersistent , False ,
03272          NULL ) ;
03273 
03274    func->fim_mbar =
03275          XmCreateMenuBar( func->fim_rowcol, "dialog" , NULL,0 ) ;
03276    XtVaSetValues( func->fim_mbar ,
03277                      XmNmarginWidth  , 0 ,
03278                      XmNmarginHeight , 0 ,
03279                      XmNspacing      , 3 ,
03280                      XmNborderWidth  , 0 ,
03281                      XmNtraversalOn  , False ,
03282                   NULL ) ;
03283    XtManageChild( func->fim_mbar ) ;
03284 
03285    func->fim_menu = AFNI_new_fim_menu( func->fim_mbar , AFNI_fimmer_menu_CB , 0 ) ;
03286    func->fim_menu->parent = (XtPointer) im3d ;
03287 
03288    xstr = XmStringCreateLtoR("1234567890123456789",XmFONTLIST_DEFAULT_TAG );
03289    func->fim_dset_label =
03290       XtVaCreateManagedWidget(
03291          "dialog" , xmLabelWidgetClass , func->fim_rowcol ,
03292             XmNrecomputeSize , False ,
03293             XmNlabelString , xstr ,
03294             XmNtraversalOn , False ,
03295             XmNinitialResourcesPersistent , False ,
03296          NULL ) ;
03297    XmStringFree(xstr) ;
03298    MCW_register_help( func->fim_dset_label ,
03299          "Shows the name of the\n"
03300          "dataset for which FIM\n"
03301          "is currently set up."
03302    ) ;
03303    MCW_register_hint( func->fim_dset_label , "Dataset to be FIM-ed") ;
03304 #endif
03305 
03306    /* 25 Jul 2001: a toggle box to show the TT Atlas */
03307 
03308    { char *see_ttatlas_label[1] = { "See TT Atlas Regions" } ;
03309      func->see_ttatlas_bbox =
03310       new_MCW_bbox( func->options_rowcol ,
03311                     1 , see_ttatlas_label ,
03312                     MCW_BB_check ,
03313                     MCW_BB_frame ,
03314                     AFNI_see_ttatlas_CB , (XtPointer) im3d ) ;
03315 
03316      func->see_ttatlas_bbox->parent = (XtPointer) im3d ;
03317 
03318      MCW_set_bbox( func->see_ttatlas_bbox ,
03319                    (im3d->vinfo->see_ttatlas) ? (1) : (0) ) ;
03320 
03321      MCW_reghelp_children( func->see_ttatlas_bbox->wrowcol ,
03322                            "This button determines whether to show\n"
03323                            "the Talairach-Tournoux Atlas regions,\n"
03324                            "which are controlled by the 'Atlas Colors'\n"
03325                            "item on the image viewing window popup menu."
03326                          ) ;
03327      MCW_reghint_children( func->see_ttatlas_bbox->wrowcol ,
03328                            "Use 'Atlas Colors' from image popup menu" ) ;
03329 
03330      ADDTO_KILL(im3d->kl,func->see_ttatlas_bbox) ;
03331    }
03332 
03333    xstr = XmStringCreateLtoR( "ULay = xxxxxxxxxxxxxxxx\n"
03334                               "OLay = xxxxxxxxxxxxxxxx\n"
03335                               "Thr  = xxxxxxxxxxxxxxxx" ,
03336                             XmFONTLIST_DEFAULT_TAG ) ;
03337 
03338    func->bkgd_lab =
03339       XtVaCreateWidget(
03340          "dialog" , xmLabelWidgetClass , func->options_rowcol ,
03341             XmNrecomputeSize , False ,
03342             XmNlabelString , xstr ,
03343             XmNmarginHeight, 0 ,
03344             XmNtraversalOn , False ,
03345             XmNinitialResourcesPersistent , False ,
03346          NULL ) ;
03347    XmStringFree( xstr ) ;
03348 
03349    im3d->vinfo->anat_val[0] =
03350     im3d->vinfo->func_val[0] =
03351      im3d->vinfo->thr_val[0]  = '\0' ;
03352 
03353    MCW_register_help( func->bkgd_lab ,
03354                       "Shows the values at the\n"
03355                       "current crosshair voxel.\n"
03356                       "\n"
03357                       "N.B.: Is only active when\n"
03358                       " all 3 image windows are\n"
03359                       " open!"
03360                     ) ;
03361    MCW_register_hint( func->bkgd_lab , "Values at crosshairs voxel" ) ;
03362 
03363    /*-- manage the managers --*/
03364 
03365    XtManageChild( func->thr_rowcol ) ;
03366    XtManageChild( func->inten_rowcol ) ;
03367    XtManageChild( func->range_rowcol ) ;
03368    XtManageChild( func->options_rowcol ) ;
03369 #ifdef USE_FUNC_FIM
03370    XtManageChild( func->fim_rowcol ) ;
03371 #endif
03372    XtManageChild( func->rowcol ) ;
03373 
03374    EXRETURN ;
03375 }
03376 
03377 /*--------------------------------------------------------------------*/
03378 
03379 void AFNI_make_wid3( Three_D_View * im3d )
03380 {

void AFNI_mark_for_death THD_sessionlist   ssl
 

force return of unscaled slices for output *

Definition at line 4205 of file afni_func.c.

References THD_3dim_dataset::anat_parent, THD_3dim_dataset::death_mark, DOOMED, DSET_MARK_FOR_DEATH, THD_session::dsset, ENTRY, FIRST_VIEW_TYPE, ISVALID_3DIM_DATASET, ISVALID_SESSION, ISVALID_SESSIONLIST, LAST_VIEW_TYPE, THD_session::num_dsset, THD_sessionlist::num_sess, THD_sessionlist::ssar, STATUS, and THD_3dim_dataset::warp_parent.

Referenced by AFNI_marks_transform_CB(), and AFNI_rescan_session_OLD().

04206 {
04207    int iss , jdd , kvv , num_marked=0 ;
04208    THD_session *ss ;
04209    THD_3dim_dataset *dset ;
04210 
04211 ENTRY("AFNI_mark_for_death") ;
04212 
04213    if( ! ISVALID_SESSIONLIST(ssl) ) EXRETURN ;
04214 
04215    /* loop over each session */
04216 
04217    for( iss=0 ; iss < ssl->num_sess ; iss++ ){
04218       ss = ssl->ssar[iss] ;
04219       if( !ISVALID_SESSION(ss) ) continue ;  /* no good ==> skip */
04220 
04221       /* loop over datasets in this session */
04222 
04223       for( jdd=0 ; jdd < ss->num_dsset ; jdd++ ){
04224          for( kvv=FIRST_VIEW_TYPE ; kvv <= LAST_VIEW_TYPE ; kvv++ ){
04225 
04226             dset = ss->dsset[jdd][kvv] ;
04227 
04228             if( ISVALID_3DIM_DATASET(dset) &&                /* good dset */
04229                 dset->anat_parent != NULL  &&                /* has parent */
04230                 dset->anat_parent->death_mark == DOOMED &&   /* parent dies */
04231                 dset->warp_parent != NULL                 ){ /* is a warp child */
04232 
04233                DSET_MARK_FOR_DEATH(dset) ;
04234                num_marked ++ ;
04235             }
04236          }
04237       }
04238    }  /* end of loop over sessions */
04239 
04240 #ifdef AFNI_DEBUG
04241 { char str[256] ;
04242   sprintf(str,"total # descendants marked = %d",num_marked) ;
04243   STATUS(str) ; }
04244 #endif
04245 
04246    EXRETURN ;
04247 }

void AFNI_marks_action_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 6167 of file afni.c.

References AFNI_marks_widgets::action_clear_pb, AFNI_marks_widgets::action_quality_pb, AFNI_marks_widgets::action_set_pb, THD_marker_set::aflags, AFNI_first_tog(), AFNI_marks_edits_CB(), AFNI_marks_quality_check(), AFNI_see_marks_CB(), AFNI_set_viewpoint(), Three_D_View::anat_now, AFNI_marks_widgets::changed, client_data, CLOSE_PANEL, AFNI_viewing_widgets::define_marks_pb, AFNI_marks_widgets::editable, AFNI_marks_widgets::edits_bbox, ENTRY, AFNI_view_info::i1, IM3D_VALID, AFNI_marks_widgets::inverted, AFNI_marks_widgets::isprimary, ISVALID_VIEW, AFNI_view_info::j2, AFNI_view_info::k3, LOAD_ANAT_VIEW, MARKACTION_NONE, THD_3dim_dataset::markers, AFNI_widget_set::marks, MARKS_MAXNUM, MCW_invert_widget(), MCW_popup_message(), MCW_set_bbox(), MCW_TIMER_KILL, MCW_USER_KILL, THD_marker_set::numdef, THD_marker_set::numset, AFNI_marks_widgets::old_visible, AFNI_marks_widgets::pop_clear_pb, AFNI_marks_widgets::pop_set_pb, AFNI_marks_widgets::poptog, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, AFNI_viewing_widgets::see_marks_bbox, SENSITIZE, STATUS, TEMP_IVEC3, THD_3dind_to_3dmm(), THD_write_3dim_dataset(), AFNI_marks_widgets::tog, AFNI_marks_widgets::transform_pb, tross_Append_History(), THD_marker_set::valid, AFNI_widget_set::view, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, WARPED_VIEW, THD_fvec3::xyz, and THD_marker_set::xyz.

Referenced by AFNI_controller_panel_CB(), AFNI_define_CB(), AFNI_initialize_view(), and AFNI_marks_transform_CB().

06169 {
06170    Three_D_View * im3d = (Three_D_View *) client_data ;
06171    int itog , ipt , setmask , vwarp ;
06172    Boolean sens , transformable ;
06173    THD_marker_set * markers ;
06174    AFNI_marks_widgets * marks ;
06175    THD_fvec3 fv ;
06176 
06177 ENTRY("AFNI_marks_action_CB") ;
06178 
06179    /* sanity check */
06180 
06181    if( ! IM3D_VALID(im3d) ) EXRETURN ;
06182 
06183    marks = im3d->vwid->marks ;
06184 
06185    /*------ done button (it used to exist) -----*/
06186 
06187    if( w == NULL ){  /* close down */
06188 
06189       Boolean redisplay ;
06190 
06191       MCW_set_bbox( marks->edits_bbox , 0 ) ;
06192       AFNI_marks_edits_CB( NULL , (XtPointer) im3d , NULL ) ;
06193 
06194       MCW_set_bbox( im3d->vwid->view->see_marks_bbox ,
06195                     marks->old_visible ? 1 : 0 ) ;
06196       AFNI_see_marks_CB( NULL , (XtPointer) im3d , NULL ) ;
06197 
06198       redisplay = ! marks->old_visible ;
06199 
06200       for( ipt=0 ; ipt < MARKS_MAXNUM ; ipt++ ){  /* all display as */
06201          redisplay = ( redisplay ||  marks->isprimary[ipt] == True ) ;
06202          marks->isprimary[ipt] = False ;          /* secondary now */
06203       }
06204 
06205       CLOSE_PANEL(im3d,marks) ;  /* close this panel */
06206 
06207       if( redisplay )
06208          AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;  /* redraw */
06209 
06210       /* save markers as they exist now, if any changes made */
06211 
06212       if( im3d->anat_now->markers != NULL && marks->changed ){
06213 #if 0
06214          (void) MCW_popup_message(
06215                    im3d->vwid->view->define_marks_pb ,
06216                    "Saved changed markers\nto dataset disk file." ,
06217                    MCW_USER_KILL | MCW_TIMER_KILL ) ;
06218 #endif
06219 
06220          tross_Append_History( im3d->anat_now , "AFNI: markers were edited" ) ;
06221          (void) THD_write_3dim_dataset( NULL,NULL , im3d->anat_now , False ) ;
06222       }
06223 
06224       EXRETURN ;
06225    }
06226 
06227    /*----- quality button (only on when all markers are defined) -----*/
06228 
06229    if( w == marks->action_quality_pb ){
06230       transformable = AFNI_marks_quality_check(True,im3d) ;
06231       SENSITIZE( marks->transform_pb , transformable ) ;
06232       EXRETURN ;
06233    }
06234 
06235    /*----- if here, either a Set or a Clear -----*/
06236 
06237    markers = im3d->anat_now->markers ;
06238    if( markers == NULL ) EXRETURN ;  /* should not happen */
06239 
06240    /* find which point is active (i.e., which toggle is set, if any) */
06241 
06242    itog = AFNI_first_tog( MARKS_MAXNUM , marks->tog ) ;
06243 
06244    if( itog < 0 || ! marks->editable ){
06245       XBell(XtDisplay(w),100) ;  /* none active --> beep and return */
06246       EXRETURN ;
06247    }
06248 
06249    ipt = itog ;  /* index of point to deal with */
06250 
06251    /*----- set button pressed -----*/
06252 
06253    if( w == marks->action_set_pb || w == marks->pop_set_pb ){
06254 
06255       if( ! markers->valid[ipt] ) (markers->numset) ++ ;  /* newly set */
06256 
06257 if(PRINT_TRACING)
06258 { char str[256] ;
06259   sprintf(str,"set #%d numset=%d",ipt,markers->numset) ;
06260   STATUS(str) ; }
06261 
06262       markers->valid[ipt] = True ;
06263 
06264       LOAD_ANAT_VIEW(im3d) ;  /* 02 Nov 1996 */
06265 
06266       fv = THD_3dind_to_3dmm( im3d->anat_now ,    /* convert to mm */
06267                               TEMP_IVEC3( im3d->vinfo->i1 ,
06268                                           im3d->vinfo->j2 ,
06269                                           im3d->vinfo->k3  ) ) ;
06270 
06271       markers->xyz[ipt][0] = fv.xyz[0] ;  /* mm in local x,y,z */
06272       markers->xyz[ipt][1] = fv.xyz[1] ;
06273       markers->xyz[ipt][2] = fv.xyz[2] ;
06274 
06275       /* invert colors to mark that the point is set */
06276 
06277       if( ! marks->inverted[itog] ){
06278          MCW_invert_widget( marks->tog[itog] ) ;
06279          MCW_invert_widget( marks->poptog[itog] ) ;
06280          marks->inverted[itog] = True ;
06281       }
06282 
06283       marks->changed = True ;  /* set or reset a marker --> a change */
06284    }
06285 
06286    /*----- clear button pressed -----*/
06287 
06288    else if( w == marks->action_clear_pb || w == marks->pop_clear_pb ){
06289 
06290       if( ! markers->valid[ipt] ){
06291          XBell(XtDisplay(w),100) ;  /* already clear */
06292          EXRETURN ;
06293       } else {
06294          (markers->numset) -- ;   /* newly unset --> sub one from count */
06295          marks->changed = True ;  /* cleared a set marker --> a change */
06296       }
06297 
06298 if(PRINT_TRACING)
06299 { char str[256] ;
06300   sprintf(str,"clr #%d numset=%d",ipt,markers->numset) ;
06301   STATUS(str) ; }
06302 
06303       markers->valid[ipt] = False ;
06304 
06305       /* restore colors to mark that the point is unset */
06306 
06307       if( marks->inverted[itog] ){
06308          MCW_invert_widget( marks->tog[itog] ) ;
06309          MCW_invert_widget( marks->poptog[itog] ) ;
06310          marks->inverted[itog] = False ;
06311       }
06312    }
06313 
06314    /*--- allow transformation if all marks are set, etc. ---*/
06315 
06316    vwarp         = WARPED_VIEW(im3d->vinfo->view_type) ;
06317    transformable = marks->editable                         &&
06318                    (markers->aflags[1] != MARKACTION_NONE) &&
06319                    (markers->numdef == markers->numset)    &&
06320                    ISVALID_VIEW(vwarp)                       ;
06321 
06322    SENSITIZE( marks->action_quality_pb , transformable ) ;
06323    SENSITIZE( marks->transform_pb      , False ) ;  /* require QC first */
06324 
06325    /*--- force a redraw ---*/
06326 
06327    AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
06328    RESET_AFNI_QUIT(im3d) ;
06329    EXRETURN ;
06330 }

void AFNI_marks_disp_av_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 6360 of file afni.c.

References AFNI_make_ptmask(), AFNI_set_viewpoint(), Three_D_View::anat_now, client_data, AFNI_marks_widgets::disp_gap_av, AFNI_marks_widgets::disp_pcolor_av, AFNI_marks_widgets::disp_scolor_av, AFNI_marks_widgets::disp_size_av, ENTRY, IM3D_VALID, ipx, MCW_arrowval::ival, THD_3dim_dataset::markers, AFNI_widget_set::marks, THD_marker_set::numset, AFNI_marks_widgets::ov_gap, AFNI_marks_widgets::ov_mask, AFNI_marks_widgets::ov_pcolor, AFNI_marks_widgets::ov_scolor, AFNI_marks_widgets::ov_size, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, THD_3dim_dataset::tagset, and Three_D_View::vwid.

06361 {
06362    Three_D_View * im3d = (Three_D_View *) client_data ;
06363    int ipx = av->ival ;
06364 
06365 ENTRY("AFNI_marks_disp_av_CB") ;
06366 
06367    if( ! IM3D_VALID(im3d) ) EXRETURN ;
06368 
06369           if( av == im3d->vwid->marks->disp_pcolor_av ){
06370 
06371             im3d->vwid->marks->ov_pcolor = ipx ;
06372 
06373    } else if( av == im3d->vwid->marks->disp_scolor_av ){
06374 
06375             im3d->vwid->marks->ov_scolor = ipx ;
06376 
06377    } else if( av == im3d->vwid->marks->disp_size_av ){
06378 
06379             im3d->vwid->marks->ov_size = ipx ;
06380 
06381             AFNI_make_ptmask( im3d->vwid->marks->ov_size ,
06382                               im3d->vwid->marks->ov_gap ,
06383                                &(im3d->vwid->marks->ov_mask) ) ;
06384 
06385    } else if( av == im3d->vwid->marks->disp_gap_av ){
06386 
06387             im3d->vwid->marks->ov_gap = ipx ;
06388 
06389             AFNI_make_ptmask( im3d->vwid->marks->ov_size ,
06390                               im3d->vwid->marks->ov_gap ,
06391                                &(im3d->vwid->marks->ov_mask) ) ;
06392 
06393    } else
06394       EXRETURN ;  /* some error */
06395 
06396    /* force a redraw if any points are set */
06397 
06398    if( im3d->anat_now->tagset != NULL ||
06399       (im3d->anat_now->markers != NULL && im3d->anat_now->markers->numset > 0) ){
06400 
06401       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
06402    }
06403 
06404    RESET_AFNI_QUIT(im3d) ;
06405    EXRETURN ;
06406 }

void AFNI_marks_edits_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7674 of file afni.c.

References AFNI_marks_widgets::action_clear_pb, AFNI_marks_widgets::action_quality_pb, AFNI_marks_widgets::action_set_pb, THD_marker_set::aflags, AFNI_set_tog(), Three_D_View::anat_now, client_data, AFNI_marks_widgets::editable, AFNI_marks_widgets::edits_bbox, ENTRY, IM3D_VALID, ISVALID_VIEW, MARKACTION_NONE, THD_3dim_dataset::markers, AFNI_widget_set::marks, MARKS_MAXNUM, MCW_val_bbox(), THD_marker_set::numdef, THD_marker_set::numset, AFNI_marks_widgets::pop_clear_pb, AFNI_marks_widgets::pop_set_pb, AFNI_marks_widgets::poptog, RESET_AFNI_QUIT, SENSITIZE, AFNI_marks_widgets::tog, AFNI_marks_widgets::tog_frame, AFNI_marks_widgets::transform_pb, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, and WARPED_VIEW.

Referenced by AFNI_define_CB(), and AFNI_marks_action_CB().

07676 {
07677    Three_D_View * im3d = (Three_D_View *) client_data ;
07678    AFNI_marks_widgets * marks ;
07679    int bval , vwarp ;
07680    Boolean transformable ;
07681 
07682 ENTRY("AFNI_marks_edits_CB") ;
07683 
07684    if( ! IM3D_VALID(im3d) ) EXRETURN ;
07685 
07686    marks = im3d->vwid->marks ;
07687    bval  = MCW_val_bbox( marks->edits_bbox ) ;
07688 
07689    marks->editable = (bval == 0) ? (False) : (True) ;
07690 
07691    if( im3d->anat_now->markers == NULL ) EXRETURN ;
07692 
07693    /*----- allow transformation if
07694              edits are allowed, AND
07695              the markers are flagged for it, AND
07696              all the markers are defined  ----------*/
07697 
07698    vwarp = WARPED_VIEW(im3d->vinfo->view_type) ;
07699 
07700    transformable =
07701       marks->editable                                         &&
07702       (im3d->anat_now->markers->aflags[1] != MARKACTION_NONE) &&
07703       (im3d->anat_now->markers->numdef == im3d->anat_now->markers->numset) &&
07704       ISVALID_VIEW(vwarp) ;
07705 
07706    /* turn some buttons on or off, depending on editability */
07707 
07708    SENSITIZE( marks->tog_frame         , True ) ;
07709    SENSITIZE( marks->action_set_pb     , marks->editable ) ;
07710    SENSITIZE( marks->action_clear_pb   , marks->editable ) ;
07711    SENSITIZE( marks->pop_set_pb        , marks->editable ) ;
07712    SENSITIZE( marks->pop_clear_pb      , marks->editable ) ;
07713    SENSITIZE( marks->action_quality_pb , transformable ) ;
07714    SENSITIZE( marks->transform_pb      , False ) ;  /* require QC first */
07715 
07716    if( ! marks->editable ){
07717       AFNI_set_tog( -1 , MARKS_MAXNUM , marks->tog ) ;    /* none will */
07718       AFNI_set_tog( -1 , MARKS_MAXNUM , marks->poptog ) ; /* be "on" */
07719    }
07720 
07721    RESET_AFNI_QUIT(im3d) ;
07722    EXRETURN ;
07723 }

Boolean AFNI_marks_quality_check Boolean   ,
Three_D_View  
 

Definition at line 8861 of file afni.c.

References ADD_ERROR, ADD_REPORT, AFNI_transform_vector(), Three_D_View::anat_now, ATLAS_AC_TO_LAT, ATLAS_AC_TO_PC, ATLAS_AC_TO_TOP, ATLAS_BOT_TO_AC, ATLAS_FRONT_TO_AC, ATLAS_PC_TO_BACK, BEEPIT, CROSS_FVEC3, DOT_FVEC3, DUMP_FVEC3, ELIDE_quality, ENTRY, AFNI_marks_widgets::frame, gamma, IMARK_ACPM, IMARK_ACSE, IMARK_MANT, IMARK_MINF, IMARK_MLEF, IMARK_MPOS, IMARK_MRIG, IMARK_MSA1, IMARK_MSA2, IMARK_MSUP, IMARK_PCIE, LOAD_FVEC3, THD_3dim_dataset::markers, AFNI_widget_set::marks, MARKSET_ALIGN, MARKSET_BOUNDING, MAX_ALLOWED_DEVIATION, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, MIN_ALLOWED_DEVIATION, MVEC, myXtFree, NORMALIZE_FVEC3, RETURN, SCLADD_FVEC3, SIZE_FVEC3, STATUS, SUB_FVEC3, THD_3dmm_to_dicomm(), THD_marker_set::type, Three_D_View::vwid, THD_3dim_dataset::warp_parent, THD_fvec3::xyz, and THD_marker_set::xyz.

Referenced by AFNI_make_warp(), and AFNI_marks_action_CB().

08862 {
08863    THD_3dim_dataset * anat    = im3d->anat_now ;
08864    THD_marker_set   * markers = im3d->anat_now->markers ;
08865 
08866    char *  error_list ;
08867    int     num_error , num_report ;
08868    char    msg[128] ;
08869    Boolean good ;
08870 
08871 ENTRY("AFNI_marks_quality_check") ;
08872 
08873    /*--- for compiling a list of errors and/or reports ---*/
08874 
08875    if( markers == NULL ){ BEEPIT ; RETURN(False) ; }  /* should not happen */
08876 
08877    error_list = XtNewString(
08878                 "             *** MARKERS QUALITY REPORT ***           \n\n") ;
08879    num_error  = 0 ;
08880    num_report = 0 ;
08881 
08882    /*--- what we do depends on the kinds of markers we have ---*/
08883 
08884    switch( markers->type ){
08885 
08886       default: RETURN(False) ;      /* something bad happened */
08887 
08888       /*--- bounding box markers set ---*/
08889 
08890       case MARKSET_BOUNDING:{
08891          THD_fvec3 mant,mpos,msup,minf,mrig,mlef , pcie ;
08892          float dist_sup , dist_inf , dist_ant , dist_med , dist_pos ,
08893                dist_lef , dist_rig ;
08894 
08895          /* extract the marker vectors, put in Dicom coords */
08896 
08897          mant = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MANT) ) ;
08898          mpos = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MPOS) ) ;
08899          msup = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MSUP) ) ;
08900          minf = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MINF) ) ;
08901          mrig = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MRIG) ) ;
08902          mlef = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MLEF) ) ;
08903 
08904          /* convert Posterior Commissure from parent to current coords */
08905 
08906          LOAD_FVEC3( pcie ,
08907                      anat->warp_parent->markers->xyz[IMARK_PCIE][0] ,
08908                      anat->warp_parent->markers->xyz[IMARK_PCIE][1] ,
08909                      anat->warp_parent->markers->xyz[IMARK_PCIE][2]  ) ;
08910 
08911          pcie = THD_3dmm_to_dicomm( anat->warp_parent , pcie ) ;
08912          pcie = AFNI_transform_vector( anat->warp_parent , pcie , anat ) ;
08913 
08914          /* compute distances between points in various directions */
08915 
08916          dist_ant = -mant.xyz[1] ;
08917          dist_med =  pcie.xyz[1] ;
08918          dist_pos =  mpos.xyz[1] - pcie.xyz[1] ;
08919 
08920          dist_sup =  msup.xyz[2] ;
08921          dist_inf = -minf.xyz[2] ;
08922 
08923          dist_lef =  mlef.xyz[0] ;
08924          dist_rig = -mrig.xyz[0] ;
08925 
08926          /* check anterior distance and report it */
08927 
08928          if( dist_ant/ATLAS_FRONT_TO_AC < MIN_ALLOWED_DEVIATION ||
08929              dist_ant/ATLAS_FRONT_TO_AC > MAX_ALLOWED_DEVIATION   )
08930          ADD_ERROR("The following measurement is outside the allowed range!\n");
08931 
08932          sprintf(msg,"Front to Anterior commissure: %5.1f mm (Atlas:%5.1f)\n",
08933                  dist_ant,ATLAS_FRONT_TO_AC) ;
08934          ADD_REPORT(msg) ;
08935 
08936          /* medial */
08937 
08938 #if 0
08939          if( dist_med/ATLAS_AC_TO_PC < MIN_ALLOWED_DEVIATION ||
08940              dist_med/ATLAS_AC_TO_PC > MAX_ALLOWED_DEVIATION   )
08941          ADD_ERROR("The following measurement is outside the allowed range!\n");
08942 #endif
08943          sprintf(msg,"Intercommissural distance:    %5.1f mm (Atlas:%5.1f)\n",
08944                  dist_med,ATLAS_AC_TO_PC) ;
08945          ADD_REPORT(msg) ;
08946 
08947 
08948          /* posterior */
08949 
08950          if( dist_pos/ATLAS_PC_TO_BACK < MIN_ALLOWED_DEVIATION ||
08951              dist_pos/ATLAS_PC_TO_BACK > MAX_ALLOWED_DEVIATION   )
08952          ADD_ERROR("The following measurement is outside the allowed range!\n");
08953 
08954          sprintf(msg,"Posterior commissure to back: %5.1f mm (Atlas:%5.1f)\n",
08955                  dist_pos,ATLAS_PC_TO_BACK) ;
08956          ADD_REPORT(msg) ;
08957 
08958          /* inferior */
08959 
08960          if( dist_inf/ATLAS_BOT_TO_AC < MIN_ALLOWED_DEVIATION ||
08961              dist_inf/ATLAS_BOT_TO_AC > MAX_ALLOWED_DEVIATION   )
08962          ADD_ERROR("The following measurement is outside the allowed range!\n");
08963 
08964          sprintf(msg,"Bottom to Anterior commissure:%5.1f mm (Atlas:%5.1f)\n",
08965                  dist_inf,ATLAS_BOT_TO_AC) ;
08966          ADD_REPORT(msg) ;
08967 
08968          /* superior */
08969 
08970          if( dist_sup/ATLAS_AC_TO_TOP < MIN_ALLOWED_DEVIATION ||
08971              dist_sup/ATLAS_AC_TO_TOP > MAX_ALLOWED_DEVIATION   )
08972          ADD_ERROR("The following measurement is outside the allowed range!\n");
08973 
08974          sprintf(msg,"Anterior commissure to top:   %5.1f mm (Atlas:%5.1f)\n",
08975                  dist_sup,ATLAS_AC_TO_TOP) ;
08976          ADD_REPORT(msg) ;
08977 
08978          /* left */
08979 
08980          if( dist_lef/ATLAS_AC_TO_LAT < MIN_ALLOWED_DEVIATION ||
08981              dist_lef/ATLAS_AC_TO_LAT > MAX_ALLOWED_DEVIATION   )
08982          ADD_ERROR("The following measurement is outside the allowed range!\n");
08983 
08984          sprintf(msg,"Anterior commissure to left:  %5.1f mm (Atlas:%5.1f)\n",
08985                  dist_lef,ATLAS_AC_TO_LAT) ;
08986          ADD_REPORT(msg) ;
08987 
08988          /* right */
08989 
08990          if( dist_rig/ATLAS_AC_TO_LAT < MIN_ALLOWED_DEVIATION ||
08991              dist_rig/ATLAS_AC_TO_LAT > MAX_ALLOWED_DEVIATION   )
08992          ADD_ERROR("The following measurement is outside the allowed range!\n");
08993 
08994          sprintf(msg,"Anterior commissure to right: %5.1f mm (Atlas:%5.1f)\n",
08995                  dist_rig,ATLAS_AC_TO_LAT) ;
08996          ADD_REPORT(msg) ;
08997       }
08998       break ;  /* end of Boundings marker case */
08999 
09000       /*--- AC-PC alignment markers set ---*/
09001 
09002       case MARKSET_ALIGN:{
09003          THD_fvec3 acsup , acpos , pcinf , msag1 , msag2 ,
09004                    alpha1,alpha2,alpha,beta,gamma,rr1,rr2,rr , dif ;
09005          float size , slim ;
09006 
09007          /* extract the marker vectors, put in Dicom coords */
09008 
09009          acsup = THD_3dmm_to_dicomm( anat , MVEC(IMARK_ACSE) ) ;
09010          acpos = THD_3dmm_to_dicomm( anat , MVEC(IMARK_ACPM) ) ;
09011          pcinf = THD_3dmm_to_dicomm( anat , MVEC(IMARK_PCIE) ) ;
09012          msag1 = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MSA1) ) ;
09013          msag2 = THD_3dmm_to_dicomm( anat , MVEC(IMARK_MSA2) ) ;
09014 
09015          /*-- check the points for proper distances between each other --*/
09016 
09017          rr = SUB_FVEC3(acsup,acpos) ; size = SIZE_FVEC3(rr) ;
09018          if( size > 4.0 )
09019          ADD_ERROR("The two AC points are more than 4 mm apart.\n") ;
09020 
09021          slim = MIN_ALLOWED_DEVIATION * ATLAS_AC_TO_PC ;
09022          rr = SUB_FVEC3(acsup,pcinf) ; size = SIZE_FVEC3(rr) ;
09023          if( size <= slim ){
09024             sprintf(msg, "The AC & PC points are separated by %5.2f mm\n"
09025                          "which is closer than the minimum %5.2f mm!\n" ,
09026                     size,slim ) ;
09027             ADD_ERROR(msg) ;
09028          }
09029 
09030          rr = SUB_FVEC3(acsup,msag1) ; size = SIZE_FVEC3(rr) ;
09031          if( size < 20.0 )
09032          ADD_ERROR("The AC and 1st mid-sag points are closer than 20 mm.\n");
09033 
09034          rr = SUB_FVEC3(acsup,msag2) ; size = SIZE_FVEC3(rr) ;
09035          if( size < 20.0 )
09036          ADD_ERROR("The AC and 2nd mid-sag points are closer than 20 mm.\n");
09037 
09038          rr = SUB_FVEC3(msag1,msag2) ; size = SIZE_FVEC3(rr) ;
09039          if( size < 20.0 )
09040          ADD_ERROR("The two mid-sag points are closer than 20 mm.\n");
09041 
09042          rr = SUB_FVEC3(pcinf,msag1) ; size = SIZE_FVEC3(rr) ;
09043          if( size < 20.0 )
09044          ADD_ERROR("The PC and 1st mid-sag points are closer than 20 mm.\n");
09045 
09046          rr = SUB_FVEC3(pcinf,msag2) ; size = SIZE_FVEC3(rr) ;
09047          if( size < 20.0 )
09048          ADD_ERROR("The PC and 2nd mid-sag points are closer than 20 mm.\n");
09049 
09050          /*--- compute the new y direction (beta) ---*/
09051 
09052          beta = SUB_FVEC3(pcinf,acsup) ;  beta = NORMALIZE_FVEC3(beta) ;
09053 
09054          /*--- compute the new x direction (alpha) ---*/
09055 
09056          rr     = SUB_FVEC3(msag1,acsup) ;
09057          alpha1 = CROSS_FVEC3(beta,rr) ; alpha1 = NORMALIZE_FVEC3(alpha1) ;
09058 
09059          rr     = SUB_FVEC3(msag2,acsup) ;
09060          alpha2 = CROSS_FVEC3(beta,rr) ; alpha2 = NORMALIZE_FVEC3(alpha2) ;
09061 
09062          size = DOT_FVEC3(alpha1,alpha2) ;  /* angle < 2 degrees ? */
09063          if( size < 0.99939 )               /* (size = cos(angle) */
09064          ADD_ERROR("The AC + PC + mid-sag pts do not form a good plane.\n");
09065 
09066          size = acos((double)size) * 180/3.14159265 ;  /* report angle */
09067          sprintf(msg,
09068          "Angular deviation between AC+PC+mid-sag pts: %6.2f degrees\n",size);
09069          ADD_REPORT(msg) ;
09070 
09071          alpha = SCLADD_FVEC3(0.5,alpha1,0.5,alpha2) ;
09072          alpha = NORMALIZE_FVEC3(alpha) ;
09073 
09074          /*--- compute the new z direction (gamma) ---*/
09075 
09076          gamma = CROSS_FVEC3(alpha,beta) ; gamma = NORMALIZE_FVEC3(gamma) ;
09077 
09078          /*--- now, consider the ray from the AC posterior margin (acpos)
09079                in the gamma direction, and the ray from the AC superior
09080                edge (acsup) in the beta direction.  Nominally, these rays
09081                should intersect.  Find their points of closest approach
09082                (rr1,rr2).  The average of these is the Talairach center
09083                of coordinates (rr). ------------------------------------*/
09084 
09085          dif  = SUB_FVEC3(acsup,acpos) ;
09086          size = DOT_FVEC3(dif,gamma) ;
09087          rr1  = SCLADD_FVEC3(1.0,acpos,size,gamma) ;
09088 
09089          size = DOT_FVEC3(dif,beta) ;
09090          rr2  = SCLADD_FVEC3(1.0,acsup,-size,beta) ;
09091 
09092          dif = SUB_FVEC3(rr1,rr2) ; size = SIZE_FVEC3(dif) ;
09093          if( size > 2.0 )
09094          ADD_ERROR("AC Talairach origin mismatch more than 2 mm!\n") ;
09095 
09096          sprintf(msg,
09097          "Mismatch between AC-PC line and Talairach origin: %6.2f mm\n",size);
09098          ADD_REPORT(msg) ;
09099 
09100          rr = SCLADD_FVEC3(0.5,rr1,0.5,rr2) ;
09101 
09102          /*-- Use the trace of the rotation matrix to find
09103               the total rotation angle [suggested by M. Klosek] --*/
09104 
09105          { float theta, costheta ;
09106 
09107             costheta = 0.5 * sqrt(1.0+alpha.xyz[0]+beta.xyz[1]+gamma.xyz[2]) ;
09108             theta    = 2.0 * acos(costheta) * 180/3.14159265 ;
09109             sprintf(msg,
09110             "Total rotation to align AC-PC and mid-sag:   %6.2f degrees\n",theta) ;
09111             ADD_REPORT(msg) ;
09112          }
09113 
09114 #ifdef AFNI_DEBUG
09115 STATUS("AC-PC alignment markers computation:") ;
09116 DUMP_FVEC3("   acsup ",acsup ) ;
09117 DUMP_FVEC3("   acpos ",acpos ) ;
09118 DUMP_FVEC3("   pcinf ",pcinf ) ;
09119 DUMP_FVEC3("   msag1 ",msag1 ) ;
09120 DUMP_FVEC3("   msag2 ",msag2 ) ;
09121 DUMP_FVEC3("   beta  ",beta  ) ;
09122 DUMP_FVEC3("   alpha1",alpha1) ;
09123 DUMP_FVEC3("   alpha2",alpha2) ;
09124 DUMP_FVEC3("   alpha ",alpha ) ;
09125 DUMP_FVEC3("   gamma ",gamma ) ;
09126 DUMP_FVEC3("   rr1   ",rr1   ) ;
09127 DUMP_FVEC3("   rr2   ",rr2   ) ;
09128 DUMP_FVEC3("   rr    ",rr    ) ;
09129 printf("\n") ;
09130 #endif
09131 
09132       }  /* end of AC-PC alignment case */
09133       break ;
09134 
09135    } /* end of switch on marker set type */
09136 
09137    if( num_error > 0 || (make_report && num_report > 0) ){
09138       (void) MCW_popup_message( im3d->vwid->marks->frame ,
09139                                 error_list ,
09140                                 MCW_USER_KILL | MCW_TIMER_KILL ) ;
09141    }
09142 
09143    myXtFree( error_list ) ;
09144 
09145    if( num_error > 0 && ! ELIDE_quality ) RETURN(False) ;
09146    RETURN(True) ;
09147 }

void AFNI_marks_transform_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 8433 of file afni.c.

References THD_marker_set::aflags, AFNI_andersonville(), AFNI_force_adoption(), AFNI_init_warp(), AFNI_make_descendants(), AFNI_make_warp(), AFNI_mark_for_death(), AFNI_marks_action_CB(), AFNI_purge_unused_dsets(), Three_D_View::anat_dset, Three_D_View::anat_now, AFNI_view_info::anat_num, THD_3dim_dataset::anat_parent, THD_3dim_dataset::anat_parent_idcode, THD_3dim_dataset::anat_parent_name, AF_options::auto_purge, BEEP_AND_RETURN, client_data, DSET_MARK_FOR_DEATH, THD_session::dsset, ENTRY, Three_D_View::fim_dset, AFNI_view_info::func_num, GLOBAL_argopt, GLOBAL_library, THD_3dim_dataset::idcode, IM3D_VALID, ISVALID_3DIM_DATASET, ISVALID_SESSION, ISVALID_VIEW, THD_3dim_dataset::kl, LAST_VIEW_TYPE, MARKACTION_WARP, THD_3dim_dataset::markers, MCW_strncpy, THD_session::num_dsset, THD_sessionlist::num_sess, AFNI_view_info::resam_vox, THD_3dim_dataset::self_name, SENSITIZE, AFNI_view_info::sess_num, SHOW_AFNI_READY, SINGLE_KILL, Three_D_View::ss_now, THD_sessionlist::ssar, AFNI_library_type::sslist, STATUS, THD_MAX_NAME, THD_write_3dim_dataset(), AFNI_widget_set::top_shell, tross_Append_History(), tross_Copy_History(), AFNI_widget_set::view, AFNI_viewing_widgets::view_bbox, VIEW_ORIGINAL_TYPE, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, AF_options::warp_4D, WARPED_VIEW, and MCW_bbox::wbut.

08435 {
08436    Three_D_View     * im3d = (Three_D_View *) client_data ;
08437    THD_marker_set   * markers ;
08438    THD_warp         * warp ;
08439    THD_3dim_dataset * new_dset ;
08440    THD_session      * ss ;
08441    int                vnew , vvv , sss , aaa , fff , id ;
08442    float              resam_size ;
08443    Widget             wmsg ;
08444 
08445 ENTRY("AFNI_marks_transform_CB") ;
08446 
08447    /*--- sanity checks ---*/
08448 
08449    if( ! IM3D_VALID(im3d) ) EXRETURN ;
08450 
08451    markers = im3d->anat_now->markers ;
08452    if(markers == NULL || markers->aflags[1] != MARKACTION_WARP) BEEP_AND_RETURN ;
08453 
08454    vnew = WARPED_VIEW(im3d->vinfo->view_type) ; /* view index of new dataset */
08455    if( !ISVALID_VIEW(vnew) ) BEEP_AND_RETURN ;
08456 
08457    /*--- make warp ---*/
08458 
08459    warp = AFNI_make_warp( im3d ) ;
08460    if( warp == NULL ) BEEP_AND_RETURN ;
08461 
08462    /*--- create new dataset (empty at this point) ---*/
08463 
08464    resam_size = im3d->vinfo->resam_vox ;
08465    new_dset   = AFNI_init_warp( im3d , im3d->anat_now , warp , resam_size ) ;
08466    if( new_dset == NULL ) BEEP_AND_RETURN ;
08467 
08468    { char his[128] ;
08469      tross_Copy_History( im3d->anat_now , new_dset ) ;
08470      sprintf(his,"afni: transformed to %s",VIEW_typestr[vnew]) ;
08471      tross_Append_History( new_dset , his ) ;
08472    }
08473 
08474    /*----- This new dataset may replace a current dataset,
08475            and if so, THAT dataset may have a warp child,
08476            and so on.  Mark those datasets for destruction,
08477            mark their anatomy children for destruction, and destroy them -----*/
08478 
08479    vvv = vnew ;
08480    while( ISVALID_VIEW(vvv) && ISVALID_3DIM_DATASET(im3d->anat_dset[vvv]) ){
08481       DSET_MARK_FOR_DEATH( im3d->anat_dset[vvv] ) ;
08482       vvv = WARPED_VIEW(vvv) ;
08483    }
08484 
08485    AFNI_mark_for_death(GLOBAL_library.sslist ) ;        /* find descendants */
08486    AFNI_andersonville (GLOBAL_library.sslist , True ) ; /* kill (including files) */
08487 
08488    /*----- Can now place the new dataset into its rightful place -----*/
08489 
08490    sss = im3d->vinfo->sess_num ;
08491    aaa = im3d->vinfo->anat_num ;
08492    fff = im3d->vinfo->func_num ;
08493    GLOBAL_library.sslist->ssar[sss]->dsset[aaa][vnew] = new_dset ;
08494 
08495    /* reload active datasets, to allow for destruction that may
08496       have occured (this code is copied from AFNI_initialize_view) */
08497 
08498    for( id=0 ; id <= LAST_VIEW_TYPE ; id++ ){
08499       im3d->anat_dset[id] = GLOBAL_library.sslist->ssar[sss]->dsset[aaa][id] ;
08500       im3d->fim_dset[id]  = GLOBAL_library.sslist->ssar[sss]->dsset[fff][id] ;
08501 
08502       if( ISVALID_3DIM_DATASET(im3d->anat_dset[id]) )
08503         SENSITIZE( im3d->vwid->view->view_bbox->wbut[id], True ) ;
08504       else
08505         SENSITIZE( im3d->vwid->view->view_bbox->wbut[id], False) ;
08506    }
08507 
08508 STATUS("writing new dataset") ;
08509 
08510    (void) THD_write_3dim_dataset( NULL,NULL , new_dset , False ) ; /* header */
08511 
08512    /*--- have transformed this anatomy dataset
08513          ==> if the input was the original view, then
08514              destroy any other marker sets in the original view
08515              and make their datasets anatomical children of this one ---*/
08516 
08517    if( im3d->vinfo->view_type == VIEW_ORIGINAL_TYPE ){
08518       int id ;
08519       THD_3dim_dataset * dss ;
08520 
08521       /* perform surgery on the anat datasets in this session */
08522 
08523 STATUS("re-anat_parenting anatomical datasets in this session") ;
08524 
08525       for( id=0 ; id < im3d->ss_now->num_dsset ; id++ ){
08526          dss = im3d->ss_now->dsset[id][0] ;
08527 
08528          if( ! ISVALID_3DIM_DATASET(dss) || dss == im3d->anat_now ) continue ;
08529 
08530          if( dss->markers != NULL ) SINGLE_KILL(dss->kl,dss->markers) ;
08531          dss->markers = NULL ;
08532 
08533          if( dss->anat_parent == NULL ){
08534            dss->anat_parent = im3d->anat_now ;
08535            MCW_strncpy( dss->anat_parent_name ,
08536                         im3d->anat_now->self_name , THD_MAX_NAME ) ;
08537            dss->anat_parent_idcode = im3d->anat_now->idcode ;
08538          }
08539       }
08540    }
08541 
08542    /*--- now that we have a new potential parent (the warped dataset),
08543          and maybe some links to its warp_parent (done just above),
08544          try to make some descendants (followup warps) from it     ---*/
08545 
08546    AFNI_make_descendants( GLOBAL_library.sslist ) ;
08547 
08548    /*--- clean up some stuff ---*/
08549 
08550    if( GLOBAL_argopt.auto_purge == True ) AFNI_purge_unused_dsets() ;
08551 
08552    /* Jan 31, 1995: force adoption of any dataset
08553                     that was orphaned at Andersonville */
08554 
08555    for( sss=0 ; sss < GLOBAL_library.sslist->num_sess ; sss++ ){
08556       ss = GLOBAL_library.sslist->ssar[sss] ;
08557       if( ISVALID_SESSION(ss) ) AFNI_force_adoption( ss , GLOBAL_argopt.warp_4D ) ;
08558    }
08559 
08560    /*---  close marks panel and exit ---*/
08561 
08562 #if 0
08563    XtSetSensitive( im3d->vwid->top_shell , True ) ;
08564    SHOW_AFNI_READY ;
08565 #endif
08566 
08567    AFNI_marks_action_CB( NULL , (XtPointer) im3d , NULL ) ;
08568 
08569    MPROBE ;
08570    EXRETURN ;
08571 }

void AFNI_marktog_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

16 July 1997 *

Definition at line 6059 of file afni.c.

References AFNI_first_tog(), AFNI_set_tog(), AFNI_set_viewpoint(), Three_D_View::anat_now, client_data, ENTRY, THD_ivec3::ijk, IM3D_VALID, AFNI_marks_widgets::isprimary, LOAD_ANAT_VIEW, THD_3dim_dataset::markers, AFNI_widget_set::marks, MARKS_MAXNUM, THD_marker_set::numset, AFNI_marks_widgets::poptog, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, SAVE_VPT, TEMP_FVEC3, THD_3dmm_to_3dind(), AFNI_marks_widgets::tog, THD_marker_set::valid, Three_D_View::vwid, and THD_marker_set::xyz.

06061 {
06062    Three_D_View * im3d = (Three_D_View *) client_data ;
06063    XmToggleButtonCallbackStruct * cbs =
06064          (XmToggleButtonCallbackStruct *) call_data ;
06065 
06066    int bval , ip , xx=-1 , yy=-1 , zz=-1 ;
06067    Widget * other_tog ;
06068 
06069 ENTRY("AFNI_marktog_CB") ;
06070 
06071    if( ! IM3D_VALID(im3d) || im3d->anat_now->markers == NULL ) EXRETURN ;
06072 
06073    switch( cbs->reason ){
06074 
06075       default:  XBell(XtDisplay(w),100) ; EXRETURN ;  /* error */
06076 
06077       case XmCR_DISARM:   /* button on the control panel */
06078          bval      = AFNI_first_tog( MARKS_MAXNUM ,
06079                                      im3d->vwid->marks->tog ) ;
06080          other_tog = im3d->vwid->marks->poptog ;
06081       break ;
06082 
06083       case XmCR_VALUE_CHANGED:  /* button on the menu panel */
06084          bval = AFNI_first_tog( MARKS_MAXNUM ,
06085                                 im3d->vwid->marks->poptog ) ;
06086          other_tog = im3d->vwid->marks->tog ;
06087       break ;
06088    }
06089 
06090    /* bval      = index of toggle that is set (-1 if none)
06091       other_tog = pointer to other set of toggles;
06092                   set those buttons to match now */
06093 
06094    AFNI_set_tog( bval , MARKS_MAXNUM , other_tog ) ;
06095 
06096    /* set point overlay colors based on bval */
06097 
06098    for( ip=0 ; ip < MARKS_MAXNUM ; ip++ )
06099       im3d->vwid->marks->isprimary[ip] = False ;
06100 
06101    if( bval >= 0 ){
06102       im3d->vwid->marks->isprimary[bval] = True ;
06103 
06104       if( im3d->anat_now->markers->valid[bval] ){  /* jump to this point */
06105          THD_ivec3 ib ;
06106 
06107          LOAD_ANAT_VIEW(im3d) ;  /* 02 Nov 1996 */
06108          ib = THD_3dmm_to_3dind(
06109                  im3d->anat_now ,
06110                  TEMP_FVEC3( im3d->anat_now->markers->xyz[bval][0] ,
06111                              im3d->anat_now->markers->xyz[bval][1] ,
06112                              im3d->anat_now->markers->xyz[bval][2]  )) ;
06113 
06114          xx = ib.ijk[0] ; yy = ib.ijk[1] ; zz = ib.ijk[2] ;  /* jump is below */
06115          SAVE_VPT(im3d) ;  /* save current location as jumpback point */
06116       }
06117    }
06118 
06119    if( im3d->anat_now->markers->numset > 0 ){
06120       AFNI_set_viewpoint( im3d , xx,yy,zz , REDISPLAY_OVERLAY ) ;  /* redraw */
06121    }
06122 
06123    RESET_AFNI_QUIT(im3d) ;
06124    EXRETURN ;
06125 }

void AFNI_misc_button Three_D_View  
 

Definition at line 7905 of file afni_widg.c.

void AFNI_misc_CB Widget    w,
XtPointer    cd,
XtPointer    cbd
 

04 May 2005: customize width to this dataset *

Definition at line 4799 of file afni_func.c.

References AFNI_init_niml(), AFNI_init_plugouts(), AFNI_purge_dsets(), AFNI_set_viewpoint(), Three_D_View::anat_now, Bool, AFNI_widget_set::butx, AFNI_widget_set::buty, AFNI_library_type::controllers, DATABLOCK_MEM_MALLOC, DATABLOCK_MEM_MMAP, DATABLOCK_MEM_SHARED, THD_3dim_dataset::dblk, DBLK_LOCKED, Three_D_View::dc, AFNI_library_type::dc, MCW_DC::display, AFNI_widget_set::dmode, DSET_ARRAY, ENTRY, ENV_init(), F1D_init(), F2D_init(), Three_D_View::fim_now, free, GLOBAL_library, AFNI_library_type::hints_on, IM3D_OPEN, IM3D_VALID, AFNI_widget_set::imag, malloc, THD_datablock::malloc_type, MAX_CONTROLLERS, MCW_hint_toggle(), mcw_malloc_dump(), MCW_MALLOC_enabled, MCW_popup_message(), MCW_set_bbox(), MCW_set_widget_label(), MCW_TIMER_KILL, MCW_USER_KILL, MCW_val_bbox(), MCW_widget_geom(), AFNI_datamode_widgets::misc_1dchain_pb, AFNI_datamode_widgets::misc_2dchain_pb, AFNI_datamode_widgets::misc_anat_info_pb, AFNI_datamode_widgets::misc_dumpmalloc_pb, AFNI_datamode_widgets::misc_environ_pb, AFNI_datamode_widgets::misc_func_info_pb, AFNI_datamode_widgets::misc_hints_bbox, AFNI_datamode_widgets::misc_hints_pb, AFNI_datamode_widgets::misc_license_pb, AFNI_datamode_widgets::misc_niml_pb, AFNI_datamode_widgets::misc_plugout_pb, AFNI_datamode_widgets::misc_purge_pb, AFNI_datamode_widgets::misc_readme_env_pb, AFNI_datamode_widgets::misc_showmalloc_pb, AFNI_datamode_widgets::misc_tracing_pb, AFNI_datamode_widgets::misc_vcheck_pb, AFNI_datamode_widgets::misc_voxind_bbox, AFNI_datamode_widgets::misc_voxind_pb, AFNI_datamode_widgets::misc_writeownsize_bbox, AFNI_datamode_widgets::misc_writeownsize_pb, new_MCW_textwin(), pclose, PLUG_setup_widgets(), PLUTO_cursorize, popen, REDISPLAY_OVERLAY, RWC_visibilize_widget(), THD_datablock::shm_idint, AFNI_view_info::show_voxind, STATUS, TEXT_READONLY, THD_dataset_info(), THD_zzprintf(), AFNI_imaging_widgets::topper, Three_D_View::vinfo, Three_D_View::vwid, and AFNI_view_info::writeownsize.

Referenced by AFNI_imag_pop_CB(), and AFNI_pbar_CB().

04800 {
04801    Three_D_View *im3d = (Three_D_View *) cd ;
04802    XmAnyCallbackStruct *cbs = (XmAnyCallbackStruct *) cbd ;
04803 
04804 ENTRY("AFNI_misc_CB") ;
04805 
04806    if( !IM3D_OPEN(im3d) || w == NULL ) EXRETURN ;
04807 
04808    /*.........................................................*/
04809 
04810    if( w == im3d->vwid->dmode->misc_voxind_pb ){
04811       im3d->vinfo->show_voxind = MCW_val_bbox(im3d->vwid->dmode->misc_voxind_bbox);
04812       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
04813    }
04814 
04815    /*.........................................................*/
04816 
04817 #ifndef DONT_USE_HINTS
04818    else if( w == im3d->vwid->dmode->misc_hints_pb ){
04819       int val = MCW_val_bbox(im3d->vwid->dmode->misc_hints_bbox) ;
04820       if( val != GLOBAL_library.hints_on ){
04821          int ii ; Three_D_View *qq3d ;
04822          MCW_hint_toggle() ; GLOBAL_library.hints_on = val ;
04823          for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){             /* this loop:  */
04824             qq3d = GLOBAL_library.controllers[ii] ;             /* 07 Aug 1999 */
04825             if( IM3D_VALID(qq3d) )
04826                MCW_set_bbox( qq3d->vwid->dmode->misc_hints_bbox , val ) ;
04827          }
04828       }
04829    }
04830 #endif
04831 
04832    /*.........................................................*/
04833 
04834    else if( w == im3d->vwid->dmode->misc_anat_info_pb ){
04835       char *inf ;
04836 STATUS("getting anat info") ;
04837       inf = THD_dataset_info( im3d->anat_now , 0 ) ;
04838       if( inf != NULL ){
04839          if( DSET_ARRAY(im3d->anat_now,0) == NULL ){
04840             inf = THD_zzprintf( inf , "\n*** Not loaded into memory.\n") ;
04841          } else if( im3d->anat_now->dblk->malloc_type == DATABLOCK_MEM_MALLOC ){
04842             if( DBLK_LOCKED(im3d->anat_now->dblk) )
04843                inf = THD_zzprintf( inf , "\n*** Locked into memory using malloc.\n") ;
04844             else
04845                inf = THD_zzprintf( inf , "\n*** Loaded into memory using malloc.\n") ;
04846          } else if( im3d->anat_now->dblk->malloc_type == DATABLOCK_MEM_MMAP ){
04847             inf = THD_zzprintf( inf , "\n*** Loaded into memory using mmap.\n") ;
04848          } else if( im3d->anat_now->dblk->malloc_type == DATABLOCK_MEM_SHARED ){
04849             inf = THD_zzprintf( inf , "\n*** Loaded into shared memory segment %d.\n",
04850                                 im3d->anat_now->dblk->shm_idint) ;
04851          }
04852          (void) new_MCW_textwin( im3d->vwid->imag->topper , inf , TEXT_READONLY ) ;
04853          free(inf) ;
04854       } else
04855          XBell( im3d->dc->display , 100 ) ;
04856    }
04857 
04858    /*.........................................................*/
04859 
04860    else if( w == im3d->vwid->dmode->misc_func_info_pb ){
04861       char *inf ;
04862 STATUS("getting func info") ;
04863       inf = THD_dataset_info( im3d->fim_now , 0 ) ;
04864 STATUS("got func info") ;
04865       if( inf != NULL ){
04866          if( DSET_ARRAY(im3d->fim_now,0) == NULL ){
04867             inf = THD_zzprintf( inf , "\n*** Not loaded into memory.\n") ;
04868          } else if( im3d->fim_now->dblk->malloc_type == DATABLOCK_MEM_MALLOC ){
04869             if( DBLK_LOCKED(im3d->fim_now->dblk) )
04870                inf = THD_zzprintf( inf , "\n*** Locked into memory using malloc.\n") ;
04871             else
04872                inf = THD_zzprintf( inf , "\n*** Loaded into memory using malloc.\n") ;
04873          } else if( im3d->fim_now->dblk->malloc_type == DATABLOCK_MEM_MMAP ){
04874             inf = THD_zzprintf( inf , "\n*** Loaded into memory using mmap.\n") ;
04875          } else if( im3d->fim_now->dblk->malloc_type == DATABLOCK_MEM_SHARED ){
04876             inf = THD_zzprintf( inf , "\n*** Loaded into shared memory segment %d.\n",
04877                                 im3d->fim_now->dblk->shm_idint) ;
04878          }
04879          (void) new_MCW_textwin( im3d->vwid->imag->topper , inf , TEXT_READONLY ) ;
04880          free(inf) ;
04881       } else
04882          XBell( im3d->dc->display , 100 ) ;
04883    }
04884 
04885    /*.........................................................*/
04886 
04887    else if( w == im3d->vwid->dmode->misc_license_pb ){  /* 03 Dec 2000 */
04888 #include "license.h"
04889       char *inf = NULL ; int ii ;
04890 
04891       for( ii=0 ; license[ii] != NULL ; ii++ )
04892          inf = THD_zzprintf( inf , "%s" , license[ii] ) ;
04893       (void) new_MCW_textwin( im3d->vwid->imag->topper , inf , TEXT_READONLY ) ;
04894       free(inf) ;
04895    }
04896 
04897    /*.........................................................*/
04898 
04899    else if( w == im3d->vwid->dmode->misc_readme_env_pb ){  /* 05 Aug 2004 */
04900 #include "readme_env.h"
04901       char *inf = NULL ; int ii ;
04902 
04903       for( ii=0 ; readme_env[ii] != NULL ; ii++ )
04904          inf = THD_zzprintf( inf , "%s" , readme_env[ii] ) ;
04905       (void) new_MCW_textwin( im3d->vwid->imag->topper , inf , TEXT_READONLY ) ;
04906       free(inf) ;
04907    }
04908 
04909    /*.........................................................*/
04910 
04911    else if( w == im3d->vwid->dmode->misc_vcheck_pb ){  /* 11 Jan 2000 */
04912       FILE *fp = popen( "afni_vcheck" , "r" ) ;
04913       if( fp == NULL ){
04914          (void)  MCW_popup_message( im3d->vwid->imag->topper ,
04915                                      " \n"
04916                                      "* Cannot execute *\n"
04917                                      "* afni_vcheck!   *\n" ,
04918                                     MCW_USER_KILL | MCW_TIMER_KILL ) ;
04919          XBell( im3d->dc->display , 100 ) ;
04920       } else {
04921 #define ISIZE 1024
04922          char *info=(char *)malloc(sizeof(char)*ISIZE) ; int ninfo ;
04923          strcpy(info," \n     Output of Program afni_vcheck  \n"
04924                         "   ---------------------------------\n \n"   ) ;
04925          ninfo = strlen(info) ;
04926          while( fgets(info+ninfo,ISIZE-ninfo,fp) != NULL ){
04927             ninfo = strlen(info) ;
04928             if( ninfo >= ISIZE-2 ) break ;
04929          }
04930          pclose(fp) ;
04931          (void) MCW_popup_message( im3d->vwid->imag->topper , info ,
04932                                    MCW_USER_KILL | MCW_TIMER_KILL   ) ;
04933          free(info) ;
04934       }
04935    }
04936 
04937    /*.........................................................*/
04938 
04939    else if( w == im3d->vwid->dmode->misc_purge_pb ){
04940       AFNI_purge_dsets( 1 ) ;
04941    }
04942 
04943    /*.........................................................*/
04944 
04945 #ifdef USE_TRACING
04946    else if( w == im3d->vwid->dmode->misc_tracing_pb ){
04947       DBG_trace = (DBG_trace + 1) % 3 ;  /* Aug 23 1998: cycle between 0,1,2 */
04948       MCW_set_widget_label( im3d->vwid->dmode->misc_tracing_pb, DBG_label ) ; /* 01 Aug 1999 */
04949 
04950       XSynchronize( im3d->dc->display, (Bool)(DBG_trace==2) ) ; /* 01 Dec 1999 */
04951       if( DBG_trace == 2 ) STATUS("XSynchronize enabled") ;
04952       else                 STATUS("XSynchronize disabled") ;
04953    }
04954 #endif
04955 
04956    /*.........................................................*/
04957 
04958 #ifdef USING_MCW_MALLOC   /* 07 Mar 1999 */
04959    else if( MCW_MALLOC_enabled && w == im3d->vwid->dmode->misc_showmalloc_pb ){
04960       MCHECK ;
04961    }
04962 
04963    else if( MCW_MALLOC_enabled && w == im3d->vwid->dmode->misc_dumpmalloc_pb ){
04964       mcw_malloc_dump() ;
04965    }
04966 #endif
04967 
04968    /*.........................................................*/
04969 
04970 #ifdef USE_WRITEOWNSIZE
04971    else if( w == im3d->vwid->dmode->misc_writeownsize_pb ){
04972       im3d->vinfo->writeownsize = MCW_val_bbox( im3d->vwid->dmode->misc_writeownsize_bbox ) ;
04973    }
04974 #endif
04975 
04976    /*.........................................................*/
04977 
04978 #ifdef ALLOW_PLUGINS
04979    else if( w == im3d->vwid->dmode->misc_environ_pb ){ /* 20 Jun 2000 */
04980       static PLUGIN_interface *plint=NULL ;
04981       Widget wpop ;
04982 
04983       /* first time in: create interface like a plugin */
04984 
04985       if( plint == NULL ){
04986         plint = ENV_init() ;
04987         if( plint == NULL ){ XBell(im3d->dc->display,100); EXRETURN; }
04988         PLUG_setup_widgets( plint , GLOBAL_library.dc ) ;
04989       }
04990 
04991       /* code below is from PLUG_startup_plugin_CB() in afni_plugin.c */
04992 
04993       plint->im3d = im3d ;
04994       XtVaSetValues( plint->wid->shell ,
04995                       XmNtitle    , "AFNI Environmentalism", /* top of window */
04996                       XmNiconName , "Green AFNI"           , /* label on icon */
04997                      NULL ) ;
04998       PLUTO_cursorize( plint->wid->shell ) ;
04999 
05000       /*-- if possible, find where this popup should go --*/
05001 
05002       wpop = plint->wid->shell ;
05003 
05004       if( cbs != NULL && cbs->event != NULL
05005                       && cbs->event->type == ButtonRelease ){
05006 
05007          XButtonEvent *xev = (XButtonEvent *) cbs->event ;
05008          int xx = (int)xev->x_root , yy = (int)xev->y_root ;
05009          int ww,hh , sw,sh ;
05010 
05011          MCW_widget_geom( wpop , &ww,&hh , NULL,NULL ) ;
05012          sw = WidthOfScreen (XtScreen(wpop)) ;
05013          sh = HeightOfScreen(XtScreen(wpop)) ;
05014 
05015          if( xx+ww+3 >= sw && ww <= sw ) xx = sw-ww ;
05016          if( yy+hh+3 >= sh && hh <= sh ) yy = sh-hh ;
05017 
05018          XtVaSetValues( wpop , XmNx , xx , XmNy , yy , NULL ) ;
05019       } else if( im3d->vwid->butx >= 0 && im3d->vwid->buty >= 0 ){
05020          XtVaSetValues( wpop ,
05021                          XmNx , im3d->vwid->butx ,
05022                          XmNy , im3d->vwid->buty , NULL ) ; /* 17 May 2005 */
05023       }
05024 
05025       /*-- popup widgets --*/
05026 
05027       XtMapWidget( wpop ) ;  /* after this, is up to user */
05028       RWC_visibilize_widget( wpop ) ;
05029    }
05030 
05031    /*.........................................................*/
05032 
05033    else if( w == im3d->vwid->dmode->misc_1dchain_pb ){ /* 07 Aug 2001 */
05034       static PLUGIN_interface *plint=NULL ;
05035       Widget wpop ;
05036 
05037       /* first time in: create interface like a plugin */
05038 
05039       if( plint == NULL ){
05040          plint = F1D_init() ;
05041          if( plint == NULL ){ XBell(im3d->dc->display,100); EXRETURN; }
05042          PLUG_setup_widgets( plint , GLOBAL_library.dc ) ;
05043       }
05044 
05045       if( cbs == NULL ) EXRETURN ;  /* only for a setup call */
05046 
05047       /* code below is from PLUG_startup_plugin_CB() in afni_plugin.c */
05048 
05049       plint->im3d = im3d ;
05050       XtVaSetValues( plint->wid->shell ,
05051                       XmNtitle     , "AFNI 1DChain Function", /* top of window */
05052                       XmNiconName  , "1DChain"              , /* label on icon */
05053                      NULL ) ;
05054       PLUTO_cursorize( plint->wid->shell ) ;
05055 
05056       /*-- if possible, find where this popup should go --*/
05057 
05058       wpop = plint->wid->shell ;
05059 
05060       if( cbs->event != NULL && cbs->event->type == ButtonRelease ){
05061 
05062          XButtonEvent *xev = (XButtonEvent *) cbs->event ;
05063          int xx = (int)xev->x_root , yy = (int)xev->y_root ;
05064          int ww,hh , sw,sh ;
05065 
05066          MCW_widget_geom( wpop , &ww,&hh , NULL,NULL ) ;
05067          sw = WidthOfScreen (XtScreen(wpop)) ;
05068          sh = HeightOfScreen(XtScreen(wpop)) ;
05069 
05070          if( xx+ww+3 >= sw && ww <= sw ) xx = sw-ww ;
05071          if( yy+hh+3 >= sh && hh <= sh ) yy = sh-hh ;
05072 
05073          XtVaSetValues( wpop , XmNx , xx , XmNy , yy , NULL ) ;
05074       }
05075 
05076       /*-- popup widgets --*/
05077 
05078       XtMapWidget( wpop ) ;  /* after this, is up to user */
05079       RWC_visibilize_widget( wpop ) ;
05080    }
05081 
05082    /*.........................................................*/
05083 
05084    else if( w == im3d->vwid->dmode->misc_2dchain_pb ){ /* 20 Jun 2000 */
05085       static PLUGIN_interface *plint=NULL ;
05086       Widget wpop ;
05087 
05088       /* first time in: create interface like a plugin */
05089 
05090       if( plint == NULL ){
05091          plint = F2D_init() ;
05092          if( plint == NULL ){ XBell(im3d->dc->display,100); EXRETURN; }
05093          PLUG_setup_widgets( plint , GLOBAL_library.dc ) ;
05094       }
05095 
05096       if( cbs == NULL ) EXRETURN ;  /* only for a setup call */
05097 
05098       /* code below is from PLUG_startup_plugin_CB() in afni_plugin.c */
05099 
05100       plint->im3d = im3d ;
05101       XtVaSetValues( plint->wid->shell ,
05102                       XmNtitle     , "AFNI 2DChain Function", /* top of window */
05103                       XmNiconName  , "2DChain"              , /* label on icon */
05104                      NULL ) ;
05105       PLUTO_cursorize( plint->wid->shell ) ;
05106 
05107       /*-- if possible, find where this popup should go --*/
05108 
05109       wpop = plint->wid->shell ;
05110 
05111       if( cbs->event != NULL && cbs->event->type == ButtonRelease ){
05112 
05113          XButtonEvent *xev = (XButtonEvent *) cbs->event ;
05114          int xx = (int)xev->x_root , yy = (int)xev->y_root ;
05115          int ww,hh , sw,sh ;
05116 
05117          MCW_widget_geom( wpop , &ww,&hh , NULL,NULL ) ;
05118          sw = WidthOfScreen (XtScreen(wpop)) ;
05119          sh = HeightOfScreen(XtScreen(wpop)) ;
05120 
05121          if( xx+ww+3 >= sw && ww <= sw ) xx = sw-ww ;
05122          if( yy+hh+3 >= sh && hh <= sh ) yy = sh-hh ;
05123 
05124          XtVaSetValues( wpop , XmNx , xx , XmNy , yy , NULL ) ;
05125       }
05126 
05127       /*-- popup widgets --*/
05128 
05129       XtMapWidget( wpop ) ;  /* after this, is up to user */
05130       RWC_visibilize_widget( wpop ) ;
05131    }
05132 
05133    /*.........................................................*/
05134 
05135    else if( w == im3d->vwid->dmode->misc_plugout_pb ){ /* 07 Nov 2001 */
05136       AFNI_init_plugouts() ;
05137       XtSetSensitive(w,False) ;
05138    }
05139 #endif /* ALLOW_PLUGINS */
05140 
05141    else if( w == im3d->vwid->dmode->misc_niml_pb ){ /* 02 Mar 2002 */
05142       AFNI_init_niml() ;
05143       XtSetSensitive(w,False) ;
05144    }
05145 
05146    /*.........................................................*/
05147 
05148    /****----- Get Outta Here -----****/
05149 
05150    EXRETURN ;
05151 }
05152 
05153 #ifdef USE_HIDDEN
05154 
05155 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
05156   May 1995: Hidden popup menu stuff
05157 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
05158 
05159 #ifndef ALLOW_PLUGINS
05160 # undef WANT_RWCOX_IMAGE
05161 #endif
05162 
05163 #ifdef WANT_RWCOX_IMAGE
05164 void RWCOX_popper(void) ;
05165 #endif
05166 
05167 #ifdef USE_SKIT
05168 void SKIT_popper( Three_D_View * ) ;
05169 #endif
05170 
05171 static int    num_poem  = 0 ;    /* 15 Oct 2003 */
05172 static char **fname_poem=NULL ;
05173 static void AFNI_find_poem_files(void) ;
05174 
05175 /*---------------------------------------------------------------
05176   Callback for all actions in the hidden popup
05177 -----------------------------------------------------------------*/
05178 
05179 void AFNI_hidden_CB( Widget w , XtPointer cd , XtPointer cbs )
05180 {
05181    Three_D_View *im3d = (Three_D_View *)cd ;
05182 
05183 ENTRY("AFNI_hidden_CB") ;
05184 
05185    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
05186 
05187 #ifdef ALLOW_DATASET_VLIST
05188    /****----- Read points -----****/
05189 
05190    if( w == im3d->vwid->prog->hidden_readpts_ijk_pb ||
05191        w == im3d->vwid->prog->hidden_readpts_xyz_pb   ){
05192 
05193       im3d->vwid->prog->hidden_code =
05194         (w == im3d->vwid->prog->hidden_readpts_ijk_pb) ? PTS_READ_IJK
05195                                                        : PTS_READ_XYZ ;
05196 
05197       POPDOWN_ovcolor_chooser ;
05198 
05199       MCW_choose_string( im3d->vwid->picture ,
05200 
05201             (im3d->vwid->prog->hidden_code == PTS_READ_IJK)
05202               ? "Enter IJK input filename:"
05203               : "Enter XYZ input filename:" ,
05204 
05205             NULL , AFNI_hidden_pts_CB , cd ) ;
05206    }
05207 
05208    /****----- Write points -----****/
05209 
05210    else if( w == im3d->vwid->prog->hidden_writepts_ijk_pb ||
05211             w == im3d->vwid->prog->hidden_writepts_xyz_pb   ){
05212 
05213       if( im3d->anat_now->pts == NULL || im3d->anat_now->pts->num <= 0 ){
05214          (void)  MCW_popup_message( im3d->vwid->picture ,
05215                                     "No points to write out!" ,
05216                                     MCW_USER_KILL | MCW_TIMER_KILL ) ;
05217          XBell( im3d->dc->display , 100 ) ;
05218          EXRETURN ;
05219       }
05220 
05221       POPDOWN_ovcolor_chooser ;
05222 
05223       im3d->vwid->prog->hidden_code =
05224         (w == im3d->vwid->prog->hidden_writepts_ijk_pb) ? PTS_WRITE_IJK
05225                                                         : PTS_WRITE_XYZ ;
05226 
05227       MCW_choose_string( im3d->vwid->picture ,
05228 
05229             (im3d->vwid->prog->hidden_code == PTS_WRITE_IJK)
05230               ? "Enter IJK output filename:"
05231               : "Enter XYZ output filename:" ,
05232 
05233             NULL , AFNI_hidden_pts_CB , cd ) ;
05234    }
05235 
05236    /****----- Show points -----****/
05237 
05238    else if( w == im3d->vwid->prog->hidden_colorpts_pb ){
05239 
05240       POPDOWN_string_chooser ;
05241 
05242       im3d->vwid->prog->hidden_code = PTS_SET_COLOR ;
05243 
05244       MCW_choose_ovcolor( im3d->vwid->picture ,
05245                           im3d->dc ,
05246                           im3d->vinfo->pts_color ,
05247                           AFNI_hidden_pts_CB , cd  ) ;
05248    }
05249 #endif /* ALLOW_DATASET_VLIST */
05250 
05251    /****----- Mission Statement -----****/
05252 
05253    if( w == im3d->vwid->prog->hidden_mission_pb ){
05254       (void)  MCW_popup_message( im3d->vwid->picture ,
05255                                     " \n"
05256                                     " AFNI Mission Statement\n"
05257                                     " ----------------------\n"
05258                                     " To empower neuroscientists\n"
05259                                     " to perform their own state-\n"
05260                                     " of-the-art data analyses and\n"
05261                                     " visualizations, so they will \n"
05262                                     " stop bugging me with their\n"
05263                                     " pitiful 'quick questions'.\n " ,
05264                                  MCW_USER_KILL | MCW_TIMER_KILL ) ;
05265    }
05266 
05267    else if( w == im3d->vwid->prog->hidden_gamberi_pb ){
05268      AFNI_speak( "The Rime of the Gamberi Cattivi" , 0 ) ;
05269      (void) MCW_popup_message( im3d->vwid->imag->topper ,
05270        " \n"
05271        "       The Rime of the Ancient Gamberi Cattivi\n"
05272        "       (with apologies to Coleridge and Dante)\n"
05273        "      -----------------------------------------\n\n"
05274        " Illuminato dal sole toscano,\n"
05275        " volsi lo sguardo all'orizzonte;\n"
05276        " nel mare bagnavo la mano,\n"
05277        " e al cielo volgevo la fronte.\n"
05278        " \n"
05279        " D'improvviso dal mare schiumante,\n"
05280        " due gamberi killer cattivi si avvicinarono.\n"
05281        " Uno stiletto mi poser d'innante,\n"
05282        " mentre i lunghi baffi neri si accarezzavano.\n"
05283        " \n"
05284        " Il piu giovane ordino:\n"
05285        "  \"La macchina fotografica dalla giacca sgancia!\"\n"
05286        " mentre la lama premeva forte la guancia.\n"
05287        " Prima di dichiarare \"Del Governo e proprieta,\n"
05288        " sul mio corpo il nemico passar dovra!\",\n"
05289        " il gambero malvagio nella bocca la camera si fionda\n"
05290        " e del Tirreno scuro e profondo ritorna a prender l'onda.\n"
05291        " \n"
05292        " Roberto Cox \"il Magnifico\" di Milwaukee e il dottor Emiliano\n"
05293        " corrono al grido di Ziad, ma e tutto invano.\n"
05294        " \n"
05295        " Ai nostri eroi non resta che accettare l'accaduto,\n"
05296        " e a tutta Italia AFNI e SUMA insegnare.\n"
05297        " Scusateci se lo stile e un po' caduto,\n"
05298        " ma e la scusa per l'anno prossimo a Pisa ritornare.\n" ,
05299                                  MCW_USER_KILL ) ;
05300    }
05301 
05302    else if( w == im3d->vwid->prog->hidden_ranpoem_pb ){
05303      static int *dold=NULL, ndold=0 ; int qq,dd ;
05304      char *poem ;
05305 
05306      if( num_poem < 0 ) EXRETURN ;
05307      if( num_poem == 0 ){
05308        AFNI_find_poem_files() ;
05309        if( num_poem <= 0 ){ num_poem = -1 ; EXRETURN ; }
05310      }
05311      if( ndold == 0 && num_poem > 1 ){
05312        ndold = num_poem/2 ;
05313        dold  = (int *) malloc(sizeof(int)*ndold) ;
05314        for( qq=0 ; qq < ndold ; qq++ ) dold[qq] = -1 ;
05315      }
05316    Retry_dd:
05317      dd = (lrand48() >> 8) % num_poem ;              /* pick random file */
05318      if( num_poem > 1 ){                       /* check if used recently */
05319        for( qq=0 ; qq < ndold && dold[qq] != dd ; qq++ ) ;       /* nada */
05320        if( qq < ndold ) goto Retry_dd ;                    /* was recent */
05321        for( qq=1 ; qq < ndold ; qq++ )        /* wasn't, so save in list */
05322          dold[qq-1] = dold[qq] ;
05323        dold[ndold-1] = dd ;
05324      }
05325      poem = AFNI_suck_file( fname_poem[dd] ) ;
05326      if( poem == NULL ) EXRETURN ;
05327      (void) MCW_popup_message( im3d->vwid->imag->topper, poem, MCW_USER_KILL );
05328      free( poem ) ;
05329    }
05330 
05331    /*------ Faces!  [17 Dec 2004] -----*/
05332 
05333    else if( w == im3d->vwid->prog->hidden_faces_pb && w != NULL ){
05334 
05335      AFNI_faceup() ;
05336    }
05337 
05338    /*------ Browser [22 Apr 2005] -----*/
05339 
05340    else if( w == im3d->vwid->prog->hidden_browser_pb && w != NULL ){
05341 
05342      system("open http://afni.nimh.nih.gov/afni") ;
05343    }
05344 
05345    /*------- random speaking --------*/
05346 
05347    else if( w == im3d->vwid->prog->hidden_speech_pb && w != NULL ){
05348      static char *words[] = { "What do you want?"               ,
05349                               "Nice to see you"                 ,
05350                               "Words fail me now"               ,
05351                               "I do not know what to say"       ,
05352                               "How are you feeling?"            ,
05353                               "Do you like, afnee?"             ,
05354                               "Do you use ess, pee, emm?"       ,
05355                               "Do you use eff, ess, ell?"       ,
05356                               "Exercise your hippocampus daily"
05357                             } ;
05358      if( AFNI_noenv("AFNI_SPEECH") )
05359        XBell( im3d->dc->display , 100 ) ;
05360      else {
05361        static int nold=-1 ;
05362        int nn = sizeof(words)/sizeof(char *) , jj ;
05363        do{ jj = lrand48()%nn ; } while( jj == nold ) ;
05364        AFNI_speak( words[jj] , 1 ) ; nold = jj ;
05365      }
05366    }
05367 
05368    /****----- Get Outta Here -----****/
05369 
05370    EXRETURN ;
05371 }
05372 
05373 /*--------------------------------------------------------------------------*/
05374 
05375 static void AFNI_find_poem_files(void)  /* 15 Oct 2003 */
05376 {
05377    char *epath , *elocal , *eee ;
05378    char edir[THD_MAX_NAME] , **ename ;
05379    int epos , ll , ii , id , npoem , nx,ny , nep ;
05380    char **fpoem ;
05381 
05382 ENTRY("AFNI_find_poem_files") ;
05383 
05384    if( num_poem != 0 ) EXRETURN ; /* should never happen */
05385 
05386    /*----- get path to search -----*/
05387 
05388                        epath = getenv("AFNI_PLUGINPATH") ;
05389    if( epath == NULL ) epath = getenv("AFNI_PLUGIN_PATH") ;
05390    if( epath == NULL ) epath = getenv("PATH") ;
05391    if( epath == NULL ){ num_poem=-1; EXRETURN ; }
05392 
05393    /*----- copy path list into local memory -----*/
05394 
05395    ll = strlen(epath) ;
05396    elocal = AFMALL( char,  sizeof(char) * (ll+2) ) ;
05397 
05398    /*----- put a blank at the end -----*/
05399 
05400    strcpy( elocal , epath ) ; elocal[ll] = ' ' ; elocal[ll+1] = '\0' ;
05401 
05402    /*----- replace colons with blanks -----*/
05403 
05404    for( ii=0 ; ii < ll ; ii++ )
05405       if( elocal[ii] == ':' ) elocal[ii] = ' ' ;
05406 
05407 
05408    /*----- extract blank delimited strings;
05409            use as directory names to look for files -----*/
05410 
05411    ename    = (char **) malloc(sizeof(char *)*2) ;
05412    ename[0] = (char *)  malloc(THD_MAX_NAME) ;
05413    ename[1] = (char *)  malloc(THD_MAX_NAME) ;
05414 
05415    epos = 0 ;
05416 
05417    do{
05418       ii = sscanf( elocal+epos , "%s%n" , edir , &id ); /* next substring */
05419       if( ii < 1 ) break ;                              /* none -> done   */
05420 
05421       /** check if edir occurs earlier in elocal **/
05422 
05423       eee = strstr( elocal , edir ) ;
05424       if( eee != NULL && (eee-elocal) < epos ){ epos += id ; continue ; }
05425 
05426       epos += id ;                                 /* char after last scanned */
05427 
05428       ii = strlen(edir) ;                          /* make sure name has   */
05429       if( edir[ii-1] != '/' ){                     /* a trailing '/' on it */
05430           edir[ii]  = '/' ; edir[ii+1] = '\0' ;
05431       }
05432       strcpy(ename[0],edir) ;
05433       strcat(ename[0],"poem_*.txt") ;        /* add filename pattern */
05434       nep = 1 ;
05435 
05436       MCW_file_expand( nep,ename, &npoem , &fpoem );   /* find files that match */
05437       if( npoem <= 0 ) continue ;                     /* no files found */
05438 
05439       /** add files we found to list **/
05440 
05441       if( fname_poem == NULL )
05442         fname_poem = (char **)malloc(sizeof(char *)*npoem) ;
05443       else
05444         fname_poem = (char **)realloc(fname_poem,sizeof(char *)*(num_poem+npoem));
05445 
05446       for( ii=0 ; ii < npoem ; ii++ )
05447         fname_poem[num_poem++] = strdup(fpoem[ii]) ;
05448 
05449       MCW_free_expand( npoem , fpoem ) ;
05450 
05451    } while( epos < ll ) ;  /* scan until 'epos' is after end of epath */
05452 
05453    free(elocal) ; free(ename[0]) ; free(ename[1]) ; free(ename) ;
05454 
05455    if( num_poem == 0 ) num_poem = -1 ;
05456    EXRETURN ;
05457 }
05458 
05459 /*-----------------------------------------------------------------
05460   Event handler to find #3 button press for hidden popup
05461 -------------------------------------------------------------------*/
05462 
05463 void AFNI_hidden_EV( Widget w , XtPointer cd ,
05464                     XEvent *ev , Boolean *continue_to_dispatch )
05465 {
05466    Three_D_View *im3d = (Three_D_View *) cd ;
05467 
05468 ENTRY("AFNI_hidden_EV") ;
05469 
05470    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
05471 
05472    /*** handle events ***/
05473 
05474    switch( ev->type ){
05475 
05476       /*----- take button press -----*/
05477 
05478       case ButtonPress:{
05479          XButtonEvent *event = (XButtonEvent *) ev ;
05480 
05481          if( event->button == Button3 ||
05482              (event->button == Button1 &&
05483               (event->state & (ShiftMask|ControlMask))) ){
05484 
05485             im3d->vwid->butx = event->x_root ;  /* 17 May 2005 */
05486             im3d->vwid->buty = event->y_root ;
05487             event->button    = Button3 ;                              /* fakeout */
05488             XmMenuPosition( im3d->vwid->prog->hidden_menu , event ) ; /* where */
05489             XtManageChild ( im3d->vwid->prog->hidden_menu ) ;         /* popup */
05490          }
05491 #ifdef WANT_RWCOX_IMAGE
05492          else if( !NO_frivolities && event->button == Button1 ) RWCOX_popper() ;
05493 #endif
05494 
05495 #ifdef USE_SKIT
05496          else if( !NO_frivolities && event->button == Button2 ) SKIT_popper(im3d) ;
05497 #endif
05498       }
05499       break ;
05500 
05501       /*----- take key press [09 Sep 2002] -----*/
05502 
05503       case KeyPress:{
05504          XKeyEvent *event = (XKeyEvent *) ev ;
05505          char           buf[32] ;
05506          KeySym         ks ;
05507          int            nbuf ;
05508 
05509          buf[0] = '\0' ;
05510          nbuf = XLookupString( event , buf , 32 , &ks , NULL ) ;
05511 
05512          switch( buf[0] ){
05513            case 'Q':
05514              exit(0) ;                         /* Death Now! */
05515 
05516            case 'q':
05517              AFNI_quit_CB( w , im3d, NULL ) ;  /* Close just this controller */
05518            break ;
05519 
05520            case 'f':
05521            case 'F':
05522              AFNI_faceup() ;                   /* Faces! [27 Dec 2004] */
05523            break ;
05524 
05525            case 'p':
05526            case 'P':
05527              AFNI_hidden_CB( im3d->vwid->prog->hidden_ranpoem_pb ,
05528                              (XtPointer)im3d , NULL ) ;
05529            break ;
05530 
05531            case 'g':
05532            case 'G':
05533              AFNI_hidden_CB( im3d->vwid->prog->hidden_gamberi_pb ,
05534                              (XtPointer)im3d , NULL ) ;
05535            break ;
05536          }
05537       }
05538       break ;
05539    }
05540 
05541    EXRETURN ;
05542 }
05543 
05544 /*-------------------------------------------------------------------*/
05545 
05546 #ifdef ALLOW_DATASET_VLIST
05547 void AFNI_hidden_pts_CB( Widget w , XtPointer cd , MCW_choose_cbs *cbs )
05548 {
05549    Three_D_View *im3d = (Three_D_View *) cd ;
05550    THD_3dim_dataset *dset_now ;
05551    THD_fvec3 xyz_vec ;
05552    THD_ivec3 ijk_vec ;
05553    Boolean ijk_option , pause_it ;
05554    FILE *fil ;
05555    THD_vector_list *sv ;
05556    int ii ;
05557 
05558 ENTRY("AFNI_hidden_pts_CB") ;
05559 
05560    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
05561    dset_now = im3d->anat_now ;
05562    if( ! ISVALID_3DIM_DATASET(dset_now) ) EXRETURN ;
05563 
05564    ijk_option = False ;
05565    switch( im3d->vwid->prog->hidden_code ){  /* action set by user */
05566 
05567       /*---- Set Color ----*/
05568 
05569       case PTS_SET_COLOR:
05570          im3d->vinfo->pts_color   = cbs->ival ;
05571          im3d->vinfo->pts_visible = (cbs->ival > 0) ? True : False ;
05572          AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;  /* redraw */
05573       break ;
05574 
05575       /*---- READ pts int ----*/
05576 
05577       case PTS_READ_IJK:
05578          ijk_option = True ;   /* fall thru on purpose */
05579 
05580       case PTS_READ_XYZ:
05581 
05582          /** open input file **/
05583 
05584          fil = fopen( cbs->cval , "r" ) ;
05585          if( fil == NULL ){
05586             char buf[256] ;
05587             sprintf(buf,"Cannot open file\n %s\nfor reading!",cbs->cval) ;
05588             (void)  MCW_popup_message( im3d->vwid->picture , buf ,
05589                                        MCW_USER_KILL | MCW_TIMER_KILL ) ;
05590             XBell( im3d->dc->display , 100 ) ;
05591             EXRETURN ;
05592          }
05593 
05594          POPDOWN_string_chooser ;
05595 
05596          pause_it = ( THD_filesize(cbs->cval) > 99999 ) ;
05597          if( pause_it ) SHOW_AFNI_PAUSE ;
05598 
05599          /** read points **/
05600 
05601          INIT_VLIST(sv,dset_now) ;
05602          do {
05603             if( ijk_option )
05604                ii = fscanf( fil , " %d %d %d\n",
05605                      &(ijk_vec.ijk[0]),&(ijk_vec.ijk[1]),&(ijk_vec.ijk[2])) ;
05606             else
05607                ii = fscanf( fil , " %f %f %f\n",
05608                      &(xyz_vec.xyz[0]),&(xyz_vec.xyz[1]),&(xyz_vec.xyz[2])) ;
05609 
05610             if( ii == 3 ){                         /* all 3 good! */
05611                if( ijk_option ){ ADD_IVEC_TO_VLIST(sv,ijk_vec) ; }
05612                else            { ADD_FVEC_TO_VLIST(sv,xyz_vec) ; }
05613             } else if( ii == EOF ){                /* end of data! */
05614                fclose(fil) ;
05615                break ;                             /* exit do loop */
05616             } else {
05617                char buf[256] ;                     /* bad data! */
05618                fclose(fil) ;
05619                sprintf(buf,"Bad read in file\n %s\nat point # %d",
05620                        cbs->cval , sv->num + 1 ) ;
05621                (void)  MCW_popup_message( im3d->vwid->picture , buf ,
05622                                           MCW_USER_KILL | MCW_TIMER_KILL ) ;
05623                XBell( im3d->dc->display , 100 ) ;
05624                DESTROY_VLIST(sv) ;
05625                EXRETURN ;
05626             }
05627          } while (1) ;
05628 
05629          /** destroy any point sets in all current datasets **/
05630 
05631          for( ii=0 ; ii <= LAST_VIEW_TYPE ; ii++ ){
05632             if( ISVALID_3DIM_DATASET(im3d->anat_dset[ii]) ){
05633                DESTROY_VLIST( im3d->anat_dset[ii]->pts ) ;
05634                im3d->anat_dset[ii]->pts_original = False ;
05635             }
05636          }
05637 
05638          /** put new point set into current dataset **/
05639 
05640          dset_now->pts          = sv ;
05641          dset_now->pts_original = True ;
05642 
05643          AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
05644          if( pause_it ) SHOW_AFNI_READY ;
05645       break ;  /* end of read pts */
05646 
05647       /*---- WRITE pts out ----*/
05648 
05649       case PTS_WRITE_IJK:
05650          ijk_option = True ;   /* fall thru on purpose */
05651 
05652       case PTS_WRITE_XYZ:
05653 
05654          sv = im3d->anat_now->pts ;
05655          if( sv == NULL || sv->num == 0 ){
05656             XBell( im3d->dc->display , 100 ) ;
05657             EXRETURN ;
05658          }
05659 
05660          if( cbs->cval[0] == '|' ){  /* send to standard output */
05661             fil = stdout ;
05662          } else {
05663             if( THD_is_file(cbs->cval) ){
05664                char buf[256] ;
05665                sprintf(buf,"Desired output file\n %s\nalready exists!",cbs->cval);
05666                (void)  MCW_popup_message( im3d->vwid->picture , buf ,
05667                                           MCW_USER_KILL | MCW_TIMER_KILL ) ;
05668                XBell( im3d->dc->display , 100 ) ;
05669                EXRETURN ;
05670             }
05671 
05672             fil = fopen( cbs->cval , "w" ) ;
05673             if( fil == NULL ){
05674                char buf[256] ;
05675                sprintf(buf,"Cannot open file\n %s\nfor writing!",cbs->cval) ;
05676                (void)  MCW_popup_message( im3d->vwid->picture , buf ,
05677                                           MCW_USER_KILL | MCW_TIMER_KILL ) ;
05678                XBell( im3d->dc->display , 100 ) ;
05679                EXRETURN ;
05680             }
05681          }
05682 
05683          POPDOWN_string_chooser ;
05684 
05685          pause_it = ( sv->num > 6666 ) ;
05686          if( pause_it ) SHOW_AFNI_PAUSE ;
05687 
05688          if( ijk_option ){
05689             for( ii=0 ; ii < sv->num ; ii++ )
05690                fprintf(fil,"%d %d %d\n", sv->ijk[ii].ijk[0],
05691                                          sv->ijk[ii].ijk[1],
05692                                          sv->ijk[ii].ijk[2]  ) ;
05693          } else {
05694             for( ii=0 ; ii < sv->num ; ii++ )
05695                fprintf(fil,"%g %g %g\n", sv->xyz[ii].xyz[0],
05696                                          sv->xyz[ii].xyz[1],
05697                                          sv->xyz[ii].xyz[2]  ) ;
05698          }
05699 
05700          if( fil != stdout ) fclose(fil) ;
05701          if( pause_it ) SHOW_AFNI_READY ;
05702       break ;  /* end of write pts */
05703 
05704    } /* end of switch */
05705 
05706    EXRETURN ;
05707 }
05708 #endif
05709 
05710 /*====================================================================================*/
05711 #if defined(WANT_RWCOX_IMAGE) && defined(ALLOW_PLUGINS)
05712 
05713 void RWCOX_popper(void)
05714 {
05715    AFNI_splashup() ;
05716    return ;
05717 }
05718 #endif /* WANT_RWCOX_IMAGE */
05719 /*====================================================================================*/
05720 #ifdef USE_SKIT
05721 #define NSKIT 50
05722 static char *skit[NSKIT][3] = {
05723    "artless" ,       "base-court" ,        "apple-john" ,
05724    "bawdy" ,         "bat-fowling" ,       "baggage" ,
05725    "beslubbering" ,  "beef-witted" ,       "barnacle" ,
05726    "bootless" ,      "beetle-headed" ,     "bladder" ,
05727    "churlish" ,      "boil-brained" ,      "boar-pig" ,
05728    "cockered" ,      "clapper-clawed" ,    "bugbear" ,
05729    "clouted" ,       "clay-brained" ,      "bum-bailey" ,
05730    "craven" ,        "common-kissing" ,    "canker-blossom" ,
05731    "currish" ,       "crook-pated" ,       "clack-dish" ,
05732    "dankish" ,       "dismal-dreaming" ,   "clotpole" ,
05733    "dissembling" ,   "dizzy-eyed" ,        "coxcomb" ,
05734    "droning" ,       "doghearted" ,        "codpiece" ,
05735    "errant" ,        "dread-bolted" ,      "death-token" ,
05736    "fawning" ,       "earth-vexing" ,      "dewberry" ,
05737    "fobbing" ,       "elf-skinned" ,       "flap-dragon" ,
05738    "froward" ,       "fat-kidneyed" ,      "flax-wench" ,
05739    "frothy" ,        "fen-sucked" ,        "flirt-gill" ,
05740    "gleeking" ,      "flap-mouthed" ,      "foot-licker" ,
05741    "goatish" ,       "fly-bitten" ,        "fustilarian" ,
05742    "gorbellied" ,    "folly-fallen" ,      "giglet" ,
05743    "impertinent" ,   "fool-born" ,         "gudgeon" ,
05744    "infectious" ,    "full-gorged" ,       "haggard" ,
05745    "jarring" ,       "guts-griping" ,      "harpy" ,
05746    "loggerheaded" ,  "half-faced" ,        "hedge-pig" ,
05747    "lumpish" ,       "hasty-witted" ,      "horn-beast" ,
05748    "mammering" ,     "hedge-born" ,        "hugger-mugger" ,
05749    "mangled" ,       "hell-hated" ,        "joithead" ,
05750    "mewling" ,       "idle-headed" ,       "lewdster" ,
05751    "paunchy" ,       "ill-breeding" ,      "lout" ,
05752    "pribbling" ,     "ill-nurtured" ,      "maggot-pie" ,
05753    "puking" ,        "knotty-pated" ,      "malt-worm" ,
05754    "puny" ,          "milk-livered" ,      "mammet" ,
05755    "qualling" ,      "motley-minded" ,     "measle" ,
05756    "rank" ,          "onion-eyed" ,        "minnow" ,
05757    "reeky" ,         "plume-plucked" ,     "miscreant" ,
05758    "roguish" ,       "pottle-deep" ,       "moldwarp" ,
05759    "ruttish" ,       "pox-marked" ,        "mumble-news" ,
05760    "saucy" ,         "reeling-ripe" ,      "nut-hook" ,
05761    "spleeny" ,       "rough-hewn" ,        "pigeon-egg" ,
05762    "spongy" ,        "rude-growing" ,      "pignut" ,
05763    "surly" ,         "rump-fed" ,          "puttock" ,
05764    "tottering" ,     "shard-borne" ,       "pumpion" ,
05765    "unmuzzled" ,     "sheep-biting" ,      "ratsbane" ,
05766    "vain" ,          "spur-galled" ,       "scut" ,
05767    "venomed" ,       "swag-bellied" ,      "skainsmate" ,
05768    "villainous" ,    "tardy-gaited" ,      "strumpet" ,
05769    "warped" ,        "tickle-brained" ,    "varlet" ,
05770    "wayward" ,       "toad-spotted" ,      "vassal" ,
05771    "weedy" ,         "unchin-snouted" ,    "whey-face" ,
05772    "yeasty" ,        "weather-bitten" ,    "wagtail"
05773 } ;
05774 
05775 static char skstr[512] ;
05776 
05777 void SKIT_popper(Three_D_View *im3d)
05778 {
05779    int ii,jj,kk ;
05780 
05781    ii = lrand48() % NSKIT ; jj = lrand48() % NSKIT ; kk = lrand48() % NSKIT ;
05782    sprintf(skstr,"Randomly generated Shakespearean Insult:\n\n"
05783                  " Thou %s %s %s! \n" ,
05784            skit[ii][0] , skit[jj][1] , skit[kk][2] ) ;
05785 
05786    if( lrand48()%7 == 0 ){
05787       ii = strlen(skstr) ;
05788       sprintf( skstr+ii , "\n  [Data provided by Sandy Kindermann]" ) ;
05789    }
05790 
05791    (void)  MCW_popup_message( im3d->vwid->picture , skstr ,
05792                               MCW_USER_KILL | MCW_TIMER_KILL ) ;
05793 }
05794 #endif /* USE_SKIT */
05795 /*====================================================================================*/
05796 
05797 #endif /* USE_HIDDEN */

void AFNI_mnito_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 8255 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_jumpto_dicom(), AFNI_transform_vector(), Three_D_View::anat_dset, Three_D_View::anat_now, CAN_TALTO, MCW_choose_cbs::cval, Three_D_View::dc, MCW_DC::display, ENTRY, IM3D_VALID, LOAD_ANAT_VIEW, LOAD_FVEC3, mcwCR_string, POPDOWN_string_chooser, MCW_choose_cbs::reason, RESET_AFNI_QUIT, THD_mni_to_tta(), Three_D_View::type, VIEW_TALAIRACH_TYPE, THD_3dim_dataset::view_type, and THD_fvec3::xyz.

Referenced by AFNI_imag_pop_CB().

08256 {
08257    Three_D_View * im3d = (Three_D_View *) cd ;
08258    float xx,yy,zz ;
08259    char dum1[32],dum2[32];
08260    int nn ;
08261    THD_fvec3 tv ;
08262 
08263 ENTRY("AFNI_mnito_CB") ;
08264 
08265    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
08266 
08267    if( !CAN_TALTO(im3d) || cbs->reason != mcwCR_string  ){   /* error */
08268       POPDOWN_string_chooser ;
08269       XBell( im3d->dc->display , 100 ) ;
08270       EXRETURN ;
08271    }
08272 
08273    nn = sscanf( cbs->cval , "%f%[ ,]%f%[ ,]%f" , &xx,dum1,&yy,dum2,&zz ) ;
08274    if( nn != 5 ){ XBell( im3d->dc->display , 100 ) ; EXRETURN ; }
08275 
08276    LOAD_ANAT_VIEW(im3d) ;
08277 
08278    LOAD_FVEC3(tv,xx,yy,zz) ;    /* MNI coords */
08279    tv = THD_mni_to_tta( tv ) ;  /* Talairach coords */
08280 
08281    /* transform from Talairach to current view, if needed */
08282 
08283    if( im3d->anat_now->view_type != VIEW_TALAIRACH_TYPE )
08284       tv = AFNI_transform_vector( im3d->anat_dset[VIEW_TALAIRACH_TYPE] ,
08285                                   tv , im3d->anat_now ) ;
08286 
08287    nn = AFNI_jumpto_dicom( im3d , tv.xyz[0], tv.xyz[1], tv.xyz[2] ) ;
08288    if( nn < 0 ) XBell( im3d->dc->display , 100 ) ;
08289 
08290    RESET_AFNI_QUIT(im3d) ;
08291    EXRETURN ;
08292 }

void AFNI_modify_viewing Three_D_View  ,
Boolean   
 

Definition at line 3477 of file afni_func.c.

References AFNI_3DDATA_VIEW, AFNI_set_viewpoint(), AFNI_setup_viewing(), Three_D_View::anat_now, DISABLE_LOCK, ENABLE_LOCK, ENTRY, AFNI_view_info::i1, THD_ivec3::ijk, IM3D_OPEN, AFNI_view_info::j2, AFNI_view_info::k3, LOAD_ANAT_VIEW, REDISPLAY_ALL, SAVE_VPT, TEMP_FVEC3, TEMP_IVEC3, THD_3dmm_to_3dind(), THD_dicomm_to_3dmm(), Three_D_View::type, Three_D_View::vinfo, AFNI_view_info::xi, AFNI_view_info::yj, and AFNI_view_info::zk.

Referenced by AFNI_anatmode_CB(), AFNI_funcmode_CB(), AFNI_resam_av_CB(), AFNI_resam_vox_av_CB(), AFNI_time_index_CB(), and RT_tell_afni_one().

03478 {
03479    THD_fvec3 fv ;
03480    THD_ivec3 iv ;
03481 
03482 ENTRY("AFNI_modify_viewing") ;
03483 
03484    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
03485 
03486    /* set up datasets for new imaging */
03487 
03488    AFNI_setup_viewing( im3d , rescaled ) ;
03489 
03490    /* transform current POV to new indices */
03491 
03492    if( im3d->type == AFNI_3DDATA_VIEW ){            /* 19 Oct 1999 */
03493 
03494       LOAD_ANAT_VIEW(im3d) ;  /* 02 Nov 1996 */
03495 
03496       fv = THD_dicomm_to_3dmm(
03497              im3d->anat_now ,
03498              TEMP_FVEC3(im3d->vinfo->xi, im3d->vinfo->yj, im3d->vinfo->zk) ) ;
03499 
03500       iv = THD_3dmm_to_3dind( im3d->anat_now , fv ) ;
03501 
03502    } else {
03503 
03504       iv = TEMP_IVEC3( im3d->vinfo->i1 , im3d->vinfo->j2 , im3d->vinfo->k3 ) ;
03505    }
03506 
03507    /* and redisplay the images */
03508 
03509    DISABLE_LOCK ;
03510    AFNI_set_viewpoint( im3d, iv.ijk[0],iv.ijk[1],iv.ijk[2] , REDISPLAY_ALL ) ;
03511    ENABLE_LOCK ;
03512 
03513    SAVE_VPT(im3d) ;
03514    EXRETURN ;
03515 }

int AFNI_needs_dset_ijk void   
 

Definition at line 10169 of file afni.c.

References dset_ijk.

Referenced by DSET2_func(), and DSETN_func().

10169 { return dset_ijk ; }

int AFNI_needs_dset_tin void   
 

Definition at line 10170 of file afni.c.

References dset_tin.

10170 { return dset_tin ; }

MRI_IMAGE* AFNI_newfunc_overlay MRI_IMAGE   im_thr,
float    thresh,
MRI_IMAGE   im_fim,
float    fimbot,
float    fimtop,
rgbyte   fimcolor
 

Make a functional overlay the new way (30 Jan 2003):

  • im_thr = threshold image (may be NULL)
  • thresh = pixels with values in im_thr below this don't get overlay
  • im_fim = image to make overlay from (may not be NULL)
  • fimbot = pixel value to map to fimcolor[0]
  • fimtop = pixel value to map to fimcolor[NPANE_BIG-1] -------------------------------------------------------------------------

Definition at line 1308 of file afni_func.c.

References AFNI_yesenv(), rgbyte::b, ENTRY, rgbyte::g, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_FLOAT_PTR, mri_free(), mri_new_conforming, MRI_RGB_PTR, MRI_SHORT_PTR, NPANE_BIG, MRI_IMAGE::nvox, rgbyte::r, RETURN, thr, and ZREJ.

Referenced by AFNI_func_overlay().

01311 {
01312    MRI_IMAGE *im_ov ;
01313    byte *ovar ;
01314    int ii , npix , zbot , jj ;
01315    float fac , val ;
01316    int reject_zero = !AFNI_yesenv("AFNI_OVERLAY_ZERO") ; /* 20 Apr 2005 */
01317 
01318 ENTRY("AFNI_newfunc_overlay") ;
01319 
01320    if( im_fim == NULL || fimbot >= fimtop || fimcolor == NULL ) RETURN(NULL) ;
01321 
01322    /* create output image */
01323 
01324    im_ov = mri_new_conforming( im_fim , MRI_rgb ) ;
01325    ovar  = MRI_RGB_PTR(im_ov) ;
01326    npix  = im_ov->nvox ;
01327    zbot  = (fimbot == 0.0) ;             /* no color for negative values? */
01328    fac   = NPANE_BIG / (fimtop-fimbot) ;
01329 
01330    /* load output image with colors */
01331 
01332    switch( im_fim->kind ){
01333 
01334       default:                             /* should not happen! */
01335         mri_free(im_ov) ;
01336       RETURN(NULL) ;
01337 
01338       case MRI_short:{
01339         short *ar_fim = MRI_SHORT_PTR(im_fim) ;
01340 
01341         for( ii=0 ; ii < npix ; ii++ ){
01342           if( ZREJ(ar_fim[ii]) )       continue ;
01343           if( zbot && ar_fim[ii] < 0 ) continue ;
01344           val = fac*(fimtop-ar_fim[ii]) ;
01345           if( val < 0.0 ) val = 0.0;
01346           jj = (int)(val+0.49); if( jj >= NPANE_BIG ) jj = NPANE_BIG-1;
01347           ovar[3*ii  ] = fimcolor[jj].r ;
01348           ovar[3*ii+1] = fimcolor[jj].g ;
01349           ovar[3*ii+2] = fimcolor[jj].b ;
01350         }
01351       }
01352       break ;
01353 
01354       case MRI_byte:{
01355         byte *ar_fim = MRI_BYTE_PTR(im_fim) ;
01356 
01357         for( ii=0 ; ii < npix ; ii++ ){
01358           if( ZREJ(ar_fim[ii]) ) continue ;
01359           val = fac*(fimtop-ar_fim[ii]) ;
01360           if( val < 0.0 ) val = 0.0;
01361           jj = (int)(val+0.49); if( jj >= NPANE_BIG ) jj = NPANE_BIG-1;
01362           ovar[3*ii  ] = fimcolor[jj].r ;
01363           ovar[3*ii+1] = fimcolor[jj].g ;
01364           ovar[3*ii+2] = fimcolor[jj].b ;
01365         }
01366       }
01367       break ;
01368 
01369       case MRI_float:{
01370         float *ar_fim = MRI_FLOAT_PTR(im_fim) ;
01371 
01372         for( ii=0 ; ii < npix ; ii++ ){
01373           if( ZREJ(ar_fim[ii]) )        continue ;
01374           if( zbot && ar_fim[ii] < 0.0 ) continue ;
01375           val = fac*(fimtop-ar_fim[ii]) ;
01376           if( val < 0.0 ) val = 0.0;
01377           jj = (int)(val+0.49); if( jj >= NPANE_BIG ) jj = NPANE_BIG-1;
01378           ovar[3*ii  ] = fimcolor[jj].r ;
01379           ovar[3*ii+1] = fimcolor[jj].g ;
01380           ovar[3*ii+2] = fimcolor[jj].b ;
01381         }
01382       }
01383       break ;
01384    }
01385 
01386    /** now apply threshold, if any **/
01387 
01388    if( thresh > 0.0 && im_thr != NULL ){
01389      switch( im_thr->kind ){
01390 
01391        case MRI_short:{
01392          float thr = thresh ;
01393          short *ar_thr = MRI_SHORT_PTR(im_thr) ;
01394 
01395          for( ii=0 ; ii < npix ; ii++ ){
01396            if( ar_thr[ii] > -thr && ar_thr[ii] < thr )
01397              ovar[3*ii] = ovar[3*ii+1] = ovar[3*ii+2] = 0 ;
01398          }
01399        }
01400        break ;
01401 
01402        case MRI_byte:{
01403          float thr = thresh ;
01404          byte *ar_thr = MRI_BYTE_PTR(im_thr) ;
01405 
01406          for( ii=0 ; ii < npix ; ii++ )
01407            if( ar_thr[ii] < thr )
01408              ovar[3*ii] = ovar[3*ii+1] = ovar[3*ii+2] = 0 ;
01409        }
01410        break ;
01411 
01412        case MRI_float:{
01413          float thr = thresh ;
01414          float *ar_thr = MRI_FLOAT_PTR(im_thr) ;
01415 
01416          for( ii=0 ; ii < npix ; ii++ )
01417            if( ar_thr[ii] > -thr && ar_thr[ii] < thr )
01418              ovar[3*ii] = ovar[3*ii+1] = ovar[3*ii+2] = 0 ;
01419        }
01420        break ;
01421      }
01422    }
01423 
01424    RETURN(im_ov) ;
01425 }

MRI_IMAGE* AFNI_overlay int    n,
FD_brick   br
 

Mar 1999: do it in an external routine, not here. *

Definition at line 5525 of file afni.c.

References FD_brick::a123, a2, abs, AFNI_func_overlay(), AFNI_make_tagmask(), AFNI_ttatlas_overlay(), AFNI_yesenv(), Three_D_View::anat_now, color, AFNI_view_info::crosshair_gap, AFNI_view_info::crosshair_ovcolor, AFNI_view_info::crosshair_visible, THD_3dim_dataset::daxes, Three_D_View::dc, FD_brick::del1, FD_brick::del2, FD_brick::del3, FD_brick::dset, AFNI_ovtemplate::dx, MRI_IMAGE::dx, AFNI_ovtemplate::dy, MRI_IMAGE::dy, MRI_IMAGE::dz, ENTRY, fb, AFNI_view_info::func_visible, AFNI_view_info::i1, THD_ivec3::ijk, IM3D_VALID, AFNI_marks_widgets::isprimary, ISQ_overlay(), AFNI_view_info::j2, AFNI_view_info::k3, KILL_1MRI, MRI_IMAGE::kind, LOAD_DSET_VIEWS, THD_3dim_dataset::markers, AFNI_widget_set::marks, MARKS_MAXNUM, MCW_grapher::mat, MAX, mri_free(), mri_new(), MRI_SHORT_PTR, myXtNew, FD_brick::n1, FD_brick::n2, THD_usertaglist::num, AFNI_ovtemplate::numpix, THD_marker_set::numset, MRI_IMAGE::nx, MRI_IMAGE::ny, AFNI_marks_widgets::ov_mask, AFNI_marks_widgets::ov_pcolor, AFNI_marks_widgets::ov_scolor, AFNI_marks_widgets::ov_visible, FD_brick::parent, AFNI_view_info::pts_color, AFNI_view_info::pts_visible, RETURN, AFNI_view_info::see_ttatlas, THD_usertag::set, STATUS, THD_usertaglist::tag, AFNI_marks_widgets::tag_visible, THD_3dim_dataset::tagset, TEMP_FVEC3, TEMP_IVEC3, THD_3dind_to_fdind(), THD_3dmm_to_3dind(), THD_dicomm_to_3dmm(), UNDERLAY_TO_GRAPHER, UNDERLAY_TO_OVERLAY, THD_marker_set::valid, VIEW_TALAIRACH_TYPE, THD_3dim_dataset::view_type, Three_D_View::vinfo, Three_D_View::vwid, THD_usertag::x, AFNI_view_info::xhairs_all, AFNI_view_info::xhairs_ndown, AFNI_view_info::xhairs_nskip, AFNI_view_info::xhairs_nup, AFNI_view_info::xhairs_orimask, AFNI_view_info::xhairs_periodic, AFNI_view_info::xhairs_show_montage, THD_dataxes::xxorient, THD_marker_set::xyz, THD_usertag::y, THD_dataxes::yyorient, THD_usertag::z, and THD_dataxes::zzorient.

Referenced by AFNI_brick_to_mri().

05526 {
05527    Three_D_View * im3d = (Three_D_View *) br->parent ;
05528    MRI_IMAGE * im = NULL , * fov = NULL ;
05529    register short * oar ;
05530    int ii,jj , npix , xx,yy,zz , nx,ny , gap,ovc , icr,jcr,kcr ;
05531    Boolean ovgood ;
05532    THD_ivec3 ib ;
05533    THD_3dim_dataset * dset ;
05534    FD_brick * br_fim ;
05535    int do_xhar ;              /* 22 Mar 2002 */
05536    MRI_IMAGE *rgbov = NULL ;  /* 30 Jan 2003 */
05537 
05538 ENTRY("AFNI_overlay") ;
05539 
05540    if( ! IM3D_VALID(im3d) ) RETURN(NULL) ;
05541 
05542    /*--- check if crosshairs, markers, or functions are visible ---*/
05543 
05544    do_xhar = (im3d->vinfo->crosshair_visible && !AFNI_yesenv("AFNI_CROSSHAIR_LINES")) ;
05545 
05546    dset = im3d->anat_now ;
05547 
05548    ovgood =  do_xhar                                                  ||
05549 
05550             (  dset->markers != NULL       &&
05551               (dset->markers->numset > 0)  &&
05552               (im3d->vwid->marks->ov_visible == True) )               ||
05553 
05554             (  dset->tagset != NULL  &&
05555                dset->tagset->num > 0 &&
05556                (im3d->vwid->marks->tag_visible == True) )             ||
05557 
05558 #ifdef ALLOW_DATASET_VLIST
05559             ( dset->pts != NULL && im3d->vinfo->pts_visible == True ) ||
05560 #endif
05561 
05562             ( im3d->vinfo->func_visible == True )                     ||
05563 
05564             ( im3d->vinfo->see_ttatlas &&
05565               im3d->anat_now->view_type == VIEW_TALAIRACH_TYPE ) ;
05566 
05567    if( ! ovgood ) RETURN(NULL) ;
05568 
05569    /*-- at least one source of an overlay is present --*/
05570 
05571 if(PRINT_TRACING)
05572 { char str[256] ; sprintf(str,"n1=%d n2=%d",br->n1,br->n2) ; STATUS(str) ; }
05573 
05574    LOAD_DSET_VIEWS(im3d) ;  /* 02 Nov 1996 */
05575 
05576    /*----- get functional overlay, if desired -----*/
05577 
05578    if( im3d->vinfo->func_visible ){
05579       br_fim = UNDERLAY_TO_OVERLAY(im3d,br) ;
05580       fov    = AFNI_func_overlay( n , br_fim ) ;
05581       if( fov != NULL && fov->kind == MRI_rgb ){ /* 30 Jan 2003: */
05582         rgbov = fov ; fov = NULL ;               /* save RGB overlay for later */
05583       }
05584    }
05585 
05586    /*----- 25 Jul 2001: get TT atlas overlay, if desired and possible -----*/
05587 
05588    if( im3d->vinfo->see_ttatlas &&
05589        im3d->anat_now->view_type == VIEW_TALAIRACH_TYPE ){
05590 
05591       MRI_IMAGE * tov ;
05592 
05593       int ax_1 = br->a123.ijk[0] ;
05594       int ax_2 = br->a123.ijk[1] ;
05595       int ax_3 = br->a123.ijk[2] ;
05596 
05597       tov = AFNI_ttatlas_overlay( im3d , n , ax_1 , ax_2 , ax_3 , fov ) ;
05598       if( tov != NULL && tov != fov ){
05599          if( fov != NULL ) mri_free(fov) ;  /* should not happen */
05600          fov = tov ;
05601       }
05602    }
05603 
05604    /*----- now set up overlay image as the functional overlay
05605            (if present), or as a new blank image (otherwise). -----*/
05606 
05607    if( fov != NULL ){
05608 
05609 if(PRINT_TRACING)
05610 { char str[256] ;
05611 sprintf(str,"new overlay from AFNI_func_overlay: nx=%d ny=%d\n",fov->nx,fov->ny) ;
05612 STATUS(str) ; }
05613 
05614       im  = fov ; ovgood = True ;
05615       oar = MRI_SHORT_PTR(im) ;
05616    } else {
05617 STATUS("new overlay is created de novo") ;
05618       im  = mri_new( br->n1 , br->n2 , MRI_short ) ; ovgood = False ;
05619       oar = MRI_SHORT_PTR(im) ;
05620    }
05621 
05622    nx     = im->nx ;
05623    ny     = im->ny ;
05624    npix   = nx * ny ;
05625    im->dx = br->del1 ;  /* load dimensions (not that anyone cares) */
05626    im->dy = br->del2 ;
05627    im->dz = br->del3 ;
05628 
05629    /*----- put crosshairs on, if desired -----*/
05630 
05631    if( do_xhar ){
05632       MCW_grapher * grapher = UNDERLAY_TO_GRAPHER(im3d,br) ;
05633 
05634       ib = THD_3dind_to_fdind( br ,
05635                               TEMP_IVEC3( im3d->vinfo->i1 ,
05636                                           im3d->vinfo->j2 ,
05637                                           im3d->vinfo->k3  ) ) ;
05638 
05639       /** April 1996: Only put crosshairs on if image number
05640                       matches current slice number of viewpoint.
05641                       (This allows for the montage multislice view) **/
05642 
05643       /** July 1996: Allow for multiple crosshairs to indicate
05644                      the location of montage multislice views. **/
05645 
05646       /** Aug 1996: Allow for periodic (wrap) or non-periodic montages.
05647                     Also, if in "Single" mode and also are graphing,
05648                     then only draw the grapher frame, not the crosshairs. **/
05649 
05650       /** Dec 1998: Allow for user to turn off some directions of crosshairs **/
05651 
05652       if( n == ib.ijk[2] || im3d->vinfo->xhairs_all ){
05653          int jp,ip , jcen,icen , gappp ;
05654          int idown,iup,iskip , jdown,jup,jskip , imon,jmon ;
05655          int a1 = br->a123.ijk[0] ,   /* x axis of the brick?    */
05656              ax = abs(a1) - 1       ; /* 0,1,2 for dataset x,y,z */
05657          int a2 = br->a123.ijk[1] ,   /* y axis of the brick?    */
05658              ay = abs(a2) - 1       ; /* 0,1,2 for dataset x,y,z */
05659          int a3 = br->a123.ijk[2] ,   /* z axis of the brick?    */
05660              az = abs(a3) - 1       ; /* 0,1,2 for dataset x,y,z */
05661 
05662          /* 31 Dec 1998: spatial orientations of image axes */
05663 
05664          int ox = (ax==0) ? br->dset->daxes->xxorient :
05665                   (ax==1) ? br->dset->daxes->yyorient : br->dset->daxes->zzorient ;
05666 
05667          int oy = (ay==0) ? br->dset->daxes->xxorient :
05668                   (ay==1) ? br->dset->daxes->yyorient : br->dset->daxes->zzorient ;
05669 
05670          ovc  = im3d->vinfo->crosshair_ovcolor ;
05671          gap  = (grapher==NULL) ? im3d->vinfo->crosshair_gap : (grapher->mat+1)/2 ;
05672          icen = ib.ijk[0] ;
05673          jcen = ib.ijk[1] ;
05674 
05675          /** initialize montage steps **/
05676 
05677          if( im3d->vinfo->xhairs_show_montage ){           /* in "Multi" mode */
05678             iskip = im3d->vinfo->xhairs_nskip.ijk[ax] + 1 ;
05679             jskip = im3d->vinfo->xhairs_nskip.ijk[ay] + 1 ;
05680             if( a1 > 0 ){
05681                idown = im3d->vinfo->xhairs_ndown.ijk[ax] ;
05682                iup   = im3d->vinfo->xhairs_nup.ijk[ax] ;
05683             } else {
05684                iup   = im3d->vinfo->xhairs_ndown.ijk[ax] ;
05685                idown = im3d->vinfo->xhairs_nup.ijk[ax] ;
05686             }
05687             if( a2 > 0 ){
05688                jdown = im3d->vinfo->xhairs_ndown.ijk[ay] ;
05689                jup   = im3d->vinfo->xhairs_nup.ijk[ay] ;
05690             } else {
05691                jup   = im3d->vinfo->xhairs_ndown.ijk[ay] ;
05692                jdown = im3d->vinfo->xhairs_nup.ijk[ay] ;
05693             }
05694 
05695 if(PRINT_TRACING)
05696 { char str[256] ;
05697   sprintf(str,"montage xhairs: ax   =%d ay   =%d az =%d",ax,ay,az)       ; STATUS(str);
05698   sprintf(str,"                iskip=%d idown=%d iup=%d",iskip,idown,iup); STATUS(str);
05699   sprintf(str,"                jskip=%d jdown=%d jup=%d",jskip,jdown,jup); STATUS(str);
05700   sprintf(str,"orimask=%d ox=%d oy=%d",im3d->vinfo->xhairs_orimask,ox,oy); STATUS(str);
05701 }
05702 
05703          } else {                                          /* in "Single" Mode */
05704            idown = iup = jdown = jup = iskip = jskip = 0 ;
05705            if( grapher != NULL ){ idown=-(iup+1); jdown=-(jup+1); } /* skip lines? */
05706          }
05707 
05708          /* draw vertical lines first */
05709 
05710          if( (im3d->vinfo->xhairs_orimask & (1<<oy)) != 0 ){  /* 31 Dec 1998 */
05711             for( imon=-idown ; imon <= iup ; imon++ ){
05712                icr = icen + imon * iskip ;
05713 
05714                if( im3d->vinfo->xhairs_periodic ){
05715                   while( icr < 0 )   icr += nx ;
05716                   while( icr >= nx ) icr -= nx ;
05717                } else {
05718                   if( icr < 0 || icr >= nx ) continue ;
05719                }
05720 
05721                gappp = (abs(icr-icen) <= gap) ? gap : -1 ; /* no gap if far from center */
05722 
05723                /* if lines are closely packed, only do alternate pixels */
05724 
05725                if( idown+iup > 0 && iskip == 1 && icr != icen ){
05726                   for( jj=(imon+idown)%2 ; jj < ny ; jj+=2 )
05727                      if( abs(jj-jcen) > gappp ) oar[icr+nx*jj] = ovc ;
05728                } else {
05729                   for( jj=0 ; jj < ny ; jj++ )
05730                      if( abs(jj-jcen) > gappp ) oar[icr+nx*jj] = ovc ;
05731                }
05732             }
05733          }
05734 
05735          /* draw horizontal lines */
05736 
05737          if( (im3d->vinfo->xhairs_orimask & (1<<ox)) != 0 ){  /* 31 Dec 1998 */
05738             for( jmon=-jdown ; jmon <= jup ; jmon++ ){
05739                jcr = jcen + jmon * jskip ;
05740                if( im3d->vinfo->xhairs_periodic ){
05741                   while( jcr < 0 )   jcr += ny ;
05742                   while( jcr >= ny ) jcr -= ny ;
05743                } else {
05744                   if( jcr < 0 || jcr >= ny ) continue ;
05745                }
05746 
05747                gappp = (abs(jcr-jcen) <= gap) ? gap : -1 ;  /* no gap if far from center */
05748 
05749                /* if lines are closely packed, only do alternate pixels */
05750 
05751                if( jdown+jup > 0 && jskip == 1 && jcr != jcen ){
05752                   for( ii=(jmon+jdown)%2 ; ii < nx ; ii+=2 )
05753                      if( abs(ii-icen) > gappp ) oar[ii+nx*jcr] = ovc ;
05754                } else {
05755                   for( ii=0 ; ii < nx ; ii++ )
05756                      if( abs(ii-icen) > gappp ) oar[ii+nx*jcr] = ovc ;
05757                }
05758             }
05759          }
05760 
05761          /* draw grapher frame, if needed */
05762 
05763          if( grapher != NULL ){
05764             int gs = gap , gb = (grapher->mat +2)/2 ;
05765 
05766             jcr = jcen ; icr = icen ;
05767 
05768             ip = icr - gb ; if( ip <  0  ) ip += nx ;
05769             ii = icr + gs ; if( ii >= nx ) ii -= nx ;
05770             for( jj=jcr-gb ; jj <= jcr+gs ; jj++ ){
05771                jp = jj ; if( jp <  0  ) jp += ny ;
05772                     else if( jp >= ny ) jp -= ny ;
05773                oar[ip+nx*jp] = ovc ;
05774                oar[ii+nx*jp] = ovc ;
05775             }
05776 
05777             jp = jcr - gb ; if( jp <  0  ) jp += ny ;
05778             jj = jcr + gs ; if( jj >= ny ) jj -= ny ;
05779             for( ii=icr-gb ; ii <= icr+gs ; ii++ ){
05780               ip = ii ; if( ip <  0  ) ip += nx ;
05781                    else if( ip >= nx ) ip -= nx ;
05782               oar[ip+nx*jp] = ovc ;
05783               oar[ip+nx*jj] = ovc ;
05784             }
05785          } /* end if "if grapher exists" */
05786 
05787          ovgood = True ;
05788       } /* end of "if correct slice" */
05789 
05790    } /* end of crosshairs */
05791 
05792    /*----- put markers on, if desired -----*/
05793 
05794    if( im3d->anat_now->markers != NULL &&
05795        im3d->anat_now->markers->numset > 0 &&
05796        (im3d->vwid->marks->ov_visible == True) ){
05797 
05798       THD_marker_set     * markers = im3d->anat_now->markers ;
05799       AFNI_marks_widgets * marks   = im3d->vwid->marks ;
05800       AFNI_ovtemplate    * tem     = &(marks->ov_mask) ;
05801       int xbase , ybase , zbase , color ;
05802       THD_ivec3 ib ;
05803 
05804       /* do secondary points first */
05805 
05806       color = marks->ov_scolor ;
05807 
05808       for( jj=0 ; jj < MARKS_MAXNUM ; jj++ ){
05809          if( markers->valid[jj] &&     /* is point set? */
05810              color > 0          &&     /* will show up? */
05811              !marks->isprimary[jj] ){  /* is secondary? */
05812 
05813             ib = THD_3dmm_to_3dind( br->dset ,
05814                                     TEMP_FVEC3( markers->xyz[jj][0] ,
05815                                                 markers->xyz[jj][1] ,
05816                                                 markers->xyz[jj][2]  ) ) ;
05817             ib = THD_3dind_to_fdind( br , ib ) ;
05818 
05819             xbase = ib.ijk[0] ;  /* coordinates */
05820             ybase = ib.ijk[1] ;  /* in and out */
05821             zbase = ib.ijk[2] ;  /* of plane  */
05822 
05823             if( zbase == n ){  /* in this display plane */
05824                ovgood = True ;
05825                for( ii=0 ; ii < tem->numpix ; ii++ ){
05826                   xx = xbase + tem->dx[ii] ;
05827                   yy = ybase + tem->dy[ii] ;
05828                   if( xx >= 0 && xx < nx && yy >=0 && yy < ny )
05829                                               oar[xx+nx*yy] = color ;
05830                }
05831             }
05832          } /* end if point set, and secondary */
05833       } /* end for loop over all secondary points */
05834 
05835       /* duplicate above for primary points */
05836 
05837       color = marks->ov_pcolor ;
05838 
05839       for( jj=0 ; jj < MARKS_MAXNUM ; jj++ ){
05840          if( markers->valid[jj] &&     /* is point set? */
05841              color > 0          &&     /* will show up? */
05842              marks->isprimary[jj]  ){  /* is primary? */
05843 
05844             ib = THD_3dmm_to_3dind( br->dset ,
05845                                     TEMP_FVEC3( markers->xyz[jj][0] ,
05846                                                 markers->xyz[jj][1] ,
05847                                                 markers->xyz[jj][2]  ) ) ;
05848             ib = THD_3dind_to_fdind( br , ib ) ;
05849 
05850             xbase = ib.ijk[0] ;  /* coordinates */
05851             ybase = ib.ijk[1] ;  /* in and out */
05852             zbase = ib.ijk[2] ;  /* of plane  */
05853 
05854             if( zbase == n ){  /* in this display plane */
05855                ovgood = True ;
05856                for( ii=0 ; ii < tem->numpix ; ii++ ){
05857                   xx = xbase + tem->dx[ii] ;
05858                   yy = ybase + tem->dy[ii] ;
05859                   if( xx >= 0 && xx < nx && yy >=0 && yy < ny )
05860                                               oar[xx+nx*yy] = color ;
05861                }
05862             }
05863          } /* end if point set, and primary */
05864       } /* end for loop over all secondary points */
05865 
05866    } /* end if markers to be shown */
05867 
05868    /*----- put tags on, if desired -----*/
05869 
05870    if( im3d->anat_now->tagset != NULL  &&
05871        im3d->anat_now->tagset->num > 0 &&
05872        (im3d->vwid->marks->tag_visible == True) ){
05873 
05874       static AFNI_ovtemplate * tem = NULL ;
05875       static int             npold = -1 ;
05876 
05877       THD_usertaglist * tl = im3d->anat_now->tagset ;
05878       int xbase , ybase , zbase , color , np ;
05879       THD_ivec3 ib ;
05880       THD_fvec3 fb ;
05881 
05882       if( tem == NULL ) tem = myXtNew(AFNI_ovtemplate) ; /* once only */
05883       np = MAX(nx,ny)/64 ; np = MAX(np,2) ;
05884       if( np != npold ){ npold = np ; AFNI_make_tagmask(np,0,tem) ; }
05885 
05886       color = im3d->vwid->marks->ov_pcolor ;  /* doesn't have its own color */
05887 
05888       for( jj=0 ; jj < tl->num ; jj++ ){
05889          if( tl->tag[jj].set && color > 0 ){
05890 
05891             fb = THD_dicomm_to_3dmm( br->dset, TEMP_FVEC3( tl->tag[jj].x ,
05892                                                            tl->tag[jj].y ,
05893                                                            tl->tag[jj].z  ) );
05894             ib = THD_3dmm_to_3dind( br->dset , fb ) ;
05895             ib = THD_3dind_to_fdind( br , ib ) ;
05896 
05897             xbase = ib.ijk[0] ;  /* coordinates */
05898             ybase = ib.ijk[1] ;  /* in and out */
05899             zbase = ib.ijk[2] ;  /* of plane  */
05900 
05901             if( zbase == n ){  /* in this display plane */
05902                ovgood = True ;
05903                for( ii=0 ; ii < tem->numpix ; ii++ ){
05904                   xx = xbase + tem->dx[ii] ;
05905                   yy = ybase + tem->dy[ii] ;
05906                   if( xx >= 0 && xx < nx && yy >=0 && yy < ny )
05907                                               oar[xx+nx*yy] = color ;
05908                }
05909             }
05910          }
05911       }
05912    } /* end if tags to be shown */
05913 
05914 #ifdef ALLOW_DATASET_VLIST
05915    /*----- May 1995: additional points (single pixels) -----*/
05916 
05917    if( im3d->vinfo->pts_visible   &&
05918        dset->pts != NULL          &&
05919        im3d->vinfo->pts_color > 0   ){
05920 
05921       int color , jj ;
05922       THD_ivec3 ib ;
05923 
05924       color = im3d->vinfo->pts_color ;
05925 
05926       for( jj=0 ; jj < dset->pts->num ; jj++ ){
05927          ib = THD_3dind_to_fdind( br , dset->pts->ijk[jj] ) ;
05928          if( ib.ijk[2] == n ){
05929             oar[ ib.ijk[0] + nx * ib.ijk[1] ] = color ;
05930             ovgood = True ;
05931          }
05932       }
05933    }
05934 #endif
05935 
05936    /*----- return overlay (kill it if nothing happened) -----*/
05937 
05938    if( !ovgood ) KILL_1MRI(im) ;
05939 
05940    /* 30 Jan 2003:
05941       If the functional overlay is in RGB format,
05942       then must meld that with the short color index image */
05943 
05944    if( rgbov != NULL ){
05945      if( im != NULL ){
05946        MRI_IMAGE *qim ;
05947        qim = ISQ_overlay( im3d->dc , rgbov , im , 1.0 ) ;
05948        mri_free(rgbov); mri_free(im); rgbov = qim;
05949      }
05950      im = rgbov ;
05951    }
05952 
05953    RETURN( im ) ;
05954 }

void AFNI_parse_args int    argc,
char *    argv[]
 

Definition at line 382 of file afni.c.

References AFMALL, AFNI_setenv(), AFNI_syntax(), AFNI_yesenv(), AF_options::allow_rt, argc, AF_options::auto_purge, COM_com, COM_num, AFNI_library_type::cord, AF_options::datum, AF_options::destruct, AF_options::dy, AF_options::dz, AF_options::elide_quality, AF_options::enable_suma, ENTRY, ERROR_message(), FatalError, THD_coorder::first, AF_options::first_file_arg, AF_options::gamma, getenv(), GLOBAL_argopt, GLOBAL_library, AF_options::gsfac, AF_options::ignore, INIT_ignore, INIT_posfunc, INIT_purge, INIT_tlrc_big, AF_options::install_cmap, AF_options::keep_logo, AF_options::layout_fname, AF_options::left_is_left, MAIN_argc, MAIN_argv, MAIN_shell, MCW_strncpy, AF_options::ncolor, AF_options::no_frivolities, AF_options::noplugins, AF_options::noplugouts, AF_options::orient_code, AF_options::plugout_code, AF_options::port_niml, AF_options::pos_func, prepend_string_to_args(), AF_options::read_1D, AF_options::read_dsets, AF_options::read_images, AF_options::read_sessions, AF_options::read_tim, AF_options::recurse, AF_options::resize_images, AF_options::script_fname, THD_coorder::second, SESSTRAIL, AF_options::skip_afnirc, strtod(), THD_coorder_fill(), THD_is_file(), THD_coorder::third, AF_options::title_name, AF_options::tlrc_big, AF_options::unique_dcs, AF_options::warp_4D, AF_options::xtwarns, THD_coorder::xxsign, AF_options::yes_niml, THD_coorder::yysign, and THD_coorder::zzsign.

Referenced by main().

00383 {
00384    int narg = 1 ;
00385    char * env_orient , * env ;
00386    int     argc=in_argc ,    new_argc      ; /* 18 Nov 1999 */
00387    char ** argv=in_argv , ** new_argv=NULL ;
00388 
00389 ENTRY("AFNI_parse_args") ;
00390 
00391    if( argc > 1 && strncmp(argv[1],"-help",2) == 0 ) AFNI_syntax() ;
00392 
00393    GLOBAL_argopt.dz       = 1.0 ;          /* set up defaults */
00394    GLOBAL_argopt.dy       = 1.0 ;
00395    GLOBAL_argopt.ignore   = INIT_ignore ;
00396    GLOBAL_argopt.elide_quality  = 0 ;      /* Dec 1997 */
00397    GLOBAL_argopt.no_frivolities = 0 ;      /* 01 Aug 1998 */
00398    GLOBAL_argopt.install_cmap   = 0 ;      /* 14 Sep 1998 */
00399    GLOBAL_argopt.read_1D        = 1 ;      /* 27 Jan 2000 */
00400 
00401    GLOBAL_argopt.enable_suma    = 1 ;      /* 29 Aug 2001 */
00402 
00403    GLOBAL_argopt.yes_niml       = AFNI_yesenv("AFNI_NIML_START") ;
00404    GLOBAL_argopt.port_niml      = 0 ;      /* 10 Dec 2002 */
00405 
00406 #if 0
00407    GLOBAL_argopt.allow_rt = 0 ;            /* April 1997 */
00408 #else                                      /* 09 Oct 2000 */
00409    GLOBAL_argopt.allow_rt = AFNI_yesenv("AFNI_REALTIME_Activate") ;
00410    GLOBAL_argopt.no_frivolities = (GLOBAL_argopt.allow_rt != 0) ;
00411 #endif
00412 
00413    SESSTRAIL = 1 ;
00414    env = getenv( "AFNI_SESSTRAIL" ) ;
00415    if( env != NULL ){
00416      SESSTRAIL = strtol(env,NULL,10) ;
00417      if( SESSTRAIL < 0 ) SESSTRAIL = 0 ;  /* 24 Aug 2000 */
00418    }
00419 
00420    GLOBAL_argopt.elide_quality = AFNI_yesenv("AFNI_MARKERS_NOQUAL") ;
00421 
00422    /* 24 Sep 2000: get the default layout name (add $HOME) */
00423 
00424    { char * lf = getenv("AFNI_LAYOUT_FILE") ;
00425      if( lf != NULL ){
00426         char * eh = getenv("HOME") , * ff ;
00427         int ll = strlen(lf) + 8 ;
00428         if( eh != NULL ) ll += strlen(eh) ;
00429         ff = AFMALL(char, ll) ;
00430         if( eh != NULL && lf[0] != '/' ){ strcpy(ff,eh) ; strcat(ff,"/") ; }
00431         else                            { ff[0] = '\0' ; }
00432         strcat(ff,lf) ;
00433         GLOBAL_argopt.layout_fname = ff ;
00434      }
00435    }
00436 
00437    /* 21 Jan 2003: get the startup script name */
00438 
00439    { char *lf = getenv("AFNI_STARTUP_SCRIPT") ;
00440      if( lf == NULL ) lf = ".afni.startup_script" ;
00441      if( lf != NULL ){
00442        char *eh = NULL , *ff ;
00443        int ll = strlen(lf) + 8 ;
00444        if( !THD_is_file(lf) && lf[0] != '/' ) eh = getenv("HOME") ;
00445        if( eh != NULL ) ll += strlen(eh) ;
00446        ff = AFMALL(char, ll) ;
00447        if( eh != NULL ){ strcpy(ff,eh) ; strcat(ff,"/") ; }
00448        else            { ff[0] = '\0' ; }
00449        strcat(ff,lf) ;
00450        GLOBAL_argopt.script_fname = ff ;
00451      }
00452    }
00453 
00454    /*-- 18 Nov 1999: Allow setting of options from environment --*/
00455 
00456    env = getenv( "AFNI_OPTIONS" ) ;
00457    if( env != NULL )
00458      prepend_string_to_args( env, in_argc, in_argv, &new_argc, &new_argv ) ;
00459    if( new_argv != NULL ){
00460       MAIN_argc = argc = new_argc ;
00461       MAIN_argv = argv = new_argv ;
00462    }
00463 
00464 #ifdef ALLOW_PLUGINS
00465    GLOBAL_argopt.noplugins  =  AFNI_yesenv( "AFNI_NOPLUGINS" ) ;
00466    GLOBAL_argopt.noplugouts = !AFNI_yesenv( "AFNI_YESPLUGOUTS" ) ;
00467 #endif
00468 
00469    env_orient = getenv( "AFNI_ORIENT" ) ;
00470 
00471    GLOBAL_argopt.read_sessions = True ;        /* exactly one of these should be True */
00472    GLOBAL_argopt.read_images   = False ;
00473    GLOBAL_argopt.read_dsets    = False ;       /* 17 Mar 2000 */
00474 
00475    GLOBAL_argopt.datum         = ILLEGAL_TYPE ;
00476 
00477    GLOBAL_argopt.gamma         = INIT_gamma ;
00478    GLOBAL_argopt.gsfac         = 0.0 ;
00479    GLOBAL_argopt.ncolor        = INIT_ngray ;
00480 #if MMAP_THRESHOLD > 0
00481    GLOBAL_argopt.auto_purge    = INIT_purge ;
00482 #else
00483    GLOBAL_argopt.auto_purge    = True ;
00484 #endif
00485    GLOBAL_argopt.resize_images = False ;       /* False means all images must match */
00486    GLOBAL_argopt.keep_logo     = False ;       /* For making pretty pictures? */
00487    GLOBAL_argopt.pos_func      = INIT_posfunc ;/* Positive valued functions? */
00488    GLOBAL_argopt.recurse       = 0 ;           /* Recurse on session directories? */
00489    GLOBAL_argopt.xtwarns       = False ;       /* True means keep Xt warnings turned on */
00490    GLOBAL_argopt.destruct      = False ;       /* True means allow overwrite of datasets */
00491                                                /* (Not yet properly implemented!) */
00492 
00493    GLOBAL_argopt.tlrc_big      = INIT_tlrc_big ; /* use the big Talairach box? */
00494 #ifndef WARP_4D
00495    GLOBAL_argopt.warp_4D       = False ;
00496 #else
00497    GLOBAL_argopt.warp_4D       = True ;
00498 #endif
00499 
00500    GLOBAL_argopt.unique_dcs    = False ;  /* 06 Nov 1996 */
00501 
00502    strcpy(GLOBAL_argopt.orient_code,"---") ;
00503 
00504    strcpy(GLOBAL_argopt.title_name,"AFNI") ;           /* default title bar name */
00505 
00506    GLOBAL_argopt.left_is_left = AFNI_yesenv( "AFNI_LEFT_IS_LEFT" ) ;
00507 
00508    GLOBAL_argopt.read_tim = 0 ;   /* 19 Oct 1999 */
00509 
00510    while( narg < argc ){
00511 
00512       if( argv[narg][0] != '-' ) break ;   /* no - ==> quit */
00513 
00514 #ifdef USE_TRACING
00515       if( strncmp(argv[narg],"-trace",5) == 0 ){
00516          DBG_trace = 1 ;
00517          narg++ ; continue ;
00518       }
00519       if( strncmp(argv[narg],"-TRACE",5) == 0 ){  /* 23 Aug 1998 */
00520          DBG_trace = 2 ;
00521          if( MAIN_shell != NULL )
00522             XSynchronize(XtDisplay(MAIN_shell),TRUE) ; /* 01 Dec 1999 */
00523          narg++ ; continue ;
00524       }
00525 #endif
00526 
00527       /*----- -Dname=val -- set environment variable [22 Mar 2005] -----*/
00528 
00529       if( strncmp(argv[narg],"-D",2) == 0 && strchr(argv[narg],'=') != NULL ){
00530         (void) AFNI_setenv( argv[narg]+2 ) ;
00531         narg++ ; continue ;                 /* go to next arg */
00532       }
00533 
00534       /*----- -layout (23 Sep 2000) -----*/
00535 
00536       if( strcmp(argv[narg],"-layout") == 0 ){
00537          if( narg+1 >= argc ) FatalError("need an argument after -layout!") ;
00538          GLOBAL_argopt.layout_fname = argv[++narg] ;  /* just a pointer */
00539          narg++ ; continue ;  /* go to next arg */
00540       }
00541 
00542       /*----- -no1D option (27 Jan 2000) ----- */
00543 
00544       if( strncmp(argv[narg],"-no1D",5) == 0 ){
00545          GLOBAL_argopt.read_1D = 0 ;
00546          narg++ ; continue ;  /* go to next arg */
00547       }
00548 
00549       /*----- -skip_afnirc option (14 Jul 1998) -----*/
00550 
00551       if( strncmp(argv[narg],"-skip_afnirc",12) == 0 ){
00552          GLOBAL_argopt.skip_afnirc  = 1 ;
00553          narg++ ; continue ;  /* go to next arg */
00554       }
00555 
00556       /*----- -rt option -----*/
00557 
00558       if( strncmp(argv[narg],"-rt",3) == 0 ){
00559          GLOBAL_argopt.allow_rt       = -1 ;
00560          GLOBAL_argopt.no_frivolities =  1 ;
00561 #if 0
00562 #ifdef USE_TRACING
00563          DBG_trace                    =  0 ;  /* 26 Jan 2001 */
00564 #endif
00565 #endif
00566          narg++ ; continue ;  /* go to next arg */
00567       }
00568 
00569       if( strncmp(argv[narg],"-nort",5) == 0 ){  /* 09 Oct 2000 */
00570          GLOBAL_argopt.allow_rt       = 0 ;
00571          GLOBAL_argopt.no_frivolities = 0 ;
00572          narg++ ; continue ;  /* go to next arg */
00573       }
00574 
00575       /*----- -noqual -----*/
00576 
00577       if( strncmp(argv[narg],"-noqual",6) == 0 ){
00578          GLOBAL_argopt.elide_quality = 1 ;
00579          narg++ ; continue ;  /* go to next arg */
00580       }
00581 
00582       /*---- -agni [29 Aug 2001] or -suma -----*/
00583 
00584       if( strcmp(argv[narg],"-agni")==0 || strcmp(argv[narg],"-suma")==0 ){
00585          fprintf(stderr,"\n-agni/-suma are now turned on by default\n") ;
00586          GLOBAL_argopt.enable_suma = 1 ;
00587          narg++ ; continue ;  /* go to next arg */
00588       }
00589 
00590       /*---- -com ccc [29 Jul 2005] ----*/
00591 
00592       if( strcmp(argv[narg],"-com") == 0 ){
00593         int ll ;
00594         if( ++narg >= argc ) FatalError("need an argument after -com!");
00595         ll = strlen(argv[narg]) ;
00596              if( ll > 255 ) ERROR_message("argument after -com is too long!" );
00597         else if( ll <   3 ) ERROR_message("argument after -com is too short!");
00598         else                COM_com[ COM_num++ ] = argv[narg] ;
00599 
00600         narg++ ; continue ;  /* go to next arg */
00601       }
00602 
00603       /*---- -niml [28 Feb 2002] -----*/
00604 
00605       if( strcmp(argv[narg],"-niml") == 0 ){
00606          if( GLOBAL_argopt.yes_niml )
00607            fprintf(stderr,"\n-niml is already turned on\n") ;
00608          GLOBAL_argopt.yes_niml++ ;
00609          narg++ ; continue ;  /* go to next arg */
00610       }
00611 
00612       /*---- -np port [10 Dec 2002] ----*/
00613 
00614       if( strcmp(argv[narg],"-np") == 0 ){
00615          float val ;
00616          if( narg+1 >= argc ) FatalError("need an argument after -np!");
00617 
00618          val = strtod( argv[++narg] , NULL ) ;
00619          if( val >= 1024 && val <= 65535 ) GLOBAL_argopt.port_niml = (int)val ;
00620          else fprintf(stderr,
00621                 "\n*** WARNING: -np %s is illegal!\n", argv[narg]);
00622          narg++ ; continue ;  /* go to next arg */
00623       }
00624 
00625       if( strcmp(argv[narg],"-noniml") == 0 ){
00626          GLOBAL_argopt.yes_niml-- ;
00627          if( GLOBAL_argopt.yes_niml < 0 ) GLOBAL_argopt.yes_niml = 0 ;
00628          narg++ ; continue ;  /* go to next arg */
00629       }
00630 
00631       /*----- -tbar 'name' option -----*/
00632 
00633       if( strncmp(argv[narg],"-tbar",5) == 0 ){
00634          if( narg+1 >= argc ) FatalError("need an argument after -tbar!");
00635          MCW_strncpy(GLOBAL_argopt.title_name,argv[++narg],32) ;
00636          narg++ ; continue ;  /* go to next arg */
00637       }
00638 
00639       /*----- -xtwarns option -----*/
00640 
00641       if( strncmp(argv[narg],"-xtwarns",6) == 0 ){
00642          GLOBAL_argopt.xtwarns = True ;
00643          narg++ ; continue ;  /* go to next arg */
00644       }
00645 
00646       /*----- -destruct option -----*/
00647 
00648       if( strncmp(argv[narg],"-destruct",6) == 0 ){   /** has no effect at present **/
00649          fprintf(stderr,"\n*** -destruct option not implemented at present! ***\n") ;
00650          GLOBAL_argopt.destruct = False ;
00651          narg++ ; continue ;  /* go to next arg */
00652       }
00653 
00654       /*----- -posfunc option -----*/
00655 
00656       if( strncmp(argv[narg],"-posfunc",6) == 0 ){
00657          GLOBAL_argopt.pos_func = True ;
00658          narg++ ; continue ;  /* go to next arg */
00659       }
00660 
00661       /*----- -R option -----*/
00662 
00663       if( strncmp(argv[narg],"-R",2) == 0 ){
00664          int ll = strlen(argv[narg]) ;
00665          if( ll == 2 ) GLOBAL_argopt.recurse = 999 ;
00666          else {
00667             ll = strtol( argv[narg]+2 , NULL , 10 ) ;
00668             if( ll > 0 ) GLOBAL_argopt.recurse = ll ;
00669             else FatalError("illegal -R option!") ;
00670          }
00671          narg++ ; continue ;  /* go to next arg */
00672       }
00673 
00674       /*----- -tlrc_big option -----*/
00675 
00676       if( strncmp(argv[narg],"-tlrc_big",7) == 0 ){
00677          GLOBAL_argopt.tlrc_big = True ;
00678          narg++ ; continue ;  /* go to next arg */
00679       }
00680 
00681       /*----- -unique option (06 Nov 1996) -----*/
00682 
00683       if( strncmp(argv[narg],"-unique",5) == 0 ){
00684          GLOBAL_argopt.unique_dcs = True ;
00685          narg++ ; continue ;  /* go to next arg */
00686       }
00687 
00688       /*----- -install option (14 Sep 1998) -----*/
00689 
00690       if( strncmp(argv[narg],"-install",5) == 0 ){
00691          GLOBAL_argopt.install_cmap = True ;
00692          narg++ ; continue ;  /* go to next arg */
00693       }
00694 
00695 #ifndef WARP_4D
00696       /*----- -warp_4D option -----*/
00697 
00698       if( strncmp(argv[narg],"-warp_4D",7) == 0 ){
00699          GLOBAL_argopt.warp_4D = True ;
00700          narg++ ; continue ;  /* go to next arg */
00701       }
00702 #endif
00703 
00704       /*----- -tlrc_small option -----*/
00705 
00706       if( strncmp(argv[narg],"-tlrc_small",7) == 0 ){
00707          GLOBAL_argopt.tlrc_big = False ;
00708          narg++ ; continue ;  /* go to next arg */
00709       }
00710 
00711       /*----- -logo option -----*/
00712 
00713       if( strncmp(argv[narg],"-logo",4) == 0 ){
00714          GLOBAL_argopt.keep_logo = True ;
00715          narg++ ; continue ;  /* go to next arg */
00716       }
00717 
00718       /*----- -resize option -----*/
00719 
00720       if( strncmp(argv[narg],"-resize",4) == 0 ){
00721          GLOBAL_argopt.resize_images = True ;
00722          narg++ ; continue ;  /* go to next arg */
00723       }
00724 
00725       /*----- -purge option -----*/
00726 
00727       if( strncmp(argv[narg],"-purge",4) == 0 ){
00728          GLOBAL_argopt.auto_purge = True ;
00729          narg++ ; continue ;  /* go to next arg */
00730       }
00731 
00732 #ifdef ALLOW_PLUGINS
00733       /*----- -noplugins option -----*/
00734 
00735       if( strncmp(argv[narg],"-noplugins",10) == 0 ){
00736          GLOBAL_argopt.noplugins = 1 ;
00737          narg++ ; continue ;  /* go to next arg */
00738       }
00739 
00740       /*----- -noplugouts option -----*/
00741 
00742       if( strncmp(argv[narg],"-noplugouts",10) == 0 ){
00743          GLOBAL_argopt.noplugouts = 1 ;
00744          narg++ ; continue ;  /* go to next arg */
00745       }
00746 
00747       /*----- -yesplugouts option -----*/
00748 
00749       if( strncmp(argv[narg],"-yesplugouts",10) == 0 ){
00750          GLOBAL_argopt.noplugouts   = 0 ;
00751          GLOBAL_argopt.plugout_code = 0 ;
00752          narg++ ; continue ;  /* go to next arg */
00753       }
00754 
00755       /*----- -yesplugouts option -----*/
00756 
00757       if( strncmp(argv[narg],"-YESplugouts",10) == 0 ){
00758          GLOBAL_argopt.noplugouts   = 0 ;
00759          GLOBAL_argopt.plugout_code = 1 ;
00760          narg++ ; continue ;  /* go to next arg */
00761       }
00762 #endif
00763 
00764       /*----- -flipim option -----*/
00765 
00766       if( strncmp(argv[narg],"-flipim",5) == 0 ){
00767          GLOBAL_argopt.left_is_left = 0 ;
00768          narg++ ; continue ;  /* go to next arg */
00769       }
00770 
00771       /*----- -noflipim option -----*/
00772 
00773       if( strncmp(argv[narg],"-noflipim",5) == 0 ){
00774          GLOBAL_argopt.left_is_left = 1 ;
00775          narg++ ; continue ;  /* go to next arg */
00776       }
00777 
00778       /*----- -orient code option -----*/
00779 
00780       if( strncmp(argv[narg],"-orient",4) == 0 ){
00781          if( narg+1 >= argc ) FatalError("need an argument after -orient!");
00782 
00783          MCW_strncpy(GLOBAL_argopt.orient_code,argv[++narg],4) ;
00784          narg++ ; continue ;  /* go to next arg */
00785       }
00786 
00787       /*----- -ignore # option -----*/
00788 
00789       if( strncmp(argv[narg],"-ignore",4) == 0 ){
00790          float val ;
00791          if( narg+1 >= argc ) FatalError("need an argument after -ignore!");
00792 
00793          val = strtod( argv[++narg] , NULL ) ;
00794          if( val >= 0 ) GLOBAL_argopt.ignore = (int) val ;
00795          else fprintf(stderr,
00796                 "\n*** WARNING: -ignore value %s illegal\n", argv[narg]);
00797 
00798          narg++ ; continue ;  /* go to next arg */
00799       }
00800 
00801       /*----- -im1 # option [must come before '-im' option!] -----*/
00802 
00803       if( strncmp(argv[narg],"-im1",4) == 0 ){
00804          float val ;
00805          if( narg+1 >= argc ) FatalError("need an argument after -im1!");
00806 
00807          val = strtod( argv[++narg] , NULL ) ;
00808          if( val >= 1 ) GLOBAL_argopt.ignore = (int) (val-1.0) ;
00809          else fprintf(stderr,
00810                 "\n*** WARNING: -ignore value %s illegal\n", argv[narg]);
00811 
00812          narg++ ; continue ;  /* go to next arg */
00813       }
00814 
00815 
00816       /*----- -dy # option -----*/
00817 
00818       if( strncmp(argv[narg],"-dy",3) == 0 ){
00819          float val ;
00820          if( narg+1 >= argc ) FatalError("need an argument after -dy!");
00821 
00822          val = strtod( argv[++narg] , NULL ) ;
00823          if( val > 0 ) GLOBAL_argopt.dy = val ;
00824          else fprintf(stderr,
00825                 "\n*** WARNING: -dy value %s illegal\n", argv[narg]);
00826 
00827          narg++ ; continue ;  /* go to next arg */
00828       }
00829 
00830       /*----- -dz # option -----*/
00831 
00832       if( strncmp(argv[narg],"-dz",3) == 0 ){
00833          float val ;
00834          if( narg+1 >= argc ) FatalError("need an argument after -dz!");
00835 
00836          val = strtod( argv[++narg] , NULL ) ;
00837          if( val > 0 ) GLOBAL_argopt.dz = val ;
00838          else fprintf(stderr,
00839                 "\n*** WARNING: -dz value %s illegal\n", argv[narg]);
00840 
00841          narg++ ; continue ;  /* go to next arg */
00842       }
00843 
00844       /*----- -gamma # option -----*/
00845 
00846       if( strncmp(argv[narg],"-gamma",4) == 0 ){
00847          float val ;
00848          if( narg+1 >= argc ) FatalError("need an argument after -gamma!");
00849 
00850          val = strtod( argv[++narg] , NULL ) ;
00851          if( val > 0 ) GLOBAL_argopt.gamma = val ;
00852          else fprintf(stderr,
00853                 "\n*** WARNING: -gamma value %s illegal\n", argv[narg]);
00854 
00855          narg++ ; continue ;  /* go to next arg */
00856       }
00857 
00858 #ifdef USE_GSFAC
00859       /*----- -gsfac # option -----*/
00860 
00861       if( strncmp(argv[narg],"-gsfac",4) == 0 ){
00862          float val ;
00863          if( narg+1 >= argc ) FatalError("need an argument after -gsfac!");
00864 
00865          val = strtod( argv[++narg] , NULL ) ;
00866          if( val != 0 ) GLOBAL_argopt.gsfac = val ;
00867          else fprintf(stderr,
00868                 "\n*** WARNING: -gsfac value %s illegal\n", argv[narg]);
00869 
00870          narg++ ; continue ;  /* go to next arg */
00871       }
00872 #endif
00873 
00874       /*----- -datum type option -----*/
00875 
00876       if( strncmp(argv[narg],"-datum",6) == 0 ){
00877          if( ++narg >= argc ) FatalError("need an argument after -datum!") ;
00878 
00879          if( strcmp(argv[narg],"short") == 0 ){
00880             GLOBAL_argopt.datum= MRI_short ;
00881          } else if( strcmp(argv[narg],"float") == 0 ){
00882             GLOBAL_argopt.datum= MRI_float ;
00883          } else if( strcmp(argv[narg],"complex") == 0 ){
00884             GLOBAL_argopt.datum= MRI_complex ;
00885          } else if( strcmp(argv[narg],"byte") == 0 ){
00886             GLOBAL_argopt.datum= MRI_byte ;
00887          } else {
00888             char buf[256] ;
00889             sprintf(buf,"-datum of type '%s' is not supported in AFNI!",
00890                    argv[narg] ) ;
00891             FatalError(buf) ;
00892          }
00893          narg++ ; continue ;  /* go to next arg */
00894       }
00895 
00896       /*----- -ncolor # option -----*/
00897 
00898       if( strncmp(argv[narg],"-ncolor",3) == 0 ){
00899          float val ;
00900          if( narg+1 >= argc ) FatalError("need an argument after -ncolor!");
00901 
00902          val = strtod( argv[++narg] , NULL ) ;
00903          if( val > 2 ) GLOBAL_argopt.ncolor = val ;
00904          else fprintf(stderr,
00905                 "\n*** WARNING: -ncolor value %s illegal\n", argv[narg]);
00906 
00907          narg++ ; continue ;  /* go to next arg */
00908       }
00909 
00910       /*----- -dset option [17 Mar 2000] -----*/
00911 
00912       if( strncmp(argv[narg],"-dset",5) == 0 ){
00913          GLOBAL_argopt.read_images   = False ;
00914          GLOBAL_argopt.read_sessions = False ;
00915          GLOBAL_argopt.read_dsets    = True  ;
00916          narg++ ; continue ;  /* go to next arg */
00917       }
00918 
00919       /*----- -im option -----*/
00920 
00921       if( strncmp(argv[narg],"-im",3) == 0 ){
00922          GLOBAL_argopt.read_images   = True ;
00923          GLOBAL_argopt.read_sessions = False ;
00924          GLOBAL_argopt.read_dsets    = False ;       /* 17 Mar 2000 */
00925          narg++ ; continue ;  /* go to next arg */
00926       }
00927 
00928       /*----- -tim option [19 Oct 1999] -----*/
00929 
00930       if( strncmp(argv[narg],"-tim",4)==0 || strncmp(argv[narg],"-zim",4)==0 ){
00931          int ll=strlen(argv[narg]) , nn ;
00932 
00933          GLOBAL_argopt.read_images   = True ;
00934          GLOBAL_argopt.read_sessions = False ;
00935          GLOBAL_argopt.read_dsets    = False ;  /* 17 Mar 2000 */
00936          GLOBAL_argopt.read_tim      = 1 ;
00937 
00938          if( ll > 5 && argv[narg][4] == ':' ){         /* 20 Oct 1999 */
00939             nn = strtol( argv[narg]+5 , NULL , 10 ) ;
00940             if( nn > 1 ){
00941                GLOBAL_argopt.read_tim = nn ; /* will be nz or nt */
00942             } else {
00943                fprintf(stderr,"** Error: illegal value in %s\n",argv[narg]);
00944                exit(1) ;
00945             }
00946          }
00947 
00948          /* negate flag for time-order first (-tim) vs z-order first (-zim) */
00949 
00950          if( strncmp(argv[narg],"-tim",4)==0 && GLOBAL_argopt.read_tim > 1 )
00951             GLOBAL_argopt.read_tim = - GLOBAL_argopt.read_tim ;
00952 
00953          narg++ ; continue ;  /* go to next arg */
00954       }
00955 
00956       /*----- -nomall option -----*/
00957 
00958       if( strncmp(argv[narg],"-nomall",5) == 0 ){    /* was handled in main() */
00959          narg++ ; continue ;  /* go to next arg */
00960       }
00961 
00962       /*----- -q option -----*/
00963 
00964       if( strcmp(argv[narg],"-q") == 0 ){            /* was handled in main() */
00965          narg++ ; continue ;  /* go to next arg */
00966       }
00967 
00968       /*----- -- option -----*/
00969 
00970       if( strcmp(argv[narg],"--") == 0 ){
00971          narg++ ; break ;  /* end of args */
00972       }
00973 
00974       /*----- if we get here, bad news for America! -----*/
00975 
00976       fprintf(stderr,"\n*** Unknown option %s ***",argv[narg]) ;
00977       fprintf(stderr,"\n*** Try 'afni -help' for a list of command line options.\n") ;
00978       exit(1) ;
00979 
00980    } /* end of loop over argv's starting with '-' */
00981 
00982 #if 0
00983 #ifdef USE_TRACING
00984    if( ALLOW_real_time ) DBG_trace = 0 ; /* 26 Jan 2001 */
00985 #endif
00986 #endif
00987 
00988    /** 16 July 1997: orientation code change **/
00989 
00990    if( GLOBAL_argopt.orient_code[0] == '-' ){
00991       if( GLOBAL_argopt.read_images )
00992          strcpy(GLOBAL_argopt.orient_code,"ASL") ;
00993       else if( env_orient != NULL )
00994          MCW_strncpy(GLOBAL_argopt.orient_code,env_orient,4) ;
00995       else
00996          strcpy(GLOBAL_argopt.orient_code,"RAI") ;
00997    }
00998 
00999    THD_coorder_fill( GLOBAL_argopt.orient_code , &GLOBAL_library.cord ) ;
01000 
01001 #if 0
01002 fprintf(stderr,"\ncoorder: signs = %d %d %d  order = %d %d %d\n" ,
01003         GLOBAL_library.cord.xxsign ,
01004         GLOBAL_library.cord.yysign ,
01005         GLOBAL_library.cord.zzsign ,
01006         GLOBAL_library.cord.first ,
01007         GLOBAL_library.cord.second ,
01008         GLOBAL_library.cord.third   ) ;
01009 #endif
01010 
01011    GLOBAL_argopt.first_file_arg = narg ;  /* rest of args must be files (I hope) */
01012 
01013    EXRETURN ;
01014 }

void AFNI_pbar_lock_carryout Three_D_View  
 

Definition at line 420 of file afni_lock.c.

References AFNI_controller_index(), AFNI_equate_pbars(), AFNI_library_type::controller_lock, AFNI_library_type::controllers, ENTRY, getenv(), GLOBAL_library, AFNI_library_type::ignore_lock, IM3D_OPEN, and MAX_CONTROLLERS.

Referenced by AFNI_inten_pbar_CB().

00421 {
00422    Three_D_View *qq3d ;
00423    static int busy = 0 ;  /* !=0 if this routine is "busy" */
00424    int glock , cc,ii ;
00425    char *eee ;
00426 
00427 ENTRY("AFNI_pbar_lock_carryout") ;
00428 
00429    /* first, determine if there is anything to do */
00430 
00431    glock = GLOBAL_library.controller_lock ;     /* not a handgun */
00432 
00433    if( busy )                         EXRETURN;  /* routine already busy */
00434    if( glock == 0 )                   EXRETURN;  /* nothing to do */
00435    if( !IM3D_OPEN(im3d) )             EXRETURN;  /* bad input */
00436    if( GLOBAL_library.ignore_lock )   EXRETURN;  /* ordered not to do anything */
00437 
00438    eee = getenv( "AFNI_PBAR_LOCK" ) ;            /* determine how to lock */
00439    if( eee == NULL ) EXRETURN ;
00440    if( *eee != 'Y' && *eee != 'y' ) EXRETURN ;
00441 
00442    ii = AFNI_controller_index(im3d) ;           /* which one am I? */
00443 
00444    if( ii < 0 ) EXRETURN ;                      /* nobody? bad input! */
00445    if( ((1<<ii) & glock) == 0 ) EXRETURN ;      /* input not locked */
00446 
00447    /* something to do? */
00448 
00449    busy = 1 ;  /* don't let this routine be called recursively */
00450 
00451    /* loop through other controllers:
00452         for those that ARE open, ARE NOT the current one, and ARE locked */
00453 
00454    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00455 
00456      qq3d = GLOBAL_library.controllers[cc] ; /* controller */
00457 
00458      if( IM3D_OPEN(qq3d) && qq3d != im3d && ((1<<cc) & glock) != 0 ){
00459 
00460        AFNI_equate_pbars( qq3d , im3d ) ;
00461      }
00462    }
00463 
00464    busy = 0 ;  /* OK, let this routine be activated again */
00465    EXRETURN ;
00466 }

void AFNI_pop_whereami_kill Three_D_View  
 

Definition at line 8184 of file afni.c.

References AFNI_widget_set::imag, MCW_unregister_help(), MCW_unregister_hint(), AFNI_imaging_widgets::pop_whereami_twin, Three_D_View::vwid, and MCW_textwin::wtext.

Referenced by AFNI_imag_pop_CB().

08185 {
08186    if( im3d == NULL ) return ;
08187 
08188    MCW_unregister_hint( im3d->vwid->imag->pop_whereami_twin->wtext ) ;
08189    MCW_unregister_help( im3d->vwid->imag->pop_whereami_twin->wtext ) ;
08190 
08191    im3d->vwid->imag->pop_whereami_twin = NULL ;
08192    return ;
08193 }

void AFNI_popup_message char *    str
 

Popup a message, somewhere, anywhere [05 Mar 2002]. ---------------------------------------------------------------------

Definition at line 7190 of file afni_widg.c.

Referenced by AFNI_process_NIML_data(), process_NIML_AFNI_dataset(), process_NIML_Node_ROI(), process_NIML_SUMA_ijk(), process_NIML_SUMA_ixyz(), and process_NIML_SUMA_node_normals().

void AFNI_popup_sonnet Widget    w,
int    ii
 

initialize signed pbar panes *

Definition at line 10026 of file afni.c.

References MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, and NUM_SONNETS.

Referenced by AFNI_sonnet_CB().

10027 {
10028    char buf[2048] ; int jj=MCW_USER_KILL ;
10029 
10030    if( w == NULL ) return ;
10031 
10032    if( ii < 1 || ii > NUM_SONNETS ){
10033       ii  = (lrand48()&NUM_SONNETS) + 1 ;
10034       jj |= MCW_TIMER_KILL ;
10035    }
10036 
10037    sprintf( buf , "                    * %d *\n" , ii ) ;
10038    strcat( buf , sonnets[ii-1] ) ;
10039    (void) MCW_popup_message( w , buf , jj ) ;
10040    return ;
10041 }

void AFNI_process_alteration Three_D_View  
 

Definition at line 427 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, ENTRY, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_ALTERATION, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_underlay_CB().

00428 {
00429    int ir ;
00430 
00431 ENTRY("AFNI_process_alteration") ;
00432 
00433    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00434                             im3d->vinfo->num_receiver == 0   ) EXRETURN ;
00435 
00436    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00437       if( im3d->vinfo->receiver[ir] != NULL ){
00438 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00439 #if 0
00440          im3d->vinfo->receiver[ir]->receiver_func(
00441                    RECEIVE_ALTERATION , 0 , NULL ,
00442                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00443 #else
00444          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00445                               int,RECEIVE_ALTERATION , int,0 ,
00446                               void *,NULL ,
00447                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00448 #endif
00449       }
00450    }
00451 
00452    EXRETURN ;
00453 }

void AFNI_process_drawing Three_D_View   im3d,
int    mode,
int    npts,
int *    xd,
int *    yd,
int *    zd
 

Process drawn points:

  • npts = number of points sent in
  • mode = type of points to follow:
    • PLANAR_MODE + zz ==> axis zz is fixed, for zz=1,2,3
    • SINGLE_MODE + zz ==> one point only, clicked in a window with zz fixed
    • THREED_MODE ==> points are in 3D (not planar) (not currently possible)
    • UNDO_MODE ==> undo last drawing action
  • xd[i] = x index of point i, for i=0..npts-1
  • yd[i] = y index of point i, for i=0..npts-1
  • zd[i] = z index of point i, for i=0..npts-1
These indices are with respect to the dataset brick axes. ---------------------------------------------------------------------

Definition at line 683 of file afni_receive.c.

References AFNI_3d_linefill(), AFNI_CALL_VOID_4ARG, AFNI_process_drawnotice(), AFNI_view_info::drawing_enabled, DRAWING_FILL, DRAWING_LINES, AFNI_view_info::drawing_mode, DRAWING_NODRAW, DRAWING_POINTS, ENTRY, free, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_DRAWING_MASK, RECEIVE_POINTS, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, STATUS, Three_D_View::vinfo, xn, yn, and zn.

Referenced by AFNI_gra_send_CB(), and AFNI_seq_send_CB().

00685 {
00686    int ii , nn , ir , nsent ;
00687    int *vp[4] , *xn=NULL , *yn=NULL , *zn=NULL ;
00688 
00689 ENTRY("AFNI_process_drawing") ;
00690 
00691    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00692                             im3d->vinfo->num_receiver == 0 ||
00693        npts < 0          || im3d->vinfo->drawing_enabled == 0 ) EXRETURN ;
00694 
00695 if(PRINT_TRACING){
00696   char str[256] ; sprintf(str,"received %d points",npts) ; STATUS(str) ;
00697 }
00698 
00699    /*-- if no further treatment is needed,
00700         just flag input data to be set to receiver --*/
00701 
00702    if( im3d->vinfo->drawing_mode == DRAWING_POINTS ||
00703        im3d->vinfo->drawing_mode == DRAWING_NODRAW || npts <= 1 ){
00704 
00705       xn = xd ; yn = yd ; zn = zd ; nn = npts ;
00706    }
00707 
00708    /*-- must fill in the lines:
00709         create arrays xn, yn, zn of length nn --*/
00710 
00711    else if( im3d->vinfo->drawing_mode == DRAWING_LINES ){
00712 
00713       AFNI_3d_linefill( npts , xd,yd,zd , &nn , &xn , &yn , &zn ) ;
00714    }
00715 
00716    /*-- must fill in the polygon --*/
00717 
00718    else if( im3d->vinfo->drawing_mode == DRAWING_FILL ){
00719 
00720       /* this just fills the lines like above --
00721          need to write a real polygon filling routine? */
00722 
00723       AFNI_3d_linefill( npts , xd,yd,zd , &nn , &xn , &yn , &zn ) ;
00724    }
00725 
00726    /*-- send data to receivers that want it --*/
00727 
00728 #if 0
00729 fprintf(stderr,"Sending %d points to receiver\n",nn) ;
00730 #endif
00731 
00732    vp[3] = &mode ;                        /* how the points are arranged */
00733 
00734    vp[0] = xn ; vp[1] = yn ; vp[2] = zn ;
00735 
00736    for( nsent=ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00737 
00738       if( im3d->vinfo->receiver[ir] != NULL &&
00739           (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_DRAWING_MASK) ){
00740 
00741 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00742 #if 0
00743          im3d->vinfo->receiver[ir]->receiver_func(
00744                    RECEIVE_POINTS , nn ,
00745                    (void *) vp , im3d->vinfo->receiver[ir]->receiver_data ) ;
00746 #else
00747          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00748                               int,RECEIVE_POINTS , int,nn ,
00749                               void *,vp ,
00750                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00751 #endif
00752          nsent++ ;
00753       }
00754    }
00755 
00756    /* 30 Mar 1999: also send DRAWNOTICE to receivers that like this stuff */
00757 
00758    if( nsent > 0 ) AFNI_process_drawnotice( im3d ) ;
00759 
00760    /*-- free any created arrays --*/
00761 
00762    if( xn != xd ){ free(xn); free(yn); free(zn); }
00763    EXRETURN ;
00764 }

void AFNI_process_drawnotice Three_D_View  
 

Definition at line 459 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, ENTRY, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_DRAWNOTICE, RECEIVE_DRAWNOTICE_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_process_drawing(), DRAW_fillin_CB(), DRAW_quit_CB(), DRAW_redo_CB(), DRAW_ttatlas_CB(), DRAW_undo_CB(), NUD_doall_CB(), NUD_quit_CB(), NUD_update_base(), and process_NIML_Node_ROI().

00460 {
00461    int ir ;
00462 
00463 ENTRY("AFNI_process_drawnotice") ;
00464 
00465    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00466                             im3d->vinfo->num_receiver == 0   ) EXRETURN ;
00467 
00468    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00469 
00470       if( im3d->vinfo->receiver[ir] != NULL &&
00471           (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_DRAWNOTICE_MASK) ){
00472 
00473 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00474 #if 0
00475          im3d->vinfo->receiver[ir]->receiver_func(
00476                    RECEIVE_DRAWNOTICE , 0 , NULL ,
00477                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00478 #else
00479          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00480                               int,RECEIVE_DRAWNOTICE , int,0 ,
00481                               void *,NULL ,
00482                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00483 #endif
00484       }
00485    }
00486 
00487    EXRETURN ;
00488 }

void AFNI_process_dsetchange Three_D_View  
 

Definition at line 494 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, ENTRY, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_DSETCHANGE, RECEIVE_DSETCHANGE_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_rescan_all_CB(), and AFNI_rescan_CB().

00495 {
00496    int ir ;
00497 
00498 ENTRY("AFNI_process_dsetchange") ;
00499 
00500    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00501                             im3d->vinfo->num_receiver == 0   ) EXRETURN ;
00502 
00503    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00504 
00505       if( im3d->vinfo->receiver[ir] != NULL &&
00506           (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_DSETCHANGE_MASK) ){
00507 
00508 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00509 #if 0
00510          im3d->vinfo->receiver[ir]->receiver_func(
00511                    RECEIVE_DSETCHANGE , 0 , NULL ,
00512                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00513 #else
00514          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00515                               int,RECEIVE_DSETCHANGE , int,0 ,
00516                               void *,NULL ,
00517                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00518 #endif
00519       }
00520    }
00521 
00522    EXRETURN ;
00523 }

void AFNI_process_funcdisplay Three_D_View   im3d
 

Send funcdisplay notification to receivers that care [05 Mar 2002]. ---------------------------------------------------------------------

Definition at line 635 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, ENTRY, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_FUNCDISPLAY, RECEIVE_FUNCDISPLAY_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_bucket_CB(), AFNI_redisplay_func(), and AFNI_time_index_CB().

00636 {
00637    int ir ;
00638 
00639 ENTRY("AFNI_process_funcdisplay") ;
00640 
00641    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00642                             im3d->vinfo->num_receiver == 0   ) EXRETURN ;
00643 
00644    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00645       if( im3d->vinfo->receiver[ir] != NULL &&
00646           (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_FUNCDISPLAY_MASK) ){
00647 
00648 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00649 #if 0
00650          im3d->vinfo->receiver[ir]->receiver_func(
00651                    RECEIVE_FUNCDISPLAY , 0 , NULL ,
00652                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00653 #else
00654          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00655                               int,RECEIVE_FUNCDISPLAY , int,0 ,
00656                               void *,NULL ,
00657                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00658 #endif
00659       }
00660    }
00661 
00662    EXRETURN ;
00663 }

void AFNI_process_interrupts Widget   
 

Definition at line 2087 of file afni_fimmer.c.

References XtPointer_array::ar, ev, GLOBAL_library, AFNI_library_type::interruptables, XtPointer_array::num, and MCW_interruptables::windows.

Referenced by RCREND_autocompute_CB(), RCREND_read_exec_CB(), REND_autocompute_CB(), and REND_read_exec_CB().

02088 {
02089    Display * dis = XtDisplay(w) ;
02090    XEvent ev ;
02091    int ii , nwin ;;
02092 
02093    /* make sure server has everything from us, then make sure display is OK */
02094 
02095    XFlush( dis ) ; XmUpdateDisplay( w ) ;
02096 
02097    /* if no windows are set to allow interrupts, then go home to mother */
02098 
02099    if( GLOBAL_library.interruptables.windows      == NULL ||
02100        GLOBAL_library.interruptables.windows->num == 0      ) return ;
02101 
02102    nwin = GLOBAL_library.interruptables.windows->num ;
02103 
02104    /* check for events;
02105       if they are in a window on our list, let Xt handle them;
02106       loop until all pending events have been handled or discarded */
02107 
02108    while( XCheckMaskEvent( dis ,
02109                            ButtonPressMask  | ButtonReleaseMask |
02110                            ButtonMotionMask | PointerMotionMask |
02111                            KeyPressMask     | KeyReleaseMask     , &ev ) ){
02112 
02113       for( ii=0 ; ii < nwin ; ii++ ){
02114          if( ev.xany.window ==
02115              (Window) GLOBAL_library.interruptables.windows->ar[ii] ){
02116 
02117             XtDispatchEvent( &ev ) ;  /* was on our list! */
02118             break ;
02119          }
02120       }
02121 
02122       if( ii == nwin ) XBell( dis , 100 ) ;  /* beep for non-allowed event */
02123       XUngrabPointer( dis , CurrentTime ) ;  /* 17 Jun 2005 */
02124    }
02125 
02126    return ;
02127 }

void AFNI_process_redisplay Three_D_View   im3d
 

Send redisplay notification to receivers that care [04 Mar 2002]. ---------------------------------------------------------------------

Definition at line 601 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, ENTRY, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_REDISPLAY, RECEIVE_REDISPLAY_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_set_viewpoint().

00602 {
00603    int ir ;
00604 
00605 ENTRY("AFNI_process_redisplay") ;
00606 
00607    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00608                             im3d->vinfo->num_receiver == 0   ) EXRETURN ;
00609 
00610    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00611       if( im3d->vinfo->receiver[ir] != NULL &&
00612           (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_REDISPLAY_MASK) ){
00613 
00614 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00615 #if 0
00616          im3d->vinfo->receiver[ir]->receiver_func(
00617                    RECEIVE_REDISPLAY , 0 , NULL ,
00618                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00619 #else
00620          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00621                               int,RECEIVE_REDISPLAY , int,0 ,
00622                               void *,NULL ,
00623                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00624 #endif
00625       }
00626    }
00627 
00628    EXRETURN ;
00629 }

void AFNI_process_timeindex Three_D_View   im3d
 

Send time index change notice to receivers that care [29 Jan 2003] ---------------------------------------------------------------------

Definition at line 567 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, ENTRY, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_TIMEINDEX, RECEIVE_TIMEINDEX_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_setup_viewing(), and AFNI_time_index_CB().

00568 {
00569    int ir ;
00570 
00571 ENTRY("AFNI_process_timeindex") ;
00572 
00573    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00574                             im3d->vinfo->num_receiver == 0   ) EXRETURN ;
00575 
00576    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00577       if( im3d->vinfo->receiver[ir] != NULL &&
00578           (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_TIMEINDEX_MASK) ){
00579 
00580 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00581 #if 0
00582          im3d->vinfo->receiver[ir]->receiver_func(
00583                    RECEIVE_TIMEINDEX , 0 , NULL ,
00584                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00585 #else
00586          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00587                               int,RECEIVE_TIMEINDEX , int,0 ,
00588                               void *,NULL ,
00589                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00590 #endif
00591       }
00592    }
00593 
00594    EXRETURN ;
00595 }

void AFNI_process_ttatlas Three_D_View  
 

void AFNI_process_viewpoint Three_D_View  
 

Definition at line 529 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, ENTRY, AFNI_view_info::i1, IM3D_VALID, AFNI_view_info::j2, AFNI_view_info::k3, AFNI_view_info::num_receiver, RECEIVE_VIEWPOINT, RECEIVE_VIEWPOINT_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, STATUS, and Three_D_View::vinfo.

Referenced by AFNI_crosshair_visible_CB(), and AFNI_set_viewpoint().

00530 {
00531    int ir , ijk[3] ;
00532 
00533 ENTRY("AFNI_process_viewpoint") ;
00534 
00535    if( !IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL  ||
00536                             im3d->vinfo->num_receiver == 0   ) EXRETURN ;
00537 
00538    ijk[0] = im3d->vinfo->i1 ;
00539    ijk[1] = im3d->vinfo->j2 ;
00540    ijk[2] = im3d->vinfo->k3 ;
00541 
00542    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00543       if( im3d->vinfo->receiver[ir] != NULL &&
00544           (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_VIEWPOINT_MASK) ){
00545 
00546 STATUS(im3d->vinfo->receiver[ir]->receiver_funcname) ;
00547 #if 0
00548          im3d->vinfo->receiver[ir]->receiver_func(
00549                    RECEIVE_VIEWPOINT , 3 , ijk ,
00550                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00551 #else
00552          AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00553                               int,RECEIVE_VIEWPOINT , int,3 ,
00554                               void *,ijk ,
00555                               void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00556 #endif
00557       }
00558    }
00559 
00560    EXRETURN ;
00561 }

void AFNI_purge_dsets int   
 

Definition at line 6494 of file afni.c.

References Three_D_View::anat_now, AFNI_library_type::controllers, THD_session::dsset, ENTRY, Three_D_View::fim_now, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, FIRST_VIEW_TYPE, GLOBAL_library, IM3D_VALID, ISVALID_SESSIONLIST, LAST_VIEW_TYPE, MAX_CONTROLLERS, THD_session::num_dsset, THD_sessionlist::num_sess, PURGE_DSET, THD_sessionlist::ssar, and AFNI_library_type::sslist.

Referenced by AFNI_drive_purge_memory(), AFNI_misc_CB(), and AFNI_purge_unused_dsets().

06495 {
06496    int icc , iss , idd , ivv ;
06497    Three_D_View * im3d ;
06498    THD_session  * sess ;
06499    THD_sessionlist * ssl = GLOBAL_library.sslist ;
06500    THD_3dim_dataset * dset ;
06501 
06502 ENTRY("AFNI_purge_dsets") ;
06503 
06504    /*-- sanity check --*/
06505 
06506    if( ! ISVALID_SESSIONLIST(ssl) || ssl->num_sess <= 0 ) EXRETURN ;
06507 
06508    /*-- for each session in the list --*/
06509 
06510    for( iss=0 ; iss < ssl->num_sess ; iss++ ){
06511       sess = ssl->ssar[iss] ;
06512 
06513       /*-- for each anat dataset in the session --*/
06514 
06515       for( idd=0 ; idd < sess->num_dsset ; idd++ ){
06516          for( ivv=FIRST_VIEW_TYPE ; ivv <= LAST_VIEW_TYPE ; ivv++ ){
06517 
06518             dset = sess->dsset[idd][ivv] ;
06519             if( dset == NULL ) continue ;
06520             if( doall ){ PURGE_DSET(dset) ; continue ; }
06521 
06522             /*-- for each controller now running --*/
06523 
06524             for( icc=0 ; icc < MAX_CONTROLLERS ; icc++ ){
06525                im3d = GLOBAL_library.controllers[icc] ;
06526                if( IM3D_VALID(im3d) &&
06527                    ((dset==im3d->anat_now) ||
06528                     (dset==im3d->fim_now)  ||
06529                     (dset==im3d->fimdata->fimdset)) ) break ;
06530             }
06531 
06532             /*-- if didn't find it, purge it --*/
06533             if( icc == MAX_CONTROLLERS ){ PURGE_DSET(dset) ; }
06534          }
06535       }
06536 
06537    } /* end of loop over sessions */
06538    EXRETURN ;
06539 }

void AFNI_purge_unused_dsets void   
 

Definition at line 6489 of file afni.c.

References AFNI_purge_dsets().

Referenced by AFNI_closedown_3dview(), AFNI_initialize_view(), AFNI_marks_transform_CB(), main(), and RT_tell_afni_one().

06490 {
06491    AFNI_purge_dsets( 0 ) ;
06492 }

void AFNI_quit_CB Widget    wcall,
XtPointer    cd,
XtPointer    cbs
 

Definition at line 1707 of file afni.c.

References AFNI_controller_clonify(), AFNI_count_controllers(), AFNI_quit_timeout_CB(), AFNI_speak(), CLOSE_CONTROLLER, ENTRY, GLOBAL_argopt, IM3D_OPEN, AF_options::keep_logo, MCW_set_widget_label(), AFNI_widget_set::picture, PICTURE_OFF, PICTURE_ON, AFNI_widget_set::prog, AFNI_program_widgets::quit_first, AFNI_program_widgets::quit_pb, random_goodbye(), STATUS, AFNI_widget_set::top_shell, and Three_D_View::vwid.

01708 {
01709    Three_D_View * im3d = (Three_D_View *) cd ;
01710    XmPushButtonCallbackStruct * pbcbs = (XmPushButtonCallbackStruct *) cbs ;
01711 
01712 ENTRY("AFNI_quit_CB") ;
01713 
01714    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
01715 
01716    /* NULL widget --> reset button to lowercase */
01717 
01718    if( wcall == NULL ){
01719       if( im3d->vwid->prog->quit_first == False ){
01720          MCW_set_widget_label( im3d->vwid->prog->quit_pb , "done " ) ;
01721          im3d->vwid->prog->quit_first = True ;
01722          if( im3d->vwid->picture != NULL && !GLOBAL_argopt.keep_logo )
01723            PICTURE_OFF( im3d ) ;
01724       }
01725       EXRETURN ;
01726    }
01727 
01728    /* Press of button with Shift or Control key pressed --> Death Now */
01729 
01730    if( pbcbs != NULL                       &&
01731        pbcbs->event != NULL                &&
01732        pbcbs->event->type == ButtonRelease &&
01733        ((XButtonEvent *)(pbcbs->event))->state &  /* note single & here! */
01734        (ShiftMask|ControlMask|Button2Mask|Button3Mask) ){
01735 
01736       XtCloseDisplay( XtDisplay(im3d->vwid->top_shell) ) ;
01737       AFNI_speak(random_goodbye(),0) ;
01738       exit(0) ;
01739    }
01740 
01741    /* First press --> just change button label */
01742 
01743    if( wcall == im3d->vwid->prog->quit_pb && im3d->vwid->prog->quit_first ){
01744       MCW_set_widget_label( im3d->vwid->prog->quit_pb , "DONE " ) ;
01745       im3d->vwid->prog->quit_first = False ;
01746       if( im3d->vwid->picture != NULL ) PICTURE_ON( im3d ) ;
01747 
01748       /* if not re-pressed in 5 seconds, will reset to lowercase */
01749 
01750       (void) XtAppAddTimeOut(
01751                XtWidgetToApplicationContext(im3d->vwid->prog->quit_pb) ,
01752                5000 , AFNI_quit_timeout_CB , im3d ) ;
01753 
01754       EXRETURN ;
01755    }
01756 
01757    /* close window callback OR button already uppercase --> close window */
01758 
01759    /* if no controller windows will be left, exit the program */
01760 
01761    if( AFNI_count_controllers() <= 1 ){
01762       XtCloseDisplay( XtDisplay(im3d->vwid->top_shell) ) ;
01763       AFNI_speak(random_goodbye(),0) ;
01764       STATUS("calling exit(0) -- farewell cruel world!") ;
01765       exit(0) ;
01766 
01767    } else {  /* otherwise, patch up the other windows and continue */
01768 
01769       CLOSE_CONTROLLER(im3d) ;     /* close window */
01770       AFNI_controller_clonify() ;  /* let other controllers know */
01771    }
01772    EXRETURN ;
01773 }

void AFNI_quit_timeout_CB XtPointer   ,
XtIntervalId *   
 

Definition at line 1780 of file afni.c.

References client_data, ENTRY, and RESET_AFNI_QUIT.

Referenced by AFNI_quit_CB().

01781 {
01782    Three_D_View * im3d = (Three_D_View *) client_data ;
01783 ENTRY("AFNI_quit_timeout_CB") ;
01784    RESET_AFNI_QUIT(im3d) ;
01785    EXRETURN ;
01786 }

void AFNI_raiseup_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

"AFNI Version Check!" logo *

Definition at line 3384 of file afni_widg.c.

03415    { char * hh[] = { "View data direct from brick" ,

void AFNI_range_av_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 4513 of file afni_func.c.

Referenced by AFNI_set_func_range().

04514 {
04515    Three_D_View *im3d = (Three_D_View *) cd ;
04516 
04517 ENTRY("AFNI_range_av_CB") ;
04518 
04519    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04520 
04521    im3d->vinfo->fim_range = av->fval ;
04522    AFNI_redisplay_func( im3d ) ;
04523 
04524    AFNI_range_lock_carryout(im3d) ;  /* 23 Feb 2004 */
04525 
04526    AFNI_hintize_pbar( im3d->vwid->func->inten_pbar ,
04527                       (im3d->vinfo->fim_range != 0.0) ? im3d->vinfo->fim_range
04528                                                       : im3d->vinfo->fim_autorange );
04529    EXRETURN ;
04530 }

void AFNI_range_bbox_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 4476 of file afni_func.c.

References AFNI_hintize_pbar(), AFNI_range_lock_carryout(), AV_SENSITIZE, ENTRY, AFNI_view_info::fim_autorange, AFNI_view_info::fim_range, AFNI_widget_set::func, MCW_arrowval::fval, IM3D_VALID, AFNI_function_widgets::inten_pbar, MCW_val_bbox(), RANGE_AUTOBUT, RANGE_AUTOVAL, AFNI_function_widgets::range_av, AFNI_function_widgets::range_bbox, AFNI_view_info::use_autorange, Three_D_View::vinfo, Three_D_View::vwid, and MCW_bbox::wbut.

Referenced by AFNI_set_func_autorange().

04477 {
04478    Three_D_View *im3d = (Three_D_View *) cd ;
04479    Boolean new_auto ;
04480 
04481 ENTRY("AFNI_range_bbox_CB") ;
04482 
04483    if( ! IM3D_VALID(im3d) ||
04484        w != im3d->vwid->func->range_bbox->wbut[RANGE_AUTOBUT] ) EXRETURN ;
04485 
04486    new_auto = (MCW_val_bbox(im3d->vwid->func->range_bbox) & RANGE_AUTOVAL) != 0 ;
04487 
04488    if( new_auto != im3d->vinfo->use_autorange ){  /* new button value */
04489 
04490       im3d->vinfo->use_autorange = new_auto ;
04491 
04492       im3d->vinfo->fim_range = (new_auto) ? (im3d->vinfo->fim_autorange)
04493                                           : (im3d->vwid->func->range_av->fval) ;
04494 
04495       AFNI_hintize_pbar( im3d->vwid->func->inten_pbar ,
04496                          (im3d->vinfo->fim_range != 0.0) ? im3d->vinfo->fim_range
04497                                                          : im3d->vinfo->fim_autorange );
04498 
04499       AV_SENSITIZE( im3d->vwid->func->range_av , ! new_auto ) ;
04500 
04501       AFNI_redisplay_func( im3d ) ;
04502 
04503       AFNI_range_lock_carryout(im3d) ;  /* 23 Feb 2004 */
04504    }
04505 
04506    EXRETURN ;
04507 }

XmString AFNI_range_label Three_D_View  
 

Definition at line 4332 of file afni_func.c.

References AFNI_view_info::anat_index, Three_D_View::anat_now, AV_fval_to_char(), THD_statistics::bstat, DSET_VALID_BSTAT, ENTRY, AFNI_view_info::fim_index, Three_D_View::fim_now, IM3D_OPEN, ISVALID_3DIM_DATASET, ISVALID_STATISTIC, THD_brick_stats::max, THD_brick_stats::min, RELOAD_STATS, RETURN, THD_3dim_dataset::stats, AFNI_view_info::stats_anat_ok, AFNI_view_info::stats_func_ok, AFNI_view_info::stats_thresh_ok, STATUS, AFNI_view_info::thr_index, and Three_D_View::vinfo.

Referenced by AFNI_reset_func_range().

04333 {
04334    char anat_minch[10] = " --------" , anat_maxch[10] = " --------" ,
04335         fim_minch[10]  = " --------" , fim_maxch[10]  = " --------" ,
04336         thr_minch[10]  = " --------" , thr_maxch[10]  = " --------"   ;
04337    char buf[256] , qbuf[16] ;
04338    XmString xstr ;
04339    int iv ;
04340 
04341 ENTRY("AFNI_range_label") ;
04342 
04343    if( im3d != NULL && im3d->vinfo != NULL ){  /* 30 Mar 2005 */
04344      im3d->vinfo->stats_anat_ok =
04345       im3d->vinfo->stats_func_ok =
04346        im3d->vinfo->stats_thresh_ok = 0 ;
04347    }
04348 
04349    /*** anat statistics ***/
04350 
04351    if( IM3D_OPEN(im3d) ){
04352 STATUS("RELOAD_STATS(anat_now)") ;
04353      RELOAD_STATS(im3d->anat_now) ;
04354    }
04355 
04356    if( IM3D_OPEN(im3d) &&
04357        ISVALID_3DIM_DATASET(im3d->anat_now) &&
04358        ISVALID_STATISTIC(im3d->anat_now->stats) ){
04359 
04360      iv = im3d->vinfo->anat_index ;
04361 
04362      if( DSET_VALID_BSTAT(im3d->anat_now,iv) ){
04363 STATUS("anat_now statistics") ;
04364        AV_fval_to_char( im3d->anat_now->stats->bstat[iv].min , qbuf ) ;
04365        sprintf( anat_minch , "%9.9s" , qbuf ) ;
04366        AV_fval_to_char( im3d->anat_now->stats->bstat[iv].max , qbuf ) ;
04367        sprintf( anat_maxch , "%9.9s" , qbuf ) ;
04368        im3d->vinfo->stats_anat_ok = 1 ;
04369      } else {
04370 STATUS("can't load anat_now bstat") ;
04371      }
04372    }
04373 
04374    /*** func statistics ***/
04375 
04376    if( IM3D_OPEN(im3d) ){
04377 STATUS("RELOAD_STATS(fim_now)") ;
04378      RELOAD_STATS(im3d->fim_now) ;
04379    }
04380 
04381    if( IM3D_OPEN(im3d) &&
04382        ISVALID_3DIM_DATASET(im3d->fim_now) &&
04383        ISVALID_STATISTIC(im3d->fim_now->stats) ){
04384 
04385      iv = im3d->vinfo->fim_index ;
04386 
04387      if( DSET_VALID_BSTAT(im3d->fim_now,iv) ){
04388 STATUS("fim_now statistics") ;
04389        AV_fval_to_char( im3d->fim_now->stats->bstat[iv].min , qbuf ) ;
04390        sprintf( fim_minch , "%9.9s" , qbuf ) ;
04391        AV_fval_to_char( im3d->fim_now->stats->bstat[iv].max , qbuf ) ;
04392        sprintf( fim_maxch , "%9.9s" , qbuf ) ;
04393        im3d->vinfo->stats_func_ok = 1 ;
04394      } else {
04395 STATUS("can't load fim_now bstat") ;
04396      }
04397 
04398      iv = im3d->vinfo->thr_index ;
04399 
04400      if( DSET_VALID_BSTAT(im3d->fim_now,iv) ){
04401 STATUS("thr_now statistics") ;
04402       AV_fval_to_char( im3d->fim_now->stats->bstat[iv].min , qbuf ) ;
04403       sprintf( thr_minch , "%9.9s" , qbuf ) ;
04404       AV_fval_to_char( im3d->fim_now->stats->bstat[iv].max , qbuf ) ;
04405       sprintf( thr_maxch , "%9.9s" , qbuf ) ;
04406       im3d->vinfo->stats_thresh_ok = 1 ;
04407      } else {
04408 STATUS("can't load thr_now bstat") ;
04409      }
04410    }
04411 
04412    /*** make label ***/
04413 
04414 STATUS("make buf label") ;
04415 
04416    sprintf( buf , "ULay %s:%s\nOLay %s:%s\nThr  %s:%s" ,
04417             anat_minch,anat_maxch, fim_minch,fim_maxch, thr_minch,thr_maxch ) ;
04418 
04419 STATUS(buf) ;
04420 
04421    xstr = XmStringCreateLtoR( buf , XmFONTLIST_DEFAULT_TAG ) ;
04422 
04423    RETURN(xstr) ;
04424 }

void AFNI_range_lock_carryout Three_D_View  
 

Definition at line 555 of file afni_lock.c.

References AFNI_controller_index(), AFNI_driver(), AFNI_library_type::controller_lock, AFNI_library_type::controllers, ENTRY, AFNI_view_info::fim_range, AFNI_widget_set::func, getenv(), GLOBAL_library, AFNI_library_type::ignore_lock, IM3D_OPEN, MAX_CONTROLLERS, MCW_val_bbox(), AFNI_function_widgets::range_bbox, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_range_bbox_CB().

00556 {
00557    Three_D_View *qq3d ;
00558    static int busy = 0 ;  /* !=0 if this routine is "busy" */
00559    int glock , cc,ii,nn ;
00560    float val ;
00561    char cmd[64] , *eee ;
00562 
00563 ENTRY("AFNI_range_lock_carryout") ;
00564 
00565    /* first, determine if there is anything to do */
00566 
00567    glock = GLOBAL_library.controller_lock ;      /* not a handgun */
00568 
00569    if( busy )                         EXRETURN;  /* routine already busy */
00570    if( glock == 0 )                   EXRETURN;  /* nothing to do */
00571    if( !IM3D_OPEN(im3d) )             EXRETURN;  /* bad input */
00572    if( GLOBAL_library.ignore_lock )   EXRETURN;  /* ordered not to do anything */
00573 
00574    eee = getenv( "AFNI_RANGE_LOCK" );            /* determine how to lock */
00575    if( eee == NULL )                  EXRETURN;
00576    if( *eee != 'Y' && *eee != 'y' )   EXRETURN;
00577 
00578    ii = AFNI_controller_index(im3d);             /* which one am I? */
00579 
00580    if( ii < 0 )                       EXRETURN;  /* nobody? bad input! */
00581    if( ((1<<ii) & glock) == 0 )       EXRETURN;  /* input not locked */
00582 
00583    /* get range of this controller */
00584 
00585    val = im3d->vinfo->fim_range ;
00586    if( val <= 0.0 )                   EXRETURN;  /* shouldn't happen */
00587 
00588    /* count how OTHER controllers are are open and locked;
00589       if none of them, there is nothing to do [29 Apr 2005] */
00590 
00591    for( nn=cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00592      qq3d = GLOBAL_library.controllers[cc] ;
00593      if( qq3d != im3d && IM3D_OPEN(qq3d) && ((1<<cc) & glock) != 0 ) nn++ ;
00594    }
00595    if( nn < 1 )                       EXRETURN ;
00596 
00597    /* something to do? */
00598 
00599    busy = 1 ;  /* don't let this routine be called recursively */
00600 
00601    /* loop through other controllers:
00602         for those that ARE open, and ARE locked, set the new range */
00603 
00604    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00605 
00606      qq3d = GLOBAL_library.controllers[cc] ; /* controller */
00607 
00608      if( IM3D_OPEN(qq3d) && ((1<<cc) & glock) != 0 ){  /* open and locked */
00609 
00610        if( qq3d == im3d &&    /* no need to set current if not autoRanged */
00611            MCW_val_bbox(im3d->vwid->func->range_bbox) == 0 ) continue;
00612 
00613        sprintf( cmd , "SET_FUNC_RANGE %c.%.6f" , 'A'+cc , val ) ;
00614        AFNI_driver( cmd ) ;
00615      }
00616    }
00617 
00618    busy = 0 ;  /* OK, let this routine be activated again */
00619    EXRETURN ;
00620 }

void AFNI_range_rotate_av_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 312 of file afni_func.c.

References event.

00313 {
00314    MCW_pbar *pbar = (MCW_pbar *) cd ;
00315    int ddd ;
00316 
00317 ENTRY("AFNI_range_rotate_av_CB") ;
00318 
00319    /* which way to rotate? */
00320 
00321    if( av->fval > av->old_fval ) ddd = +1 ;
00322    else                          ddd = -1 ;
00323 
00324    /* Shift+click ==> rotate by 4 (useful for bigmode) */
00325 
00326    if( av->xev.type == ButtonPress ){
00327      XButtonEvent *event = (XButtonEvent *) (&av->xev) ;
00328      if( event->state & ShiftMask ) ddd *= 4 ;
00329    }
00330 
00331    rotate_MCW_pbar( pbar , ddd ) ;
00332    EXRETURN ;
00333 }

void AFNI_range_setter Three_D_View   im3d,
MCW_imseq   seq
 

Set the grayscale range in the image window, maybe. [04 Nov 2003] --------------------------------------------------------------------------

Definition at line 5256 of file afni.c.

References AFNI_yesenv(), AFNI_view_info::anat_index, Three_D_View::anat_now, Three_D_View::b123_ulay, THD_statistics::bstat, drive_MCW_imseq(), FD_brick::dset, EQUIV_DSETS, AFNI_view_info::fim_index, Three_D_View::fim_now, IM3D_OPEN, ISQ_VALID, isqDR_setrange, ISVALID_BSTAT, ISVALID_STATISTIC, THD_brick_stats::max, THD_brick_stats::min, THD_3dim_dataset::stats, and Three_D_View::vinfo.

Referenced by AFNI_setup_viewing(), AFNI_view_xyz_CB(), and ENV_globalrange().

05257 {
05258    float rng[3] = { 0.0f, 0.0f, 0.0f } ;
05259    int ival ;
05260    FD_brick *br ;
05261    THD_3dim_dataset *ds ;
05262 
05263    if( !IM3D_OPEN(im3d) || !ISQ_VALID(seq)    ) return ;
05264    if( !AFNI_yesenv("AFNI_IMAGE_GLOBALRANGE") ) return ;
05265 
05266    br = (FD_brick *)im3d->b123_ulay ; if( br == NULL ) return ;
05267    ds = br->dset ;                    if( ds == NULL ) return ;
05268 
05269    if( EQUIV_DSETS(ds,im3d->anat_now) )      /* underlay dataset */
05270      ival = im3d->vinfo->anat_index ;
05271    else if( EQUIV_DSETS(ds,im3d->fim_now) )  /* overlay dataset */
05272      ival = im3d->vinfo->fim_index ;
05273    else
05274      ival = 0 ;                              /* shouldn't happen */
05275 
05276    if( ISVALID_STATISTIC(ds->stats) && ISVALID_BSTAT(ds->stats->bstat[ival]) ){
05277      rng[0] = ds->stats->bstat[ival].min ;
05278      rng[1] = ds->stats->bstat[ival].max ;
05279    }
05280 
05281    drive_MCW_imseq( seq , isqDR_setrange , (XtPointer) rng ) ;
05282    return ;
05283 }

void AFNI_read_1D_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

(The following is from AFNI_read_inputs) *

Definition at line 2700 of file afni_func.c.

References AFNI_finalize_read_1D_CB(), AFNI_make_file_dialog(), ENTRY, AFNI_widget_set::file_cb, AFNI_widget_set::file_cd, AFNI_widget_set::file_dialog, AFNI_widget_set::file_sbox, RWC_visibilize_widget(), and Three_D_View::vwid.

02701 {
02702    Three_D_View *im3d = (Three_D_View *) cd ;
02703    XmString xstr ;
02704 
02705 ENTRY("AFNI_read_1D_CB") ;
02706 
02707    AFNI_make_file_dialog( im3d ) ;
02708 
02709    XtAddCallback( im3d->vwid->file_sbox , XmNokCallback ,
02710                   AFNI_finalize_read_1D_CB , cd ) ;
02711 
02712    XtAddCallback( im3d->vwid->file_sbox , XmNcancelCallback ,
02713                   AFNI_finalize_read_1D_CB , cd ) ;
02714 
02715    XtAddCallback( im3d->vwid->file_sbox , XmNhelpCallback ,
02716                   AFNI_finalize_read_1D_CB , cd ) ;
02717 
02718    /* 02 Feb 1998: put *.1D* in the filename pattern */
02719 
02720    xstr = XmStringCreateLtoR( "*.1D*" , XmFONTLIST_DEFAULT_TAG ) ;
02721    XtVaSetValues( im3d->vwid->file_sbox ,
02722                      XmNpattern , xstr ,
02723                   NULL ) ;
02724    XmStringFree(xstr) ;
02725 
02726    im3d->vwid->file_cb = AFNI_finalize_read_1D_CB ;
02727    im3d->vwid->file_cd = cd ;
02728 
02729    XtVaSetValues( im3d->vwid->file_dialog,
02730                      XmNtitle, "AFNI: Read 1D Timeseries",
02731                   NULL ) ;
02732 
02733    XtPopup( im3d->vwid->file_dialog , XtGrabNone ) ;
02734    RWC_visibilize_widget( im3d->vwid->file_dialog ) ; /* 09 Nov 1999 */
02735 
02736    EXRETURN ;
02737 }

THD_3dim_dataset* AFNI_read_images int    nf,
char *    fname[]
 

Definition at line 2768 of file afni.c.

References ADN_none, ADN_ntt, ADN_ttdel, AFNI_GOOD_DTYPE, THD_3dim_dataset::anat_parent, THD_3dim_dataset::anat_parent_idcode, THD_3dim_dataset::anat_parent_name, THD_datablock::atr, THD_datablock::brick, THD_datablock::brick_bytes, THD_datablock::brick_fac, THD_datablock::brick_keywords, THD_datablock::brick_lab, THD_diskptr::brick_name, THD_datablock::brick_stataux, THD_datablock::brick_statcode, THD_diskptr::byte_order, DATABLOCK_MEM_MALLOC, DATABLOCK_TYPE, DATAXES_TYPE, AF_options::datum, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, THD_3dim_dataset::death_mark, THD_diskptr::dimsizes, THD_diskptr::directory_name, THD_datablock::diskptr, DISKPTR_TYPE, DSET_BRICK, DSET_lock, MRI_IMAGE::dw, MRI_IMAGE::dx, AF_options::dy, MRI_IMAGE::dy, AF_options::dz, MRI_IMAGE::dz, EDIT_dset_items(), EMPTY_STRING, ENTRY, FatalError, THD_diskptr::filecode, free, FREE_IMARR, THD_3dim_dataset::func_type, GEN_ANAT_TYPE, GLOBAL_argopt, THD_diskptr::header_name, THD_3dim_dataset::idcode, MRI_IMARR::imarr, INIT_KILL, THD_3dim_dataset::keywords, KILL_1MRI, MRI_IMAGE::kind, THD_datablock::kl, THD_3dim_dataset::kl, THD_3dim_dataset::label1, THD_3dim_dataset::label2, malloc, THD_datablock::malloc_type, THD_3dim_dataset::markers, MCW_new_idcode, MCW_strncpy, MIN, mri_data_pointer(), mri_datum_size(), mri_fix_data_pointer(), mri_free(), mri_imcount(), mri_read_file(), mri_resize(), mri_to_mri(), myXtNew, THD_datablock::natr, THD_datablock::natr_alloc, MRI_IMARR::num, THD_datablock::nvals, THD_diskptr::nvals, MRI_IMAGE::nx, THD_dataxes::nxx, MRI_IMAGE::ny, THD_dataxes::nyy, nz, THD_dataxes::nzz, OR3OK, ORCODE, AF_options::orient_code, THD_dataxes::parent, THD_datablock::parent, THD_diskptr::prefix, THD_diskptr::rank, AF_options::read_tim, REPORT_PROGRESS, AF_options::resize_images, RETURN, THD_3dim_dataset::self_name, THD_3dim_dataset::self_warp, THD_3dim_dataset::stats, THD_diskptr::storage_mode, STORAGE_UNDEFINED, THD_3dim_dataset::tagset, THD_3dim_dataset::taxis, THD_3dim_dataset::tcat_len, THD_3dim_dataset::tcat_list, THD_3dim_dataset::tcat_num, THD_get_write_order(), THD_init_datablock_brick(), THD_MAX_LABEL, THD_MAX_NAME, THD_3dim_dataset::type, THD_dataxes::type, THD_datablock::type, THD_diskptr::type, THD_3dim_dataset::view_type, THD_diskptr::viewcode, THD_3dim_dataset::vox_warp, THD_3dim_dataset::warp, THD_3dim_dataset::warp_parent, THD_3dim_dataset::warp_parent_idcode, THD_3dim_dataset::warp_parent_name, THD_3dim_dataset::wod_daxes, THD_3dim_dataset::wod_flag, THD_dataxes::xxdel, THD_dataxes::xxorg, THD_dataxes::xxorient, THD_dataxes::yydel, THD_dataxes::yyorg, THD_dataxes::yyorient, ZERO_IDCODE, ZERO_STAT_AUX, THD_dataxes::zzdel, THD_dataxes::zzorg, and THD_dataxes::zzorient.

Referenced by AFNI_read_inputs().

02769 {
02770    MRI_IMAGE * im , * shim ;
02771    char * bar ;
02772    register int     npix , ii ;
02773    int nx , ny , nz , lf , kz , kim ;
02774    MRI_IMARR * arr ;
02775    char str[256] ;
02776    THD_3dim_dataset * dset ;
02777    int datum = GLOBAL_argopt.datum , dsize ;
02778 
02779    int nvals , nzz , nzin=0 ;  /* 19 Oct 1999 */
02780    float dx=0.0, dy=0.0 , dz=0.0 ;  /* 29 Jul 2002 */
02781 
02782 ENTRY("AFNI_read_images") ;
02783 
02784    /*----- see if there are any images to read! -----*/
02785 
02786    if( nf < 1 ) FatalError("*** No images on command line!? ***") ;
02787 
02788    /* count total number of images */
02789 
02790    nz = 0 ;
02791    for( lf=0 ; lf < nf ; lf++ ){
02792       ii = mri_imcount( fname[lf] ) ;
02793       if( ii == 0 ){
02794          sprintf(str,"*** Illegal image file specifier: %s",fname[lf]) ;
02795          FatalError(str) ;
02796       }
02797       nz += ii ;
02798    }
02799    if( nz == 1 ) nz = 2 ;  /* special case for just one image */
02800 
02801    /*--- read 1st file to get sizes ---*/
02802 
02803    arr = mri_read_file( fname[0] ) ;
02804    if( arr == NULL || arr->num == 0 ){
02805       sprintf(str,"*** cannot read first image file: %s",fname[0]) ;
02806       FatalError(str) ;
02807    }
02808 
02809    im = arr->imarr[0] ;
02810    nx = im->nx ;
02811    ny = im->ny ; npix = nx * ny ;
02812 
02813    if( im->dw > 0.0 ){
02814      dx = fabs(im->dx); dy = fabs(im->dy); dz = fabs(im->dz);  /* 29 Jul 2002 */
02815    }
02816 
02817    if( datum < 0 ) datum = im->kind ;
02818    if( ! AFNI_GOOD_DTYPE(datum) )
02819       FatalError("*** Illegal datum type found ***") ;
02820 
02821    dsize = mri_datum_size( (MRI_TYPE) datum ) ;
02822    bar   = (char *) malloc( dsize * nx*ny*nz ) ;
02823    if( bar == NULL ){
02824       fprintf(stderr,"\n** Can't malloc memory for image input!\a\n") ;
02825       exit(1) ;
02826    }
02827 
02828    /*--- read all files, convert if needed, put in the cube ---*/
02829 
02830    kz = 0 ;
02831    for( lf=0 ; lf < nf ; lf++ ){
02832 
02833       /** read the file (except the first, which we already have **/
02834 
02835       if( lf != 0 ){
02836          arr = mri_read_file( fname[lf] ) ;
02837          if( arr == NULL || arr->num == 0 ){
02838            sprintf(str,"*** cannot read image file: %s",fname[lf]) ;
02839            FatalError(str) ;
02840          }
02841       }
02842 
02843       /** for each image in file ... **/
02844 
02845       for( kim=0 ; kim < arr->num ; kim++ ){
02846          im = arr->imarr[kim] ;
02847 
02848          /** check if image matches dimensions of first slice **/
02849 
02850          if( im->nx != nx || im->ny != ny ){
02851             if( ! GLOBAL_argopt.resize_images ){
02852                sprintf(str, "*** image size mismatch:\n"
02853                            " *** expected nx=%d ny=%d but got nx=%d ny=%d in file %s" ,
02854                            nx,ny,im->nx,im->ny , fname[lf] ) ;
02855                FatalError(str) ;
02856             } else {
02857                MRI_IMAGE * rim ;
02858                rim = mri_resize( im , nx , ny ) ;
02859                mri_free( im ) ;
02860                im = rim ;
02861             }
02862          }
02863 
02864          /** check if image data type matches the kind we want **/
02865 
02866          if( im->kind == datum ){
02867             shim = im ;
02868          } else {
02869             shim = mri_to_mri( datum , im ) ;
02870             if( shim == NULL ) FatalError("*** Illegal convert! ***") ;
02871             mri_free( im ) ;
02872          }
02873 
02874          /** copy bytes from slice into the "bar" brick **/
02875 
02876          memcpy( bar + dsize*npix*kz , mri_data_pointer(shim) , dsize*npix ) ;
02877          kz++ ;
02878 
02879          KILL_1MRI(shim) ;
02880          if( kz%10 == 5 ) REPORT_PROGRESS(".") ;
02881       }
02882       FREE_IMARR(arr) ;  /* not DESTROY_IMARR, since images are already gone */
02883    }
02884 
02885    /*** special case of one input image ***/
02886 
02887    if( kz == 1 && nz == 2 ){
02888       memcpy( bar + dsize*npix , bar , dsize*npix ) ;
02889    }
02890 
02891    /*** tell the user what all we've read ***/
02892 
02893    sprintf(str,": nx=%d ny=%d nslice=%d (%s)",nx,ny,nz,MRI_TYPE_name[datum]) ;
02894    REPORT_PROGRESS(str) ;
02895 
02896    /*- 19 Oct 1999: if we are doing a -tim read,
02897                     then have to setup the time and z dimensions -*/
02898 
02899    if( GLOBAL_argopt.read_tim != 0 ){
02900 
02901       if( GLOBAL_argopt.read_tim > 0 ){          /* 20 Oct 1999 */
02902          nzin  = nzz = GLOBAL_argopt.read_tim ;  /* -zim:nzz */
02903          nvals = nz / nzz ;
02904 
02905          if( nvals*nzz != nz )
02906             fprintf(stderr,
02907                     "\n** Warning: -zim:%d does not evenly divide"
02908                     "number of 2D slices read=%d\n",
02909                     nzz , nz ) ;
02910 
02911       } else {
02912          nvals = - GLOBAL_argopt.read_tim ;      /* -tim:nvals */
02913          nzin  = nzz = nz / nvals ;
02914 
02915          if( nvals*nzz != nz )
02916             fprintf(stderr,
02917                     "\n** Warning: -tim:%d does not evenly divide"
02918                     "number of 2D slices read=%d\n",
02919                     nvals , nz ) ;
02920       }
02921 
02922       if( nvals == 1 ){
02923          fprintf(stderr,
02924                  "\n** Error: -tim or -zim has only 1 point in time!\n") ;
02925          exit(1) ;
02926       }
02927 
02928       if( nzz == 1 ) nzz = 2 ;  /* can't have just 1 slice */
02929 
02930    } else {   /* the old code */
02931       nvals = 1 ;
02932       nzz   = nz ;
02933    }
02934 
02935    /*--- now create the rest of the data structure, as far as we can ---*/
02936 
02937    dset                = myXtNew( THD_3dim_dataset ) ;
02938    dset->dblk          = myXtNew( THD_datablock ) ;
02939    dset->daxes         = myXtNew( THD_dataxes ) ;
02940    dset->dblk->diskptr = myXtNew( THD_diskptr ) ;
02941    dset->markers       = NULL ;
02942    dset->warp          = NULL ;
02943    dset->vox_warp      = NULL ;
02944    dset->self_warp     = NULL ;  /* 26 Aug 2002 */
02945    dset->warp_parent   = NULL ;
02946    dset->anat_parent   = NULL ;
02947    dset->stats         = NULL ;
02948    dset->death_mark    = 0 ;
02949    dset->tcat_list     = NULL ;  /* 04 Aug 2004 */
02950    dset->tcat_num      = 0 ;
02951    dset->tcat_len      = NULL ;
02952    dset->taxis         = NULL ;
02953    dset->tagset        = NULL ;  /* Oct 1998 */
02954    ZERO_STAT_AUX( dset ) ;
02955 #ifdef ALLOW_DATASET_VLIST
02956    dset->pts           = NULL ;
02957 #endif
02958 
02959    INIT_KILL(dset->kl) ;
02960    INIT_KILL(dset->dblk->kl) ;
02961 
02962    dset->dblk->diskptr->type         = DISKPTR_TYPE ;
02963    dset->dblk->diskptr->rank         = 3 ;
02964    dset->dblk->diskptr->nvals        = nvals ;  /* modified 19 Oct 1999 */
02965    dset->dblk->diskptr->dimsizes[0]  = nx ;
02966    dset->dblk->diskptr->dimsizes[1]  = ny ;
02967    dset->dblk->diskptr->dimsizes[2]  = nzz ;    /* modified 19 Oct 1999 */
02968    dset->dblk->diskptr->storage_mode = STORAGE_UNDEFINED ;
02969    dset->dblk->diskptr->byte_order   = THD_get_write_order() ;  /* 25 April 1998 */
02970 
02971    EMPTY_STRING(dset->dblk->diskptr->prefix) ;
02972    EMPTY_STRING(dset->dblk->diskptr->viewcode) ;
02973    EMPTY_STRING(dset->dblk->diskptr->filecode) ;
02974    EMPTY_STRING(dset->dblk->diskptr->directory_name) ;
02975    EMPTY_STRING(dset->dblk->diskptr->header_name) ;
02976    EMPTY_STRING(dset->dblk->diskptr->brick_name) ;
02977 
02978    dset->dblk->type        = DATABLOCK_TYPE ;
02979    dset->dblk->nvals       = nvals ;            /* modified 19 Oct 1999 */
02980 
02981    /** here is where we attach "bar" to the dataset **/
02982 
02983    dset->dblk->malloc_type  = DATABLOCK_MEM_MALLOC ;
02984    dset->dblk->brick_fac    = NULL ; /* let THD_init_datablock_brick do these */
02985    dset->dblk->brick_bytes  = NULL ;
02986    dset->dblk->brick        = NULL ;
02987 
02988    DSET_lock(dset) ;  /* Feb 1998: lock into memory */
02989 
02990    dset->dblk->brick_lab      = NULL ; /* 30 Nov 1997 */
02991    dset->dblk->brick_keywords = NULL ;
02992    dset->dblk->brick_statcode = NULL ;
02993    dset->dblk->brick_stataux  = NULL ;
02994    dset->keywords             = NULL ;
02995 
02996    THD_init_datablock_brick( dset->dblk , datum , NULL ) ;
02997 
02998    if( nvals == 1 ){
02999 
03000       mri_fix_data_pointer( bar , DSET_BRICK(dset,0) ) ;  /* the attachment! */
03001 
03002    } else {   /* 19 Oct 1999: make up a lot of bricks and attach them all */
03003               /* 20 Oct 1999: allow for the 3rd dimension as well         */
03004 
03005       int iv , jj , kk ;
03006       char * qbar ;
03007 
03008       for( iv=0 ; iv < nvals ; iv++ ){
03009          qbar = (char *) malloc( dsize*npix*nzz ) ;  /* space for nzz slices */
03010 
03011          if( GLOBAL_argopt.read_tim > 0 ){
03012             for( jj=0 ; jj < nzz ; jj++ ){              /* copy slices */
03013                kk = MIN(jj,nzin-1) ;
03014                memcpy( qbar + jj*dsize*npix ,
03015                        bar + (iv*nzin+kk)*dsize*npix , dsize*npix ) ;
03016             }
03017          } else {
03018             for( jj=0 ; jj < nzz ; jj++ ){              /* copy slices */
03019                kk = MIN(jj,nzin-1) ;
03020                memcpy( qbar + jj*dsize*npix ,
03021                        bar + (kk*nvals+iv)*dsize*npix , dsize*npix ) ;
03022             }
03023          }
03024 
03025          mri_fix_data_pointer( qbar , DSET_BRICK(dset,iv) ) ;
03026       }
03027 
03028       free(bar) ;  /* not needed no more no how */
03029 
03030       EDIT_dset_items( dset , ADN_ntt,nvals , ADN_ttdel,1.0 , ADN_none ) ;
03031    }
03032 
03033    dset->dblk->natr   = dset->dblk->natr_alloc = 0 ;
03034    dset->dblk->atr    = NULL ;
03035    dset->dblk->parent = (XtPointer) dset ;
03036 
03037    dset->daxes->type  = DATAXES_TYPE ;
03038    dset->daxes->nxx   = nx ;
03039    dset->daxes->nyy   = ny ;
03040    dset->daxes->nzz   = nzz ;        /* modified 19 Oct 1999 */
03041    dset->daxes->xxdel = 1.0 ;        /* arbitary units */
03042    dset->daxes->yydel = GLOBAL_argopt.dy ;  /* these allow user to alter */
03043    dset->daxes->zzdel = GLOBAL_argopt.dz ;  /* the images' aspect ratio */
03044    dset->daxes->xxorg = dset->daxes->yyorg = dset->daxes->zzorg = 0.0 ;
03045    dset->daxes->parent= (XtPointer) dset ;
03046 
03047    if( dx > 0.0 ) dset->daxes->xxdel = dx ;  /* 29 Jul 2002 */
03048    if( dy > 0.0 ) dset->daxes->yydel = dy ;
03049    if( dz > 0.0 ) dset->daxes->zzdel = dz ;
03050 
03051    dset->idcode = MCW_new_idcode() ;
03052    ZERO_IDCODE(dset->anat_parent_idcode) ;
03053    ZERO_IDCODE(dset->warp_parent_idcode) ;
03054 
03055    /* set the daxes orientation codes from the command line argument */
03056 
03057 #define ORCODE(aa) \
03058   ( (aa)=='R' ? ORI_R2L_TYPE : (aa)=='L' ? ORI_L2R_TYPE : \
03059     (aa)=='P' ? ORI_P2A_TYPE : (aa)=='A' ? ORI_A2P_TYPE : \
03060     (aa)=='I' ? ORI_I2S_TYPE : (aa)=='S' ? ORI_S2I_TYPE : ILLEGAL_TYPE )
03061 
03062 #define OR3OK(x,y,z) ( ((x)&6) + ((y)&6) + ((z)&6) == 6 )
03063 
03064    { char acod ;
03065      int xx,yy,zz ;
03066 
03067      acod = toupper(GLOBAL_argopt.orient_code[0]) ; xx = ORCODE(acod) ;
03068      acod = toupper(GLOBAL_argopt.orient_code[1]) ; yy = ORCODE(acod) ;
03069      acod = toupper(GLOBAL_argopt.orient_code[2]) ; zz = ORCODE(acod) ;
03070 
03071      if( xx < 0 || yy < 0 || zz < 0 || ! OR3OK(xx,yy,zz) )
03072         FatalError("Unusable -orient code!") ;
03073 
03074      dset->daxes->xxorient = xx ;
03075      dset->daxes->yyorient = yy ;
03076      dset->daxes->zzorient = zz ;
03077    }
03078 
03079    dset->wod_flag  = False ;  /* no warp-on-demand */
03080    dset->wod_daxes = NULL ;   /* 02 Nov 1996 */
03081 
03082    dset->type      = GEN_ANAT_TYPE ;
03083    dset->view_type = dset->func_type = 0 ;
03084 
03085    MCW_strncpy(  dset->self_name , fname[0]             , THD_MAX_NAME  ) ;
03086    MCW_strncpy(  dset->label1    , "Image Display Mode" , THD_MAX_LABEL ) ;
03087    EMPTY_STRING( dset->label2 ) ;
03088    EMPTY_STRING( dset->warp_parent_name ) ;
03089    EMPTY_STRING( dset->anat_parent_name ) ;
03090 
03091    RETURN( dset ) ;
03092 }

void AFNI_read_inputs int    argc,
char *    argv[]
 

average *

Definition at line 3772 of file afni.c.

References ADDTO_IMARR, ADDTO_SARR, ADDTO_XTARR, ADN_datum_all, ADN_directory_name, ADN_func_type, ADN_malloc_type, ADN_none, ADN_ntt, ADN_nvals, ADN_nxyz, ADN_prefix, ADN_ttdel, ADN_ttdur, ADN_ttorg, ADN_tunits, ADN_type, ADN_view_type, ADN_xyzdel, ADN_xyzorg, AFNI_add_timeseries(), AFNI_append_sessions(), AFNI_force_adoption(), AFNI_make_descendants(), AFNI_read_images(), ANAT_EPI_TYPE, THD_string_array::ar, argc, BLANK_SESSION, BLANK_SESSIONLIST, DATABLOCK_MEM_MALLOC, destroy_Htable(), DESTROY_SARR, DSET_BRICK_BYTES, DSET_lock, DSET_MARK_FOR_IMMORTALITY, THD_session::dsset, EDIT_dset_items(), EDIT_empty_copy(), EDIT_substitute_brick(), ENTRY, FatalError, AF_options::first_file_arg, free, FREE_IMARR, FREE_XTARR, getenv(), GLOBAL_argopt, GLOBAL_library, GLOBAL_num_dsets, AFNI_library_type::have_dummy_dataset, HEAD_ANAT_TYPE, IC_DSET, IC_FLIM, THD_ivec3::ijk, IMARR_COUNT, IMARR_SUBIMAGE, INIT_IMARR, INIT_SARR, INIT_XTARR, ISVALID_DSET, LAST_VIEW_TYPE, THD_session::lastname, malloc, MCW_file_expand(), MCW_free_expand(), MCW_strncpy, MCW_warn_expand(), myXtNew, new_Htable(), XtPointer_array::num, THD_string_array::num, THD_session::num_dsset, THD_sessionlist::num_sess, THD_session::parent, THD_sessionlist::parent, PARENTIZE, qs, AF_options::read_1D, AF_options::read_dsets, AF_options::read_images, AF_options::read_sessions, AF_options::recurse, REFRESH, REPORT_PROGRESS, AFNI_library_type::session, SESSION_TYPE, SESSIONLIST_TYPE, THD_session::sessname, THD_sessionlist::ssar, AFNI_library_type::sslist, STATUS, subsume_Htable(), THD_check_idcodes(), THD_fetch_many_datasets(), THD_get_all_subdirs(), THD_get_many_timeseries(), THD_init_session(), THD_is_directory(), THD_MAX_NAME, THD_MAX_NUM_SESSION, THD_MAX_SESSION_SIZE, THD_normalize_flist(), THD_open_dataset(), THD_reconcile_parents(), AFNI_library_type::timeseries, THD_session::type, THD_sessionlist::type, UNITS_SEC_TYPE, VIEW_ORIGINAL_TYPE, THD_3dim_dataset::view_type, AF_options::warp_4D, AFNI_library_type::warptable, THD_session::warptable, XTARR_IC, XTARR_XT, and THD_fvec3::xyz.

Referenced by MAIN_workprocess().

03773 {
03774    int id , last_color ;
03775    Boolean isfunc ;
03776 
03777 ENTRY("AFNI_read_inputs") ;
03778 
03779    /* create empty library of dataset sessions */
03780 
03781    GLOBAL_library.sslist = myXtNew( THD_sessionlist ) ;
03782    GLOBAL_library.sslist->type = SESSIONLIST_TYPE ;
03783    BLANK_SESSIONLIST(GLOBAL_library.sslist) ;
03784    GLOBAL_library.sslist->parent = NULL ;
03785 
03786    /*----- read files -----*/
03787 
03788    if( GLOBAL_argopt.first_file_arg >= argc && GLOBAL_argopt.read_images ){
03789       FatalError("No image files on command line!!") ;
03790    }
03791 
03792    /*--- read directly from images (the old-fashioned way) ---*/
03793 
03794    if( GLOBAL_argopt.read_images ){
03795       THD_3dim_dataset *dset ;
03796       THD_session *new_ss ;
03797       int vv ;
03798       int gnim ;  /* 16 Mar 1998: names from globbing */
03799       char **gname ;
03800 
03801       MCW_warn_expand(1) ;  /* 13 Jul 2001 */
03802 
03803       MCW_file_expand( argc - GLOBAL_argopt.first_file_arg ,
03804                        &(argv[GLOBAL_argopt.first_file_arg]) ,
03805                        &gnim , &gname ) ;
03806 
03807       MCW_warn_expand(0) ;  /* 13 Jul 2001 */
03808 
03809       if( gnim < 1 )
03810         FatalError("No valid filenames on command line?!" ) ;
03811 
03812       dset = AFNI_read_images( gnim , gname ) ;
03813 
03814       if( dset == NULL )
03815         FatalError("Could not form 3D dataset from images!" ) ;
03816 
03817       MCW_free_expand( gnim , gname ) ;
03818 
03819       /* set up minuscule session and session list */
03820 
03821       new_ss              = myXtNew( THD_session ) ;
03822       new_ss->type        = SESSION_TYPE ;
03823       BLANK_SESSION(new_ss) ;
03824       new_ss->num_dsset   = 1 ;
03825       new_ss->dsset[0][0] = dset ;
03826       new_ss->parent      = NULL ;
03827 
03828       MCW_strncpy( new_ss->sessname ,
03829                    argv[GLOBAL_argopt.first_file_arg] , THD_MAX_NAME ) ;
03830       MCW_strncpy( new_ss->lastname ,
03831                    argv[GLOBAL_argopt.first_file_arg] , THD_MAX_NAME ) ;
03832 
03833       GLOBAL_library.sslist->num_sess   = 1 ;
03834       GLOBAL_library.sslist->ssar[0]    = new_ss ;
03835       GLOBAL_library.have_dummy_dataset = 1 ;
03836 
03837    } /** end of images input **/
03838 
03839    /*--- sessions of 3D datasets (from to3d or other AFNI programs) ---*/
03840 
03841    else if( GLOBAL_argopt.read_sessions ){
03842 
03843       char str[256] ;
03844       Boolean good ;
03845       int num_ss , qd , qs , vv=0 , no_args , jj , nskip_noanat=0 ;
03846       THD_string_array *flist , *dlist=NULL ;
03847       char *dname , *eee ;
03848       THD_session *new_ss ;
03849       int num_dsets=0 ;       /* 04 Jan 2000 */
03850       THD_session *gss=NULL ; /* 11 May 2002: global session */
03851       THD_session *dss ;      /* 28 Aug 2003: session for command-line datasets */
03852 
03853       /*-- 20 Dec 2001: Try to read a "global" session --*/
03854       /*-- 11 May 2002: Move read global session up here --*/
03855 
03856       eee = getenv( "AFNI_GLOBAL_SESSION" ) ;   /* where it's supposed to be */
03857       if( eee != NULL ){
03858          gss =
03859           GLOBAL_library.session = THD_init_session( eee ); /* try to read datasets */
03860 
03861          if( gss != NULL ){                               /* got at least one */
03862             gss->parent = NULL ;                          /* parentize them */
03863             for( qd=0 ; qd < gss->num_dsset ; qd++ )
03864               for( vv=0 ; vv <= LAST_VIEW_TYPE ; vv++ ){
03865                 PARENTIZE( gss->dsset[qd][vv] , NULL ) ;
03866                 DSET_MARK_FOR_IMMORTALITY( gss->dsset[qd][vv] ) ;
03867               }
03868          } else {
03869            sprintf(str,"\n*** No datasets in AFNI_GLOBAL_SESSION=%s",eee) ;
03870            REPORT_PROGRESS(str) ;
03871          }
03872       }
03873 
03874       /* 28 Aug 2003:
03875          set up session for datasets from command line (vs. directories) */
03876 
03877       dss         = myXtNew( THD_session ) ;
03878       dss->type   = SESSION_TYPE ;
03879       dss->parent = NULL ;
03880       BLANK_SESSION(dss) ;
03881       MCW_strncpy( dss->sessname , "from CLI" , THD_MAX_NAME ) ;
03882       MCW_strncpy( dss->lastname , "from CLI" , THD_MAX_NAME ) ;
03883 
03884       /* now get the list of strings to read as directories */
03885 
03886       num_ss  = argc - GLOBAL_argopt.first_file_arg ;
03887       no_args = (num_ss < 1) ;
03888 
03889       INIT_SARR(dlist) ;
03890       if( no_args ){
03891          if( GLOBAL_argopt.recurse > 0 ){
03892 STATUS("no args: recursion on ./") ;
03893             flist = THD_get_all_subdirs( GLOBAL_argopt.recurse , "./" ) ;
03894             if( flist != NULL ){
03895                for( jj=0 ; jj < flist->num ; jj++ ){
03896                  ADDTO_SARR(dlist,flist->ar[jj]) ;
03897                }
03898                DESTROY_SARR(flist) ;
03899             }
03900          } else {
03901 STATUS("no args: using ./") ;
03902            ADDTO_SARR(dlist,"./") ;
03903          }
03904       } else {
03905          for( id=0 ; id < num_ss ; id++ ){
03906             if( GLOBAL_argopt.recurse > 0 ){
03907                flist = THD_get_all_subdirs( GLOBAL_argopt.recurse ,
03908                                             argv[GLOBAL_argopt.first_file_arg+id] ) ;
03909                if( flist != NULL ){
03910                   for( jj=0 ; jj < flist->num ; jj++ ){
03911                     ADDTO_SARR(dlist,flist->ar[jj]) ;
03912                   }
03913                   DESTROY_SARR(flist) ;
03914                }
03915             } else {
03916               ADDTO_SARR(dlist,argv[GLOBAL_argopt.first_file_arg+id]) ;
03917             }
03918          }
03919       }
03920 
03921       if( dlist->num < 1 ) ADDTO_SARR(dlist,"./") ;  /* just in case */
03922 
03923       /** 09 Sep 1998: eliminate duplicates from the directory list **/
03924 
03925       { THD_string_array * qlist ;
03926 STATUS("normalizing directory list") ;
03927         qlist = THD_normalize_flist( dlist ) ;
03928         if( qlist != NULL ){ DESTROY_SARR(dlist) ; dlist = qlist ; }
03929       }
03930 
03931       REFRESH ;
03932 
03933       /* read each session, set parents, put into session list */
03934 
03935       num_ss = dlist->num ;
03936       for( id=0 ; id < num_ss ; id++ ){
03937 
03938 if(PRINT_TRACING)
03939 { char str[256] ;
03940   sprintf(str,"try to read directory %s",dlist->ar[id]) ; STATUS(str) ; }
03941 
03942          dname  = dlist->ar[id] ;                /* try to read datasets from */
03943          new_ss = THD_init_session( dname ) ;    /* this directory name       */
03944 
03945          REFRESH ;
03946 
03947          if( new_ss == NULL ){ /* 28 Aug 2003 */
03948            qd = dss->num_dsset ;
03949            if( qd < THD_MAX_SESSION_SIZE ){
03950              THD_3dim_dataset *dset = THD_open_dataset( dname ) ;
03951              if( dset != NULL ){
03952                dss->dsset[qd][dset->view_type] = dset ;
03953                dss->num_dsset ++ ;
03954              } else {
03955                fprintf(stderr,
03956                        "\n** Couldn't open %s as session OR as dataset!" ,
03957                        dname ) ;
03958              }
03959            }
03960          }
03961 
03962          if( new_ss != NULL && new_ss->num_dsset > 0 ){ /* got something? */
03963 
03964             /* set parent pointers */
03965 
03966             new_ss->parent = NULL ;
03967             for( qd=0 ; qd < new_ss->num_dsset ; qd++ )
03968               for( vv=0 ; vv <= LAST_VIEW_TYPE ; vv++ )
03969                 PARENTIZE( new_ss->dsset[qd][vv] , NULL ) ;
03970 
03971             /* put the new session into place in the list of sessions */
03972 
03973             GLOBAL_library.sslist->ssar[(GLOBAL_library.sslist->num_sess)++] = new_ss ;
03974 
03975             sprintf(str,"\n session #%3d  = %s ==> %d dataset%s" ,
03976                     GLOBAL_library.sslist->num_sess ,
03977                     new_ss->sessname , new_ss->num_dsset ,
03978                     (new_ss->num_dsset > 1) ? "s" : " " ) ;
03979             REPORT_PROGRESS(str) ;
03980 
03981             num_dsets += new_ss->num_dsset ;
03982 
03983             /* 28 Aug 2002: add any inter-dataset warps to global warptable */
03984 
03985             if( new_ss->warptable != NULL ){
03986               if( GLOBAL_library.warptable == NULL ) /* create global warptable */
03987                 GLOBAL_library.warptable = new_Htable(101) ;
03988               subsume_Htable( new_ss->warptable , GLOBAL_library.warptable ) ;
03989               destroy_Htable( new_ss->warptable ) ;
03990               new_ss->warptable = NULL ;
03991             }
03992 
03993             /* 11 May 2002: put global datasets into session now */
03994 
03995             if( new_ss != NULL && gss != NULL )
03996               AFNI_append_sessions( new_ss , gss ) ;
03997 
03998             /* if we've maxed out on sessions AND
03999                if this isn't the last command line argument ... */
04000 
04001             if( GLOBAL_library.sslist->num_sess == THD_MAX_NUM_SESSION &&
04002                 id < num_ss-1 ){
04003                sprintf(str,"\n *** reached max no. sessions (%d) ***",
04004                        THD_MAX_NUM_SESSION) ;
04005                REPORT_PROGRESS(str) ;
04006                break ;                            /* exit the loop over id */
04007             }
04008          }
04009 
04010       }  /* end of id loop (over input directory names) */
04011 
04012       /* 28 Aug 2003: if have dataset in session dss, use it */
04013 
04014       if( dss->num_dsset > 0 ){
04015         if( GLOBAL_library.sslist->num_sess < THD_MAX_NUM_SESSION ){
04016           GLOBAL_library.sslist->ssar[(GLOBAL_library.sslist->num_sess)++] = dss ;
04017           num_dsets += dss->num_dsset ;
04018           sprintf(str,"\n session #%3d  = %s ==> %d dataset%s" ,
04019                   GLOBAL_library.sslist->num_sess, dss->sessname, dss->num_dsset,
04020                   (dss->num_dsset > 1) ? "s" : " " ) ;
04021           REPORT_PROGRESS(str) ;
04022           if( gss != NULL ) AFNI_append_sessions( dss , gss ) ;
04023         } else {
04024           fprintf(stderr,"\n** Can't use command line datasets: session overflow!\n") ;
04025           free(dss) ;
04026         }
04027       } else {
04028         free(dss) ;
04029       }
04030 
04031       /* 11 May 2002: if have global session but no others, use it */
04032 
04033       if( gss != NULL && GLOBAL_library.sslist->num_sess == 0 ){
04034 
04035         GLOBAL_library.sslist->ssar[(GLOBAL_library.sslist->num_sess)++] = gss ;
04036 
04037         sprintf(str,"\n AFNI_GLOBAL_SESSION = %s %d datasets" ,
04038             gss->sessname , gss->num_dsset ) ;
04039 
04040         num_dsets += gss->num_dsset ;
04041 
04042         REPORT_PROGRESS(str) ;
04043       }
04044 
04045       /** if nothing read at all, make up a dummy **/
04046 
04047       GLOBAL_library.have_dummy_dataset = 0 ;
04048 
04049 #define QQ_NXYZ 16
04050 #define QQ_NT   12
04051 #define QQ_FOV  240.0
04052 
04053       if( GLOBAL_library.sslist->num_sess <= 0 ){
04054          byte * bar ;  /* as opposed to a bite bar */
04055          int ii , nbar , jj ;
04056          THD_ivec3 nxyz ;
04057          THD_fvec3 fxyz , oxyz ;
04058          char *snam = dlist->ar[0] ; /* 10 Mar 2002 */
04059 
04060          if( !THD_is_directory(snam) ) snam = "./" ;
04061 
04062          REPORT_PROGRESS("\n*** No datasets or sessions input -- Dummy dataset created.") ;
04063 
04064          /** manufacture a minimal session **/
04065 
04066          new_ss         = myXtNew( THD_session ) ;
04067          new_ss->type   = SESSION_TYPE ;
04068          new_ss->parent = NULL ;
04069          BLANK_SESSION(new_ss) ;
04070          MCW_strncpy( new_ss->sessname , snam , THD_MAX_NAME ) ; /* pretend dummy session */
04071          MCW_strncpy( new_ss->lastname , snam , THD_MAX_NAME ) ; /* is first argv directory */
04072          GLOBAL_library.sslist->num_sess   = 1 ;
04073          GLOBAL_library.sslist->ssar[0]    = new_ss ;
04074          GLOBAL_library.have_dummy_dataset = 1 ;
04075 
04076          /** manufacture a minimal dataset **/
04077 
04078          new_ss->num_dsset   = 1 ;
04079          new_ss->dsset[0][0] = EDIT_empty_copy(NULL) ;
04080          nxyz.ijk[0] = nxyz.ijk[1] = nxyz.ijk[2] = QQ_NXYZ ;
04081          fxyz.xyz[0] = fxyz.xyz[1] = fxyz.xyz[2] = QQ_FOV / QQ_NXYZ ;
04082          oxyz.xyz[0] = oxyz.xyz[1] = oxyz.xyz[2] = -0.5 * QQ_FOV ;
04083          ii = EDIT_dset_items( new_ss->dsset[0][0] ,
04084                                  ADN_datum_all     , MRI_byte            ,
04085                                  ADN_nxyz          , nxyz                ,
04086                                  ADN_xyzdel        , fxyz                ,
04087                                  ADN_xyzorg        , oxyz                ,
04088                                  ADN_directory_name, snam                ,
04089                                  ADN_prefix        , "Dummy"             ,
04090                                  ADN_nvals         , QQ_NT               ,
04091                                  ADN_malloc_type   , DATABLOCK_MEM_MALLOC,
04092                                  ADN_type          , HEAD_ANAT_TYPE      ,
04093                                  ADN_view_type     , VIEW_ORIGINAL_TYPE  ,
04094                                  ADN_func_type     , ANAT_EPI_TYPE       ,
04095 #if QQ_NT > 1
04096                                  ADN_ntt            , QQ_NT                ,
04097                                  ADN_ttdel          , 1.0                  ,
04098                                  ADN_ttorg          , 0.0                  ,
04099                                  ADN_ttdur          , 0.0                  ,
04100                                  ADN_tunits         , UNITS_SEC_TYPE       ,
04101 #endif
04102                               ADN_none ) ;
04103          if( ii > 0 ){
04104            fprintf(stderr,"\n%d errors creating dummy dataset!\a\n",ii) ;
04105            exit(1) ;
04106          }
04107          DSET_lock(new_ss->dsset[0][0]) ; /* lock into memory */
04108 
04109          nbar = DSET_BRICK_BYTES(new_ss->dsset[0][0],0) ;
04110 
04111 #ifdef NO_FRIVOLITIES
04112          for( jj=0 ; jj < QQ_NT ; jj++ ){
04113             bar    = (byte *) malloc( nbar ) ;
04114             bar[0] = (byte) (lrand48()%127) ;
04115             for( ii=1 ; ii < nbar ; ii++ )
04116                bar[ii] = bar[ii-1] + lrand48()%(jj+2) ;
04117             EDIT_substitute_brick( new_ss->dsset[0][0] , jj , MRI_byte , bar ) ;
04118          }
04119 #else
04120         { /* 11 Jun 1999: start of loading RWCOX images into dummy dataset */
04121           static byte rrr[QQ_NXYZ*QQ_NXYZ] = {
04122             0,0,0,0,10,94,135,135,135,135,135,135,135,135,135,135,
04123             0,0,0,32,216,255,255,255,255,255,255,255,255,255,255,255,
04124             0,0,4,171,255,255,255,255,255,255,255,255,255,255,255,255,
04125             0,0,22,255,255,255,255,241,162,75,75,140,255,255,255,255,
04126             0,0,22,255,255,255,255,100,0,0,0,92,255,255,255,255,
04127             0,0,22,255,255,255,255,71,0,0,0,92,255,255,255,255,
04128             0,0,13,213,255,255,255,234,193,105,105,160,255,255,255,255,
04129             0,0,0,95,255,255,255,255,255,255,255,255,255,255,255,255,
04130             0,0,0,0,75,209,255,255,255,250,239,245,255,255,255,255,
04131             0,0,0,0,22,220,255,255,255,105,0,92,255,255,255,255,
04132             0,0,0,0,118,255,255,255,243,45,0,92,255,255,255,255,
04133             0,0,0,21,228,255,255,255,157,0,0,92,255,255,255,255,
04134             0,0,0,124,255,255,255,255,63,0,0,92,255,255,255,255,
04135             0,0,18,237,255,255,255,205,11,0,0,92,255,255,255,255,
04136             0,0,73,255,255,255,255,85,0,0,0,92,255,255,255,255,
04137             0,6,128,134,134,134,134,37,0,0,0,48,134,134,134,134 } ;
04138 
04139           static byte www[QQ_NXYZ*QQ_NXYZ] = {
04140             0,45,135,135,0,0,0,135,135,95,0,0,5,135,135,135,
04141             0,74,255,255,11,0,10,255,255,255,0,0,85,255,255,205,
04142             0,0,254,255,86,0,84,255,255,255,15,0,100,255,255,155,
04143             0,0,234,255,106,0,105,255,255,255,85,0,170,255,255,85,
04144             0,0,169,255,171,0,169,255,255,255,110,0,195,255,255,60,
04145             0,0,99,255,201,0,200,255,255,255,170,0,255,255,255,0,
04146             0,0,84,255,255,1,254,255,255,255,205,35,255,255,180,0,
04147             0,0,5,254,255,81,255,255,135,255,255,85,255,255,170,0,
04148             0,0,0,249,255,170,255,255,85,249,255,135,255,255,85,0,
04149             0,0,0,169,255,220,255,255,35,170,255,255,255,255,75,0,
04150             0,0,0,114,255,255,255,240,0,154,255,255,255,255,0,0,
04151             0,0,0,84,255,255,255,171,0,85,255,255,255,195,0,0,
04152             0,0,0,20,254,255,255,145,0,59,255,255,255,170,0,0,
04153             0,0,0,0,254,255,255,86,0,0,255,255,255,100,0,0,
04154             0,0,0,0,179,255,255,50,0,0,179,255,255,50,0,0,
04155             0,0,0,0,89,134,134,0,0,0,89,134,134,0,0,0 } ;
04156 
04157           static byte ccc[QQ_NXYZ*QQ_NXYZ] = {
04158             0,0,0,0,2,94,160,255,255,219,135,92,9,0,0,0,
04159             0,0,0,17,165,255,255,255,255,255,255,255,214,41,2,0,
04160             0,0,4,128,255,255,255,255,255,255,255,255,255,255,38,0,
04161             0,0,22,255,255,255,242,108,75,111,244,255,255,255,167,2,
04162             0,0,116,255,255,255,202,0,0,0,113,255,255,255,255,44,
04163             0,0,94,165,165,165,72,0,0,0,15,223,255,255,255,131,
04164             0,0,0,0,0,0,0,0,0,0,0,216,255,255,255,183,
04165             0,0,0,0,0,0,0,0,0,0,0,216,255,255,255,255,
04166             0,0,0,0,0,0,0,0,0,0,0,216,255,255,255,247,
04167             0,0,0,0,0,0,0,0,0,0,0,216,255,255,255,131,
04168             0,0,94,166,166,136,0,0,0,0,55,241,255,255,255,131,
04169             0,0,116,255,255,242,85,0,0,0,114,255,255,255,255,44,
04170             0,0,15,225,255,255,243,109,76,112,244,255,255,255,166,2,
04171             0,0,0,109,255,255,255,255,255,255,255,255,255,217,31,0,
04172             0,0,0,3,105,219,255,255,255,255,255,255,162,28,0,0,
04173             0,0,0,0,0,9,97,134,225,160,134,91,2,0,0,0 } ;
04174 
04175           static byte ooo[QQ_NXYZ*QQ_NXYZ] = {
04176             0,0,0,0,0,12,121,135,255,255,234,107,11,0,0,0,
04177             0,0,0,0,58,236,255,255,255,255,255,255,224,108,4,0,
04178             0,0,0,60,234,255,255,255,255,255,255,255,255,255,51,0,
04179             0,0,10,197,255,255,255,171,75,75,163,255,255,255,224,11,
04180             0,0,80,255,255,255,224,39,0,0,31,233,255,255,255,107,
04181             0,0,164,255,255,255,151,0,0,0,0,180,255,255,255,135,
04182             0,12,202,255,255,255,151,0,0,0,0,180,255,255,255,185,
04183             0,29,255,255,255,255,151,0,0,0,0,180,255,255,255,255,
04184             0,27,249,255,255,255,151,0,0,0,0,180,255,255,255,248,
04185             0,0,164,255,255,255,151,0,0,0,0,180,255,255,255,135,
04186             0,0,164,255,255,255,169,3,0,0,0,180,255,255,255,135,
04187             0,0,79,255,255,255,255,44,0,0,60,233,255,255,255,50,
04188             0,0,10,197,255,255,255,171,76,90,234,255,255,255,174,3,
04189             0,0,0,59,233,255,255,255,255,255,255,255,255,223,40,0,
04190             0,0,0,0,57,186,255,255,255,255,255,255,139,19,0,0,
04191             0,0,0,0,0,5,119,134,191,134,134,49,3,0,0,0 } ;
04192 
04193           static byte xxx[QQ_NXYZ*QQ_NXYZ] = {
04194             0,0,21,131,135,135,135,8,0,0,3,100,135,135,135,128,
04195             0,0,0,108,255,255,255,86,0,0,115,255,255,255,255,121,
04196             0,0,0,21,216,255,255,213,0,19,223,255,255,255,187,5,
04197             0,0,0,0,92,244,255,255,114,114,255,255,255,234,58,0,
04198             0,0,0,0,0,174,255,255,252,230,255,255,255,130,0,0,
04199             0,0,0,0,0,58,244,255,255,255,255,255,228,29,0,0,
04200             0,0,0,0,0,0,118,255,255,255,255,255,74,0,0,0,
04201             0,0,0,0,0,0,55,248,255,255,255,199,3,0,0,0,
04202             0,0,0,0,0,5,170,255,255,255,255,227,32,0,0,0,
04203             0,0,0,0,0,104,255,255,255,255,255,255,140,5,0,0,
04204             0,0,0,0,13,217,255,255,252,215,255,255,255,67,0,0,
04205             0,0,0,0,159,255,255,255,212,23,233,255,255,187,7,0,
04206             0,0,0,81,241,255,255,255,85,0,72,255,255,255,66,0,
04207             0,0,16,206,255,255,255,212,0,0,8,193,255,255,237,12,
04208             0,0,94,255,255,255,255,86,0,0,0,73,255,255,255,121,
04209             0,14,129,134,134,134,85,1,0,0,0,3,106,134,134,127 } ;
04210 
04211           static byte bob[QQ_NXYZ*QQ_NXYZ] = {
04212                0,0,0,60,101,133,155,165,173,161,112,54,0,0,0,0,
04213                0,48,104,139,141,144,154,164,162,183,195,162,76,0,0,0,
04214                0,111,126,119,120,132,146,174,172,194,222,226,195,88,0,0,
04215                70,112,100,90,108,123,175,222,229,242,247,249,246,195,50,0,
04216                54,53,75,87,110,129,161,219,247,249,250,250,250,241,76,0,
04217                53,55,93,112,116,124,151,212,243,249,250,250,249,228,103,0,
04218                52,62,97,134,131,125,126,154,213,242,250,250,248,200,121,0,
04219                50,66,89,140,130,120,125,130,151,172,187,209,242,221,174,99,
04220                46,71,106,150,132,79,77,111,145,133,108,159,231,247,203,174,
04221                110,124,134,140,114,95,78,104,211,232,205,231,250,250,221,167,
04222                103,115,150,146,126,104,102,120,170,215,209,202,245,250,245,103,
04223                62,115,140,151,136,116,102,108,110,172,225,138,184,243,123,0,
04224                0,56,94,122,143,128,106,106,91,122,166,113,146,197,50,0,
04225                0,0,0,60,140,139,119,120,117,124,164,160,152,71,0,0,
04226                0,0,0,0,69,124,138,131,120,168,227,194,81,0,0,0,
04227                0,0,0,0,0,49,69,103,131,153,141,54,0,0,0,0 } ;
04228 
04229           static byte * rwcox[6] = { rrr,www,ccc,ooo,xxx,bob } ;
04230           int kk ;
04231 
04232             for( jj=0 ; jj < QQ_NT ; jj++ ){
04233                bar = (byte *) malloc( nbar ) ;
04234                for( kk=0 ; kk < QQ_NXYZ ; kk++ )
04235                   memcpy( bar + kk*QQ_NXYZ*QQ_NXYZ , rwcox[jj%6] , QQ_NXYZ*QQ_NXYZ ) ;
04236                EDIT_substitute_brick( new_ss->dsset[0][0] , jj , MRI_byte , bar ) ;
04237             }
04238           } /* end of loading RWCOX */
04239 #endif
04240 
04241          PARENTIZE( new_ss->dsset[0][0] , NULL ) ;
04242 
04243       } else {  /* 04 Jan 2000: show total number of datasets */
04244 
04245          sprintf(str,"\n dataset count = %d" , num_dsets ) ;
04246          GLOBAL_num_dsets = num_dsets ;
04247          REPORT_PROGRESS(str) ;
04248       }
04249 
04250       /*** read all timeseries files from all directories ***/
04251 
04252 STATUS("reading timeseries files") ;
04253 
04254       /* 27 Jan 2000: allow skipping *.1D files from dataset directories */
04255 
04256       GLOBAL_library.timeseries =
04257            THD_get_many_timeseries( (GLOBAL_argopt.read_1D) ? dlist : NULL ) ;
04258 
04259       REFRESH ;
04260 
04261       if( GLOBAL_library.timeseries == NULL )
04262          INIT_IMARR(GLOBAL_library.timeseries) ;
04263 
04264       sprintf( str , "\n Time series   = %d files read" ,
04265                IMARR_COUNT(GLOBAL_library.timeseries) ) ;
04266       REPORT_PROGRESS(str) ;
04267 
04268       /*** throw away the list of directories that were scanned ***/
04269 
04270       DESTROY_SARR(dlist) ;
04271 
04272       /* assign the warp and anatomy parent pointers;
04273          then, make any datasets that don't exist but logically
04274          descend from the warp and anatomy parents just assigned */
04275 
04276       if( !GLOBAL_library.have_dummy_dataset ){
04277 
04278         STATUS("checking idcodes for duplicates") ;
04279         THD_check_idcodes( GLOBAL_library.sslist ) ;     /* 08 Jun 1999 */
04280 
04281         STATUS("reconciling parent pointers") ;
04282         THD_reconcile_parents( GLOBAL_library.sslist ) ;
04283 
04284         STATUS("forcible adoption of unparented datasets") ;
04285         for( id=0 ; id < GLOBAL_library.sslist->num_sess ; id++ ){ /* functions w/o parents, */
04286           new_ss = GLOBAL_library.sslist->ssar[id] ;               /* forcibly get one */
04287           AFNI_force_adoption( new_ss , GLOBAL_argopt.warp_4D ) ;
04288        }
04289 
04290       } /* end of if don't have dummy dataset */
04291 
04292       if( GLOBAL_library.session != NULL )
04293          AFNI_force_adoption( GLOBAL_library.session , GLOBAL_argopt.warp_4D ) ;
04294 
04295 STATUS("making descendant datasets") ;
04296 
04297       AFNI_make_descendants( GLOBAL_library.sslist ) ;
04298 
04299    } /** end of sessions input **/
04300 
04301    else if( GLOBAL_argopt.read_dsets ){  /* 17 Mar 2000 */
04302 
04303       int nds = argc - GLOBAL_argopt.first_file_arg ;
04304       char str[256] ;
04305       THD_3dim_dataset * dset ;
04306       XtPointer_array * dsar ;
04307       MRI_IMARR * webtsar ;        /* 26 Mar 2001 */
04308       THD_session * new_ss ;
04309       int ii,nerr=0,vv,nn , dd ;
04310 
04311       if( nds <= 0 ){
04312          fprintf(stderr,"\a\n*** No datasets on command line?!\n"); exit(1);
04313       }
04314       nds = 0 ;
04315 
04316       /* set up minuscule session and session list */
04317 
04318       new_ss             = myXtNew( THD_session ) ;
04319       new_ss->type       = SESSION_TYPE ;
04320       BLANK_SESSION(new_ss) ;
04321       new_ss->parent     = NULL ;
04322 
04323       strcpy( new_ss->sessname , "." ) ;
04324       strcpy( new_ss->lastname , "." ) ;
04325 
04326       GLOBAL_library.sslist->num_sess   = 1 ;
04327       GLOBAL_library.sslist->ssar[0]    = new_ss ;
04328       GLOBAL_library.have_dummy_dataset = 0 ;
04329 
04330       /* read datasets from command line */
04331 
04332 STATUS("reading commandline dsets") ;
04333 
04334       INIT_IMARR(webtsar) ; /* 26 Mar 2001 */
04335 
04336       for( ii=GLOBAL_argopt.first_file_arg ; ii < argc ; ii++ ){
04337 
04338          /** 23 Mar 2001: modified code to deal with an array of
04339                           datasets, rather than just one at a time **/
04340 
04341          if( strstr(argv[ii],"://")      != NULL &&
04342              strstr(argv[ii],"AFNILIST") != NULL   ){ /** 23 Mar 2001: read from Web list **/
04343 
04344             dsar = THD_fetch_many_datasets( argv[ii] ) ;
04345             if( dsar == NULL || dsar->num == 0 ){
04346                fprintf(stderr,"\a\n*** Can't read datasets from %s\n",argv[ii]) ;
04347                nerr++ ; continue ; /* next ii */
04348             }
04349 
04350          } else { /** read from one file (local or Web), make a small array **/
04351 
04352             dset = THD_open_dataset( argv[ii] ) ;
04353             if( dset == NULL ){
04354                fprintf(stderr,"\a\n*** Can't read dataset %s\n",argv[ii]) ;
04355                nerr++ ; continue ; /* next ii */
04356             }
04357             INIT_XTARR(dsar) ; ADDTO_XTARR(dsar,dset) ; XTARR_IC(dsar,0) = IC_DSET ;
04358          }
04359 
04360          for( dd=0 ; dd < dsar->num ; dd++ ){  /* loop over all entries in array */
04361 
04362             /* 26 Mar 2001: might get some 1D files, too */
04363 
04364             if( XTARR_IC(dsar,dd) == IC_FLIM ){  /* save 1D file for later */
04365                MRI_IMAGE *im = (MRI_IMAGE *) XTARR_XT(dsar,dd) ;
04366                ADDTO_IMARR(webtsar,im) ;
04367                continue ;              /* next one */
04368             }
04369             if( XTARR_IC(dsar,dd) != IC_DSET ){
04370                fprintf(stderr,"\n** Unknown filetype returned from %s\n",argv[ii]) ;
04371                nerr++ ; continue ;   /* bad */
04372             }
04373 
04374             /* get to here ==> have a dataset */
04375 
04376             dset = (THD_3dim_dataset *) XTARR_XT(dsar,dd) ;
04377             if( !ISVALID_DSET(dset) ) continue ;            /* bad */
04378             nds++ ;   /* increment count of dataset */
04379             REFRESH ;
04380             vv = dset->view_type ;
04381             nn = new_ss->num_dsset ;
04382             if( nn >= THD_MAX_SESSION_SIZE ){
04383               fprintf(stderr,"\a\n*** too many datasets!\n") ;
04384               nerr++ ;
04385             } else {
04386               new_ss->dsset[nn][vv] = dset ;
04387               new_ss->num_dsset ++ ;
04388             }
04389          } /* end of loop over dd=datasets in dsar */
04390 
04391          FREE_XTARR(dsar) ;  /* don't need array no more */
04392 
04393       } /* end of loop over ii=command line arguments past options */
04394 
04395       if( nerr > 0 ){
04396          fprintf(stderr,"** FATAL ERRORS on input\n") ; exit(1) ;  /* bad */
04397       }
04398 
04399       sprintf(str,"\n dataset count = %d" , nds ) ;
04400       if( new_ss->num_dsset == 0 ){
04401          fprintf(stderr,"\n*** No datasets read from the list!\n") ;
04402          exit(1) ;
04403       }
04404       REPORT_PROGRESS(str) ;
04405 
04406 STATUS("reading timeseries files") ;
04407 
04408       GLOBAL_library.timeseries = THD_get_many_timeseries( NULL ) ;
04409 
04410       REFRESH ;
04411 
04412       if( GLOBAL_library.timeseries == NULL )
04413          INIT_IMARR(GLOBAL_library.timeseries) ;
04414 
04415       /* 26 Mar 2001: store timeseries fetched from the Web */
04416 
04417       for( dd=0 ; dd < IMARR_COUNT(webtsar) ; dd++ )
04418          AFNI_add_timeseries( IMARR_SUBIMAGE(webtsar,dd) ) ;
04419 
04420       FREE_IMARR(webtsar) ;
04421 
04422       sprintf( str , "\n Time series   = %d files read" ,
04423                IMARR_COUNT(GLOBAL_library.timeseries) ) ;
04424       REPORT_PROGRESS(str) ;
04425 
04426       /* assign the warp and anatomy parent pointers;
04427          then, make any datasets that don't exist but logically
04428          descend from the warp and anatomy parents just assigned */
04429 
04430 STATUS("checking idcodes for duplicates") ;
04431 
04432       THD_check_idcodes( GLOBAL_library.sslist ) ;
04433 
04434 #if 0
04435 STATUS("reconciling parent pointers") ;
04436 
04437       THD_reconcile_parents( GLOBAL_library.sslist ) ; /* parents from .HEAD files */
04438 
04439 STATUS("forcible adoption of unparented datasets") ;
04440 
04441       for( id=0 ; id < GLOBAL_library.sslist->num_sess ; id++ ){  /* functions w/o parents, */
04442          new_ss = GLOBAL_library.sslist->ssar[id] ;               /* forcibly get one */
04443          AFNI_force_adoption( new_ss , GLOBAL_argopt.warp_4D ) ;
04444       }
04445 #endif
04446 
04447    }  /** end of read datasets from command line **/
04448 
04449    else {  /* should never occur! */
04450 
04451      fprintf(stderr,"\a\n*** Illegal Usage configuration detected!\n"); exit(1);
04452    }
04453 
04454    /** done at last **/
04455 
04456    MPROBE ; EXRETURN ;
04457 }

void AFNI_read_sess_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

change button labels to conform to other AFNI dialogs *

Definition at line 2445 of file afni_func.c.

References AFNI_finalize_read_sess_CB(), AFNI_make_file_dialog(), ENTRY, AFNI_widget_set::file_cb, AFNI_widget_set::file_cd, AFNI_widget_set::file_dialog, AFNI_widget_set::file_sbox, GLOBAL_library, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, NORMAL_cursorize, THD_sessionlist::num_sess, RWC_visibilize_widget(), AFNI_library_type::sslist, THD_MAX_NUM_SESSION, and Three_D_View::vwid.

02446 {
02447    Three_D_View *im3d = (Three_D_View *) cd ;
02448 
02449 ENTRY("AFNI_read_sess_CB") ;
02450 
02451    if( GLOBAL_library.sslist->num_sess >= THD_MAX_NUM_SESSION ){
02452       (void) MCW_popup_message( w ,
02453                                   "********************************\n"
02454                                   "** Maximum number of sessions **\n"
02455                                   "** would be exceeded.  Sorry! **\n"
02456                                   "********************************"
02457                                 , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02458       EXRETURN ;
02459    }
02460 
02461    AFNI_make_file_dialog( im3d ) ;
02462 
02463    XtAddCallback( im3d->vwid->file_sbox , XmNokCallback ,
02464                   AFNI_finalize_read_sess_CB , cd ) ;
02465 
02466    XtAddCallback( im3d->vwid->file_sbox , XmNcancelCallback ,
02467                   AFNI_finalize_read_sess_CB , cd ) ;
02468 
02469    XtAddCallback( im3d->vwid->file_sbox , XmNhelpCallback ,
02470                   AFNI_finalize_read_sess_CB , cd ) ;
02471 
02472    im3d->vwid->file_cb = AFNI_finalize_read_sess_CB ;
02473    im3d->vwid->file_cd = cd ;
02474 
02475    XtVaSetValues( im3d->vwid->file_dialog,
02476                      XmNtitle, "AFNI: Read Session",
02477                   NULL ) ;
02478 
02479    XtPopup( im3d->vwid->file_dialog , XtGrabNone ) ;
02480    RWC_visibilize_widget( im3d->vwid->file_dialog ) ; /* 09 Nov 1999 */
02481    NORMAL_cursorize( im3d->vwid->file_dialog ) ;
02482 
02483    EXRETURN ;
02484 }

void AFNI_read_Web_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

try to read a new timeseries *

Definition at line 2810 of file afni_func.c.

References AFNI_finalize_read_Web_CB(), ENTRY, and MCW_choose_string().

02811 {
02812    Three_D_View *im3d = (Three_D_View *) cd ;
02813    XmString xstr ;
02814 
02815 ENTRY("AFNI_read_Web_CB") ;
02816 
02817    MCW_choose_string( w ,
02818     "Complete http:// or ftp:// address of dataset (.HEAD or .mnc or .mnc.gz):\n"
02819     "Examples: ftp://afni.nimh.nih.gov/AFNI/data/astrip+orig.HEAD\n"
02820     "          http://afni.nimh.nih.gov/afni/norm305.mnc.gz"
02821      , NULL , AFNI_finalize_read_Web_CB , (XtPointer) im3d ) ;
02822 
02823    EXRETURN ;
02824 }

int AFNI_receive_control Three_D_View   im3d,
int    key,
int    code,
void *    arg
 

Control how the receiver works:

  • code = indicates what action is
  • arg = extra information, if code needs it
This function returns 0 if all is OK, and returns -1 if an error occurs. ---------------------------------------------------------------------

Definition at line 183 of file afni_receive.c.

References AFNI_toggle_drawing(), arg, Three_D_View::dc, DRAWING_FILL, DRAWING_LINES, DRAWING_LINEWIDTH, AFNI_view_info::drawing_mode, DRAWING_NODRAW, DRAWING_OVCINDEX, AFNI_view_info::drawing_pixel, DRAWING_POINTS, DRAWING_SHUTDOWN, DRAWING_STARTUP, DRAWING_X11PIXEL, DRAWNOTICE_SHUTDOWN, DRAWNOTICE_STARTUP, drive_MCW_imseq(), DSETCHANGE_SHUTDOWN, DSETCHANGE_STARTUP, ENTRY, EVERYTHING_SHUTDOWN, free, FUNCDISPLAY_SHUTDOWN, FUNCDISPLAY_STARTUP, IM3D_VALID, ind, isqDR_button2_mode, isqDR_button2_pixel, isqDR_button2_width, key, MCW_DCOV::ncol_ov, AFNI_view_info::num_receiver, MCW_DC::ovc, OVERLAY_SHUTDOWN, OVERLAY_STARTUP, MCW_DCOV::pix_ov, RECEIVE_ALL_MASK, RECEIVE_DRAWING_MASK, RECEIVE_DRAWNOTICE_MASK, RECEIVE_DSETCHANGE_MASK, RECEIVE_FUNCDISPLAY_MASK, RECEIVE_OVERLAY_MASK, RECEIVE_REDISPLAY_MASK, RECEIVE_TIMEINDEX_MASK, RECEIVE_VIEWPOINT_MASK, AFNI_view_info::receiver, REDISPLAY_SHUTDOWN, REDISPLAY_STARTUP, RETURN, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, TIMEINDEX_SHUTDOWN, TIMEINDEX_STARTUP, VIEWPOINT_SHUTDOWN, VIEWPOINT_STARTUP, and Three_D_View::vinfo.

Referenced by DRAW_color_CB(), DRAW_done_CB(), DRAW_finalize_dset_CB(), DRAW_mode_CB(), DRAW_quit_CB(), DSET2_dset_recv(), DSETN_dset_recv(), r_save_dataset_as(), RCREND_done_CB(), REND_done_CB(), and TTget_main().

00184 {
00185 ENTRY("AFNI_receive_control") ;
00186 
00187    /* check input for OK-osity */
00188 
00189    if( ! IM3D_VALID(im3d) || im3d->vinfo->receiver == NULL ) RETURN(-1) ;
00190    if( key < 0 || key >= im3d->vinfo->num_receiver )         RETURN(-1) ;
00191    if( im3d->vinfo->receiver[key] == NULL )                  RETURN(-1) ;
00192 
00193    /* take appropriate actions */
00194 
00195    switch( code ){
00196 
00197       default: RETURN(-1) ;
00198 
00199       case DRAWNOTICE_STARTUP:{    /* 30 Mar 1999 */
00200          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_DRAWNOTICE_MASK ;
00201       }
00202       break ;
00203 
00204       case DRAWNOTICE_SHUTDOWN:{   /* 30 Mar 1999 */
00205          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_DRAWNOTICE_MASK) ;
00206       }
00207       break ;
00208 
00209       case DSETCHANGE_STARTUP:{    /* 31 Mar 1999 */
00210          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_DSETCHANGE_MASK ;
00211       }
00212       break ;
00213 
00214       case DSETCHANGE_SHUTDOWN:{   /* 30 Mar 1999 */
00215          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_DSETCHANGE_MASK) ;
00216       }
00217       break ;
00218 
00219       case DRAWING_STARTUP:{
00220          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_DRAWING_MASK ;
00221          AFNI_toggle_drawing( im3d ) ;
00222       }
00223       break ;
00224 
00225       case DRAWING_SHUTDOWN:{
00226          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_DRAWING_MASK) ;
00227          AFNI_toggle_drawing( im3d ) ;
00228       }
00229       break ;
00230 
00231       case DRAWING_OVCINDEX:{
00232          int ind = (int) arg ;
00233 
00234          if( ind <= 0 || ind >= im3d->dc->ovc->ncol_ov ){
00235             RETURN(-1) ;
00236          } else {
00237             Pixel ppp = im3d->dc->ovc->pix_ov[ind] ;
00238             drive_MCW_imseq( im3d->s123, isqDR_button2_pixel, (XtPointer)ppp ) ;
00239             drive_MCW_imseq( im3d->s231, isqDR_button2_pixel, (XtPointer)ppp ) ;
00240             drive_MCW_imseq( im3d->s312, isqDR_button2_pixel, (XtPointer)ppp ) ;
00241             im3d->vinfo->drawing_pixel = ppp ;
00242          }
00243       }
00244       break ;
00245 
00246       case DRAWING_X11PIXEL:{
00247          Pixel ppp = (Pixel) arg ;
00248          drive_MCW_imseq( im3d->s123, isqDR_button2_pixel, (XtPointer)ppp ) ;
00249          drive_MCW_imseq( im3d->s231, isqDR_button2_pixel, (XtPointer)ppp ) ;
00250          drive_MCW_imseq( im3d->s312, isqDR_button2_pixel, (XtPointer)ppp ) ;
00251          im3d->vinfo->drawing_pixel = ppp ;
00252       }
00253       break ;
00254 
00255       case DRAWING_LINES:
00256       case DRAWING_FILL:
00257       case DRAWING_POINTS:
00258       case DRAWING_NODRAW:{
00259          im3d->vinfo->drawing_mode = code ;
00260          drive_MCW_imseq( im3d->s123, isqDR_button2_mode, (XtPointer)code ) ;
00261          drive_MCW_imseq( im3d->s231, isqDR_button2_mode, (XtPointer)code ) ;
00262          drive_MCW_imseq( im3d->s312, isqDR_button2_mode, (XtPointer)code ) ;
00263       }
00264       break ;
00265 
00266       case DRAWING_LINEWIDTH:{    /* 08 Oct 2002 */
00267         int ww = (int) arg ;
00268         if( ww >= 0 ){
00269           drive_MCW_imseq( im3d->s123, isqDR_button2_width, (XtPointer)ww ) ;
00270           drive_MCW_imseq( im3d->s231, isqDR_button2_width, (XtPointer)ww ) ;
00271           drive_MCW_imseq( im3d->s312, isqDR_button2_width, (XtPointer)ww ) ;
00272         }
00273       }
00274       break ;
00275 
00276       case VIEWPOINT_STARTUP:{
00277          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_VIEWPOINT_MASK ;
00278       }
00279       break ;
00280 
00281       case VIEWPOINT_SHUTDOWN:{
00282          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_VIEWPOINT_MASK) ;
00283       }
00284       break ;
00285 
00286       case REDISPLAY_STARTUP:{
00287          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_REDISPLAY_MASK ;
00288       }
00289       break ;
00290 
00291       case REDISPLAY_SHUTDOWN:{
00292          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_REDISPLAY_MASK) ;
00293       }
00294       break ;
00295 
00296       case FUNCDISPLAY_STARTUP:{
00297          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_FUNCDISPLAY_MASK ;
00298       }
00299       break ;
00300 
00301       case FUNCDISPLAY_SHUTDOWN:{
00302          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_FUNCDISPLAY_MASK) ;
00303       }
00304       break ;
00305 
00306       case OVERLAY_STARTUP:{
00307          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_OVERLAY_MASK ;
00308       }
00309       break ;
00310 
00311       case OVERLAY_SHUTDOWN:{
00312          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_OVERLAY_MASK) ;
00313       }
00314       break ;
00315 
00316       case TIMEINDEX_STARTUP:{
00317          im3d->vinfo->receiver[key]->receiver_mask |= RECEIVE_TIMEINDEX_MASK ;
00318       }
00319       break ;
00320 
00321       case TIMEINDEX_SHUTDOWN:{
00322          im3d->vinfo->receiver[key]->receiver_mask &= (RECEIVE_ALL_MASK - RECEIVE_TIMEINDEX_MASK) ;
00323       }
00324       break ;
00325 
00326       case EVERYTHING_SHUTDOWN:{
00327          im3d->vinfo->receiver[key]->receiver_mask = 0 ;
00328          AFNI_toggle_drawing( im3d ) ;
00329       }
00330       break ;
00331 
00332    } /* end of switch on codes */
00333 
00334    /* possibly remove this receiver, and maybe even all receivers */
00335 
00336    if( im3d->vinfo->receiver[key]->receiver_mask == 0 ){   /* receiving nothing at all? */
00337       int ir , nn=0 ;
00338 
00339       if( im3d->vinfo->receiver[key]->receiver_funcname != NULL )
00340         free( im3d->vinfo->receiver[key]->receiver_funcname ) ;
00341 
00342       free( im3d->vinfo->receiver[key] ) ;                 /* toss this one fer shur */
00343       im3d->vinfo->receiver[key] = NULL ;
00344 
00345       for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ )  /* see if any are left */
00346          if( im3d->vinfo->receiver[ir] != NULL ) nn++ ;
00347 
00348       if( nn == 0 ) im3d->vinfo->num_receiver = 0 ;        /* if not, toss them all */
00349    }
00350 
00351    RETURN(0) ;
00352 }

void AFNI_receive_destroy Three_D_View   im3d
 

Turn off all reception for this viewer. ---------------------------------------------------------------------------

Definition at line 135 of file afni_receive.c.

References AFNI_CALL_VOID_4ARG, AFNI_view_info::drawing_enabled, DRAWING_LINES, AFNI_view_info::drawing_mode, ENTRY, free, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_CLOSURE, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, and Three_D_View::vinfo.

Referenced by AFNI_closedown_3dview().

00136 {
00137    int ir ;
00138 
00139 ENTRY("AFNI_receive_destroy") ;
00140 
00141    if( !IM3D_VALID(im3d) ) EXRETURN ;
00142 
00143    if( im3d->vinfo->receiver != NULL && im3d->vinfo->num_receiver > 0 ){
00144 
00145       for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ ){
00146 
00147          if( im3d->vinfo->receiver[ir] != NULL ){
00148 #if 0
00149             im3d->vinfo->receiver[ir]->receiver_func(
00150                    RECEIVE_CLOSURE , 0 , NULL ,
00151                    im3d->vinfo->receiver[ir]->receiver_data ) ;
00152 #else
00153             AFNI_CALL_VOID_4ARG( im3d->vinfo->receiver[ir]->receiver_func ,
00154                                  int,RECEIVE_CLOSURE , int,0 ,
00155                                  void *,NULL ,
00156                                  void *,im3d->vinfo->receiver[ir]->receiver_data ) ;
00157 #endif
00158 
00159             if( im3d->vinfo->receiver[ir]->receiver_funcname != NULL )
00160               free( im3d->vinfo->receiver[ir]->receiver_funcname ) ;
00161             free( im3d->vinfo->receiver[ir] ) ;
00162             im3d->vinfo->receiver[ir] = NULL ;
00163          }
00164       }
00165 
00166       im3d->vinfo->num_receiver    = 0 ;
00167       im3d->vinfo->drawing_enabled = 0 ;
00168       im3d->vinfo->drawing_mode    = DRAWING_LINES ;  /* default */
00169    }
00170 
00171    EXRETURN ;
00172 }

int AFNI_receive_init Three_D_View   im3d,
int    rmask,
gen_func   cb,
void *    cb_data,
char *    cbname
 

Set up to have AFNI send data to a receiver:

rmask = bitwise OR (|) mask of RECEIVE_*_MASK (cf. afni.h)

cb = callback function to receive data; will be called like cb( int why , int np , void * vp , void * cb_data ) where why = a RECEIVE_* code (cf. below) np = count of data in vp (may be 0) vp = pointer to data being sent (may be NULL) cb_data = pointer passed into this routine

cbname = string to identify callback func (for debugging)

why = RECEIVE_VIEWPOINT --> np = 3, vp = int *, pointing to array of dataset voxel indices just jumped to; vp[0] = x index, etc.

why = RECEIVE_REDISPLAY --> the user did something to cause an image redisplay besides changing the viewpoint. For this call, np and vp are unused.

why = RECEIVE_FUNCDISPLAY --> the user did something to cause the function display to change. For this call, np and vp are unused.

why = RECEIVE_POINTS --> np = number of points drawn vp = int **, pointer to array of arrays of dataset voxel indices: vp[0][i] = x index of point i vp[1][i] = y index of point i vp[2][i] = z index of point i, vp[3][0] = sending mode for i=0..np-1

why = RECEIVE_DRAWNOTICE --> the user drew something and that information was sent to a receiver. This call will occur AFTER all the RECEIVE_POINTS calls have been done. If no RECEIVE_POINTS calls are made, then no RECEIVE_DRAWNOTICE calls will be made either. For this call, np and vp are unused.

why = RECEIVE_DSETCHANGE --> the user did something (like rescan a session) that may have changed dataset pointers. The receiving routine should use dataset idcodes to re-find the correct dataset pointers. For this call, np and vp are unused.

why = RECEIVE_CLOSURE --> the user closed the controller window, which means that no more data will be coming from it -- even if it is reopened, AFNI_receive_init must be called again. For this call, np and vp are unused.

why = RECEIVE_ALTERATION --> the user changed something in the controller -- the dataset, the time index, the resampling, .... This is basically a warning message. For this call, np and vp are unused.

why = RECEIVE_TIMEINDEX --> the time index changed in im3d; for this call, np,vp are unused. The new time index is in im3d->vinfo->time_index

This function returns a non-negative int if all is OK -- this value is the "key" that is used in calls to AFNI_receive_control when you want to manipulate the status of this connection.

This function returns -1 if an error occurs.

Modified 29 Mar 1999 to allow for multiple receivers (but drawing can only be done in one mode). ---------------------------------------------------------------------

Definition at line 93 of file afni_receive.c.

References AFMALL, AFNI_toggle_drawing(), AFREALL, ENTRY, gen_func, IM3D_VALID, AFNI_view_info::num_receiver, RECEIVE_ALL_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_data, AFNI_receiver::receiver_func, AFNI_receiver::receiver_funcname, AFNI_receiver::receiver_mask, RETURN, and Three_D_View::vinfo.

Referenced by AFNI_init_niml(), DRAW_finalize_dset_CB(), DSET2_main(), DSETN_main(), RCREND_main(), REND_main(), and TTget_main().

00095 {
00096    int ir ;
00097 
00098 ENTRY("AFNI_receive_init") ;
00099 
00100    /* check for invalid entries */
00101 
00102    if( ! IM3D_VALID(im3d)            ||               /* no good? */
00103        cb == NULL                    ||               /* no receiver? */
00104        (rmask & RECEIVE_ALL_MASK) == 0 ) RETURN(-1) ; /* no action? */
00105 
00106    for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ )
00107       if( im3d->vinfo->receiver[ir] == NULL ) break ;
00108 
00109    if( ir == im3d->vinfo->num_receiver ){
00110 #if 0
00111 fprintf(stderr,"AFNI_receive_init AFREALL() with ir=%d num_receiver=%d\n",
00112         ir,im3d->vinfo->num_receiver ) ;
00113 #endif
00114       im3d->vinfo->receiver = AFREALL( im3d->vinfo->receiver, AFNI_receiver *, ir+1 );
00115       im3d->vinfo->num_receiver ++ ;
00116    }
00117    im3d->vinfo->receiver[ir] = AFMALL( AFNI_receiver, sizeof(AFNI_receiver)) ;
00118 
00119    im3d->vinfo->receiver[ir]->receiver_func = cb ;
00120    im3d->vinfo->receiver[ir]->receiver_mask = rmask ;
00121    im3d->vinfo->receiver[ir]->receiver_data = cb_data ;
00122 
00123    im3d->vinfo->receiver[ir]->receiver_funcname =
00124      strdup( (cbname != NULL) ? cbname : "[unknown func]" ) ;
00125 
00126    AFNI_toggle_drawing( im3d ) ;
00127 
00128    RETURN(ir) ;  /* 15 Jun 1999: used to return 0, which is not correct! */
00129 }

void AFNI_redisplay_func Three_D_View  
 

Definition at line 5222 of file afni.c.

References AFNI_process_funcdisplay(), AFNI_set_viewpoint(), and REDISPLAY_OVERLAY.

Referenced by AFNI_fimmer_redisplay(), AFNI_inten_bbox_CB(), AFNI_inten_pbar_CB(), AFNI_palette_av_CB(), AFNI_palette_tran_CB(), AFNI_see_func_CB(), AFNI_thr_scale_CB(), AFNI_thresh_top_CB(), and PLUTO_dset_redisplay_mode().

05223 {
05224    AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
05225    AFNI_process_funcdisplay( im3d ) ;
05226 }

Boolean AFNI_refashion_dataset Three_D_View   im3d,
THD_3dim_dataset   dset,
THD_dataxes   daxes,
int    resam_mode
 

09 Dec 1997: resam_mode is now ignored *

Definition at line 3913 of file afni_func.c.

References AFNI_dataset_slice(), AFNI_view_info::anat_resam_mode, THD_diskptr::brick_name, THD_diskptr::byte_order, COMPRESS_fclose(), COMPRESS_fopen_write(), COMPRESS_unlink(), DATABLOCK_MEM_MALLOC, DATABLOCK_MEM_MMAP, DATABLOCK_MEM_UNDEFINED, DATAXES_TYPE, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, DBLK_BRICK_FACTOR, DBLK_BRICK_TYPE, DBLK_mmapfix, THD_diskptr::dimsizes, THD_diskptr::directory_name, THD_datablock::diskptr, DSET_BRICK_STATCODE, DSET_BRICK_TYPE, DSET_unlock, ENTRY, far, AFNI_view_info::func_resam_mode, IM3D_OPEN, ISFUNC, MRI_IMAGE::kind, logo_pixmap, THD_datablock::malloc_type, MCW_popdown_meter(), MCW_popup_meter(), MCW_set_meter(), METER_TOP_WIDE, MMAP_THRESHOLD, mri_data_pointer(), mri_datum_size(), mri_free(), mri_short_order(), mri_swap2(), mri_swap4(), MRI_TYPE_NAME, myXtFree, myXtNew, THD_datablock::nvals, THD_diskptr::nvals, MRI_IMAGE::nx, THD_dataxes::nxx, MRI_IMAGE::ny, THD_dataxes::nyy, nz, THD_dataxes::nzz, AFNI_widget_set::picture, PICTURIZE, PURGE_DSET, RETURN, THD_3dim_dataset::self_warp, STATUS, STORAGE_BY_BRICK, THD_diskptr::storage_mode, STORAGE_UNDEFINED, THD_get_write_compression(), THD_get_write_order(), THD_init_datablock_brick(), THD_is_directory(), THD_load_statistics(), THD_MKDIR_MODE, THD_write_3dim_dataset(), AFNI_view_info::thr_resam_mode, AFNI_widget_set::top_shell, THD_datablock::total_bytes, tross_Append_History(), typ, THD_dataxes::type, THD_warp::type, UNPICTURIZE, Three_D_View::vinfo, THD_3dim_dataset::vox_warp, Three_D_View::vwid, THD_3dim_dataset::wod_daxes, THD_3dim_dataset::wod_flag, XtMalloc, and THD_dataxes::zzorient.

Referenced by AFNI_do_many_writes(), and AFNI_write_dataset_CB().

03916 {
03917    THD_datablock *dblk  = dset->dblk ;
03918    THD_diskptr   *dkptr = dset->dblk->diskptr ;
03919    Boolean good ;
03920    int npix , nx,ny,nz,nv , kk , ival , code , nzv , dsiz , isfunc , cmode ;
03921    MRI_IMAGE *im ;
03922    void *imar ;
03923    FILE *far ;
03924    float brfac_save ;
03925    int native_order , save_order ;  /* 23 Nov 1999 */
03926 
03927    Boolean picturize ;
03928    Pixmap brain_pixmap ;
03929 
03930 #ifndef DONT_USE_METER
03931    Widget meter = NULL ;
03932    int meter_perc , meter_pold ;
03933 #endif
03934 
03935 ENTRY("AFNI_refashion_dataset") ;
03936 
03937    picturize = IM3D_OPEN(im3d) && im3d->vwid->picture != NULL &&
03938                afni48_pixmap != XmUNSPECIFIED_PIXMAP ;
03939 
03940    if( picturize ){
03941       switch( ORIENT_xyz[daxes->zzorient] ){
03942          default:  brain_pixmap = XmUNSPECIFIED_PIXMAP ; break ;
03943          case 'x': brain_pixmap = afni48sag_pixmap     ; break ;
03944          case 'y': brain_pixmap = afni48cor_pixmap     ; break ;
03945          case 'z': brain_pixmap = afni48axi_pixmap     ; break ;
03946       }
03947    }
03948 
03949 #ifndef DONT_USE_METER
03950    meter = MCW_popup_meter( im3d->vwid->top_shell , METER_TOP_WIDE ) ;
03951    meter_pold = 0 ;
03952 #endif
03953 
03954    /* set up for warp-on-demand */
03955 
03956    dset->wod_daxes         = myXtNew(THD_dataxes) ; /* 02 Nov 1996 */
03957    dset->wod_daxes->type   = DATAXES_TYPE ;       /* 02 Nov 1996 */
03958    dset->vox_warp          = myXtNew(THD_warp) ;    /* 02 Nov 1996 */
03959    dset->self_warp         = NULL ;              /* 26 Aug 2002 */
03960 
03961    *(dset->wod_daxes)      = *daxes ;            /* copy insides of daxes */
03962    dset->wod_flag          = True ;              /* mark for warp-on-demand */
03963    dset->vox_warp->type    = ILLEGAL_TYPE ;      /* mark for recomputation */
03964 
03965    /* copy the new geometric information into various places */
03966 
03967    *(dset->daxes)     = *(daxes) ;               /* Make daxes permanent */
03968    dkptr->dimsizes[0] = dset->daxes->nxx ;       /* Will cause trouble */
03969    dkptr->dimsizes[1] = dset->daxes->nyy ;       /* if diskptr and     */
03970    dkptr->dimsizes[2] = dset->daxes->nzz ;       /* daxes don't match! */
03971 
03972    /* write the header out */
03973 
03974    good = THD_write_3dim_dataset( NULL,NULL , dset , False ) ;
03975    if( !good ){
03976       fprintf(stderr,"\a\n*** cannot write dataset header ***\n") ;
03977       if( picturize ) UNPICTURIZE ;
03978       RETURN(False) ;
03979    }
03980    STATUS("wrote output header file") ;
03981 
03982    /* purge the datablock that now exists,
03983       then delete the file on disk that now exists (if any) */
03984 
03985    DSET_unlock( dset ) ; /* Feb 1998 */
03986    PURGE_DSET( dset ) ;
03987    COMPRESS_unlink(dkptr->brick_name) ;
03988 
03989    /* refashion its brick data structure,
03990       which requires first saving in a temporary
03991       array the datum type for each sub-brick    */
03992 
03993    { int ibr ; int *typ ;
03994      typ = (int *) XtMalloc( sizeof(int) * dblk->nvals ) ;
03995      for( ibr=0 ; ibr < dblk->nvals ; ibr++ )
03996         typ[ibr] = DBLK_BRICK_TYPE(dblk,ibr) ;
03997      THD_init_datablock_brick( dblk , dblk->nvals , typ ) ;
03998      myXtFree( typ ) ;
03999    }
04000 
04001    if( dblk->total_bytes > 500*1024*1024 ){
04002      int mb = (int)(dblk->total_bytes/(1024*1024)) ;
04003      fprintf(stderr,"++ WARNING: output filesize will be %d Mbytes!\n"
04004                     "++ SUGGEST: increasing voxel size to save disk space!\n",mb) ;
04005    }
04006 
04007    dkptr->storage_mode = STORAGE_UNDEFINED ;       /* just for now */
04008    dblk->malloc_type   = DATABLOCK_MEM_UNDEFINED ;
04009 
04010    /*--- open the output file
04011          (N.B.: much of the following code is from THD_write_datablock) ---*/
04012 
04013    /*-- create directory if necessary --*/
04014 
04015    if( ! THD_is_directory(dkptr->directory_name) ){
04016       kk = mkdir( dkptr->directory_name , THD_MKDIR_MODE ) ;
04017       if( kk != 0 ){
04018          fprintf(stderr,
04019               "\a\n*** cannot mkdir new directory: %s\n",dkptr->directory_name) ;
04020          if( picturize ) UNPICTURIZE ;
04021          RETURN(False) ;
04022       }
04023       STATUS("created subdirectory") ;
04024    }
04025 
04026    /*-- open output file --*/
04027 
04028    cmode = THD_get_write_compression() ;
04029    far = COMPRESS_fopen_write( dkptr->brick_name , cmode ) ;
04030    if( far == NULL ){
04031       fprintf(stderr,
04032         "\a\n*** cannot open output file %s\n",dkptr->brick_name) ;
04033       if( picturize ) UNPICTURIZE ;
04034       RETURN(False) ;
04035    }
04036    STATUS("created output brick file") ;
04037 
04038    /*--------- now, create each slice and write it out ----------*/
04039 
04040    nx = dset->daxes->nxx ;
04041    ny = dset->daxes->nyy ;  npix = nx*ny ;
04042    nz = dset->daxes->nzz ;
04043    nv = dkptr->nvals     ;  nzv  = nz*nv ;
04044 
04045    isfunc = ISFUNC(dset) ;  /* 09 Dec 1997 */
04046    if( ! isfunc )
04047       resam_mode = im3d->vinfo->anat_resam_mode ;
04048 
04049    native_order = mri_short_order() ;                           /* 23 Nov 1999 */
04050    save_order   = (dkptr->byte_order > 0) ? dkptr->byte_order
04051                                           : THD_get_write_order() ;
04052 
04053    for( ival=0 ; ival < nv ; ival++ ){  /* for each sub-brick */
04054 
04055       dsiz = mri_datum_size( DSET_BRICK_TYPE(dset,ival) ) ;
04056 
04057       /** force return of unscaled slices for output **/
04058 
04059       brfac_save                   = DBLK_BRICK_FACTOR(dblk,ival) ;
04060       DBLK_BRICK_FACTOR(dblk,ival) = 0.0 ;
04061 
04062       if( isfunc )
04063          resam_mode = (DSET_BRICK_STATCODE(dset,ival) > 0)  /* 09 Dec 1997 */
04064                       ? im3d->vinfo->thr_resam_mode
04065                       : im3d->vinfo->func_resam_mode ;
04066 
04067       for( kk=0 ; kk < nz ; kk++ ){  /* for each slice */
04068 
04069          im = AFNI_dataset_slice( dset , 3 , kk , ival , resam_mode ) ;
04070 STATUS("have new image") ;
04071 
04072          if( im == NULL ){
04073             fprintf(stderr,"\a\n*** failure to compute dataset slice %d\n",kk) ;
04074             COMPRESS_fclose(far) ;
04075             COMPRESS_unlink( dkptr->brick_name ) ;
04076             if( picturize ) UNPICTURIZE ;
04077 #ifndef DONT_USE_METER
04078             MCW_popdown_meter(meter) ;
04079 #endif
04080             RETURN(False) ;
04081          }
04082 
04083 #ifdef AFNI_DEBUG
04084 { char str[256] ;
04085   sprintf(str,"writing slice %d: type=%s nx=%d ny=%d\n",
04086           kk,MRI_TYPE_NAME(im) , im->nx,im->ny ) ;
04087   STATUS(str) ; }
04088 #endif
04089 
04090          imar = mri_data_pointer(im) ;
04091          if( save_order != native_order ){                   /* 23 Nov 1999 */
04092             switch( im->kind ){
04093                case MRI_short:   mri_swap2(  npix,imar) ; break ;
04094                case MRI_float:
04095                case MRI_int:     mri_swap4(  npix,imar) ; break ;
04096                case MRI_complex: mri_swap4(2*npix,imar) ; break ;
04097             }
04098          }
04099          code = fwrite( imar , dsiz , npix , far ) ;
04100          mri_free(im) ;
04101 
04102          if( code != npix ){
04103             fprintf(stderr,
04104               "\a\n*** failure to write dataset slice %d (is disk full?)\n",kk) ;
04105             COMPRESS_fclose(far) ;
04106             COMPRESS_unlink( dkptr->brick_name ) ;
04107             if( picturize ) UNPICTURIZE ;
04108 #ifndef DONT_USE_METER
04109             MCW_popdown_meter(meter) ;
04110 #endif
04111             RETURN(False) ;
04112          }
04113 
04114          if( picturize && kk%7 == 0 ){
04115             Pixmap pp ;
04116             pp = (kk%2 == 0) ? brain_pixmap : afni48_pixmap ;
04117             PICTURIZE(pp) ;
04118             XmUpdateDisplay( im3d->vwid->picture ) ;
04119          }
04120 
04121 #ifndef DONT_USE_METER
04122          meter_perc = (int) ( 100.0 * (kk+ival*nz) / nzv ) ;
04123          if( meter_perc != meter_pold ){
04124             MCW_set_meter( meter , meter_perc ) ;
04125             meter_pold = meter_perc ;
04126          }
04127 #endif
04128 
04129       } /* end of loop over kk (z-direction) */
04130 
04131       /* restore the correct scaling of this sub-brick */
04132 
04133       DBLK_BRICK_FACTOR(dblk,ival) = brfac_save ;
04134 
04135    } /* end of loop over iv (nvals direction) */
04136    STATUS("all slices written") ;
04137 
04138    /*--------------------- done!!! ---------------------*/
04139 
04140    COMPRESS_fclose(far) ;
04141    STATUS("output file closed") ;
04142 
04143    if( picturize ) PICTURIZE(logo_pixmap) ;
04144 #ifndef DONT_USE_METER
04145    MCW_set_meter( meter , 100 ) ;
04146 #endif
04147 
04148    /*--- do a little surgery on the dataset's storage flags ---*/
04149 
04150    dkptr->storage_mode = STORAGE_BY_BRICK ;
04151 #if MMAP_THRESHOLD > 0
04152    dblk->malloc_type   = (dblk->total_bytes > MMAP_THRESHOLD)
04153                          ? DATABLOCK_MEM_MMAP : DATABLOCK_MEM_MALLOC ;
04154 
04155    if( cmode >= 0 ) dblk->malloc_type = DATABLOCK_MEM_MALLOC ;
04156    DBLK_mmapfix(dblk) ;  /* 28 Mar 2005 */
04157 #else
04158    dblk->malloc_type   = DATABLOCK_MEM_MALLOC ;
04159 #endif
04160 
04161    /*--- recompute the statistics and rewrite the header to hold them ---*/
04162 
04163    STATUS("recomputing statistics") ;
04164 
04165    THD_load_statistics( dset ) ;
04166 
04167    STATUS("rewriting header") ;
04168 
04169    tross_Append_History( dset , "AFNI: resampled and rewritten" ) ;
04170    (void) THD_write_3dim_dataset( NULL,NULL , dset , False ) ;
04171 
04172    STATUS("purging datablock") ;
04173 
04174    PURGE_DSET( dset ) ;
04175 
04176    if( picturize ) UNPICTURIZE ;
04177 #ifndef DONT_USE_METER
04178    MCW_popdown_meter(meter) ;
04179 #endif
04180 
04181    myXtFree(dset->wod_daxes) ; myXtFree(dset->vox_warp) ;  /* 02 Nov 1996 */
04182 
04183    RETURN(True) ;
04184 }

void AFNI_register_fimfunc char *   ,
int   ,
generic_func  ,
void *   
 

Definition at line 75 of file afni_fimfunc.c.

References ENTRY, MCW_function_list::flags, MCW_function_list::func_code, MCW_function_list::func_data, FUNC_FIM, MCW_function_list::func_init, MCW_function_list::funcs, generic_func, GLOBAL_library, MCW_function_list::labels, MCW_function_list::num, AFNI_library_type::registered_fim, user_data, and XtRealloc.

Referenced by MAIN_workprocess().

00077 {
00078    MCW_function_list *rlist = &(GLOBAL_library.registered_fim) ;
00079    int num = rlist->num ;
00080 
00081 ENTRY("AFNI_register_fimfunc") ;
00082 
00083    if( menu_name == NULL || menu_name[0] == '\0' ||
00084        nbrik <= 0        || user_func == NULL      ) EXRETURN ; /* bad inputs! */
00085 
00086    if( num == sizeof(int) ) EXRETURN ;  /* too many already! */
00087 
00088    if( num == 0 ){
00089      rlist->flags=NULL; rlist->labels=NULL; rlist->funcs=NULL;
00090      rlist->func_data=NULL; rlist->func_code=NULL; rlist->func_init=NULL;
00091    }
00092 
00093    rlist->flags = (int *) XtRealloc( (char *)rlist->flags, sizeof(int)*(num+1) ) ;
00094 
00095    rlist->labels = (char **) XtRealloc( (char *)rlist->labels ,
00096                                         sizeof(char *)*(num+1) ) ;
00097 
00098    rlist->funcs = (generic_func **) XtRealloc( (char *)rlist->funcs ,
00099                                                sizeof(generic_func *)*(num+1) ) ;
00100 
00101    rlist->func_data = (void **) XtRealloc( (char *)rlist->func_data ,
00102                                            sizeof(void *)*(num+1) ) ;
00103 
00104    rlist->func_code = (int *) XtRealloc( (char *)rlist->func_code, sizeof(int)*(num+1) ) ;
00105 
00106    rlist->func_init = (generic_func **) XtRealloc( (char *)rlist->func_init ,
00107                                                    sizeof(generic_func *)*(num+1) ) ;
00108 
00109    rlist->flags[num]     = nbrik ;
00110    rlist->labels[num]    = XtNewString(menu_name) ;
00111    rlist->funcs[num]     = user_func ;
00112    rlist->func_data[num] = user_data ;
00113    rlist->func_code[num] = FUNC_FIM  ;
00114    rlist->func_init[num] = NULL ;
00115 
00116    rlist->num = num+1 ;
00117    EXRETURN ;
00118 }

void AFNI_register_nD_func_init int    nd,
generic_func   fin
 

Add init function to last registered function. This function should be called just after AFNI_register_nD_function(). [21 Jul 2003]

Definition at line 10138 of file afni.c.

References MCW_function_list::func_init, generic_func, GLOBAL_library, MCW_function_list::num, AFNI_library_type::registered_0D, AFNI_library_type::registered_1D, AFNI_library_type::registered_2D, and AFNI_library_type::registered_slice_proj.

Referenced by EXP0D_init(), and PLUGIN_init().

10139 {
10140    MCW_function_list * rlist ;
10141    int num ;
10142 
10143    if( fin == NULL ) return ;
10144 
10145    switch( nd ){
10146       default: return ;
10147 
10148       case 0: rlist = &(GLOBAL_library.registered_0D) ; break ;
10149       case 1: rlist = &(GLOBAL_library.registered_1D) ; break ;
10150       case 2: rlist = &(GLOBAL_library.registered_2D) ; break ;
10151 
10152       case -1: rlist= &(GLOBAL_library.registered_slice_proj) ; break ;
10153    }
10154 
10155    num = rlist->num ; if( num <= 0 ) return ;
10156    rlist->func_init[num-1] = fin ;
10157    return ;
10158 }

void AFNI_register_nD_function int    nd,
char *    name,
generic_func   func,
int    flags
 

Put a function on the list of n-dimensional transformations

  • modified 03 Nov 1996 from just 0D transforms
  • modified 22 Apr 1997 to add int flags to each function
  • modified 31 Jan 2002 to add slice_proj for nd=-1
  • modified 21 Jul 2003 to add func_init ------------------------------------------------------------------------

Definition at line 10082 of file afni.c.

References MCW_function_list::flags, flags, MCW_function_list::func_code, MCW_function_list::func_data, MCW_function_list::func_init, MCW_function_list::funcs, generic_func, GLOBAL_library, MCW_function_list::labels, name, MCW_function_list::num, AFNI_library_type::registered_0D, AFNI_library_type::registered_1D, AFNI_library_type::registered_2D, AFNI_library_type::registered_slice_proj, and XtRealloc.

Referenced by PLUGIN_init().

10084 {
10085    MCW_function_list * rlist ;
10086    int num ;
10087 
10088    if( name == NULL || strlen(name) == 0 || func == NULL ) return ;
10089 
10090    switch( nd ){
10091       default: return ;
10092 
10093       case 0: rlist = &(GLOBAL_library.registered_0D) ; break ;
10094       case 1: rlist = &(GLOBAL_library.registered_1D) ; break ;
10095       case 2: rlist = &(GLOBAL_library.registered_2D) ; break ;
10096 
10097       case -1: rlist= &(GLOBAL_library.registered_slice_proj) ; break ;
10098    }
10099 
10100    num = rlist->num ;
10101 
10102    if( num == 0 ){
10103      rlist->flags=NULL; rlist->labels=NULL; rlist->funcs=NULL;
10104      rlist->func_data=NULL; rlist->func_code=NULL; rlist->func_init=NULL;
10105    }
10106 
10107    rlist->flags = (int *) XtRealloc( (char *)rlist->flags, sizeof(int)*(num+1) ) ;
10108 
10109    rlist->labels = (char **) XtRealloc( (char *)rlist->labels ,
10110                                         sizeof(char *)*(num+1) ) ;
10111 
10112    rlist->funcs = (generic_func **) XtRealloc( (char *)rlist->funcs ,
10113                                                sizeof(generic_func *)*(num+1) ) ;
10114 
10115    rlist->func_data = (void **) XtRealloc( (char *)rlist->func_data ,
10116                                            sizeof(void *)*(num+1) ) ;
10117 
10118    rlist->func_code = (int *) XtRealloc( (char *)rlist->func_code, sizeof(int)*(num+1) ) ;
10119 
10120    rlist->func_init = (generic_func **) XtRealloc( (char *)rlist->func_init ,
10121                                                    sizeof(generic_func *)*(num+1) ) ;
10122 
10123    rlist->flags[num]     = flags ;
10124    rlist->labels[num]    = XtNewString(name) ;
10125    rlist->funcs[num]     = func ;
10126    rlist->func_data[num] = NULL ;
10127    rlist->func_code[num] = nd ;
10128    rlist->func_init[num] = NULL ;
10129 
10130    rlist->num = num+1 ;
10131    return ;
10132 }

void AFNI_resam_av_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 1567 of file afni_func.c.

References AFNI_modify_viewing(), AFNI_datamode_widgets::anat_resam_av, AFNI_view_info::anat_resam_mode, Three_D_View::b123_anat, Three_D_View::b123_fim, Three_D_View::b231_anat, Three_D_View::b231_fim, Three_D_View::b312_anat, Three_D_View::b312_fim, AFNI_widget_set::dmode, ENTRY, AFNI_datamode_widgets::func_resam_av, AFNI_view_info::func_resam_mode, IM3D_VALID, MCW_arrowval::ival, FD_brick::resam_code, RESET_AFNI_QUIT, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, STATUS, AFNI_view_info::tempflag, AFNI_datamode_widgets::thr_resam_av, FD_brick::thr_resam_code, AFNI_view_info::thr_resam_mode, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_set_func_resam().

01568 {
01569    Three_D_View *im3d = (Three_D_View *) cd ;
01570    int reunder , redisplay ;
01571 
01572 ENTRY("AFNI_resam_av_CB") ;
01573 
01574    /* sanity check */
01575 
01576    if( ! IM3D_VALID(im3d) ) EXRETURN ;
01577 
01578    /* assign resampling type based on which arrowval, and redraw */
01579 
01580    if( av == im3d->vwid->dmode->func_resam_av ){
01581 STATUS("set func_resam_mode") ;
01582       im3d->vinfo->func_resam_mode = av->ival ;
01583       if( im3d->b123_fim != NULL ){
01584          im3d->b123_fim->resam_code =
01585           im3d->b231_fim->resam_code =
01586            im3d->b312_fim->resam_code = im3d->vinfo->func_resam_mode ;
01587       }
01588 
01589    } else if( av == im3d->vwid->dmode->thr_resam_av ){  /* 09 Dec 1997 */
01590 STATUS("set thr_resam_mode") ;
01591       im3d->vinfo->thr_resam_mode = av->ival ;
01592       if( im3d->b123_fim != NULL ){
01593          im3d->b123_fim->thr_resam_code =
01594           im3d->b231_fim->thr_resam_code =
01595            im3d->b312_fim->thr_resam_code = im3d->vinfo->thr_resam_mode ;
01596       }
01597 
01598    } else if( av == im3d->vwid->dmode->anat_resam_av ){
01599 STATUS("set anat_resam_mode") ;
01600       im3d->vinfo->anat_resam_mode = av->ival ;
01601       im3d->b123_anat->resam_code =
01602        im3d->b231_anat->resam_code =
01603         im3d->b312_anat->resam_code = im3d->vinfo->anat_resam_mode ;
01604    }
01605 
01606    SHOW_AFNI_PAUSE ;
01607    im3d->vinfo->tempflag = 1 ;
01608    AFNI_modify_viewing( im3d , False ) ;  /* redisplay */
01609    SHOW_AFNI_READY ;
01610    RESET_AFNI_QUIT(im3d) ;
01611    EXRETURN ;
01612 }

char* AFNI_resam_texter MCW_arrowval  ,
XtPointer   
 

Definition at line 1560 of file afni_func.c.

References MCW_arrowval::ival.

01561 {
01562    return RESAM_shortstr[av->ival] ;
01563 }

void AFNI_resam_vox_av_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 6336 of file afni.c.

References AFNI_modify_viewing(), AFNI_widget_set::dmode, ENTRY, MCW_arrowval::fval, IM3D_VALID, AFNI_view_info::resam_vox, AFNI_datamode_widgets::resam_vox_av, RESET_AFNI_QUIT, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, AFNI_view_info::tempflag, Three_D_View::vinfo, and Three_D_View::vwid.

06337 {
06338    Three_D_View * im3d = (Three_D_View *) cd ;
06339 
06340 ENTRY("AFNI_resam_vox_av_CB") ;
06341 
06342    if( ! IM3D_VALID(im3d) ) EXRETURN ;
06343 
06344    if( av == im3d->vwid->dmode->resam_vox_av ){
06345       im3d->vinfo->resam_vox = av->fval ;
06346       SHOW_AFNI_PAUSE ;
06347       im3d->vinfo->tempflag = 1 ;
06348       AFNI_modify_viewing( im3d , True ) ;  /* redisplay */
06349       SHOW_AFNI_READY ;
06350    }
06351    RESET_AFNI_QUIT(im3d) ;
06352    EXRETURN ;
06353 }

void AFNI_rescan_all_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 2984 of file afni_func.c.

References AFNI_process_dsetchange(), AFNI_rescan_session(), AFNI_library_type::controllers, ENTRY, GLOBAL_library, IM3D_OPEN, MAX_CONTROLLERS, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, THD_sessionlist::num_sess, POPDOWN_strlist_chooser, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, and AFNI_library_type::sslist.

02985 {
02986    int iss , cc=0 ;
02987    Three_D_View *im3d ;
02988 
02989 ENTRY("AFNI_rescan_all_CB") ;
02990 
02991    SHOW_AFNI_PAUSE ;
02992    for( iss=0 ; iss < GLOBAL_library.sslist->num_sess ; iss++ )
02993       cc += AFNI_rescan_session( iss ) ;
02994    if( cc > 0 ){
02995       char str[256] ;
02996       POPDOWN_strlist_chooser ;
02997       sprintf(str," \n"
02998                   " Added %d datasets total \n" , cc ) ;
02999       (void) MCW_popup_message( w , str , MCW_USER_KILL | MCW_TIMER_KILL ) ;
03000    } else {
03001       (void) MCW_popup_message( w ,
03002                                 " \n Found no new datasets \n" ,
03003                                  MCW_USER_KILL | MCW_TIMER_KILL ) ;
03004    }
03005 
03006 #if 1
03007    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){    /* 31 Mar 1999 */
03008       im3d = GLOBAL_library.controllers[cc] ;
03009       if( IM3D_OPEN(im3d) ) AFNI_process_dsetchange( im3d ) ;
03010    }
03011 #endif
03012 
03013    SHOW_AFNI_READY ;
03014    EXRETURN ;
03015 }

void AFNI_rescan_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

loop over all datasets in array, place in current session *

Definition at line 2951 of file afni_func.c.

References AFNI_process_dsetchange(), AFNI_rescan_session(), AFNI_library_type::controllers, ENTRY, GLOBAL_library, IM3D_OPEN, MAX_CONTROLLERS, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, POPDOWN_strlist_chooser, AFNI_view_info::sess_num, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, THD_sessionlist::ssar, AFNI_library_type::sslist, THD_MAX_NAME, and Three_D_View::vinfo.

Referenced by AFNI_drive_rescan_controller().

02952 {
02953    Three_D_View *im3d = (Three_D_View *) cd , *qq3d ;
02954    int cc ;
02955    char str[256+THD_MAX_NAME] ;
02956 
02957 ENTRY("AFNI_rescan_CB") ;
02958 
02959    SHOW_AFNI_PAUSE ;
02960    cc = AFNI_rescan_session( im3d->vinfo->sess_num ) ;
02961    POPDOWN_strlist_chooser ;
02962    if( cc > 0 ){
02963       sprintf(str," \n"
02964                   " Added %d datasets to \n"
02965                   " %s\n" ,
02966              cc ,
02967              GLOBAL_library.sslist->ssar[im3d->vinfo->sess_num]->sessname ) ;
02968       (void) MCW_popup_message( w , str , MCW_USER_KILL | MCW_TIMER_KILL ) ;
02969    }
02970 
02971 #if 1
02972    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){    /* 31 Mar 1999 */
02973       qq3d = GLOBAL_library.controllers[cc] ;
02974       if( IM3D_OPEN(qq3d) ) AFNI_process_dsetchange( qq3d ) ;
02975    }
02976 #endif
02977 
02978    SHOW_AFNI_READY ;
02979    EXRETURN ;
02980 }

int AFNI_rescan_session int    sss
 

Use the old or the new rescan session methods -- 07 Feb 2003. ------------------------------------------------------------------------

Definition at line 3338 of file afni_func.c.

References AFNI_rescan_session_NEW(), AFNI_rescan_session_OLD(), and getenv().

Referenced by AFNI_rescan_all_CB(), and AFNI_rescan_CB().

03339 {
03340    char *eee = getenv("AFNI_RESCAN_METHOD") ;
03341 
03342    return ( eee == NULL || strcmp(eee,"REPLACE") != 0 )
03343           ? AFNI_rescan_session_NEW( sss )
03344           : AFNI_rescan_session_OLD( sss ) ;
03345 }

void AFNI_rescan_timeseries_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 3351 of file afni_func.c.

References ADDTO_IMARR, ADDTO_SARR, BEEPIT, DESTROY_SARR, ENTRY, FREE_IMARR, GLOBAL_library, AFNI_library_type::have_dummy_dataset, IMARR_COUNT, IMARR_SUBIMAGE, INIT_SARR, mri_free(), MRI_IMAGE::name, THD_sessionlist::num_sess, POPDOWN_timeseries_chooser, THD_session::sessname, THD_sessionlist::ssar, AFNI_library_type::sslist, THD_get_many_timeseries(), and AFNI_library_type::timeseries.

Referenced by AFNI_finalize_read_sess_CB().

03352 {
03353    int iss , inew , jold , nnew , nold , nadd=0 ;
03354    THD_string_array *dlist ;
03355    THD_session *ss ;
03356    MRI_IMARR *newtsar ;
03357    MRI_IMAGE *newim , *oldim ;
03358 
03359 ENTRY("AFNI_rescan_timeseries_CB") ;
03360 
03361    /** assemble list of directories **/
03362 
03363    if( GLOBAL_library.have_dummy_dataset ){ BEEPIT ; EXRETURN ; }
03364 
03365    INIT_SARR( dlist ) ;
03366 
03367    for( iss=0 ; iss < GLOBAL_library.sslist->num_sess ; iss++ ){
03368       ss = GLOBAL_library.sslist->ssar[iss] ;
03369       ADDTO_SARR(dlist,ss->sessname) ;
03370    }
03371 
03372    /** read timeseries into a new array **/
03373 
03374    newtsar = THD_get_many_timeseries( dlist ) ;
03375    DESTROY_SARR( dlist ) ;
03376    if( newtsar == NULL ) EXRETURN ;
03377 
03378    /** check to see which ones are in the old list **/
03379 
03380    nnew = IMARR_COUNT(newtsar) ;
03381    nold = IMARR_COUNT(GLOBAL_library.timeseries) ;
03382 
03383    for( inew=0 ; inew < nnew ; inew++ ){
03384       newim = IMARR_SUBIMAGE(newtsar,inew) ;  /* new timeseries */
03385       for( jold=0 ; jold < nold ; jold++ ){
03386          oldim = IMARR_SUBIMAGE(GLOBAL_library.timeseries,jold) ; /* old one */
03387 
03388          if( oldim != NULL && oldim->name != NULL &&        /* break out of loop */
03389              strcmp(oldim->name,newim->name) == 0 ) break ; /* when new == old */
03390       }
03391 
03392       if( jold == nold ){
03393          ADDTO_IMARR(GLOBAL_library.timeseries,newim); nadd++;  /* is new */
03394       } else {
03395          mri_free(newim) ;                                      /* is old */
03396       }
03397    }
03398 
03399    if( nadd > 0 ) POPDOWN_timeseries_chooser ;
03400    FREE_IMARR(newtsar) ;
03401    EXRETURN ;
03402 }

void AFNI_reset_func_range Three_D_View  
 

Definition at line 4589 of file afni_func.c.

References AFNI_autorange_label(), AFNI_range_label(), AFNI_view_info::autorange_label, ENTRY, AFNI_view_info::fim_autorange, AFNI_view_info::fim_range, AFNI_widget_set::func, MCW_arrowval::fval, HINTIZE_pbar, IM3D_VALID, MCW_expose_widget(), AFNI_view_info::old_range_label, RANGE_AUTOBUT, AFNI_function_widgets::range_av, AFNI_function_widgets::range_bbox, AFNI_function_widgets::range_label, AFNI_view_info::use_autorange, Three_D_View::vinfo, Three_D_View::vwid, and MCW_bbox::wbut.

Referenced by AFNI_do_many_writes(), AFNI_fimmer_redisplay(), AFNI_func_overlay(), AFNI_setup_viewing(), AFNI_write_dataset_CB(), and PLUTO_dset_redisplay_mode().

04590 {
04591    XmString xstr ;
04592    Boolean  same ;
04593 
04594 ENTRY("AFNI_reset_func_range") ;
04595 
04596    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04597 
04598    /*-- the range label widget --*/
04599 
04600    xstr = AFNI_range_label( im3d ) ;
04601    same = XmStringCompare( xstr , im3d->vinfo->old_range_label ) ;
04602 
04603    if( same == False ){
04604       XtVaSetValues( im3d->vwid->func->range_label ,    /* redisplay */
04605                         XmNlabelString , xstr ,         /* if changed */
04606                      NULL ) ;
04607       MCW_expose_widget( im3d->vwid->func->range_label ) ; /* redraw now! */
04608       XmStringFree(im3d->vinfo->old_range_label) ;         /* toss old */
04609       im3d->vinfo->old_range_label = xstr ;                /* new old */
04610    } else {
04611       XmStringFree( xstr ) ;  /* was same --> don't need this copy */
04612    }
04613 
04614    /*-- the autorange toggle widget --*/
04615 
04616    xstr = AFNI_autorange_label( im3d ) ;
04617    same = XmStringCompare( xstr , im3d->vinfo->autorange_label ) ;
04618 
04619    if( same == False ){
04620       Widget www = im3d->vwid->func->range_bbox->wbut[RANGE_AUTOBUT] ;
04621       XtVaSetValues( www , XmNlabelString , xstr , NULL ) ;
04622       MCW_expose_widget( www ) ;
04623       XmStringFree(im3d->vinfo->autorange_label) ;
04624       im3d->vinfo->autorange_label = xstr ;
04625    } else {
04626       XmStringFree( xstr ) ;  /* was same --> don't need this copy */
04627    }
04628 
04629    /*-- the functional range itself --*/
04630 
04631    im3d->vinfo->fim_range =
04632       (im3d->vinfo->use_autorange) ? (im3d->vinfo->fim_autorange)
04633                                    : (im3d->vwid->func->range_av->fval) ;
04634 
04635    HINTIZE_pbar(im3d) ; /* 22 Aug 2001 */
04636 
04637    EXRETURN ;
04638 }

void AFNI_run_script_CB Widget    w,
XtPointer    cd,
XtPointer    cbs
 

Get a filename to run as an AFNI script. 22 Jan 2003 - RWCox. -----------------------------------------------------------------------------

Definition at line 1709 of file afni_splash.c.

References AFNI_finalrun_script_CB(), ENTRY, MCW_choose_string(), AFNI_widget_set::picture, and Three_D_View::vwid.

01710 {
01711    Three_D_View *im3d = (Three_D_View *) cd ;
01712 
01713 ENTRY("AFNI_run_script_CB") ;
01714 
01715    MCW_choose_string( im3d->vwid->picture ,
01716                       "Enter AFNI script filename:" ,
01717                       NULL , AFNI_finalrun_script_CB , cd ) ;
01718    EXRETURN ;
01719 }

void AFNI_save_layout_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 1406 of file afni_splash.c.

References AFNI_finalsave_layout_CB(), ENTRY, MCW_choose_string(), AFNI_widget_set::picture, and Three_D_View::vwid.

01407 {
01408    Three_D_View *im3d = (Three_D_View *) cd ;
01409 
01410 ENTRY("AFNI_save_layout_CB") ;
01411 
01412    MCW_choose_string( im3d->vwid->picture ,
01413                       "Layout filename [blank => .afni.startup_script]:" ,
01414                       NULL , AFNI_finalsave_layout_CB , cd ) ;
01415    EXRETURN ;
01416 }

void AFNI_see_func_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 18 of file afni_func.c.

References AFNI_disable_suma_overlay(), AFNI_redisplay_func(), ENTRY, Three_D_View::fim_now, AFNI_view_info::func_visible, IM3D_VALID, ISVALID_3DIM_DATASET, MCW_set_bbox(), MCW_val_bbox(), RESET_AFNI_QUIT, AFNI_viewing_widgets::see_func_bbox, AFNI_widget_set::view, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_set_func_visible().

00019 {
00020    Three_D_View *im3d = (Three_D_View *) cd ;
00021    int old_val , new_val ;
00022 
00023 ENTRY("AFNI_see_func_CB") ;
00024 
00025    if( ! IM3D_VALID(im3d) ) EXRETURN ;
00026 
00027    old_val = (im3d->vinfo->func_visible) ? 1 : 0 ;
00028    new_val = MCW_val_bbox( im3d->vwid->view->see_func_bbox ) ;
00029 
00030    if( old_val != new_val ){
00031       im3d->vinfo->func_visible = (new_val == 1) ? True : False ;
00032       if( ! ISVALID_3DIM_DATASET(im3d->fim_now) ){             /* 29 Apr 1997 */
00033          im3d->vinfo->func_visible = False ;
00034          MCW_set_bbox( im3d->vwid->view->see_func_bbox , 0 ) ; /* 29 Jan 1999 */
00035       }
00036       AFNI_disable_suma_overlay( 0 ) ; /* 16 Jun 2003 */
00037       AFNI_redisplay_func( im3d ) ;    /* 05 Mar 2002 */
00038    }
00039 
00040    RESET_AFNI_QUIT(im3d) ;
00041    EXRETURN ;
00042 }

void AFNI_see_marks_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7727 of file afni.c.

References AFNI_set_viewpoint(), client_data, ENTRY, IM3D_VALID, AFNI_widget_set::marks, MCW_val_bbox(), AFNI_marks_widgets::ov_visible, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, AFNI_viewing_widgets::see_marks_bbox, AFNI_marks_widgets::tag_visible, AFNI_widget_set::view, and Three_D_View::vwid.

Referenced by AFNI_define_CB(), and AFNI_marks_action_CB().

07729 {
07730    Three_D_View * im3d = (Three_D_View *) client_data ;
07731    AFNI_marks_widgets * marks ;
07732    AFNI_viewing_widgets * view ;
07733    int bval ;
07734 
07735 ENTRY("AFNI_see_marks_CB") ;
07736 
07737    if( ! IM3D_VALID(im3d) ) EXRETURN ;
07738 
07739    view  = im3d->vwid->view ;
07740    marks = im3d->vwid->marks ;
07741    bval  = MCW_val_bbox( view->see_marks_bbox ) ;
07742 
07743    marks->tag_visible = marks->ov_visible = (bval == 0) ? (False) : (True) ;
07744 
07745    if( w != NULL )
07746       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
07747 
07748    RESET_AFNI_QUIT(im3d) ;
07749    EXRETURN ;
07750 }

void AFNI_see_ttatlas_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 8236 of file afni.c.

References AFNI_set_viewpoint(), Three_D_View::anat_now, AFNI_widget_set::func, MCW_val_bbox(), REDISPLAY_OVERLAY, AFNI_view_info::see_ttatlas, AFNI_function_widgets::see_ttatlas_bbox, VIEW_TALAIRACH_TYPE, THD_3dim_dataset::view_type, Three_D_View::vinfo, and Three_D_View::vwid.

08237 {
08238    Three_D_View * im3d = (Three_D_View *) cd ;
08239    int newsee = MCW_val_bbox(im3d->vwid->func->see_ttatlas_bbox) ;
08240 
08241    if( newsee == im3d->vinfo->see_ttatlas ) return ;
08242 
08243    im3d->vinfo->see_ttatlas = newsee ;
08244 
08245    if( im3d->anat_now->view_type == VIEW_TALAIRACH_TYPE )
08246       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;  /* redraw */
08247 
08248    return ;
08249 }

void AFNI_seq_send_CB MCW_imseq   seq,
FD_brick   br,
ISQ_cbs   cbs
 

here is where we attach "bar" to the dataset *

Definition at line 3098 of file afni.c.

References FD_brick::a123, abs, AFNI_crosshair_gap_CB(), AFNI_IGNORE_EVERYTHING, AFNI_IGNORE_NOTHING, AFNI_process_drawing(), AFNI_set_viewpoint(), AFNI_view_setter(), Three_D_View::anat_now, AFNI_widget_set::butx, AFNI_widget_set::buty, CLEAR_MONTAGE, AFNI_view_info::crosshair_visible, CURRENT_DAXES, ENTRY, ISQ_cbs::event, free, GRA_handle_keypress(), AFNI_view_info::i1, Three_D_View::ignore_seq_callbacks, THD_ivec3::ijk, IM3D_VALID, AFNI_widget_set::imag, AFNI_imaging_widgets::image_xyz_pb, AFNI_imaging_widgets::image_yzx_pb, AFNI_imaging_widgets::image_zxy_pb, INIT_bigscroll, INIT_BKGD_LAB, isqCR_appress, isqCR_button2_key, isqCR_button2_points, isqCR_buttonpress, isqCR_destroy, isqCR_dxminus, isqCR_dxplus, isqCR_dyminus, isqCR_dyplus, isqCR_force_redisplay, isqCR_getxynim, isqCR_keypress, isqCR_newimage, isqCR_newmontage, AFNI_view_info::j2, AFNI_view_info::k3, ISQ_cbs::key, LOAD_DSET_VIEWS, malloc, MCW_invert_widget(), myXtFree, FD_brick::n1, FD_brick::n2, FD_brick::n3, ISQ_cbs::nim, NORMAL_cursorize, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, MCW_imseq::parent, PLANAR_MODE, PLUTO_force_rebar(), PLUTO_force_redisplay(), AFNI_imaging_widgets::popmenu, ISQ_cbs::reason, REDISPLAY_OPTIONAL, REDISPLAY_OVERLAY, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, SAVE_VPT, MCW_imseq::status, STATUS, TEMP_IVEC3, THD_3dind_to_fdind(), THD_fdind_to_3dind(), UNDO_MODE, ISQ_cbs::userdata, VIEWER_TO_GRAPHER, Three_D_View::vinfo, Three_D_View::vwid, AFNI_view_info::xhairs_ndown, AFNI_view_info::xhairs_nskip, AFNI_view_info::xhairs_nup, AFNI_view_info::xhairs_show_montage, ISQ_cbs::xim, and ISQ_cbs::yim.

Referenced by AFNI_brick_to_mri().

03099 {
03100    Three_D_View * im3d = (Three_D_View *) seq->parent ;
03101 
03102 ENTRY("AFNI_seq_send_CB") ;
03103 
03104 if(PRINT_TRACING)
03105 { char str[256] ; sprintf(str,"reason=%d",cbs->reason) ; STATUS(str) ; }
03106 
03107    if( ! IM3D_VALID(im3d) ||
03108        (   im3d->ignore_seq_callbacks == AFNI_IGNORE_EVERYTHING
03109         && cbs->reason                != isqCR_getxynim        ) ) EXRETURN ;
03110 
03111    switch( cbs->reason ){
03112 
03113       default: break ;
03114 
03115       case isqCR_destroy:{
03116          MCW_imseq * sxyz = im3d->s123 ,
03117                    * syzx = im3d->s231 ,
03118                    * szxy = im3d->s312  ;
03119          Widget w ;
03120          int a3 = br->a123.ijk[2] ,   /* z axis of the brick?    */
03121              az = abs(a3) - 1       ; /* 0,1,2 for dataset x,y,z */
03122 
03123               if( seq == sxyz ){
03124                  w = im3d->vwid->imag->image_xyz_pb ; im3d->s123 = NULL ; }
03125          else if( seq == syzx ){
03126                  w = im3d->vwid->imag->image_yzx_pb ; im3d->s231 = NULL ; }
03127          else if( seq == szxy ){
03128                  w = im3d->vwid->imag->image_zxy_pb ; im3d->s312 = NULL ; }
03129          else
03130                  EXRETURN ;  /* something goofy happened? */
03131 
03132 #if 1
03133          myXtFree( seq->status ) ; /* 28 Sep 1998: via Purify */
03134 #endif
03135          myXtFree( seq ) ;
03136          MCW_invert_widget(w) ;  /* back to normal */
03137          NORMAL_cursorize(w) ;   /* 20 Jul 2005 */
03138          INIT_BKGD_LAB(im3d) ;
03139          AFNI_view_setter(im3d,NULL) ;
03140 
03141          /* July 1996: redraw if we just lost a crosshair montage
03142             (it would have been in the z direction of the brick) */
03143 
03144          if( im3d->vinfo->xhairs_ndown.ijk[az] > 0 ||
03145              im3d->vinfo->xhairs_nup.ijk[az]   > 0   ){
03146 
03147 if(PRINT_TRACING)
03148 { char str[256] ;
03149   sprintf(str,"imseq close on axis %d --> lost xhairs in that direction",az) ;
03150   STATUS(str) ; }
03151 
03152             CLEAR_MONTAGE(im3d,br) ;
03153 
03154             if( im3d->vinfo->xhairs_show_montage &&
03155                 im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING ){
03156 
03157                AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
03158             }
03159          }
03160       }
03161       MPROBE ;
03162       break ;  /* end of destroy */
03163 
03164       case isqCR_buttonpress:{
03165          XButtonEvent *xev = (XButtonEvent *) cbs->event ;
03166 
03167 if(PRINT_TRACING){
03168  char str[256] ;
03169  sprintf(str,"isqCR_buttonpress: button=%d state=%x",xev->button,xev->state) ;
03170  STATUS(str) ; }
03171 
03172          im3d->vwid->butx = xev->x_root ;  /* 17 May 2005 */
03173          im3d->vwid->buty = xev->y_root ;
03174          switch( xev->button ){
03175 
03176             default: EXRETURN ;  /* unused button */
03177 
03178             case Button3:{  /* popup */
03179                XtVaSetValues( im3d->vwid->imag->popmenu ,
03180                                  XmNuserData , (XtPointer) seq ,   /* who */
03181                               NULL ) ;
03182                XmMenuPosition( im3d->vwid->imag->popmenu , xev ) ; /* where */
03183                XtManageChild ( im3d->vwid->imag->popmenu ) ;       /* pop */
03184             }
03185             break ;
03186 
03187             case Button1:{
03188                THD_ivec3 id ;
03189 
03190                /* April 1996:  only use this button press if
03191                                it is inside the confines of the brick */
03192 
03193 if(PRINT_TRACING)
03194 { char str[256] ;
03195   sprintf(str,"Button1 at %d %d %d",
03196           cbs->xim,cbs->yim,cbs->nim) ; STATUS(str) ; }
03197 
03198                if( cbs->xim >= 0 && cbs->xim < br->n1 &&
03199                    cbs->yim >= 0 && cbs->yim < br->n2 &&
03200                    cbs->nim >= 0 && cbs->nim < br->n3   ){
03201 
03202                   id = THD_fdind_to_3dind(
03203                           br , TEMP_IVEC3(cbs->xim,cbs->yim,cbs->nim) );
03204 
03205 if(PRINT_TRACING)
03206 { char str[256] ;
03207   sprintf(str," 3D dataset coordinates %d %d %d",
03208           id.ijk[0],id.ijk[1],id.ijk[2] ) ; STATUS(str) ; }
03209 
03210                   SAVE_VPT(im3d) ;  /* save current location as jumpback */
03211 
03212                   if( im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING ){
03213 
03214                     /* 20 Feb 2003: set plane from which viewpoint is controlled */
03215 
03216                     AFNI_view_setter(im3d,seq) ;
03217                     AFNI_set_viewpoint(
03218                        im3d , id.ijk[0] , id.ijk[1] , id.ijk[2] ,
03219                        (im3d->vinfo->crosshair_visible==True) ?
03220                        REDISPLAY_OVERLAY : REDISPLAY_OPTIONAL ) ;
03221                   }
03222                }
03223             } /* end of button 1 */
03224             break ;
03225          } /* end of switch on which button */
03226       }
03227       break ;  /* end of button press */
03228 
03229       case isqCR_newimage:{
03230          THD_ivec3 id ;
03231 
03232          id = THD_fdind_to_3dind( br, TEMP_IVEC3(-99999,-99999,cbs->nim) );
03233 
03234 if(PRINT_TRACING)
03235 { char str[256] ;
03236   sprintf(str,"newimage input %d -> %d %d %d",
03237           cbs->nim , id.ijk[0],id.ijk[1],id.ijk[2] ) ;
03238   STATUS(str) ; }
03239 
03240          if( im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING ){
03241 
03242             /* 20 Feb 2003: set plane from which viewpoint is controlled */
03243 
03244             AFNI_view_setter(im3d,seq) ;
03245             AFNI_set_viewpoint(
03246                im3d , id.ijk[0] , id.ijk[1] , id.ijk[2] ,
03247                (im3d->vinfo->crosshair_visible==True) ?
03248                REDISPLAY_OVERLAY : REDISPLAY_OPTIONAL ) ;
03249          }
03250       }
03251       break ;  /* end of new image */
03252 
03253       /** July 1996: an image viewer changed montage layout **/
03254 
03255       case isqCR_newmontage:{
03256          THD_ivec3 * minf = (THD_ivec3 *) cbs->userdata ;
03257          int ndown = minf->ijk[0], nup = minf->ijk[1], nskip = minf->ijk[2] ;
03258          int a3 = br->a123.ijk[2] ,   /* z axis of the brick?    */
03259              az = abs(a3) - 1       ; /* 0,1,2 for dataset x,y,z */
03260 
03261 if(PRINT_TRACING)
03262 { char str[256] ;
03263   sprintf(str,"newmontage: ndown=%d nup=%d nskip=%d a3=%d (on axis az=%d)",
03264           ndown,nup,nskip,a3,az) ; STATUS(str) ; }
03265 
03266          im3d->vinfo->xhairs_nskip.ijk[az] = nskip ;
03267 
03268          if( a3 > 0 ){
03269             im3d->vinfo->xhairs_ndown.ijk[az] = ndown ;
03270             im3d->vinfo->xhairs_nup.ijk[az]   = nup ;
03271          } else {
03272             im3d->vinfo->xhairs_ndown.ijk[az] = nup ;
03273             im3d->vinfo->xhairs_nup.ijk[az]   = ndown ;
03274          }
03275 
03276          if( im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING )
03277             AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
03278       }
03279       break ;
03280 
03281       /* 30 Dec 1998: return the current focus position */
03282 
03283       case isqCR_getxynim:{
03284          THD_ivec3 ib ;
03285 
03286          ib = THD_3dind_to_fdind( br , TEMP_IVEC3( im3d->vinfo->i1 ,
03287                                                    im3d->vinfo->j2 ,
03288                                                    im3d->vinfo->k3  ) ) ;
03289 
03290          cbs->xim = ib.ijk[0] ; cbs->yim = ib.ijk[1] ; cbs->nim = ib.ijk[2] ;
03291       }
03292       break ;  /* end of getxynim */
03293 
03294       /* Arrowpad stuff */
03295 
03296       case isqCR_appress:{
03297          if( im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING ){
03298             AFNI_view_setter(im3d,seq) ;
03299             AFNI_crosshair_gap_CB( NULL , (XtPointer) im3d ) ;
03300          }
03301       }
03302       break ;  /* end of arrowpad center key press */
03303 
03304       case isqCR_dxplus:
03305       case isqCR_dxminus:
03306       case isqCR_dyplus:
03307       case isqCR_dyminus:{
03308          THD_ivec3 ib , id ;
03309          XButtonEvent * xev = (XButtonEvent *) cbs->event ;
03310          int step = 1 ;
03311          THD_dataxes *daxes ;
03312 
03313          if( xev != NULL &&
03314              ( xev->type == ButtonPress ||
03315                xev->type == ButtonRelease ) &&
03316              (xev->state & (ShiftMask | ControlMask)) ) step = INIT_bigscroll ;
03317 
03318          ib = THD_3dind_to_fdind( br , TEMP_IVEC3( im3d->vinfo->i1 ,
03319                                                    im3d->vinfo->j2 ,
03320                                                    im3d->vinfo->k3  ) ) ;
03321          switch( cbs->reason ){
03322             case isqCR_dxplus:   ib.ijk[0] += step ; break ;
03323             case isqCR_dxminus:  ib.ijk[0] -= step ; break ;
03324             case isqCR_dyplus:   ib.ijk[1] += step ; break ;
03325             case isqCR_dyminus:  ib.ijk[1] -= step ; break ;
03326          }
03327 
03328          id = THD_fdind_to_3dind( br , ib ) ;
03329 
03330          /* 13 May 2003: allow for wraparound */
03331 
03332          LOAD_DSET_VIEWS(im3d) ;  /* 20 Nov 2003 */
03333          daxes = CURRENT_DAXES(im3d->anat_now) ;
03334               if( id.ijk[0] <  0          ) id.ijk[0] += daxes->nxx ;
03335          else if( id.ijk[0] >= daxes->nxx ) id.ijk[0] -= daxes->nxx ;
03336               if( id.ijk[1] <  0          ) id.ijk[1] += daxes->nyy ;
03337          else if( id.ijk[1] >= daxes->nyy ) id.ijk[1] -= daxes->nyy ;
03338               if( id.ijk[2] <  0          ) id.ijk[2] += daxes->nzz ;
03339          else if( id.ijk[2] >= daxes->nzz ) id.ijk[2] -= daxes->nzz ;
03340 
03341          if( im3d->ignore_seq_callbacks == AFNI_IGNORE_NOTHING ){
03342 
03343             /* 20 Feb 2003: set plane from which viewpoint is controlled */
03344 
03345             AFNI_view_setter(im3d,seq) ;
03346             AFNI_set_viewpoint(
03347                im3d , id.ijk[0] , id.ijk[1] , id.ijk[2] ,
03348                (im3d->vinfo->crosshair_visible==True) ?
03349                REDISPLAY_OVERLAY : REDISPLAY_OPTIONAL ) ;
03350          }
03351       }
03352       break ;  /* end of arrowpad arrow press */
03353 
03354       case isqCR_keypress:{
03355 #if 0
03356          MCW_grapher * grapher = VIEWER_TO_GRAPHER(im3d,seq) ;
03357          if( grapher != NULL ){
03358             char buf[2] ;
03359             buf[0] = cbs->key ; buf[1] = '\0' ;
03360             GRA_handle_keypress( grapher , buf , cbs->event ) ;
03361          }
03362 #endif
03363       }
03364       break ; /* end of keyboard press */
03365 
03366       /*--- 20 Feb 2003: keypress while in button2 mode ---*/
03367 
03368       case isqCR_button2_key:{
03369         KeySym ks = (KeySym) cbs->key ;
03370 
03371         switch( ks ){
03372           case XK_Delete:
03373             AFNI_process_drawing( im3d , UNDO_MODE , 0,NULL,NULL,NULL ) ;
03374           break ;
03375         }
03376       }
03377       break ; /* end of button2 mode keypress */
03378 
03379       /*--- Feb 1998: list of coordinates from button2 drawing ---*/
03380 
03381       case isqCR_button2_points:{
03382          int npts = cbs->key , zim = cbs->nim ;
03383          int * xyout = (int *) cbs->userdata ;
03384          THD_ivec3 id ;
03385          int nvec , ii , xim,yim , fixed_plane ;
03386          int * xdset , * ydset , * zdset ;
03387 
03388          if( zim >= 0 && zim < br->n3 && npts > 0 ){  /* if input is good */
03389 
03390             /* make space for translated coordinates */
03391 
03392             xdset = (int *) malloc( npts * sizeof(int) ) ;
03393             ydset = (int *) malloc( npts * sizeof(int) ) ;
03394             zdset = (int *) malloc( npts * sizeof(int) ) ;
03395 
03396             /* translate coordinates to dataset xyz indices,
03397                casting out any that are outside the dataset brick */
03398 
03399             nvec = 0 ;
03400             for( ii=0 ; ii < npts ; ii++ ){
03401                xim = xyout[2*ii] ; yim = xyout[2*ii+1] ;
03402 
03403                /* skip points not in the volume */
03404 
03405                if( xim >= 0 && xim < br->n1 && yim >= 0 && yim < br->n2 ){
03406 
03407                   id = THD_fdind_to_3dind( br , TEMP_IVEC3(xim,yim,zim) );
03408                   xdset[nvec] = id.ijk[0] ;
03409                   ydset[nvec] = id.ijk[1] ;
03410                   zdset[nvec] = id.ijk[2] ;
03411 
03412                   /* skip sequentially duplicate points */
03413 
03414                   if( nvec == 0                    ||
03415                       xdset[nvec] != xdset[nvec-1] ||
03416                       ydset[nvec] != ydset[nvec-1] ||
03417                       zdset[nvec] != zdset[nvec-1]   ) nvec++ ;
03418                }
03419             }
03420 
03421             /* send coordinates to processing routine */
03422 
03423             fixed_plane = abs(br->a123.ijk[2]) ;
03424 
03425             if( nvec > 0 ) AFNI_process_drawing( im3d ,
03426                                                  PLANAR_MODE+fixed_plane ,
03427                                                  nvec,xdset,ydset,zdset ) ;
03428 
03429             /* free coordinate memory */
03430 
03431             free(xdset) ; free(ydset) ; free(zdset) ;
03432          }
03433       }
03434       break ; /* end of button2 coordinates */
03435 
03436       /*--- 22 Aug 1998: redraw everything ---*/
03437 
03438       case isqCR_force_redisplay:{
03439          AFNI_view_setter(im3d,seq) ;
03440          PLUTO_force_redisplay() ;  /* see afni_plugin.c */
03441          PLUTO_force_rebar() ;      /* ditto [23 Aug 1998] */
03442       }
03443       break ; /* end of forced redisplay */
03444 
03445    }  /* end of switch on reason for call */
03446 
03447    EXRETURN ;
03448 }

void AFNI_set_cursor int   
 

Definition at line 9641 of file afni.c.

References AFNI_DEFAULT_CURSOR, AFNI_WAITING_CURSOR, AFNI_library_type::controllers, ENTRY, MCW_grapher::fdw_graph, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, GLOBAL_argopt, GLOBAL_library, GRA_REALZ, IM3D_OPEN, AFNI_view_info::inverted_pause, ISQ_REALZ, AF_options::keep_logo, MAX_CONTROLLERS, MCW_invert_widget(), NORMAL_cursorize, AFNI_widget_set::picture, PICTURE_OFF, PICTURE_ON, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, AFNI_widget_set::top_form, AFNI_widget_set::top_shell, Three_D_View::vinfo, Three_D_View::vwid, WATCH_cursorize, and MCW_imseq::wtop.

09642 {
09643    Three_D_View * im3d ;
09644    int id ;
09645 
09646 ENTRY("AFNI_set_cursor") ;
09647 
09648    for( id=0 ; id < MAX_CONTROLLERS ; id++ ){
09649       im3d = GLOBAL_library.controllers[id] ;
09650       if( IM3D_OPEN(im3d) ){
09651          switch( cursor_code ){
09652 
09653             default:
09654             case AFNI_DEFAULT_CURSOR:
09655                NORMAL_cursorize( im3d->vwid->top_shell ) ;
09656 
09657                if( ISQ_REALZ(im3d->s123) )
09658                   NORMAL_cursorize( im3d->s123->wtop ) ;
09659 
09660                if( ISQ_REALZ(im3d->s231) )
09661                   NORMAL_cursorize( im3d->s231->wtop ) ;
09662 
09663                if( ISQ_REALZ(im3d->s312) )
09664                   NORMAL_cursorize( im3d->s312->wtop ) ;
09665 
09666                if( GRA_REALZ(im3d->g123) )
09667                   NORMAL_cursorize( im3d->g123->fdw_graph ) ;
09668 
09669                if( GRA_REALZ(im3d->g231) )
09670                   NORMAL_cursorize( im3d->g231->fdw_graph ) ;
09671 
09672                if( GRA_REALZ(im3d->g312) )
09673                   NORMAL_cursorize( im3d->g312->fdw_graph ) ;
09674 
09675                if( im3d->vinfo->inverted_pause ){
09676                   im3d->vinfo->inverted_pause = False ;
09677                   if( im3d->vwid->picture != NULL ){
09678                      if( !GLOBAL_argopt.keep_logo ) PICTURE_OFF(im3d) ;
09679                   } else
09680                      MCW_invert_widget( im3d->vwid->top_form ) ;
09681                }
09682 
09683                break ;
09684 
09685             case AFNI_WAITING_CURSOR:
09686                WATCH_cursorize( im3d->vwid->top_shell ) ;
09687 
09688                if( ISQ_REALZ(im3d->s123) )
09689                   WATCH_cursorize( im3d->s123->wtop ) ;
09690 
09691                if( ISQ_REALZ(im3d->s231) )
09692                   WATCH_cursorize( im3d->s231->wtop ) ;
09693 
09694                if( ISQ_REALZ(im3d->s312) )
09695                   WATCH_cursorize( im3d->s312->wtop ) ;
09696 
09697                if( GRA_REALZ(im3d->g123) )
09698                   WATCH_cursorize( im3d->g123->fdw_graph ) ;
09699 
09700                if( GRA_REALZ(im3d->g231) )
09701                   WATCH_cursorize( im3d->g231->fdw_graph ) ;
09702 
09703                if( GRA_REALZ(im3d->g312) )
09704                   WATCH_cursorize( im3d->g312->fdw_graph ) ;
09705 
09706                if( ! im3d->vinfo->inverted_pause ){
09707                   im3d->vinfo->inverted_pause = True ;
09708                   if( im3d->vwid->picture != NULL )
09709                      PICTURE_ON(im3d) ;
09710                   else
09711                      MCW_invert_widget( im3d->vwid->top_form ) ;
09712                }
09713 
09714                break ;
09715          }
09716 
09717          XSync( XtDisplay(im3d->vwid->top_shell) , False ) ;
09718          XmUpdateDisplay( im3d->vwid->top_shell ) ;
09719       }
09720    }
09721 
09722    EXRETURN ;
09723 }

void AFNI_set_thr_pval Three_D_View   im3d
 

Definition at line 195 of file afni_func.c.

References DSET_BRICK_STATAUX, DSET_BRICK_STATCODE, ENTRY, Three_D_View::fim_now, AFNI_widget_set::func, AFNI_view_info::func_pval, AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, IM3D_VALID, ISVALID_3DIM_DATASET, MCW_set_widget_label(), STATUS, THD_stat_to_pval(), AFNI_view_info::thr_index, AFNI_function_widgets::thr_pval_label, THR_PVAL_LABEL_NONE, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_fimmer_redisplay(), AFNI_set_thresh_top(), AFNI_setup_viewing(), AFNI_thr_scale_CB(), AFNI_thr_scale_drag_CB(), and AFNI_thrdrag_lock_carryout().

00196 {
00197    float thresh , pval ;
00198    int   dec ;
00199    char  buf[16] ;
00200 
00201 ENTRY("AFNI_set_thr_pval") ;
00202 
00203    if( ! IM3D_VALID(im3d) || ! ISVALID_3DIM_DATASET(im3d->fim_now) ) EXRETURN ;
00204 
00205    /* get the "true" threshold (scaled up from being in [0,1]) */
00206 
00207    thresh = im3d->vinfo->func_threshold * im3d->vinfo->func_thresh_top ;
00208 
00209    /* get the p-value that goes with this threshold, for this functional dataset */
00210 
00211    pval = THD_stat_to_pval( thresh ,
00212               DSET_BRICK_STATCODE(im3d->fim_now,im3d->vinfo->thr_index) ,
00213               DSET_BRICK_STATAUX (im3d->fim_now,im3d->vinfo->thr_index)  ) ;
00214 
00215    im3d->vinfo->func_pval = pval ;  /* 06 Feb 2004 */
00216 
00217 if(PRINT_TRACING)
00218 { char buf[128] ;
00219   sprintf( buf, "thresh=%g  top=%g  pval=%g",
00220            thresh,im3d->vinfo->func_thresh_top,pval ) ; STATUS(buf) ; }
00221 
00222    if( pval < 0.0 ){
00223       strcpy( buf , THR_PVAL_LABEL_NONE ) ;
00224    } else {
00225       if( pval == 0.0 ){
00226          strcpy( buf , "p = 0" ) ;
00227       } else if( pval >= 0.9999 ){
00228          strcpy( buf , "p = 1" ) ;
00229       } else if( pval >= 0.0010 ){
00230          char qbuf[16] ;
00231          sprintf( qbuf , "%5.4f" , pval ) ;
00232          strcpy( buf , qbuf+1 ) ;
00233       } else {
00234          int dec = (int)(0.999 - log10(pval)) ;
00235          pval = pval * pow( 10.0 , (double) dec ) ;  /* between 1 and 10 */
00236          if( dec < 10 ) sprintf( buf , "%3.1f-%1d" ,           pval , dec ) ;
00237          else           sprintf( buf , "%1d.-%2d"  , (int)rint(pval), dec ) ;
00238       }
00239    }
00240    MCW_set_widget_label( im3d->vwid->func->thr_pval_label , buf ) ;
00241    EXRETURN ;
00242 }

void AFNI_set_thresh_top Three_D_View  ,
float   
 

Definition at line 125 of file afni_func.c.

References AFNI_set_thr_pval(), AV_assign_ival(), ENTRY, FIX_SCALE_SIZE, FIX_SCALE_VALUE, AFNI_widget_set::func, AFNI_view_info::func_thresh_top, IM3D_OPEN, MCW_arrowval::ival, AFNI_function_widgets::thr_scale, AFNI_function_widgets::thr_top_av, THR_TOP_EXPON, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_drive_set_threshnew(), AFNI_drive_set_threshold(), and AFNI_thresh_top_CB().

00126 {
00127    int decim ;
00128 
00129 ENTRY("AFNI_set_thresh_top") ;
00130 
00131    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
00132 
00133    if( tval <= 0.0 ) tval = 1.0 ;
00134 
00135    decim = (2*THR_TOP_EXPON) - (int)(THR_TOP_EXPON + 0.01 + log10(tval)) ;
00136    if( decim < 0 ) decim = 0 ;
00137 
00138    XtVaSetValues( im3d->vwid->func->thr_scale, XmNdecimalPoints, decim, NULL ) ;
00139 
00140    im3d->vinfo->func_thresh_top = tval ;
00141 
00142    FIX_SCALE_VALUE(im3d) ;
00143    FIX_SCALE_SIZE(im3d) ;   /* 09 May 2001 */
00144    AFNI_set_thr_pval( im3d ) ;
00145 
00146    /** fix the option menu at the bottom of the scale **/
00147 
00148    decim = THR_TOP_EXPON - decim ;
00149    if( decim != im3d->vwid->func->thr_top_av->ival )
00150       AV_assign_ival( im3d->vwid->func->thr_top_av , decim ) ;
00151 
00152    EXRETURN ;
00153 }

void AFNI_set_tog int   ,
int   ,
Widget *   
 

Definition at line 6127 of file afni.c.

References ENTRY.

Referenced by AFNI_marks_edits_CB(), and AFNI_marktog_CB().

06128 {
06129    int ib ;
06130 
06131 ENTRY("AFNI_set_tog") ;
06132 
06133    for( ib=0 ; ib < ntog ; ib++ )
06134       XmToggleButtonSetState( tog[ib] , ib==nset , False ) ;
06135 
06136    EXRETURN ;
06137 }

void AFNI_set_valabel FD_brick   br,
int    nsl,
MRI_IMAGE   im,
char *    blab
 

Set a value label when the nsl-th image is in "im". -------------------------------------------------------------------------------

Definition at line 2692 of file afni.c.

References AV_fval_to_char(), AFNI_imaging_widgets::do_bkgd_lab, ENTRY, complex::i, AFNI_view_info::i1, THD_ivec3::ijk, IM3D_VALID, AFNI_widget_set::imag, AFNI_view_info::j2, AFNI_view_info::k3, MRI_IMAGE::kind, MRI_BYTE_2D, MRI_COMPLEX_2D, MRI_FLOAT_2D, MRI_INT_2D, MRI_RGB_PTR, MRI_SHORT_2D, MRI_IMAGE::nx, FD_brick::parent, complex::r, TEMP_IVEC3, THD_3dind_to_fdind(), Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_brick_to_mri(), and AFNI_func_overlay().

02693 {
02694    Three_D_View * im3d = (Three_D_View *) br->parent ;
02695    THD_ivec3 ib ;
02696 
02697 ENTRY("AFNI_set_valabel") ;
02698 
02699    if( ! IM3D_VALID(im3d) || ! im3d->vwid->imag->do_bkgd_lab ||
02700        im == NULL         || blab == NULL                      ) EXRETURN ;
02701 
02702    /* convert current voxel index location to FD_brick indexes */
02703 
02704    ib = THD_3dind_to_fdind( br , TEMP_IVEC3( im3d->vinfo->i1 ,
02705                                              im3d->vinfo->j2 ,
02706                                              im3d->vinfo->k3  ) ) ;
02707 
02708    /* if the input image slice index (nsl) doesn't match the current
02709       location of the crosshairs, then we don't care about this image */
02710 
02711    if( nsl != ib.ijk[2] ) EXRETURN ;
02712 
02713    /* otherwise, extract a value from the image and put into blab */
02714 
02715    switch( im->kind ){
02716 
02717       case MRI_byte:{
02718          int val = MRI_BYTE_2D(im , ib.ijk[0],ib.ijk[1]) ;
02719          sprintf( blab , "%6d" , val ) ;
02720       }
02721       break ;
02722 
02723       case MRI_short:{
02724          int val = MRI_SHORT_2D(im , ib.ijk[0],ib.ijk[1]) ;
02725          sprintf( blab , "%6d" , val ) ;
02726       }
02727       break ;
02728 
02729       case MRI_int:{
02730          int val = MRI_INT_2D(im , ib.ijk[0],ib.ijk[1]) ;
02731          sprintf( blab , "%6d" , val ) ;
02732       }
02733       break ;
02734 
02735       case MRI_float:{
02736          float val = MRI_FLOAT_2D(im , ib.ijk[0],ib.ijk[1]) ;
02737          AV_fval_to_char(val,blab) ;
02738       }
02739       break ;
02740 
02741       case MRI_complex:{
02742          int iblab ;
02743          complex val ;
02744          val = MRI_COMPLEX_2D(im , ib.ijk[0],ib.ijk[1]) ;
02745          AV_fval_to_char(val.r,blab) ; iblab = strlen(blab) ;
02746          if( val.i >= 0.0 ) blab[iblab++] = '+' ;
02747          AV_fval_to_char(val.i,blab+iblab) ; iblab = strlen(blab) ;
02748          blab[iblab++] = 'I' ; blab[iblab++] = '\0' ;
02749       }
02750       break ;
02751 
02752       case MRI_rgb:{
02753          byte *rgb = MRI_RGB_PTR(im) ;
02754          int ii = ib.ijk[0] + im->nx * ib.ijk[1] ;
02755          sprintf(blab,"(%d,%d,%d)",(int)rgb[3*ii],(int)rgb[3*ii+1],(int)rgb[3*ii+2]) ;
02756       }
02757       break ;
02758 
02759    }
02760    EXRETURN ;
02761 }

void AFNI_set_viewpoint Three_D_View  ,
int   ,
int   ,
int   ,
int   
 

Definition at line 5318 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_crosshair_relabel(), AFNI_do_bkgd_lab(), AFNI_IGNORE_EVERYTHING, AFNI_IGNORE_NOTHING, AFNI_lock_carryout(), AFNI_noenv(), AFNI_process_redisplay(), AFNI_process_viewpoint(), AFNI_ttatlas_query(), AFNI_view_info::anat_index, Three_D_View::anat_now, AFNI_view_info::anat_val, Three_D_View::b123_ulay, Three_D_View::b231_ulay, Three_D_View::b312_ulay, CURRENT_DAXES, drive_MCW_grapher(), drive_MCW_imseq(), DSET_NUM_TIMES, DUMP_IVEC3, ENTRY, free, AFNI_view_info::func_val, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_redraw, graDR_setindex, AFNI_view_info::i1, i1, Three_D_View::ignore_seq_callbacks, THD_ivec3::ijk, IM3D_OPEN, AFNI_widget_set::imag, isqDR_display, isqDR_overlay, ISVALID_3DIM_DATASET, AFNI_view_info::j2, AFNI_view_info::k3, LOAD_DSET_VIEWS, LOAD_IVEC3, MCW_textwin_alter(), MCW_grapher::never_drawn, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, AFNI_imaging_widgets::pop_whereami_twin, REDISPLAY_ALL, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, STATUS, THD_3dind_to_3dmm(), THD_3dind_to_fdind(), THD_3dmm_to_dicomm(), AFNI_view_info::thr_val, AFNI_view_info::time_index, Three_D_View::type, Three_D_View::vinfo, Three_D_View::vwid, AFNI_view_info::xi, THD_fvec3::xyz, AFNI_view_info::yj, and AFNI_view_info::zk.

Referenced by AFNI_bucket_CB(), AFNI_crosshair_color_CB(), AFNI_crosshair_gap_CB(), AFNI_crosshair_visible_CB(), AFNI_define_CB(), AFNI_do_many_writes(), AFNI_drive_set_ijk(), AFNI_gra_send_CB(), AFNI_imag_pop_CB(), AFNI_initialize_view(), AFNI_jumpto_dicom(), AFNI_jumpto_ijk(), AFNI_lock_carryout(), AFNI_marks_action_CB(), AFNI_marks_disp_av_CB(), AFNI_marktog_CB(), AFNI_misc_CB(), AFNI_modify_viewing(), AFNI_process_plugout(), AFNI_redisplay(), AFNI_redisplay_func(), AFNI_see_marks_CB(), AFNI_see_ttatlas_CB(), AFNI_seq_send_CB(), AFNI_surf_bbox_CB(), AFNI_surf_redraw_CB(), AFNI_talto_CB(), AFNI_underlay_CB(), AFNI_view_xyz_CB(), AFNI_write_dataset_CB(), AFNI_xhall_bbox_CB(), PLUTO_dset_redisplay_mode(), and PLUTO_force_redisplay().

05320 {
05321    int old_i1 , old_j2 , old_k3 , i1,j2,k3 ;
05322    int dim1,dim2,dim3 , isq_driver , do_lock , new_xyz ;
05323    int newti ; /* 24 Jan 2001 */
05324 
05325    THD_dataxes * daxes ;
05326    THD_fvec3 fv ;
05327    THD_ivec3 old_ib , new_ib , old_id , new_id ;
05328 
05329 ENTRY("AFNI_set_viewpoint") ;
05330 
05331 if(PRINT_TRACING)
05332 { char str[256] ;
05333   sprintf(str,"input xx=%d yy=%d zz=%d",xx,yy,zz) ;
05334   STATUS(str) ; }
05335 
05336    if( ! IM3D_OPEN(im3d) || ! ISVALID_3DIM_DATASET(im3d->anat_now) ) EXRETURN ;
05337 
05338    /** 02 Nov 1996:
05339          Attach view-specific dataxes and warps to the datasets **/
05340 
05341    LOAD_DSET_VIEWS(im3d) ;
05342 
05343    /** find if input points are inside axes of current display **/
05344 
05345    daxes = CURRENT_DAXES(im3d->anat_now) ;
05346    dim1  = daxes->nxx ; dim2 = daxes->nyy ; dim3 = daxes->nzz ;
05347 
05348    old_i1 = im3d->vinfo->i1 ;
05349    old_j2 = im3d->vinfo->j2 ;
05350    old_k3 = im3d->vinfo->k3 ;
05351 
05352    i1 = im3d->vinfo->i1 = (xx < 0 || xx >= dim1) ? (old_i1) : xx ;
05353    j2 = im3d->vinfo->j2 = (yy < 0 || yy >= dim2) ? (old_j2) : yy ;
05354    k3 = im3d->vinfo->k3 = (zz < 0 || zz >= dim3) ? (old_k3) : zz ;
05355 
05356    /** determine redisplay mode for image viewers **/
05357 
05358    new_xyz =
05359     do_lock = !( i1 == old_i1 && j2 == old_j2 && k3 == old_k3 ) ;  /* 11 Nov 1996 */
05360 
05361    if( !redisplay_option && !new_xyz ) EXRETURN;
05362 
05363    isq_driver = (redisplay_option == REDISPLAY_ALL) ? isqDR_display
05364                                                     : isqDR_overlay ;
05365 
05366    if( !AFNI_noenv("AFNI_VALUE_LABEL") && new_xyz &&
05367        (im3d->s123 == NULL || im3d->s231 == NULL || im3d->s312 == NULL) )
05368      isq_driver = isqDR_display ;         /* 08 Mar 2002 */
05369 
05370    LOAD_IVEC3(old_id,old_i1,old_j2,old_k3) ;
05371    LOAD_IVEC3(new_id,    i1,    j2,    k3) ;
05372 
05373 #ifdef AFNI_DEBUG
05374 STATUS(" ") ;
05375 DUMP_IVEC3("  old_id",old_id) ;
05376 DUMP_IVEC3("  new_id",new_id) ;
05377 #endif
05378 
05379    if( im3d->type == AFNI_3DDATA_VIEW ){
05380       fv = THD_3dind_to_3dmm( im3d->anat_now , new_id ) ;
05381       fv = THD_3dmm_to_dicomm( im3d->anat_now , fv ) ;
05382       im3d->vinfo->xi = fv.xyz[0] ;  /* set display coords */
05383       im3d->vinfo->yj = fv.xyz[1] ;  /* to Dicom standard  */
05384       im3d->vinfo->zk = fv.xyz[2] ;
05385    }
05386 
05387    /* clear labels */
05388 
05389    im3d->vinfo->func_val[0] = im3d->vinfo->thr_val[0] = '\0' ;
05390    if( do_lock || isq_driver==isqDR_display )
05391       im3d->vinfo->anat_val[0] = '\0';
05392    if( !AFNI_noenv( "AFNI_VALUE_LABEL") ) AFNI_do_bkgd_lab( im3d ) ;
05393 
05394    /*--- redraw images now ---*/
05395 
05396    im3d->ignore_seq_callbacks = AFNI_IGNORE_EVERYTHING ;
05397 
05398    if( im3d->s123 != NULL || im3d->g123 != NULL ){
05399       int xyzm[4] ;
05400 
05401       old_ib = THD_3dind_to_fdind( im3d->b123_ulay , old_id ) ;
05402       new_ib = THD_3dind_to_fdind( im3d->b123_ulay , new_id ) ;
05403 
05404 #ifdef AFNI_DEBUG
05405 STATUS(" ") ;
05406 DUMP_IVEC3(" redraw s123 old_ib",old_ib) ;
05407 DUMP_IVEC3("             new_ib",new_ib) ;
05408 #endif
05409 
05410       if( redisplay_option || old_ib.ijk[2] != new_ib.ijk[2] )
05411          drive_MCW_imseq( im3d->s123 ,
05412                           isq_driver , (XtPointer) new_ib.ijk[2] ) ;
05413 
05414 
05415       xyzm[0] = new_ib.ijk[0] ; xyzm[1] = new_ib.ijk[1] ;
05416       xyzm[2] = new_ib.ijk[2] ; xyzm[3] = 0 ;
05417 
05418       if( im3d->g123 != NULL && ( im3d->g123->never_drawn ||
05419                                   redisplay_option == REDISPLAY_ALL || new_xyz ) )
05420          drive_MCW_grapher( im3d->g123 , graDR_redraw , (XtPointer) xyzm ) ;
05421    }
05422 
05423    if( im3d->s231 != NULL || im3d->g231 != NULL ){
05424       int xyzm[4] ;
05425 
05426       old_ib = THD_3dind_to_fdind( im3d->b231_ulay , old_id ) ;
05427       new_ib = THD_3dind_to_fdind( im3d->b231_ulay , new_id ) ;
05428 
05429 #ifdef AFNI_DEBUG
05430 STATUS(" ") ;
05431 DUMP_IVEC3(" redraw s231 old_ib",old_ib) ;
05432 DUMP_IVEC3("             new_ib",new_ib) ;
05433 #endif
05434 
05435       if( redisplay_option || old_ib.ijk[2] != new_ib.ijk[2] )
05436          drive_MCW_imseq( im3d->s231 ,
05437                           isq_driver , (XtPointer) new_ib.ijk[2] ) ;
05438 
05439       xyzm[0] = new_ib.ijk[0] ; xyzm[1] = new_ib.ijk[1] ;
05440       xyzm[2] = new_ib.ijk[2] ; xyzm[3] = 0 ;
05441 
05442       if( im3d->g231 != NULL && ( im3d->g231->never_drawn ||
05443                                   redisplay_option == REDISPLAY_ALL || new_xyz ) )
05444          drive_MCW_grapher( im3d->g231 , graDR_redraw , (XtPointer) xyzm ) ;
05445    }
05446 
05447    if( im3d->s312 != NULL || im3d->g312 != NULL ){
05448       int xyzm[4] ;
05449 
05450       old_ib = THD_3dind_to_fdind( im3d->b312_ulay , old_id ) ;
05451       new_ib = THD_3dind_to_fdind( im3d->b312_ulay , new_id ) ;
05452 
05453 #ifdef AFNI_DEBUG
05454 STATUS(" ") ;
05455 DUMP_IVEC3(" redraw s312 old_ib",old_ib) ;
05456 DUMP_IVEC3("             new_ib",new_ib) ;
05457 #endif
05458 
05459       if( redisplay_option || old_ib.ijk[2] != new_ib.ijk[2] )
05460          drive_MCW_imseq( im3d->s312 ,
05461                           isq_driver , (XtPointer) new_ib.ijk[2] ) ;
05462 
05463       xyzm[0] = new_ib.ijk[0] ; xyzm[1] = new_ib.ijk[1] ;
05464       xyzm[2] = new_ib.ijk[2] ; xyzm[3] = 0 ;
05465 
05466       if( im3d->g312 != NULL && ( im3d->g312->never_drawn ||
05467                                   redisplay_option == REDISPLAY_ALL || new_xyz ) )
05468          drive_MCW_grapher( im3d->g312 , graDR_redraw , (XtPointer) xyzm ) ;
05469    }
05470 
05471    im3d->ignore_seq_callbacks = AFNI_IGNORE_NOTHING ;
05472 
05473    /*--- redraw coordinate display now ---*/
05474 
05475    if( redisplay_option || new_xyz ){
05476       AFNI_crosshair_relabel( im3d ) ;  /* 12 Mar 2004: moved this to a function, too */
05477       AFNI_do_bkgd_lab( im3d ) ;        /* 08 Mar 2002: moved labelizing to function */
05478    }
05479 
05480    /* 24 Jan 2001: set grapher index based on type of dataset */
05481 
05482 #if 0
05483    if( DSET_NUM_TIMES(im3d->anat_now) > 1 )
05484       newti = im3d->vinfo->time_index ;
05485    else
05486 #endif
05487       newti = im3d->vinfo->anat_index ;
05488 
05489    if( newti >= 0 ){
05490      drive_MCW_grapher( im3d->g123, graDR_setindex, (XtPointer)newti );
05491      drive_MCW_grapher( im3d->g231, graDR_setindex, (XtPointer)newti );
05492      drive_MCW_grapher( im3d->g312, graDR_setindex, (XtPointer)newti );
05493    }
05494 
05495    if( do_lock )                    /* 11 Nov 1996 */
05496       AFNI_lock_carryout( im3d ) ;  /* 04 Nov 1996 */
05497 
05498    /** Feb 1998: if desired, send coordinates to receiver **/
05499    /** Mar 1999: do it in an external routine, not here.  **/
05500 
05501    if( new_xyz ) AFNI_process_viewpoint( im3d ) ;
05502    else          AFNI_process_redisplay( im3d ) ;
05503 
05504    if( new_xyz && im3d->vwid->imag->pop_whereami_twin != NULL ){
05505 
05506       char * tlab = AFNI_ttatlas_query( im3d ) ;
05507 
05508       if( tlab == NULL ){
05509          MCW_textwin_alter( im3d->vwid->imag->pop_whereami_twin ,
05510                            "\n*** Can't compute Talairach coordinates now ***\n");
05511       } else {
05512          MCW_textwin_alter( im3d->vwid->imag->pop_whereami_twin , tlab ) ;
05513          free(tlab) ;
05514       }
05515    }
05516 
05517    EXRETURN ;
05518 }

void AFNI_set_window_titles Three_D_View   im3d
 

Definition at line 1847 of file afni_func.c.

References AFNI_controller_label(), Three_D_View::anat_now, Three_D_View::anat_wod_flag, THD_3dim_dataset::dblk, THD_diskptr::directory_name, THD_datablock::diskptr, drive_MCW_grapher(), drive_MCW_imseq(), ENTRY, THD_diskptr::filecode, Three_D_View::fim_now, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, GLOBAL_argopt, graDR_title, IM3D_OPEN, isqDR_title, ISVALID_3DIM_DATASET, THD_3dim_dataset::label2, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, SESSTRAIL, THD_MAX_NAME, THD_trailname(), AF_options::title_name, AFNI_widget_set::top_shell, USE_TITLE2, Three_D_View::vwid, and Three_D_View::window_title.

Referenced by AFNI_underlay_CB(), ENV_redraw_titles(), ENV_sesstrail(), and PLUTO_fixup_names().

01848 {
01849    Boolean redo_title ;
01850    char ttl[THD_MAX_NAME] , nam[THD_MAX_NAME] ;
01851    char *tnam ;
01852 
01853 ENTRY("AFNI_set_window_titles") ;
01854 
01855    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
01856 
01857    if( im3d->anat_wod_flag )
01858      sprintf(ttl , "{warp} %s%s: " ,
01859              AFNI_controller_label(im3d),GLOBAL_argopt.title_name) ;
01860    else
01861      sprintf(ttl , "%s%s: " ,
01862              AFNI_controller_label(im3d),GLOBAL_argopt.title_name) ;
01863 
01864    if( USE_TITLE2(im3d->anat_now) ){
01865      strcat( ttl , im3d->anat_now->label2 ) ;
01866    } else {
01867      strcpy( nam , im3d->anat_now->dblk->diskptr->directory_name ) ;
01868      strcat( nam , im3d->anat_now->dblk->diskptr->filecode ) ;
01869      tnam = THD_trailname(nam,SESSTRAIL+1) ;
01870      strcat( ttl , tnam ) ;
01871    }
01872 
01873    if( ISVALID_3DIM_DATASET(im3d->fim_now) ){
01874      strcat( ttl , " & " ) ;
01875      if( USE_TITLE2(im3d->fim_now) ){
01876        strcat( ttl , im3d->fim_now->label2 ) ;
01877      } else {
01878        strcat( ttl , im3d->fim_now->dblk->diskptr->filecode ) ;
01879      }
01880    }
01881 
01882    redo_title = (Boolean) (strcmp(ttl,im3d->window_title) != 0 ) ;
01883    if( redo_title ){
01884      strcpy( im3d->window_title , ttl ) ;
01885      XtVaSetValues( im3d->vwid->top_shell , XmNtitle , ttl , NULL ) ;
01886 
01887      if( im3d->s123 != NULL )
01888        drive_MCW_imseq( im3d->s123 , isqDR_title , (XtPointer) ttl ) ;
01889 
01890      if( im3d->s231 != NULL )
01891        drive_MCW_imseq( im3d->s231 , isqDR_title , (XtPointer) ttl ) ;
01892 
01893      if( im3d->s312 != NULL )
01894        drive_MCW_imseq( im3d->s312 , isqDR_title , (XtPointer) ttl ) ;
01895 
01896      if( im3d->g123 != NULL )
01897        drive_MCW_grapher( im3d->g123 , graDR_title , (XtPointer) ttl ) ;
01898 
01899      if( im3d->g231 != NULL )
01900        drive_MCW_grapher( im3d->g231 , graDR_title , (XtPointer) ttl ) ;
01901 
01902      if( im3d->g312 != NULL )
01903        drive_MCW_grapher( im3d->g312 , graDR_title , (XtPointer) ttl ) ;
01904    }
01905 
01906    EXRETURN ;
01907 }

void AFNI_setup_inten_pbar Three_D_View   im3d
 

6/01/95: changed to put the initialization constants in tables initialized in afni.c, not here. *

Definition at line 345 of file afni_func.c.

References Three_D_View::dc, ENTRY, AFNI_widget_set::func, i, IM3D_VALID, INIT_ovin_pos, INIT_ovin_sgn, INIT_pval_pos, INIT_pval_sgn, AFNI_function_widgets::inten_pbar, MIN, MCW_pbar::mode, MCW_DCOV::ncol_ov, NPANE_MAX, NPANE_MIN, MCW_pbar::num_panes, MCW_pbar::ov_index, MCW_DC::ovc, MCW_pbar::ovin_save, MCW_pbar::pval, MCW_pbar::pval_save, MCW_pbar::update_me, and Three_D_View::vwid.

00346 {
00347   MCW_pbar *pbar ;
00348   int np , i , jm , lcol ;
00349 
00350 ENTRY("AFNI_setup_inten_pbar") ;
00351 
00352   if( ! IM3D_VALID(im3d) ) EXRETURN ;
00353 
00354   pbar = im3d->vwid->func->inten_pbar ;
00355   jm   = pbar->mode ;
00356   lcol = im3d->dc->ovc->ncol_ov - 1 ;
00357 
00358   /** load the 'save' values for all possible pane counts **/
00359 
00360   for( np=NPANE_MIN ; np <= NPANE_MAX ; np++ ){
00361 
00362       for( i=0 ; i <= np ; i++ ){
00363          pbar->pval_save[np][i][0] = INIT_pval_sgn[np][i] ;
00364          pbar->pval_save[np][i][1] = INIT_pval_pos[np][i] ;
00365       }
00366 
00367       for( i=0 ; i <  np ; i++ ){
00368          pbar->ovin_save[np][i][0] = MIN( lcol , INIT_ovin_sgn[np][i] ) ;
00369          pbar->ovin_save[np][i][1] = MIN( lcol , INIT_ovin_pos[np][i] ) ;
00370       }
00371   }
00372 
00373   /** load the values for the current pane count **/
00374 
00375   np = pbar->num_panes ;
00376   jm = pbar->mode ;
00377 
00378   for( i=0 ; i <= np ; i++ ) pbar->pval[i]     = pbar->pval_save[np][i][jm] ;
00379   for( i=0 ; i <  np ; i++ ) pbar->ov_index[i] = pbar->ovin_save[np][i][jm] ;
00380 
00381   pbar->update_me = 1 ;
00382   EXRETURN ;
00383 }

void AFNI_setup_viewing Three_D_View  ,
Boolean   
 

Definition at line 6778 of file afni.c.

References AFNI_controller_index(), AFNI_find_warp(), AFNI_noenv(), AFNI_process_timeindex(), AFNI_range_setter(), AFNI_reset_func_range(), AFNI_set_thr_pval(), AFNI_transform_vector(), AFNI_underlay_CB(), AFNI_update_surface_widgets(), ALLOW_COMPUTE_FIM, AFNI_function_widgets::anat_buck_av, Three_D_View::anat_dset, AFNI_view_info::anat_index, Three_D_View::anat_now, AFNI_datamode_widgets::anat_resam_av, AFNI_view_info::anat_resam_mode, Three_D_View::anat_voxwarp, Three_D_View::anat_wod_flag, AFNI_datamode_widgets::anatmode_bbox, AV_assign_ival(), AV_SENSITIZE, Three_D_View::b123_anat, Three_D_View::b123_fim, Three_D_View::b231_anat, Three_D_View::b231_fim, Three_D_View::b312_anat, Three_D_View::b312_fim, AFNI_function_widgets::buck_frame, AFNI_function_widgets::buck_rowcol, CAN_TALTO, THD_3dim_dataset::daxes, AFNI_viewing_widgets::define_func_pb, AF_options::destruct, AFNI_widget_set::dmode, DMODE_BRICK, DMODE_BRICK_BVAL, DMODE_WOD_BVAL, DSET_BRICK_LABEL, DSET_BRICK_STATCODE, DSET_GRAPHABLE, DSET_INMEMORY, DSET_NUM_TIMES, DSET_NVALS, DSET_WRITEABLE, ENTRY, EQUIV_DATAXES, AFNI_function_widgets::fim_buck_av, AFNI_view_info::fim_index, Three_D_View::fim_now, Three_D_View::fim_selfwarp, Three_D_View::fim_voxwarp, Three_D_View::fim_wod_flag, Three_D_View::fimdata, AFNI_fimmer_type::fimdset, FIX_SCALE_SIZE, FIX_SCALE_VALUE, MCW_arrowval::fmax, AFNI_view_info::force_anat_wod, AFNI_view_info::force_func_wod, AFNI_widget_set::func, FUNC_FIM_TYPE, AFNI_datamode_widgets::func_resam_av, AFNI_view_info::func_resam_mode, AFNI_view_info::func_threshold, THD_3dim_dataset::func_type, AFNI_datamode_widgets::funcmode_bbox, GLOBAL_argopt, IM3D_VALID, AFNI_widget_set::imag, MCW_arrowval::imax, ISVALID_3DIM_DATASET, LAST_VIEW_TYPE, LOAD_ANAT_VIEW, LOAD_FUNC_VIEW, MAX, MAX_CONTROLLERS, MCW_set_bbox(), MCW_set_widget_label(), myXtFree, FD_brick::parent, AFNI_imaging_widgets::pop_mnito_pb, AFNI_imaging_widgets::pop_sumato_pb, AFNI_imaging_widgets::pop_talto_pb, AFNI_imaging_widgets::pop_ttren_pb, AFNI_imaging_widgets::pop_whereami_pb, refit_MCW_optmenu(), FD_brick::resam_code, AFNI_view_info::resam_vox, AFNI_datamode_widgets::resam_vox_av, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, AFNI_viewing_widgets::see_func_bbox, AFNI_function_widgets::see_ttatlas_bbox, SENSITIZE, SESSION_HAS_SUMA, Three_D_View::ss_now, STATUS, AFNI_view_info::tempflag, THD_3dmm_to_3dind(), THD_3dmm_to_dicomm(), THD_dicomm_to_3dmm(), THD_edit_dataxes(), THD_setup_bricks(), AFNI_function_widgets::thr_buck_av, AFNI_view_info::thr_index, AFNI_function_widgets::thr_label, AFNI_datamode_widgets::thr_resam_av, FD_brick::thr_resam_code, AFNI_view_info::thr_resam_mode, AFNI_function_widgets::thr_rowcol, AFNI_function_widgets::thr_scale, AFNI_view_info::time_index, AFNI_imaging_widgets::time_index_av, AFNI_view_info::time_on, top, AFNI_view_info::top_index, THD_warp::type, UNDERLAY_ALLFUNC, UNDERLAY_ANAT, AFNI_function_widgets::underlay_bbox, AFNI_view_info::underlay_type, AFNI_widget_set::view, VIEW_TALAIRACH_TYPE, THD_3dim_dataset::view_type, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, MCW_bbox::wbut, Three_D_View::wod_daxes, AFNI_datamode_widgets::write_anat_pb, AFNI_datamode_widgets::write_func_pb, MCW_bbox::wrowcol, MCW_arrowval::wrowcol, and MCW_bbox::wtop.

Referenced by AFNI_bucket_CB(), AFNI_initialize_view(), and AFNI_modify_viewing().

06779 {
06780    FD_brick ** fbr ;
06781    XmString xstr ;
06782    Boolean  same , dont_fix_pts , writer ,
06783             anat_brick_possible , func_brick_possible ;
06784    int      val , top ;
06785 
06786    static THD_3dim_dataset *old_fim  = NULL ; /* 12 Dec 2001 */
06787    static Three_D_View     *old_im3d = NULL ; /* 29 Jan 2002 */
06788    static THD_3dim_dataset *old_anat = NULL ; /* 12 Dec 2001 */
06789 
06790 ENTRY("AFNI_setup_viewing") ;
06791 
06792    if( ! IM3D_VALID(im3d) ) EXRETURN ;
06793 
06794    /*-----------------------------------------------------*/
06795    /*--- set up the anat w-o-d axes and viewing bricks ---*/
06796 
06797    anat_brick_possible = DSET_INMEMORY(im3d->anat_now) ;
06798 
06799    /*- The Ides of March, 2000: allow switching back to "view brick" -*/
06800 
06801    if( anat_brick_possible         &&
06802        im3d->vinfo->force_anat_wod &&
06803        im3d->vinfo->tempflag == 0  &&
06804        !AFNI_noenv("AFNI_VIEW_ANAT_BRICK") ){
06805 
06806 STATUS("setting anatmode_bbox back to 'View ULay Data Brick'") ;
06807       im3d->vinfo->force_anat_wod = 0 ;
06808       MCW_set_bbox( im3d->vwid->dmode->anatmode_bbox , DMODE_BRICK_BVAL ) ;
06809    }
06810 
06811    im3d->anat_wod_flag = ( im3d->vinfo->force_anat_wod ||       /* 02 Nov 1996 */
06812                            !anat_brick_possible          ) ;
06813 
06814    if( im3d->anat_wod_flag )                                    /* 02 Nov 1996 */
06815       THD_edit_dataxes( im3d->vinfo->resam_vox ,
06816                         im3d->anat_now->daxes , im3d->wod_daxes ) ;
06817    else
06818       *(im3d->wod_daxes) = *(im3d->anat_now->daxes) ;
06819 
06820    im3d->anat_voxwarp->type =
06821       im3d->fim_voxwarp->type = ILLEGAL_TYPE ;                  /* 02 Nov 1996 */
06822 
06823    LOAD_ANAT_VIEW(im3d) ;                                       /* 02 Nov 1996 */
06824 
06825    fbr = THD_setup_bricks( im3d->anat_now ) ;
06826    if( fbr == NULL ){
06827       fprintf(stderr,"THD_setup_bricks of anat_now fails!\n") ; EXRETURN ;
06828    }
06829    myXtFree(im3d->b123_anat) ; im3d->b123_anat = fbr[0] ;
06830    myXtFree(im3d->b231_anat) ; im3d->b231_anat = fbr[1] ;
06831    myXtFree(im3d->b312_anat) ; im3d->b312_anat = fbr[2] ;
06832    myXtFree(fbr) ;
06833 
06834    im3d->b123_anat->parent =
06835      im3d->b231_anat->parent =
06836        im3d->b312_anat->parent = (XtPointer) im3d ;
06837 
06838    im3d->b123_anat->resam_code =
06839      im3d->b231_anat->resam_code =
06840        im3d->b312_anat->resam_code = im3d->vinfo->anat_resam_mode ;
06841 
06842    im3d->b123_anat->thr_resam_code =     /* 30 Jul 2003 */
06843      im3d->b231_anat->thr_resam_code =
06844        im3d->b312_anat->thr_resam_code = im3d->vinfo->anat_resam_mode ;
06845 
06846    /* 30 Nov 1997: don't go past end of dataset */
06847 
06848    if( im3d->vinfo->anat_index >= DSET_NVALS(im3d->anat_now) )
06849      im3d->vinfo->anat_index = DSET_NVALS(im3d->anat_now) - 1 ;
06850 
06851    /*-----------------------------------------------------*/
06852    /*--- set up the func w-o-d axes and viewing bricks ---*/
06853 
06854    if( ISVALID_3DIM_DATASET(im3d->fim_now) ){  /* that is, if we have func */
06855 
06856 STATUS("function brick setup") ;
06857 
06858       /*-- access data in dataset im3d->fim_now IF AND ONLY IF
06859              1) its actual data axes are the same as the wod_daxes
06860              2) it has actual data
06861              3) the user hasn't officially declared for warp-on-demand
06862              4) the dataset doesn't have a warp to bring it into
06863                 alignment with the current anat dataset (self_warp)    --*/
06864 
06865 STATUS("deciding whether to use function WOD") ;
06866 
06867       func_brick_possible =
06868          EQUIV_DATAXES( im3d->fim_now->daxes , im3d->wod_daxes ) &&   /* 02 Nov 1996 */
06869          DSET_INMEMORY( im3d->fim_now ) ;
06870 
06871       /*- 27 Aug 2002: see if there is a self_warp from
06872                        fim_now back to anat_now; if so, install it;
06873                        this is a coordinate-to-coordinate tranformation,
06874                        and requires warp-on-demand viewing              -*/
06875 
06876       { THD_warp *swarp = AFNI_find_warp( im3d->anat_now , im3d->fim_now ) ;
06877         im3d->fim_selfwarp = swarp ;  /* transform from fim to anat coords */
06878         if( swarp != NULL ) func_brick_possible = 0 ;   /* require warp-on-demand */
06879       }
06880 
06881       /*- The Ides of March, 2000: allow switching back to "view brick" -*/
06882 
06883 
06884       if( func_brick_possible                          &&
06885           ( ( im3d->vinfo->force_func_wod  &&
06886               im3d->vinfo->tempflag == 0   &&
06887               !AFNI_noenv("AFNI_VIEW_FUNC_BRICK") ) ||
06888             ( !im3d->anat_wod_flag         &&              /* 08 Aug 2003 */
06889               im3d->anat_now == im3d->fim_now     )   ) ){
06890 
06891 STATUS("setting funcmode_bbox back to 'View Func Data Brick'") ;
06892          im3d->vinfo->force_func_wod = 0 ;
06893          MCW_set_bbox( im3d->vwid->dmode->funcmode_bbox , DMODE_BRICK_BVAL ) ;
06894       }
06895 
06896       if( func_brick_possible && ! im3d->vinfo->force_func_wod ){
06897 STATUS("not forcing function WOD") ;
06898         im3d->fim_wod_flag = False ;   /* 02 Nov 1996 */
06899       } else {
06900 STATUS("forcing function WOD") ;
06901         im3d->fim_wod_flag = True ;    /* 02 Nov 1996 */
06902       }
06903 
06904       LOAD_FUNC_VIEW(im3d) ;  /* 02 Nov 1996 */
06905 
06906       fbr = THD_setup_bricks( im3d->fim_now ) ;
06907       if( fbr == NULL ){
06908          fprintf(stderr,"THD_setup_bricks of fim_now fails!\n") ; EXRETURN ;
06909       }
06910       myXtFree(im3d->b123_fim) ; im3d->b123_fim = fbr[0] ;
06911       myXtFree(im3d->b231_fim) ; im3d->b231_fim = fbr[1] ;
06912       myXtFree(im3d->b312_fim) ; im3d->b312_fim = fbr[2] ;
06913       myXtFree(fbr) ;
06914 
06915       im3d->b123_fim->parent =
06916         im3d->b231_fim->parent =
06917           im3d->b312_fim->parent = (XtPointer) im3d ;
06918 
06919       im3d->b123_fim->resam_code =
06920         im3d->b231_fim->resam_code =
06921           im3d->b312_fim->resam_code = im3d->vinfo->func_resam_mode ;
06922 
06923       im3d->b123_fim->thr_resam_code =     /* 09 Dec 1997 */
06924         im3d->b231_fim->thr_resam_code =
06925           im3d->b312_fim->thr_resam_code = im3d->vinfo->thr_resam_mode ;
06926 
06927       /* 30 Nov 1997: don't go past end of bucket */
06928 
06929       if( im3d->vinfo->fim_index >= DSET_NVALS(im3d->fim_now) )
06930           im3d->vinfo->fim_index = DSET_NVALS(im3d->fim_now) - 1 ;
06931 
06932       if( im3d->vinfo->thr_index >= DSET_NVALS(im3d->fim_now) )
06933           im3d->vinfo->thr_index = DSET_NVALS(im3d->fim_now) - 1 ;
06934 
06935       /* first time in for this controller,
06936          set thr_index to 1 if have sub-brick #1 [29 Jul 2003] */
06937 
06938       { static int first=1, ffim[MAX_CONTROLLERS] ; int qq ;
06939         if( first ){
06940           first=0; for( qq=0; qq < MAX_CONTROLLERS; qq++ ) ffim[qq]=1;
06941         }
06942         qq = AFNI_controller_index(im3d) ;
06943         if( ffim[qq] && im3d->vinfo->thr_index == 0 && DSET_NVALS(im3d->fim_now) > 1 ){
06944           im3d->vinfo->thr_index = 1 ; ffim[qq] = 0 ;
06945         }
06946       }
06947 
06948    } else {   /* 29 Jul 2003: no longer possible */
06949 
06950 STATUS("no function dataset") ;
06951 
06952       myXtFree(im3d->b123_fim) ; im3d->b123_fim = NULL ;
06953       myXtFree(im3d->b231_fim) ; im3d->b231_fim = NULL ;
06954       myXtFree(im3d->b312_fim) ; im3d->b312_fim = NULL ;
06955 
06956       func_brick_possible = False ;
06957    }
06958 
06959    /*------------------------------------------------------------------*/
06960    /*--- set widget sensitivity based on kind of data now available ---*/
06961 
06962 STATUS("turning widgets on and/or off:") ;
06963 
06964    /*--- datamode controls ---*/
06965 
06966 STATUS(" -- datamode widgets") ;
06967 
06968    if( anat_brick_possible ){
06969      SENSITIZE( im3d->vwid->dmode->anatmode_bbox->wbut[DMODE_BRICK] , True ) ;
06970    } else {
06971      SENSITIZE( im3d->vwid->dmode->anatmode_bbox->wbut[DMODE_BRICK] , False ) ;
06972      MCW_set_bbox( im3d->vwid->dmode->anatmode_bbox , DMODE_WOD_BVAL ) ;
06973      im3d->vinfo->force_anat_wod = 1 ;
06974    }
06975 
06976    if( func_brick_possible ){
06977      SENSITIZE( im3d->vwid->dmode->funcmode_bbox->wbut[DMODE_BRICK] , True ) ;
06978    } else {
06979      SENSITIZE( im3d->vwid->dmode->funcmode_bbox->wbut[DMODE_BRICK] , False ) ;
06980      MCW_set_bbox( im3d->vwid->dmode->funcmode_bbox , DMODE_WOD_BVAL ) ;
06981      im3d->vinfo->force_func_wod = 1 ;
06982    }
06983 
06984    AV_SENSITIZE( im3d->vwid->dmode->anat_resam_av , im3d->anat_wod_flag ) ;
06985 
06986    AV_SENSITIZE( im3d->vwid->dmode->resam_vox_av , im3d->anat_wod_flag ) ;
06987 
06988    /* Jan 31, 1995: don't allow writes of datasets without warp parents */
06989    /* Jun 22, 1995: allow it if destruct mode is actuated!              */
06990 
06991    if( GLOBAL_argopt.destruct ){  /* not currently implemented */
06992      writer = True ;
06993    } else {
06994      writer = (Boolean) DSET_WRITEABLE(im3d->anat_now) ;  /* mod 26 Mar 2001 */
06995    }
06996 
06997    SENSITIZE( im3d->vwid->dmode->write_anat_pb , writer ) ;
06998 
06999    if( GLOBAL_argopt.destruct ){  /* not currently implemented */
07000      writer = (Boolean) ISVALID_3DIM_DATASET(im3d->fim_now) ;
07001    } else {
07002      writer = (Boolean) DSET_WRITEABLE(im3d->fim_now) ;  /* mod 26 Mar 2001 */
07003    }
07004 
07005    SENSITIZE( im3d->vwid->dmode->write_func_pb , writer ) ;
07006 
07007    /*--- function controls (always see them) ---*/
07008 
07009    {  Boolean have_fim = ISVALID_3DIM_DATASET(im3d->fim_now) ;
07010       Boolean have_thr = have_fim ;
07011 
07012       static int first=1, zfim[MAX_CONTROLLERS] ; int qq ;
07013       if( first ){
07014         first=0; for( qq=0; qq < MAX_CONTROLLERS; qq++ ) zfim[qq]=1;
07015       }
07016 
07017 STATUS(" -- function widgets ON") ;
07018 
07019       SENSITIZE( im3d->vwid->view->define_func_pb      , True ) ;  /* always on */
07020       SENSITIZE( im3d->vwid->view->see_func_bbox->wtop , True ) ;
07021 
07022       /* setup threshold slider to be always on */
07023 
07024       XtManageChild( im3d->vwid->func->thr_rowcol ) ;
07025       qq = AFNI_controller_index(im3d) ;
07026       if( zfim[qq] && im3d->fim_now != NULL && im3d->fim_now->func_type == FUNC_FIM_TYPE ){
07027 STATUS(" -- set threshold to zero for FIM (once only)") ;
07028         XmScaleSetValue( im3d->vwid->func->thr_scale , 0 ) ;
07029         im3d->vinfo->func_threshold = 0.0 ; zfim[qq] = 0 ;
07030       }
07031       FIX_SCALE_SIZE(im3d) ; FIX_SCALE_VALUE(im3d) ;
07032 
07033       /* turn on various ways of making function into underlay */
07034 
07035       SENSITIZE( im3d->vwid->func->underlay_bbox->wbut[UNDERLAY_ALLFUNC],
07036                       have_fim ) ;
07037 
07038       /* set underlay type back to anat if no function */
07039 
07040       if( ! have_fim ) im3d->vinfo->underlay_type = UNDERLAY_ANAT ;
07041 
07042       /* allow resample control only if we are using w-o-d */
07043 
07044       AV_SENSITIZE( im3d->vwid->dmode->func_resam_av,
07045                     have_fim && im3d->fim_wod_flag ) ;
07046 
07047       AV_SENSITIZE( im3d->vwid->dmode->thr_resam_av,    /* 09 Dec 1997 */
07048                     have_fim && im3d->fim_wod_flag ) ;
07049 
07050       /** Mar 1996: modify the threshold scale stuff **/
07051       /** Oct 1996: increase decim by 1 to allow for
07052                     new precision 0..999 of scale (used to be 0..99) **/
07053       /** Nov 1997: the scale precision is now set by macro THR_TOP_EXPON,
07054                     and its settings are done in routine AFNI_set_thresh_top **/
07055 
07056       if( have_thr ){
07057         int iv = im3d->vinfo->thr_index , jj ;
07058 
07059         jj = DSET_BRICK_STATCODE(im3d->fim_now,iv) ;
07060         if( jj > 0 )
07061           MCW_set_widget_label( im3d->vwid->func->thr_label ,
07062                                 FUNC_label[jj] ) ;
07063         else
07064           MCW_set_widget_label( im3d->vwid->func->thr_label ,
07065                                 DSET_BRICK_LABEL(im3d->fim_now,iv) ) ;
07066       }
07067 
07068       /* set the pval label at the bottom of the scale */
07069 
07070       AFNI_set_thr_pval( im3d ) ;
07071 
07072       /*** 29 Jul 2003: always do buckets now ***/
07073 
07074       XtManageChild( im3d->vwid->func->anat_buck_av->wrowcol ) ;
07075       XtManageChild( im3d->vwid->func->fim_buck_av->wrowcol  ) ;
07076       XtManageChild( im3d->vwid->func->thr_buck_av->wrowcol  ) ;
07077 
07078       /** 12 Dec 2001: only refit menus if dataset has changed **/
07079 
07080       if( have_fim && (im3d->fim_now != old_fim || im3d != old_im3d) ){
07081         refit_MCW_optmenu( im3d->vwid->func->fim_buck_av ,
07082                            0 ,                            /* new minval */
07083                            DSET_NVALS(im3d->fim_now)-1 ,  /* new maxval */
07084                            im3d->vinfo->fim_index ,       /* new inival */
07085                            0 ,                            /* new decim? */
07086                            AFNI_bucket_label_CB ,         /* text routine */
07087                            im3d->fim_now                  /* text data */
07088                          ) ;
07089         refit_MCW_optmenu( im3d->vwid->func->thr_buck_av ,
07090                            0 ,                            /* new minval */
07091                            DSET_NVALS(im3d->fim_now)-1 ,  /* new maxval */
07092                            im3d->vinfo->thr_index ,       /* new inival */
07093                            0 ,                            /* new decim? */
07094                            AFNI_bucket_label_CB ,         /* text routine */
07095                            im3d->fim_now                  /* text data */
07096                          ) ;
07097       }
07098 
07099       if( im3d->anat_now != old_anat || im3d != old_im3d ){
07100         refit_MCW_optmenu( im3d->vwid->func->anat_buck_av ,
07101                            0 ,                             /* new minval */
07102                            DSET_NVALS(im3d->anat_now)-1 ,  /* new maxval */
07103                            im3d->vinfo->anat_index ,       /* new inival */
07104                            0 ,                             /* new decim? */
07105                            AFNI_bucket_label_CB ,          /* text routine */
07106                            im3d->anat_now                  /* text data */
07107                          ) ;
07108       }
07109 
07110       XtManageChild( im3d->vwid->func->buck_rowcol ) ;  /* make itvisible */
07111       XtManageChild( im3d->vwid->func->buck_frame ) ;
07112    }
07113 
07114    /*--- set the function type bboxes based on the current
07115          viewing set up (which may have changed due to lack of function) ---*/
07116 
07117 STATUS(" -- function underlay widgets") ;
07118 
07119    MCW_set_bbox( im3d->vwid->func->underlay_bbox ,
07120                  1 << im3d->vinfo->underlay_type ) ;
07121 
07122    /*--------------------------------------------------------*/
07123    /*--- 3/24/95: deal with the new range widgets in func ---*/
07124 
07125    AFNI_reset_func_range( im3d ) ;
07126 
07127 #ifdef ALLOW_DATASET_VLIST
07128    /*---------------------------------------------------------*/
07129    /*--- May 1995: if points exist in some other dataset   ---*/
07130    /*---           associated with this one, but not here, ---*/
07131    /*---           transform the points to this dataset.   ---*/
07132 
07133    dont_fix_pts = ! rescaled ;  /* if didn't rescale, don't need to fix */
07134 
07135    if( im3d->anat_now->pts == NULL ){
07136       int ii ;
07137       THD_3dim_dataset * dset_orig = NULL ;
07138       THD_fvec3 fv ;
07139 
07140 STATUS(" -- scanning for points in other datasets") ;
07141       for( ii=0 ; ii <= LAST_VIEW_TYPE ; ii++ ){
07142          if( ISVALID_3DIM_DATASET(im3d->anat_dset[ii]) &&
07143              im3d->anat_dset[ii]->pts != NULL &&
07144              im3d->anat_dset[ii]->pts_original == True ){
07145 
07146             dset_orig = im3d->anat_dset[ii] ;
07147             break ;
07148          }
07149       }
07150 
07151       if( dset_orig != NULL ){
07152 STATUS(" -- processing points in other dataset") ;
07153 
07154          dont_fix_pts                 = True ;   /* fixing here, so not later */
07155          im3d->anat_now->pts_original = False ;
07156          INIT_VLIST( im3d->anat_now->pts , im3d->anat_now ) ;
07157 
07158          for( ii=0 ; ii < dset_orig->pts->num ; ii++ ){
07159             fv = THD_3dmm_to_dicomm( dset_orig , dset_orig->pts->xyz[ii] ) ;
07160             fv = AFNI_transform_vector( dset_orig , fv  , im3d->anat_now ) ;
07161             fv = THD_dicomm_to_3dmm( im3d->anat_now , fv ) ;
07162             ADD_FVEC_TO_VLIST( im3d->anat_now->pts , fv ) ;
07163          }
07164       }
07165    }
07166 
07167    /*--------------------------------------------------*/
07168    /*--- May 1995: if points exist in this dataset, ---*/
07169    /*---           load their 3dind coordinates.    ---*/
07170 
07171    if( im3d->anat_now->pts != NULL && ! dont_fix_pts ){
07172       int ii ;
07173 STATUS(" -- processing points in this dataset") ;
07174 
07175       for( ii=0 ; ii < im3d->anat_now->pts->num ; ii++ )
07176          im3d->anat_now->pts->ijk[ii] =
07177             THD_3dmm_to_3dind( im3d->anat_now , im3d->anat_now->pts->xyz[ii] ) ;
07178    }
07179 #endif /* ALLOW_DATASET_VLIST */
07180 
07181    /*------ 06 Mar 2002: turn "SUMA to" on image popup on or off ------*/
07182 
07183    if( im3d->vwid->imag->pop_sumato_pb != NULL ){
07184      if( SESSION_HAS_SUMA(im3d->ss_now) )
07185        XtManageChild( im3d->vwid->imag->pop_sumato_pb ) ;
07186      else
07187        XtUnmanageChild( im3d->vwid->imag->pop_sumato_pb ) ;
07188    }
07189 
07190    /*------ 01 May 2002: turn "Jump to (MNI)" on or off ------*/
07191 
07192    if( im3d->vwid->imag->pop_mnito_pb != NULL ){
07193      if( CAN_TALTO(im3d) )
07194        XtManageChild( im3d->vwid->imag->pop_mnito_pb ) ;
07195      else
07196        XtUnmanageChild( im3d->vwid->imag->pop_mnito_pb ) ;
07197    }
07198 
07199    /*-------------------------------------------------------------------*/
07200    /*--- Sep 1995: turn Talairach to button on image popup on or off ---*/
07201 
07202 STATUS(" -- managing talairach_to button") ;
07203 
07204    if( im3d->vwid->imag->pop_talto_pb != NULL ){
07205      if( CAN_TALTO(im3d) ){
07206        XtSetSensitive( im3d->vwid->imag->pop_talto_pb , True ) ;
07207        if( im3d->vwid->imag->pop_whereami_pb != NULL )
07208          XtSetSensitive( im3d->vwid->imag->pop_whereami_pb , True ); /* 10 Jul 2001 */
07209        if( im3d->vwid->imag->pop_ttren_pb != NULL )
07210          XtSetSensitive( im3d->vwid->imag->pop_ttren_pb ,              /* 12 Jul 2001 */
07211                          im3d->vinfo->view_type==VIEW_TALAIRACH_TYPE); /* 01 Aug 2001 */
07212      } else {
07213        XtSetSensitive( im3d->vwid->imag->pop_talto_pb, False ) ;
07214        if( im3d->vwid->imag->pop_whereami_pb != NULL )
07215          XtSetSensitive( im3d->vwid->imag->pop_whereami_pb, False ); /* 10 Jul 2001 */
07216        if( im3d->vwid->imag->pop_ttren_pb != NULL )
07217          XtSetSensitive( im3d->vwid->imag->pop_ttren_pb , False ); /* 12 Jul 2001 */
07218      }
07219    }
07220 
07221    /*--- 25 Jul 2001: sensitize 'See TT Atlas Regions' button ---*/
07222 
07223 #if 1
07224    XtSetSensitive( im3d->vwid->func->see_ttatlas_bbox->wrowcol ,
07225                    (Boolean)( im3d->anat_now->view_type == VIEW_TALAIRACH_TYPE &&
07226                               TT_retrieve_atlas()       != NULL                  ) ) ;
07227 #else
07228    XtSetSensitive( im3d->vwid->func->see_ttatlas_bbox->wrowcol , False ) ;
07229 #endif
07230 
07231    /*------------------------------------*/
07232    /*--- May 1996: Time index control ---*/
07233    /*--- Mar 1997: Allow FIM also     ---*/
07234 
07235    top = DSET_NUM_TIMES(im3d->anat_now) ;
07236    if( ISVALID_3DIM_DATASET(im3d->fim_now) )
07237       top = MAX( top , DSET_NUM_TIMES(im3d->fim_now) ) ;
07238 
07239    if( top > 1 ){
07240      MCW_arrowval *tav = im3d->vwid->imag->time_index_av ;
07241 STATUS(" -- turning time index control on") ;
07242 
07243      AV_SENSITIZE( tav , True ) ; im3d->vinfo->time_on = 1 ;
07244      tav->fmax = tav->imax = top - 1 ; im3d->vinfo->top_index = top ;
07245      if( im3d->vinfo->time_index > tav->imax ){
07246        im3d->vinfo->time_index = tav->imax ;
07247        AV_assign_ival( tav , tav->imax ) ;
07248        AFNI_process_timeindex(im3d) ;       /* 29 Jan 2003 */
07249      }
07250    } else {
07251 STATUS(" -- turning time index control off") ;
07252      AV_SENSITIZE( im3d->vwid->imag->time_index_av , False ) ;
07253      im3d->vinfo->time_on = 0 ;
07254    }
07255 
07256    /*--------------------------------------------------------------*/
07257    /*--- 19 Nov 1996: Set FIM-able dataset to this, if possible ---*/
07258 
07259    if( DSET_GRAPHABLE(im3d->anat_now) )
07260      im3d->fimdata->fimdset = im3d->anat_now ;
07261 
07262    ALLOW_COMPUTE_FIM(im3d) ;
07263 
07264    /*----------------------------------------------------------------*/
07265    /*--- 19 Aug 2002: enable/disable surface chooser button, etc. ---*/
07266 
07267    AFNI_update_surface_widgets( im3d ) ;
07268 
07269    /*------------------------------------------*/
07270    /*--- attach to viewing windows (if any) ---*/
07271 
07272    AFNI_underlay_CB( NULL , (XtPointer) im3d , NULL ) ;
07273 
07274    /* 04 Nov 2003: set range for image grayscaling? */
07275 
07276    AFNI_range_setter( im3d , im3d->s123 ) ;
07277    AFNI_range_setter( im3d , im3d->s231 ) ;
07278    AFNI_range_setter( im3d , im3d->s312 ) ;
07279 
07280    im3d->vinfo->tempflag = 0 ;
07281 
07282    old_im3d = im3d ;
07283    old_fim  = im3d->fim_now ;   /* remembrance */
07284    old_anat = im3d->anat_now ;
07285 
07286    EXRETURN ;
07287 }

void AFNI_sonnet_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 10045 of file afni.c.

References AFNI_popup_sonnet(), AFNI_sonnet_CB(), client_data, AFNI_program_widgets::hidden_sonnet_pb, IM3D_VALID, MCW_choose_cbs::ival, MCW_choose_integer(), mcwCR_integer, NO_frivolities, NUM_SONNETS, AFNI_widget_set::picture, AFNI_widget_set::prog, MCW_choose_cbs::reason, and Three_D_View::vwid.

Referenced by AFNI_sonnet_CB().

10046 {
10047    Three_D_View * im3d = (Three_D_View *) client_data ;
10048    MCW_choose_cbs * cbs ;
10049 
10050    if( NO_frivolities || !IM3D_VALID(im3d) ) return ;
10051 
10052    if( w == im3d->vwid->prog->hidden_sonnet_pb ){  /* start the process */
10053 
10054       MCW_choose_integer( im3d->vwid->picture ,
10055                           "Sonnet " ,
10056                           1 , NUM_SONNETS , sonnet_index+1 ,
10057                           AFNI_sonnet_CB , (XtPointer) im3d ) ;
10058       return ;
10059    }
10060 
10061    /** if get to here, finish the process **/
10062 
10063    cbs = (MCW_choose_cbs *) call_data ;
10064    if( cbs->reason != mcwCR_integer ){  /* error */
10065       XBell( XtDisplay(w) , 100 ) ; return ;
10066    }
10067 
10068    AFNI_popup_sonnet( im3d->vwid->picture , cbs->ival ) ;
10069    return ;
10070 }

void AFNI_splashdown void   
 

Definition at line 58 of file afni_splash.c.

References COX_clock_time(), do_write, drive_MCW_imseq(), ENTRY, getenv(), handle, isqDR_reimage, mri_data_pointer(), mri_free(), myXtFree, MRI_IMAGE::nvox, MRI_IMAGE::pixel_size, PLUGIN_impopper::seq, SPLASH_popup_image(), and strtod().

Referenced by AFNI_splashup(), AFNI_startup_layout_CB(), and MAIN_workprocess().

00059 {
00060    PLUGIN_impopper *ppp = (PLUGIN_impopper *) handle ;
00061 
00062 ENTRY("AFNI_splashdown") ;
00063 
00064    if( handle != NULL ){
00065 #ifdef USE_FADING
00066       float max_splash = 3.0 ;
00067       char *hh = getenv("AFNI_SPLASHTIME") ;
00068       if( hh != NULL ) max_splash = strtod(hh,NULL) ;
00069       if( max_splash > 0.0 ){
00070          if( imspl != NULL ){  /* fade gently away */
00071             byte *bspl ; int ii , nv , kk ; double et ;
00072             bspl = mri_data_pointer(imspl) ;
00073             nv   = (imspl->pixel_size) * (imspl->nvox) ;
00074             et   = COX_clock_time() ;
00075             do_write = 0 ;
00076             for( kk=0 ; kk < 10 ; kk++ ){
00077 #if 0
00078                for( ii=0 ; ii < nv ; ii++ ) bspl[ii] *= 0.92 ;
00079 #else
00080                for( ii=0 ; ii < nv ; ii++ ) bspl[ii] = (15*bspl[ii]) >> 4 ;
00081 #endif
00082                SPLASH_popup_image(handle,imspl) ;
00083                drive_MCW_imseq( ppp->seq , isqDR_reimage , (XtPointer) 0 ) ;
00084                if( COX_clock_time()-et > 2.1 ) break ;
00085             }
00086          }
00087       }
00088 #endif
00089       SPLASH_popup_image(handle,NULL); myXtFree(handle) ; /* get rid of window */
00090    }
00091    mri_free(imspl) ; imspl = NULL ;
00092    do_write = ( (lrand48() >> 8) % 3 == 0 ) ? 2 : 1 ;
00093    EXRETURN ;
00094 }

void AFNI_splashraise void   
 

Definition at line 46 of file afni_splash.c.

References handle, ISQ_REALZ, PLUGIN_impopper::seq, and MCW_imseq::wtop.

Referenced by AFNI_startup_layout_CB().

00046                                           : bring splash window to the top */
00047 {
00048    PLUGIN_impopper *ppp = (PLUGIN_impopper *) handle ;
00049 
00050    if( ppp != NULL && ISQ_REALZ(ppp->seq) )
00051       XMapRaised( XtDisplay(ppp->seq->wtop) , XtWindow(ppp->seq->wtop) ) ;
00052 
00053    return ;
00054 }

void AFNI_splashup void   
 

Definition at line 105 of file afni_splash.c.

References AFNI_find_jpegs(), AFNI_find_todays_face(), AFNI_splashdown(), AFNI_library_type::dc, drive_MCW_imseq(), ENTRY, first_splash, fname_face, fname_splash, getenv(), GLOBAL_library, handle, MCW_DC::height, ISQ_options::improc_code, ISQ_IMPROC_SHARP, ISQ_REALZ, isqDR_clearstat, isqDR_getoptions, isqDR_imhelptext, isqDR_offwid, isqDR_onoffwid, isqDR_options, isqDR_realize, isqDR_reimage, isqDR_title, IXOVER, JYOVER, malloc, MAX_XOVER, MAX_YOVER, mri_free(), mri_invert_inplace(), mri_overlay_2D(), mri_read_stuff(), mri_resize(), NC_blank, NC_facetitle, NLINE_facetitle, NORMAL_cursorize, NOVER, num_face, num_splash, MRI_IMAGE::nx, NX_facetitle, NX_TOPOVER, MRI_IMAGE::ny, NY_facetitle, NY_TOPOVER, PLUTO_popup_open, reload_DC_colordef(), PLUGIN_impopper::seq, SPLASH_decode26(), SPLASH_decodexx(), SPLASH_popup_image(), STATUS, MCW_DC::width, MCW_imseq::wimage, and MCW_imseq::wtop.

Referenced by MAIN_workprocess().

00106 {
00107    PLUGIN_impopper *ppp ;
00108    MRI_IMAGE *imov ;
00109    int    dd,ee ;
00110    char   bb ;
00111    byte *bspl ;
00112    int   sxx,syy ;
00113    char *sen ;
00114    static int ncall=0 , nov , dnov , nm=-1 ;
00115 
00116 ENTRY("AFNI_splashup") ;
00117 
00118    /*--- create splash image ---*/
00119 
00120    if( ! PLUTO_popup_open(handle) ){
00121 
00122       int nxov,nyov,ff ;
00123 
00124       /* get some fun stuff, first time in */
00125 
00126       if( ncall == 0 ){
00127         num_face   = AFNI_find_jpegs( "face_"   , &fname_face   ) ;
00128         num_splash = AFNI_find_jpegs( "splash_" , &fname_splash ) ;
00129         if( num_splash > 0 ){
00130           int np ;
00131           for( np=0 ; np < num_splash ; np++ )
00132             if( strstr(fname_splash[np],"sscc") != NULL ) break ;
00133           if( np < num_splash ) first_splash = np ;
00134 #if 0
00135           for( np=0 ; np < num_splash ; np++ )
00136            fprintf(stderr,"SPLASH: %s\n",fname_splash[np]) ;
00137 #endif
00138         }
00139       }
00140 
00141       /* create basic splash image */
00142 
00143       mri_free(imspl) ;
00144       imspl = SPLASH_decodexx( NX_blank, NY_blank, NLINE_blank, NC_blank,
00145                                RMAP_blank,GMAP_blank,BMAP_blank, BAR_blank ) ;
00146 
00147       if( ncall==0 ){                           /* initialize random */
00148         nov  =    (lrand48() >> 8) % NOVER  ;   /* sub-image overlay */
00149         dnov = 2*((lrand48() >> 8) % 2) - 1 ;   /* index & direction */
00150       }
00151 
00152       /* Facial overlay: */
00153       /*  if have face jpegs, use them; else, use builtin faces [28 Mar 2003] */
00154 
00155       imov = NULL ; ff = 0 ;
00156       if( num_face > 0 ){                       /* external face_*.jpg files */
00157         static int *dold=NULL, ndold=0 ; int qq ;
00158         dd = AFNI_find_todays_face() ;               /* 30 Mar 2005: find a */
00159         if( dd >= 0 ){ ff=-1; goto Have_dd; }     /* special face for today */
00160         if( ndold == 0 && num_face > 1 ){
00161           ndold = num_face/2 ;
00162           dold  = (int *) malloc(sizeof(int)*ndold) ;
00163           for( qq=0 ; qq < ndold ; qq++ ) dold[qq] = -1 ;
00164         }
00165       Retry_dd:
00166         dd = (lrand48() >> 8) % num_face ;              /* pick random file */
00167         if( num_face > 1 ){                       /* check if used recently */
00168           for( qq=0 ; qq < ndold && dold[qq] != dd ; qq++ ) ;       /* nada */
00169           if( qq < ndold ) goto Retry_dd ;                    /* was recent */
00170           for( qq=1 ; qq < ndold ; qq++ )        /* wasn't, so save in list */
00171             dold[qq-1] = dold[qq] ;
00172           dold[ndold-1] = dd ;
00173         }
00174       Have_dd:
00175         imov = mri_read_stuff( fname_face[dd] ) ;              /* read file */
00176         if( imov != NULL && (imov->nx > MAX_XOVER || imov->ny > MAX_YOVER) ){
00177           float xfac=MAX_XOVER/(float)(imov->nx),
00178                 yfac=MAX_YOVER/(float)(imov->ny) ;    /* rescale if too big */
00179           int nxnew,nynew ; MRI_IMAGE *imq ;
00180           if( xfac > yfac ) xfac = yfac ;
00181           nxnew = (int)(xfac*imov->nx) ; nynew = (int)(xfac*imov->ny) ;
00182           imq = mri_resize( imov , nxnew,nynew ) ;          /* kind of slow */
00183           mri_free(imov); imov = imq;        /* replace with rescaled image */
00184         }
00185         if( ff == 0 && imov != NULL ){       /* ff = 2 for me, 1 for everyone else */
00186           ff = (strstr(fname_face[dd],"_rwcox") != NULL) ? 2 : 1 ;
00187         }
00188       }
00189       if( imov == NULL ){                  /* if didn't get face jpeg above */
00190         nov  = (nov+dnov+NOVER) % NOVER ;
00191         imov = SPLASH_decode26( xover[nov], yover[nov], lover[nov], bover[nov] ) ;
00192       }
00193       nxov = imov->nx ; nyov = imov->ny ;          /* size of overlay image */
00194       dd = IXOVER + (MAX_XOVER-nxov)/2 ;          /* and location to put it */
00195       ee = JYOVER + (MAX_YOVER-nyov)/2 ;
00196       mri_overlay_2D( imspl, imov, dd,ee ); mri_free(imov);
00197       if( ff > 0 ){                             /* overlay title under face */
00198         imov = SPLASH_decodexx( NX_facetitle,NY_facetitle,NLINE_facetitle,
00199                                 NC_facetitle,RMAP_facetitle,
00200                                 RMAP_facetitle,RMAP_facetitle ,
00201                                 BAR_facetitle ) ;
00202         if( ff == 2 ) mri_invert_inplace( imov ) ;           /* for me only */
00203         dd = IXOVER + (MAX_XOVER-imov->nx)/2 ; ee += nyov+1 ;
00204         mri_overlay_2D( imspl, imov, dd,ee ) ; mri_free(imov) ;
00205       }
00206 
00207       /* possibly replace the splash image at the top [26 Nov 2003] */
00208 
00209       if( (ncall > 0 || first_splash >= 0) && num_splash > 0 &&
00210           (ncall <= num_splash  || ((lrand48() >> 8 ) % 7) != 0) ){
00211 
00212         static int np=-1 , dp ;
00213         if( np < 0 ){
00214           np = (first_splash >= 0) ? first_splash
00215                                    : (lrand48() >> 8) % num_splash ;
00216           dp = 2*((lrand48() >> 8)%2)-1 ;  /* -1 or +1 */
00217         } else
00218           np = (np+dp+num_splash)%(num_splash) ;
00219         imov = mri_read_stuff( fname_splash[np] ) ;
00220         if( imov != NULL ){
00221 #if 0
00222           reload_DC_colordef( GLOBAL_library.dc ) ;
00223           if( imov->nx != NX_TOPOVER || imov->ny != NY_TOPOVER ){
00224             MRI_IMAGE *imq ;
00225             imq = mri_resize( imov , NX_TOPOVER,NY_TOPOVER ) ; /* kind of slow */
00226             if( imq != NULL ){ mri_free(imov); imov = imq; }
00227           }
00228 #endif
00229           STATUS("overlaying splash image") ;
00230           mri_overlay_2D( imspl , imov , 0,0 ) ;
00231           mri_free(imov) ;
00232         }
00233 
00234       } /* end of replacing splash image */
00235 
00236       /*-- show the image at last! --*/
00237 
00238       handle = SPLASH_popup_image( handle, imspl ) ;
00239 #ifndef USE_FADING
00240       mri_free(imspl) ; imspl = NULL ;
00241 #endif
00242 
00243       /* modify image display properties */
00244 
00245       ppp = (PLUGIN_impopper *) handle ;
00246 
00247       if( ncall==0 ){ dd = MWM_DECOR_BORDER ;
00248                       ee = 0 ;
00249       } else        { dd = MWM_DECOR_BORDER | MWM_DECOR_TITLE | MWM_DECOR_MENU ;
00250                       ee = MWM_FUNC_MOVE | MWM_FUNC_CLOSE ;
00251       }
00252 
00253       /* 21 Sep 2000 -- allow user to control splash position */
00254 
00255       sxx = (GLOBAL_library.dc->width-NX_blank)/2 ;
00256       syy = 100 ;
00257       sen = getenv("AFNI_SPLASH_XY") ;
00258       if( sen != NULL ){
00259          int n,x,y ;
00260          n = sscanf(sen,"%d:%d",&x,&y) ;
00261          if( n == 2 && x >= 0 && x < GLOBAL_library.dc->width &&
00262                        y >= 0 && y < GLOBAL_library.dc->height  ){
00263 
00264             sxx = x ; syy = y ;
00265          }
00266       }
00267 
00268       XtVaSetValues( ppp->seq->wtop ,
00269                        XmNx , sxx ,
00270                        XmNy , syy ,
00271                        XmNmwmDecorations , dd ,
00272                        XmNmwmFunctions   , ee ,
00273                   /**  XmNoverrideRedirect , True , **/
00274                      NULL ) ;
00275 
00276       /* actually popup image display */
00277 
00278       drive_MCW_imseq( ppp->seq , isqDR_realize   , NULL                     ) ;
00279       drive_MCW_imseq( ppp->seq , isqDR_onoffwid  , (XtPointer) isqDR_offwid ) ;
00280       drive_MCW_imseq( ppp->seq , isqDR_clearstat , NULL                     ) ;
00281 #if 0
00282       drive_MCW_imseq( ppp->seq , isqDR_reimage   , (XtPointer) 0            ) ;
00283 #endif
00284 
00285       NORMAL_cursorize( ppp->seq->wimage ) ; /* 07 Dec 2001 */
00286 
00287       /* some super-frivolities */
00288 
00289       if( ncall==0 ){
00290          drive_MCW_imseq( ppp->seq , isqDR_title , (XtPointer) "AFNI!" ) ;
00291          drive_MCW_imseq( ppp->seq , isqDR_imhelptext,
00292                           (XtPointer)
00293                            " \n"
00294                            " Thou art indeed just, Lord, if I contend\n"
00295                            "  With thee; but, sir, so what I plead is just.\n"
00296                            "  Why do sinners' ways prosper? and why must\n"
00297                            "  Disappointment all I endeavour end?\n"
00298                            " Wert thou my enemy, O thou my friend,\n"
00299                            "  How wouldst thou worse, I wonder, than thou dost\n"
00300                            "  Defeat, thwart me? Oh, the sots and thralls of lust\n"
00301                            "  Do in spare hours more thrive than I that spend,\n"
00302                            "  Sir, life upon thy cause. See, banks and brakes\n"
00303                            "  Now, leaved how thick! laced they are again\n"
00304                            "  With fretty chervil, look, and fresh wind shakes\n"
00305                            "  Them; birds build -- but not I build; no, but strain,\n"
00306                            "  Time's eunuch, and not breed one work that wakes.\n"
00307                            " Mine, O thou lord of life, send my roots rain.\n"
00308                         ) ;
00309 
00310 #if 0
00311         {                      /* 21 Jun 2000 -- turn sharpening on */
00312          ISQ_options opt ;
00313          drive_MCW_imseq( ppp->seq , isqDR_getoptions , (XtPointer) &opt ) ;
00314          opt.improc_code |= ISQ_IMPROC_SHARP ;
00315          drive_MCW_imseq( ppp->seq , isqDR_options    , (XtPointer) &opt ) ;
00316         }
00317 #endif
00318       }
00319 
00320    /*--- destroy splash image ---*/
00321 
00322    } else {
00323       ppp = (PLUGIN_impopper *) handle ;
00324 
00325       /* bring splash window to the top */
00326 
00327       if( ISQ_REALZ(ppp->seq) )
00328          XMapRaised( XtDisplay(ppp->seq->wtop) , XtWindow(ppp->seq->wtop) ) ;
00329 
00330       AFNI_splashdown() ;  /* off with their heads */
00331    }
00332 
00333    ncall++ ; EXRETURN ;
00334 }

void AFNI_start_version_check void   
 

Start the Web fetch to check the AFNI version in a child process. To complete things, call AFNI_version_check() somewhat later. --------------------------------------------------------------------------

Definition at line 47 of file afni_version.c.

References AFNI_noenv(), atexit(), disabled, FAIL_MESSAGE, getenv(), iochan_clearcheck(), iochan_enable_perror(), iochan_init(), iochan_sendall(), iochan_sleep(), iochan_writecheck(), NI_free_element(), NI_get_attribute(), NI_read_element(), NI_stream_close(), NI_stream_open(), read_URL(), set_HTTP_10(), set_HTTP_user_agent(), STR_CHILD, vc_child_pid, vc_exit(), VERSION_URL, vexit(), and VSIZE.

Referenced by main().

00048 {
00049    pid_t child_pid ;
00050 
00051 #ifdef CYGWIN  /* 18 Dec 2002 */
00052    FAIL_MESSAGE("not possible under Cygwin") ;
00053    return ;
00054 #else
00055 
00056    /*-- decide if we are to do anything --*/
00057 
00058    if( AFNI_noenv("AFNI_VERSION_CHECK") ){    /* never check */
00059      FAIL_MESSAGE("AFNI_VERSION_CHECK forbids") ;
00060      return ;
00061    }
00062 
00063 #undef  VDELAY
00064 #define VDELAY 429999  /* 429999 s = 5 days */
00065    /* check if we did this in the last VDELAY seconds */
00066 
00067    { char *home=getenv("HOME") , mname[VSIZE]="file:" ;
00068      NI_stream ns ;
00069      if( home != NULL ) strcat(mname,home) ;
00070      strcat(mname,"/.afni.vctime") ;
00071      ns = NI_stream_open( mname , "r" ) ;
00072      if( ns != NULL ){
00073        NI_element *nel = NI_read_element(ns,22) ;
00074        NI_stream_close(ns) ;
00075        if( nel != NULL ){
00076          char *rhs ;
00077          rhs = NI_get_attribute( nel , "version_check_time" ) ;
00078          if( rhs != NULL ){
00079            int last_time = strtol(rhs,NULL,10) ;
00080            int dtime = ((int)time(NULL)) - last_time ;
00081            if( dtime >= 0 && dtime < VDELAY ){ /* don't check */
00082              NI_free_element(nel) ; disabled = 1 ; return ;
00083            }
00084          }
00085          rhs = NI_get_attribute(nel,"version_string") ;  /* 27 Jan 2003 */
00086          if( rhs != NULL && strcmp(rhs,VERSION) != 0 ){
00087            fprintf(stderr,
00088                    "\n** Your AFNI version changed from %s to %s since last check\n",
00089                    rhs , VERSION ) ;
00090          }
00091          NI_free_element(nel) ;
00092        }
00093      }
00094    }
00095 
00096    /*-- OK, start the child process --*/
00097 
00098    child_pid = fork() ;
00099    if( child_pid == (pid_t)(-1) ){  /* bad */
00100      FAIL_MESSAGE("can't fork") ;
00101      return ;
00102    }
00103 
00104    if( child_pid > 0 ){                     /* I'm the parent */
00105 
00106      /*-- save PID of child for later use --*/
00107 
00108      vc_child_pid = child_pid ;
00109 
00110      /*-- open a shared mem segment to talk to child --*/
00111 
00112      vc_ioc = iochan_init( STR_CHILD , "accept" ) ;
00113      if( vc_ioc == NULL ){
00114        kill(child_pid,SIGTERM) ;            /* cf. Abraham and Isaac */
00115        vc_child_pid = (pid_t)(-1) ;
00116        FAIL_MESSAGE("can't open connection to child") ;
00117      } else {
00118        fprintf(stderr,"\n** Version check: " VERSION_URL "\n" ); /* 13 Jan 2003 */
00119        atexit( vc_exit ) ;                                       /* 12 Dec 2002 */
00120      }
00121      return ;
00122 
00123    } else {                                 /* I'm the child */
00124                                             /* (never returns) */
00125      int nbuf=0 , jj ;
00126      char *vbuf=NULL ;
00127      IOCHAN *ioc ;
00128      struct utsname ubuf ;
00129      char ua[512] ;
00130 
00131      iochan_enable_perror(0) ;   /* don't print TCP/IP error messages */
00132      signal( SIGTERM , vexit ) ; /* if parent kills us, call vexit()  */
00133 
00134      /*-- get information from the AFNI server --*/
00135 
00136 #define USE_HTTP_10
00137 
00138 #ifdef USE_HTTP_10
00139 #  undef PCLAB
00140 #  ifdef SHOWOFF
00141 #    undef SHSH
00142 #    undef SHSHSH
00143 #    define SHSH(x)   #x
00144 #    define SHSHSH(x) SHSH(x)
00145 #    define PCLAB     SHSHSH(SHOWOFF)
00146 #  else
00147 #    define PCLAB     "Unknown"
00148 #  endif
00149 #endif
00150 
00151      /** 25 Mar 2005: send more info in the request header **/
00152 
00153 #ifdef USE_HTTP_10
00154      ubuf.nodename[0] = ubuf.sysname[0] = ubuf.machine[0] = '\0' ;
00155      jj = uname( &ubuf ) ;
00156      if( jj >= 0 && ubuf.nodename[0] != '\0' )
00157        sprintf( ua ,
00158                "afni (avers='%s'; prec='%s' node='%s'; sys='%s'; mach='%s')" ,
00159                 VERSION, PCLAB, ubuf.nodename, ubuf.sysname, ubuf.machine   ) ;
00160      else
00161        sprintf( ua , "afni (avers='%s'; prec='%s')" , VERSION , PCLAB ) ;
00162 
00163      set_HTTP_10( 1 ) ;
00164      set_HTTP_user_agent( ua ) ;
00165 #else
00166      set_HTTP_10( 0 ) ;
00167 #endif
00168 
00169      /* send the request */
00170 
00171      nbuf = read_URL( VERSION_URL , &vbuf ) ;  /* may take a while */
00172 
00173      set_HTTP_10( 0 ) ;
00174 
00175      /*-- if this failed, quit --*/
00176 
00177      if( nbuf <= 0 || vbuf == NULL || vbuf[0] == '\0' ) vexit(1);
00178 
00179      /*-- talk to parent process thru shared memory --*/
00180 
00181      ioc = iochan_init( STR_CHILD , "create" ) ;
00182      if( ioc == NULL )                                  vexit(2);
00183 
00184      /*-- wait until ioc is ready for writing --*/
00185 
00186      jj = iochan_writecheck(ioc,-1) ;
00187      if( jj < 0 )                                       vexit(3);
00188 
00189      /*-- send the info in vbuf --*/
00190 
00191      iochan_sendall( ioc , vbuf , nbuf ) ;
00192      while( ! iochan_clearcheck(ioc,10) )  /* loop until cleared */
00193        iochan_sleep(10) ;                  /* by parent process  */
00194 
00195      iochan_sleep(10); /* a little extra napping */     _exit(0);
00196    }
00197 #endif  /* not CYGWIN */
00198 }

void AFNI_startup_3dview Three_D_View   im3d
 

done at last *

Definition at line 4463 of file afni.c.

References MCW_pbar::bigmode, ENTRY, AFNI_widget_set::func, GLOBAL_library, IM3D_VALID, AFNI_function_widgets::inten_pbar, MCW_function_list::num, MCW_pbar::panew, AFNI_function_widgets::pbar_transform0D_av, AFNI_function_widgets::pbar_transform0D_func, AFNI_function_widgets::pbar_transform0D_index, AFNI_function_widgets::pbar_transform2D_av, AFNI_function_widgets::pbar_transform2D_func, AFNI_function_widgets::pbar_transform2D_index, POPUP_cursorize, refit_MCW_optmenu(), AFNI_library_type::registered_0D, AFNI_library_type::registered_2D, Three_D_View::vwid, and MCW_arrowval::wrowcol.

04464 {
04465    static int old_0D_num=0 , old_2D_num=0 ;
04466 
04467 ENTRY("AFNI_startup_3dview") ;
04468 
04469    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04470 
04471    /* the pbar Tran 0D menu */
04472 
04473    if( GLOBAL_library.registered_0D.num != old_0D_num ){
04474       old_0D_num = GLOBAL_library.registered_0D.num ;
04475       refit_MCW_optmenu( im3d->vwid->func->pbar_transform0D_av ,
04476                            0 ,                                 /* new minval */
04477                            GLOBAL_library.registered_0D.num ,  /* new maxval */
04478                            0 ,                                 /* new inival */
04479                            0 ,                                 /* new decim? */
04480                            ISQ_transform_label ,               /* text func  */
04481                            &(GLOBAL_library.registered_0D)     /* text data  */
04482                         ) ;
04483       XtManageChild( im3d->vwid->func->pbar_transform0D_av->wrowcol ) ;
04484    } else {
04485       if( old_0D_num == 0 )
04486         XtUnmanageChild( im3d->vwid->func->pbar_transform0D_av->wrowcol ) ;
04487    }
04488 
04489    im3d->vwid->func->pbar_transform0D_index = 0 ;
04490    im3d->vwid->func->pbar_transform0D_func  = NULL ;
04491 
04492    /* the pbar Tran 2D menu */
04493 
04494    if( GLOBAL_library.registered_2D.num != old_2D_num ){
04495       old_2D_num = GLOBAL_library.registered_2D.num ;
04496       refit_MCW_optmenu( im3d->vwid->func->pbar_transform2D_av ,
04497                            0 ,                                 /* new minval */
04498                            GLOBAL_library.registered_2D.num ,  /* new maxval */
04499                            0 ,                                 /* new inival */
04500                            0 ,                                 /* new decim? */
04501                            ISQ_transform_label ,               /* text func  */
04502                            &(GLOBAL_library.registered_2D)     /* text data  */
04503                         ) ;
04504       XtManageChild( im3d->vwid->func->pbar_transform2D_av->wrowcol ) ;
04505    } else {
04506       if( old_2D_num == 0 )
04507         XtUnmanageChild( im3d->vwid->func->pbar_transform2D_av->wrowcol ) ;
04508    }
04509 
04510    im3d->vwid->func->pbar_transform2D_index = 0 ;
04511    im3d->vwid->func->pbar_transform2D_func  = NULL ;
04512 
04513    /* 08 Apr 2005: the cursor on the pbar? */
04514 
04515    if( im3d->vwid->func->inten_pbar->bigmode )
04516      POPUP_cursorize( im3d->vwid->func->inten_pbar->panew ) ;
04517 
04518    /* Hey Rocky!  Watch me pull a rabbit out of my hat! */
04519 
04520    EXRETURN ;
04521 }

void AFNI_startup_layout_CB XtPointer   ,
XtIntervalId *   
 

Definition at line 886 of file afni_splash.c.

References ACTIVATE_MASK, AFNI_crosshair_visible_CB(), AFNI_decode_geom(), AFNI_make_controller(), AFNI_splashdown(), AFNI_splashraise(), AFNI_suck_file(), AFNI_view_xyz_CB(), AFNI_XHAIRS_SINGLE, AV_assign_ival(), client_data, AFNI_library_type::controllers, AFNI_imaging_widgets::crosshair_av, Three_D_View::dc, DC_find_overlay_color(), drive_MCW_grapher(), drive_MCW_imseq(), ENTRY, MCW_grapher::fdw_graph, FRAC_MIN, free, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, get_linbuf(), GLOBAL_library, graDR_setmatrix, graDR_setpinnum, AFNI_imaging_widgets::graph_xyz_pb, AFNI_imaging_widgets::graph_yzx_pb, AFNI_imaging_widgets::graph_zxy_pb, AFNI_widget_set::imag, AFNI_imaging_widgets::image_xyz_pb, AFNI_imaging_widgets::image_yzx_pb, AFNI_imaging_widgets::image_zxy_pb, isq, isqDR_setifrac, isqDR_setmontage, ISTARRED, linbuf, malloc, MAX_CONTROLLERS, MONT_NMAX, mp, my_getenv(), NGMAX, NLBUF, AFNI_widget_set::nplugbut, NULL_MASK, NWBUF, PLUG_startup_plugin_CB(), AFNI_widget_set::plugbut, AFNI_widget_set::plugint, AFNI_widget_set::pluglab, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, STATUS, strtod(), AFNI_widget_set::top_shell, Three_D_View::vwid, MCW_imseq::wtop, and YESSISH.

00887 {
00888    char *fname = (char *) client_data ;
00889    int   nbuf , ii , goslow ;
00890    char *fbuf , *fptr ;
00891    char lword[NWBUF] ;
00892 
00893    int  controller_mask[MAX_CONTROLLERS]           ;
00894    char controller_geom[MAX_CONTROLLERS][NGMAX]    ;
00895 
00896    int  image_mask     [MAX_CONTROLLERS][3]        ;
00897    char image_geom     [MAX_CONTROLLERS][3][NGMAX] ;
00898    float image_ifrac   [MAX_CONTROLLERS][3]        ;
00899    char image_mont     [MAX_CONTROLLERS][3][NGMAX] ;
00900 
00901    int  graph_mask     [MAX_CONTROLLERS][3]        ;
00902    char graph_geom     [MAX_CONTROLLERS][3][NGMAX] ;
00903    int  graph_matrix   [MAX_CONTROLLERS][3]        ;
00904    int  graph_pinnum   [MAX_CONTROLLERS][3]        ;
00905 
00906    int cc,ww , gww,ghh,gxx,gyy ;
00907    char *e_asp ;
00908    int    e_turnoff=0 ;
00909 
00910    int *  plugin_cont = NULL ;
00911    char **plugin_geom = NULL ;
00912    int ipl ;
00913 
00914    Three_D_View *im3d         = GLOBAL_library.controllers[0] ; /* already open */
00915 
00916 #ifdef ALLOW_PLUGINS
00917    int      npbut              = im3d->vwid->nplugbut ;      /* how many plugins */
00918    char **  pluglab            = im3d->vwid->pluglab ;       /* their labels     */
00919    PLUGIN_interface ** plugint = im3d->vwid->plugint ;       /* their interfaces */
00920 #endif
00921 
00922 ENTRY("AFNI_startup_layout_CB") ;
00923 
00924    if( fname == NULL || fname[0] == '\0' ){ AFNI_splashdown(); EXRETURN; }
00925 
00926    /* read layout file */
00927 
00928    fbuf = AFNI_suck_file(fname); if( fbuf == NULL ){ AFNI_splashdown(); EXRETURN; }
00929    nbuf = strlen(fbuf) ;         if( nbuf == 0    ){ AFNI_splashdown(); EXRETURN; }
00930 
00931    fptr = fbuf ; linbuf = (char *) malloc(sizeof(char)*(NLBUF+1)) ;
00932 
00933 if(PRINT_TRACING)
00934 { char str[256] ;
00935   sprintf(str,"Reading AFNI layout file = %s (%d bytes)",fname,nbuf) ;
00936   STATUS(str);}
00937 
00938    /*-- read lines until find "***LAYOUT" --*/
00939 
00940    do {
00941       ii = get_linbuf( fptr ) ; fptr += ii ;
00942       if( linbuf[0] == '\0' || fptr-fbuf >= nbuf ){  /* didn't find it */
00943 STATUS("no ***LAYOUT found") ;
00944          fprintf(stderr,"\n*** LAYOUT not found in layout file %s\n",fname);
00945          free(fbuf); free(linbuf); AFNI_splashdown(); EXRETURN;
00946       }
00947    } while( strncmp(linbuf,"***LAYOUT",9) != 0 ) ;
00948 
00949    goslow = (strstr(linbuf,"slow") != NULL) ;  /* slow down the startup? */
00950 
00951    /*-- initialize controllers, images, and graphs to do nothing --*/
00952 
00953    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00954       controller_geom[cc][0] =
00955        image_geom[cc][0][0] = image_geom[cc][1][0] = image_geom[cc][2][0] =
00956        image_mont[cc][0][0] = image_mont[cc][1][0] = image_mont[cc][2][0] =
00957        graph_geom[cc][0][0] = graph_geom[cc][1][0] = graph_geom[cc][1][0] = '\0' ;
00958 
00959       controller_mask[cc] =
00960        image_mask[cc][0] = image_mask[cc][1] = image_mask[cc][2] =
00961        graph_mask[cc][0] = graph_mask[cc][1] = graph_mask[cc][2] = NULL_MASK ;
00962 
00963       image_ifrac[cc][0] = image_ifrac[cc][1] = image_ifrac[cc][2] = 0.0 ;
00964 
00965       graph_pinnum[cc][0] = graph_pinnum[cc][1] = graph_pinnum[cc][2] =
00966       graph_matrix[cc][0] = graph_matrix[cc][1] = graph_matrix[cc][2] = 0 ;
00967    }
00968 
00969    /*-- initialize list of plugins --*/
00970 
00971 #ifdef ALLOW_PLUGINS
00972    if( npbut > 0 ){
00973       plugin_cont = (int *)   malloc(sizeof(int)   *npbut) ;
00974       plugin_geom = (char **) malloc(sizeof(char *)*npbut) ;
00975       for( ipl=0 ; ipl < npbut ; ipl++ ){
00976          plugin_cont[ipl] = -1 ;      /* controller index to start it with */
00977          plugin_geom[ipl] = NULL ;    /* geometry string to start it with */
00978       }
00979    }
00980 #endif
00981 
00982    /*-- read and process further lines until a "***" line is found, or the end --*/
00983 
00984    do {
00985       ii = get_linbuf( fptr ) ; fptr += ii ;
00986       if( linbuf[0] == '\0' || ISTARRED(linbuf) ) break ;  /* end of layout commands */
00987 
00988       /*-- first character of command determines controller --*/
00989 
00990       cc = linbuf[0] - 'A' ;
00991       if( cc < 0 || cc >= MAX_CONTROLLERS ) continue ;     /* illegal value */
00992 
00993       controller_mask[cc] |= ACTIVATE_MASK ;               /* must activate this one */
00994 
00995       if( linbuf[1] == '\0' ) continue;                    /* nothing more to do */
00996 
00997       /*-- do controller options --*/
00998 
00999       if( isspace(linbuf[1]) ){
01000 
01001          int jj=1 , nn ;
01002 
01003          do {                                              /* scan option words */
01004             nn = 0 ; lword[0] = '\0' ;
01005             sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01006             if( nn == 0 || lword[0] == '\0' ) break ;        /* no more options */
01007             jj += nn ;                                       /* position for next word */
01008 
01009             if( strncmp(lword,"geom=",5) == 0 ){             /* geom= */
01010                strcpy(controller_geom[cc],lword+5) ;
01011             } else {                                         /* ILLEGAL */
01012                fprintf(stderr,"\n** Illegal LAYOUT controller option: %s\n",lword) ;
01013                continue ;
01014             }
01015          } while(1) ;
01016 
01017       /*-- do sub-windows (images and graphs) --*/
01018 
01019       } else if( linbuf[1] == '.' && strncmp(linbuf+1,".plugin.",8) != 0 ){
01020 
01021          int jj=2 , nn ;
01022 
01023          nn = 0 ; lword[0] = '\0' ;                          /* get window name */
01024          sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01025          if( nn == 0 || lword[0] == '\0' ) continue ;        /* not present -> goto next line */
01026          jj += nn ;
01027 
01028               if( strncmp(lword,"axial"   ,5) == 0 ) ww = 0 ; /* get window orientation */
01029          else if( strncmp(lword,"sagittal",8) == 0 ) ww = 1 ;
01030          else if( strncmp(lword,"coronal" ,7) == 0 ) ww = 2 ;
01031          else {
01032             fprintf(stderr,"\n** Illegal LAYOUT sub-window line: %s\n",linbuf) ;
01033             continue ;
01034          }
01035 
01036          /*-- images --*/
01037 
01038          if( strstr(lword,"image") != NULL ){
01039 
01040             image_mask[cc][ww] |= ACTIVATE_MASK ;              /* mark to open */
01041 
01042             do {                                               /* scan option words */
01043                nn = 0 ; lword[0] = '\0' ;
01044                sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01045                if( nn == 0 || lword[0] == '\0' ) break ;           /* no more options */
01046                jj += nn ;
01047 
01048                if( strncmp(lword,"geom=",5) == 0 ){                /* geom= */
01049                   strcpy(image_geom[cc][ww],lword+5) ;
01050                } else if( strncmp(lword,"ifrac=",6) == 0 ){        /* ifrac= */
01051                   image_ifrac[cc][ww] = strtod( lword+6 , NULL ) ;
01052                } else if( strncmp(lword,"mont=",5) == 0 ){         /* mont= */
01053                   strcpy(image_mont[cc][ww],lword+5) ;
01054                } else {
01055                   fprintf(stderr,"\n** Illegal LAYOUT image option: %s\n",lword) ;
01056                   continue ;
01057                }
01058             } while(1) ;
01059 
01060          /*-- graphs --*/
01061 
01062          } else if( strstr(lword,"graph") != NULL ){         /* a graph window */
01063 
01064             graph_mask[cc][ww] |= ACTIVATE_MASK ;              /* mark to open */
01065 
01066             do {                                               /* scan option words */
01067                nn = 0 ; lword[0] = '\0' ;
01068                sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01069                if( nn == 0 || lword[0] == '\0' ) break ;           /* no more options */
01070                jj += nn ;
01071 
01072                if( strncmp(lword,"geom=",5) == 0 ){                /* geom= */
01073                   strcpy(graph_geom[cc][ww],lword+5) ;
01074                } else if( strncmp(lword,"matrix=",7) == 0 ){       /* matrix= */
01075                   graph_matrix[cc][ww] = (int) strtod( lword+7 , NULL ) ;
01076                } else if( strncmp(lword,"pinnum=",7) == 0 ){       /* pinnum= */
01077                   graph_pinnum[cc][ww] = (int) strtod( lword+7 , NULL ) ;
01078                } else {
01079                   fprintf(stderr,"\n** Illegal LAYOUT image option: %s\n",lword) ;
01080                   continue ;
01081                }
01082             } while(1) ;
01083 
01084          } else {                                            /* ILLEGAL */
01085             fprintf(stderr,"\n** Illegal LAYOUT line: %s\n",linbuf) ;
01086             continue ;
01087          }
01088 
01089       /*-- plugin windows --*/
01090 
01091       } else if( strncmp(linbuf+1,".plugin.",8) == 0 ){
01092 
01093 #ifdef ALLOW_PLUGINS
01094          char *pname = linbuf+9 ;
01095          int pl,ll,qq , jj,nn ;
01096 
01097          /* check name after .plugin. to match a plugin
01098             (but skip blanks in the plugin's label)     */
01099 
01100          pl = strlen(pname) ;
01101          if( pl < 1 ){
01102             fprintf(stderr,"\n** LAYOUT: unknown plugin line: %s\n",linbuf) ;
01103             continue ;
01104          }
01105 
01106          for( ipl=0 ; ipl < npbut ; ipl++ ){
01107             for( ll=strlen(pluglab[ipl]) ;   /* truncate trailing blanks */
01108                  ll >= 0 && isspace(pluglab[ipl][ll]) ; ll-- ) ; /* nada */
01109             if( ll < 0 ) continue ;                        /* all blanks?! ERROR */
01110             if( pl < ll ) continue ;                       /* too short to match */
01111             for( qq=0 ; qq < ll ; qq++ )                   /* match each nonblank */
01112                if( !isspace(pluglab[ipl][qq]) && pname[qq]!=pluglab[ipl][qq] ) break ;
01113             if( qq == ll ) break ;  /* found a match */
01114          }
01115          if( ipl >= npbut ){
01116             fprintf(stderr,"\n** LAYOUT: unknown plugin line: %s\n",linbuf) ;
01117 
01118             if( strncmp(pname,"RT Options",10) == 0 ||
01119                 strncmp(pname,"RT_Options",10) == 0   )
01120               fprintf(stderr,"**         [Realtime plugin is not active!]\n") ;
01121 
01122             continue ;
01123          }
01124 
01125          /* mark plugin to be turned on by this controller */
01126 
01127          if( plugin_cont[ipl] >= 0 )
01128             fprintf(stderr,"\n** LAYOUT: 2nd callout for this plugin: %s\n",linbuf) ;
01129 
01130          plugin_cont[ipl] = cc ;
01131          if( plugin_geom[ipl] != NULL ){  /* in case was set earlier */
01132             free(plugin_geom[ipl]) ; plugin_geom[ipl] = NULL ;
01133          }
01134 
01135          jj = 9+ll ;
01136          do {                                              /* scan option words */
01137             nn = 0 ; lword[0] = '\0' ;
01138             sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01139             if( nn == 0 || lword[0] == '\0' ) break ;        /* no more options */
01140             jj += nn ;                                       /* position for next word */
01141 
01142             if( strncmp(lword,"geom=",5) == 0 ){             /* geom= */
01143                plugin_geom[ipl] = strdup(lword+5) ;
01144             } else {                                         /* ILLEGAL */
01145                fprintf(stderr,"\n** Illegal LAYOUT .plugin. option: %s\n",lword) ;
01146                continue ;
01147             }
01148          } while(1) ;
01149 #endif
01150 
01151       /*-- Quien Sabe? --*/
01152 
01153       } else {                                             /* bad news city, Arizona */
01154 
01155          fprintf(stderr,"\n** Illegal LAYOUT line: %s\n",linbuf) ;
01156          continue ;
01157       }
01158 
01159    } while(1) ; /* end of loop over layout command lines */
01160 
01161    free(fbuf) ; free(linbuf) ;  /* toss the trash */
01162 
01163    /*-- if any image geom commands are present,
01164         we might need to enforce the aspect ratio --*/
01165 
01166    e_asp = my_getenv("AFNI_ENFORCE_ASPECT") ;
01167    if( !YESSISH(e_asp) ){
01168      putenv("AFNI_ENFORCE_ASPECT=YES") ;
01169      e_turnoff = 1 ;
01170    }
01171 
01172    /*-- now do the commanded work --*/
01173 
01174    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){  /* loop over controllers */
01175 
01176       MCW_imseq   *isq ;
01177       MCW_grapher *gra ;
01178       int          singleton=0 ;
01179 
01180       /*-- determine if this controller is to be active --*/
01181 
01182       if( (controller_mask[cc] & ACTIVATE_MASK) == 0 ) continue ; /* skip */
01183 
01184       AFNI_make_controller( cc ) ;  /* open this controller (if not already open) */
01185 
01186       if( GLOBAL_library.controllers[cc] == NULL ) continue ;   /* ERROR */
01187 
01188       if(goslow || PRINT_TRACING) sleep(1);
01189 
01190       /* set location (ignore size part of geometry, if present) */
01191 
01192       if( controller_geom[cc][0] != '\0' ){
01193          AFNI_decode_geom( controller_geom[cc] , &gww,&ghh,&gxx,&gyy ) ;
01194          if( gxx >= 0 && gyy >= 0 )
01195             XtVaSetValues( GLOBAL_library.controllers[cc]->vwid->top_shell ,
01196                            XmNx , gxx , XmNy , gyy , NULL ) ;
01197       }
01198 
01199       AFNI_splashraise() ;
01200 
01201       if(goslow || PRINT_TRACING) sleep(1);
01202 
01203       /*-- loop over image windows for this controller --*/
01204 
01205       for( ww=0 ; ww < 3 ; ww++ ){
01206 
01207          /* determine if this image is to be activated */
01208 
01209          if( (image_mask[cc][ww] & ACTIVATE_MASK) == 0 ) continue ;  /* skip */
01210 
01211          /* simulate the button press */
01212 
01213          AFNI_view_xyz_CB( (ww == 0) ? GLOBAL_library.controllers[cc]->vwid->imag->image_xyz_pb
01214                           :(ww == 1) ? GLOBAL_library.controllers[cc]->vwid->imag->image_yzx_pb
01215                           :            GLOBAL_library.controllers[cc]->vwid->imag->image_zxy_pb ,
01216                           GLOBAL_library.controllers[cc] , NULL ) ;
01217 
01218          isq = (ww == 0) ? GLOBAL_library.controllers[cc]->s123     /* get the image */
01219               :(ww == 1) ? GLOBAL_library.controllers[cc]->s231     /* viewer struct */
01220               :            GLOBAL_library.controllers[cc]->s312 ;
01221 
01222          if( isq == NULL ) continue ;   /* ERROR */
01223 
01224          if(goslow || PRINT_TRACING) sleep(1);
01225 
01226          /* change the image fraction? */
01227 
01228          if( image_ifrac[cc][ww] >= FRAC_MIN && image_ifrac[cc][ww] <= 1.0 ){
01229 
01230             drive_MCW_imseq( isq , isqDR_setifrac , (XtPointer) &(image_ifrac[cc][ww]) ) ;
01231 
01232             if(goslow || PRINT_TRACING) sleep(1);
01233          }
01234 
01235          /* change the image montage layout? */
01236 
01237          if( image_mont[cc][ww][0] != '\0' ){  /* decode montage WxH[:spacing[:gap[:color]]] */
01238             int mww=-1 , mhh=-1 , msp=-1 , mgap=-1 , nn ;
01239             char mcol[128] = "\0" ;
01240 
01241             nn = sscanf( image_mont[cc][ww] , "%dx%d:%d:%d:%s" , &mww,&mhh,&msp,&mgap,mcol ) ;
01242 
01243             if( nn >= 2 && mww >= 1 && mww <= MONT_NMAX && mhh >= 1 && mhh <= MONT_NMAX ){
01244                int mp[5] ;
01245                mp[0] = mww ; mp[1] = mhh ; mp[2] = msp ; mp[3] = mgap ;
01246                mp[4] = DC_find_overlay_color(GLOBAL_library.controllers[cc]->dc,mcol);
01247                drive_MCW_imseq( isq , isqDR_setmontage , (XtPointer) mp ) ;
01248 
01249                if( msp == 1 ) singleton++ ;
01250 
01251                if(goslow || PRINT_TRACING) sleep(1);
01252             }
01253          }
01254 
01255          /* change the image geometry? */
01256 
01257          if( image_geom[cc][ww][0] != '\0' ){
01258             AFNI_decode_geom( image_geom[cc][ww] , &gww,&ghh,&gxx,&gyy ) ;
01259             if( gxx >= 0 && gyy >= 0 )
01260                XtVaSetValues( isq->wtop , XmNx , gxx , XmNy , gyy , NULL ) ;
01261             if( gww > 0 && ghh > 0 )
01262                XtVaSetValues( isq->wtop , XmNwidth , gww , XmNheight , ghh , NULL ) ;
01263 
01264                if(goslow || PRINT_TRACING) sleep(1);
01265          }
01266 
01267          AFNI_splashraise() ;
01268 
01269       } /* end of loop over images */
01270 
01271       /* 11 Oct 2000: change crosshairs if any mont spacing=1 */
01272 
01273       if( singleton ){
01274          AV_assign_ival(
01275            GLOBAL_library.controllers[cc]->vwid->imag->crosshair_av ,
01276            AFNI_XHAIRS_SINGLE ) ;
01277 
01278          AFNI_crosshair_visible_CB(
01279            GLOBAL_library.controllers[cc]->vwid->imag->crosshair_av ,
01280            GLOBAL_library.controllers[cc] ) ;
01281       }
01282 
01283       /*-- loop over graphs --*/
01284 
01285       for( ww=0 ; ww < 3 ; ww++ ){
01286 
01287          /* is this graph to be opened? */
01288 
01289          if( (graph_mask[cc][ww] & ACTIVATE_MASK) == 0 ) continue ; /* skip */
01290 
01291          /* simulate the button press */
01292 
01293          AFNI_view_xyz_CB( (ww == 0) ? GLOBAL_library.controllers[cc]->vwid->imag->graph_xyz_pb
01294                           :(ww == 1) ? GLOBAL_library.controllers[cc]->vwid->imag->graph_yzx_pb
01295                           :            GLOBAL_library.controllers[cc]->vwid->imag->graph_zxy_pb ,
01296                           GLOBAL_library.controllers[cc] , NULL ) ;
01297 
01298          gra = (ww == 0) ? GLOBAL_library.controllers[cc]->g123    /* get the graph */
01299               :(ww == 1) ? GLOBAL_library.controllers[cc]->g231    /* viewer struct */
01300               :            GLOBAL_library.controllers[cc]->g312 ;
01301 
01302          if( gra == NULL ) continue ;   /* ERROR */
01303 
01304          if(goslow || PRINT_TRACING) sleep(1);
01305 
01306          /* change the graph matrix (i.e., how many sub-graphs)? */
01307 
01308          if( graph_matrix[cc][ww] > 0 ){
01309             drive_MCW_grapher( gra , graDR_setmatrix , (XtPointer) graph_matrix[cc][ww] ) ;
01310             if(goslow || PRINT_TRACING) sleep(1);
01311          }
01312 
01313          /* make the graph length pinned? */
01314 
01315          if( graph_pinnum[cc][ww] > 1 ){
01316            drive_MCW_grapher( gra, graDR_setpinnum, (XtPointer)graph_pinnum[cc][ww] );
01317            if(goslow || PRINT_TRACING) sleep(1);
01318          }
01319 
01320          /* change the graph window geometry? */
01321 
01322          if( graph_geom[cc][ww][0] != '\0' ){
01323             AFNI_decode_geom( graph_geom[cc][ww] , &gww,&ghh,&gxx,&gyy ) ;
01324             if( gxx >= 0 && gyy >= 0 )
01325                XtVaSetValues( gra->fdw_graph , XmNx , gxx , XmNy , gyy , NULL ) ;
01326             if( gww > 0 && ghh > 0 )
01327                XtVaSetValues( gra->fdw_graph , XmNwidth , gww , XmNheight , ghh , NULL ) ;
01328             if(goslow || PRINT_TRACING) sleep(1);
01329          }
01330 
01331          AFNI_splashraise() ;
01332 
01333       } /* end of loop over graphs */
01334 
01335 #if 0
01336       XmUpdateDisplay( im3d->vwid->top_shell ) ;
01337 #endif
01338 
01339    } /* end of loop over controllers */
01340 
01341 #ifdef ALLOW_PLUGINS
01342    /*-- now loop over plugins --*/
01343 
01344    for( ipl=0 ; ipl < npbut ; ipl++ ){
01345 
01346       cc = plugin_cont[ipl] ; if( cc < 0 ) continue ;
01347 
01348       if( GLOBAL_library.controllers[cc] == NULL ) continue ;  /* ERROR */
01349 
01350       PLUG_startup_plugin_CB( GLOBAL_library.controllers[cc]->vwid->plugbut[ipl] ,
01351                               GLOBAL_library.controllers[cc]->vwid->plugint[ipl] ,
01352                               NULL ) ;
01353 
01354       if(goslow || PRINT_TRACING) sleep(1);
01355 
01356       /* 13 Nov 2001: don't check interface widgets for customized plugins */
01357 
01358       if( GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->call_method == PLUGIN_CALL_IMMEDIATELY )
01359         continue ;
01360 
01361       /* check interface widgets to see if plugin opened */
01362 
01363       if( GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->wid        == NULL ||
01364           GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->wid->shell == NULL   ){
01365 
01366          fprintf(stderr,"\n** LAYOUT: couldn't start plugin %s\n",pluglab[ipl]) ;
01367          continue ;
01368       }
01369 
01370       /* set the location of the interface widgets */
01371 
01372       if( plugin_geom[ipl] != NULL ){
01373             AFNI_decode_geom( plugin_geom[ipl] , &gww,&ghh,&gxx,&gyy ) ;
01374             if( gxx >= 0 && gyy >= 0 ){
01375                XtVaSetValues(
01376                   GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->wid->shell,
01377                   XmNx , gxx , XmNy , gyy , NULL ) ;
01378                if(goslow || PRINT_TRACING) sleep(1);
01379             }
01380       }
01381 
01382       AFNI_splashraise() ;
01383 
01384    } /* end of loop over plugins */
01385 #endif
01386 
01387    /*--- done ---*/
01388 
01389 #ifdef ALLOW_PLUGINS
01390    if( npbut > 0 ){
01391       for( ipl=0 ; ipl < npbut ; ipl++ )
01392          if( plugin_geom[ipl] != NULL ) free(plugin_geom[ipl]) ;
01393       free(plugin_cont) ; free(plugin_geom) ;
01394    }
01395 #endif
01396 
01397    if( e_turnoff ) putenv("AFNI_ENFORCE_ASPECT=NO") ;
01398 
01399    AFNI_splashdown() ; EXRETURN ;
01400 }

void AFNI_startup_script_CB XtPointer    client_data,
XtIntervalId *    id
 

Run the startup script [21 Jan 2003].

Definition at line 1674 of file afni_splash.c.

References AFNI_driver(), AFNI_suck_file(), client_data, ENTRY, free, get_linbuf(), GLOBAL_library, AFNI_library_type::ignore_lock, linbuf, malloc, and NLBUF.

Referenced by AFNI_finalrun_script_CB().

01675 {
01676    char *fname = (char *)client_data ;
01677    char *fbuf , *fptr ;
01678    int ii , nbuf ;
01679 
01680 ENTRY("AFNI_startup_script_CB") ;
01681 
01682    if( fname == NULL ) EXRETURN ;
01683 
01684    if( strchr(fname,' ') != NULL ){  /* if contains a blank, */
01685      AFNI_driver(fname) ;            /* execute a single command */
01686      EXRETURN ;
01687    }
01688 
01689    fbuf = AFNI_suck_file(fname); if( fbuf == NULL ) EXRETURN ;
01690    nbuf = strlen(fbuf) ;         if( nbuf == 0    ) EXRETURN ;
01691 
01692    fptr = fbuf ; linbuf = (char *) malloc(sizeof(char)*(NLBUF+1)) ;
01693 
01694    GLOBAL_library.ignore_lock = 1 ;  /* 06 Feb 2004 */
01695 
01696    while(1){
01697      ii = get_linbuf( fptr ) ; fptr += ii ;
01698      if( linbuf[0] == '\0' || fptr-fbuf >= nbuf ){ free(linbuf); break; }
01699      AFNI_driver( linbuf ) ;
01700    }
01701 
01702    GLOBAL_library.ignore_lock = 0 ; EXRETURN ;
01703 }

void AFNI_startup_timeout_CB XtPointer   ,
XtIntervalId *   
 

Definition at line 110 of file to3d.c.

References AFNI_yesenv(), to3d_widget_set::anatomy_parent_label, client_data, CURSOR_normalize, to3d_widget_set::geometry_parent_label, MCW_help_CB(), MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, myXtFree, myXtNew, negative_shorts, nfloat_err, to3d_data::ntt, THD_timeaxis::ntt, nvox_total, outliers_checked, T3D_check_outliers(), and THD_3dim_dataset::taxis.

Referenced by main().

00111 {
00112    char msg[512] ;
00113 
00114    MCW_help_CB(NULL,NULL,NULL) ;
00115    CURSOR_normalize ;
00116 
00117    if( negative_shorts && !AFNI_yesenv("AFNI_NO_NEGATIVES_WARNING") ){ /* 19 Jan 2000 */
00118       float perc = (100.0*negative_shorts)/nvox_total ;
00119       sprintf(msg , " \n"
00120                     " to3d WARNING: %d negative voxels (%g%%)\n"
00121                     "               were read in images of shorts.\n"
00122                     "               It is possible the input\n"
00123                     "               images need byte-swapping.\n \n"
00124                     " ** I recommend that you View Images. **\n" ,
00125               negative_shorts , perc ) ;
00126 
00127       (void) MCW_popup_message( wset.anatomy_parent_label , msg ,
00128                                 MCW_USER_KILL | MCW_TIMER_KILL ) ;
00129    }
00130 
00131    if( nfloat_err ){ /* 20 Jan 2000 */
00132       sprintf(msg , " \n"
00133                     " to3d WARNING: %d errors in floating point images\n"
00134                     "               were detected.  It is possible that\n"
00135                     "               the inputs need to be 4swap-ed, or\n"
00136                     "               otherwise repaired.\n \n"
00137                     " ** Erroneous values have been replaced by   **\n"
00138                     " ** zeros. I recommend that you View Images. **\n" ,
00139               nfloat_err ) ;
00140 
00141       (void) MCW_popup_message( wset.geometry_parent_label , msg ,
00142                                 MCW_USER_KILL | MCW_TIMER_KILL ) ;
00143    }
00144 
00145    if( user_inputs.ntt > 5 ){                 /* 15 Aug 2001 */
00146       dset->taxis = myXtNew( THD_timeaxis ) ;
00147       dset->taxis->ntt = user_inputs.ntt ;
00148       T3D_check_outliers(0) ; outliers_checked = 1 ;
00149       myXtFree(dset->taxis) ;
00150    }
00151 }

void AFNI_store_dset_index int   ,
int   
 

Definition at line 10164 of file afni.c.

References dset_ijk, and dset_tin.

Referenced by plot_graphs().

10165 {
10166    dset_ijk = ijk ; dset_tin = tin ; return ;
10167 }

void AFNI_sumato_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 8402 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_jumpto_dicom(), MCW_choose_cbs::cval, Three_D_View::dc, MCW_DC::display, ENTRY, IM3D_VALID, SUMA_surface::ixyz, mcwCR_string, MCW_choose_cbs::reason, RESET_AFNI_QUIT, SESSION_HAS_SUMA, Three_D_View::ss_now, THD_session::su_surf, SUMA_find_node_id(), Three_D_View::type, SUMA_ixyz::x, SUMA_ixyz::y, and SUMA_ixyz::z.

Referenced by AFNI_imag_pop_CB().

08403 {
08404    Three_D_View * im3d = (Three_D_View *) cd ;
08405    int nn , ii ;
08406 
08407 ENTRY("AFNI_sumato_CB") ;
08408 
08409    if( !IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
08410    if( cbs->reason != mcwCR_string )                         EXRETURN ;
08411    if( !SESSION_HAS_SUMA(im3d->ss_now) )                     EXRETURN ;
08412 
08413    nn = -1 ;
08414    sscanf( cbs->cval , "%d" , &nn ) ;
08415    ii = SUMA_find_node_id( im3d->ss_now->su_surf[0] , nn ) ;
08416    if( ii < 0 ){ XBell(im3d->dc->display,100); EXRETURN; }
08417 
08418    (void) AFNI_jumpto_dicom( im3d ,
08419                              im3d->ss_now->su_surf[0]->ixyz[ii].x ,
08420                              im3d->ss_now->su_surf[0]->ixyz[ii].y ,
08421                              im3d->ss_now->su_surf[0]->ixyz[ii].z  ) ;
08422 
08423    RESET_AFNI_QUIT(im3d) ;
08424    EXRETURN ;
08425 }

void AFNI_switchview_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 6457 of file afni.c.

References AFNI_first_tog(), AFNI_initialize_view(), Three_D_View::anat_dset, Three_D_View::anat_now, client_data, ENTRY, IM3D_VALID, LAST_VIEW_TYPE, POPDOWN_strlist_chooser, RESET_AFNI_QUIT, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, AFNI_widget_set::view, AFNI_viewing_widgets::view_bbox, AFNI_view_info::view_type, Three_D_View::vinfo, Three_D_View::vwid, and MCW_bbox::wbut.

Referenced by AFNI_drive_set_view().

06459 {
06460    Three_D_View * im3d = (Three_D_View *) client_data ;
06461    int bval ;
06462 
06463 ENTRY("AFNI_switchview_CB") ;
06464 
06465    if( ! IM3D_VALID(im3d) ) EXRETURN ;
06466 
06467    bval = AFNI_first_tog( LAST_VIEW_TYPE+1 ,
06468                           im3d->vwid->view->view_bbox->wbut ) ;
06469 
06470    if( bval < 0 || bval == im3d->vinfo->view_type ) EXRETURN ;
06471    if( im3d->anat_dset[bval] == NULL ) EXRETURN ;
06472 
06473    SHOW_AFNI_PAUSE ;
06474 
06475    POPDOWN_strlist_chooser ;                        /* might be choosing datasets */
06476 
06477    im3d->vinfo->view_type = bval ;                  /* set the new view type */
06478    AFNI_initialize_view( im3d->anat_now , im3d ) ;  /* and initialize it */
06479 
06480    SHOW_AFNI_READY ;
06481    RESET_AFNI_QUIT(im3d) ;
06482    EXRETURN ;
06483 }

void AFNI_syntax void   
 

Definition at line 113 of file afni.c.

References ALLOW_PLUGINS, ANNOUNCEMENT, CALC_HELP_STRING, DEFAULT_NGRAY, MASTER_HELP_STRING, MMAP_THRESHOLD, THD_MAX_NUM_SESSION, THD_MAX_SESSION_SIZE, USING_MCW_MALLOC, and WARP_4D.

Referenced by AFNI_parse_args(), and main().

00114 {
00115    printf(
00116      ANNOUNCEMENT
00117 
00118      "----------------------------------------------------------------\n"
00119      "USAGE 1: read in sessions of 3D datasets (created by to3d, etc.)\n"
00120      "----------------------------------------------------------------\n"
00121      "   afni [options] [session_directory ...]\n"
00122      "\n"
00123 #if MMAP_THRESHOLD > 0
00124      "   -purge       Conserve memory by purging data to disk.\n"
00125      "                  [Use this if you run out of memory when running AFNI.]\n"
00126      "                  [This will slow the code down, so use only if needed.]\n"
00127 #endif
00128      "   -posfunc     Set up the color 'pbar' to use only positive function values.\n"
00129      "   -R           Recursively search each session_directory for more session\n"
00130      "                  subdirectories.\n"
00131      "       WARNING: This will descend the entire filesystem hierarchy from\n"
00132      "                  each session_directory given on the command line.  On a\n"
00133      "                  large disk, this may take a long time.  To limit the\n"
00134      "                  recursion to 5 levels (for example), use -R5.\n"
00135      "   -ignore N    Tells the program to 'ignore' the first N points in\n"
00136      "                  time series for graphs and FIM calculations.\n"
00137      "   -im1 N       Tells the program to use image N as the first one for\n"
00138      "                  graphs and FIM calculations (same as '-ignore N-1')\n"
00139      "   -tlrc_small  These options set whether to use the 'small' or 'big'\n"
00140      "   -tlrc_big      Talairach brick size.  The compiled in default for\n"
00141      "                  the program is now 'big', unlike AFNI 1.0x.\n"
00142 #ifndef WARP_4D
00143      "   -warp_4D     Allows the program to Talairach transform and write\n"
00144      "                  to disk 3D+time datasets.  Note that the resulting\n"
00145      "                  disk files will be gigantic (100s of Megabytes).\n"
00146 #endif
00147      "   -no1D        Tells AFNI not to read *.1D timeseries files from\n"
00148      "                  the dataset directories.  The *.1D files in the\n"
00149      "                  directories listed in the AFNI_TSPATH environment\n"
00150      "                  variable will still be read (if this variable is\n"
00151      "                  not set, then './' will be scanned for *.1D files.)\n"
00152      "\n"
00153      "   -noqual      Tells AFNI not to enforce the 'quality' checks when\n"
00154      "                  making the transformations to +acpc and +tlrc.\n"
00155      "   -unique      Tells the program to create a unique set of colors\n"
00156      "                  for each AFNI controller window.  This allows\n"
00157      "                  different datasets to be viewed with different\n"
00158      "                  grayscales or colorscales.  Note that -unique\n"
00159      "                  will only work on displays that support 12 bit\n"
00160      "                  PseudoColor (e.g., SGI workstations) or TrueColor.\n"
00161      "   -orient code Tells afni the orientation in which to display\n"
00162      "                  x-y-z coordinates (upper left of control window).\n"
00163      "                  The code must be 3 letters, one each from the\n"
00164      "                  pairs {R,L} {A,P} {I,S}.  The first letter gives\n"
00165      "                  the orientation of the x-axis, the second the\n"
00166      "                  orientation of the y-axis, the third the z-axis:\n"
00167      "                   R = right-to-left         L = left-to-right\n"
00168      "                   A = anterior-to-posterior P = posterior-to-anterior\n"
00169      "                   I = inferior-to-superior  S = superior-to-inferior\n"
00170      "                  The default code is RAI ==> DICOM order.  This can\n"
00171      "                  be set with the environment variable AFNI_ORIENT.\n"
00172      "                  As a special case, using the code 'flipped' is\n"
00173      "                  equivalent to 'LPI' (this is for Steve Rao).\n"
00174 #ifdef ALLOW_PLUGINS
00175      "   -noplugins   Tells the program not to load plugins.\n"
00176      "                  (Plugins can also be disabled by setting the\n"
00177      "                   environment variable AFNI_NOPLUGINS.)\n"
00178      "   -yesplugouts Tells the program to listen for plugouts.\n"
00179      "                  (Plugouts can also be enabled by setting the\n"
00180      "                   environment variable AFNI_YESPLUGOUTS.)\n"
00181      "   -YESplugouts Makes the plugout code print out lots of messages\n"
00182      "                  (useful for debugging a new plugout).\n"
00183      "   -noplugouts  Tells the program NOT to listen for plugouts.\n"
00184      "                  (This option is available to override\n"
00185      "                   the AFNI_YESPLUGOUTS environment variable.)\n"
00186 #endif
00187      "   -skip_afnirc Tells the program NOT to read the file .afnirc\n"
00188      "                  in the home directory.  See README.setup for\n"
00189      "                  details on the use of .afnirc for initialization.\n"
00190      "   -layout fn   Tells AFNI to read the initial windows layout from\n"
00191      "                  file 'fn'.  If this option is not given, then\n"
00192      "                  environment variable AFNI_LAYOUT_FILE is used.\n"
00193      "                  If neither is present, then AFNI will do whatever\n"
00194      "                  it feels like.\n"
00195      "\n"
00196      "   -niml        If present, turns on listening for NIML-formatted\n"
00197      "                  data from SUMA.  Can also be turned on by setting\n"
00198      "                  environment variable AFNI_NIML_START to YES.\n"
00199      "   -np port     If present, sets the NIML socket port number to 'port'.\n"
00200      "                  This must be an integer between 1024 and 65535,\n"
00201      "                  and must be the same as the '-np port' number given\n"
00202      "                  to SUMA.  [default = 53211]\n"
00203      "\n"
00204      "   -com ccc     This option lets you specify 'command strings' to\n"
00205      "                  drive AFNI after the program startup is completed.\n"
00206      "                  Legal command strings are described in the file\n"
00207      "                  README.driver.  More than one '-com' option can\n"
00208      "                  be used, and the commands will be executed in\n"
00209      "                  the order they are given on the command line.\n"
00210      "            N.B.: Most commands to AFNI contain spaces, so the 'ccc'\n"
00211      "                  command strings will need to be enclosed in quotes.\n"
00212      "\n"
00213      " * If no session_directories are given, then the program will use\n"
00214      "    the current working directory (i.e., './').\n"
00215      " * The maximum number of sessions is now set to  %d.\n"
00216      " * The maximum number of datasets per session is %d.\n"
00217      " * To change these maximums, you must edit file '3ddata.h' and then\n"
00218      "    recompile this program.\n"
00219 
00220      , THD_MAX_NUM_SESSION , THD_MAX_SESSION_SIZE
00221    ) ;
00222 
00223    printf(
00224      "\n"
00225      "-----------------------------------------------------\n"
00226      "USAGE 2: read in images for 'quick and dirty' viewing\n"
00227      "-----------------------------------------------------\n"
00228      "(Most advanced features of AFNI will be disabled.)\n"
00229      "\n"
00230      "   afni -im [options] im1 im2 im3 ...\n"
00231      "\n"
00232      "   -im          Flag to read in images instead of 3D datasets\n"
00233      "                  (Talaraich and functional stuff won't work)\n"
00234      "   -dy yratio   Tells afni the downscreen pixel size is 'yratio' times\n"
00235      "                  the across-screen (x) pixel dimension (default=1.0)\n"
00236      "   -dz zratio   Tells afni the slice thickness is 'zratio' times\n"
00237      "                  the x pixel dimension (default=1.0)\n"
00238      "   -orient code Tells afni the orientation of the input images.\n"
00239      "                  The code must be 3 letters, one each from the\n"
00240      "                  pairs {R,L} {A,P} {I,S}.  The first letter gives\n"
00241      "                  the orientation of the x-axis, the second the\n"
00242      "                  orientation of the y-axis, the third the z-axis:\n"
00243      "                   R = right-to-left         L = left-to-right\n"
00244      "                   A = anterior-to-posterior P = posterior-to-anterior\n"
00245      "                   I = inferior-to-superior  S = superior-to-inferior\n"
00246      "                  (the default code is ASL ==> sagittal images).\n"
00247      "                  Note that this use of '-orient' is different from\n"
00248      "                  the use when viewing datasets.\n"
00249      "   -resize      Tells afni that all images should be resized to fit\n"
00250      "                  the size of the first one, if they don't already fit\n"
00251      "                  (by default, images must all 'fit' or afni will stop)\n"
00252      "   -datum type  Tells afni to convert input images into the type given:\n"
00253      "                  byte, short, float, complex are the legal types.\n"
00254      " The image files (im1 ...) are the same formats as accepted by to3d.\n"
00255      "\n"
00256      " New image display options (alternatives to -im) [19 Oct 1999]:\n"
00257      "   -tim         These options tell AFNI to arrange the input images\n"
00258      "   -tim:<nt>    into a internal time-dependent dataset.  Suppose that\n"
00259      "   -zim:<nz>    there are N input 2D slices on the command line.\n"
00260      "              * -tim alone means these are N points in time (1 slice).\n"
00261      "              * -tim:<nt> means there are nt points in time (nt is\n"
00262      "                  an integer > 1), so there are N/nt slices in space,\n"
00263      "                  and the images on the command line are input in\n"
00264      "                  time order first (like -time:tz in to3d).\n"
00265      "              * -zim:<nz> means there are nz slices in space (nz is\n"
00266      "                  an integer > 1), so there are N/nz points in time,\n"
00267      "                  and the images on the command line are input in\n"
00268      "                  slice order first (like -time:zt in to3d).\n"
00269      "\n"
00270      " N.B.: You may wish to use the -ignore option to set the number of\n"
00271      "        initial points to ignore in the time series graph if you use\n"
00272      "        -tim or -zim, since there is no way to change this from\n"
00273      "        within an AFNI run (the FIM menus are disabled).\n"
00274      " N.B.: The program 'aiv' (AFNI image viewer) can also be used to\n"
00275      "        look at images.\n"
00276    ) ;
00277 
00278    printf(
00279      "\n"
00280      "-------------------------------------------------------\n"
00281      "USAGE 3: read in datasets specified on the command line\n"
00282      "-------------------------------------------------------\n"
00283      "\n"
00284      "  afni -dset [options] dname1 dname2 ...\n"
00285      "\n"
00286      "where 'dname1' is the name of a dataset, etc.  With this option, only\n"
00287      "the chosen datasets are read in, and they are all put in the same\n"
00288      "'session'.  Follower datasets are not created.\n"
00289      "\n"
00290     MASTER_HELP_STRING
00291      "\n"
00292     CALC_HELP_STRING
00293    ) ;
00294 
00295    printf(
00296      "\n"
00297      "-------------------------------\n"
00298      "GENERAL OPTIONS (for any usage)\n"
00299      "-------------------------------\n"
00300      "\n"
00301      "   -q           Tells afni to be 'quiet' on startup\n"
00302      "   -Dname=val   Sets environment variable 'name' to 'val' inside AFNI;\n"
00303      "                  will supersede any value set in .afnirc.\n"
00304      "   -gamma gg    Tells afni that the gamma correction factor for the\n"
00305      "                  monitor is 'gg' (default gg is 1.0; greater than\n"
00306      "                  1.0 makes the image contrast larger -- this may\n"
00307      "                  also be adjusted interactively)\n"
00308      "   -install     Tells afni to install a new X11 Colormap.  This only\n"
00309      "                  means something for PseudoColor displays.  Also, it\n"
00310      "                  usually cause the notorious 'technicolor' effect.\n"
00311      "   -ncolors nn  Tells afni to use 'nn' gray levels for the image\n"
00312      "                  displays (default is %d)\n"
00313      "   -xtwarns     Tells afni to show any Xt warning messages that may\n"
00314      "                  occur; the default is to suppress these messages.\n"
00315      "   -tbar name   Uses 'name' instead of 'AFNI' in window titlebars.\n"
00316      "   -flipim and  The '-flipim' option tells afni to display images in the\n"
00317      "   -noflipim      'flipped' radiology convention (left on the right).\n"
00318      "                  The '-noflipim' option tells afni to display left on\n"
00319      "                  the left, as neuroscientists generally prefer.  This\n"
00320      "                  latter mode can also be set by the Unix environment\n"
00321      "                  variable 'AFNI_LEFT_IS_LEFT'.  The '-flipim' mode is\n"
00322      "                  the default.\n"
00323 #ifdef USE_TRACING
00324      "   -trace       Turns routine call tracing on, for debugging purposes.\n"
00325      "   -TRACE       Turns even more verbose tracing on, for more debugging.\n"
00326 #endif
00327 #ifdef USING_MCW_MALLOC
00328      "   -nomall      Disables use of the mcw_malloc() library routines.\n"
00329 #endif
00330      "\n"
00331      "N.B.: Many of these options, as well as the initial color set up,\n"
00332      "      can be controlled by appropriate X11 resources.  See the\n"
00333      "      file AFNI.Xdefaults for instructions and examples.\n"
00334 
00335      , DEFAULT_NGRAY
00336    ) ;
00337 
00338    printf(
00339     "\n"
00340     "----------\n"
00341     "REFERENCES\n"
00342     "----------\n"
00343     "The following papers describe some of the components of the AFNI package.\n"
00344     "\n"
00345     "RW Cox.  AFNI: Software for analysis and visualization of functional\n"
00346     "  magnetic resonance neuroimages.  Computers and Biomedical Research,\n"
00347     "  29: 162-173, 1996.\n"
00348     "\n"
00349     "  * The first AFNI paper, and the one I prefer you cite if you want to\n"
00350     "    refer to the AFNI package as a whole.\n"
00351     "\n"
00352     "RW Cox, A Jesmanowicz, and JS Hyde.  Real-time functional magnetic\n"
00353     "  resonance imaging.  Magnetic Resonance in Medicine, 33: 230-236, 1995.\n"
00354     "\n"
00355     "  * The first paper on realtime FMRI; describes the algorithm used in\n"
00356     "    3dfim+, the interactive FIM calculations, and in the realtime plugin.\n"
00357     "\n"
00358     "RW Cox and JS Hyde.  Software tools for analysis and visualization of\n"
00359     "  FMRI Data.  NMR in Biomedicine, 10: 171-178, 1997.\n"
00360     "\n"
00361     "  * A second paper about AFNI and design issues for FMRI software tools.\n"
00362     "\n"
00363     "RW Cox and A Jesmanowicz.  Real-time 3D image registration for\n"
00364     "  functional MRI.  Magnetic Resonance in Medicine, 42: 1014-1018, 1999.\n"
00365     "\n"
00366     "  * Describes the algorithm used for image registration in 3dvolreg\n"
00367     "    and in the realtime plugin.\n"
00368     "\n"
00369     "ZS Saad, KM Ropella, RW Cox, and EA DeYoe.  Analysis and use of FMRI\n"
00370     "  response delays.  Human Brain Mapping, 13: 74-93, 2001.\n"
00371     "\n"
00372     "  * Describes the algorithm used in 3ddelay (cf. '3ddelay -help').\n"
00373    ) ;
00374 
00375    printf("\n") ; exit(0) ;
00376 }

void AFNI_talto_CB Widget   ,
XtPointer   ,
MCW_choose_cbs  
 

Definition at line 8123 of file afni.c.

References AFNI_3DDATA_VIEW, AFNI_set_viewpoint(), AFNI_transform_vector(), Three_D_View::anat_dset, Three_D_View::anat_now, CAN_TALTO, CURRENT_DAXES, Three_D_View::dc, MCW_DC::display, ENTRY, THD_ivec3::ijk, IM3D_VALID, MCW_choose_cbs::ival, LOAD_ANAT_VIEW, LOAD_FVEC3, mcwCR_integer, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, POPDOWN_strlist_chooser, MCW_choose_cbs::reason, REDISPLAY_ALL, SAVE_VPT, THD_3dmm_to_3dind(), THD_dicomm_to_3dmm(), TTO_COUNT, TTO_current, TTO_list, Three_D_View::type, VIEW_TALAIRACH_TYPE, THD_3dim_dataset::view_type, TTO_point::xx, TTO_point::yy, and TTO_point::zz.

Referenced by AFNI_imag_pop_CB().

08124 {
08125    Three_D_View * im3d = (Three_D_View *) cd ;
08126    THD_dataxes  * daxes ;
08127    float xx,yy,zz ;
08128    int nn , ii,jj,kk ;
08129    THD_fvec3 fv,tv ; THD_ivec3 iv ;
08130 
08131 ENTRY("AFNI_talto_CB") ;
08132 
08133    /* check for errors */
08134 
08135    if( ! IM3D_VALID(im3d) || im3d->type != AFNI_3DDATA_VIEW ) EXRETURN ;
08136 
08137    if( !CAN_TALTO(im3d)             ||
08138        cbs->reason != mcwCR_integer   ){
08139 
08140       POPDOWN_strlist_chooser ;
08141       XBell( im3d->dc->display , 100 ) ;
08142       EXRETURN ;
08143    }
08144 
08145    nn = cbs->ival ;
08146    if( nn < 0 || nn >= TTO_COUNT ) EXRETURN ;
08147    TTO_current = nn ;
08148 
08149    /* transform point from Dicom to local coords and go there */
08150 
08151    xx = TTO_list[nn].xx ; yy = TTO_list[nn].yy ; zz = TTO_list[nn].zz ;
08152 
08153    LOAD_ANAT_VIEW(im3d) ;  /* 02 Nov 1996 */
08154 
08155    LOAD_FVEC3(tv,xx,yy,zz) ; /* Talairach coords */
08156 
08157    /* 09 Jul 2001: if not now viewing in Talairach coordinates,
08158                    then transform vector to current coordinates */
08159 
08160    if( im3d->anat_now->view_type != VIEW_TALAIRACH_TYPE )
08161       tv = AFNI_transform_vector( im3d->anat_dset[VIEW_TALAIRACH_TYPE] ,
08162                                   tv , im3d->anat_now ) ;
08163 
08164    fv = THD_dicomm_to_3dmm( im3d->anat_now , tv ) ;
08165    iv = THD_3dmm_to_3dind ( im3d->anat_now , fv ) ;
08166    ii = iv.ijk[0] ; jj = iv.ijk[1] ; kk = iv.ijk[2] ;
08167 
08168    daxes = CURRENT_DAXES(im3d->anat_now) ;
08169    if( ii >= 0 && ii < daxes->nxx &&
08170        jj >= 0 && jj < daxes->nyy && kk >= 0 && kk < daxes->nzz   ){
08171 
08172       SAVE_VPT(im3d) ;
08173       AFNI_set_viewpoint( im3d , ii,jj,kk , REDISPLAY_ALL ) ; /* jump */
08174    } else {
08175       XBell( im3d->dc->display , 100 ) ;
08176    }
08177    EXRETURN ;
08178 }

void AFNI_thr_scale_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 51 of file afni_func.c.

References AFNI_redisplay_func(), AFNI_set_thr_pval(), AFNI_thresh_lock_carryout(), client_data, DOING_REALTIME_WORK, ENTRY, FIX_SCALE_SIZE, FIX_SCALE_VALUE, AFNI_widget_set::func, AFNI_view_info::func_pval, AFNI_view_info::func_threshold, AFNI_view_info::func_visible, IM3D_VALID, MCW_register_hint(), REDISPLAY_OPTIONAL, REDISPLAY_OVERLAY, RESET_AFNI_QUIT, THR_FACTOR, AFNI_function_widgets::thr_pval_label, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_drive_set_threshnew(), and AFNI_drive_set_threshold().

00052 {
00053    Three_D_View *im3d = (Three_D_View *) client_data ;
00054    XmScaleCallbackStruct *cbs = (XmScaleCallbackStruct *) call_data ;
00055    float fff ;
00056    int redisplay , ival ;
00057 
00058 ENTRY("AFNI_thr_scale_CB") ;
00059 
00060    if( ! IM3D_VALID(im3d) ) EXRETURN ;
00061 
00062    if( cbs != NULL ) ival = cbs->value ;
00063    else              XmScaleGetValue( w , &ival ) ;
00064 
00065    fff = THR_FACTOR * ival ;
00066    if( fff >= 0.0 && fff <= 1.0 ) im3d->vinfo->func_threshold = fff ;
00067 
00068    FIX_SCALE_VALUE(im3d) ;
00069    FIX_SCALE_SIZE(im3d) ;   /* 09 May 2001 */
00070 
00071    redisplay = (im3d->vinfo->func_visible) ? REDISPLAY_OVERLAY
00072                                            : REDISPLAY_OPTIONAL ;
00073    AFNI_set_thr_pval( im3d ) ;
00074 
00075    if( im3d->vinfo->func_pval >= 0.0 && im3d->vinfo->func_pval <= 1.0 ){
00076      char pstr[32] ;
00077      sprintf( pstr , "nominal p=%.5e" , im3d->vinfo->func_pval ) ;
00078      MCW_register_hint( im3d->vwid->func->thr_pval_label , pstr ) ;
00079    } else {
00080      MCW_register_hint( im3d->vwid->func->thr_pval_label ,
00081                         "Nominal p-value per voxel"       ) ;
00082    }
00083 
00084    if( ! DOING_REALTIME_WORK )
00085      AFNI_redisplay_func( im3d ) ;
00086 
00087    AFNI_thresh_lock_carryout(im3d) ;  /* 06 Feb 2004 */
00088 
00089    RESET_AFNI_QUIT(im3d) ;
00090    EXRETURN ;
00091 }

void AFNI_thr_scale_drag_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 98 of file afni_func.c.

References AFNI_set_thr_pval(), AFNI_thrdrag_lock_carryout(), client_data, DSET_BRICK_STATCODE, ENTRY, Three_D_View::fim_now, FIX_SCALE_VALUE, FUNC_HAVE_PVAL, AFNI_view_info::func_threshold, IM3D_OPEN, ISVALID_3DIM_DATASET, THR_FACTOR, AFNI_view_info::thr_index, and Three_D_View::vinfo.

00099 {
00100    Three_D_View *im3d = (Three_D_View *) client_data ;
00101    XmScaleCallbackStruct *cbs = (XmScaleCallbackStruct *) call_data ;
00102    float fff ;
00103 
00104 ENTRY("AFNI_thr_scale_drag CB") ;
00105 
00106    if( IM3D_OPEN(im3d) && ISVALID_3DIM_DATASET(im3d->fim_now) ){
00107 
00108       fff = THR_FACTOR * cbs->value ;
00109       if( fff >= 0.0 && fff <= 1.0 ) im3d->vinfo->func_threshold = fff ;
00110 
00111       FIX_SCALE_VALUE(im3d) ;
00112       if( FUNC_HAVE_PVAL(DSET_BRICK_STATCODE(im3d->fim_now,im3d->vinfo->thr_index)) )
00113         AFNI_set_thr_pval( im3d ) ;
00114 
00115       AFNI_thrdrag_lock_carryout( im3d ) ; /* 10 Feb 2004 */
00116    }
00117    EXRETURN ;
00118 }

void AFNI_thrdrag_lock_carryout Three_D_View  
 

Definition at line 470 of file afni_lock.c.

References AFNI_controller_index(), AFNI_set_thr_pval(), AFNI_library_type::controller_lock, AFNI_library_type::controllers, DSET_BRICK_STATAUX, DSET_BRICK_STATCODE, ENTRY, Three_D_View::fim_now, AFNI_widget_set::func, AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, getenv(), GLOBAL_library, AFNI_library_type::ignore_lock, IM3D_OPEN, MAX_CONTROLLERS, THD_pval_to_stat(), THD_stat_to_pval(), THR_FACTOR, AFNI_view_info::thr_index, AFNI_function_widgets::thr_scale, THR_TOP_EXPON, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_thr_scale_drag_CB().

00471 {
00472    Three_D_View *qq3d ;
00473    static int busy = 0 ;  /* !=0 if this routine is "busy" */
00474    int glock , cc,ii , dothresh,dopval , ival , stop ;
00475    float thresh , pval , tval ;
00476    char *eee ;
00477 
00478 ENTRY("AFNI_thrdrag_lock_carryout") ;
00479 
00480    /* first, determine if there is anything to do */
00481 
00482    glock = GLOBAL_library.controller_lock ;     /* not a handgun */
00483 
00484    if( busy )                         EXRETURN;  /* routine already busy */
00485    if( glock == 0 )                   EXRETURN;  /* nothing to do */
00486    if( !IM3D_OPEN(im3d) )             EXRETURN;  /* bad input */
00487    if( GLOBAL_library.ignore_lock )   EXRETURN;  /* ordered not to do anything */
00488 
00489    eee = getenv( "AFNI_THRESH_LOCK" ) ;          /* determine how to lock */
00490    if( eee == NULL ) EXRETURN ;
00491    dothresh = (*eee == 'V' || *eee == 'v') ;
00492    dopval   = (*eee == 'P' || *eee == 'p') && im3d->fim_now != NULL ;
00493    if( !dothresh && !dopval ) EXRETURN ;         /* no command? */
00494 
00495    ii = AFNI_controller_index(im3d) ;           /* which one am I? */
00496 
00497    if( ii < 0 ) EXRETURN ;                      /* nobody? bad input! */
00498    if( ((1<<ii) & glock) == 0 ) EXRETURN ;      /* input not locked */
00499 
00500    /* something to do? */
00501 
00502    busy = 1 ;  /* don't let this routine be called recursively */
00503 
00504    ival   = rint(im3d->vinfo->func_threshold/THR_FACTOR) ;
00505    thresh = im3d->vinfo->func_threshold * im3d->vinfo->func_thresh_top ;
00506    stop   = (int)( rint( pow(10.0,THR_TOP_EXPON) ) - 1.0 ) ;
00507 
00508    if( dopval ){
00509      pval = THD_stat_to_pval( thresh ,
00510                 DSET_BRICK_STATCODE(im3d->fim_now,im3d->vinfo->thr_index) ,
00511                 DSET_BRICK_STATAUX (im3d->fim_now,im3d->vinfo->thr_index)  ) ;
00512      if( pval < 0.0 || pval > 1.0 ){ dopval = 0; dothresh = 1; }
00513    }
00514 
00515    /* loop through other controllers:
00516         for those that ARE open, ARE NOT the current
00517         one, and ARE locked, set the new threshold */
00518 
00519    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00520 
00521      qq3d = GLOBAL_library.controllers[cc] ; /* controller */
00522 
00523      if( IM3D_OPEN(qq3d) && qq3d != im3d && ((1<<cc) & glock) != 0 ){
00524 
00525        if( qq3d->vinfo->func_thresh_top == im3d->vinfo->func_thresh_top ){
00526 
00527          if( dopval && qq3d->fim_now != NULL &&
00528              DSET_BRICK_STATCODE(qq3d->fim_now,qq3d->vinfo->thr_index) > 0 ){
00529 
00530            tval = THD_pval_to_stat( pval ,
00531                     DSET_BRICK_STATCODE(qq3d->fim_now,qq3d->vinfo->thr_index),
00532                     DSET_BRICK_STATAUX (qq3d->fim_now,qq3d->vinfo->thr_index) );
00533            ival = rint( tval/(THR_FACTOR*qq3d->vinfo->func_thresh_top) ) ;
00534            if( ival < 0 ) ival = 0 ; else if( ival > stop ) ival = stop ;
00535 
00536          } else if( !dothresh ){
00537            continue ;  /* skip this [dopval set, but not a statistic] */
00538          }
00539 
00540          /* set the slider and pval marker */
00541 
00542          XmScaleSetValue( qq3d->vwid->func->thr_scale , ival ) ;
00543          qq3d->vinfo->func_threshold = THR_FACTOR * ival ;
00544          AFNI_set_thr_pval( qq3d ) ;
00545        }
00546      }
00547    }
00548 
00549    busy = 0 ;  /* OK, let this routine be activated again */
00550    EXRETURN ;
00551 }

void AFNI_thresh_lock_carryout Three_D_View  
 

Definition at line 307 of file afni_lock.c.

References AFNI_controller_index(), AFNI_driver(), AFNI_library_type::controller_lock, AFNI_library_type::controllers, DSET_BRICK_STATAUX, DSET_BRICK_STATCODE, ENTRY, Three_D_View::fim_now, AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, getenv(), GLOBAL_library, AFNI_library_type::ignore_lock, IM3D_OPEN, MAX_CONTROLLERS, THD_stat_to_pval(), AFNI_view_info::thr_index, and Three_D_View::vinfo.

Referenced by AFNI_thr_scale_CB(), and AFNI_thresh_top_CB().

00308 {
00309    Three_D_View *qq3d ;
00310    static int busy = 0 ;  /* !=0 if this routine is "busy" */
00311    int glock , cc,ii , dopval,dothresh ;
00312    float thresh , pval , tval ;
00313    char cmd[64] , *eee ;
00314 
00315 ENTRY("AFNI_thresh_lock_carryout") ;
00316 
00317    /* first, determine if there is anything to do */
00318 
00319    glock = GLOBAL_library.controller_lock ;     /* not a handgun */
00320 
00321    if( busy )                         EXRETURN;  /* routine already busy */
00322    if( glock == 0 )                   EXRETURN;  /* nothing to do */
00323    if( !IM3D_OPEN(im3d) )             EXRETURN;  /* bad input */
00324    if( GLOBAL_library.ignore_lock )   EXRETURN;  /* ordered not to do anything */
00325 
00326    eee = getenv( "AFNI_THRESH_LOCK" ) ;          /* determine how to lock */
00327    if( eee == NULL ) EXRETURN ;
00328    dothresh = (*eee == 'V' || *eee == 'v') ;
00329    dopval   = (*eee == 'P' || *eee == 'p') && im3d->fim_now != NULL ;
00330    if( !dothresh && !dopval ) EXRETURN ;         /* no command? */
00331 
00332    ii = AFNI_controller_index(im3d) ;           /* which one am I? */
00333 
00334    if( ii < 0 ) EXRETURN ;                      /* nobody? bad input! */
00335    if( ((1<<ii) & glock) == 0 ) EXRETURN ;      /* input not locked */
00336 
00337    /* something to do? */
00338 
00339    busy = 1 ;  /* don't let this routine be called recursively */
00340 
00341    /* get true threshold of this controller => all others get this value, too*/
00342 
00343    thresh = im3d->vinfo->func_threshold * im3d->vinfo->func_thresh_top ;
00344 
00345    /* get p-value corresponding, if that is what's being locked */
00346 
00347    if( dopval ){
00348      pval = THD_stat_to_pval( thresh ,
00349                 DSET_BRICK_STATCODE(im3d->fim_now,im3d->vinfo->thr_index) ,
00350                 DSET_BRICK_STATAUX (im3d->fim_now,im3d->vinfo->thr_index)  ) ;
00351      if( pval < 0.0 || pval > 1.0 ){ dopval = 0; dothresh = 1; }
00352    }
00353 
00354    /* loop through other controllers:
00355         for those that ARE open, ARE NOT the current
00356         one, and ARE locked, set the new threshold */
00357 
00358    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00359 
00360      qq3d = GLOBAL_library.controllers[cc] ; /* controller */
00361 
00362      if( IM3D_OPEN(qq3d) && qq3d != im3d && ((1<<cc) & glock) != 0 ){
00363 
00364        if( dothresh )
00365          sprintf( cmd , "SET_THRESHNEW %c %.4f **" , 'A'+cc , thresh ) ;
00366        else if( dopval && qq3d->fim_now != NULL &&
00367                 DSET_BRICK_STATCODE(qq3d->fim_now,qq3d->vinfo->thr_index) > 0 )
00368          sprintf( cmd , "SET_THRESHNEW %c %g *p" , 'A'+cc , pval ) ;
00369        else
00370          continue ;  /* pval, but not a statistic? */
00371 
00372        AFNI_driver( cmd ) ;
00373      }
00374    }
00375 
00376    busy = 0 ;  /* OK, let this routine be activated again */
00377    EXRETURN ;
00378 }

char* AFNI_thresh_tlabel_CB MCW_arrowval   av,
XtPointer    junk
 

fix the option menu at the bottom of the scale *

Definition at line 159 of file afni_func.c.

References MCW_arrowval::ival.

00160 {
00161    static char tlab[8] ;
00162    sprintf(tlab,"%d",av->ival) ;
00163    return tlab ;
00164 }

void AFNI_thresh_top_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 170 of file afni_func.c.

References AFNI_redisplay_func(), AFNI_set_thresh_top(), AFNI_thresh_lock_carryout(), ENTRY, AFNI_view_info::func_thresh_top, AFNI_view_info::func_visible, IM3D_OPEN, MCW_arrowval::ival, and Three_D_View::vinfo.

00171 {
00172    Three_D_View *im3d = (Three_D_View *) cd ;
00173    static float tval[9] = { 1.0 , 10.0 , 100.0 , 1000.0 , 10000.0 ,
00174                             100000.0 , 1000000.0 , 10000000.0 , 100000000.0 } ;
00175 
00176 ENTRY("AFNI_thresh_top_CB") ;
00177 
00178    if( IM3D_OPEN(im3d) && im3d->vinfo->func_thresh_top != tval[av->ival] ){
00179 
00180      AFNI_set_thresh_top( im3d , tval[av->ival] ) ;
00181 
00182      if( im3d->vinfo->func_visible ) AFNI_redisplay_func( im3d ) ;
00183 
00184      AFNI_thresh_lock_carryout(im3d) ;  /* 06 Feb 2004 */
00185    }
00186 
00187    EXRETURN ;
00188 }

void AFNI_time_index_CB MCW_arrowval  ,
XtPointer   
 

Definition at line 4798 of file afni.c.

References AFNI_modify_viewing(), AFNI_noenv(), AFNI_process_funcdisplay(), AFNI_process_timeindex(), AFNI_time_lock_carryout(), AFNI_yesenv(), AFNI_function_widgets::anat_buck_av, AFNI_view_info::anat_index, Three_D_View::anat_now, AV_assign_ival(), client_data, DSET_NUM_TIMES, DSET_NVALS, ENTRY, AFNI_function_widgets::fim_buck_av, AFNI_view_info::fim_index, Three_D_View::fim_now, AFNI_widget_set::func, HAS_TIMEAXIS, IM3D_VALID, ipx, ISVALID_DSET, MCW_arrowval::ival, RESET_AFNI_QUIT, AFNI_view_info::tempflag, AFNI_function_widgets::thr_buck_av, AFNI_view_info::thr_index, AFNI_view_info::time_index, AFNI_view_info::top_index, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_gra_send_CB(), and AFNI_time_lock_carryout().

04799 {
04800    Three_D_View *im3d = (Three_D_View *) client_data ;
04801    int ipx ;
04802 
04803 ENTRY("AFNI_time_index_CB") ;
04804 
04805    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04806 
04807    ipx = av->ival ;
04808    if( ipx >= im3d->vinfo->top_index )    /* don't let index be too big */
04809       ipx = im3d->vinfo->top_index - 1 ;
04810 
04811    im3d->vinfo->time_index = ipx ;        /* change time index */
04812 
04813    /* 29 Jul 2003: slave underlay and overlay to time_index (maybe) */
04814 
04815    im3d->vinfo->anat_index = ipx ;
04816    if( im3d->vinfo->anat_index >= DSET_NVALS(im3d->anat_now) )
04817      im3d->vinfo->anat_index = DSET_NVALS(im3d->anat_now) - 1 ;
04818    AV_assign_ival( im3d->vwid->func->anat_buck_av , im3d->vinfo->anat_index ) ;
04819 
04820    if( ISVALID_DSET(im3d->fim_now) &&
04821        HAS_TIMEAXIS(im3d->fim_now) && !AFNI_noenv("AFNI_SLAVE_FUNCTIME") ){
04822 
04823      im3d->vinfo->fim_index = ipx ;
04824      if( im3d->vinfo->fim_index >= DSET_NVALS(im3d->fim_now) )
04825        im3d->vinfo->fim_index = DSET_NVALS(im3d->fim_now) - 1 ;
04826      AV_assign_ival( im3d->vwid->func->fim_buck_av , im3d->vinfo->fim_index ) ;
04827 
04828      if( AFNI_yesenv("AFNI_SLAVE_THRTIME") ){   /* 24 Jan 2005 - RWCox */
04829        im3d->vinfo->thr_index = ipx ;
04830        if( im3d->vinfo->thr_index >= DSET_NVALS(im3d->fim_now) )
04831          im3d->vinfo->thr_index = DSET_NVALS(im3d->fim_now) - 1 ;
04832        AV_assign_ival( im3d->vwid->func->thr_buck_av , im3d->vinfo->thr_index ) ;
04833      }
04834    }
04835 
04836    im3d->vinfo->tempflag = 1 ;
04837    AFNI_modify_viewing( im3d , False ) ;  /* setup new bricks to view */
04838 
04839    if( ISVALID_DSET(im3d->fim_now)       &&   /* if time index on */
04840        DSET_NUM_TIMES(im3d->fim_now) > 1   )  /* function changed */
04841      AFNI_process_funcdisplay( im3d ) ;       /* notify receivers */
04842 
04843    AFNI_time_lock_carryout( im3d ) ;  /* 03 Nov 1998 */
04844    AFNI_process_timeindex ( im3d ) ;  /* 29 Jan 2003 */
04845 
04846    RESET_AFNI_QUIT(im3d) ;
04847    EXRETURN ;
04848 }

void AFNI_time_lock_carryout Three_D_View  
 

Definition at line 41 of file afni_lock.c.

References AFNI_controller_index(), AFNI_time_index_CB(), AV_assign_ival(), AFNI_library_type::controller_lock, AFNI_library_type::controllers, ENTRY, GLOBAL_library, AFNI_library_type::ignore_lock, IM3D_OPEN, AFNI_widget_set::imag, MCW_arrowval::ival, MAX_CONTROLLERS, AFNI_view_info::time_index, AFNI_imaging_widgets::time_index_av, AFNI_library_type::time_lock, AFNI_view_info::time_on, AFNI_view_info::top_index, Three_D_View::vinfo, and Three_D_View::vwid.

Referenced by AFNI_lock_enforce_CB(), and AFNI_time_index_CB().

00042 {
00043    Three_D_View *qq3d ;
00044    MCW_arrowval *tav ;
00045    int new_index , qq_index , qq_top , cc , glock , ii ;
00046    static int busy = 0 ;  /* !=0 if this routine is "busy" */
00047 
00048 ENTRY("AFNI_time_lock_carryout") ;
00049 
00050    /* first, determine if there is anything to do */
00051 
00052    glock = GLOBAL_library.controller_lock ;     /* not a handgun */
00053 
00054    if( busy )                       EXRETURN ;  /* routine already busy */
00055    if( glock == 0 )                 EXRETURN ;  /* nothing to do */
00056    if( !IM3D_OPEN(im3d) )           EXRETURN ;  /* bad input */
00057    if( GLOBAL_library.ignore_lock ) EXRETURN ;  /* ordered not to do anything */
00058    if( ! GLOBAL_library.time_lock ) EXRETURN ;  /* don't lock time */
00059 
00060    ii = AFNI_controller_index(im3d) ;           /* which one am I? */
00061 
00062    if( ii < 0 ) EXRETURN ;                      /* nobody? bad input! */
00063    if( ((1<<ii) & glock) == 0 ) EXRETURN ;      /* input not locked */
00064 
00065    /* something to do? */
00066 
00067    busy = 1 ;  /* don't let this routine be called recursively */
00068 
00069    /* load time index of this controller => all others get this value, too*/
00070 
00071    new_index = im3d->vinfo->time_index ;
00072 
00073    /* loop through other controllers:
00074         for those that ARE open, ARE NOT the current
00075         one, and ARE locked, jump to the new time index */
00076 
00077    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00078 
00079      qq3d = GLOBAL_library.controllers[cc] ; /* controller */
00080 
00081      if( IM3D_OPEN(qq3d) && qq3d != im3d && ((1<<cc) & glock) != 0 ){
00082 
00083        qq_index = qq3d->vinfo->time_index ;           /* old index */
00084        qq_top   = qq3d->vinfo->top_index ;            /* max allowed */
00085 
00086        if( qq3d->vinfo->time_on && qq_top > 1 && qq_index != new_index ){
00087          tav = qq3d->vwid->imag->time_index_av ;
00088          AV_assign_ival( tav , new_index ) ;         /* will check range */
00089          if( tav->ival != qq_index )
00090            AFNI_time_index_CB( tav , (XtPointer) qq3d ) ;
00091        }
00092      }
00093    }
00094 
00095    busy = 0 ;  /* OK, let this routine be activated again */
00096    EXRETURN ;
00097 }

void AFNI_time_lock_change_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 7 of file afni_lock.c.

References AFNI_library_type::controllers, AFNI_widget_set::dmode, ENTRY, GLOBAL_library, IM3D_VALID, MAX_CONTROLLERS, MCW_set_bbox(), MCW_val_bbox(), RESET_AFNI_QUIT, AFNI_library_type::time_lock, AFNI_datamode_widgets::time_lock_bbox, and Three_D_View::vwid.

00008 {
00009    Three_D_View *im3d = (Three_D_View *) cd ;
00010    Three_D_View *qq3d ;
00011    int           bval , ii , bold ;
00012 
00013 ENTRY("AFNI_time_lock_change_CB") ;
00014 
00015    if( ! IM3D_VALID(im3d) ) EXRETURN ;
00016 
00017    /* get current global setting and compare to changed lock box */
00018 
00019    bold = GLOBAL_library.time_lock ;
00020    bval = MCW_val_bbox( im3d->vwid->dmode->time_lock_bbox ) ;
00021    if( bval == bold ) EXRETURN ;                     /* same --> nothing to do */
00022 
00023    /* new value --> save in global setting */
00024 
00025    GLOBAL_library.time_lock = bval ;
00026 
00027    /* set all other controller lock boxes to the same value */
00028 
00029    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
00030      qq3d = GLOBAL_library.controllers[ii] ;
00031      if( qq3d == im3d || ! IM3D_VALID(qq3d) ) continue ;
00032 
00033      MCW_set_bbox( qq3d->vwid->dmode->time_lock_bbox , bval ) ;
00034    }
00035    RESET_AFNI_QUIT(im3d) ;
00036    EXRETURN ;
00037 }

void AFNI_toggle_drawing Three_D_View  
 

Definition at line 358 of file afni_receive.c.

References AFNI_view_info::drawing_enabled, AFNI_view_info::drawing_mode, AFNI_view_info::drawing_pixel, drive_MCW_grapher(), drive_MCW_imseq(), ENTRY, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_button2_disable, graDR_button2_enable, IM3D_OPEN, isqDR_button2_disable, isqDR_button2_enable, isqDR_button2_mode, isqDR_button2_pixel, AFNI_view_info::num_receiver, RECEIVE_DRAWING_MASK, AFNI_view_info::receiver, AFNI_receiver::receiver_mask, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, and Three_D_View::vinfo.

Referenced by AFNI_receive_control(), AFNI_receive_init(), and AFNI_view_xyz_CB().

00359 {
00360    int turn_on = 0 ;
00361 
00362 ENTRY("AFNI_toggle_drawing") ;
00363 
00364    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
00365 
00366    /* count up how many receivers want the drawing */
00367 
00368    if( im3d->vinfo->receiver != NULL ){
00369       int ir ;
00370       for( ir=0 ; ir < im3d->vinfo->num_receiver ; ir++ )
00371          if( im3d->vinfo->receiver[ir] != NULL &&
00372              (im3d->vinfo->receiver[ir]->receiver_mask & RECEIVE_DRAWING_MASK) )
00373             turn_on++ ;
00374    }
00375    im3d->vinfo->drawing_enabled = (turn_on != 0) ;
00376 
00377    if( ! im3d->vinfo->drawing_enabled ){
00378 
00379    /*-- quench the flames --*/
00380 
00381       drive_MCW_imseq( im3d->s123 , isqDR_button2_disable , NULL ) ;
00382       drive_MCW_imseq( im3d->s231 , isqDR_button2_disable , NULL ) ;
00383       drive_MCW_imseq( im3d->s312 , isqDR_button2_disable , NULL ) ;
00384 
00385       drive_MCW_grapher( im3d->g123 , graDR_button2_disable , NULL ) ;
00386       drive_MCW_grapher( im3d->g231 , graDR_button2_disable , NULL ) ;
00387       drive_MCW_grapher( im3d->g312 , graDR_button2_disable , NULL ) ;
00388 
00389    } else {
00390 
00391    /*-- come on baby, light my fire --*/
00392 
00393       drive_MCW_imseq( im3d->s123 , isqDR_button2_enable , NULL ) ;
00394       drive_MCW_imseq( im3d->s231 , isqDR_button2_enable , NULL ) ;
00395       drive_MCW_imseq( im3d->s312 , isqDR_button2_enable , NULL ) ;
00396 
00397       if( im3d->vinfo->drawing_pixel > 0 ){
00398          drive_MCW_imseq( im3d->s123, isqDR_button2_pixel,
00399                           (XtPointer)im3d->vinfo->drawing_pixel ) ;
00400          drive_MCW_imseq( im3d->s231, isqDR_button2_pixel,
00401                           (XtPointer)im3d->vinfo->drawing_pixel ) ;
00402          drive_MCW_imseq( im3d->s312, isqDR_button2_pixel,
00403                           (XtPointer)im3d->vinfo->drawing_pixel ) ;
00404       }
00405 
00406       drive_MCW_imseq( im3d->s123, isqDR_button2_mode,
00407                        (XtPointer)im3d->vinfo->drawing_mode ) ;
00408       drive_MCW_imseq( im3d->s231, isqDR_button2_mode,
00409                        (XtPointer)im3d->vinfo->drawing_mode ) ;
00410       drive_MCW_imseq( im3d->s312, isqDR_button2_mode,
00411                        (XtPointer)im3d->vinfo->drawing_mode ) ;
00412 
00413       drive_MCW_grapher( im3d->g123 , graDR_button2_enable , NULL ) ;
00414       drive_MCW_grapher( im3d->g231 , graDR_button2_enable , NULL ) ;
00415       drive_MCW_grapher( im3d->g312 , graDR_button2_enable , NULL ) ;
00416 
00417    }
00418 
00419    EXRETURN ;
00420 }

THD_fvec3 AFNI_transform_vector THD_3dim_dataset  ,
THD_fvec3   ,
THD_3dim_dataset  
 

Definition at line 7323 of file afni.c.

References AFNI_backward_warp_vector(), AFNI_find_warp(), AFNI_forward_warp_vector(), THD_3dim_dataset::anat_parent, VIEW_ORIGINAL_TYPE, THD_3dim_dataset::view_type, THD_3dim_dataset::warp, and THD_3dim_dataset::warp_parent.

Referenced by AFNI_initialize_view(), AFNI_lock_carryout(), AFNI_make_warp(), AFNI_marks_quality_check(), AFNI_mnito_CB(), AFNI_setup_viewing(), AFNI_talto_CB(), AFNI_ttatlas_query(), and DRAW_ttatlas_CB().

07326 {
07327    if( old_dset==NULL || new_dset==NULL || old_dset==new_dset ) return old_fv ;
07328 
07329    if( old_dset == new_dset->warp_parent ){
07330 
07331       return AFNI_forward_warp_vector( new_dset->warp , old_fv ) ;
07332 
07333    } else if( old_dset->warp_parent == new_dset ){
07334 
07335       return AFNI_backward_warp_vector( old_dset->warp , old_fv ) ;
07336 
07337    } else if( old_dset->warp_parent == new_dset->warp_parent &&
07338               old_dset->warp_parent != NULL ){
07339 
07340       THD_fvec3 par_fv ;
07341       par_fv = AFNI_backward_warp_vector( old_dset->warp , old_fv ) ;
07342       return   AFNI_forward_warp_vector ( new_dset->warp , par_fv ) ;
07343    }
07344 
07345    /*-- 09 Jul 2001:
07346         If old_dset is in +tlrc/+acpc and new_dset is in +orig,
07347         see if can find anat_parent to do the job for us --*/
07348 
07349    if( new_dset->view_type   == VIEW_ORIGINAL_TYPE &&
07350        old_dset->view_type   != VIEW_ORIGINAL_TYPE &&
07351        old_dset->anat_parent != NULL               &&
07352        old_dset->anat_parent->warp_parent != NULL      ){
07353 
07354       return AFNI_backward_warp_vector( old_dset->anat_parent->warp , old_fv ) ;
07355    }
07356 
07357    /*-- If old_dset is +orig and new_dset is +tlrc/+acpc, try anat_parent --*/
07358 
07359    if( old_dset->view_type   == VIEW_ORIGINAL_TYPE &&
07360        new_dset->view_type   != VIEW_ORIGINAL_TYPE &&
07361        new_dset->anat_parent != NULL               &&
07362        new_dset->anat_parent->warp_parent != NULL      ){
07363 
07364       return AFNI_forward_warp_vector( new_dset->anat_parent->warp , old_fv ) ;
07365    }
07366 
07367    /*-- 28 Aug 2002: see if there is a special warp between datasets --*/
07368 
07369    { THD_warp *swarp = AFNI_find_warp(new_dset,old_dset) ;
07370      if( swarp != NULL ) return AFNI_forward_warp_vector( swarp , old_fv ) ;
07371      swarp = AFNI_find_warp(old_dset,new_dset) ;
07372      if( swarp != NULL ) return AFNI_backward_warp_vector( swarp, old_fv ) ;
07373    }
07374 
07375    /*-- default is no change --*/
07376 
07377    return old_fv ;
07378 }

int AFNI_ts_in_library MRI_IMAGE   tsim
 

Definition at line 17 of file afni_fimmer.c.

References ENTRY, GLOBAL_library, IMARR_COUNT, IMARR_SUBIMAGE, RETURN, and AFNI_library_type::timeseries.

Referenced by AFNI_fimmer_setort(), AFNI_fimmer_setref(), AFNI_gra_send_CB(), and PLUG_choose_timeseries_CB().

00018 {
00019    int its ;
00020 
00021 ENTRY("AFNI_ts_in_library") ;
00022 
00023    if( GLOBAL_library.timeseries != NULL         &&
00024       IMARR_COUNT(GLOBAL_library.timeseries) > 0 && tsim != NULL ){
00025 
00026       for( its=0 ; its < IMARR_COUNT(GLOBAL_library.timeseries) ; its++ )
00027          if( tsim == IMARR_SUBIMAGE(GLOBAL_library.timeseries,its) )
00028             RETURN(its) ;
00029    }
00030 
00031    RETURN(-1) ;
00032 }

MRI_IMAGE* AFNI_ttatlas_overlay Three_D_View   im3d,
int    n,
int    ax_1,
int    ax_2,
int    ax_3,
MRI_IMAGE   fov
 

now apply threshold, if any *

Definition at line 1436 of file afni_func.c.

References AFNI_slice_flip(), Three_D_View::anat_now, DSET_load, DSET_NVOX, DSET_NZ, ENTRY, TTRR_params::hemi, TTRR_params::meth, MRI_BYTE_PTR, mri_free(), mri_new_conforming, MRI_SHORT_PTR, TTRR_params::num, MRI_IMAGE::nvox, RESAM_NN_TYPE, RETURN, STATUS, TT_retrieve_atlas(), TT_retrieve_atlas_nz, TTRR_params::ttbrik, TTRR_params::ttovc, TTRR_get_params(), TTRR_HEMI_BOTH, TTRR_HEMI_LEFT, TTRR_HEMI_RIGHT, TTRR_METH_FAG, TTRR_METH_FGA, TTRR_METH_GAF, and TTRR_params::ttval.

Referenced by AFNI_overlay().

01439 {
01440    THD_3dim_dataset *dseTT ;
01441    TTRR_params *ttp ;
01442    byte *b0 , *b1 , *brik, *val, *ovc , g_ov,a_ov,final_ov ;
01443    short *ovar ;
01444    MRI_IMAGE *ovim=NULL , *b0im , *b1im ;
01445    int gwin , fwin , nreg , ii,jj , nov ;
01446 
01447 ENTRY("AFNI_ttatlas_overlay") ;
01448 
01449    /* setup and sanity checks */
01450 
01451 STATUS("checking if have Atlas dataset") ;
01452 
01453    /* 01 Aug 2001: retrieve atlas based on z-axis size of underlay dataset */
01454 #if 1
01455    dseTT = TT_retrieve_atlas_nz( DSET_NZ(im3d->anat_now) ) ;
01456                                  if( dseTT == NULL )      RETURN(NULL) ;
01457 #else
01458    dseTT = TT_retrieve_atlas() ; if( dseTT == NULL )      RETURN(NULL) ;
01459 #endif
01460 
01461    /* make sure Atlas and current dataset match in size */
01462 
01463 STATUS("checking if Atlas and anat dataset match") ;
01464 
01465    if( DSET_NVOX(dseTT) != DSET_NVOX(im3d->anat_now) )    RETURN(NULL) ;
01466 
01467    /* make sure we are actually drawing something */
01468 
01469 STATUS("checking if Atlas Colors is on") ;
01470 
01471    ttp = TTRR_get_params() ; if( ttp == NULL )            RETURN(NULL) ;
01472 
01473    /* at this time, hemisphere processing doesn't work in this function */
01474 
01475 #if 0
01476    switch( ttp->hemi ){
01477       case TTRR_HEMI_LEFT:  hbot=HEMX+1 ; break ;
01478       case TTRR_HEMI_RIGHT: hbot= 0     ; break ;
01479       case TTRR_HEMI_BOTH:  hbot= 0     ; break ;
01480    }
01481 #endif
01482 
01483    /* get slices from TTatlas dataset */
01484 
01485 STATUS("loading Atlas bricks") ;
01486 
01487    DSET_load(dseTT) ;
01488    b0im = AFNI_slice_flip( n , 0 , RESAM_NN_TYPE , ax_1,ax_2,ax_3 , dseTT ) ;
01489    if( b0im == NULL )                                     RETURN(NULL) ;
01490 
01491    b1im = AFNI_slice_flip( n , 1 , RESAM_NN_TYPE , ax_1,ax_2,ax_3 , dseTT ) ;
01492    if( b1im == NULL ){ mri_free(b0im) ;                   RETURN(NULL) ; }
01493 
01494    /* make a new overlay image, or just operate on the old one */
01495 
01496    if( fov == NULL ){
01497 STATUS("making new overlay for Atlas") ;
01498       ovim = mri_new_conforming( b0im , MRI_short ) ;   /* new overlay */
01499       ovar = MRI_SHORT_PTR(ovim) ;
01500       memset( ovar , 0 , ovim->nvox * sizeof(short) ) ;
01501    } else{
01502 STATUS("re-using old overlay for Atlas") ;
01503       ovim = fov ;                                      /* old overlay */
01504       ovar = MRI_SHORT_PTR(ovim) ;
01505       if( ovim->nvox != b0im->nvox ){                     /* shouldn't */
01506          mri_free(b0im) ; mri_free(b1im) ; RETURN(NULL) ; /* happen!  */
01507       }
01508    }
01509 
01510    b0 = MRI_BYTE_PTR(b0im) ; b1 = MRI_BYTE_PTR(b1im) ;
01511 
01512    /* fwin => function 'wins' over Atlas */
01513    /* gwin => gyral Atlas brick 'wins' over 'area' Atlas brick */
01514 
01515    fwin = (ttp->meth == TTRR_METH_FGA) || (ttp->meth == TTRR_METH_FAG) ;
01516    gwin = (ttp->meth == TTRR_METH_FGA) || (ttp->meth == TTRR_METH_GAF) ;
01517 
01518    nreg = ttp->num ;    /* number of 'on' regions     */
01519    brik = ttp->ttbrik ; /* which sub-brick in atlas    */
01520    val  = ttp->ttval ;  /* which code in that sub-brick */
01521    ovc  = ttp->ttovc ;  /* which overlay color index   */
01522 
01523    /* loop over image voxels, find overlays from Atlas */
01524 
01525 STATUS("doing Atlas overlay") ;
01526 
01527    for( nov=ii=0 ; ii < ovim->nvox ; ii++ ){
01528 
01529       if( ovar[ii] && fwin ) continue ; /* function wins */
01530 
01531       /* check Atlas 'on' regions for hits */
01532 
01533       g_ov = a_ov = 0 ;
01534       for( jj=0 ; (g_ov==0 || a_ov==0) && jj<nreg ; jj++ ){
01535               if( b0[ii] == val[jj] ) g_ov = ovc[jj] ;
01536          else if( b1[ii] == val[jj] ) a_ov = ovc[jj] ;
01537       }
01538 
01539       if( g_ov==0 && a_ov==0 ) continue ;  /* no hit */
01540 
01541       /* find the winner */
01542 
01543       if( g_ov && (gwin || a_ov==0) ) final_ov = g_ov ;
01544       else                            final_ov = a_ov ;
01545 
01546       ovar[ii] = final_ov ;  /* and the winner is ... */
01547       nov++ ;
01548    }
01549 
01550    mri_free(b0im) ; mri_free(b1im) ;  /* free at last */
01551 
01552 if(PRINT_TRACING)
01553 { char str[256]; sprintf(str,"Atlas overlaid %d pixels",nov); STATUS(str); }
01554 
01555    RETURN(ovim) ;
01556 }

char* AFNI_ttatlas_query Three_D_View  
 

Definition at line 8197 of file afni.c.

References AFNI_transform_vector(), Three_D_View::anat_dset, Three_D_View::anat_now, CAN_TALTO, IM3D_OPEN, LOAD_FVEC3, TT_load_atlas(), TT_whereami(), VIEW_TALAIRACH_TYPE, THD_3dim_dataset::view_type, Three_D_View::vinfo, AFNI_view_info::xi, THD_fvec3::xyz, AFNI_view_info::yj, and AFNI_view_info::zk.

Referenced by AFNI_imag_pop_CB(), and AFNI_set_viewpoint().

08198 {
08199    static int have_TT = -1 ;
08200 
08201    if( !IM3D_OPEN(im3d) || !CAN_TALTO(im3d) ) return NULL ;
08202 
08203    /*-- make sure we have the TT atlas --*/
08204 
08205    if( have_TT == -1 ){
08206       have_TT = TT_load_atlas() ;
08207       if( !have_TT ) return NULL ;
08208    }
08209 
08210    if( have_TT ){
08211      THD_fvec3 tv ; char *tlab ;
08212 
08213      /*-- current position --*/
08214 
08215      LOAD_FVEC3(tv,im3d->vinfo->xi,im3d->vinfo->yj,im3d->vinfo->zk) ;
08216 
08217      /*-- transform to Talairach, if needed --*/
08218 
08219      if( im3d->anat_now->view_type != VIEW_TALAIRACH_TYPE )
08220         tv = AFNI_transform_vector( im3d->anat_now , tv ,
08221                                     im3d->anat_dset[VIEW_TALAIRACH_TYPE] ) ;
08222 
08223      /*-- get result string --*/
08224 
08225      tlab = TT_whereami( tv.xyz[0] , tv.xyz[1] , tv.xyz[2] ) ;
08226      return tlab ;
08227    }
08228 
08229    return NULL ;
08230 }

void AFNI_underlay_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 1623 of file afni_func.c.

References AFNI_first_tog(), AFNI_IGNORE_EVERYTHING, AFNI_IGNORE_NOTHING, AFNI_IGNORE_REDRAWS, AFNI_process_alteration(), AFNI_set_viewpoint(), AFNI_set_window_titles(), Three_D_View::b123_anat, Three_D_View::b123_fim, Three_D_View::b123_ulay, Three_D_View::b231_anat, Three_D_View::b231_fim, Three_D_View::b231_ulay, Three_D_View::b312_anat, Three_D_View::b312_fim, Three_D_View::b312_ulay, BRICK_DRAWABLE, BRICK_GRAPHABLE, CLEAR_MONTAGE, Three_D_View::dc, MCW_DC::display, drive_MCW_grapher(), drive_MCW_imseq(), FD_brick::dset, DSET_GRAPHABLE, ENTRY, Three_D_View::fim_now, AFNI_widget_set::func, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, graDR_destroy, graDR_newdata, AFNI_imaging_widgets::graph_xyz_pb, AFNI_imaging_widgets::graph_yzx_pb, AFNI_imaging_widgets::graph_zxy_pb, HINTIZE_pbar, Three_D_View::ignore_seq_callbacks, IM3D_OPEN, AFNI_widget_set::imag, AFNI_imaging_widgets::image_xyz_pb, AFNI_imaging_widgets::image_yzx_pb, AFNI_imaging_widgets::image_zxy_pb, isqDR_destroy, isqDR_newseq, isqDR_sendmontage, ISVALID_DSET, LAST_UNDERLAY_TYPE, MCW_set_bbox(), REDISPLAY_ALL, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, STATUS, UNDERLAY_ALLFUNC, UNDERLAY_ANAT, AFNI_function_widgets::underlay_bbox, AFNI_view_info::underlay_type, Three_D_View::vinfo, Three_D_View::vwid, and MCW_bbox::wbut.

Referenced by AFNI_setup_viewing().

01624 {
01625    Three_D_View *im3d = (Three_D_View *) cd ;
01626    int bval ;
01627    Boolean seq_exist ;
01628 
01629 ENTRY("AFNI_underlay_CB") ;
01630 
01631    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
01632 
01633    if( w != NULL ) bval = AFNI_first_tog( LAST_UNDERLAY_TYPE+1 ,
01634                                           im3d->vwid->func->underlay_bbox->wbut ) ;
01635    else            bval = im3d->vinfo->underlay_type ;
01636 
01637    if( bval == im3d->vinfo->underlay_type && w != NULL ) EXRETURN ;  /* nothing */
01638 
01639    im3d->vinfo->underlay_type = bval ;
01640 
01641    /*----- set the bricks to use for the underlay images -----*/
01642 
01643    switch( im3d->vinfo->underlay_type ){
01644 
01645       default:
01646          XBell( im3d->dc->display , 100 ) ;  /* beep and fall through! */
01647 
01648       case UNDERLAY_ANAT:                    /* set underlay to anat */
01649 
01650 STATUS("anatomy underlay") ;
01651 
01652          im3d->b123_ulay = im3d->b123_anat ;
01653          im3d->b231_ulay = im3d->b231_anat ;
01654          im3d->b312_ulay = im3d->b312_anat ;
01655       break ;
01656 
01657       case UNDERLAY_ALLFUNC:
01658          if( ISVALID_DSET(im3d->fim_now) ){
01659 
01660 STATUS("functional underlay") ;
01661 
01662             im3d->b123_ulay = im3d->b123_fim ;
01663             im3d->b231_ulay = im3d->b231_fim ;
01664             im3d->b312_ulay = im3d->b312_fim ;
01665          } else {
01666 
01667 STATUS("defaulted anatomy underlay") ;
01668 
01669             XBell( im3d->dc->display , 100 ) ;
01670 
01671             im3d->b123_ulay = im3d->b123_anat ;
01672             im3d->b231_ulay = im3d->b231_anat ;
01673             im3d->b312_ulay = im3d->b312_anat ;
01674 
01675             MCW_set_bbox( im3d->vwid->func->underlay_bbox , 1<<UNDERLAY_ANAT ) ;
01676          }
01677       break ;
01678    }
01679 
01680    /*--- May 1996: destroy useless graph windows ---*/
01681 
01682    im3d->ignore_seq_callbacks = AFNI_IGNORE_REDRAWS ;  /* 16 Feb 97 */
01683 
01684    if( !DSET_GRAPHABLE(im3d->b123_ulay->dset) || !BRICK_GRAPHABLE(im3d->b123_ulay) ){
01685       if( im3d->g123 != NULL ){
01686          drive_MCW_grapher( im3d->g123 , graDR_destroy , NULL ) ;
01687          im3d->g123 = NULL ;
01688       }
01689       XtSetSensitive( im3d->vwid->imag->graph_xyz_pb , False ) ;
01690    } else {
01691       XtSetSensitive( im3d->vwid->imag->graph_xyz_pb , True ) ;
01692    }
01693 
01694    if( !DSET_GRAPHABLE(im3d->b231_ulay->dset) || !BRICK_GRAPHABLE(im3d->b231_ulay) ){
01695       if( im3d->g231 != NULL ){
01696          drive_MCW_grapher( im3d->g231 , graDR_destroy , NULL ) ;
01697          im3d->g231 = NULL ;
01698       }
01699       XtSetSensitive( im3d->vwid->imag->graph_yzx_pb , False ) ;
01700    } else {
01701       XtSetSensitive( im3d->vwid->imag->graph_yzx_pb , True ) ;
01702    }
01703 
01704    if( !DSET_GRAPHABLE(im3d->b312_ulay->dset) || !BRICK_GRAPHABLE(im3d->b312_ulay) ){
01705       if( im3d->g312 != NULL ){
01706          drive_MCW_grapher( im3d->g312 , graDR_destroy , NULL ) ;
01707          im3d->g312 = NULL ;
01708       }
01709       XtSetSensitive( im3d->vwid->imag->graph_zxy_pb , False ) ;
01710    } else {
01711       XtSetSensitive( im3d->vwid->imag->graph_zxy_pb , True ) ;
01712    }
01713 
01714    /** 05 Mar 1997: disable viewers if x or y dimension is 1 pixel **/
01715 
01716    if( !BRICK_DRAWABLE(im3d->b123_ulay) ){
01717       if( im3d->s123 != NULL ){
01718          drive_MCW_imseq( im3d->s123 , isqDR_destroy , NULL ) ;
01719          im3d->s123 = NULL ;
01720       }
01721       XtSetSensitive( im3d->vwid->imag->image_xyz_pb , False ) ;
01722    } else {
01723       XtSetSensitive( im3d->vwid->imag->image_xyz_pb , True ) ;
01724    }
01725 
01726    if( !BRICK_DRAWABLE(im3d->b231_ulay) ){
01727       if( im3d->s231 != NULL ){
01728          drive_MCW_imseq( im3d->s231 , isqDR_destroy , NULL ) ;
01729          im3d->s231 = NULL ;
01730       }
01731       XtSetSensitive( im3d->vwid->imag->image_yzx_pb , False ) ;
01732    } else {
01733       XtSetSensitive( im3d->vwid->imag->image_yzx_pb , True ) ;
01734    }
01735 
01736    if( !BRICK_DRAWABLE(im3d->b312_ulay) ){
01737       if( im3d->s312 != NULL ){
01738          drive_MCW_imseq( im3d->s312 , isqDR_destroy , NULL ) ;
01739          im3d->s312 = NULL ;
01740       }
01741       XtSetSensitive( im3d->vwid->imag->image_zxy_pb , False ) ;
01742    } else {
01743       XtSetSensitive( im3d->vwid->imag->image_zxy_pb , True ) ;
01744    }
01745 
01746    im3d->ignore_seq_callbacks = AFNI_IGNORE_NOTHING ;  /* 16 Feb 97 */
01747 
01748    /*--- attach any changes to open image displays ---*/
01749 
01750    seq_exist = (im3d->s123 != NULL) || (im3d->s231 != NULL) || (im3d->s312 != NULL) ||
01751                (im3d->g123 != NULL) || (im3d->g231 != NULL) || (im3d->g312 != NULL)   ;
01752 
01753    /* set the title for all windows */
01754 
01755    AFNI_set_window_titles( im3d ) ;
01756 
01757    if( seq_exist ){
01758 
01759       im3d->ignore_seq_callbacks = AFNI_IGNORE_EVERYTHING ;
01760 
01761       if( im3d->s123 != NULL )
01762          drive_MCW_imseq( im3d->s123 , isqDR_newseq ,
01763                                        (XtPointer) im3d->b123_ulay ) ;
01764 
01765       if( im3d->s231 != NULL )
01766          drive_MCW_imseq( im3d->s231 , isqDR_newseq ,
01767                                        (XtPointer) im3d->b231_ulay ) ;
01768 
01769       if( im3d->s312 != NULL )
01770          drive_MCW_imseq( im3d->s312 , isqDR_newseq ,
01771                                        (XtPointer) im3d->b312_ulay ) ;
01772 
01773       if( im3d->g123 != NULL )
01774          drive_MCW_grapher( im3d->g123 , graDR_newdata ,
01775                                          (XtPointer) im3d->b123_ulay ) ;
01776 
01777       if( im3d->g231 != NULL )
01778          drive_MCW_grapher( im3d->g231 , graDR_newdata ,
01779                                          (XtPointer) im3d->b231_ulay ) ;
01780 
01781       if( im3d->g312 != NULL )
01782          drive_MCW_grapher( im3d->g312 , graDR_newdata ,
01783                                          (XtPointer) im3d->b312_ulay ) ;
01784 
01785       im3d->ignore_seq_callbacks = AFNI_IGNORE_REDRAWS ;
01786 
01787       /** July 1996: get the sequences to send their montaging status **/
01788 
01789       if( im3d->s123 != NULL )
01790          drive_MCW_imseq( im3d->s123 , isqDR_sendmontage , NULL ) ;
01791       else
01792          CLEAR_MONTAGE( im3d , im3d->b123_ulay ) ;
01793 
01794       if( im3d->s231 != NULL )
01795          drive_MCW_imseq( im3d->s231 , isqDR_sendmontage , NULL ) ;
01796       else
01797          CLEAR_MONTAGE( im3d , im3d->b231_ulay ) ;
01798 
01799       if( im3d->s312 != NULL )
01800          drive_MCW_imseq( im3d->s312 , isqDR_sendmontage , NULL ) ;
01801       else
01802          CLEAR_MONTAGE( im3d , im3d->b312_ulay ) ;
01803 
01804       im3d->ignore_seq_callbacks = AFNI_IGNORE_NOTHING ;
01805 
01806       if( w != NULL ){            /* a real callback */
01807           SHOW_AFNI_PAUSE ;
01808           AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_ALL ) ;
01809           SHOW_AFNI_READY ;
01810       }
01811    }
01812 
01813    /* Feb 1998: if a receiver is open
01814                 send it a message that something has altered */
01815 
01816    AFNI_process_alteration(im3d) ;
01817 
01818    HINTIZE_pbar(im3d) ; /* 15 Aug 2001 */
01819 
01820    EXRETURN ;
01821 }

void AFNI_update_all_surface_widgets THD_session   sess
 

Update all surface widgets everywhere that touch this session.

Definition at line 758 of file afni_sumafunc.c.

References AFNI_update_surface_widgets(), AFNI_library_type::controllers, ENTRY, GLOBAL_library, IM3D_OPEN, MAX_CONTROLLERS, and Three_D_View::ss_now.

Referenced by process_NIML_Node_ROI(), and process_NIML_SUMA_ixyz().

00759 {
00760    int ii ;
00761    Three_D_View *im3d ;
00762 ENTRY("AFNI_update_all_surface_widgets") ;
00763    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
00764      im3d = GLOBAL_library.controllers[ii] ;
00765      if( IM3D_OPEN(im3d) && im3d->ss_now == sess )
00766        AFNI_update_surface_widgets( im3d ) ;
00767    }
00768    EXRETURN ;
00769 }

void AFNI_update_surface_widgets Three_D_View   im3d
 

Update surface widgets for this controller; that is, set labels, manage/unmanage widget rows, et cetera.

Definition at line 678 of file afni_sumafunc.c.

References AFNI_controller_label(), AFNI_viewing_widgets::choose_surf_pb, Three_D_View::dc, DC_find_closest_overlay_color(), ENTRY, getenv(), IM3D_OPEN, SUMA_surface::label, MAKE_SURF_ROW, MCW_register_hint(), MCW_set_widget_label(), MIN, AFNI_surface_widgets::nall, MCW_DCOV::ncol_ov, AFNI_surface_widgets::nrow, SUMA_surface::num_ijk, SUMA_surface::num_ixyz, MCW_DC::ovc, SENSITIZE, THD_session::sessname, SESSTRAIL, Three_D_View::ss_now, THD_session::su_num, THD_session::su_surf, AFNI_surface_widgets::surf_bbox, AFNI_surface_widgets::surf_ledg_av, AFNI_surface_widgets::surf_line_av, AFNI_surface_widgets::surf_node_av, AFNI_surface_widgets::surf_rc, AFNI_viewing_widgets::swid, THD_MAX_NAME, THD_trailname(), AFNI_surface_widgets::top_lab, AFNI_widget_set::view, Three_D_View::vwid, MCW_bbox::wbut, and XtRealloc.

Referenced by AFNI_choose_surface_CB(), AFNI_setup_viewing(), and AFNI_update_all_surface_widgets().

00679 {
00680    AFNI_surface_widgets *swid ;
00681    int num , ii , nwid,nall ;
00682    char str[64] , nam[THD_MAX_NAME] , *tnam ;
00683 
00684 ENTRY("AFNI_update_surface_widgets") ;
00685 
00686    if( !IM3D_OPEN(im3d) || im3d->ss_now == NULL ) EXRETURN ;  /* bad */
00687 
00688    num  = im3d->ss_now->su_num ;   /* # of surfaces in current session */
00689    swid = im3d->vwid->view->swid ; /* pointer to surface widget struct */
00690 
00691    SENSITIZE( im3d->vwid->view->choose_surf_pb , (Boolean)(num > 0) ) ;
00692 
00693    if( swid == NULL ) EXRETURN ;  /* nothing to update */
00694 
00695    /* put session label in top of panel */
00696 
00697    strcpy( nam , im3d->ss_now->sessname ) ;
00698    tnam = THD_trailname(nam,SESSTRAIL+1) ;
00699    ii = strlen(tnam) ; if( ii > 50 ) tnam += (ii-50) ;
00700    sprintf(str ,"%-.50s %s" , tnam, AFNI_controller_label(im3d) ) ;
00701    MCW_set_widget_label( swid->top_lab , str ) ;
00702 
00703    /* make more widget rows? (1 per surface is needed) */
00704 
00705    if( swid->nall < num ){
00706      char *eee ; int line_col,box_col ;
00707 
00708      swid->surf_rc      = (Widget *)        XtRealloc( (char *)swid->surf_rc     ,num*sizeof(Widget)         );
00709      swid->surf_bbox    = (MCW_bbox **)     XtRealloc( (char *)swid->surf_bbox   ,num*sizeof(MCW_bbox *)     );
00710      swid->surf_node_av = (MCW_arrowval **) XtRealloc( (char *)swid->surf_node_av,num*sizeof(MCW_arrowval *) );
00711      swid->surf_line_av = (MCW_arrowval **) XtRealloc( (char *)swid->surf_line_av,num*sizeof(MCW_arrowval *) );
00712      swid->surf_ledg_av = (MCW_arrowval **) XtRealloc( (char *)swid->surf_line_av,num*sizeof(MCW_arrowval *) );
00713 
00714 
00715      eee = getenv( "AFNI_SUMA_LINECOLOR" ) ;
00716      line_col = DC_find_closest_overlay_color( im3d->dc, eee ) ;
00717      if( line_col < 0 ) line_col = MIN(6,im3d->dc->ovc->ncol_ov-1) ;
00718 
00719      eee = getenv( "AFNI_SUMA_BOXCOLOR" ) ;
00720      box_col = DC_find_closest_overlay_color( im3d->dc, eee ) ;
00721      if( box_col < 0 ) box_col = 0 ;
00722 
00723      for( ii=swid->nall ; ii < num ; ii++ ){
00724        MAKE_SURF_ROW(ii) ;
00725      }
00726      swid->nall = num ;
00727    }
00728 
00729    /* map or unmap widget rows? (1 per surface is needed) */
00730 
00731    if( swid->nrow < num ){
00732      for( ii=swid->nrow ; ii < num ; ii++ )
00733        XtManageChild( swid->surf_rc[ii] ) ;
00734    } else if( swid->nrow > num ){
00735       for( ii=num ; ii < swid->nrow ; ii++ )
00736        XtUnmanageChild( swid->surf_rc[ii] ) ;
00737    }
00738    swid->nrow = num ;  /* # of managed rows */
00739 
00740    /* change labels for each row */
00741 
00742    for( ii=0 ; ii < num ; ii++ ){
00743      sprintf(str,"%-14.14s: ",im3d->ss_now->su_surf[ii]->label) ;
00744      MCW_set_widget_label( swid->surf_bbox[ii]->wbut[0] , str ) ;
00745 
00746      sprintf(str,"%d Nodes; %d Triangles",             /* 20 Aug 2002:  */
00747              im3d->ss_now->su_surf[ii]->num_ixyz ,     /* put a hint    */
00748              im3d->ss_now->su_surf[ii]->num_ijk   ) ;  /* on each label */
00749      MCW_register_hint( swid->surf_bbox[ii]->wbut[0] , str ) ;
00750    }
00751 
00752    EXRETURN ;
00753 }

int AFNI_version_check void   
 

Complete the version check by seeing if the child process has any data to report from the AFNI web site. Returns 1 if the version at the AFNI site doesn't match the version of this program; returns 0 if they match, or it can't tell. Also prints stuff out. --------------------------------------------------------------------------

Definition at line 217 of file afni_version.c.

References AFMALL, AFNI_HOST, free, getenv(), IOCHAN_CLOSE, iochan_readcheck(), iochan_recv(), KAPUT, NI_new_data_element(), NI_set_attribute(), NI_stream_close(), NI_stream_open(), NI_TEXT_MODE, NI_write_element(), vc_child_pid, and VSIZE.

Referenced by AFNI_startup_timeout_CB().

00218 {
00219    int jj , nbuf=0 ;
00220    char *vbuf=NULL ;
00221    char vv[128]="none" ;
00222    char *sname , *vvbuf ;
00223 
00224 #ifdef CYGWIN   /* 30 Jun 2005 [rickr] */
00225 
00226    return 0;
00227 
00228 #else
00229 
00230    /* if something is rotten, then toss it out */
00231 
00232    if( disabled ) return 0 ;   /* 27 Jan 2003 */
00233 
00234    if( vc_ioc == NULL || vc_child_pid == (pid_t)(-1) ) KAPUT("bad child state");
00235 
00236    jj = kill(vc_child_pid,0) ;                /* is child alive? */
00237    if( jj < 0 ){
00238      IOCHAN_CLOSE(vc_ioc); vc_child_pid=(pid_t)(-1);
00239      KAPUT("child not alive");
00240    }
00241 
00242    jj = iochan_readcheck( vc_ioc , 333 ) ;    /* is iochan open yet? */
00243    if( jj <= 0 ){
00244      IOCHAN_CLOSE(vc_ioc); kill(vc_child_pid,SIGTERM); vc_child_pid=(pid_t)(-1);
00245      KAPUT("connection to child gone bad");
00246    }
00247 
00248    /* if here, have data ready to read from child! */
00249 
00250    nbuf = 0 ;
00251    vbuf = AFMALL( char, VSIZE) ;
00252    while(1){
00253      jj = iochan_recv( vc_ioc , vbuf+nbuf , VSIZE-nbuf ) ;
00254      if( jj < 1 ) break ;
00255      nbuf += jj ;
00256      if( nbuf >= VSIZE-1 ) break ;
00257      jj = iochan_readcheck( vc_ioc , 5 ) ;
00258      if( jj < 1 ) break ;
00259    }
00260 
00261    /* now wait for child to kill itself */
00262 
00263    waitpid(vc_child_pid,NULL,WNOHANG); vc_child_pid = (pid_t)(-1);
00264    IOCHAN_CLOSE(vc_ioc);
00265 
00266    /* no data? */
00267 
00268    if( nbuf <= 0 ){ free(vbuf); vbuf = NULL; KAPUT("bad version data"); } /* unlikely */
00269 
00270    /* extract version and data/time strings from data */
00271 
00272 #ifdef USE_HTTP_10
00273    vvbuf = strstr(vbuf,"\r\n\r\n") ;
00274    if( vvbuf == NULL ) vvbuf = vbuf      ;
00275    else                vvbuf = vvbuf + 4 ;
00276 #else
00277    vvbuf = vbuf ;
00278 #endif
00279 
00280    sscanf( vvbuf , "%127s" , vv ); free(vbuf);
00281 
00282    /* record the current time, so we don't check too often */
00283 
00284    { char *home=getenv("HOME") , mname[VSIZE]="file:" ;
00285      NI_stream ns ;
00286      if( home != NULL ) strcat(mname,home) ;
00287      strcat(mname,"/.afni.vctime") ;
00288      ns = NI_stream_open( mname , "w" ) ;
00289      if( ns != NULL ){
00290        NI_element *nel=NI_new_data_element("AFNI_vctime",0); char rhs[32];
00291        sprintf(rhs,"%d",(int)time(NULL)) ;
00292        NI_set_attribute( nel , "version_check_time" , rhs ) ;
00293        if( strcmp(vv,"none") != 0 )                            /* 27 Jan 2003 */
00294          NI_set_attribute( nel , "version_string" , VERSION ) ;
00295        NI_write_element( ns , nel , NI_TEXT_MODE ) ;
00296        NI_stream_close(ns) ;
00297      }
00298    }
00299 
00300    /* compare version strings */
00301 
00302    if( strcmp(vv,VERSION) == 0 ){                    /* versions match */
00303      fprintf(stderr,"\n** Version check: you are up-to-date!\n"
00304                       "** To disable future version checks:\n"
00305                       "** set environment variable AFNI_VERSION_CHECK to NO.\n"
00306                       "** Version checks are done about every %.1f days.\n",
00307              rint(VDELAY/86400.0) ) ;
00308      return 0 ;
00309    }
00310 
00311    /* print a message about version mismatch */
00312 
00313    fprintf(stderr, "\n"
00314                    "****************************************************\n"
00315                    " This AFNI was compiled with the following settings:\n"
00316                    "   Version ID   = %s\n"
00317                    " Latest version at %s\n"
00318                    "   Version ID   = %s\n"
00319                    "****************************************************\n"
00320                    " To disable future version checks:\n"
00321                    " set environment variable AFNI_VERSION_CHECK to NO\n"
00322                    "****************************************************\n"
00323           , VERSION, AFNI_HOST , vv ) ;
00324 
00325    return 1 ;
00326 
00327 #endif /* CYGWIN */
00328 }

void AFNI_view_setter Three_D_View   im3d,
MCW_imseq   seq
 

Define the view_setter code, which says which image viewer plane was used to set the current viewpoint. [26 Feb 2003] --------------------------------------------------------------------------

Definition at line 5290 of file afni.c.

References AXIAL, CORONAL, IM3D_OPEN, ISQ_REALZ, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, SAGITTAL, AFNI_view_info::view_setter, and Three_D_View::vinfo.

Referenced by AFNI_gra_send_CB(), AFNI_imag_pop_CB(), AFNI_initialize_view(), AFNI_seq_send_CB(), and AFNI_view_xyz_CB().

05291 {
05292    MCW_imseq *sxyz, *syzx, *szxy ;
05293    int val=-1 ;
05294 
05295    if( !IM3D_OPEN(im3d) ) return ;
05296 
05297    sxyz = im3d->s123 ; syzx = im3d->s231 ; szxy = im3d->s312 ;
05298 
05299    if( !ISQ_REALZ(seq) ){
05300      int code = 4*(sxyz!=NULL) + 2*(syzx!=NULL) + (szxy!=NULL) ;
05301      switch(code){
05302        case 4: val = AXIAL   ; break ;
05303        case 2: val = SAGITTAL; break ;
05304        case 1: val = CORONAL ; break ;
05305      }
05306    } else {
05307           if( seq == sxyz ) val = AXIAL   ;
05308      else if( seq == syzx ) val = SAGITTAL;
05309      else if( seq == szxy ) val = CORONAL ;
05310    }
05311 
05312    im3d->vinfo->view_setter = val ;
05313    return ;
05314 }

void AFNI_view_xyz_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 4885 of file afni.c.

References afni16_pixmap, AFNI_arrowpad_help, AFNI_arrowpad_hint, AFNI_brick_to_mri(), AFNI_controller_index(), AFNI_image_help, AFNI_IMAGES_VIEW, AFNI_range_setter(), AFNI_set_viewpoint(), AFNI_toggle_drawing(), AFNI_view_setter(), AFNI_yesenv(), Three_D_View::b123_ulay, Three_D_View::b231_ulay, Three_D_View::b312_ulay, THD_statistics::bstat, client_data, Three_D_View::dc, drive_MCW_grapher(), drive_MCW_imseq(), FD_brick::dset, DSET_GRAPHABLE, ENTRY, MCW_grapher::fdw_graph, Three_D_View::fimdata, AFNI_fimmer_type::fimref, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, getenv(), GLOBAL_argopt, GRA_REALZ, graDR_addref_ts, graDR_fim_disable, graDR_icon, graDR_mirror, graDR_polort, graDR_realize, graDR_setglobalbaseline, graDR_setignore, graDR_setindex, graDR_title, AFNI_imaging_widgets::graph_xyz_pb, AFNI_imaging_widgets::graph_yzx_pb, AFNI_imaging_widgets::graph_zxy_pb, IM3D_VALID, AFNI_widget_set::imag, AFNI_imaging_widgets::image_xyz_pb, AFNI_imaging_widgets::image_yzx_pb, AFNI_imaging_widgets::image_zxy_pb, INIT_BKGD_LAB, AFNI_fimmer_type::init_ignore, ISQ_DEFAULT_OPT, ISQ_REALZ, ISQ_RNG_MINTOMAX, isqDR_arrowpadhint, isqDR_arrowpadon, isqDR_bgicon, isqDR_icon, isqDR_ignore_redraws, isqDR_imhelptext, isqDR_options, isqDR_periodicmont, isqDR_realize, isqDR_setimsave, isqDR_setopacity, isqDR_title, isqDR_winfosides, ISVALID_BSTAT, ISVALID_STATISTIC, AF_options::left_is_left, MCW_invert_widget(), THD_brick_stats::min, MIN, ISQ_options::mirror, FD_brick::n1, FD_brick::n2, THD_statistics::nbstat, new_MCW_grapher(), open_MCW_imseq(), MCW_grapher::parent, AFNI_fimmer_type::polort, POPUP_cursorize, REDISPLAY_ALL, RESET_AFNI_QUIT, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, ISQ_options::scale_range, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, THD_3dim_dataset::stats, STATUS, strtod(), AFNI_view_info::time_index, Three_D_View::type, Three_D_View::vinfo, Three_D_View::vwid, Three_D_View::window_title, MCW_imseq::wtop, and AFNI_view_info::xhairs_periodic.

Referenced by AFNI_drive_open_window(), and AFNI_startup_layout_CB().

04887 {
04888    Three_D_View * im3d = (Three_D_View *) client_data ;
04889    MCW_imseq   * sxyz , * syzx , * szxy , ** snew = NULL ;
04890    MCW_grapher * gxyz , * gyzx , * gzxy , ** gnew = NULL ;
04891    Widget        pboff , pb_xyz , pb_yzx , pb_zxy ;
04892    Widget        groff , gr_xyz , gr_yzx , gr_zxy ;
04893    FD_brick    * brnew ;
04894    int mirror=0 ;
04895    int m2m=0 ;     /* 04 Nov 2003 */
04896 
04897 ENTRY("AFNI_view_xyz_CB") ;
04898 
04899    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04900 
04901     sxyz = im3d->s123 ; gxyz = im3d->g123 ;
04902     syzx = im3d->s231 ; gyzx = im3d->g231 ;
04903     szxy = im3d->s312 ; gzxy = im3d->g312 ;
04904 
04905     pb_xyz = im3d->vwid->imag->image_xyz_pb ;
04906     pb_yzx = im3d->vwid->imag->image_yzx_pb ;
04907     pb_zxy = im3d->vwid->imag->image_zxy_pb ;
04908 
04909     gr_xyz = im3d->vwid->imag->graph_xyz_pb ;
04910     gr_yzx = im3d->vwid->imag->graph_yzx_pb ;
04911     gr_zxy = im3d->vwid->imag->graph_zxy_pb ;
04912 
04913     /* handle case of button press of already
04914        open window by bringing that window to the top */
04915 
04916     if( w == pb_xyz && sxyz != NULL ){
04917        if( ISQ_REALZ(sxyz) )
04918           XMapRaised( XtDisplay(sxyz->wtop) , XtWindow(sxyz->wtop) ) ;
04919        EXRETURN ;
04920     } else if( w == pb_yzx && syzx != NULL ){
04921        if( ISQ_REALZ(syzx) )
04922           XMapRaised( XtDisplay(syzx->wtop) , XtWindow(syzx->wtop) ) ;
04923        EXRETURN ;
04924     } else if( w == pb_zxy && szxy != NULL ){
04925        if( ISQ_REALZ(szxy) )
04926           XMapRaised( XtDisplay(szxy->wtop) , XtWindow(szxy->wtop) ) ;
04927        EXRETURN ;
04928     } else if( w == gr_xyz && gxyz != NULL ){
04929        if( GRA_REALZ(gxyz) )
04930           XMapRaised( XtDisplay(gxyz->fdw_graph) , XtWindow(gxyz->fdw_graph) ) ;
04931        EXRETURN ;
04932     } else if( w == gr_yzx && gyzx != NULL ){
04933        if( GRA_REALZ(gyzx) )
04934           XMapRaised( XtDisplay(gyzx->fdw_graph) , XtWindow(gyzx->fdw_graph) ) ;
04935        EXRETURN ;
04936     } else if( w == gr_zxy && gzxy != NULL ){
04937        if( GRA_REALZ(gzxy) )
04938           XMapRaised( XtDisplay(gzxy->fdw_graph) , XtWindow(gzxy->fdw_graph) ) ;
04939        EXRETURN ;
04940     }
04941 
04942     /* button pressed and window not open, so prepare to open it */
04943 
04944     m2m = AFNI_yesenv("AFNI_IMAGE_MINTOMAX") ;
04945 
04946     if( w == pb_xyz && sxyz == NULL ){         /* axial image */
04947        snew  = &(im3d->s123) ;
04948        brnew = im3d->b123_ulay ;
04949        pboff = pb_xyz ;
04950        mirror= GLOBAL_argopt.left_is_left ;
04951 
04952     } else if( w == pb_yzx && syzx == NULL ){  /* sagittal image */
04953        snew  = &(im3d->s231) ;
04954        brnew = im3d->b231_ulay ;
04955        pboff = pb_yzx ;
04956 
04957     } else if( w == pb_zxy && szxy == NULL ){  /* coronal image */
04958        snew  = &(im3d->s312) ;
04959        brnew = im3d->b312_ulay ;
04960        pboff = pb_zxy ;
04961        mirror= GLOBAL_argopt.left_is_left ;
04962 
04963     } else if( w == gr_xyz && gxyz == NULL ){  /* axial graph */
04964        gnew  = &(im3d->g123) ;
04965        brnew = im3d->b123_ulay ;
04966        pboff = gr_xyz ;
04967        mirror= GLOBAL_argopt.left_is_left ;
04968 
04969     } else if( w == gr_yzx && gyzx == NULL ){  /* sagittal graph */
04970        gnew  = &(im3d->g231) ;
04971        brnew = im3d->b231_ulay ;
04972        pboff = gr_yzx ;
04973 
04974     } else if( w == gr_zxy && gzxy == NULL ){  /* coronal graph */
04975        gnew  = &(im3d->g312) ;
04976        brnew = im3d->b312_ulay ;
04977        pboff = gr_zxy ;
04978        mirror= GLOBAL_argopt.left_is_left ;
04979 
04980     } else
04981        EXRETURN ;  /* something funny */
04982 
04983     /** Mar 1997: don't open if x or y dimension is 1 **/
04984 
04985     if( snew != NULL && (brnew->n1 < 2 || brnew->n2 < 2) ) EXRETURN  ;
04986 
04987     SHOW_AFNI_PAUSE ;
04988 
04989     if( snew != NULL ){
04990 STATUS("opening an image window") ;
04991       MCW_invert_widget(pboff) ;
04992       POPUP_cursorize(pboff) ;   /* 20 Jul 2005 */
04993       *snew = open_MCW_imseq( im3d->dc, AFNI_brick_to_mri, (XtPointer) brnew ) ;
04994 
04995       (*snew)->parent = (XtPointer) im3d ;
04996 
04997       INIT_BKGD_LAB(im3d) ;
04998 
04999       drive_MCW_imseq( *snew, isqDR_imhelptext, (XtPointer) AFNI_image_help ) ;
05000       drive_MCW_imseq( *snew, isqDR_arrowpadon, (XtPointer) AFNI_arrowpad_help ) ;
05001       drive_MCW_imseq( *snew, isqDR_arrowpadhint , (XtPointer) AFNI_arrowpad_hint );
05002 STATUS("realizing new image viewer") ;
05003       drive_MCW_imseq( *snew, isqDR_ignore_redraws, (XtPointer) 1 ) ; /* 16 Aug 2002 */
05004       drive_MCW_imseq( *snew, isqDR_realize, NULL ) ;
05005       drive_MCW_imseq( *snew, isqDR_title, (XtPointer) im3d->window_title ) ;
05006       drive_MCW_imseq( *snew, isqDR_periodicmont,
05007                       (XtPointer)(int) im3d->vinfo->xhairs_periodic );
05008 
05009       /* 09 Oct 1998: force L-R mirroring on axial and coronal images? */
05010       /* 04 Nov 2003: or min-to-max on grayscaling? */
05011 
05012       if( mirror | m2m ){
05013          ISQ_options opt ;
05014 
05015 STATUS("setting image view to be L-R mirrored") ;
05016 
05017          ISQ_DEFAULT_OPT(opt) ;
05018          if( mirror ) opt.mirror = TRUE ;
05019          if( m2m    ) opt.scale_range = ISQ_RNG_MINTOMAX ;
05020          drive_MCW_imseq( *snew,isqDR_options  ,(XtPointer) &opt ) ;
05021       }
05022 
05023 #if 0
05024       /* 23 Jan 2003: set opacity? */
05025 
05026       { char *eee = getenv("AFNI_DEFAULT_OPACITY") ;
05027         if( eee != NULL ){
05028           int opval = (int) strtod( eee , NULL ) ;
05029           if( opval > 0 && opval <= 9 )
05030             drive_MCW_imseq( *snew , isqDR_setopacity , (XtPointer)opval ) ;
05031         }
05032       }
05033 
05034       /* 23 Jan 2003: set default save? */
05035 
05036       drive_MCW_imseq( *snew , isqDR_setimsave ,
05037                        (XtPointer)getenv("AFNI_DEFAULT_IMSAVE") ) ;
05038 #endif
05039 
05040 #ifdef USE_SIDES
05041 #define LL 0
05042 #define RR 1
05043 #define AA 2
05044 #define PP 3
05045 #define SS 4
05046 #define II 5
05047       if( !AFNI_yesenv("AFNI_NO_SIDES_LABELS") ){
05048          static char * ssix[6] = { "Left"     , "Right"     ,
05049                                    "Anterior" , "Posterior" ,
05050                                    "Superior" , "Inferior"   } ;
05051          char * ws[4] ;
05052 
05053          if( *snew == im3d->s123 ){
05054            ws[0] = ssix[RR]; ws[1] = ssix[AA]; ws[2] = ssix[LL]; ws[3] = ssix[PP];
05055          } else if( *snew == im3d->s231 ){
05056            ws[0] = ssix[AA]; ws[1] = ssix[SS]; ws[2] = ssix[PP]; ws[3] = ssix[II];
05057          } else if( *snew == im3d->s312 ){
05058            ws[0] = ssix[RR]; ws[1] = ssix[SS]; ws[2] = ssix[LL]; ws[3] = ssix[II];
05059          } else {
05060            ws[0] = ws[1] = ws[2] = ws[3] = NULL ;
05061          }
05062 
05063 STATUS("setting image viewer 'sides'") ;
05064 
05065          drive_MCW_imseq( *snew,isqDR_winfosides,(XtPointer)ws ) ;
05066       }
05067 #undef LL
05068 #undef RR
05069 #undef AA
05070 #undef PP
05071 #undef SS
05072 #undef II
05073 #endif
05074 
05075       AFNI_toggle_drawing( im3d ) ;
05076 
05077 #ifndef DONT_INSTALL_ICONS
05078       if( afni48_good ){
05079          Pixmap pm = XmUNSPECIFIED_PIXMAP ;
05080 
05081               if( w == pb_xyz ) pm = afni48axi_pixmap ;
05082          else if( w == pb_yzx ) pm = afni48sag_pixmap ;
05083          else if( w == pb_zxy ) pm = afni48cor_pixmap ;
05084 
05085          drive_MCW_imseq( *snew, isqDR_icon , (XtPointer) pm ) ;
05086       }
05087 #endif
05088       { int ii=AFNI_controller_index(im3d) ;
05089         if( ii >= 0 )
05090          drive_MCW_imseq( *snew, isqDR_bgicon, (XtPointer)afni16_pixmap[ii] ) ;
05091       }
05092 
05093       drive_MCW_imseq( *snew, isqDR_ignore_redraws, (XtPointer) 0 ) ; /* 16 Aug 2002 */
05094 
05095       AFNI_view_setter ( im3d , *snew ) ;
05096       AFNI_range_setter( im3d , *snew ) ;  /* 04 Nov 2003 */
05097 
05098     } /* end of creating a new image viewer */
05099 
05100     /** Don't forget to send information like the reference timeseries ... **/
05101 
05102     if( gnew != NULL && DSET_GRAPHABLE(brnew->dset) ){
05103        MCW_grapher * gr ;
05104 
05105 STATUS("opening a graph window") ;
05106 
05107        MCW_invert_widget(pboff) ;
05108        POPUP_cursorize(pboff) ;   /* 20 Jul 2005 */
05109        gr = new_MCW_grapher( im3d->dc , AFNI_brick_to_mri , (XtPointer) brnew ) ;
05110        drive_MCW_grapher( gr, graDR_title, (XtPointer) im3d->window_title );
05111        drive_MCW_grapher( gr, graDR_addref_ts, (XtPointer) im3d->fimdata->fimref );
05112        drive_MCW_grapher( gr, graDR_setignore, (XtPointer) im3d->fimdata->init_ignore );
05113        drive_MCW_grapher( gr, graDR_polort, (XtPointer) im3d->fimdata->polort );
05114        drive_MCW_grapher( gr, graDR_setindex , (XtPointer) im3d->vinfo->time_index );
05115 
05116        if( im3d->type == AFNI_IMAGES_VIEW )
05117           drive_MCW_grapher( gr , graDR_fim_disable , NULL ) ; /* 19 Oct 1999 */
05118 
05119        if( mirror )                                            /* 12 Jul 2000 */
05120           drive_MCW_grapher( gr , graDR_mirror , (XtPointer) 1 ) ;
05121 
05122        /* 07 Aug 2001: set global baseline level, if possible */
05123 
05124        if( ISVALID_STATISTIC(brnew->dset->stats) ){
05125          char *eee = getenv( "AFNI_GRAPH_GLOBALBASE" ) ;  /* 08 Mar 2002 */
05126          if( eee == NULL ){                               /* skip this? */
05127            float vbot=WAY_BIG ; int ii ;
05128            for( ii=0 ; ii < brnew->dset->stats->nbstat ; ii++ )
05129              if( ISVALID_BSTAT(brnew->dset->stats->bstat[ii]) )
05130                vbot = MIN( vbot , brnew->dset->stats->bstat[ii].min ) ;
05131 
05132            if( vbot < WAY_BIG )
05133              drive_MCW_grapher( gr, graDR_setglobalbaseline, (XtPointer)&vbot );
05134          }
05135        }
05136 
05137 STATUS("realizing new grapher") ;
05138 
05139        drive_MCW_grapher( gr , graDR_realize , NULL ) ;
05140 
05141        *gnew = gr ;
05142        (*gnew)->parent = (XtPointer) im3d ;
05143 
05144 #ifndef DONT_INSTALL_ICONS
05145       if( afni48_good ){
05146          Pixmap pm = XmUNSPECIFIED_PIXMAP ;
05147 
05148               if( w == gr_xyz ) pm = afni48graaxi_pixmap ;
05149          else if( w == gr_yzx ) pm = afni48grasag_pixmap ;
05150          else if( w == gr_zxy ) pm = afni48gracor_pixmap ;
05151 
05152          drive_MCW_grapher( gr , graDR_icon , (XtPointer) pm ) ;
05153       }
05154 #endif
05155     } /* end of creating a new graph viewer */
05156 
05157    /*-- force a jump to the viewpoint of the current location --*/
05158 
05159    AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_ALL ) ;
05160 
05161    SHOW_AFNI_READY ;
05162    RESET_AFNI_QUIT(im3d) ;
05163 
05164    MPROBE ;
05165    EXRETURN ;
05166 }

void AFNI_viewbut_EV Widget   ,
XtPointer   ,
XEvent *   ,
Boolean *   
 

Definition at line 5180 of file afni.c.

References ENTRY, ev, event, MCW_grapher::fdw_graph, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, GETWIN, GRA_REALZ, AFNI_imaging_widgets::graph_xyz_pb, AFNI_imaging_widgets::graph_yzx_pb, AFNI_imaging_widgets::graph_zxy_pb, IM3D_VALID, AFNI_widget_set::imag, AFNI_imaging_widgets::image_xyz_pb, AFNI_imaging_widgets::image_yzx_pb, AFNI_imaging_widgets::image_zxy_pb, ISQ_REALZ, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, Three_D_View::vwid, and MCW_imseq::wtop.

05182 {
05183    Three_D_View *im3d = (Three_D_View *)cd ;
05184    XButtonEvent *event=(XButtonEvent *)ev ;
05185 
05186    MCW_imseq   *sxyz , *syzx , *szxy ;
05187    MCW_grapher *gxyz , *gyzx , *gzxy ;
05188    Widget      pb_xyz , pb_yzx , pb_zxy ;
05189    Widget      gr_xyz , gr_yzx , gr_zxy ;
05190 
05191 ENTRY("AFNI_viewbut_EV") ;
05192 
05193    if( ev->type != ButtonPress || !IM3D_VALID(im3d) ) EXRETURN ;
05194    if( event->button != Button3 ) EXRETURN ;
05195 
05196    sxyz = im3d->s123 ; gxyz = im3d->g123 ;  /* viewer structs */
05197    syzx = im3d->s231 ; gyzx = im3d->g231 ;
05198    szxy = im3d->s312 ; gzxy = im3d->g312 ;
05199 
05200    pb_xyz = im3d->vwid->imag->image_xyz_pb ;  /* buttons */
05201    pb_yzx = im3d->vwid->imag->image_yzx_pb ;
05202    pb_zxy = im3d->vwid->imag->image_zxy_pb ;
05203 
05204    gr_xyz = im3d->vwid->imag->graph_xyz_pb ;
05205    gr_yzx = im3d->vwid->imag->graph_yzx_pb ;
05206    gr_zxy = im3d->vwid->imag->graph_zxy_pb ;
05207 
05208    /* if the input Widget matches a button, and the item is open, get it */
05209 
05210         if( w == pb_xyz && ISQ_REALZ(sxyz) ) GETWIN(sxyz->wtop) ;
05211    else if( w == pb_yzx && ISQ_REALZ(syzx) ) GETWIN(syzx->wtop) ;
05212    else if( w == pb_zxy && ISQ_REALZ(szxy) ) GETWIN(szxy->wtop) ;
05213    else if( w == gr_xyz && GRA_REALZ(gxyz) ) GETWIN(gxyz->fdw_graph) ;
05214    else if( w == gr_yzx && GRA_REALZ(gyzx) ) GETWIN(gyzx->fdw_graph) ;
05215    else if( w == gr_zxy && GRA_REALZ(gzxy) ) GETWIN(gzxy->fdw_graph) ;
05216 
05217    EXRETURN ;
05218 }

int AFNI_vnlist_func_overlay Three_D_View   im3d,
int    ks,
SUMA_irgba **    map,
int *    nvused
 

Create a nodal color overlay from a voxel map.

  • Input ks is surface index to use from im3d->ss_now session
  • Return value is number of nodes overlaid:
    • 0 return ==> no overlay was computed
    • -1 return ==> some error (e.g., no surface nodes on this dataset) = positive ==> can use *map and *nvused
  • *map is set to a newly malloc()-ed array (if return > 0)
  • *nvused is set to the number of functional dataset voxels used to make the map (e.g., those that got some color)
  • im3d->ss_now[ks]->vn->nvox will have the total number of functional dataset voxels that intersected the surface
Sample usage:
  • SUMA_irgba *map ;
  • int nmap , nvox ;
  • nmap = AFNI_vnlist_func_overlay( im3d , 0 , &map , &nvox ) ;
  • if( nmap < 0 ){ ** error ** }
  • else if( nmap == 0 ){ ** nothing to show ** }
  • else { ** show map[0..nmap-1] ** }
Much of this function is a 3D-ification of AFNI_func_overlay(). -------------------------------------------------------------------------

Definition at line 29 of file afni_sumafunc.c.

References SUMA_irgba::a, AFNI_GOOD_FUNC_DTYPE, SUMA_irgba::b, rgbyte::b, MCW_pbar::bigbot, MCW_pbar::bigcolor, MCW_pbar::bigmode, MCW_pbar::bigtop, cmap, THD_3dim_dataset::daxes, Three_D_View::dc, DCOV_BLUEBYTE, DCOV_GREENBYTE, DCOV_REDBYTE, SUMA_vnlist::dset, DSET_BRICK, DSET_BRICK_FACTOR, DSET_load, DSET_LOADED, DSET_NVALS, ENTRY, EQUIV_DATAXES, AFNI_view_info::fim_autorange, AFNI_view_info::fim_index, Three_D_View::fim_now, AFNI_view_info::fim_range, free, AFNI_widget_set::func, AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, SUMA_irgba::g, rgbyte::g, SUMA_irgba::id, SUMA_ixyz::id, IM3D_VALID, ind, AFNI_function_widgets::inten_pbar, SUMA_surface::ixyz, MRI_IMAGE::kind, malloc, mmm, MRI_BYTE_PTR, MRI_FLOAT_PTR, MRI_RGB_PTR, MRI_SHORT_PTR, SUMA_vnlist::nlist, NPANE_BIG, NPANE_MAX, SUMA_surface::num_ixyz, MCW_pbar::num_panes, SUMA_vnlist::numnod, SUMA_vnlist::nvox, MCW_pbar::ov_index, MCW_pbar::pval, r, SUMA_irgba::r, rgbyte::r, realloc, RETURN, Three_D_View::ss_now, THD_session::su_num, THD_session::su_surf, SUMA_destroy_vnlist(), SUMA_make_vnlist(), AFNI_view_info::thr_index, AFNI_view_info::use_posfunc, Three_D_View::vinfo, SUMA_surface::vn, SUMA_vnlist::voxijk, and Three_D_View::vwid.

00031 {
00032    MRI_IMAGE *im_thr , *im_fim ;
00033    short fim_ovc[NPANE_MAX+1] ;
00034    byte  ovc_r[NPANE_MAX+1], ovc_g[NPANE_MAX+1], ovc_b[NPANE_MAX+1] ;
00035    int ii,jj,nn , lp , num_lp , ival ;
00036    float scale_factor , scale_thr=1.0 , scale_fim=1.0 ;
00037    MCW_pbar * pbar ;
00038    int     simult_thr , need_thr ;
00039    THD_3dim_dataset *fdset ;
00040    SUMA_irgba *mmm ;
00041    SUMA_ixyz  *ixyz ;
00042    int nvox,nnod,nout , *numnod , *voxijk , *nlist ;
00043    int *vlist ;
00044    int nvout ;   /* 13 Mar 2002 */
00045 
00046    int bm , zbot=0 , kk ;        /* 02 Feb 2003: colorscale stuff */
00047    float fbot=0.0,ftop=0.0,ffac=0.0 , val ;
00048    rgbyte *cmap=NULL ;
00049 
00050    THD_session *ss ;             /* 22 Jan 2004 */
00051    SUMA_surface *surf ;
00052    SUMA_vnlist *vn ;
00053 
00054 ENTRY("AFNI_vnlist_func_overlay") ;
00055 
00056    /* check inputs for goodness sakes */
00057 
00058    if( map == NULL || !IM3D_VALID(im3d) ) RETURN(-1) ; /* that was easy */
00059 
00060    if( nvused != NULL ) *nvused = 0 ;  /* set default return value here */
00061 
00062    /* check datasets for goodness */
00063    /* 12 Dec 2002: ks is now input (we used to compute it) */
00064 
00065    ss = im3d->ss_now ;              /* session must     */
00066    if( ss              == NULL ||   /* have surface #ks */
00067        ss->su_num      == 0    ||
00068        ks              <  0    ||
00069        ss->su_num      <= ks   ||
00070        ss->su_surf[ks] == NULL   ) RETURN(-1) ;
00071 
00072    surf = ss->su_surf[ks] ;    /* the surface in question */
00073 
00074    fdset = im3d->fim_now ; if( fdset == NULL ) RETURN(-1) ;
00075 
00076    ival = im3d->vinfo->thr_index ;  /* threshold sub-brick index */
00077 
00078    /* get the component images */
00079 
00080    need_thr = im3d->vinfo->func_threshold > 0.0 ;
00081 
00082    if( need_thr ) im_thr = DSET_BRICK(fdset,ival) ;
00083    else           im_thr = NULL ;
00084 
00085    if( im_thr != NULL && !AFNI_GOOD_FUNC_DTYPE(im_thr->kind) ) im_thr = NULL ;
00086 
00087    if( im_thr != NULL ){
00088      scale_thr = DSET_BRICK_FACTOR(fdset,ival) ;
00089      if( scale_thr == 0.0 || im_thr->kind == MRI_float ) scale_thr = 1.0 ;
00090    }
00091 
00092    { int ind ;
00093 
00094      ind = im3d->vinfo->fim_index ;
00095      if( ind >= DSET_NVALS(fdset) )
00096        ind = DSET_NVALS(fdset) - 1 ;
00097 
00098      im_fim       = DSET_BRICK(fdset,ind) ;  /* the sub-brick to show */
00099      scale_factor = im3d->vinfo->fim_range ;
00100      if( scale_factor == 0.0 ) scale_factor = im3d->vinfo->fim_autorange ;
00101      if( scale_factor == 0.0 ) scale_factor = 1.0 ;
00102 
00103      scale_fim = DSET_BRICK_FACTOR(fdset,ind) ;
00104      if( scale_fim == 0.0 ) scale_fim = 1.0 ;
00105 
00106    }
00107 
00108    /* if component images not good, quit now */
00109 
00110    if( im_fim == NULL ) RETURN(-1) ;  /* no function!? */
00111 
00112    if( !AFNI_GOOD_FUNC_DTYPE(im_fim->kind) ){
00113       RETURN(-1) ;  /* bad function - no soup for you */
00114    }
00115 
00116    /* maybe need to build a voxel-to-node list for func dataset  */
00117    /* (this is where the 3D-to-2D mapping is encapsulated, Ziad) */
00118 
00119    if( surf->vn == NULL ||
00120        !EQUIV_DATAXES(surf->vn->dset->daxes,fdset->daxes) ){
00121 
00122      /* if have an old one
00123         (that doesn't match current dataset grid),
00124         then delete it from the Universe           */
00125 
00126      if( surf->vn != NULL ) SUMA_destroy_vnlist( surf->vn ) ;
00127 
00128      /* make the new list */
00129 
00130      surf->vn = SUMA_make_vnlist( surf , fdset ) ;
00131      if( surf->vn == NULL ) RETURN(-1) ;
00132    }
00133 
00134    vn = surf->vn ;   /* voxel-to-node list for this surface */
00135 
00136    /* create array of voxel indexes (vlist);
00137       will put in there the voxels that are above threshold */
00138 
00139    nvox   = vn->nvox     ; if( nvox < 1 ) RETURN(0);
00140    voxijk = vn->voxijk   ;      /* list of voxels with surface nodes */
00141    numnod = vn->numnod   ;      /* number of nodes in each voxel */
00142 
00143    nnod = surf->num_ixyz ; if( nnod < 1 ) RETURN(0);
00144    ixyz = surf->ixyz     ;      /* array of surface nodes */
00145 
00146    DSET_load(fdset) ;                     /* if isn't in memory now */
00147    if( !DSET_LOADED(fdset) ) RETURN(-1) ; /* what the hell?         */
00148 
00149    /** if don't have threshold, will process all voxels for color **/
00150 
00151    if( im_thr == NULL ){
00152 
00153      vlist = voxijk ;  /* list of voxels to process = all voxels */
00154      nout  = nnod   ;  /* number of output nodes */
00155 
00156    /** if have threshold, cut out voxels below threshold (set vlist[]=-1) **/
00157 
00158    } else {
00159 
00160      vlist = (int *) malloc(sizeof(int)*nvox) ;    /* copy voxel list */
00161      memcpy( vlist , voxijk , sizeof(int)*nvox ) ; /* then prune it */
00162 
00163      switch( im_thr->kind ){
00164        case MRI_short:{
00165          float thresh = im3d->vinfo->func_threshold
00166                       * im3d->vinfo->func_thresh_top / scale_thr ;
00167          short *ar_thr = MRI_SHORT_PTR(im_thr) ;
00168          for( ii=0 ; ii < nvox ; ii++ ){  /* voxel cutting time */
00169            jj = vlist[ii] ;               /* actual voxel index in func brick */
00170            if( ar_thr[jj] > -thresh && ar_thr[jj] < thresh ) vlist[ii] = -1 ;
00171          }
00172        }
00173        break ;
00174 
00175        case MRI_byte:{
00176          float thresh = im3d->vinfo->func_threshold
00177                       * im3d->vinfo->func_thresh_top / scale_thr ;
00178          byte *ar_thr = MRI_BYTE_PTR(im_thr) ;
00179          for( ii=0 ; ii < nvox ; ii++ ){
00180            jj = vlist[ii] ;
00181            if( ar_thr[jj] < thresh ) vlist[ii] = -1 ;
00182          }
00183        }
00184        break ;
00185 
00186        case MRI_float:{
00187          float thresh = im3d->vinfo->func_threshold
00188                       * im3d->vinfo->func_thresh_top / scale_thr ;
00189          float *ar_thr = MRI_FLOAT_PTR(im_thr) ;
00190          for( ii=0 ; ii < nvox ; ii++ ){
00191            jj = vlist[ii] ;
00192            if( ar_thr[jj] > -thresh && ar_thr[jj] < thresh ) vlist[ii] = -1 ;
00193          }
00194        }
00195        break ;
00196      } /* end of switch on threshold sub-brick type */
00197 
00198      /* count surviving voxels; exit if there aren't any */
00199 
00200      for( jj=ii=0 ; ii < nvox ; ii++ )
00201        if( vlist[ii] >= 0 ) jj++ ;
00202      if( jj == 0 ){ free(vlist) ; RETURN(0) ; }
00203 
00204      /* count output nodes inside each surviving voxel */
00205 
00206      for( nout=ii=0 ; ii < nvox ; ii++ )
00207        if( vlist[ii] >= 0 ) nout += numnod[ii] ;
00208 
00209    } /* end of if on existence of threshold sub-brick */
00210 
00211    /** allocate output structure (maybe too big, but will clip it later) **/
00212 
00213    mmm = (SUMA_irgba *) malloc( sizeof(SUMA_irgba) * nout ) ;
00214 
00215    /** set overlay colors **/
00216 
00217    pbar   = im3d->vwid->func->inten_pbar ;
00218    num_lp = pbar->num_panes ;
00219    bm     = pbar->bigmode ;              /* 02 Feb 2003 */
00220 
00221    if( !bm ){                              /* indexed colors */
00222      for( lp=0 ; lp < num_lp ; lp++ )      /* overlay color indexes */
00223        fim_ovc[lp] = pbar->ov_index[lp] ;  /* run from top of pbar down */
00224 
00225      /* overlay color index for values below bottom of pbar */
00226 
00227      fim_ovc[num_lp] = (im3d->vinfo->use_posfunc) ? (0) : (fim_ovc[num_lp-1]) ;
00228 
00229      /* get the actual RGB colors of each pane on the pbar */
00230 
00231      for( lp=0 ; lp <= num_lp ; lp++ ){
00232        ovc_r[lp] = DCOV_REDBYTE  (im3d->dc,fim_ovc[lp]) ;
00233        ovc_g[lp] = DCOV_GREENBYTE(im3d->dc,fim_ovc[lp]) ;
00234        ovc_b[lp] = DCOV_BLUEBYTE (im3d->dc,fim_ovc[lp]) ;
00235      }
00236 
00237    } else {                                /* colorscale colors - 02 Feb 2003 */
00238      fbot = (scale_factor/scale_fim)*pbar->bigbot ;
00239      ftop = (scale_factor/scale_fim)*pbar->bigtop ;
00240      ffac = NPANE_BIG / (ftop-fbot) ;
00241      cmap = pbar->bigcolor ;
00242      zbot = (fbot == 0.0) ;
00243    }
00244 
00245    /** process im_fim into overlay, depending on data type **/
00246 
00247    switch( im_fim->kind ){
00248 
00249       default: nvout = nout = 0 ; break ;   /* should never happen! */
00250 
00251       case MRI_rgb:{                        /* 17 Apr 2002 */
00252         byte *ar_fim = MRI_RGB_PTR(im_fim); /* colors direct from fim */
00253         byte r,g,b ;
00254 
00255         nvout = nout = 0 ;                  /* num output nodes & voxels */
00256         for( ii=0 ; ii < nvox ; ii++ ){
00257           jj = vlist[ii] ; if( jj < 0 ) continue ;   /* skip voxel? */
00258           r = ar_fim[3*jj]; g = ar_fim[3*jj+1]; b = ar_fim[3*jj+2];
00259           if( r == 0 && g ==0 && b == 0 ) continue ; /* uncolored */
00260           nlist = vn->nlist[ii] ;  /* list of nodes */
00261           for( nn=0 ; nn < numnod[ii] ; nn++ ){      /* loop over nodes */
00262             mmm[nout].id = ixyz[nlist[nn]].id ;
00263             mmm[nout].r  = r ; mmm[nout].g = g ;
00264             mmm[nout].b  = b ; mmm[nout].a = 255 ; nout++ ;
00265           }
00266           nvout++ ;                           /* number of voxels used */
00267         }
00268       }
00269       break ;
00270 
00271       case MRI_short:{
00272         short * ar_fim = MRI_SHORT_PTR(im_fim) ;
00273         float fim_thr[NPANE_MAX] ;
00274         byte r,g,b ;
00275 
00276         if( !bm ){                         /* indexed colors from panes */
00277           for( lp=0 ; lp < num_lp ; lp++ ) /* thresholds for each pane */
00278             fim_thr[lp] = (scale_factor/scale_fim) * pbar->pval[lp+1] ;
00279         }
00280 
00281         nvout = nout = 0 ;                   /* num output nodes & voxels */
00282         for( ii=0 ; ii < nvox ; ii++ ){
00283           jj = vlist[ii] ; if( jj < 0 ) continue ;  /* skip voxel? */
00284           if( ar_fim[jj] == 0 )         continue ;  /* no func? */
00285           if( !bm ){              /* find pane this voxel is in */
00286             for( lp=0; lp < num_lp && ar_fim[jj] < fim_thr[lp]; lp++ ) ; /*nada*/
00287             if( fim_ovc[lp] == 0 ) continue ;         /* uncolored pane */
00288             r = ovc_r[lp]; g = ovc_g[lp]; b = ovc_b[lp];
00289           } else {                /* colorscale - 02 Feb 2003 */
00290             if( zbot && ar_fim[jj] < 0 ) continue ;
00291             val = ffac*(ftop-ar_fim[jj]) ;
00292             if( val < 0.0 ) val = 0.0;
00293             kk = (int)(val+0.49); if( kk >= NPANE_BIG ) kk = NPANE_BIG-1;
00294             r = cmap[kk].r; g = cmap[kk].g; b = cmap[kk].b;
00295             if( r == 0 && g ==0 && b == 0 ) continue ; /* black == uncolored */
00296           }
00297           nlist = vn->nlist[ii] ; /* list of nodes */
00298           for( nn=0 ; nn < numnod[ii] ; nn++ ){     /* loop over nodes */
00299             mmm[nout].id = ixyz[nlist[nn]].id ;
00300             mmm[nout].r  = r ; mmm[nout].g = g ;
00301             mmm[nout].b  = b ; mmm[nout].a = 255 ; nout++ ;
00302           }
00303           nvout++ ;                           /* number of voxels used */
00304         }
00305       }
00306       break ;
00307 
00308       case MRI_byte:{
00309         byte * ar_fim = MRI_BYTE_PTR(im_fim) ;
00310         float fim_thr[NPANE_MAX] ;
00311         byte r,g,b ;
00312 
00313         if( !bm ){                         /* indexed colors from panes */
00314           for( lp=0 ; lp < num_lp ; lp++ )
00315             if( pbar->pval[lp+1] <= 0.0 )
00316               fim_thr[lp] = 0 ;
00317             else
00318               fim_thr[lp] = (scale_factor/scale_fim) * pbar->pval[lp+1] ;
00319         }
00320 
00321         nvout = nout = 0 ;                          /* num output nodes */
00322         for( ii=0 ; ii < nvox ; ii++ ){
00323           jj = vlist[ii] ; if( jj < 0 ) continue ;  /* skip voxel? */
00324           if( ar_fim[jj] == 0 )         continue ;  /* no func? */
00325           if( !bm ){              /* find pane this voxel is in */
00326             for( lp=0; lp < num_lp && ar_fim[jj] < fim_thr[lp]; lp++ ) ; /*nada*/
00327             if( fim_ovc[lp] == 0 ) continue ;         /* uncolored pane */
00328             r = ovc_r[lp]; g = ovc_g[lp]; b = ovc_b[lp];
00329           } else {                /* colorscale - 02 Feb 2003 */
00330             val = ffac*(ftop-ar_fim[jj]) ;
00331             if( val < 0.0 ) val = 0.0;
00332             kk = (int)(val+0.49); if( kk >= NPANE_BIG ) kk = NPANE_BIG-1;
00333             r = cmap[kk].r; g = cmap[kk].g; b = cmap[kk].b;
00334             if( r == 0 && g ==0 && b == 0 ) continue ; /* black == uncolored */
00335           }
00336           nlist = vn->nlist[ii] ; /* list of nodes */
00337           for( nn=0 ; nn < numnod[ii] ; nn++ ){     /* loop over nodes */
00338             mmm[nout].id = ixyz[nlist[nn]].id ;
00339             mmm[nout].r  = r ; mmm[nout].g = g ;
00340             mmm[nout].b  = b ; mmm[nout].a = 255 ; nout++ ;
00341           }
00342           nvout++ ;                           /* number of voxels used */
00343         }
00344       }
00345       break ;
00346 
00347       case MRI_float:{
00348         float * ar_fim = MRI_FLOAT_PTR(im_fim) ;
00349         float fim_thr[NPANE_MAX] ;
00350         byte r,g,b ;
00351 
00352         if( !bm ){                         /* indexed colors from panes */
00353           for( lp=0 ; lp < num_lp ; lp++ )
00354             fim_thr[lp] = (scale_factor/scale_fim) * pbar->pval[lp+1] ;
00355         }
00356 
00357         nvout = nout = 0 ;                          /* num output nodes */
00358         for( ii=0 ; ii < nvox ; ii++ ){
00359           jj = vlist[ii] ; if( jj < 0 ) continue ;  /* skip voxel? */
00360           if( ar_fim[jj] == 0.0 )       continue ;  /* no func? */
00361           if( !bm ){              /* find pane this voxel is in */
00362             for( lp=0; lp < num_lp && ar_fim[jj] < fim_thr[lp]; lp++ ) ; /*nada*/
00363             if( fim_ovc[lp] == 0 ) continue ;         /* uncolored pane */
00364             r = ovc_r[lp]; g = ovc_g[lp]; b = ovc_b[lp];
00365           } else {                /* colorscale - 02 Feb 2003 */
00366             if( zbot && ar_fim[jj] < 0.0 ) continue ;
00367             val = ffac*(ftop-ar_fim[jj]) ;
00368             if( val < 0.0 ) val = 0.0;
00369             kk = (int)(val+0.49); if( kk >= NPANE_BIG ) kk = NPANE_BIG-1;
00370             r = cmap[kk].r; g = cmap[kk].g; b = cmap[kk].b;
00371             if( r == 0 && g ==0 && b == 0 ) continue ; /* black == uncolored */
00372           }
00373           nlist = vn->nlist[ii] ; /* list of nodes */
00374           for( nn=0 ; nn < numnod[ii] ; nn++ ){     /* loop over nodes */
00375             mmm[nout].id = ixyz[nlist[nn]].id ;
00376             mmm[nout].r  = r ; mmm[nout].g = g ;
00377             mmm[nout].b  = b ; mmm[nout].a = 255 ; nout++ ;
00378           }
00379           nvout++ ;                           /* number of voxels used */
00380         }
00381       }
00382       break ;
00383 
00384    } /* end of switch on fim data type */
00385 
00386    /** finished: clean up and exit **/
00387 
00388    if( vlist != voxijk ) free(vlist) ;  /* toss trash, if it is trash */
00389 
00390    if( nout == 0 ){ free(mmm); RETURN(0); }  /* no overlay? */
00391 
00392    /* map gets the array of node IDs + colors */
00393 
00394    *map = (SUMA_irgba *) realloc( mmm , sizeof(SUMA_irgba)*nout ) ;
00395 
00396    /* nvused gets the number of voxels used */
00397 
00398    if( nvused != NULL ) *nvused = nvout ;    /* 13 Mar 2002 */
00399 
00400    RETURN(nout) ;  /* number of entries in map */
00401 }

int AFNI_vol2surf_func_overlay Three_D_View   im3d,
SUMA_irgba **    map,
int    surfA,
int    surfB,
int    use_defaults,
float **    Rdata,
float *    Rthr
 

Create a nodal color overlay from a voxel map.

  • Surface index(es) come from global v2s_plugin_opts struct
  • Return value is number of nodes overlaid:
    • 0 return ==> no overlay was computed
    • -1 return ==> some error (e.g., no surface nodes on this dataset) = positive ==> can use *map
  • *map is set to a newly malloc()-ed array (if return > 0)
  • if (Rdata) return data from results structure
  • if (Rthr) return overlay threshold from afni
Sample usage:
  • SUMA_irgba * map;
  • int nmap;
  • nmap = AFNI_vnlist_func_overlay( im3d, &map );
  • if( nmap < 0 ){ ** error ** }
  • else if( nmap == 0 ){ ** nothing to show ** }
  • else { ** show map[0..nmap-1] ** }
based on AFNI_vnlist_func_overlay() -------------------------------------------------------------------------

Definition at line 50 of file afni_vol2surf.c.

References AFNI_GOOD_FUNC_DTYPE, afni_vol2surf(), v2s_opts_t::debug, v2s_opts_t::dnode, DSET_BRICK, DSET_load, DSET_LOADED, ENTRY, AFNI_view_info::fim_index, Three_D_View::fim_now, free, free_v2s_results(), AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, IM3D_VALID, MRI_IMAGE::kind, SUMA_surface::label, map_v2s_results(), v2s_plugin_opts::ready, RETURN, v2s_plugin_opts::sopt, Three_D_View::ss_now, THD_session::su_num, THD_session::su_surf, SUMA_destroy_vnlist(), thd_mask_from_brick(), AFNI_view_info::thr_index, v2s_results::vals, Three_D_View::vinfo, and SUMA_surface::vn.

Referenced by AFNI_niml_redisplay_CB().

00052 {
00053     THD_3dim_dataset * oset;            /* overlay dataset */
00054     THD_session      * ss;
00055     SUMA_surface     * sA, * sB;
00056     MRI_IMAGE        * im_oim;
00057     v2s_plugin_opts  * go;
00058     v2s_results      * results;
00059     byte             * cmask;
00060     int                nout, oind, debug;
00061 
00062 ENTRY("AFNI_vol2surf_func_overlay") ;
00063 
00064     /* check inputs */
00065     if ( map == NULL || !IM3D_VALID(im3d) ) RETURN(-1);
00066 
00067     go = &gv2s_plug_opts;
00068     if ( ! use_defaults && ! go->ready ) RETURN(-1);
00069 
00070     debug = go->sopt.debug;         /* because I'm lazy */
00071 
00072     ss = im3d->ss_now;              /* session must have needed surface(s) */
00073     if( ss                 == NULL      ||
00074         ss->su_num         <= 0         ||
00075         surfA              <  0         ||
00076         ss->su_num         <= surfA     ||
00077         ss->su_num         <= surfB     ||
00078         ss->su_surf[surfA] == NULL      ||
00079         (surfB >= 0 && ss->su_surf[surfB] == NULL) )
00080     {
00081         if ( debug > 1 )
00082         {
00083             if ( !ss ) fprintf(stderr,"** v2s: NULL session\n");
00084             else
00085                 fprintf(stderr,"** v2s: bad session data:\n"
00086                         "   su_num, surfA, surfB = %d, %d, %d\n",
00087                         ss->su_num, surfA, surfB);
00088         }
00089         RETURN(-1);
00090     }
00091 
00092     /* init return values */
00093     if ( Rdata ) *Rdata = NULL;
00094     if ( Rthr )  *Rthr  = 0.0;
00095 
00096     /* set surface pointers */
00097     sA = ss->su_surf[surfA];
00098     sB = ( surfB >= 0 ) ? ss->su_surf[surfB] : NULL;
00099 
00100     if ( debug )
00101     {
00102         fprintf(stderr,"++ v2s overlay: sa,sb = %d,%d\n", surfA, surfB);
00103         if ( debug > 1 )
00104             fprintf(stderr,"  surfA is %s, surfB is %s\n",
00105                 sA->label[0] ? sA->label : "<no label>",
00106                 sB ? (sB->label[0] ? sB->label : "<no label>") : "<not used>");
00107     }
00108 
00109     /*-------------------- overlay image --------------------*/
00110     oset = im3d->fim_now;
00111     oind = im3d->vinfo->fim_index;  /* overlay sub-brick index */
00112 
00113     if( oset == NULL )
00114     {
00115         if ( debug > 1 ) fprintf(stderr,"** v2s: no overlay dset\n");
00116         RETURN(-1);
00117     }
00118     im_oim = DSET_BRICK(oset,oind);
00119 
00120     if( ! im_oim || ! AFNI_GOOD_FUNC_DTYPE(im_oim->kind) )
00121     {
00122         if ( debug > 1 ) fprintf(stderr,"** v2s: no overlay image\n");
00123         RETURN(-1);
00124     }
00125     DSET_load(oset);                    /* to be sure */
00126     if( !DSET_LOADED(oset) ) RETURN(-1);
00127 
00128     /*-------------------- mask from threshold --------------------*/
00129     cmask = NULL;
00130     if( im3d->vinfo->func_threshold > 0.0 )     /* then want a threshold */
00131     {
00132         MRI_IMAGE * im_thr;
00133         float       thresh;
00134         int         tind = im3d->vinfo->thr_index;
00135 
00136         im_thr = DSET_BRICK(oset,tind);
00137 
00138         /* note real threshold */
00139         thresh = im3d->vinfo->func_threshold * im3d->vinfo->func_thresh_top;
00140 
00141         /* maybe we want to return this */
00142         if ( Rthr ) *Rthr = thresh;
00143 
00144         if( im_thr && !AFNI_GOOD_FUNC_DTYPE(im_thr->kind) )
00145             im_thr = NULL;
00146 
00147         /* create the mask, if this fails, just continue... */
00148         if( im_thr != NULL )
00149         {
00150             int nset;
00151             if ( debug > 1 )
00152                 fprintf(stderr,"++ mask from index %d and thresh %f\n",
00153                         tind,thresh);
00154             nset = thd_mask_from_brick(oset, tind, thresh, &cmask, 1);
00155             if ( debug > 1 )
00156             {
00157                 if ( ! cmask )
00158                     fprintf(stderr,"-- no mask created\n");
00159                 else
00160                     fprintf(stderr,"++ mask has %d set voxels\n", nset);
00161             }
00162         }
00163         else if ( debug > 1 )
00164             fprintf(stderr,"-- no threshold mask\n");
00165     }
00166 
00167     /*-------------------- vol2surf computation --------------------*/
00168     results = afni_vol2surf(oset, oind, sA, sB, cmask, use_defaults);
00169 
00170     if ( cmask ) free(cmask);   /* we're done with the mask */
00171     if ( ! results )
00172     {
00173         if ( debug ) fprintf(stderr,"-- vol2surf failure\n");
00174         RETURN(-1);             /* failure? */
00175     }
00176 
00177     /*-------------------- lose old vnlist --------------------*/
00178     /* vol2surf has no method for counting voxels (right now)  */
00179     if( sA->vn )
00180     {
00181         if ( debug > 1 ) fprintf(stderr,"-- destroying vnlist\n");
00182         SUMA_destroy_vnlist( sA->vn ) ;
00183         sA->vn = NULL;
00184     }
00185 
00186     /*-------------------- set overlay colors --------------------*/
00187     nout = map_v2s_results(results, im3d, map, debug, go->sopt.dnode);
00188 
00189     /* before free()ing results, check whether we want to return the values */
00190     if ( Rdata )
00191     {
00192         *Rdata = results->vals[0];
00193         results->vals[0] = NULL;   /* do not let free_v2s_results() free it */
00194     }
00195 
00196     free_v2s_results(results);
00197 
00198     if ( debug > 1 ) fprintf(stderr,"++ map_v2s_results: nout = %d\n", nout);
00199 
00200     /* check failure */
00201     if ( ! *map ) RETURN(-1);
00202 
00203     RETURN(nout);
00204 }

void AFNI_wrap_bbox_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 4692 of file afni.c.

References client_data, drive_MCW_imseq(), ENTRY, IM3D_VALID, AFNI_widget_set::imag, isqDR_periodicmont, MCW_val_bbox(), RESET_AFNI_QUIT, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, Three_D_View::vinfo, Three_D_View::vwid, AFNI_imaging_widgets::wrap_bbox, and AFNI_view_info::xhairs_periodic.

04694 {
04695    Three_D_View * im3d = (Three_D_View *) client_data ;
04696    int bval ;
04697 
04698 ENTRY("AFNI_wrap_bbox_CB") ;
04699 
04700    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04701 
04702    bval = MCW_val_bbox( im3d->vwid->imag->wrap_bbox ) ;
04703 
04704    if( (Boolean) bval == im3d->vinfo->xhairs_periodic ) EXRETURN ;
04705 
04706    im3d->vinfo->xhairs_periodic = (Boolean) bval ;
04707 
04708    if( w != NULL ){
04709       drive_MCW_imseq( im3d->s123, isqDR_periodicmont, (XtPointer) bval );
04710       drive_MCW_imseq( im3d->s231, isqDR_periodicmont, (XtPointer) bval );
04711       drive_MCW_imseq( im3d->s312, isqDR_periodicmont, (XtPointer) bval );
04712    }
04713 
04714    RESET_AFNI_QUIT(im3d) ;
04715    EXRETURN ;
04716 }

void AFNI_write_dataset_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

for any controllers whose active datasets were written out, we need to set the "See Brick" buttons to be sensitive. *

Definition at line 3759 of file afni_func.c.

References AFNI_refashion_dataset(), AFNI_reset_func_range(), AFNI_set_viewpoint(), Three_D_View::anat_now, AFNI_view_info::anat_resam_mode, AFNI_datamode_widgets::anatmode_bbox, BEEPIT, CURRENT_DAXES, DATAXES_TYPE, THD_3dim_dataset::daxes, Three_D_View::dc, AF_options::destruct, MCW_DC::display, AFNI_widget_set::dmode, DMODE_BRICK, DSET_IS_1D, DSET_IS_ANALYZE, DSET_IS_CTFMRI, DSET_IS_CTFSAM, DSET_IS_MINC, DSET_IS_NIFTI, DSET_WRITEABLE, ENTRY, Three_D_View::fim_now, FIRST_RESAM_TYPE, AFNI_view_info::func_resam_mode, AFNI_datamode_widgets::funcmode_bbox, GLOBAL_argopt, GLOBAL_library, AFNI_library_type::have_dummy_dataset, IM3D_VALID, ISFUNC, ISVALID_3DIM_DATASET, LAST_RESAM_TYPE, LOAD_DSET_VIEWS, MCW_CALLER_KILL, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, REDISPLAY_OVERLAY, AFNI_view_info::resam_vox, SHOW_AFNI_PAUSE, SHOW_AFNI_READY, STATUS, THD_edit_dataxes(), AFNI_widget_set::top_shell, THD_dataxes::type, Three_D_View::vinfo, Three_D_View::vwid, MCW_bbox::wbut, THD_3dim_dataset::wod_flag, AFNI_datamode_widgets::write_anat_pb, AFNI_datamode_widgets::write_func_pb, and AFNI_view_info::writeownsize.

03760 {
03761    Three_D_View *im3d = (Three_D_View *) cd ;
03762    THD_3dim_dataset *dset = NULL ;
03763    THD_dataxes        new_daxes ;
03764    Widget wmsg ;
03765    int resam_mode ;
03766    Boolean good , destroy ;
03767 
03768 ENTRY("AFNI_write_dataset_CB") ;
03769 
03770    if( ! IM3D_VALID(im3d) || w == NULL ||
03771        ! XtIsWidget(w)    || ! XtIsRealized(w) ) EXRETURN ;
03772    if( GLOBAL_library.have_dummy_dataset ){ BEEPIT ; EXRETURN ; }
03773 
03774    if( w == im3d->vwid->dmode->write_anat_pb ){         /* write anatomy */
03775       dset       = im3d->anat_now ;
03776       resam_mode = im3d->vinfo->anat_resam_mode ;
03777 
03778    } else if( w == im3d->vwid->dmode->write_func_pb ){  /* write function */
03779       dset       = im3d->fim_now ;
03780       resam_mode = im3d->vinfo->func_resam_mode ;
03781    }
03782 
03783    good = ISVALID_3DIM_DATASET(dset)     &&     /* check for bad data */
03784           resam_mode >= FIRST_RESAM_TYPE &&
03785           resam_mode <= LAST_RESAM_TYPE  &&
03786           im3d->vinfo->resam_vox > 0.0   &&
03787          !DSET_IS_MINC(dset)             &&      /* 29 Oct 2001 */
03788          !DSET_IS_ANALYZE(dset)          &&      /* 27 Aug 2002 */
03789          !DSET_IS_CTFSAM(dset)           &&
03790          !DSET_IS_CTFMRI(dset)           &&
03791          !DSET_IS_1D(dset)               &&
03792          !DSET_IS_NIFTI(dset)                   /* 28 Aug 2003 */
03793        ;
03794 
03795    destroy = !DSET_WRITEABLE(dset) ;      /* check for destruction */
03796 
03797    if( good && destroy ){
03798       if( GLOBAL_argopt.destruct ){
03799          (void) MCW_popup_message( w ,
03800                                    "******************************\n"
03801                                    "** Potentially destructive  **\n"
03802                                    "** dataset write initiated! **\n"
03803                                    "******************************"  ,
03804                                   MCW_USER_KILL | MCW_TIMER_KILL ) ;
03805       } else {
03806          good = False ;  /* destruction not OK */
03807       }
03808    }
03809 
03810    if( !good ){
03811 
03812        XBell(im3d->dc->display,100) ;  /* for the fun of it! */
03813 
03814        (void) MCW_popup_message( w ,
03815                  "****************************************************\n"
03816                  "** Cannot write dataset for one of these reasons: **\n"
03817                  "**   -- It isn't allowed to write data in the     **\n"
03818                  "**        Original View.                          **\n"
03819                  "**   -- It isn't allowed to overwrite data that   **\n"
03820                  "**        is not warped from some other dataset.  **\n"
03821                  "**   -- An internal program error has occured!    **\n"
03822                  "****************************************************"  ,
03823               MCW_USER_KILL | MCW_TIMER_KILL ) ;
03824 
03825        EXRETURN;
03826    }
03827 
03828    SHOW_AFNI_PAUSE ;
03829 
03830    wmsg = MCW_popup_message( w ,
03831             "*******************************\n"
03832             "** Please wait for dataset   **\n"
03833             "** computations and disk I/O **\n"
03834             "*******************************" , MCW_CALLER_KILL ) ;
03835 
03836    XtSetSensitive( im3d->vwid->top_shell , False ) ;
03837    XmUpdateDisplay( im3d->vwid->top_shell ) ;
03838 
03839    LOAD_DSET_VIEWS(im3d) ;  /* 02 Nov 1996 */
03840 
03841    new_daxes.type = DATAXES_TYPE ;
03842 
03843 #ifdef USE_WRITEOWNSIZE
03844    if( im3d->vinfo->writeownsize )
03845       THD_edit_dataxes( im3d->vinfo->resam_vox , dset->daxes , &new_daxes ) ;
03846    else
03847 #endif
03848       new_daxes = *CURRENT_DAXES(im3d->anat_now) ;
03849 
03850    good = AFNI_refashion_dataset( im3d , dset , &new_daxes , resam_mode ) ;
03851 
03852 if(PRINT_TRACING){
03853 if( good ){
03854    STATUS("successful refashioning") ;
03855 } else {
03856    STATUS("failed refashioning") ;
03857 }}
03858 
03859    if( good && ISFUNC(dset) ){
03860       AFNI_reset_func_range( im3d ) ;
03861       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;  /* redraw */
03862    }
03863 
03864    XtSetSensitive( im3d->vwid->top_shell , True ) ;
03865 
03866    XtDestroyWidget( wmsg ) ;
03867    SHOW_AFNI_READY ;
03868 
03869    /* allow the "use data brick" button, if we just wrote the anat out */
03870 
03871    if( good && w == im3d->vwid->dmode->write_anat_pb ){
03872 STATUS("resetting 'use anat brick' button") ;
03873       XtSetSensitive( im3d->vwid->dmode->anatmode_bbox->wbut[DMODE_BRICK] , True ) ;
03874    }
03875 
03876    if( good && w == im3d->vwid->dmode->write_func_pb ){
03877 STATUS("resetting 'use func brick' button") ;
03878       XtSetSensitive( im3d->vwid->dmode->funcmode_bbox->wbut[DMODE_BRICK] , True ) ;
03879    }
03880 
03881    if( ! good ){  /* bad news! */
03882 
03883       XBell(im3d->dc->display,100) ;  /* for the fun of it! */
03884       (void) MCW_popup_message( w ,
03885                 "***************************************\n"
03886                 "** Attempt to write dataset failed   **\n"
03887                 "** for unknown reasons! Check files! **\n"
03888                 "***************************************"  ,
03889              MCW_USER_KILL ) ;
03890 
03891       dset->wod_flag = True ;
03892    }
03893 
03894    EXRETURN ;
03895 }

void AFNI_write_many_dataset_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 3521 of file afni_func.c.

References ADDTO_SARR, AFNI_do_many_writes(), BEEPIT, THD_3dim_dataset::dblk, Three_D_View::dc, THD_diskptr::directory_name, THD_datablock::diskptr, MCW_DC::display, DSET_NUM_TIMES, DSET_NVALS, DSET_WRITEABLE, THD_session::dsset, ENTRY, THD_diskptr::filecode, THD_3dim_dataset::func_type, GLOBAL_library, AFNI_library_type::have_dummy_dataset, THD_3dim_dataset::idcode, IM3D_OPEN, INIT_SARR, ISANAT, ISANATBUCKET, ISFUNC, ISFUNCBUCKET, MAX, MCW_choose_multi_editable_strlist(), MCW_choose_multi_strlist(), MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, mcwCT_multi_mode, MIN, myXtFree, THD_session::num_dsset, THD_sessionlist::num_sess, SESSTRAIL, THD_sessionlist::ssar, AFNI_library_type::sslist, THD_MAX_NAME, THD_trailname(), AFNI_view_info::view_type, Three_D_View::vinfo, and XtRealloc.

03522 {
03523    Three_D_View *im3d = (Three_D_View *) cd ;
03524    static MCW_idcode * idclist  = NULL ;
03525    static char       **strlist  = NULL ;
03526    static int          num_dset = -1 ;
03527 
03528    int iss , id , vv , llen , ltop ;
03529    THD_session *ss ;
03530    THD_3dim_dataset *dset ;
03531    char nam[THD_MAX_NAME+16] , *tnam , qnam[THD_MAX_NAME+16] ;
03532 
03533 ENTRY("AFNI_write_many_dataset_CB") ;
03534 
03535    if( ! IM3D_OPEN(im3d) ) EXRETURN ;
03536    if( GLOBAL_library.have_dummy_dataset ){ BEEPIT ; EXRETURN ; }
03537 
03538    if( num_dset > 0 && strlist != NULL )
03539       for( id=0 ; id < num_dset ; id++ ) myXtFree(strlist[id]) ;
03540    myXtFree(idclist) ; myXtFree(strlist) ;
03541 
03542    vv = im3d->vinfo->view_type ;  /* select view type */
03543 
03544    /** scan once to find longest string name **/
03545 
03546    ltop = 4 ;
03547    for( iss=0 ; iss < GLOBAL_library.sslist->num_sess ; iss++ ){
03548       ss = GLOBAL_library.sslist->ssar[iss] ;
03549 
03550       for( id=0 ; id < ss->num_dsset ; id++ ){
03551          dset = ss->dsset[id][vv] ;
03552          if( DSET_WRITEABLE(dset) ){
03553             strcpy( nam , dset->dblk->diskptr->directory_name ) ;
03554             strcat( nam , dset->dblk->diskptr->filecode ) ;
03555             tnam = THD_trailname(nam,SESSTRAIL+1) ;
03556             llen = strlen(tnam) ; ltop = MAX(ltop,llen) ;
03557          }
03558       }
03559    }
03560    ltop = MIN(ltop,THD_MAX_NAME) ; /* 06 Aug 2002 */
03561 
03562    num_dset = 0 ;
03563    for( iss=0 ; iss < GLOBAL_library.sslist->num_sess ; iss++ ){
03564       ss = GLOBAL_library.sslist->ssar[iss] ;
03565 
03566       /* check anat datasets */
03567 
03568       for( id=0 ; id < ss->num_dsset ; id++ ){
03569          dset = ss->dsset[id][vv] ;
03570          if( DSET_WRITEABLE(dset) ){
03571             num_dset++ ;
03572             idclist = (MCW_idcode *) XtRealloc( (char *) idclist ,
03573                                                 sizeof(MCW_idcode) * num_dset ) ;
03574             strlist = (char **)      XtRealloc( (char *) strlist ,
03575                                                 sizeof(char *)     * num_dset ) ;
03576 
03577             strcpy( nam , dset->dblk->diskptr->directory_name ) ;
03578             strcat( nam , dset->dblk->diskptr->filecode ) ;
03579             tnam = THD_trailname(nam,SESSTRAIL+1) ;
03580 
03581             if( ISANAT(dset) ){
03582               if( ISANATBUCKET(dset) )         /* 30 Nov 1997 */
03583                  sprintf(qnam,"%-*s [%s:%d]" ,
03584                          ltop,tnam , ANAT_prefixstr[dset->func_type] , DSET_NVALS(dset) ) ;
03585 
03586               else if( DSET_NUM_TIMES(dset) == 1 )
03587                  sprintf(qnam,"%-*s [%s]" ,
03588                          ltop,tnam ,ANAT_prefixstr[dset->func_type] ) ;
03589 
03590               else
03591                  sprintf(qnam,"%-*s [%s:3D+t]" ,
03592                          ltop,tnam , ANAT_prefixstr[dset->func_type] ) ;
03593 
03594             } else if( ISFUNC(dset) ){
03595               if( ISFUNCBUCKET(dset) )             /* 30 Nov 1997 */
03596                  sprintf(qnam,"%-*s [%s:%d]" ,
03597                          ltop,tnam , FUNC_prefixstr[dset->func_type] , DSET_NVALS(dset) ) ;
03598 
03599               else if( DSET_NUM_TIMES(dset) == 1 )
03600                  sprintf(qnam,"%-*s [%s]" ,
03601                          ltop,tnam , FUNC_prefixstr[dset->func_type] ) ;
03602 
03603               else
03604                  sprintf(qnam,"%-*s [%s:3D+t]" ,
03605                          ltop,tnam , FUNC_prefixstr[dset->func_type] ) ;
03606             }
03607 
03608             strlist[num_dset-1] = XtNewString(qnam) ;
03609             idclist[num_dset-1] = dset->idcode ;
03610          }
03611       } /* end of loop over datasets */
03612 
03613    } /* end of loop over sessions */
03614 
03615    if( num_dset <= 0 ){
03616       XBell(im3d->dc->display,100) ;  /* for the fun of it! */
03617 
03618       (void) MCW_popup_message( w ,
03619                  "*******************************\n"
03620                  "** No datasets are available **\n"
03621                  "** to write out to disk.     **\n"
03622                  "*******************************"  ,
03623               MCW_USER_KILL | MCW_TIMER_KILL ) ;
03624       EXRETURN ;
03625    }
03626 
03627 #if 1
03628    MCW_choose_multi_strlist( w , "Datasets to Write" , mcwCT_multi_mode ,
03629                              num_dset , NULL , strlist ,
03630                              AFNI_do_many_writes , (XtPointer) idclist ) ;
03631 #else
03632    { THD_string_array *sar ;  /*** This code is for experiments only! ***/
03633      INIT_SARR(sar) ;
03634      for( id=0 ; id < num_dset ; id++ ) ADDTO_SARR(sar,strlist[id]) ;
03635 
03636      MCW_choose_multi_editable_strlist( w , "Datasets to Write" , mcwCT_multi_mode ,
03637                                         sar , NULL ,
03638                                         AFNI_do_many_writes , (XtPointer) idclist ) ;
03639    }
03640 #endif
03641 
03642    XtVaSetValues( w , XmNuserData , (XtPointer) im3d , NULL ) ;
03643 
03644    EXRETURN ;
03645 }

void AFNI_xhall_bbox_CB Widget   ,
XtPointer   ,
XtPointer   
 

Definition at line 4720 of file afni.c.

References AFNI_set_viewpoint(), client_data, AFNI_view_info::crosshair_visible, ENTRY, IM3D_VALID, AFNI_widget_set::imag, MCW_val_bbox(), REDISPLAY_OVERLAY, RESET_AFNI_QUIT, Three_D_View::vinfo, Three_D_View::vwid, AFNI_view_info::xhairs_all, and AFNI_imaging_widgets::xhall_bbox.

04722 {
04723    Three_D_View * im3d = (Three_D_View *) client_data ;
04724    int bval ;
04725 
04726 ENTRY("AFNI_xhall_bbox_CB") ;
04727 
04728    if( ! IM3D_VALID(im3d) ) EXRETURN ;
04729 
04730    bval = MCW_val_bbox( im3d->vwid->imag->xhall_bbox ) ;
04731 
04732    if( (Boolean) bval == im3d->vinfo->xhairs_all ) EXRETURN ;
04733 
04734    im3d->vinfo->xhairs_all = (Boolean) bval ;
04735 
04736    if( im3d->vinfo->crosshair_visible ){
04737       AFNI_set_viewpoint( im3d , -1,-1,-1 , REDISPLAY_OVERLAY ) ;
04738    }
04739 
04740    RESET_AFNI_QUIT(im3d) ;
04741    EXRETURN ;
04742 }

void AFNI_xyz_to_dicomm THD_3dim_dataset  ,
float   ,
float   ,
float   ,
float *   ,
float *   ,
float *   
 

Definition at line 908 of file afni_receive.c.

References ISVALID_DSET, TEMP_FVEC3, THD_3dmm_to_dicomm(), and THD_fvec3::xyz.

00911 {
00912    THD_fvec3 fv ;
00913 
00914    if( ! ISVALID_DSET(dset) ) return ;
00915 
00916    fv  = THD_3dmm_to_dicomm( dset , TEMP_FVEC3(xx,yy,zz) ) ;
00917    *xd = fv.xyz[0] ;
00918    *yd = fv.xyz[1] ;
00919    *zd = fv.xyz[2] ;
00920    return ;
00921 }

void AFNI_xyz_to_ijk THD_3dim_dataset  ,
float   ,
float   ,
float   ,
int *   ,
int *   ,
int *   
 

Definition at line 893 of file afni_receive.c.

References THD_ivec3::ijk, ISVALID_DSET, TEMP_FVEC3, and THD_3dmm_to_3dind().

00896 {
00897    THD_ivec3 iv ;
00898 
00899    if( ! ISVALID_DSET(dset) ) return ;
00900 
00901    iv  = THD_3dmm_to_3dind ( dset , TEMP_FVEC3(xx,yy,zz) ) ;
00902    *ii = iv.ijk[0] ;
00903    *jj = iv.ijk[1] ;
00904    *kk = iv.ijk[2] ;
00905    return ;
00906 }

int DSET_in_global_session THD_3dim_dataset   dset
 

Determine if dset is in the AFNI global session - 21 Dec 2001. ----------------------------------------------------------------------

Definition at line 1913 of file afni_func.c.

References THD_slist_find::dset, FIND_IDCODE, GLOBAL_library, THD_3dim_dataset::idcode, ISVALID_DSET, AFNI_library_type::session, and THD_dset_in_session().

Referenced by AFNI_choose_dataset_CB(), AFNI_force_adoption(), AFNI_make_descendants_old(), and AFNI_rescan_session_OLD().

01914 {
01915    THD_slist_find find ;
01916 
01917    if( !ISVALID_DSET(dset) ) return 0 ;
01918 
01919    find = THD_dset_in_session( FIND_IDCODE ,
01920                                &(dset->idcode) ,
01921                                GLOBAL_library.session ) ;
01922 
01923    return (find.dset != NULL) ;
01924 }

void ENV_add_numeric char *   ,
char *   ,
int   ,
int   ,
int   ,
int   ,
generic_func  
 

Definition at line 539 of file afni_pplug_env.c.

References ENV_NUMBER_EDITABLE, ENV_NUMBER_FIXED, generic_func, HINT_NMAX, malloc, MCW_strncpy, NAME_NMAX, NUM_env_var, realloc, ENV_var::vbot, ENV_var::vdecim, ENV_var::vdef, ENV_var::vfunc, ENV_var::vtop, and ENV_var::vtype.

Referenced by ENV_init().

00542 {
00543    int ii ;
00544 
00545    if( vname == NULL || vname[0] == '\0' ) return ;
00546    if( vhint == NULL || vhint[0] == '\0' ) return ;
00547    if( vbot >= vtop )                      return ;
00548 
00549    if( NUM_env_var == 0 )
00550       env_var = (ENV_var *) malloc(sizeof(ENV_var)) ;
00551    else
00552       env_var = (ENV_var *) realloc(env_var,(NUM_env_var+1)*sizeof(ENV_var)) ;
00553 
00554    ii = NUM_env_var ; NUM_env_var++ ;
00555 
00556    MCW_strncpy( env_var[ii].vname , vname , NAME_NMAX ) ;
00557    MCW_strncpy( env_var[ii].vhint , vhint , HINT_NMAX ) ;
00558 
00559    env_var[ii].vtype = (vtop-vbot < 100) ? ENV_NUMBER_FIXED
00560                                          : ENV_NUMBER_EDITABLE ;
00561 
00562    env_var[ii].vbot   = vbot ;
00563    env_var[ii].vtop   = vtop ;
00564    env_var[ii].vdecim = vdecim ;
00565    env_var[ii].vdef   = vdef ;
00566    env_var[ii].vfunc  = cbfunc ;
00567 
00568    return ;
00569 }

void ENV_add_string char *   ,
char *   ,
int   ,
char **   ,
generic_func  
 

Definition at line 577 of file afni_pplug_env.c.

References ENV_STRING, generic_func, HINT_NMAX, malloc, MCW_strncpy, NAME_NMAX, NUM_env_var, realloc, ENV_var::vcount, ENV_var::vfunc, ENV_var::vlist, and ENV_var::vtype.

Referenced by ENV_add_yesno(), and ENV_init().

00579 {
00580    int ii ;
00581 
00582    if( vname == NULL || vname[0] == '\0' ) return ;
00583    if( vhint == NULL || vhint[0] == '\0' ) return ;
00584    if( vcount < 0 )                        return ;
00585    if( vcount > 0    && vlist    == NULL ) return ;
00586 
00587    if( NUM_env_var == 0 )
00588       env_var = (ENV_var *) malloc(sizeof(ENV_var)) ;
00589    else
00590       env_var = (ENV_var *) realloc(env_var,(NUM_env_var+1)*sizeof(ENV_var)) ;
00591 
00592    ii = NUM_env_var ; NUM_env_var++ ;
00593 
00594    MCW_strncpy( env_var[ii].vname , vname , NAME_NMAX ) ;
00595    MCW_strncpy( env_var[ii].vhint , vhint , HINT_NMAX ) ;
00596 
00597    env_var[ii].vtype  = ENV_STRING ;
00598    env_var[ii].vcount = vcount ;
00599    env_var[ii].vlist  = vlist ;
00600    env_var[ii].vfunc  = cbfunc ;
00601 
00602    return ;
00603 }

void ENV_add_yesno char *   ,
char *   
 

Definition at line 571 of file afni_pplug_env.c.

References ENV_add_string(), NUM_yesno_list, and yesno_list.

Referenced by ENV_init().

00572 {
00573    ENV_add_string( vname , vhint ,
00574                    NUM_yesno_list , yesno_list , NULL  ) ;
00575 }

PLUGIN_interface* ENV_init void   
 

Definition at line 173 of file afni_pplug_env.c.

References AV_SHIFT_VAL, cord_strings, ENV_add_numeric(), ENV_add_string(), ENV_add_yesno(), ENV_compressor(), ENV_coorder(), ENV_cwd(), env_fixed, ENV_globalrange(), ENV_leftisleft(), ENV_main(), ENV_marksquality(), ENV_NUMBER_EDITABLE, ENV_NUMBER_FIXED, ENV_redisplay(), ENV_redraw_titles(), ENV_sesstrail(), ENV_STRING, ENV_trusthost(), free, getenv(), help_end, help_mid, help_start, malloc, NAME_NMAX, NUM_COMPRESS_elist, NUM_cord_strings, NUM_env_fixed, NUM_env_var, NUM_threshlock_list, NUM_yesno_list, PLUTO_add_hint(), PLUTO_set_runlabels(), PLUTO_string_index(), SESSTRAIL, strtod(), THD_zzprintf(), threshlock_list, VAL_NMAX, ENV_var::vbot, ENV_var::vcount, ENV_var::vdef, ENV_var::vlist, ENV_var::vtop, ENV_var::vtype, and yesno_list.

Referenced by AFNI_misc_CB().

00174 {
00175    PLUGIN_interface *plint ;     /* will be the output of this routine */
00176 
00177    char *helpstring=NULL , *ept , *eval ;
00178    int ii ;
00179 
00180    /*------- some environment variables for AFNI ------*/
00181 
00182    { static char buf[VAL_NMAX] = "AFNI_CWD=" ;      /* 22 Feb 2001 */
00183      ept = getcwd( buf+9 , VAL_NMAX-9 ) ;
00184      if( ept != NULL ){
00185         putenv(buf) ;
00186         ENV_add_string( "AFNI_CWD" ,
00187                         "Current working directory (gets output files)" ,
00188                         0,NULL , ENV_cwd ) ;
00189      }
00190    }
00191 
00192    ENV_add_string( "AFNI_ENFORCE_ASPECT" ,
00193                    "To make AFNI enforce image window aspect ratio?" ,
00194                    NUM_yesno_list , yesno_list , NULL  ) ;
00195 
00196    ENV_add_numeric( "AFNI_FIM_PERCENT_LIMIT" ,
00197                     "Upper limit on % Change in FIM" ,
00198                     10,1000,0,100 , NULL              ) ;
00199 
00200    ENV_add_numeric( "AFNI_IMAGE_MINFRAC" ,
00201                     "Minimum size of image window" ,
00202                     0,10,2,2 , NULL                 ) ;
00203 
00204    ENV_add_string( "AFNI_LEFT_IS_LEFT" ,
00205                    "To show subject's left on image left?" ,
00206                    NUM_yesno_list , yesno_list , ENV_leftisleft  ) ;
00207 
00208    ENV_add_string( "AFNI_NO_SIDES_LABELS" ,
00209                    "Skip showing image window left-side label?" ,
00210                    NUM_yesno_list , yesno_list , NULL  ) ;
00211 
00212    ENV_add_string( "AFNI_VIEW_ANAT_BRICK" ,
00213                    "Show OverLay brick whenever possible" ,
00214                    NUM_yesno_list , yesno_list , NULL  ) ;
00215 
00216    ENV_add_string( "AFNI_VIEW_FUNC_BRICK" ,
00217                    "Show UnderLay brick whenever possible" ,
00218                    NUM_yesno_list , yesno_list , NULL  ) ;
00219 
00220    ENV_add_string( "AFNI_ORIENT" ,
00221                    "Coordinate display orientation" ,
00222                    NUM_cord_strings,cord_strings , ENV_coorder ) ;
00223 
00224    ENV_add_string( "AFNI_MARKERS_NOQUAL" ,
00225                    "Skip markers quality checking?" ,
00226                    NUM_yesno_list , yesno_list , ENV_marksquality  ) ;
00227 
00228    ENV_add_string( "AFNI_COMPRESSOR" ,
00229                    "Output BRIK compression method" ,
00230                    NUM_COMPRESS_elist,COMPRESS_elist , ENV_compressor ) ;
00231 
00232    ENV_add_string( "AFNI_AUTOGZIP" ,
00233                    "Use gzip on output if BRIK seems highly compressible" ,
00234                    NUM_yesno_list , yesno_list , NULL  ) ;
00235 
00236 #if 0
00237    ENV_add_string( "AFNI_BYTEORDER" ,
00238                    "Byte ordering for output BRIKs" ,
00239                    NUM_byteorder_list , byteorder_list , ENV_byteorder ) ;
00240 #endif
00241 
00242 #if 0
00243    ENV_add_string( "AFNI_NOMMAP" ,
00244                    "Whether to read BRIKs using mmap()" ,
00245                    NUM_yesno_list , yesno_list , NULL    ) ;
00246 #endif
00247 
00248    ENV_add_string( "AFNI_FLOATSCAN" ,
00249                    "Scan floating BRIKs for errors on input?" ,
00250                    NUM_yesno_list , yesno_list , NULL          ) ;
00251 
00252 #ifdef USE_SESSTRAIL
00253    ENV_add_numeric( "AFNI_SESSTRAIL" ,
00254                     "# directory levels seen in Switch Session, etc." ,
00255                     0,9,0,SESSTRAIL , ENV_sesstrail ) ;
00256 #endif
00257 
00258    ENV_add_string( "AFNI_PBAR_IMXY" ,
00259                    "Sizes of 'Save to PPM' for color pbars" ,
00260                    0,NULL , NULL ) ;
00261 
00262    ENV_add_string( "AFNI_PSPRINT" ,
00263                    "Command to send stdin to PostScript printer" ,
00264                    0,NULL , NULL ) ;
00265 
00266    ENV_add_string( "AFNI_TRUSTHOST" ,
00267                    "Name of host to trust for plugouts and realtime data" ,
00268                    0,NULL , ENV_trusthost ) ;
00269 
00270    ENV_add_string( "AFNI_IMAGE_LABEL_COLOR" ,
00271                    "Name of color for image overlay labels" , /* 21 Sep 2001 */
00272                    0,NULL , NULL ) ;
00273 
00274    ENV_add_numeric( "AFNI_IMAGE_LABEL_SETBACK" ,
00275                     "Size of setback for image overlay labels" ,
00276                     0 , 40 , 3 , 3 , NULL ) ;
00277 
00278    if( SUMA_ENABLED ){
00279      ENV_add_string( "AFNI_SUMA_BOXCOLOR" ,                   /* 21 Sep 2001 */
00280                      "Color name for surface node overlays [or none]" ,
00281                      0,NULL , NULL ) ;
00282 
00283      ENV_add_numeric( "AFNI_SUMA_BOXSIZE" ,                   /* 10 Mar 2002 */
00284                       "Box size for surface node overlays" ,
00285                       1 , 10 , 1 , 2 , NULL ) ;
00286 
00287      ENV_add_string( "AFNI_SUMA_LINECOLOR" ,                  /* 10 Mar 2002 */
00288                      "Color name for surface line overlays [or none]" ,
00289                      0,NULL , NULL ) ;
00290 
00291      ENV_add_numeric( "AFNI_SUMA_LINESIZE" ,                  /* 15 Jan 2003 */
00292                       "Line thickness for surface intersection overlay" ,
00293                       0 , 30 , 3 , 0 , NULL ) ;
00294    }
00295 
00296 #ifndef NO_FRIVOLITIES
00297    ENV_add_string( "AFNI_IMAGE_PGMFILE" ,
00298                    "Image file for AFNI splash window" ,
00299                    0,NULL , NULL ) ;
00300 #endif
00301 
00302    /* 08 Aug 2001 */
00303 
00304    ENV_add_yesno( "AFNI_DONT_MOVE_MENUS" ,
00305                   "Move popup menus to enhance visibility?" ) ;
00306 
00307    /* 07 Mar 2002 */
00308 
00309    ENV_add_numeric( "AFNI_GRAPH_TEXTLIMIT" ,
00310                     "Max rows in Graph Button-3 popup" ,
00311                     1 , 99 , 0 , 40 , NULL ) ;
00312 
00313    /* 16 Mar 2002 */
00314 
00315    ENV_add_string( "AFNI_KEEP_PANNING" ,
00316                    "Keep 'pan' turned on in image viewers?" ,
00317                    NUM_yesno_list , yesno_list , NULL  ) ;
00318 
00319    /* 18 Mar 2002 */
00320 
00321    ENV_add_string( "AFNI_VALUE_LABEL" ,
00322                    "Turn on the Define Overlay dataset value label?" ,
00323                    NUM_yesno_list , yesno_list , NULL  ) ;
00324 
00325    /* 22 Mar 2002 */
00326 
00327    ENV_add_string( "AFNI_CROSSHAIR_LINES" ,
00328                    "Draw crosshairs with lines, not overlay voxels?" ,
00329                    NUM_yesno_list , yesno_list , NULL  ) ;
00330 
00331    /* 25 Mar 2002 */
00332 
00333    ENV_add_string( "AFNI_CROP_ZOOMSAVE" ,
00334                    "Crop zoomed images when saving to disk?" ,
00335                    NUM_yesno_list , yesno_list , NULL  ) ;
00336 
00337    /* 23 Aug 2003 */
00338 
00339    ENV_add_numeric( "AFNI_MAX_OPTMENU" ,
00340                     "Max buttons in an Option Menu" ,
00341                     100 , 100000 , 0 , 255 , NULL ) ;
00342 
00343    /* 23 Oct 2003 */
00344 
00345    ENV_add_numeric( "AFNI_STROKE_THRESHOLD" ,
00346                     "Coarseness of grayscale stroking" ,
00347                     8 , 99 , 0 , 32 , NULL ) ;
00348 
00349    ENV_add_string( "AFNI_STROKE_AUTOPLOT" ,
00350                    "To automatically draw grayscale-data value plot?" ,
00351                    NUM_yesno_list , yesno_list , NULL  ) ;
00352 
00353    /* 04 Nov 2003 */
00354 
00355    ENV_add_string( "AFNI_IMAGE_MINTOMAX" ,
00356                    "Set image viewers to do min-to-max grayscaling?" ,
00357                    NUM_yesno_list , yesno_list , NULL  ) ;
00358 
00359    ENV_add_string( "AFNI_IMAGE_GLOBALRANGE" ,
00360                    "Set image viewers to use 3D global data range min-to-max?" ,
00361                    NUM_yesno_list , yesno_list , ENV_globalrange  ) ;
00362 
00363    /* 19 Nov 2003 */
00364 
00365    ENV_add_numeric( "AFNI_DRAW_UNDOSIZE" ,
00366                     "Megabytes allowed for Drawing Undo" ,
00367                     1 , 999 , 0 , 6 , NULL ) ;
00368 
00369 #if !defined(NO_FRIVOLITIES) && defined(DARWIN)
00370    ENV_add_yesno( "AFNI_SPEECH" , "Allow speech synthesis?" ) ; /* 03 Dec 2003 */
00371 #endif
00372 
00373    ENV_add_numeric( "AFNI_VIDEO_DELAY" ,                        /* 04 Dec 2003 */
00374                     "Image redraw interval for 'V' or 'v' (ms)." ,
00375                     1,9000,0,1 , NULL              ) ;
00376 
00377    ENV_add_numeric( "AFNI_IMAGE_ENTROPY" ,
00378                     "Entropy threshold: below this, 2%-98% is off." ,
00379                     0,10,1,0 , NULL ) ;
00380 
00381    ENV_add_string( "AFNI_THRESH_LOCK" ,                            /* 06 Feb 2004 */
00382                    "Lock Threshold slider values together?" ,
00383                    NUM_threshlock_list , threshlock_list , NULL  ) ;
00384 
00385    ENV_add_yesno( "AFNI_PBAR_LOCK" , "Lock Color Pbars together?" ) ; /* 07 Feb 2004 */
00386    ENV_add_yesno( "AFNI_RANGE_LOCK", "Lock OLay Ranges together?" ) ; /* 23 Feb 2004 */
00387 
00388    ENV_add_yesno( "AFNI_DISP_SCROLLBARS" , "Image Disp menu get scrollbars?" ) ;
00389 
00390    /* 23 Feb 2004 [rickr] */
00391    ENV_add_yesno( "AFNI_IMAGE_ZOOM_NN" ,
00392                    "Use Nearest Neighbor interpolation for image Zoom?" ) ;
00393 
00394    /* 22 Mar 2004 [RWCox] */
00395    ENV_add_yesno( "AFNI_SLAVE_FUNCTIME" , "Time Index affects functional overlay?" ) ;
00396    ENV_add_yesno( "AFNI_SLAVE_THRTIME"  , "Time Index affects threshold overlay?" ) ;
00397 
00398    ENV_add_string( "AFNI_REALTIME_MP_HOST_PORT" ,     /* 31 Mar 2004 [rickr] */
00399                    "Supply host:port string for realtime motion parameters." ,
00400                    0,NULL , NULL ) ;
00401 
00402    /* 07 Apr 2004 [RWCox] */
00403    ENV_add_yesno( "AFNI_X11_REDECORATE" , "Try to set X11 window 'decorations'?" ) ;
00404 
00405    /* 21 Dec 2004 [RWCox] */
00406    ENV_add_string( "AFNI_TITLE_LABEL2" ,
00407                    "Use 'label2' field for window titles?" ,
00408                    NUM_yesno_list , yesno_list , ENV_redraw_titles ) ;
00409 
00410    /* 21 Mar 2005 [RWCox] */
00411    ENV_add_string( "AFNI_EDGIZE_OVERLAY" ,
00412                    "Display color overlay as edges only?" ,
00413                    NUM_yesno_list , yesno_list , ENV_redisplay ) ;
00414 
00415    /* 08 Apr 2005 [rickr] */
00416    ENV_add_numeric( "AFNI_NIFTI_DEBUG" ,
00417                     "Set nifti_io debug level (should then do Rescan:This)" ,
00418                     0,5,0,0 , NULL ) ;
00419 
00420    /* 20 Apr 2005 [RWCox] */
00421    ENV_add_string( "AFNI_OVERLAY_ZERO" ,
00422                    "Do 0 values get color in an Overlay?" ,
00423                    NUM_yesno_list , yesno_list , ENV_redisplay ) ;
00424 
00425    /*---------------- compute helpstring -----------------------*/
00426 
00427    helpstring = THD_zzprintf( helpstring , "%s\n" , help_start ) ;
00428 
00429    for( ii=0 ; ii < NUM_env_fixed ; ii++ ){
00430       ept = getenv(env_fixed[ii]) ;
00431       if( ept == NULL )
00432          eval = "(Not set)" ;
00433       else if( ept[0] == '\0' )
00434          eval = "(Set to empty string)" ;
00435       else
00436          eval = ept ;
00437       helpstring = THD_zzprintf( helpstring, " %-25.25s= %s\n",
00438                                              env_fixed[ii],eval  ) ;
00439    }
00440 
00441    helpstring = THD_zzprintf( helpstring , "%s\n" , help_mid ) ;
00442 
00443    for( ii=0 ; ii < NUM_env_var ; ii++ ){
00444       helpstring = THD_zzprintf( helpstring, " %-25.25s: %s\n" ,
00445                                  env_var[ii].vname , env_var[ii].vhint ) ;
00446    }
00447 
00448    helpstring = THD_zzprintf( helpstring , "%s\n" , help_end ) ;
00449 
00450    /*---------------- set titles and call point ----------------*/
00451 
00452    plint = PLUTO_new_interface( "Environment" ,
00453                                 "Environment variables control" ,
00454                                 helpstring ,
00455                                 PLUGIN_CALL_VIA_MENU , ENV_main  ) ;
00456    free(helpstring) ;
00457 
00458    PLUTO_add_hint( plint , "Environment variables control" ) ;
00459 
00460    PLUTO_set_runlabels( plint , "Set+Keep" , "Set+Close" ) ;  /* 04 Nov 2003 */
00461 
00462    /*--------- make interface lines: 1 for each variable -----------*/
00463 
00464    for( ii=0 ; ii < NUM_env_var ; ii++ ){
00465 
00466       PLUTO_add_option( plint ,
00467                         "" ,                 /* label at left of input line */
00468                         env_var[ii].vname ,  /* tag to return to plugin */
00469                         FALSE                /* is this mandatory? */
00470                       ) ;
00471 
00472       ept = getenv( env_var[ii].vname ) ;
00473 
00474       switch( env_var[ii].vtype ){
00475 
00476          default: break ;  /* should never happen */
00477 
00478          case ENV_NUMBER_FIXED:
00479          case ENV_NUMBER_EDITABLE:{
00480             double dval=env_var[ii].vdef ; int ival ;
00481 
00482             if( ept != NULL ){
00483                dval = strtod(ept,NULL) ;
00484                AV_SHIFT_VAL(-env_var[ii].vdecim,dval) ;
00485             }
00486             ival = rint(dval) ;
00487                  if( ival < env_var[ii].vbot ) ival = env_var[ii].vbot ;
00488             else if( ival > env_var[ii].vtop ) ival = env_var[ii].vtop ;
00489 
00490             PLUTO_add_number( plint ,
00491                               env_var[ii].vname ,
00492                               env_var[ii].vbot  ,
00493                               env_var[ii].vtop  ,
00494                               env_var[ii].vdecim,
00495                               ival,(env_var[ii].vtype==ENV_NUMBER_EDITABLE) ) ;
00496             PLUTO_add_hint( plint , env_var[ii].vhint ) ; /* 8 Apr 2005 rickr */
00497          }
00498          break ;
00499 
00500          case ENV_STRING:{
00501             if( env_var[ii].vcount <= 0 ){
00502                PLUTO_add_string( plint ,
00503                                  env_var[ii].vname ,
00504                                  0 , &ept , NAME_NMAX ) ;
00505                PLUTO_add_hint( plint , env_var[ii].vhint ) ;
00506             } else {
00507                int dval , jj ;
00508                char ** sval ;
00509 
00510                dval = 1 + PLUTO_string_index( ept , env_var[ii].vcount ,
00511                                                     env_var[ii].vlist   ) ;
00512 
00513                sval = (char **) malloc( sizeof(char *)*(1+env_var[ii].vcount) ) ;
00514                sval[0] = "(Not set)" ;
00515                for( jj=0 ; jj < env_var[ii].vcount ; jj++ )
00516                   sval[jj+1] = env_var[ii].vlist[jj] ;
00517 
00518                PLUTO_add_string( plint ,
00519                                  env_var[ii].vname  ,
00520                                  1+env_var[ii].vcount , sval , dval ) ;
00521                PLUTO_add_hint( plint , env_var[ii].vhint ) ;
00522                free(sval) ;
00523             }
00524          }
00525          break ;
00526       } /* end of switch over variable type */
00527 
00528    } /* end of loop over variables */
00529 
00530    /*--------- done with interface setup ---------*/
00531 
00532    return plint ;
00533 }

float extreme_proj int   ,
float *   
 

Definition at line 145 of file afni_transforms.c.

References qmed_float().

00146 {
00147    float vv,ww , med=qmed_float(n,ar) ;
00148    int ii , jj ;
00149 
00150    jj = 0 ; vv = fabs(ar[0]-med) ;       /* Find the value */
00151    for( ii=1 ; ii < n ; ii++ ){          /* furthest from */
00152       ww = fabs(ar[ii]-med) ;            /* the median.  */
00153       if( ww > vv ){ vv=ww; jj=ii; }
00154    }
00155    return ar[jj] ;
00156 }

PLUGIN_interface* F1D_init void   
 

Definition at line 79 of file afni_pplug_1dfunc.c.

References AFMALL, AFNI_register_1D_function, alpha, chain_do, chain_ff, F1D_chainfunc(), F1D_main(), MCW_function_list::flags, func0D, func1D, funcname, MCW_function_list::funcs, generic_func, GLOBAL_library, helpstring, MCW_function_list::labels, malloc, n0, n1, MCW_function_list::num, num0D, num1D, NUM_CHAIN, numfunc, PLUTO_add_hint(), PLUTO_set_runlabels(), realloc, AFNI_library_type::registered_0D, and AFNI_library_type::registered_1D.

Referenced by AFNI_misc_CB().

00080 {
00081    PLUGIN_interface * plint ;     /* will be the output of this routine */
00082    int ii , num , ll ;
00083    char str[16] ;
00084    MCW_function_list * rlist ;
00085 
00086    /*---------------- set titles and call point ----------------*/
00087 
00088    plint = PLUTO_new_interface( "1D Chain Func" ,
00089                                 "Control 1DChain function" ,
00090                                 helpstring ,
00091                                 PLUGIN_CALL_VIA_MENU ,
00092                                 (char *(*)())F1D_main  ) ;
00093 
00094    PLUTO_add_hint( plint , "Control 1DChain function" ) ;
00095 
00096    PLUTO_set_runlabels( plint , "Set+Keep" , "Set+Close" ) ;  /* 04 Nov 2003 */
00097 
00098    /*-------- Initialize list of all functions that can be chained -----*/
00099 
00100    numfunc     = 1 ;
00101    funcname    = (char **) malloc(sizeof(char **)) ;
00102    funcname[0] = "Expr 9 ---->" ;
00103 
00104    /*-------- Get list of pre-registered functions --------*/
00105 
00106    rlist = &(GLOBAL_library.registered_0D) ;
00107    num0D = rlist->num ;
00108    if( num0D > 0 ){
00109      int n0 = 0 ;
00110      funcname = (char **) realloc( (void *)funcname, sizeof(char **)*(numfunc+num0D) );
00111      func0D   = (generic_func **) malloc( sizeof(generic_func *)*num0D ) ;
00112      for( ii=0 ; ii < num0D ; ii++ ){
00113        if( rlist->flags[ii] == 0 ){            /* 18 Dec 2003: only allow "normal" funcs */
00114          ll = strlen(rlist->labels[ii]) ;
00115          funcname[numfunc] = AFMALL(char, ll+8) ;
00116          strcpy(funcname[numfunc],"0D: ") ;
00117          strcat(funcname[numfunc],rlist->labels[ii]) ;
00118          func0D[n0++] = rlist->funcs[ii] ;
00119          numfunc++ ;
00120        }
00121      }
00122      num0D = n0 ;
00123    }
00124 
00125    rlist = &(GLOBAL_library.registered_1D) ;
00126    num1D = rlist->num ;
00127    if( num1D > 0 ){
00128      int n1 = 0 ;
00129      funcname = (char **) realloc( (void *)funcname, sizeof(char **)*(numfunc+num1D) );
00130      func1D   = (generic_func **) malloc( sizeof(generic_func *)*num1D ) ;
00131      for( ii=0 ; ii < num1D ; ii++ ){
00132        if( rlist->flags[ii] == 0 ){            /* 18 Dec 2003: only allow "normal" funcs */
00133          ll = strlen(rlist->labels[ii]) ;
00134          funcname[numfunc] = AFMALL(char, ll+8) ;
00135          strcpy(funcname[numfunc],"1D: ") ;
00136          strcat(funcname[numfunc],rlist->labels[ii]) ;
00137          func1D[n1++] = rlist->funcs[ii] ;
00138          numfunc++ ;
00139        }
00140      }
00141      num1D = n1 ;
00142    }
00143 
00144    AFNI_register_1D_function( "1DChain" , F1D_chainfunc ) ;  /* add this only now */
00145 
00146    /*--------- make interface lines -----------*/
00147 
00148    for( ii=0 ; ii < NUM_CHAIN ; ii++ ){
00149 
00150       chain_do[ii] = 0 ;     /* off */
00151       chain_pc[ii] = NULL ;
00152       chain_ff[ii] = NULL ;
00153 
00154       str[0] = alpha[ii] ; str[1] = '\0' ;
00155 
00156       PLUTO_add_option( plint ,
00157                         str ,  /* label at left of input line */
00158                         str ,  /* tag to return to plugin */
00159                         FALSE  /* is this mandatory? */
00160                       ) ;
00161 
00162       PLUTO_add_string( plint , "Function"  ,
00163                         numfunc , funcname , 0 ) ;
00164 
00165       PLUTO_add_string( plint , "Expr 9" , 0,NULL,32 ) ;
00166    }
00167 
00168    /*--------- done with interface setup ---------*/
00169 
00170    return plint ;
00171 }

PLUGIN_interface* F2D_init void   
 

Definition at line 85 of file afni_pplug_2dfunc.c.

References AFMALL, AFNI_register_2D_function, alpha, chain_do, chain_ff, F2D_chainfunc(), F2D_main(), MCW_function_list::flags, func0D, func2D, funcname, MCW_function_list::funcs, generic_func, GLOBAL_library, helpstring, MCW_function_list::labels, malloc, n0, n2, MCW_function_list::num, num0D, num2D, NUM_CHAIN, numfunc, PLUTO_add_hint(), PLUTO_set_runlabels(), realloc, AFNI_library_type::registered_0D, and AFNI_library_type::registered_2D.

Referenced by AFNI_misc_CB().

00086 {
00087    PLUGIN_interface * plint ;     /* will be the output of this routine */
00088    int ii , num , ll ;
00089    char str[16] ;
00090    MCW_function_list * rlist ;
00091 
00092    /*---------------- set titles and call point ----------------*/
00093 
00094    plint = PLUTO_new_interface( "2D Chain Func" ,
00095                                 "Control 2DChain function" ,
00096                                 helpstring ,
00097                                 PLUGIN_CALL_VIA_MENU ,
00098                                 (char *(*)())F2D_main  ) ;
00099 
00100    PLUTO_add_hint( plint , "Control 2DChain function" ) ;
00101 
00102    PLUTO_set_runlabels( plint , "Set+Keep" , "Set+Close" ) ;  /* 04 Nov 2003 */
00103 
00104    /*-------- Initialize list of all functions that can be chained -----*/
00105 
00106    numfunc     = 1 ;
00107    funcname    = (char **) malloc(sizeof(char **)) ;
00108    funcname[0] = "Expr 3x3 -->" ;
00109 
00110    /*-------- Get list of pre-registered functions --------*/
00111 
00112    rlist = &(GLOBAL_library.registered_0D) ;
00113    num0D = rlist->num ;
00114    if( num0D > 0 ){
00115      int n0 = 0 ;
00116      funcname = (char **) realloc( funcname, sizeof(char **)*(numfunc+num0D) );
00117      func0D   = (generic_func **) malloc( sizeof(generic_func *)*num0D ) ;
00118      for( ii=0 ; ii < num0D ; ii++ ){
00119        if( rlist->flags[ii] == 0 ){            /* 18 Dec 2003: only allow "normal" funcs */
00120          ll = strlen(rlist->labels[ii]) ;
00121          funcname[numfunc] = AFMALL(char,ll+8) ;
00122          strcpy(funcname[numfunc],"0D: ") ;
00123          strcat(funcname[numfunc],rlist->labels[ii]) ;
00124          func0D[n0++] = rlist->funcs[ii] ;
00125          numfunc++ ;
00126        }
00127      }
00128      num0D = n0 ;
00129    }
00130 
00131    rlist = &(GLOBAL_library.registered_2D) ;
00132    num2D = rlist->num ;
00133    if( num2D > 0 ){
00134      int n2 = 0 ;
00135      funcname = (char **) realloc( funcname, sizeof(char **)*(numfunc+num2D) );
00136      func2D   = (generic_func **) malloc( sizeof(generic_func *)*num2D ) ;
00137      for( ii=0 ; ii < num2D ; ii++ ){
00138        if( rlist->flags[ii] == 0 ){            /* 18 Dec 2003: only allow "normal" funcs */
00139          ll = strlen(rlist->labels[ii]) ;
00140          funcname[numfunc] = AFMALL(char, ll+8) ;
00141          strcpy(funcname[numfunc],"2D: ") ;
00142          strcat(funcname[numfunc],rlist->labels[ii]) ;
00143          func2D[n2++] = rlist->funcs[ii] ;
00144          numfunc++ ;
00145        }
00146      }
00147      num2D = n2 ;
00148    }
00149 
00150    AFNI_register_2D_function( "2DChain" , F2D_chainfunc ) ;  /* add this only now */
00151 
00152    /*--------- make interface lines -----------*/
00153 
00154    for( ii=0 ; ii < NUM_CHAIN ; ii++ ){
00155 
00156       chain_do[ii] = 0 ;     /* off */
00157       chain_pc[ii] = NULL ;
00158       chain_ff[ii] = NULL ;
00159 
00160       str[0] = alpha[ii] ; str[1] = '\0' ;
00161 
00162       PLUTO_add_option( plint ,
00163                         str ,  /* label at left of input line */
00164                         str ,  /* tag to return to plugin */
00165                         FALSE  /* is this mandatory? */
00166                       ) ;
00167 
00168       PLUTO_add_string( plint , "Function"  ,
00169                         numfunc , funcname , 0 ) ;
00170 
00171       PLUTO_add_string( plint , "Expr 3x3" , 0,NULL,32 ) ;
00172    }
00173 
00174    /*--------- done with interface setup ---------*/
00175 
00176    return plint ;
00177 }

void FatalError char *    str
 

and plugouts! *

Definition at line 1685 of file afni.c.

01686 {
01687    fprintf(stderr,"\n**** Fatal Error ****\n %s\n",str) ;
01688    sleep(1) ; exit(1) ;
01689 }

void fft2D_func int    nx,
int    ny,
double    dx,
double    dy,
float *    ar
 

process copy of input back into the input array *

Definition at line 470 of file afni_transforms.c.

References CABS, csfft_cox(), csfft_nextup_one35(), free, complex::i, malloc, and complex::r.

00471 {
00472    complex *cxar , *cpt ;
00473    int nxup,nyup , ii,jj ;
00474    float fi,fj , *fpt ;
00475 
00476    if( nx < 5 || ny < 5 ) return ;
00477 
00478    nxup = csfft_nextup_one35(nx) ;  /* get FFT size */
00479    nyup = csfft_nextup_one35(ny) ;
00480 
00481    cxar = (complex *) malloc(sizeof(complex)*nxup*nyup) ;
00482 
00483    /* copy input to output, sign-alternating and zero-padding along the way */
00484 
00485    cpt = cxar ;
00486    fpt = ar   ;
00487    fj  = 1.0  ;
00488    for( jj=0 ; jj < ny ; jj++ ){
00489       fi = fj ; fj = -fj ;
00490       for(ii=0; ii<nx  ; ii++){cpt->r=*fpt*fi; cpt->i=0.0; cpt++;fpt++;fi=-fi;}
00491       for(    ; ii<nxup; ii++){cpt->r=cpt->i=0.0; cpt++;}
00492    }
00493    for( ; jj < nyup ; jj++ ){cpt->r=cpt->i=0.0; cpt++;}
00494 
00495    /* row FFTs */
00496 
00497    for( jj=0 ; jj < ny ; jj++ )
00498       csfft_cox( -1 , nxup , cxar+jj*nxup ) ;
00499 
00500    /* column FFTs */
00501 
00502    cpt = (complex *) malloc(sizeof(complex)*nyup) ;
00503 
00504    for( ii=0 ; ii < nxup ; ii++ ){
00505       for( jj=0 ; jj < nyup ; jj++ ) cpt[jj] = cxar[ii+jj*nxup] ;
00506       csfft_cox( -1 , nyup , cpt ) ;
00507       for( jj=0 ; jj < nyup ; jj++ ) cxar[ii+jj*nxup] = cpt[jj] ;
00508    }
00509 
00510    /* copy to output */
00511 
00512    for( jj=0 ; jj < ny ; jj++ )
00513       for( ii=0 ; ii < nx ; ii++ )
00514          ar[ii+jj*nx] = CABS(cxar[ii+jj*nxup]) ;
00515 
00516    free(cxar) ; free(cpt) ; return ;
00517 }

void log10_func int   ,
float *   
 

Definition at line 5 of file afni_transforms.c.

References MAX, MIN, and vec.

00006 {
00007    int ii ;
00008    float vmax , vmin ;
00009 
00010    if( num <= 0 || vec == NULL ) return ;
00011 
00012    /* find largest element */
00013 
00014    vmax = vec[0] ;
00015    for( ii=1 ; ii < num ; ii++ ) vmax = MAX( vmax , vec[ii] ) ;
00016 
00017    /* if all are nonpositive, return all zeros */
00018 
00019    if( vmax <= 0.0 ){
00020       for( ii=0 ; ii < num ; ii++ ) vec[ii] = 0.0 ;
00021       return ;
00022    }
00023 
00024    /* find smallest positive element */
00025 
00026    vmin = vmax ;
00027    for( ii=0 ; ii < num ; ii++ )
00028       if( vec[ii] > 0.0 ) vmin = MIN( vmin , vec[ii] ) ;
00029 
00030    /* take log10 of each positive element;
00031       nonpositive elements get the log10 of vmin instead */
00032 
00033    vmin = log10(vmin) ;
00034    for( ii=0 ; ii < num ; ii++ )
00035       vec[ii] = (vec[ii] > 0.0) ? log10(vec[ii]) : vmin ;
00036 
00037    return ;
00038 }

float max_proj int   ,
float *   
 

Definition at line 129 of file afni_transforms.c.

References v.

00130 {
00131    float v = ar[0] ;
00132    int ii ;
00133    for( ii=1 ; ii < n ; ii++ ) if( v < ar[ii] ) v = ar[ii] ;
00134    return v ;
00135 }

float mean_proj int   ,
float *   
 

Definition at line 137 of file afni_transforms.c.

References v.

00138 {
00139    float v=0.0 ;
00140    int ii ;
00141    for( ii=0 ; ii < n ; ii++ ) v += ar[ii] ;
00142    return (v/n) ;
00143 }

void median21_box_func int    nx,
int    ny,
double    dx,
double    dy,
float *    ar
 

process copy of input back into the input array *

Definition at line 355 of file afni_transforms.c.

References atemp, isort_float(), MAKE_ATEMP, and qmed_float().

00356 {
00357    int ii , jj , nxy , joff ;
00358    float aa[21] ;
00359    float *ajj , *ajm , *ajp , *ajmm , *ajpp ;
00360 
00361    if( nx < 5 || ny < 5 ) return ;
00362 
00363    /** make space and copy input into it **/
00364 
00365    nxy = nx * ny ;
00366    MAKE_ATEMP(nxy) ; if( atemp == NULL ) return ;
00367    memcpy(atemp,ar,sizeof(float)*nxy) ;
00368 
00369    /** process copy of input back into the input array **/
00370 
00371    for( jj=1 ; jj < ny-1 ; jj++ ){
00372 
00373       joff = jj * nx ;      /* offset into this row */
00374       ajj  = atemp + joff ; /* pointer to this row */
00375 
00376       ajm  = ajj-nx ;  /* pointer to last row */
00377       ajp  = ajj+nx ;  /* pointer to next row */
00378 
00379       ajmm = (jj == 1  ) ? ajm : ajm-nx ;  /* to last last row */
00380       ajpp = (jj ==ny-2) ? ajp : ajp+nx ;  /* to next next row */
00381 
00382       /* do interior points of this row */
00383 
00384       for( ii=2 ; ii < nx-2 ; ii++ ){
00385          aa[0]=ajmm[ii-1]; aa[1]=ajmm[ii]; aa[2]=ajmm[ii+1];
00386 
00387          aa[ 3]=ajm[ii-2]; aa[ 4]=ajm[ii-1]; aa[ 5]=ajm[ii]; aa[ 6]=ajm[ii+1]; aa[ 7]=ajm[ii+2];
00388          aa[ 8]=ajj[ii-2]; aa[ 9]=ajj[ii-1]; aa[10]=ajj[ii]; aa[11]=ajj[ii+1]; aa[12]=ajj[ii+2];
00389          aa[13]=ajp[ii-2]; aa[14]=ajp[ii-1]; aa[15]=ajp[ii]; aa[16]=ajp[ii+1]; aa[17]=ajp[ii+2];
00390 
00391          aa[18]=ajpp[ii-1]; aa[19]=ajpp[ii]; aa[20]=ajpp[ii+1];
00392 
00393 #if 0
00394          isort_float( 21 , aa ) ; ar[ii+joff] = aa[10] ;
00395 #else
00396          ar[ii+joff] = qmed_float(21,aa) ; /* 25 Oct 2000 */
00397 #endif
00398       }
00399 
00400    }
00401    return ;
00402 }

void median3_func int   ,
double   ,
double   ,
float *   
 

Definition at line 75 of file afni_transforms.c.

References dt, MEDIAN, and vec.

00076 {
00077    int ii ;
00078    float aa,bb,cc ;
00079 
00080    bb = vec[0] ; cc = vec[1] ;
00081    for( ii=1 ; ii < num-1 ; ii++ ){
00082       aa = bb ; bb = cc ; cc = vec[ii+1] ;
00083       vec[ii] = MEDIAN(aa,bb,cc) ;         /* see mrilib.h */
00084    }
00085 
00086    return ;
00087 }

void median9_box_func int   ,
int   ,
double   ,
double   ,
float *   
 

Definition at line 175 of file afni_transforms.c.

References atemp, isort_float(), MAKE_ATEMP, and qmed_float().

00176 {
00177    int ii , jj , nxy , joff ;
00178    float aa[9] ;
00179    float *ajj , *ajm , *ajp ;
00180 
00181    if( nx < 3 || ny < 3 ) return ;
00182 
00183    /** make space and copy input into it **/
00184 
00185    nxy = nx * ny ;
00186    MAKE_ATEMP(nxy) ; if( atemp == NULL ) return ;
00187    memcpy(atemp,ar,sizeof(float)*nxy) ;
00188 
00189    /** process copy of input back into the input array **/
00190 
00191    for( jj=0 ; jj < ny ; jj++ ){
00192 
00193       joff = jj * nx ;      /* offset into this row */
00194       ajj  = atemp + joff ; /* pointer to this row */
00195 
00196       ajm  = (jj==0   ) ? ajj : ajj-nx ;  /* pointer to last row */
00197       ajp  = (jj==ny-1) ? ajj : ajj+nx ;  /* pointer to next row */
00198 
00199       /* do interior points of this row */
00200 
00201       for( ii=1 ; ii < nx-1 ; ii++ ){
00202          aa[0] = ajm[ii-1] ; aa[1] = ajm[ii] ; aa[2] = ajm[ii+1] ;
00203          aa[3] = ajj[ii-1] ; aa[4] = ajj[ii] ; aa[5] = ajj[ii+1] ;
00204          aa[6] = ajp[ii-1] ; aa[7] = ajp[ii] ; aa[8] = ajp[ii+1] ;
00205 #if 0
00206          isort_float( 9 , aa ) ; ar[ii+joff] = aa[4] ;
00207 #else
00208          ar[ii+joff] = qmed_float(9,aa) ;  /* 25 Oct 2000 */
00209 #endif
00210       }
00211 
00212       /* do leading edge point (ii=0) */
00213 
00214       aa[0] = ajm[0] ; aa[1] = ajm[0] ; aa[2] = ajm[1] ;
00215       aa[3] = ajj[0] ; aa[4] = ajj[0] ; aa[5] = ajj[1] ;
00216       aa[6] = ajp[0] ; aa[7] = ajp[0] ; aa[8] = ajp[1] ;
00217 #if 0
00218       isort_float( 9 , aa ) ; ar[joff] = aa[4] ;
00219 #else
00220       ar[joff] = qmed_float(9,aa) ;  /* 25 Oct 2000 */
00221 #endif
00222 
00223       /* do trailing edge point (ii=nx-1) */
00224 
00225       aa[0] = ajm[nx-2] ; aa[1] = ajm[nx-1] ; aa[2] = ajm[nx-1] ;
00226       aa[3] = ajj[nx-2] ; aa[4] = ajj[nx-1] ; aa[5] = ajj[nx-1] ;
00227       aa[6] = ajp[nx-2] ; aa[7] = ajp[nx-1] ; aa[8] = ajp[nx-1] ;
00228 #if 0
00229       isort_float( 9 , aa ) ; ar[nx-1+joff] = aa[4] ;
00230 #else
00231       ar[nx-1+joff] = qmed_float(9,aa) ;  /* 25 Oct 2000 */
00232 #endif
00233    }
00234    return ;
00235 }

float min_proj int   ,
float *   
 

Definition at line 121 of file afni_transforms.c.

References v.

00122 {
00123    float v = ar[0] ;
00124    int ii ;
00125    for( ii=1 ; ii < n ; ii++ ) if( v > ar[ii] ) v = ar[ii] ;
00126    return v ;
00127 }

Three_D_View* new_AFNI_controller Widget   ,
MCW_DC  ,
int   
 

Definition at line 7233 of file afni_widg.c.

Referenced by MAIN_workprocess().

void osfilt3_func int   ,
double   ,
double   ,
float *   
 

Definition at line 59 of file afni_transforms.c.

References dt, OSFILT, and vec.

00060 {
00061    int ii ;
00062    float aa,bb,cc ;
00063 
00064    bb = vec[0] ; cc = vec[1] ;
00065    for( ii=1 ; ii < num-1 ; ii++ ){
00066       aa = bb ; bb = cc ; cc = vec[ii+1] ;
00067       vec[ii] = OSFILT(aa,bb,cc) ;         /* see mrilib.h */
00068    }
00069 
00070    return ;
00071 }

void osfilt9_box_func int    nx,
int    ny,
double    dx,
double    dy,
float *    ar
 

process copy of input back into the input array *

Definition at line 297 of file afni_transforms.c.

References atemp, isort_float(), and MAKE_ATEMP.

Referenced by lacy9_box_func().

00298 {
00299    int ii , jj , nxy , joff ;
00300    float aa[9] ;
00301    float *ajj , *ajm , *ajp ;
00302 
00303    if( nx < 3 || ny < 3 ) return ;
00304 
00305    /** make space and copy input into it **/
00306 
00307    nxy = nx * ny ;
00308    MAKE_ATEMP(nxy) ; if( atemp == NULL ) return ;
00309    memcpy(atemp,ar,sizeof(float)*nxy) ;
00310 
00311    /** process copy of input back into the input array **/
00312 
00313    for( jj=0 ; jj < ny ; jj++ ){
00314 
00315       joff = jj * nx ;      /* offset into this row */
00316       ajj  = atemp + joff ; /* pointer to this row */
00317 
00318       ajm  = (jj==0   ) ? ajj : ajj-nx ;  /* pointer to last row */
00319       ajp  = (jj==ny-1) ? ajj : ajj+nx ;  /* pointer to next row */
00320 
00321       /* do interior points of this row */
00322 
00323 #undef  OSUM
00324 #define OSUM(a,b,c,d,e) ( 0.1*((a)+(e)) + 0.2*((b)+(d)) + 0.4*(c) )
00325 
00326       for( ii=1 ; ii < nx-1 ; ii++ ){
00327          aa[0] = ajm[ii-1] ; aa[1] = ajm[ii] ; aa[2] = ajm[ii+1] ;
00328          aa[3] = ajj[ii-1] ; aa[4] = ajj[ii] ; aa[5] = ajj[ii+1] ;
00329          aa[6] = ajp[ii-1] ; aa[7] = ajp[ii] ; aa[8] = ajp[ii+1] ;
00330          isort_float( 9 , aa ) ;
00331          ar[ii+joff] = OSUM( aa[2],aa[3],aa[4],aa[5],aa[6] ) ;
00332       }
00333 
00334       /* do leading edge point (ii=0) */
00335 
00336       aa[0] = ajm[0] ; aa[1] = ajm[0] ; aa[2] = ajm[1] ;
00337       aa[3] = ajj[0] ; aa[4] = ajj[0] ; aa[5] = ajj[1] ;
00338       aa[6] = ajp[0] ; aa[7] = ajp[0] ; aa[8] = ajp[1] ;
00339       isort_float( 9 , aa ) ;
00340       ar[joff] = OSUM( aa[2],aa[3],aa[4],aa[5],aa[6] ) ;
00341 
00342       /* do trailing edge point (ii=nx-1) */
00343 
00344       aa[0] = ajm[nx-2] ; aa[1] = ajm[nx-1] ; aa[2] = ajm[nx-1] ;
00345       aa[3] = ajj[nx-2] ; aa[4] = ajj[nx-1] ; aa[5] = ajj[nx-1] ;
00346       aa[6] = ajp[nx-2] ; aa[7] = ajp[nx-1] ; aa[8] = ajp[nx-1] ;
00347       isort_float( 9 , aa ) ;
00348       ar[nx-1+joff] = OSUM( aa[2],aa[3],aa[4],aa[5],aa[6] ) ;
00349    }
00350    return ;
00351 }

void quadrant_fimfunc int   ,
float *   ,
void *   ,
int   ,
void *   
 

Definition at line 423 of file afni_fimfunc.c.

References EDIT_BRICK_LABEL, EDIT_BRICK_TO_FICO, fd, free, FIMdata::ignore, malloc, MRI_FLOAT_PTR, MRI_IMAGE::nx, MRI_IMAGE::ny, FIMdata::polort, quadrant_corr_prepare(), quadrant_manycorr(), rank_order_float(), FIMdata::ref_ts, and v.

00424 {
00425    static float *tsc=NULL , *refc=NULL , *refv=NULL , **rr ;
00426    static int   *keep=NULL ;
00427    static int    ntsc , nref , nkeep , polort,ignore , ncall;
00428 
00429    int ii , kk ;
00430    float *v ;
00431 
00432    /*--- handle special cases ---*/
00433 
00434    if( ts == NULL ){
00435 
00436       /*--- the initialization call ---*/
00437 
00438       if( n > 0 ){
00439 
00440          FIMdata *fd = (FIMdata *) val ;
00441 
00442          polort = fd->polort ;  /* not used here */
00443          ignore = fd->ignore ;
00444          ncall  = 0 ;           /* how many times we have been called */
00445 
00446          /* make workspace for copy of ts data when it arrives */
00447 
00448          ntsc = n ;
00449          if( tsc != NULL ) free(tsc) ;
00450          tsc = (float *) malloc(sizeof(float)*ntsc) ;
00451 
00452          /* make copy of ref data */
00453 
00454          nref = fd->ref_ts->ny ;
00455          if( refc != NULL ) free(refc) ;
00456          if( refv != NULL ) free(refv) ;
00457          if( keep != NULL ) free(keep) ;
00458          if( rr   != NULL ) free(rr) ;
00459          refc = (float *) malloc(sizeof(float)*ntsc*nref) ;  /* copy of ref   */
00460          refv = (float *) malloc(sizeof(float)*nref) ;      /* rank variances */
00461          keep = (int *)   malloc(sizeof(int)*ntsc) ;       /* keeper indices  */
00462          rr   = (float **)malloc(sizeof(float *)*nref) ;  /* convenience ptrs */
00463 
00464          for( kk=0 ; kk < nref ; kk++ ){
00465             rr[kk] = refc+kk*ntsc ;                       /* compute ptr */
00466             memcpy( rr[kk] ,                              /* copy data  */
00467                     MRI_FLOAT_PTR(fd->ref_ts) + kk*fd->ref_ts->nx ,
00468                     sizeof(float)*ntsc  ) ;
00469          }
00470 
00471          /* mark those places we will keep (where ref is OK) */
00472 
00473          for( nkeep=0,ii=ignore ; ii < ntsc ; ii++ ){ /* for each time point */
00474             for( kk=0 ; kk < nref ; kk++ )            /* check each ref     */
00475                if( rr[kk][ii] >= WAY_BIG ) break ;
00476 
00477             if( kk == nref ) keep[nkeep++] = ii ;     /* mark if all are OK */
00478          }
00479 
00480          /* compress ref, eliminating non-keepers */
00481 
00482          if( nkeep < ntsc ){
00483             for( ii=0 ; ii < nkeep ; ii++ ){
00484                for( kk=0 ; kk < nref ; kk++ )
00485                   rr[kk][ii] = rr[kk][keep[ii]] ;  /* copy backwards */
00486             }
00487          }
00488 
00489          /* prepare each ref vector for rank processing */
00490 
00491          for( kk=0 ; kk < nref ; kk++ )
00492             refv[kk] = quadrant_corr_prepare( nkeep , rr[kk] ) ;
00493 
00494 #if 0
00495 fprintf(stderr,"quadrant_fimfunc: initialize ntsc=%d nkeep=%d nref=%d\n",
00496         ntsc,nkeep,nref);
00497 #endif
00498 
00499          return ;
00500 
00501       /*--- the ending call ---*/
00502 
00503       } else {
00504          THD_3dim_dataset *dset = (THD_3dim_dataset *) val ;
00505          int kb = -n ;
00506 
00507          free(tsc)  ; tsc  = NULL ;  /* free workspaces */
00508          free(refc) ; refc = NULL ;
00509          free(refv) ; refv = NULL ;
00510          free(keep) ; keep = NULL ;
00511          free(rr)   ; rr   = NULL ;
00512          rank_order_float(0,NULL) ;
00513 
00514          /* edit sub-brick statistical parameters and name */
00515 
00516          EDIT_BRICK_TO_FICO( dset , kb , nkeep , (nref==1)?1:2 , 1 ) ;
00517          EDIT_BRICK_LABEL( dset , kb , "Quadrant CC" ) ;
00518 
00519 #if 0
00520 fprintf(stderr,"quadrant_fimfunc: finalize with kb=%d\n",kb);
00521 #endif
00522 
00523          return ;
00524       }
00525    }
00526 
00527    /*--- the normal case [with data] ---*/
00528 
00529    ncall++ ;
00530 #if 0
00531 if(ncall%1000==0) fprintf(stderr,"quadrant_fimfunc: ncall=%d\n",ncall);
00532 #endif
00533 
00534    /* copy input timeseries data (since we will mangle it) */
00535 
00536    if( nkeep < ntsc )
00537       for( ii=0 ; ii < nkeep ; ii++ ) tsc[ii] = ts[keep[ii]]; /* the hard way */
00538    else
00539       memcpy(tsc,ts,sizeof(float)*ntsc) ;                     /* the easy way */
00540 
00541    /* compute our single result */
00542 
00543    v    = (float *) val ;
00544    v[0] = quadrant_manycorr( nkeep , tsc , nref , refv , rr ) ;
00545 
00546    return ;
00547 }

void RESET_sonnet void   
 

void spearman_fimfunc int   ,
float *   ,
void *   ,
int   ,
void *   
 

Definition at line 293 of file afni_fimfunc.c.

References EDIT_BRICK_LABEL, EDIT_BRICK_TO_FICO, fd, free, FIMdata::ignore, malloc, MRI_FLOAT_PTR, MRI_IMAGE::nx, MRI_IMAGE::ny, FIMdata::polort, rank_order_float(), FIMdata::ref_ts, spearman_rank_manycorr(), spearman_rank_prepare(), and v.

00294 {
00295    static float *tsc=NULL , *refc=NULL , *refv=NULL , **rr ;
00296    static int   *keep=NULL ;
00297    static int    ntsc , nref , nkeep , polort,ignore , ncall;
00298 
00299    int ii , kk ;
00300    float *v ;
00301 
00302    /*--- handle special cases ---*/
00303 
00304    if( ts == NULL ){
00305 
00306       /*--- the initialization call ---*/
00307 
00308       if( n > 0 ){
00309 
00310          FIMdata *fd = (FIMdata *) val ;
00311 
00312          polort = fd->polort ;  /* not used here */
00313          ignore = fd->ignore ;
00314          ncall  = 0 ;           /* how many times we have been called */
00315 
00316          /* make workspace for copy of ts data when it arrives */
00317 
00318          ntsc = n ;
00319          if( tsc != NULL ) free(tsc) ;
00320          tsc = (float *) malloc(sizeof(float)*ntsc) ;
00321 
00322          /* make copy of ref data */
00323 
00324          nref = fd->ref_ts->ny ;
00325          if( refc != NULL ) free(refc) ;
00326          if( refv != NULL ) free(refv) ;
00327          if( keep != NULL ) free(keep) ;
00328          if( rr   != NULL ) free(rr) ;
00329          refc = (float *) malloc(sizeof(float)*ntsc*nref) ;  /* copy of ref   */
00330          refv = (float *) malloc(sizeof(float)*nref) ;      /* rank variances */
00331          keep = (int *)   malloc(sizeof(int)*ntsc) ;       /* keeper indices  */
00332          rr   = (float **)malloc(sizeof(float *)*nref) ;  /* convenience ptrs */
00333 
00334          for( kk=0 ; kk < nref ; kk++ ){
00335             rr[kk] = refc+kk*ntsc ;                       /* compute ptr */
00336             memcpy( rr[kk] ,                              /* copy data  */
00337                     MRI_FLOAT_PTR(fd->ref_ts) + kk*fd->ref_ts->nx ,
00338                     sizeof(float)*ntsc  ) ;
00339          }
00340 
00341          /* mark those places we will keep (where ref is OK) */
00342 
00343          for( nkeep=0,ii=ignore ; ii < ntsc ; ii++ ){ /* for each time point */
00344             for( kk=0 ; kk < nref ; kk++ )            /* check each ref     */
00345                if( rr[kk][ii] >= WAY_BIG ) break ;
00346 
00347             if( kk == nref ) keep[nkeep++] = ii ;     /* mark if all are OK */
00348          }
00349 
00350          /* compress ref, eliminating non-keepers */
00351 
00352          if( nkeep < ntsc ){
00353             for( ii=0 ; ii < nkeep ; ii++ ){
00354                for( kk=0 ; kk < nref ; kk++ )
00355                   rr[kk][ii] = rr[kk][keep[ii]] ;  /* copy backwards */
00356             }
00357          }
00358 
00359          /* prepare each ref vector for rank processing */
00360 
00361          for( kk=0 ; kk < nref ; kk++ )
00362             refv[kk] = spearman_rank_prepare( nkeep , rr[kk] ) ;
00363 
00364 #if 0
00365 fprintf(stderr,"spearman_fimfunc: initialize ntsc=%d nkeep=%d nref=%d\n",
00366         ntsc,nkeep,nref);
00367 #endif
00368 
00369          return ;
00370 
00371       /*--- the ending call ---*/
00372 
00373       } else {
00374          THD_3dim_dataset *dset = (THD_3dim_dataset *) val ;
00375          int kb = -n ;
00376 
00377          free(tsc)  ; tsc  = NULL ;  /* free workspaces */
00378          free(refc) ; refc = NULL ;
00379          free(refv) ; refv = NULL ;
00380          free(keep) ; keep = NULL ;
00381          free(rr)   ; rr   = NULL ;
00382          rank_order_float(0,NULL) ;
00383 
00384          /* edit sub-brick statistical parameters and name */
00385 
00386          EDIT_BRICK_TO_FICO( dset , kb , nkeep , (nref==1)?1:2 , 1 ) ;
00387          EDIT_BRICK_LABEL( dset , kb , "Spearman CC" ) ;
00388 
00389 #if 0
00390 fprintf(stderr,"spearman_fimfunc: finalize with kb=%d\n",kb);
00391 #endif
00392 
00393          return ;
00394       }
00395    }
00396 
00397    /*--- the normal case [with data] ---*/
00398 
00399    ncall++ ;
00400 #if 0
00401 if(ncall%1000==0) fprintf(stderr,"spearman_fimfunc: ncall=%d\n",ncall);
00402 #endif
00403 
00404    /* copy input timeseries data (since we will mangle it) */
00405 
00406    if( nkeep < ntsc )
00407       for( ii=0 ; ii < nkeep ; ii++ ) tsc[ii] = ts[keep[ii]]; /* the hard way */
00408    else
00409       memcpy(tsc,ts,sizeof(float)*ntsc) ;                     /* the easy way */
00410 
00411    /* compute our single result */
00412 
00413    v    = (float *) val ;
00414    v[0] = spearman_rank_manycorr( nkeep , tsc , nref , refv , rr ) ;
00415 
00416    return ;
00417 }

void ssqrt_func int   ,
float *   
 

Definition at line 42 of file afni_transforms.c.

References vec.

00043 {
00044    int ii ;
00045    double val ;
00046 
00047    if( num <= 0 || vec == NULL ) return ;
00048 
00049    for( ii=0 ; ii < num ; ii++ ){
00050       val = sqrt(fabs(vec[ii])) ;                /* will be positive */
00051       vec[ii] = (vec[ii] >= 0.0) ? val : -val ;  /* output sign = input sign */
00052    }
00053 
00054    return ;
00055 }

TTRR_params* TTRR_get_params void   
 

Definition at line 577 of file afni_ttren.c.

References ENTRY, TTRR_params::hemi, TTRR_controls::hemi_av, MCW_arrowval::ival, malloc, TTRR_params::meth, TTRR_controls::meth_av, myXtNew, TTRR_params::num, TTRR_controls::reg_av, TTRR_controls::reg_num, TTRR_controls::reg_ttbrik, TTRR_controls::reg_ttovc, TTRR_controls::reg_ttval, RETURN, TTRR_params::ttbrik, TTRR_params::ttovc, TTRR_METH_OFF, and TTRR_params::ttval.

Referenced by AFNI_ttatlas_overlay(), RCREND_overlay_ttatlas(), and REND_overlay_ttatlas().

00578 {
00579    int ii,jj ;
00580 
00581 ENTRY("TTRR_get_params") ;
00582 
00583    if( ttc == NULL ) RETURN(NULL) ;  /* report nothing */
00584 
00585    if( ttc->meth_av->ival == TTRR_METH_OFF ) RETURN(NULL) ;
00586 
00587    /* 1st time in: make reporting struct */
00588 
00589    if( ttp == NULL ){
00590       ttp = myXtNew(TTRR_params) ;
00591       ttp->ttbrik = (byte *) malloc(sizeof(byte)*ttc->reg_num) ;
00592       ttp->ttval  = (byte *) malloc(sizeof(byte)*ttc->reg_num) ;
00593       ttp->ttovc  = (byte *) malloc(sizeof(byte)*ttc->reg_num) ;
00594    }
00595 
00596    /* set method codes */
00597 
00598    ttp->meth = ttc->meth_av->ival ;
00599    ttp->hemi = ttc->hemi_av->ival ;  /* hemisphere */
00600 
00601    /* make list of all 'on' regions */
00602 
00603    for( ii=jj=0 ; ii < ttc->reg_num ; ii++ ){
00604       ttc->reg_ttovc[ii] = ttc->reg_av[ii]->ival ;
00605       if( ttc->reg_ttovc[ii] > 0 ){
00606          ttp->ttbrik[jj] = (byte) ttc->reg_ttbrik[ii] ;
00607          ttp->ttval [jj] = (byte) ttc->reg_ttval [ii] ;
00608          ttp->ttovc [jj] = (byte) ttc->reg_ttovc [ii] ;
00609          jj++ ;
00610       }
00611    }
00612 
00613    ttp->num = jj ;  /* number of 'on' regions */
00614    RETURN(ttp) ;
00615 }

void TTRR_popup Three_D_View   im3d
 

compute information about regions *

Definition at line 478 of file afni_ttren.c.

References Three_D_View::dc, ENTRY, TTRR_controls::im3d, TTRR_controls::shell, and TTRR_setup_widgets().

Referenced by AFNI_imag_pop_CB().

00479 {
00480 ENTRY("TTRR_popup") ;
00481 
00482    if( ttc == NULL ) TTRR_setup_widgets( im3d->dc ) ;
00483 
00484    ttc->im3d = im3d ;
00485    XtMapWidget( ttc->shell ) ;
00486 
00487    EXRETURN ;
00488 }

void winsor21_box_func int    nx,
int    ny,
double    dx,
double    dy,
float *    ar
 

process copy of input back into the input array *

Definition at line 406 of file afni_transforms.c.

References atemp, isort_float(), MAKE_ATEMP, and my_getenv().

00407 {
00408    int ii , jj , nxy , joff ;
00409    float aa[21] ;
00410    float *ajj , *ajm , *ajp , *ajmm , *ajpp ;
00411 
00412    static int kbot=-1 , ktop ;
00413 
00414    if( nx < 5 || ny < 5 ) return ;
00415 
00416    /** initialize cutoffs [07 Dec 1999] **/
00417 
00418    if( kbot < 0 ){
00419       char *ee = my_getenv("AFNI_WINSOR21_CUTOFF") ;
00420       kbot = 6 ;   /* default */
00421       if( ee != NULL ){
00422          ii = strtol( ee , NULL , 10 ) ;
00423          if( ii > 0 && ii < 10 ) kbot = ii ;
00424       }
00425       ktop = 20 - kbot ;
00426    }
00427 
00428    /** make space and copy input into it **/
00429 
00430    nxy = nx * ny ;
00431    MAKE_ATEMP(nxy) ; if( atemp == NULL ) return ;
00432    memcpy(atemp,ar,sizeof(float)*nxy) ;
00433 
00434    /** process copy of input back into the input array **/
00435 
00436    for( jj=1 ; jj < ny-1 ; jj++ ){
00437 
00438       joff = jj * nx ;      /* offset into this row */
00439       ajj  = atemp + joff ; /* pointer to this row */
00440 
00441       ajm  = ajj-nx ;  /* pointer to last row */
00442       ajp  = ajj+nx ;  /* pointer to next row */
00443 
00444       ajmm = (jj == 1  ) ? ajm : ajm-nx ;  /* to last last row */
00445       ajpp = (jj ==ny-2) ? ajp : ajp+nx ;  /* to next next row */
00446 
00447       /* do interior points of this row */
00448 
00449       for( ii=2 ; ii < nx-2 ; ii++ ){
00450          aa[0]=ajmm[ii-1]; aa[1]=ajmm[ii]; aa[2]=ajmm[ii+1];
00451 
00452          aa[ 3]=ajm[ii-2]; aa[ 4]=ajm[ii-1]; aa[ 5]=ajm[ii]; aa[ 6]=ajm[ii+1]; aa[ 7]=ajm[ii+2];
00453          aa[ 8]=ajj[ii-2]; aa[ 9]=ajj[ii-1]; aa[10]=ajj[ii]; aa[11]=ajj[ii+1]; aa[12]=ajj[ii+2];
00454          aa[13]=ajp[ii-2]; aa[14]=ajp[ii-1]; aa[15]=ajp[ii]; aa[16]=ajp[ii+1]; aa[17]=ajp[ii+2];
00455 
00456          aa[18]=ajpp[ii-1]; aa[19]=ajpp[ii]; aa[20]=ajpp[ii+1];
00457 
00458          isort_float( 21 , aa ) ;
00459 
00460               if( ar[ii+joff] < aa[kbot] ) ar[ii+joff] = aa[kbot] ;
00461          else if( ar[ii+joff] > aa[ktop] ) ar[ii+joff] = aa[ktop] ;
00462       }
00463 
00464    }
00465    return ;
00466 }

void winsor9_box_func int    nx,
int    ny,
double    dx,
double    dy,
float *    ar
 

process copy of input back into the input array *

Definition at line 239 of file afni_transforms.c.

References atemp, isort_float(), and MAKE_ATEMP.

00240 {
00241    int ii , jj , nxy , joff ;
00242    float aa[9] ;
00243    float *ajj , *ajm , *ajp ;
00244 
00245    if( nx < 3 || ny < 3 ) return ;
00246 
00247    /** make space and copy input into it **/
00248 
00249    nxy = nx * ny ;
00250    MAKE_ATEMP(nxy) ; if( atemp == NULL ) return ;
00251    memcpy(atemp,ar,sizeof(float)*nxy) ;
00252 
00253    /** process copy of input back into the input array **/
00254 
00255    for( jj=0 ; jj < ny ; jj++ ){
00256 
00257       joff = jj * nx ;      /* offset into this row */
00258       ajj  = atemp + joff ; /* pointer to this row */
00259 
00260       ajm  = (jj==0   ) ? ajj : ajj-nx ;  /* pointer to last row */
00261       ajp  = (jj==ny-1) ? ajj : ajj+nx ;  /* pointer to next row */
00262 
00263       /* do interior points of this row */
00264 
00265       for( ii=1 ; ii < nx-1 ; ii++ ){
00266          aa[0] = ajm[ii-1] ; aa[1] = ajm[ii] ; aa[2] = ajm[ii+1] ;
00267          aa[3] = ajj[ii-1] ; aa[4] = ajj[ii] ; aa[5] = ajj[ii+1] ;
00268          aa[6] = ajp[ii-1] ; aa[7] = ajp[ii] ; aa[8] = ajp[ii+1] ;
00269          isort_float( 9 , aa ) ;
00270               if( ar[ii+joff] < aa[2] ) ar[ii+joff] = aa[2] ;
00271          else if( ar[ii+joff] > aa[6] ) ar[ii+joff] = aa[6] ;
00272       }
00273 
00274       /* do leading edge point (ii=0) */
00275 
00276       aa[0] = ajm[0] ; aa[1] = ajm[0] ; aa[2] = ajm[1] ;
00277       aa[3] = ajj[0] ; aa[4] = ajj[0] ; aa[5] = ajj[1] ;
00278       aa[6] = ajp[0] ; aa[7] = ajp[0] ; aa[8] = ajp[1] ;
00279       isort_float( 9 , aa ) ;
00280            if( ar[joff] < aa[2] ) ar[joff] = aa[2] ;
00281       else if( ar[joff] > aa[6] ) ar[joff] = aa[6] ;
00282 
00283       /* do trailing edge point (ii=nx-1) */
00284 
00285       aa[0] = ajm[nx-2] ; aa[1] = ajm[nx-1] ; aa[2] = ajm[nx-1] ;
00286       aa[3] = ajj[nx-2] ; aa[4] = ajj[nx-1] ; aa[5] = ajj[nx-1] ;
00287       aa[6] = ajp[nx-2] ; aa[7] = ajp[nx-1] ; aa[8] = ajp[nx-1] ;
00288       isort_float( 9 , aa ) ;
00289            if( ar[nx-1+joff] < aa[2] ) ar[nx-1+joff] = aa[2] ;
00290       else if( ar[nx-1+joff] > aa[6] ) ar[nx-1+joff] = aa[6] ;
00291    }
00292    return ;
00293 }

Variable Documentation

char AFNI_abohelp[1024]
 

Definition at line 150 of file afni.h.

char AFNI_tophelp[TOPSIZE]
 

Definition at line 149 of file afni.h.

Referenced by AFNI_make_widgets().

char* DRAWING_strings[]
 

Definition at line 1404 of file afni.h.

char* fim_opt_labels[]
 

Definition at line 737 of file afni.h.

Referenced by AFNI_new_fim_menu().

AF_options GLOBAL_argopt
 

Definition at line 79 of file afni.h.

Referenced by AFNI_crosshair_pop_CB(), AFNI_follower_dataset(), AFNI_init_niml(), AFNI_init_plugouts(), AFNI_initialize_view(), AFNI_make_wid2(), AFNI_marks_transform_CB(), AFNI_niml_redisplay_CB(), AFNI_parse_args(), AFNI_quit_CB(), AFNI_read_images(), AFNI_read_inputs(), AFNI_rescan_session_NEW(), AFNI_rescan_session_OLD(), AFNI_set_cursor(), AFNI_set_window_titles(), AFNI_setup_viewing(), AFNI_startup_timeout_CB(), AFNI_view_xyz_CB(), AFNI_write_dataset_CB(), CORD_main(), ENV_coorder(), ENV_leftisleft(), ENV_marksquality(), main(), MAIN_workprocess(), PLUTO_add_dset(), and RT_tell_afni_one().

AFNI_library_type GLOBAL_library
 

Definition at line 998 of file afni.h.

Referenced by AFNI_add_interruptable(), AFNI_add_timeseries(), AFNI_andersonville(), AFNI_brick_to_mri(), AFNI_choose_dataset_CB(), AFNI_crosshair_label(), AFNI_crosshair_pop_CB(), AFNI_do_many_writes(), AFNI_drive_add_overlay_color(), AFNI_drive_close_window(), AFNI_drive_open_graph_1D(), AFNI_drive_open_graph_xy(), AFNI_drive_open_plugin(), AFNI_drive_open_window(), AFNI_drive_pbar_rotate(), AFNI_drive_purge_memory(), AFNI_drive_rescan_controller(), AFNI_drive_save_jpeg(), AFNI_drive_set_dicom_xyz(), AFNI_drive_set_ijk(), AFNI_drive_set_pbar_all(), AFNI_drive_set_pbar_number(), AFNI_drive_set_pbar_sign(), AFNI_drive_set_spm_xyz(), AFNI_drive_set_threshnew(), AFNI_drive_set_threshold(), AFNI_drive_set_view(), AFNI_drive_set_xhairs(), AFNI_drive_switch_anatomy(), AFNI_drive_switch_function(), AFNI_drive_switch_session(), AFNI_equate_pbars(), AFNI_faceup(), AFNI_fimmer_compute(), AFNI_fimmer_execute(), AFNI_fimmer_pickort_CB(), AFNI_fimmer_pickref_CB(), AFNI_finalize_dataset_CB(), AFNI_finalize_read_palette_CB(), AFNI_finalize_read_sess_CB(), AFNI_finalize_read_Web_CB(), AFNI_finalsave_layout_CB(), AFNI_find_warp(), AFNI_force_adoption(), AFNI_gra_send_CB(), AFNI_ijk_lock_change_CB(), AFNI_imag_pop_CB(), AFNI_init_niml(), AFNI_initialize_view(), AFNI_jumpto_CB(), AFNI_lock_carryout(), AFNI_lock_change_CB(), AFNI_lock_clear_CB(), AFNI_lock_setall_CB(), AFNI_make_descendants_old(), AFNI_marks_transform_CB(), AFNI_misc_CB(), AFNI_new_fim_menu(), AFNI_open_panel(), AFNI_palette_tran_CB(), AFNI_parse_args(), AFNI_pbar_lock_carryout(), AFNI_plugin_button(), AFNI_process_interrupts(), AFNI_process_plugout(), AFNI_purge_dsets(), AFNI_range_lock_carryout(), AFNI_read_inputs(), AFNI_read_sess_CB(), AFNI_redisplay(), AFNI_register_fimfunc(), AFNI_register_nD_func_init(), AFNI_register_nD_function(), AFNI_rescan_all_CB(), AFNI_rescan_CB(), AFNI_rescan_session_NEW(), AFNI_rescan_session_OLD(), AFNI_rescan_timeseries_CB(), AFNI_set_cursor(), AFNI_set_func_autorange(), AFNI_set_func_range(), AFNI_set_func_resam(), AFNI_set_func_visible(), AFNI_splashup(), AFNI_startup_3dview(), AFNI_startup_layout_CB(), AFNI_startup_script_CB(), AFNI_thrdrag_lock_carryout(), AFNI_thresh_lock_carryout(), AFNI_time_lock_carryout(), AFNI_time_lock_change_CB(), AFNI_ts_in_library(), AFNI_update_all_surface_widgets(), AFNI_write_dataset_CB(), AFNI_write_many_dataset_CB(), CORD_main(), DSET_in_global_session(), dump_PBAR_palette_table(), ENV_coorder(), ENV_globalrange(), ENV_redraw_titles(), ENV_sesstrail(), F1D_init(), F2D_init(), GRA_opt_CB(), GRA_pick_xaxis_CB(), main(), MAIN_workprocess(), new_RT_input(), PLUG_choose_dataset_CB(), PLUG_choose_timeseries_CB(), PLUG_setup_widgets(), PLUG_startup_plugin_CB(), PLUGIN_imseq_getim(), PLUGIN_init(), PLUTO_add_dset(), PLUTO_beep(), PLUTO_dset_finder(), PLUTO_dset_redisplay_mode(), PLUTO_find_dset(), PLUTO_fixup_names(), PLUTO_force_rebar(), PLUTO_force_redisplay(), PLUTO_histoplot(), PLUTO_imseq_getim(), PLUTO_imseq_popup(), PLUTO_popup_dset_chooser(), PLUTO_popup_image(), PLUTO_prefix_ok(), PLUTO_scatterplot(), process_NIML_AFNI_dataset(), process_NIML_Node_ROI(), process_NIML_SUMA_ijk(), process_NIML_SUMA_ixyz(), process_NIML_SUMA_node_normals(), RCREND_imseq_getim(), RENAME_main(), REND_imseq_getim(), RT_registration_3D_realtime(), RT_start_dataset(), RT_tell_afni_one(), SPLASH_popup_image(), and VOLREG_main().

GLOBAL_num_dsets
 

Definition at line 999 of file afni.h.

Referenced by AFNI_read_inputs().

int INIT_bigscroll
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_seq_send_CB().

char* INIT_colovr[]
 

Definition at line 1958 of file afni.h.

int INIT_crosshair_color
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_make_wid2().

int INIT_crosshair_gap
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_make_wid2().

int INIT_fim_polort
 

Definition at line 1956 of file afni.h.

Referenced by AFNI_load_defaults().

float INIT_gamma
 

Definition at line 1949 of file afni.h.

int INIT_ignore
 

Definition at line 1952 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_parse_args().

char* INIT_labovr[]
 

Definition at line 1959 of file afni.h.

int INIT_marks1_color
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults().

int INIT_marks2_color
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults().

int INIT_marks_gap
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults().

int INIT_marks_size
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults().

int INIT_montage_periodic
 

Definition at line 1954 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_make_wid2().

int INIT_ncolovr
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_drive_add_overlay_color(), AFNI_load_defaults(), AFNI_process_setup(), main(), and SUMA_Get_AFNI_Default_Color_Maps().

int INIT_ngray
 

Definition at line 1934 of file afni.h.

int INIT_ovin_pos[NPANE_MAX+1][NPANE_MAX+1]
 

Definition at line 2037 of file afni.h.

Referenced by AFNI_load_defaults(), AFNI_setup_inten_pbar(), RCREND_setup_color_pbar(), REND_setup_color_pbar(), and SUMA_Get_AFNI_Default_Color_Maps().

int INIT_ovin_sgn[NPANE_MAX+1][NPANE_MAX+1]
 

Definition at line 2040 of file afni.h.

Referenced by AFNI_load_defaults(), AFNI_setup_inten_pbar(), RCREND_setup_color_pbar(), REND_setup_color_pbar(), and SUMA_Get_AFNI_Default_Color_Maps().

int INIT_panes_hide
 

Definition at line 2034 of file afni.h.

Referenced by AFNI_load_defaults(), RCREND_func_widgets(), and REND_func_widgets().

int INIT_panes_pos
 

Definition at line 2034 of file afni.h.

Referenced by AFNI_load_defaults(), RCREND_func_widgets(), and REND_func_widgets().

int INIT_panes_sgn
 

Definition at line 2034 of file afni.h.

Referenced by AFNI_load_defaults(), RCREND_func_widgets(), and REND_func_widgets().

int INIT_posfunc
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_parse_args().

int INIT_purge
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_parse_args().

float INIT_pval_pos[NPANE_MAX+1][NPANE_MAX+1]
 

Definition at line 2036 of file afni.h.

Referenced by AFNI_load_defaults(), AFNI_setup_inten_pbar(), RCREND_setup_color_pbar(), REND_setup_color_pbar(), and SUMA_Get_AFNI_Default_Color_Maps().

float INIT_pval_sgn[NPANE_MAX+1][NPANE_MAX+1]
 

Definition at line 2039 of file afni.h.

Referenced by AFNI_load_defaults(), AFNI_setup_inten_pbar(), RCREND_setup_color_pbar(), REND_setup_color_pbar(), and SUMA_Get_AFNI_Default_Color_Maps().

int INIT_resam_anat
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_make_wid2().

int INIT_resam_func
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_make_wid2().

int INIT_resam_thr
 

Definition at line 1934 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_make_wid2().

float INIT_resam_vox
 

Definition at line 1949 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_make_wid2().

int INIT_tlrc_big
 

Definition at line 1953 of file afni.h.

Referenced by AFNI_load_defaults(), and AFNI_parse_args().

int TTO_current
 

Definition at line 1753 of file afni.h.

Referenced by AFNI_imag_pop_CB(), and AFNI_talto_CB().

int TTO_labeled
 

Definition at line 1752 of file afni.h.

Referenced by AFNI_imag_pop_CB().

char* TTO_labels[TTO_COUNT]
 

Definition at line 1751 of file afni.h.

Referenced by AFNI_imag_pop_CB().

TTO_point TTO_list[TTO_COUNT]
 

Definition at line 1750 of file afni.h.

Referenced by AFNI_imag_pop_CB(), AFNI_talto_CB(), DRAW_make_widgets(), TT_whereami(), and TTRR_setup_widgets().

char* UNDERLAY_typestr[] [static]
 

Initial value:

   { "ULay underlay" , "OLay underlay" , "OLay@Thr underlay" }

Definition at line 101 of file afni.h.

 

Powered by Plone

This site conforms to the following standards: