def process_options(valid_opts, argv): """return status and VarsObject structs of subject and control variables - given list of valid options, read and process the user options - if terminal option or -no_gui, return 0 (succesful quit) return 1 : on success and terminate 0 : on success and continue with GUI -1 : on error condition """ # a quick out if len(argv) == 0: return 0, None, None, None # process any optlist_ options valid_opts.check_special_opts(argv) # ------------------------------------------------------------ # check for terminal options before processing the rest if '-help' in sys.argv: print(g_command_help) valid_opts.show('', 1, show_count=0) print(g_help_trailer) return 1, None, None, None if '-help_gui' in sys.argv: print(USUBJ.helpstr_usubj_gui) return 1, None, None, None if '-help_howto_program' in sys.argv: print(USUBJ.helpstr_howto_program) return 1, None, None, None if '-help_install' in sys.argv: print(g_install_str) return 1, None, None, None if '-help_install_nokia' in sys.argv: print(g_install_nokia) return 1, None, None, None if '-hist' in sys.argv: print(USUBJ.g_history) return 1, None, None, None if '-show_default_vars' in sys.argv: USUBJ.g_ctrl_defs.show('default cvars :') USUBJ.g_subj_defs.show('default svars :') return 1, None, None, None if '-show_valid_opts' in sys.argv: valid_opts.show('', 1) return 1, None, None, None if '-show_svar_dict' in sys.argv: dict = USUBJ.g_svar_dict keys = list(dict.keys()) keys.sort() for key in keys: print(' %-20s : %s' % (key, dict[key])) return 1, None, None, None if '-todo' in sys.argv: print(USUBJ.helpstr_todo) return 1, None, None, None if '-ver' in sys.argv: print('uber_subject.py: version %s' % USUBJ.g_version) return 1, None, None, None # ------------------------------------------------------------ # read and process user options (no check for terminal opts) uopts = OPT.read_options(argv, valid_opts) if not uopts: return -1, None, None, None # init subject options struct svars = VO.VarsObject('subject vars from command line') cvars = VO.VarsObject('control vars from command line') guiopts = ['uber_subject.py'] # first set verbose level val, err = uopts.get_type_opt(int, '-verb') if val != None and not err: verb = val else: verb = 1 USUBJ.set_vstr_from_def('cvars', 'verb', ['%d' % verb], cvars) use_gui = 1 # assume GUI unless we hear otherwise svar_keys = list(USUBJ.g_svar_dict.keys()) errs = 0 # ------------------------------------------------------------ # first process all setup options (e.g. -anal_type/domain) # - since they might go via -svar, we must search for opt in uopts.olist: # just check for 'rest' here if opt.name == '-anal_type': val, err = uopts.get_string_opt('', opt=opt) if val == None or err: return -1, None, None, None if val == 'rest': if verb > 1: print('-- init from rest defaults') svars.merge(USUBJ.g_rdef_strs) elif opt.name == '-anal_domain': val, err = uopts.get_string_opt('', opt=opt) if val == None or err: return -1, None, None, None if val == 'surface': print('** uber_subject.py: not ready for surface analysis') return -1, None, None, None elif opt.name == '-svar': val, err = uopts.get_string_list('', opt=opt) if val == None or err: return -1, None, None, None if val[0] == '-anal_type': if val[1] == 'rest': if verb > 1: print('-- init from rest defaults') svars.merge(USUBJ.g_rdef_strs) elif val[0] == '-anal_domain': if val[1] == 'surface': print('** uber_subject.py: not ready for surface analysis') return -1, None, None, None # done with analysis init options # ------------------------------------------------------------ for opt in uopts.olist: # skip -verb and any terminal option (though they should not be here) if opt.name == '-help': continue elif opt.name == '-help_gui': continue elif opt.name == '-hist': continue elif opt.name == '-show_valid_opts': continue elif opt.name == '-todo': continue elif opt.name == '-ver': continue elif opt.name == '-verb': continue # and skip any pre-setup options ... elif opt.name == '-anal_type': continue elif opt.name == '-anal_domain': continue # and skip any post-setup options ... elif opt.name == '-print_ap_command': continue elif opt.name == '-save_ap_command': continue elif opt.name == '-exec_ap_command': continue elif opt.name == '-exec_proc_script': continue vname = opt.name[1:] # now go after "normal" options if opt.name == '-no_gui': use_gui = 0 continue # get any PyQt4 options elif opt.name == '-qt_opts': val, err = uopts.get_string_list('', opt=opt) if val != None and err: return -1, None, None, None guiopts.extend(val) # cvar requires at least 2 parameters, name and value elif opt.name == '-cvar': val, err = uopts.get_string_list('', opt=opt) if val != None and err: return -1, None, None, None # and set it from the form name = [value_list] if USUBJ.set_vstr_from_def( 'cvars', val[0], val[1:], cvars, verb=verb, spec=1) < 0: errs += 1 continue # svar requires at least 2 parameters, name and value elif opt.name == '-svar': val, err = uopts.get_string_list('', opt=opt) if val == None or err: return -1, None, None, None # and set it from the form name = [value_list] if USUBJ.set_vstr_from_def( 'svars', val[0], val[1:], svars, verb=verb, spec=1) < 0: errs += 1 continue # go after a direct svar key elif vname in svar_keys: val, err = uopts.get_string_list('', opt=opt) if val == None or err: return -1, None, None, None if USUBJ.set_vstr_from_def( 'svars', vname, val, svars, verb=verb, spec=1) < 0: errs += 1 continue else: print('** invalid option: %s' % opt.name) errs += 1 continue if not errs: # then we can handle any processing options if uopts.find_opt('-print_ap_command'): print_ap_command(svars, cvars) if not errs: # then we can handle any processing options opt = uopts.find_opt('-save_ap_command') if opt != None: val, err = uopts.get_string_opt('', opt=opt) if val == None or err: return -1, None, None, None save_ap_command(svars, cvars, val) if not errs: # then we can handle any processing options if uopts.find_opt('-exec_ap_command'): subj = run_ap_command(svars, cvars) if subj != None and uopts.find_opt('-exec_proc_script'): subj.exec_proc_script() if verb > 2: # show applied subject variables changestr = cvars.changed_attrs_str(USUBJ.g_cdef_strs, skiplist='name', showskip=0, showdel=0) print('++ applied control variables: %s\n' % changestr) changestr = svars.changed_attrs_str(USUBJ.g_sdef_strs, skiplist='name', showskip=0, showdel=0) print('++ applied subject variables: %s\n' % changestr) if errs: return -1, None, None, None if use_gui: return 0, svars, cvars, guiopts else: return 1, svars, cvars, guiopts
- handle NIFTI surf_vol - append command line to script 0.13 12 Aug, 2019: python3 compatible """ g_version = '0.13 (August 12, 2019)' # ---------------------------------------------------------------------- # global values to apply as defaults # ---------------------------------------------------------------------- # global definitions of result, control and user defaults # (as well as string versions of control and user defaults) # ---- resulting values returned after class actions ---- g_res_defs = VO.VarsObject("slow_surf_clustsim result variables") g_res_defs.file_proc = '' # file name for process script g_res_defs.output_proc = '' # output from running proc script # ---- control variables: process control, not set by user in GUI g_ctrl_defs = VO.VarsObject("slow_surf_clustsim control defaults") g_ctrl_defs.verb = 1 # verbose level g_ctrl_defs.proc_dir = '.' # process dir: holds scripts and result dir g_ctrl_defs.time_process = 'yes' # run /usr/bin/time on commands? # rcr - default to 'no' g_ctrl_defs.on_surface = 'no' # default to starting from the volume g_ctrl_defs.nsteps = 10 g_ctrl_defs.keepblocks = 10 # number of iteration block outputs to keep # ---- user variables: process control, alignment inputs and options ----
def process_options(self): argv = sys.argv if len(argv) == 0: # non-gui out print(g_command_help) return 1 # process any optlist_ options self.valid_opts.check_special_opts(argv) # process terminal options without the option_list interface # (so that errors are not reported) # if no arguments are given, apply -help if len(argv) <= 1 or '-help' in argv: print(g_command_help) return 1 if '-hist' in argv: print(CLUST.g_history) return 1 if '-show_default_cvars' in argv: CLUST.g_ctrl_defs.show('') return 1 if '-show_default_uvars' in argv: CLUST.g_user_defs.show('') return 1 if '-show_valid_opts' in argv: self.valid_opts.show('', 1) return 1 if '-ver' in argv: print(CLUST.g_version) return 1 # ============================================================ # read options specified by the user self.user_opts = OPT.read_options(argv, self.valid_opts) uopts = self.user_opts # convenience variable if not uopts: return -1 # error condition # ------------------------------------------------------------ # init subject options struct self.cvars = VO.VarsObject('control vars from command line') self.uvars = VO.VarsObject('user vars from command line') val, err = uopts.get_type_opt(int, '-verb') if val != None and not err: self.verb = val SUBJ.set_var_str_from_def('cvars', 'verb', ['%d' % self.verb], self.cvars, defs=CLUST.g_ctrl_defs) # first process all setup options errs = 0 for opt in uopts.olist: # skip -verb (any terminal option should block getting here) if opt.name == '-verb': continue # and skip and post-setup options (print command, save, etc.) elif opt.name == '-print_script': continue elif opt.name == '-save_script': continue # now go after "normal" options elif opt.name == '-on_surface': val, err = uopts.get_string_list('', opt=opt) if val == None or err: return -1 if self.cvars.set_var_with_defs(opt.name[1:], val, CLUST.g_ctrl_defs, as_type=1, oname='cvars', verb=self.verb) < 0: errs += 1 continue # cvar requires at least 2 parameters, name and value elif opt.name == '-cvar': val, err = uopts.get_string_list('', opt=opt) if val == None or err: return -1 # go after verb, in particular if val[0] == 'verb': try: self.verb = int(val[1]) except: print("** failed to set 'verb' level") errs += 1 continue # and set it from the form name = [value_list] if SUBJ.set_var_str_from_def('cvars', val[0], val[1:], self.cvars, CLUST.g_ctrl_defs, verb=self.verb) < 0: errs += 1 continue # uvar requires at least 2 parameters, name and value elif opt.name == '-uvar': val, err = uopts.get_string_list('', opt=opt) if val == None or err: return -1 # and set it from the form name = [value_list] if SUBJ.set_var_str_from_def('uvars', val[0], val[1:], self.uvars, CLUST.g_user_defs, verb=self.verb) < 0: errs += 1 continue else: print('** unknown option %s' % opt.name) errs += 1 if self.verb > 2: print('-' * 75) self.uvars.show('post-init uvars', name=0) self.cvars.show('post-init cvars', name=0) print('-' * 75) if errs: return -1 else: return 0 # no error, and continue on return
def __init__(self, parent=None, cvars=None, uvars=None, set_pdir=0): super(MainWindow, self).__init__(parent) # ------------------------------ # init main vars structs self.atest = None # AlignTest class element self.gvars = VO.VarsObject('uber_subject gui vars') # init verb and try to update from uvars self.verb = 1 if uvars != None: # try to update verb from uvars if uvars.valid('verb'): try: self.verb = int(uvars.verb) except: print '** UAT Main: bad uvars.verb = %s' % uvars.verb # initialize the subject variables to defaults, update at the end self.cvars = USKEL.g_cdef_strs.copy('GUI control vars') self.uvars = USKEL.g_udef_strs.copy('GUI user vars') self.set_pdir = set_pdir # ------------------------------ # L1 - main menubar and layout self.add_menu_bar() self.add_tool_bar() self.add_status_bar() self.gvars.Wcentral = QtGui.QWidget() mainlayout = QtGui.QVBoxLayout(self.gvars.Wcentral) # ------------------------------ # L2 - make top Group Box and Vertical Layout; add to main Layout self.make_l2_widgets() # ------------------------------ # L3 - fill m2_vlayout with group boxes self.make_l3_group_boxes() # ------------------------------------------------------------ # finish level 2 and then level 1 mainlayout.addWidget(self.gvars.gbox_datasets) mainlayout.addWidget(self.gvars.m2_scroll) # ------------------------------ # save this for last to ensure it is all visible self.gvars.m2_scroll.setWidget(self.gvars.m2_gbox_inputs) self.gvars.Wcentral.setMinimumSize(350, 400) self.gvars.Wcentral.setLayout(mainlayout) self.setCentralWidget(self.gvars.Wcentral) self.make_extra_widgets() self.gvars.style = g_styles[g_style_index_def] # widgets are done, so apply pass subject vars self.reset_vars(cvars=cvars, uvars=uvars, set_pdir=set_pdir) # status : 0 = must create script, 1 = have script, ready to execute # -1 = script failure? self.status = 0 if self.verb > 1: print '-- finished Single Subject Dialog setup'
def process_options(self): """return 1 on valid and exit 0 on valid and continue -1 on invalid """ argv = sys.argv # a quick out (no help, continue and open GUI) if len(argv) == 0: return 0 # process any optlist_ options self.valid_opts.check_special_opts(argv) # ------------------------------------------------------------ # check for terminal options before processing the rest if '-help' in argv: print g_command_help return 1 if '-help_gui' in argv: print UALIGN.helpstr_gui return 1 if '-help_howto_program' in argv: print UALIGN.helpstr_create_program return 1 if '-help_todo' in argv: print UALIGN.helpstr_todo return 1 if '-hist' in argv: print UALIGN.g_history return 1 if '-show_default_vars' in argv: UALIGN.g_user_defs.show('default uvars :') return 1 if '-show_valid_opts' in argv: self.valid_opts.show('', 1) return 1 if '-ver' in argv: print 'uber_align_test.py: version %s' % UALIGN.g_version return 1 # ------------------------------------------------------------ # read and process user options (no check for terminal opts) self.uopts = OPT.read_options(argv, self.valid_opts) if not self.uopts: return -1 uopts = self.uopts # convenience # init subject options struct self.cvars = VO.VarsObject('control vars from command line') self.uvars = VO.VarsObject('user vars from command line') self.guiopts = ['uber_align_test.py'] # first set verbose level val, err = uopts.get_type_opt(int, '-verb') if val != None and not err: self.verb = val else: self.verb = 1 # changed from SUBJ.set_var_str_from_def self.uvars.set_var_with_defs('verb', ['%d' % self.verb], UALIGN.g_user_defs, oname='uvars') use_gui = 1 # assume GUI unless we hear otherwise # first process all setup options errs = 0 for opt in uopts.olist: # skip -verb (any terminal option should block getting here) if opt.name == '-verb': continue # and skip and post-setup options (print command, save, etc.) elif opt.name == '-print_script': continue elif opt.name == '-save_script': continue # now go after "normal" options if opt.name == '-no_gui': use_gui = 0 continue # get any PyQt4 options elif opt.name == '-qt_opts': val, err = uopts.get_string_list('', opt=opt) if val != None and err: return -1 self.guiopts.extend(val) # cvar requires at least 2 parameters, name and value elif opt.name == '-cvar': val, err = uopts.get_string_list('', opt=opt) if val != None and err: return -1 # and set it from the form name = [value_list] if self.cvars.set_var_with_defs(val[0], val[1:], UALIGN.g_ctrl_defs, oname='cvars', verb=self.verb) < 0: errs += 1 continue # uvar requires at least 2 parameters, name and value elif opt.name == '-uvar': val, err = uopts.get_string_list('', opt=opt) if val != None and err: return -1 # and set it from the form name = [value_list] if self.uvars.set_var_with_defs(val[0], val[1:], UALIGN.g_user_defs, oname='uvars', verb=self.verb) < 0: errs += 1 continue if not errs: # then we can handle any processing options if uopts.find_opt('-print_script'): self.print_script() if not errs: # then we can handle any processing options opt = uopts.find_opt('-save_script') if opt != None: val, err = uopts.get_string_opt('', opt=opt) if val != None and not err: self.save_script(val) if errs: return -1 if use_gui: return 0 # continue and open GUI else: return 1 # no error, but terminate on return
def process_options(self): """return 1 on valid and exit 0 on valid and continue -1 on invalid """ argv = sys.argv # a quick out (no help, continue and open GUI) if len(argv) == 0: return 0 # process any optlist_ options self.valid_opts.check_special_opts(argv) # ------------------------------------------------------------ # check for terminal options before processing the rest if '-help' in argv: print g_command_help return 1 if '-help_gui' in argv: print LTT.helpstr_gui return 1 if '-help_todo' in argv: print LTT.helpstr_todo return 1 if '-hist' in argv: print LTT.g_history return 1 if '-show_default_vars' in argv: LTT.g_user_defs.show('default uvars :') return 1 if '-show_valid_opts' in argv: self.valid_opts.show('', 1) return 1 if '-show_cvar_dict' in sys.argv: dict = LTT.g_cvar_dict keys = dict.keys() keys.sort() for key in keys: print ' %-20s : %s' % (key, dict[key]) return 1 if '-show_uvar_dict' in sys.argv: dict = LTT.g_uvar_dict keys = dict.keys() keys.sort() for key in keys: print ' %-20s : %s' % (key, dict[key]) return 1 if '-ver' in argv: print 'uber_ttest.py: version %s' % LTT.g_version return 1 # ------------------------------------------------------------ # read and process user options (no check for terminal opts) self.uopts = OPT.read_options(argv, self.valid_opts) if not self.uopts: return -1 uopts = self.uopts # convenience # init subject options struct self.cvars = VO.VarsObject('control vars from command line') self.uvars = VO.VarsObject('user vars from command line') self.guiopts = ['uber_ttest.py'] # first set verbose level val, err = uopts.get_type_opt(int, '-verb') if val != None and not err: self.verb = val else: self.verb = 1 SUBJ.set_var_str_from_def('cvars', 'verb', ['%d'%self.verb], self.cvars, defs=LTT.g_ctrl_defs) use_gui = 1 # assume GUI unless we hear otherwise cvar_keys = LTT.g_cvar_dict.keys() uvar_keys = LTT.g_uvar_dict.keys() # we already processed terminal options term_opts = ['-help', '-help_gui', '-help_todo', '-hist', 'show_default_vars', '-ver', '-show_cvar_dict', '-show_uvar_dict'] # skip post-setup options, to be checked later post_opts = ['-print_script', '-save_script'] # first process all setup options errs = 0 for opt in uopts.olist: # skip -verb (any terminal option should block getting here) if opt.name in term_opts: continue # and skip and post-setup options (print command, save, etc.) if opt.name in post_opts: continue vname = opt.name[1:] # now go after "normal" options if opt.name == '-no_gui': use_gui = 0 continue # get any PyQt4 options elif opt.name == '-qt_opts': val, err = uopts.get_string_list('', opt=opt) if val != None and err: errs += 1 continue self.guiopts.extend(val) # cvar requires at least 2 parameters, name and value elif opt.name == '-cvar': val, err = uopts.get_string_list('', opt=opt) if val != None and err: errs += 1 continue if self.cvars.set_var_with_defs(val[0], val[1:], LTT.g_ctrl_defs, oname='cvars', verb=self.verb) < 0: errs += 1 continue # uvar requires at least 2 parameters, name and value elif opt.name == '-uvar': val, err = uopts.get_string_list('', opt=opt) if val != None and err: errs += 1 continue if self.uvars.set_var_with_defs(val[0], val[1:], LTT.g_user_defs, oname='uvars', verb=self.verb) < 0: errs += 1 continue # maybe this is a control variable key elif vname in cvar_keys: val, err = uopts.get_string_list('', opt=opt) if val == None or err: errs += 1 continue if self.cvars.set_var_with_defs(vname, val, LTT.g_ctrl_defs, oname='cvars', verb=self.verb) < 0: errs += 1 continue # maybe this is a user variable key elif vname in uvar_keys: val, err = uopts.get_string_list('', opt=opt) if val == None or err: errs += 1 continue if self.uvars.set_var_with_defs(vname, val, LTT.g_user_defs, oname='uvars', verb=self.verb) < 0: errs += 1 continue else: print '** invalid option: %s' % opt.name errs += 1 continue if not errs: # then we can handle any processing options if uopts.find_opt('-print_script'): self.print_script() use_gui = 0 #opt = uopts.find_opt('-save_script') #if opt != None: # val, err = uopts.get_string_opt('', opt=opt) val, err = uopts.get_string_opt('-save_script') if val != None and not err: self.save_script(val) use_gui = 0 if errs: return -1 if use_gui: return 0 # continue and open GUI else: return 1 # no error, but terminate on return
2.0 28 Dec, 2017: python3 compatible """ g_version = '2.0 (December 28, 2017)' # ---------------------------------------------------------------------- # global definitions g_prog_list = ['3dttest++', '3dMEMA'] # ---------------------------------------------------------------------- # global definitions of result, control and user defaults # (as well as string versions of control and user defaults) # ---- resulting values returned after class actions ---- g_res_defs = VO.VarsObject("uber_ttest result variables") g_res_defs.file_proc = '' # file name for process script g_res_defs.output_proc = '' # output from running proc script # ---- control variables: process control, not set by user in GUI g_ctrl_defs = VO.VarsObject("uber_ttest control defaults") g_ctrl_defs.proc_dir = '.' # process dir: holds scripts and result dir g_ctrl_defs.verb = 1 # verbose level g_ctrl_defs.copy_scripts = 'yes' # make .orig copies of scripts? g_ctrl_defs.results_dir = 'test.results' # output directory for results # control varaible dictionary, for command line options g_cvar_dict = { 'proc_dir': 'set processing dir to hold scripts', 'verb': 'set verbose level',