Changeset 26bf293 in sasview for sansview/perspectives/fitting/modelpage.py
- Timestamp:
- Feb 2, 2009 7:28:06 PM (15 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:
- ca88b2e
- Parents:
- 2cf2b87
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sansview/perspectives/fitting/modelpage.py
r68dada4 r26bf293 5 5 import copy 6 6 7 7 8 from sans.guicomm.events import StatusEvent 9 from sans.guiframe.utils import format_number 8 10 (ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent() 9 11 _BOX_WIDTH = 80 10 12 11 def format_number(value, high=False): 12 """ 13 Return a float in a standardized, human-readable formatted string 14 """ 15 try: 16 value = float(value) 17 except: 18 print "returning 0" 19 return "0" 20 21 if high: 22 return "%-6.4g" % value 23 else: 24 return "%-5.3g" % value 25 26 13 14 15 27 16 class ModelPage(wx.ScrolledWindow): 28 17 """ … … 44 33 Initialization of the Panel 45 34 """ 46 #self.scroll = wx.ScrolledWindow(self) 35 # model on which the fit would be performed 36 self.model=model 37 #list of dispersion paramaters 38 self.disp_list=self.model.getDispParamList() 47 39 self.manager = None 48 40 self.parent = parent 49 self.event_owner=None 41 self.event_owner = None 42 # this panel does contain data .existing data allow a different drawing 43 #on set_model parameters 44 self.data=None 50 45 #panel interface 51 46 self.vbox = wx.BoxSizer(wx.VERTICAL) 52 self.sizer3 = wx.GridBagSizer(5,5) 53 self.sizer1 = wx.GridBagSizer(5,5) 54 self.sizer2 = wx.GridBagSizer(5,5) 47 self.sizer10 = wx.GridBagSizer(5,5) 48 self.sizer9 = wx.GridBagSizer(5,5) 49 self.sizer8 = wx.GridBagSizer(5,5) 50 self.sizer7 = wx.GridBagSizer(5,5) 51 self.sizer6 = wx.GridBagSizer(5,5) 52 self.sizer5 = wx.GridBagSizer(5,5) 55 53 self.sizer4 = wx.GridBagSizer(5,5) 56 self.sizer5 = wx.GridBagSizer(5,5) 57 self.static_line_1 = wx.StaticLine(self, -1) 54 55 #model selection 56 self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 57 self.vbox.Add(self.sizer4) 58 #model paramaters layer 59 self.vbox.Add(self.sizer5) 60 #polydispersion selected 61 self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 62 self.vbox.Add(self.sizer6) 63 #combox box for type of dispersion 64 self.vbox.Add(self.sizer7) 65 #dispersion parameters layer 66 self.vbox.Add(self.sizer8) 67 # plotting range 68 self.vbox.Add(self.sizer9) 69 #close layer 70 self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 71 self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 72 self.vbox.Add(self.sizer10) 73 74 75 #------------------ sizer 4 draw------------------------ 76 # model on which the fit would be performed 77 self.model=model 78 79 # define combox box 58 80 self.modelbox = wx.ComboBox(self, -1) 81 # preview selected model name 82 self.prevmodel_name=name 83 #print "model view prev_model",name 84 self.modelbox.SetValue(self.prevmodel_name) 85 #enable model 2D draw 86 self.enable2D= False 87 #filling sizer2 88 ix = 0 89 iy = 1 90 self.sizer4.Add(wx.StaticText(self,-1,'Model'),(iy,ix),(1,1)\ 91 , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 92 ix += 1 93 self.sizer4.Add(self.modelbox,(iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 94 ix += 1 59 95 id = wx.NewId() 60 self.vbox.Add(self.sizer3) 61 self.vbox.Add(self.sizer1) 62 self.vbox.Add(self.sizer2) 63 self.vbox.Add(self.static_line_1, 0, wx.EXPAND, 0) 64 self.vbox.Add(self.sizer5) 65 self.vbox.Add(self.sizer4) 66 67 id = wx.NewId() 68 self.btClose =wx.Button(self,id,'Close') 69 self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id) 70 self.btClose.SetToolTipString("Close page.") 71 ix = 1 72 iy = 1 73 self.sizer4.Add(wx.StaticText(self, -1, 'Min'),(iy, ix),(1,1),\ 74 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 75 ix += 1 76 self.sizer4.Add(wx.StaticText(self, -1, 'Max'),(iy, ix),(1,1),\ 77 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 78 ix += 1 79 self.sizer4.Add(wx.StaticText(self, -1, 'Npts'),(iy, ix),(1,1),\ 80 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 81 ix = 0 82 iy += 1 83 self.sizer4.Add(wx.StaticText(self, -1, 'x range'),(iy, ix),(1,1),\ 84 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 85 ## Q range 86 self.qmin= 0.001 87 self.qmax= 0.1 96 self.model_view =wx.Button(self,id,'View 2D') 97 self.model_view.Bind(wx.EVT_BUTTON, self.onModel2D,id=id) 98 self.model_view.SetToolTipString("View model in 2D") 99 self.sizer4.Add(self.model_view,(iy,ix),(1,1),\ 100 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 101 self.model_view.SetFocus() 102 #----------sizer6------------------------------------------------- 103 self.disable_disp = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP) 104 self.enable_disp = wx.RadioButton(self, -1, 'Yes', (10, 30)) 105 self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.disable_disp.GetId()) 106 self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.enable_disp.GetId()) 107 ix= 0 108 iy=1 109 self.sizer6.Add(wx.StaticText(self,-1,'Polydispersity: '),(iy,ix),(1,1)\ 110 , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 111 ix += 1 112 self.sizer6.Add(self.enable_disp ,(iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 113 ix += 1 114 self.sizer6.Add(self.disable_disp ,(iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 115 ix =0 116 iy+=1 117 self.sizer6.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 118 119 120 #---------sizer 9 draw---------------------------------------- 121 122 ## Q range 123 self.qmin_x= 0.001 124 self.qmax_x= 0.1 88 125 self.num_points= 100 89 126 90 ix += 1 91 self.xmin = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 92 self.xmin.SetValue(format_number(self.qmin)) 93 self.xmin.SetToolTipString("Minimun value of x in linear scale.") 94 self.xmin.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 95 self.xmin.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 96 self.sizer4.Add(self.xmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 97 98 99 ix += 1 100 self.xmax = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 101 self.xmax.SetValue(format_number(self.qmax)) 102 self.xmax.SetToolTipString("Maximum value of x in linear scale.") 103 self.xmax.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 104 self.xmax.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 105 self.sizer4.Add(self.xmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 106 ix += 1 127 128 self.qmin = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 129 self.qmin.SetValue(format_number(self.qmin_x)) 130 self.qmin.SetToolTipString("Minimun value of x in linear scale.") 131 self.qmin.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 132 self.qmin.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 133 134 self.qmax = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 135 self.qmax.SetValue(format_number(self.qmax_x)) 136 self.qmax.SetToolTipString("Maximum value of x in linear scale.") 137 self.qmax.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 138 self.qmax.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 139 140 107 141 self.npts = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 108 142 self.npts.SetValue(format_number(self.num_points)) … … 111 145 self.npts.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 112 146 113 self.sizer4.Add(self.npts,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 147 ix = 0 148 iy = 1 149 self.sizer9.Add(wx.StaticText(self, -1, 'Plotting Range'),(iy, ix),(1,1),\ 150 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 151 ix += 1 152 self.sizer9.Add(wx.StaticText(self, -1, 'Min'),(iy, ix),(1,1),\ 153 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 154 ix += 1 155 self.sizer9.Add(wx.StaticText(self, -1, 'Max'),(iy, ix),(1,1),\ 156 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 157 ix += 1 158 self.sizer9.Add(wx.StaticText(self, -1, 'Npts'),(iy, ix),(1,1),\ 159 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 114 160 ix = 0 115 161 iy += 1 116 self.sizer4.Add((20,20),(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 117 ix +=3 118 self.sizer4.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 119 ix = 0 120 iy = 1 121 self.sizer3.Add(wx.StaticText(self,-1,'Model'),(iy,ix),(1,1)\ 122 , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 123 ix += 1 124 self.sizer3.Add(self.modelbox,(iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 125 #ix = 0 126 #iy += 1 127 ix += 1 162 self.sizer9.Add(wx.StaticText(self, -1, 'x range'),(iy, ix),(1,1),\ 163 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 164 ix += 1 165 self.sizer9.Add(self.qmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 166 ix += 1 167 self.sizer9.Add(self.qmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 168 ix += 1 169 self.sizer9.Add(self.npts,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 170 171 ix =0 172 iy+=1 173 self.sizer9.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 174 #----------sizer 10 draw------------------------------------------------------ 128 175 id = wx.NewId() 129 self.model_view =wx.Button(self,id,'View 2D') 130 self.model_view.Bind(wx.EVT_BUTTON, self.onModel2D,id=id) 131 self.model_view.SetToolTipString("View model in 2D") 132 self.sizer3.Add(self.model_view,(iy,ix),(1,1),\ 133 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 176 self.btClose =wx.Button(self,id,'Close') 177 self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id) 178 self.btClose.SetToolTipString("Close page.") 179 180 ix= 3 181 iy= 1 182 self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 183 ix +=1 184 self.sizer10.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 185 ix =0 186 iy+=1 187 self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 188 134 189 # contains link between model ,all its parameters, and panel organization 135 190 self.parameters=[] 191 self.fixed_param=[] 136 192 #contains link between a model and selected parameters to fit 137 193 self.param_toFit=[] 138 # model on which the fit would be performed 139 self.model=model 140 try: 141 #print"init modelpage",model.name 142 self.set_panel(model) 143 except: 144 raise 145 # preview selected model name 146 self.prevmodel_name=name 147 #print "model view prev_model",name 148 self.modelbox.SetValue(self.prevmodel_name) 149 # flag to check if the user has selected a new model in the combox box 150 self.model_hasChanged=False 194 151 195 #dictionary of model name and model class 152 196 self.model_list_box={} 153 154 #enable model 2D draw 155 self.enable2D= False 156 # Data1D to make a deep comparison between 2 Data1D for checking data 157 #change 197 #Draw initial panel 198 if self.model!=None: 199 self.set_panel(self.model) 200 201 202 158 203 self.vbox.Layout() 159 204 self.vbox.Fit(self) 160 161 205 self.SetSizer(self.vbox) 162 206 self.SetScrollbars(20,20,55,40) 163 207 164 208 self.Centre() 165 166 def set_range(self, qmin, qmax, npts): 167 """ 168 Set the range for the plotted models 169 @param qmin: minimum Q 170 @param qmax: maximum Q 171 @param npts: number of Q bins 172 """ 173 # Set the data members 174 self.qmin = qmin 175 self.qmax = qmax 176 self.num_points = npts 177 178 # Set the controls 179 self.xmin.SetValue(format_number(self.qmin)) 180 self.xmax.SetValue(format_number(self.qmax)) 181 self.npts.SetValue(format_number(self.num_points)) 182 183 def onClose(self,event): 184 """ close the page associated with this panel""" 185 self.GrandParent.onClose() 209 self.Layout() 210 self.parent.GetSizer().Layout() 186 211 187 212 def set_owner(self,owner): … … 198 223 @param manager: instance of plugin fitting 199 224 """ 200 self.manager = manager 201 202 def onModel2D(self, event): 203 """ 204 call manager to plot model in 2D 205 """ 206 # If the 2D display is not currently enabled, plot the model in 2D 207 # and set the enable2D flag. 208 if self.enable2D==False: 209 self.enable2D=True 210 self._draw_model() 211 212 else: 213 print "enable is true:",self.enable2D 214 #self.manager.parent. show_panel(147) 215 self.manager.show_panel2D( id=None ) 216 #self.manager.menu1.Append(event_id, new_panel.window_caption, 217 # "Show %s plot panel" % new_panel.window_caption) 218 225 self.manager = manager 226 219 227 def populate_box(self, dict): 220 228 """ … … 230 238 name = item.name 231 239 list_name.append(name) 232 list_name.sort() 240 list_name.sort() 241 233 242 for name in list_name: 234 243 self.modelbox.Insert(name,int(id)) … … 236 245 wx.EVT_COMBOBOX(self.modelbox,-1, self._on_select_model) 237 246 return 0 247 248 249 def Set_DipersParam(self, event): 250 if self.enable_disp.GetValue(): 251 if len(self.disp_list)==0: 252 ix=0 253 iy=1 254 self.sizer8.Clear(True) 255 model_disp = wx.StaticText(self, -1, 'No PolyDispersity for this model') 256 self.sizer7.Add(model_disp,( iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 257 self.vbox.Layout() 258 self.SetScrollbars(20,20,55,40) 259 self.Layout() 260 self.parent.GetSizer().Layout() 261 return 262 else: 263 self.sizer8.Clear(True) 264 self.populate_disp_box() 265 self.set_panel_dispers(self.disp_list) 266 self.vbox.Layout() 267 self.SetScrollbars(20,20,55,40) 268 self.Layout() 269 self.parent.GetSizer().Layout() 270 else: 271 self.sizer7.Clear(True) 272 self.sizer8.Clear(True) 273 self.vbox.Layout() 274 self.SetScrollbars(20,20,55,40) 275 self.Layout() 276 self.parent.GetSizer().Layout() 277 278 def populate_disp_box(self): 279 self.sizer7.Clear(True) 280 if len(self.disp_list)>0: 281 ix=0 282 iy=1 283 model_disp = wx.StaticText(self, -1, 'Model Disp') 284 self.sizer7.Add(model_disp,( iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 285 ix += 1 286 # set up the combox box 287 id = 0 288 self.disp_box = wx.ComboBox(self, -1) 289 self.disp_box.SetValue("Gaussian") 290 self.disp_box.Insert("Gaussian",int(id)) 291 wx.EVT_COMBOBOX(self.disp_box,-1, self._on_select_Disp) 292 self.sizer7.Add(self.disp_box,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 293 294 def set_range(self, qmin_x, qmax_x, npts): 295 """ 296 Set the range for the plotted models 297 @param qmin: minimum Q 298 @param qmax: maximum Q 299 @param npts: number of Q bins 300 """ 301 # Set the data members 302 self.qmin_x = qmin_x 303 self.qmax_x = qmax_x 304 self.num_points = npts 305 306 # Set the controls 307 self.qmin.SetValue(format_number(self.qmin_x)) 308 self.qmax.SetValue(format_number(self.qmax_x)) 309 self.npts.SetValue(format_number(self.num_points)) 310 def checkFitRange(self): 311 """ 312 Check the validity of fitting range 313 @note: qmin should always be less than qmax or else each control box 314 background is colored in pink. 315 """ 316 317 flag = True 318 valueMin = self.qmin.GetValue() 319 valueMax = self.qmax.GetValue() 320 # Check for possible values entered 321 #print "fitpage: checkfitrange:",valueMin,valueMax 322 try: 323 if (float(valueMax)> float(valueMin)): 324 self.qmax.SetBackgroundColour(wx.WHITE) 325 self.qmin.SetBackgroundColour(wx.WHITE) 326 else: 327 flag = False 328 self.qmin.SetBackgroundColour("pink") 329 self.qmax.SetBackgroundColour("pink") 330 except: 331 flag = False 332 self.qmin.SetBackgroundColour("pink") 333 self.qmax.SetBackgroundColour("pink") 334 335 self.qmin.Refresh() 336 self.qmax.Refresh() 337 return flag 338 339 340 341 def onClose(self,event): 342 """ close the page associated with this panel""" 343 self.parent.onClose() 344 345 346 347 def onModel2D(self, event): 348 """ 349 call manager to plot model in 2D 350 """ 351 # If the 2D display is not currently enabled, plot the model in 2D 352 # and set the enable2D flag. 353 if self.enable2D==False: 354 self.enable2D=True 355 self._draw_model() 356 357 else: 358 print "enable is true:",self.enable2D 359 #self.manager.parent. show_panel(147) 360 self.manager.show_panel2D( id=None ) 361 #self.manager.menu1.Append(event_id, new_panel.window_caption, 362 # "Show %s plot panel" % new_panel.window_caption) 363 238 364 239 365 def select_model(self, model, name): … … 254 380 if items[i]==name: 255 381 self.modelbox.SetSelection(i) 256 382 383 384 def _on_select_Disp(self,event): 385 """ 386 allow selecting different dispersion 387 self.disp_list should change type later .now only gaussian 388 """ 389 type = "Gaussian" 390 if type ==event.GetString(): 391 self.set_panel_dispers( self.disp_list,type ) 392 257 393 def _on_select_model(self,event): 258 394 """ … … 260 396 post an event to its owner to draw an appropriate theory 261 397 """ 262 self.model_view.SetFocus() 398 self.disable_disp.SetValue(True) 399 self.sizer8.Clear(True) 400 self.sizer7.Clear(True) 401 self.vbox.Layout() 402 self.SetScrollbars(20,20,55,40) 403 self.Layout() 404 self.parent.GetSizer().Layout() 263 405 for item in self.model_list_box.itervalues(): 264 406 name = item.__name__ … … 298 440 @param model: the model selected in combo box for fitting purpose 299 441 """ 300 301 self.sizer2.Clear(True) 302 self.sizer1.Clear(True) 442 print "set_panel", model 303 443 self.sizer5.Clear(True) 304 444 self.parameters = [] 305 445 self.param_toFit=[] 446 self.fixed_param=[] 306 447 self.model = model 307 448 keys = self.model.getParamList() 449 #list of dispersion paramaters 450 self.disp_list=self.model.getDispParamList() 451 308 452 keys.sort() 309 description=None 310 if hasattr(self.model,'description'): 311 description =model.description 312 disp_list=self.model.getDispParamList() 313 ip=0 314 iq=1 315 if len(disp_list)>0: 316 disp = wx.StaticText(self, -1, 'Dispersion') 317 self.sizer5.Add(disp,( iq, ip),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 318 ip += 1 319 values = wx.StaticText(self, -1, 'Values') 320 self.sizer5.Add(values,( iq, ip),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 321 322 disp_list.sort() 323 #print "went here",self.model.name,model.description 453 ik=0 454 im=1 455 324 456 iy = 1 325 457 ix = 0 326 self.cb0 = wx.StaticText(self, -1,'Model Description:') 327 self.sizer1.Add(self.cb0,(iy, ix),(1,1),\ 328 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 329 iy += 1 330 331 self.cb01 = wx.StaticText(self, -1,str(description),style=wx.ALIGN_LEFT) 332 self.cb01.Wrap(400) 333 #self.cb01 = wx.StaticText(self, -1,str(description),(45, 25),style=wx.ALIGN_LEFT) 334 335 self.sizer1.Add(self.cb01,(iy, ix),(1,1),\ 336 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 337 ix = 0 338 iy = 1 339 self.cb1 = wx.StaticText(self, -1,'Parameters') 340 self.sizer2.Add(self.cb1,(iy, ix),(1,1),\ 458 self.cb1 = wx.CheckBox(self, -1,"Select all", (10, 10)) 459 if self.data!=None: 460 wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param) 461 self.cb1.SetValue(False) 462 else: 463 self.cb1.Disable() 464 self.cb1.Hide() 465 466 self.sizer5.Add(self.cb1,(iy, ix),(1,1),\ 341 467 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 342 468 ix +=1 343 469 self.text2_2 = wx.StaticText(self, -1, 'Values') 344 self.sizer 2.Add(self.text2_2,(iy, ix),(1,1),\470 self.sizer5.Add(self.text2_2,(iy, ix),(1,1),\ 345 471 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 472 ix +=2 473 self.text2_3 = wx.StaticText(self, -1, 'Errors') 474 self.sizer5.Add(self.text2_3,(iy, ix),(1,1),\ 475 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 476 self.text2_3.Hide() 346 477 ix +=1 347 478 self.text2_4 = wx.StaticText(self, -1, 'Units') 348 self.sizer 2.Add(self.text2_4,(iy, ix),(1,1),\479 self.sizer5.Add(self.text2_4,(iy, ix),(1,1),\ 349 480 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 350 481 self.text2_4.Hide() 482 disp_list=self.model.getDispParamList() 351 483 for item in keys: 352 484 if not item in disp_list: 353 485 iy += 1 354 486 ix = 0 355 cb=wx.StaticText(self, -1, item) 356 self.sizer2.Add( cb,( iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 487 488 cb = wx.CheckBox(self, -1, item, (10, 10)) 489 if self.data!=None: 490 cb.SetValue(False) 491 wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 492 else: 493 cb.Disable() 494 self.sizer5.Add( cb,( iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 495 357 496 ix += 1 358 497 value= self.model.getParam(item) … … 360 499 ctl1.SetValue(str (format_number(value))) 361 500 ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 362 ctl1.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 363 self.sizer2.Add(ctl1, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 501 ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 502 self.sizer5.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 503 504 ix += 1 505 text2=wx.StaticText(self, -1, '+/-') 506 self.sizer5.Add(text2,(iy, ix),(1,1),\ 507 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 508 text2.Hide() 509 ix += 1 510 ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 511 self.sizer5.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 512 ctl2.Hide() 364 513 ix +=1 365 366 514 # Units 367 515 try: … … 369 517 except: 370 518 units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 371 self.sizer2.Add(units, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 372 else: 373 ip = 0 374 iq += 1 375 cb=wx.StaticText(self, -1, item) 376 self.sizer5.Add( cb,( iq, ip),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 377 wx.EVT_CHECKBOX(self, cb.GetId(), self._on_select_model) 519 self.sizer5.Add(units, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 520 521 self.parameters.append([cb,ctl1,text2,ctl2]) 378 522 379 ip += 1380 value= self.model.getParam(item)381 ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER)382 ctl1.SetValue(str (format_number(value)))383 ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)384 ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)385 self.sizer5.Add(ctl1, (iq,ip),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)386 #save data387 self.parameters.append([cb,ctl1])388 523 iy+=1 389 self.sizer 2.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)524 self.sizer5.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 390 525 391 526 #Display units text on panel … … 396 531 else: 397 532 self.text2_4.Hide() 533 #Disable or enable fit button 534 """ 535 if not (len(self.param_toFit ) >0): 536 self.qmin.Disable() 537 self.qmax.Disable() 538 else: 539 self.qmin.Enable() 540 self.qmax.Enable() 541 """ 398 542 self.vbox.Layout() 399 543 self.SetScrollbars(20,20,55,40) 400 401 self.GrandParent.GetSizer().Layout() 402 544 self.Layout() 545 self.parent.GetSizer().Layout() 546 547 548 def set_panel_dispers(self, disp_list, type="Gaussian" ): 549 550 551 552 ix=0 553 iy=1 554 ### this will become a separate method 555 if type== "Gaussian" : 556 557 disp = wx.StaticText(self, -1, 'Dispersion') 558 self.sizer8.Add(disp,( iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 559 ix += 1 560 values = wx.StaticText(self, -1, 'Values') 561 self.sizer8.Add(values,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 562 ix +=2 563 self.text2_3 = wx.StaticText(self, -1, 'Errors') 564 self.sizer8.Add(self.text2_3,(iy, ix),(1,1),\ 565 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 566 self.text2_3.Hide() 567 568 ix += 1 569 npts = wx.StaticText(self, -1, 'Npts') 570 self.sizer8.Add(npts,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 571 ix += 1 572 nsigmas = wx.StaticText(self, -1, 'Nsigmas') 573 self.sizer8.Add(nsigmas,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 574 575 disp_list.sort() 576 #print disp_list,self.model.fixed,self.model.dispersion 577 for item in self.model.dispersion.keys(): 578 name1=item+".width" 579 name2=item+".npts" 580 name3=item+".nsigmas" 581 iy += 1 582 for p in self.model.dispersion[item].keys(): 583 #print "name 1 2 3", name1, name2, name3 584 if p=="width": 585 ix = 0 586 cb = wx.CheckBox(self, -1, name1, (10, 10)) 587 if self.data !=None: 588 cb.SetValue(False) 589 wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 590 else: 591 cb.Disable() 592 self.sizer8.Add( cb,( iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 593 ix = 1 594 value= self.model.getParam(name1) 595 ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 596 ctl1.SetValue(str (format_number(value))) 597 ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 598 ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 599 self.sizer8.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 600 601 ix = 2 602 text2=wx.StaticText(self, -1, '+/-') 603 self.sizer8.Add(text2,(iy, ix),(1,1),\ 604 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 605 text2.Hide() 606 ix = 3 607 ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 608 self.sizer8.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 609 ctl2.Hide() 610 611 self.parameters.append([cb,ctl1,text2,ctl2]) 612 613 elif p=="npts": 614 ix =4 615 value= self.model.getParam(name2) 616 Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER) 617 Tctl.SetValue(str (format_number(value))) 618 Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 619 Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 620 self.sizer8.Add(Tctl, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 621 self.fixed_param.append([name2, Tctl]) 622 elif p=="nsigmas": 623 ix =5 624 value= self.model.getParam(name3) 625 Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER) 626 Tctl.SetValue(str (format_number(value))) 627 Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 628 Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 629 self.sizer8.Add(Tctl, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 630 self.fixed_param.append([name3, Tctl]) 631 632 633 634 403 635 404 636 def _onparamEnter(self,event): … … 412 644 # Flag to register when a parameter has changed. 413 645 is_modified = False 646 for item in self.fixed_param: 647 try: 648 name=str(item[0]) 649 value= float(item[1].GetValue()) 650 #print "model para", name,value,self.model.getParam(name) 651 # If the value of the parameter has changed, 652 # update the model and set the is_modified flag 653 if value != self.model.getParam(name): 654 #print "went hereee" 655 self.model.setParam(name,value) 656 is_modified = True 657 658 except: 659 wx.PostEvent(self.parent.parent, StatusEvent(status=\ 660 "Model Drawing Error:wrong value entered : %s"% sys.exc_value)) 661 414 662 for item in self.parameters: 415 663 try: 416 664 name=str(item[0].GetLabelText()) 417 665 value= float(item[1].GetValue()) 666 #print " fittable model para", name,value 418 667 # If the value of the parameter has changed, 419 668 # update the model and set the is_modified flag 420 669 if value != self.model.getParam(name): 670 #print "went here", name,value 421 671 self.model.setParam(name,value) 422 672 is_modified = True 423 673 except: 424 wx.PostEvent(self.parent. GrandParent, StatusEvent(status=\674 wx.PostEvent(self.parent.parent, StatusEvent(status=\ 425 675 "Model Drawing Error:wrong value entered : %s"% sys.exc_value)) 426 676 … … 428 678 # If qmin and qmax have been modified, update qmin and qmax and 429 679 # set the is_modified flag to True 430 if float(self. xmin.GetValue()) != self.qmin:431 self.qmin = float(self.xmin.GetValue())680 if float(self.qmin.GetValue()) != self.qmin_x: 681 self.qmin_x = float(self.qmin.GetValue()) 432 682 is_modified = True 433 if float(self. xmax.GetValue()) != self.qmax:434 self.qmax = float(self.xmax.GetValue())683 if float(self.qmax.GetValue()) != self.qmax_x: 684 self.qmax_x = float(self.qmax.GetValue()) 435 685 is_modified = True 436 686 … … 450 700 [Note to coder: This way future changes will be done in only one place.] 451 701 """ 702 #print "_draw_model",self.model 452 703 if name==None: 453 704 name= self.model.name 454 self.manager.draw_model(self.model, name, 455 qmin=self.qmin, qmax=self.qmax, 705 706 self.manager.draw_model(self.model, name, data=self.data, 707 qmin=self.qmin_x, qmax=self.qmax_x, 456 708 qstep= self.num_points, 457 709 enable2D=self.enable2D) … … 462 714 enable2D=self.enable2D) 463 715 """ 464 465 466 716 def select_param(self,event): 717 pass 718 def select_all_param(self,event): 719 pass 720 721
Note: See TracChangeset
for help on using the changeset viewer.