def test__getDoubleAttr(self): """check Attributes._getDoubleAttr() """ pdfc = PDFCalculator() pdfc.foo = 11 self.assertRaises(AttributeError, pdfc._getDoubleAttr, 'foo') pdfc._registerDoubleAttribute('foo') self.assertEqual(11, pdfc._getDoubleAttr('foo')) pdfc.rmax = 22 self.assertEqual(22, pdfc._getDoubleAttr('rmax')) setattr(pdfc, 'rmax', 23) self.assertEqual(23, pdfc._getDoubleAttr('rmax')) self.assertRaises(Exception, setattr, pdfc, 'rmax', 'xxx') return
def testGenerator(self): qmax = 27.0 gen = self.gen gen.setScatteringType('N') self.assertEqual('N', gen.getScatteringType()) gen.setQmax(qmax) self.assertAlmostEqual(qmax, gen.getQmax()) from diffpy.Structure import PDFFitStructure stru = PDFFitStructure() ciffile = datafile("ni.cif") stru.read(ciffile) for i in range(4): stru[i].Bisoequiv = 1 gen.setStructure(stru) calc = gen._calc # Test parameters for par in gen.iterPars(recurse=False): pname = par.name defval = calc._getDoubleAttr(pname) self.assertEquals(defval, par.getValue()) # Test setting values par.setValue(1.0) self.assertEquals(1.0, par.getValue()) par.setValue(defval) self.assertEquals(defval, par.getValue()) r = numpy.arange(0, 10, 0.1) y = gen(r) # Now create a reference PDF. Since the calculator is testing its # output, we just have to make sure we can calculate from the # PDFGenerator interface. from diffpy.srreal.pdfcalculator import PDFCalculator calc = PDFCalculator() calc.rstep = r[1] - r[0] calc.rmin = r[0] calc.rmax = r[-1] + 0.5 * calc.rstep calc.qmax = qmax calc.setScatteringFactorTableByType('N') calc.eval(stru) yref = calc.pdf diff = y - yref res = numpy.dot(diff, diff) self.assertAlmostEquals(0, res) return
def testGenerator(self): qmax = 27.0 gen = PDFGenerator() gen.setScatteringType('N') self.assertEqual('N', gen.getScatteringType()) gen.setQmax(qmax) self.assertAlmostEqual(qmax, gen.getQmax()) from diffpy.Structure import PDFFitStructure stru = PDFFitStructure() ciffile = datafile("ni.cif") stru.read(ciffile) for i in range(4): stru[i].Bisoequiv = 1 gen.setStructure(stru) calc = gen._calc # Test parameters for par in gen.iterPars(recurse = False): pname = par.name defval = calc._getDoubleAttr(pname) self.assertEquals(defval, par.getValue()) # Test setting values par.setValue(1.0) self.assertEquals(1.0, par.getValue()) par.setValue(defval) self.assertEquals(defval, par.getValue()) r = numpy.arange(0, 10, 0.1) y = gen(r) # Now create a reference PDF. Since the calculator is testing its # output, we just have to make sure we can calculate from the # PDFGenerator interface. from diffpy.srreal.pdfcalculator import PDFCalculator calc = PDFCalculator() calc.rstep = r[1] - r[0] calc.rmin = r[0] calc.rmax = r[-1] + 0.5 * calc.rstep calc.qmax = qmax calc.setScatteringFactorTableByType('N') calc.eval(stru) yref = calc.pdf diff = y - yref res = numpy.dot(diff, diff) self.assertAlmostEquals(0, res) return
#!/usr/bin/env python # -*- coding: utf-8 -*- from diffpy.Structure import loadStructure from diffpy.srreal.pdfcalculator import PDFCalculator from matplotlib.pyplot import plot, show cds = loadStructure('CdS_wurtzite.cif') pc1 = PDFCalculator() pc1.rmax = 20 pc1.scatteringfactortable.setCustomAs('S2-', 'S', 18) pc1.scatteringfactortable.lookup('S2-') r1, g1 = pc1(cds) plot(r1, g1) pc2 = pc1.copy() cds2 = loadStructure('CdS_wurtzite.cif') cds2.anisotropy = False r2, g2 = pc2(cds2) plot(r2, g2) plot(r1, g1-g2) show()
#!/usr/bin/env python # -*- coding: utf-8 -*- from diffpy.Structure import loadStructure from diffpy.srreal.pdfcalculator import PDFCalculator from matplotlib.pyplot import plot, show cds = loadStructure('CdS_wurtzite.cif') pc1 = PDFCalculator() pc1.rmax = 20 pc1.scatteringfactortable.setCustomAs('S2-', 'S', 18) pc1.scatteringfactortable.lookup('S2-') r1, g1 = pc1(cds) plot(r1, g1) pc2 = pc1.copy() cds2 = loadStructure('CdS_wurtzite.cif') cds2.anisotropy = False r2, g2 = pc2(cds2) plot(r2, g2) plot(r1, g1 - g2) show()