/* set the correct set of vectorial parameters */ static void setParms(INTEGRATION_PARMS *parms) { /* default template fields*/ parms->nfields=3; SetFieldLabel(&parms->fields[0], INFLATED_CURV_CORR_FRAME, 0, 0.0, 0.0, 0, which_norm); /* only use sulc for rigid registration */ SetFieldLabel(&parms->fields[1],SULC_CORR_FRAME,1,1.0,0.0,0,which_norm); SetFieldLabel(&parms->fields[2],CURVATURE_CORR_FRAME,2,0.0,0.0,0,which_norm); }
void wxControl::SetLabel(const wxString& label) { if(IsPalmField()) SetFieldLabel(label); // unlike other native controls, slider has no label if(IsPalmControl() && !wxDynamicCast(this,wxSlider)) SetControlLabel(label); }
/*---------------------------------------------------------------------- Parameters: Description: ----------------------------------------------------------------------*/ static int get_option(int argc, char *argv[],INTEGRATION_PARMS *parms) { int n,nargs = 0 ; char *option ; option = argv[1] + 1 ; /* past '-' */ if (!stricmp(option, "help") || !stricmp(option, "-help")) print_help() ; else if (!stricmp(option, "version") || !stricmp(option, "-version")) print_version() ; else if (!stricmp(option, "nbrs")) { nbrs = atoi(argv[2]) ; nargs = 1 ; fprintf(stderr, "using neighborhood size = %d\n", nbrs) ; } else if (!stricmp(option, "sdir")) { strcpy(subjects_dir, argv[2]) ; nargs = 1 ; fprintf(stderr, "using SUBJECTS_DIR=%s\n", subjects_dir) ; } else if (!stricmp(option, "median")) { which_norm = NORM_MEDIAN ; printf("using median normalization\n") ; } else if (!stricmp(option, "nonorm")) { which_norm = NORM_NONE ; printf("not normalizing input data\n") ; } else if (!stricmp(option, "infname")) { char fname[STRLEN] ; surface_names[0] = argv[2] ; nargs = 1 ; printf("using %s instead of inflated\n", argv[2]) ; sprintf(fname, "%s.H", argv[2]) ; curvature_names[0] = (char *)calloc(strlen(fname)+1, sizeof(char)) ; strcpy(curvature_names[0], fname) ; } else if (!stricmp(option, "sulc")) { nargs = 1 ; printf("using %s instead of sulc\n", argv[2]) ; curvature_names[1] = (char *)calloc(strlen(argv[2])+1, sizeof(char)) ; strcpy(curvature_names[1], argv[2]) ; } else if (!stricmp(option, "norot")) { no_rot = 1 ; fprintf(stderr, "not aligning hemispheres before averaging.\n") ; } else if (!stricmp(option, "rot")) { no_rot = 0 ; fprintf(stderr, "rigidly aligning hemispheres before averaging.\n") ; } else if (!stricmp(option, "nodefault")) { base_default=0; atlas_size = 0; parms->nfields=0; for (n=0;n<3;n++) InitFieldLabel(&parms->fields[n]); } else if (!stricmp(option, "size")) { int size=atoi(argv[2]); if (size<=0) { fprintf(stderr,"ERROR: size should at least 1!\n"); exit(1); } atlas_size = size; fprintf(stderr,"Setting up atlas size to %d\n",size); nargs=1; } else if (!stricmp(option, "annot")) { annot_name = argv[2] ; fprintf(stderr,"zeroing medial wall in %s\n", annot_name) ; nargs=1; } else if (!strcmp(option, "overlay")) { int navgs ; overlays[noverlays++] = argv[2] ; navgs = atoi(argv[3]) ; printf("reading overlay from %s...\n", argv[2]) ; multiframes = 1 ; n=parms->nfields++; SetFieldLabel(&parms->fields[n], OVERLAY_FRAME, atlas_size, 0.0, 0.0, navgs, which_norm); SetFieldName(&parms->fields[n], argv[2]) ; atlas_size++ ; nargs = 2 ; } else if (!strcmp(option, "distance")) { int navgs ; overlays[noverlays++] = argv[2] ; navgs = atoi(argv[3]) ; printf("reading overlay from %s...\n", argv[2]) ; multiframes = 1 ; n=parms->nfields++; SetFieldLabel(&parms->fields[n], DISTANCE_TRANSFORM_FRAME, atlas_size, 0.0, 0.0, navgs, NORM_MAX); SetFieldName(&parms->fields[n], argv[2]) ; atlas_size++ ; nargs = 2 ; } else if (!strcmp(option, "overlay-dir")) { overlay_dir = argv[2] ; printf("Setting overlay_dir to %s\n",overlay_dir); nargs = 1 ; } else if (!stricmp(option, "vector")) { fprintf(stderr,"\nMultiframe Mode:\n"); fprintf(stderr, "Use <addframe> option to add extra-fields into average atlas\n"); fprintf(stderr,"Use <size> option to set up the # of frames\n"); fprintf(stderr,"field code:\n"); for (n=0 ; n < NUMBER_OF_VECTORIAL_FIELDS ; n++) fprintf(stderr," field %d is '%s' (type = %d)\n",n, ReturnFieldName(n),IsDistanceField(n)); } else if (!stricmp(option, "addframe")) { int which_field,where_in_atlas; if (multiframes==0) /* activate multiframes mode */ multiframes = 1; which_field=atoi(argv[2]); where_in_atlas=atoi(argv[3]); fprintf(stderr, "adding field %d into average atlas at location %d\n", which_field,where_in_atlas) ; if ( base_default && (where_in_atlas<3) ) { fprintf(stderr,"ERROR: Cannot add field %d into atlas\n",which_field); fprintf(stderr," By default, the first 3 fields are:\n"); fprintf(stderr," -curvature of inflated surface \n"); fprintf(stderr," -sulc of smoothwm surface \n"); fprintf(stderr," -curvature of smoothwm surface \n"); fprintf(stderr,"To cancel this option, use <nodefault> first\n"); exit(1); } /* check if this field exist or not */ for (n = 0 ; n < parms->nfields ; n++) { if (parms->fields[n].field==which_field) { fprintf(stderr,"ERROR: field already exists\n"); exit(1); } } /* adding field into parms */ n=parms->nfields++; SetFieldLabel(&parms->fields[n], which_field, where_in_atlas, 0.0, 0.0, 0, which_norm); if (where_in_atlas >= atlas_size) { atlas_size = where_in_atlas+1; fprintf(stderr, "Atlas size increased to contain at least %d frames\n", atlas_size); } nargs = 2 ; } else switch (toupper(*option)) { case 'W': Gdiag |= DIAG_WRITE ; if (isdigit((int)*argv[2])) nargs = 1 ; break ; case 'S': scale = atof(argv[2]) ; fprintf(stderr, "scaling parameterization by %2.1f\n", scale) ; nargs = 1 ; break ; case 'O': surface_names[1] = surface_names[2] = argv[2] ; nargs = 1 ; printf("using %s instead of smoothwm\n", argv[2]) ; break ; case 'A': navgs = atoi(argv[2]) ; fprintf(stderr, "averaging curvature patterns %d times.\n", navgs) ; nargs = 1 ; break ; case '?': case 'U': print_usage() ; exit(1) ; break ; default: fprintf(stderr, "unknown option %s\n", argv[1]) ; exit(1) ; break ; } return(nargs) ; }
/*---------------------------------------------------------------------- Parameters: Description: ----------------------------------------------------------------------*/ static int get_option(int argc, char *argv[]) { int n,nargs = 0 ; char *option ; float f ; option = argv[1] + 1 ; /* past '-' */ if (!stricmp(option, "-help")||!stricmp(option, "-usage")) { print_help() ; } else if (!stricmp(option, "-version")) { print_version() ; } else if (!stricmp(option, "median")) { which_norm = NORM_MEDIAN ; printf("using median normalization\n") ; } else if (!stricmp(option, "vnum") || !stricmp(option, "distances")) { parms.nbhd_size = atof(argv[2]) ; parms.max_nbrs = atof(argv[3]) ; nargs = 2 ; fprintf(stderr, "nbr size = %d, max neighbors = %d\n", parms.nbhd_size, parms.max_nbrs) ; } else if (!stricmp(option, "nonorm")) { which_norm = NORM_NONE ; printf("disabling normalization\n") ; } else if (!stricmp(option, "vsmooth")) { parms.var_smoothness = 1 ; printf("using space/time varying smoothness weighting\n") ; } else if (!stricmp(option, "sigma")) { if (nsigmas >= MAX_SIGMAS) { ErrorExit(ERROR_NOMEMORY, "%s: too many sigmas specified (%d)\n", Progname, nsigmas) ; } sigmas[nsigmas] = atof(argv[2]) ; nargs = 1 ; nsigmas++ ; } else if (!stricmp(option, "vector")) { fprintf(stderr, "\nMultiframe Mode:\n"); fprintf(stderr, "Use -addframe option to add extra-fields into average atlas\n"); fprintf(stderr, "\t-addframe which_field where_in_atlas l_corr l_pcorr\n"); fprintf(stderr, "\tfield code:\n"); for (n=0 ; n < NUMBER_OF_VECTORIAL_FIELDS ; n++) fprintf(stderr, "\t field %d is '%s' (type = %d)\n", n,ReturnFieldName(n),IsDistanceField(n)); exit(1); } else if (!stricmp(option, "annot")) { annot_name = argv[2] ; fprintf(stderr,"zeroing medial wall in %s\n", annot_name) ; nargs=1; } else if (!stricmp(option, "init")) { use_initial_registration=1; fprintf(stderr,"use initial registration\n"); } else if (!stricmp(option, "addframe")) { int which_field,where_in_atlas; float l_corr,l_pcorr; if (multiframes==0) { /* activate multiframes mode */ initParms(); multiframes = 1; } which_field=atoi(argv[2]); where_in_atlas=atoi(argv[3]); l_corr=atof(argv[4]); l_pcorr=atof(argv[5]); fprintf(stderr, "adding field %d (%s) with location %d in the atlas\n", which_field,ReturnFieldName(which_field),where_in_atlas) ; /* check if this field exist or not */ for (n = 0 ; n < parms.nfields ; n++) { if (parms.fields[n].field==which_field) { fprintf(stderr,"ERROR: field already exists\n"); exit(1); } } /* adding field into parms */ n=parms.nfields++; SetFieldLabel(&parms.fields[n], which_field, where_in_atlas, l_corr, l_pcorr, 0, which_norm); nargs = 4 ; } /* else if (!stricmp(option, "hippocampus")) */ /* { */ /* if(multiframes==0){ */ /* multiframes = 1 ; */ /* initParms(); */ /* } */ /* where=atoi(argv[2]); */ /* parms.l_corrs[]=atof(argv[3]); */ /* parms.l_pcorrs[]=atof(argv[4]); */ /* parms.frames[]=; */ /* parms. */ /* fprintf(stderr, "using hippocampus distance map\n") ; */ /* nargs=3; */ /* } */ else if (!stricmp(option, "topology")) { parms.flags |= IPFLAG_PRESERVE_SPHERICAL_POSITIVE_AREA; fprintf(stderr, "preserving the topology of positive area triangles\n"); } else if (!stricmp(option, "vnum") || !stricmp(option, "distances")) { parms.nbhd_size = atof(argv[2]) ; parms.max_nbrs = atof(argv[3]) ; nargs = 2 ; fprintf(stderr, "nbr size = %d, max neighbors = %d\n", parms.nbhd_size, parms.max_nbrs) ; } else if (!stricmp(option, "rotate")) { dalpha = atof(argv[2]) ; dbeta = atof(argv[3]) ; dgamma = atof(argv[4]) ; fprintf(stderr, "rotating brain by (%2.2f, %2.2f, %2.2f)\n", dalpha, dbeta, dgamma) ; nargs = 3 ; } else if (!stricmp(option, "reverse")) { reverse_flag = 1 ; fprintf(stderr, "mirror image reversing brain before morphing...\n") ; } else if (!stricmp(option, "min_degrees")) { min_degrees = atof(argv[2]) ; fprintf(stderr, "setting min angle for search to %2.2f degrees\n", min_degrees) ; nargs = 1 ; } else if (!stricmp(option, "max_degrees")) { max_degrees = atof(argv[2]) ; fprintf(stderr, "setting max angle for search to %2.2f degrees\n", max_degrees) ; nargs = 1 ; } else if (!stricmp(option, "nangles")) { nangles = atoi(argv[2]) ; fprintf(stderr, "setting # of angles/search per scale to %d\n", nangles) ; nargs = 1 ; } else if (!stricmp(option, "jacobian")) { jacobian_fname = argv[2] ; nargs = 1 ; printf("writing out jacobian of mapping to %s\n", jacobian_fname) ; } else if (!stricmp(option, "dist")) { sscanf(argv[2], "%f", &parms.l_dist) ; nargs = 1 ; use_defaults = 0 ; fprintf(stderr, "l_dist = %2.3f\n", parms.l_dist) ; } else if (!stricmp(option, "norot")) { fprintf(stderr, "disabling initial rigid alignment...\n") ; parms.flags |= IP_NO_RIGID_ALIGN ; } else if (!stricmp(option, "inflated")) { fprintf(stderr, "using inflated surface for initial alignment\n") ; parms.flags |= IP_USE_INFLATED ; } else if (!stricmp(option, "multi_scale")) { multi_scale = atoi(argv[2]) ; fprintf(stderr, "using %d scales for morphing\n", multi_scale) ; nargs = 1 ; } else if (!stricmp(option, "nsurfaces")) { parms.nsurfaces = atoi(argv[2]) ; nargs = 1 ; fprintf(stderr, "using %d surfaces/curvatures for alignment\n", parms.nsurfaces) ; } else if (!stricmp(option, "infname")) { char fname[STRLEN] ; inflated_name = argv[2] ; surface_names[0] = argv[2] ; nargs = 1 ; printf("using %s as inflated surface name, " "and using it for initial alignment\n", inflated_name) ; sprintf(fname, "%s.H", argv[2]) ; curvature_names[0] = (char *)calloc(strlen(fname)+1, sizeof(char)) ; strcpy(curvature_names[0], fname) ; parms.flags |= IP_USE_INFLATED ; } else if (!stricmp(option, "nosulc")) { fprintf(stderr, "disabling initial sulc alignment...\n") ; parms.flags |= IP_NO_SULC ; } else if (!stricmp(option, "sulc")) { curvature_names[1] = argv[2] ; fprintf(stderr, "using %s to replace 'sulc' alignment\n", curvature_names[1]) ; nargs = 1 ; MRISsetSulcFileName(argv[2]); } else if (!stricmp(option, "surf0")) { surface_names[0] = argv[2]; fprintf(stderr, "using %s as input surface 0.\n", surface_names[0]) ; nargs = 1 ; } else if (!stricmp(option, "surf1")) { surface_names[1] = argv[2]; fprintf(stderr, "using %s as input surface 1.\n", surface_names[1]) ; nargs = 1 ; } else if (!stricmp(option, "surf2")) { surface_names[2] = argv[2]; fprintf(stderr, "using %s as input surface 2.\n", surface_names[2]) ; nargs = 1 ; } else if (!stricmp(option, "curv0")) { curvature_names[0] = argv[2]; fprintf(stderr, "using %s as curvature function for surface 0.\n", curvature_names[0]) ; nargs = 1 ; } else if (!stricmp(option, "curv1")) { curvature_names[1] = argv[2]; fprintf(stderr, "using %s as curvature function for surface 1.\n", curvature_names[1]) ; nargs = 1 ; } else if (!stricmp(option, "curv2")) { curvature_names[2] = argv[2]; fprintf(stderr, "using %s as curvature function for surface 2.\n", curvature_names[2]) ; nargs = 1 ; } else if (!stricmp(option, "lm")) { parms.integration_type = INTEGRATE_LINE_MINIMIZE ; fprintf(stderr, "integrating with line minimization\n") ; } else if (!stricmp(option, "search")) { parms.integration_type = INTEGRATE_LM_SEARCH ; fprintf(stderr, "integrating with binary search line minimization\n") ; } else if (!stricmp(option, "dt")) { parms.dt = atof(argv[2]) ; parms.base_dt = .2*parms.dt ; nargs = 1 ; fprintf(stderr, "momentum with dt = %2.2f\n", parms.dt) ; } else if (!stricmp(option, "area")) { use_defaults = 0 ; sscanf(argv[2], "%f", &parms.l_area) ; nargs = 1 ; fprintf(stderr, "using l_area = %2.3f\n", parms.l_area) ; } else if (!stricmp(option, "parea")) { use_defaults = 0 ; sscanf(argv[2], "%f", &parms.l_parea) ; nargs = 1 ; fprintf(stderr, "using l_parea = %2.3f\n", parms.l_parea) ; } else if (!stricmp(option, "nlarea")) { use_defaults = 0 ; sscanf(argv[2], "%f", &parms.l_nlarea) ; nargs = 1 ; fprintf(stderr, "using l_nlarea = %2.3f\n", parms.l_nlarea) ; } else if (!stricmp(option, "spring")) { use_defaults = 0 ; sscanf(argv[2], "%f", &parms.l_spring) ; nargs = 1 ; fprintf(stderr, "using l_spring = %2.3f\n", parms.l_spring) ; } else if (!stricmp(option, "corr")) { use_defaults = 0 ; sscanf(argv[2], "%f", &parms.l_corr) ; nargs = 1 ; fprintf(stderr, "using l_corr = %2.3f\n", parms.l_corr) ; } else if (!stricmp(option, "remove_negative")) { remove_negative = atoi(argv[2]) ; nargs = 1 ; fprintf(stderr, "%sremoving negative triangles with iterative smoothing\n", remove_negative ? "" : "not ") ; } else if (!stricmp(option, "curv")) { parms.flags |= IP_USE_CURVATURE ; fprintf(stderr, "using smoothwm curvature for final alignment\n") ; } else if (!stricmp(option, "nocurv")) { parms.flags &= ~IP_USE_CURVATURE ; fprintf(stderr, "NOT using smoothwm curvature for final alignment\n") ; } else if (!stricmp(option, "sreg")) { starting_reg_fname = argv[2] ; nargs = 1 ; fprintf(stderr, "starting registration with coordinates in %s\n", starting_reg_fname) ; } else if (!stricmp(option, "adaptive")) { parms.integration_type = INTEGRATE_ADAPTIVE ; fprintf(stderr, "using adaptive time step integration\n") ; } else if (!stricmp(option, "nbrs")) { nbrs = atoi(argv[2]) ; nargs = 1 ; fprintf(stderr, "using neighborhood size=%d\n", nbrs) ; } else if (!stricmp(option, "tol")) { if (sscanf(argv[2], "%e", &f) < 1) ErrorExit(ERROR_BADPARM, "%s: could not scan tol from %s", Progname, argv[2]) ; parms.tol = (double)f ; nargs = 1 ; fprintf(stderr, "using tol = %2.2e\n", (float)parms.tol) ; } else if (!stricmp(option, "error_ratio")) { parms.error_ratio = atof(argv[2]) ; nargs = 1 ; fprintf(stderr, "error_ratio=%2.3f\n", parms.error_ratio) ; } else if (!stricmp(option, "dt_inc")) { parms.dt_increase = atof(argv[2]) ; nargs = 1 ; fprintf(stderr, "dt_increase=%2.3f\n", parms.dt_increase) ; } else if (!stricmp(option, "lap") || !stricmp(option, "lap")) { parms.l_lap = atof(argv[2]) ; nargs = 1 ; fprintf(stderr, "l_laplacian = %2.3f\n", parms.l_lap) ; } else if (!stricmp(option, "vnum")) { parms.nbhd_size = atof(argv[2]) ; parms.max_nbrs = atof(argv[3]) ; nargs = 2 ; fprintf(stderr, "nbr size = %d, max neighbors = %d\n", parms.nbhd_size, parms.max_nbrs) ; } else if (!stricmp(option, "dt_dec")) { parms.dt_decrease = atof(argv[2]) ; nargs = 1 ; fprintf(stderr, "dt_decrease=%2.3f\n", parms.dt_decrease) ; } else if (!stricmp(option, "ocorr")) { l_ocorr = atof(argv[2]) ; printf("setting overlay correlation coefficient to %2.1f\n", l_ocorr) ; nargs = 1 ; fprintf(stderr, "dt_decrease=%2.3f\n", parms.dt_decrease) ; } else if (!stricmp(option, "overlay")) { int navgs ; if (noverlays == 0) { atlas_size = 0 ; } if (multiframes == 0) { initParms() ; multiframes = 1 ; } overlays[noverlays++] = argv[2] ; navgs = atof(argv[3]) ; printf("reading overlay from %s and smoothing it %d times\n", argv[2], navgs) ; n=parms.nfields++; SetFieldLabel(&parms.fields[n], OVERLAY_FRAME, atlas_size, l_ocorr, 0.0, navgs, which_norm); SetFieldName(&parms.fields[n], argv[2]) ; atlas_size++ ; nargs = 2 ; } else if (!stricmp(option, "distance")) { int navgs ; if (noverlays == 0) { atlas_size = 0 ; } if (multiframes == 0) { initParms() ; multiframes = 1 ; } overlays[noverlays++] = argv[2] ; navgs = atof(argv[3]) ; printf("reading overlay from %s and smoothing it %d times\n", argv[2], navgs) ; n=parms.nfields++; SetFieldLabel(&parms.fields[n], DISTANCE_TRANSFORM_FRAME, atlas_size, l_ocorr, 0.0, navgs, NORM_MAX) ; SetFieldName(&parms.fields[n], argv[2]) ; atlas_size++ ; nargs = 2 ; } else if (!stricmp(option, "canon")) { canon_name = argv[2] ; nargs = 1 ; fprintf(stderr, "using %s for canonical properties...\n", canon_name) ; } else if (!stricmp(option, "overlay-dir")) { parms.overlay_dir = strcpyalloc(argv[2]) ; nargs = 1 ; } else switch (toupper(*option)) { case 'M': parms.integration_type = INTEGRATE_MOMENTUM ; parms.momentum = atof(argv[2]) ; nargs = 1 ; fprintf(stderr, "momentum = %2.2f\n", (float)parms.momentum) ; break ; case 'L': if (nlabels >= MAX_LABELS-1) ErrorExit(ERROR_NO_MEMORY, "%s: too many labels specified (%d max)", Progname, MAX_LABELS) ; nargs = 3 ; labels[nlabels] = LabelRead(NULL, argv[2]) ; if (labels[nlabels] == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read label file %s", Progname, argv[2]) ; label_gcsa[nlabels] = GCSAread(argv[3]) ; if (label_gcsa[nlabels] == NULL) ErrorExit(ERROR_NOFILE, "%s: could not read GCSA file %s", Progname, argv[3]) ; label_names[nlabels] = argv[4] ; CTABfindName(label_gcsa[nlabels]->ct, argv[4],&label_indices[nlabels]) ; if (label_indices[nlabels] < 0) ErrorExit(ERROR_NOFILE, "%s: could not map name %s to index", Progname, argv[3]) ; CTABannotationAtIndex(label_gcsa[nlabels]->ct, label_indices[nlabels], &label_annots[nlabels]); nlabels++ ; gMRISexternalSSE = gcsaSSE ; break ; case 'E': parms.l_external = atof(argv[2]) ; nargs = 1 ; printf("setting l_external = %2.1f\n", parms.l_external) ; break ; case 'C': strcpy(curvature_fname, argv[2]) ; nargs = 1 ; break ; case 'A': sscanf(argv[2], "%d", &parms.n_averages) ; nargs = 1 ; fprintf(stderr, "using n_averages = %d\n", parms.n_averages) ; break ; case '1': single_surf = True ; printf("treating target as a single subject's surface...\n") ; break ; case 'S': scale = atof(argv[2]) ; fprintf(stderr, "scaling distances by %2.2f\n", scale) ; nargs = 1 ; break ; case 'N': sscanf(argv[2], "%d", &parms.niterations) ; nargs = 1 ; fprintf(stderr, "using niterations = %d\n", parms.niterations) ; break ; case 'W': Gdiag |= DIAG_WRITE ; sscanf(argv[2], "%d", &parms.write_iterations) ; nargs = 1 ; fprintf(stderr, "using write iterations = %d\n", parms.write_iterations) ; break ; case 'V': Gdiag_no = atoi(argv[2]) ; nargs = 1 ; break ; case 'O': orig_name = argv[2] ; nargs = 1 ; fprintf(stderr, "using %s for original properties...\n", orig_name) ; break ; case 'P': max_passes = atoi(argv[2]) ; fprintf(stderr, "limiting unfolding to %d passes\n", max_passes) ; nargs = 1 ; break ; case '?': case 'H': case 'U': print_help() ; exit(1) ; break ; default: fprintf(stderr, "unknown option %s\n", argv[1]) ; exit(1) ; break ; } return(nargs) ; }