def test_eval_nickel(self): """check PDFCalculator.eval() on simple Nickel data """ fnipf2 = datafile('Ni-fit.fgr') gpf2 = numpy.loadtxt(fnipf2, usecols=(1,)) self.pdfcalc._setDoubleAttr('rmax', 10.0001) self.pdfcalc.eval(self.nickel) gcalc = self.pdfcalc.pdf self.failUnless(_maxNormDiff(gpf2, gcalc) < 0.0091) return
def test_eval_nickel(self): """check PDFCalculator.eval() on simple Nickel data """ fnipf2 = datafile('Ni-fit.fgr') gpf2 = numpy.loadtxt(fnipf2, usecols=(1, )) self.pdfcalc._setDoubleAttr('rmax', 10.0001) self.pdfcalc.eval(self.nickel) gcalc = self.pdfcalc.pdf self.assertTrue(_maxNormDiff(gpf2, gcalc) < 0.0091) return
def test_fft_roundtrip(self): """Check if forward and inverse transformation recover the input. """ fnipf2 = datafile('Ni-fit.fgr') g0 = numpy.loadtxt(fnipf2, usecols=(1,)) dr0 = 0.01 fq, dq = fftgtof(g0, dr0) g1, dr1 = fftftog(fq, dq) self.assertAlmostEqual(dr0, dr1, 12) self.assertTrue(numpy.allclose(g0, g1[:g0.size])) return
def test_fft_roundtrip(self): """Check if forward and inverse transformation recover the input. """ fnipf2 = datafile('Ni-fit.fgr') g0 = numpy.loadtxt(fnipf2, usecols=(1, )) dr0 = 0.01 fq, dq = fftgtof(g0, dr0) g1, dr1 = fftftog(fq, dq) self.assertAlmostEqual(dr0, dr1, 12) self.assertTrue(numpy.allclose(g0, g1[:g0.size])) return
def test_fft_conversions(self): """Verify conversions of arguments in fftgtof function. """ fnipf2 = datafile('Ni-fit.fgr') data = numpy.loadtxt(fnipf2) dr = 0.01 fq0, dq0 = fftgtof(data[:,1], dr) fq1, dq1 = fftgtof(data[:,1].copy(), dr) fq2, dq2 = fftgtof(list(data[:,1]), dr) self.assertTrue(numpy.array_equal(fq0, fq1)) self.assertTrue(numpy.array_equal(fq0, fq2)) self.assertEqual(dq0, dq1) self.assertEqual(dq0, dq2) return
def test_fft_conversions(self): """Verify conversions of arguments in fftgtof function. """ fnipf2 = datafile('Ni-fit.fgr') data = numpy.loadtxt(fnipf2) dr = 0.01 fq0, dq0 = fftgtof(data[:, 1], dr) fq1, dq1 = fftgtof(data[:, 1].copy(), dr) fq2, dq2 = fftgtof(list(data[:, 1]), dr) self.assertTrue(numpy.array_equal(fq0, fq1)) self.assertTrue(numpy.array_equal(fq0, fq2)) self.assertEqual(dq0, dq1) self.assertEqual(dq0, dq2) return
def _loadExpectedPDF(basefilename): '''Read expected result and return a tuple of (r, g, cfgdict). ''' rxf = re.compile(r'[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?') fullpath = datafile(basefilename) cfgdict = {} for line in open(fullpath): if line[:1] != '#': break w = line.split() has_cfgdata = (len(w) == 4 and w[2] == '=') if not has_cfgdata: continue cfgdict[w[1]] = w[3] if rxf.match(w[3]): cfgdict[w[1]] = float(w[3]) r, g = numpy.loadtxt(fullpath, usecols=(0, 1), unpack=True) rv = (r, g, cfgdict) return rv
def _loadExpectedPDF(basefilename): '''Read expected result and return a tuple of (r, g, cfgdict). ''' rxf = re.compile(r'[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?') fullpath = datafile(basefilename) cfgdict = {} for line in open(fullpath): if line[:1] != '#': break w = line.split() has_cfgdata = (len(w) == 4 and w[2] == '=') if not has_cfgdata: continue cfgdict[w[1]] = w[3] if rxf.match(w[3]): cfgdict[w[1]] = float(w[3]) r, g = numpy.loadtxt(fullpath, usecols=(0, 1), unpack=True) rv = (r, g, cfgdict) return rv
def test_eval_rutile(self): """check PDFCalculator.eval() on anisotropic rutile data """ frutile = datafile('TiO2_rutile-fit.fgr') gpf2 = numpy.loadtxt(frutile, usecols=(1,)) # configure calculator according to testdata/TiO2_ruitile-fit.fgr self.pdfcalc.qmax = 26 self.pdfcalc.qdamp = 0.0665649 dscale = 0.655857 self.pdfcalc.rmin = 1 self.pdfcalc.rmax = 30.0001 # apply data scale self.pdfcalc(self.tio2rutile) self.pdfcalc.scale *= dscale gcalc = self.pdfcalc.pdf # termination at rmin is poorly cut in PDFfit2 mxnd = _maxNormDiff(gpf2, gcalc) self.failUnless(mxnd < 0.057) # more accurate from 1.5 mxnd1 = _maxNormDiff(gpf2[:500], gcalc[:500]) mxnd2 = _maxNormDiff(gpf2[500:], gcalc[500:]) self.failUnless(mxnd1 < 0.056) self.failUnless(mxnd2 < 0.020) return
def test_eval_rutile(self): """check PDFCalculator.eval() on anisotropic rutile data """ frutile = datafile('TiO2_rutile-fit.fgr') gpf2 = numpy.loadtxt(frutile, usecols=(1, )) # configure calculator according to testdata/TiO2_ruitile-fit.fgr self.pdfcalc.qmax = 26 self.pdfcalc.qdamp = 0.0665649 dscale = 0.655857 self.pdfcalc.rmin = 1 self.pdfcalc.rmax = 30.0001 # apply data scale self.pdfcalc(self.tio2rutile) self.pdfcalc.scale *= dscale gcalc = self.pdfcalc.pdf # termination at rmin is poorly cut in PDFfit2 mxnd = _maxNormDiff(gpf2, gcalc) self.assertTrue(mxnd < 0.057) # more accurate from 1.5 mxnd1 = _maxNormDiff(gpf2[:500], gcalc[:500]) mxnd2 = _maxNormDiff(gpf2[500:], gcalc[500:]) self.assertTrue(mxnd1 < 0.056) self.assertTrue(mxnd2 < 0.020) return