Changeset fb59ed9 in sasview for sansview/perspectives/fitting/fitpage.py
- Timestamp:
- Oct 20, 2010 6:08:34 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:
- d2539aa
- Parents:
- f118fe2f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sansview/perspectives/fitting/fitpage.py
r20905a0 rfb59ed9 1192 1192 self.smear_accuracy.Append(list[idx],idx) 1193 1193 1194 def _set_fun_box_list(self,fun_box): 1195 """ 1196 Set the list of func for multifunctional models 1197 """ 1198 # Check if it is multi_functional model 1199 if self.model.__class__ not in self.model_list_box["Multi-Functions"]: 1200 return None 1201 # Get the func name list 1202 list = self.model.fun_list 1203 if len(list) == 0: 1204 return None 1205 # build function (combo)box 1206 ind = 0 1207 while(ind < len(list)): 1208 for key, val in list.iteritems(): 1209 if (val == ind): 1210 fun_box.Append(key,val) 1211 break 1212 ind += 1 1213 1194 1214 def _on_select_accuracy(self,event): 1195 1215 """ … … 1206 1226 if self.current_smearer != None: 1207 1227 self.current_smearer.set_accuracy(accuracy = self.smear2d_accuracy) 1228 event.Skip() 1229 1230 def _on_fun_box(self,event): 1231 """ 1232 Select an func: Erf,Rparabola,LParabola 1233 """ 1234 fun_val = None 1235 fun_box = event.GetEventObject() 1236 name = fun_box.Name 1237 value = fun_box.GetValue() 1238 if self.model.fun_list.has_key(value): 1239 fun_val = self.model.fun_list[value] 1240 1241 self.model.setParam(name,fun_val) 1242 # save state 1243 self._copy_parameters_state(self.str_parameters, self.state.str_parameters) 1244 # update params 1245 self._update_paramv_on_fit() 1246 # draw 1247 self._draw_model() 1248 self.Refresh() 1249 # get ready for new event 1208 1250 event.Skip() 1209 1251 … … 2046 2088 self.sizer3.Clear(True) 2047 2089 self.parameters = [] 2090 self.str_parameters = [] 2048 2091 self.param_toFit=[] 2049 2092 self.fittable_param=[] … … 2074 2117 Custom compare to order, first by alphabets then second by number. 2075 2118 """ 2119 # number at the last digit 2076 2120 a_last = a[len(a)-1] 2077 2121 b_last = b[len(b)-1] 2078 2122 # default 2079 2123 num_a = None 2080 2124 num_b = None 2125 # split the names 2126 a2 = a.lower().split('_') 2127 b2 = b.lower().split('_') 2128 # check length of a2, b2 2129 len_a2 = len(a2) 2130 len_b2 = len(b2) 2081 2131 # check if it contains a int number(<10) 2082 2132 try: … … 2086 2136 num_b = int(b_last) 2087 2137 except: pass 2138 # Put 'scale' near the top; happens 2139 # when numbered param name exists 2140 if a == 'scale': 2141 return -1 2088 2142 # both have a number 2089 2143 if num_a != None and num_b != None: 2090 if num_a > num_b: return 1 2144 if num_a > num_b: return -1 2145 # same number 2091 2146 elif num_a == num_b: 2092 return cmp(a.lower(), b.lower()) 2093 else: return -1 2147 # different last names 2148 if a2[len_a2-1] != b2[len_b2-1] and num_a != 0: 2149 return -cmp(a2[len_a2-1], b2[len_b2-1]) 2150 else: 2151 return cmp(a, b) 2152 else: return 1 2094 2153 # one of them has a number 2095 2154 elif num_a != None: return 1 2096 2155 elif num_b != None: return -1 2097 # no nu umbers2156 # no numbers 2098 2157 else: return cmp(a.lower(), b.lower()) 2158 2099 2159 2100 2160 keys.sort(custom_compare) … … 2147 2207 iy += 1 2148 2208 ix = 0 2149 ## add parameters name with checkbox for selecting to fit 2150 cb = wx.CheckBox(self, -1, item ) 2151 cb.SetToolTipString(" Check for fitting.") 2152 #cb.SetValue(True) 2153 wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 2154 2155 sizer.Add( cb,( iy, ix),(1,1), 2156 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 2157 2158 ## add parameter value 2159 ix += 1 2160 value= self.model.getParam(item) 2161 ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20), 2162 style=wx.TE_PROCESS_ENTER) 2163 ctl1.SetToolTipString("Hit 'Enter' after typing.") 2164 ctl1.SetValue(format_number(value)) 2165 sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 2166 ## text to show error sign 2167 ix += 1 2168 text2=wx.StaticText(self, -1, '+/-') 2169 sizer.Add(text2,(iy, ix),(1,1),\ 2170 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2171 text2.Hide() 2172 ix += 1 2173 ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0) 2174 sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2175 ctl2.Hide() 2176 2177 ix += 1 2178 ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 2179 text_enter_callback = self._onparamRangeEnter) 2180 2181 sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2182 ctl3.Hide() 2183 2184 ix += 1 2185 ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 2186 text_enter_callback = self._onparamRangeEnter) 2187 sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2188 2189 ctl4.Hide() 2190 2191 if self.engine_type=="park": 2192 ctl3.Show(True) 2193 ctl4.Show(True) 2194 ix +=1 2195 # Units 2196 if self.model.details.has_key(item): 2197 units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT) 2209 if self.model.__class__ in self.model_list_box["Multi-Functions"] \ 2210 and item in self.model.non_fittable: 2211 non_fittable_name = wx.StaticText(self, -1, item ) 2212 sizer.Add(non_fittable_name,(iy, ix),(1,1),\ 2213 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 21) 2214 ## add parameter value 2215 ix += 1 2216 value= self.model.getParam(item) 2217 if len(self.model.fun_list) > 0: 2218 num = item.split('_')[1][5:7] 2219 fun_box = wx.ComboBox(self, -1,size=(100,-1),style=wx.CB_READONLY, name = '%s'% item) 2220 self._set_fun_box_list(fun_box) 2221 fun_box.SetSelection(0) 2222 #self.fun_box.SetToolTipString("A function describing the interface") 2223 wx.EVT_COMBOBOX(fun_box,-1, self._on_fun_box) 2224 else: 2225 fun_box = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20), 2226 style=wx.TE_PROCESS_ENTER, name ='%s'% item) 2227 fun_box.SetToolTipString("Hit 'Enter' after typing.") 2228 fun_box.SetValue(format_number(value)) 2229 sizer.Add(fun_box, (iy,ix),(1,1), wx.EXPAND) 2230 self.str_parameters.append([None,item, fun_box,None,None,None,None,None]) 2231 2232 2198 2233 else: 2199 units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 2200 sizer.Add(units, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2234 ## add parameters name with checkbox for selecting to fit 2235 cb = wx.CheckBox(self, -1, item ) 2236 cb.SetToolTipString(" Check for fitting.") 2237 #cb.SetValue(True) 2238 wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 2201 2239 2202 ##[cb state, name, value, "+/-", error of fit, min, max , units] 2203 self.parameters.append([cb,item, ctl1, 2204 text2,ctl2, ctl3, ctl4,units]) 2205 2240 sizer.Add( cb,( iy, ix),(1,1), 2241 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 2242 2243 ## add parameter value 2244 ix += 1 2245 value= self.model.getParam(item) 2246 ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20), 2247 style=wx.TE_PROCESS_ENTER) 2248 ctl1.SetToolTipString("Hit 'Enter' after typing.") 2249 ctl1.SetValue(format_number(value)) 2250 sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 2251 ## text to show error sign 2252 ix += 1 2253 text2=wx.StaticText(self, -1, '+/-') 2254 sizer.Add(text2,(iy, ix),(1,1),\ 2255 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2256 text2.Hide() 2257 ix += 1 2258 ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0) 2259 sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2260 ctl2.Hide() 2261 2262 ix += 1 2263 ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 2264 text_enter_callback = self._onparamRangeEnter) 2265 2266 sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2267 ctl3.Hide() 2268 2269 ix += 1 2270 ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 2271 text_enter_callback = self._onparamRangeEnter) 2272 sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2273 2274 ctl4.Hide() 2275 2276 if self.engine_type=="park": 2277 ctl3.Show(True) 2278 ctl4.Show(True) 2279 ix +=1 2280 # Units 2281 if self.model.details.has_key(item): 2282 units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT) 2283 else: 2284 units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 2285 sizer.Add(units, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 2286 2287 ##[cb state, name, value, "+/-", error of fit, min, max , units] 2288 self.parameters.append([cb,item, ctl1, 2289 text2,ctl2, ctl3, ctl4,units]) 2290 2206 2291 iy+=1 2207 2292 sizer.Add((10,10),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
Note: See TracChangeset
for help on using the changeset viewer.