Changeset 51a71a3 in sasview for sansview/perspectives/fitting/basepage.py
- Timestamp:
- Apr 14, 2010 12:29:30 PM (14 years ago)
- 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, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- 6318298
- Parents:
- c5874f2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sansview/perspectives/fitting/basepage.py
rda3f24c r51a71a3 1002 1002 use : _check_value_enter 1003 1003 """ 1004 # Flag to register when a parameter has changed. 1004 # Flag to register when a parameter has changed. 1005 1005 is_modified = False 1006 self.fitrange =True 1007 is_2Ddata = False 1006 1008 #self._undo.Enable(True) 1009 # check if 2d data 1010 if self.data.__class__.__name__ !="Data1D": 1011 is_2Ddata = True 1007 1012 if self.model !=None: 1008 1013 try: … … 1026 1031 self.qmax_x = tempmax 1027 1032 is_modified = True 1028 self.fitrange = True 1033 1034 if is_2Ddata: 1035 # set mask 1036 is_modified = self._validate_Npts() 1037 1029 1038 else: 1030 self.fitrange = False 1031 if self.npts != None: 1032 if check_float(self.npts): 1033 temp_npts = float(self.npts.GetValue()) 1034 if temp_npts != self.num_points: 1035 self.num_points = temp_npts 1036 is_modified = True 1037 else: 1038 msg= "Cannot Plot :Must enter a number!!! " 1039 wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 1040 1041 1039 self.fitrange = False 1040 1042 1041 ## if any value is modify draw model with new value 1043 if is_modified: 1042 if not self.fitrange: 1043 self.btFit.Disable() 1044 if is_2Ddata: self.btEditMask.Disable() 1045 else: 1046 self.btFit.Enable(True) 1047 if is_2Ddata: self.btEditMask.Enable(True) 1048 1049 if is_modified and self.fitrange: 1044 1050 self.state_change= True 1045 1051 self._draw_model() … … 1053 1059 #flag for qmin qmax check values 1054 1060 flag = True 1061 self.fitrange = True 1055 1062 is_modified = False 1063 is_2Ddata = False 1064 1065 # check if 2d data 1066 if self.data.__class__.__name__ !="Data1D": 1067 is_2Ddata = True 1068 1056 1069 ##So make sure that update param values on_Fit. 1057 1070 #self._undo.Enable(True) … … 1066 1079 # If qmin and qmax have been modified, update qmin and qmax and 1067 1080 # set the is_modified flag to True 1068 if self._validate_qrange(self.qmin, self.qmax): 1081 self.fitrange = self._validate_qrange(self.qmin, self.qmax) 1082 if self.fitrange: 1069 1083 tempmin = float(self.qmin.GetValue()) 1070 1084 if tempmin != self.qmin_x: … … 1085 1099 self.manager.set_smearer(smearer=temp_smearer, qmin= float(self.qmin_x), 1086 1100 qmax= float(self.qmax_x)) 1087 elif self.data.__class__.__name__ !="Data2D":1101 elif not is_2Ddata: 1088 1102 self.manager.set_smearer(smearer=temp_smearer, qmin= float(self.qmin_x), 1089 1103 qmax= float(self.qmax_x)) 1104 index_data = ((self.qmin_x <= self.data.x)&(self.data.x <= self.qmax_x)) 1105 self.Npts_fit.SetValue(str(len(self.data.x[index_data==True]))) 1106 flag = True 1107 if is_2Ddata: 1108 # only 2D case set mask 1109 flag = self._validate_Npts() 1110 if not flag: 1111 return flag 1090 1112 else: flag = False 1091 1113 else: 1092 1114 flag = False 1115 1116 #For invalid q range, disable the mask editor and fit button, vs. 1117 if not self.fitrange: 1118 self.btFit.Disable() 1119 self.btEditMask.Disable() 1120 else: 1121 self.btFit.Enable(True) 1122 self.btEditMask.Enable(True) 1123 1093 1124 1094 1125 if not flag: 1095 msg= "Cannot Fit :Must select a model or Fitting range is not valid!!! "1126 msg= "Cannot Plot or Fit :Must select a model or Fitting range is not valid!!! " 1096 1127 wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 1097 1128 1098 1129 self.save_current_state() 1130 1099 1131 return flag 1100 1132 … … 1597 1629 self.structurebox.Enable() 1598 1630 self.text2.Enable() 1599 if self.data.__class__.__name__ =="Data2D":1631 if self.data.__class__.__name__ !="Data1D": 1600 1632 self.smear_description_2d.Show(True) 1601 1633 … … 1652 1684 return False 1653 1685 return True 1654 1686 1687 def _validate_Npts(self): 1688 """ 1689 Validate the number of points for fitting is more than 10 points. 1690 If valid, setvalues Npts_fit otherwise post msg. 1691 """ 1692 #default flag 1693 flag = True 1694 1695 # q value from qx and qy 1696 radius= numpy.sqrt( self.data.qx_data*self.data.qx_data + self.data.qy_data*self.data.qy_data ) 1697 #get unmasked index 1698 index_data = (float(self.qmin.GetValue()) <= radius)&(radius<= float(self.qmax.GetValue())) 1699 index_data = (index_data)&(self.data.mask) 1700 index_data = (index_data)&(numpy.isfinite(self.data.data)) 1701 1702 if len(index_data[index_data]) < 10: 1703 # change the color pink. 1704 self.qmin.SetBackgroundColour("pink") 1705 self.qmin.Refresh() 1706 self.qmax.SetBackgroundColour("pink") 1707 self.qmax.Refresh() 1708 msg= "Cannot Plot :No or too little npts in that data range!!! " 1709 wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 1710 self.fitrange = False 1711 flag = False 1712 else: 1713 self.Npts_fit.SetValue(str(len(self.data.mask[index_data==True]))) 1714 self.fitrange = True 1715 1716 return flag 1717 1655 1718 def _check_value_enter(self, list, modified): 1656 1719 """ … … 1664 1727 for item in list: 1665 1728 #skip angle parameters for 1D 1666 if self.data.__class__.__name__ !="Data 2D":1729 if self.data.__class__.__name__ !="Data1D": 1667 1730 if item in self.orientation_params: 1668 1731 continue … … 1930 1993 self.disp_cb_dict[p] = wx.RadioButton(self, -1, p, (10, 10)) 1931 1994 self.state.disp_cb_dict[p]= self.disp_cb_dict[p].GetValue() 1932 if not (self.enable2D or self.data.__class__.__name__ =="Data2D"):1995 if not (self.enable2D or self.data.__class__.__name__ !="Data1D"): 1933 1996 self.disp_cb_dict[p].Hide() 1934 1997 else: … … 1974 2037 Fill the Q range sizer 1975 2038 """ 2039 #2D data? default 2040 is_2Ddata = False 2041 2042 #check if it is 2D data 2043 if self.data.__class__.__name__ != 'Data1D': 2044 is_2Ddata = True 2045 1976 2046 self.sizer5.Clear(True) 1977 2047 #-------------------------------------------------------------- … … 1994 2064 1995 2065 id = wx.NewId() 1996 self.reset_qrange =wx.Button(self,id,'Reset',size=(7 0,23))2066 self.reset_qrange =wx.Button(self,id,'Reset',size=(77,20)) 1997 2067 1998 2068 self.reset_qrange.Bind(wx.EVT_BUTTON, self.on_reset_clicked,id=id) … … 2000 2070 2001 2071 sizer_horizontal=wx.BoxSizer(wx.HORIZONTAL) 2002 sizer= wx.GridSizer(3, 3,2, 5) 2003 2072 sizer= wx.GridSizer(2, 4,2, 6) 2073 2074 self.btEditMask = wx.Button(self,wx.NewId(),'Editor', size=(88,23)) 2075 self.btEditMask.Bind(wx.EVT_BUTTON, self._onMask,id= self.btEditMask.GetId()) 2076 self.btEditMask.SetToolTipString("Edit Mask.") 2077 self.EditMask_title = wx.StaticText(self, -1, ' Masking(2D)') 2078 2004 2079 sizer.Add(wx.StaticText(self, -1, ' Q range')) 2005 sizer.Add(wx.StaticText(self, -1, ' Min')) 2006 sizer.Add(wx.StaticText(self, -1, ' Max')) 2080 sizer.Add(wx.StaticText(self, -1, ' Min[1/A]')) 2081 sizer.Add(wx.StaticText(self, -1, ' Max[1/A]')) 2082 sizer.Add(self.EditMask_title) 2007 2083 sizer.Add(self.reset_qrange) 2008 2084 2009 2085 sizer.Add(self.qmin) 2010 2086 sizer.Add(self.qmax) 2011 sizer_horizontal.Add(sizer) 2087 sizer.Add(self.btEditMask) 2088 2089 if object1!=None: 2090 2091 boxsizer1.Add(object1) 2092 boxsizer1.Add((10,10)) 2093 boxsizer1.Add(sizer) 2012 2094 if object!=None: 2013 sizer_horizontal.Add(object) 2014 2015 if object1!=None: 2016 boxsizer1.Add(object1) 2017 boxsizer1.Add((10,10)) 2018 boxsizer1.Add(sizer_horizontal) 2095 boxsizer1.Add((10,15)) 2096 boxsizer1.Add(object) 2097 if not is_2Ddata: 2098 self.btEditMask.Disable() 2099 self.EditMask_title.Disable() 2019 2100 ## save state 2020 2101 self.save_current_state() … … 2077 2158 return 2078 2159 ##For 3 different cases: Data2D, Data1D, and theory 2079 if self.data.__class__.__name__ == "Data2D":2160 if self.data.__class__.__name__ != "Data1D": 2080 2161 data_min= 0 2081 2162 x= max(math.fabs(self.data.xmin), math.fabs(self.data.xmax)) … … 2105 2186 msg= "Cannot Plot :Must enter a number!!! " 2106 2187 wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 2188 else: 2189 # set relative text ctrs. 2190 self.qmin.SetValue(str(self.qmin_x)) 2191 self.qmax.SetValue(str(self.qmax_x)) 2192 self.set_npts2fit() 2193 # At this point, some button and variables satatus (disabled?) should be checked 2194 # such as color that should be reset to white in case that it was pink. 2195 self._onparamEnter_helper() 2196 2107 2197 2108 2198 self.save_current_state()
Note: See TracChangeset
for help on using the changeset viewer.