- Timestamp:
- Feb 18, 2015 10:01:35 AM (10 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:
- 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. - Location:
- src/sas
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/guiframe/media/data_explorer_help.rst
rc147870 r2bf5e3b 39 39 Hide by clicking *Show/Hide Data Explorer*. 40 40 41 NOTE! When *Data Explorer*is hidden, all data loaded will be sent directly42 to the current active application, if possible. When *Data Explorer*is43 shown, data go first to the *Data Explorer*.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. 44 44 45 45 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 52 52 To load data, click the button *Load Data*, then select one or more (by holding 53 53 the 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. 54 file will be listed. 55 56 Clicking the *+* symbol will display any available metadata. 56 57 57 58 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 63 64 64 65 Right-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,66 theory) brings up a *Handy Menu* from which it is possible to access Datainfo, 66 67 Save the data/theory, or Plot the data/theory. 67 68 … … 90 91 ----------- 91 92 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 94 selected data sets.* 95 95 96 96 *Remove Data* removes all reference to selected data from the application. … … 103 103 -------------------- 104 104 105 This operation can only be performed on 1D data and plot panels currently 106 containing 1D data. 107 105 108 Click on the button *Append To* to add selected data to a plot panel. Next to 106 109 the button is a combo box containing the names of available plot panels. … … 110 113 disabled. 111 114 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. 115 2D Data cannot be appended to any plot panels. 114 116 115 117 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 132 134 The *Freeze Theory* button generates data from the selected theory. 133 135 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.* 135 137 136 138 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 150 152 fitted at the same time, use *Simultaneous* fitting under the *Fitting* 151 153 option 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 17 17 from sas.models.qsmearing import smear_selection 18 18 from sas.perspectives.fitting.fitpage import FitPage 19 from sas.perspectives.fitting.fitpage import check_data_validity 19 20 20 21 class BatchFitPage(FitPage): … … 30 31 """ 31 32 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): 38 37 """ 39 Fill the sizer containing the plotting range 40 add access to npts 38 fill sizer 0 with data info 41 39 """ 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 136 43 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() 365 400 366 401 -
src/sas/perspectives/fitting/fitpanel.py
r79492222 rfa09d62 371 371 """ 372 372 from fitpage import FitPage 373 panel = FitPage(parent=self)373 from batchfitpage import BatchFitPage 374 374 if self.batch_on: 375 panel = BatchFitPage(parent=self) 375 376 self.batch_page_index += 1 376 377 caption = "BatchPage" + str(self.batch_page_index) … … 378 379 else: 379 380 #Increment index of fit page 381 panel = FitPage(parent=self) 380 382 self.fit_page_index += 1 381 383 caption = "FitPage" + str(self.fit_page_index) … … 467 469 if data_1d_list and data_2d_list: 468 470 # need to warning the user that this batch is a special case 469 from sas import BatchDataDialog471 from sas.perspectives.fitting.fitting_widgets import BatchDataDialog 470 472 dlg = BatchDataDialog(self) 471 473 if dlg.ShowModal() == wx.ID_OK:
Note: See TracChangeset
for help on using the changeset viewer.