source: sasview/sansmodels/src/sans/models/test/utest_modelmultiplication.py @ 24415e9

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

set initial value for model multplication parameters

  • Property mode set to 100644
File size: 4.5 KB
Line 
1"""
2    Unit tests for specific models
3    @author: Gervaise Alina / UTK
4"""
5
6import unittest, numpy,math
7
8from sans.models.MultiplicationModel import MultiplicationModel
9from sans.models.SphereModel import SphereModel
10from sans.models.SquareWellStructure import SquareWellStructure
11     
12class TestDisperser(unittest.TestCase):
13    """ Unit tests for sphere model * SquareWellStructure"""
14    model1= SphereModel()
15    model2= SquareWellStructure()
16    model3= MultiplicationModel(model1, model2)
17    details={}
18    details['scale'] = ['', None, None]
19    details['radius'] = ['A', None, None]
20    details['contrast'] = ['A-2', None, None]
21    details['background'] = ['cm-1', None, None]
22    details['volfraction'] = ['', None, None]
23    details['welldepth'] = ['kT', None, None]
24    details['wellwidth'] = ['', None, None]
25   
26    ## fittable parameters
27    fixed=[]
28    fixed=['radius.width']
29   
30    def test_multiplication_radius(self):
31        """ test multiplication model"""
32        from sans.models.MultiplicationModel import MultiplicationModel
33        from sans.models.SphereModel import SphereModel
34        from sans.models.HayterMSAStructure import HayterMSAStructure
35        my_sphere = SphereModel()
36        my_struct = HayterMSAStructure()
37        model1  =  MultiplicationModel(my_sphere,my_struct)
38        self.assertEquals(model1.getParam("radius"),
39                          my_struct.getParam("radius"),
40                          my_sphere.getParam("radius"))
41        model2 = SphereModel()
42        x= 2
43
44        model1.setParam("radius", 60)
45        self.assertEqual(model1.getParam("radius"), 60)
46        a = model1.run(x)
47        self.assertEqual(a, 2.5723183020756634e-006)
48        model1.setParam("radius", 70)
49        b = model1.run(x)
50        self.assertNotEqual(a, b)
51        model1.setParam("radius", 60)
52        c =  model1.run(x)
53        self.assertEqual(c, 2.5723183020756634e-006)
54        self.assertEqual(a, c)
55       
56       
57       
58       
59    def test_multiplication(self):
60        """ test multiplication model"""
61        from sans.models.MultiplicationModel import MultiplicationModel
62        from sans.models.SphereModel import SphereModel
63        from sans.models.NoStructure import NoStructure
64        model1  =  MultiplicationModel(SphereModel(),NoStructure())
65        model2 = SphereModel()
66        x= 2
67        a = model1.run(x)
68       
69        b=  model2.run(x)
70        self.assertEqual(a, b)
71        model2.setParam("scale", 10)
72        c=  model2.run(x)
73        self.assertEqual(c, 10*b)
74        model1.setParam("scale", 10)
75        d=  model1.run(x)
76        self.assertEqual(d, 10*a)
77        self.assertEqual(model1.getParam("scale"), 10)
78       
79       
80    def testMultiplicationModel(self):
81        """ Test Multiplication  sphere with SquareWellStructure"""
82        ## test details dictionary
83        self.assertEqual(self.model3.details, self.details)
84       
85        ## test parameters list
86        list3= self.model3.getParamList()
87        for item in self.model1.getParamList():
88            self.assert_(item in list3)
89        for item in self.model2.getParamList():
90            self.assert_(item in list3)
91           
92        ## test set value for parameters and get paramaters
93        self.model3.setParam("scale", 15)
94        self.assertEqual(self.model3.getParam("scale"), 15)
95        self.model3.setParam("radius", 20)
96        self.assertEqual(self.model3.getParam("radius"), 20)
97        self.model3.setParam("radius.width", 15)
98        self.assertEqual(self.model3.getParam("radius.width"), 15)
99       
100        ## Dispersity
101        list3= self.model3.getDispParamList()
102        self.assertEqual(list3, ['radius.npts', 'radius.nsigmas', 'radius.width'])
103       
104        from sans.models.dispersion_models import ArrayDispersion
105        disp_th = ArrayDispersion()
106       
107        values_th = numpy.zeros(100)
108        weights   = numpy.zeros(100)
109        for i in range(100):
110            values_th[i]=(math.pi/99.0*i)
111            weights[i]=(1.0)
112   
113        disp_th.set_weights(values_th, weights)
114       
115        self.model3.set_dispersion('radius', disp_th)
116       
117        val_1d = self.model3.run(math.sqrt(0.0002))
118        val_2d = self.model3.runXY([0.01,0.01]) 
119       
120        self.assertTrue(math.fabs(val_1d-val_2d)/val_1d < 0.02)
121        model4= self.model3.clone()
122        self.assertEqual(model4.getParam("radius"), 20)
123       
124if __name__ == '__main__':
125    unittest.main()
Note: See TracBrowser for help on using the repository browser.