Changeset b564ea2 in sasview for src/sas/sasgui/perspectives


Ignore:
Timestamp:
Jul 11, 2016 4:36:55 AM (8 years ago)
Author:
lewis
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
3b8efec
Parents:
9c90cf3
git-author:
Lewis O'Driscoll <lewis.o'driscoll@…> (07/06/16 12:35:37)
git-committer:
Lewis O'Driscoll <lewis.o'driscoll@…> (07/11/16 04:36:55)
Message:

Add option to input background level

Location:
src/sas/sasgui/perspectives/corfunc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/corfunc/corfunc_panel.py

    r9c90cf3 rb564ea2  
    3737        self._data = data # The data to be analysed 
    3838        self._data_name_box = None # Text box to show name of file 
     39        self._background_input = None 
    3940        self._qmin_input = None 
    4041        self._qmax1_input = None 
     
    4243        self.qmin = 0 
    4344        self.qmax = (0, 0) 
     45        self.background = 0 
    4446        # Dictionary for saving IDs of text boxes used to display output data 
    4547        self._output_ids = None 
     
    4749        self._do_layout() 
    4850        self.set_state() 
    49         self._qmin_input.Bind(wx.EVT_TEXT, self._on_enter_qrange) 
    50         self._qmax1_input.Bind(wx.EVT_TEXT, self._on_enter_qrange) 
    51         self._qmax2_input.Bind(wx.EVT_TEXT, self._on_enter_qrange) 
     51        self._qmin_input.Bind(wx.EVT_TEXT, self._on_enter_input) 
     52        self._qmax1_input.Bind(wx.EVT_TEXT, self._on_enter_input) 
     53        self._qmax2_input.Bind(wx.EVT_TEXT, self._on_enter_input) 
    5254 
    5355    def set_state(self, state=None, data=None): 
     
    7072        if self.state.qmax is not None and self.state.qmax != (None, None): 
    7173            self.set_qmax(tuple(self.state.qmax)) 
     74        if self.state.background is not None: 
     75            self.set_background(self.state.background) 
    7276 
    7377    def get_state(self): 
     
    7983        state.set_saved_state('qmax1_tcl', self.qmax[0]) 
    8084        state.set_saved_state('qmax2_tcl', self.qmax[1]) 
     85        state.set_saved_state('background_tcl', self.background) 
    8186        if self._data is not None: 
    8287            state.file = self._data.title 
     
    8994        if evt is not None: 
    9095            evt.Skip() 
    91         self._validate_qrange() 
     96        self._validate_inputs() 
    9297 
    9398    def set_data(self, data=None, set_qrange=True): 
     
    109114            self.set_qmin(lower) 
    110115            self.set_qmax((upper1, upper2)) 
     116            self.set_background(0.0) 
    111117 
    112118    def get_data(self): 
     
    142148        self._qmax2_input.SetValue(str(qmax[1])) 
    143149 
    144  
    145     def _on_enter_qrange(self, event=None): 
     150    def set_background(self, bg): 
     151        self.background = bg 
     152        self._background_input.SetValue(str(bg)) 
     153 
     154 
     155    def _on_enter_input(self, event=None): 
    146156        """ 
    147157        Read values from input boxes and save to memory. 
    148158        """ 
    149159        if event is not None: event.Skip() 
    150         if not self._validate_qrange(): 
     160        if not self._validate_inputs(): 
    151161            return 
    152         new_qmin = float(self._qmin_input.GetValue()) 
     162        self.qmin = float(self._qmin_input.GetValue()) 
    153163        new_qmax1 = float(self._qmax1_input.GetValue()) 
    154164        new_qmax2 = float(self._qmax2_input.GetValue()) 
    155         self.qmin = new_qmin 
    156165        self.qmax = (new_qmax1, new_qmax2) 
     166        self.background = float(self._background_input.GetValue()) 
    157167        data_id = self._manager.data_id 
    158168        from sas.sasgui.perspectives.corfunc.corfunc import GROUP_ID_IQ_DATA 
     
    164174                leftdown=False)) 
    165175 
    166     def _validate_qrange(self): 
     176    def _validate_inputs(self): 
    167177        """ 
    168178        Check that the values for qmin and qmax in the input boxes are valid 
     
    174184        qmax2_valid = check_float(self._qmax2_input) 
    175185        qmax_valid = qmax1_valid and qmax2_valid 
    176         if not (qmin_valid and qmax_valid): 
    177             if not qmin_valid: 
    178                 self._qmin_input.SetBackgroundColour('pink') 
    179                 self._qmin_input.Refresh() 
    180             if not qmax1_valid: 
    181                 self._qmax1_input.SetBackgroundColour('pink') 
    182                 self._qmax1_input.Refresh() 
    183             if not qmax2_valid: 
    184                 self._qmax2_input.SetBackgroundColour('pink') 
    185                 self._qmax2_input.Refresh() 
    186             return False 
    187         qmin = float(self._qmin_input.GetValue()) 
    188         qmax1 = float(self._qmax1_input.GetValue()) 
    189         qmax2 = float(self._qmax2_input.GetValue()) 
     186        background_valid = check_float(self._background_input) 
    190187        msg = "" 
    191         if not qmin > self._data.x.min(): 
    192             msg = "qmin must be greater than the lowest q value" 
    193             qmin_valid = False 
    194         elif qmax2 < qmax1: 
    195             "qmax1 must be less than qmax2" 
    196             qmax_valid = False 
    197         elif qmin > qmax1: 
    198             "qmin must be less than qmax" 
    199             qmin_valid = False 
    200  
    201         if not (qmin_valid and qmax_valid): 
    202             if not qmin_valid: 
    203                 self._qmin_input.SetBackgroundColour('pink') 
    204             if not qmax_valid: 
    205                 self._qmax1_input.SetBackgroundColour('pink') 
    206                 self._qmax2_input.SetBackgroundColour('pink') 
    207             wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    208         else: 
     188        if (qmin_valid and qmax_valid and background_valid): 
     189            qmin = float(self._qmin_input.GetValue()) 
     190            qmax1 = float(self._qmax1_input.GetValue()) 
     191            qmax2 = float(self._qmax2_input.GetValue()) 
     192            background = float(self._background_input.GetValue()) 
     193            if not qmin > self._data.x.min(): 
     194                msg = "qmin must be greater than the lowest q value" 
     195                qmin_valid = False 
     196            elif qmax2 < qmax1: 
     197                msg = "qmax1 must be less than qmax2" 
     198                qmax_valid = False 
     199            elif qmin > qmax1: 
     200                msg = "qmin must be less than qmax" 
     201                qmin_valid = False 
     202            elif background < 0 or background > self._data.y.max(): 
     203                msg = "background must be positive and less than highest I value" 
     204                background_valid = False 
     205        if not qmin_valid: 
     206            self._qmin_input.SetBackgroundColour('pink') 
     207        if not qmax_valid: 
     208            self._qmax1_input.SetBackgroundColour('pink') 
     209            self._qmax2_input.SetBackgroundColour('pink') 
     210        if not background_valid: 
     211            self._background_input.SetBackgroundColour('pink') 
     212            if msg != "": 
     213                wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     214        if (qmin_valid and qmax_valid and background_valid): 
    209215            self._qmin_input.SetBackgroundColour(wx.WHITE) 
    210216            self._qmax1_input.SetBackgroundColour(wx.WHITE) 
    211217            self._qmax2_input.SetBackgroundColour(wx.WHITE) 
     218            self._background_input.SetBackgroundColour(wx.WHITE) 
    212219        self._qmin_input.Refresh() 
    213220        self._qmax1_input.Refresh() 
    214221        self._qmax2_input.Refresh() 
    215         return (qmin_valid and qmax_valid) 
     222        return (qmin_valid and qmax_valid and background_valid) 
    216223 
    217224    def _do_layout(self): 
     
    259266        q_sizer.Add(explanation_label, (0,0), (1,4), wx.LEFT | wx.EXPAND, 5) 
    260267 
     268        background_label = wx.StaticText(self, -1, "Background:", size=(80,20)) 
     269        q_sizer.Add(background_label, (1,0), (1,1), wx.LEFT | wx.EXPAND, 5) 
     270 
     271        self._background_input = ModelTextCtrl(self, -1, size=(50,20), 
     272            style=wx.TE_PROCESS_ENTER, name='background_input', 
     273            text_enter_callback=self._on_enter_input) 
     274        self._background_input.SetToolTipString(("A background value to " 
     275            "subtract from all intensity values")) 
     276        q_sizer.Add(self._background_input, (1,1), (1,1), wx.RIGHT | wx.EXPAND, 5) 
     277 
    261278        qrange_label = wx.StaticText(self, -1, "Q Range:", size=(50,20)) 
    262         q_sizer.Add(qrange_label, (1,0), (1,1), wx.LEFT | wx.EXPAND, 5) 
     279        q_sizer.Add(qrange_label, (2,0), (1,1), wx.LEFT | wx.EXPAND, 5) 
    263280 
    264281        # Lower Q Range 
     
    270287        self._qmin_input = ModelTextCtrl(self, -1, size=(50, 20), 
    271288                        style=wx.TE_PROCESS_ENTER, name='qmin_input', 
    272                         text_enter_callback=self._on_enter_qrange) 
     289                        text_enter_callback=self._on_enter_input) 
    273290        self._qmin_input.SetToolTipString(("Values with q < qmin will be used " 
    274291            "for Guinier back extrapolation")) 
    275292 
    276         q_sizer.Add(qmin_label, (2, 0), (1, 1), wx.LEFT | wx.EXPAND, 5) 
    277         q_sizer.Add(qmin_lower, (2, 1), (1, 1), wx.LEFT, 5) 
    278         q_sizer.Add(qmin_dash_label, (2, 2), (1, 1), wx.CENTER | wx.EXPAND, 5) 
    279         q_sizer.Add(self._qmin_input, (2, 3), (1, 1), wx.LEFT, 5) 
     293        q_sizer.Add(qmin_label, (3, 0), (1, 1), wx.LEFT | wx.EXPAND, 5) 
     294        q_sizer.Add(qmin_lower, (3, 1), (1, 1), wx.LEFT, 5) 
     295        q_sizer.Add(qmin_dash_label, (3, 2), (1, 1), wx.CENTER | wx.EXPAND, 5) 
     296        q_sizer.Add(self._qmin_input, (3, 3), (1, 1), wx.LEFT, 5) 
    280297 
    281298        # Upper Q range 
     
    289306        self._qmax1_input = ModelTextCtrl(self, -1, size=(50, 20), 
    290307            style=wx.TE_PROCESS_ENTER, name="qmax1_input", 
    291             text_enter_callback=self._on_enter_qrange) 
     308            text_enter_callback=self._on_enter_input) 
    292309        self._qmax1_input.SetToolTipString(qmax_tooltip) 
    293310        self._qmax2_input = ModelTextCtrl(self, -1, size=(50, 20), 
    294311            style=wx.TE_PROCESS_ENTER, name="qmax2_input", 
    295             text_enter_callback=self._on_enter_qrange) 
     312            text_enter_callback=self._on_enter_input) 
    296313        self._qmax2_input.SetToolTipString(qmax_tooltip) 
    297314 
    298         q_sizer.Add(qmax_label, (3, 0), (1, 1), wx.LEFT | wx.EXPAND, 5) 
    299         q_sizer.Add(self._qmax1_input, (3, 1), (1, 1), wx.LEFT, 5) 
    300         q_sizer.Add(qmax_dash_label, (3, 2), (1, 1), wx.CENTER | wx.EXPAND, 5) 
    301         q_sizer.Add(self._qmax2_input, (3,3), (1, 1), wx.LEFT, 5) 
     315        q_sizer.Add(qmax_label, (4, 0), (1, 1), wx.LEFT | wx.EXPAND, 5) 
     316        q_sizer.Add(self._qmax1_input, (4, 1), (1, 1), wx.LEFT, 5) 
     317        q_sizer.Add(qmax_dash_label, (4, 2), (1, 1), wx.CENTER | wx.EXPAND, 5) 
     318        q_sizer.Add(self._qmax2_input, (4,3), (1, 1), wx.LEFT, 5) 
    302319 
    303320        qbox_sizer.Add(q_sizer, wx.TOP, 0) 
  • src/sas/sasgui/perspectives/corfunc/corfunc_state.py

    r9c90cf3 rb564ea2  
    1919    'qmax1_tcl': None, 
    2020    'qmax2_tcl': None, 
     21    'background_tcl': None 
    2122} 
    2223 
     
    4243        self.qmin = None 
    4344        self.qmax = [0, 0] 
     45        self.background = None 
    4446        self.outputs = None 
    4547 
     
    6567        state += "Qmin:         {}\n".format(str(self.qmin)) 
    6668        state += "Qmax:         {}\n".format(str(self.qmax)) 
     69        state += "Background:   {}\n".format(str(self.background)) 
    6770        if self.outputs is None: 
    6871            return state 
     
    8992        elif name == 'qmax2_tcl': 
    9093            self.qmax[1] = value 
     94        elif name == 'background_tcl': 
     95            self.background = value 
    9196 
    9297    def toXML(self, filename='corfunc_state.cor', doc=None, entry_node=None): 
Note: See TracChangeset for help on using the changeset viewer.