source: sasview/test/park_integration/test/utest_fit_cylinder.py @ eff93b8

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since eff93b8 was eff93b8, checked in by pkienzle, 10 years ago

change default fit engine to bumps:levenberg-marquardt

  • Property mode set to 100644
File size: 4.8 KB
Line 
1"""
2    Unit tests for fitting module
3    @author G.alina
4"""
5import unittest
6import math
7
8from sans.fit.AbstractFitEngine import Model
9from sans.fit.Fitting import Fit
10from sans.dataloader.loader import Loader
11
12#@unittest.skip("")
13class TestSingleFit(unittest.TestCase):
14    """ test single fitting """
15    def setUp(self):
16        """ initialize data"""
17        self.data = Loader().load("cyl_400_20.txt")
18        # Create model that fitting engine understands
19        from sans.models.CylinderModel import CylinderModel
20        self.model  = CylinderModel()
21        self.model.setParam("scale", 1.0)
22        self.model.setParam("radius",18)
23        self.model.setParam("length", 397)
24        self.model.setParam("sldCyl",3e-006 )
25        self.model.setParam("sldSolv",0.0 )
26        self.model.setParam("background", 0.0)
27        #select parameters to fit
28        self.pars1 =['length','radius','scale']
29       
30    def _fit(self, name="scipy"):
31        """ return fit result """
32        fitter = Fit(name)
33        fitter.set_data(self.data,1)
34        fitter.set_model(self.model,1,self.pars1)
35        fitter.select_problem_for_fit(id=1,value=1)
36        result1, = fitter.fit()
37
38        self.assert_(result1)
39        self.assertTrue(len(result1.pvec)>0 or len(result1.pvec)==0 )
40        self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0)
41
42        self.assertTrue( math.fabs(result1.pvec[0]-400.0)/3.0 < result1.stderr[0] )
43        self.assertTrue( math.fabs(result1.pvec[1]-20.0)/3.0  < result1.stderr[1] )
44        self.assertTrue( math.fabs(result1.pvec[2]-1.0)/3.0   < result1.stderr[2] )
45        self.assertTrue( result1.fitness < 1.0 )
46
47
48    def test_scipy(self):
49        """ Simple cylinder model fit (scipy)  """
50        self._fit("scipy")
51
52
53    def test_park(self):
54        """ Simple cylinder model fit (park)  """
55        self._fit("park")
56
57    def test_bumps(self):
58        """ Simple cylinder model fit (park)  """
59        self._fit("bumps")
60
61
62       
63class TestSimultaneousFit(unittest.TestCase):
64    """ test simultaneous fitting """
65    def setUp(self):
66        """ initialize data"""
67       
68        self.data1=Loader().load("cyl_400_20.txt")
69        self.data2=Loader().load("cyl_400_40.txt")
70   
71        # Receives the type of model for the fitting
72        from sans.models.CylinderModel import CylinderModel
73        cyl1  = CylinderModel()
74        cyl1.name = "C1"
75        self.model1 = Model(cyl1)
76        self.model1.set(scale= 1.0)
77        self.model1.set(radius=18)
78        self.model1.set(length=200)
79        self.model1.set(sldCyl=3e-006, sldSolv=0.0)
80        self.model1.set(background=0.0)
81
82        cyl2  = CylinderModel()
83        cyl2.name = "C2"
84        self.model2 = Model(cyl2)
85        self.model2.set(scale= 1.0)
86        self.model2.set(radius=37)
87        self.model2.set(length=300)
88        self.model2.set(sldCyl=3e-006, sldSolv=0.0)
89        self.model2.set(background=0.0)
90
91
92    def test_constrained_bumps(self):
93        """ Simultaneous cylinder model fit (park)  """
94        self._run_fit(Fit('bumps'))
95
96    #@unittest.skip("")
97    def test_constrained_park(self):
98        """ Simultaneous cylinder model fit (park)  """
99        self._run_fit(Fit('park'))
100
101    def _run_fit(self, fitter):
102        result1, result2 = self._fit(fitter)
103        self.assert_(result1)
104        self.assertTrue(len(result1.pvec)>0)
105        self.assertTrue(len(result1.stderr)>0)
106
107        for n, v, dv in zip(result1.param_list, result1.pvec, result1.stderr):
108            print "%s M1.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv)
109            if n == "length":
110                self.assertTrue( math.fabs(v-400.0)/3.0 < dv )
111            elif n=='radius':
112                self.assertTrue( math.fabs(v-20.0)/3.0 < dv )
113            elif n=='scale':
114                self.assertTrue( math.fabs(v-1.0)/3.0 < dv )
115        for n, v, dv in zip(result2.param_list, result2.pvec, result2.stderr):
116            print "%s M2.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv)
117            if n=='radius':
118                self.assertTrue( math.fabs(v-40.0)/3.0 < dv )
119            elif n=='scale':
120                self.assertTrue( math.fabs(v-1.0)/3.0 < dv )
121
122    def _fit(self, fitter):
123        """ return fit result """
124        fitter.set_data(self.data1,1)
125        fitter.set_model(self.model1, 1, ['length','radius','scale'])
126
127        fitter.set_data(self.data2,2)
128        fitter.set_model(self.model2, 2, ['length','radius','scale'],
129                         constraints=[("length","C1.length")])
130        fitter.select_problem_for_fit(id=1,value=1)
131        fitter.select_problem_for_fit(id=2,value=1)
132        return fitter.fit()
133
134
135if __name__ == '__main__':
136    unittest.main()       
137       
Note: See TracBrowser for help on using the repository browser.