Changeset 2140e68 in sasview for sansview/perspectives/fitting/simfitpage.py
- Timestamp:
- Mar 25, 2009 3:05:23 PM (16 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:
- ac11e40
- Parents:
- c7ac15e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sansview/perspectives/fitting/simfitpage.py
r925a30e r2140e68 1 1 2 import sys,re,string, wx 2 import sys,re,string, wx 3 import wx.lib.newevent 3 4 from sans.guicomm.events import StatusEvent 5 6 class FitConstraint: 7 """ 8 Contains info on selected model to fit 9 via simultaneous page 10 """ 11 def __init__(self, model, page=None): 12 """ 13 initialization 14 """ 15 self.model= model 16 self.page = page 17 self.fittable_param =[] 18 self.selected_params=[] 19 self._set_fittableParam() 20 21 def _set_fittableParam(self): 22 """ 23 fill self.fittable_param 24 """ 25 for item in self.model.getParamList(): 26 if not item in self.model.getDispParamList(): 27 self.fittable_param.append(item) 28 for item in self.model.fixed: 29 self.fittable_param.append(item) 30 4 31 5 32 class SimultaneousFitPage(wx.ScrolledWindow): … … 15 42 16 43 17 def __init__(self, parent, *args, **kwargs):44 def __init__(self, parent,page_finder ={}, *args, **kwargs): 18 45 wx.ScrolledWindow.__init__(self, parent, *args, **kwargs) 19 46 """ … … 21 48 """ 22 49 self.parent = parent 23 self.page_finder={} 24 self.sizer3 = wx.GridBagSizer(5,5) 25 self.sizer1 = wx.GridBagSizer(5,5) 26 self.sizer2 = wx.BoxSizer(wx.HORIZONTAL) 50 ## store page_finder 51 self.page_finder=page_finder 52 ## list contaning info to set constraint 53 ## look like self.constraint_dict[page]=[ model_name, parameter_name, constraint(string)] 54 self.constraint_dict={} 55 ## item list self.constraints_list=[combobox1, combobox2,=,textcrtl, button ] 56 self.constraints_list=[] 57 ## list of current model 58 self.model_list=[] 59 ## selected mdoel to fit 60 self.model_toFit=[] 61 62 63 ## draw 64 self.define_page_structure() 65 self.draw_page(self.page_finder) 66 67 self.set_layout() 68 69 70 71 def define_page_structure(self): 72 """ 73 Create empty sizer for a panel 74 """ 27 75 self.vbox = wx.BoxSizer(wx.VERTICAL) 28 self.vbox.Add(self.sizer3) 76 self.sizer1 = wx.BoxSizer(wx.VERTICAL) 77 self.sizer2 = wx.BoxSizer(wx.VERTICAL) 78 29 79 self.vbox.Add(self.sizer1) 30 80 self.vbox.Add(self.sizer2) 31 id = wx.NewId() 32 self.btFit =wx.Button(self,id,'Constraint Fit') 33 self.btFit.Bind(wx.EVT_BUTTON, self.onFit,id=id) 34 self.btFit.SetToolTipString("Perform fit.") 35 ix = 0 36 iy = 1 37 self.cb1 = wx.CheckBox(self, -1,'Models', (10, 10)) 38 self.sizer3.Add(self.cb1,(iy, ix),(1,1),\ 39 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 40 wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_model_name) 41 42 text=wx.StaticText(self, -1, 'Constraint') 43 self.sizer2.Add(text,0, wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 44 45 self.ctl2 = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) 46 47 self.sizer2.Add(self.ctl2, 0, wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 48 49 self.sizer2.Add(self.btFit, 0, wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 50 self.params=[] 51 self.model_list=[] 52 self.model_toFit=[] 53 81 82 def set_scroll(self): 83 self.SetScrollbars(20,20,200,100) 84 self.Layout() 85 86 def set_layout(self): 87 """ 88 layout 89 """ 54 90 self.vbox.Layout() 55 91 self.vbox.Fit(self) 56 92 self.SetSizer(self.vbox) 57 self.SetScrollbars(20,20,55,40) 93 94 self.set_scroll() 58 95 self.Centre() 59 60 96 61 97 def onFit(self,event): 62 98 """ signal for fitting""" 63 for page in self.page_finder.iterkeys(): 64 page.set_model_parameter() 99 ## making sure all parameters content a constraint 100 ## validity of the constraint expression is own by fit engine 101 self._set_constraint() 102 ## get the fit range of very fit problem 103 for page, value in self.page_finder.iteritems(): 104 qmin, qmax= page.get_range() 105 value.set_range(qmin, qmax) 106 ## model was actually selected from this page to be fit 65 107 if len(self.model_toFit) >= 1 : 66 self._onTextEnter() 67 self.set_model() 68 self.manager._on_simul_fit() 108 self.manager.on_simul_fit() 69 109 else: 70 wx.PostEvent(self.parent.Parent, StatusEvent(status=\71 "Select at least one model to fit "))110 msg= "Select at least one model to fit " 111 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 72 112 73 113 … … 79 119 """ 80 120 self.manager = manager 81 self. add_model( self.manager.page_finder)82 83 84 def select_all_model_name(self,event):121 self.draw_page( self.manager.page_finder) 122 123 124 def check_all_model_name(self,event): 85 125 """ 86 126 check all models names … … 92 132 self.manager.schedule_for_fit( value=1,fitproblem =item[1]) 93 133 self.model_toFit.append(item) 134 135 ## constraint info 136 self._store_model() 137 ## display constraint fields 138 if self.show_constraint.GetValue(): 139 self.sizer_couples.Clear(True) 140 self._show_constraint() 141 return 94 142 else: 95 143 for item in self.model_list: … … 98 146 99 147 self.model_toFit=[] 100 101 102 def add_model(self,page_finder): 103 """ 104 Receive a dictionary containing information to display model name 105 @param page_finder: the dictionary containing models information 106 """ 107 if len(self.model_list)>0: 108 for item in self.model_list: 109 item[0].SetValue(False) 110 self.manager.schedule_for_fit( value=0,fitproblem =item[1]) 111 self.model_list=[] 112 self.model_toFit=[] 113 self.sizer1.Clear(True) 114 self.page_finder=page_finder 115 self.cb1.SetValue(False) 116 ix = 0 117 iy = 1 118 list=[] 119 for page, value in page_finder.iteritems(): 120 try: 121 list = value.get_model() 122 model = list[0] 123 modelname = list[1] 124 cb = wx.CheckBox(self, -1, modelname, (10, 10)) 125 cb.SetValue(False) 126 self.sizer1.Add( cb,( iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 127 ix = 0 128 iy += 1 129 wx.EVT_CHECKBOX(self, cb.GetId(), self.select_model_name) 130 self.model_list.append([cb,value,page,modelname]) 131 except: 132 pass 133 iy +=1 134 self.sizer1.Add((20,20),( iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 135 self.sizer1.Layout() 136 self.vbox.Layout() 137 138 139 def remove_model(self,delpage): 140 """ 141 Remove a checkbox and the name related to a model selected on page delpage 142 @param delpage: the page removed 143 """ 144 self.model_list=[] 145 self.model_toFit=[] 146 self.sizer1.Clear(True) 147 148 self.cb1.SetValue(False) 149 ix = 0 150 iy = 1 151 list=[] 152 for page, value in self.page_finder.iteritems(): 153 try: 154 if page!= delpage: 155 list = value.get_model() 156 model = list[0] 157 modelname = list[1] 158 cb = wx.CheckBox(self, -1, modelname, (10, 10)) 159 cb.SetValue(False) 160 self.sizer1.Add( cb,( iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 161 ix = 0 162 iy += 1 163 wx.EVT_CHECKBOX(self, cb.GetId(), self.select_model_name) 164 self.model_list.append([cb,value,page,modelname]) 165 except: 166 pass 167 iy +=1 168 self.sizer1.Add((20,20),( iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 169 self.sizer1.Layout() 170 self.vbox.Layout() 171 172 173 def select_model_name(self,event): 174 """ 175 Save interformation related to checkbox and their states 148 ##constraint info 149 self._hide_constraint() 150 151 152 def check_model_name(self,event): 153 """ 154 Save information related to checkbox and their states 176 155 """ 177 156 self.model_toFit=[] … … 185 164 self.model_toFit.remove(item) 186 165 self.cb1.SetValue(False) 187 166 ## display constraint fields 167 if len(self.model_toFit)>=2: 168 self._store_model() 169 if self.show_constraint.GetValue(): 170 self._show_constraint() 171 172 173 ## set the value of the main check button 188 174 if len(self.model_list)==len(self.model_toFit): 189 175 self.cb1.SetValue(True) 176 ## constraint info 177 self._store_model() 178 ## display constraint fields 179 if self.show_constraint.GetValue(): 180 self.sizer_couples.Clear(True) 181 self._show_constraint() 182 return 190 183 else: 191 184 self.cb1.SetValue(False) 192 193 185 ##constraint info 186 self._hide_constraint() 187 188 189 def draw_page(self, page_finder={}): 190 """ 191 Draw a sizer containing couples of data and model 192 """ 193 ## receive a new page_finder 194 self.page_finder = page_finder 195 196 self.model_list=[] 197 self.model_toFit=[] 198 if len(self.model_list)>0: 199 for item in self.model_list: 200 item[0].SetValue(False) 201 self.manager.schedule_for_fit( value=0,fitproblem =item[1]) 202 203 self.sizer1.Clear(True) 204 205 206 box_description= wx.StaticBox(self, -1,"Fit Couples") 207 boxsizer1 = wx.StaticBoxSizer(box_description, wx.VERTICAL) 208 sizer_title = wx.BoxSizer(wx.HORIZONTAL) 209 sizer_couples = wx.GridBagSizer(5,5) 210 211 #------------------------------------------------------ 212 if len(self.page_finder)==0: 213 sizer_title.Add(wx.StaticText(self,-1," No fit couple available !")) 214 else: 215 ## store model 216 self._store_model() 217 218 self.cb1 = wx.CheckBox(self, -1,'Select all Fit Couples') 219 self.cb1.SetValue(False) 220 wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.check_all_model_name) 221 222 sizer_title.Add((15,15)) 223 sizer_title.Add(self.cb1) 224 ## draw list of model name 225 self._fill_sizer_model_list(sizer_couples) 226 ## draw the sizer containing constraint info 227 self._fill_sizer_constraint() 228 #-------------------------------------------------------- 229 boxsizer1.Add((5, 5)) 230 boxsizer1.Add(sizer_title) 231 boxsizer1.Add((5, 5)) 232 boxsizer1.Add(sizer_couples) 233 boxsizer1.Add((5,5)) 234 235 self.sizer1.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 236 self.sizer1.Layout() 237 self.SetScrollbars(20,20,200,100) 238 self.AdjustScrollbars() 239 240 def _store_model(self): 241 """ 242 Store selected model 243 """ 244 if len(self.model_toFit) < 2: 245 return 246 for page, value in self.page_finder.iteritems(): 247 model = value.get_model() 248 for item in self.model_toFit: 249 if model in item and not model in self.constraint_dict.keys(): 250 self.constraint_dict[model]=FitConstraint(model=model, page=page) 251 252 253 def _display_constraint(self, event): 254 """ 255 Show fields to add constraint 256 """ 257 if len(self.model_toFit)< 2: 258 msg= "Select at least 2 models to add constraint " 259 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 260 ## hide button 261 self._hide_constraint() 262 return 263 if self.show_constraint.GetValue(): 264 self.sizer_couples.Clear(True) 265 self._show_constraint() 266 return 267 else: 268 self._hide_constraint() 269 return 270 194 271 195 def set_model(self): 196 """ 197 set_model take values in self.params which are the values 198 entered by the user and try to assign them into the model 199 concerned in self.manager. page.finder 200 """ 201 if len(self.params) >0: 202 for item in self.model_toFit: 203 list=item[1].get_model() 204 model=list[0] 205 param_list=model.getParamList() 206 if self.params !=[]: 207 for element in self.params: 208 if model.name == str(element[0]): 209 for item in param_list: 210 if item==str(element[1]): 211 self.manager.set_page_finder(model.name,element[1], 212 str(element[2])) 213 214 215 def _onTextEnter(self): 272 def _show_constraint(self): 273 """ 274 Show constraint fields 275 """ 276 flag = False 277 if len(self.constraints_list)!= 0: 278 nb_fit_param = 0 279 for value in self.constraint_dict.values(): 280 nb_fit_param += len(value.fittable_param) 281 ##Don't add anymore 282 if len(self.constraints_list) == nb_fit_param: 283 flag = True 284 if len(self.model_toFit) < 2 or flag: 285 msg= "Select at least 2 model to add constraint " 286 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 287 self.sizer_couples.Layout() 288 self.sizer2.Layout() 289 self.SetScrollbars(20,20,200,100) 290 return 291 292 sizer_constraint = wx.BoxSizer(wx.HORIZONTAL) 293 294 model_cbox = wx.ComboBox(self, -1) 295 model_cbox.Clear() 296 297 param_cbox = wx.ComboBox(self, -1) 298 wx.EVT_COMBOBOX(param_cbox,-1, self._on_select_param) 299 param_cbox.Hide() 300 301 ctl2 = wx.TextCtrl(self, -1) 302 ctl2.Bind(wx.EVT_TEXT_ENTER,self._onTextEnter) 303 ctl2.Hide() 304 305 egal_txt= wx.StaticText(self,-1," = ") 306 egal_txt.Hide() 307 308 309 for model, value in self.constraint_dict.iteritems(): 310 ## check if all parameters have been selected for constraint 311 ## then do not allow add constraint on parameters 312 if len(value.fittable_param)!= len(value.selected_params): 313 ## the user can apply constraint only on model select to fit 314 model_cbox.Append( str(model.name), model) 315 316 317 wx.EVT_COMBOBOX(model_cbox,-1, self._on_select_model) 318 319 ##[combobox1, combobox2,=,textcrtl ] 320 self.constraints_list.append([model_cbox, param_cbox, egal_txt, ctl2]) 321 322 sizer_constraint.Add(model_cbox) 323 sizer_constraint.Add((10,10)) 324 sizer_constraint.Add(param_cbox) 325 sizer_constraint.Add(egal_txt) 326 sizer_constraint.Add(ctl2) 327 sizer_constraint.Add((10,10)) 328 329 330 self.sizer_couples.Add(sizer_constraint) 331 self.sizer_couples.Add((10,10)) 332 self.sizer_couples.Layout() 333 self.sizer2.Layout() 334 self.SetScrollbars(20,20,200,100) 335 336 def _hide_constraint(self): 337 """ 338 hide buttons related constraint 339 """ 340 if len(self.constraint_dict)>0: 341 for value in self.constraint_dict.itervalues(): 342 value.selected_params=[] 343 param = value.fittable_param## list of parameter name 344 ## reset the constraint to None on fitproblem 345 for item in param: 346 self.page_finder[value.page].set_model_param(item,None) 347 348 self.btAdd.Hide() 349 self.constraints_list=[] 350 self.sizer_couples.Clear(True) 351 self.sizer_couples.Layout() 352 self.sizer2.Layout() 353 self.SetScrollbars(20,20,200,100) 354 self.AdjustScrollbars() 355 356 357 358 def _on_select_model(self, event): 359 """ 360 fill combox box with list of parameters 361 """ 362 model = event.GetClientData() 363 param_list= self.constraint_dict[model].fittable_param 364 length = len(self.constraints_list) 365 if length < 1: 366 return 367 368 param_cbox = self.constraints_list[length-1][1] 369 param_cbox.Clear() 370 ## insert only fittable paramaters 371 for param in param_list: 372 if not param in self.constraint_dict[model].selected_params: 373 param_cbox.Append( str(param), model) 374 param_cbox.Show(True) 375 376 377 self.sizer2.Layout() 378 self.SetScrollbars(20,20,200,100) 379 380 381 def _on_select_param(self, event): 382 """ 383 Store the appropriate constraint in the page_finder 384 """ 385 model = event.GetClientData() 386 param = event.GetString() 387 self.constraint_dict[model].selected_params.append(param) 388 389 length = len(self.constraints_list) 390 if length < 1: 391 return 392 egal_txt = self.constraints_list[length-1][2] 393 egal_txt.Show(True) 394 395 ctl2 = self.constraints_list[length-1][3] 396 ctl2.Show(True) 397 398 self.btAdd.Show(True) 399 self.sizer2.Layout() 400 self.SetScrollbars(20,20,200,100) 401 402 403 def _onAdd_constraint(self, event): 404 """ 405 Add another line for constraint 406 """ 407 msg= " " 408 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 409 410 ## check that a constraint is added before allow to add another cosntraint 411 412 for item in self.constraints_list: 413 model_cbox = item[0] 414 if model_cbox.GetString(0)=="": 415 msg= " Select a model Name! " 416 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 417 return 418 param_cbox = item[1] 419 if param_cbox.GetString(0)=="": 420 msg= " Select a parameter Name! " 421 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 422 return 423 ctl2 = item[3] 424 if ctl2.GetValue().lstrip().rstrip()=="": 425 msg= " Enter a constraint for %s.%s! "%(model_cbox.GetString(0), 426 param_cbox.GetString(0)) 427 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 428 return 429 430 ## some model or parameters can be constrained 431 self._show_constraint() 432 433 434 435 436 437 def _fill_sizer_constraint(self): 438 """ 439 Fill sizer containing constraint info 440 """ 441 msg= "Select at least 2 model to add constraint " 442 wx.PostEvent(self.parent.Parent, StatusEvent(status= msg )) 443 444 self.sizer2.Clear(True) 445 446 box_description= wx.StaticBox(self, -1,"Fit Constraints") 447 boxsizer1 = wx.StaticBoxSizer(box_description, wx.VERTICAL) 448 sizer_title = wx.BoxSizer(wx.HORIZONTAL) 449 self.sizer_couples = wx.BoxSizer(wx.VERTICAL) 450 sizer_button = wx.BoxSizer(wx.HORIZONTAL) 451 452 self.hide_constraint = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP) 453 self.show_constraint = wx.RadioButton(self, -1, 'Yes', (10, 30)) 454 455 self.Bind( wx.EVT_RADIOBUTTON, self._display_constraint, 456 id= self.hide_constraint.GetId() ) 457 458 self.Bind( wx.EVT_RADIOBUTTON, self._display_constraint, 459 id= self.show_constraint.GetId() ) 460 461 462 463 464 sizer_title.Add( wx.StaticText(self,-1," Model") ) 465 sizer_title.Add(( 10,10) ) 466 sizer_title.Add( wx.StaticText(self,-1," Parameter") ) 467 sizer_title.Add(( 10,10) ) 468 sizer_title.Add( wx.StaticText(self,-1," Add Constraint?") ) 469 sizer_title.Add(( 10,10) ) 470 sizer_title.Add( self.show_constraint ) 471 sizer_title.Add( self.hide_constraint ) 472 sizer_title.Add(( 10,10) ) 473 474 475 476 ## Draw combobox box related to model name and model parameters 477 if self.show_constraint.GetValue(): 478 self._fill_sizer_constraint_helper(self.sizer_couples) 479 480 self.btAdd =wx.Button(self,wx.NewId(),'Add') 481 self.btAdd.Bind(wx.EVT_BUTTON, self._onAdd_constraint,id= self.btAdd.GetId()) 482 self.btAdd.SetToolTipString("Add another constraint?") 483 self.btAdd.Hide() 484 485 self.btFit = wx.Button(self,wx.NewId(),'Fit') 486 self.btFit.Bind(wx.EVT_BUTTON, self.onFit,id= self.btFit.GetId()) 487 self.btFit.SetToolTipString("Perform fit.") 488 489 text_hint = wx.StaticText(self,-1,"Example: M0.paramter = M1.parameter") 490 sizer_button.Add(text_hint, 0 , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10) 491 sizer_button.Add(self.btAdd, 0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10) 492 sizer_button.Add(self.btFit, 0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10) 493 494 boxsizer1.Add(sizer_title) 495 boxsizer1.Add((10,10)) 496 boxsizer1.Add(self.sizer_couples) 497 boxsizer1.Add((10,10)) 498 boxsizer1.Add(sizer_button) 499 500 self.sizer2.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 501 self.sizer2.Layout() 502 self.SetScrollbars(20,20,200,100) 503 504 505 506 def _onTextEnter(self, event): 507 """ 508 callback function for textcrtl 509 """ 510 self.btAdd.Show(True) 511 self.sizer2.Layout() 512 self.SetScrollbars(20,20,200,100) 513 self._set_constraint() 514 515 def _set_constraint(self): 216 516 """ 217 517 get values from the constrainst textcrtl ,parses them into model name … … 220 520 uses it to reset the appropriate model and its appropriates parameters 221 521 """ 222 value= self.ctl2.GetValue() 223 if value: 224 self.params=[] 522 for item in self.constraints_list: 523 model = item[0].GetClientData(0) 524 param = item[1].GetString(0) 525 constraint = item[3].GetValue().lstrip().rstrip() 526 if model in self.constraint_dict.keys(): 527 page = self.constraint_dict[model].page 528 if constraint != "": 529 self.page_finder[page].set_model_param(param,constraint) 530 531 532 533 def _fill_sizer_model_list(self,sizer): 534 """ 535 Receive a dictionary containing information to display model name 536 @param page_finder: the dictionary containing models information 537 """ 538 ix = 0 539 iy = 0 540 list=[] 541 sizer.Clear(True) 542 543 new_name = wx.StaticText(self, -1, 'New Model Name', style=wx.ALIGN_CENTER) 544 new_name.SetBackgroundColour('orange') 545 sizer.Add(new_name,(iy, ix),(1,1), 546 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 547 548 ix +=2 549 model_type = wx.StaticText(self, -1, ' Model Type') 550 model_type.SetBackgroundColour('grey') 551 sizer.Add(model_type,(iy, ix),(1,1), 552 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 553 ix +=1 554 data_used = wx.StaticText(self, -1, ' Used Data') 555 data_used.SetBackgroundColour('grey') 556 sizer.Add(data_used,(iy, ix),(1,1), 557 wx.EXPAND|wx.ADJUST_MINSIZE, 0) 558 559 for page, value in self.page_finder.iteritems(): 225 560 try: 226 expression='[\s,;]' 227 if re.search(expression,value) !=None: 228 word=re.split(expression,value) 229 for item in word: 230 self.params.append(self.parser_helper(item)) 231 else: 232 self.params.append(self.parser_helper(value)) 561 ix = 0 562 iy += 1 563 model = value.get_model() 564 cb = wx.CheckBox(self, -1, str(model.name)) 565 cb.SetValue(False) 566 sizer.Add( cb,( iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 567 wx.EVT_CHECKBOX(self, cb.GetId(), self.check_model_name) 568 569 570 ix +=2 571 type = model.__class__.__name__ 572 model_type = wx.StaticText(self, -1, str(type)) 573 sizer.Add(model_type,( iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 574 575 ix +=1 576 data = value.get_fit_data() 577 data_used= wx.StaticText(self, -1, str(data.name)) 578 sizer.Add(data_used,( iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 579 580 581 self.model_list.append([cb,value,page,model]) 582 233 583 except: 234 wx.PostEvent(self.parent.Parent, StatusEvent(status="Constraint Error: %s" % sys.exc_value)) 235 236 237 def parser_helper(self,value): 238 """ 239 @return param:a list containing the name of a model ,its parameters 240 value and name extracted from the constrainst controlbox 241 """ 242 if string.find(value, "=") !=-1: 243 model_param= re.split("=",value) 244 param_name=model_param[0] 245 param_value=model_param[1] 246 247 if string.find(param_name,".")!=-1: 248 param_names= re.split("\.",param_name) 249 model_name=param_names[0] 250 param_name=param_names[1] 251 param=[str(model_name),param_name,str(param_value)] 252 return param 253 else: 254 wx.PostEvent(self.parent.Parent, 255 StatusEvent(status="cannot evaluate this expression")) 256 return 257 else: 258 wx.PostEvent(self.parent.Parent, StatusEvent(status="Missing '=' in expression")) 259 584 pass 585 iy +=1 586 sizer.Add((20,20),( iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 587 sizer.Layout() 588 260 589 590 591 592 class HelpWindow(wx.Frame): 593 def __init__(self, parent, id, title): 594 wx.Frame.__init__(self, parent, id, title, size=(570, 400)) 595 596 page_finder ={} 597 ## create random data 598 from danse.common.plottools.plottables import Data1D 599 data= Data1D(x=[1,2], y=[3,4], dy=[0.1, 0,1]) 600 data.name="mydata.txt" 601 ## create model 602 from sans.models.CylinderModel import CylinderModel 603 model = CylinderModel() 604 model.name="M0" 605 606 607 from fitproblem import FitProblem 608 page_finder["page"]= FitProblem() 609 ## fill the page_finder 610 page_finder["page"].add_fit_data(data) 611 page_finder["page"].set_model(model) 612 self.page = SimultaneousFitPage(self, page_finder=page_finder) 613 614 615 616 self.Centre() 617 self.Show(True) 618 619 620 621 if __name__=="__main__": 622 app = wx.App() 623 HelpWindow(None, -1, 'HelpWindow') 624 app.MainLoop() 261 625
Note: See TracChangeset
for help on using the changeset viewer.