Changeset c08756f in sasview for src/sas/sasgui/perspectives/fitting


Ignore:
Timestamp:
Mar 16, 2017 4:35:42 PM (8 years ago)
Author:
GitHub <noreply@…>
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:
725de411, a3e3ef5, feb62c6
Parents:
09f2328 (diff), b301db9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Andrew Jackson <andrew.jackson@…> (03/16/17 16:35:42)
git-committer:
GitHub <noreply@…> (03/16/17 16:35:42)
Message:

Merge pull request 42 from SasView?/ticket-850

Ticket 850: Custom Pinhole Smearing Uses %Q for dQ

Closes #850

Location:
src/sas/sasgui/perspectives/fitting
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/fitting/basepage.py

    r7a5aedd rb301db9  
    120120        self.dxw = None 
    121121        # pinhole smear 
    122         self.dx_min = None 
    123         self.dx_max = None 
     122        self.dx_percent = None 
    124123        # smear attrbs 
    125124        self.enable_smearer = None 
     
    849848        self.state.pinhole_smearer = \ 
    850849                                copy.deepcopy(self.pinhole_smearer.GetValue()) 
    851         self.state.dx_max = copy.deepcopy(self.dx_max) 
    852         self.state.dx_min = copy.deepcopy(self.dx_min) 
     850        self.state.dx_percent = copy.deepcopy(self.dx_percent) 
    853851        self.state.dxl = copy.deepcopy(self.dxl) 
    854852        self.state.dxw = copy.deepcopy(self.dxw) 
     
    12471245        # we have two more options for smearing 
    12481246        if self.pinhole_smearer.GetValue(): 
    1249             self.dx_min = state.dx_min 
    1250             self.dx_max = state.dx_max 
    1251             if self.dx_min is not None: 
    1252                 self.smear_pinhole_min.SetValue(str(self.dx_min)) 
    1253             if self.dx_max is not None: 
    1254                 self.smear_pinhole_max.SetValue(str(self.dx_max)) 
     1247            self.dx_percent = state.dx_percent 
     1248            if self.dx_percent is not None: 
     1249                if state.dx_old: 
     1250                    self.dx_percent = 100 * (self.dx_percent / self.data.x[0]) 
     1251                self.smear_pinhole_percent.SetValue("%.2f" % self.dx_percent) 
    12551252            self.onPinholeSmear(event=None) 
    12561253        elif self.slit_smearer.GetValue(): 
  • src/sas/sasgui/perspectives/fitting/fitpage.py

    r8c0d9eb rd85f1d8a  
    2929_BOX_WIDTH = 76 
    3030_DATA_BOX_WIDTH = 300 
    31 SMEAR_SIZE_L = 0.00 
    3231SMEAR_SIZE_H = 0.00 
    3332CUSTOM_MODEL = 'Plugin Models' 
     
    210209              "Please enter only the value of interest to customize smearing..." 
    211210        smear_message_new_psmear = \ 
    212               "Please enter both; the dQ will be generated by interpolation..." 
     211              "Please enter a fixed percentage to be applied to all Q values..." 
    213212        smear_message_2d_x_title = "<dQp>[1/A]:" 
    214213        smear_message_2d_y_title = "<dQs>[1/A]:" 
    215         smear_message_pinhole_min_title = "dQ_low[1/A]:" 
    216         smear_message_pinhole_max_title = "dQ_high[1/A]:" 
     214        smear_message_pinhole_percent_title = "dQ[%]:" 
    217215        smear_message_slit_height_title = "Slit height[1/A]:" 
    218216        smear_message_slit_width_title = "Slit width[1/A]:" 
     
    307305         
    308306        # textcntrl for custom resolution 
    309         self.smear_pinhole_max = ModelTextCtrl(self, wx.ID_ANY, 
    310                             size=(_BOX_WIDTH - 25, 20), 
    311                             style=wx.TE_PROCESS_ENTER, 
    312                             text_enter_callback=self.onPinholeSmear) 
    313         self.smear_pinhole_min = ModelTextCtrl(self, wx.ID_ANY, 
    314                             size=(_BOX_WIDTH - 25, 20), 
    315                             style=wx.TE_PROCESS_ENTER, 
    316                             text_enter_callback=self.onPinholeSmear) 
     307        self.smear_pinhole_percent = ModelTextCtrl(self, wx.ID_ANY, 
     308                                                   size=(_BOX_WIDTH - 25, 20), 
     309                                                   style=wx.TE_PROCESS_ENTER, 
     310                                                   text_enter_callback= 
     311                                                   self.onPinholeSmear) 
    317312        self.smear_slit_height = ModelTextCtrl(self, wx.ID_ANY, 
    318313                            size=(_BOX_WIDTH - 25, 20), 
     
    333328 
    334329        # set default values for smear 
    335         self.smear_pinhole_max.SetValue(str(self.dx_max)) 
    336         self.smear_pinhole_min.SetValue(str(self.dx_min)) 
     330        self.smear_pinhole_percent.SetValue(str(self.dx_percent)) 
    337331        self.smear_slit_height.SetValue(str(self.dxl)) 
    338332        self.smear_slit_width.SetValue(str(self.dxw)) 
     
    426420        self.smear_description_2d_y.SetToolTipString( 
    427421                                    " dQs(perpendicular) in q_phi direction.") 
    428         self.smear_description_pin_min = wx.StaticText(self, wx.ID_ANY, 
    429                         smear_message_pinhole_min_title, style=wx.ALIGN_LEFT) 
    430         self.smear_description_pin_max = wx.StaticText(self, wx.ID_ANY, 
    431                         smear_message_pinhole_max_title, style=wx.ALIGN_LEFT) 
     422        self.smear_description_pin_percent = wx.StaticText(self, wx.ID_ANY, 
     423                                            smear_message_pinhole_percent_title, 
     424                                            style=wx.ALIGN_LEFT) 
    432425        self.smear_description_slit_height = wx.StaticText(self, wx.ID_ANY, 
    433426                        smear_message_slit_height_title, style=wx.ALIGN_LEFT) 
     
    453446        self.sizer_new_smear.Add((15, -1)) 
    454447        self.sizer_new_smear.Add(self.smear_description_2d_x, 0, wx.CENTER, 10) 
    455         self.sizer_new_smear.Add(self.smear_description_pin_min, 
    456                                  0, wx.CENTER, 10) 
    457448        self.sizer_new_smear.Add(self.smear_description_slit_height, 
    458449                                 0, wx.CENTER, 10) 
    459450 
    460         self.sizer_new_smear.Add(self.smear_pinhole_min, 0, wx.CENTER, 10) 
    461451        self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 
    462452        self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) 
     
    464454        self.sizer_new_smear.Add(self.smear_description_2d_y, 
    465455                                 0, wx.CENTER, 10) 
    466         self.sizer_new_smear.Add(self.smear_description_pin_max, 
     456        self.sizer_new_smear.Add(self.smear_description_pin_percent, 
    467457                                 0, wx.CENTER, 10) 
    468458        self.sizer_new_smear.Add(self.smear_description_slit_width, 
    469459                                 0, wx.CENTER, 10) 
    470460 
    471         self.sizer_new_smear.Add(self.smear_pinhole_max, 0, wx.CENTER, 10) 
     461        self.sizer_new_smear.Add(self.smear_pinhole_percent, 0, wx.CENTER, 10) 
    472462        self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 
    473463        self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) 
     
    15811571        if self.dxw is None: 
    15821572            self.dxw = "" 
    1583         if self.dx_min is None: 
    1584             self.dx_min = SMEAR_SIZE_L 
    1585         if self.dx_max is None: 
    1586             self.dx_max = SMEAR_SIZE_H 
     1573        if self.dx_percent is None: 
     1574            self.dx_percent = SMEAR_SIZE_H 
    15871575 
    15881576    def _get_smear_info(self): 
     
    16461634            self.smear_description_2d_y.Show(True) 
    16471635            if self.pinhole_smearer.GetValue(): 
    1648                 self.smear_pinhole_min.Show(True) 
    1649                 self.smear_pinhole_max.Show(True) 
     1636                self.smear_pinhole_percent.Show(True) 
    16501637        # smear from data 
    16511638        elif self.enable_smearer.GetValue(): 
     
    16581645                    self.smear_description_slit_width.Show(True) 
    16591646                elif self.smear_type == 'Pinhole': 
    1660                     self.smear_description_pin_min.Show(True) 
    1661                     self.smear_description_pin_max.Show(True) 
     1647                    self.smear_description_pin_percent.Show(True) 
    16621648                self.smear_description_smear_type.Show(True) 
    16631649                self.smear_description_type.Show(True) 
     
    16681654            if self.smear_type == 'Pinhole': 
    16691655                self.smear_message_new_p.Show(True) 
    1670                 self.smear_description_pin_min.Show(True) 
    1671                 self.smear_description_pin_max.Show(True) 
    1672  
    1673             self.smear_pinhole_min.Show(True) 
    1674             self.smear_pinhole_max.Show(True) 
     1656                self.smear_description_pin_percent.Show(True) 
     1657 
     1658            self.smear_pinhole_percent.Show(True) 
    16751659        # custom slit smear 
    16761660        elif self.slit_smearer.GetValue(): 
     
    16971681        self.smear_data_left.Hide() 
    16981682        self.smear_data_right.Hide() 
    1699         self.smear_description_pin_min.Hide() 
    1700         self.smear_pinhole_min.Hide() 
    1701         self.smear_description_pin_max.Hide() 
    1702         self.smear_pinhole_max.Hide() 
     1683        self.smear_description_pin_percent.Hide() 
     1684        self.smear_pinhole_percent.Hide() 
    17031685        self.smear_description_slit_height.Hide() 
    17041686        self.smear_slit_height.Hide() 
     
    22492231            # event case of radio button 
    22502232            if tcrtl.GetValue(): 
    2251                 self.dx_min = 0.0 
    2252                 self.dx_max = 0.0 
     2233                self.dx_percent = 0.0 
    22532234                is_new_pinhole = True 
    22542235            else: 
     
    22872268        """ 
    22882269        # get the values 
    2289         pin_min = self.smear_pinhole_min.GetValue() 
    2290         pin_max = self.smear_pinhole_max.GetValue() 
    2291  
    2292         # Check changes in slit width 
     2270        pin_percent = self.smear_pinhole_percent.GetValue() 
     2271 
     2272        # Check changes in slit heigth 
    22932273        try: 
    2294             dx_min = float(pin_min) 
     2274            dx_percent = float(pin_percent) 
    22952275        except: 
    22962276            return True 
    2297         if self.dx_min != dx_min: 
    2298             return True 
    2299  
    2300         # Check changes in slit heigth 
    2301         try: 
    2302             dx_max = float(pin_max) 
    2303         except: 
    2304             return True 
    2305         if self.dx_max != dx_max: 
     2277        if self.dx_percent != dx_percent: 
    23062278            return True 
    23072279        return False 
     
    23292301        msg = None 
    23302302 
    2331         get_pin_min = self.smear_pinhole_min 
    2332         get_pin_max = self.smear_pinhole_max 
    2333  
    2334         if not check_float(get_pin_min): 
    2335             get_pin_min.SetBackgroundColour("pink") 
    2336             msg = "Model Error:wrong value entered!!!" 
    2337         elif not check_float(get_pin_max): 
    2338             get_pin_max.SetBackgroundColour("pink") 
     2303        get_pin_percent = self.smear_pinhole_percent 
     2304 
     2305        if not check_float(get_pin_percent): 
     2306            get_pin_percent.SetBackgroundColour("pink") 
    23392307            msg = "Model Error:wrong value entered!!!" 
    23402308        else: 
    23412309            if len_data < 2: 
    23422310                len_data = 2 
    2343             self.dx_min = float(get_pin_min.GetValue()) 
    2344             self.dx_max = float(get_pin_max.GetValue()) 
    2345             if self.dx_min < 0: 
    2346                 get_pin_min.SetBackgroundColour("pink") 
     2311            self.dx_percent = float(get_pin_percent.GetValue()) 
     2312            if self.dx_percent < 0: 
     2313                get_pin_percent.SetBackgroundColour("pink") 
    23472314                msg = "Model Error:This value can not be negative!!!" 
    2348             elif self.dx_max < 0: 
    2349                 get_pin_max.SetBackgroundColour("pink") 
    2350                 msg = "Model Error:This value can not be negative!!!" 
    2351             elif self.dx_min is not None and self.dx_max is not None: 
     2315            elif self.dx_percent is not None: 
     2316                percent = self.dx_percent/100 
    23522317                if self._is_2D(): 
    2353                     data.dqx_data[data.dqx_data == 0] = self.dx_min 
    2354                     data.dqy_data[data.dqy_data == 0] = self.dx_max 
    2355                 elif self.dx_min == self.dx_max: 
    2356                     data.dx[data.dx == 0] = self.dx_min 
     2318                    data.dqx_data[data.dqx_data == 0] = percent * data.qx_data 
     2319                    data.dqy_data[data.dqy_data == 0] = percent * data.qy_data 
    23572320                else: 
    2358                     step = (self.dx_max - self.dx_min) / (len_data - 1) 
    2359                     data.dx = numpy.arange(self.dx_min, 
    2360                                            self.dx_max + step / 1.1, 
    2361                                            step) 
    2362             elif self.dx_min is not None: 
    2363                 if self._is_2D(): 
    2364                     data.dqx_data[data.dqx_data == 0] = self.dx_min 
    2365                 else: 
    2366                     data.dx[data.dx == 0] = self.dx_min 
    2367             elif self.dx_max is not None: 
    2368                 if self._is_2D(): 
    2369                     data.dqy_data[data.dqy_data == 0] = self.dx_max 
    2370                 else: 
    2371                     data.dx[data.dx == 0] = self.dx_max 
     2321                    data.dx = percent * data.x 
    23722322            self.current_smearer = smear_selection(data, self.model) 
    23732323            # 2D need to set accuracy 
     
    23792329            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    23802330        else: 
    2381             get_pin_min.SetBackgroundColour("white") 
    2382             get_pin_max.SetBackgroundColour("white") 
     2331            get_pin_percent.SetBackgroundColour("white") 
    23832332        # set smearing value whether or not the data contain the smearing info 
    23842333 
  • src/sas/sasgui/perspectives/fitting/media/plugin.rst

    r5295cf5 r984f3fc  
    364364  - the limits will show up as the default limits for the fit making it easy, 
    365365    for example, to force the radius to always be greater than zero. 
     366 
     367  - these are hard limits defining the valid range of parameter values; 
     368    polydisperity distributions will be truncated at the limits. 
    366369 
    367370- **"type"** can be one of: "", "sld", "volume", or "orientation". 
  • src/sas/sasgui/perspectives/fitting/pagestate.py

    r71601312 rd5aff7f  
    7474                            ["dq_l", "dq_l", "float"], 
    7575                            ["dq_r", "dq_r", "float"], 
    76                             ["dx_max", "dx_max", "float"], 
    77                             ["dx_min", "dx_min", "float"], 
     76                            ["dx_percent", "dx_percent", "float"], 
    7877                            ["dxl", "dxl", "float"], 
    7978                            ["dxw", "dxw", "float"]] 
     
    215214        self.dq_l = None 
    216215        self.dq_r = None 
    217         self.dx_max = None 
    218         self.dx_min = None 
     216        self.dx_percent = None 
     217        self.dx_old = False 
    219218        self.dxl = None 
    220219        self.dxw = None 
     
    343342        obj.dq_l = copy.deepcopy(self.dq_l) 
    344343        obj.dq_r = copy.deepcopy(self.dq_r) 
    345         obj.dx_max = copy.deepcopy(self.dx_max) 
    346         obj.dx_min = copy.deepcopy(self.dx_min) 
     344        obj.dx_percent = copy.deepcopy(self.dx_percent) 
     345        obj.dx_old = copy.deepcopy(self.dx_old) 
    347346        obj.dxl = copy.deepcopy(self.dxl) 
    348347        obj.dxw = copy.deepcopy(self.dxw) 
     
    562561        rep += "dq_l  : %s\n" % self.dq_l 
    563562        rep += "dq_r  : %s\n" % self.dq_r 
    564         rep += "dx_max  : %s\n" % str(self.dx_max) 
    565         rep += "dx_min : %s\n" % str(self.dx_min) 
     563        rep += "dx_percent  : %s\n" % str(self.dx_percent) 
    566564        rep += "dxl  : %s\n" % str(self.dxl) 
    567565        rep += "dxw : %s\n" % str(self.dxw) 
     
    10481046                    setattr(self, item[0], parse_entry_helper(node, item)) 
    10491047 
     1048                dx_old_node = get_content('ns:%s' % 'dx_min', entry) 
    10501049                for item in LIST_OF_STATE_ATTRIBUTES: 
    1051                     node = get_content('ns:%s' % item[0], entry) 
    1052                     setattr(self, item[0], parse_entry_helper(node, item)) 
     1050                    if item[0] == "dx_percent" and dx_old_node is not None: 
     1051                        dxmin = ["dx_min", "dx_min", "float"] 
     1052                        setattr(self, item[0], parse_entry_helper(dx_old_node, 
     1053                                                                  dxmin)) 
     1054                        self.dx_old = True 
     1055                    else: 
     1056                        node = get_content('ns:%s' % item[0], entry) 
     1057                        setattr(self, item[0], parse_entry_helper(node, item)) 
    10531058 
    10541059                for item in LIST_OF_STATE_PARAMETERS: 
Note: See TracChangeset for help on using the changeset viewer.