1 #ifndef SUMA_XCOLBAR_INCLUDED 2 #define SUMA_XCOLBAR_INCLUDED 3 4 #define SUMA_CMAP_WIDTH 20 5 #define SUMA_CMAP_HEIGHT 300 6 #define SUMA_SCALE_SLIDER_WIDTH 18 7 #define SUMA_SCALE_WIDTH 70 8 #define SUMA_SCALE_HEIGHT SUMA_CMAP_HEIGHT 9 #define SUMA_CMAP_ORIGIN 0.0, 0.0, 0.0 10 #define SUMA_CMAP_TOPLEFT SUMA_CMAP_WIDTH, SUMA_CMAP_HEIGHT, 0.0 11 #define SUMA_CMAP_VIEW_FROM (2 * SUMA_CMAP_HEIGHT) 12 #define SUMA_CMAP_FOV_INITIAL 28.07249 /*!< 2 * atan((double)SUMA_CMAP_HEIGHT/2.0/(double)SUMA_CMAP_VIEW_FROM) * 180 * SUMA_PI , see labbook page 3 */ 13 #if 0 /* the old one */ 14 #define SUMA_RANGE_STRING(m_nel, m_i, m_str_min, m_str_max, m_range){ \ 15 int m_loc[2]; \ 16 if (SUMA_GetColRange(m_nel, m_i, m_range, m_loc)) { \ 17 sprintf(m_str_min, "%.2f %d", m_range[0], m_loc[0]); \ 18 sprintf(m_str_max, "%.2f %d", m_range[1], m_loc[1]); \ 19 } else { \ 20 sprintf(m_str_min, "??? ???"); \ 21 sprintf(m_str_max, "??? ???"); \ 22 } \ 23 } 24 #else 25 #define SUMA_RANGE_STRING(m_dset, m_i, m_str_min, m_str_max, m_str_minloc, m_str_maxloc, m_range){ \ 26 int m_loc[2]; \ 27 if (SUMA_GetDsetColRange(m_dset, m_i, m_range, m_loc)) { \ 28 SUMA_SurfaceObject *m_SOp = NULL; \ 29 char *m_idcode_str = NULL; \ 30 int m_N_Node=-1; \ 31 /* number of nodes of parent surface */ \ 32 m_idcode_str = NI_get_attribute(m_dset->ngr, "MeshParent_idcode"); /* obsolete */\ 33 if (!m_idcode_str) m_idcode_str = NI_get_attribute(m_dset->ngr, "domain_parent_idcode"); \ 34 if (m_idcode_str) { \ 35 m_SOp = SUMA_findSOp_inDOv(m_idcode_str, SUMAg_DOv, SUMAg_N_DOv); \ 36 if (m_SOp) { \ 37 m_N_Node = m_SOp->N_Node; \ 38 } \ 39 } \ 40 sprintf(m_str_min, "%s", MV_format_fval2(m_range[0], 7)); \ 41 sprintf(m_str_max, "%s", MV_format_fval2(m_range[1], 7)); \ 42 sprintf(m_str_minloc, "%d", SUMA_GetNodeIndex_FromNodeRow_s(m_dset, m_loc[0], m_N_Node)); \ 43 sprintf(m_str_maxloc, "%d", SUMA_GetNodeIndex_FromNodeRow_s(m_dset, m_loc[1], m_N_Node)); \ 44 } else { \ 45 sprintf(m_str_min, "???"); \ 46 sprintf(m_str_max, "???"); \ 47 sprintf(m_str_minloc, "???"); \ 48 sprintf(m_str_maxloc, "???"); \ 49 } \ 50 } 51 #endif 52 53 #define SUMA_XHAIR_STRING(v, str) {\ 54 sprintf(str,"%s, ", MV_format_fval2(v[0], 7)); \ 55 strcat(str, MV_format_fval2(v[1], 7)); \ 56 strcat(str, ", "); \ 57 strcat(str,MV_format_fval2(v[2], 7)); \ 58 } 59 60 #define SUMA_INSERT_CELL_STRING(TF, i, j, strng) { \ 61 if (TF->str_value) { \ 62 SUMA_STRING_REPLACE(TF->str_value[j*TF->Ni+i], strng);\ 63 } \ 64 XtVaSetValues (TF->cells[j*TF->Ni+i], XmNvalue, strng, NULL); \ 65 } 66 67 /* modifies a cell's value and marks it as modified 68 No callback is made*/ 69 #define SUMA_MODIFY_CELL_VALUE(TF, i, j, val) { \ 70 if (TF->type == SUMA_int || TF->type == SUMA_float) { \ 71 TF->cell_modified = j*TF->Ni+i; \ 72 TF->num_value[TF->cell_modified] = val; \ 73 SUMA_TableF_SetString(TF);\ 74 } else { \ 75 SUMA_SL_Err("Macro for numerical tables only"); \ 76 } \ 77 } 78 79 /* Like SUMA_MODIFY_CELL_VALUE, but cell_modified is reset to -1 */ 80 #define SUMA_INSERT_CELL_VALUE(TF, i, j, val) { \ 81 if (TF->type == SUMA_int || TF->type == SUMA_float) { \ 82 SUMA_MODIFY_CELL_VALUE(TF, i, j, val); \ 83 TF->cell_modified = -1; \ 84 } else { \ 85 SUMA_SL_Err("Macro also for numerical tables only"); \ 86 } \ 87 } 88 89 #define SUMA_GET_CELL_VALUE(TF, i, j, val) { \ 90 if (TF->type == SUMA_int || TF->type == SUMA_float) { \ 91 val = TF->num_value[j*TF->Ni+i]; \ 92 } else { \ 93 SUMA_SL_Err("Macro for numerical tables only"); \ 94 val = 0.0; \ 95 } \ 96 } 97 98 #define SUMA_SET_CELL_VALUE(TF, i, j, val) { \ 99 if (TF->type == SUMA_int) {\ 100 TF->num_value[j*TF->Ni+i] = (int)val; \ 101 } else if (TF->type == SUMA_float) { \ 102 TF->num_value[j*TF->Ni+i] = (float)val; \ 103 } else { \ 104 SUMA_SL_Err("Macro for numerical tables only"); \ 105 val = 0.0; \ 106 } \ 107 } 108 109 /*! 110 \brief retrieves the cell index using the cell's widget 111 */ 112 #define SUMA_WHICH_CELL(TF, w, Found) { \ 113 int m_nmx, m_i=0; \ 114 m_nmx = TF->Ni*TF->Nj; \ 115 Found = -1; \ 116 while (m_i<m_nmx) { \ 117 if (TF->cells[m_i] == w) { Found = m_i; m_i = m_nmx; } \ 118 ++m_i; \ 119 } \ 120 } 121 122 #define SUMA_CELL_ROW_COL_2_1D(m_TF, m_row, m_col) \ 123 ( ((m_TF) && (m_row) >= 0 && (m_row) < (m_TF)->Ni && \ 124 (m_col) >= 0 && (m_col) < (m_TF)->Nj) \ 125 ? (m_row)+(m_TF)->Ni*(m_col):-1 ) 126 127 #define SUMA_CELL_1D_2_ROW_COL(m_TF, m_n, m_row, m_col) {\ 128 (m_row) = (m_col) = -1; \ 129 if (((m_TF)) && (m_n) >= 0) { \ 130 (m_row) = (m_n) % (m_TF)->Ni; \ 131 (m_col) = (m_n) / (m_TF)->Ni; \ 132 if ((m_row) >= (m_TF)->Ni || (m_col) >= (m_TF)->Nj) {\ 133 (m_row) = (m_col) = -1; \ 134 }\ 135 } \ 136 } 137 138 /* scale size gets messed up, see afni_widg.c and afni.h's 139 FIX_SCALE_SIZE*/ 140 #define SUMA_FORCE_SCALE_HEIGHT(SurfCont) {\ 141 XtVaSetValues( SurfCont->thr_sc, XmNheight, SUMA_CMAP_HEIGHT-40, NULL ) ; \ 142 } 143 144 #define SUMA_FORCE_SLICE_SCALE_WIDTH(SurfCont) {\ 145 /* Not needed, if you have problems make it mirror SUMA_FORCE_SCALE_HEIGHT \ 146 for scales inside SurfCont->Ax_slc, Sa_slc, and Co_slc */ \ 147 } 148 149 #define SUMA_UPDATE_ALL_NODE_GUI_FIELDS(ado) {\ 150 SUMA_UpdateNodeNodeField(ado); \ 151 /* Now get the data values at that node */ \ 152 SUMA_UpdateNodeValField(ado); \ 153 /* now find that node in the colored list */ \ 154 SUMA_UpdateNodeLblField(ado); \ 155 } 156 157 /* Don't attempt to break up this string over multiple lines */ 158 #define SUMA_SHPINX_BREAK ".. container:: clearer\n\n .. image:: media/blank.jpg\n\n .. Preceding block is a trick to keep upcoming text from wrapping around the figures.\n\n" 159 160 /*! structure for holding table data for range setting */ 161 typedef struct { 162 SUMA_ALL_DO *ado; 163 SUMA_OVERLAYS *colp; 164 } SUMA_SRV_DATA; 165 166 SUMA_Boolean SUMA_isTopColPlane(SUMA_OVERLAYS *cp, SUMA_ALL_DO *ado); 167 SUMA_Boolean SUMA_isCurColPlane(SUMA_OVERLAYS *cp, SUMA_ALL_DO *ado); 168 SUMA_X_SurfCont *SUMA_ADO_Cont(SUMA_ALL_DO *ado); 169 SUMA_Boolean SUMA_ADO_ShowCurForeOnly(SUMA_ALL_DO *ado); 170 SUMA_ALL_DO *SUMA_Cont_ADO(SUMA_X_SurfCont *SurfCont); 171 SUMA_SurfaceObject *SUMA_Cont_SO(SUMA_X_SurfCont *SurfCont); 172 SUMA_OVERLAYS * SUMA_ADO_CurColPlane(SUMA_ALL_DO *ado); 173 SUMA_Boolean SUMA_isADO_Cont_Realized(SUMA_ALL_DO *ado); 174 SUMA_Boolean SUMA_isADO_Cont_Created(SUMA_ALL_DO *ado); 175 SUMA_Boolean SUMA_isTopColPlane(SUMA_OVERLAYS *cp, SUMA_ALL_DO *ado); 176 SUMA_Boolean SUMA_isCurColPlane(SUMA_OVERLAYS *cp, SUMA_ALL_DO *ado); 177 float *SUMA_ADO_DatumXYZ(SUMA_ALL_DO *ado, int isel, char *variant); 178 float *SUMA_GDSET_EdgeXYZ(SUMA_DSET *dset, int isel, char *variant, float *here); 179 SUMA_Boolean SUMA_GDSET_EdgeXYZ_eng(SUMA_DSET *dset, int isel, 180 char *variant, float *here); 181 SUMA_SurfaceObject *SUMA_GDSET_FrameSO(SUMA_DSET *dset); 182 SUMA_Boolean SUMA_GDSET_GMATRIX_Aff(SUMA_DSET *dset, double Aff[4][4], int I2X); 183 float *SUMA_GDSET_XYZ_Range(SUMA_DSET *dset, char *variant, float *here); 184 float *SUMA_GDSET_XYZ_Center(SUMA_DSET *dset, char *variant, float *here); 185 float *SUMA_GDSET_NodeXYZ(SUMA_DSET *dset, int node, char *variant, float *here); 186 SUMA_Boolean SUMA_GDSET_NodeXYZ_eng(SUMA_DSET *dset, int node, 187 char *variant, float *here); 188 SUMA_Boolean SUMA_TDO_PointXYZ_eng(SUMA_TractDO *tdo, int point, 189 int *BTP, float *here); 190 float *SUMA_TDO_PointXYZ(SUMA_TractDO *tdo, int point, int *BTP, float *here); 191 SUMA_Boolean SUMA_VO_PointXYZ_eng(SUMA_VolumeObject *vo, int point, 192 int *IJK, float *here); 193 float *SUMA_VO_PointXYZ(SUMA_VolumeObject *vo, int point, int *IJK, float *here); 194 SUMA_Boolean SUMA_MDO_PointXYZ_eng(SUMA_MaskDO *mo, int point, 195 int *IJK, float *here); 196 float *SUMA_MDO_PointXYZ(SUMA_MaskDO *mdo, int point, int *BTP, float *here); 197 char *SUMA_ADO_LDP(SUMA_ALL_DO *ado); 198 char * SUMA_ADO_Label(SUMA_ALL_DO *ado); 199 char * SUMA_ADO_CropLabel(SUMA_ALL_DO *ado, int len); 200 SUMA_Boolean SUMA_ADO_isLabel(SUMA_ALL_DO *ado, char *lbl); 201 char *SUMA_ADO_sLabel(SUMA_ALL_DO *ado); 202 char * SUMA_ADO_idcode(SUMA_ALL_DO *ado); 203 char * SUMA_ADO_Parent_idcode(SUMA_ALL_DO *ado); 204 SUMA_CIFTI_SAUX *SUMA_ADO_CSaux(SUMA_ALL_DO *ado); 205 SUMA_GRAPH_SAUX *SUMA_ADO_GSaux(SUMA_ALL_DO *ado); 206 SUMA_TRACT_SAUX *SUMA_ADO_TSaux(SUMA_ALL_DO *ado); 207 SUMA_MASK_SAUX *SUMA_ADO_MSaux(SUMA_ALL_DO *ado); 208 SUMA_SURF_SAUX *SUMA_ADO_SSaux(SUMA_ALL_DO *ado); 209 SUMA_VOL_SAUX *SUMA_ADO_VSaux(SUMA_ALL_DO *ado); 210 void *SUMA_ADO_Saux(SUMA_ALL_DO *ado); 211 void SUMA_cb_ShowCoSlice_toggled(Widget w, XtPointer data,XtPointer client_data); 212 int SUMA_SetShowSlice(SUMA_VolumeObject *vdo, char *variant, int val); 213 void SUMA_cb_ShowSaSlice_toggled(Widget w, XtPointer data,XtPointer client_data); 214 void SUMA_cb_ShowAxSlice_toggled(Widget w, XtPointer data,XtPointer client_data); 215 SUMA_DSET *SUMA_ADO_Dset(SUMA_ALL_DO *ado); 216 int SUMA_Anatomical_DOs(SUMA_DO *dov, int N_dov, int *rdov); 217 int SUMA_ADO_N_Datum(SUMA_ALL_DO *ado); 218 int SUMA_ADO_N_Datum_Lev(SUMA_ALL_DO *ado, SUMA_DATUM_LEVEL dtlvl); 219 int SUMA_ADO_Max_Datum_Index(SUMA_ALL_DO *ado); 220 int SUMA_ADO_Max_Datum_Index_Lev(SUMA_ALL_DO *ado, SUMA_DATUM_LEVEL dtlvl); 221 char * SUMA_ADO_variant(SUMA_ALL_DO *ado); 222 int SUMA_ADO_ColPlane_SelectedDatum(SUMA_ALL_DO *ado, SUMA_OVERLAYS *Sover); 223 int SUMA_ADO_SelectedDatum(SUMA_ALL_DO *ado, void *extra, void *extra2); 224 int SUMA_ADO_SelectedSecondary(SUMA_ALL_DO *ado); 225 SUMA_Boolean SUMA_is_ADO_Datum_Primitive(SUMA_ALL_DO *ado, 226 SUMA_COLID_OFFSET_DATUM *codf); 227 SUMA_Boolean SUMA_ADO_Set_SelectedDatum(SUMA_ALL_DO *ado, int sel, 228 void *extra, void *extra2); 229 int SUMA_ADO_N_Overlays(SUMA_ALL_DO *ado); 230 SUMA_OVERLAYS * SUMA_ADO_Overlay0(SUMA_ALL_DO *ado); 231 SUMA_OVERLAYS * SUMA_ADO_Overlay(SUMA_ALL_DO *ado, int i); 232 SUMA_OVERLAYS * SUMA_ADO_CurColPlane(SUMA_ALL_DO *ado); 233 SUMA_OVERLAYS ** SUMA_ADO_Overlays(SUMA_ALL_DO *ado, int *N_over); 234 SUMA_Boolean SUMA_ADO_Append_Overlay(SUMA_ALL_DO *ado, SUMA_OVERLAYS **over); 235 void SUMA_ShowMeTheChildren(Widget w); 236 void SUMA_UnmanageTheChildren(Widget w); 237 void SUMA_ManageTheChildren(Widget w); 238 void SUMA_DoForTheChildren(Widget w, int i, int lvl, int rec); 239 Widget SUMA_FindChildWidgetNamed(Widget w, char *name); 240 XImage *SUMA_cmap_to_XImage (Widget wid, SUMA_COLOR_MAP *cm); 241 void SUMA_DrawCmap(SUMA_COLOR_MAP *Cmap); 242 void SUMA_cmap_wid_display(SUMA_ALL_DO *ado); 243 void SUMA_cmap_context_Init(SUMA_ALL_DO *ado); 244 void SUMA_cmap_wid_graphicsInit (Widget w, XtPointer clientData, XtPointer call); 245 Boolean SUMA_cmap_wid_handleRedisplay(XtPointer clientData); 246 void SUMA_cmap_wid_postRedisplay(Widget w, XtPointer clientData, XtPointer call); 247 void SUMA_cmap_wid_expose(Widget w, XtPointer clientData, XtPointer call); 248 void SUMA_cmap_wid_resize(Widget w, XtPointer clientData, XtPointer call); 249 void SUMA_cmap_wid_input(Widget w, XtPointer clientData, XtPointer call); 250 unsigned char *SUMA_read_ppm(char *fname, int *width, int *height, int verb); 251 void SUMA_CreateCmapWidgets(Widget parent, SUMA_ALL_DO *ado); 252 void SUMA_cb_ColMap_Switch(Widget w, XtPointer clientData, XtPointer call); 253 int SUMA_SwitchCmap(SUMA_ALL_DO *ado, SUMA_COLOR_MAP *CM, int setmenu); 254 int SUMA_SwitchCmap_one(SUMA_ALL_DO *ado, SUMA_COLOR_MAP *CM, int setmenu); 255 int SUMA_SelectSwitchCmap_one( SUMA_ALL_DO *ado, SUMA_LIST_WIDGET *LW, 256 int ichoice, SUMA_Boolean CloseShop, int setmen); 257 int SUMA_SelectSwitchCmap( SUMA_ALL_DO *ado, SUMA_LIST_WIDGET *LW, 258 int ichoice, SUMA_Boolean CloseShop, int setmen); 259 int SUMA_SwitchColPlaneBrightness_one( 260 SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 261 int ind, int setmen); 262 int SUMA_SwitchColPlaneBrightness( 263 SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 264 int ind, int setmen); 265 void SUMA_cb_SwitchBrightness(Widget w, XtPointer clientData, XtPointer call); 266 int SUMA_SwitchColPlaneThreshold( 267 SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 268 int ind, int setmen); 269 int SUMA_SwitchColPlaneThreshold_one( 270 SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 271 int ind, int setmen); 272 void SUMA_cb_SwitchThreshold(Widget w, XtPointer clientData, XtPointer call); 273 int SUMA_SwitchColPlaneIntensity(SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 274 int ind, int setmen); 275 int SUMA_SwitchColPlaneIntensity_one ( 276 SUMA_ALL_DO *ado, 277 SUMA_OVERLAYS *colp, 278 int ind, int setmen); 279 void SUMA_cb_SwitchIntensity(Widget w, XtPointer clientData, XtPointer call); 280 SUMA_MenuItem *SUMA_FreeMenuVector(SUMA_MenuItem *menu, int Nels); 281 SUMA_MenuItem *SUMA_FormSwitchColMenuVector(SUMA_ALL_DO *ado, 282 int what, int *N_items); 283 void SUMA_set_cmap_options(SUMA_ALL_DO *ado, 284 SUMA_Boolean NewDset, SUMA_Boolean NewMap); 285 void SUMA_set_cmap_options_SO(SUMA_ALL_DO *ado, SUMA_Boolean NewDset, 286 SUMA_Boolean NewMap); 287 288 void SUMA_cb_SwitchCmap(Widget w, XtPointer client_data, XtPointer call); 289 SUMA_MenuItem *SUMA_FormSwitchCmapMenuVector(SUMA_COLOR_MAP **CMv, int N_maps); 290 void SUMA_cb_SelectSwitchCmap (Widget w, XtPointer client_data, XtPointer call); 291 void SUMA_cb_CloseSwitchCmap (Widget w, XtPointer client_data, XtPointer call); 292 SUMA_Boolean SUMA_CmapSelectList(SUMA_ALL_DO *ado, int type, int bringup); 293 SUMA_Boolean SUMA_SwitchColPlaneCmap(SUMA_ALL_DO *ado, SUMA_COLOR_MAP *CM); 294 SUMA_Boolean SUMA_SetCmapMenuChoice(SUMA_ALL_DO *ado, char *str); 295 int SUMA_GetListIchoice(XmListCallbackStruct *cbs, 296 SUMA_LIST_WIDGET *LW, 297 SUMA_Boolean *CloseShop); 298 void SUMA_cb_SelectSwitchInt ( 299 Widget w, XtPointer client_data, 300 XtPointer call_data); 301 void SUMA_cb_SelectSwitchThr ( 302 Widget w, XtPointer client_data, 303 XtPointer call_data); 304 void SUMA_cb_SelectSwitchBrt ( 305 Widget w, XtPointer client_data, 306 XtPointer call_data); 307 int SUMA_SelectSwitchDsetCol( 308 SUMA_ALL_DO *ado, 309 SUMA_LIST_WIDGET *LW, 310 int block, 311 int ichoice); 312 void SUMA_cb_CloseSwitchLst (Widget w, XtPointer client_data, XtPointer call); 313 void SUMA_SetScaleRange(SUMA_ALL_DO *ado, double range[2]); 314 int SUMA_set_threshold_one(SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 315 float *val); 316 int SUMA_set_threshold(SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 317 float *val); 318 void SUMA_cb_set_threshold(Widget w, XtPointer clientData, XtPointer call); 319 int SUMA_set_threshold_label(SUMA_ALL_DO *ado, float val, float val2); 320 void SUMA_optmenu_EV( Widget w , XtPointer cd , 321 XEvent *ev , Boolean *continue_to_dispatch ); 322 void SUMA_cb_SetCoordBias(Widget widget, XtPointer client_data, 323 XtPointer call_data); 324 SUMA_Boolean SUMA_RedisplayAllShowing(char *SO_idcode_str, 325 SUMA_SurfaceViewer *SVv, int N_SVv); 326 void SUMA_CreateSliceFields( Widget parent, 327 char *tit, char *hint, char *help, 328 int Nslc, char *var, SUMA_ALL_DO *ado, 329 void (*NewValueCallback)(void * data), void *cb_data, 330 SUMA_SLICE_FIELD *SF); 331 void SUMA_CreateTable( Widget parent, 332 int Ni, int Nj, 333 char *wname, 334 char **row_tit, char **col_tit, 335 char **row_hint, char **col_hint, 336 char **row_help, char **col_help, 337 int *cwidth, SUMA_Boolean editable, SUMA_VARTYPE type, 338 void (*NewValueCallback)(void * data), void *cb_data, 339 void (*TitLabelEVHandler)(Widget w , XtPointer cd , 340 XEvent *ev , Boolean *ctd), 341 void *TitLabelEVHandlerData, 342 void (*CellEVHandler)(Widget w , XtPointer cd , 343 XEvent *ev , Boolean *ctd), 344 void *CellEVHandlerData, 345 SUMA_TABLE_FIELD *TF); 346 void SUMA_TableF_cb_label_Modify (Widget w, XtPointer client_data, 347 XtPointer call_data); 348 void SUMA_TableF_SetString (SUMA_TABLE_FIELD * AF); 349 void SUMA_TableF_cb_label_change (Widget w, XtPointer client_data, 350 XtPointer call_data); 351 void SUMA_leave_TableField( Widget w , XtPointer client_data , 352 XEvent * ev , Boolean * continue_to_dispatch ); 353 void SUMA_SliceF_cb_mont_change ( Widget w, XtPointer client_data, 354 XtPointer call_data); 355 void SUMA_leave_SliceField( Widget w , XtPointer client_data , 356 XEvent * ev , Boolean * continue_to_dispatch ); 357 void SUMA_leave_MontField( Widget w , XtPointer client_data , 358 XEvent * ev , Boolean * continue_to_dispatch ); 359 int SUMA_SetRangeValueNew(SUMA_ALL_DO *ado, 360 SUMA_OVERLAYS *colp, 361 int row, int col, 362 float v1, float v2, 363 int setmen, 364 int redisplay, float *reset, 365 SUMA_NUMERICAL_UNITS num_units); 366 int SUMA_SetRangeValueNew_one(SUMA_ALL_DO *ado, 367 SUMA_OVERLAYS *colp, 368 int row, int col, 369 float v1, float v2, 370 int setmen, 371 int redisplay, float *reset, 372 SUMA_NUMERICAL_UNITS num_units); 373 void SUMA_cb_SetRangeValue (void *data); 374 int SUMA_SetClustValue(SUMA_ALL_DO *ado, 375 SUMA_OVERLAYS *colp, 376 int row, int col, 377 float v1, float v2, 378 int setmen, 379 int redisplay, float *reset); 380 int SUMA_SetClustValue_one(SUMA_ALL_DO *ado, 381 SUMA_OVERLAYS *colp, 382 int row, int col, 383 float v1, float v2, 384 int setmen, 385 int redisplay, float *reset); 386 void SUMA_cb_SetClustValue (void *data); 387 SUMA_Boolean SUMA_SetClustTableTit_one (SUMA_ALL_DO *ado, 388 SUMA_OVERLAYS *colp, int i, int j, int Button); 389 SUMA_Boolean SUMA_SetClustTableTit (SUMA_ALL_DO *ado, 390 SUMA_OVERLAYS *colp, int i, int j, int Button); 391 void SUMA_SetClustTableTit_EV ( Widget w , XtPointer cd , 392 XEvent *ev , Boolean *continue_to_dispatch ); 393 SUMA_Boolean SUMA_SetTableTitleButton1(SUMA_TABLE_FIELD *TF, int i, int j, 394 byte flag); 395 SUMA_TABLE_FIELD * SUMA_AllocTableField(char *wname); 396 SUMA_TABLE_FIELD * SUMA_FreeTableField(SUMA_TABLE_FIELD *TF); 397 SUMA_SLICE_FIELD * SUMA_AllocSliceField(char *wname); 398 SUMA_SLICE_FIELD * SUMA_FreeSliceField(SUMA_SLICE_FIELD *SF); 399 SUMA_VR_FIELD * SUMA_AllocVRField(char *wname); 400 SUMA_VR_FIELD * SUMA_FreeVRField(SUMA_VR_FIELD *VrF); 401 int SUMA_set_slice_label(SUMA_ALL_DO *ado, char *variant, float val); 402 int SUMA_set_slice_scale(SUMA_ALL_DO *ado, char *variant, float val); 403 void SUMA_cb_set_Ax_slice_label(Widget w, XtPointer clientData, XtPointer call); 404 void SUMA_cb_set_Sa_slice_label(Widget w, XtPointer clientData, XtPointer call); 405 void SUMA_cb_set_Co_slice_label(Widget w, XtPointer clientData, XtPointer call); 406 void SUMA_SliceF_SetString (SUMA_SLICE_FIELD * SF); 407 void SUMA_SliceF_cb_label_change ( Widget w, XtPointer client_data, 408 XtPointer call_data); 409 int SUMA_set_slice(SUMA_ALL_DO *ado, char *variant, float *valp, 410 char *caller, int redisp); 411 int SUMA_set_mont(SUMA_ALL_DO *ado, char *variant, 412 float *val1p, float *val2p, 413 char *caller, int redisp); 414 void SUMA_cb_set_Co_slice(Widget w, XtPointer clientData, XtPointer call); 415 void SUMA_cb_set_Sa_slice(Widget w, XtPointer clientData, XtPointer call); 416 void SUMA_cb_set_Ax_slice(Widget w, XtPointer clientData, XtPointer call); 417 SUMA_CELL_VARIETY SUMA_cellvariety (SUMA_TABLE_FIELD *TF, int n); 418 int SUMA_RowTitCell(SUMA_TABLE_FIELD *TF, int r); 419 int SUMA_ColTitCell(SUMA_TABLE_FIELD *TF, int c); 420 int SUMA_ObjectID_Row(SUMA_TABLE_FIELD *TF, char *id); 421 SUMA_Boolean SUMA_InitRangeTable(SUMA_ALL_DO *ado, int what); 422 SUMA_Boolean SUMA_InitClustTable(SUMA_ALL_DO *ado); 423 void SUMA_CreateXhairWidgets(Widget parent, SUMA_ALL_DO *ado); 424 void SUMA_CreateXhairWidgets_SO(Widget parent, SUMA_ALL_DO *ado); 425 void SUMA_CreateXhairWidgets_GLDO(Widget parent, SUMA_ALL_DO *ado); 426 void SUMA_CreateXhairWidgets_TDO(Widget parent, SUMA_ALL_DO *ado); 427 void SUMA_CreateXhairWidgets_CO(Widget parent, SUMA_ALL_DO *ado); 428 void SUMA_CreateXhairWidgets_VO(Widget parent, SUMA_ALL_DO *ado); 429 void SUMA_CreateXhairWidgets_MDO(Widget parent, SUMA_ALL_DO *ado); 430 SUMA_Boolean SUMA_UpdateXhairField(SUMA_SurfaceViewer *sv); 431 SUMA_Boolean SUMA_UpdateCrossHairNodeLabelField(SUMA_SurfaceViewer *sv); 432 void SUMA_XhairInput (void* data); 433 void SUMA_NodeInput (void* data); 434 void SUMA_GNodeInput (void *data); 435 void SUMA_SetCellEditMode(SUMA_TABLE_FIELD *TF, int i, int j, int Mode); 436 void SUMA_TriInput (void* data); 437 void SUMA_TpointInput(void*data); 438 void SUMA_IJKInput(void*data); 439 SUMA_Boolean SUMA_UpdateTriField(SUMA_SurfaceObject *SO); 440 SUMA_Boolean SUMA_UpdateNodeLblField(SUMA_ALL_DO *ADO); 441 SUMA_Boolean SUMA_UpdateNodeLblField_ADO(SUMA_ALL_DO *ADO); 442 char **SUMA_FormNodeValFieldStrings(SUMA_ALL_DO *ado, 443 SUMA_DSET *dset, int Node, 444 int find, int tind, int bind, int dec, 445 double *I, double *T, double *B); 446 SUMA_Boolean SUMA_GetNodeValsAtSelection(SUMA_ALL_DO *ado, 447 SUMA_DSET *dset, int Node, 448 int find, int tind, int bind, 449 double *I, double *T, double *B) ; 450 SUMA_Boolean SUMA_UpdateNodeValField(SUMA_ALL_DO *ado); 451 SUMA_Boolean SUMA_UpdateNodeNodeField(SUMA_ALL_DO *ado); 452 SUMA_Boolean SUMA_Init_SurfCont_CrossHair(SUMA_ALL_DO *ado); 453 void SUMA_cb_AbsThresh_tb_toggled (Widget w, XtPointer data, 454 XtPointer client_data); 455 void SUMA_cb_SymIrange_tb_toggled (Widget w, XtPointer data, 456 XtPointer client_data); 457 void SUMA_cb_ShowZero_tb_toggled (Widget w, XtPointer data, 458 XtPointer client_data); 459 void SUMA_cb_SetCmapMode(Widget widget, XtPointer client_data, 460 XtPointer call_data); 461 SUMA_Boolean SUMA_SetCmapMode(SUMA_ALL_DO *ado, int imenu); 462 void SUMA_cb_SetLinkMode(Widget widget, XtPointer client_data, 463 XtPointer call_data); 464 void SUMA_set_cmap_options_GLDO(SUMA_ALL_DO *ado, SUMA_Boolean NewDset, 465 SUMA_Boolean NewMap); 466 void SUMA_set_cmap_options_VO(SUMA_ALL_DO *ado, SUMA_Boolean NewDset, 467 SUMA_Boolean NewMap); 468 void SUMA_set_cmap_options_CO(SUMA_ALL_DO *ado, SUMA_Boolean NewDset, 469 SUMA_Boolean NewMap); 470 void SUMA_cb_Cmap_Load(Widget w, XtPointer data, XtPointer client_data); 471 SUMA_COLOR_MAP *SUMA_LoadCmapFile_eng(char *filename); 472 void SUMA_LoadCmapFile (char *filename, void *data); 473 SUMA_Boolean SUMA_Insert_Cmap_of_Dset(SUMA_DSET *dset); 474 void SUMA_CreateUpdatableCmapMenu(SUMA_ALL_DO *ado); 475 int SUMA_ThreshVal2ScalePos(SUMA_ALL_DO *ado, float *val); 476 int SUMA_SliceVal2ScalePos (SUMA_ALL_DO *ado, char *variant, float *val); 477 void SUMA_cb_SetScaleThr(void *data); 478 int SUMA_SetScaleThr_one(SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 479 float *val, int setmen, int redisplay); 480 int SUMA_SetScaleThr(SUMA_ALL_DO *ado, SUMA_OVERLAYS *colp, 481 float *val, int setmen, int redisplay); 482 SUMA_Boolean SUMA_DsetColSelectList( 483 SUMA_ALL_DO *ado, int type, 484 int refresh, int bringup); 485 SUMA_ASSEMBLE_LIST_STRUCT * SUMA_AssembleDsetColList(SUMA_DSET *dset); 486 void SUMA_UpdatePvalueField (SUMA_ALL_DO *ado, float thresh); 487 double SUMA_Pval2ThreshVal (SUMA_ALL_DO *ado, double pval); 488 SUMA_Boolean SUMA_UpdatePointField(SUMA_ALL_DO*ado); 489 SUMA_Boolean SUMA_UpdateNodeField(SUMA_ALL_DO *ado); 490 char *SUMA_GetLabelsAtSelection(SUMA_ALL_DO *ado, int node, int sec); 491 char *SUMA_GetLabelsAtSelection_ADO(SUMA_ALL_DO *ado, int node, int sec); 492 SUMA_Boolean SUMA_GetValuesAtSelection(SUMA_ALL_DO *ado, int fromtable, 493 float *I, float *T, float *B); 494 SUMA_Boolean SUMA_SetCmodeMenuChoice(SUMA_ALL_DO *ado, char *str); 495 SUMA_NIDO *SUMA_NodeLabelToTextNIDO (char *lbls, SUMA_ALL_DO *ado, 496 SUMA_SurfaceViewer *sv); 497 XmFontList SUMA_AppendToFontList(XmFontList fontlisti, Widget w, 498 char *fontname, char *tag); 499 500 /* the help strings */ 501 502 /* Surface Properties Block */ 503 #define SUMA_SurfContHelp_more \ 504 "Opens a dialog with detailed " \ 505 "information about the object in geek speak." 506 507 #define SUMA_SurfContHelp_RenderMode \ 508 "Choose the rendering mode for this surface.:LR:\n" \ 509 " Viewer: Surface's rendering mode is set " \ 510 ": :by the viewer's setting which can " \ 511 ": :be changed with the :ref:`'p'<LC_p>` option.:LR:\n" \ 512 " Fill: Shaded rendering mode.:LR:\n" \ 513 " Line: Mesh rendering mode.:LR:\n" \ 514 " Points: Points rendering mode.:LR:\n" 515 516 #define SUMA_SurfContHelp_VTransMode \ 517 "Set the transparency level for this set of slices to one of the " \ 518 "following options::LR:\n" \ 519 " Viewer: Surface's transparency is set " \ 520 " by the viewer's setting which can " \ 521 " be changed with the :ref:`o<LC_o>`, :ref:`O<UC_O>` options.:LR:\n"\ 522 " Only Cheesecloth transparency is allowed in "\ 523 " this setting.:LR:\n"\ 524 " A : Alpha blending. May look good, but not always "\ 525 " accurate.:LR:\n" \ 526 " 0 : No transparency, opaque.:LR:\n" \ 527 " ...:LR:\n" \ 528 " 16: Maximum transparency, invisibile:LR:\n" 529 530 #define SUMA_SurfContHelp_TransMode \ 531 "Set the transparency for this surface to one of the following " \ 532 "options.:LR:\n" \ 533 " Viewer: Surface's transparency is set " \ 534 " by the viewer's setting which can " \ 535 " be changed with the :ref:`o<LC_o>`, :ref:`O<UC_O>` options.:LR:\n" \ 536 " 0 : No transparency, opaque.:LR:\n" \ 537 " ...:LR:\n" \ 538 " 16: Maximum transparency, invisibile:LR:\n" 539 540 #define SUMA_SurfContHelp_DsetViewMode \ 541 "Choose the viewing mode for this dataset.:LR:\n" \ 542 " Col: Colours, only.:LR:\n" \ 543 " Con: Contours (slower), only.:LR:\n" \ 544 " C&C: Colours and Contours (slower), only.:LR:\n" \ 545 " XXX: Unfortunately nothing, only.:LR:\n" \ 546 " There is one contour created for each color " \ 547 " in the colormap. You'd want to use colormaps with " \ 548 " few colors to get a contour of use. " \ 549 " Contours are not created if colormap has panes " \ 550 " of unequal sizes.\n" 551 552 #define SUMA_SurfContHelp_DsetFont \ 553 "Choose the font size for labels of nodes.:LR:\n" \ 554 " 8: 8x13.:LR:\n" \ 555 " 9: 9x15.:LR:\n" \ 556 " TR10: Times New Roman 10.:LR:\n" \ 557 " HE10: Helvetica 10.:LR:\n" \ 558 " HE12: Helvetica 12.:LR:\n" \ 559 " HE18: Helvetica 18.:LR:\n" \ 560 " TR24: Times New Roman 24.:LR:\n" \ 561 " XXX: Show no text.:LR:\n" 562 563 #define SUMA_SurfContHelp_DsetNodeRad \ 564 "Choose the radius sizing for nodes of this graph dataset.:LR:\n" \ 565 " Const: All nodes have a radius of 1 x Gain.:LR:\n" \ 566 " Val: Nodes size equals its dset value x Gain. A node's dset"\ 567 "value is that of the edge connecting the node to itself:LR:\n" \ 568 " XXX: Show no balls.:LR:\n" 569 570 #define SUMA_SurfContHelp_DsetThrough \ 571 "When a node, rather than an edge is :ref:`selected<Selecting_Objects>`, "\ 572 "choose how connections to it are displayed.:LR:\n" \ 573 " Edg: Show connections to selected node with edges, either straight "\ 574 "lines or with bundles.:LR:\n" \ 575 " Col: Show connections to selected node by changing the colors of "\ 576 "the connecting nodes, based on edge value. Edges are not displayed. "\ 577 "the idea here is to reduce the clutter of the display, while still "\ 578 "allowing you to visualize connection strength to one node at a time.:LR:\n"\ 579 " Rad: Show connections to selected node by changing the radius of the "\ 580 "connecting nodes, based on edge value. Edges are not displayed in this "\ 581 "mode also.:LR:\n"\ 582 " CaR: Both Col and Rad:LR:\n"\ 583 " XXX: Do nothing special, keep showing whole graph, even when "\ 584 "selecting a graph node.:LR:\n" 585 586 #define SUMA_SurfContHelp_DsetEdgeThick \ 587 "Choose the thickness for edges of this graph dataset.:LR:\n" \ 588 " Const: All nodes have a radius of 1 x Gain.:LR:\n" \ 589 " Val: Edge size equals its dset value x Gain:LR:\n" 590 591 #define SUMA_SurfContHelp_TractStyle \ 592 "Choose the line drawing style.:LR:\n" \ 593 " Digits specify number of pixels to mask out of each 16 pixels:LR:\n"\ 594 " 1 : One pixel/16 off, almost solid:LR:\n" \ 595 " ...:LR:\n" \ 596 " 15: 15/16 pixels off, almost invisible:LR:\n" \ 597 " HDE: Hide all the tracts:LR:\n" \ 598 " SLD: No stippling, solid line.:LR:\n" 599 600 #define SUMA_SurfContHelp_DsetEdgeStip \ 601 "Choose the stippling for edges of this graph dataset.:LR:\n" \ 602 " 1 : One pixel/16 off, almost solid:LR:\n" \ 603 " ...:LR:\n" \ 604 " 15: 15/16 pixels off, almost invisible:LR:\n" \ 605 " Val: Set stippling based on the dset value:LR:\n" \ 606 " XXX: No stippling, solid line.:LR:\n" 607 608 #define SUMA_SurfContHelp_DsetAlphaVal \ 609 "Choose the method for assigning an alpha value (A) to a voxel's color.:LR:\n" \ 610 " Avg : A = average of R, G, B values:LR:\n" \ 611 " Max : A = maximum of R, G, B values:LR:\n" \ 612 " Min : A = minimum of R, G, B values:LR:\n" \ 613 " I : A is based on I selection. I range parameters apply :LR:\n" \ 614 " T : A is based on T selection. Full range is used.:LR:\n" \ 615 " B : A is based on B selection. B range parameters apply:LR:\n" \ 616 " XXX: A is set to 0, nothing will show.:LR:\n" 617 618 #define SUMA_SurfContHelp_TractMask \ 619 "That's not the name of the button, but its default value. "\ 620 "This menu controls how tracts that fall outside of the masks are "\ 621 "displayed::LR:\n"\ 622 " Hde: Hide 'em masked tracts:LR:\n" \ 623 " Gry: Gray 'em masked tracts (gray color set by"\ 624 " :ref:`Gry<TractCont->Coloring_Controls->Gry>` arrow field):LR:\n"\ 625 " One: A coding mistake that ended up looking cool. Each tract not in "\ 626 "the mask is colored by one color extracted from the set of colors for the"\ 627 " whole network.:LR:\n"\ 628 " Ign: Ignore 'em good for nothing masks, show tracts in all their"\ 629 " unabashed glory:LR:\n" 630 631 #define SUMA_SurfContHelp_TractMaskGray \ 632 "Set the gray level for masked tracts. 0 for black, 100 for white\n" \ 633 " This arrow field only has an effect when 'Msk' menu is set to 'Gry'\n" \ 634 635 #define SUMA_SurfContHelp_DsetNodeCol \ 636 "Choose the colorization method for nodes of this dataset.:LR:\n" \ 637 " White: Alle weiss.:LR:\n" \ 638 " Black: Tutti nero.:LR:\n" \ 639 " Red: Sve crveno.:LR:\n" \ 640 " Green: Killon akhdar.:LR:\n" \ 641 " Blue: Tous bleu.:LR:\n" \ 642 " Yellow: Todos amarillo.:LR:\n" \ 643 " Gray50: Not there yet.:LR:\n" \ 644 " Val: Nodes color is based its dset value and the chosen colormap:LR:\n" 645 646 #define SUMA_SurfContHelp_DsetTxtShad \ 647 "Choose the variants for how labels are handled.:LR:\n" \ 648 " T : Text shown unless more than 50% occluded.:LR:\n" \ 649 " Ts: Foreground text bright, occluded text shaded:LR:\n" \ 650 " B : Text shown with background box unless more than 50% occluded:LR:\n" \ 651 " Bs: Foreground text with background, occluded text shaded:LR:\n" \ 652 " Ta: All text shown, occlusions be damned.:LR:\n"\ 653 " Ba: All text shown with background, damn the torpedoes.:LR:\n" 654 655 #define SUMA_SurfContHelp_DsetGmatBord \ 656 "Choose the partition ratio of the matrix border. This option only applies to the matrix display of the graph.:LR:\n" \ 657 " XX: No partition.:LR:\n" \ 658 " 5: Border is 1/5 of cell width.:LR:\n" \ 659 " 10: Border is 1/10 of cell width.:LR:\n" \ 660 " 20: Border is 1/20 of cell width.:LR:\n" \ 661 " 30: Border is 1/30 of cell width.:LR:\n" \ 662 " 40: Border is 1/40 of cell width.:LR:\n" 663 664 #define SUMA_SurfContHelp_Dsets \ 665 "Show/Hide Dataset (previously Color Plane) controllers" 666 667 #define SUMA_SurfContHelp_Xhr \ 668 "Set/Get crosshair location in mm :term:`RAI` on\n" \ 669 "this controller's selected object.\n" \ 670 "Entering new coordinates \n" \ 671 "makes the crosshair jump\n" \ 672 "to that location (like :ref:`'ctrl+j' <LC_Ctrl+j>`).\n" \ 673 "Use :ref:`'alt+l'<LC_Alt+l>` to center the\n" \ 674 "cross hair in your viewer." 675 676 #define SUMA_SurfContHelp_Node \ 677 "Index of node in focus (1) and :term:`RAI` coordinates " \ 678 "of that node (2).:LR:\n" \ 679 "1- The index is of the node in focus on this controller's " \ 680 "surface. Nodes in focus are " \ 681 "highlighted by the blue sphere " \ 682 "in the crosshair.\n" \ 683 "This cell is editable; manually entering a new node's index " \ 684 "will put that node in focus " \ 685 "and send the crosshair to its " \ 686 "location (like :ref:`'j' <LC_j>`). " \ 687 "Use :ref:`'alt+l' <LC_Alt+l>` to center the " \ 688 "cross hair in your viewer.:LR:\n" \ 689 "2- The :term:`RAI` coordinates are those of the surface node after all spatial transformations have been applied to the surface. Those transformations do not include visualization transformations applied in the viewer" 690 691 #define SUMA_SurfContHelp_GNode \ 692 "Index of the node closest to the selection location on the edge's " \ 693 "representation.:LR:\n"\ 694 "*NOTE* that a node is also an edge that starts and ends at the same"\ 695 "node. Think diagonal elements of a connectivity matrix." 696 697 #define SUMA_TractContHelp_I \ 698 "Set/Get the :term:`1D index` of the selected elementary tract datum: "\ 699 "the infinitesimal point.\n" 700 701 #define SUMA_SurfContHelp_I \ 702 "Set/Get the :term:`1D index` of the selected elementary surface datum: "\ 703 "the node.\n" 704 705 #define SUMA_GraphContHelp_I \ 706 "Set/Get the :term:`1D index` of the selected elementary surface datum: "\ 707 "the edge.\n" 708 709 #define SUMA_VolContHelp_I \ 710 "Set/Get the :term:`1D index` of the selected elementary surface datum: "\ 711 "the voxel.\n" 712 713 #define SUMA_SurfContHelp_BTP \ 714 "Set/Get the triplet of indices for the selection on the displayed tracts.\n"\ 715 " The 1st index is that of the selected :term:`bundle` in the network:LR:\n"\ 716 " The second is for the selected :term:`tract` in that bundle:LR:\n" \ 717 " The third is the index of the :term:`point` selected along that tract.:LR:\n" 718 719 #define SUMA_SurfContHelp_IJK \ 720 "Triplet of indices (I) of selected voxel.\n" \ 721 "The mm RAI coordinate X = M I with M being the matrix transforming\n" \ 722 "voxel indices to voxel coordinates.\n" 723 724 725 #define SUMA_SurfContHelp_Tri \ 726 "1- Triangle (faceset) index of " \ 727 "triangle in focus on this " \ 728 "on this controller's surface.\n" \ 729 "Triangle in focus is highlighted " \ 730 "in gray, and entering a new triangle's " \ 731 "index will set a new triangle in " \ 732 "focus (like :ref:`'J'<UC_j>`).:LR:\n" \ 733 "2- Indices of nodes forming triangle.:LR:\n" 734 735 #define SUMA_SurfContHelp_GEdge \ 736 "1- Edge/Cell Index: Get/Set index of :term:`edge`/:term:`cell` in focus on "\ 737 "this controller's graph. This number is the :term:`1D index` of the edge/cell "\ 738 "in the graph/matrix. Consider it the equivalent of a voxel 1D index in "\ 739 "a volume, or a node in a surface dataset. \n" \ 740 "Entering a new edge's index will put that edge in focus and send the "\ 741 "crosshair to its center (like :ref:`j<LC_j>`). "\ 742 "Use :ref:`alt+l<LC_Alt+l>` to center the cross hair in your viewer.:LR:\n" \ 743 "Note that an edge can be formed by a pair of identical nodes - think "\ 744 "matrix diagonal.:LR:\n"\ 745 "2- Nodes Forming Directed Edge/Cell: For a cell, this would its pair of "\ 746 "row and column indices into the matrix. For a graph, this would be the "\ 747 "indices of the :term:`nodes` forming the directed edge." 748 749 #define SUMA_SurfContHelp_NodeValTblr0 \ 750 "Data values at node in focus" 751 #define SUMA_SurfContHelp_GEdgeValTblr0 \ 752 "Data values at edge in focus. :term:`Intensity`, "\ 753 ":term:`Threshold`, and :term:`Brightness` show the triplets of values "\ 754 " at the selected edge that correspond to the graph/matrix choices." \ 755 "in :ref:`I<VolCont->Dset_Mapping->I>`, :ref:`T<VolCont->Dset_Mapping->T>`, and :ref:`B<VolCont->Dset_Mapping->B>` selectors." 756 757 #define SUMA_SurfContHelp_NodeValTblc0 \ 758 "Data values at node in focus. :term:`Intensity`, "\ 759 ":term:`Threshold`, and :term:`Brightness` show the triplets of values "\ 760 " at the selected node that correspond to the dataset column choices " \ 761 "in :ref:`I<SurfCont->Dset_Mapping->I>`, :ref:`T<SurfCont->Dset_Mapping->T>`, and :ref:`B<SurfCont->Dset_Mapping->B>` selectors." 762 763 764 #define SUMA_TractContHelp_NodeValTblc0 \ 765 "Data values at point in focus. At the moment, :term:`Intensity`, "\ 766 ":term:`Threshold`, and :term:`Brightness` show the RGB values for the point "\ 767 "selected. Eventually, they would represent the triplets of values at the point"\ 768 " that correspond to the dataset column choices in :term:`I`, :term:`T`,"\ 769 " :term:`B`." 770 771 #define SUMA_VolContHelp_NodeValTblc0 \ 772 "Data values at voxel in focus. :term:`Intensity`, "\ 773 ":term:`Threshold`, and :term:`Brightness` show the triplets of values "\ 774 " at the selected voxel that correspond to the volume column choices " \ 775 "in :ref:`I<VolCont->Dset_Mapping->I>`, :ref:`T<VolCont->Dset_Mapping->T>`, and :ref:`B<VolCont->Dset_Mapping->B>` selectors." 776 777 #define SUMA_SurfContHelp_GEdgeValTblc0 \ 778 SUMA_SurfContHelp_GEdgeValTblr0 779 780 #define SUMA_SurfContHelp_NodeValTblc1 \ 781 "Intensity (I) value" 782 #define SUMA_SurfContHelp_GEdgeValTblc1\ 783 "Intensity (I) value" 784 785 #define SUMA_SurfContHelp_NodeValTblc2 \ 786 "Threshold (T) value" 787 #define SUMA_SurfContHelp_GEdgeValTblc2\ 788 "Threshold (T) value" 789 790 #define SUMA_SurfContHelp_NodeValTblc3 \ 791 "Brightness modulation (B) value" 792 #define SUMA_SurfContHelp_GEdgeValTblc3 \ 793 "Brightness modulation (B) value" 794 795 #define SUMA_SurfContHelp_NodeLabelTblr0 \ 796 "Labels available at the selected datum.\n" \ 797 "If nothing is available, datum color\n" \ 798 "is displayed." 799 800 #define SUMA_TractContHelp_NodeLabelTblr0 \ 801 "Labels at selected point. For now, nothing more than a regurgitation " \ 802 "of :ref:`BTP<TractCont->Xhair_Info->BTP.r00>`" 803 804 #define SUMA_SurfContHelp_GEdgeLabelTblr0\ 805 "Labels from the selected graph dataset\n" \ 806 "at the edge in focus.\n" \ 807 "If no labels are available, edge color\n" \ 808 "is displayed." 809 810 #define SUMA_SurfContHelp_DsetLblTblr0 \ 811 "Label of dataset currently selected. Note that for some objects, "\ 812 "like surfaces, what you're viewing "\ 813 "at any moment maybe a blend of multiple datasets. See "\ 814 ":ref:`color mixing<ColorMixing>` for details." 815 816 #define SUMA_SurfContHelp_DsetLblTblr1 \ 817 "Parent surface of Dset." 818 819 #define SUMA_SurfContHelp_DsetOrd \ 820 "Order of Dset's colorplane in the stack of all colorplanes of the parent surface.\n" \ 821 "The datset with highest order number is \n" \ 822 "on top of the stack. Separate \n" \ 823 ":ref:`stacks<Plane_Layering>` exist for foreground (fg:)\n" \ 824 "and background planes (bg:).:LR:\n" \ 825 ":SPX:See :ref:`Color Mixing<ColorMixing>` for details on how colors "\ 826 "are merged.:SPX:" 827 828 #define SUMA_TractContHelp_DsetOrd \ 829 "Order of this tract's dataset colorplane in the stack of all colorplanes available.\n" \ 830 "The datset with highest order number is \n" \ 831 "on top of the stack.\n" \ 832 ":SPX:See :ref:`color plane grouping <Color_Plane_Grouping>` for details "\ 833 "on how colors are merged.:SPX:" 834 835 #define SUMA_SurfContHelp_DsetAlphaThresh \ 836 "Alpha threshold of Dset's rendered slices.\n" \ 837 "When datasets' voxels get colored, they get an Alpha (A) value\n"\ 838 "in addition to the R, G, B values. A is computed based on\n"\ 839 "the setting of the 'Avl' menu.\n"\ 840 "Voxels (or more precisely, their openGL realization) \n" \ 841 "with Alpha lower than this value will not get rendered.\n" \ 842 "This is another way to 'threshold' a rendered volume, and \n" \ 843 "is comparable to thresholding with the slider bar if using a\n"\ 844 "monochromatic increasingly monotonic colormap with 'Avl' set to\n"\ 845 "one of Max, Min, or Avg.\n" \ 846 "Note that thresholding with the slider bar sets A for thresholded \n" \ 847 "voxels to 0.0 regardless of the setting for 'Avl'.\n" \ 848 "Thresholding with Ath is faster than using the slider bar because \n" \ 849 "it does not require recreating the whole texture." 850 851 #define SUMA_SurfContHelp_ArrowFieldMenu \ 852 "For datasets with sub-bricks exceeding what you have\n" \ 853 "set in environment variable SUMA_ArrowFieldSelectorTrigger\n"\ 854 "the menu selection switches to this format." 855 856 #define SUMA_SurfContHelp_DsetOpa \ 857 "Opacity of Dset's colorplane.\n" \ 858 "Opaque planes have an opacity\n" \ 859 "of 1, transparent planes have\n" \ 860 "an opacity of 0. \n" \ 861 "Opacities are used when mixing\n" \ 862 "planes within the same :ref:`group<Color_Plane_Grouping>` \n" \ 863 "foreground (fg:) or background(bg:).\n" \ 864 "\n" \ 865 "Opacity values are not applied\n" \ 866 "to the first plane in a group.\n" \ 867 "Consequently, if you have just\n" \ 868 "one plane to work with, opacity \n" \ 869 "value is meaningless.\n" \ 870 "\n" \ 871 "Color mixing can be done in two \n" \ 872 "ways, use :ref:`F7<F7>` to toggle between \n" \ 873 "mixing modes.\n" 874 875 #define SUMA_TractContHelp_DsetOpa \ 876 "Opacity of Dset's colorplane.\n" \ 877 "Opaque planes have an opacity\n" \ 878 "of 1, transparent planes have\n" \ 879 "an opacity of 0. \n" \ 880 "\n"\ 881 "Opacity values are not applied\n" \ 882 "to the first plane in a group.\n" \ 883 "Consequently, if you have just\n" \ 884 "one plane to work with, or you have "\ 885 ":ref:`1<TractCont->Coloring_Controls->1>` ON, \n"\ 886 "the opacity value is meaningless.\n" \ 887 "\n" \ 888 "Color mixing can be done in two \n" \ 889 "ways, use :ref:`F7<F7>` to toggle between \n" \ 890 "mixing modes.\n" 891 892 #define SUMA_SurfContHelp_DsetDim \ 893 "Dimming factor to apply to colormap\n" \ 894 "before mapping the intensity (I) data.\n" \ 895 "The colormap, if displayed on the right,\n" \ 896 "is not visibly affected by Dim but the\n" \ 897 "colors mapped onto the surface, voxel grid, tracts, etc. are.\n" \ 898 "For RGB Dsets (e.g. .col files, or tract colors), Dim is\n" \ 899 "applied to the RGB colors directly.:LR:\n" \ 900 "Decreasing Dim is useful when the colors are too saturated\n" \ 901 "for lighting to reflect the object terrain.\n" \ 902 "When in doubt, just press the button and see what happens." \ 903 904 #define SUMA_SurfContHelp_DsetNodeRadGain \ 905 "Gain to apply to node radius.\n" \ 906 "This multiplier is always applied to whatever\n" \ 907 "radius value the node gets, whether is it constant\n" \ 908 "or data derived.\n" 909 910 #define SUMA_SurfContHelp_DsetEdgeThickGain \ 911 "Gain to apply to edge thickness.\n" \ 912 "This multiplier is always applied to whatever\n" \ 913 "thickness value the edge gets, whether is it constant\n" \ 914 "or data derived.\n" 915 916 #define SUMA_SurfContHelp_DsetView \ 917 "View (ON)/Hide Dset node colors" 918 919 #define SUMA_SurfContHelp_DsetViewOne \ 920 "If ON, view only the selected\n"\ 921 "Dset's colors. No mixing of colors in the\n"\ 922 "foreground stack is done.\n" \ 923 "\n" \ 924 "If OFF, then mix the color planes\n" \ 925 "in the foreground stack.\n" \ 926 "\n" \ 927 "This option makes it easy to view \n" \ 928 "one Dset's colors at a time without\n" \ 929 "having to worry about color mixing,\n" \ 930 "opacity, and stacking order.\n" \ 931 "\n" \ 932 "Needless to say, options such as\n" \ 933 "'Ord:' and 'Opa:' in this panel are \n" \ 934 "of little use when this button is ON." 935 936 #define SUMA_TractContHelp_DsetViewOne \ 937 "If ON, view only the selected\n"\ 938 "Dset's colors.\n" \ 939 "\n" \ 940 "If OFF, then mix the color planes\n" \ 941 "in the datasets stack.\n" \ 942 "\n" \ 943 "This option makes it easy to view \n" \ 944 "one Dset's colors at a time without\n" \ 945 "having to worry about color mixing,\n" \ 946 "opacity, and stacking order.\n" \ 947 "\n" \ 948 "Needless to say, options such as\n" \ 949 "'Ord:' and 'Opa:' in this panel are \n" \ 950 "of little use when this button is ON." 951 952 #define SUMA_SurfContHelp_DsetSwitch \ 953 "Switch between datasets." 954 955 #define SUMA_TractContHelp_DsetSwitch \ 956 "Select the dataset to which the Coloring Controls are being applied. For now "\ 957 "you have three free RGB datasets per network that are created by SUMA. In the"\ 958 " first one each node of a tract is colored based on the local orientation, "\ 959 "with red, green, and blue values reflecting the X,Y, and Z components of the"\ 960 " unit direction vector. In the second dataset all nodes of a tract are "\ 961 "assigned the color of the middle node of that tract. In the third dataset, all"\ 962 " nodes of a tract are colored based on the bundle in which that tract"\ 963 " resides.The number of colors in such a dataset depend on the total number of"\ 964 " bundles in the entire network." 965 966 #define SUMA_SurfContHelp_SetThreshTblr0 \ 967 "Set/Get the threshold value.\n" \ 968 "When statistical parameters are set under "\ 969 ":ref:`T <VolCont->Dset_Mapping->T>`, you can \n" \ 970 "append a 'p' to set by the p value, as in 0.001p.:LR:\n" \ 971 "For percentile thresholding, append a '%' to "\ 972 "the value, such as 25%\n" 973 974 #define SUMA_SurfContHelp_MasksLoad \ 975 "Load a set of masks previously saved by my neighboring button. The save "\ 976 "operation also preserves the :ref:`Mask Eval<MaskCont->Masks->Mask_Eval.r00>` "\ 977 "expression.:LR:\nReloading a mask file will replace current masks." 978 979 #define SUMA_SurfContHelp_MasksSave \ 980 "Save current set of masks for future loading by my neighborly button.\n" 981 982 #define SUMA_SurfContHelp_DsetLoad \ 983 "Load a new dataset (Dset).\n" \ 984 "Datasets can be of 3 formats::LR:\n" \ 985 "1- NIML (.niml.dset): " \ 986 ": :This format is internal " \ 987 ": :to AFNI/SUMA. :LR:\n" \ 988 "2- GIFTI (.gii.dset):"\ 989 ": :The format to end all formats.:LR:\n" \ 990 "3- 1D (.1D.dset): " \ 991 ": :Simple ASCII tabular format " \ 992 ": :supporting numerical values " \ 993 ": :only.\n" \ 994 " Each row i contains Nj data " \ 995 ": :values per node." \ 996 ": :Since this format has no header" \ 997 ": :associated with it, it makes" \ 998 ": :some assumption about the data" \ 999 ": :in the columns. :LR:\n" \ 1000 " You can choose from 3 options: \n" \ 1001 ": :(see below for nomenclature):LR:\n" \ 1002 " - Each column has Ni values where\n" \ 1003 ": :Ni = N_Node. \n" \ 1004 ": :In this case, it is assumed that\n" \ 1005 ": :row i has values for node i on\n" \ 1006 ": :the surface.\n" \ 1007 " - If Ni is not equal to N_Node then\n" \ 1008 ": :SUMA will check to see if column 0\n" \ 1009 ": :(Col_0) is all integers with values\n" \ 1010 ": :v satisfying: 0 <= v < N_Node .\n" \ 1011 " If that is the case then column 0\n" \ 1012 ": :contains the node indices. The values\n" \ 1013 ": :in row j of Dset are for the node\n" \ 1014 ": :indexed Col_0[j].\n" \ 1015 " In the sample :term:`1D` Dset shown below\n" \ 1016 ": :assuming N_Node > 58, SUMA\n" \ 1017 ": :will consider the 1st column to \n" \ 1018 ": :contain node indices. In that case\n" \ 1019 ": :the values -12.1 and 0.9 are for \n" \ 1020 ": :node 58 on the surface.\n" \ 1021 " - Lastly, if Col_0 fails the node index\n" \ 1022 ": :test, then SUMA considers the data\n" \ 1023 ": :in row i to be associated with node i.\n" \ 1024 "\n" \ 1025 " If you're confused, try creating some\n" \ 1026 ": :toy datasets like the one below and \n" \ 1027 ": :load them into SUMA.\n" \ 1028 "\n" \ 1029 " Sample 1D Dset (Call it pickle.1D.dset):\n" \ 1030 " 25 22.7 1.2 \n" \ 1031 " 58 -12.1 0.9 \n" \ 1032 "\n" \ 1033 " Nomenclature and conventions:\n" \ 1034 " - N_Node is the number of nodes\n" \ 1035 ": :forming the surface.\n" \ 1036 " - Indexing always starts at 0.\n" \ 1037 ": :In the example, value v at \n" \ 1038 ": :row 0, column 1 is v = 22.7 .\n" \ 1039 " - A Dset has Ni rows and Nj columns.\n" \ 1040 ": :In other terms, Ni is the number\n" \ 1041 ": :of values per node and Nj is the\n" \ 1042 ": :number of nodes for which data are\n" \ 1043 ": :specified in Dset.\n" \ 1044 ": :Ni = 2, Nj = 3 in the example." 1045 1046 #define SUMA_SurfContHelp_DsetLoadCol \ 1047 "Load a new color plane.\n" \ 1048 "A color plane is a :term:`1D` text file with \n" \ 1049 "each row formatted as such:LR:\n" \ 1050 " n r g b:LR:\n" \ 1051 "where n is the node index, \n" \ 1052 "r, g, and b are the red, green and blue\n" \ 1053 "color values, respectively. \n" \ 1054 "Color values must be between 0 and 1.0. \n" \ 1055 "A sample file would be: test.1D.col with content:LIT:\n" \ 1056 " 0 0.1 0.2 1 \n" \ 1057 " 1 0 1 0.8 \n" \ 1058 " 4 1 1 1 \n" \ 1059 " 7 1 0 1 \n" \ 1060 " 14 0.7 0.3 0 " 1061 1062 1063 #define SUMA_SurfContHelp_SelInt \ 1064 "Use this menu to select which column (:term:`sub-brick`) in the " \ 1065 "dataset (Dset) should be used for an Intensity (I)" \ 1066 "measure.\n" \ 1067 "\n" \ 1068 "Values in (I) are the ones that get colored by the colormap," \ 1069 "however, no coloring is done if the :ref:`'v'<SurfCont->Dset_Mapping->I->v>` button on the right is" \ 1070 "turned off.\n" \ 1071 "\n" \ 1072 "The (I) value for the selected :term:`datum` (n) is shown in the :ref:`'Val'<SurfCont->Xhair_Info->Val.c00>` table"\ 1073 "of the :ref:`'Xhair Info' <SurfCont->Xhair_Info>` section on the left.\n"\ 1074 "The value is also shown in the SUMA viewer\n"\ 1075 "\n" \ 1076 "You can use a different type of selector to set (I). " \ 1077 "A right-click on 'I' opens a list widget, which is better " \ 1078 "when you have many columns from which to choose.\n" \ 1079 "\n" \ 1080 "The style of this selector can also change depending on the number"\ 1081 "of sub-bricks (columns) you have in your dataset. If the number"\ 1082 "exceeds a threshold specified by the environment variable "\ 1083 ":ref:`SUMA_ArrowFieldSelectorTrigger<SUMA_ArrowFieldSelectorTrigger>`\n" 1084 1085 #define SUMA_SurfContHelp_SelThr \ 1086 "Use this menu to select which column (:term:`sub-brick`) in the\n" \ 1087 "dataset (Dset) should be used for a Threshold (T) " \ 1088 "measure.\n" \ 1089 "\n" \ 1090 "T values are the ones used to determine if a :term:`datum` " \ 1091 "gets colored based on its (I) value.\n" \ 1092 "\n" \ 1093 "A :term:`datum` n is not colored if::LR:\n" \ 1094 " T(n) < Tscale :LR:\n" \ 1095 "or if :ref:`'\\|T\\|'<SurfCont->Dset_Mapping->abs_T>` option below " \ 1096 "is turned ON: :LR:\n" \ 1097 " | T(n) | < Tscale .\n" \ 1098 "\n" \ 1099 "Thresholding is not applied when the :ref:`'v'<SurfCont->Dset_Mapping->T->v>` button on the right is turned off.\n" \ 1100 "\n" \ 1101 "The (T) value for the selected :term:`datum` (n) is shown in the :ref:`'Val'<SurfCont->Xhair_Info->Val.c00>` table"\ 1102 "of the :ref:`'Xhair Info' <SurfCont->Xhair_Info>` section on the left.\n"\ 1103 "The value is also shown in the SUMA viewer\n"\ 1104 "\n" \ 1105 "You can use a different type of selector to set (T). " \ 1106 "A right-click on 'T' opens a list widget, which is better " \ 1107 "when you have many columns from which to choose.\n" \ 1108 "\n" \ 1109 "The style of this selector can also change depending on the number "\ 1110 "of sub-bricks (columns) you have in your dataset. If the number "\ 1111 "exceeds a threshold specified by the environment variable "\ 1112 ":ref:`SUMA_ArrowFieldSelectorTrigger<SUMA_ArrowFieldSelectorTrigger>`\n" 1113 1114 #define SUMA_SurfContHelp_SelBrt \ 1115 "Use this menu to select which column (:term:`sub-brick`) in the "\ 1116 "dataset (Dset) should be used for color Brightness (B) modulation.\n" \ 1117 "\n" \ 1118 "The (B) values are the ones used to control the brightness of a :term:`datum's<datum>` color.\n" \ 1119 "\n" \ 1120 "Brightness modulation is controlled by ranges in the 'B' cells of the "\ 1121 "table below.\n" \ 1122 "\n" \ 1123 "Brightness modulation is not applied when the :ref:`'v'<SurfCont->Dset_Mapping->B->v>` button on \n" \ 1124 "the right is turned off.\n" \ 1125 "\n" \ 1126 "The (B) value for the selected :term:`datum` (n) is shown in the :ref:`'Val'<SurfCont->Xhair_Info->Val.c00>` table"\ 1127 "of the :ref:`'Xhair Info' <SurfCont->Xhair_Info>` section on the left.\n"\ 1128 "The value is also shown in the SUMA viewer\n"\ 1129 "\n" \ 1130 "You can use a different type of selector to set (B). " \ 1131 "A right-click on 'B' opens a list widget, which is better " \ 1132 "when you have many columns from which to choose.\n" \ 1133 "\n" \ 1134 "The style of this selector can also change depending on the number"\ 1135 "of sub-bricks (columns) you have in your dataset. If the number"\ 1136 "exceeds a threshold specified by the environment variable "\ 1137 ":ref:`SUMA_ArrowFieldSelectorTrigger<SUMA_ArrowFieldSelectorTrigger>`\n" 1138 1139 #define SUMA_SurfContHelp_SelIntTgl \ 1140 "View (ON)/Hide Dset node colors" 1141 1142 #define SUMA_VolContHelp_SelIntTgl \ 1143 "View (ON)/Hide Dset voxel colors" 1144 1145 #define SUMA_GraphContHelp_SelIntTgl \ 1146 "View (ON)/Hide Dset edge colors" 1147 1148 #define SUMA_SurfContHelp_SelThrTgl \ 1149 "Apply (ON)/Ignore thresholding" 1150 1151 #define SUMA_SurfContHelp_SelBrtTgl \ 1152 "View (ON)/Ignore brightness modulation" 1153 1154 #define SUMA_SurfContHelp_ShowSliceTgl \ 1155 "View (ON)/Hide slice" 1156 #define SUMA_SurfContHelp_ShowVrFTgl \ 1157 "View (ON)/Hide Volume Rendering" 1158 #define SUMA_SurfContHelp_VrSelectTgl \ 1159 "When ON, allow voxel selection on volume rendering." 1160 1161 #define SUMA_SurfContHelp_SetRngTbl_r0 \ 1162 "Used for setting the clipping ranges. " \ 1163 "Clipping is only done for \n" \ 1164 "color mapping. Actual data \n" \ 1165 "values do not change." 1166 1167 #define SUMA_SurfContHelp_SetRngTbl_r1 \ 1168 "Intensity clipping range rules::LR:\n" \ 1169 " Values in the intensity data " \ 1170 "that are less than Min are colored " \ 1171 "by the first (bottom) color of the " \ 1172 "colormap. :LR:\n" \ 1173 " Values larger than Max are mapped " \ 1174 "to the top color.:LR:\n" \ 1175 " Intermediate values are mapped according to the :ref:`'Col'<SurfCont->Dset_Mapping->Col>` menu below.\n"\ 1176 "\n"\ 1177 "You can set the range as a percentile of the dataset's values by appending "\ 1178 " '%' to the percentile for Min and/or Max such as 5% or 90%. Note that "\ 1179 "the percentile always gets replaced by the actual value in the dataset.\n" \ 1180 "\n" \ 1181 "A left-click on 'I' locks ranges from automatic resetting, and the locked "\ 1182 "range applies to the current Dset only. A locked range is indicated with the "\ 1183 "reverse video mode.\n" \ 1184 "\n" \ 1185 "A right-click resets values to the default range (usually 2% to 98%) in the dataset." 1186 1187 #define SUMA_SurfContHelp_SetRngTbl_r2 \ 1188 "Values in the brightness (B) :ref:`column<SurfCont->Dset_Mapping->B>` "\ 1189 "are clipped to the Min to Max range in this row before calculating "\ 1190 "their modulation factor per the values in the next table row.\n" \ 1191 "\n" \ 1192 "You can set the range as a percentile of the dataset's values by appending "\ 1193 " '%' to the percentile for Min and/or Max such as 8% or 75%. Note that "\ 1194 "the percentile always gets replaced by the actual value in the dataset.\n" \ 1195 "\n" \ 1196 "A left-click locks ranges in this row from automatic resetting, " \ 1197 "and a locked range is applied to the current Dset only. A locked "\ 1198 "range is indicated with the reverse video mode.\n" \ 1199 "\n" \ 1200 "A right-click resets values to the default range (usually 2% to 98%) for the dataset." 1201 1202 #define SUMA_SurfContHelp_SetRngTbl_r3 \ 1203 "Brightness modulation factor range.\n" \ 1204 "Brightness modulation values, after\n" \ 1205 "clipping per the values in the row above,\n" \ 1206 "are scaled to fit the range specified\n" \ 1207 "here." 1208 1209 #define SUMA_SurfContHelp_SetRngTbl_r4 \ 1210 "Coordinate bias range.\n" \ 1211 "Coordinates of nodes that are mapped\n" \ 1212 "to the colormap can have a bias added\n" \ 1213 "to their coordinates. \n" \ 1214 "\n" \ 1215 "Nodes mapped to the first color of \n" \ 1216 "the map receive the minimum bias and\n" \ 1217 "nodes mapped to the last color receive\n" \ 1218 "the maximum bias. \n" \ 1219 "\n" \ 1220 "Nodes not colored, because of \n" \ 1221 "thresholding for example, will \n" \ 1222 "have no bias applied." 1223 1224 #define SUMA_SurfContHelp_SetRngTbl_c1 \ 1225 "Minimum clip value.\n" \ 1226 "Clips values (v) in the Dset\n" \ 1227 "less than Minimum (min):\n" \ 1228 " if v < min then v = min \n\n"\ 1229 "You can also set the range as a percentile of the dataset's values by "\ 1230 "appending '%' to the percentile such as 5% or 90%. Note that "\ 1231 "the percentile always gets replaced by the actual value in the dataset." 1232 1233 #define SUMA_SurfContHelp_SetRngTbl_c2 \ 1234 "Maximum clip value.\n" \ 1235 "Clips values (v) in the Dset\n" \ 1236 "larger than Maximum (max):\n" \ 1237 " if v > max then v = max \n\n" \ 1238 "You can also set the range as a percentile of the dataset's values by "\ 1239 "appending '%' to the percentile such as 5% or 90%. Note that "\ 1240 "the percentile always gets replaced by the actual value in the dataset." 1241 1242 1243 #define SUMA_SurfContHelp_SetClustTbl_r0 \ 1244 "Used for setting the clustering parameters." 1245 1246 #define SUMA_SurfContHelp_SetClustTbl_r1 \ 1247 "Clusterizing.\n" \ 1248 "\n" \ 1249 "Left click toggles clusterizing ON/OFF" 1250 1251 #define SUMA_SurfContHelp_SetClustTbl_c1 \ 1252 "Minimum distance between nodes.\n" \ 1253 "Nodes closer than the minimum distance are in\n"\ 1254 "same cluster. If you want to distance to be in\n"\ 1255 "number of edges (N) separating nodes, set the minimum\n"\ 1256 "distance to -N. This parameter is the same as -rmm in\n"\ 1257 "the program SurfClust" 1258 1259 #define SUMA_SurfContHelp_SetClustTbl_c2 \ 1260 "Minimum cluster area\n" \ 1261 "A cluster whose area is less than the specified minimum\n"\ 1262 "will not be displayed. Instead of areas, you can specify\n"\ 1263 "that clusters less than K nodes be masked by setting\n"\ 1264 "the Minimum cluster area to -K\n" \ 1265 "This parameter covers options -amm2 and -n in\n"\ 1266 "the program SurfClust" 1267 1268 #define SUMA_SurfContHelp_Col \ 1269 "Switch between modes for mapping values to the color map.:LR:\n" \ 1270 "The bottom color of the map C0 maps to the minimum value in the "\ 1271 ":ref:`I range<SurfCont->Dset_Mapping->SetRangeTable.r01>` row, "\ 1272 "and the top color to the maximum value. Colors for values in between "\ 1273 "the minimum and maximum of "\ 1274 ":ref:`I range<SurfCont->Dset_Mapping->SetRangeTable.r01>`, the following "\ 1275 "methods apply:LR:\n"\ 1276 "Int: Interpolate linearly between\n" \ 1277 ": :colors in colormap to find color at:LR:\n"\ 1278 ": : icol=((V-Vmin)/Vrange * Ncol) :LR:\n" \ 1279 "NN : Use the nearest color in the\n" \ 1280 ": :colormap. The index into the colormap\n"\ 1281 ": :of Ncol colors is given by :LR:\n"\ 1282 ": : icol=floor((V-Vmin)/Vrange * Ncol) :LR:\n" \ 1283 ": :with icol clipped to the range 0 to Ncol-1:LR:\n" \ 1284 "Dir: Use intensity values as indices\n" \ 1285 ": :into the colormap.\n" \ 1286 ": :In Dir mode, the intensity \n" \ 1287 ": :clipping range is of no use.:LR:\n" \ 1288 ": : icol=floor(V) with clipping to the range 0 to Ncol-1" 1289 1290 #define SUMA_SurfContHelp_Link \ 1291 "Switch between methods for the automatic linking of I, T selectors.:LR:\n" \ 1292 " None: Do nothing.:LR:\n" \ 1293 " Same: Set the T selector to match the I selection.:LR:\n" \ 1294 " Stat: Switch T selector to match an I selection with \n"\ 1295 ": :an obvious statistic. Matching is based on labels.:LR:\n"\ 1296 "You can set your preference using environment variable\n"\ 1297 " SUMA_IxT_LinkMode\n" 1298 1299 #define SUMA_SurfContHelp_Bias \ 1300 "Coordinate bias direction.:LR:\n" \ 1301 ": :-: No bias thank you:LR:\n" \ 1302 ": :x: X coord bias:LR:\n" \ 1303 ": :y: Y coord bias:LR:\n" \ 1304 ": :z: Z coord bias:LR:\n" \ 1305 ": :n: bias along node's normal:LR:\n" \ 1306 "\n" \ 1307 "See more info in Bhelp for\n" \ 1308 "'C' table entry above.\n" \ 1309 "\n" \ 1310 "This option will produce\n" \ 1311 "'Extremely Cool'[1] images.\n" \ 1312 "[1] Chuck E. Weiss (Slow River/" \ 1313 "Rykodisc) 1999." 1314 1315 #define SUMA_SurfContHelp_Cmp \ 1316 "Switch between available color maps.\n" \ 1317 "If the number of colormaps is too large\n" \ 1318 "for the menu button, right click over\n" \ 1319 "the 'Cmp' label and a chooser with a \n" \ 1320 "slider bar will appear.\n" \ 1321 "\n" \ 1322 "More help is available via\n" \ 1323 "ctrl+h while mouse is over the\n" \ 1324 "colormap." 1325 1326 #define SUMA_SurfContHelp_CmpNew \ 1327 "Load new colormap.\n" \ 1328 "Loaded map will replace a\n" \ 1329 "pre-existing one with the\n" \ 1330 "same name.\n" \ 1331 "\n" \ 1332 "See ScaleToMap -help for \n" \ 1333 "details on the format of \n" \ 1334 "colormap file. The formats\n" \ 1335 "are described in the section\n" \ 1336 "for the option -cmapfile.\n" \ 1337 "\n" \ 1338 "A sample colormap would be:LIT:\n" \ 1339 " 0 0 1\n" \ 1340 " 1 1 1\n" \ 1341 " 1 0 0:LR:\n" \ 1342 "saved into a cmap file called\n" \ 1343 "cmap_test.1D.cmap" \ 1344 "\n" \ 1345 "See also envs :ref:`SUMA_CmapsDir<SUMA_CmapsDir>`, "\ 1346 ":ref:`SUMA_RetinoAngle_DsetColorMap<SUMA_RetinoAngle_DsetColorMap>` "\ 1347 "and :ref:`SUMA_VFR_DsetColorMap<SUMA_VFR_DsetColorMap>`" 1348 1349 1350 #define SUMA_SurfContHelp_AbsThr \ 1351 "Toggle Absolute thresholding.:LR:\n" \ 1352 " OFF: Mask color for\n" \ 1353 ": ::term:`datum` (nodes, edges, voxels, etc.) that have::LR:\n" \ 1354 " T(n) < Tscale:LR:\n" \ 1355 " ON: Mask color for\n" \ 1356 ": ::term:`datum` that have::LR:\n" \ 1357 " | T(n) | < Tscale\n\n" \ 1358 "where::LR:\n" \ 1359 " Tscale is the value set by the threshold scale.:LR:\n" \ 1360 " T(n) is the :term:`datum` value in the selected threshold column (T).\n" \ 1361 ": :This value is seen in the second cell of the 'Value'\n" \ 1362 ": :table on the left side." 1363 1364 #define SUMA_SurfContHelp_Isym \ 1365 "Toggle Intensity range symmetry " \ 1366 "about 0.:LR:\n" \ 1367 " ON : Intensity clipping range\n" \ 1368 ": :is forced to go from \n" \ 1369 ": :-val to val.\n" \ 1370 ": :This allows you to mimic\n" \ 1371 ": :AFNI's ranging mode.:LR:\n" \ 1372 " OFF: Intensity clipping range\n" \ 1373 ": :can be set to your liking." 1374 1375 #define SUMA_SurfContHelp_Shw0 \ 1376 "Toggle color masking of nodes " \ 1377 "with intensity = 0 :LR:\n" \ 1378 " ON : 0 intensities are mapped\n" \ 1379 ": :to the colormap as any\n" \ 1380 ": :other values.:LR:\n" \ 1381 " OFF: 0 intensities are masked,\n" \ 1382 ": :a la AFNI" 1383 1384 #define SUMA_SurfContHelp_RangeTbl_c0 \ 1385 "Full range of values in Dset" 1386 1387 #define SUMA_SurfContHelp_RangeTbl_c1 \ 1388 "Minimum value in Dset column" 1389 1390 #define SUMA_SurfContHelp_RangeTbl_c2 \ 1391 "Node index at minimum.\n" \ 1392 "Right click in cell to\n" \ 1393 "have crosshair jump to\n" \ 1394 "node's index.\n" \ 1395 "Same as 'ctrl+j' or\n" \ 1396 "an entry in the 'Node' cell\n" \ 1397 "under Xhair Info block." 1398 1399 #define SUMA_GraphContHelp_RangeTbl_c2 \ 1400 "Edge index at minimum.\n" \ 1401 "Right click in cell to\n" \ 1402 "have crosshair jump to\n" \ 1403 "edge's index.\n" \ 1404 "Same as 'ctrl+j' or\n" \ 1405 "an entry in the 'Edge' cell\n" \ 1406 "under Xhair Info block." 1407 1408 #define SUMA_SurfContHelp_RangeTbl_c3 \ 1409 "Maximum value in Dset column" 1410 1411 #define SUMA_SurfContHelp_RangeTbl_c4 \ 1412 "Node index at maximum.\n" \ 1413 "Right click in cell to\n" \ 1414 "have crosshair jump to\n" \ 1415 "node's index.\n" \ 1416 "Same as 'ctrl+j' or\n" \ 1417 "an entry in the 'Node' cell\n" \ 1418 "under Xhair Info block." 1419 1420 #define SUMA_GraphContHelp_RangeTbl_c4 \ 1421 "Edge index at maximum.\n" \ 1422 "Right click in cell to\n" \ 1423 "have crosshair jump to\n" \ 1424 "edge's index.\n" \ 1425 "Same as 'ctrl+j' or\n" \ 1426 "an entry in the 'Edge' cell\n" \ 1427 "under Xhair Info block." 1428 1429 #define SUMA_SurfContHelp_RangeTbl_r1 \ 1430 "Range of values in intensity (I) column" 1431 1432 #define SUMA_SurfContHelp_RangeTbl_r2 \ 1433 "Range of values in threshold (T) column" 1434 1435 #define SUMA_SurfContHelp_RangeTbl_r3 \ 1436 "Range of values in brightness (B) column" 1437 1438 #define SUMA_SurfContHelp_MaskTypeTbl_c0 \ 1439 "Add one more row for a mask ROI" 1440 1441 #define SUMA_SurfContHelp_MaskTypeTbl_c1 \ 1442 "String label of ROI" 1443 1444 #define SUMA_SurfContHelp_MaskTypeTbl_c05 \ 1445 "Variable symbol. Choose from 'a' to 'z'" 1446 1447 #define SUMA_SurfContHelp_MaskTypeTbl_c2 \ 1448 "Type of mask. For the moment, this string can only be one of 'box' or 'sphere'." 1449 1450 #define SUMA_SurfContHelp_MaskTypeTbl_c3 \ 1451 "Set/Get coordinates in mm :term:`RAI` of the center of the mask :LR:\n" \ 1452 "You can right click in cell to get back to the original center.:LR:\n" \ 1453 "You can also reposition the mask interactively in the SUMA viewer "\ 1454 "by :ref:`selecting <Button_3-Press>` something, if you are in "\ 1455 ":ref:`Mask Manipulation Mode<Mask_Manipulation_Mode>`." 1456 1457 #define SUMA_SurfContHelp_MaskTypeTbl_c4 \ 1458 "Set/Get size along three dimensions of mask. You can enter a single value "\ 1459 "if the all three dimensions are equal. :LR:\n" \ 1460 "Right click in cell to get back to the original size.:LR:\n" \ 1461 "Resizing in SUMA viewer can be done with :ref:`Ctrl+scroll<Ctrl+Scroll>` "\ 1462 "if you are in :ref:`Mask Manipulation Mode<Mask_Manipulation_Mode>`.:LR:\n"\ 1463 "You can also change values by scrolling with mouse pointer over the cell.\n" 1464 1465 #define SUMA_Switch_Cont_BHelp \ 1466 "Switch to controllers of other objects. You can use the arrows, or set the "\ 1467 "controller's index directly." 1468 1469 #define SUMA_SurfContHelp_AllObjs \ 1470 "Initialize controllers for all objects that have one. "\ 1471 "This is particularly useful when a particular may not be visible under "\ 1472 "the default settings." 1473 1474 #define SUMA_SurfContHelp_MaskTypeTbl_c5 \ 1475 "Color of mask in RGB triplets between 0 and 1.0. You can also specify "\ 1476 "colors using the shorthands of::LR:\n"\ 1477 " 'b' or 'blue':LR:\n" \ 1478 " 'g' or 'green':LR:\n" \ 1479 " 'p' or 'pink':LR:\n" \ 1480 " 'r' or 'red':LR:\n" \ 1481 " 'w' or 'white':LR:\n" \ 1482 " 'y' or 'yellow':LR:\n" \ 1483 "The final color depends also on the dim factor 'D'" 1484 1485 #define SUMA_SurfContHelp_MaskTypeTbl_c6 \ 1486 "Alpha of mask color. The Alpha value controls the contribution of an ROI's"\ 1487 "color to the tracts that pass through it. This tinting process is only "\ 1488 "used when 'Mask Eval' is in use, and when A is > 0. See the help for "\ 1489 "'Mask Eval' for information on how tinting works.:LR:\n"\ 1490 "You can also change values by scrolling with mouse pointer over the cell.\n" 1491 1492 #define SUMA_SurfContHelp_MaskTypeTbl_c7 \ 1493 "Transparency of mask. A value of 0 renders a mask opaque. Consider using "\ 1494 "lower D values to avoid color saturation of rendered masks.:LR:\n"\ 1495 "You can also change values by scrolling with mouse pointer over the cell.\n" 1496 1497 1498 #define SUMA_SurfContHelp_MaskTypeTbl_c8 \ 1499 "Dimming factor for color. Saturated colors may not look nice when rendered, so consider using the D parameter to dim a color's brightness without having to so directly in the color column. Setting D to 6 for example will scale a color by a factor of 6/9, so a saturated red of [1 0 0] becomes [0.67 0 0 ]. This makes masks render better when not in transparent mode T = 0.:LR:\n"\ 1500 "You can also change values by scrolling with mouse pointer over the cell.\n" 1501 1502 #define SUMA_SurfContHelp_MaskTypeTbl_r1 \ 1503 "Delete row of mask ROI. You have to click twice to get rid of a row, so there "\ 1504 "is no undo for you. After the 1st click, the 'x' turn big 'X' and a new click "\ 1505 "on big 'X' deletes the row. If you fail to click on big 'X' or simply change "\ 1506 "your mind, the operation is canceled and big 'X' is little 'x' again. YAY!" 1507 1508 #define SUMA_SurfContHelp_EvalMaskExpr_r0 \ 1509 "A boolean expression evaluated per tract to determine whether or not a tract "\ 1510 "should be displayed. Each mask is assigned a letter from 'a' to 'z' and has "\ 1511 "an entry in the table below. Symbols for the OR operator are '|' or '+' "\ 1512 "while those for AND are '&' or '*'. The '|' is for the NOT operation. By "\ 1513 "default, the expression is blank, as indicated by '-', and the operation is "\ 1514 "an OR of all the masks.\n\n" \ 1515 ":SPX:.. _Tract_Tinting:\n\n"\ 1516 ":NOF:Tract Tinting:\n"\ 1517 ":NOF:^^^^^^^^^^^^^^\n\n"\ 1518 ":DEF:"\ 1519 "Tract_Tinting:\n"\ 1520 "^^^^^^^^^^^^^^\n"\ 1521 ":SPX:"\ 1522 "Tracts that go through any of the masks are displayed and they keep their own color:SPX:, as shown in the figure below to the left:SPX:.\n\n"\ 1523 "Say we now want to show tracts that go through both masks b and c or through "\ 1524 "mask a. The expression to evaluate at each tract would be: '( b & c ) | a'. "\ 1525 "Note that for the expression to take effect, you need to have the "\ 1526 ":ref:`v button<MaskCont->Masks->Mask_Eval->v>` selected.\n\n"\ 1527 ":SPX:\n\n"\ 1528 " .. figure:: media/MaskedTracts.01.jpg\n"\ 1529 " :align: left\n"\ 1530 " :figwidth: 30%\n"\ 1531 " :name: media/MaskedTracts.01.jpg\n\n"\ 1532 " :ref:`Tracts going through any of the three masks.<media/MaskedTracts.01.jpg>`\n\n"\ 1533 " .. figure:: media/MaskedTracts.02.jpg\n"\ 1534 " :align: right\n"\ 1535 " :figwidth: 30%\n"\ 1536 " :name: media/MaskedTracts.02.jpg\n\n"\ 1537 " Tracts evaluating to true per expression: '( b & c ) | a'. :ref:`(link)<media/MaskedTracts.02.jpg>`\n\n"\ 1538 " .. figure:: media/MaskController.02.jpg\n"\ 1539 " :align: center\n"\ 1540 " :name: media/MaskController.02.jpg\n"\ 1541 " :figwidth: 30%\n\n"\ 1542 " :ref:`Mask Controller.<media/MaskController.02.jpg>`\n\n"\ 1543 SUMA_SHPINX_BREAK \ 1544 ":SPX:" \ 1545 "When using the the Mask Eval expression, the color of tracts that go though a set of regions is equal to the alpha weighted average of the colors of those regions.:SPX: This can be seen in the figure on the right side above.\n\n"\ 1546 "The colors of a tract is given by:LIT:\n"\ 1547 " Ct = sum(AiCi)/sum(Ai)\n\n"\ 1548 "for all ROIs i the tract intersects.\n\n" \ 1549 "For example, say a tract goes through a blue region of color [0 0 1] with alpha of 0.5 (A ~ 5 in column A), and a red region of color [1 0 0] (alpha is 1.0, or in the table = 9). The tracts that go through both ROIs will be colored (1.0*([1 0 0]+0.5*([0 0 1])/1.5, which is purple. Similar averaging goes on if tracts go through more than 2 regions. Tracts that go though one region will get that region's color.\n\n"\ 1550 "Now, if you set alpha to 0 for a certain ROI, then that ROI does add to the "\ 1551 "tint of tracts that go thourough it at all. And for a tract that goes through that region only, it retains its original colors.:SPX: See image on the right side.:SPX:\n\n"\ 1552 ":SPX:\n\n"\ 1553 " .. figure:: media/Masks.02.jpg\n"\ 1554 " :align: left\n"\ 1555 " :name: media/Masks.02.jpg\n"\ 1556 " :figwidth: 30%\n\n"\ 1557 " Tracts going through any of 2 masks 'a|b', with 'Mask Eval' ON. :ref:`(link)<media/Masks.02.jpg>`\n\n"\ 1558 " .. figure:: media/Masks.03.jpg\n"\ 1559 " :align: right\n"\ 1560 " :name: media/Masks.03.jpg\n"\ 1561 " :figwidth: 30%\n\n"\ 1562 " Tracts going through 'a|b' but with alpha of ROI 'a' - the blue one - set to 0. Tracts going through the blue ROI are not tinted by it at all. :ref:`(link)<media/Masks.03.jpg>`\n\n"\ 1563 " .. figure:: media/Masks.00.jpg\n"\ 1564 " :align: center\n"\ 1565 " :name: media/Masks.00.jpg\n"\ 1566 " :figwidth: 30%\n\n"\ 1567 " Mask Controller settings for image to the left. :ref:`(link)<media/Masks.00.jpg>`\n\n"\ 1568 SUMA_SHPINX_BREAK \ 1569 ":SPX:" \ 1570 1571 #define SUMA_SurfContHelp_DistMask_r0 \ 1572 "Set Min Max length for tract masking. Use can scroll (mouse wheel) in Min "\ 1573 "and Max cells to change the value. The 'v' button must be selected for "\ 1574 "masking to take effect." 1575 1576 #define SUMA_SurfContHelp_GDSET_ViewBundles \ 1577 "Show bundles instead of edges between nodes if \n"\ 1578 "the graph dataset contains such information. For\n"\ 1579 "the moment, only 3dProbTrackID creates such data."\ 1580 ":SPX:\n\n"\ 1581 ".. figure:: media/Graph3D.jpg\n"\ 1582 " :align: left\n"\ 1583 " :name: media/Graph3D.jpg\n"\ 1584 " :figwidth: 30%\n\n"\ 1585 " :ref:`Graph shown in 3D. <media/Graph3D.jpg>` Edges represented by straight lines.\n\n"\ 1586 ".. figure:: media/Graph3D_Bundles.jpg\n"\ 1587 " :align: right\n"\ 1588 " :name: media/Graph3D_Bundles.jpg\n"\ 1589 " :figwidth: 30%\n\n"\ 1590 " Graph shown in 3D. :ref:`Edges represented by bundles <media/Graph3D_Bundles.jpg>` derived from.\n"\ 1591 " tractography with 3dTrackID. See :ref:`FATCAT_DEMO` for details.\n\n"\ 1592 SUMA_SHPINX_BREAK \ 1593 "Figures were generated using :ref:`FATCAT_DEMO` output with::\n\n"\ 1594 " suma -vol mprage+orig. -gdset DTI/o.NETS_AND_000.niml.dset &\n\n"\ 1595 ":SPX:\n\n"\ 1596 "Bundle colors reflect the value of the edge connecting the two nodes\n\n"\ 1597 "Selection is identical to when edges are represented by straight lines.\n\n" 1598 1599 #define SUMA_SurfContHelp_GDSET_ViewUncon \ 1600 "Show graph nodes even if unconnected to other nodes.\n" 1601 1602 #define SUMA_SurfContHelp_Mask \ 1603 "Opens controller for masks.\n" \ 1604 "At the first click, this button creates a new interactive tract mask and activates menu items such as :ref:`Gry<TractCont->Coloring_Controls->Gry>`. A ball of a mask is added to the interface, and only tracts that go through it are displayed. \n"\ 1605 ":SPX:"\ 1606 "\n"\ 1607 ".. figure:: media/MaskButtonInController.jpg\n"\ 1608 " :align: center\n"\ 1609 " :name: media/MaskButtonInController.jpg\n"\ 1610 "\n"\ 1611 " :ref:`(link)<media/MaskButtonInController.jpg>`\n\n"\ 1612 ":SPX:"\ 1613 "Clicking on Masks after the initialization brings up the "\ 1614 ":ref:`Mask Controller<MaskCont>`. See :ref:`mask manipulation"\ 1615 " mode<Mask_Manipulation_Mode>` for details on how to move the mask around.\n" 1616 1617 /* this one's based on AFNI's func->thr_pval_label help */ 1618 #define SUMA_SurfContHelp_ThreshStats \ 1619 "Shows the estimated significance\n" \ 1620 "(p-value) of the threshold above,\n" \ 1621 "if possible.:LR:\n" \ 1622 " * If not possible, will display as '[N/A]' instead.:LR:\n" \ 1623 " * p's that display as 1.2-7 should be interpreted as 1.2 x 10^(-7):LR:\n"\ 1624 " * p-value here is significance PER NODE/VOXEL/etc.:LR:\n" \ 1625 "* If FDR curves are pre-computed in the dataset's header, then the False "\ 1626 "Discovery Rate q-value will also be shown.:LR:\n" \ 1627 "* You can add FDR curves to a dataset with '3drefit -addFDR'.\n" 1628 1629 #define SUMA_SurfContHelp_ColorBar \ 1630 "Colorbar used for colorizing values in 'I' sub-brick.\n" \ 1631 "Colorization depends on the settings under the "\ 1632 ":ref:`I<SurfCont->Dset_Mapping->I>`, :ref:`Range "\ 1633 "Setting<SurfCont->Dset_Mapping->SetRangeTable.r01>`, among other things. "\ 1634 "Threshold settings determine whether or not a certain value will get "\ 1635 "displayed at all.:LR:\n" \ 1636 "Use :SPX: *ctrl+h over the colorbar* :DEF: ctrl+h over the colorbar :SPX:"\ 1637 "for help on :ref:`manipulating the displayed "\ 1638 "map<Colormap_Keyboard_Controls>`.\n" 1639 1640 #define SUMA_SurfContHelp_ThrScale \ 1641 "Set threshold value to determine which nodes/voxels/edges will get colored"\ 1642 "Voxels for which the value in the 'T' sub-brick is below that of the "\ 1643 "threshold will not get colored." 1644 1645 #endif 1646