def setUp(self): from sas.models.CylinderModel import CylinderModel from sas.models.SquareWellStructure import SquareWellStructure from sas.models.DiamCylFunc import DiamCylFunc from sas.models.MultiplicationModel import MultiplicationModel self.model = CylinderModel() self.model2 = SquareWellStructure() self.model3 = MultiplicationModel(self.model, self.model2) self.modelD = DiamCylFunc()
def test_cyl_times_square(self): """ Simple cylinder model fit """ out = Loader().load("cyl_400_20.txt") data = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.dy) # Receives the type of model for the fitting model1 = MultiplicationModel(CylinderModel(), SquareWellStructure()) model1.setParam('background', 0.0) model1.setParam('sldCyl', 3e-006) model1.setParam('sldSolv', 0.0) model1.setParam('length', 420) model1.setParam('radius', 40) model1.setParam('scale_factor', 2) model1.setParam('volfraction', 0.04) model1.setParam('welldepth', 1.5) model1.setParam('wellwidth', 1.2) model = Model(model1) pars1 = ['length', 'radius', 'scale_factor'] fitter = Fit('bumps') fitter.set_data(data, 1) fitter.set_model(model, 1, pars1) fitter.select_problem_for_fit(id=1, value=1) result1, = fitter.fit() self.assert_(result1) self.assertTrue(len(result1.pvec) >= 0) self.assertTrue(len(result1.stderr) >= 0) #print "results",list(zip(result1.pvec, result1.stderr)) self.assertTrue( math.fabs(result1.pvec[0] - 612) / 3.0 <= result1.stderr[0]) self.assertTrue( math.fabs(result1.pvec[1] - 20.3) / 3.0 <= result1.stderr[1]) self.assertTrue( math.fabs(result1.pvec[2] - 25) / 3.0 <= result1.stderr[2]) self.assertTrue(result1.fitness / len(data.x) < 1.0)
class TestsphereSuareW(unittest.TestCase): """ Unit tests for SphereModel(Q) * SquareWellStructure(Q) """ def setUp(self): from sas.models.SphereModel import SphereModel from sas.models.SquareWellStructure import SquareWellStructure from sas.models.DiamCylFunc import DiamCylFunc from sas.models.MultiplicationModel import MultiplicationModel self.model = SphereModel() self.model2 = SquareWellStructure() self.model3 = MultiplicationModel(self.model, self.model2) self.modelD = DiamCylFunc() #Radius of model1.calculate_ER should be equal to the output/2 of DiamFunctions def test_multplication_radius(self): """ test multiplication model (check the effective radius & the output of the multiplication) """ self.model.setParam("radius", 60) modelDrun = 60 self.model2.setParam("volfraction", 0.2) self.model2.setParam("effect_radius", modelDrun ) #Compare new method with old method self.assertEqual(self.model3.run(0.1), self.model.run(0.1)*self.model2.run(0.1)) #Compare radius from two different calculations. Note: modelD.run(0.0) is DIAMETER self.assertEqual(self.model.calculate_ER(), modelDrun) def testMultiplicationParam(self): """ Test Multiplication (check the setparameters and the run & runXY w/ array dispersion)""" ## test details dictionary ## test parameters list list3= self.model3.getParamList() for item in self.model.getParamList(): if not 'scale' in item: self.assert_(item in list3) for item in self.model2.getParamList(): #model3 parameters should not include effect_radius* if not 'effect_radius' in item: self.assert_(item in list3) ## test set value for parameters and get paramaters self.model3.setParam("scale_factor", 15) self.assertEqual(self.model3.getParam("scale_factor"), 15) self.model3.setParam("radius", 20) self.assertEqual(self.model3.getParam("radius"), 20) self.model3.setParam("radius.width", 15) self.assertEqual(self.model3.getParam("radius.width"), 15) self.model3.setParam("scale_factor", 15) self.assertEqual(self.model3.getParam("scale_factor"), 15) self.assertEqual(self.model3.getParam("volfraction"), self.model.getParam("scale")) ## Dispersity list3= self.model3.getDispParamList() self.assertEqual(list3, ['radius.npts', 'radius.nsigmas', 'radius.width']) from sas.models.dispersion_models import ArrayDispersion disp_th = ArrayDispersion() values_th = numpy.zeros(100) weights = numpy.zeros(100) for i in range(100): values_th[i]=(math.pi/99.0*i) weights[i]=(1.0) disp_th.set_weights(values_th, weights) self.model3.set_dispersion('radius', disp_th) val_1d = self.model3.run(math.sqrt(0.0002)) val_2d = self.model3.runXY([0.01,0.01]) self.assertTrue(math.fabs(val_1d-val_2d)/val_1d < 0.02) model4= self.model3.clone() self.assertEqual(model4.getParam("radius"), 20)