Changeset cfc0913 in sasview for sansview/perspectives/fitting/basepage.py
- Timestamp:
- Apr 6, 2009 2:56:35 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:
- 40f9745
- Parents:
- ddfcd90
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sansview/perspectives/fitting/basepage.py
r87a43fe rcfc0913 6 6 from sans.guiframe.utils import format_number 7 7 from sans.guicomm.events import StatusEvent 8 8 import pagestate 9 from pagestate import PageState 10 (PageInfoEvent, EVT_PAGE_INFO) = wx.lib.newevent.NewEvent() 9 11 _BOX_WIDTH = 80 10 12 … … 13 15 This class provide general structure of fitpanel page 14 16 """ 15 ## Internal name for the AUI manager 16 window_name = "Fit page" 17 ## Title to appear on top of the window 18 window_caption = "Fit Page" 19 20 name="" 21 22 def __init__(self,parent, pageinfo, name): 17 18 def __init__(self,parent, page_info): 23 19 wx.ScrolledWindow.__init__(self, parent) 24 20 ## store name 25 self.name = name 26 ## store info of panel 27 self.page_info= pageinfo 28 self.page_info.page_name = name 21 self.name = page_info.name 22 ##window_name 23 self.window_name = page_info.window_name 24 ##window_caption 25 self.window_caption = page_info.window_caption 29 26 ## parent of the page 30 27 self.parent = parent 31 28 ## manager is the fitting plugin 32 self.manager= None29 self.manager= page_info.manager 33 30 ## owner of the page (fitting plugin) 34 self.event_owner= None 35 ## create the basic structure of the panel with empty sizer 36 self.define_page_structure() 31 self.event_owner= page_info.event_owner 32 ## current model 33 self.model = page_info.model 34 ## data 35 self.data = page_info.data 37 36 ## dictionary containing list of models 38 self.model_list_box ={}37 self.model_list_box = page_info.model_list_box 39 38 ## Data member to store the dispersion object created 40 39 self._disp_obj_dict = {} 40 ## selected parameters to apply dispersion 41 41 self.disp_cb_dict ={} 42 42 ##list of model parameters. each item must have same length … … 52 52 ##list of dispersion parameters 53 53 self.disp_list=[] 54 54 if self.model !=None: 55 self.disp_list= self.model.getDispParamList() 55 56 ##enable model 2D draw 56 57 self.enable2D= False 57 58 ## check that the fit range is correct to plot the model again 58 59 self.fitrange= True 59 ## current model60 self.model= None61 ## data62 self.data=None63 60 ## Q range 64 61 self.qmin_x= 0.001 65 62 self.qmax_x= 0.1 66 63 self.num_points= 100 67 ## changing initial values given page_info value 68 if self.page_info !=None and len(self.page_info.model_list_box) >0: 69 self.model_list_box = self.page_info.model_list_box 70 ## current model 71 self.model=self.page_info.model 72 self.data = self.page_info.data 73 self.event_owner = self.page_info.event_owner 74 self.manager=self.page_info.manager 75 76 if self.model !=None: 77 self.disp_list= self.model.getDispParamList() 64 ## Create memento to save the current state 65 66 self.state= PageState(parent= self.parent,model=self.model, data=self.data) 67 ## create the basic structure of the panel with empty sizer 68 self.define_page_structure() 78 69 ## drawing Initial dispersion parameters sizer 79 70 self.set_dispers_sizer() 80 71 self._fill_save_sizer() 72 81 73 ## layout 82 74 self.set_layout() … … 134 126 """ 135 127 self.event_owner = owner 136 self. page_info.event_owner = owner128 self.state.event_owner = owner 137 129 138 130 def set_manager(self, manager): … … 142 134 """ 143 135 self.manager = manager 144 self. page_info.manager = manager136 self.state.manager = manager 145 137 146 138 def populate_box(self, dict): … … 150 142 """ 151 143 self.model_list_box = dict 152 if self.page_info!=None: 153 self.page_info.model_list_box = self.model_list_box 144 self.state.model_list_box = self.model_list_box 154 145 155 146 … … 165 156 self.disable_disp = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP) 166 157 self.enable_disp = wx.RadioButton(self, -1, 'Yes', (10, 30)) 158 ## saving the state of enable dispersity button 159 self.state.enable_disp= self.enable_disp.GetValue() 160 167 161 self.Bind(wx.EVT_RADIOBUTTON, self._set_dipers_Param, id=self.disable_disp.GetId()) 168 162 self.Bind(wx.EVT_RADIOBUTTON, self._set_dipers_Param, id=self.enable_disp.GetId()) … … 278 272 save history of the data and model 279 273 """ 280 self. page_info.model= self.model281 self. page_info.data = self.data274 self.state.model= self.model 275 self.state.data = self.data 282 276 import os 283 277 … … 363 357 after fitting 364 358 """ 359 365 360 if hasattr(self,"text2_3"): 366 361 self.text2_3.Hide() … … 420 415 except: 421 416 raise 422 423 417 418 419 def createMemento(self): 420 """ 421 return the current state of the page 422 """ 423 return self.state.clone() 424 425 426 def save_current_state(self): 427 """ 428 Store current state 429 """ 430 self.state.model = self.model.clone() 431 self.state.save_data(self.data) 432 433 if hasattr(self,"cb1"): 434 self.state.cb1= self.cb1.GetValue() 435 436 if hasattr(self,"enable_disp"): 437 self.state.enable_disp= self.enable_disp.GetValue() 438 439 if hasattr(self,"enable_smearer"): 440 self.state.enable_smearer = self.enable_smearer.GetValue() 441 442 ## save checkbutton state and txtcrtl values 443 self.state.parameters=[] 444 self.state.fittable_param=[] 445 self.state.fixed_param=[] 446 self._copy_parameters_state(self.parameters, self.state.parameters) 447 self._copy_parameters_state(self.fittable_param, self.state.fittable_param) 448 self._copy_parameters_state(self.fixed_param, self.state.fixed_param) 449 450 ## post state to fit panel 451 event = PageInfoEvent(page = self) 452 wx.PostEvent(self.parent, event) 453 454 def reset_page(self, state): 455 """ 456 Use page_info and change the state of existing button 457 """ 458 self.state = state.clone() 459 self.model= self.state.model 460 self.data = self.state.data 461 self._set_model_sizer_selection( self.model ) 462 self.set_model_param_sizer(self.model) 463 self._reset_plotting_range() 464 465 self.enable_disp.SetValue(self.state.enable_disp) 466 self._set_dipers_Param(event=None) 467 468 if hasattr(self,"enable_smearer"): 469 self.enable_smearer= self.state.enable_smearer 470 if hasattr(self, "cb1"): 471 self.cb1.SetValue(self.state.cb1) 472 self._reset_parameters_state(self.parameters,state.parameters) 473 self._reset_parameters_state(self.fittable_param,state.fittable_param) 474 self._reset_parameters_state(self.fixed_param,state.fixed_param) 475 self._draw_model() 476 477 424 478 def _selectDlg(self): 425 479 """ … … 433 487 dlg.Destroy() 434 488 return path 435 436 489 490 491 def _reset_plotting_range(self): 492 """ 493 Reset the plotting range to a given state 494 """ 495 496 self.qmin.SetValue(format_number(self.state.qmin)) 497 self.qmax.SetValue(format_number(self.state.qmax)) 498 if self.state.npts!=None: 499 self.npts= self.state.npts 500 501 self.qmin_x = float(self.qmin.GetValue()) 502 self.qmax_x = float(self.qmax.GetValue()) 503 504 505 def _save_plotting_range(self ): 506 """ 507 save the state of plotting range 508 """ 509 self.state.qmin = self.qmin.GetValue() 510 self.state.qmax = self.qmax.GetValue() 511 if self.npts!=None: 512 self.state.npts= self.npts.GetValue() 513 514 437 515 def _onparamEnter_helper(self): 438 516 """ … … 442 520 """ 443 521 if self.model !=None: 444 522 self.save_current_state() 445 523 # Flag to register when a parameter has changed. 446 524 is_modified = False … … 449 527 is_modified =self._check_value_enter( self.parameters ,is_modified) 450 528 529 451 530 self.Layout() 452 531 # Here we should check whether the boundaries have been modified. … … 473 552 474 553 554 def _reset_parameters_state(self, listtorestore,statelist): 555 """ 556 Reset the parameters at the given state 557 """ 558 if len(self.state.parameters)!= len(listtorestore) : 559 return 560 for j in range(len(listtorestore)): 561 item_page = listtorestore[j] 562 item_page_info = statelist[j] 563 ##change the state of the check box for simple parameters 564 if item_page[0]!=None: 565 item_page[0].SetValue(item_page_info[0]) 566 567 if item_page[2]!=None: 568 item_page[2].SetValue(item_page_info[2]) 569 570 if item_page[3]!=None: 571 ## show or hide text +/- 572 if item_page_info[2]: 573 item_page[3].Show(True) 574 else: 575 item_page[3].Hide() 576 if item_page[4]!=None: 577 ## show of hide the text crtl for fitting error 578 if item_page_info[4][0]: 579 item_page[4].Show(True) 580 item_page[4].SetValue(item_page_info[4][1]) 581 else: 582 item_page[3].Hide() 583 if item_page[5]!=None: 584 ## show of hide the text crtl for fitting error 585 if item_page_info[5][0]: 586 item_page[5].Show(True) 587 item_page[5].SetValue(item_page_info[4][1]) 588 else: 589 item_page[5].Hide() 590 591 if item_page[6]!=None: 592 ## show of hide the text crtl for fitting error 593 if item_page_info[6][0]: 594 item_page[6].Show(True) 595 item_page[6].SetValue(item_page_info[6][1]) 596 else: 597 item_page[6].Hide() 598 599 def _copy_parameters_state(self, listtocopy, statelist): 600 """ 601 copy the state of button 602 @param listtocopy: the list of check button to copy 603 @param statelist: list of state object to store the current state 604 """ 605 if len(listtocopy)==0: 606 return 607 608 for item in listtocopy: 609 checkbox_state = None 610 if item[0]!= None: 611 checkbox_state= item[0].GetValue() 612 parameter_name = item[1] 613 parameter_value = None 614 if item[2]!=None: 615 parameter_value = item[2].GetValue() 616 static_text = None 617 if item[3]!=None: 618 static_text = item[3].IsShown() 619 error_value = None 620 error_state = None 621 if item[4]!= None: 622 error_value = item[4].GetValue() 623 error_state = item[4].IsShown() 624 625 min_value = None 626 min_state = None 627 if item[5]!= None: 628 min_value = item[5].GetValue() 629 min_state = item[5].IsShown() 630 631 max_value = None 632 max_state = None 633 if item[6]!= None: 634 max_value = item[6].GetValue() 635 max_state = item[6].IsShown() 636 637 statelist.append([checkbox_state, parameter_name, parameter_value, 638 static_text ,[error_state,error_value], 639 [min_state,min_value],[max_state , max_value],None]) 640 641 642 475 643 def _set_model_sizer_selection(self, model): 476 644 """ … … 565 733 566 734 567 568 735 def _draw_model(self): 569 736 """ … … 606 773 id= self.plugin_rbutton.GetId() ) 607 774 wx.EVT_CHECKBOX(self, self.multip_cb.GetId() , self._show_combox ) 608 ## store state 609 self.page_info.save_radiobox_state( self.shape_rbutton ) 610 self.page_info.save_radiobox_state( self.shape_indep_rbutton ) 611 self.page_info.save_radiobox_state( self.struct_rbutton ) 612 self.page_info.save_radiobox_state( self.plugin_rbutton ) 613 614 775 615 776 sizer_radiobutton = wx.GridSizer(3, 3,5, 5) 616 777 sizer_radiobutton.Add(self.shape_rbutton) … … 674 835 Show combox box associate with type of model selected 675 836 """ 676 self.page_info.save_radiobox_state( self.shape_rbutton )677 self.page_info.save_radiobox_state( self.shape_indep_rbutton )678 self.page_info.save_radiobox_state( self.struct_rbutton )679 self.page_info.save_radiobox_state( self.plugin_rbutton )680 681 837 ## Don't want to populate combo box again if the event comes from check box 682 838 if self.shape_rbutton.GetValue()and\ … … 758 914 759 915 self.set_scroll() 760 761 762 916 763 917 … … 781 935 except: 782 936 pass 783 #wx.EVT_COMBOBOX(combobox,-1, self._on_select_model)937 784 938 return 0 785 939 … … 811 965 else: 812 966 self.model= form_factor() 813 self.page_info.model= self.model 967 968 ## post state to fit panel 969 self.save_current_state() 814 970 815 971 … … 842 998 if format_number(item[5].GetValue())!="NaN": 843 999 param_min = float(item[5].GetValue()) 844 self.model.details[name][1]=param_min1000 845 1001 ## check maximum value 846 1002 if item[6]!= None: … … 854 1010 msg+= "name %s of model %s "%(name, self.model.name) 855 1011 wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 856 857 self.model.details[name][1:]= param_min,param_max1012 if name in self.model.details.keys(): 1013 self.model.details[name][1:]= param_min,param_max 858 1014 859 1015 ## hide statictext +/- … … 878 1034 return is_modified 879 1035 880 881 1036 882 1037 def _set_dipers_Param(self, event): … … 889 1044 return 890 1045 else: 1046 891 1047 if self.enable_disp.GetValue(): 892 1048 self.model_disp.Show(True) … … 903 1059 self.sizer4_4.Clear(True) 904 1060 self._reset_dispersity() 1061 1062 1063 ## post state to fit panel 1064 self.save_current_state() 905 1065 906 1066 self.sizer4.Layout() … … 908 1068 self.SetScrollbars(20,20,200,100) 909 1069 910 911 1070 912 1071 def _layout_sizer_noDipers(self): … … 929 1088 return 930 1089 931 932 1090 933 1091 def _reset_dispersity(self): … … 966 1124 if name=="ArrayDispersion": 967 1125 self._set_sizer_arraydispersion() 968 969 1126 970 1127 971 1128 … … 1038 1195 boxsizer1.Add((10,10)) 1039 1196 boxsizer1.Add(sizer_horizontal) 1040 1197 ## save state 1198 self.save_current_state() 1041 1199 #---------------------------------------------------------------- 1042 1200 self.sizer5.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) … … 1044 1202 self.Layout() 1045 1203 self.SetScrollbars(20,20,200,100) 1204 1046 1205 1047 1206 def _fill_save_sizer(self):
Note: See TracChangeset
for help on using the changeset viewer.