def BindCallbacks(self): if self.interactive: wxvt.setup_validated_float_callback(self.weight_input, xrc.XRCID('weight'), self.ValidateWeight, pending_color=params.wxvt_bg) wxvt.setup_validated_float_callback(self.max_weight_input, xrc.XRCID('weight'), self.ValidateWeight, pending_color=params.wxvt_bg)
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)
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)
def BindCallbacks(self): # threshold button self.frame.Bind(wx.EVT_SPIN,self.ChangeThreshold,self.edge_threshold_button) # mode button self.frame.Bind(wx.EVT_BUTTON,self.Detect,self.detect_button) # enter button self.frame.Bind(wx.EVT_BUTTON,self.Refine,self.refine_button) # parameter spinners self.frame.Bind(wx.EVT_SPIN,self.ChangeRadius,self.radius_spin) self.frame.Bind(wx.EVT_SPIN,self.ChangeCenterX,self.x_spin) self.frame.Bind(wx.EVT_SPIN,self.ChangeCenterY,self.y_spin) # text input wxvt.setup_validated_float_callback( self.radius_text, xrc.XRCID("radius_text"), self.OnRadiusValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.x_text, xrc.XRCID("x_text"), self.OnXValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.y_text, xrc.XRCID("y_text"), self.OnYValidated, pending_color=params.wxvt_bg ) # mouse click self.img_wind_child.Bind(wx.EVT_LEFT_DOWN,self.MouseDown) self.img_wind_child.Bind(wx.EVT_LEFT_UP,self.MouseUp)
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, )
def BindCallbacks(self): # threshold button self.frame.Bind(wx.EVT_SPIN,self.ChangeThreshold,self.edge_threshold_button) # mode button self.frame.Bind(wx.EVT_BUTTON,self.Detect,self.detect_button) # enter button self.frame.Bind(wx.EVT_BUTTON,self.Refine,self.refine_button) # parameter spinners self.frame.Bind(wx.EVT_SPIN,self.ChangeRadius,self.radius_spin) self.frame.Bind(wx.EVT_SPIN,self.ChangeCenterX,self.x_spin) self.frame.Bind(wx.EVT_SPIN,self.ChangeCenterY,self.y_spin) # text input wxvt.setup_validated_float_callback( self.radius_text, xrc.XRCID("radius_text"), self.OnRadiusValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.x_text, xrc.XRCID("x_text"), self.OnXValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.y_text, xrc.XRCID("y_text"), self.OnYValidated, pending_color=params.wxvt_bg ) # min, max text input wxvt.setup_validated_float_callback( self.minradius_text, xrc.XRCID("minradius_text"), self.OnRadiusBoundsValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.maxradius_text, xrc.XRCID("maxradius_text"), self.OnRadiusBoundsValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.minx_text, xrc.XRCID("minx_text"), self.OnXBoundsValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.maxx_text, xrc.XRCID("maxx_text"), self.OnXBoundsValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.miny_text, xrc.XRCID("miny_text"), self.OnYBoundsValidated, pending_color=params.wxvt_bg ) wxvt.setup_validated_float_callback( self.maxy_text, xrc.XRCID("maxy_text"), self.OnYBoundsValidated, pending_color=params.wxvt_bg ) # mouse click self.img_wind_child.Bind(wx.EVT_LEFT_DOWN,self.MouseDown) self.img_wind_child.Bind(wx.EVT_LEFT_UP,self.MouseUp)
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 )
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()