def test_constraints(self): """ fit 2 data and 2 model with 1 constrainst""" #load data l = Loader() data1= l.load("testdata_line.txt") data1.name = data1.filename data2= l.load("testdata_cst.txt") data2.name = data2.filename # Receives the type of model for the fitting model11 = LineModel() model11.name= "line" model11.setParam("A", 1.0) model11.setParam("B",1.0) model22 = Constant() model22.name= "cst" model22.setParam("value", 1.0) model1 = Model(model11,data1) model2 = Model(model22,data2) model1.set(A=4) model1.set(B=3) # Constraint the constant value to be equal to parameter B (the real value is 2.5) #model2.set(value='line.B') pars1= ['A','B'] pars2= ['value'] #Importing the Fit module fitter = Fit() fitter.set_data(data1,1) fitter.set_model(model1,1,pars1) fitter.set_data(data2,2,smearer=None) fitter.set_model(model2,2,pars2,constraints=[("value","line.B")]) fitter.select_problem_for_fit(id=1,value=1) fitter.select_problem_for_fit(id=2,value=1) R1,R2 = fitter.fit(handler=FitHandler()) self.assertTrue( math.fabs(R1.pvec[0]-4.0)/3. <= R1.stderr[0]) self.assertTrue( math.fabs(R1.pvec[1]-2.5)/3. <= R1.stderr[1]) self.assertTrue( R1.fitness/(len(data1.x)+len(data2.x)) < 2)
def test_constraints(self): """ fit 2 data and 2 model with 1 constrainst""" #load data l = Loader() data1 = l.load("testdata_line.txt") data1.name = data1.filename data2 = l.load("testdata_cst.txt") data2.name = data2.filename # Receives the type of model for the fitting model11 = LineModel() model11.name = "line" model11.setParam("A", 1.0) model11.setParam("B", 1.0) model22 = Constant() model22.name = "cst" model22.setParam("value", 1.0) model1 = Model(model11, data1) model2 = Model(model22, data2) model1.set(A=4) model1.set(B=3) # Constraint the constant value to be equal to parameter B (the real value is 2.5) #model2.set(value='line.B') pars1 = ['A', 'B'] pars2 = ['value'] #Importing the Fit module fitter = Fit('bumps') fitter.set_data(data1, 1) fitter.set_model(model1, 1, pars1) fitter.set_data(data2, 2, smearer=None) fitter.set_model(model2, 2, pars2, constraints=[("value", "line.B")]) fitter.select_problem_for_fit(id=1, value=1) fitter.select_problem_for_fit(id=2, value=1) R1, R2 = fitter.fit(handler=FitHandler()) self.assertTrue(math.fabs(R1.pvec[0] - 4.0) / 3. <= R1.stderr[0]) self.assertTrue(math.fabs(R1.pvec[1] - 2.5) / 3. <= R1.stderr[1]) self.assertTrue(R1.fitness / (len(data1.x) + len(data2.x)) < 2)
class TestSimultaneousFit(unittest.TestCase): """ test simultaneous fitting """ def setUp(self): """ initialize data""" self.data1=Loader().load("cyl_400_20.txt") self.data2=Loader().load("cyl_400_40.txt") # Receives the type of model for the fitting from sas.models.CylinderModel import CylinderModel cyl1 = CylinderModel() cyl1.name = "C1" self.model1 = Model(cyl1) self.model1.set(scale= 1.0) self.model1.set(radius=18) self.model1.set(length=200) self.model1.set(sldCyl=3e-006, sldSolv=0.0) self.model1.set(background=0.0) cyl2 = CylinderModel() cyl2.name = "C2" self.model2 = Model(cyl2) self.model2.set(scale= 1.0) self.model2.set(radius=37) self.model2.set(length=300) self.model2.set(sldCyl=3e-006, sldSolv=0.0) self.model2.set(background=0.0) def test_constrained_bumps(self): """ Simultaneous cylinder model fit """ self._run_fit(Fit('bumps')) #@unittest.skip("") def _run_fit(self, fitter): result1, result2 = self._fit(fitter) self.assert_(result1) self.assertTrue(len(result1.pvec)>0) self.assertTrue(len(result1.stderr)>0) for n, v, dv in zip(result1.param_list, result1.pvec, result1.stderr): #print "%s M1.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv) if n == "length": self.assertTrue( math.fabs(v-400.0)/3.0 < dv ) elif n=='radius': self.assertTrue( math.fabs(v-20.0)/3.0 < dv ) elif n=='scale': self.assertTrue( math.fabs(v-1.0)/3.0 < dv ) for n, v, dv in zip(result2.param_list, result2.pvec, result2.stderr): #print "%s M2.%s = %s +/- %s"%(fitter._engine.__class__.__name__,n,v,dv) if n=='radius': self.assertTrue( math.fabs(v-40.0)/3.0 < dv ) elif n=='scale': self.assertTrue( math.fabs(v-1.0)/3.0 < dv ) def _fit(self, fitter): """ return fit result """ fitter.set_data(self.data1,1) fitter.set_model(self.model1, 1, ['length','radius','scale']) fitter.set_data(self.data2,2) fitter.set_model(self.model2, 2, ['length','radius','scale'], constraints=[("length","C1.length")]) fitter.select_problem_for_fit(id=1,value=1) fitter.select_problem_for_fit(id=2,value=1) return fitter.fit()
class TestSimultaneousFit(unittest.TestCase): """ test simultaneous fitting """ def setUp(self): """ initialize data""" self.data1 = Loader().load("cyl_400_20.txt") self.data2 = Loader().load("cyl_400_40.txt") # Receives the type of model for the fitting from sas.models.CylinderModel import CylinderModel cyl1 = CylinderModel() cyl1.name = "C1" self.model1 = Model(cyl1) self.model1.set(scale=1.0) self.model1.set(radius=18) self.model1.set(length=200) self.model1.set(sldCyl=3e-006, sldSolv=0.0) self.model1.set(background=0.0) cyl2 = CylinderModel() cyl2.name = "C2" self.model2 = Model(cyl2) self.model2.set(scale=1.0) self.model2.set(radius=37) self.model2.set(length=300) self.model2.set(sldCyl=3e-006, sldSolv=0.0) self.model2.set(background=0.0) def test_constrained_bumps(self): """ Simultaneous cylinder model fit """ self._run_fit(Fit()) # @unittest.skip("") def _run_fit(self, fitter): result1, result2 = self._fit(fitter) self.assert_(result1) self.assertTrue(len(result1.pvec) > 0) self.assertTrue(len(result1.stderr) > 0) for n, v, dv in zip(result1.param_list, result1.pvec, result1.stderr): if n == "length": self.assertTrue(math.fabs(v - 400.0) / 3.0 < dv) elif n == "radius": self.assertTrue(math.fabs(v - 20.0) / 3.0 < dv) elif n == "scale": self.assertTrue(math.fabs(v - 1.0) / 3.0 < dv) for n, v, dv in zip(result2.param_list, result2.pvec, result2.stderr): if n == "radius": self.assertTrue(math.fabs(v - 40.0) / 3.0 < dv) elif n == "scale": self.assertTrue(math.fabs(v - 1.0) / 3.0 < dv) def _fit(self, fitter): """ return fit result """ fitter.set_data(self.data1, 1) fitter.set_model(self.model1, 1, ["length", "radius", "scale"]) fitter.set_data(self.data2, 2) fitter.set_model(self.model2, 2, ["length", "radius", "scale"], constraints=[("length", "C1.length")]) fitter.select_problem_for_fit(id=1, value=1) fitter.select_problem_for_fit(id=2, value=1) return fitter.fit()