Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
    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
Ejemplo n.º 16
0
# 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