source: sasview/park_integration/test/test_fit_cylinder.py @ eb575b0

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 eb575b0 was eb575b0, checked in by Gervaise Alina <gervyh@…>, 15 years ago

add author name to unittest

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