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 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)
Esempio n. 4
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)
Esempio n. 5
0
    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)
Esempio n. 6
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,
                                                                         )
Esempio n. 7
0
    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)
Esempio n. 8
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 )
Esempio n. 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()