Changeset 2eaaf1a in sasview for park_integration/test/test_fit_cylinder.py
- Timestamp:
- Oct 19, 2009 4:57:35 PM (15 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- eb575b0
- Parents:
- b72b595
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
park_integration/test/test_fit_cylinder.py
r1ea3488 r2eaaf1a 3 3 """ 4 4 import unittest 5 #from sans.guitools.plottables import Theory1D 6 #from sans.guitools.plottables import Data1D 5 7 6 from danse.common.plottools.plottables import Data1D,Theory1D 8 7 from sans.fit.AbstractFitEngine import Model,FitData1D … … 11 10 from DataLoader.loader import Loader 12 11 13 class testFitModule(unittest.TestCase): 14 """ test fitting """ 15 12 class TestSingleFit(unittest.TestCase): 13 """ test single fitting """ 14 def setUp(self): 15 """ initialize data""" 16 out = Loader().load("cyl_400_20.txt") 17 #Create data that fitting engine understands 18 data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.dy) 19 self.data = FitData1D(data1) 20 # Create model that fitting engine understands 21 from sans.models.CylinderModel import CylinderModel 22 model1 = CylinderModel() 23 model1.setParam("scale", 1.0) 24 model1.setParam("radius",18) 25 model1.setParam("length", 397) 26 model1.setParam("contrast",3e-006 ) 27 model1.setParam("background", 0.0) 28 29 self.model = Model(model1) 30 31 self.pars1 =['length','radius','scale'] 32 33 def _fit(self, name="scipy"): 34 """ return fit result """ 35 fitter = Fit(name) 36 fitter.set_data(self.data,1) 37 38 fitter.set_model(self.model,1,self.pars1) 39 fitter.select_problem_for_fit(Uid=1,value=1) 40 return fitter.fit() 41 42 16 43 def test_scipy(self): 17 44 """ Simple cylinder model fit (scipy) """ 18 45 19 out=Loader().load("cyl_400_20.txt") 20 data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y) 21 22 fitter = Fit('scipy') 23 # Receives the type of model for the fitting 24 from sans.models.CylinderModel import CylinderModel 25 model1 = CylinderModel() 26 model1.setParam('contrast', 1) 27 #data = Data(sans_data=data1) 28 data = FitData1D(data1) 29 model = Model(model1) 30 31 pars1 =['length','radius','scale'] 32 fitter.set_data(data,1) 33 model.set(scale=1e-10) 34 fitter.set_model(model,1,pars1) 35 fitter.select_problem_for_fit(Uid=1,value=1) 36 result1 = fitter.fit() 46 result1 = self._fit("scipy") 37 47 38 48 self.assert_(result1) … … 42 52 self.assertTrue( math.fabs(result1.pvec[0]-400.0)/3.0 < result1.stderr[0] ) 43 53 self.assertTrue( math.fabs(result1.pvec[1]-20.0)/3.0 < result1.stderr[1] ) 44 self.assertTrue( math.fabs(result1.pvec[2]- 9.0e-12)/3.0 < result1.stderr[2] )54 self.assertTrue( math.fabs(result1.pvec[2]-1.0)/3.0 < result1.stderr[2] ) 45 55 self.assertTrue( result1.fitness < 1.0 ) 56 46 57 47 58 def test_park(self): 48 59 """ Simple cylinder model fit (park) """ 49 50 out=Loader().load("cyl_400_20.txt") 51 data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y) 52 53 fitter = Fit('park') 54 # Receives the type of model for the fitting 55 from sans.models.CylinderModel import CylinderModel 56 model1 = CylinderModel() 57 58 #data = Data(sans_data=data1) 59 data = FitData1D(data1) 60 model = Model(model1) 61 62 pars1 =['length','radius','scale'] 63 fitter.set_data(data,1) 64 model.set(contrast= 1) 65 model.set(scale=1e-10) 66 fitter.set_model(model,1,pars1) 67 fitter.select_problem_for_fit(Uid=1,value=1) 68 result1 = fitter.fit() 60 result1 = self._fit("park") 69 61 70 62 self.assert_(result1) 71 63 self.assertTrue(len(result1.pvec)>0 or len(result1.pvec)==0 ) 72 64 self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0) 73 74 print result1.pvec[0]-400.0, result1.pvec[0] 75 print math.fabs(result1.pvec[0]-400.0)/3.0 65 76 66 self.assertTrue( math.fabs(result1.pvec[0]-400.0)/3.0 < result1.stderr[0] ) 77 67 self.assertTrue( math.fabs(result1.pvec[1]-20.0)/3.0 < result1.stderr[1] ) 78 self.assertTrue( math.fabs(result1.pvec[2]- 9.0e-12)/3.0 < result1.stderr[2] )68 self.assertTrue( math.fabs(result1.pvec[2]-1.0)/3.0 < result1.stderr[2] ) 79 69 self.assertTrue( result1.fitness < 1.0 ) 80 70 81 def test_park2(self): 82 """ Simultaneous cylinder model fit (park) """ 71 72 73 class TestSimultaneousFit(unittest.TestCase): 74 """ test simultaneous fitting """ 75 def setUp(self): 76 """ initialize data""" 83 77 84 78 out=Loader().load("cyl_400_20.txt") 85 data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y) 79 data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.dy) 80 self.data1 = FitData1D(data1) 86 81 87 82 out2=Loader().load("cyl_400_40.txt") 88 data2 = Data1D(x=out2.x, y=out2.y, dx=out2.dx, dy=out2. y)89 90 fitter = Fit('park')83 data2 = Data1D(x=out2.x, y=out2.y, dx=out2.dx, dy=out2.dy) 84 self.data2 = FitData1D(data2) 85 91 86 # Receives the type of model for the fitting 92 87 from sans.models.CylinderModel import CylinderModel 93 88 cyl1 = CylinderModel() 94 89 cyl1.name = "C1" 95 96 #data1 = Data(sans_data=data1) 97 data1 = FitData1D(data1) 98 model1 = Model(cyl1) 99 model1.set(contrast=1) 100 model1.set(scale= 1e-10) 101 fitter.set_data(data1,1) 102 fitter.set_model(model1, 1, ['length','radius','scale']) 90 self.model1 = Model(cyl1) 91 self.model1.set(scale= 1.0) 92 self.model1.set(radius=18) 93 self.model1.set(length=396) 94 self.model1.set(contrast=3e-006 ) 95 self.model1.set(background=0.0) 103 96 104 97 cyl2 = CylinderModel() 105 98 cyl2.name = "C2" 99 self.model2 = Model(cyl2) 100 self.model2.set(scale= 1.0) 101 self.model2.set(radius=37) 102 self.model2.set(length='C1.length') 103 self.model2.set(contrast=3e-006 ) 104 self.model2.set(background=0.0) 105 106 def _fit(self, name="park"): 107 """ return fit result """ 108 fitter = Fit(name) 109 fitter.set_data(self.data1,1) 110 fitter.set_model(self.model1, 1, ['length','radius','scale']) 106 111 107 #data2 = Data(sans_data=data2) 108 data2 = FitData1D(data2) 109 # This is wrong. We should not store string as 110 # parameter values 111 # Why not inherit our AbstracFitEngine.Model from Park.Model? 112 113 #cyl2.setParam('length', 'C1.length') 114 #print "read back:", cyl2.getParam('length') 115 116 model2 = Model(cyl2) 117 model2.set(length='C1.length') 118 model2.set(contrast=1) 119 model2.set(scale= 1e-10) 120 fitter.set_data(data2,2) 121 fitter.set_model(model2, 2, ['radius','scale']) 112 fitter.set_data(self.data2,2) 113 fitter.set_model(self.model2, 2, ['radius','scale']) 122 114 fitter.select_problem_for_fit(Uid=1,value=1) 123 115 fitter.select_problem_for_fit(Uid=2,value=1) 124 result1 = fitter.fit() 116 return fitter.fit() 117 118 119 def test_park2(self): 120 """ Simultaneous cylinder model fit (park) """ 125 121 122 result1= self._fit('park') 126 123 self.assert_(result1) 127 self.assertTrue(len(result1.pvec)> 0 or len(result1.pvec)==0)128 self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0)129 124 self.assertTrue(len(result1.pvec)>=0 ) 125 self.assertTrue(len(result1.stderr)>= 0) 126 130 127 for par in result1.parameters: 131 128 if par.name=='C1.length': … … 140 137 elif par.name=='C1.scale': 141 138 print par.name, par.value 142 self.assertTrue( math.fabs(par.value- 9.0e-12)/3.0 < par.stderr )139 self.assertTrue( math.fabs(par.value-1.0)/3.0 < par.stderr ) 143 140 elif par.name=='C2.scale': 144 141 print par.name, par.value 145 self.assertTrue( math.fabs(par.value- 9.0e-12)/3.0 < par.stderr )142 self.assertTrue( math.fabs(par.value-1.0)/3.0 < par.stderr ) 146 143 147 144 145 if __name__ == '__main__': 146 unittest.main() 148 147
Note: See TracChangeset
for help on using the changeset viewer.