Changeset e1251ef in sasview


Ignore:
Timestamp:
Feb 18, 2015 10:01:35 AM (9 years ago)
Author:
krzywon
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:
eec63a8, f53cd30
Parents:
fa09d62 (diff), 2bf5e3b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of https://github.com/SasView/sasview/

Location:
src/sas
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/sas/guiframe/media/data_explorer_help.rst

    rc147870 r2bf5e3b  
    3939Hide by clicking *Show/Hide Data Explorer*. 
    4040 
    41 NOTE! When *Data Explorer* is hidden, all data loaded will be sent directly  
    42 to the current active application, if possible. When *Data Explorer* is  
    43 shown, data go first to the *Data Explorer*. 
     41*NOTE! When* Data Explorer *is hidden, all data loaded will be sent directly  
     42to the current active application, if possible. When* Data Explorer *is  
     43shown, data go first to the* Data Explorer. 
    4444 
    4545.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
     
    5252To load data, click the button *Load Data*, then select one or more (by holding  
    5353the Ctrl key) files to load into the application. The name of each selected  
    54 file will be listed. Clicking the *+*  symbol will display any available  
    55 metadata. 
     54file will be listed. 
     55 
     56Clicking the *+*  symbol will display any available metadata. 
    5657 
    5758.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
     
    6364 
    6465Right-clicking on a loaded dataset (or model calculation, what SasView calls a  
    65 theory) brings up a *Handy Menu* from which it is possible to access Data Info,  
     66theory) brings up a *Handy Menu* from which it is possible to access Datainfo,  
    6667Save the data/theory, or Plot the data/theory. 
    6768 
     
    9091----------- 
    9192 
    92 WARNING! *Remove Data* will stop any data operations currently using the  
    93 selected data sets. 
    94  
     93*WARNING!* Remove Data *will stop any data operations currently using the  
     94selected data sets.* 
    9595 
    9696*Remove Data* removes all reference to selected data from the application. 
     
    103103-------------------- 
    104104 
     105This operation can only be performed on 1D data and plot panels currently  
     106containing 1D data. 
     107 
    105108Click on the button *Append To* to add selected data to a plot panel. Next to  
    106109the button is a combo box containing the names of available plot panels.  
     
    110113disabled. 
    111114 
    112 2D Data cannot be appended to any plot panels. This operation can  
    113 only be performed on 1D data and plot panels currently containing 1D data. 
     1152D Data cannot be appended to any plot panels. 
    114116 
    115117.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
     
    132134The *Freeze Theory* button generates data from the selected theory. 
    133135 
    134 NOTE! This operation can only be performed when theory labels are selected. 
     136*NOTE! This operation can only be performed when theory labels are selected.* 
    135137 
    136138.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
     
    150152fitted at the same time, use *Simultaneous* fitting under the *Fitting*  
    151153option on the menu bar. 
     154 
     155.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
     156 
     157.. note::  This help document was last changed by Steve King, 18Feb2015 
  • src/sas/perspectives/fitting/batchfitpage.py

    r79492222 rfa09d62  
    1717from sas.models.qsmearing import smear_selection 
    1818from sas.perspectives.fitting.fitpage import FitPage 
     19from sas.perspectives.fitting.fitpage import check_data_validity 
    1920 
    2021class BatchFitPage(FitPage): 
     
    3031        """ 
    3132        FitPage.__init__(self, parent, color=color) 
    32         self.window_name = "BatchFit" 
    33         self.window_caption  = "BatchFit" 
    34         self._set_save_flag(False) 
    35         self._set_bookmark_flag(False) 
    36          
    37     def _fill_range_sizer(self): 
     33         
     34        ## draw sizer 
     35         
     36    def _fill_data_sizer(self): 
    3837        """ 
    39         Fill the sizer containing the plotting range 
    40         add  access to npts 
     38        fill sizer 0 with data info 
    4139        """ 
    42         is_2Ddata = False 
    43          
    44         # Check if data is 2D 
    45         if self.data.__class__.__name__ ==  "Data2D" or \ 
    46                         self.enable2D: 
    47             is_2Ddata = True 
    48              
    49         title = "Fitting"      
    50         self._get_smear_info() 
    51          
    52         #Sizers 
    53         box_description_range = wx.StaticBox(self, -1, str(title)) 
    54         boxsizer_range = wx.StaticBoxSizer(box_description_range, wx.VERTICAL)       
    55         self.sizer_set_smearer = wx.BoxSizer(wx.VERTICAL) 
    56         #sizer_smearer = wx.BoxSizer(wx.HORIZONTAL) 
    57         self.sizer_new_smear = wx.BoxSizer(wx.HORIZONTAL) 
    58         self.sizer_set_masking = wx.BoxSizer(wx.HORIZONTAL) 
    59         sizer_chi2 = wx.BoxSizer(wx.VERTICAL) 
    60  
    61         sizer_fit = wx.GridSizer(2, 4, 2, 6) 
    62         #Fit button 
    63         self.btFit = wx.Button(self, wx.NewId(), 'Fit', size=(88, 25)) 
    64         self.default_bt_colour =  self.btFit.GetDefaultAttributes() 
    65         self.btFit.Bind(wx.EVT_BUTTON, self._onFit, id= self.btFit.GetId()) 
    66         self.btFit.SetToolTipString("Start fitting.") 
    67  
    68         # Update and Draw button 
    69         self.draw_button = wx.Button(self, wx.NewId(), 'Compute', size=(88, 24)) 
    70         self.draw_button.Bind(wx.EVT_BUTTON, \ 
    71                               self._onDraw,id=self.draw_button.GetId()) 
    72         self.draw_button.SetToolTipString("Compute and Draw.")   
    73         sizer_fit.Add(self.draw_button, 0, 0) 
    74         sizer_fit.Add(self.btFit, 0, 0)  
    75         sizer_chi2.Add((-1, 5)) 
    76         # get smear_selection 
    77         self.current_smearer = smear_selection( self.data, self.model ) 
    78         boxsizer_range.Add(self.sizer_set_masking) 
    79          #2D data? default 
    80         is_2Ddata = False 
    81          
    82         #check if it is 2D data 
    83         if self.data.__class__.__name__ ==  "Data2D" or \ 
    84                         self.enable2D: 
    85             is_2Ddata = True 
    86              
    87         self.sizer5.Clear(True) 
    88       
    89         self.qmin  = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),  
    90                                           style=wx.TE_PROCESS_ENTER,  
    91                                     text_enter_callback = self._onQrangeEnter) 
    92         self.qmin.SetValue(str(self.qmin_x)) 
    93         self.qmin.SetToolTipString("Minimun value of Q in linear scale.") 
    94       
    95         self.qmax  = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),  
    96                                           style=wx.TE_PROCESS_ENTER,  
    97                                         text_enter_callback=self._onQrangeEnter) 
    98         self.qmax.SetValue(str(self.qmax_x)) 
    99         self.qmax.SetToolTipString("Maximum value of Q in linear scale.") 
    100          
    101         id = wx.NewId() 
    102         self.reset_qrange =wx.Button(self, id, 'Reset', size=(77, 20)) 
    103        
    104         self.reset_qrange.Bind(wx.EVT_BUTTON, self.on_reset_clicked, id=id) 
    105         self.reset_qrange.SetToolTipString(\ 
    106                                     "Reset Q range to the default values") 
    107       
    108         sizer_horizontal = wx.BoxSizer(wx.HORIZONTAL) 
    109         sizer = wx.GridSizer(2, 4, 2, 6) 
    110  
    111         self.btEditMask = wx.Button(self, wx.NewId(),'Editor', size=(88, 23)) 
    112         self.btEditMask.Bind(wx.EVT_BUTTON,  
    113                              self._onMask,id=self.btEditMask.GetId()) 
    114         self.btEditMask.SetToolTipString("Edit Mask.") 
    115         self.EditMask_title = wx.StaticText(self, -1, ' Masking(2D)') 
    116  
    117         sizer.Add(wx.StaticText(self, -1, 'Q range'))      
    118         sizer.Add(wx.StaticText(self, -1, ' Min[1/A]')) 
    119         sizer.Add(wx.StaticText(self, -1, ' Max[1/A]')) 
    120         sizer.Add(self.EditMask_title) 
    121   
    122         sizer.Add(self.reset_qrange)    
    123         sizer.Add(self.qmin) 
    124         sizer.Add(self.qmax) 
    125  
    126         sizer.Add(self.btEditMask) 
    127         boxsizer_range.Add(sizer_chi2)  
    128         boxsizer_range.Add((10, 10)) 
    129         boxsizer_range.Add(sizer) 
    130          
    131         boxsizer_range.Add((10, 15)) 
    132         boxsizer_range.Add(sizer_fit) 
    133         if is_2Ddata: 
    134             self.btEditMask.Enable()   
    135             self.EditMask_title.Enable()  
     40        self.data_box_description = wx.StaticBox(self, -1, 'I(q) Data Source') 
     41        if check_data_validity(self.data): 
     42            dname_color = wx.BLUE 
    13643        else: 
    137             self.btEditMask.Disable()   
    138             self.EditMask_title.Disable() 
    139  
    140         ## save state 
    141         #self.save_current_state() 
    142  
    143         self.sizer5.Add(boxsizer_range, 0, wx.EXPAND | wx.ALL, 10) 
    144         self.sizer5.Layout() 
    145         
    146     def _on_select_model(self, event=None):  
    147         """ 
    148         call back for model selection 
    149         """   
    150          
    151         self.Show(False)     
    152         self._on_select_model_helper()  
    153         self.set_model_param_sizer(self.model)                    
    154         if self.model is None: 
    155             self._set_bookmark_flag(False) 
    156             self._keep.Enable(False) 
    157             self._set_save_flag(False) 
    158         self.enable_disp.SetValue(False) 
    159         self.disable_disp.SetValue(True) 
    160         try: 
    161             self.set_dispers_sizer() 
    162         except: 
    163             pass 
    164         self.state.structurecombobox = self.structurebox.GetCurrentSelection() 
    165         self.state.formfactorcombobox = self.formfactorbox.GetCurrentSelection() 
    166        
    167         if self.model != None: 
    168             self._set_copy_flag(True) 
    169             self._set_paste_flag(True) 
    170             if self.data != None: 
    171                 self._set_bookmark_flag(False) 
    172                 self._keep.Enable(False) 
    173                  
    174             temp_smear = None 
    175             ## event to post model to fit to fitting plugins 
    176             (ModelEventbox, _) = wx.lib.newevent.NewEvent() 
    177           
    178             ## set smearing value whether or not  
    179             #    the data contain the smearing info 
    180             evt = ModelEventbox(model=self.model,  
    181                                         smearer=temp_smear,  
    182                                         qmin=float(self.qmin_x), 
    183                                         uid=self.uid, 
    184                                      qmax=float(self.qmax_x))  
    185     
    186             self._manager._on_model_panel(evt=evt) 
    187             self.mbox_description.SetLabel("Model [%s]" % str(self.model.name)) 
    188             self.state.model = self.model.clone() 
    189             self.state.model.name = self.model.name 
    190  
    191              
    192         if event != None: 
    193             ## post state to fit panel 
    194             new_event = PageInfoEvent(page = self) 
    195             wx.PostEvent(self.parent, new_event)  
    196             #update list of plugins if new plugin is available 
    197             if self.plugin_rbutton.GetValue(): 
    198                 temp = self.parent.update_model_list() 
    199                 if temp: 
    200                     self.model_list_box = temp 
    201                     current_val = self.formfactorbox.GetValue() 
    202                     pos = self.formfactorbox.GetSelection() 
    203                     self._show_combox_helper() 
    204                     self.formfactorbox.SetSelection(pos) 
    205                     self.formfactorbox.SetValue(current_val) 
    206             self._onDraw(event=None) 
    207         else: 
    208             self._draw_model() 
    209         self.SetupScrolling() 
    210         self.Show(True)    
    211          
    212     def _update_paramv_on_fit(self): 
    213         """ 
    214         make sure that update param values just before the fitting 
    215         """ 
    216         #flag for qmin qmax check values 
    217         flag = True 
    218         self.fitrange = True 
    219         is_modified = False 
    220  
    221         if self.model != None:            
    222             ##Check the values 
    223             self._check_value_enter( self.fittable_param, is_modified) 
    224             self._check_value_enter( self.fixed_param, is_modified) 
    225             self._check_value_enter( self.parameters, is_modified) 
    226  
    227             # If qmin and qmax have been modified, update qmin and qmax and  
    228              # Here we should check whether the boundaries have been modified. 
    229             # If qmin and qmax have been modified, update qmin and qmax and  
    230             # set the is_modified flag to True 
    231             self.fitrange = self._validate_qrange(self.qmin, self.qmax) 
    232             if self.fitrange: 
    233                 tempmin = float(self.qmin.GetValue()) 
    234                 if tempmin != self.qmin_x: 
    235                     self.qmin_x = tempmin 
    236                 tempmax = float(self.qmax.GetValue()) 
    237                 if tempmax != self.qmax_x: 
    238                     self.qmax_x = tempmax 
    239                 if tempmax == tempmin: 
    240                     flag = False     
    241                 #temp_smearer = None 
    242                 if self._is_2D(): 
    243                     # only 2D case set mask   
    244                     flag = self._validate_Npts() 
    245                     if not flag: 
    246                         return flag 
    247             else: flag = False 
    248         else:  
    249             flag = False 
    250  
    251         #For invalid q range, disable the mask editor and fit button, vs.     
    252         if not self.fitrange: 
    253             #self.btFit.Disable() 
    254             if self._is_2D(): 
    255                 self.btEditMask.Disable() 
    256         else: 
    257             #self.btFit.Enable(True) 
    258             if self._is_2D() and  self.data != None: 
    259                 self.btEditMask.Enable(True) 
    260  
    261         if not flag: 
    262             msg = "Cannot Plot or Fit :Must select a " 
    263             msg += " model or Fitting range is not valid!!!  " 
    264             wx.PostEvent(self.parent.parent, StatusEvent(status=msg)) 
    265          
    266         self.save_current_state() 
    267     
    268         return flag   
    269     def save_current_state(self): 
    270         """ 
    271         Currently no save option implemented for batch page 
    272         """ 
    273         pass  
    274     def save_current_state_fit(self): 
    275         """ 
    276         Currently no save option implemented for batch page 
    277         """ 
    278         pass 
    279     def set_data(self, data): 
    280         """ 
    281         reset the current data  
    282         """ 
    283         #id = None 
    284         group_id = None 
    285         flag = False 
    286         if self.data is None and data is not None: 
    287             flag = True 
    288         if data is not None: 
    289             #id = data.id 
    290             group_id = data.group_id 
    291             if self.data is not None: 
    292                 flag = (data.id != self.data.id) 
    293         self.data = data 
    294         if self.data is None: 
    295             data_min = "" 
    296             data_max = "" 
    297             data_name = "" 
    298             self._set_bookmark_flag(False) 
    299             self._keep.Enable(False) 
    300             self._set_save_flag(False) 
    301         else: 
    302             if self.model != None: 
    303                 self._set_bookmark_flag(False) 
    304                 self._keep.Enable(False) 
    305             self._set_save_flag(False) 
    306             self._set_preview_flag(True) 
    307    
    308             self.formfactorbox.Enable() 
    309             self.structurebox.Enable() 
    310             data_name = self.data.name 
    311             #set maximum range for x in linear scale 
    312             if not hasattr(self.data,"data"): #Display only for 1D data fit 
    313                 # Minimum value of data    
    314                 data_min = min(self.data.x) 
    315                 # Maximum value of data   
    316                 data_max = max(self.data.x) 
    317                 self.btEditMask.Disable()   
    318                 self.EditMask_title.Disable() 
    319             else: 
    320                  
    321                 ## Minimum value of data  
    322                 data_min = 0 
    323                 x = max(math.fabs(self.data.xmin), math.fabs(self.data.xmax))  
    324                 y = max(math.fabs(self.data.ymin), math.fabs(self.data.ymax)) 
    325                 ## Maximum value of data   
    326                 data_max = math.sqrt(x*x + y*y) 
    327                 self.btEditMask.Enable()   
    328                 self.EditMask_title.Enable()  
    329  
    330         self.dataSource.SetValue(data_name) 
    331         self.qmin_x = data_min 
    332         self.qmax_x = data_max 
    333         #self.minimum_q.SetValue(str(data_min)) 
    334         #self.maximum_q.SetValue(str(data_max)) 
    335         self.qmin.SetValue(str(data_min)) 
    336         self.qmax.SetValue(str(data_max)) 
    337         self.qmin.SetBackgroundColour("white") 
    338         self.qmax.SetBackgroundColour("white") 
    339         self.state.data = data 
    340         self.state.qmin = self.qmin_x 
    341         self.state.qmax = self.qmax_x 
    342          
    343         #update model plot with new data information 
    344         if flag: 
    345             #set model view button 
    346             if self.data.__class__.__name__ == "Data2D": 
    347                 self.enable2D = True 
    348                 self.model_view.SetLabel("2D Mode") 
    349             else: 
    350                 self.enable2D = False 
    351                 self.model_view.SetLabel("1D Mode") 
    352                  
    353             self.model_view.Disable() 
    354              
    355             wx.PostEvent(self._manager.parent,  
    356                              NewPlotEvent(group_id=group_id, 
    357                                                action="delete")) 
    358             #plot the current selected data 
    359             wx.PostEvent(self._manager.parent, NewPlotEvent(plot=self.data,  
    360                                                     title=str(self.data.title))) 
    361             self._manager.store_data(uid=self.uid, data=data, 
    362                                      data_list=self.data_list, 
    363                                       caption=self.window_name) 
    364             self._draw_model() 
     44            dname_color = wx.RED 
     45        self.data_box_description.SetForegroundColour(dname_color) 
     46        boxsizer1 = wx.StaticBoxSizer(self.data_box_description, wx.VERTICAL) 
     47        #---------------------------------------------------------- 
     48        sizer_data = wx.BoxSizer(wx.VERTICAL) 
     49        text1 = wx.StaticText(self, -1, ' - Choose a file to set initial fit parameters -') 
     50        text1.SetForegroundColour(wx.RED) 
     51        sizer_data.Add(text1) 
     52        text2 = wx.StaticText(self, -1, ' - This panel is not designed to view individual fits. - ') 
     53        text2.SetForegroundColour(wx.RED) 
     54        sizer_data.Add(text2) 
     55         
     56        combo = wx.BoxSizer(wx.HORIZONTAL) 
     57        self.dataSource = wx.ComboBox(self, -1, style=wx.CB_READONLY) 
     58        wx.EVT_COMBOBOX(self.dataSource, -1, self.on_select_data) 
     59        self.dataSource.SetMinSize((_DATA_BOX_WIDTH, -1)) 
     60         
     61        combo.Add(wx.StaticText(self, -1, 'Name : ')) 
     62        combo.Add((0,5)) 
     63        combo.Add(self.dataSource) 
     64         
     65        sizer_data.Add(combo, 0, wx.ALL, 10) 
     66        boxsizer1.Add(sizer_data, 0, wx.ALL, 0) 
     67        self.sizer0.Add(boxsizer1, 0, wx.EXPAND | wx.ALL, 10) 
     68        self.sizer0.Layout() 
     69 
     70#    COMMENTED OUT TO USE METHODS INHERITED FROM fitpage.py 
     71         
     72#     def _fill_range_sizer(self): 
     73#         """ 
     74#         Fill the sizer containing the plotting range 
     75#         add  access to npts 
     76#         """ 
     77#         is_2Ddata = False 
     78#          
     79#         # Check if data is 2D 
     80#         if self.data.__class__.__name__ ==  "Data2D" or \ 
     81#                         self.enable2D: 
     82#             is_2Ddata = True 
     83#              
     84#         title = "Fitting"      
     85#         self._get_smear_info() 
     86#          
     87#         #Sizers 
     88#         box_description_range = wx.StaticBox(self, -1, str(title)) 
     89#         boxsizer_range = wx.StaticBoxSizer(box_description_range, wx.VERTICAL)       
     90#         self.sizer_set_smearer = wx.BoxSizer(wx.VERTICAL) 
     91#         #sizer_smearer = wx.BoxSizer(wx.HORIZONTAL) 
     92#         self.sizer_new_smear = wx.BoxSizer(wx.HORIZONTAL) 
     93#         self.sizer_set_masking = wx.BoxSizer(wx.HORIZONTAL) 
     94#         sizer_chi2 = wx.BoxSizer(wx.VERTICAL) 
     95#  
     96#         sizer_fit = wx.GridSizer(2, 4, 2, 6) 
     97#         #Fit button 
     98#         self.btFit = wx.Button(self, wx.NewId(), 'Fit', size=(88, 25)) 
     99#         self.default_bt_colour =  self.btFit.GetDefaultAttributes() 
     100#         self.btFit.Bind(wx.EVT_BUTTON, self._onFit, id= self.btFit.GetId()) 
     101#         self.btFit.SetToolTipString("Start fitting.") 
     102#  
     103#         # Update and Draw button 
     104#         self.draw_button = wx.Button(self, wx.NewId(), 'Compute', size=(88, 24)) 
     105#         self.draw_button.Bind(wx.EVT_BUTTON, \ 
     106#                               self._onDraw,id=self.draw_button.GetId()) 
     107#         self.draw_button.SetToolTipString("Compute and Draw.")   
     108#         sizer_fit.Add(self.draw_button, 0, 0) 
     109#         sizer_fit.Add(self.btFit, 0, 0)  
     110#         sizer_chi2.Add((-1, 5)) 
     111#         # get smear_selection 
     112#         self.current_smearer = smear_selection( self.data, self.model ) 
     113#         boxsizer_range.Add(self.sizer_set_masking) 
     114#          #2D data? default 
     115#         is_2Ddata = False 
     116#          
     117#         #check if it is 2D data 
     118#         if self.data.__class__.__name__ ==  "Data2D" or \ 
     119#                         self.enable2D: 
     120#             is_2Ddata = True 
     121#              
     122#         self.sizer5.Clear(True) 
     123#       
     124#         self.qmin  = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),  
     125#                                           style=wx.TE_PROCESS_ENTER,  
     126#                                     text_enter_callback = self._onQrangeEnter) 
     127#         self.qmin.SetValue(str(self.qmin_x)) 
     128#         self.qmin.SetToolTipString("Minimun value of Q in linear scale.") 
     129#       
     130#         self.qmax  = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),  
     131#                                           style=wx.TE_PROCESS_ENTER,  
     132#                                         text_enter_callback=self._onQrangeEnter) 
     133#         self.qmax.SetValue(str(self.qmax_x)) 
     134#         self.qmax.SetToolTipString("Maximum value of Q in linear scale.") 
     135#          
     136#         id = wx.NewId() 
     137#         self.reset_qrange =wx.Button(self, id, 'Reset', size=(77, 20)) 
     138#        
     139#         self.reset_qrange.Bind(wx.EVT_BUTTON, self.on_reset_clicked, id=id) 
     140#         self.reset_qrange.SetToolTipString(\ 
     141#                                     "Reset Q range to the default values") 
     142#       
     143#         sizer_horizontal = wx.BoxSizer(wx.HORIZONTAL) 
     144#         sizer = wx.GridSizer(2, 4, 2, 6) 
     145#  
     146#         self.btEditMask = wx.Button(self, wx.NewId(),'Editor', size=(88, 23)) 
     147#         self.btEditMask.Bind(wx.EVT_BUTTON,  
     148#                              self._onMask,id=self.btEditMask.GetId()) 
     149#         self.btEditMask.SetToolTipString("Edit Mask.") 
     150#         self.EditMask_title = wx.StaticText(self, -1, ' Masking(2D)') 
     151#  
     152#         sizer.Add(wx.StaticText(self, -1, 'Q range'))      
     153#         sizer.Add(wx.StaticText(self, -1, ' Min[1/A]')) 
     154#         sizer.Add(wx.StaticText(self, -1, ' Max[1/A]')) 
     155#         sizer.Add(self.EditMask_title) 
     156 
     157#         sizer.Add(self.reset_qrange)    
     158#         sizer.Add(self.qmin) 
     159#         sizer.Add(self.qmax) 
     160#  
     161#         sizer.Add(self.btEditMask) 
     162#         boxsizer_range.Add(sizer_chi2)  
     163#         boxsizer_range.Add((10, 10)) 
     164#         boxsizer_range.Add(sizer) 
     165#          
     166#         boxsizer_range.Add((10, 15)) 
     167#         boxsizer_range.Add(sizer_fit) 
     168#         if is_2Ddata: 
     169#             self.btEditMask.Enable()   
     170#             self.EditMask_title.Enable()  
     171#         else: 
     172#             self.btEditMask.Disable()   
     173#             self.EditMask_title.Disable() 
     174#  
     175#         ## save state 
     176#         #self.save_current_state() 
     177#  
     178#         self.sizer5.Add(boxsizer_range, 0, wx.EXPAND | wx.ALL, 10) 
     179#         self.sizer5.Layout() 
     180#         
     181#     def _on_select_model(self, event=None):  
     182#         """ 
     183#         call back for model selection 
     184#         """   
     185#          
     186#         self.Show(False)     
     187#         self._on_select_model_helper()  
     188#         self.set_model_param_sizer(self.model)                    
     189#         if self.model is None: 
     190#             self._set_bookmark_flag(False) 
     191#             self._keep.Enable(False) 
     192#             self._set_save_flag(False) 
     193#         self.enable_disp.SetValue(False) 
     194#         self.disable_disp.SetValue(True) 
     195#         try: 
     196#             self.set_dispers_sizer() 
     197#         except: 
     198#             pass 
     199#         self.state.structurecombobox = self.structurebox.GetCurrentSelection() 
     200#         self.state.formfactorcombobox = self.formfactorbox.GetCurrentSelection() 
     201#        
     202#         if self.model != None: 
     203#             self._set_copy_flag(True) 
     204#             self._set_paste_flag(True) 
     205#             if self.data != None: 
     206#                 self._set_bookmark_flag(False) 
     207#                 self._keep.Enable(False) 
     208#                  
     209#             temp_smear = None 
     210#             ## event to post model to fit to fitting plugins 
     211#             (ModelEventbox, _) = wx.lib.newevent.NewEvent() 
     212#           
     213#             ## set smearing value whether or not  
     214#             #    the data contain the smearing info 
     215#             evt = ModelEventbox(model=self.model,  
     216#                                         smearer=temp_smear,  
     217#                                         qmin=float(self.qmin_x), 
     218#                                         uid=self.uid, 
     219#                                      qmax=float(self.qmax_x))  
     220#     
     221#             self._manager._on_model_panel(evt=evt) 
     222#             self.mbox_description.SetLabel("Model [%s]" % str(self.model.name)) 
     223#             self.state.model = self.model.clone() 
     224#             self.state.model.name = self.model.name 
     225#  
     226#              
     227#         if event != None: 
     228#             ## post state to fit panel 
     229#             new_event = PageInfoEvent(page = self) 
     230#             wx.PostEvent(self.parent, new_event)  
     231#             #update list of plugins if new plugin is available 
     232#             if self.plugin_rbutton.GetValue(): 
     233#                 temp = self.parent.update_model_list() 
     234#                 if temp: 
     235#                     self.model_list_box = temp 
     236#                     current_val = self.formfactorbox.GetValue() 
     237#                     pos = self.formfactorbox.GetSelection() 
     238#                     self._show_combox_helper() 
     239#                     self.formfactorbox.SetSelection(pos) 
     240#                     self.formfactorbox.SetValue(current_val) 
     241#             self._onDraw(event=None) 
     242#         else: 
     243#             self._draw_model() 
     244#         self.SetupScrolling() 
     245#         self.Show(True)    
     246#          
     247#     def _update_paramv_on_fit(self): 
     248#         """ 
     249#         make sure that update param values just before the fitting 
     250#         """ 
     251#         #flag for qmin qmax check values 
     252#         flag = True 
     253#         self.fitrange = True 
     254#         is_modified = False 
     255#  
     256#         if self.model != None:            
     257#             ##Check the values 
     258#             self._check_value_enter( self.fittable_param, is_modified) 
     259#             self._check_value_enter( self.fixed_param, is_modified) 
     260#             self._check_value_enter( self.parameters, is_modified) 
     261#  
     262#             # If qmin and qmax have been modified, update qmin and qmax and  
     263#              # Here we should check whether the boundaries have been modified. 
     264#             # If qmin and qmax have been modified, update qmin and qmax and  
     265#             # set the is_modified flag to True 
     266#             self.fitrange = self._validate_qrange(self.qmin, self.qmax) 
     267#             if self.fitrange: 
     268#                 tempmin = float(self.qmin.GetValue()) 
     269#                 if tempmin != self.qmin_x: 
     270#                     self.qmin_x = tempmin 
     271#                 tempmax = float(self.qmax.GetValue()) 
     272#                 if tempmax != self.qmax_x: 
     273#                     self.qmax_x = tempmax 
     274#                 if tempmax == tempmin: 
     275#                     flag = False     
     276#                 #temp_smearer = None 
     277#                 if self._is_2D(): 
     278#                     # only 2D case set mask   
     279#                     flag = self._validate_Npts() 
     280#                     if not flag: 
     281#                         return flag 
     282#             else: flag = False 
     283#         else:  
     284#             flag = False 
     285#  
     286#         #For invalid q range, disable the mask editor and fit button, vs.     
     287#         if not self.fitrange: 
     288#             #self.btFit.Disable() 
     289#             if self._is_2D(): 
     290#                 self.btEditMask.Disable() 
     291#         else: 
     292#             #self.btFit.Enable(True) 
     293#             if self._is_2D() and  self.data != None: 
     294#                 self.btEditMask.Enable(True) 
     295#  
     296#         if not flag: 
     297#             msg = "Cannot Plot or Fit :Must select a " 
     298#             msg += " model or Fitting range is not valid!!!  " 
     299#             wx.PostEvent(self.parent.parent, StatusEvent(status=msg)) 
     300#          
     301#         self.save_current_state() 
     302#     
     303#         return flag   
     304#     def save_current_state(self): 
     305#         """ 
     306#         Currently no save option implemented for batch page 
     307#         """ 
     308#         pass  
     309#     def save_current_state_fit(self): 
     310#         """ 
     311#         Currently no save option implemented for batch page 
     312#         """ 
     313#         pass 
     314#     def set_data(self, data): 
     315#         """ 
     316#         reset the current data  
     317#         """ 
     318#         #id = None 
     319#         group_id = None 
     320#         flag = False 
     321#         if self.data is None and data is not None: 
     322#             flag = True 
     323#         if data is not None: 
     324#             #id = data.id 
     325#             group_id = data.group_id 
     326#             if self.data is not None: 
     327#                 flag = (data.id != self.data.id) 
     328#         self.data = data 
     329#         if self.data is None: 
     330#             data_min = "" 
     331#             data_max = "" 
     332#             data_name = "" 
     333#             self._set_bookmark_flag(False) 
     334#             self._keep.Enable(False) 
     335#             self._set_save_flag(False) 
     336#         else: 
     337#             if self.model != None: 
     338#                 self._set_bookmark_flag(False) 
     339#                 self._keep.Enable(False) 
     340#             self._set_save_flag(False) 
     341#             self._set_preview_flag(True) 
     342#    
     343#             self.formfactorbox.Enable() 
     344#             self.structurebox.Enable() 
     345#             data_name = self.data.name 
     346#             #set maximum range for x in linear scale 
     347#             if not hasattr(self.data,"data"): #Display only for 1D data fit 
     348#                 # Minimum value of data    
     349#                 data_min = min(self.data.x) 
     350#                 # Maximum value of data   
     351#                 data_max = max(self.data.x) 
     352#                 self.btEditMask.Disable()   
     353#                 self.EditMask_title.Disable() 
     354#             else: 
     355#                  
     356#                 ## Minimum value of data  
     357#                 data_min = 0 
     358#                 x = max(math.fabs(self.data.xmin), math.fabs(self.data.xmax))  
     359#                 y = max(math.fabs(self.data.ymin), math.fabs(self.data.ymax)) 
     360#                 ## Maximum value of data   
     361#                 data_max = math.sqrt(x*x + y*y) 
     362#                 self.btEditMask.Enable()   
     363#                 self.EditMask_title.Enable()  
     364#  
     365#         self.dataSource.SetValue(data_name) 
     366#         self.qmin_x = data_min 
     367#         self.qmax_x = data_max 
     368#         #self.minimum_q.SetValue(str(data_min)) 
     369#         #self.maximum_q.SetValue(str(data_max)) 
     370#         self.qmin.SetValue(str(data_min)) 
     371#         self.qmax.SetValue(str(data_max)) 
     372#         self.qmin.SetBackgroundColour("white") 
     373#         self.qmax.SetBackgroundColour("white") 
     374#         self.state.data = data 
     375#         self.state.qmin = self.qmin_x 
     376#         self.state.qmax = self.qmax_x 
     377#          
     378#         #update model plot with new data information 
     379#         if flag: 
     380#             #set model view button 
     381#             if self.data.__class__.__name__ == "Data2D": 
     382#                 self.enable2D = True 
     383#                 self.model_view.SetLabel("2D Mode") 
     384#             else: 
     385#                 self.enable2D = False 
     386#                 self.model_view.SetLabel("1D Mode") 
     387#                  
     388#             self.model_view.Disable() 
     389#              
     390#             wx.PostEvent(self._manager.parent,  
     391#                              NewPlotEvent(group_id=group_id, 
     392#                                                action="delete")) 
     393#             #plot the current selected data 
     394#             wx.PostEvent(self._manager.parent, NewPlotEvent(plot=self.data,  
     395#                                                     title=str(self.data.title))) 
     396#             self._manager.store_data(uid=self.uid, data=data, 
     397#                                      data_list=self.data_list, 
     398#                                       caption=self.window_name) 
     399#             self._draw_model() 
    365400     
    366401 
  • src/sas/perspectives/fitting/fitpanel.py

    r79492222 rfa09d62  
    371371        """ 
    372372        from fitpage import FitPage 
    373         panel = FitPage(parent=self) 
     373        from batchfitpage import BatchFitPage 
    374374        if self.batch_on: 
     375            panel = BatchFitPage(parent=self) 
    375376            self.batch_page_index += 1 
    376377            caption = "BatchPage" + str(self.batch_page_index) 
     
    378379        else: 
    379380            #Increment index of fit page 
     381            panel = FitPage(parent=self) 
    380382            self.fit_page_index += 1 
    381383            caption = "FitPage" + str(self.fit_page_index) 
     
    467469        if data_1d_list and data_2d_list: 
    468470            # need to warning the user that this batch is a special case 
    469             from sas import BatchDataDialog 
     471            from sas.perspectives.fitting.fitting_widgets import BatchDataDialog 
    470472            dlg = BatchDataDialog(self) 
    471473            if dlg.ShowModal() == wx.ID_OK: 
Note: See TracChangeset for help on using the changeset viewer.