Changeset 386ffe1 in sasview
- Timestamp:
- Feb 20, 2015 5:02:38 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:
- cda1cf8
- Parents:
- 018582f
- Files:
-
- 1 deleted
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
docs/pre-sphinx-docs/simultaneous_fit_help_v0.html
r54b9ad2 r386ffe1 7 7 It requires one or more FitPages with a data and a model set for the fitting, 8 8 and performs multiple fittings given by the FitPage(s). 9 The Complex (ParkMC) FitEngine will be used automatically.10 9 </p> 11 10 <ul> -
src/sas/fit/AbstractFitEngine.py
rfd5ac0d r386ffe1 10 10 _SMALLVALUE = 1.0e-10 11 11 12 # Note: duplicated from park13 12 class FitHandler(object): 14 13 """ … … 69 68 def __init__(self, sas_model, sas_data=None, **kw): 70 69 """ 71 :param sas_model: the sas model to wrap using park interface70 :param sas_model: the sas model to wrap for fitting 72 71 73 72 """ … … 100 99 def eval(self, x): 101 100 """ 102 Override eval method of parkmodel.101 Override eval method of model. 103 102 104 103 :param x: the x value used to compute a function … … 394 393 def __init__(self): 395 394 """ 396 Base class for scipy and parkfit engine395 Base class for the fit engine 397 396 """ 398 397 #Dictionnary of fitArrange element (fit problems) -
src/sas/fit/BumpsFitting.py
rfd5ac0d r386ffe1 10 10 from bumps.mapper import SerialMapper, MPMapper 11 11 from bumps import parameter 12 13 # TODO: remove globals from interface to bumps options! 14 # Default bumps to use the levenberg-marquardt optimizer 12 15 from bumps.fitproblem import FitProblem 16 fitters.FIT_DEFAULT = 'lm' 13 17 14 18 from sas.fit.AbstractFitEngine import FitEngine -
src/sas/fit/Fitting.py
r79492222 r386ffe1 1 1 """ 2 Class Fit contains ScipyFit and ParkFit methods declaration 3 allows to create instance of type ScipyFit or ParkFit to perform either 4 a park fit or a scipy fit. 2 Class Fit contains fitting engine methods declaration 5 3 """ 6 4 7 #from scipy import optimize8 from sas.fit.ScipyFitting import ScipyFit9 from sas.fit.ParkFitting import ParkFit10 5 from sas.fit.BumpsFitting import BumpsFit 11 6 12 7 ENGINES={ 13 'scipy': ScipyFit,14 'park': ParkFit,15 8 'bumps': BumpsFit, 16 9 } … … 23 16 from sas.fit.Fitting import Fit 24 17 fitter= Fit() 25 fitter.fit_engine(' scipy') or fitter.fit_engine('park')18 fitter.fit_engine('bumps') 26 19 engine = fitter.returnEngine() 27 20 engine.set_data(data,id) … … 32 25 33 26 """ 34 def __init__(self, engine=' scipy', *args, **kw):27 def __init__(self, engine='bumps', *args, **kw): 35 28 """ 36 29 """ 37 #self._engine will contain an instance of ScipyFit or ParkFit38 30 self._engine = None 39 31 self.fitter_id = None … … 61 53 :param word: the keyword to select the fit type 62 54 63 :raise: if the user does not enter 'scipy' or 'park', 64 a valueError is raised 65 55 :raise: KeyError if the user does not enter an available engine 56 66 57 """ 67 58 try: 68 59 self._engine = ENGINES[word](*args, **kw) 69 60 except KeyError, exc: 70 raise KeyError("fit engine should be one of scipy, park or bumps") 61 raise KeyError("fit engine should be bumps") 62 #raise KeyError("fit engine should be one of "+", ".join(sorted(ENGINES.keys()))) 71 63 72 64 def fit(self, msg_q=None, q=None, handler=None, … … 75 67 reset_flag=False): 76 68 """Perform the fit """ 77 return self._engine.fit(msg_q=msg_q, 69 return self._engine.fit(msg_q=msg_q, 78 70 q=q, handler=handler, curr_thread=curr_thread, 79 71 ftol=ftol, reset_flag=reset_flag) -
src/sas/fit/ParkFitting.py
rfd5ac0d r386ffe1 7 7 to perform a simple fit with park optimizer. 8 8 """ 9 10 _ = ''' 9 11 #import time 10 12 import numpy … … 615 617 return q 616 618 return result_list 617 619 620 ''' -
src/sas/fit/ScipyFitting.py
ra10364b r386ffe1 4 4 simple fit with scipy optimizer. 5 5 """ 6 _ = ''' 6 7 import sys 7 8 import copy … … 265 266 if it is out of range. 266 267 267 : model: parkmodel object268 : model: model object 268 269 """ 269 270 # loop through parameterset … … 306 307 # return call_result 307 308 308 309 310 ''' -
src/sas/perspectives/fitting/fit_thread.py
r79492222 r386ffe1 28 28 yieldtime = 0.03, 29 29 worktime = 0.03, 30 ftol = None,31 30 reset_flag = False): 32 31 CalcThread.__init__(self, … … 44 43 self.updatefn = updatefn 45 44 #Relative error desired in the sum of squares. 46 self.ftol = ftol47 45 self.reset_flag = reset_flag 48 46 … … 67 65 list_handler = [] 68 66 list_curr_thread = [] 69 list_ftol = []70 67 list_reset_flag = [] 71 68 list_map_get_attr = [] … … 76 73 list_q.append(None) 77 74 list_curr_thread.append(self) 78 list_ftol.append(self.ftol)79 75 list_reset_flag.append(self.reset_flag) 80 76 list_fit_function.append('fit') … … 82 78 #from multiprocessing import Pool 83 79 inputs = zip(list_map_get_attr, self.fitter, list_fit_function, 84 list_q, list_q, list_handler,list_curr_thread, list_ftol,80 list_q, list_q, list_handler,list_curr_thread, 85 81 list_reset_flag) 86 82 result = map(map_apply, inputs) -
src/sas/perspectives/fitting/fitpage.py
r22ae2f7 r386ffe1 1003 1003 return 1004 1004 1005 if (len(self._manager.fit_thread_list) > 01006 and self._manager._fit_engine not in ("park","bumps")1007 and self._manager.sim_page != None1008 and self._manager.sim_page.uid == self.uid):1009 msg = "The FitEnging will be set to 'ParkMC'\n"1010 msg += " to fit with more than one data set..."1011 wx.MessageBox(msg, 'Info')1012 1013 1005 if self.data is None: 1014 1006 msg = "Please get Data first..." … … 2034 2026 return numbers of data points within qrange 2035 2027 2036 :Note: This is for Park where chi2 is not normalizedby Npts of fit2028 :Note: This is to normalize chisq by Npts of fit 2037 2029 2038 2030 """ … … 3230 3222 # Figuring out key combo: Cmd for copy, Alt for paste 3231 3223 if event.AltDown() and event.ShiftDown(): 3232 self._manager.show_ftol_dialog()3233 3224 flag = True 3234 3225 elif event.AltDown() or event.ShiftDown(): … … 3240 3231 # messages depending on the flag 3241 3232 if not flag: 3242 msg = " Could not open ftol dialog;"3243 msg += " Check if the Scipy fit engine is selected in the menubar."3244 3233 infor = 'warning' 3245 3234 # inform msg to wx -
src/sas/perspectives/fitting/fitpanel.py
rfa09d62 r386ffe1 110 110 return doc 111 111 112 def _on_engine_change(self, name='scipy'):113 """114 """115 for panel in self.opened_pages.values():116 self.set_engine_helper(panel=panel, name=name)117 118 def set_engine_helper(self, panel, name='scipy'):119 """120 """121 self.fit_engine_type = name122 if panel not in[self.batch_page, self.sim_page]:123 panel._on_engine_change(name=self.fit_engine_type)124 125 112 def update_model_list(self): 126 113 """ … … 393 380 self.AddPage(panel, caption, select=True) 394 381 self.opened_pages[panel.uid] = panel 395 self.set_engine_helper(panel=panel)396 382 self._manager.create_fit_problem(panel.uid) 397 383 self._manager.page_finder[panel.uid].add_data(panel.get_data()) -
src/sas/perspectives/fitting/fitting.py
rfd5ac0d r386ffe1 45 45 from sas.guiframe.gui_manager import MDIFrame 46 46 47 # TODO: remove globals from interface to bumps options!48 # Default bumps to use the levenberg-marquardt optimizer49 import bumps.fitters50 bumps.fitters.FIT_DEFAULT = 'lm'51 52 47 MAX_NBR_DATA = 4 53 SAS_F_TOL = 5e-0554 48 55 49 (PageInfoEvent, EVT_PAGE_INFO) = wx.lib.newevent.NewEvent() … … 93 87 self._fit_engine = 'bumps' 94 88 self._gui_engine = None 95 ## Relative error desired in the sum of squares (float); scipy only 96 self.ftol = SAS_F_TOL 89 ## Relative error desired in the sum of squares (float) 97 90 self.batch_reset_flag = True 98 91 #List of selected data … … 112 105 self.state_reader = None 113 106 self._extensions = '.fitv' 114 self.scipy_id = wx.NewId()115 self.park_id = wx.NewId()116 self.bumps_id = wx.NewId()117 107 self.menu1 = None 118 108 self.new_model_frame = None … … 191 181 self.batch_menu.Enable(False) 192 182 self.menu1.AppendSeparator() 193 #Set park engine 194 scipy_help = "Scipy Engine: Perform Simple fit. More in Help window...." 195 self.menu1.AppendCheckItem(self.scipy_id, "Simple FitEngine [LeastSq]", 196 scipy_help) 197 wx.EVT_MENU(owner, self.scipy_id, self._onset_engine_scipy) 198 199 park_help = "Park Engine: Perform Complex fit. More in Help window...." 200 self.menu1.AppendCheckItem(self.park_id, "Complex FitEngine [ParkMC]", 201 park_help) 202 wx.EVT_MENU(owner, self.park_id, self._onset_engine_park) 203 204 bumps_help = "Bumps: fitting and uncertainty analysis. More in Help window...." 205 self.menu1.AppendCheckItem(self.bumps_id, "Bumps fit", 206 bumps_help) 207 wx.EVT_MENU(owner, self.bumps_id, self._onset_engine_bumps) 208 209 self.menu1.FindItemById(self.scipy_id).Check(self._fit_engine=="scipy") 210 self.menu1.FindItemById(self.park_id).Check(self._fit_engine=="park") 211 self.menu1.FindItemById(self.bumps_id).Check(self._fit_engine=="bumps") 183 212 184 self.menu1.AppendSeparator() 213 self.id_tol = wx.NewId()214 ftol_help = "Change the current FTolerance (=%s) " % str(self.ftol)215 ftol_help += "of Simple FitEngine..."216 self.menu1.Append(self.id_tol, "Change FTolerance",217 ftol_help)218 wx.EVT_MENU(owner, self.id_tol, self.show_ftol_dialog)219 220 185 self.id_bumps_options = wx.NewId() 221 bopts_help = " Bumps fitting options"222 self.menu1.Append(self.id_bumps_options, ' Bumps&Options', bopts_help)186 bopts_help = "Fitting options" 187 self.menu1.Append(self.id_bumps_options, 'Fit &Options', bopts_help) 223 188 wx.EVT_MENU(owner, self.id_bumps_options, self.on_bumps_options) 224 189 self.bumps_options_menu = self.menu1.FindItemById(self.id_bumps_options) … … 776 741 :param value: can be a string in this case. 777 742 :param names: the paramter name 778 779 :note: expecting park used for fit.780 781 743 """ 782 744 sim_page_id = self.sim_page.uid … … 808 770 return model_name, param_name 809 771 810 def set_ftol(self, ftol=None):811 """812 Set ftol: Relative error desired in the sum of chi squares.813 """814 # check if it is flaot815 try:816 f_tol = float(ftol)817 except:818 # default819 f_tol = SAS_F_TOL820 821 self.ftol = f_tol822 # update ftol menu help strings823 ftol_help = "Change the current FTolerance (=%s) " % str(self.ftol)824 ftol_help += "of Simple FitEngine..."825 if self.menu1 != None:826 self.menu1.SetHelpString(self.id_tol, ftol_help)827 828 def show_ftol_dialog(self, event=None):829 """830 Dialog to select ftol for Scipy831 """832 from ftol_dialog import ChangeFtol833 dialog = ChangeFtol(self.parent, self)834 result = dialog.ShowModal()835 if result == wx.ID_OK:836 value = dialog.get_ftol()837 if value is not None:838 self.set_ftol(value)839 msg = "The ftol (LeastSq) is set to %s." % value840 else:841 msg = "Error in the selection... No change in ftol."842 # post event for info843 wx.PostEvent(self.parent,844 StatusEvent(status=msg, info='warning'))845 dialog.Destroy()846 847 772 def on_bumps_options(self, event=None): 848 773 from bumps.gui.fit_dialog import OpenFitOptions … … 983 908 if uid is None: raise RuntimeError("no page to fit") # Should never happen 984 909 985 # Remember the user selected fit engine before the fit. Simultaneous986 # fitting may change the selected engine, so it needs to be restored987 # when the fit is complete.988 self._gui_engine = self._fit_engine989 990 910 sim_page_uid = getattr(self.sim_page, 'uid', None) 991 911 batch_page_uid = getattr(self.batch_page, 'uid', None) … … 997 917 else: 998 918 fit_type = 'single' 999 1000 # if constrained fit, don't use scipy leastsq directly1001 if fit_type == 'simultaneous':1002 if self._fit_engine not in ("park","bumps"):1003 self._on_change_engine(engine='bumps')1004 1005 919 1006 920 fitter_list = [] … … 1075 989 wx.PostEvent(self.parent, StatusEvent(status=msg, type="progress")) 1076 990 1077 #Handler used for parkengine displayed message991 #Handler used for fit engine displayed message 1078 992 handler = ConsoleUpdate(parent=self.parent, 1079 993 manager=self, … … 1098 1012 page_id=list_page_id, 1099 1013 completefn=self._batch_fit_complete, 1100 ftol=self.ftol,1101 1014 reset_flag=self.batch_reset_flag) 1102 1015 else: … … 1108 1021 page_id=list_page_id, 1109 1022 updatefn=handler.update_fit, 1110 completefn=self._fit_completed, 1111 ftol=self.ftol) 1023 completefn=self._fit_completed) 1112 1024 #self.fit_thread_list[current_page_id] = calc_fit 1113 1025 self.fit_thread_list[uid] = calc_fit … … 1568 1480 type="stop")) 1569 1481 wx.PostEvent(self.result_panel, PlotResultEvent(result=result)) 1570 # reset fit_engine if changed by simul_fit1571 if self._fit_engine != self._gui_engine:1572 self._on_change_engine(self._gui_engine)1573 1482 self._update_fit_button(page_id) 1574 1483 result = result[0] … … 1667 1576 StatusEvent(status=msg)) 1668 1577 1669 def _onset_engine_park(self, event): 1670 """ 1671 set engine to park 1672 """ 1673 self._on_change_engine('park') 1674 1675 def _onset_engine_scipy(self, event): 1676 """ 1677 set engine to scipy 1678 """ 1679 self._on_change_engine('scipy') 1680 1681 def _onset_engine_bumps(self, event): 1682 """ 1683 set engine to bumps 1684 """ 1685 self._on_change_engine('bumps') 1686 1578 1687 1579 def _on_slicer_event(self, event): 1688 1580 """ … … 1705 1597 """ 1706 1598 name = event.GetEventObject().frame.GetTitle() 1707 print "name", name1708 1599 for panel in self.slicer_panels: 1709 1600 if panel.window_caption == name: … … 1717 1608 break 1718 1609 1719 def _on_change_engine(self, engine='park'):1720 """1721 Allow to select the type of engine to perform fit1722 1723 :param engine: the key work of the engine1724 1725 """1726 ## saving fit engine name1727 self._fit_engine = engine1728 ## change menu item state1729 if engine == "park":1730 self.menu1.FindItemById(self.park_id).Check(True)1731 self.menu1.FindItemById(self.scipy_id).Check(False)1732 self.menu1.FindItemById(self.bumps_id).Check(False)1733 elif engine == "scipy":1734 self.menu1.FindItemById(self.park_id).Check(False)1735 self.menu1.FindItemById(self.scipy_id).Check(True)1736 self.menu1.FindItemById(self.bumps_id).Check(False)1737 else:1738 self.menu1.FindItemById(self.park_id).Check(False)1739 self.menu1.FindItemById(self.scipy_id).Check(False)1740 self.menu1.FindItemById(self.bumps_id).Check(True)1741 ## post a message to status bar1742 msg = "Engine set to: %s" % self._fit_engine1743 wx.PostEvent(self.parent,1744 StatusEvent(status=msg))1745 ## send the current engine type to fitpanel1746 self.fit_panel._on_engine_change(name=self._fit_engine)1747 1748 1610 def _on_model_panel(self, evt): 1749 1611 """ -
src/sas/perspectives/fitting/ftol_dialog.py
rb9a5f0e r386ffe1 13 13 #copyright 2009, University of Tennessee 14 14 ################################################################################ 15 _ = """ 15 16 import wx 16 17 import sys … … 103 104 return None 104 105 return SAS_F_TOL 106 """ -
src/sas/perspectives/fitting/simfitpage.py
r79492222 r386ffe1 153 153 ## making sure all parameters content a constraint 154 154 ## validity of the constraint expression is own by fit engine 155 if self.parent._manager._fit_engine not in ("park","bumps") and flag:156 msg = "The FitEnging will be set to 'Park' fit engine\n"157 msg += " for the simultaneous fit..."158 #wx.MessageBox(msg, 'Info')159 wx.PostEvent(self._manager.parent, StatusEvent(status=\160 "Fitting: %s" % msg, info="info"))161 155 if not self.batch_on and self.show_constraint.GetValue(): 162 156 if not self._set_constraint(): … … 689 683 text = " Fit in Parallel all Data set and model selected.\n" 690 684 else: 691 text = " Note: Park fitting engine will be used automatically. \n" 692 text += " This page requires at least one FitPage with a data \n" 693 text += " and a model set for fitting." 694 #text+= "automatically for more than 2 combinations checked" 685 text = " This page requires at least one FitPage with a data\n" 686 text = " and a model for fitting." 695 687 text_hint = wx.StaticText(self, -1, text) 696 688 -
test/park_integration/test/batch_fit.py
r35ec279 r386ffe1 42 42 self.qmax = qmax 43 43 44 def _reset_helper(self, path=None, engine=" scipy", npts=NPTS):44 def _reset_helper(self, path=None, engine="bumps", npts=NPTS): 45 45 """ 46 46 Set value to fitter engine and prepare inputs for map function … … 77 77 self.list_of_mapper.append(classMapper) 78 78 79 def reset_value(self, engine=' scipy'):79 def reset_value(self, engine='bumps'): 80 80 """ 81 81 Initialize inputs for the map function -
test/park_integration/test/utest_fit_cylinder.py
ra10364b r386ffe1 27 27 self.pars1 =['length','radius','scale'] 28 28 29 def _fit(self, name=" scipy"):29 def _fit(self, name="bumps"): 30 30 """ return fit result """ 31 31 fitter = Fit(name) … … 45 45 46 46 47 def test_scipy(self):48 """ Simple cylinder model fit (scipy) """49 self._fit("scipy")50 51 52 def test_park(self):53 """ Simple cylinder model fit (park) """54 self._fit("park")55 56 47 def test_bumps(self): 57 """ Simple cylinder model fit (park)"""48 """ Simple cylinder model fit """ 58 49 self._fit("bumps") 59 50 … … 90 81 91 82 def test_constrained_bumps(self): 92 """ Simultaneous cylinder model fit (park)"""83 """ Simultaneous cylinder model fit """ 93 84 self._run_fit(Fit('bumps')) 94 85 95 86 #@unittest.skip("") 96 def test_constrained_park(self):97 """ Simultaneous cylinder model fit (park) """98 self._run_fit(Fit('park'))99 100 87 def _run_fit(self, fitter): 101 88 result1, result2 = self._fit(fitter) … … 105 92 106 93 for n, v, dv in zip(result1.param_list, result1.pvec, result1.stderr): 107 print "%s M1.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv)94 #print "%s M1.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv) 108 95 if n == "length": 109 96 self.assertTrue( math.fabs(v-400.0)/3.0 < dv ) … … 113 100 self.assertTrue( math.fabs(v-1.0)/3.0 < dv ) 114 101 for n, v, dv in zip(result2.param_list, result2.pvec, result2.stderr): 115 print "%s M2.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv)102 #print "%s M2.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv) 116 103 if n=='radius': 117 104 self.assertTrue( math.fabs(v-40.0)/3.0 < dv ) -
test/park_integration/test/utest_fit_line.py
r35ec279 r386ffe1 32 32 assert str(exc).startswith('parameter param1') 33 33 else: 34 raise AssertionError("No error raised for scipyfitting with wrong parameters name to fit")34 raise AssertionError("No error raised for fitting with wrong parameters name to fit") 35 35 36 36 def fit_single(self, fitter_name, isdream=False): … … 45 45 model1.name = "M1" 46 46 model = Model(model1,data) 47 #fit with scipy test48 47 49 48 pars1= ['A','B'] … … 92 91 self.fit_bumps('lm') 93 92 94 def test_scipy(self):95 #print "fitting scipy"96 self.fit_single('scipy')97 98 def test_park(self):99 #print "fitting park"100 self.fit_single('park')101 102 103 93 def test2(self): 104 94 """ fit 2 data and 2 model with no constrainst""" … … 112 102 113 103 #Importing the Fit module 114 fitter = Fit(' scipy')104 fitter = Fit('bumps') 115 105 # Receives the type of model for the fitting 116 106 model11 = LineModel() … … 121 111 model1 = Model(model11,data1) 122 112 model2 = Model(model22,data2) 123 #fit with scipy test124 113 pars1= ['A','B'] 125 114 fitter.set_data(data1,1) … … 129 118 fitter.set_model(model2,2,pars1) 130 119 fitter.select_problem_for_fit(id=2,value=0) 131 120 132 121 try: result1, = fitter.fit(handler=FitHandler()) 133 122 except RuntimeError,msg: 134 assert str(msg)=="No Assembly scheduled for Scipy fitting." 135 else: raise AssertionError,"No error raised for scipy fitting with no model" 136 fitter.select_problem_for_fit(id=1,value=1) 137 fitter.select_problem_for_fit(id=2,value=1) 138 try: result1, = fitter.fit(handler=FitHandler()) 139 except RuntimeError,msg: 140 assert str(msg)=="Scipy can't fit more than a single fit problem at a time." 141 else: raise AssertionError,"No error raised for scipy fitting with more than 2 models" 142 143 #fit with park test 144 fitter = Fit('park') 145 fitter.set_data(data1,1) 146 fitter.set_model(model1,1,pars1) 147 fitter.set_data(data2,2) 148 fitter.set_model(model2,2,pars1) 123 assert str(msg)=="Nothing to fit" 124 else: raise AssertionError,"No error raised for fitting with no model" 149 125 fitter.select_problem_for_fit(id=1,value=1) 150 126 fitter.select_problem_for_fit(id=2,value=1) … … 156 132 157 133 158 def test 3(self):134 def test_constraints(self): 159 135 """ fit 2 data and 2 model with 1 constrainst""" 160 136 #load data … … 180 156 model1.set(B=3) 181 157 # Constraint the constant value to be equal to parameter B (the real value is 2.5) 182 model2.set(value='line.B') 183 #fit with scipy test 158 #model2.set(value='line.B') 184 159 pars1= ['A','B'] 185 160 pars2= ['value'] 186 161 187 162 #Importing the Fit module 188 fitter = Fit(' park')163 fitter = Fit('bumps') 189 164 fitter.set_data(data1,1) 190 165 fitter.set_model(model1,1,pars1) 191 166 fitter.set_data(data2,2,smearer=None) 192 fitter.set_model(model2,2,pars2 )167 fitter.set_model(model2,2,pars2,constraints=[("value","line.B")]) 193 168 fitter.select_problem_for_fit(id=1,value=1) 194 169 fitter.select_problem_for_fit(id=2,value=1) … … 216 191 model = Model(model1,data1) 217 192 218 #fit with scipy test 219 pars1= ['A','B'] 220 #Importing the Fit module 221 fitter = Fit('scipy') 222 fitter.set_data(data1,1,qmin=0, qmax=7) 223 fitter.set_model(model,1,pars1) 224 fitter.set_data(data2,1,qmin=1,qmax=10) 225 fitter.select_problem_for_fit(id=1,value=1) 226 227 result1, = fitter.fit(handler=FitHandler()) 228 #print(result1) 229 self.assert_(result1) 230 231 self.assertTrue( math.fabs(result1.pvec[0]-4)/3 <= result1.stderr[0] ) 232 self.assertTrue( math.fabs(result1.pvec[1]-2.5)/3 <= result1.stderr[1]) 233 self.assertTrue( result1.fitness/len(data1.x) < 2 ) 234 235 #fit with park test 236 fitter = Fit('park') 193 pars1= ['A','B'] 194 #Importing the Fit module 195 196 fitter = Fit('bumps') 237 197 fitter.set_data(data1,1,qmin=0, qmax=7) 238 198 fitter.set_model(model,1,pars1) … … 245 205 self.assertTrue( math.fabs(result2.pvec[1]-2.5)/3 <= result2.stderr[1] ) 246 206 self.assertTrue( result2.fitness/len(data1.x) < 2) 247 # compare fit result result for scipy and park248 self.assertAlmostEquals( result1.pvec[0], result2.pvec[0] )249 self.assertAlmostEquals( result1.pvec[1],result2.pvec[1] )250 self.assertAlmostEquals( result1.stderr[0],result2.stderr[0] )251 self.assertAlmostEquals( result1.stderr[1],result2.stderr[1] )252 self.assertTrue( result2.fitness/(len(data2.x)+len(data1.x)) < 2 )253 207 254 208 -
test/park_integration/test/utest_fit_smeared.py
r35ec279 r386ffe1 17 17 """ test fitting """ 18 18 19 def test_ scipy(self):20 """ Simple cylinder model fit (scipy)"""19 def test_without_resolution(self): 20 """ Simple cylinder model fit """ 21 21 22 22 out=Loader().load("cyl_400_20.txt") … … 24 24 #out.dy = out.y 25 25 26 fitter = Fit(' scipy')26 fitter = Fit('bumps') 27 27 fitter.set_data(out,1) 28 28 … … 53 53 self.assertTrue( result1.fitness < 1.0 ) 54 54 55 def test_park_dispersion(self): 56 """ 57 Cylinder fit with dispersion 58 """ 59 self._dispersion(fitter = Fit('park')) 60 61 def test_bumps_dispersion(self): 55 def test_dispersion(self): 62 56 """ 63 57 Cylinder fit with dispersion … … 69 63 fitters.FIT_OPTIONS[alg].options.update(monitors=[]) 70 64 self._dispersion(fitter = Fit('bumps')) 71 72 def test_scipy_dispersion(self):73 """74 Cylinder fit with dispersion75 """76 self._dispersion(fitter = Fit('scipy'))77 65 78 66 def _dispersion(self, fitter): … … 148 136 149 137 # Fit 150 fitter = Fit(' scipy')138 fitter = Fit('bumps') 151 139 152 140 # Data: right now this is the only way to set the smearer object … … 179 167 self.assertEqual(smear.__class__.__name__, 'SlitSmearer') 180 168 181 fitter = Fit(' scipy')169 fitter = Fit('bumps') 182 170 183 171 # Data: right now this is the only way to set the smearer object -
test/park_integration/test/utest_small_test.py
r35ec279 r386ffe1 6 6 from sas.fit.Fitting import Fit 7 7 from sas.dataloader.loader import Loader 8 import bumps.fitters 9 bumps.fitters.FIT_DEFAULT = 'lm' 8 10 9 11 class testFitModule(unittest.TestCase): 10 12 """ test fitting """ 11 def test_ park(self):12 """ Simple cylinder model fit (scipy)"""13 def test_cylinder_fit(self): 14 """ Simple cylinder model fit """ 13 15 14 16 out= Loader().load("cyl_400_20.txt") 15 17 16 fitter = Fit(' scipy')18 fitter = Fit('bumps') 17 19 # Receives the type of model for the fitting 18 20 from sas.models.CylinderModel import CylinderModel … … 20 22 model.setParam('sldCyl', 1) 21 23 model.setParam('sldSolv', 0) 24 model.setParam('scale', 1e-10) 22 25 23 26 pars1 =['length','radius','scale'] 24 27 fitter.set_data(out,1) 25 model.setParam('scale', 1e-10)26 28 fitter.set_model(model,1,pars1, constraints=()) 27 29 fitter.select_problem_for_fit(id=1,value=1) … … 33 35 self.assertTrue(len(result1.pvec)>0 or len(result1.pvec)==0 ) 34 36 self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0) 35 36 #print result1.pvec[0]-400.0, result1.pvec[0] 37 #print math.fabs(result1.pvec[0]-400.0)/3.0 37 38 38 self.assertTrue( math.fabs(result1.pvec[0]-400.0)/3.0 < result1.stderr[0] ) 39 39 self.assertTrue( math.fabs(result1.pvec[1]-20.0)/3.0 < result1.stderr[1] ) -
test/pr_inversion/test/test_output.txt
r400155b r386ffe1 3 3 #alpha=0.0007 4 4 #chi2=836.797 5 #elapsed=0 5 #elapsed=0.00100017 6 6 #qmin=None 7 7 #qmax=None -
test/sasmodels/test/utest_models.py
r8c9ffde r386ffe1 59 59 60 60 def test2D(self): 61 """ Test 2D model of a cylinder """ 61 """ Test 2D model of a cylinder """ 62 62 self.comp.setParam('cyl_theta', 10.0) 63 63 self.comp.setParam('cyl_phi', 10.0) 64 self.assertAlmostEqual(self.comp.run([0.2, 2.5]), 65 0.038176446608393366, 2) 64 self.assertAlmostEqual(self.comp.run([0.2, 2.5]), 65 0.038176446608393366, 2) 66 66 67 67 class TestGaussian(unittest.TestCase):
Note: See TracChangeset
for help on using the changeset viewer.