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

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 ae60f86 was 385d464, checked in by Gervaise Alina <gervyh@…>, 16 years ago

modified tests

  • Property mode set to 100644
File size: 5.6 KB
RevLine 
[ca6d914]1"""
2    Unit tests for fitting module
3"""
4import unittest
5from sans.guitools.plottables import Theory1D
6from sans.guitools.plottables import Data1D
[385d464]7from sans.fit.AbstractFitEngine import Data, Model,FitData1D
[ca6d914]8import math
[822f97e]9from sans.fit.Fitting import Fit
10from DataLoader.loader import Loader
11
[ca6d914]12class testFitModule(unittest.TestCase):
13    """ test fitting """
[822f97e]14   
15    def test_scipy(self):
16        """ Simple cylinder model fit (scipy)  """
17       
18        out=Loader().load("cyl_400_20.txt")
19        data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y)
20       
[ca6d914]21        fitter = Fit('scipy')
22        # Receives the type of model for the fitting
23        from sans.models.CylinderModel import CylinderModel
24        model1  = CylinderModel()
[822f97e]25        model1.setParam('contrast', 1)
[385d464]26        #data = Data(sans_data=data1)
27        data = FitData1D(data1)
[822f97e]28        model = Model(model1)
29       
30        pars1 =['length','radius','scale']
31        fitter.set_data(data,1)
[8bbab51]32        model.set(scale=1e-10)
[822f97e]33        fitter.set_model(model,1,pars1)
[8bbab51]34        fitter.select_problem_for_fit(Uid=1,value=1)
[822f97e]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]-9.0e-12)/3.0   < result1.stderr[2] )
44        self.assertTrue( result1.fitness < 1.0 )
45       
46    def test_park(self):
47        """ Simple cylinder model fit (park)  """
48       
49        out=Loader().load("cyl_400_20.txt")
50        data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y)
51       
52        fitter = Fit('park')
53        # Receives the type of model for the fitting
54        from sans.models.CylinderModel import CylinderModel
55        model1  = CylinderModel()
[8bbab51]56       
[385d464]57        #data = Data(sans_data=data1)
58        data = FitData1D(data1)
[ca6d914]59        model = Model(model1)
60       
61        pars1 =['length','radius','scale']
62        fitter.set_data(data,1)
[8bbab51]63        model.set(contrast= 1)
64        model.set(scale=1e-10)
[916a15f]65        fitter.set_model(model,1,pars1)
[8bbab51]66        fitter.select_problem_for_fit(Uid=1,value=1)
[ca6d914]67        result1 = fitter.fit()
[822f97e]68       
[ca6d914]69        self.assert_(result1)
70        self.assertTrue(len(result1.pvec)>0 or len(result1.pvec)==0 )
71        self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0)
[822f97e]72       
73        print result1.pvec[0]-400.0, result1.pvec[0]
74        print math.fabs(result1.pvec[0]-400.0)/3.0
75        self.assertTrue( math.fabs(result1.pvec[0]-400.0)/3.0 < result1.stderr[0] )
76        self.assertTrue( math.fabs(result1.pvec[1]-20.0)/3.0  < result1.stderr[1] )
77        self.assertTrue( math.fabs(result1.pvec[2]-9.0e-12)/3.0   < result1.stderr[2] )
78        self.assertTrue( result1.fitness < 1.0 )
79       
80    def test_park2(self):
81        """ Simultaneous cylinder model fit (park)  """
82       
83        out=Loader().load("cyl_400_20.txt")
84        data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y)
85       
86        out2=Loader().load("cyl_400_40.txt")
87        data2 = Data1D(x=out2.x, y=out2.y, dx=out2.dx, dy=out2.y)
88       
89        fitter = Fit('park')
90        # Receives the type of model for the fitting
91        from sans.models.CylinderModel import CylinderModel
92        cyl1  = CylinderModel()
93        cyl1.name = "C1"
[8bbab51]94       
[385d464]95        #data1 = Data(sans_data=data1)
96        data1 = FitData1D(data1)
[822f97e]97        model1 = Model(cyl1)
[8bbab51]98        model1.set(contrast=1)
99        model1.set(scale= 1e-10)
[822f97e]100        fitter.set_data(data1,1)
101        fitter.set_model(model1, 1, ['length','radius','scale'])
102       
103        cyl2  = CylinderModel()
104        cyl2.name = "C2"
[8bbab51]105       
[385d464]106        #data2 = Data(sans_data=data2)
107        data2 = FitData1D(data2)
[822f97e]108        # This is wrong. We should not store string as
109        # parameter values
110        # Why not inherit our AbstracFitEngine.Model from Park.Model?
111       
112        #cyl2.setParam('length', 'C1.length')
113        #print "read back:", cyl2.getParam('length')
114       
115        model2 = Model(cyl2)
116        model2.set(length='C1.length')
[8bbab51]117        model2.set(contrast=1)
118        model2.set(scale= 1e-10)
[822f97e]119        fitter.set_data(data2,2)
120        fitter.set_model(model2, 2, ['radius','scale'])
[8bbab51]121        fitter.select_problem_for_fit(Uid=1,value=1)
122        fitter.select_problem_for_fit(Uid=2,value=1)
[822f97e]123        result1 = fitter.fit()
124       
125        self.assert_(result1)
126        self.assertTrue(len(result1.pvec)>0 or len(result1.pvec)==0 )
127        self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0)
128       
129        for par in result1.parameters:
130            if par.name=='C1.length':
131                print par.name, par.value
132                self.assertTrue( math.fabs(par.value-400.0)/3.0 < par.stderr )
133            elif par.name=='C1.radius':
134                print par.name, par.value
135                self.assertTrue( math.fabs(par.value-20.0)/3.0 < par.stderr )
136            elif par.name=='C2.radius':
137                print par.name, par.value
138                self.assertTrue( math.fabs(par.value-40.0)/3.0 < par.stderr )
139            elif par.name=='C1.scale':
140                print par.name, par.value
141                self.assertTrue( math.fabs(par.value-9.0e-12)/3.0 < par.stderr )
142            elif par.name=='C2.scale':
143                print par.name, par.value
144                self.assertTrue( math.fabs(par.value-9.0e-12)/3.0 < par.stderr )
145           
[ca6d914]146       
147       
Note: See TracBrowser for help on using the repository browser.