def testGenerator2(self): # Test generator with a profile EllipsoidModel = sasimport('sas.models.EllipsoidModel').EllipsoidModel model = EllipsoidModel() gen = SASGenerator("ellipsoid", model) # Load the data using SAS tools Loader = sasimport('sas.dataloader.loader').Loader loader = Loader() data = datafile("sas_ellipsoid_testdata.txt") datainfo = loader.load(data) profile = SASProfile(datainfo) gen.setProfile(profile) gen.scale.value = 1.0 gen.radius_a.value = 20 gen.radius_b.value = 400 gen.background.value = 0.01 y = gen(profile.xobs) diff = profile.yobs - y res = numpy.dot(diff, diff) self.assertAlmostEqual(0, res) return
def testGenerator(self): # Test generator output SphereModel = sasimport('sas.models.SphereModel').SphereModel model = SphereModel() gen = SASGenerator("sphere", model) for pname in model.params: defval = model.getParam(pname) par = gen.get(pname) self.assertEqual(defval, par.getValue()) # Test setting values par.setValue(1.0) self.assertEqual(1.0, par.getValue()) self.assertEqual(1.0, model.getParam(pname)) par.setValue(defval) self.assertEqual(defval, par.getValue()) self.assertEqual(defval, model.getParam(pname)) r = numpy.arange(1, 10, 0.1, dtype=float) y = gen(r) refy = model.evalDistribution(r) diff = y - refy res = numpy.dot(diff, diff) self.assertAlmostEqual(0, res) return
def testGenerator(self): # Test generator output SphereModel = sasimport('sas.models.SphereModel').SphereModel model = SphereModel() gen = SASGenerator("sphere", model) for pname in model.params: defval = model.getParam(pname) par = gen.get(pname) self.assertEquals(defval, par.getValue()) # Test setting values par.setValue(1.0) self.assertEquals(1.0, par.getValue()) self.assertEquals(1.0, model.getParam(pname)) par.setValue(defval) self.assertEquals(defval, par.getValue()) self.assertEquals(defval, model.getParam(pname)) r = numpy.arange(1, 10, 0.1, dtype = float) y = gen(r) refy = model.evalDistribution(r) diff = y - refy res = numpy.dot(diff, diff) self.assertAlmostEqual(0, res) return
def testCylinder(self): """Make sure cylinder works over different r-ranges""" radius = 100 length = 30 CylinderModel = sasimport('sas.models.CylinderModel').CylinderModel model = CylinderModel() model.setParam("radius", radius) model.setParam("length", length) ff = cf.SASCF("cylinder", model) r1 = numpy.arange(0, 10, 0.1, dtype=float) r2 = numpy.arange(0, 50, 0.1, dtype=float) r3 = numpy.arange(0, 100, 0.1, dtype=float) r4 = numpy.arange(0, 500, 0.1, dtype=float) fr1 = ff(r1) fr2 = ff(r2) fr3 = ff(r3) fr4 = ff(r4) d = fr1 - numpy.interp(r1, r2, fr2) res12 = numpy.dot(d, d) res12 /= numpy.dot(fr1, fr1) self.assertAlmostEqual(0, res12, 4) d = fr1 - numpy.interp(r1, r3, fr3) res13 = numpy.dot(d, d) res13 /= numpy.dot(fr1, fr1) self.assertAlmostEqual(0, res13, 4) d = fr1 - numpy.interp(r1, r4, fr4) res14 = numpy.dot(d, d) res14 /= numpy.dot(fr1, fr1) self.assertAlmostEqual(0, res14, 4) d = fr2 - numpy.interp(r2, r3, fr3) res23 = numpy.dot(d, d) res23 /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res23, 4) d = fr2 - numpy.interp(r2, r4, fr4) res24 = numpy.dot(d, d) res24 /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res24, 4) d = fr3 - numpy.interp(r3, r4, fr4) res34 = numpy.dot(d, d) res34 /= numpy.dot(fr3, fr3) self.assertAlmostEqual(0, res34, 4) return
def testCylinder(self): """Make sure cylinder works over different r-ranges""" radius = 100 length = 30 CylinderModel = sasimport('sas.models.CylinderModel').CylinderModel model = CylinderModel() model.setParam("radius", radius) model.setParam("length", length) ff = cf.SASCF("cylinder", model) r1 = numpy.arange(0, 10, 0.1, dtype = float) r2 = numpy.arange(0, 50, 0.1, dtype = float) r3 = numpy.arange(0, 100, 0.1, dtype = float) r4 = numpy.arange(0, 500, 0.1, dtype = float) fr1 = ff(r1) fr2 = ff(r2) fr3 = ff(r3) fr4 = ff(r4) d = fr1 - numpy.interp(r1, r2, fr2) res12 = numpy.dot(d,d) res12 /= numpy.dot(fr1, fr1) self.assertAlmostEqual(0, res12, 4) d = fr1 - numpy.interp(r1, r3, fr3) res13 = numpy.dot(d,d) res13 /= numpy.dot(fr1, fr1) self.assertAlmostEqual(0, res13, 4) d = fr1 - numpy.interp(r1, r4, fr4) res14 = numpy.dot(d,d) res14 /= numpy.dot(fr1, fr1) self.assertAlmostEqual(0, res14, 4) d = fr2 - numpy.interp(r2, r3, fr3) res23 = numpy.dot(d,d) res23 /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res23, 4) d = fr2 - numpy.interp(r2, r4, fr4) res24 = numpy.dot(d,d) res24 /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res24, 4) d = fr3 - numpy.interp(r3, r4, fr4) res34 = numpy.dot(d,d) res34 /= numpy.dot(fr3, fr3) self.assertAlmostEqual(0, res34, 4) return
def testSphere(self): radius = 25 # Calculate sphere cf from SphereModel SphereModel = sasimport('sas.models.SphereModel').SphereModel model = SphereModel() model.setParam("radius", radius) ff = cf.SASCF("sphere", model) r = numpy.arange(1, 60, 0.1, dtype=float) fr1 = ff(r) # Calculate sphere cf analytically fr2 = cf.sphericalCF(r, 2 * radius) diff = fr1 - fr2 res = numpy.dot(diff, diff) res /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res, 4) return
def testSphere(self): radius = 25 # Calculate sphere cf from SphereModel SphereModel = sasimport('sas.models.SphereModel').SphereModel model = SphereModel() model.setParam("radius", radius) ff = cf.SASCF("sphere", model) r = numpy.arange(1, 60, 0.1, dtype = float) fr1 = ff(r) # Calculate sphere cf analytically fr2 = cf.sphericalCF(r, 2*radius) diff = fr1 - fr2 res = numpy.dot(diff, diff) res /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res, 4) return
def testShell(self): radius = 19.2 thickness = 7.8 # Calculate cf from VesicleModel VesicleModel = sasimport('sas.models.VesicleModel').VesicleModel model = VesicleModel() model.setParam("radius", radius) model.setParam("thickness", thickness) ff = cf.SASCF("vesicle", model) r = numpy.arange(0, 99.45, 0.1, dtype=float) fr1 = ff(r) # Calculate sphere cf analytically fr2 = cf.shellCF(r, radius, thickness) diff = fr1 - fr2 res = numpy.dot(diff, diff) res /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res, 4) return
def testSpheroid(self): prad = 20.9 erad = 33.114 # Calculate cf from EllipsoidModel EllipsoidModel = sasimport('sas.models.EllipsoidModel').EllipsoidModel model = EllipsoidModel() model.setParam("radius_a", prad) model.setParam("radius_b", erad) ff = cf.SASCF("spheroid", model) r = numpy.arange(0, 100, 1 / numpy.pi, dtype=float) fr1 = ff(r) # Calculate cf analytically fr2 = cf.spheroidalCF(r, erad, prad) diff = fr1 - fr2 res = numpy.dot(diff, diff) res /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res, 4) return
def testShell(self): radius = 19.2 thickness = 7.8 # Calculate cf from VesicleModel VesicleModel = sasimport('sas.models.VesicleModel').VesicleModel model = VesicleModel() model.setParam("radius", radius) model.setParam("thickness", thickness) ff = cf.SASCF("vesicle", model) r = numpy.arange(0, 99.45, 0.1, dtype = float) fr1 = ff(r) # Calculate sphere cf analytically fr2 = cf.shellCF(r, radius, thickness) diff = fr1 - fr2 res = numpy.dot(diff, diff) res /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res, 4) return
def testSpheroid(self): prad = 20.9 erad = 33.114 # Calculate cf from EllipsoidModel EllipsoidModel = sasimport('sas.models.EllipsoidModel').EllipsoidModel model = EllipsoidModel() model.setParam("radius_a", prad) model.setParam("radius_b", erad) ff = cf.SASCF("spheroid", model) r = numpy.arange(0, 100, 1/numpy.pi, dtype = float) fr1 = ff(r) # Calculate cf analytically fr2 = cf.spheroidalCF(r, erad, prad) diff = fr1 - fr2 res = numpy.dot(diff, diff) res /= numpy.dot(fr2, fr2) self.assertAlmostEqual(0, res, 4) return
def parseFile(self, filename): """Parse a file and set the _x, _y, _dx, _dy and _meta variables. This wipes out the currently loaded data and selected bank number. Arguments filename -- The name of the file to parse Raises IOError if the file cannot be read Raises ParseError if the file cannot be parsed """ Loader = sasimport('sas.dataloader.loader').Loader loader = Loader() try: data = loader.load(filename) except (RuntimeError, ValueError), e: raise ParseError(e)
def __init__(self, name): """Initialize the generator. name -- A name for the PrCalculator """ Calculator.__init__(self, name) # delayed import of Invertor global Invertor if Invertor is None: from diffpy.srfit.sas.sasimport import sasimport Invertor = sasimport('sas.pr.invertor').Invertor self._invertor = Invertor() self._newParameter("scale", 1) self._newParameter("q", None) self._newParameter("iq", None) self._newParameter("diq", None) return
# Create a singleton and a test for optional test cases _TestCaseDisabled = object def _allactive(*testcaseclasses): 'True if none of the testcaseclasses has been disabled.' return not _TestCaseDisabled in testcaseclasses def testoptional(*testcaseclasses): 'Return unittest.TestCase only if all testcaseclasses are active.' if _allactive(*testcaseclasses): return TestCase return _TestCaseDisabled # Resolve the TestCase*Optional classes try: sasimport('sas.pr.invertor') sasimport('sas.models') TestCaseSaS = TestCase except ImportError, e: TestCaseSaS = _TestCaseDisabled logger.warning('%s, SaS tests skipped.', e) try: import diffpy.Structure TestCaseStructure = TestCase except ImportError: TestCaseStructure = _TestCaseDisabled logger.warning('Cannot import diffpy.Structure, Structure tests skipped.') try: import pyobjcryst