def bindctrl(self,ctrlnames,type,validatef):
     for i,v in enumerate(ctrlnames):
         if type[i] == 'int':
             wxvt.setup_validated_integer_callback(self.control(v),
                                                   xrc.XRCID(v),
                                                   validatef,
                                                   pending_color=params.params.wxvt_bg)
         else:
             wxvt.setup_validated_float_callback(self.control(v),
                                                 xrc.XRCID(v),
                                                 validatef,
                                                 pending_color=params.params.wxvt_bg)
예제 #2
0
 def bindctrl(self, ctrlnames, type, validatef):
     for i, v in enumerate(ctrlnames):
         if type[i] == 'int':
             wxvt.setup_validated_integer_callback(
                 self.control(v),
                 xrc.XRCID(v),
                 validatef,
                 pending_color=params.params.wxvt_bg)
         else:
             wxvt.setup_validated_float_callback(
                 self.control(v),
                 xrc.XRCID(v),
                 validatef,
                 pending_color=params.params.wxvt_bg)
예제 #3
0
    def __init__(self, parent=None):
        # it looks like this is dead code, because RSRC_FILE is undefined -JAB 2/27/16
        rsrc = xrc.XmlResource(RSRC_FILE)
        self.frame = rsrc.LoadFrame(parent, "frame_Ctrax_settings")

        # input box handles
        self.vel_bins_box = xrc.XRCCTRL(self.frame, "text_vel_bins")
        self.orn_bins_box = xrc.XRCCTRL(self.frame, "text_orn_bins")
        self.space_bins_box = xrc.XRCCTRL(self.frame, "text_space_bins")
        self.pos_binsize_box = xrc.XRCCTRL(self.frame, "text_pos_binsize")
        self.vel_axes_box = xrc.XRCCTRL(self.frame, "text_vel_axes")
        self.orn_axes_box = xrc.XRCCTRL(self.frame, "text_orn_axes")
        self.space_axes_box = xrc.XRCCTRL(self.frame, "text_space_axes")
        self.pos_axes_box = xrc.XRCCTRL(self.frame, "text_pos_axes")

        # initial values
        self.vel_bins_box.SetValue(str(const.vel_bins))
        self.orn_bins_box.SetValue(str(const.orn_bins))
        self.space_bins_box.SetValue(str(const.space_bins))
        self.pos_binsize_box.SetValue(str(const.pos_binsize))
        self.vel_axes_box.SetValue("a,a,a,a")
        self.orn_axes_box.SetValue("a,a,a,a")
        self.space_axes_box.SetValue("a,a,a,a")
        self.pos_axes_box.SetValue("a,a,a,a")

        # bind to wxvalidatedtext
        wxvt.setup_validated_integer_callback(self.vel_bins_box,
                                              xrc.XRCID("text_vel_bins"),
                                              self.OnTextValidated,
                                              pending_color=params.wxvt_bg)
        wxvt.setup_validated_integer_callback(self.orn_bins_box,
                                              xrc.XRCID("text_orn_bins"),
                                              self.OnTextValidated,
                                              pending_color=params.wxvt_bg)
        wxvt.setup_validated_integer_callback(self.space_bins_box,
                                              xrc.XRCID("text_space_bins"),
                                              self.OnTextValidated,
                                              pending_color=params.wxvt_bg)
        wxvt.setup_validated_integer_callback(self.pos_binsize_box,
                                              xrc.XRCID("text_pos_binsize"),
                                              self.OnTextValidated,
                                              pending_color=params.wxvt_bg)
        wxvt.Validator(self.vel_axes_box,
                       xrc.XRCID("text_vel_axes"),
                       self.OnTextValidated,
                       self.ParseAxes,
                       pending_color=params.wxvt_bg)
        wxvt.Validator(self.orn_axes_box,
                       xrc.XRCID("text_orn_axes"),
                       self.OnTextValidated,
                       self.ParseAxes,
                       pending_color=params.wxvt_bg)
        wxvt.Validator(self.space_axes_box,
                       xrc.XRCID("text_space_axes"),
                       self.OnTextValidated,
                       self.ParseAxes,
                       pending_color=params.wxvt_bg)
        wxvt.Validator(self.pos_axes_box,
                       xrc.XRCID("text_pos_axes"),
                       self.OnTextValidated,
                       self.ParseAxes,
                       pending_color=params.wxvt_bg)

        self.frame.Show()
예제 #4
0
    def InitGUI(self):
        """Load XML resources, create handles, bind callbacks."""
        rsrc = xrc.XmlResource(RSRC_FILE)

        self.frame = rsrc.LoadFrame(None, "frame_Ctrax")
        self.frame.SetIcon(wx.Icon(ICON_FILE, wx.BITMAP_TYPE_ICO))

        # make references to useful objects
        self.menu = self.frame.GetMenuBar()
        if DEBUG:
            self.debugmenu = wx.Menu()
            self.debugmenu.Append(
                ID_PRINTINTERVALS, "Print Intervals", "Print frame intervals tracked, buffered, and written."
            )
            self.debugmenu.Append(
                ID_PRINTBUFFEREL, "Print Buffer...", "Print ellipses stored at specified element of buffer."
            )
            self.debugmenu.Append(ID_PRINTFRAME, "Print Frame...", "Pring ellipses for specified frame.")
            self.menu.Append(self.debugmenu, "DEBUG")

        self.status = xrc.XRCCTRL(self.frame, "bar_status")
        self.framenumber_text = xrc.XRCCTRL(self.frame, "text_framenumber")
        self.num_flies_text = xrc.XRCCTRL(self.frame, "text_num_flies")
        self.rate_text = xrc.XRCCTRL(self.frame, "text_refresh_rate")
        self.slider = xrc.XRCCTRL(self.frame, "slider_frame")
        self.slider.Enable(False)

        # make image window
        self.img_panel = xrc.XRCCTRL(self.frame, "panel_img")
        box = wx.BoxSizer(wx.VERTICAL)
        self.img_panel.SetSizer(box)
        self.img_wind = wxvideo.DynamicImageCanvas(self.img_panel, -1)
        box.Add(self.img_wind, 1, wx.EXPAND)
        self.img_panel.SetAutoLayout(True)
        self.img_panel.Layout()

        self.zoommode = False

        # set up tools
        self.toolbar = xrc.XRCCTRL(self.frame, "toolbar")

        # other tools
        self.zoom_id = xrc.XRCID("zoom")
        self.play_id = xrc.XRCID("play")
        self.stop_id = xrc.XRCID("stop")
        self.speedup_id = xrc.XRCID("speed_up")
        self.slowdown_id = xrc.XRCID("slow_down")
        self.refresh_id = xrc.XRCID("refresh")

        # set up appearances for toolbar
        self.toolbar.SetToggle(self.zoommode, self.zoom_id)
        self.stop_tracking_tooltip = "Stop Tracking"
        self.stop_playback_tooltip = "Stop Video Playback"
        self.start_playback_tooltip = "Start Video Playback"
        self.speedup_tracking_tooltip = "Increase Refresh Rate"
        self.speedup_playback_tooltip = "Increase Playback Speed"
        self.slowdown_tracking_tooltip = "Decrease Refresh Rate"
        self.slowdown_playback_tooltip = "Decrease Playback Speed"
        self.play_speed = 1.0

        self.UpdateToolBar("stopped")

        # bind callbacks
        # file menu
        self.frame.Bind(wx.EVT_MENU, self.OnOpen, id=xrc.XRCID("menu_file_open"))
        self.frame.Bind(wx.EVT_MENU, self.OnLoadSettings, id=xrc.XRCID("menu_load_settings"))
        self.frame.Bind(wx.EVT_MENU, self.OnBatch, id=xrc.XRCID("menu_file_batch"))
        self.frame.Bind(wx.EVT_MENU, self.OnSave, id=xrc.XRCID("menu_file_export"))
        self.frame.Bind(wx.EVT_MENU, self.OnSaveTimestamps, id=xrc.XRCID("menu_file_write_timestamps"))
        self.frame.Bind(wx.EVT_MENU, self.OnSaveAvi, id=xrc.XRCID("menu_file_save_avi"))
        self.frame.Bind(wx.EVT_MENU, self.OnQuit, id=xrc.XRCID("menu_file_quit"))
        # help menu
        self.frame.Bind(wx.EVT_MENU, self.OnHelp, id=xrc.XRCID("menu_help_help"))
        self.frame.Bind(wx.EVT_MENU, self.OnAbout, id=xrc.XRCID("menu_help_about"))
        # track menu
        self.frame.Bind(wx.EVT_MENU, self.OnStartTrackingMenu, id=xrc.XRCID("menu_track_start"))
        self.frame.Bind(wx.EVT_MENU, self.OnStartTrackingMenu, id=xrc.XRCID("menu_track_resume"))
        self.frame.Bind(wx.EVT_MENU, self.OnStartTrackingMenu, id=xrc.XRCID("menu_track_resume_here"))
        self.frame.Bind(wx.EVT_MENU, self.OnWriteSBFMF, id=xrc.XRCID("menu_track_writesbfmf"))
        self.frame.Bind(wx.EVT_MENU, self.OnComputeBg, id=xrc.XRCID("menu_compute_background"))
        self.frame.Bind(wx.EVT_MENU, self.OnComputeShape, id=xrc.XRCID("menu_compute_shape"))
        # settings menu
        self.frame.Bind(wx.EVT_MENU, self.OnSettingsBGModel, id=xrc.XRCID("menu_settings_bg_model"))
        self.frame.Bind(wx.EVT_MENU, self.OnSettingsBG, id=xrc.XRCID("menu_settings_bg"))
        self.frame.Bind(wx.EVT_MENU, self.OnSettingsTracking, id=xrc.XRCID("menu_settings_tracking"))
        self.frame.Bind(wx.EVT_MENU, self.OnChooseOrientations, id=xrc.XRCID("menu_choose_orientations"))
        # self.frame.Bind( wx.EVT_MENU, self.OnEllipseSize, id=xrc.XRCID("menu_settings_ellipses") )
        # self.frame.Bind( wx.EVT_MENU, self.OnCheckColorblind, id=xrc.XRCID("menu_settings_use_colorblind") )
        self.frame.Bind(wx.EVT_MENU, self.OnCheckShowAnn, id=xrc.XRCID("menu_playback_show_ann"))
        self.frame.Bind(wx.EVT_MENU, self.OnCheckRefresh, id=xrc.XRCID("menu_do_refresh"))
        self.frame.Bind(wx.EVT_MENU, self.OnTailLength, id=xrc.XRCID("menu_playback_tails"))
        self.frame.Bind(wx.EVT_MENU, self.OnCheckDim, id=xrc.XRCID("menu_playback_dim"))
        self.frame.Bind(wx.EVT_MENU, self.OnCheckZoom, id=xrc.XRCID("menu_settings_zoom"))

        # DEBUG
        if DEBUG:
            self.frame.Bind(wx.EVT_MENU, self.OnDebugPrintIntervals, id=ID_PRINTINTERVALS)
            self.frame.Bind(wx.EVT_MENU, self.OnDebugPrintBufferElement, id=ID_PRINTBUFFEREL)
            self.frame.Bind(wx.EVT_MENU, self.OnDebugPrintFrame, id=ID_PRINTFRAME)

        # stats menu
        # self.frame.Bind( wx.EVT_MENU, self.OnStats, id=xrc.XRCID("menu_stats_vel") )
        # self.frame.Bind( wx.EVT_MENU, self.OnStats, id=xrc.XRCID("menu_stats_orn") )
        # self.frame.Bind( wx.EVT_MENU, self.OnStats, id=xrc.XRCID("menu_stats_space") )
        # self.frame.Bind( wx.EVT_MENU, self.OnStats, id=xrc.XRCID("menu_stats_pos") )
        # self.frame.Bind( wx.EVT_MENU, self.OnSettingsStats, id=xrc.XRCID("menu_stats_settings") )
        # self.frame.Bind( wx.EVT_MENU, self.OnCheckBatchStats, id=xrc.XRCID("menu_stats_batch") )
        # miscellaneous events
        self.frame.Bind(wx.EVT_CLOSE, self.OnQuit)
        self.frame.Bind(wx.EVT_SCROLL, self.OnSlider, self.slider)
        self.frame.Bind(wx.EVT_SIZE, self.OnResize)
        self.frame.Bind(wx.EVT_MAXIMIZE, self.OnResize)  # not called in Gnome?
        # toolbar
        self.frame.Bind(wx.EVT_TOOL, self.ZoomToggle, id=self.zoom_id)
        self.frame.Bind(wx.EVT_TOOL, self.OnPlayButton, id=self.play_id)
        self.frame.Bind(wx.EVT_TOOL, self.OnStopButton, id=self.stop_id)
        self.frame.Bind(wx.EVT_TOOL, self.OnSpeedUpButton, id=self.speedup_id)
        self.frame.Bind(wx.EVT_TOOL, self.OnSlowDownButton, id=self.slowdown_id)
        self.frame.Bind(wx.EVT_TOOL, self.OnRefreshButton, id=self.refresh_id)
        wxvt.setup_validated_integer_callback(
            self.framenumber_text,
            xrc.XRCID("text_framenumber"),
            self.OnFrameNumberValidated,
            pending_color=params.status_blue,
        )

        # default settings
        if sys.platform == "win32":
            homedir = os.path.join(os.environ["HOMEDRIVE"], os.environ["HOMEPATH"])
        else:
            homedir = os.environ["HOME"]
        self.dir = homedir
        self.ellipse_thickness = params.ellipse_thickness

        # read saved settings, overwriting defaults
        self.ReadUserfile()

        self.OnResize(None)
예제 #5
0
    def camera_starting_notification(self,
                                     cam_id,
                                     pixel_format=None,
                                     max_width=None,
                                     max_height=None):
        """

        cam_id is simply used as a dict key

        """
        self.xrcid2validator[cam_id] = {}

        bunch = BunchClass()

        bunch.max_num_points = SharedValue()
        bunch.max_num_points.set(10)

        self.bunches[cam_id]=bunch
        self.pixel_format[cam_id]=pixel_format
        # setup GUI stuff
        if len(self.cam_ids)==0:
            # adding first camera
            self.frame_nb.DeleteAllPages()

        #  make new per-camera wx panel
        per_cam_panel = RES.LoadPanel(self.frame_nb,"PER_CAM_PANEL")
        self.per_cam_panel[cam_id] = per_cam_panel
        per_cam_panel.SetAutoLayout(True)
        self.frame_nb.AddPage(per_cam_panel,cam_id)

        ctrl = xrc.XRCCTRL(per_cam_panel,"TAKE_BG_IMAGE")
        self.widget2cam_id[ctrl]=cam_id
        wx.EVT_BUTTON(ctrl,
                      ctrl.GetId(),
                      self.OnTakeBgImage)

        self.ongoing_bg_image_update_interval[cam_id] = LockedValue(50)
        ctrl = xrc.XRCCTRL(per_cam_panel,"BACKGROUND_IMAGE_UPDATE_INTERVAL")
        ctrl.SetValue( str(self.ongoing_bg_image_update_interval[cam_id].get()))
        self.widget2cam_id[ctrl]=cam_id
        validator = wxvt.setup_validated_integer_callback(
            ctrl,
            ctrl.GetId(),
            self.OnSetBackgroundUpdateInterval)
        self.xrcid2validator[cam_id]["BACKGROUND_IMAGE_UPDATE_INTERVAL"] = validator

        ctrl = xrc.XRCCTRL(per_cam_panel,"CLEAR_THRESHOLD")
        self.widget2cam_id[ctrl]=cam_id
        validator = wxvt.setup_validated_float_callback(
            ctrl,
            ctrl.GetId(),
            self.OnClearThreshold,
            ignore_initial_value=True)
        self.xrcid2validator[cam_id]["CLEAR_THRESHOLD"] = validator

        ctrl = xrc.XRCCTRL(per_cam_panel,"DIFF_THRESHOLD")
        self.widget2cam_id[ctrl]=cam_id
        validator = wxvt.setup_validated_integer_callback(
            ctrl,
            ctrl.GetId(),
            self.OnDiffThreshold,
            ignore_initial_value=True)
        self.xrcid2validator[cam_id]["DIFF_THRESHOLD"] = validator

        ctrl = xrc.XRCCTRL(per_cam_panel,"ROI2_RADIUS")
        self.widget2cam_id[ctrl]=cam_id
        validator = wxvt.setup_validated_integer_callback(
            ctrl,
            ctrl.GetId(),
            self.OnRoi2Radius,
            ignore_initial_value=True)
        self.xrcid2validator[cam_id]["ROI2_RADIUS"] = validator

        ctrl = xrc.XRCCTRL(per_cam_panel,"INVERSE_ALPHA")
        self.widget2cam_id[ctrl]=cam_id
        validator = wxvt.setup_validated_float_callback(
            ctrl,
            ctrl.GetId(),
            self.OnInverseAlpha,
            ignore_initial_value=True)
        self.xrcid2validator[cam_id]["INVERSE_ALPHA"] = validator

        ctrl = xrc.XRCCTRL(per_cam_panel,"N_SIGMA")
        self.widget2cam_id[ctrl]=cam_id
        validator = wxvt.setup_validated_float_callback(
            ctrl,
            ctrl.GetId(),
            self.OnNSigma,
            ignore_initial_value=True)
        self.xrcid2validator[cam_id]["N_SIGMA"] = validator

        ctrl = xrc.XRCCTRL(per_cam_panel,"MAX_NUM_POINTS")
        self.widget2cam_id[ctrl]=cam_id
        validator = wxvt.setup_validated_integer_callback(
            ctrl,
            ctrl.GetId(),
            self.OnMaxNPoints,
            ignore_initial_value=True)
        self.xrcid2validator[cam_id]["MAX_NUM_POINTS"] = validator
        ctrl.SetValue(str(bunch.max_num_points.get_nowait()))
        validator.set_state('valid')

        start_recording_widget = xrc.XRCCTRL(per_cam_panel,"START_RECORDING")
        self.widget2cam_id[start_recording_widget]=cam_id
        wx.EVT_BUTTON(start_recording_widget,
                      start_recording_widget.GetId(),
                      self.OnStartRecording)

        stop_recording_widget = xrc.XRCCTRL(per_cam_panel,"STOP_RECORDING")
        self.widget2cam_id[stop_recording_widget]=cam_id
        wx.EVT_BUTTON(stop_recording_widget,
                      stop_recording_widget.GetId(),
                      self.OnStopRecording)

        tracking_enabled_widget = xrc.XRCCTRL(per_cam_panel,"ENABLED_CHECKBOX")
        self.widget2cam_id[tracking_enabled_widget]=cam_id
        wx.EVT_CHECKBOX(tracking_enabled_widget,
                        tracking_enabled_widget.GetId(),
                        self.OnToggleTrackingEnabled)

        save_status_widget = xrc.XRCCTRL(per_cam_panel,"SAVE_STATUS")
        self.save_status_widget[cam_id] = save_status_widget

        self.save_data_prefix_widget[cam_id] = xrc.XRCCTRL(
            per_cam_panel,"SAVE_DATA_PREFIX")
        self.widget2cam_id[self.save_data_prefix_widget[cam_id]]=cam_id

        ctrl = xrc.XRCCTRL(per_cam_panel,"SAVE_DATA_DIR_BUTTON")
        self.widget2cam_id[ctrl]=cam_id
        wx.EVT_BUTTON(ctrl,
                      ctrl.GetId(),
                      self.OnSetSavePath)

#####################

        # setup non-GUI stuff
        self.cam_ids.append(cam_id)

        self.display_active[cam_id] = threading.Event()
        if len(self.cam_ids) > 1:
            raise NotImplementedError('if >1 camera supported, implement setting display_active on notebook page change')
        else:
            self.display_active[cam_id].set()

        self.clear_and_take_bg_image[cam_id] = threading.Event()
        self.clear_and_take_bg_image[cam_id].set() # start off setting background

        self.ticks_since_last_update[cam_id] = 0
        lbrt = (0,0,max_width-1,max_height-1)

        roi2_radius=int(xrc.XRCCTRL(per_cam_panel,"ROI2_RADIUS").GetValue())
        ra = realtime_image_analysis.RealtimeAnalyzer(lbrt,
                                                      max_width,
                                                      max_height,
                                                      bunch.max_num_points.get_nowait(),
                                                      roi2_radius)
        self.realtime_analyzer[cam_id] = ra

        self.new_clear_threshold[cam_id] = threading.Event()
        self.new_diff_threshold[cam_id] = threading.Event()
        self.new_roi2_radius[cam_id] = threading.Event()

        self.clear_threshold_value[cam_id] = ra.clear_threshold
        self.diff_threshold_value[cam_id] = ra.diff_threshold
        self.roi2_radius_value[cam_id] = ra.roi2_radius

        ctrl = xrc.XRCCTRL(per_cam_panel,"CLEAR_THRESHOLD")
        validator = self.xrcid2validator[cam_id]["CLEAR_THRESHOLD"]
        ctrl.SetValue( '%.2f'%ra.clear_threshold )
        validator.set_state('valid')

        ctrl = xrc.XRCCTRL(per_cam_panel,"DIFF_THRESHOLD")
        validator = self.xrcid2validator[cam_id]["DIFF_THRESHOLD"]
        ctrl.SetValue( '%d'%ra.diff_threshold )
        validator.set_state('valid')

        ctrl = xrc.XRCCTRL(per_cam_panel,"ROI2_RADIUS")
        validator = self.xrcid2validator[cam_id]["ROI2_RADIUS"]
        ctrl.SetValue( '%d'%ra.roi2_radius )
        validator.set_state('valid')

        max_frame_size = FastImage.Size( max_width, max_height )
        self.max_frame_size[cam_id] = max_frame_size

        bunch.inverse_alpha = SharedValue()
        bunch.inverse_alpha.set( float(xrc.XRCCTRL(per_cam_panel,"INVERSE_ALPHA").GetValue()) )
        validator = self.xrcid2validator[cam_id]["INVERSE_ALPHA"]
        validator.set_state('valid')

        bunch.n_sigma = SharedValue()
        bunch.n_sigma.set( float(xrc.XRCCTRL(per_cam_panel,"N_SIGMA").GetValue()) )
        validator = self.xrcid2validator[cam_id]["N_SIGMA"]
        validator.set_state('valid')

        self.frame.Fit()

        bunch.initial_take_bg_state = None

        bunch.running_mean_im_full = FastImage.FastImage32f(max_frame_size)
        bunch.running_sumsqf_full = FastImage.FastImage32f(max_frame_size)
        bunch.running_sumsqf_full.set_val(0,max_frame_size)
        bunch.fastframef32_tmp_full = FastImage.FastImage32f(max_frame_size)
        bunch.mean2_full = FastImage.FastImage32f(max_frame_size)
        bunch.std2_full = FastImage.FastImage32f(max_frame_size)
        bunch.running_stdframe_full = FastImage.FastImage32f(max_frame_size)
        bunch.noisy_pixels_mask_full = FastImage.FastImage8u(max_frame_size)

        bunch.last_running_mean_im = None

        dummy_file = DummyFile()
        with self.dummy_ufmf_writer_lock:
            self.dummy_ufmf_writer[cam_id] = ufmf.AutoShrinkUfmfSaverV3( dummy_file,
                                                                         coding = self.pixel_format[cam_id],
                                                                         max_width=self.max_frame_size[cam_id].w,
                                                                         max_height=self.max_frame_size[cam_id].h,
                                                                         )
예제 #6
0
    def __init__(self,parent,bg):
        #self.const = bg.const
        #const.n_frames = bg.n_frames
        self.bg = bg

        # copy some settings
        #self.use_median = bg.use_median
        #self.n_bg_frames = bg.n_bg_frames
        #self.bg_firstframe = bg.bg_firstframe
        #self.bg_lastframe = bg.bg_lastframe

        # clear buffer
        self.bg.initialize_buffer()
        rsrc = xrc.XmlResource( SETTINGS_RSRC_FILE )
        self.frame = rsrc.LoadFrame(parent, "bg_settings")
        self.algorithm = xrc.XRCCTRL( self.frame, "algorithm" )
        self.nframes = xrc.XRCCTRL( self.frame, "nframes" )
        self.firstframe_box = xrc.XRCCTRL( self.frame, "bg_firstframe" )
        self.lastframe_box = xrc.XRCCTRL( self.frame, "bg_lastframe" )
        self.expbgfgmodel_checkbox = xrc.XRCCTRL( self.frame, "expbgfgmodel_checkbox")
        self.expbgfgmodel_text = xrc.XRCCTRL( self.frame, "expbgfgmodel_text")
        self.expbgfgmodel_button = xrc.XRCCTRL( self.frame, "expbgfgmodel_button")
        self.expbgfgmodel_llr_thresh = xrc.XRCCTRL(self.frame, "llr_thresh")
        self.expbgfgmodel_llr_thresh_low = xrc.XRCCTRL(self.frame, "llr_thresh_low")
        self.calculate = xrc.XRCCTRL( self.frame, "calculate_button" )
        if self.bg.use_median:
            self.algorithm.SetSelection(params.ALGORITHM_MEDIAN)
        else:
            self.algorithm.SetSelection(params.ALGORITHM_MEAN)
        self.nframes.SetValue( str(self.bg.n_bg_frames))
        wxvt.setup_validated_integer_callback( self.nframes,
                                               xrc.XRCID("nframes"),
                                               self.OnTextValidatedNFrames,
                                               pending_color=params.wxvt_bg )
        self.firstframe_box.SetValue( str(self.bg.bg_firstframe))
        wxvt.setup_validated_integer_callback( self.firstframe_box,
                                               xrc.XRCID("bg_firstframe"),
                                               self.OnTextValidatedFirstframe,
                                               pending_color=params.wxvt_bg )
        self.lastframe_box.SetValue( str(self.bg.bg_lastframe))
        wxvt.setup_validated_integer_callback( self.lastframe_box,
                                               xrc.XRCID("bg_lastframe"),
                                               self.OnTextValidatedLastframe,
                                               pending_color=params.wxvt_bg )
        self.frame.Bind( wx.EVT_CHOICE, self.OnAlgorithmChoice, self.algorithm)
        self.frame.Bind( wx.EVT_BUTTON, self.OnCalculate, self.calculate )

        self.expbgfgmodel_text.SetEditable(False)
        self.frame.Bind(wx.EVT_BUTTON, self.OnChooseExpBGFGModelFileName, self.expbgfgmodel_button)
        self.frame.Bind(wx.EVT_CHECKBOX, self.OnCheckExpBGFGModel, self.expbgfgmodel_checkbox)

        wxvt.setup_validated_integer_callback( self.expbgfgmodel_llr_thresh,
                                               xrc.XRCID("llr_thresh"),
                                               self.OnTextValidatedLLRThresh,
                                               pending_color=params.wxvt_bg )
        wxvt.setup_validated_integer_callback( self.expbgfgmodel_llr_thresh_low,
                                               xrc.XRCID("llr_thresh_low"),
                                               self.OnTextValidatedLLRThresh,
                                               pending_color=params.wxvt_bg )

        if 'darwin' in sys.platform:
            fix_text_sizes( self.frame )

        self.UpdateExpBGFGModelControls()
        self.frame.Show()
예제 #7
0
    def ShowBG( self, parent, framenumber, old_thresh, dosub_callback=None ):

        # clear buffer
        self.initialize_buffer()

        self.old_thresh = params.n_bg_std_thresh
        self.show_frame = framenumber
        self.dosub_callback = dosub_callback

        rsrc = xrc.XmlResource( THRESH_RSRC_FILE )
        self.frame = rsrc.LoadFrame( parent, "frame_Ctrax_bg" )

        if 'darwin' in sys.platform:
            fix_text_sizes( self.frame )

        # calculate background image, if not already done
        if not hasattr( self, 'center' ):
            success = self.OnCalculate( parent=parent )
            if not success: return

        # event bindings
        self.hf.SetFrame(self.frame)
        self.hf.frame.Bind( wx.EVT_BUTTON, self.OnQuitHF, id=xrc.XRCID("hm_done_button") )
        self.hf.frame.Bind( wx.EVT_CLOSE, self.OnQuitHF )

        self.menu = self.frame.GetMenuBar()
        #self.frame.Bind( wx.EVT_MENU, self.OnShowBG, id=xrc.XRCID("menu_show_bg") )
        #self.frame.Bind( wx.EVT_MENU, self.OnShowThresh, id=xrc.XRCID("menu_show_thresh") )
        #self.frame.Bind( wx.EVT_MENU, self.OnFrameSlider, id=xrc.XRCID("menu_show_bin") )
        #self.frame.Bind( wx.EVT_BUTTON, self.OnCalcButton, id=xrc.XRCID("button_calculate") )
        #self.frame.Bind( wx.EVT_BUTTON, self.OnResetButton, id=xrc.XRCID("button_reset") )

        # control handles
        self.frame_text = xrc.XRCCTRL( self.frame, "text_frame" )
        self.range_text = xrc.XRCCTRL( self.frame, "text_range" )
        #self.reset_button = xrc.XRCCTRL( self.frame, "button_reset" )
        #if self.old_thresh is None:
        #    self.reset_button.Enable( False )

        # set threshold
        self.thresh_slider = xrc.XRCCTRL( self.frame, "slider_thresh" )
        self.thresh_slider.SetScrollbar(self.GetThresholdScrollbar(),0,255,255-25)
        self.thresh_low_slider = xrc.XRCCTRL( self.frame, "slider_low_thresh" )
        self.thresh_low_slider.SetScrollbar(self.GetThresholdLowScrollbar(),0,255,255-25)

        # we can also input the threshold by typing it; make sure slider and text input
        # show the same value
        self.thresh_textinput = xrc.XRCCTRL( self.frame, "threshold_text_input" )
        self.frame.Bind( wx.EVT_SCROLL, self.OnThreshSlider, self.thresh_slider )
        wxvt.setup_validated_float_callback( self.thresh_textinput,
                                             xrc.XRCID("threshold_text_input"),
                                             self.OnThreshTextEnter,
                                             pending_color=params.wxvt_bg )
        self.thresh_low_textinput = xrc.XRCCTRL( self.frame, "low_threshold_text_input" )
        self.frame.Bind( wx.EVT_SCROLL, self.OnThreshSlider, self.thresh_low_slider )
        wxvt.setup_validated_float_callback( self.thresh_low_textinput,
                                             xrc.XRCID("low_threshold_text_input"),
                                             self.OnThreshTextEnter,
                                             pending_color=params.wxvt_bg )
        self.SetThreshold()
        self.frame_slider = xrc.XRCCTRL( self.frame, "slider_frame" )
        self.frame.Bind( wx.EVT_SCROLL, self.OnFrameSlider, self.frame_slider )
        self.frame_slider.SetScrollbar(self.show_frame,0,params.n_frames-1,params.n_frames/10)
        # which image are we showing
        self.bg_img_chooser = xrc.XRCCTRL( self.frame, "view_type_input" )
        if params.use_expbgfgmodel:
            self.bg_img_chooser.SetItems(params.BG_SHOW_STRINGS+params.EXPBGFGMODEL_SHOW_STRINGS)
        else:
            self.bg_img_chooser.SetItems(params.BG_SHOW_STRINGS)
        if self.show_img_type > self.bg_img_chooser.GetCount():
            self.show_img_type = 0
        self.bg_img_chooser.SetSelection(self.show_img_type)
        self.frame.Bind( wx.EVT_CHOICE, self.OnImgChoice, self.bg_img_chooser)
        # background type
        self.bg_type_chooser = xrc.XRCCTRL(self.frame,"bg_type_input")
        if self.bg_type == 'light_on_dark':
            self.bg_type_chooser.SetSelection( 0 )
        elif self.bg_type == 'dark_on_light':
            self.bg_type_chooser.SetSelection( 1 )
        else:
            self.bg_type_chooser.SetSelection( 2 )
        self.frame.Bind(wx.EVT_CHOICE,self.OnBgTypeChoice, self.bg_type_chooser)
        # minimum bg std
        self.bg_minstd_textinput = xrc.XRCCTRL(self.frame,"bg_min_std_input")
        wxvt.setup_validated_float_callback( self.bg_minstd_textinput,
                                             xrc.XRCID("bg_min_std_input"),
                                             self.OnMinStdTextEnter,
                                             pending_color=params.wxvt_bg )
        self.bg_minstd_textinput.SetValue( str(params.bg_std_min) )
        # maximum bg std
        self.bg_maxstd_textinput = xrc.XRCCTRL(self.frame,"bg_max_std_input")
        wxvt.setup_validated_float_callback( self.bg_maxstd_textinput,
                                             xrc.XRCID("bg_max_std_input"),
                                             self.OnMinStdTextEnter,
                                             pending_color=params.wxvt_bg )
        self.bg_maxstd_textinput.SetValue( str(params.bg_std_max) )
        # normalization type
        self.bg_norm_chooser = xrc.XRCCTRL(self.frame,"bg_normalization_input")
        if self.norm_type == 'homomorphic':
            self.bg_norm_chooser.SetSelection( 2 )
        elif self.norm_type == 'intensity':
            self.bg_norm_chooser.SetSelection( 1 )
        else:
            self.bg_norm_chooser.SetSelection( 0 )
        self.frame.Bind( wx.EVT_CHOICE, self.OnNormChoice, self.bg_norm_chooser)
        # homomorphic filter settings dialog
        self.hf_button = xrc.XRCCTRL(self.frame,"homomorphic_settings")
        self.hf_button.Enable(False)
        self.frame.Bind(wx.EVT_BUTTON,self.OnHFClick,self.hf_button)
        self.hf_window_open = False

        # detect arena button
        self.detect_arena_button = xrc.XRCCTRL(self.frame,"detect_arena_button")
        self.detect_arena_checkbox = xrc.XRCCTRL(self.frame,"detect_arena_checkbox")
        self.detect_arena_button.Enable(params.do_set_circular_arena)
        self.detect_arena_checkbox.SetValue(params.do_set_circular_arena)

        self.frame.Bind(wx.EVT_BUTTON,self.OnDetectArenaClick,self.detect_arena_button)
        self.frame.Bind(wx.EVT_CHECKBOX,self.OnDetectArenaCheck,self.detect_arena_checkbox)
        self.detect_arena_window_open = False

        # min value for isarena
        self.min_nonarena_textinput = xrc.XRCCTRL(self.frame,"min_nonfore_intensity_input")
        wxvt.setup_validated_float_callback( self.min_nonarena_textinput,
                                             xrc.XRCID("min_nonfore_intensity_input"),
                                             self.OnMinNonArenaTextEnter,
                                             pending_color=params.wxvt_bg )
        self.min_nonarena_textinput.SetValue( str(params.min_nonarena ))
        # min value for isarena
        self.max_nonarena_textinput = xrc.XRCCTRL(self.frame,"max_nonfore_intensity_input")
        wxvt.setup_validated_float_callback( self.max_nonarena_textinput,
                                             xrc.XRCID("max_nonfore_intensity_input"),
                                             self.OnMaxNonArenaTextEnter,
                                             pending_color=params.wxvt_bg )
        self.max_nonarena_textinput.SetValue( str(params.max_nonarena ))

        # morphology
        self.morphology_checkbox = xrc.XRCCTRL(self.frame,"morphology_checkbox")
        self.morphology_checkbox.SetValue(params.do_use_morphology)
        self.frame.Bind(wx.EVT_CHECKBOX,self.OnMorphologyCheck,self.morphology_checkbox)
        self.opening_radius_textinput = xrc.XRCCTRL(self.frame,"opening_radius")
        wxvt.setup_validated_integer_callback( self.opening_radius_textinput,
                                               xrc.XRCID("opening_radius"),
                                               self.OnOpeningRadiusTextEnter,
                                               pending_color=params.wxvt_bg )
        self.opening_radius_textinput.SetValue( '%d'%params.opening_radius )
        self.opening_radius_textinput.Enable(params.do_use_morphology)
        self.closing_radius_textinput = xrc.XRCCTRL(self.frame,"closing_radius")
        self.opening_struct = self.create_morph_struct(params.opening_radius)
        wxvt.setup_validated_integer_callback( self.closing_radius_textinput,
                                               xrc.XRCID("closing_radius"),
                                             self.OnClosingRadiusTextEnter,
                                             pending_color=params.wxvt_bg )
        self.closing_radius_textinput.SetValue( '%d'%params.closing_radius )
        self.closing_radius_textinput.Enable(params.do_use_morphology)
        self.closing_struct = self.create_morph_struct(params.closing_radius)

        # prior model stuff

        # whether to show the panel
        self.expbgfgmodel_panel = xrc.XRCCTRL(self.frame,"expbgfgmodel_panel")
        self.expbgfgmodel_panel.Show(params.use_expbgfgmodel)

        # minimum fraction of frames nec. for estimating bg model
        self.min_frac_frames_isback_textinput = xrc.XRCCTRL(self.frame,"min_frac_frames_isback")
        wxvt.setup_validated_float_callback( self.min_frac_frames_isback_textinput,
                                               xrc.XRCID("min_frac_frames_isback"),
                                               self.OnMinFracFramesIsBackTextEnter,
                                               pending_color=params.wxvt_bg )

        # fill
        self.expbgfgmodel_fill_chooser = xrc.XRCCTRL(self.frame,"expbgfgmodel_fill")
        self.expbgfgmodel_fill_chooser.SetItems(params.EXPBGFGMODEL_FILL_STRINGS)
        self.expbgfgmodel_fill_chooser.SetSelection(params.EXPBGFGMODEL_FILL_STRINGS.index(params.expbgfgmodel_fill))
        self.frame.Bind( wx.EVT_CHOICE, self.OnExpBGFGModelFillChoice, self.expbgfgmodel_fill_chooser)

        self.fixbg_button = xrc.XRCCTRL(self.frame,"fixbg_button")
        self.frame.Bind(wx.EVT_BUTTON,self.OnFixBgClick,self.fixbg_button)
        self.fixbg_window_open = False

        self.roi_button = xrc.XRCCTRL(self.frame,"roi_button")
        self.frame.Bind(wx.EVT_BUTTON,self.OnROIClick,self.roi_button)
        self.roi_window_open = False

        # make image window
        self.img_panel = xrc.XRCCTRL( self.frame, "panel_img" )
        box = wx.BoxSizer( wx.VERTICAL )
        self.img_panel.SetSizer( box )
        self.img_wind = ZoomableImageCanvas( self.img_panel, -1 )
        box.Add( self.img_wind, 1, wx.EXPAND )
        self.img_panel.SetAutoLayout( True )
        self.img_panel.Layout()

        self.OnNormChoice( None )
예제 #8
0
    def __init__(self,parent,bg):
        #self.const = bg.const
        #const.n_frames = bg.n_frames
        self.bg = bg
        
        # copy some settings
        #self.use_median = bg.use_median
        #self.n_bg_frames = bg.n_bg_frames
        #self.bg_firstframe = bg.bg_firstframe
        #self.bg_lastframe = bg.bg_lastframe

        # clear buffer
        self.bg.initialize_buffer()
        rsrc = xrc.XmlResource( SETTINGS_RSRC_FILE )
        self.frame = rsrc.LoadFrame(parent, "bg_settings")
        self.algorithm = xrc.XRCCTRL( self.frame, "algorithm" )
        self.nframes = xrc.XRCCTRL( self.frame, "nframes" )
        self.firstframe_box = xrc.XRCCTRL( self.frame, "bg_firstframe" )
        self.lastframe_box = xrc.XRCCTRL( self.frame, "bg_lastframe" )
        self.expbgfgmodel_checkbox = xrc.XRCCTRL( self.frame, "expbgfgmodel_checkbox")
        self.expbgfgmodel_text = xrc.XRCCTRL( self.frame, "expbgfgmodel_text")
        self.expbgfgmodel_button = xrc.XRCCTRL( self.frame, "expbgfgmodel_button")
        self.expbgfgmodel_llr_thresh = xrc.XRCCTRL(self.frame, "llr_thresh")
        self.expbgfgmodel_llr_thresh_low = xrc.XRCCTRL(self.frame, "llr_thresh_low")
        self.calculate = xrc.XRCCTRL( self.frame, "calculate_button" )
        if self.bg.use_median:
            self.algorithm.SetSelection(params.ALGORITHM_MEDIAN)
        else:
            self.algorithm.SetSelection(params.ALGORITHM_MEAN)
        self.nframes.SetValue( str(self.bg.n_bg_frames))
        wxvt.setup_validated_integer_callback( self.nframes,
                                               xrc.XRCID("nframes"),
                                               self.OnTextValidatedNFrames,
                                               pending_color=params.wxvt_bg )
        self.firstframe_box.SetValue( str(self.bg.bg_firstframe))
        wxvt.setup_validated_integer_callback( self.firstframe_box,
                                               xrc.XRCID("bg_firstframe"),
                                               self.OnTextValidatedFirstframe,
                                               pending_color=params.wxvt_bg )
        self.lastframe_box.SetValue( str(self.bg.bg_lastframe))
        wxvt.setup_validated_integer_callback( self.lastframe_box,
                                               xrc.XRCID("bg_lastframe"),
                                               self.OnTextValidatedLastframe,
                                               pending_color=params.wxvt_bg )
        self.frame.Bind( wx.EVT_CHOICE, self.OnAlgorithmChoice, self.algorithm)
        self.frame.Bind( wx.EVT_BUTTON, self.OnCalculate, self.calculate )

        self.expbgfgmodel_text.SetEditable(False)
        self.frame.Bind(wx.EVT_BUTTON, self.OnChooseExpBGFGModelFileName, self.expbgfgmodel_button)
        self.frame.Bind(wx.EVT_CHECKBOX, self.OnCheckExpBGFGModel, self.expbgfgmodel_checkbox)
        
        wxvt.setup_validated_integer_callback( self.expbgfgmodel_llr_thresh,
                                               xrc.XRCID("llr_thresh"),
                                               self.OnTextValidatedLLRThresh,
                                               pending_color=params.wxvt_bg )
        wxvt.setup_validated_integer_callback( self.expbgfgmodel_llr_thresh_low,
                                               xrc.XRCID("llr_thresh_low"),
                                               self.OnTextValidatedLLRThresh,
                                               pending_color=params.wxvt_bg )
        
        self.UpdateExpBGFGModelControls()
        self.frame.Show()
예제 #9
0
    def ShowBG( self, parent, framenumber, old_thresh, dosub_callback=None ):
        
        # clear buffer
        self.initialize_buffer()

        self.old_thresh = params.n_bg_std_thresh
        self.show_frame = framenumber
        self.bg_idx = -1
        self.dosub_callback = dosub_callback

        rsrc = xrc.XmlResource( THRESH_RSRC_FILE )
        self.frame = rsrc.LoadFrame( parent, "frame_Ctrax_bg" )

        # calculate background image, if not already done
        if not hasattr( self, 'center' ):
            success = self.OnCalculate( parent=parent )
            if not success: return

        # event bindings
        self.hf.SetFrame(self.frame)
        self.hf.frame.Bind( wx.EVT_BUTTON, self.OnQuitHF, id=xrc.XRCID("hm_done_button") )
        self.hf.frame.Bind( wx.EVT_CLOSE, self.OnQuitHF )

        self.menu = self.frame.GetMenuBar()
        #self.frame.Bind( wx.EVT_MENU, self.OnShowBG, id=xrc.XRCID("menu_show_bg") )
        #self.frame.Bind( wx.EVT_MENU, self.OnShowThresh, id=xrc.XRCID("menu_show_thresh") )
        #self.frame.Bind( wx.EVT_MENU, self.OnFrameSlider, id=xrc.XRCID("menu_show_bin") )
        #self.frame.Bind( wx.EVT_BUTTON, self.OnCalcButton, id=xrc.XRCID("button_calculate") )
        #self.frame.Bind( wx.EVT_BUTTON, self.OnResetButton, id=xrc.XRCID("button_reset") )
        
        # control handles
        self.frame_text = xrc.XRCCTRL( self.frame, "text_frame" )
        self.range_text = xrc.XRCCTRL( self.frame, "text_range" )
        #self.reset_button = xrc.XRCCTRL( self.frame, "button_reset" )
        #if self.old_thresh is None:
        #    self.reset_button.Enable( False )
        
        # set threshold
        self.thresh_slider = xrc.XRCCTRL( self.frame, "slider_thresh" )
        self.thresh_slider.SetScrollbar(self.GetThresholdScrollbar(),0,255,255-25)
        self.thresh_low_slider = xrc.XRCCTRL( self.frame, "slider_low_thresh" )
        self.thresh_low_slider.SetScrollbar(self.GetThresholdLowScrollbar(),0,255,255-25)

        # we can also input the threshold by typing it; make sure slider and text input
        # show the same value
        self.thresh_textinput = xrc.XRCCTRL( self.frame, "threshold_text_input" )
        self.frame.Bind( wx.EVT_SCROLL, self.OnThreshSlider, self.thresh_slider )
        wxvt.setup_validated_float_callback( self.thresh_textinput,
                                             xrc.XRCID("threshold_text_input"),
                                             self.OnThreshTextEnter,
                                             pending_color=params.wxvt_bg )
        self.thresh_low_textinput = xrc.XRCCTRL( self.frame, "low_threshold_text_input" )
        self.frame.Bind( wx.EVT_SCROLL, self.OnThreshSlider, self.thresh_low_slider )
        wxvt.setup_validated_float_callback( self.thresh_low_textinput,
                                             xrc.XRCID("low_threshold_text_input"),
                                             self.OnThreshTextEnter,
                                             pending_color=params.wxvt_bg )
        self.SetThreshold()
        self.frame_slider = xrc.XRCCTRL( self.frame, "slider_frame" )
        self.frame.Bind( wx.EVT_SCROLL, self.OnFrameSlider, self.frame_slider )
        self.frame_slider.SetScrollbar(self.show_frame,0,params.n_frames-1,params.n_frames/10)
        # which image are we showing
        self.bg_img_chooser = xrc.XRCCTRL( self.frame, "view_type_input" )
        if params.use_expbgfgmodel:
            self.bg_img_chooser.SetItems(params.BG_SHOW_STRINGS+params.EXPBGFGMODEL_SHOW_STRINGS)
        else:
            self.bg_img_chooser.SetItems(params.BG_SHOW_STRINGS)
        if self.show_img_type > self.bg_img_chooser.GetCount():
            self.show_img_type = 0
        self.bg_img_chooser.SetSelection(self.show_img_type)
        self.frame.Bind( wx.EVT_CHOICE, self.OnImgChoice, self.bg_img_chooser)
        # background type
        self.bg_type_chooser = xrc.XRCCTRL(self.frame,"bg_type_input")
        if self.bg_type == 'light_on_dark':
            self.bg_type_chooser.SetSelection( 0 )
        elif self.bg_type == 'dark_on_light':
            self.bg_type_chooser.SetSelection( 1 )
        else:
            self.bg_type_chooser.SetSelection( 2 )
        self.frame.Bind(wx.EVT_CHOICE,self.OnBgTypeChoice, self.bg_type_chooser)
        # minimum bg std
        self.bg_minstd_textinput = xrc.XRCCTRL(self.frame,"bg_min_std_input")
        wxvt.setup_validated_float_callback( self.bg_minstd_textinput,
                                             xrc.XRCID("bg_min_std_input"),
                                             self.OnMinStdTextEnter,
                                             pending_color=params.wxvt_bg )
        self.bg_minstd_textinput.SetValue( str(params.bg_std_min) )
        # maximum bg std
        self.bg_maxstd_textinput = xrc.XRCCTRL(self.frame,"bg_max_std_input")
        wxvt.setup_validated_float_callback( self.bg_maxstd_textinput,
                                             xrc.XRCID("bg_max_std_input"),
                                             self.OnMinStdTextEnter,
                                             pending_color=params.wxvt_bg )
        self.bg_maxstd_textinput.SetValue( str(params.bg_std_max) )
        # normalization type
        self.bg_norm_chooser = xrc.XRCCTRL(self.frame,"bg_normalization_input")
        if self.norm_type == 'homomorphic':
            self.bg_norm_chooser.SetSelection( 2 )
        elif self.norm_type == 'intensity':
            self.bg_norm_chooser.SetSelection( 1 )
        else:
            self.bg_norm_chooser.SetSelection( 0 )
        self.frame.Bind( wx.EVT_CHOICE, self.OnNormChoice, self.bg_norm_chooser)
        # homomorphic filter settings dialog
        self.hf_button = xrc.XRCCTRL(self.frame,"homomorphic_settings")
        self.hf_button.Enable(False)
        self.frame.Bind(wx.EVT_BUTTON,self.OnHFClick,self.hf_button)
        self.hf_window_open = False

        # detect arena button
        self.detect_arena_button = xrc.XRCCTRL(self.frame,"detect_arena_button")
        self.detect_arena_checkbox = xrc.XRCCTRL(self.frame,"detect_arena_checkbox")
        self.detect_arena_button.Enable(params.do_set_circular_arena)
        self.detect_arena_checkbox.SetValue(params.do_set_circular_arena)
        
        self.frame.Bind(wx.EVT_BUTTON,self.OnDetectArenaClick,self.detect_arena_button)
        self.frame.Bind(wx.EVT_CHECKBOX,self.OnDetectArenaCheck,self.detect_arena_checkbox)
        self.detect_arena_window_open = False
        
        # min value for isarena
        self.min_nonarena_textinput = xrc.XRCCTRL(self.frame,"min_nonfore_intensity_input")
        wxvt.setup_validated_float_callback( self.min_nonarena_textinput,
                                             xrc.XRCID("min_nonfore_intensity_input"),
                                             self.OnMinNonArenaTextEnter,
                                             pending_color=params.wxvt_bg )
        self.min_nonarena_textinput.SetValue( str(params.min_nonarena ))
        # min value for isarena
        self.max_nonarena_textinput = xrc.XRCCTRL(self.frame,"max_nonfore_intensity_input")
        wxvt.setup_validated_float_callback( self.max_nonarena_textinput,
                                             xrc.XRCID("max_nonfore_intensity_input"),
                                             self.OnMaxNonArenaTextEnter,
                                             pending_color=params.wxvt_bg )
        self.max_nonarena_textinput.SetValue( str(params.max_nonarena ))

        # morphology
        self.morphology_checkbox = xrc.XRCCTRL(self.frame,"morphology_checkbox")
        self.morphology_checkbox.SetValue(params.do_use_morphology)
        self.frame.Bind(wx.EVT_CHECKBOX,self.OnMorphologyCheck,self.morphology_checkbox)
        self.opening_radius_textinput = xrc.XRCCTRL(self.frame,"opening_radius")
        wxvt.setup_validated_integer_callback( self.opening_radius_textinput,
                                               xrc.XRCID("opening_radius"),
                                               self.OnOpeningRadiusTextEnter,
                                               pending_color=params.wxvt_bg )
        self.opening_radius_textinput.SetValue( '%d'%params.opening_radius )
        self.opening_radius_textinput.Enable(params.do_use_morphology)
        self.closing_radius_textinput = xrc.XRCCTRL(self.frame,"closing_radius")
        self.opening_struct = self.create_morph_struct(params.opening_radius)
        wxvt.setup_validated_integer_callback( self.closing_radius_textinput,
                                               xrc.XRCID("closing_radius"),
                                             self.OnClosingRadiusTextEnter,
                                             pending_color=params.wxvt_bg )
        self.closing_radius_textinput.SetValue( '%d'%params.closing_radius )
        self.closing_radius_textinput.Enable(params.do_use_morphology)
        self.closing_struct = self.create_morph_struct(params.closing_radius)

        # prior model stuff

        # whether to show the panel
        self.expbgfgmodel_panel = xrc.XRCCTRL(self.frame,"expbgfgmodel_panel")
        self.expbgfgmodel_panel.Show(params.use_expbgfgmodel)
        
        # minimum fraction of frames nec. for estimating bg model
        self.min_frac_frames_isback_textinput = xrc.XRCCTRL(self.frame,"min_frac_frames_isback")
        wxvt.setup_validated_float_callback( self.min_frac_frames_isback_textinput,
                                               xrc.XRCID("min_frac_frames_isback"),
                                               self.OnMinFracFramesIsBackTextEnter,
                                               pending_color=params.wxvt_bg )
        
        # fill
        self.expbgfgmodel_fill_chooser = xrc.XRCCTRL(self.frame,"expbgfgmodel_fill")
        self.expbgfgmodel_fill_chooser.SetItems(params.EXPBGFGMODEL_FILL_STRINGS)
        self.expbgfgmodel_fill_chooser.SetSelection(params.EXPBGFGMODEL_FILL_STRINGS.index(params.expbgfgmodel_fill))        
        self.frame.Bind( wx.EVT_CHOICE, self.OnExpBGFGModelFillChoice, self.expbgfgmodel_fill_chooser)
        
        self.fixbg_button = xrc.XRCCTRL(self.frame,"fixbg_button")
        self.frame.Bind(wx.EVT_BUTTON,self.OnFixBgClick,self.fixbg_button)
        self.fixbg_window_open = False

        self.roi_button = xrc.XRCCTRL(self.frame,"roi_button")
        self.frame.Bind(wx.EVT_BUTTON,self.OnROIClick,self.roi_button)
        self.roi_window_open = False

        # make image window
        self.img_panel = xrc.XRCCTRL( self.frame, "panel_img" )
        box = wx.BoxSizer( wx.VERTICAL )
        self.img_panel.SetSizer( box )
        self.img_wind = ZoomableImageCanvas( self.img_panel, -1 )
        box.Add( self.img_wind, 1, wx.EXPAND )
        self.img_panel.SetAutoLayout( True )
        self.img_panel.Layout()