Changeset fe4bd51 in sasview


Ignore:
Timestamp:
Jan 8, 2019 4:48:34 PM (9 days ago)
Author:
GitHub <noreply@…>
Parents:
dcd6efd (diff), f0c569d (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:
Paul Butler <butlerpd@…> (01/08/19 16:48:34)
git-committer:
GitHub <noreply@…> (01/08/19 16:48:34)
Message:

Merge f0c569dc2a6cb612dbcaf3752cc0f5a0028dbd65 into dcd6efda873ff0f7f10cbe8d301cc4cc3f65cd3b

File:
1 edited

Legend:

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

    rba1c145 rf0c569d  
    1313import time 
    1414import traceback 
     15import logging 
    1516 
    1617from sasmodels.weights import MODELS as POLYDISPERSITY_MODELS 
     
    2829    PageInfoEvent 
    2930from .basepage import ModelTextCtrl 
     31 
     32logger = logging.getLogger(__name__) 
    3033 
    3134(Chi2UpdateEvent, EVT_CHI2_UPDATE) = wx.lib.newevent.NewEvent() 
     
    213216        smear_message_new_psmear = \ 
    214217              "Please enter a fixed percentage to be applied to all Q values..." 
    215         smear_message_2d_x_title = "<dQp>[1/A]:" 
    216         smear_message_2d_y_title = "<dQs>[1/A]:" 
    217         smear_message_pinhole_percent_title = "dQ[%]:" 
     218        smear_message_2d_x_title = "<dQ/Q>p[%]:" 
     219        smear_message_2d_y_title = "<dQ/Q>s[%]:" 
     220        smear_message_pinhole_percent_min_title = "[dQ/Q]min(%):" 
     221        smear_message_pinhole_percent_max_title = "[dQ/Q]max(%):" 
     222        smear_message_pinhole_percent_title = "dQ/Q(%):" 
    218223        smear_message_slit_height_title = "Slit height[1/A]:" 
    219224        smear_message_slit_width_title = "Slit width[1/A]:" 
     
    423428        self.smear_description_2d_y.SetToolTipString( 
    424429                                    " dQs(perpendicular) in q_phi direction.") 
     430        self.smear_description_pin_percent_min = wx.StaticText(self, wx.ID_ANY, 
     431                                            smear_message_pinhole_percent_min_title, 
     432                                            style=wx.ALIGN_LEFT) 
     433        self.smear_description_pin_percent_max = wx.StaticText(self, wx.ID_ANY, 
     434                                            smear_message_pinhole_percent_max_title, 
     435                                            style=wx.ALIGN_LEFT) 
    425436        self.smear_description_pin_percent = wx.StaticText(self, wx.ID_ANY, 
    426437                                            smear_message_pinhole_percent_title, 
     
    449460        self.sizer_new_smear.Add((15, -1)) 
    450461        self.sizer_new_smear.Add(self.smear_description_2d_x, 0, wx.CENTER, 10) 
     462        self.sizer_new_smear.Add(self.smear_description_pin_percent_min, 
     463                                 0, wx.CENTER, 10) 
     464        self.sizer_new_smear.Add(self.smear_description_pin_percent, 
     465                                 0, wx.CENTER, 10) 
    451466        self.sizer_new_smear.Add(self.smear_description_slit_height, 
    452467                                 0, wx.CENTER, 10) 
    453468 
     469        self.sizer_new_smear.Add(self.smear_pinhole_percent, 0, wx.CENTER, 10) 
    454470        self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 
    455471        self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) 
     
    457473        self.sizer_new_smear.Add(self.smear_description_2d_y, 
    458474                                 0, wx.CENTER, 10) 
    459         self.sizer_new_smear.Add(self.smear_description_pin_percent, 
     475        self.sizer_new_smear.Add(self.smear_description_pin_percent_max, 
    460476                                 0, wx.CENTER, 10) 
    461477        self.sizer_new_smear.Add(self.smear_description_slit_width, 
    462478                                 0, wx.CENTER, 10) 
    463479 
    464         self.sizer_new_smear.Add(self.smear_pinhole_percent, 0, wx.CENTER, 10) 
    465480        self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 
    466481        self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) 
     
    16011616 
    16021617        :return: self.smear_type, self.dq_l and self.dq_r, 
    1603             respectively the type of the smear, dq_min and 
    1604             dq_max for pinhole smear data 
    1605             while dxl and dxw for slit smear 
    1606         """ 
    1607         # default 
     1618            respectively the type of the smear, The average <dq/q> radial(p) 
     1619            and <dq/q> theta (s)s for 2D pinhole resolution in % (slit is not 
     1620            currently supported in 2D), (dq/q)_min and (dq/q)_max for 1D pinhole 
     1621            smeared data, again in %, and dxl and/or dxw for slit smeared data 
     1622            given in 1/A and assumed constant. 
     1623        """ 
     1624        # set up defaults 
    16081625        self.smear_type = None 
    16091626        self.dq_l = None 
    16101627        self.dq_r = None 
    16111628        data = self.data 
     1629        #sanity check - this should only be called if data exits 
    16121630        if self.data is None: 
    16131631            return 
    1614         elif self.data.__class__.__name__ == "Data2D" or \ 
    1615             self.enable2D: 
    1616             if data.dqx_data is None or data.dqy_data is None: 
    1617                 return 
    1618             elif self.current_smearer is not None \ 
    1619                 and data.dqx_data.any() != 0 \ 
    1620                 and data.dqx_data.any() != 0: 
     1632        #First check if data is 2D 
     1633        #If so check that data set has smearing info and that none are zero. 
     1634        #Otherwise no smearing can be applied using smear from data (a Gaussian 
     1635        #width of zero will cause a divide by zero error) 
     1636        if self.data.__class__.__name__ == "Data2D": 
     1637            if data.dqx_data is not None and data.dqy_data is not None \ 
     1638              and data.dqx_data.all()and data.dqy_data.all(): 
    16211639                self.smear_type = "Pinhole2d" 
    1622                 self.dq_l = format_number(np.average(data.dqx_data)) 
    1623                 self.dq_r = format_number(np.average(data.dqy_data)) 
    1624                 return 
     1640                #report as average dQ/Q % as for 1D pinhole 
     1641                self.dq_l = format_number(np.average(data.dqx_data 
     1642                                                     / abs(data.qx_data)) * 100) 
     1643                self.dq_r = format_number(np.average(data.dqy_data 
     1644                                                     / abs(data.qy_data)) * 100) 
     1645            #if not then log that data did not contain resolutin info                                         / abs(data.qy_data)) * 100) 
    16251646            else: 
    1626                 return 
    1627         # check if it is pinhole smear and get min max if it is. 
    1628         if data.dx is not None and np.any(data.dx): 
    1629             self.smear_type = "Pinhole" 
    1630             self.dq_l = data.dx[0] 
    1631             self.dq_r = data.dx[-1] 
    1632  
    1633         # check if it is slit smear and get min max if it is. 
    1634         elif data.dxl is not None or data.dxw is not None: 
    1635             self.smear_type = "Slit" 
    1636             if data.dxl is not None and np.all(data.dxl, 0): 
    1637                 self.dq_l = data.dxl[0] 
    1638             if data.dxw is not None and np.all(data.dxw, 0): 
    1639                 self.dq_r = data.dxw[0] 
     1647                self.msg = "2D Data did not contain recognizable " \ 
     1648                           "resolution info." 
     1649                logger.info(self.msg) 
     1650        #If not check that data is 1D 
     1651        #If so check for pinhole vs slit by veryfing whehter dx or dxl or dxw 
     1652        #have data (currently sasview only supports either dx or dxl/dxw but 
     1653        #not both simultaneously) and, as for 2D, are non zero . 
     1654        #Otherwise no smearing can be applied using smear from data (a Gaussian 
     1655        #width of zero will cause a divide by zero error) 
     1656        elif self.data.__class__.__name__ == "Data1D": 
     1657            #is it valid 1D pinhole resolution data? 
     1658            if data.dx is not None and np.all(data.dx): 
     1659                self.smear_type = "Pinhole" 
     1660                #report in % for display makes more sense than absolute value 
     1661                #for pinhole smearing .. but keep old names of dq_l 
     1662                self.dq_l = format_number(data.dx[0] / data.x[0] * 100,1) 
     1663                self.dq_r = format_number(data.dx[-1] / data.x[-1] * 100,1) 
     1664            #If not, is it valid 1D slit resolution data? 
     1665            elif (data.dxl is not None or data.dxw is not None) \ 
     1666                and (np.all(data.dxl, 0) or np.all(data.dxw, 0)): 
     1667                self.smear_type = "Slit" 
     1668                #for slit units of 1/A make most sense 
     1669                if data.dxl is not None and np.all(data.dxl, 0): 
     1670                    self.dq_l = format_number(data.dxl[0],1) 
     1671                if data.dxw is not None and np.all(data.dxw, 0): 
     1672                    self.dq_r = format_number(data.dxw[0],1) 
     1673            #otherwise log that the data did not conatain resolution info 
     1674            else: 
     1675                self.msg = "1D Data did not contain recognizable " \ 
     1676                           "resolution info." 
     1677                logger.info(self.msg) 
     1678        #If drops to here it is neither data1D or data2D so log that 
     1679        else: 
     1680            self.msg = "Data was not recognized as either 1D or 2D data." 
     1681            logger.info(self.msg) 
    16401682        # return self.smear_type,self.dq_l,self.dq_r 
    16411683 
     
    16441686        Show only the sizers depending on smear selection 
    16451687        """ 
    1646         # smear disabled 
     1688        # smear disabled = No Smearing used 
    16471689        if self.disable_smearer.GetValue(): 
    16481690            self.smear_description_none.Show(True) 
    1649         # 2Dsmear 
     1691        # 2Dsmearing - for use with 2D data only 
    16501692        elif self._is_2D(): 
    16511693            self.smear_description_accuracy_type.Show(True) 
    16521694            self.smear_accuracy.Show(True) 
    1653             self.smear_description_accuracy_type.Show(True) 
    16541695            self.smear_description_2d.Show(True) 
    1655             self.smear_description_2d_x.Show(True) 
    1656             self.smear_description_2d_y.Show(True) 
     1696            #2D custom pinhole smearing 
    16571697            if self.pinhole_smearer.GetValue(): 
     1698                self.smear_description_pin_percent.Show(True) 
    16581699                self.smear_pinhole_percent.Show(True) 
    1659         # smear from data 
     1700            #get 2D smearing from data 
     1701            elif self.enable_smearer.GetValue(): 
     1702                self.smear_description_2d_x.Show(True) 
     1703                self.smear_description_2d_y.Show(True) 
     1704                self.smear_data_left.Show(True) 
     1705                self.smear_data_right.Show(True) 
     1706            #Currently 2D custom slit smearing is not currently supported 
     1707            else: 
     1708                logger.error("2D custom smearing cannot use slit smearing") 
     1709 
     1710        # 1D smearing from data 
    16601711        elif self.enable_smearer.GetValue(): 
    1661  
    16621712            self.smear_description_dqdata.Show(True) 
    16631713            if self.smear_type is not None: 
    16641714                self.smear_description_smear_type.Show(True) 
     1715                #1D data has slit smearing 
    16651716                if self.smear_type == 'Slit': 
    16661717                    self.smear_description_slit_height.Show(True) 
    16671718                    self.smear_description_slit_width.Show(True) 
     1719                #1D data has pinhole smearing 
    16681720                elif self.smear_type == 'Pinhole': 
    1669                     self.smear_description_pin_percent.Show(True) 
     1721                    self.smear_description_pin_percent_min.Show(True) 
     1722                    self.smear_description_pin_percent_max.Show(True) 
    16701723                self.smear_description_smear_type.Show(True) 
    16711724                self.smear_description_type.Show(True) 
    16721725                self.smear_data_left.Show(True) 
    16731726                self.smear_data_right.Show(True) 
    1674         # custom pinhole smear 
     1727        # 1D custom pinhole smearing 
    16751728        elif self.pinhole_smearer.GetValue(): 
    1676             if self.smear_type == 'Pinhole': 
    1677                 self.smear_message_new_p.Show(True) 
    1678                 self.smear_description_pin_percent.Show(True) 
    1679  
     1729            self.smear_message_new_p.Show(True) 
     1730            self.smear_description_pin_percent.Show(True) 
    16801731            self.smear_pinhole_percent.Show(True) 
    1681         # custom slit smear 
     1732        # 1D custom slit smear 
    16821733        elif self.slit_smearer.GetValue(): 
    16831734            self.smear_message_new_s.Show(True) 
     
    16861737            self.smear_description_slit_width.Show(True) 
    16871738            self.smear_slit_width.Show(True) 
     1739        else: 
     1740            logger.error("smearing type is not defined") 
    16881741 
    16891742    def _hide_all_smear_info(self): 
     
    17031756        self.smear_data_left.Hide() 
    17041757        self.smear_data_right.Hide() 
     1758        self.smear_description_pin_percent_min.Hide() 
     1759        self.smear_description_pin_percent_max.Hide() 
    17051760        self.smear_description_pin_percent.Hide() 
    17061761        self.smear_pinhole_percent.Hide() 
     
    31823237                    self.enable2D: 
    31833238            self.slit_smearer.Disable() 
    3184             self.pinhole_smearer.Enable(True) 
    31853239            self.default_mask = copy.deepcopy(self.data.mask) 
    3186         else: 
    3187             self.slit_smearer.Enable(True) 
    3188             self.pinhole_smearer.Enable(True) 
     3240            if self.model is not None: 
     3241                self.pinhole_smearer.Enable(True) 
     3242 
     3243        elif self.data.__class__.__name__ == "Data1D": 
     3244            if self.model is not None: 
     3245                self.slit_smearer.Enable(True) 
     3246                self.pinhole_smearer.Enable(True) 
     3247        else: 
     3248            msg="data is not recognized as either 1D or 2D" 
     3249            logger.info(msg) 
    31893250 
    31903251 
Note: See TracChangeset for help on using the changeset viewer.