source: sasview/test/sasfit/test/utest_fit_cylinder.py @ acf8e4a5

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 acf8e4a5 was acf8e4a5, checked in by Paul Kienzle <pkienzle@…>, 9 years ago

reference BumpsFit? directly and remove fit engine selection layer

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