From 04f7267115f9747db4392c37a6e15b5a890ee1ea Mon Sep 17 00:00:00 2001 From: Sam Andrello Date: Mon, 22 Jul 2024 11:50:03 -0400 Subject: [PATCH 1/2] Added src directory with Python code --- src/diffpy/__init__.py | 24 + src/diffpy/pdffit2/__init__.py | 24 + src/diffpy/pdffit2/ipy_ext.py | 95 + src/diffpy/pdffit2/output.py | 41 + src/diffpy/pdffit2/pdffit.py | 1297 +++++++++++ src/diffpy/pdffit2/tests/ExceptionsTest.py | 794 +++++++ src/diffpy/pdffit2/tests/TestPdfFit.py | 761 ++++++ .../pdffit2/tests/TestPhaseFractions.py | 95 + src/diffpy/pdffit2/tests/TestShapeFactors.py | 274 +++ src/diffpy/pdffit2/tests/__init__.py | 0 src/diffpy/pdffit2/tests/conftest.py | 19 + src/diffpy/pdffit2/tests/debug.py | 35 + src/diffpy/pdffit2/tests/pdffit2testutils.py | 53 + src/diffpy/pdffit2/tests/run.py | 34 + src/diffpy/pdffit2/tests/rundeps.py | 30 + src/diffpy/pdffit2/tests/testdata/300K.gr | 2062 +++++++++++++++++ src/diffpy/pdffit2/tests/testdata/Ni.dat | 1001 ++++++++ src/diffpy/pdffit2/tests/testdata/Ni.stru | 33 + .../pdffit2/tests/testdata/PbScW25TiO3.stru | 345 +++ src/diffpy/pdffit2/tests/testdata/badNi.dat | 1001 ++++++++ src/diffpy/pdffit2/tests/testdata/badNi.stru | 32 + .../tests/testdata/badNiZeroVolume.stru | 33 + .../pdffit2/tests/testdata/noLattice.stru | 32 + src/diffpy/pdffit2/version.py | 26 + 24 files changed, 8141 insertions(+) create mode 100644 src/diffpy/__init__.py create mode 100644 src/diffpy/pdffit2/__init__.py create mode 100644 src/diffpy/pdffit2/ipy_ext.py create mode 100644 src/diffpy/pdffit2/output.py create mode 100644 src/diffpy/pdffit2/pdffit.py create mode 100644 src/diffpy/pdffit2/tests/ExceptionsTest.py create mode 100644 src/diffpy/pdffit2/tests/TestPdfFit.py create mode 100644 src/diffpy/pdffit2/tests/TestPhaseFractions.py create mode 100644 src/diffpy/pdffit2/tests/TestShapeFactors.py create mode 100644 src/diffpy/pdffit2/tests/__init__.py create mode 100644 src/diffpy/pdffit2/tests/conftest.py create mode 100644 src/diffpy/pdffit2/tests/debug.py create mode 100644 src/diffpy/pdffit2/tests/pdffit2testutils.py create mode 100644 src/diffpy/pdffit2/tests/run.py create mode 100644 src/diffpy/pdffit2/tests/rundeps.py create mode 100644 src/diffpy/pdffit2/tests/testdata/300K.gr create mode 100644 src/diffpy/pdffit2/tests/testdata/Ni.dat create mode 100644 src/diffpy/pdffit2/tests/testdata/Ni.stru create mode 100644 src/diffpy/pdffit2/tests/testdata/PbScW25TiO3.stru create mode 100644 src/diffpy/pdffit2/tests/testdata/badNi.dat create mode 100644 src/diffpy/pdffit2/tests/testdata/badNi.stru create mode 100644 src/diffpy/pdffit2/tests/testdata/badNiZeroVolume.stru create mode 100644 src/diffpy/pdffit2/tests/testdata/noLattice.stru create mode 100644 src/diffpy/pdffit2/version.py diff --git a/src/diffpy/__init__.py b/src/diffpy/__init__.py new file mode 100644 index 00000000..71428827 --- /dev/null +++ b/src/diffpy/__init__.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2024 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge Group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors +# +# See LICENSE.rst for license information. +# +############################################################################## + +"""Blank namespace package for module diffpy.""" + + +from pkgutil import extend_path + +__path__ = extend_path(__path__, __name__) + +# End of file + diff --git a/src/diffpy/pdffit2/__init__.py b/src/diffpy/pdffit2/__init__.py new file mode 100644 index 00000000..e12b2fb9 --- /dev/null +++ b/src/diffpy/pdffit2/__init__.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2024 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge Group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors +# +# See LICENSE.rst for license information. +# +############################################################################## + +"""PDFfit2 - real space structure refinement program.""" + +# package version +from diffpy.pdffit2.version import __version__ + +# silence the pyflakes syntax checker +assert __version__ or True + +# End of file diff --git a/src/diffpy/pdffit2/ipy_ext.py b/src/diffpy/pdffit2/ipy_ext.py new file mode 100644 index 00000000..4546967e --- /dev/null +++ b/src/diffpy/pdffit2/ipy_ext.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +"""This module defines functions within IPython session to simulate +the old pdffit2 interactive session. + +Usage: %load_ext diffpy.pdffit2.ipy_ext +""" + + +def load_ipython_extension(ipython): + from diffpy.pdffit2 import PdfFit + + pf = PdfFit() + pdf = EasyPDFPlotting(pf) + print(" Type help(pdffit) or help(topic) for information.\n") + ns = dict(pdffit=PdfFit, pdf=pdf) + pf._exportAll(ns) + ipython.user_ns.update(ns) + return + + +class EasyPDFPlotting(object): + """Convenience functions for accessing and plotting PDFfit2 data.""" + + def __init__(self, pdffit_instance): + self._pdffit = pdffit_instance + return + + @property + def r(self): + "R-grid for PDF simulation." + return self._asarray(self._pdffit.getR(), dtype=float) + + @property + def Gobs(self): + "Observed PDF data." + return self._asarray(self._pdffit.getpdf_obs(), dtype=float) + + @property + def Gcalc(self): + "Calculated PDF data." + return self._asarray(self._pdffit.getpdf_fit()) + + @property + def Gdiff(self): + "Difference between the observed and simulated PDF." + return self.Gobs - self.Gcalc + + def showfit(self, offset=None): + """Plot observed and simulated PDFs and the difference curve. + + offset -- offset for the difference curve. + + No return value. + """ + from math import floor + + from matplotlib.pyplot import gca + + cr = self.r + cGobs = self.Gobs + cGcalc = self.Gcalc + cGdiff = self.Gdiff + if offset is None: + offset = floor(min([min(cGobs), min(cGcalc)]) - max(cGdiff)) + ax = gca() + ax.plot(cr, cGobs, "r.", cr, cGcalc, "b-", cr, cGdiff + offset, "g-") + xl = ax.xaxis.get_label().get_text() + yl = ax.yaxis.get_label().get_text() + if xl == "": + ax.set_xlabel("r (A)") + if yl == "": + ax.set_ylabel("G (A**-2)") + return + + def showRw(self): + "Plot cumulative Rw." + from matplotlib.pyplot import gca + + cRw = self._asarray(self._pdffit.getcrw()) + ax = gca() + ax.plot(self.r, cRw) + ax.set_title("Cumulative Rw = %.4f" % cRw[-1]) + ax.set_xlabel("r") + ax.set_ylabel("Rw") + return + + @staticmethod + def _asarray(x, dtype=None): + import numpy + + return numpy.asarray(x, dtype=dtype) + + +# End of class EasyPDFPlotting diff --git a/src/diffpy/pdffit2/output.py b/src/diffpy/pdffit2/output.py new file mode 100644 index 00000000..6d1247cf --- /dev/null +++ b/src/diffpy/pdffit2/output.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +############################################################################## +# +# pdffit2 by DANSE Diffraction group +# Simon J. L. Billinge +# (c) 2007 trustees of the Michigan State University. +# All rights reserved. +# +# File coded by: Pavol Juhas +# +# See AUTHORS.txt for a list of people who contributed. +# See LICENSE.txt for license information. +# +############################################################################## + +"""Take care of sending engine output to given file-like object. +The output file is stored in local module variable stdout. +""" + + +# create module variable stdout + +from sys import stdout as stdout + +# silence pyflakes checker +assert stdout + + +def redirect_stdout(dst): + """Redirect PDFfit2 standard output to a file-like object dst. + The dst value is stored in module variable stdout. + """ + from diffpy.pdffit2.pdffit2 import redirect_stdout + + redirect_stdout(dst) + global stdout + stdout = dst + return + + +# End of file diff --git a/src/diffpy/pdffit2/pdffit.py b/src/diffpy/pdffit2/pdffit.py new file mode 100644 index 00000000..255e8b0f --- /dev/null +++ b/src/diffpy/pdffit2/pdffit.py @@ -0,0 +1,1297 @@ +#!/usr/bin/env python +############################################################################## +# +# pdffit2 by DANSE Diffraction group +# Simon J. L. Billinge +# (c) 2006 trustees of the Michigan State University. +# All rights reserved. +# +# File coded by: Chris Farros, Pavol Juhas +# +# See AUTHORS.txt for a list of people who contributed. +# See LICENSE.txt for license information. +# +############################################################################## + +"""PdfFit class for fitting pdf data to a model.""" + +from __future__ import print_function + +import itertools +import numbers + +import six + +# Load pdffit2 and output modules to the current namespace. +# Note that "import diffpy.pdffit2.output as output" would +# crash with AttributeError when executed during imports of +# parent packages. +from diffpy.pdffit2 import output, pdffit2 + +# helper routines + + +def _format_value_std(value, stdev): + """Convert value to a string with standard deviation in brackets. + + value -- a number + stdev -- standard deviation. Ignored when small compared to value. + + Return string. + """ + if stdev > abs(value) * 1e-8: + s = "%g (%g)" % (value, stdev) + elif str(stdev) == "nan": + s = "%g (NaN)" % value + else: + s = "%g" % value + return s + + +def _format_bond_length(dij, ddij, ij1, symij): + """Return string with formatted bond length info for a pair of atoms. + + dij -- distance between atoms i and j + ddij -- standard deviation of dij. Ignored when small relative to dij. + ij1 -- tuple of atom indices starting at 1 + symij -- tuple of atom symbols + + Return formatted string. + """ + w_smbidx = 10 + w_equals = 30 + s0 = "%s (#%i)" % (symij[0], ij1[0]) + s1 = "%s (#%i)" % (symij[1], ij1[1]) + leader0 = " " + s0.ljust(w_smbidx) + " - " + s1 + " " + leader1 = leader0.ljust(w_equals) + "= " + s = leader1 + _format_value_std(dij, ddij) + " A" + return s + + +def _convertCallable(var): + """Convert an object to the result of its call when callable. + + var -- string or callable object that returns string + + Return var or var(). + """ + if callable(var): + rv = var() + else: + rv = var + return rv + + +# constants + +__intro_message__ = """ +****************************************************************************** +* P D F F I T Version %(version)s * +* %(date)s * +* -------------------------------------------------------------------------- * +* (c) 1998-2007 Trustees of the Michigan State University. * +* (c) 2008-%(year)s Trustees of the Columbia University * +* in the city of New York. * +* * +* Authors: * +* Thomas Proffen - Email: tproffen@lanl.gov * +* Jacques Bloch - Email: bloch@pa.msu.edu * +* Christopher Farrow - Email: clf2121@columbia.edu * +* Pavol Juhas - Email: pjuhas@bnl.gov * +* Simon Billinge - Email: sb2896@columbia.edu * +****************************************************************************** +""" + + +############################################################################## + + +class PdfFit(object): + """Create PdfFit object.""" + + # constants and enumerators from pdffit.h: + # selection of all atoms + selalias = {"ALL": -1} + # constraint type identifiers + FCON = {"USER": 0, "IDENT": 1, "FCOMP": 2, "FSQR": 3} + # scattering type identifiers + Sctp = {"X": 0, "N": 1} + + def _exportAll(self, namespace): + """_exportAll(self, namespace) --> Export all 'public' class methods + into namespace. + + This function allows for a module-level PdfFit object which doesn't have + to be referenced when calling a method. This function makes old (python) + scripts compatible with this class. At the top of the script, create a + pdffit object, and then call this method. Usually, namespace = locals(). + """ + # string aliases (var = "var") + for a in itertools.chain(self.selalias, self.FCON, self.Sctp): + exec("%s = %r" % (a, a), namespace) + public = [ + a + for a in dir(self) + if "__" not in a and a not in ["_handle", "_exportAll", "selalias", "FCON", "Sctp"] + ] + for funcname in public: + namespace[funcname] = getattr(self, funcname) + return + + def intro(): + """Show introductory message.""" + import re + + from diffpy.pdffit2 import __date__, __version__ + + date = __date__[:10] + d = {"version": __version__, "date": date, "year": date[:4] or "2019"} + msg = __intro_message__ % d + + def filler(mx): + return mx.group(0).rstrip(" *").ljust(77) + "*" + + msg_ljust = re.sub("(?m)^(.{1,77}|.{79}.*)$", filler, msg) + print(msg_ljust, file=output.stdout) + return + + intro = staticmethod(intro) + + def add_structure(self, stru): + """add_structure(stru) --> Add new structure to PdfFit instance. + + stru -- instance of Structure class from diffpy.structure. + + No return value. + Raises pdffit2.structureError when stru contains unknown + atom species. + """ + s = stru.writeStr("pdffit") + self.read_struct_string(s) + return + + def read_struct(self, struct): + """read_struct(struct) --> Read structure from file into memory. + + struct -- name of file from which to read structure + + Raises: + pdffit2.calculationError when a lattice cannot be created from the + given structure + pdffit2.structureError when a structure file is malformed + IOError when the file cannot be read from the disk + """ + pdffit2.read_struct(self._handle, struct) + self.stru_files.append(struct) + return + + def read_struct_string(self, struct, name=""): + """read_struct_string(struct, name = "") --> Read structure from + a string into memory. + + struct -- string containing the contents of the structure file + name -- tag with which to label structure + + Raises: + pdffit2.calculationError when a lattice cannot be created from the + given structure + pdffit2.structureError when a structure file is malformed + """ + pdffit2.read_struct_string(self._handle, struct) + self.stru_files.append(name) + return + + def read_data(self, data, stype, qmax, qdamp): + """read_data(data, stype, qmax, qdamp) --> Read pdf data from file into + memory. + + data -- name of file from which to read data + stype -- 'X' (xray) or 'N' (neutron) + qmax -- Q-value cutoff used in PDF calculation. + Use qmax=0 to neglect termination ripples. + qdamp -- instrumental Q-resolution factor + + Raises: IOError when the file cannot be read from disk + """ + pdffit2.read_data(self._handle, data, six.b(stype), qmax, qdamp) + self.data_files.append(data) + return + + def read_data_string(self, data, stype, qmax, qdamp, name=""): + """read_data_string(data, stype, qmax, qdamp, name = "") --> Read + pdf data from a string into memory. + + data -- string containing the contents of the data file + stype -- 'X' (xray) or 'N' (neutron) + qmax -- Q-value cutoff used in PDF calculation. + Use qmax=0 to neglect termination ripples. + qdamp -- instrumental Q-resolution factor + name -- tag with which to label data + """ + pdffit2.read_data_string(self._handle, data, six.b(stype), qmax, qdamp, name) + name = data + self.data_files.append(name) + return + + def read_data_lists(self, stype, qmax, qdamp, r_data, Gr_data, dGr_data=None, name="list"): + """read_data_lists(stype, qmax, qdamp, r_data, Gr_data, dGr_data = + None, name = "list") --> Read pdf data into memory from lists. + + All lists must be of the same length. + stype -- 'X' (xray) or 'N' (neutron) + qmax -- Q-value cutoff used in PDF calculation. + Use qmax=0 to neglect termination ripples. + qdamp -- instrumental Q-resolution factor + r_data -- list of r-values + Gr_data -- list of G(r) values + dGr_data -- list of G(r) uncertainty values + name -- tag with which to label data + + Raises: ValueError when the data lists are of different length + """ + pdffit2.read_data_arrays(self._handle, six.b(stype), qmax, qdamp, r_data, Gr_data, dGr_data, name) + self.data_files.append(name) + return + + def pdfrange(self, iset, rmin, rmax): + """pdfrange(iset, rmin, rmax) --> Set the range of the fit. + + iset -- data set to consider + rmin -- minimum r-value of fit + rmax -- maximum r-value of fit + + Raises: ValueError for bad input values + """ + pdffit2.pdfrange(self._handle, iset, rmin, rmax) + return + + def reset(self): + """reset() --> Clear all stored fit, structure, and parameter data.""" + self.stru_files = [] + self.data_files = [] + pdffit2.reset(self._handle) + return + + def alloc(self, stype, qmax, qdamp, rmin, rmax, bin): + """alloc(stype, qmax, qdamp, rmin, rmax, bin) --> Allocate space + for a PDF calculation. + + The structure from which to calculate the PDF must first be imported + with the read_struct() or read_struct_string() method. + stype -- 'X' (xray) or 'N' (neutron) + qmax -- Q-value cutoff used in PDF calculation. + Use qmax=0 to neglect termination ripples. + qdamp -- instrumental Q-resolution factor + rmin -- minimum r-value of calculation + rmax -- maximum r-value of calculation + bin -- number of data points in calculation + + Raises: + ValueError for bad input values + pdffit.unassignedError when no structure has been loaded + """ + pdffit2.alloc(self._handle, six.b(stype), qmax, qdamp, rmin, rmax, bin) + return + + def calc(self): + """calc() --> Calculate the PDF of the imported structure. + + Space for the calculation must first be allocated with the alloc() + method. + + Raises: + pdffit2.calculationError when allocated space cannot + accomodate calculation + pdffit.unassignedError when space for calculation has not been + allocated + """ + pdffit2.calc(self._handle) + return + + def refine(self, toler=0.00000001): + """refine(toler = 0.00000001) --> Fit the theory to the imported data. + + toler -- tolerance of the fit + + Raises: + pdffit2.calculationError when the model pdf cannot be calculated + pdffit2.constraintError when refinement fails due to bad + constraint + pdffit2.unassigedError when a constraint used but never initialized + using setpar() + """ + step = 0 + finished = 0 + while not finished: + finished = pdffit2.refine_step(self._handle, toler) + step += 1 + return + + def refine_step(self, toler=0.00000001): + """refine_step(toler = 0.00000001) --> Run a single step of the fit. + + toler -- tolerance of the fit + + Raises: + pdffit2.calculationError when the model pdf cannot be calculated + pdffit2.constraintError when refinement fails due to bad + constraint + pdffit2.unassigedError when a constraint used but never initialized + using setpar() + + Returns: 1 (0) if refinement is (is not) finished + """ + self.finished = pdffit2.refine_step(self._handle, toler) + return self.finished + + def save_pdf(self, iset, fname): + """save_pdf(iset, fname) --> Save calculated or fitted PDF to file. + + iset -- data set to save + + Raises: + IOError if file cannot be saved + pdffit2.unassignedError if the data set is undefined + """ + pdffit2.save_pdf(self._handle, iset, fname) + return + + def save_pdf_string(self, iset): + """save_pdf_string(iset) --> Save calculated or fitted PDF to string. + + iset -- data set to save + + Raises: + pdffit2.unassignedError if the data set is undefined + + Returns: string containing contents of save file + """ + pdffilestring = pdffit2.save_pdf(self._handle, iset, "") + return pdffilestring + + def save_dif(self, iset, fname): + """save_dif(iset, fname) --> Save data and fitted PDF difference to + file. + + iset -- data set to save + + Raises: + IOError if file cannot be saved + pdffit2.unassignedError if the data set is undefined + """ + pdffit2.save_dif(self._handle, iset, fname) + return + + def save_dif_string(self, iset): + """save_dif_string(iset) --> Save data and fitted PDF difference to + string. + + iset -- data set to save + + Raises: + pdffit2.unassignedError if the data set is undefined + + Returns: string containing contents of save file + """ + diffilestring = pdffit2.save_dif(self._handle, iset, "") + return diffilestring + + def save_res(self, fname): + """save_res(fname) --> Save fit-specific data to file. + + Raises: + IOError if file cannot be saved + pdffit2.unassignedError if there is no refinement data to save + """ + pdffit2.save_res(self._handle, fname) + return + + def save_res_string(self): + """save_res_string() --> Save fit-specific data to a string. + + Raises: + pdffit2.unassignedError if there is no refinement data to save + + Returns: string containing contents of save file + """ + resfilestring = pdffit2.save_res(self._handle, "") + return resfilestring + + def get_structure(self, ip): + """get_structure(ip) --> Get a copy of specified phase data. + + ip -- index of existing PdfFit phase starting from 1 + + Return Structure object from diffpy.structure. + Raise pdffit2.unassignedError if phase ip is undefined. + """ + from diffpy.structure import PDFFitStructure + + s = self.save_struct_string(ip) + stru = PDFFitStructure() + stru.readStr(s, "pdffit") + return stru + + def save_struct(self, ip, fname): + """save_struct(ip, fname) --> Save structure resulting from fit + to file. + + ip -- phase to save + + Raises: + IOError if file cannot be saved + pdffit2.unassignedError if the data set is undefined + """ + pdffit2.save_struct(self._handle, ip, fname) + return + + def save_struct_string(self, ip): + """save_struct(ip) --> Save structure resulting from fit to string. + + ip -- phase to save + + Raises: + pdffit2.unassignedError if phase ip is undefined. + + Returns: string containing contents of save file + """ + structfilestring = pdffit2.save_struct(self._handle, ip, "") + return structfilestring + + def show_struct(self, ip): + """show_struct(ip) --> Print structure resulting from fit. + + ip -- phase to display + + Raises: pdffit2.unassignedError if the phase is undefined + """ + pdffit2.show_struct(self._handle, ip) + return + + def constrain(self, var, par, fcon=None): + """constrain(var, par[, fcon]) --> Constrain a variable to a parameter. + + A variable can be constrained to a number or equation string. + var -- variable to constrain, such as x(1) + par -- parameter which to constrain the variable. This can be + an integer or an equation string containing a reference + to another parameter. Equation strings use standard c++ + syntax. The value of a constrained parameter is accessed + as @p in an equation string, where p is the parameter. + e.g. + >>> constrain(x(1), 1) + >>> constrain(x(2), "0.5+@1") + fcon -- 'USER', 'IDENT', 'FCOMP', or 'FSQR' + this is an optional parameter, and I don't know how it is + used! + + Raises: + pdffit2.constraintError if a constraint is bad + pdffit2.unassignedError if variable does not yet exist + ValueError if variable index does not exist (e.g. lat(7)) + """ + var_ref = self.__getRef(var) + varnc = _convertCallable(var) + if fcon: + fc = self.FCON[fcon] + pdffit2.constrain_int(self._handle, var_ref, varnc, par, fc) + elif isinstance(par, six.string_types): + pdffit2.constrain_str(self._handle, var_ref, varnc, par) + else: + pdffit2.constrain_int(self._handle, var_ref, varnc, par) + return + + def setpar(self, par, val): + """setpar(par, val) --> Set value of constrained parameter. + + val -- Either a numerical value or a reference to a variable + + Raises: + pdffit2.unassignedError when variable is yet to be assigned + """ + # people do not use parenthesis, e.g., "setpar(3, qdamp)" + # in such case val is a reference to PdfFit method + val = _convertCallable(val) + try: + val = float(val) + pdffit2.setpar_dbl(self._handle, par, val) + except ValueError: + var_ref = self.__getRef(val) + pdffit2.setpar_RV(self._handle, par, var_ref) + return + + def setvar(self, var, val): + """setvar(var, val) --> Set the value of a variable. + + Raises: + pdffit2.unassignedError if variable does not yet exist + ValueError if variable index does not exist (e.g. lat(7)) + """ + var_ref = self.__getRef(var) + pdffit2.setvar(self._handle, var_ref, val) + return + + def getvar(self, var): + """getvar(var) --> Get stored value of a variable. + + Raises: + pdffit2.unassignedError if variable does not yet exist + ValueError if variable index does not exist (e.g. lat(7)) + """ + var_ref = self.__getRef(var) + retval = pdffit2.getvar(self._handle, var_ref) + return retval + + def getrw(self): + """getrw() --> Get normalized total error of the fit rw. + + getrw calculates total fit error summed for all datasets in the fit. + + Return float. + """ + rw = pdffit2.getrw(self._handle) + return rw + + def getcrw(self): + """getcrw() --> Get cumulative Rw for the current dataset. + + Cumulative Rw is a list of Rw partial sums cost values evaluated against + observed PDF data in the error sums evaluated against + the r-points in the fit. + + Raises: pdffit2.unassignedError if no data exists + + Returns: List of crw points, equidistant in r or empty list + if the refine function has not been called yet. + """ + crw = pdffit2.getcrw(self._handle) + return crw + + def getR(self): + """getR() --> Get r-points used in the fit. + + This function should only be called after data has been loaded or + calculated. Before a refinement, the list of r-points will reflect the + data. Afterwords, they will reflect the fit range. + + Raises: pdffit2.unassignedError if no data exists + + Returns: List of equidistance r-points used in fit. + """ + R = pdffit2.getR(self._handle) + return R + + def getpdf_fit(self): + """getpdf_fit() --> Get fitted PDF. + + This function should only be called after a refinement or refinement + step has been done. + + Raises: pdffit2.unassignedError if no data exists + + Returns: List of fitted points, equidistant in r. + """ + pdfdata = pdffit2.getpdf_fit(self._handle) + return pdfdata + + def getpdf_obs(self): + """getpdf_obs() --> Get observed PDF. + + This function should only be called after data has been loaded or + calculated. Before a refinement, the list of r-points will reflect the + data. Afterwords, they will reflect the fit range. + + Raises: pdffit2.unassignedError if no data exists + + Returns: List of data points, equidistant in r. + """ + pdfdata = pdffit2.getpdf_obs(self._handle) + return pdfdata + + def getpdf_diff(self): + """Obtain difference between observed and fitted PDF. + + This function should only be called after data has been loaded or + calculated. Before a refinement, the list of r-points will reflect the + data. Afterwords, they will reflect the fit range. + + Raises: pdffit2.unassignedError if no data exists + + Returns: List of data points, equidistant in r. + """ + Gdiff = pdffit2.getpdf_diff(self._handle) + return Gdiff + + def get_atoms(self, ip=None): + """get_atoms() --> Get element symbols of all atoms in the structure. + + ip -- index of phase to get the elements from (starting from 1) + when ip is not given, use current phase + + This function should only be called after a structure has been loaded. + + Raises: pdffit2.unassignedError if no structure exists + + Returns: List of atom names in structure. + """ + if ip is None: + rv = pdffit2.get_atoms(self._handle) + else: + rv = pdffit2.get_atoms(self._handle, ip) + return rv + + def get_atom_types(self, ip=None): + """get_atom_types() --> Ordered unique element symbols in the structure. + + ip -- index of phase to get the elements from (starting from 1) + when ip is not given, use current phase + + This function should only be called after a structure has been loaded. + + Raises: + pdffit2.unassignedError if no structure exists + + Returns: List of unique atom symbols as they occur in structure. + """ + if ip is None: + rv = pdffit2.get_atom_types(self._handle) + else: + rv = pdffit2.get_atom_types(self._handle, ip) + return rv + + def getpar(self, par): + """getpar(par) --> Get value of parameter. + + Raises: ValueError if parameter does not exists + """ + return pdffit2.getpar(self._handle, par) + + def fixpar(self, par): + """fixpar(par) --> Fix a parameter. + + Fixed parameters are not fitted in a refinement. Passed parameter + can be 'ALL', in which case all parameters are fixed. + + Raises: pdffit.unassignedError when parameter has not been assigned + """ + if isinstance(par, six.string_types) and par.upper() in self.selalias: + par = self.selalias[par.upper()] + pdffit2.fixpar(self._handle, par) + return + + def freepar(self, par): + """freepar(par) --> Free a parameter. + + Freed parameters are fitted in a refinement. Passed parameter + can be 'ALL', in which case all parameters are freed. + + Raises: pdffit.unassignedError when parameter has not been assigned + """ + if isinstance(par, six.string_types) and par.upper() in self.selalias: + par = self.selalias[par.upper()] + pdffit2.freepar(self._handle, par) + return + + def setphase(self, ip): + """setphase(ip) --> Switch to phase ip. + + ip -- index of the phase starting at 1. + + All parameters assigned after this method is called refer only to the + current phase. + + Raises: pdffit.unassignedError when phase does not exist + """ + pdffit2.setphase(self._handle, ip) + return + + def setdata(self, iset): + """setdata(iset) --> Set the data set in focus. + + iset -- integer index of data set starting at 1. + + Raises: pdffit.unassignedError when data set does not exist + """ + pdffit2.setdata(self._handle, iset) + return + + def psel(self, ip): + """psel(ip) --> Include phase ip in calculation of total PDF + + psel('ALL') selects all phases for PDF calculation. + + Raises: pdffit2.unassignedError if selected phase does not exist + """ + if isinstance(ip, six.string_types) and ip.upper() in self.selalias: + ip = self.selalias[ip.upper()] + pdffit2.psel(self._handle, ip) + return + + def pdesel(self, ip): + """pdesel(ip) --> Exclude phase ip from calculation of total PDF. + + pdesel('ALL') excludes all phases from PDF calculation. + + Raises: pdffit2.unassignedError if selected phase does not exist + """ + if isinstance(ip, six.string_types) and ip.upper() in self.selalias: + ip = self.selalias[ip.upper()] + pdffit2.pdesel(self._handle, ip) + return + + def selectAtomType(self, ip, ijchar, symbol, flag): + """Configure partial PDF - mark the specified atom type in phase ip + as included or excluded as a first or second in pair for distance + evaluation. + + ip -- phase index starting at 1 + ijchar -- 'i' or 'j' for first or second in pair + symbol -- element symbol + flag -- bool flag, True for selection, False for exclusion + + Raises: + pdffit2.unassignedError if selected phase does not exist + ValueError for invalid value of ijchar + """ + pdffit2.selectAtomType(self._handle, ip, six.b(ijchar), symbol, flag) + return + + def selectAtomIndex(self, ip, ijchar, aidx, flag): + """Configure partial PDF - mark the atom of given index in phase ip + as included or excluded as a first or second in pair for distance + evaluation. + + ip -- phase index starting at 1 + ijchar -- 'i' or 'j' for first or second in pair + aidx -- integer index of atom starting at 1 + flag -- bool flag, True for selection, False for exclusion + + Raises: + pdffit2.unassignedError if selected phase does not exist + ValueError if atom index or ijchar are invalid + """ + pdffit2.selectAtomIndex(self._handle, ip, six.b(ijchar), aidx, flag) + return + + def selectAll(self, ip, ijchar): + """Configure partial PDF - include all atoms of phase ip as first or + second element in pair for distance evaluation. + + ip -- phase index starting at 1 + ijchar -- 'i' or 'j' for first or second in pair + + Raises: + pdffit2.unassignedError if selected phase does not exist + ValueError if ijchar is invalid + """ + pdffit2.selectAll(self._handle, ip, six.b(ijchar)) + return + + def selectNone(self, ip, ijchar): + """Configure partial PDF - exclude all atoms of phase ip from first + or second element of pair distance evaluation. + + ip -- phase index starting at 1 + ijchar -- 'i' or 'j' for first or second in pair + + Raises: + pdffit2.unassignedError if selected phase does not exist + ValueError if ijchar is invalid + """ + pdffit2.selectNone(self._handle, ip, six.b(ijchar)) + return + + def bang(self, i, j, k): + """bang(i, j, k) --> Show bond angle defined by atoms i, j, k. + + No return value. Use bond_angle() to get the result. + + Raises: ValueError if selected atom(s) does not exist + pdffit.unassignedError when no structure has been loaded + """ + angle, stdev = pdffit2.bond_angle(self._handle, i, j, k) + # indices should be already checked here by bond_angle + atom_symbols = self.get_atoms() + leader = " %s (#%i) - %s (#%i) - %s (#%i) = " % ( + atom_symbols[i - 1], + i, + atom_symbols[j - 1], + j, + atom_symbols[k - 1], + k, + ) + s = leader + _format_value_std(angle, stdev) + " degrees" + print(s, file=output.stdout) + return + + def bond_angle(self, i, j, k): + """bond_angle(i, j, k) --> bond angle defined by atoms i, j, k. + Angle is calculated using the shortest ji and jk lengths with + respect to periodic boundary conditions. + + i, j, k -- atom indices starting at 1 + + Return a tuple of (angle, angle_error), both values are in degrees. + + Raises: ValueError if selected atom(s) does not exist + pdffit.unassignedError when no structure has been loaded + """ + rv = pdffit2.bond_angle(self._handle, i, j, k) + return rv + + def blen(self, *args): + """blen(i, j) --> Show bond length defined by atoms i and j. + + i -- index of the first atom starting at 1 + j -- index of the second atom starting at 1 + + No return value. Use bond_length_atoms() to retrieve result. + + Second form: + + blen(a1, a2, lb, ub) --> Show sorted lengths of all a1-a2 bonds. + + a1 -- symbol of the first element in pair or "ALL" + a2 -- symbol of the second element in pair or "ALL" + lb -- lower bond length boundary + ub -- upper bond length boundary + + No return value. Use bond_length_types() to retrieve results. + + Raises: ValueError if selected atom(s) does not exist + pdffit.unassignedError when no structure has been loaded + """ + # first form + if len(args) == 2: + dij, ddij = self.bond_length_atoms(*args[0:2]) + atom_symbols = self.get_atoms() + ij = (args[0], args[1]) + # indices were already checked in bond_length_atoms call + assert (0 <= min(ij) - 1) and (max(ij) - 1 < len(atom_symbols)) + symij = (atom_symbols[ij[0] - 1].upper(), atom_symbols[ij[1] - 1].upper()) + print(_format_bond_length(dij, ddij, ij, symij), file=output.stdout) + # second form + elif len(args) == 4: + a1, a2, lb, ub = args + try: + atom_types = self.get_atom_types() + if isinstance(a1, numbers.Integral): + a1 = atom_types[a1 - 1] + if isinstance(a2, numbers.Integral): + a2 = atom_types[a2 - 1] + except IndexError: + # index of non-existant atom type + return + # arguments are OK here, get bond length dictionary + bld = pdffit2.bond_length_types(self._handle, a1, a2, lb, ub) + s = "(%s,%s) bond lengths in [%gA,%gA] for current phase :" % (a1, a2, lb, ub) + print(s, file=output.stdout) + atom_symbols = self.get_atoms() + npts = len(bld["dij"]) + for idx in range(npts): + dij = bld["dij"][idx] + ddij = bld["ddij"][idx] + ij0 = bld["ij0"][idx] + ij1 = bld["ij1"][idx] + symij = (atom_symbols[ij0[0]], atom_symbols[ij0[1]]) + s = _format_bond_length(dij, ddij, ij1, symij) + print(s, file=output.stdout) + print(file=output.stdout) + if not bld["dij"]: + print(" *** No pairs found ***", file=output.stdout) + else: + emsg = "blen() takes 2 or 4 arguments (%i given)" % len(args) + raise TypeError(emsg) + # done + return + + def bond_length_atoms(self, i, j): + """bond_length_atoms(i, j) --> shortest distance between atoms i, j. + Periodic boundary conditions are applied to find the shortest bond. + + i -- index of the first atom starting at 1 + j -- index of the second atom starting at 1 + + Return a tuple of (distance, distance_error). + + Raises: ValueError if selected atom(s) does not exist + pdffit.unassignedError when no structure has been loaded. + """ + rv = pdffit2.bond_length_atoms(self._handle, i, j) + return rv + + def bond_length_types(self, a1, a2, lb, ub): + """bond_length_types(a1, a2, lb, ub) --> get all a1-a2 distances. + + a1 -- symbol of the first element in pair or "ALL" + a2 -- symbol of the second element in pair or "ALL" + lb -- lower bond length boundary + ub -- upper bond length boundary + + Return a dictionary of distance data containing + + dij : list of bond lenghts within given bounds + ddij : list of bond legnth standard deviations + ij0 : pairs of atom indices starting from 0 + ij1 : pairs of atom indices starting from 1 + + Raises: ValueError if selected atom(s) does not exist + pdffit.unassignedError when no structure has been loaded. + """ + rv = pdffit2.bond_length_types(self._handle, a1, a2, lb, ub) + return rv + + def show_scat(self, stype): + """show_scat(stype) --> Print scattering length for all atoms in + the current phase. + + stype -- 'X' (xray) or 'N' (neutron). + + Raises: pdffit2.unassignedError if no phase exists + """ + print(self.get_scat_string(stype), file=output.stdout) + return + + def get_scat_string(self, stype): + """get_scat_string(stype) --> Get string with scattering factors + of all atoms in the current phase. + + stype -- 'X' (xray) or 'N' (neutron). + + Raises: + pdffit2.unassignedError if no phase exists + + Returns: string with all scattering factors. + """ + return pdffit2.get_scat_string(self._handle, six.b(stype)) + + def get_scat(self, stype, element): + """get_scat(stype, element) --> Get active scattering factor for + given element. If scattering factor has been changed using + set_scat the result may depend on the active phase. When no + phase has been loaded, return the standard value. + + stype -- 'X' (xray) or 'N' (neutron). + element -- case-insensitive element symbol such as "Na" or "CL" + + Return float. + + Raises: + ValueError if element is not known. + """ + rv = pdffit2.get_scat(self._handle, six.b(stype), element) + return rv + + def set_scat(self, stype, element, value): + """set_scat(stype, element, value) --> Set custom scattering factor + for given element. The new scattering factor applies only for the + current phase, in other phases it keeps its default value. + + stype -- 'X' (xray) or 'N' (neutron). + element -- case-insensitive element symbol such as "Na" or "CL" + value -- new value of scattering factor + + No return value. + + Raises: + pdffit2.unassignedError if no phase exists. + ValueError if element is not known. + + See also reset_scat, get_scat. + """ + pdffit2.set_scat(self._handle, six.b(stype), element, value) + return + + def reset_scat(self, element): + """reset_scat(stype, element) --> Reset scattering factors for + given element to their standard values. The reset_scat applies + only for the current phase. + + element -- case-insensitive element symbol such as "Na" or "CL" + Raises: + pdffit2.unassignedError if no phase exists + ValueError if element is not known. + """ + pdffit2.reset_scat(self._handle, element) + return + + def num_atoms(self): + """num_atoms() --> Get number of atoms in current phase. + + Raises: pdffit2.unassignedError if no atoms exist + """ + return pdffit2.num_atoms(self._handle) + + def num_phases(self): + """num_phases() --> Number of phases loaded in PdfFit instance. + + Use setphase to bring a specific phase in focus. + + Return integer. + """ + n = pdffit2.num_phases(self._handle) + return n + + def num_datasets(self): + """num_datasets() --> Number of datasets loaded in PdfFit instance. + + Use setdata to bring a specific dataset in focus. + + Return integer. + """ + n = pdffit2.num_datasets(self._handle) + return n + + def phase_fractions(self): + """phase_fractions() --> relative phase fractions for current dataset. + Convert phase scale factors to relative phase fractions given the + scattering type of current dataset. + + Return a dictionary of phase fractions with following keys: + + "atom" -- list of fractions normalized to atom count + "stdatom" -- errors of atom count fractions + "cell" -- list of fractions normalized to unit cell count + "stdcell" -- errors of unit cell count fractions + "mass" -- list of relative weight fractions + "stdmass" -- errors of relative weight fractions + + Raises: pdffit2.unassignedError if no dataset exists. + """ + return pdffit2.phase_fractions(self._handle) + + # Begin refinable variables. + + def lat(n): + """lat(n) --> Get reference to lattice variable n. + + n can be an integer or a string representing the lattice variable. + 1 <==> 'a' + 2 <==> 'b' + 3 <==> 'c' + 4 <==> 'alpha' + 5 <==> 'beta' + 6 <==> 'gamma' + """ + LatParams = {"a": 1, "b": 2, "c": 3, "alpha": 4, "beta": 5, "gamma": 6} + if isinstance(n, six.string_types): + n = LatParams[n] + return "lat(%i)" % n + + lat = staticmethod(lat) + + def x(i): + """x(i) --> Get reference to x-value of atom i.""" + return "x(%i)" % i + + x = staticmethod(x) + + def y(i): + """y(i) --> Get reference to y-value of atom i.""" + return "y(%i)" % i + + y = staticmethod(y) + + def z(i): + """z(i) --> Get reference to z-value of atom i.""" + return "z(%i)" % i + + z = staticmethod(z) + + def u11(i): + """u11(i) --> Get reference to U(1,1) for atom i. + + U is the anisotropic thermal factor tensor. + """ + return "u11(%i)" % i + + u11 = staticmethod(u11) + + def u22(i): + """u22(i) --> Get reference to U(2,2) for atom i. + + U is the anisotropic thermal factor tensor. + """ + return "u22(%i)" % i + + u22 = staticmethod(u22) + + def u33(i): + """u33(i) --> Get reference to U(3,3) for atom i. + + U is the anisotropic thermal factor tensor. + """ + return "u33(%i)" % i + + u33 = staticmethod(u33) + + def u12(i): + """u12(i) --> Get reference to U(1,2) for atom i. + + U is the anisotropic thermal factor tensor. + """ + return "u12(%i)" % i + + u12 = staticmethod(u12) + + def u13(i): + """u13(i) --> Get reference to U(1,3) for atom i. + + U is the anisotropic thermal factor tensor. + """ + return "u13(%i)" % i + + u13 = staticmethod(u13) + + def u23(i): + """u23(i) --> Get reference to U(2,3) for atom i. + + U is the anisotropic thermal factor tensor. + """ + return "u23(%i)" % i + + u23 = staticmethod(u23) + + def occ(i): + """occ(i) --> Get reference to occupancy of atom i.""" + return "occ(%i)" % i + + occ = staticmethod(occ) + + def pscale(): + """pscale() --> Get reference to pscale. + + pscale is the fraction of the total structure that the current phase + represents. + """ + return "pscale" + + pscale = staticmethod(pscale) + + def sratio(): + """sratio() --> Get reference to sigma ratio. + + The sigma ratio determines the reduction in the Debye-Waller factor for + distances below rcut. + """ + return "sratio" + + sratio = staticmethod(sratio) + + def delta1(): + """delta1() --> Get reference to 1/R peak sharpening factor.""" + return "delta1" + + delta1 = staticmethod(delta1) + + def delta2(): + """delta2() --> Reference to (1/R^2) sharpening factor. + The phenomenological correlation constant in the Debye-Waller factor. + The (1/R^2) peak sharpening factor. + """ + return "delta2" + + delta2 = staticmethod(delta2) + + def dscale(): + """dscale() --> Get reference to dscale. + + The data scale factor. + """ + return "dscale" + + dscale = staticmethod(dscale) + + def qdamp(): + """qdamp() --> Get reference to qdamp. + + Qdamp controls PDF damping due to instrument Q-resolution. + """ + return "qdamp" + + qdamp = staticmethod(qdamp) + + def qbroad(): + """qbroad() --> Get reference to qbroad. + + Quadratic peak broadening factor. + """ + return "qbroad" + + qbroad = staticmethod(qbroad) + + def spdiameter(): + """spdiameter() --> Get reference to spdiameter (phase property). + + Diameter value for the spherical particle PDF correction. + Spherical envelope is not applied when spdiameter equals 0. + """ + return "spdiameter" + + spdiameter = staticmethod(spdiameter) + + def stepcut(): + """stepcut() --> Get reference to stepcut (phase property). + + stepcut is cutoff radius for empirical step-function PDF envelope. + stepcut can be used to approximate loss of pair correlations + in amorphous phase. stepcut cannot be refined. + + Step cutoff is not applied when stepcut equals 0. + """ + return "stepcut" + + stepcut = staticmethod(stepcut) + + def rcut(): + """rcut() --> Get reference to rcut. + + rcut is the value of r below which peak sharpening, defined by + the sigma ratio (sratio), applies. rcut cannot be refined. + """ + return "rcut" + + rcut = staticmethod(rcut) + + # End refinable variables. + + def __init__(self): + + self.stru_files = [] + self.data_files = [] + + self._handle = pdffit2.create() + self.intro() + return + + def __getRef(self, var_string): + """Return the actual reference to the variable in the var_string. + + This function must be called before trying to actually reference an + internal variable. See the constrain method for an example. + + Raises: + pdffit2.unassignedError if variable is not yet assigned + ValueError if variable index does not exist (e.g. lat(7)) + """ + var_string = _convertCallable(var_string) + arg_int = None + try: + method_string, arg_string = var_string.split("(") + method_string = method_string.strip() + arg_int = int(arg_string.strip(")").strip()) + except ValueError: # There is no arg_string + method_string = var_string.strip() + + f = getattr(pdffit2, method_string) + if arg_int is None: + retval = f(self._handle) + else: + retval = f(self._handle, arg_int) + return retval + + +# End of class PdfFit + + +# End of file diff --git a/src/diffpy/pdffit2/tests/ExceptionsTest.py b/src/diffpy/pdffit2/tests/ExceptionsTest.py new file mode 100644 index 00000000..5dee1b75 --- /dev/null +++ b/src/diffpy/pdffit2/tests/ExceptionsTest.py @@ -0,0 +1,794 @@ +#!/usr/bin/env python +############################################################################## +# +# pdffit2 by DANSE Diffraction group +# Simon J. L. Billinge +# (c) 2006 trustees of the Michigan State University. +# All rights reserved. +# +# File coded by: Chris Farrow +# +# See AUTHORS.txt for a list of people who contributed. +# See LICENSE.txt for license information. +# +############################################################################## + + +import unittest + +from diffpy.pdffit2 import PdfFit, pdffit2 +from diffpy.pdffit2.tests.pdffit2testutils import datafile + + +class read_structExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_IOError(self): + """raise IOError when structure file does not exist""" + self.assertRaises(IOError, self.P.read_struct, "Nofile.stru") + + def test_structureError(self): + """raise pdffit2.structureError when structure is malformed""" + self.assertRaises(pdffit2.structureError, self.P.read_struct, datafile("badNi.stru")) + + def test_structureErrorZeroVolume(self): + """raise pdffit2.structureError when unit cell volume is negative""" + # I don't know how to test for this, but it's in the library code + self.assertRaises(pdffit2.structureError, self.P.read_struct, datafile("badNiZeroVolume.stru")) + + +class read_dataExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_IOError(self): + """raise IOError when data file does not exist""" + self.assertRaises(IOError, self.P.read_data, "Nofile.dat", "X", 25.0, 0.5) + + def test_dataError(self): + """raise pdffit2.dataError when data has improper spacing""" + self.assertRaises(pdffit2.dataError, self.P.read_data, datafile("badNi.dat"), "X", 25.0, 0.5) + + +class read_data_listsExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.r_data = [0.1, 0.2] + self.Gr_data = [1, 2, 3] + self.qmax = 10 + self.qdamp = 0.5 + + def tearDown(self): + del self.P + + def test_ValueError1(self): + """raise ValueError when lists are of different length""" + self.assertRaises( + ValueError, self.P.read_data_lists, "X", self.qmax, self.qdamp, self.r_data, self.Gr_data + ) + + def test_ValueError2(self): + """raise ValueError when qmax < 0""" + self.assertRaises( + ValueError, self.P.read_data_lists, "X", -self.qmax, self.qdamp, self.r_data, self.Gr_data + ) + + def test_ValueError3(self): + """raise ValueError when qdamp < 0""" + self.assertRaises( + ValueError, self.P.read_data_lists, "X", self.qmax, -self.qdamp, self.r_data, self.Gr_data + ) + + def test_dataError(self): + """raise pdffit2.dataError when data has improper spacing""" + r_data = [0.1, 0.52, 0.2] + self.assertRaises( + pdffit2.dataError, self.P.read_data_lists, "X", self.qmax, self.qdamp, r_data, self.Gr_data + ) + + +class pdfrangeExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.rmin = 4.0 + self.rmax = 10.0 + + def tearDown(self): + del self.P + + def test_ValueError1(self): + """raise ValueError when iset does not exist""" + self.assertRaises(ValueError, self.P.pdfrange, self.iset, self.rmin, self.rmax) + + def test_ValueError2(self): + """raise ValueError when rmax < rmin""" + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertRaises(ValueError, self.P.pdfrange, self.iset, self.rmax, self.rmin) + + def test_ValueError3(self): + """raise ValueError when range outside of data""" + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertRaises(ValueError, self.P.pdfrange, self.iset, -self.rmin, self.rmax) + + +class allocExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.qmax = 25 + self.qdamp = 0.5 + self.rmin = 4.0 + self.rmax = 10.0 + self.bin = 100 + + def tearDown(self): + del self.P + + def test_ValueError1(self): + """raise ValueError when qmax < 0""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.alloc, "X", -self.qmax, self.qdamp, self.rmin, self.rmax, self.bin) + + def test_ValueError2(self): + """raise ValueError when qdamp < 0""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.alloc, "X", self.qmax, -self.qdamp, self.rmin, self.rmax, self.bin) + + def test_ValueError3(self): + """raise ValueError when rmin < 0""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.alloc, "X", self.qmax, self.qdamp, -self.rmin, self.rmax, self.bin) + + def test_ValueError4(self): + """raise ValueError when rmax < 0""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.alloc, "X", self.qmax, self.qdamp, self.rmin, -self.rmax, self.bin) + + def test_ValueError5(self): + """raise ValueError when bin < 0""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.alloc, "X", self.qmax, self.qdamp, self.rmin, self.rmax, -self.bin) + + def test_ValueError6(self): + """raise ValueError when rmax < rmin""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.alloc, "X", self.qmax, self.qdamp, self.rmax, self.rmin, self.bin) + + def test_ValueError7(self): + """raise ValueError when qdamp < 0""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.alloc, "X", self.qmax, self.qdamp, self.rmin, self.rmax, -self.bin) + + +class calcExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.P.read_struct(datafile("Ni.stru")) + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when no space has been allocated""" + self.assertRaises(pdffit2.unassignedError, self.P.calc) + + +# PJ 2006-03-06 +# +# test_calculationError raised exception, because for Qmax=0.5, rmax would +# increase to 4010A and this would throw exception when the size of bnd array +# would exceed MAXBND limit. However, bnd vector can now grow, thus rmax +# is not limited and the following test would hang indefinitely. + +# def test_calculationError(self): +# """raise pdffit2.calculationError when calculation cannot be done""" +# self.P.alloc('X', 0.01, 0.5, 2, 10, 100) +# self.assertRaises(pdffit2.calculationError, self.P.calc) + + +# class refineExceptions(unittest.TestCase): +# I'm not sure how to test these + +# def setUp(self): +# self.P = PdfFit() +# +# def test_calculationError(self): +# """raise pdffit2.calculationError when model pdf can't be calculated""" +# #self.assertRaises(pdffit2.calculationError, self.P.calc) +# +# def test_constraintError(self): +# """raise pdffit2.constraintError for bad constraint(s)""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) + + +# class refine_stepExceptions(unittest.TestCase): +# I'm not sure how to test these + +# def setUp(self): +# self.P = PdfFit() +# +# def test_calculationError(self): +# """raise pdffit2.calculationError when model pdf can't be calculated""" +# #self.assertRaises(pdffit2.calculationError, self.P.calc) +# +# def test_constraintError(self): +# """raise pdffit2.constraintError for bad constraint(s)""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) + + +class save_pdfExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.strufile = "temp.pdf" + + def tearDown(self): + del self.P + + def test_IOError(self): + """raise IOError when structure cannot be saved""" + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + self.P.calc() + self.assertRaises(IOError, self.P.save_pdf, 1, "nodir183160/" + self.strufile) + + def test_unassignedError(self): + """raise pdffit2.unassignedError when structure is undefined""" + self.assertRaises(pdffit2.unassignedError, self.P.save_pdf, 1, self.strufile) + + +class save_difExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.strufile = "temp.dif" + + def tearDown(self): + del self.P + + def test_IOError(self): + """raise IOError when dif cannot be saved""" + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + self.P.calc() + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertRaises(IOError, self.P.save_dif, 1, "nodir183160/" + self.strufile) + + def test_unassignedError(self): + """raise pdffit2.unassignedError when structure is undefined""" + self.assertRaises(pdffit2.unassignedError, self.P.save_dif, 1, self.strufile) + + +class save_resExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.resfile = "temp.res" + + def tearDown(self): + del self.P + + def test_IOError(self): + """raise IOError when residual file cannot be saved""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 30.0, 0.0) + self.P.constrain(self.P.lat(1), 1) + self.P.setpar(1, 3.0) + self.P.pdfrange(1, 2.0, 10.0) + self.P.refine_step() + self.assertRaises(IOError, self.P.save_res, "nodir183160/" + self.resfile) + + def test_unassignedError(self): + """raise pdffit2.unassignedError when structure is undefined""" + self.assertRaises(pdffit2.unassignedError, self.P.save_res, self.resfile) + + +class save_structExceptions(unittest.TestCase): + # Same code as show_struct + + def setUp(self): + self.P = PdfFit() + self.strufile = "temp.stru" + + def tearDown(self): + del self.P + + def test_IOError(self): + """raise IOError when structure cannot be saved""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(IOError, self.P.save_struct, 1, "nodir183160/" + self.strufile) + + def test_unassignedError(self): + """raise pdffit2.unassignedError when structure is undefined""" + self.assertRaises(pdffit2.unassignedError, self.P.save_struct, 1, self.strufile) + + +class constrainExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.par = 1 + return + + def tearDown(self): + self.P = None + return + + def test_constraintError(self): + """raise constraintError when constraint is bad""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.constrain("x(1)", "junk+@1") + self.P.setpar(1, 0.01) + self.assertRaises(pdffit2.constraintError, self.P.calc) + self.assertRaises(pdffit2.constraintError, self.P.refine) + return + + def test_unassignedError(self): + """raise pdffit2.unassignedError when variable is undefined""" + self.assertRaises(pdffit2.unassignedError, self.P.constrain, self.P.x(1), self.par) + return + + def test_ValueError(self): + """raise ValueError when a variable index does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.constrain, self.P.x(6), self.par) + return + + def test_constrainNonRefVar(self): + "raise constraintError when attempting to constrain non-refinables" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.constraintError, self.P.constrain, "rcut", "@7") + self.assertRaises(pdffit2.constraintError, self.P.constrain, "rcut", 13) + self.assertRaises(pdffit2.constraintError, self.P.constrain, "stepcut", "@17") + return + + +class setvarExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.val = 3.0 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when variable is undefined""" + self.assertRaises(pdffit2.unassignedError, self.P.setvar, self.P.lat(1), self.val) + + def test_ValueError(self): + """raise ValueError when a variable index does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.setvar, self.P.lat(7), self.val) + + +class getvarExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when variable is undefined""" + self.assertRaises(pdffit2.unassignedError, self.P.getvar, self.P.pscale()) + + def test_ValueError(self): + """raise ValueError when a variable index does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.getvar, self.P.lat(7)) + + +class getRExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when data does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.getR) + + +class getpdf_fitExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when data does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.getpdf_fit) + + +class getpdf_obsExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when data does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.getpdf_obs) + + +class getpdf_diffExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when data does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.getpdf_diff) + + +class get_atomsExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when data does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.get_atoms) + + +class getparExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """raise pdffit2.unassignedError when parameter does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.getpar, 1) + + def test_unassignedError2(self): + """raise pdffit2.unassignedError when parameter does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.P.constrain(self.P.lat(1), 2) + self.assertRaises(pdffit2.unassignedError, self.P.getpar, 1) + + +class pselExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.ip = 1 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when phase does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + def test_unassignedError2(self): + """raise pdffit2.unassignedError when phase does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + +class pdeselExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.ip = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """raise pdffit2.unassignedError when phase does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + def test_unassignedError2(self): + """raise pdffit2.unassignedError when phase does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + +class selectAtomTypeExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """raise pdffit2.unassignedError when set does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.selectAtomType, self.iset, "i", "Ni", True) + + def test_unassignedError2(self): + """raise pdffit2.unassignedError when set does not exist""" + self.P.read_struct(datafile("Ni.stru")) + # selectAtomType should pass with one phase defined + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAtomType(self.iset, "i", "Ni", True) + self.P.selectAtomType(self.iset, "j", "Ni", False) + # but fail for phase 2 which is not present + self.assertRaises(pdffit2.unassignedError, self.P.selectAtomType, 2, "i", "Ca", True) + + def test_ijcharValueError(self): + """raise ValueError when ijchar is neither 'i' nor 'j'""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAtomType(self.iset, "i", "Ni", True) + self.P.selectAtomType(self.iset, "j", "Ni", True) + self.assertRaises(ValueError, self.P.selectAtomType, self.iset, "k", "Ni", True) + + +class selectAtomIndexExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """raise pdffit2.unassignedError when set does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.selectAtomIndex, self.iset, "i", self.i, True) + + def test_unassignedError2(self): + """raise pdffit2.unassignedError when set does not exist""" + self.P.read_struct(datafile("Ni.stru")) + # pass for phase 1 + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAtomIndex(self.iset, "i", 1, True) + self.P.selectAtomIndex(self.iset, "i", 2, False) + # fail for phase 2 + self.assertRaises(pdffit2.unassignedError, self.P.selectAtomIndex, 2, "i", 1, True) + + def test_ValueError(self): + """raise ValueError when selected atom does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(ValueError, self.P.selectAtomIndex, self.iset, "i", 6, True) + + +class selectAllExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """raise pdffit2.unassignedError when set does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.selectAll, self.iset, "i") + + def test_unassignedError2(self): + """raise pdffit2.unassignedError when set does not exist""" + self.P.read_struct(datafile("Ni.stru")) + # fail when there is no dataset + self.assertRaises(pdffit2.unassignedError, self.P.selectAll, self.iset, "i") + # pass with dataset + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAll(self.iset, "i") + self.P.selectAll(self.iset, "j") + # fail for phase 2 + self.assertRaises(pdffit2.unassignedError, self.P.selectAll, 2, "i") + self.assertRaises(pdffit2.unassignedError, self.P.selectAll, 2, "j") + + +class selectNoneExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """raise pdffit2.unassignedError when set does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.selectNone, self.iset, "i") + + def test_unassignedError2(self): + """raise pdffit2.unassignedError when set does not exist""" + self.P.read_struct(datafile("Ni.stru")) + # fail when there is no dataset + self.assertRaises(pdffit2.unassignedError, self.P.selectNone, self.iset, "i") + # pass with dataset + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectNone(self.iset, "i") + self.P.selectNone(self.iset, "j") + # fail for phase 2 + self.assertRaises(pdffit2.unassignedError, self.P.selectNone, 2, "i") + self.assertRaises(pdffit2.unassignedError, self.P.selectNone, 2, "j") + + +class bangExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.a1 = 1 + self.a2 = 2 + self.a3 = 3 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when phase does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.bang, self.a1, self.a2, self.a3) + + def test_ValueError1(self): + """raise ValueError when selected atom(s) does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(ValueError, self.P.bang, 0, self.a2, self.a3) + + def test_ValueError2(self): + """raise ValueError when selected atom(s) does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.bang, self.a1, -1, self.a3) + + def test_ValueError3(self): + """raise ValueError when selected atom(s) does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.bang, self.a1, self.a2, 6) + + +class blenExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.a1 = 1 + self.a2 = 2 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when no data exists""" + self.assertRaises(pdffit2.unassignedError, self.P.blen, self.a1, self.a2) + + def test_ValueError1(self): + """raise ValueError when selected atom(s) does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.blen, 0, self.a2) + + def test_ValueError2(self): + """raise ValueError when selected atom(s) does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.blen, self.a1, 6) + + def test_ValueError3(self): + """raise ValueError when selected atom(s) does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.blen, 0, 6) + + +class show_scatExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when phase does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.show_scat, "X") + + +# class set_scatExceptions(unittest.TestCase): +# I'm not sure how to use this function + +# def setUp(self): +# self.P = PdfFit() +# +# def test_unassignedError1(self): +# """raise pdffit2.unassignedError when phase does not exist""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) +# +# def test_unassignedError2(self): +# """raise pdffit2.unassignedError when phase does not exist""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) +# +# def test_ValueError(self): +# """raise pdffit2.unassignedError when selected atom does not exist""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) + + +class num_atomsExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when no atoms exist""" + self.assertRaises(pdffit2.unassignedError, self.P.num_atoms) + + +class fixparExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when parameter does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.fixpar, 1) + + +class freeparExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when parameter does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.freepar, 1) + + +class setphaseExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when phase does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.setphase, 2) + + +class setdataExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when data set does not exist""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.setdata, 2) + + +class getcrwExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """raise pdffit2.unassignedError when data does not exist""" + self.assertRaises(pdffit2.unassignedError, self.P.getcrw) + + +# main +if __name__ == "__main__": + # suite = unittest.makeSuite(num_atomsExceptions) + # unittest.TextTestRunner(verbosity=3).run(suite) + # testcase = calcExceptions('test_unassignedError') + # unittest.TextTestRunner(verbosity=3).run(testcase) + unittest.main() + +# End of file diff --git a/src/diffpy/pdffit2/tests/TestPdfFit.py b/src/diffpy/pdffit2/tests/TestPdfFit.py new file mode 100644 index 00000000..70712356 --- /dev/null +++ b/src/diffpy/pdffit2/tests/TestPdfFit.py @@ -0,0 +1,761 @@ +#!/usr/bin/env python + +"""Unit tests for PdfFit.py +""" + +import unittest + +from diffpy.pdffit2 import PdfFit, pdffit2 +from diffpy.pdffit2.tests.pdffit2testutils import capture_output, datafile +from diffpy.structure import loadStructure + +# ---------------------------------------------------------------------------- + + +class TestPdfFit(unittest.TestCase): + places = 6 + + def setUp(self): + self.P = PdfFit() + return + + def tearDown(self): + del self.P + return + + def test__exportAll(self): + "check PdfFit._exportAll()" + ns = {} + self.P._exportAll(ns) + self.assertEqual("ALL", ns["ALL"]) + self.assertEqual("FSQR", ns["FSQR"]) + self.assertEqual("N", ns["N"]) + self.assertIs("N", ns["N"]) + self.assertIs(self.P.lat, ns["lat"]) + self.assertEqual(self.P.reset, ns["reset"]) + return + + # def test_intro(self): + # """check PdfFit.intro() + # """ + # return + + def test_add_structure(self): + """check PdfFit.add_structure()""" + ni = loadStructure(datafile("Ni.stru")) + self.P.add_structure(ni) + self.assertEqual(4, self.P.num_atoms()) + return + + # def test_read_struct(self): + # """check PdfFit.read_struct() + # """ + # return + # + # def test_read_struct_string(self): + # """check PdfFit.read_struct_string() + # """ + # return + # + # def test_read_data(self): + # """check PdfFit.read_data() + # """ + # return + + def test_read_data_string(self): + """check PdfFit.read_data_string()""" + pf = self.P + with open(datafile("300K.gr")) as fp: + s = fp.read() + self.assertEqual([], pf.data_files) + pf.read_data_string(s, "N", 32, 0.03, "lmo") + self.assertEqual(1, len(pf.data_files)) + gobs = pf.getpdf_obs() + self.assertEqual(2000, len(gobs)) + self.assertEqual(0.384, gobs[-1]) + self.assertEqual(0.03, pf.getvar("qdamp")) + return + + # def test_read_data_lists(self): + # """check PdfFit.read_data_lists() + # """ + # return + # + # def test_pdfrange(self): + # """check PdfFit.pdfrange() + # """ + # return + # + # def test_reset(self): + # """check PdfFit.reset() + # """ + # return + + def test_alloc(self): + """check PdfFit.alloc()""" + # alloc and read_struct can be called in any order. + self.P.alloc("X", 25, 0.0, 0.01, 10, 1000) + # without a structure calculated PDF is all zero + self.P.calc() + Gzero = self.P.getpdf_fit() + self.assertEqual(1000 * [0.0], Gzero) + self.P.read_struct(datafile("Ni.stru")) + self.P.calc() + # check r-values + r = self.P.getR() + self.assertEqual(1000, len(r)) + for i in range(1000): + self.assertAlmostEqual(0.01 * (i + 1), r[i], self.places) + Gfit_alloc_read = self.P.getpdf_fit() + # now try the other order + self.P.reset() + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 25, 0.0, 0.01, 10, 1000) + self.P.calc() + Gfit_read_alloc = self.P.getpdf_fit() + # and they should be the same + self.assertEqual(Gfit_read_alloc, Gfit_alloc_read) + return + + # def test_calc(self): + # """check PdfFit.calc() + # """ + # return + # + # def test_refine(self): + # """check PdfFit.refine() + # """ + # return + # + # def test_refine_step(self): + # """check PdfFit.refine_step() + # """ + # return + # + # def test_save_pdf(self): + # """check PdfFit.save_pdf() + # """ + # return + # + # def test_save_pdf_string(self): + # """check PdfFit.save_pdf_string() + # """ + # return + # + # def test_save_dif(self): + # """check PdfFit.save_dif() + # """ + # return + # + # def test_save_dif_string(self): + # """check PdfFit.save_dif_string() + # """ + # return + # + # def test_save_res(self): + # """check PdfFit.save_res() + # """ + # return + # + # def test_save_res_string(self): + # """check PdfFit.save_res_string() + # """ + # return + + def test_get_structure(self): + """check PdfFit.get_structure()""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + stru1 = self.P.get_structure(1) + self.assertEqual(4, len(stru1)) + self.assertEqual("Ni", stru1[0].element) + stru2 = self.P.get_structure(2) + self.assertEqual(56, len(stru2)) + self.assertEqual("Ti", stru2[-1].element) + return + + # def test_save_struct(self): + # """check PdfFit.save_struct() + # """ + # return + # + # def test_save_struct_string(self): + # """check PdfFit.save_struct_string() + # """ + # return + # + # def test_show_struct(self): + # """check PdfFit.show_struct() + # """ + # return + # + # def test_constrain(self): + # """check PdfFit.constrain() + # """ + # return + + def test_setpar(self): + """check PdfFit.setpar()""" + pf = self.P + pf.read_struct(datafile("Ni.stru")) + pf.setpar(1, "lat(1)") + self.assertEqual(3.52, pf.getpar(1)) + pf.setpar(1, 4.0) + self.assertEqual(4, pf.getpar(1)) + pf.setpar(1, pf.lat("a")) + self.assertEqual(3.52, pf.getpar(1)) + return + + def test_setvar(self): + """check PdfFit.setvar()""" + pf = self.P + pf.read_struct(datafile("Ni.stru")) + pf.setvar(pf.delta1, 1.2) + self.assertEqual(1.2, pf.getvar(pf.delta1)) + pf.setvar("delta1", 1.7) + self.assertEqual(1.7, pf.getvar("delta1")) + return + + # def test_getvar(self): + # """check PdfFit.getvar() + # """ + # return + # + # def test_getrw(self): + # """check PdfFit.getrw() + # """ + # return + # + # def test_getR(self): + # """check PdfFit.getR() + # """ + # return + # + # def test_getpdf_fit(self): + # """check PdfFit.getpdf_fit() + # """ + # return + # + # def test_getpdf_obs(self): + # """check PdfFit.getpdf_obs() + # """ + # return + # + # def test_getpdf_diff(self): + # """check PdfFit.getpdf_diff() + # """ + # return + + def test_get_atoms(self): + """check PdfFit.get_atoms()""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.setphase(1) + a1 = self.P.get_atoms() + a2 = self.P.get_atoms(2) + self.assertEqual(4 * ["NI"], a1) + self.assertEqual(8 * ["PB"] + 24 * ["O"] + 8 * ["SC"] + 8 * ["W"] + 8 * ["TI"], a2) + return + + def test_get_atom_types(self): + """check PdfFit.get_atom_types()""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.setphase(1) + atp1 = self.P.get_atom_types() + atp2 = self.P.get_atom_types(2) + self.assertEqual(["NI"], atp1) + self.assertEqual(["PB", "O", "SC", "W", "TI"], atp2) + return + + def test_num_phases(self): + """check PdfFit.num_phases()""" + self.assertEqual(0, self.P.num_phases()) + self.P.read_struct(datafile("Ni.stru")) + self.assertEqual(1, self.P.num_phases()) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.assertEqual(2, self.P.num_phases()) + self.P.reset() + self.assertEqual(0, self.P.num_phases()) + return + + def test_num_datasets(self): + """check PdfFit.num_datasets()""" + self.assertEqual(0, self.P.num_datasets()) + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertEqual(1, self.P.num_datasets()) + # failed data should not increase num_datasets + try: + self.P.read_data(datafile("badNi.dat")) + except (RuntimeError, TypeError, NameError, ValueError, IOError): + pass + self.assertEqual(1, self.P.num_datasets()) + # alloc should increase number of datasets + # alloc requires a loaded structure + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + self.assertEqual(2, self.P.num_datasets()) + self.P.reset() + self.assertEqual(0, self.P.num_datasets()) + return + + def test_getcrw(self): + """check PdfFit.getcrw()""" + import numpy + + self.assertEqual(0, self.P.num_datasets()) + # Setting qmax=0 so that partial crw are not disturbed by + # termination ripples. + self.P.read_data(datafile("Ni.dat"), "X", 0.0, 0.0) + # crw is empty before data refinement + self.assertEqual([], self.P.getcrw()) + self.P.read_struct(datafile("Ni.stru")) + self.P.pdfrange(1, 2, 19) + self.P.refine() + crw19 = numpy.array(self.P.getcrw()) + self.assertTrue(numpy.all(crw19 >= 0.0)) + # check that crw19 is non decreasing + self.assertTrue(numpy.all(numpy.diff(crw19) >= 0.0)) + # check that crw19 and getrw give the same value + rw19 = crw19[-1] + self.assertAlmostEqual(self.P.getrw(), rw19, self.places) + # renormalize cumulative Rw and compare with Rw at r=15 + Gobs19 = numpy.array(self.P.getpdf_obs()) + Gnorm19 = numpy.sqrt(numpy.sum(Gobs19**2)) + r = numpy.array(self.P.getR()) + idx = numpy.nonzero(r <= 15)[0] + Gnorm15 = numpy.sqrt(numpy.sum(Gobs19[idx] ** 2)) + i15 = idx[-1] + rw15 = crw19[i15] * Gnorm19 / Gnorm15 + self.P.pdfrange(1, 2, r[i15] + 1e-5) + self.P.refine() + self.assertAlmostEqual(self.P.getrw(), rw15, self.places) + return + + def test_getcrw_two_datasets(self): + """check that getcrw() and getrw() are consistent for two datasets.""" + self.P.read_data(datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.pdfrange(1, 2, 8) + self.P.read_data(datafile("300K.gr"), "N", 32.0, 0.0) + self.P.pdfrange(2, 1, 11) + self.P.read_struct(datafile("Ni.stru")) + # mess lattice parameters to have comparable Rw contributions + self.P.setvar("lat(1)", 3) + self.P.setvar("lat(2)", 3) + self.P.setvar("lat(3)", 3) + self.P.refine() + rwtot = self.P.getrw() + self.assertTrue(rwtot > 0.0) + self.P.setdata(1) + rw1 = self.P.getcrw()[-1] + self.P.setdata(2) + rw2 = self.P.getcrw()[-1] + self.assertAlmostEqual(rwtot**2, rw1**2 + rw2**2, self.places) + return + + # def test_getpar(self): + # """check PdfFit.getpar() + # """ + # return + + def test_fixpar(self): + """check PdfFit.fixpar()""" + self.P.fixpar("all") + self.assertRaises(TypeError, self.P.fixpar, "x") + return + + def test_freepar(self): + """check PdfFit.freepar()""" + self.P.freepar("all") + self.assertRaises(TypeError, self.P.freepar, "x") + return + + # def test_setphase(self): + # """check PdfFit.setphase() + # """ + # return + # + # def test_setdata(self): + # """check PdfFit.setdata() + # """ + # return + # + def test_psel(self): + """check PdfFit.psel()""" + + def doalloc(): + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + return + + self.assertRaises(pdffit2.unassignedError, self.P.psel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.psel, 1) + self.P.read_struct(datafile("Ni.stru")) + doalloc() + self.P.calc() + G1 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(datafile("PbScW25TiO3.stru")) + doalloc() + self.P.calc() + G2 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + doalloc() + self.P.pdesel("ALL") + self.P.psel(1) + self.P.calc() + self.assertEqual(G1, self.P.getpdf_fit()) + self.P.pdesel("ALL") + self.P.psel(2) + self.P.calc() + self.assertEqual(G2, self.P.getpdf_fit()) + self.P.psel("ALL") + self.P.calc() + Gall = self.P.getpdf_fit() + dGmax = max([abs(g1 + g2 - gall) for g1, g2, gall in zip(G1, G2, Gall)]) + self.assertAlmostEqual(0, dGmax, self.places) + self.assertRaises(pdffit2.unassignedError, self.P.psel, 10) + self.assertRaises(pdffit2.unassignedError, self.P.psel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.psel, -100) + return + + def test_pdesel(self): + """check PdfFit.pdesel()""" + + def doalloc(): + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + return + + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 1) + self.P.read_struct(datafile("Ni.stru")) + doalloc() + self.P.calc() + G1 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(datafile("PbScW25TiO3.stru")) + doalloc() + self.P.calc() + G2 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + doalloc() + self.P.psel("ALL") + self.P.pdesel(2) + self.P.calc() + self.assertEqual(G1, self.P.getpdf_fit()) + self.P.psel("ALL") + self.P.pdesel(1) + self.P.calc() + self.assertEqual(G2, self.P.getpdf_fit()) + self.P.pdesel("ALL") + self.P.calc() + G0 = self.P.getpdf_fit() + self.assertEqual([0.0] * len(G0), G0) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 10) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, -100) + return + + # + # def test_selectAtomType(self): + # """check PdfFit.selectAtomType() + # """ + # return + # + # def test_selectAtomIndex(self): + # """check PdfFit.selectAtomIndex() + # """ + # return + # + # def test_selectAll(self): + # """check PdfFit.selectAll() + # """ + # return + # + # def test_selectNone(self): + # """check PdfFit.selectNone() + # """ + # return + + def test_bond_angle(self): + """check PdfFit.bond_angle()""" + self.P.read_struct(datafile("Ni.stru")) + a, e = self.P.bond_angle(1, 2, 3) + self.assertAlmostEqual(60.0, a, self.places) + self.assertRaises(ValueError, self.P.bond_angle, 0, 1, 2) + self.assertRaises(ValueError, self.P.bond_angle, 1, 2, 7) + return + + def test_bang(self): + "check PdfFit.bang() function" + self.P.read_struct(datafile("Ni.stru")) + out = capture_output(self.P.bang, 1, 2, 3).strip() + self.assertTrue(out.endswith("60 degrees")) + self.assertTrue(out.startswith("NI (#1) - NI (#2) - NI (#3)")) + return + + def test_bond_length_atoms(self): + """check PdfFit.bond_length_atoms()""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + dij, ddij = self.P.bond_length_atoms(1, 5) + self.assertAlmostEqual(4.03635, dij, self.places) + self.P.setphase(1) + self.assertRaises(ValueError, self.P.bond_length_atoms, 1, 5) + return + + def test_bond_length_types(self): + """check PdfFit.bond_length_types()""" + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + dPbO = self.P.bond_length_types("Pb", "O", 0.1, 3.0) + # check if keys are present + self.assertTrue("dij" in dPbO) + self.assertTrue("ddij" in dPbO) + self.assertTrue("ij0" in dPbO) + self.assertTrue("ij1" in dPbO) + # check if they have the same length + npts = len(dPbO["dij"]) + self.assertEqual(npts, len(dPbO["ddij"])) + self.assertEqual(npts, len(dPbO["ij0"])) + self.assertEqual(npts, len(dPbO["ij1"])) + # 8 Pb atoms have coordination 12 in perovskite structure + self.assertEqual(8 * 12, len(dPbO["dij"])) + self.P.setphase(1) + dfcc = self.P.bond_length_types("ALL", "ALL", 0.1, 2.6) + # 4 Ni atoms with coordination 12 + self.assertEqual(4 * 12, len(dfcc["dij"])) + # invalid element + self.assertRaises(ValueError, self.P.bond_length_types, "Ni", "Nix", 0.1, 5.0) + # check indices ij0 + allij0 = sum(dfcc["ij0"], tuple()) + self.assertEqual(0, min(allij0)) + self.assertEqual(3, max(allij0)) + # check indices ij1 + allij1 = sum(dfcc["ij1"], tuple()) + self.assertEqual(1, min(allij1)) + self.assertEqual(4, max(allij1)) + # check index values + ij0check = [(i1 - 1, j1 - 1) for i1, j1 in dfcc["ij1"]] + self.assertEqual(ij0check, dfcc["ij0"]) + # test valid element which is not present in the structure + dnone = self.P.bond_length_types("Ni", "Au", 0.1, 5.0) + self.assertEqual(0, len(dnone["dij"])) + self.assertEqual(0, len(dnone["ddij"])) + self.assertEqual(0, len(dnone["ij0"])) + self.assertEqual(0, len(dnone["ij1"])) + return + + def test_blen(self): + """check PdfFit.blen()""" + self.P.read_struct(datafile("PbScW25TiO3.stru")) + blen = self.P.blen + o = capture_output(blen, 1, 5).strip() + self.assertTrue(o.endswith("4.03635 A")) + self.assertTrue("PB (#1)" in o) + self.assertTrue("PB (#5)" in o) + self.assertRaises(ValueError, blen, 1, 99) + self.assertRaises(ValueError, blen, 0, 1) + o1 = capture_output(blen, 1, 1, 0.1, 1) + self.assertTrue("No pairs found" in o1) + o2 = capture_output(blen, 1, 50, 0.1, 1) + self.assertEqual("", o2) + o3 = capture_output(blen, "Sc", "O", 0.5, 2.3).strip() + self.assertEqual(1 + 48, len(o3.split("\n"))) + self.assertEqual(6, o3.count("SC (#33)")) + self.assertEqual(2, o3.count("O (#9)")) + self.assertRaises(TypeError, blen, "Sc", "O", 0.5) + return + + # def test_show_scat(self): + # """check PdfFit.show_scat() + # """ + # return + # + # def test_get_scat_string(self): + # """check PdfFit.get_scat_string() + # """ + # return + + def test_get_scat(self): + """check PdfFit.get_scat()""" + # x-ray scattering factors + fPb = self.P.get_scat("X", "Pb") + self.assertEqual(82.0, fPb) + fTi = self.P.get_scat("X", "tI") + self.assertEqual(22.0, fTi) + # neutron scattering lengths + bPb = self.P.get_scat("N", "PB") + self.assertAlmostEqual(9.401, bPb, 3) + bTi = self.P.get_scat("N", "ti") + self.assertAlmostEqual(-3.370, bTi, 3) + # exceptions + self.assertRaises(ValueError, self.P.get_scat, "N", "zz") + self.assertRaises(ValueError, self.P.get_scat, "Z", "Ti") + return + + def test_set_scat(self): + """check PdfFit.set_scat()""" + # raises exception when no phase exists + self.assertRaises(pdffit2.unassignedError, self.P.set_scat, "N", "Ti", -11) + # check if it is local to phase + fPb = self.P.get_scat("X", "Pb") + bPb = self.P.get_scat("N", "Pb") + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.set_scat("X", "Pb", 142) + self.assertEqual(142, self.P.get_scat("X", "Pb")) + self.assertEqual(bPb, self.P.get_scat("N", "Pb")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.assertEqual(fPb, self.P.get_scat("X", "Pb")) + self.P.setphase(1) + self.assertEqual(142, self.P.get_scat("X", "Pb")) + self.P.setphase(2) + self.assertEqual(fPb, self.P.get_scat("X", "Pb")) + # check exception for invalid inputs + self.assertRaises(ValueError, self.P.set_scat, "Z", "C", 123) + self.assertRaises(ValueError, self.P.set_scat, "X", "ZZ", 123) + return + + def test_reset_scat(self): + """check PdfFit.reset_scat()""" + # raises exception when no phase exists + self.assertRaises(pdffit2.unassignedError, self.P.reset_scat, "Ti") + # check if it is local to phase + fPb = self.P.get_scat("X", "Pb") + bPb = self.P.get_scat("N", "Pb") + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.set_scat("X", "Pb", 142) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.set_scat("N", "Pb", -17) + self.P.setphase(1) + self.assertNotEqual(fPb, self.P.get_scat("X", "Pb")) + self.P.reset_scat("Pb") + self.assertEqual(fPb, self.P.get_scat("X", "Pb")) + self.P.setphase(2) + self.assertNotEqual(bPb, self.P.get_scat("N", "Pb")) + self.P.reset_scat("Pb") + self.assertEqual(bPb, self.P.get_scat("N", "Pb")) + # check exception for invalid inputs + self.assertRaises(ValueError, self.P.reset_scat, "Zz") + return + + def test_num_atoms(self): + """check PdfFit.num_atoms()""" + self.P.read_struct(datafile("Ni.stru")) + self.assertEqual(4, self.P.num_atoms()) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.assertEqual(56, self.P.num_atoms()) + self.P.setphase(1) + self.assertEqual(4, self.P.num_atoms()) + self.P.setphase(2) + self.assertEqual(56, self.P.num_atoms()) + return + + def test_lat(self): + """check PdfFit.lat()""" + pf = self.P + pf.read_struct(datafile("Ni.stru")) + for i in ("a", "b", "c", 1, 2, 3): + self.assertEqual(3.52, pf.getvar(pf.lat(i))) + for i in ("alpha", "beta", "gamma", 4, 5, 6): + self.assertEqual(90, pf.getvar(pf.lat(i))) + return + + def test_xyz(self): + """check PdfFit.x() PdfFit.y(), PdfFit.z()""" + pf = self.P + pf.read_struct(datafile("Ni.stru")) + self.assertEqual(0.5, pf.getvar(pf.x(3))) + self.assertEqual(0, pf.getvar(pf.y(3))) + self.assertEqual(0.5, pf.getvar(pf.z(3))) + return + + def test_uij(self): + """check PdfFit.uij()""" + ni = loadStructure(datafile("Ni.stru")) + ni[2].anisotropy = True + ni[2].U11, ni[2].U22, ni[2].U33 = 1, 2, 3 + ni[2].U12, ni[2].U13, ni[2].U23 = 4, 5, 6 + pf = self.P + pf.add_structure(ni) + self.assertEqual(1, pf.getvar(pf.u11(3))) + self.assertEqual(2, pf.getvar(pf.u22(3))) + self.assertEqual(3, pf.getvar(pf.u33(3))) + self.assertEqual(4, pf.getvar(pf.u12(3))) + self.assertEqual(5, pf.getvar(pf.u13(3))) + self.assertEqual(6, pf.getvar(pf.u23(3))) + return + + def test_occ(self): + """check PdfFit.occ()""" + pf = self.P + pf.read_struct(datafile("Ni.stru")) + for i in range(1, 5): + self.assertEqual(1, pf.getvar(pf.occ(i))) + return + + +# def test_pscale(self): +# """check PdfFit.pscale() +# """ +# return +# +# def test_pscale(self): +# """check PdfFit.pscale() +# """ +# return +# +# def test_sratio(self): +# """check PdfFit.sratio() +# """ +# return +# +# def test_delta1(self): +# """check PdfFit.delta1() +# """ +# return +# +# def test_delta2(self): +# """check PdfFit.delta2() +# """ +# return +# +# def test_dscale(self): +# """check PdfFit.dscale() +# """ +# return +# +# def test_qdamp(self): +# """check PdfFit.qdamp() +# """ +# return +# +# def test_qbroad(self): +# """check PdfFit.qbroad() +# """ +# return +# +# def test_rcut(self): +# """check PdfFit.rcut() +# """ +# return +# +# def test___init__(self): +# """check PdfFit.__init__() +# """ +# return +# +# def test__PdfFit__getRef(self): +# """check PdfFit._PdfFit__getRef() +# """ +# return + +# End of class TestPdfFit + +if __name__ == "__main__": + unittest.main() + +# End of file diff --git a/src/diffpy/pdffit2/tests/TestPhaseFractions.py b/src/diffpy/pdffit2/tests/TestPhaseFractions.py new file mode 100644 index 00000000..afc57c06 --- /dev/null +++ b/src/diffpy/pdffit2/tests/TestPhaseFractions.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +"""Unit tests for phase fraction calculations. +""" + +import unittest + +from diffpy.pdffit2 import PdfFit +from diffpy.pdffit2.tests.pdffit2testutils import datafile + + +############################################################################## +class TestPhaseFractions(unittest.TestCase): + places = 4 + + def setUp(self): + self.P = PdfFit() + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.alloc("N", 0.0, 0.05, 0.1, 10, 200) + return + + def tearDown(self): + del self.P + return + + def test_xray_fractions(self): + """test_xray_fractions -- check phase fractions in x-ray dataset.""" + self.P.setdata(1) + ph = self.P.phase_fractions() + bb1 = 28**2 + bb2 = ((8 * 82 + 24 * 8 + 4 * 21 + 2 * 74 + 2 * 22) / 40.0) ** 2 + self.assertAlmostEqual(1.0, sum(ph["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["mass"]), self.places) + self.assertAlmostEqual(bb2 / bb1, ph["atom"][0] / ph["atom"][1], self.places) + self.assertAlmostEqual(bb2 / bb1 * 40.0 / 4.0, ph["cell"][0] / ph["cell"][1], self.places) + mavg1 = 58.69 + mavg2 = (8 * 207.19 + 24 * 15.994 + 4 * 44.956 + 2 * 183.85 + 2 * 47.90) / 40.0 + self.assertAlmostEqual(bb2 / bb1 * mavg1 / mavg2, ph["mass"][0] / ph["mass"][1], self.places) + self.assertEqual(0.0, sum(ph["stdatom"])) + self.assertEqual(0.0, sum(ph["stdcell"])) + self.assertEqual(0.0, sum(ph["stdmass"])) + self.P.setphase(1) + self.P.setvar("pscale", 2.0) + ph2 = self.P.phase_fractions() + self.assertAlmostEqual(1.0, sum(ph2["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["mass"]), self.places) + self.assertAlmostEqual(2.0, ph2["atom"][0] / ph2["atom"][1] / (ph["atom"][0] / ph["atom"][1]), self.places) + self.assertAlmostEqual(2.0, ph2["cell"][0] / ph2["cell"][1] / (ph["cell"][0] / ph["cell"][1]), self.places) + self.assertAlmostEqual(2.0, ph2["mass"][0] / ph2["mass"][1] / (ph["mass"][0] / ph["mass"][1]), self.places) + return + + def test_neutron_fractions(self): + """test_neutron_fractions -- check phase fractions in neutron dataset.""" + self.P.setdata(2) + ph = self.P.phase_fractions() + bb1 = 10.31**2 + bPb = 9.4012 + bO = 5.8054 + bSc = 12.11 + bW = 4.75518 + bTi = -3.37013 + bb2 = ((8 * bPb + 24 * bO + 4 * bSc + 2 * bW + 2 * bTi) / 40.0) ** 2 + self.assertAlmostEqual(1.0, sum(ph["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["mass"]), self.places) + self.assertAlmostEqual(bb2 / bb1, ph["atom"][0] / ph["atom"][1], self.places) + self.assertAlmostEqual(bb2 / bb1 * 40.0 / 4.0, ph["cell"][0] / ph["cell"][1], self.places) + mavg1 = 58.69 + mavg2 = (8 * 207.19 + 24 * 15.994 + 4 * 44.956 + 2 * 183.85 + 2 * 47.90) / 40.0 + self.assertAlmostEqual(bb2 / bb1 * mavg1 / mavg2, ph["mass"][0] / ph["mass"][1], self.places) + self.assertEqual(0.0, sum(ph["stdatom"])) + self.assertEqual(0.0, sum(ph["stdcell"])) + self.assertEqual(0.0, sum(ph["stdmass"])) + self.P.setphase(1) + self.P.setvar("pscale", 2.0) + ph2 = self.P.phase_fractions() + self.assertAlmostEqual(1.0, sum(ph2["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["mass"]), self.places) + self.assertAlmostEqual(2.0, ph2["atom"][0] / ph2["atom"][1] / (ph["atom"][0] / ph["atom"][1]), self.places) + self.assertAlmostEqual(2.0, ph2["cell"][0] / ph2["cell"][1] / (ph["cell"][0] / ph["cell"][1]), self.places) + self.assertAlmostEqual(2.0, ph2["mass"][0] / ph2["mass"][1] / (ph["mass"][0] / ph["mass"][1]), self.places) + return + + +# End of class TestSphereEnvelope + +if __name__ == "__main__": + unittest.main() + +# End of file diff --git a/src/diffpy/pdffit2/tests/TestShapeFactors.py b/src/diffpy/pdffit2/tests/TestShapeFactors.py new file mode 100644 index 00000000..1eaa9711 --- /dev/null +++ b/src/diffpy/pdffit2/tests/TestShapeFactors.py @@ -0,0 +1,274 @@ +#!/usr/bin/env python + +"""Unit tests for particle shape envelope factors. +""" + + +import unittest + +import numpy + +from diffpy.pdffit2 import PdfFit, pdffit2 +from diffpy.pdffit2.tests.pdffit2testutils import datafile + + +def spherefactor(r, d): + """Calculate spherical envelope correction + + r -- PDF radius + d -- diameter of spherical particle + + Return numpy array of shape correction envelope. + """ + r1 = numpy.array(r) + fsph = 1.0 - 1.5 * r1 / d + 0.5 * (r1 / d) ** 3 + fsph[r1 > d] = 0.0 + return fsph + + +############################################################################## +class TestSphereEnvelope(unittest.TestCase): + + places = 6 + + def setUp(self): + self.P = PdfFit() + return + + def tearDown(self): + self.P = None + return + + def test_calculation(self): + """check calculation of sphere envelope factor""" + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.calc() + d = 8.0 + r = numpy.array(self.P.getR()) + G0 = numpy.array(self.P.getpdf_fit()) + self.P.setvar("spdiameter", d) + self.P.calc() + G1 = numpy.array(self.P.getpdf_fit()) + dG = G0 * spherefactor(r, d) - G1 + msd = numpy.dot(dG, dG) / len(r) + self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) + return + + def test_refinement(self): + """check refinement of sphere envelope factor""" + dcheck = 8.0 + dstart = 12.0 + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", dcheck) + self.P.calc() + r = numpy.array(self.P.getR()) + Gd8 = numpy.array(self.P.getpdf_fit()) + Gd8noise = Gd8 + Gd8noise[::2] += 0.01 + Gd8noise[1::2] -= 0.01 + self.P.reset() + self.P.read_struct(datafile("Ni.stru")) + self.P.read_data_lists("X", 0.0, 0.05, list(r), list(Gd8noise)) + self.P.constrain("spdiameter", "@8") + self.P.setpar(8, dstart) + self.P.refine() + dfinal = self.P.getvar("spdiameter") + self.assertAlmostEqual(dcheck, dfinal, 3) + return + + def test_twophase_calculation(self): + """check PDF calculation for 2 phases with different spdiameters""" + d1 = 6 + d2 = 9 + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", d1) + self.P.calc() + G1 = numpy.array(self.P.getpdf_fit()) + self.P.reset() + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", d2) + self.P.calc() + G2 = numpy.array(self.P.getpdf_fit()) + self.P.reset() + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setphase(1) + self.P.setvar("spdiameter", d1) + self.P.setphase(2) + self.P.setvar("spdiameter", d2) + self.P.calc() + Gtot = numpy.array(self.P.getpdf_fit()) + dG = G1 + G2 - Gtot + r = numpy.array(self.P.getR()) + msd = numpy.dot(dG, dG) / len(r) + self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) + return + + def test_twophase_refinement(self): + """check PDF refinement of 2 phases that have different spdiameter.""" + dcheck1 = 8.0 + dstart1 = 8.2 + dcheck2 = 6.0 + dstart2 = 5.5 + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", dcheck1) + self.P.calc() + G1 = numpy.array(self.P.getpdf_fit()) + self.P.reset() + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", dcheck2) + self.P.calc() + G2 = numpy.array(self.P.getpdf_fit()) + r = numpy.array(self.P.getR()) + Gnoise = G1 + G2 + Gnoise[::2] += 0.01 + Gnoise[1::2] -= 0.01 + self.P.reset() + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.read_data_lists("X", 0.0, 0.05, list(r), list(Gnoise)) + self.P.setphase(1) + self.P.constrain("spdiameter", "@11") + self.P.setphase(2) + self.P.constrain("spdiameter", "@12") + self.P.setpar(11, dstart1) + self.P.setpar(12, dstart2) + self.P.refine() + dfinal2 = self.P.getvar("spdiameter") + self.P.setphase(1) + dfinal1 = self.P.getvar("spdiameter") + self.assertAlmostEqual(dcheck1, dfinal1, 3) + self.assertAlmostEqual(dcheck2, dfinal2, 3) + return + + def test_spdiameter_io(self): + """Check reading and writing of spdiameter from structure file.""" + import re + + self.P.read_struct(datafile("Ni.stru")) + self.assertEqual(0.0, self.P.getvar("spdiameter")) + # engine should not write shape factor when not defined + spdnone = self.P.save_struct_string(1) + self.assertTrue(not re.search("(?m)^shape +sphere,", spdnone)) + self.P.setvar("spdiameter", 7) + spd7 = self.P.save_struct_string(1) + # spd7 should contain shape factor data + self.assertTrue(re.search("(?m)^shape +sphere,", spd7)) + self.P.reset() + self.P.read_struct_string(spd7) + self.assertEqual(7.0, self.P.getvar("spdiameter")) + # try to read without comma + spd14 = re.sub("(?m)^shape +sphere.*$", "shape sphere 14.00", spd7) + self.P.read_struct_string(spd14) + self.assertEqual(14.0, self.P.getvar("spdiameter")) + # try to read invalid shape data + sinvalid = re.sub("(?m)^shape .*", "shape invalid, 1", spd7) + self.assertRaises(pdffit2.structureError, self.P.read_struct_string, sinvalid) + return + + +# End of class TestSphereEnvelope + + +############################################################################## +class TestStepCutEnvelope(unittest.TestCase): + + places = 6 + + def setUp(self): + self.P = PdfFit() + return + + def tearDown(self): + self.P = None + return + + def test_stepcut_calculation(self): + """check calculation of sphere envelope factor""" + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.calc() + stepcut = 8.0 + r = numpy.array(self.P.getR()) + G0 = numpy.array(self.P.getpdf_fit()) + G0[r > stepcut] = 0.0 + self.P.setvar("stepcut", stepcut) + self.P.calc() + G1 = numpy.array(self.P.getpdf_fit()) + dG = G0 - G1 + msd = numpy.dot(dG, dG) / len(r) + self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) + return + + def test_twophase_stepcut_calculation(self): + """check PDF calculation for 2 phases with different spdiameters""" + d1 = 6 + d2 = 9 + self.P.read_struct(datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("stepcut", d1) + self.P.calc() + G1 = numpy.array(self.P.getpdf_fit()) + self.P.reset() + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("stepcut", d2) + self.P.calc() + G2 = numpy.array(self.P.getpdf_fit()) + self.P.reset() + self.P.read_struct(datafile("Ni.stru")) + self.P.read_struct(datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setphase(1) + self.P.setvar("stepcut", d1) + self.P.setphase(2) + self.P.setvar("stepcut", d2) + self.P.calc() + Gtot = numpy.array(self.P.getpdf_fit()) + dG = G1 + G2 - Gtot + r = numpy.array(self.P.getR()) + msd = numpy.dot(dG, dG) / len(r) + self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) + # G after step should be zero + self.assertTrue(numpy.all(0 == Gtot[r > max(d1, d2)])) + return + + def test_stepcut_io(self): + """Check reading and writing of stepcut from structure file.""" + import re + + self.P.read_struct(datafile("Ni.stru")) + self.assertEqual(0.0, self.P.getvar("stepcut")) + # engine should not write shape factor when not defined + sscnone = self.P.save_struct_string(1) + self.assertTrue(not re.search("(?m)^shape +stepcut,", sscnone)) + self.P.setvar("stepcut", 7) + ssc7 = self.P.save_struct_string(1) + # ssc7 should contain shape factor data + self.assertTrue(re.search("(?m)^shape +stepcut,", ssc7)) + self.P.reset() + self.P.read_struct_string(ssc7) + self.assertEqual(7.0, self.P.getvar("stepcut")) + # try to read without comma + ssc14 = re.sub("(?m)^shape +stepcut.*$", "shape stepcut 14.00", ssc7) + self.P.read_struct_string(ssc14) + self.assertEqual(14.0, self.P.getvar("stepcut")) + # try to read invalid shape data + sinvalid = re.sub("(?m)^shape .*", "shape invalid, 1", ssc7) + self.assertRaises(pdffit2.structureError, self.P.read_struct_string, sinvalid) + return + + +# End of class TestStepCutEnvelope + +if __name__ == "__main__": + unittest.main() + +# End of file diff --git a/src/diffpy/pdffit2/tests/__init__.py b/src/diffpy/pdffit2/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/diffpy/pdffit2/tests/conftest.py b/src/diffpy/pdffit2/tests/conftest.py new file mode 100644 index 00000000..e3b63139 --- /dev/null +++ b/src/diffpy/pdffit2/tests/conftest.py @@ -0,0 +1,19 @@ +import json +from pathlib import Path + +import pytest + + +@pytest.fixture +def user_filesystem(tmp_path): + base_dir = Path(tmp_path) + home_dir = base_dir / "home_dir" + home_dir.mkdir(parents=True, exist_ok=True) + cwd_dir = base_dir / "cwd_dir" + cwd_dir.mkdir(parents=True, exist_ok=True) + + home_config_data = {"username": "home_username", "email": "home@email.com"} + with open(home_dir / "diffpyconfig.json", "w") as f: + json.dump(home_config_data, f) + + yield tmp_path diff --git a/src/diffpy/pdffit2/tests/debug.py b/src/diffpy/pdffit2/tests/debug.py new file mode 100644 index 00000000..3e30239f --- /dev/null +++ b/src/diffpy/pdffit2/tests/debug.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2024 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge Group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors +# +# See LICENSE.rst for license information. +# +############################################################################## + +""" +Convenience module for debugging the unit tests using + +python -m diffpy.pdffit2.tests.debug + +Exceptions raised by failed tests or other errors are not caught. +""" + + +if __name__ == "__main__": + import sys + + from diffpy.pdffit2.tests import testsuite + + pattern = sys.argv[1] if len(sys.argv) > 1 else "" + suite = testsuite(pattern) + suite.debug() + + +# End of file diff --git a/src/diffpy/pdffit2/tests/pdffit2testutils.py b/src/diffpy/pdffit2/tests/pdffit2testutils.py new file mode 100644 index 00000000..ce61aa16 --- /dev/null +++ b/src/diffpy/pdffit2/tests/pdffit2testutils.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +############################################################################## +# +# diffpy.srreal by DANSE Diffraction group +# Simon J. L. Billinge +# (c) 2010 Trustees of the Columbia University +# in the City of New York. All rights reserved. +# +# File coded by: Pavol Juhas +# +# See AUTHORS.txt for a list of people who contributed. +# See LICENSE.txt for license information. +# +############################################################################## + +"""Helper routines for running other unit tests. +Import of this module suppresses the chatty output from the C++ extension. +""" + + +import os.path + +import six + +import diffpy.pdffit2 + +# silence the C++ engine output +diffpy.pdffit2.redirect_stdout(open(os.path.devnull, "w")) + +# path variables +thisfile = locals().get("__file__", "file.py") +tests_dir = os.path.dirname(os.path.abspath(thisfile)) +testdata_dir = os.path.join(tests_dir, "testdata") + + +def datafile(filename): + """prepend testdata_dir to filename.""" + return os.path.join(testdata_dir, filename) + + +def capture_output(f, *args, **kwargs): + """Capture output from pdffit2 engine produced in function call.""" + savestdout = diffpy.pdffit2.output.stdout + fp = six.StringIO() + diffpy.pdffit2.redirect_stdout(fp) + try: + f(*args, **kwargs) + finally: + diffpy.pdffit2.redirect_stdout(savestdout) + return fp.getvalue() + + +# End of file diff --git a/src/diffpy/pdffit2/tests/run.py b/src/diffpy/pdffit2/tests/run.py new file mode 100644 index 00000000..463f010e --- /dev/null +++ b/src/diffpy/pdffit2/tests/run.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2024 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge Group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors +# +# See LICENSE.rst for license information. +# +############################################################################## +"""Convenience module for executing all unit tests with +python -m diffpy.pdffit2.tests.run +""" + +import sys + +import pytest + +if __name__ == "__main__": + # show output results from every test function + args = ["-v"] + # show the message output for skipped and expected failure tests + if len(sys.argv) > 1: + args.extend(sys.argv[1:]) + print("pytest arguments: {}".format(args)) + # call pytest and exit with the return code from pytest + exit_res = pytest.main(args) + sys.exit(exit_res) + +# End of file diff --git a/src/diffpy/pdffit2/tests/rundeps.py b/src/diffpy/pdffit2/tests/rundeps.py new file mode 100644 index 00000000..038475ae --- /dev/null +++ b/src/diffpy/pdffit2/tests/rundeps.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +############################################################################## +# +# diffpy.pdffit2 by DANSE Diffraction group +# Simon J. L. Billinge +# (c) 2012 Trustees of the Columbia University +# in the City of New York. All rights reserved. +# +# File coded by: Pavol Juhas +# +# See AUTHORS.txt for a list of people who contributed. +# See LICENSE.txt for license information. +# +############################################################################## + +"""Convenience module for executing unit tests for all pdffit2 dependencies + +python -m diffpy.pdffit2.tests.rundeps +""" + + +if __name__ == "__main__": + import sys + + from diffpy.pdffit2.tests import testdeps + + # produce zero exit code for a successful test + sys.exit(not testdeps().wasSuccessful()) + +# End of file diff --git a/src/diffpy/pdffit2/tests/testdata/300K.gr b/src/diffpy/pdffit2/tests/testdata/300K.gr new file mode 100644 index 00000000..15578911 --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/300K.gr @@ -0,0 +1,2062 @@ +History written: Fri Apr 30 13:05:36 2004 +produced by +##### Run Information runCorrection=T +prep=gsas machine=npdf +run=300K background=npdf_00907 +smooth=2 smoothParam=32 32 0 backKillThresh=-1.0 +in beam: radius=0.635 height=2.54 +temp=308 runTitle=Run 1018: LMO - RT (before), HIPPO-furnace + +##### Vanadium runCorrection=T +run=npdf_00709 background=npdf_00710 +smooth=2 smoothParam=32 32 0 vanKillThresh=4.0 vBackKillThresh=-1.0 +in beam: radius=0.635 height=2.54 + +##### Container runCorrection=T +run=npdf_00917 background=npdf_00907 +smooth=2 smoothParam=32 32 0 cBackKillThresh=-1.0 +wallThick=0.023 atomDensity=0.072110 +atomic information: scattCS=5.100 absorpCS=5.080 + +##### Sample Material numElements=3 NormLaue=0.47445 +Element relAtomNum atomMass atomCoherCS atomIncoherCS atomAbsorpCS + O 0.6000 15.999 4.2320 0.0008 0.00019 + Mn 0.2000 54.931 -1.7500 0.4000 13.30000 + La 0.2000 138.905 8.5300 1.1300 8.97000 +density= effDensity=3.4138 + +##### Banks=6 deltaQ=0.01 matchRef=0 matchScal=T matchOffset=T +bank angle blendQmin blendQmax (0.0 means no info) + 1 90.0 1.62 29.42 + 2 -90.0 1.62 29.42 + 3 119.0 1.97 35.85 + 4 -119.0 1.97 35.85 + 5 148.0 2.20 40.00 + 6 -148.0 2.20 40.00 + +##### Program Specific Information +## Ft calcError=1 (1 for true, 0 for false) +numRpoints=2000 maxR=20.0 numDensity=0.0 intMaxR=1.5 +## Damp Qmin=2.0 Qmax=32 startDampQ=32 QAveMin=0.6 +dampFuncType=0 modEqn=1.0000*S(Q) +0.0000 +0.0000*Q dampExtraToZero=0 +## Blend numBanks=6 banks=1,2,3,4,5,6 +## Soqd minProcOut=0 +samPlazcek=0 vanPlazcek=0 smoothData=0 modifyData=1 +## Corps minProcOut=0 numBanksMiss=0 + +##### prepgsas prepOutput=1 numBanksMiss=0 fileExt=gsa +instParamFile=npdf_displex_757.iparm +numBanksAdd=0 +numBanksMult=6 +Bank# mulData mulBack + 1 1.0230 1.0000 + 2 1.0300 1.0000 + 3 1.0200 1.0000 + 4 0.9800 1.0000 + 5 0.9930 1.0000 + 6 0.9750 1.0000 +##### start data +#O0 rg_int sig_rg_int low_int sig_low_int rmax rhofit +#S 1 - PDF from PDFgetN +#P0 -4.09986 0.44295 0.11702 0.01370 1.50 0.0731 +#L r G(r) dr dG(r) + 0.010 0.086 0.0 0.0441 + 0.020 0.149 0.0 0.0849 + 0.030 0.169 0.0 0.1193 + 0.040 0.130 0.0 0.1448 + 0.050 0.021 0.0 0.1598 + 0.060 -0.160 0.0 0.1637 + 0.070 -0.410 0.0 0.1568 + 0.080 -0.717 0.0 0.1411 + 0.090 -1.064 0.0 0.1196 + 0.100 -1.428 0.0 0.0979 + 0.110 -1.782 0.0 0.0842 + 0.120 -2.101 0.0 0.0854 + 0.130 -2.359 0.0 0.0992 + 0.140 -2.535 0.0 0.1166 + 0.150 -2.612 0.0 0.1311 + 0.160 -2.581 0.0 0.1392 + 0.170 -2.440 0.0 0.1400 + 0.180 -2.196 0.0 0.1341 + 0.190 -1.863 0.0 0.1238 + 0.200 -1.462 0.0 0.1126 + 0.210 -1.017 0.0 0.1050 + 0.220 -0.556 0.0 0.1044 + 0.230 -0.109 0.0 0.1107 + 0.240 0.299 0.0 0.1202 + 0.250 0.643 0.0 0.1290 + 0.260 0.906 0.0 0.1341 + 0.270 1.077 0.0 0.1343 + 0.280 1.152 0.0 0.1298 + 0.290 1.134 0.0 0.1222 + 0.300 1.035 0.0 0.1143 + 0.310 0.870 0.0 0.1091 + 0.320 0.660 0.0 0.1090 + 0.330 0.426 0.0 0.1137 + 0.340 0.193 0.0 0.1209 + 0.350 -0.019 0.0 0.1275 + 0.360 -0.192 0.0 0.1313 + 0.370 -0.313 0.0 0.1313 + 0.380 -0.373 0.0 0.1276 + 0.390 -0.372 0.0 0.1217 + 0.400 -0.314 0.0 0.1156 + 0.410 -0.207 0.0 0.1119 + 0.420 -0.065 0.0 0.1121 + 0.430 0.095 0.0 0.1159 + 0.440 0.257 0.0 0.1215 + 0.450 0.404 0.0 0.1267 + 0.460 0.523 0.0 0.1295 + 0.470 0.601 0.0 0.1292 + 0.480 0.632 0.0 0.1259 + 0.490 0.614 0.0 0.1210 + 0.500 0.548 0.0 0.1163 + 0.510 0.443 0.0 0.1136 + 0.520 0.307 0.0 0.1141 + 0.530 0.152 0.0 0.1175 + 0.540 -0.007 0.0 0.1222 + 0.550 -0.158 0.0 0.1263 + 0.560 -0.290 0.0 0.1283 + 0.570 -0.393 0.0 0.1277 + 0.580 -0.461 0.0 0.1248 + 0.590 -0.493 0.0 0.1205 + 0.600 -0.490 0.0 0.1166 + 0.610 -0.458 0.0 0.1146 + 0.620 -0.404 0.0 0.1153 + 0.630 -0.338 0.0 0.1184 + 0.640 -0.271 0.0 0.1225 + 0.650 -0.214 0.0 0.1259 + 0.660 -0.176 0.0 0.1275 + 0.670 -0.163 0.0 0.1268 + 0.680 -0.180 0.0 0.1240 + 0.690 -0.228 0.0 0.1203 + 0.700 -0.306 0.0 0.1171 + 0.710 -0.409 0.0 0.1156 + 0.720 -0.529 0.0 0.1164 + 0.730 -0.659 0.0 0.1192 + 0.740 -0.789 0.0 0.1226 + 0.750 -0.910 0.0 0.1254 + 0.760 -1.015 0.0 0.1265 + 0.770 -1.097 0.0 0.1257 + 0.780 -1.153 0.0 0.1232 + 0.790 -1.181 0.0 0.1200 + 0.800 -1.185 0.0 0.1173 + 0.810 -1.166 0.0 0.1163 + 0.820 -1.132 0.0 0.1173 + 0.830 -1.088 0.0 0.1198 + 0.840 -1.043 0.0 0.1228 + 0.850 -1.002 0.0 0.1251 + 0.860 -0.973 0.0 0.1259 + 0.870 -0.958 0.0 0.1249 + 0.880 -0.961 0.0 0.1226 + 0.890 -0.982 0.0 0.1198 + 0.900 -1.018 0.0 0.1177 + 0.910 -1.066 0.0 0.1170 + 0.920 -1.122 0.0 0.1181 + 0.930 -1.179 0.0 0.1204 + 0.940 -1.232 0.0 0.1229 + 0.950 -1.277 0.0 0.1247 + 0.960 -1.308 0.0 0.1251 + 0.970 -1.324 0.0 0.1240 + 0.980 -1.325 0.0 0.1219 + 0.990 -1.311 0.0 0.1195 + 1.000 -1.287 0.0 0.1178 + 1.010 -1.255 0.0 0.1175 + 1.020 -1.222 0.0 0.1187 + 1.030 -1.192 0.0 0.1208 + 1.040 -1.170 0.0 0.1231 + 1.050 -1.161 0.0 0.1245 + 1.060 -1.165 0.0 0.1246 + 1.070 -1.185 0.0 0.1234 + 1.080 -1.217 0.0 0.1214 + 1.090 -1.260 0.0 0.1193 + 1.100 -1.309 0.0 0.1180 + 1.110 -1.358 0.0 0.1180 + 1.120 -1.401 0.0 0.1193 + 1.130 -1.432 0.0 0.1212 + 1.140 -1.448 0.0 0.1231 + 1.150 -1.443 0.0 0.1242 + 1.160 -1.417 0.0 0.1241 + 1.170 -1.371 0.0 0.1228 + 1.180 -1.307 0.0 0.1209 + 1.190 -1.230 0.0 0.1191 + 1.200 -1.147 0.0 0.1182 + 1.210 -1.065 0.0 0.1184 + 1.220 -0.992 0.0 0.1198 + 1.230 -0.934 0.0 0.1217 + 1.240 -0.898 0.0 0.1233 + 1.250 -0.888 0.0 0.1241 + 1.260 -0.905 0.0 0.1237 + 1.270 -0.950 0.0 0.1224 + 1.280 -1.019 0.0 0.1206 + 1.290 -1.106 0.0 0.1191 + 1.300 -1.205 0.0 0.1184 + 1.310 -1.306 0.0 0.1188 + 1.320 -1.400 0.0 0.1202 + 1.330 -1.479 0.0 0.1220 + 1.340 -1.534 0.0 0.1234 + 1.350 -1.562 0.0 0.1239 + 1.360 -1.557 0.0 0.1234 + 1.370 -1.519 0.0 0.1220 + 1.380 -1.452 0.0 0.1204 + 1.390 -1.360 0.0 0.1190 + 1.400 -1.251 0.0 0.1186 + 1.410 -1.133 0.0 0.1193 + 1.420 -1.017 0.0 0.1207 + 1.430 -0.913 0.0 0.1224 + 1.440 -0.830 0.0 0.1236 + 1.450 -0.775 0.0 0.1239 + 1.460 -0.755 0.0 0.1232 + 1.470 -0.770 0.0 0.1217 + 1.480 -0.822 0.0 0.1201 + 1.490 -0.906 0.0 0.1190 + 1.500 -1.017 0.0 0.1188 + 1.510 -1.147 0.0 0.1196 + 1.520 -1.285 0.0 0.1210 + 1.530 -1.422 0.0 0.1226 + 1.540 -1.548 0.0 0.1236 + 1.550 -1.653 0.0 0.1238 + 1.560 -1.730 0.0 0.1230 + 1.570 -1.774 0.0 0.1216 + 1.580 -1.781 0.0 0.1201 + 1.590 -1.753 0.0 0.1191 + 1.600 -1.691 0.0 0.1190 + 1.610 -1.600 0.0 0.1198 + 1.620 -1.487 0.0 0.1213 + 1.630 -1.360 0.0 0.1227 + 1.640 -1.227 0.0 0.1236 + 1.650 -1.097 0.0 0.1236 + 1.660 -0.977 0.0 0.1227 + 1.670 -0.876 0.0 0.1213 + 1.680 -0.797 0.0 0.1200 + 1.690 -0.747 0.0 0.1191 + 1.700 -0.727 0.0 0.1191 + 1.710 -0.739 0.0 0.1200 + 1.720 -0.782 0.0 0.1214 + 1.730 -0.858 0.0 0.1227 + 1.740 -0.964 0.0 0.1234 + 1.750 -1.099 0.0 0.1234 + 1.760 -1.262 0.0 0.1225 + 1.770 -1.452 0.0 0.1212 + 1.780 -1.668 0.0 0.1200 + 1.790 -1.908 0.0 0.1193 + 1.800 -2.171 0.0 0.1195 + 1.810 -2.456 0.0 0.1204 + 1.820 -2.758 0.0 0.1216 + 1.830 -3.075 0.0 0.1227 + 1.840 -3.401 0.0 0.1233 + 1.850 -3.730 0.0 0.1230 + 1.860 -4.053 0.0 0.1221 + 1.870 -4.362 0.0 0.1209 + 1.880 -4.647 0.0 0.1198 + 1.890 -4.897 0.0 0.1194 + 1.900 -5.103 0.0 0.1197 + 1.910 -5.256 0.0 0.1206 + 1.920 -5.349 0.0 0.1218 + 1.930 -5.378 0.0 0.1227 + 1.940 -5.342 0.0 0.1231 + 1.950 -5.241 0.0 0.1227 + 1.960 -5.081 0.0 0.1218 + 1.970 -4.869 0.0 0.1207 + 1.980 -4.618 0.0 0.1198 + 1.990 -4.340 0.0 0.1196 + 2.000 -4.050 0.0 0.1200 + 2.010 -3.762 0.0 0.1210 + 2.020 -3.493 0.0 0.1221 + 2.030 -3.253 0.0 0.1229 + 2.040 -3.056 0.0 0.1231 + 2.050 -2.907 0.0 0.1226 + 2.060 -2.811 0.0 0.1215 + 2.070 -2.769 0.0 0.1204 + 2.080 -2.778 0.0 0.1197 + 2.090 -2.831 0.0 0.1196 + 2.100 -2.918 0.0 0.1201 + 2.110 -3.029 0.0 0.1211 + 2.120 -3.150 0.0 0.1222 + 2.130 -3.270 0.0 0.1229 + 2.140 -3.377 0.0 0.1229 + 2.150 -3.460 0.0 0.1223 + 2.160 -3.511 0.0 0.1213 + 2.170 -3.525 0.0 0.1202 + 2.180 -3.499 0.0 0.1196 + 2.190 -3.432 0.0 0.1196 + 2.200 -3.327 0.0 0.1202 + 2.210 -3.188 0.0 0.1213 + 2.220 -3.019 0.0 0.1223 + 2.230 -2.825 0.0 0.1229 + 2.240 -2.613 0.0 0.1229 + 2.250 -2.385 0.0 0.1222 + 2.260 -2.145 0.0 0.1212 + 2.270 -1.895 0.0 0.1202 + 2.280 -1.633 0.0 0.1197 + 2.290 -1.359 0.0 0.1197 + 2.300 -1.069 0.0 0.1204 + 2.310 -0.761 0.0 0.1214 + 2.320 -0.431 0.0 0.1223 + 2.330 -0.077 0.0 0.1228 + 2.340 0.303 0.0 0.1227 + 2.350 0.706 0.0 0.1221 + 2.360 1.131 0.0 0.1211 + 2.370 1.571 0.0 0.1203 + 2.380 2.020 0.0 0.1198 + 2.390 2.466 0.0 0.1199 + 2.400 2.899 0.0 0.1206 + 2.410 3.309 0.0 0.1215 + 2.420 3.682 0.0 0.1223 + 2.430 4.010 0.0 0.1227 + 2.440 4.285 0.0 0.1225 + 2.450 4.501 0.0 0.1218 + 2.460 4.656 0.0 0.1210 + 2.470 4.751 0.0 0.1203 + 2.480 4.792 0.0 0.1200 + 2.490 4.788 0.0 0.1203 + 2.500 4.749 0.0 0.1210 + 2.510 4.688 0.0 0.1218 + 2.520 4.620 0.0 0.1225 + 2.530 4.558 0.0 0.1226 + 2.540 4.518 0.0 0.1223 + 2.550 4.508 0.0 0.1215 + 2.560 4.539 0.0 0.1207 + 2.570 4.615 0.0 0.1201 + 2.580 4.738 0.0 0.1200 + 2.590 4.907 0.0 0.1204 + 2.600 5.115 0.0 0.1212 + 2.610 5.354 0.0 0.1220 + 2.620 5.613 0.0 0.1226 + 2.630 5.882 0.0 0.1226 + 2.640 6.146 0.0 0.1222 + 2.650 6.395 0.0 0.1213 + 2.660 6.619 0.0 0.1205 + 2.670 6.808 0.0 0.1200 + 2.680 6.957 0.0 0.1200 + 2.690 7.063 0.0 0.1205 + 2.700 7.126 0.0 0.1214 + 2.710 7.148 0.0 0.1222 + 2.720 7.134 0.0 0.1227 + 2.730 7.090 0.0 0.1226 + 2.740 7.023 0.0 0.1221 + 2.750 6.941 0.0 0.1212 + 2.760 6.849 0.0 0.1204 + 2.770 6.754 0.0 0.1200 + 2.780 6.659 0.0 0.1201 + 2.790 6.567 0.0 0.1206 + 2.800 6.477 0.0 0.1215 + 2.810 6.388 0.0 0.1222 + 2.820 6.297 0.0 0.1226 + 2.830 6.201 0.0 0.1225 + 2.840 6.094 0.0 0.1219 + 2.850 5.972 0.0 0.1211 + 2.860 5.832 0.0 0.1204 + 2.870 5.671 0.0 0.1200 + 2.880 5.487 0.0 0.1202 + 2.890 5.281 0.0 0.1209 + 2.900 5.053 0.0 0.1217 + 2.910 4.807 0.0 0.1224 + 2.920 4.548 0.0 0.1227 + 2.930 4.279 0.0 0.1225 + 2.940 4.006 0.0 0.1218 + 2.950 3.734 0.0 0.1210 + 2.960 3.467 0.0 0.1203 + 2.970 3.208 0.0 0.1200 + 2.980 2.958 0.0 0.1202 + 2.990 2.720 0.0 0.1209 + 3.000 2.491 0.0 0.1218 + 3.010 2.269 0.0 0.1224 + 3.020 2.053 0.0 0.1227 + 3.030 1.838 0.0 0.1224 + 3.040 1.622 0.0 0.1217 + 3.050 1.402 0.0 0.1209 + 3.060 1.176 0.0 0.1202 + 3.070 0.942 0.0 0.1200 + 3.080 0.703 0.0 0.1203 + 3.090 0.459 0.0 0.1210 + 3.100 0.213 0.0 0.1218 + 3.110 -0.029 0.0 0.1224 + 3.120 -0.263 0.0 0.1226 + 3.130 -0.484 0.0 0.1223 + 3.140 -0.688 0.0 0.1216 + 3.150 -0.868 0.0 0.1208 + 3.160 -1.024 0.0 0.1202 + 3.170 -1.152 0.0 0.1201 + 3.180 -1.254 0.0 0.1204 + 3.190 -1.330 0.0 0.1211 + 3.200 -1.385 0.0 0.1218 + 3.210 -1.423 0.0 0.1223 + 3.220 -1.450 0.0 0.1224 + 3.230 -1.472 0.0 0.1220 + 3.240 -1.495 0.0 0.1214 + 3.250 -1.526 0.0 0.1206 + 3.260 -1.568 0.0 0.1202 + 3.270 -1.625 0.0 0.1201 + 3.280 -1.698 0.0 0.1205 + 3.290 -1.787 0.0 0.1212 + 3.300 -1.888 0.0 0.1220 + 3.310 -1.998 0.0 0.1224 + 3.320 -2.111 0.0 0.1224 + 3.330 -2.220 0.0 0.1219 + 3.340 -2.319 0.0 0.1212 + 3.350 -2.401 0.0 0.1205 + 3.360 -2.460 0.0 0.1201 + 3.370 -2.492 0.0 0.1201 + 3.380 -2.495 0.0 0.1206 + 3.390 -2.467 0.0 0.1213 + 3.400 -2.411 0.0 0.1220 + 3.410 -2.329 0.0 0.1224 + 3.420 -2.229 0.0 0.1223 + 3.430 -2.116 0.0 0.1219 + 3.440 -1.998 0.0 0.1212 + 3.450 -1.885 0.0 0.1205 + 3.460 -1.785 0.0 0.1202 + 3.470 -1.705 0.0 0.1202 + 3.480 -1.652 0.0 0.1207 + 3.490 -1.631 0.0 0.1214 + 3.500 -1.645 0.0 0.1220 + 3.510 -1.696 0.0 0.1223 + 3.520 -1.782 0.0 0.1222 + 3.530 -1.901 0.0 0.1217 + 3.540 -2.049 0.0 0.1211 + 3.550 -2.219 0.0 0.1205 + 3.560 -2.405 0.0 0.1203 + 3.570 -2.600 0.0 0.1204 + 3.580 -2.797 0.0 0.1209 + 3.590 -2.990 0.0 0.1215 + 3.600 -3.171 0.0 0.1220 + 3.610 -3.337 0.0 0.1223 + 3.620 -3.483 0.0 0.1221 + 3.630 -3.605 0.0 0.1216 + 3.640 -3.702 0.0 0.1210 + 3.650 -3.771 0.0 0.1205 + 3.660 -3.813 0.0 0.1204 + 3.670 -3.826 0.0 0.1206 + 3.680 -3.810 0.0 0.1211 + 3.690 -3.765 0.0 0.1217 + 3.700 -3.691 0.0 0.1221 + 3.710 -3.589 0.0 0.1222 + 3.720 -3.456 0.0 0.1219 + 3.730 -3.294 0.0 0.1214 + 3.740 -3.101 0.0 0.1209 + 3.750 -2.880 0.0 0.1205 + 3.760 -2.629 0.0 0.1205 + 3.770 -2.351 0.0 0.1208 + 3.780 -2.049 0.0 0.1213 + 3.790 -1.726 0.0 0.1219 + 3.800 -1.387 0.0 0.1222 + 3.810 -1.038 0.0 0.1222 + 3.820 -0.686 0.0 0.1219 + 3.830 -0.338 0.0 0.1213 + 3.840 -0.003 0.0 0.1208 + 3.850 0.312 0.0 0.1205 + 3.860 0.598 0.0 0.1205 + 3.870 0.848 0.0 0.1209 + 3.880 1.056 0.0 0.1215 + 3.890 1.215 0.0 0.1220 + 3.900 1.323 0.0 0.1223 + 3.910 1.377 0.0 0.1222 + 3.920 1.376 0.0 0.1218 + 3.930 1.322 0.0 0.1212 + 3.940 1.217 0.0 0.1206 + 3.950 1.065 0.0 0.1204 + 3.960 0.871 0.0 0.1205 + 3.970 0.640 0.0 0.1210 + 3.980 0.378 0.0 0.1216 + 3.990 0.091 0.0 0.1221 + 4.000 -0.215 0.0 0.1223 + 4.010 -0.536 0.0 0.1222 + 4.020 -0.866 0.0 0.1217 + 4.030 -1.203 0.0 0.1211 + 4.040 -1.543 0.0 0.1206 + 4.050 -1.884 0.0 0.1204 + 4.060 -2.224 0.0 0.1206 + 4.070 -2.562 0.0 0.1211 + 4.080 -2.896 0.0 0.1217 + 4.090 -3.225 0.0 0.1222 + 4.100 -3.547 0.0 0.1223 + 4.110 -3.859 0.0 0.1221 + 4.120 -4.159 0.0 0.1216 + 4.130 -4.443 0.0 0.1210 + 4.140 -4.707 0.0 0.1205 + 4.150 -4.946 0.0 0.1203 + 4.160 -5.155 0.0 0.1205 + 4.170 -5.329 0.0 0.1211 + 4.180 -5.463 0.0 0.1217 + 4.190 -5.552 0.0 0.1222 + 4.200 -5.595 0.0 0.1224 + 4.210 -5.588 0.0 0.1221 + 4.220 -5.529 0.0 0.1216 + 4.230 -5.421 0.0 0.1210 + 4.240 -5.265 0.0 0.1205 + 4.250 -5.064 0.0 0.1204 + 4.260 -4.824 0.0 0.1206 + 4.270 -4.551 0.0 0.1211 + 4.280 -4.251 0.0 0.1217 + 4.290 -3.932 0.0 0.1221 + 4.300 -3.602 0.0 0.1222 + 4.310 -3.268 0.0 0.1219 + 4.320 -2.936 0.0 0.1214 + 4.330 -2.613 0.0 0.1209 + 4.340 -2.302 0.0 0.1205 + 4.350 -2.007 0.0 0.1204 + 4.360 -1.729 0.0 0.1207 + 4.370 -1.469 0.0 0.1212 + 4.380 -1.226 0.0 0.1218 + 4.390 -0.996 0.0 0.1221 + 4.400 -0.779 0.0 0.1222 + 4.410 -0.569 0.0 0.1219 + 4.420 -0.365 0.0 0.1213 + 4.430 -0.162 0.0 0.1208 + 4.440 0.042 0.0 0.1205 + 4.450 0.248 0.0 0.1205 + 4.460 0.456 0.0 0.1208 + 4.470 0.667 0.0 0.1213 + 4.480 0.878 0.0 0.1218 + 4.490 1.086 0.0 0.1221 + 4.500 1.288 0.0 0.1220 + 4.510 1.481 0.0 0.1217 + 4.520 1.658 0.0 0.1212 + 4.530 1.818 0.0 0.1207 + 4.540 1.955 0.0 0.1204 + 4.550 2.067 0.0 0.1205 + 4.560 2.153 0.0 0.1208 + 4.570 2.213 0.0 0.1214 + 4.580 2.249 0.0 0.1218 + 4.590 2.262 0.0 0.1221 + 4.600 2.258 0.0 0.1220 + 4.610 2.241 0.0 0.1216 + 4.620 2.219 0.0 0.1211 + 4.630 2.198 0.0 0.1207 + 4.640 2.185 0.0 0.1204 + 4.650 2.185 0.0 0.1206 + 4.660 2.205 0.0 0.1209 + 4.670 2.249 0.0 0.1214 + 4.680 2.319 0.0 0.1219 + 4.690 2.416 0.0 0.1220 + 4.700 2.540 0.0 0.1219 + 4.710 2.688 0.0 0.1215 + 4.720 2.856 0.0 0.1210 + 4.730 3.037 0.0 0.1206 + 4.740 3.226 0.0 0.1204 + 4.750 3.413 0.0 0.1206 + 4.760 3.592 0.0 0.1210 + 4.770 3.755 0.0 0.1215 + 4.780 3.896 0.0 0.1219 + 4.790 4.007 0.0 0.1220 + 4.800 4.084 0.0 0.1219 + 4.810 4.125 0.0 0.1215 + 4.820 4.129 0.0 0.1210 + 4.830 4.094 0.0 0.1207 + 4.840 4.025 0.0 0.1206 + 4.850 3.923 0.0 0.1208 + 4.860 3.794 0.0 0.1212 + 4.870 3.642 0.0 0.1216 + 4.880 3.474 0.0 0.1219 + 4.890 3.295 0.0 0.1220 + 4.900 3.112 0.0 0.1218 + 4.910 2.928 0.0 0.1214 + 4.920 2.748 0.0 0.1210 + 4.930 2.576 0.0 0.1207 + 4.940 2.412 0.0 0.1207 + 4.950 2.258 0.0 0.1210 + 4.960 2.113 0.0 0.1214 + 4.970 1.977 0.0 0.1218 + 4.980 1.847 0.0 0.1220 + 4.990 1.720 0.0 0.1220 + 5.000 1.594 0.0 0.1217 + 5.010 1.467 0.0 0.1213 + 5.020 1.336 0.0 0.1209 + 5.030 1.199 0.0 0.1207 + 5.040 1.057 0.0 0.1208 + 5.050 0.908 0.0 0.1211 + 5.060 0.754 0.0 0.1215 + 5.070 0.597 0.0 0.1219 + 5.080 0.440 0.0 0.1220 + 5.090 0.286 0.0 0.1219 + 5.100 0.140 0.0 0.1216 + 5.110 0.005 0.0 0.1211 + 5.120 -0.113 0.0 0.1208 + 5.130 -0.212 0.0 0.1206 + 5.140 -0.288 0.0 0.1207 + 5.150 -0.338 0.0 0.1211 + 5.160 -0.360 0.0 0.1216 + 5.170 -0.356 0.0 0.1220 + 5.180 -0.325 0.0 0.1221 + 5.190 -0.270 0.0 0.1220 + 5.200 -0.195 0.0 0.1216 + 5.210 -0.104 0.0 0.1211 + 5.220 -0.003 0.0 0.1208 + 5.230 0.102 0.0 0.1207 + 5.240 0.205 0.0 0.1208 + 5.250 0.299 0.0 0.1212 + 5.260 0.378 0.0 0.1217 + 5.270 0.439 0.0 0.1220 + 5.280 0.476 0.0 0.1221 + 5.290 0.487 0.0 0.1219 + 5.300 0.472 0.0 0.1215 + 5.310 0.432 0.0 0.1210 + 5.320 0.368 0.0 0.1207 + 5.330 0.285 0.0 0.1206 + 5.340 0.188 0.0 0.1208 + 5.350 0.084 0.0 0.1212 + 5.360 -0.020 0.0 0.1217 + 5.370 -0.116 0.0 0.1220 + 5.380 -0.197 0.0 0.1220 + 5.390 -0.256 0.0 0.1218 + 5.400 -0.287 0.0 0.1214 + 5.410 -0.287 0.0 0.1209 + 5.420 -0.250 0.0 0.1206 + 5.430 -0.178 0.0 0.1206 + 5.440 -0.070 0.0 0.1208 + 5.450 0.070 0.0 0.1212 + 5.460 0.240 0.0 0.1217 + 5.470 0.433 0.0 0.1219 + 5.480 0.643 0.0 0.1219 + 5.490 0.863 0.0 0.1217 + 5.500 1.086 0.0 0.1212 + 5.510 1.306 0.0 0.1208 + 5.520 1.515 0.0 0.1206 + 5.530 1.711 0.0 0.1206 + 5.540 1.889 0.0 0.1209 + 5.550 2.048 0.0 0.1214 + 5.560 2.187 0.0 0.1218 + 5.570 2.307 0.0 0.1221 + 5.580 2.412 0.0 0.1220 + 5.590 2.504 0.0 0.1217 + 5.600 2.587 0.0 0.1213 + 5.610 2.664 0.0 0.1209 + 5.620 2.740 0.0 0.1206 + 5.630 2.817 0.0 0.1207 + 5.640 2.897 0.0 0.1210 + 5.650 2.979 0.0 0.1214 + 5.660 3.062 0.0 0.1218 + 5.670 3.144 0.0 0.1220 + 5.680 3.221 0.0 0.1219 + 5.690 3.287 0.0 0.1216 + 5.700 3.338 0.0 0.1212 + 5.710 3.366 0.0 0.1208 + 5.720 3.366 0.0 0.1206 + 5.730 3.333 0.0 0.1207 + 5.740 3.264 0.0 0.1210 + 5.750 3.156 0.0 0.1214 + 5.760 3.009 0.0 0.1218 + 5.770 2.825 0.0 0.1219 + 5.780 2.606 0.0 0.1218 + 5.790 2.357 0.0 0.1215 + 5.800 2.087 0.0 0.1211 + 5.810 1.802 0.0 0.1207 + 5.820 1.511 0.0 0.1206 + 5.830 1.222 0.0 0.1207 + 5.840 0.944 0.0 0.1210 + 5.850 0.684 0.0 0.1214 + 5.860 0.447 0.0 0.1218 + 5.870 0.238 0.0 0.1219 + 5.880 0.059 0.0 0.1217 + 5.890 -0.089 0.0 0.1214 + 5.900 -0.208 0.0 0.1210 + 5.910 -0.301 0.0 0.1207 + 5.920 -0.374 0.0 0.1206 + 5.930 -0.430 0.0 0.1208 + 5.940 -0.477 0.0 0.1212 + 5.950 -0.520 0.0 0.1216 + 5.960 -0.566 0.0 0.1219 + 5.970 -0.619 0.0 0.1219 + 5.980 -0.684 0.0 0.1217 + 5.990 -0.763 0.0 0.1214 + 6.000 -0.859 0.0 0.1210 + 6.010 -0.971 0.0 0.1207 + 6.020 -1.098 0.0 0.1207 + 6.030 -1.238 0.0 0.1209 + 6.040 -1.388 0.0 0.1212 + 6.050 -1.545 0.0 0.1216 + 6.060 -1.705 0.0 0.1219 + 6.070 -1.865 0.0 0.1220 + 6.080 -2.021 0.0 0.1217 + 6.090 -2.172 0.0 0.1214 + 6.100 -2.315 0.0 0.1210 + 6.110 -2.449 0.0 0.1207 + 6.120 -2.575 0.0 0.1207 + 6.130 -2.694 0.0 0.1209 + 6.140 -2.805 0.0 0.1213 + 6.150 -2.912 0.0 0.1217 + 6.160 -3.016 0.0 0.1219 + 6.170 -3.119 0.0 0.1219 + 6.180 -3.223 0.0 0.1217 + 6.190 -3.329 0.0 0.1213 + 6.200 -3.439 0.0 0.1210 + 6.210 -3.552 0.0 0.1208 + 6.220 -3.669 0.0 0.1208 + 6.230 -3.789 0.0 0.1211 + 6.240 -3.911 0.0 0.1214 + 6.250 -4.033 0.0 0.1217 + 6.260 -4.153 0.0 0.1219 + 6.270 -4.269 0.0 0.1218 + 6.280 -4.378 0.0 0.1216 + 6.290 -4.478 0.0 0.1213 + 6.300 -4.567 0.0 0.1210 + 6.310 -4.640 0.0 0.1208 + 6.320 -4.697 0.0 0.1209 + 6.330 -4.734 0.0 0.1212 + 6.340 -4.751 0.0 0.1215 + 6.350 -4.745 0.0 0.1218 + 6.360 -4.714 0.0 0.1219 + 6.370 -4.659 0.0 0.1218 + 6.380 -4.578 0.0 0.1215 + 6.390 -4.473 0.0 0.1211 + 6.400 -4.344 0.0 0.1209 + 6.410 -4.194 0.0 0.1208 + 6.420 -4.025 0.0 0.1209 + 6.430 -3.840 0.0 0.1212 + 6.440 -3.645 0.0 0.1215 + 6.450 -3.443 0.0 0.1218 + 6.460 -3.241 0.0 0.1219 + 6.470 -3.045 0.0 0.1217 + 6.480 -2.860 0.0 0.1214 + 6.490 -2.691 0.0 0.1211 + 6.500 -2.545 0.0 0.1208 + 6.510 -2.424 0.0 0.1208 + 6.520 -2.333 0.0 0.1210 + 6.530 -2.272 0.0 0.1213 + 6.540 -2.241 0.0 0.1217 + 6.550 -2.239 0.0 0.1219 + 6.560 -2.262 0.0 0.1219 + 6.570 -2.305 0.0 0.1216 + 6.580 -2.361 0.0 0.1213 + 6.590 -2.425 0.0 0.1209 + 6.600 -2.488 0.0 0.1207 + 6.610 -2.541 0.0 0.1207 + 6.620 -2.578 0.0 0.1209 + 6.630 -2.592 0.0 0.1213 + 6.640 -2.577 0.0 0.1216 + 6.650 -2.530 0.0 0.1219 + 6.660 -2.449 0.0 0.1218 + 6.670 -2.334 0.0 0.1216 + 6.680 -2.187 0.0 0.1213 + 6.690 -2.012 0.0 0.1209 + 6.700 -1.815 0.0 0.1207 + 6.710 -1.601 0.0 0.1207 + 6.720 -1.380 0.0 0.1209 + 6.730 -1.158 0.0 0.1213 + 6.740 -0.944 0.0 0.1216 + 6.750 -0.743 0.0 0.1218 + 6.760 -0.562 0.0 0.1218 + 6.770 -0.404 0.0 0.1216 + 6.780 -0.272 0.0 0.1212 + 6.790 -0.166 0.0 0.1209 + 6.800 -0.083 0.0 0.1208 + 6.810 -0.022 0.0 0.1208 + 6.820 0.023 0.0 0.1211 + 6.830 0.057 0.0 0.1214 + 6.840 0.088 0.0 0.1217 + 6.850 0.122 0.0 0.1218 + 6.860 0.164 0.0 0.1217 + 6.870 0.222 0.0 0.1214 + 6.880 0.299 0.0 0.1211 + 6.890 0.398 0.0 0.1208 + 6.900 0.521 0.0 0.1207 + 6.910 0.667 0.0 0.1208 + 6.920 0.835 0.0 0.1211 + 6.930 1.021 0.0 0.1215 + 6.940 1.221 0.0 0.1217 + 6.950 1.428 0.0 0.1218 + 6.960 1.636 0.0 0.1217 + 6.970 1.839 0.0 0.1214 + 6.980 2.030 0.0 0.1211 + 6.990 2.203 0.0 0.1209 + 7.000 2.353 0.0 0.1208 + 7.010 2.476 0.0 0.1209 + 7.020 2.569 0.0 0.1212 + 7.030 2.630 0.0 0.1215 + 7.040 2.660 0.0 0.1217 + 7.050 2.658 0.0 0.1217 + 7.060 2.627 0.0 0.1216 + 7.070 2.571 0.0 0.1213 + 7.080 2.493 0.0 0.1210 + 7.090 2.397 0.0 0.1207 + 7.100 2.289 0.0 0.1207 + 7.110 2.173 0.0 0.1209 + 7.120 2.053 0.0 0.1213 + 7.130 1.933 0.0 0.1216 + 7.140 1.819 0.0 0.1218 + 7.150 1.712 0.0 0.1218 + 7.160 1.615 0.0 0.1216 + 7.170 1.531 0.0 0.1213 + 7.180 1.461 0.0 0.1210 + 7.190 1.405 0.0 0.1209 + 7.200 1.366 0.0 0.1209 + 7.210 1.342 0.0 0.1211 + 7.220 1.333 0.0 0.1214 + 7.230 1.340 0.0 0.1217 + 7.240 1.363 0.0 0.1218 + 7.250 1.401 0.0 0.1218 + 7.260 1.455 0.0 0.1216 + 7.270 1.524 0.0 0.1213 + 7.280 1.608 0.0 0.1210 + 7.290 1.707 0.0 0.1208 + 7.300 1.823 0.0 0.1209 + 7.310 1.954 0.0 0.1211 + 7.320 2.099 0.0 0.1215 + 7.330 2.260 0.0 0.1217 + 7.340 2.434 0.0 0.1219 + 7.350 2.620 0.0 0.1218 + 7.360 2.816 0.0 0.1216 + 7.370 3.018 0.0 0.1213 + 7.380 3.224 0.0 0.1210 + 7.390 3.430 0.0 0.1209 + 7.400 3.631 0.0 0.1210 + 7.410 3.823 0.0 0.1213 + 7.420 4.001 0.0 0.1216 + 7.430 4.160 0.0 0.1218 + 7.440 4.297 0.0 0.1219 + 7.450 4.406 0.0 0.1218 + 7.460 4.486 0.0 0.1215 + 7.470 4.534 0.0 0.1212 + 7.480 4.550 0.0 0.1209 + 7.490 4.533 0.0 0.1208 + 7.500 4.485 0.0 0.1210 + 7.510 4.408 0.0 0.1212 + 7.520 4.306 0.0 0.1216 + 7.530 4.183 0.0 0.1218 + 7.540 4.044 0.0 0.1218 + 7.550 3.892 0.0 0.1217 + 7.560 3.733 0.0 0.1214 + 7.570 3.571 0.0 0.1211 + 7.580 3.409 0.0 0.1209 + 7.590 3.251 0.0 0.1208 + 7.600 3.097 0.0 0.1210 + 7.610 2.949 0.0 0.1213 + 7.620 2.804 0.0 0.1216 + 7.630 2.663 0.0 0.1218 + 7.640 2.523 0.0 0.1218 + 7.650 2.380 0.0 0.1216 + 7.660 2.233 0.0 0.1213 + 7.670 2.077 0.0 0.1210 + 7.680 1.911 0.0 0.1208 + 7.690 1.734 0.0 0.1208 + 7.700 1.543 0.0 0.1210 + 7.710 1.341 0.0 0.1213 + 7.720 1.128 0.0 0.1216 + 7.730 0.906 0.0 0.1218 + 7.740 0.681 0.0 0.1218 + 7.750 0.455 0.0 0.1216 + 7.760 0.234 0.0 0.1213 + 7.770 0.022 0.0 0.1209 + 7.780 -0.176 0.0 0.1208 + 7.790 -0.356 0.0 0.1208 + 7.800 -0.514 0.0 0.1210 + 7.810 -0.650 0.0 0.1213 + 7.820 -0.761 0.0 0.1216 + 7.830 -0.848 0.0 0.1218 + 7.840 -0.912 0.0 0.1217 + 7.850 -0.957 0.0 0.1215 + 7.860 -0.984 0.0 0.1212 + 7.870 -0.997 0.0 0.1209 + 7.880 -1.000 0.0 0.1208 + 7.890 -0.996 0.0 0.1208 + 7.900 -0.988 0.0 0.1210 + 7.910 -0.978 0.0 0.1213 + 7.920 -0.968 0.0 0.1216 + 7.930 -0.958 0.0 0.1217 + 7.940 -0.949 0.0 0.1217 + 7.950 -0.939 0.0 0.1214 + 7.960 -0.928 0.0 0.1211 + 7.970 -0.914 0.0 0.1209 + 7.980 -0.897 0.0 0.1207 + 7.990 -0.876 0.0 0.1208 + 8.000 -0.850 0.0 0.1211 + 8.010 -0.821 0.0 0.1214 + 8.020 -0.791 0.0 0.1217 + 8.030 -0.761 0.0 0.1218 + 8.040 -0.736 0.0 0.1217 + 8.050 -0.718 0.0 0.1215 + 8.060 -0.711 0.0 0.1211 + 8.070 -0.718 0.0 0.1209 + 8.080 -0.742 0.0 0.1208 + 8.090 -0.784 0.0 0.1209 + 8.100 -0.845 0.0 0.1211 + 8.110 -0.922 0.0 0.1214 + 8.120 -1.014 0.0 0.1217 + 8.130 -1.115 0.0 0.1218 + 8.140 -1.220 0.0 0.1216 + 8.150 -1.322 0.0 0.1214 + 8.160 -1.415 0.0 0.1211 + 8.170 -1.489 0.0 0.1208 + 8.180 -1.540 0.0 0.1208 + 8.190 -1.561 0.0 0.1209 + 8.200 -1.549 0.0 0.1212 + 8.210 -1.501 0.0 0.1215 + 8.220 -1.417 0.0 0.1217 + 8.230 -1.300 0.0 0.1218 + 8.240 -1.155 0.0 0.1217 + 8.250 -0.988 0.0 0.1214 + 8.260 -0.808 0.0 0.1211 + 8.270 -0.624 0.0 0.1209 + 8.280 -0.445 0.0 0.1209 + 8.290 -0.282 0.0 0.1210 + 8.300 -0.144 0.0 0.1213 + 8.310 -0.038 0.0 0.1216 + 8.320 0.030 0.0 0.1218 + 8.330 0.056 0.0 0.1218 + 8.340 0.039 0.0 0.1216 + 8.350 -0.020 0.0 0.1214 + 8.360 -0.119 0.0 0.1211 + 8.370 -0.253 0.0 0.1210 + 8.380 -0.415 0.0 0.1209 + 8.390 -0.598 0.0 0.1211 + 8.400 -0.794 0.0 0.1214 + 8.410 -0.996 0.0 0.1216 + 8.420 -1.195 0.0 0.1217 + 8.430 -1.387 0.0 0.1217 + 8.440 -1.565 0.0 0.1216 + 8.450 -1.725 0.0 0.1213 + 8.460 -1.864 0.0 0.1211 + 8.470 -1.980 0.0 0.1210 + 8.480 -2.073 0.0 0.1210 + 8.490 -2.143 0.0 0.1211 + 8.500 -2.189 0.0 0.1214 + 8.510 -2.213 0.0 0.1216 + 8.520 -2.215 0.0 0.1217 + 8.530 -2.196 0.0 0.1217 + 8.540 -2.156 0.0 0.1215 + 8.550 -2.096 0.0 0.1213 + 8.560 -2.016 0.0 0.1210 + 8.570 -1.916 0.0 0.1210 + 8.580 -1.798 0.0 0.1210 + 8.590 -1.664 0.0 0.1212 + 8.600 -1.516 0.0 0.1214 + 8.610 -1.358 0.0 0.1216 + 8.620 -1.194 0.0 0.1217 + 8.630 -1.030 0.0 0.1216 + 8.640 -0.872 0.0 0.1214 + 8.650 -0.728 0.0 0.1212 + 8.660 -0.604 0.0 0.1210 + 8.670 -0.508 0.0 0.1210 + 8.680 -0.446 0.0 0.1211 + 8.690 -0.423 0.0 0.1213 + 8.700 -0.442 0.0 0.1215 + 8.710 -0.505 0.0 0.1217 + 8.720 -0.611 0.0 0.1217 + 8.730 -0.758 0.0 0.1216 + 8.740 -0.941 0.0 0.1214 + 8.750 -1.154 0.0 0.1211 + 8.760 -1.387 0.0 0.1210 + 8.770 -1.633 0.0 0.1210 + 8.780 -1.883 0.0 0.1211 + 8.790 -2.127 0.0 0.1213 + 8.800 -2.357 0.0 0.1215 + 8.810 -2.568 0.0 0.1216 + 8.820 -2.753 0.0 0.1216 + 8.830 -2.911 0.0 0.1215 + 8.840 -3.041 0.0 0.1212 + 8.850 -3.144 0.0 0.1210 + 8.860 -3.222 0.0 0.1209 + 8.870 -3.280 0.0 0.1210 + 8.880 -3.323 0.0 0.1212 + 8.890 -3.357 0.0 0.1214 + 8.900 -3.384 0.0 0.1216 + 8.910 -3.411 0.0 0.1217 + 8.920 -3.438 0.0 0.1216 + 8.930 -3.467 0.0 0.1214 + 8.940 -3.498 0.0 0.1212 + 8.950 -3.529 0.0 0.1209 + 8.960 -3.554 0.0 0.1208 + 8.970 -3.571 0.0 0.1209 + 8.980 -3.574 0.0 0.1211 + 8.990 -3.556 0.0 0.1214 + 9.000 -3.515 0.0 0.1216 + 9.010 -3.445 0.0 0.1217 + 9.020 -3.346 0.0 0.1216 + 9.030 -3.215 0.0 0.1214 + 9.040 -3.055 0.0 0.1211 + 9.050 -2.869 0.0 0.1209 + 9.060 -2.661 0.0 0.1208 + 9.070 -2.438 0.0 0.1209 + 9.080 -2.207 0.0 0.1212 + 9.090 -1.976 0.0 0.1214 + 9.100 -1.752 0.0 0.1216 + 9.110 -1.542 0.0 0.1217 + 9.120 -1.351 0.0 0.1216 + 9.130 -1.183 0.0 0.1214 + 9.140 -1.041 0.0 0.1211 + 9.150 -0.925 0.0 0.1209 + 9.160 -0.835 0.0 0.1209 + 9.170 -0.768 0.0 0.1210 + 9.180 -0.720 0.0 0.1212 + 9.190 -0.688 0.0 0.1215 + 9.200 -0.666 0.0 0.1217 + 9.210 -0.651 0.0 0.1217 + 9.220 -0.638 0.0 0.1216 + 9.230 -0.626 0.0 0.1214 + 9.240 -0.611 0.0 0.1211 + 9.250 -0.593 0.0 0.1209 + 9.260 -0.572 0.0 0.1209 + 9.270 -0.546 0.0 0.1210 + 9.280 -0.518 0.0 0.1212 + 9.290 -0.487 0.0 0.1215 + 9.300 -0.453 0.0 0.1217 + 9.310 -0.416 0.0 0.1217 + 9.320 -0.372 0.0 0.1216 + 9.330 -0.320 0.0 0.1213 + 9.340 -0.255 0.0 0.1211 + 9.350 -0.172 0.0 0.1209 + 9.360 -0.066 0.0 0.1209 + 9.370 0.070 0.0 0.1211 + 9.380 0.241 0.0 0.1213 + 9.390 0.451 0.0 0.1215 + 9.400 0.704 0.0 0.1217 + 9.410 1.001 0.0 0.1217 + 9.420 1.341 0.0 0.1215 + 9.430 1.721 0.0 0.1213 + 9.440 2.135 0.0 0.1211 + 9.450 2.576 0.0 0.1210 + 9.460 3.035 0.0 0.1210 + 9.470 3.500 0.0 0.1211 + 9.480 3.959 0.0 0.1214 + 9.490 4.403 0.0 0.1216 + 9.500 4.819 0.0 0.1217 + 9.510 5.199 0.0 0.1217 + 9.520 5.536 0.0 0.1215 + 9.530 5.823 0.0 0.1213 + 9.540 6.060 0.0 0.1210 + 9.550 6.246 0.0 0.1209 + 9.560 6.384 0.0 0.1210 + 9.570 6.477 0.0 0.1211 + 9.580 6.533 0.0 0.1214 + 9.590 6.558 0.0 0.1216 + 9.600 6.558 0.0 0.1217 + 9.610 6.541 0.0 0.1216 + 9.620 6.512 0.0 0.1215 + 9.630 6.474 0.0 0.1212 + 9.640 6.430 0.0 0.1210 + 9.650 6.379 0.0 0.1210 + 9.660 6.321 0.0 0.1210 + 9.670 6.251 0.0 0.1212 + 9.680 6.166 0.0 0.1215 + 9.690 6.060 0.0 0.1216 + 9.700 5.929 0.0 0.1217 + 9.710 5.768 0.0 0.1216 + 9.720 5.574 0.0 0.1214 + 9.730 5.346 0.0 0.1212 + 9.740 5.085 0.0 0.1210 + 9.750 4.792 0.0 0.1210 + 9.760 4.472 0.0 0.1211 + 9.770 4.132 0.0 0.1213 + 9.780 3.778 0.0 0.1215 + 9.790 3.420 0.0 0.1216 + 9.800 3.065 0.0 0.1217 + 9.810 2.722 0.0 0.1216 + 9.820 2.398 0.0 0.1214 + 9.830 2.098 0.0 0.1211 + 9.840 1.826 0.0 0.1210 + 9.850 1.584 0.0 0.1210 + 9.860 1.371 0.0 0.1211 + 9.870 1.185 0.0 0.1213 + 9.880 1.021 0.0 0.1215 + 9.890 0.875 0.0 0.1217 + 9.900 0.741 0.0 0.1216 + 9.910 0.613 0.0 0.1215 + 9.920 0.485 0.0 0.1213 + 9.930 0.354 0.0 0.1211 + 9.940 0.216 0.0 0.1210 + 9.950 0.070 0.0 0.1210 + 9.960 -0.084 0.0 0.1211 + 9.970 -0.244 0.0 0.1213 + 9.980 -0.408 0.0 0.1215 + 9.990 -0.570 0.0 0.1217 + 10.000 -0.727 0.0 0.1216 + 10.010 -0.872 0.0 0.1215 + 10.020 -1.002 0.0 0.1212 + 10.030 -1.112 0.0 0.1210 + 10.040 -1.200 0.0 0.1209 + 10.050 -1.262 0.0 0.1210 + 10.060 -1.299 0.0 0.1212 + 10.070 -1.312 0.0 0.1214 + 10.080 -1.300 0.0 0.1216 + 10.090 -1.268 0.0 0.1217 + 10.100 -1.216 0.0 0.1216 + 10.110 -1.148 0.0 0.1214 + 10.120 -1.065 0.0 0.1212 + 10.130 -0.970 0.0 0.1210 + 10.140 -0.863 0.0 0.1209 + 10.150 -0.744 0.0 0.1210 + 10.160 -0.612 0.0 0.1212 + 10.170 -0.465 0.0 0.1214 + 10.180 -0.303 0.0 0.1216 + 10.190 -0.123 0.0 0.1217 + 10.200 0.075 0.0 0.1216 + 10.210 0.293 0.0 0.1214 + 10.220 0.529 0.0 0.1212 + 10.230 0.781 0.0 0.1210 + 10.240 1.044 0.0 0.1209 + 10.250 1.314 0.0 0.1210 + 10.260 1.582 0.0 0.1212 + 10.270 1.841 0.0 0.1214 + 10.280 2.081 0.0 0.1216 + 10.290 2.293 0.0 0.1217 + 10.300 2.466 0.0 0.1216 + 10.310 2.593 0.0 0.1213 + 10.320 2.666 0.0 0.1211 + 10.330 2.679 0.0 0.1209 + 10.340 2.630 0.0 0.1209 + 10.350 2.518 0.0 0.1210 + 10.360 2.343 0.0 0.1212 + 10.370 2.109 0.0 0.1215 + 10.380 1.822 0.0 0.1216 + 10.390 1.489 0.0 0.1217 + 10.400 1.119 0.0 0.1215 + 10.410 0.718 0.0 0.1213 + 10.420 0.298 0.0 0.1211 + 10.430 -0.135 0.0 0.1209 + 10.440 -0.574 0.0 0.1209 + 10.450 -1.012 0.0 0.1210 + 10.460 -1.444 0.0 0.1212 + 10.470 -1.868 0.0 0.1214 + 10.480 -2.282 0.0 0.1216 + 10.490 -2.685 0.0 0.1216 + 10.500 -3.077 0.0 0.1215 + 10.510 -3.458 0.0 0.1213 + 10.520 -3.829 0.0 0.1211 + 10.530 -4.190 0.0 0.1210 + 10.540 -4.541 0.0 0.1210 + 10.550 -4.879 0.0 0.1211 + 10.560 -5.204 0.0 0.1213 + 10.570 -5.511 0.0 0.1215 + 10.580 -5.797 0.0 0.1217 + 10.590 -6.059 0.0 0.1216 + 10.600 -6.290 0.0 0.1215 + 10.610 -6.489 0.0 0.1213 + 10.620 -6.650 0.0 0.1211 + 10.630 -6.771 0.0 0.1210 + 10.640 -6.850 0.0 0.1210 + 10.650 -6.888 0.0 0.1211 + 10.660 -6.886 0.0 0.1214 + 10.670 -6.845 0.0 0.1216 + 10.680 -6.769 0.0 0.1217 + 10.690 -6.663 0.0 0.1216 + 10.700 -6.532 0.0 0.1215 + 10.710 -6.380 0.0 0.1213 + 10.720 -6.212 0.0 0.1211 + 10.730 -6.032 0.0 0.1210 + 10.740 -5.844 0.0 0.1211 + 10.750 -5.648 0.0 0.1212 + 10.760 -5.445 0.0 0.1214 + 10.770 -5.234 0.0 0.1216 + 10.780 -5.013 0.0 0.1217 + 10.790 -4.780 0.0 0.1216 + 10.800 -4.529 0.0 0.1214 + 10.810 -4.257 0.0 0.1212 + 10.820 -3.959 0.0 0.1211 + 10.830 -3.633 0.0 0.1210 + 10.840 -3.274 0.0 0.1211 + 10.850 -2.880 0.0 0.1213 + 10.860 -2.452 0.0 0.1215 + 10.870 -1.989 0.0 0.1216 + 10.880 -1.494 0.0 0.1217 + 10.890 -0.970 0.0 0.1215 + 10.900 -0.421 0.0 0.1214 + 10.910 0.147 0.0 0.1211 + 10.920 0.727 0.0 0.1210 + 10.930 1.315 0.0 0.1210 + 10.940 1.901 0.0 0.1211 + 10.950 2.481 0.0 0.1213 + 10.960 3.047 0.0 0.1215 + 10.970 3.594 0.0 0.1217 + 10.980 4.115 0.0 0.1217 + 10.990 4.605 0.0 0.1216 + 11.000 5.060 0.0 0.1214 + 11.010 5.475 0.0 0.1212 + 11.020 5.846 0.0 0.1210 + 11.030 6.169 0.0 0.1210 + 11.040 6.441 0.0 0.1211 + 11.050 6.658 0.0 0.1213 + 11.060 6.817 0.0 0.1215 + 11.070 6.915 0.0 0.1216 + 11.080 6.950 0.0 0.1216 + 11.090 6.919 0.0 0.1215 + 11.100 6.823 0.0 0.1213 + 11.110 6.661 0.0 0.1211 + 11.120 6.434 0.0 0.1210 + 11.130 6.144 0.0 0.1210 + 11.140 5.793 0.0 0.1212 + 11.150 5.386 0.0 0.1214 + 11.160 4.929 0.0 0.1215 + 11.170 4.427 0.0 0.1216 + 11.180 3.888 0.0 0.1216 + 11.190 3.318 0.0 0.1214 + 11.200 2.725 0.0 0.1212 + 11.210 2.117 0.0 0.1211 + 11.220 1.502 0.0 0.1210 + 11.230 0.885 0.0 0.1210 + 11.240 0.272 0.0 0.1212 + 11.250 -0.330 0.0 0.1213 + 11.260 -0.918 0.0 0.1215 + 11.270 -1.488 0.0 0.1215 + 11.280 -2.037 0.0 0.1215 + 11.290 -2.563 0.0 0.1213 + 11.300 -3.065 0.0 0.1211 + 11.310 -3.539 0.0 0.1210 + 11.320 -3.986 0.0 0.1209 + 11.330 -4.404 0.0 0.1210 + 11.340 -4.791 0.0 0.1212 + 11.350 -5.146 0.0 0.1214 + 11.360 -5.467 0.0 0.1216 + 11.370 -5.752 0.0 0.1216 + 11.380 -5.999 0.0 0.1215 + 11.390 -6.206 0.0 0.1213 + 11.400 -6.371 0.0 0.1211 + 11.410 -6.493 0.0 0.1210 + 11.420 -6.571 0.0 0.1209 + 11.430 -6.605 0.0 0.1210 + 11.440 -6.595 0.0 0.1212 + 11.450 -6.543 0.0 0.1214 + 11.460 -6.450 0.0 0.1216 + 11.470 -6.319 0.0 0.1216 + 11.480 -6.154 0.0 0.1215 + 11.490 -5.958 0.0 0.1213 + 11.500 -5.735 0.0 0.1211 + 11.510 -5.488 0.0 0.1210 + 11.520 -5.222 0.0 0.1210 + 11.530 -4.940 0.0 0.1211 + 11.540 -4.646 0.0 0.1213 + 11.550 -4.342 0.0 0.1215 + 11.560 -4.031 0.0 0.1216 + 11.570 -3.713 0.0 0.1216 + 11.580 -3.391 0.0 0.1215 + 11.590 -3.064 0.0 0.1213 + 11.600 -2.734 0.0 0.1211 + 11.610 -2.399 0.0 0.1210 + 11.620 -2.062 0.0 0.1210 + 11.630 -1.720 0.0 0.1211 + 11.640 -1.375 0.0 0.1213 + 11.650 -1.026 0.0 0.1215 + 11.660 -0.673 0.0 0.1216 + 11.670 -0.319 0.0 0.1216 + 11.680 0.038 0.0 0.1215 + 11.690 0.395 0.0 0.1212 + 11.700 0.752 0.0 0.1210 + 11.710 1.106 0.0 0.1210 + 11.720 1.456 0.0 0.1210 + 11.730 1.800 0.0 0.1212 + 11.740 2.136 0.0 0.1214 + 11.750 2.461 0.0 0.1216 + 11.760 2.774 0.0 0.1217 + 11.770 3.071 0.0 0.1216 + 11.780 3.351 0.0 0.1215 + 11.790 3.611 0.0 0.1213 + 11.800 3.849 0.0 0.1211 + 11.810 4.063 0.0 0.1210 + 11.820 4.251 0.0 0.1210 + 11.830 4.411 0.0 0.1212 + 11.840 4.542 0.0 0.1214 + 11.850 4.644 0.0 0.1216 + 11.860 4.718 0.0 0.1216 + 11.870 4.763 0.0 0.1215 + 11.880 4.782 0.0 0.1214 + 11.890 4.776 0.0 0.1212 + 11.900 4.749 0.0 0.1210 + 11.910 4.704 0.0 0.1210 + 11.920 4.644 0.0 0.1211 + 11.930 4.574 0.0 0.1213 + 11.940 4.496 0.0 0.1215 + 11.950 4.416 0.0 0.1217 + 11.960 4.334 0.0 0.1217 + 11.970 4.254 0.0 0.1216 + 11.980 4.177 0.0 0.1214 + 11.990 4.102 0.0 0.1212 + 12.000 4.030 0.0 0.1211 + 12.010 3.959 0.0 0.1210 + 12.020 3.886 0.0 0.1211 + 12.030 3.809 0.0 0.1213 + 12.040 3.725 0.0 0.1215 + 12.050 3.631 0.0 0.1216 + 12.060 3.524 0.0 0.1217 + 12.070 3.403 0.0 0.1216 + 12.080 3.266 0.0 0.1214 + 12.090 3.115 0.0 0.1212 + 12.100 2.950 0.0 0.1211 + 12.110 2.775 0.0 0.1211 + 12.120 2.593 0.0 0.1212 + 12.130 2.411 0.0 0.1214 + 12.140 2.233 0.0 0.1215 + 12.150 2.066 0.0 0.1216 + 12.160 1.916 0.0 0.1216 + 12.170 1.789 0.0 0.1215 + 12.180 1.690 0.0 0.1213 + 12.190 1.622 0.0 0.1211 + 12.200 1.587 0.0 0.1210 + 12.210 1.587 0.0 0.1210 + 12.220 1.620 0.0 0.1211 + 12.230 1.684 0.0 0.1213 + 12.240 1.774 0.0 0.1215 + 12.250 1.886 0.0 0.1216 + 12.260 2.013 0.0 0.1216 + 12.270 2.150 0.0 0.1215 + 12.280 2.290 0.0 0.1213 + 12.290 2.427 0.0 0.1211 + 12.300 2.556 0.0 0.1210 + 12.310 2.673 0.0 0.1210 + 12.320 2.775 0.0 0.1212 + 12.330 2.860 0.0 0.1213 + 12.340 2.928 0.0 0.1215 + 12.350 2.979 0.0 0.1215 + 12.360 3.015 0.0 0.1215 + 12.370 3.036 0.0 0.1214 + 12.380 3.046 0.0 0.1212 + 12.390 3.045 0.0 0.1211 + 12.400 3.035 0.0 0.1210 + 12.410 3.016 0.0 0.1211 + 12.420 2.987 0.0 0.1212 + 12.430 2.947 0.0 0.1214 + 12.440 2.894 0.0 0.1215 + 12.450 2.825 0.0 0.1216 + 12.460 2.736 0.0 0.1215 + 12.470 2.625 0.0 0.1213 + 12.480 2.488 0.0 0.1211 + 12.490 2.322 0.0 0.1210 + 12.500 2.127 0.0 0.1209 + 12.510 1.901 0.0 0.1210 + 12.520 1.647 0.0 0.1212 + 12.530 1.367 0.0 0.1214 + 12.540 1.064 0.0 0.1215 + 12.550 0.745 0.0 0.1215 + 12.560 0.416 0.0 0.1214 + 12.570 0.083 0.0 0.1213 + 12.580 -0.245 0.0 0.1211 + 12.590 -0.561 0.0 0.1210 + 12.600 -0.858 0.0 0.1210 + 12.610 -1.131 0.0 0.1211 + 12.620 -1.376 0.0 0.1213 + 12.630 -1.588 0.0 0.1215 + 12.640 -1.767 0.0 0.1216 + 12.650 -1.912 0.0 0.1216 + 12.660 -2.026 0.0 0.1214 + 12.670 -2.111 0.0 0.1212 + 12.680 -2.172 0.0 0.1210 + 12.690 -2.212 0.0 0.1209 + 12.700 -2.237 0.0 0.1210 + 12.710 -2.251 0.0 0.1211 + 12.720 -2.259 0.0 0.1213 + 12.730 -2.264 0.0 0.1215 + 12.740 -2.269 0.0 0.1216 + 12.750 -2.276 0.0 0.1216 + 12.760 -2.285 0.0 0.1215 + 12.770 -2.297 0.0 0.1213 + 12.780 -2.310 0.0 0.1211 + 12.790 -2.324 0.0 0.1210 + 12.800 -2.336 0.0 0.1210 + 12.810 -2.345 0.0 0.1212 + 12.820 -2.350 0.0 0.1214 + 12.830 -2.349 0.0 0.1216 + 12.840 -2.343 0.0 0.1216 + 12.850 -2.333 0.0 0.1216 + 12.860 -2.319 0.0 0.1214 + 12.870 -2.303 0.0 0.1212 + 12.880 -2.289 0.0 0.1211 + 12.890 -2.279 0.0 0.1210 + 12.900 -2.275 0.0 0.1210 + 12.910 -2.282 0.0 0.1212 + 12.920 -2.301 0.0 0.1214 + 12.930 -2.333 0.0 0.1216 + 12.940 -2.381 0.0 0.1217 + 12.950 -2.444 0.0 0.1216 + 12.960 -2.521 0.0 0.1215 + 12.970 -2.612 0.0 0.1212 + 12.980 -2.712 0.0 0.1210 + 12.990 -2.820 0.0 0.1210 + 13.000 -2.931 0.0 0.1210 + 13.010 -3.043 0.0 0.1212 + 13.020 -3.150 0.0 0.1214 + 13.030 -3.251 0.0 0.1216 + 13.040 -3.342 0.0 0.1217 + 13.050 -3.420 0.0 0.1216 + 13.060 -3.485 0.0 0.1215 + 13.070 -3.535 0.0 0.1213 + 13.080 -3.570 0.0 0.1211 + 13.090 -3.592 0.0 0.1210 + 13.100 -3.601 0.0 0.1211 + 13.110 -3.599 0.0 0.1212 + 13.120 -3.589 0.0 0.1214 + 13.130 -3.571 0.0 0.1216 + 13.140 -3.549 0.0 0.1216 + 13.150 -3.524 0.0 0.1216 + 13.160 -3.497 0.0 0.1214 + 13.170 -3.469 0.0 0.1212 + 13.180 -3.441 0.0 0.1211 + 13.190 -3.412 0.0 0.1210 + 13.200 -3.381 0.0 0.1211 + 13.210 -3.349 0.0 0.1213 + 13.220 -3.314 0.0 0.1215 + 13.230 -3.273 0.0 0.1216 + 13.240 -3.226 0.0 0.1216 + 13.250 -3.170 0.0 0.1216 + 13.260 -3.105 0.0 0.1214 + 13.270 -3.028 0.0 0.1212 + 13.280 -2.939 0.0 0.1211 + 13.290 -2.836 0.0 0.1210 + 13.300 -2.719 0.0 0.1211 + 13.310 -2.587 0.0 0.1213 + 13.320 -2.440 0.0 0.1214 + 13.330 -2.277 0.0 0.1215 + 13.340 -2.100 0.0 0.1216 + 13.350 -1.907 0.0 0.1215 + 13.360 -1.701 0.0 0.1213 + 13.370 -1.483 0.0 0.1212 + 13.380 -1.252 0.0 0.1211 + 13.390 -1.012 0.0 0.1211 + 13.400 -0.763 0.0 0.1212 + 13.410 -0.508 0.0 0.1213 + 13.420 -0.251 0.0 0.1215 + 13.430 0.007 0.0 0.1216 + 13.440 0.261 0.0 0.1215 + 13.450 0.507 0.0 0.1214 + 13.460 0.743 0.0 0.1212 + 13.470 0.962 0.0 0.1211 + 13.480 1.162 0.0 0.1210 + 13.490 1.338 0.0 0.1210 + 13.500 1.486 0.0 0.1212 + 13.510 1.604 0.0 0.1213 + 13.520 1.689 0.0 0.1215 + 13.530 1.739 0.0 0.1216 + 13.540 1.755 0.0 0.1215 + 13.550 1.735 0.0 0.1214 + 13.560 1.682 0.0 0.1213 + 13.570 1.599 0.0 0.1212 + 13.580 1.489 0.0 0.1211 + 13.590 1.357 0.0 0.1211 + 13.600 1.208 0.0 0.1212 + 13.610 1.047 0.0 0.1213 + 13.620 0.882 0.0 0.1214 + 13.630 0.717 0.0 0.1215 + 13.640 0.559 0.0 0.1214 + 13.650 0.412 0.0 0.1213 + 13.660 0.282 0.0 0.1211 + 13.670 0.171 0.0 0.1211 + 13.680 0.081 0.0 0.1210 + 13.690 0.014 0.0 0.1211 + 13.700 -0.031 0.0 0.1213 + 13.710 -0.054 0.0 0.1214 + 13.720 -0.059 0.0 0.1215 + 13.730 -0.048 0.0 0.1215 + 13.740 -0.025 0.0 0.1214 + 13.750 0.006 0.0 0.1213 + 13.760 0.041 0.0 0.1211 + 13.770 0.075 0.0 0.1210 + 13.780 0.105 0.0 0.1210 + 13.790 0.128 0.0 0.1211 + 13.800 0.141 0.0 0.1213 + 13.810 0.143 0.0 0.1215 + 13.820 0.131 0.0 0.1216 + 13.830 0.107 0.0 0.1215 + 13.840 0.070 0.0 0.1214 + 13.850 0.021 0.0 0.1213 + 13.860 -0.039 0.0 0.1212 + 13.870 -0.109 0.0 0.1211 + 13.880 -0.187 0.0 0.1211 + 13.890 -0.273 0.0 0.1212 + 13.900 -0.364 0.0 0.1214 + 13.910 -0.461 0.0 0.1215 + 13.920 -0.564 0.0 0.1216 + 13.930 -0.671 0.0 0.1215 + 13.940 -0.782 0.0 0.1214 + 13.950 -0.897 0.0 0.1212 + 13.960 -1.017 0.0 0.1210 + 13.970 -1.138 0.0 0.1210 + 13.980 -1.261 0.0 0.1210 + 13.990 -1.381 0.0 0.1212 + 14.000 -1.497 0.0 0.1214 + 14.010 -1.605 0.0 0.1215 + 14.020 -1.699 0.0 0.1216 + 14.030 -1.774 0.0 0.1216 + 14.040 -1.825 0.0 0.1214 + 14.050 -1.846 0.0 0.1212 + 14.060 -1.830 0.0 0.1211 + 14.070 -1.775 0.0 0.1210 + 14.080 -1.674 0.0 0.1211 + 14.090 -1.526 0.0 0.1212 + 14.100 -1.330 0.0 0.1214 + 14.110 -1.085 0.0 0.1215 + 14.120 -0.795 0.0 0.1216 + 14.130 -0.463 0.0 0.1215 + 14.140 -0.094 0.0 0.1214 + 14.150 0.302 0.0 0.1212 + 14.160 0.720 0.0 0.1211 + 14.170 1.148 0.0 0.1211 + 14.180 1.579 0.0 0.1212 + 14.190 2.002 0.0 0.1213 + 14.200 2.410 0.0 0.1215 + 14.210 2.795 0.0 0.1216 + 14.220 3.150 0.0 0.1216 + 14.230 3.470 0.0 0.1215 + 14.240 3.753 0.0 0.1214 + 14.250 3.998 0.0 0.1212 + 14.260 4.203 0.0 0.1211 + 14.270 4.370 0.0 0.1211 + 14.280 4.503 0.0 0.1212 + 14.290 4.603 0.0 0.1213 + 14.300 4.674 0.0 0.1215 + 14.310 4.722 0.0 0.1216 + 14.320 4.748 0.0 0.1216 + 14.330 4.756 0.0 0.1215 + 14.340 4.750 0.0 0.1214 + 14.350 4.732 0.0 0.1212 + 14.360 4.703 0.0 0.1211 + 14.370 4.666 0.0 0.1211 + 14.380 4.622 0.0 0.1212 + 14.390 4.572 0.0 0.1213 + 14.400 4.519 0.0 0.1215 + 14.410 4.464 0.0 0.1215 + 14.420 4.410 0.0 0.1215 + 14.430 4.361 0.0 0.1215 + 14.440 4.320 0.0 0.1213 + 14.450 4.290 0.0 0.1212 + 14.460 4.276 0.0 0.1211 + 14.470 4.282 0.0 0.1211 + 14.480 4.310 0.0 0.1212 + 14.490 4.363 0.0 0.1214 + 14.500 4.442 0.0 0.1215 + 14.510 4.546 0.0 0.1216 + 14.520 4.674 0.0 0.1216 + 14.530 4.820 0.0 0.1215 + 14.540 4.980 0.0 0.1213 + 14.550 5.145 0.0 0.1211 + 14.560 5.308 0.0 0.1211 + 14.570 5.460 0.0 0.1211 + 14.580 5.591 0.0 0.1212 + 14.590 5.691 0.0 0.1213 + 14.600 5.752 0.0 0.1214 + 14.610 5.768 0.0 0.1215 + 14.620 5.734 0.0 0.1214 + 14.630 5.646 0.0 0.1213 + 14.640 5.503 0.0 0.1212 + 14.650 5.307 0.0 0.1211 + 14.660 5.063 0.0 0.1210 + 14.670 4.775 0.0 0.1211 + 14.680 4.451 0.0 0.1212 + 14.690 4.098 0.0 0.1214 + 14.700 3.724 0.0 0.1215 + 14.710 3.337 0.0 0.1215 + 14.720 2.945 0.0 0.1215 + 14.730 2.554 0.0 0.1213 + 14.740 2.166 0.0 0.1212 + 14.750 1.786 0.0 0.1211 + 14.760 1.414 0.0 0.1211 + 14.770 1.049 0.0 0.1211 + 14.780 0.689 0.0 0.1213 + 14.790 0.333 0.0 0.1214 + 14.800 -0.023 0.0 0.1215 + 14.810 -0.383 0.0 0.1215 + 14.820 -0.746 0.0 0.1215 + 14.830 -1.116 0.0 0.1213 + 14.840 -1.491 0.0 0.1212 + 14.850 -1.869 0.0 0.1211 + 14.860 -2.248 0.0 0.1211 + 14.870 -2.622 0.0 0.1211 + 14.880 -2.986 0.0 0.1213 + 14.890 -3.333 0.0 0.1214 + 14.900 -3.657 0.0 0.1215 + 14.910 -3.952 0.0 0.1215 + 14.920 -4.213 0.0 0.1214 + 14.930 -4.434 0.0 0.1213 + 14.940 -4.615 0.0 0.1212 + 14.950 -4.754 0.0 0.1211 + 14.960 -4.852 0.0 0.1211 + 14.970 -4.914 0.0 0.1212 + 14.980 -4.942 0.0 0.1213 + 14.990 -4.942 0.0 0.1215 + 15.000 -4.921 0.0 0.1215 + 15.010 -4.884 0.0 0.1215 + 15.020 -4.837 0.0 0.1214 + 15.030 -4.785 0.0 0.1213 + 15.040 -4.730 0.0 0.1211 + 15.050 -4.676 0.0 0.1211 + 15.060 -4.622 0.0 0.1211 + 15.070 -4.568 0.0 0.1212 + 15.080 -4.511 0.0 0.1213 + 15.090 -4.449 0.0 0.1215 + 15.100 -4.380 0.0 0.1215 + 15.110 -4.299 0.0 0.1215 + 15.120 -4.204 0.0 0.1214 + 15.130 -4.096 0.0 0.1212 + 15.140 -3.973 0.0 0.1211 + 15.150 -3.838 0.0 0.1211 + 15.160 -3.693 0.0 0.1211 + 15.170 -3.544 0.0 0.1213 + 15.180 -3.397 0.0 0.1214 + 15.190 -3.257 0.0 0.1215 + 15.200 -3.131 0.0 0.1215 + 15.210 -3.025 0.0 0.1215 + 15.220 -2.943 0.0 0.1213 + 15.230 -2.888 0.0 0.1212 + 15.240 -2.862 0.0 0.1211 + 15.250 -2.863 0.0 0.1211 + 15.260 -2.888 0.0 0.1212 + 15.270 -2.931 0.0 0.1213 + 15.280 -2.986 0.0 0.1215 + 15.290 -3.044 0.0 0.1216 + 15.300 -3.097 0.0 0.1216 + 15.310 -3.137 0.0 0.1215 + 15.320 -3.155 0.0 0.1213 + 15.330 -3.146 0.0 0.1212 + 15.340 -3.106 0.0 0.1211 + 15.350 -3.035 0.0 0.1211 + 15.360 -2.932 0.0 0.1212 + 15.370 -2.804 0.0 0.1213 + 15.380 -2.654 0.0 0.1215 + 15.390 -2.492 0.0 0.1216 + 15.400 -2.326 0.0 0.1216 + 15.410 -2.165 0.0 0.1215 + 15.420 -2.018 0.0 0.1213 + 15.430 -1.892 0.0 0.1212 + 15.440 -1.793 0.0 0.1211 + 15.450 -1.725 0.0 0.1211 + 15.460 -1.687 0.0 0.1212 + 15.470 -1.677 0.0 0.1214 + 15.480 -1.690 0.0 0.1215 + 15.490 -1.720 0.0 0.1216 + 15.500 -1.757 0.0 0.1216 + 15.510 -1.793 0.0 0.1215 + 15.520 -1.819 0.0 0.1213 + 15.530 -1.825 0.0 0.1212 + 15.540 -1.806 0.0 0.1211 + 15.550 -1.757 0.0 0.1211 + 15.560 -1.677 0.0 0.1212 + 15.570 -1.566 0.0 0.1214 + 15.580 -1.430 0.0 0.1215 + 15.590 -1.273 0.0 0.1216 + 15.600 -1.106 0.0 0.1215 + 15.610 -0.939 0.0 0.1214 + 15.620 -0.782 0.0 0.1213 + 15.630 -0.645 0.0 0.1211 + 15.640 -0.537 0.0 0.1211 + 15.650 -0.467 0.0 0.1211 + 15.660 -0.437 0.0 0.1212 + 15.670 -0.450 0.0 0.1214 + 15.680 -0.505 0.0 0.1215 + 15.690 -0.596 0.0 0.1216 + 15.700 -0.716 0.0 0.1215 + 15.710 -0.857 0.0 0.1214 + 15.720 -1.006 0.0 0.1212 + 15.730 -1.152 0.0 0.1211 + 15.740 -1.284 0.0 0.1210 + 15.750 -1.392 0.0 0.1211 + 15.760 -1.465 0.0 0.1212 + 15.770 -1.498 0.0 0.1214 + 15.780 -1.486 0.0 0.1215 + 15.790 -1.428 0.0 0.1215 + 15.800 -1.325 0.0 0.1215 + 15.810 -1.181 0.0 0.1213 + 15.820 -1.001 0.0 0.1212 + 15.830 -0.793 0.0 0.1211 + 15.840 -0.564 0.0 0.1210 + 15.850 -0.323 0.0 0.1211 + 15.860 -0.078 0.0 0.1212 + 15.870 0.164 0.0 0.1214 + 15.880 0.398 0.0 0.1215 + 15.890 0.619 0.0 0.1215 + 15.900 0.824 0.0 0.1214 + 15.910 1.010 0.0 0.1213 + 15.920 1.178 0.0 0.1211 + 15.930 1.328 0.0 0.1210 + 15.940 1.459 0.0 0.1210 + 15.950 1.574 0.0 0.1211 + 15.960 1.671 0.0 0.1212 + 15.970 1.752 0.0 0.1214 + 15.980 1.815 0.0 0.1215 + 15.990 1.860 0.0 0.1215 + 16.000 1.884 0.0 0.1214 + 16.010 1.885 0.0 0.1213 + 16.020 1.861 0.0 0.1212 + 16.030 1.810 0.0 0.1211 + 16.040 1.731 0.0 0.1211 + 16.050 1.623 0.0 0.1212 + 16.060 1.488 0.0 0.1213 + 16.070 1.326 0.0 0.1214 + 16.080 1.143 0.0 0.1215 + 16.090 0.942 0.0 0.1215 + 16.100 0.731 0.0 0.1214 + 16.110 0.516 0.0 0.1213 + 16.120 0.305 0.0 0.1211 + 16.130 0.106 0.0 0.1211 + 16.140 -0.075 0.0 0.1211 + 16.150 -0.230 0.0 0.1212 + 16.160 -0.355 0.0 0.1213 + 16.170 -0.444 0.0 0.1215 + 16.180 -0.496 0.0 0.1215 + 16.190 -0.510 0.0 0.1215 + 16.200 -0.484 0.0 0.1214 + 16.210 -0.421 0.0 0.1212 + 16.220 -0.323 0.0 0.1211 + 16.230 -0.192 0.0 0.1211 + 16.240 -0.032 0.0 0.1211 + 16.250 0.155 0.0 0.1212 + 16.260 0.366 0.0 0.1213 + 16.270 0.599 0.0 0.1215 + 16.280 0.852 0.0 0.1215 + 16.290 1.124 0.0 0.1215 + 16.300 1.413 0.0 0.1214 + 16.310 1.720 0.0 0.1212 + 16.320 2.042 0.0 0.1211 + 16.330 2.378 0.0 0.1211 + 16.340 2.725 0.0 0.1212 + 16.350 3.079 0.0 0.1213 + 16.360 3.437 0.0 0.1215 + 16.370 3.793 0.0 0.1216 + 16.380 4.141 0.0 0.1216 + 16.390 4.475 0.0 0.1215 + 16.400 4.786 0.0 0.1214 + 16.410 5.070 0.0 0.1212 + 16.420 5.319 0.0 0.1211 + 16.430 5.529 0.0 0.1211 + 16.440 5.696 0.0 0.1212 + 16.450 5.818 0.0 0.1213 + 16.460 5.897 0.0 0.1214 + 16.470 5.932 0.0 0.1215 + 16.480 5.929 0.0 0.1215 + 16.490 5.891 0.0 0.1215 + 16.500 5.825 0.0 0.1213 + 16.510 5.736 0.0 0.1212 + 16.520 5.630 0.0 0.1211 + 16.530 5.513 0.0 0.1211 + 16.540 5.388 0.0 0.1212 + 16.550 5.258 0.0 0.1213 + 16.560 5.123 0.0 0.1215 + 16.570 4.982 0.0 0.1215 + 16.580 4.832 0.0 0.1215 + 16.590 4.669 0.0 0.1214 + 16.600 4.487 0.0 0.1213 + 16.610 4.280 0.0 0.1212 + 16.620 4.045 0.0 0.1211 + 16.630 3.776 0.0 0.1211 + 16.640 3.472 0.0 0.1212 + 16.650 3.131 0.0 0.1214 + 16.660 2.757 0.0 0.1215 + 16.670 2.352 0.0 0.1216 + 16.680 1.925 0.0 0.1215 + 16.690 1.484 0.0 0.1214 + 16.700 1.040 0.0 0.1213 + 16.710 0.603 0.0 0.1212 + 16.720 0.185 0.0 0.1211 + 16.730 -0.203 0.0 0.1211 + 16.740 -0.553 0.0 0.1212 + 16.750 -0.856 0.0 0.1213 + 16.760 -1.110 0.0 0.1215 + 16.770 -1.313 0.0 0.1215 + 16.780 -1.465 0.0 0.1215 + 16.790 -1.573 0.0 0.1214 + 16.800 -1.643 0.0 0.1212 + 16.810 -1.684 0.0 0.1211 + 16.820 -1.705 0.0 0.1211 + 16.830 -1.716 0.0 0.1212 + 16.840 -1.727 0.0 0.1213 + 16.850 -1.746 0.0 0.1214 + 16.860 -1.778 0.0 0.1215 + 16.870 -1.826 0.0 0.1215 + 16.880 -1.892 0.0 0.1214 + 16.890 -1.972 0.0 0.1213 + 16.900 -2.062 0.0 0.1212 + 16.910 -2.154 0.0 0.1211 + 16.920 -2.241 0.0 0.1211 + 16.930 -2.313 0.0 0.1211 + 16.940 -2.362 0.0 0.1213 + 16.950 -2.379 0.0 0.1214 + 16.960 -2.360 0.0 0.1215 + 16.970 -2.299 0.0 0.1215 + 16.980 -2.197 0.0 0.1214 + 16.990 -2.055 0.0 0.1213 + 17.000 -1.878 0.0 0.1212 + 17.010 -1.673 0.0 0.1211 + 17.020 -1.449 0.0 0.1211 + 17.030 -1.216 0.0 0.1212 + 17.040 -0.985 0.0 0.1213 + 17.050 -0.766 0.0 0.1214 + 17.060 -0.568 0.0 0.1215 + 17.070 -0.398 0.0 0.1215 + 17.080 -0.261 0.0 0.1214 + 17.090 -0.159 0.0 0.1212 + 17.100 -0.093 0.0 0.1211 + 17.110 -0.060 0.0 0.1210 + 17.120 -0.056 0.0 0.1211 + 17.130 -0.073 0.0 0.1212 + 17.140 -0.105 0.0 0.1213 + 17.150 -0.146 0.0 0.1215 + 17.160 -0.187 0.0 0.1215 + 17.170 -0.223 0.0 0.1215 + 17.180 -0.250 0.0 0.1214 + 17.190 -0.266 0.0 0.1213 + 17.200 -0.270 0.0 0.1211 + 17.210 -0.264 0.0 0.1211 + 17.220 -0.252 0.0 0.1211 + 17.230 -0.237 0.0 0.1212 + 17.240 -0.226 0.0 0.1213 + 17.250 -0.225 0.0 0.1215 + 17.260 -0.238 0.0 0.1215 + 17.270 -0.270 0.0 0.1215 + 17.280 -0.325 0.0 0.1214 + 17.290 -0.405 0.0 0.1212 + 17.300 -0.509 0.0 0.1211 + 17.310 -0.636 0.0 0.1211 + 17.320 -0.782 0.0 0.1211 + 17.330 -0.943 0.0 0.1213 + 17.340 -1.114 0.0 0.1214 + 17.350 -1.289 0.0 0.1215 + 17.360 -1.462 0.0 0.1216 + 17.370 -1.629 0.0 0.1215 + 17.380 -1.783 0.0 0.1214 + 17.390 -1.923 0.0 0.1212 + 17.400 -2.046 0.0 0.1211 + 17.410 -2.151 0.0 0.1211 + 17.420 -2.237 0.0 0.1211 + 17.430 -2.307 0.0 0.1213 + 17.440 -2.360 0.0 0.1214 + 17.450 -2.399 0.0 0.1215 + 17.460 -2.425 0.0 0.1216 + 17.470 -2.439 0.0 0.1215 + 17.480 -2.441 0.0 0.1214 + 17.490 -2.431 0.0 0.1213 + 17.500 -2.407 0.0 0.1211 + 17.510 -2.369 0.0 0.1211 + 17.520 -2.313 0.0 0.1212 + 17.530 -2.239 0.0 0.1213 + 17.540 -2.145 0.0 0.1214 + 17.550 -2.031 0.0 0.1215 + 17.560 -1.896 0.0 0.1215 + 17.570 -1.743 0.0 0.1215 + 17.580 -1.575 0.0 0.1213 + 17.590 -1.397 0.0 0.1212 + 17.600 -1.216 0.0 0.1211 + 17.610 -1.038 0.0 0.1211 + 17.620 -0.873 0.0 0.1212 + 17.630 -0.727 0.0 0.1213 + 17.640 -0.610 0.0 0.1215 + 17.650 -0.528 0.0 0.1216 + 17.660 -0.486 0.0 0.1216 + 17.670 -0.488 0.0 0.1215 + 17.680 -0.536 0.0 0.1214 + 17.690 -0.628 0.0 0.1212 + 17.700 -0.761 0.0 0.1211 + 17.710 -0.930 0.0 0.1211 + 17.720 -1.127 0.0 0.1212 + 17.730 -1.343 0.0 0.1213 + 17.740 -1.570 0.0 0.1215 + 17.750 -1.797 0.0 0.1215 + 17.760 -2.015 0.0 0.1215 + 17.770 -2.217 0.0 0.1214 + 17.780 -2.396 0.0 0.1213 + 17.790 -2.547 0.0 0.1211 + 17.800 -2.666 0.0 0.1211 + 17.810 -2.754 0.0 0.1211 + 17.820 -2.810 0.0 0.1212 + 17.830 -2.837 0.0 0.1214 + 17.840 -2.839 0.0 0.1215 + 17.850 -2.819 0.0 0.1216 + 17.860 -2.781 0.0 0.1215 + 17.870 -2.730 0.0 0.1214 + 17.880 -2.668 0.0 0.1213 + 17.890 -2.599 0.0 0.1211 + 17.900 -2.522 0.0 0.1210 + 17.910 -2.438 0.0 0.1211 + 17.920 -2.346 0.0 0.1212 + 17.930 -2.244 0.0 0.1213 + 17.940 -2.130 0.0 0.1214 + 17.950 -2.001 0.0 0.1215 + 17.960 -1.855 0.0 0.1215 + 17.970 -1.690 0.0 0.1214 + 17.980 -1.505 0.0 0.1213 + 17.990 -1.302 0.0 0.1211 + 18.000 -1.080 0.0 0.1211 + 18.010 -0.845 0.0 0.1211 + 18.020 -0.598 0.0 0.1212 + 18.030 -0.344 0.0 0.1213 + 18.040 -0.090 0.0 0.1215 + 18.050 0.161 0.0 0.1215 + 18.060 0.404 0.0 0.1215 + 18.070 0.635 0.0 0.1214 + 18.080 0.849 0.0 0.1212 + 18.090 1.047 0.0 0.1211 + 18.100 1.226 0.0 0.1211 + 18.110 1.387 0.0 0.1211 + 18.120 1.532 0.0 0.1212 + 18.130 1.662 0.0 0.1214 + 18.140 1.779 0.0 0.1215 + 18.150 1.887 0.0 0.1215 + 18.160 1.987 0.0 0.1214 + 18.170 2.081 0.0 0.1213 + 18.180 2.170 0.0 0.1212 + 18.190 2.251 0.0 0.1211 + 18.200 2.325 0.0 0.1211 + 18.210 2.388 0.0 0.1212 + 18.220 2.437 0.0 0.1213 + 18.230 2.467 0.0 0.1214 + 18.240 2.475 0.0 0.1214 + 18.250 2.457 0.0 0.1215 + 18.260 2.410 0.0 0.1214 + 18.270 2.332 0.0 0.1213 + 18.280 2.224 0.0 0.1212 + 18.290 2.086 0.0 0.1211 + 18.300 1.922 0.0 0.1211 + 18.310 1.736 0.0 0.1212 + 18.320 1.534 0.0 0.1213 + 18.330 1.324 0.0 0.1214 + 18.340 1.113 0.0 0.1215 + 18.350 0.909 0.0 0.1215 + 18.360 0.719 0.0 0.1214 + 18.370 0.550 0.0 0.1213 + 18.380 0.406 0.0 0.1212 + 18.390 0.291 0.0 0.1211 + 18.400 0.207 0.0 0.1211 + 18.410 0.153 0.0 0.1212 + 18.420 0.127 0.0 0.1213 + 18.430 0.126 0.0 0.1214 + 18.440 0.145 0.0 0.1215 + 18.450 0.180 0.0 0.1215 + 18.460 0.224 0.0 0.1214 + 18.470 0.273 0.0 0.1213 + 18.480 0.323 0.0 0.1212 + 18.490 0.370 0.0 0.1212 + 18.500 0.413 0.0 0.1212 + 18.510 0.452 0.0 0.1213 + 18.520 0.486 0.0 0.1214 + 18.530 0.519 0.0 0.1215 + 18.540 0.553 0.0 0.1215 + 18.550 0.592 0.0 0.1214 + 18.560 0.640 0.0 0.1213 + 18.570 0.700 0.0 0.1212 + 18.580 0.775 0.0 0.1212 + 18.590 0.866 0.0 0.1212 + 18.600 0.973 0.0 0.1212 + 18.610 1.097 0.0 0.1213 + 18.620 1.233 0.0 0.1214 + 18.630 1.379 0.0 0.1215 + 18.640 1.530 0.0 0.1215 + 18.650 1.681 0.0 0.1215 + 18.660 1.827 0.0 0.1213 + 18.670 1.963 0.0 0.1212 + 18.680 2.085 0.0 0.1212 + 18.690 2.188 0.0 0.1212 + 18.700 2.271 0.0 0.1212 + 18.710 2.333 0.0 0.1213 + 18.720 2.374 0.0 0.1215 + 18.730 2.396 0.0 0.1215 + 18.740 2.402 0.0 0.1215 + 18.750 2.394 0.0 0.1214 + 18.760 2.376 0.0 0.1213 + 18.770 2.351 0.0 0.1212 + 18.780 2.323 0.0 0.1211 + 18.790 2.292 0.0 0.1211 + 18.800 2.261 0.0 0.1212 + 18.810 2.228 0.0 0.1214 + 18.820 2.193 0.0 0.1215 + 18.830 2.154 0.0 0.1215 + 18.840 2.106 0.0 0.1215 + 18.850 2.047 0.0 0.1214 + 18.860 1.973 0.0 0.1213 + 18.870 1.880 0.0 0.1211 + 18.880 1.767 0.0 0.1211 + 18.890 1.631 0.0 0.1211 + 18.900 1.474 0.0 0.1212 + 18.910 1.296 0.0 0.1213 + 18.920 1.100 0.0 0.1214 + 18.930 0.892 0.0 0.1215 + 18.940 0.678 0.0 0.1215 + 18.950 0.462 0.0 0.1214 + 18.960 0.254 0.0 0.1213 + 18.970 0.060 0.0 0.1212 + 18.980 -0.114 0.0 0.1211 + 18.990 -0.262 0.0 0.1212 + 19.000 -0.380 0.0 0.1213 + 19.010 -0.465 0.0 0.1214 + 19.020 -0.517 0.0 0.1215 + 19.030 -0.536 0.0 0.1215 + 19.040 -0.526 0.0 0.1214 + 19.050 -0.490 0.0 0.1213 + 19.060 -0.434 0.0 0.1212 + 19.070 -0.363 0.0 0.1211 + 19.080 -0.284 0.0 0.1211 + 19.090 -0.203 0.0 0.1211 + 19.100 -0.125 0.0 0.1212 + 19.110 -0.055 0.0 0.1214 + 19.120 0.005 0.0 0.1215 + 19.130 0.054 0.0 0.1215 + 19.140 0.090 0.0 0.1214 + 19.150 0.114 0.0 0.1213 + 19.160 0.130 0.0 0.1212 + 19.170 0.139 0.0 0.1211 + 19.180 0.146 0.0 0.1211 + 19.190 0.152 0.0 0.1212 + 19.200 0.161 0.0 0.1213 + 19.210 0.175 0.0 0.1214 + 19.220 0.195 0.0 0.1215 + 19.230 0.221 0.0 0.1215 + 19.240 0.253 0.0 0.1214 + 19.250 0.287 0.0 0.1213 + 19.260 0.321 0.0 0.1212 + 19.270 0.351 0.0 0.1211 + 19.280 0.373 0.0 0.1211 + 19.290 0.383 0.0 0.1212 + 19.300 0.377 0.0 0.1213 + 19.310 0.354 0.0 0.1214 + 19.320 0.310 0.0 0.1215 + 19.330 0.245 0.0 0.1215 + 19.340 0.160 0.0 0.1214 + 19.350 0.057 0.0 0.1213 + 19.360 -0.060 0.0 0.1212 + 19.370 -0.187 0.0 0.1211 + 19.380 -0.320 0.0 0.1211 + 19.390 -0.453 0.0 0.1212 + 19.400 -0.580 0.0 0.1213 + 19.410 -0.696 0.0 0.1214 + 19.420 -0.798 0.0 0.1215 + 19.430 -0.880 0.0 0.1215 + 19.440 -0.942 0.0 0.1214 + 19.450 -0.981 0.0 0.1213 + 19.460 -0.999 0.0 0.1211 + 19.470 -0.996 0.0 0.1211 + 19.480 -0.976 0.0 0.1211 + 19.490 -0.941 0.0 0.1212 + 19.500 -0.896 0.0 0.1213 + 19.510 -0.845 0.0 0.1214 + 19.520 -0.793 0.0 0.1215 + 19.530 -0.743 0.0 0.1215 + 19.540 -0.699 0.0 0.1214 + 19.550 -0.664 0.0 0.1213 + 19.560 -0.641 0.0 0.1212 + 19.570 -0.631 0.0 0.1211 + 19.580 -0.634 0.0 0.1211 + 19.590 -0.650 0.0 0.1212 + 19.600 -0.678 0.0 0.1214 + 19.610 -0.718 0.0 0.1215 + 19.620 -0.767 0.0 0.1215 + 19.630 -0.825 0.0 0.1215 + 19.640 -0.888 0.0 0.1214 + 19.650 -0.957 0.0 0.1213 + 19.660 -1.028 0.0 0.1212 + 19.670 -1.102 0.0 0.1211 + 19.680 -1.176 0.0 0.1212 + 19.690 -1.250 0.0 0.1213 + 19.700 -1.323 0.0 0.1214 + 19.710 -1.395 0.0 0.1215 + 19.720 -1.463 0.0 0.1215 + 19.730 -1.529 0.0 0.1215 + 19.740 -1.589 0.0 0.1214 + 19.750 -1.643 0.0 0.1213 + 19.760 -1.690 0.0 0.1212 + 19.770 -1.727 0.0 0.1212 + 19.780 -1.754 0.0 0.1212 + 19.790 -1.767 0.0 0.1213 + 19.800 -1.767 0.0 0.1214 + 19.810 -1.751 0.0 0.1215 + 19.820 -1.720 0.0 0.1215 + 19.830 -1.672 0.0 0.1215 + 19.840 -1.609 0.0 0.1213 + 19.850 -1.530 0.0 0.1212 + 19.860 -1.438 0.0 0.1211 + 19.870 -1.334 0.0 0.1211 + 19.880 -1.219 0.0 0.1212 + 19.890 -1.097 0.0 0.1213 + 19.900 -0.969 0.0 0.1214 + 19.910 -0.837 0.0 0.1215 + 19.920 -0.703 0.0 0.1215 + 19.930 -0.568 0.0 0.1214 + 19.940 -0.432 0.0 0.1213 + 19.950 -0.298 0.0 0.1212 + 19.960 -0.163 0.0 0.1211 + 19.970 -0.028 0.0 0.1211 + 19.980 0.108 0.0 0.1212 + 19.990 0.245 0.0 0.1213 + 20.000 0.384 0.0 0.1214 diff --git a/src/diffpy/pdffit2/tests/testdata/Ni.dat b/src/diffpy/pdffit2/tests/testdata/Ni.dat new file mode 100644 index 00000000..360a4d6b --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/Ni.dat @@ -0,0 +1,1001 @@ + 1.50000 -0.539443 0.00000 1.00000 0.539443 + 1.51850 -1.03098 0.00000 1.00000 1.03098 + 1.53700 -1.43712 0.00000 1.00000 1.43712 + 1.55550 -1.73810 0.00000 1.00000 1.73810 + 1.57400 -1.93402 0.00000 1.00000 1.93402 + 1.59250 -2.04145 0.00000 1.00000 2.04145 + 1.61100 -2.08593 0.00000 1.00000 2.08593 + 1.62950 -2.09295 0.00000 1.00000 2.09295 + 1.64800 -2.08072 0.00000 1.00000 2.08072 + 1.66650 -2.05688 0.00000 1.00000 2.05688 + 1.68500 -2.02006 0.00000 1.00000 2.02006 + 1.70350 -1.96554 0.00000 1.00000 1.96554 + 1.72200 -1.89239 0.00000 1.00000 1.89239 + 1.74050 -1.80936 0.00000 1.00000 1.80936 + 1.75900 -1.73670 0.00000 1.00000 1.73670 + 1.77750 -1.70255 0.00000 1.00000 1.70255 + 1.79600 -1.73461 0.00000 1.00000 1.73461 + 1.81450 -1.84946 0.00000 1.00000 1.84946 + 1.83300 -2.04300 0.00000 1.00000 2.04300 + 1.85150 -2.28566 0.00000 1.00000 2.28566 + 1.87000 -2.52486 0.00000 1.00000 2.52486 + 1.88850 -2.69615 0.00000 1.00000 2.69615 + 1.90700 -2.74180 0.00000 1.00000 2.74180 + 1.92550 -2.63223 0.00000 1.00000 2.63223 + 1.94400 -2.38239 0.00000 1.00000 2.38239 + 1.96250 -2.05565 0.00000 1.00000 2.05565 + 1.98100 -1.75092 0.00000 1.00000 1.75092 + 1.99950 -1.57518 0.00000 1.00000 1.57518 + 2.01800 -1.60914 0.00000 1.00000 1.60914 + 2.03650 -1.87687 0.00000 1.00000 1.87687 + 2.05500 -2.33004 0.00000 1.00000 2.33004 + 2.07350 -2.85357 0.00000 1.00000 2.85357 + 2.09200 -3.29353 0.00000 1.00000 3.29353 + 2.11050 -3.50124 0.00000 1.00000 3.50124 + 2.12900 -3.38172 0.00000 1.00000 3.38172 + 2.14750 -2.93205 0.00000 1.00000 2.93205 + 2.16600 -2.25629 0.00000 1.00000 2.25629 + 2.18450 -1.54918 0.00000 1.00000 1.54918 + 2.20300 -1.04888 0.00000 1.00000 1.04888 + 2.22150 -0.968136 0.00000 1.00000 0.968136 + 2.24000 -1.42070 0.00000 1.00000 1.42070 + 2.25850 -2.36300 0.00000 1.00000 2.36300 + 2.27700 -3.56960 0.00000 1.00000 3.56960 + 2.29550 -4.65416 0.00000 1.00000 4.65416 + 2.31400 -5.13684 0.00000 1.00000 5.13684 + 2.33250 -4.54696 0.00000 1.00000 4.54696 + 2.35100 -2.53890 0.00000 1.00000 2.53890 + 2.36950 1.00656 0.00000 1.00000 -1.00656 + 2.38800 5.92223 0.00000 1.00000 -5.92223 + 2.40650 11.7527 0.00000 1.00000 -11.7527 + 2.42500 17.8143 0.00000 1.00000 -17.8143 + 2.44350 23.3057 0.00000 1.00000 -23.3057 + 2.46200 27.4478 0.00000 1.00000 -27.4478 + 2.48050 29.6246 0.00000 1.00000 -29.6246 + 2.49900 29.4986 0.00000 1.00000 -29.4986 + 2.51750 27.0749 0.00000 1.00000 -27.0749 + 2.53600 22.7028 0.00000 1.00000 -22.7028 + 2.55450 17.0112 0.00000 1.00000 -17.0112 + 2.57300 10.7932 0.00000 1.00000 -10.7932 + 2.59150 4.86134 0.00000 1.00000 -4.86134 + 2.61000 -0.0945224 0.00000 1.00000 0.0945224 + 2.62850 -3.61858 0.00000 1.00000 3.61858 + 2.64700 -5.54803 0.00000 1.00000 5.54803 + 2.66550 -6.01016 0.00000 1.00000 6.01016 + 2.68400 -5.36293 0.00000 1.00000 5.36293 + 2.70250 -4.09596 0.00000 1.00000 4.09596 + 2.72100 -2.71625 0.00000 1.00000 2.71625 + 2.73950 -1.64382 0.00000 1.00000 1.64382 + 2.75800 -1.13791 0.00000 1.00000 1.13791 + 2.77650 -1.26649 0.00000 1.00000 1.26649 + 2.79500 -1.92103 0.00000 1.00000 1.92103 + 2.81350 -2.86890 0.00000 1.00000 2.86890 + 2.83200 -3.82782 0.00000 1.00000 3.82782 + 2.85050 -4.54328 0.00000 1.00000 4.54328 + 2.86900 -4.85054 0.00000 1.00000 4.85054 + 2.88750 -4.70809 0.00000 1.00000 4.70809 + 2.90600 -4.19687 0.00000 1.00000 4.19687 + 2.92450 -3.48841 0.00000 1.00000 3.48841 + 2.94300 -2.79256 0.00000 1.00000 2.79256 + 2.96150 -2.29993 0.00000 1.00000 2.29993 + 2.98000 -2.13422 0.00000 1.00000 2.13422 + 2.99850 -2.32552 0.00000 1.00000 2.32552 + 3.01700 -2.80931 0.00000 1.00000 2.80931 + 3.03550 -3.44928 0.00000 1.00000 3.44928 + 3.05400 -4.07624 0.00000 1.00000 4.07624 + 3.07250 -4.53264 0.00000 1.00000 4.53264 + 3.09100 -4.71141 0.00000 1.00000 4.71141 + 3.10950 -4.58013 0.00000 1.00000 4.58013 + 3.12800 -4.18572 0.00000 1.00000 4.18572 + 3.14650 -3.63955 0.00000 1.00000 3.63955 + 3.16500 -3.08796 0.00000 1.00000 3.08796 + 3.18350 -2.67579 0.00000 1.00000 2.67579 + 3.20200 -2.51194 0.00000 1.00000 2.51194 + 3.22050 -2.64475 0.00000 1.00000 2.64475 + 3.23900 -3.05186 0.00000 1.00000 3.05186 + 3.25750 -3.64576 0.00000 1.00000 3.64576 + 3.27600 -4.29257 0.00000 1.00000 4.29257 + 3.29450 -4.83876 0.00000 1.00000 4.83876 + 3.31300 -5.14008 0.00000 1.00000 5.14008 + 3.33150 -5.08721 0.00000 1.00000 5.08721 + 3.35000 -4.62391 0.00000 1.00000 4.62391 + 3.36850 -3.75470 0.00000 1.00000 3.75470 + 3.38700 -2.54063 0.00000 1.00000 2.54063 + 3.40550 -1.08396 0.00000 1.00000 1.08396 + 3.42400 0.493223 0.00000 1.00000 -0.493223 + 3.44250 2.06874 0.00000 1.00000 -2.06874 + 3.46100 3.53152 0.00000 1.00000 -3.53152 + 3.47950 4.78254 0.00000 1.00000 -4.78254 + 3.49800 5.72969 0.00000 1.00000 -5.72969 + 3.51650 6.28423 0.00000 1.00000 -6.28423 + 3.53500 6.36504 0.00000 1.00000 -6.36504 + 3.55350 5.91247 0.00000 1.00000 -5.91247 + 3.57200 4.90861 0.00000 1.00000 -4.90861 + 3.59050 3.39740 0.00000 1.00000 -3.39740 + 3.60900 1.49612 0.00000 1.00000 -1.49612 + 3.62750 -0.608193 0.00000 1.00000 0.608193 + 3.64600 -2.68019 0.00000 1.00000 2.68019 + 3.66450 -4.47243 0.00000 1.00000 4.47243 + 3.68300 -5.76925 0.00000 1.00000 5.76925 + 3.70150 -6.42920 0.00000 1.00000 6.42920 + 3.72000 -6.41719 0.00000 1.00000 6.41719 + 3.73850 -5.81875 0.00000 1.00000 5.81875 + 3.75700 -4.83074 0.00000 1.00000 4.83074 + 3.77550 -3.72667 0.00000 1.00000 3.72667 + 3.79400 -2.80071 0.00000 1.00000 2.80071 + 3.81250 -2.30147 0.00000 1.00000 2.30147 + 3.83100 -2.37126 0.00000 1.00000 2.37126 + 3.84950 -3.00713 0.00000 1.00000 3.00713 + 3.86800 -4.05566 0.00000 1.00000 4.05566 + 3.88650 -5.24604 0.00000 1.00000 5.24604 + 3.90500 -6.25585 0.00000 1.00000 6.25585 + 3.92350 -6.79521 0.00000 1.00000 6.79521 + 3.94200 -6.68830 0.00000 1.00000 6.68830 + 3.96050 -5.93010 0.00000 1.00000 5.93010 + 3.97900 -4.70113 0.00000 1.00000 4.70113 + 3.99750 -3.33259 0.00000 1.00000 3.33259 + 4.01600 -2.22683 0.00000 1.00000 2.22683 + 4.03450 -1.75037 0.00000 1.00000 1.75037 + 4.05300 -2.12498 0.00000 1.00000 2.12498 + 4.07150 -3.34471 0.00000 1.00000 3.34471 + 4.09000 -5.14253 0.00000 1.00000 5.14253 + 4.10850 -7.01935 0.00000 1.00000 7.01935 + 4.12700 -8.33391 0.00000 1.00000 8.33391 + 4.14550 -8.43660 0.00000 1.00000 8.43660 + 4.16400 -6.81920 0.00000 1.00000 6.81920 + 4.18250 -3.24667 0.00000 1.00000 3.24667 + 4.20100 2.16009 0.00000 1.00000 -2.16009 + 4.21950 8.91152 0.00000 1.00000 -8.91152 + 4.23800 16.2134 0.00000 1.00000 -16.2134 + 4.25650 23.0973 0.00000 1.00000 -23.0973 + 4.27500 28.5935 0.00000 1.00000 -28.5935 + 4.29350 31.9106 0.00000 1.00000 -31.9106 + 4.31200 32.5842 0.00000 1.00000 -32.5842 + 4.33050 30.5617 0.00000 1.00000 -30.5617 + 4.34900 26.2027 0.00000 1.00000 -26.2027 + 4.36750 20.1990 0.00000 1.00000 -20.1990 + 4.38600 13.4320 0.00000 1.00000 -13.4320 + 4.40450 6.80337 0.00000 1.00000 -6.80337 + 4.42300 1.07527 0.00000 1.00000 -1.07527 + 4.44150 -3.24700 0.00000 1.00000 3.24700 + 4.46000 -5.96945 0.00000 1.00000 5.96945 + 4.47850 -7.19581 0.00000 1.00000 7.19581 + 4.49700 -7.25613 0.00000 1.00000 7.25613 + 4.51550 -6.59972 0.00000 1.00000 6.59972 + 4.53400 -5.68054 0.00000 1.00000 5.68054 + 4.55250 -4.86170 0.00000 1.00000 4.86170 + 4.57100 -4.35835 0.00000 1.00000 4.35835 + 4.58950 -4.22677 0.00000 1.00000 4.22677 + 4.60800 -4.39508 0.00000 1.00000 4.39508 + 4.62650 -4.72130 0.00000 1.00000 4.72130 + 4.64500 -5.05871 0.00000 1.00000 5.05871 + 4.66350 -5.30848 0.00000 1.00000 5.30848 + 4.68200 -5.44197 0.00000 1.00000 5.44197 + 4.70050 -5.50097 0.00000 1.00000 5.50097 + 4.71900 -5.56456 0.00000 1.00000 5.56456 + 4.73750 -5.69659 0.00000 1.00000 5.69659 + 4.75600 -5.90806 0.00000 1.00000 5.90806 + 4.77450 -6.13525 0.00000 1.00000 6.13525 + 4.79300 -6.24364 0.00000 1.00000 6.24364 + 4.81150 -6.05670 0.00000 1.00000 6.05670 + 4.83000 -5.40165 0.00000 1.00000 5.40165 + 4.84850 -4.16022 0.00000 1.00000 4.16022 + 4.86700 -2.31100 0.00000 1.00000 2.31100 + 4.88550 0.0479985 0.00000 1.00000 -0.0479985 + 4.90400 2.70271 0.00000 1.00000 -2.70271 + 4.92250 5.35252 0.00000 1.00000 -5.35252 + 4.94100 7.65960 0.00000 1.00000 -7.65960 + 4.95950 9.30734 0.00000 1.00000 -9.30734 + 4.97800 10.0558 0.00000 1.00000 -10.0558 + 4.99650 9.78268 0.00000 1.00000 -9.78268 + 5.01500 8.50309 0.00000 1.00000 -8.50309 + 5.03350 6.36470 0.00000 1.00000 -6.36470 + 5.05200 3.62252 0.00000 1.00000 -3.62252 + 5.07050 0.599290 0.00000 1.00000 -0.599290 + 5.08900 -2.36086 0.00000 1.00000 2.36086 + 5.10750 -4.93870 0.00000 1.00000 4.93870 + 5.12600 -6.88149 0.00000 1.00000 6.88149 + 5.14450 -8.03565 0.00000 1.00000 8.03565 + 5.16300 -8.36668 0.00000 1.00000 8.36668 + 5.18150 -7.96304 0.00000 1.00000 7.96304 + 5.20000 -7.02207 0.00000 1.00000 7.02207 + 5.21850 -5.81895 0.00000 1.00000 5.81895 + 5.23700 -4.66171 0.00000 1.00000 4.66171 + 5.25550 -3.83844 0.00000 1.00000 3.83844 + 5.27400 -3.56410 0.00000 1.00000 3.56410 + 5.29250 -3.93573 0.00000 1.00000 3.93573 + 5.31100 -4.90467 0.00000 1.00000 4.90467 + 5.32950 -6.27267 0.00000 1.00000 6.27267 + 5.34800 -7.71536 0.00000 1.00000 7.71536 + 5.36650 -8.83203 0.00000 1.00000 8.83203 + 5.38500 -9.21516 0.00000 1.00000 9.21516 + 5.40350 -8.52808 0.00000 1.00000 8.52808 + 5.42200 -6.57611 0.00000 1.00000 6.57611 + 5.44050 -3.35625 0.00000 1.00000 3.35625 + 5.45900 0.925287 0.00000 1.00000 -0.925287 + 5.47750 5.87209 0.00000 1.00000 -5.87209 + 5.49600 10.9500 0.00000 1.00000 -10.9500 + 5.51450 15.5640 0.00000 1.00000 -15.5640 + 5.53300 19.1477 0.00000 1.00000 -19.1477 + 5.55150 21.2490 0.00000 1.00000 -21.2490 + 5.57000 21.6003 0.00000 1.00000 -21.6003 + 5.58850 20.1588 0.00000 1.00000 -20.1588 + 5.60700 17.1124 0.00000 1.00000 -17.1124 + 5.62550 12.8494 0.00000 1.00000 -12.8494 + 5.64400 7.89927 0.00000 1.00000 -7.89927 + 5.66250 2.85190 0.00000 1.00000 -2.85190 + 5.68100 -1.72997 0.00000 1.00000 1.72997 + 5.69950 -5.39381 0.00000 1.00000 5.39381 + 5.71800 -7.86162 0.00000 1.00000 7.86162 + 5.73650 -9.06420 0.00000 1.00000 9.06420 + 5.75500 -9.13837 0.00000 1.00000 9.13837 + 5.77350 -8.38683 0.00000 1.00000 8.38683 + 5.79200 -7.20818 0.00000 1.00000 7.20818 + 5.81050 -6.01172 0.00000 1.00000 6.01172 + 5.82900 -5.13567 0.00000 1.00000 5.13567 + 5.84750 -4.78662 0.00000 1.00000 4.78662 + 5.86600 -5.01125 0.00000 1.00000 5.01125 + 5.88450 -5.70222 0.00000 1.00000 5.70222 + 5.90300 -6.63275 0.00000 1.00000 6.63275 + 5.92150 -7.51031 0.00000 1.00000 7.51031 + 5.94000 -8.03914 0.00000 1.00000 8.03914 + 5.95850 -7.98163 0.00000 1.00000 7.98163 + 5.97700 -7.20897 0.00000 1.00000 7.20897 + 5.99550 -5.73309 0.00000 1.00000 5.73309 + 6.01400 -3.71335 0.00000 1.00000 3.71335 + 6.03250 -1.43572 0.00000 1.00000 1.43572 + 6.05100 0.734316 0.00000 1.00000 -0.734316 + 6.06950 2.41816 0.00000 1.00000 -2.41816 + 6.08800 3.29880 0.00000 1.00000 -3.29880 + 6.10650 3.18922 0.00000 1.00000 -3.18922 + 6.12500 2.07961 0.00000 1.00000 -2.07961 + 6.14350 0.150522 0.00000 1.00000 -0.150522 + 6.16200 -2.25436 0.00000 1.00000 2.25436 + 6.18050 -4.69426 0.00000 1.00000 4.69426 + 6.19900 -6.72460 0.00000 1.00000 6.72460 + 6.21750 -7.99834 0.00000 1.00000 7.99834 + 6.23600 -8.35142 0.00000 1.00000 8.35142 + 6.25450 -7.84948 0.00000 1.00000 7.84948 + 6.27300 -6.78013 0.00000 1.00000 6.78013 + 6.29150 -5.58671 0.00000 1.00000 5.58671 + 6.31000 -4.75441 0.00000 1.00000 4.75441 + 6.32850 -4.67266 0.00000 1.00000 4.67266 + 6.34700 -5.50714 0.00000 1.00000 5.50714 + 6.36550 -7.11590 0.00000 1.00000 7.11590 + 6.38400 -9.03699 0.00000 1.00000 9.03699 + 6.40250 -10.5592 0.00000 1.00000 10.5592 + 6.42100 -10.8676 0.00000 1.00000 10.8676 + 6.43950 -9.23379 0.00000 1.00000 9.23379 + 6.45800 -5.20861 0.00000 1.00000 5.20861 + 6.47650 1.23011 0.00000 1.00000 -1.23011 + 6.49500 9.61241 0.00000 1.00000 -9.61241 + 6.51350 19.0142 0.00000 1.00000 -19.0142 + 6.53200 28.1967 0.00000 1.00000 -28.1967 + 6.55050 35.8243 0.00000 1.00000 -35.8243 + 6.56900 40.7166 0.00000 1.00000 -40.7166 + 6.58750 42.0833 0.00000 1.00000 -42.0833 + 6.60600 39.6873 0.00000 1.00000 -39.6873 + 6.62450 33.8989 0.00000 1.00000 -33.8989 + 6.64300 25.6256 0.00000 1.00000 -25.6256 + 6.66150 16.1324 0.00000 1.00000 -16.1324 + 6.68000 6.79125 0.00000 1.00000 -6.79125 + 6.69850 -1.18411 0.00000 1.00000 1.18411 + 6.71700 -6.95910 0.00000 1.00000 6.95910 + 6.73550 -10.2079 0.00000 1.00000 10.2079 + 6.75400 -11.1248 0.00000 1.00000 11.1248 + 6.77250 -10.3198 0.00000 1.00000 10.3198 + 6.79100 -8.62815 0.00000 1.00000 8.62815 + 6.80950 -6.88571 0.00000 1.00000 6.88571 + 6.82800 -5.72660 0.00000 1.00000 5.72660 + 6.84650 -5.45332 0.00000 1.00000 5.45332 + 6.86500 -6.00649 0.00000 1.00000 6.00649 + 6.88350 -7.03437 0.00000 1.00000 7.03437 + 6.90200 -8.03570 0.00000 1.00000 8.03570 + 6.92050 -8.53209 0.00000 1.00000 8.53209 + 6.93900 -8.22002 0.00000 1.00000 8.22002 + 6.95750 -7.06140 0.00000 1.00000 7.06140 + 6.97600 -5.29017 0.00000 1.00000 5.29017 + 6.99450 -3.33754 0.00000 1.00000 3.33754 + 7.01300 -1.70148 0.00000 1.00000 1.70148 + 7.03150 -0.800760 0.00000 1.00000 0.800760 + 7.05000 -0.856664 0.00000 1.00000 0.856664 + 7.06850 -1.83505 0.00000 1.00000 1.83505 + 7.08700 -3.46358 0.00000 1.00000 3.46358 + 7.10550 -5.31731 0.00000 1.00000 5.31731 + 7.12400 -6.94715 0.00000 1.00000 6.94715 + 7.14250 -8.01332 0.00000 1.00000 8.01332 + 7.16100 -8.38320 0.00000 1.00000 8.38320 + 7.17950 -8.16268 0.00000 1.00000 8.16268 + 7.19800 -7.64952 0.00000 1.00000 7.64952 + 7.21650 -7.22129 0.00000 1.00000 7.22129 + 7.23500 -7.19206 0.00000 1.00000 7.19206 + 7.25350 -7.68220 0.00000 1.00000 7.68220 + 7.27200 -8.54371 0.00000 1.00000 8.54371 + 7.29050 -9.36819 0.00000 1.00000 9.36819 + 7.30900 -9.58072 0.00000 1.00000 9.58072 + 7.32750 -8.59790 0.00000 1.00000 8.59790 + 7.34600 -6.00785 0.00000 1.00000 6.00785 + 7.36450 -1.72106 0.00000 1.00000 1.72106 + 7.38300 3.95269 0.00000 1.00000 -3.95269 + 7.40150 10.3276 0.00000 1.00000 -10.3276 + 7.42000 16.4640 0.00000 1.00000 -16.4640 + 7.43850 21.3618 0.00000 1.00000 -21.3618 + 7.45700 24.1782 0.00000 1.00000 -24.1782 + 7.47550 24.4162 0.00000 1.00000 -24.4162 + 7.49400 22.0356 0.00000 1.00000 -22.0356 + 7.51250 17.4573 0.00000 1.00000 -17.4573 + 7.53100 11.4623 0.00000 1.00000 -11.4623 + 7.54950 5.01118 0.00000 1.00000 -5.01118 + 7.56800 -0.965076 0.00000 1.00000 0.965076 + 7.58650 -5.75153 0.00000 1.00000 5.75153 + 7.60500 -8.96799 0.00000 1.00000 8.96799 + 7.62350 -10.5969 0.00000 1.00000 10.5969 + 7.64200 -10.9206 0.00000 1.00000 10.9206 + 7.66050 -10.3893 0.00000 1.00000 10.3893 + 7.67900 -9.46200 0.00000 1.00000 9.46200 + 7.69750 -8.46444 0.00000 1.00000 8.46444 + 7.71600 -7.50854 0.00000 1.00000 7.50854 + 7.73450 -6.49304 0.00000 1.00000 6.49304 + 7.75300 -5.18168 0.00000 1.00000 5.18168 + 7.77150 -3.32911 0.00000 1.00000 3.32911 + 7.79000 -0.811546 0.00000 1.00000 0.811546 + 7.80850 2.28073 0.00000 1.00000 -2.28073 + 7.82700 5.61902 0.00000 1.00000 -5.61902 + 7.84550 8.68909 0.00000 1.00000 -8.68909 + 7.86400 10.9073 0.00000 1.00000 -10.9073 + 7.88250 11.7676 0.00000 1.00000 -11.7676 + 7.90100 10.9777 0.00000 1.00000 -10.9777 + 7.91950 8.54633 0.00000 1.00000 -8.54633 + 7.93800 4.79627 0.00000 1.00000 -4.79627 + 7.95650 0.300695 0.00000 1.00000 -0.300695 + 7.97500 -4.24152 0.00000 1.00000 4.24152 + 7.99350 -8.15787 0.00000 1.00000 8.15787 + 8.01200 -10.9420 0.00000 1.00000 10.9420 + 8.03050 -12.3456 0.00000 1.00000 12.3456 + 8.04900 -12.4001 0.00000 1.00000 12.4001 + 8.06750 -11.3663 0.00000 1.00000 11.3663 + 8.08600 -9.63181 0.00000 1.00000 9.63181 + 8.10450 -7.58723 0.00000 1.00000 7.58723 + 8.12300 -5.52117 0.00000 1.00000 5.52117 + 8.14150 -3.56353 0.00000 1.00000 3.56353 + 8.16000 -1.69260 0.00000 1.00000 1.69260 + 8.17850 0.199827 0.00000 1.00000 -0.199827 + 8.19700 2.21044 0.00000 1.00000 -2.21044 + 8.21550 4.33057 0.00000 1.00000 -4.33057 + 8.23400 6.39218 0.00000 1.00000 -6.39218 + 8.25250 8.07555 0.00000 1.00000 -8.07555 + 8.27100 8.97896 0.00000 1.00000 -8.97896 + 8.28950 8.73073 0.00000 1.00000 -8.73073 + 8.30800 7.11016 0.00000 1.00000 -7.11016 + 8.32650 4.14151 0.00000 1.00000 -4.14151 + 8.34500 0.130936 0.00000 1.00000 -0.130936 + 8.36350 -4.36837 0.00000 1.00000 4.36837 + 8.38200 -8.65854 0.00000 1.00000 8.65854 + 8.40050 -12.0433 0.00000 1.00000 12.0433 + 8.41900 -13.9807 0.00000 1.00000 13.9807 + 8.43750 -14.2030 0.00000 1.00000 14.2030 + 8.45600 -12.7704 0.00000 1.00000 12.7704 + 8.47450 -10.0445 0.00000 1.00000 10.0445 + 8.49300 -6.58938 0.00000 1.00000 6.58938 + 8.51150 -3.02663 0.00000 1.00000 3.02663 + 8.53000 0.112114 0.00000 1.00000 -0.112114 + 8.54850 2.49566 0.00000 1.00000 -2.49566 + 8.56700 4.03580 0.00000 1.00000 -4.03580 + 8.58550 4.85377 0.00000 1.00000 -4.85377 + 8.60400 5.18537 0.00000 1.00000 -5.18537 + 8.62250 5.25808 0.00000 1.00000 -5.25808 + 8.64100 5.18193 0.00000 1.00000 -5.18193 + 8.65950 4.89182 0.00000 1.00000 -4.89182 + 8.67800 4.16349 0.00000 1.00000 -4.16349 + 8.69650 2.70252 0.00000 1.00000 -2.70252 + 8.71500 0.282220 0.00000 1.00000 -0.282220 + 8.73350 -3.11124 0.00000 1.00000 3.11124 + 8.75200 -7.17490 0.00000 1.00000 7.17490 + 8.77050 -11.2672 0.00000 1.00000 11.2672 + 8.78900 -14.4886 0.00000 1.00000 14.4886 + 8.80750 -15.8559 0.00000 1.00000 15.8559 + 8.82600 -14.5328 0.00000 1.00000 14.5328 + 8.84450 -10.0609 0.00000 1.00000 10.0609 + 8.86300 -2.52773 0.00000 1.00000 2.52773 + 8.88150 7.37428 0.00000 1.00000 -7.37428 + 8.90000 18.4240 0.00000 1.00000 -18.4240 + 8.91850 29.0726 0.00000 1.00000 -29.0726 + 8.93700 37.7295 0.00000 1.00000 -37.7295 + 8.95550 43.0717 0.00000 1.00000 -43.0717 + 8.97400 44.3044 0.00000 1.00000 -44.3044 + 8.99250 41.3154 0.00000 1.00000 -41.3154 + 9.01100 34.6857 0.00000 1.00000 -34.6857 + 9.02950 25.5570 0.00000 1.00000 -25.5570 + 9.04800 15.3859 0.00000 1.00000 -15.3859 + 9.06650 5.64529 0.00000 1.00000 -5.64529 + 9.08500 -2.45985 0.00000 1.00000 2.45985 + 9.10350 -8.19758 0.00000 1.00000 8.19758 + 9.12200 -11.3936 0.00000 1.00000 11.3936 + 9.14050 -12.3840 0.00000 1.00000 12.3840 + 9.15900 -11.8591 0.00000 1.00000 11.8591 + 9.17750 -10.6446 0.00000 1.00000 10.6446 + 9.19600 -9.48212 0.00000 1.00000 9.48212 + 9.21450 -8.86286 0.00000 1.00000 8.86286 + 9.23300 -8.95166 0.00000 1.00000 8.95166 + 9.25150 -9.60978 0.00000 1.00000 9.60978 + 9.27000 -10.4985 0.00000 1.00000 10.4985 + 9.28850 -11.2264 0.00000 1.00000 11.2264 + 9.30700 -11.4956 0.00000 1.00000 11.4956 + 9.32550 -11.2056 0.00000 1.00000 11.2056 + 9.34400 -10.4851 0.00000 1.00000 10.4851 + 9.36250 -9.64367 0.00000 1.00000 9.64367 + 9.38100 -9.05839 0.00000 1.00000 9.05839 + 9.39950 -9.03059 0.00000 1.00000 9.03059 + 9.41800 -9.65891 0.00000 1.00000 9.65891 + 9.43650 -10.7695 0.00000 1.00000 10.7695 + 9.45500 -11.9282 0.00000 1.00000 11.9282 + 9.47350 -12.5352 0.00000 1.00000 12.5352 + 9.49200 -11.9793 0.00000 1.00000 11.9793 + 9.51050 -9.80968 0.00000 1.00000 9.80968 + 9.52900 -5.88098 0.00000 1.00000 5.88098 + 9.54750 -0.429865 0.00000 1.00000 0.429865 + 9.56600 5.93738 0.00000 1.00000 -5.93738 + 9.58450 12.3467 0.00000 1.00000 -12.3467 + 9.60300 17.8253 0.00000 1.00000 -17.8253 + 9.62150 21.4983 0.00000 1.00000 -21.4983 + 9.64000 22.7684 0.00000 1.00000 -22.7684 + 9.65850 21.4353 0.00000 1.00000 -21.4353 + 9.67700 17.7297 0.00000 1.00000 -17.7297 + 9.69550 12.2556 0.00000 1.00000 -12.2556 + 9.71400 5.85940 0.00000 1.00000 -5.85940 + 9.73250 -0.539853 0.00000 1.00000 0.539853 + 9.75100 -6.11696 0.00000 1.00000 6.11696 + 9.76950 -10.2704 0.00000 1.00000 10.2704 + 9.78800 -12.6954 0.00000 1.00000 12.6954 + 9.80650 -13.3941 0.00000 1.00000 13.3941 + 9.82500 -12.6315 0.00000 1.00000 12.6315 + 9.84350 -10.8487 0.00000 1.00000 10.8487 + 9.86200 -8.55755 0.00000 1.00000 8.55755 + 9.88050 -6.24003 0.00000 1.00000 6.24003 + 9.89900 -4.27478 0.00000 1.00000 4.27478 + 9.91750 -2.90328 0.00000 1.00000 2.90328 + 9.93600 -2.23386 0.00000 1.00000 2.23386 + 9.95450 -2.27104 0.00000 1.00000 2.27104 + 9.97300 -2.95175 0.00000 1.00000 2.95175 + 9.99150 -4.17209 0.00000 1.00000 4.17209 + 10.0100 -5.79607 0.00000 1.00000 5.79607 + 10.0285 -7.64859 0.00000 1.00000 7.64859 + 10.0470 -9.50283 0.00000 1.00000 9.50283 + 10.0655 -11.0757 0.00000 1.00000 11.0757 + 10.0840 -12.0425 0.00000 1.00000 12.0425 + 10.1025 -12.0751 0.00000 1.00000 12.0751 + 10.1210 -10.9017 0.00000 1.00000 10.9017 + 10.1395 -8.37613 0.00000 1.00000 8.37613 + 10.1580 -4.54026 0.00000 1.00000 4.54026 + 10.1765 0.338357 0.00000 1.00000 -0.338357 + 10.1950 5.76996 0.00000 1.00000 -5.76996 + 10.2135 11.0939 0.00000 1.00000 -11.0939 + 10.2320 15.5741 0.00000 1.00000 -15.5741 + 10.2505 18.5225 0.00000 1.00000 -18.5225 + 10.2690 19.4270 0.00000 1.00000 -19.4270 + 10.2875 18.0567 0.00000 1.00000 -18.0567 + 10.3060 14.5227 0.00000 1.00000 -14.5227 + 10.3245 9.27796 0.00000 1.00000 -9.27796 + 10.3430 3.05599 0.00000 1.00000 -3.05599 + 10.3615 -3.24345 0.00000 1.00000 3.24345 + 10.3800 -8.70145 0.00000 1.00000 8.70145 + 10.3985 -12.5330 0.00000 1.00000 12.5330 + 10.4170 -14.2182 0.00000 1.00000 14.2182 + 10.4355 -13.5885 0.00000 1.00000 13.5885 + 10.4540 -10.8525 0.00000 1.00000 10.8525 + 10.4725 -6.55772 0.00000 1.00000 6.55772 + 10.4910 -1.49640 0.00000 1.00000 1.49640 + 10.5095 3.42852 0.00000 1.00000 -3.42852 + 10.5280 7.35363 0.00000 1.00000 -7.35363 + 10.5465 9.59717 0.00000 1.00000 -9.59717 + 10.5650 9.77054 0.00000 1.00000 -9.77054 + 10.5835 7.84234 0.00000 1.00000 -7.84234 + 10.6020 4.14584 0.00000 1.00000 -4.14584 + 10.6205 -0.671143 0.00000 1.00000 0.671143 + 10.6390 -5.74603 0.00000 1.00000 5.74603 + 10.6575 -10.1361 0.00000 1.00000 10.1361 + 10.6760 -12.9671 0.00000 1.00000 12.9671 + 10.6945 -13.5738 0.00000 1.00000 13.5738 + 10.7130 -11.6108 0.00000 1.00000 11.6108 + 10.7315 -7.11852 0.00000 1.00000 7.11852 + 10.7500 -0.532582 0.00000 1.00000 0.532582 + 10.7685 7.36496 0.00000 1.00000 -7.36496 + 10.7870 15.5502 0.00000 1.00000 -15.5502 + 10.8055 22.9046 0.00000 1.00000 -22.9046 + 10.8240 28.3836 0.00000 1.00000 -28.3836 + 10.8425 31.1819 0.00000 1.00000 -31.1819 + 10.8610 30.8667 0.00000 1.00000 -30.8667 + 10.8795 27.4544 0.00000 1.00000 -27.4544 + 10.8980 21.4174 0.00000 1.00000 -21.4174 + 10.9165 13.6149 0.00000 1.00000 -13.6149 + 10.9350 5.15717 0.00000 1.00000 -5.15717 + 10.9535 -2.77403 0.00000 1.00000 2.77403 + 10.9720 -9.11963 0.00000 1.00000 9.11963 + 10.9905 -13.1166 0.00000 1.00000 13.1166 + 11.0090 -14.4189 0.00000 1.00000 14.4189 + 11.0275 -13.1446 0.00000 1.00000 13.1446 + 11.0460 -9.84069 0.00000 1.00000 9.84069 + 11.0645 -5.37361 0.00000 1.00000 5.37361 + 11.0830 -0.766336 0.00000 1.00000 0.766336 + 11.1015 2.99059 0.00000 1.00000 -2.99059 + 11.1200 5.12102 0.00000 1.00000 -5.12102 + 11.1385 5.20555 0.00000 1.00000 -5.20555 + 11.1570 3.25580 0.00000 1.00000 -3.25580 + 11.1755 -0.295787 0.00000 1.00000 0.295787 + 11.1940 -4.68917 0.00000 1.00000 4.68917 + 11.2125 -8.99252 0.00000 1.00000 8.99252 + 11.2310 -12.2872 0.00000 1.00000 12.2872 + 11.2495 -13.8447 0.00000 1.00000 13.8447 + 11.2680 -13.2610 0.00000 1.00000 13.2610 + 11.2865 -10.5280 0.00000 1.00000 10.5280 + 11.3050 -6.02790 0.00000 1.00000 6.02790 + 11.3235 -0.457428 0.00000 1.00000 0.457428 + 11.3420 5.30272 0.00000 1.00000 -5.30272 + 11.3605 10.3468 0.00000 1.00000 -10.3468 + 11.3790 13.9003 0.00000 1.00000 -13.9003 + 11.3975 15.4459 0.00000 1.00000 -15.4459 + 11.4160 14.7993 0.00000 1.00000 -14.7993 + 11.4345 12.1251 0.00000 1.00000 -12.1251 + 11.4530 7.89515 0.00000 1.00000 -7.89515 + 11.4715 2.79743 0.00000 1.00000 -2.79743 + 11.4900 -2.38402 0.00000 1.00000 2.38402 + 11.5085 -6.89848 0.00000 1.00000 6.89848 + 11.5270 -10.1446 0.00000 1.00000 10.1446 + 11.5455 -11.7562 0.00000 1.00000 11.7562 + 11.5640 -11.6477 0.00000 1.00000 11.6477 + 11.5825 -10.0156 0.00000 1.00000 10.0156 + 11.6010 -7.29778 0.00000 1.00000 7.29778 + 11.6195 -4.09885 0.00000 1.00000 4.09885 + 11.6380 -1.08810 0.00000 1.00000 1.08810 + 11.6565 1.11439 0.00000 1.00000 -1.11439 + 11.6750 2.04788 0.00000 1.00000 -2.04788 + 11.6935 1.49867 0.00000 1.00000 -1.49867 + 11.7120 -0.451611 0.00000 1.00000 0.451611 + 11.7305 -3.42848 0.00000 1.00000 3.42848 + 11.7490 -6.82125 0.00000 1.00000 6.82125 + 11.7675 -9.88740 0.00000 1.00000 9.88740 + 11.7860 -11.8896 0.00000 1.00000 11.8896 + 11.8045 -12.2430 0.00000 1.00000 12.2430 + 11.8230 -10.6446 0.00000 1.00000 10.6446 + 11.8415 -7.15722 0.00000 1.00000 7.15722 + 11.8600 -2.22583 0.00000 1.00000 2.22583 + 11.8785 3.38458 0.00000 1.00000 -3.38458 + 11.8970 8.72108 0.00000 1.00000 -8.72108 + 11.9155 12.8213 0.00000 1.00000 -12.8213 + 11.9340 14.9032 0.00000 1.00000 -14.9032 + 11.9525 14.5281 0.00000 1.00000 -14.5281 + 11.9710 11.6999 0.00000 1.00000 -11.6999 + 11.9895 6.87776 0.00000 1.00000 -6.87776 + 12.0080 0.891504 0.00000 1.00000 -0.891504 + 12.0265 -5.22565 0.00000 1.00000 5.22565 + 12.0450 -10.4522 0.00000 1.00000 10.4522 + 12.0635 -13.9931 0.00000 1.00000 13.9931 + 12.0820 -15.4435 0.00000 1.00000 15.4435 + 12.1005 -14.8644 0.00000 1.00000 14.8644 + 12.1190 -12.7520 0.00000 1.00000 12.7520 + 12.1375 -9.90845 0.00000 1.00000 9.90845 + 12.1560 -7.24453 0.00000 1.00000 7.24453 + 12.1745 -5.56166 0.00000 1.00000 5.56166 + 12.1930 -5.36161 0.00000 1.00000 5.36161 + 12.2115 -6.72586 0.00000 1.00000 6.72586 + 12.2300 -9.28835 0.00000 1.00000 9.28835 + 12.2485 -12.3067 0.00000 1.00000 12.3067 + 12.2670 -14.8178 0.00000 1.00000 14.8178 + 12.2855 -15.8476 0.00000 1.00000 15.8476 + 12.3040 -14.6332 0.00000 1.00000 14.6332 + 12.3225 -10.8097 0.00000 1.00000 10.8097 + 12.3410 -4.52145 0.00000 1.00000 4.52145 + 12.3595 3.57058 0.00000 1.00000 -3.57058 + 12.3780 12.3893 0.00000 1.00000 -12.3893 + 12.3965 20.6314 0.00000 1.00000 -20.6314 + 12.4150 27.0092 0.00000 1.00000 -27.0092 + 12.4335 30.4959 0.00000 1.00000 -30.4959 + 12.4520 30.5247 0.00000 1.00000 -30.5247 + 12.4705 27.1034 0.00000 1.00000 -27.1034 + 12.4890 20.8197 0.00000 1.00000 -20.8197 + 12.5075 12.7348 0.00000 1.00000 -12.7348 + 12.5260 4.18409 0.00000 1.00000 -4.18409 + 12.5445 -3.47600 0.00000 1.00000 3.47600 + 12.5630 -9.12640 0.00000 1.00000 9.12640 + 12.5815 -12.0958 0.00000 1.00000 12.0958 + 12.6000 -12.2803 0.00000 1.00000 12.2803 + 12.6185 -10.1467 0.00000 1.00000 10.1467 + 12.6370 -6.61573 0.00000 1.00000 6.61573 + 12.6555 -2.84816 0.00000 1.00000 2.84816 + 12.6740 0.0234471 0.00000 1.00000 -0.0234471 + 12.6925 1.16051 0.00000 1.00000 -1.16051 + 12.7110 0.222329 0.00000 1.00000 -0.222329 + 12.7295 -2.53923 0.00000 1.00000 2.53923 + 12.7480 -6.31966 0.00000 1.00000 6.31966 + 12.7665 -9.93250 0.00000 1.00000 9.93250 + 12.7850 -12.0782 0.00000 1.00000 12.0782 + 12.8035 -11.6556 0.00000 1.00000 11.6556 + 12.8220 -8.04822 0.00000 1.00000 8.04822 + 12.8405 -1.31753 0.00000 1.00000 1.31753 + 12.8590 7.74657 0.00000 1.00000 -7.74657 + 12.8775 17.7420 0.00000 1.00000 -17.7420 + 12.8960 26.9214 0.00000 1.00000 -26.9214 + 12.9145 33.5578 0.00000 1.00000 -33.5578 + 12.9330 36.3277 0.00000 1.00000 -36.3277 + 12.9515 34.6234 0.00000 1.00000 -34.6234 + 12.9700 28.7156 0.00000 1.00000 -28.7156 + 12.9885 19.7233 0.00000 1.00000 -19.7233 + 13.0070 9.38804 0.00000 1.00000 -9.38804 + 13.0255 -0.297908 0.00000 1.00000 0.297908 + 13.0440 -7.52791 0.00000 1.00000 7.52791 + 13.0625 -11.0794 0.00000 1.00000 11.0794 + 13.0810 -10.5807 0.00000 1.00000 10.5807 + 13.0995 -6.58087 0.00000 1.00000 6.58087 + 13.1180 -0.404585 0.00000 1.00000 0.404585 + 13.1365 6.17556 0.00000 1.00000 -6.17556 + 13.1550 11.3708 0.00000 1.00000 -11.3708 + 13.1735 13.8053 0.00000 1.00000 -13.8053 + 13.1920 12.8357 0.00000 1.00000 -12.8357 + 13.2105 8.68336 0.00000 1.00000 -8.68336 + 13.2290 2.34908 0.00000 1.00000 -2.34908 + 13.2475 -4.66287 0.00000 1.00000 4.66287 + 13.2660 -10.7379 0.00000 1.00000 10.7379 + 13.2845 -14.5602 0.00000 1.00000 14.5602 + 13.3030 -15.4343 0.00000 1.00000 15.4343 + 13.3215 -13.4393 0.00000 1.00000 13.4393 + 13.3400 -9.37967 0.00000 1.00000 9.37967 + 13.3585 -4.55053 0.00000 1.00000 4.55053 + 13.3770 -0.382431 0.00000 1.00000 0.382431 + 13.3955 1.93839 0.00000 1.00000 -1.93839 + 13.4140 1.77366 0.00000 1.00000 -1.77366 + 13.4325 -0.818874 0.00000 1.00000 0.818874 + 13.4510 -5.13072 0.00000 1.00000 5.13072 + 13.4695 -10.0255 0.00000 1.00000 10.0255 + 13.4880 -14.2744 0.00000 1.00000 14.2744 + 13.5065 -16.9060 0.00000 1.00000 16.9060 + 13.5250 -17.4714 0.00000 1.00000 17.4714 + 13.5435 -16.1512 0.00000 1.00000 16.1512 + 13.5620 -13.6784 0.00000 1.00000 13.6784 + 13.5805 -11.1043 0.00000 1.00000 11.1043 + 13.5990 -9.47288 0.00000 1.00000 9.47288 + 13.6175 -9.49567 0.00000 1.00000 9.49567 + 13.6360 -11.3153 0.00000 1.00000 11.3153 + 13.6545 -14.4268 0.00000 1.00000 14.4268 + 13.6730 -17.7824 0.00000 1.00000 17.7824 + 13.6915 -20.0552 0.00000 1.00000 20.0552 + 13.7100 -19.9965 0.00000 1.00000 19.9965 + 13.7285 -16.7898 0.00000 1.00000 16.7898 + 13.7470 -10.3089 0.00000 1.00000 10.3089 + 13.7655 -1.20781 0.00000 1.00000 1.20781 + 13.7840 9.18567 0.00000 1.00000 -9.18567 + 13.8025 19.1488 0.00000 1.00000 -19.1488 + 13.8210 26.9489 0.00000 1.00000 -26.9489 + 13.8395 31.2366 0.00000 1.00000 -31.2366 + 13.8580 31.3496 0.00000 1.00000 -31.3496 + 13.8765 27.4511 0.00000 1.00000 -27.4511 + 13.8950 20.4697 0.00000 1.00000 -20.4697 + 13.9135 11.8582 0.00000 1.00000 -11.8582 + 13.9320 3.23523 0.00000 1.00000 -3.23523 + 13.9505 -3.99882 0.00000 1.00000 3.99882 + 13.9690 -8.96984 0.00000 1.00000 8.96984 + 13.9875 -11.4848 0.00000 1.00000 11.4848 + 14.0060 -11.9967 0.00000 1.00000 11.9967 + 14.0245 -11.3970 0.00000 1.00000 11.3970 + 14.0430 -10.7008 0.00000 1.00000 10.7008 + 14.0615 -10.7168 0.00000 1.00000 10.7168 + 14.0800 -11.7936 0.00000 1.00000 11.7936 + 14.0985 -13.7115 0.00000 1.00000 13.7115 + 14.1170 -15.7457 0.00000 1.00000 15.7457 + 14.1355 -16.8835 0.00000 1.00000 16.8835 + 14.1540 -16.1342 0.00000 1.00000 16.1342 + 14.1725 -12.8466 0.00000 1.00000 12.8466 + 14.1910 -6.94542 0.00000 1.00000 6.94542 + 14.2095 0.982134 0.00000 1.00000 -0.982134 + 14.2280 9.77953 0.00000 1.00000 -9.77953 + 14.2465 17.9729 0.00000 1.00000 -17.9729 + 14.2650 24.1178 0.00000 1.00000 -24.1178 + 14.2835 27.1485 0.00000 1.00000 -27.1485 + 14.3020 26.6355 0.00000 1.00000 -26.6355 + 14.3205 22.8839 0.00000 1.00000 -22.8839 + 14.3390 16.8479 0.00000 1.00000 -16.8479 + 14.3575 9.88786 0.00000 1.00000 -9.88786 + 14.3760 3.43554 0.00000 1.00000 -3.43554 + 14.3945 -1.34253 0.00000 1.00000 1.34253 + 14.4130 -3.79922 0.00000 1.00000 3.79922 + 14.4315 -3.91650 0.00000 1.00000 3.91650 + 14.4500 -2.25034 0.00000 1.00000 2.25034 + 14.4685 0.265934 0.00000 1.00000 -0.265934 + 14.4870 2.60091 0.00000 1.00000 -2.60091 + 14.5055 3.90902 0.00000 1.00000 -3.90902 + 14.5240 3.74411 0.00000 1.00000 -3.74411 + 14.5425 2.15013 0.00000 1.00000 -2.15013 + 14.5610 -0.388481 0.00000 1.00000 0.388481 + 14.5795 -3.11515 0.00000 1.00000 3.11515 + 14.5980 -5.23631 0.00000 1.00000 5.23631 + 14.6165 -6.15513 0.00000 1.00000 6.15513 + 14.6350 -5.63898 0.00000 1.00000 5.63898 + 14.6535 -3.87566 0.00000 1.00000 3.87566 + 14.6720 -1.40645 0.00000 1.00000 1.40645 + 14.6905 1.04029 0.00000 1.00000 -1.04029 + 14.7090 2.76304 0.00000 1.00000 -2.76304 + 14.7275 3.28473 0.00000 1.00000 -3.28473 + 14.7460 2.47788 0.00000 1.00000 -2.47788 + 14.7645 0.584519 0.00000 1.00000 -0.584519 + 14.7830 -1.87052 0.00000 1.00000 1.87052 + 14.8015 -4.24417 0.00000 1.00000 4.24417 + 14.8200 -5.96765 0.00000 1.00000 5.96765 + 14.8385 -6.70965 0.00000 1.00000 6.70965 + 14.8570 -6.46211 0.00000 1.00000 6.46211 + 14.8755 -5.52356 0.00000 1.00000 5.52356 + 14.8940 -4.38544 0.00000 1.00000 4.38544 + 14.9125 -3.55512 0.00000 1.00000 3.55512 + 14.9310 -3.36898 0.00000 1.00000 3.36898 + 14.9495 -3.85281 0.00000 1.00000 3.85281 + 14.9680 -4.67590 0.00000 1.00000 4.67590 + 14.9865 -5.21922 0.00000 1.00000 5.21922 + 15.0050 -4.74479 0.00000 1.00000 4.74479 + 15.0235 -2.62144 0.00000 1.00000 2.62144 + 15.0420 1.45687 0.00000 1.00000 -1.45687 + 15.0605 7.32500 0.00000 1.00000 -7.32500 + 15.0790 14.3193 0.00000 1.00000 -14.3193 + 15.0975 21.3835 0.00000 1.00000 -21.3835 + 15.1160 27.2852 0.00000 1.00000 -27.2852 + 15.1345 30.8902 0.00000 1.00000 -30.8902 + 15.1530 31.4245 0.00000 1.00000 -31.4245 + 15.1715 28.6588 0.00000 1.00000 -28.6588 + 15.1900 22.9682 0.00000 1.00000 -22.9682 + 15.2085 15.2541 0.00000 1.00000 -15.2541 + 15.2270 6.74712 0.00000 1.00000 -6.74712 + 15.2455 -1.25964 0.00000 1.00000 1.25964 + 15.2640 -7.68049 0.00000 1.00000 7.68049 + 15.2825 -11.8442 0.00000 1.00000 11.8442 + 15.3010 -13.5919 0.00000 1.00000 13.5919 + 15.3195 -13.2493 0.00000 1.00000 13.2493 + 15.3380 -11.4916 0.00000 1.00000 11.4916 + 15.3565 -9.14144 0.00000 1.00000 9.14144 + 15.3750 -6.95504 0.00000 1.00000 6.95504 + 15.3935 -5.44896 0.00000 1.00000 5.44896 + 15.4120 -4.80772 0.00000 1.00000 4.80772 + 15.4305 -4.88897 0.00000 1.00000 4.88897 + 15.4490 -5.31706 0.00000 1.00000 5.31706 + 15.4675 -5.63285 0.00000 1.00000 5.63285 + 15.4860 -5.45462 0.00000 1.00000 5.45462 + 15.5045 -4.60459 0.00000 1.00000 4.60459 + 15.5230 -3.16776 0.00000 1.00000 3.16776 + 15.5415 -1.46992 0.00000 1.00000 1.46992 + 15.5600 0.0157586 0.00000 1.00000 -0.0157586 + 15.5785 0.806047 0.00000 1.00000 -0.806047 + 15.5970 0.550242 0.00000 1.00000 -0.550242 + 15.6155 -0.861348 0.00000 1.00000 0.861348 + 15.6340 -3.25430 0.00000 1.00000 3.25430 + 15.6525 -6.20584 0.00000 1.00000 6.20584 + 15.6710 -9.14992 0.00000 1.00000 9.14992 + 15.6895 -11.5204 0.00000 1.00000 11.5204 + 15.7080 -12.8909 0.00000 1.00000 12.8909 + 15.7265 -13.0717 0.00000 1.00000 13.0717 + 15.7450 -12.1417 0.00000 1.00000 12.1417 + 15.7635 -10.4097 0.00000 1.00000 10.4097 + 15.7820 -8.32011 0.00000 1.00000 8.32011 + 15.8005 -6.33136 0.00000 1.00000 6.33136 + 15.8190 -4.80087 0.00000 1.00000 4.80087 + 15.8375 -3.90675 0.00000 1.00000 3.90675 + 15.8560 -3.62474 0.00000 1.00000 3.62474 + 15.8745 -3.76225 0.00000 1.00000 3.76225 + 15.8930 -4.03596 0.00000 1.00000 4.03596 + 15.9115 -4.16761 0.00000 1.00000 4.16761 + 15.9300 -3.96959 0.00000 1.00000 3.96959 + 15.9485 -3.39629 0.00000 1.00000 3.39629 + 15.9670 -2.54969 0.00000 1.00000 2.54969 + 15.9855 -1.64188 0.00000 1.00000 1.64188 + 16.0040 -0.928772 0.00000 1.00000 0.928772 + 16.0225 -0.634845 0.00000 1.00000 0.634845 + 16.0410 -0.888145 0.00000 1.00000 0.888145 + 16.0595 -1.67980 0.00000 1.00000 1.67980 + 16.0780 -2.85514 0.00000 1.00000 2.85514 + 16.0965 -4.13661 0.00000 1.00000 4.13661 + 16.1150 -5.17310 0.00000 1.00000 5.17310 + 16.1335 -5.60636 0.00000 1.00000 5.60636 + 16.1520 -5.14159 0.00000 1.00000 5.14159 + 16.1705 -3.60734 0.00000 1.00000 3.60734 + 16.1890 -0.992023 0.00000 1.00000 0.992023 + 16.2075 2.54958 0.00000 1.00000 -2.54958 + 16.2260 6.71807 0.00000 1.00000 -6.71807 + 16.2445 11.1120 0.00000 1.00000 -11.1120 + 16.2630 15.2812 0.00000 1.00000 -15.2812 + 16.2815 18.7822 0.00000 1.00000 -18.7822 + 16.3000 21.2269 0.00000 1.00000 -21.2269 + 16.3185 22.3212 0.00000 1.00000 -22.3212 + 16.3370 21.8912 0.00000 1.00000 -21.8912 + 16.3555 19.8991 0.00000 1.00000 -19.8991 + 16.3740 16.4493 0.00000 1.00000 -16.4493 + 16.3925 11.7863 0.00000 1.00000 -11.7863 + 16.4110 6.28331 0.00000 1.00000 -6.28331 + 16.4295 0.418687 0.00000 1.00000 -0.418687 + 16.4480 -5.25963 0.00000 1.00000 5.25963 + 16.4665 -10.1842 0.00000 1.00000 10.1842 + 16.4850 -13.8295 0.00000 1.00000 13.8295 + 16.5035 -15.7785 0.00000 1.00000 15.7785 + 16.5220 -15.7830 0.00000 1.00000 15.7830 + 16.5405 -13.8070 0.00000 1.00000 13.8070 + 16.5590 -10.0391 0.00000 1.00000 10.0391 + 16.5775 -4.87264 0.00000 1.00000 4.87264 + 16.5960 1.14589 0.00000 1.00000 -1.14589 + 16.6145 7.38649 0.00000 1.00000 -7.38649 + 16.6330 13.2091 0.00000 1.00000 -13.2091 + 16.6515 18.0296 0.00000 1.00000 -18.0296 + 16.6700 21.3708 0.00000 1.00000 -21.3708 + 16.6885 22.8991 0.00000 1.00000 -22.8991 + 16.7070 22.4456 0.00000 1.00000 -22.4456 + 16.7255 20.0158 0.00000 1.00000 -20.0158 + 16.7440 15.7881 0.00000 1.00000 -15.7881 + 16.7625 10.1035 0.00000 1.00000 -10.1035 + 16.7810 3.44424 0.00000 1.00000 -3.44424 + 16.7995 -3.59847 0.00000 1.00000 3.59847 + 16.8180 -10.3717 0.00000 1.00000 10.3717 + 16.8365 -16.2205 0.00000 1.00000 16.2205 + 16.8550 -20.5580 0.00000 1.00000 20.5580 + 16.8735 -22.9372 0.00000 1.00000 22.9372 + 16.8920 -23.1129 0.00000 1.00000 23.1129 + 16.9105 -21.0837 0.00000 1.00000 21.0837 + 16.9290 -17.1032 0.00000 1.00000 17.1032 + 16.9475 -11.6563 0.00000 1.00000 11.6563 + 16.9660 -5.39998 0.00000 1.00000 5.39998 + 16.9845 0.923758 0.00000 1.00000 -0.923758 + 17.0030 6.59122 0.00000 1.00000 -6.59122 + 17.0215 10.9979 0.00000 1.00000 -10.9979 + 17.0400 13.7383 0.00000 1.00000 -13.7383 + 17.0585 14.6477 0.00000 1.00000 -14.6477 + 17.0770 13.7998 0.00000 1.00000 -13.7998 + 17.0955 11.4638 0.00000 1.00000 -11.4638 + 17.1140 8.03578 0.00000 1.00000 -8.03578 + 17.1325 3.96378 0.00000 1.00000 -3.96378 + 17.1510 -0.316698 0.00000 1.00000 0.316698 + 17.1695 -4.42438 0.00000 1.00000 4.42438 + 17.1880 -8.04681 0.00000 1.00000 8.04681 + 17.2065 -10.9324 0.00000 1.00000 10.9324 + 17.2250 -12.8725 0.00000 1.00000 12.8725 + 17.2435 -13.6898 0.00000 1.00000 13.6898 + 17.2620 -13.2456 0.00000 1.00000 13.2456 + 17.2805 -11.4675 0.00000 1.00000 11.4675 + 17.2990 -8.39144 0.00000 1.00000 8.39144 + 17.3175 -4.20001 0.00000 1.00000 4.20001 + 17.3360 0.758004 0.00000 1.00000 -0.758004 + 17.3545 5.98116 0.00000 1.00000 -5.98116 + 17.3730 10.8661 0.00000 1.00000 -10.8661 + 17.3915 14.7906 0.00000 1.00000 -14.7906 + 17.4100 17.2137 0.00000 1.00000 -17.2137 + 17.4285 17.7745 0.00000 1.00000 -17.7745 + 17.4470 16.3661 0.00000 1.00000 -16.3661 + 17.4655 13.1690 0.00000 1.00000 -13.1690 + 17.4840 8.63053 0.00000 1.00000 -8.63053 + 17.5025 3.39246 0.00000 1.00000 -3.39246 + 17.5210 -1.82203 0.00000 1.00000 1.82203 + 17.5395 -6.33848 0.00000 1.00000 6.33848 + 17.5580 -9.64981 0.00000 1.00000 9.64981 + 17.5765 -11.4978 0.00000 1.00000 11.4978 + 17.5950 -11.9009 0.00000 1.00000 11.9009 + 17.6135 -11.1239 0.00000 1.00000 11.1239 + 17.6320 -9.59944 0.00000 1.00000 9.59944 + 17.6505 -7.81972 0.00000 1.00000 7.81972 + 17.6690 -6.22442 0.00000 1.00000 6.22442 + 17.6875 -5.11122 0.00000 1.00000 5.11122 + 17.7060 -4.58875 0.00000 1.00000 4.58875 + 17.7245 -4.58029 0.00000 1.00000 4.58029 + 17.7430 -4.87225 0.00000 1.00000 4.87225 + 17.7615 -5.18968 0.00000 1.00000 5.18968 + 17.7800 -5.27616 0.00000 1.00000 5.27616 + 17.7985 -4.95771 0.00000 1.00000 4.95771 + 17.8170 -4.17763 0.00000 1.00000 4.17763 + 17.8355 -2.99861 0.00000 1.00000 2.99861 + 17.8540 -1.57655 0.00000 1.00000 1.57655 + 17.8725 -0.115674 0.00000 1.00000 0.115674 + 17.8910 1.18232 0.00000 1.00000 -1.18232 + 17.9095 2.16253 0.00000 1.00000 -2.16253 + 17.9280 2.74507 0.00000 1.00000 -2.74507 + 17.9465 2.93310 0.00000 1.00000 -2.93310 + 17.9650 2.80225 0.00000 1.00000 -2.80225 + 17.9835 2.47685 0.00000 1.00000 -2.47685 + 18.0020 2.09940 0.00000 1.00000 -2.09940 + 18.0205 1.79907 0.00000 1.00000 -1.79907 + 18.0390 1.66403 0.00000 1.00000 -1.66403 + 18.0575 1.72260 0.00000 1.00000 -1.72260 + 18.0760 1.93703 0.00000 1.00000 -1.93703 + 18.0945 2.21113 0.00000 1.00000 -2.21113 + 18.1130 2.40837 0.00000 1.00000 -2.40837 + 18.1315 2.37442 0.00000 1.00000 -2.37442 + 18.1500 1.95988 0.00000 1.00000 -1.95988 + 18.1685 1.04724 0.00000 1.00000 -1.04724 + 18.1870 -0.426523 0.00000 1.00000 0.426523 + 18.2055 -2.45315 0.00000 1.00000 2.45315 + 18.2240 -4.90773 0.00000 1.00000 4.90773 + 18.2425 -7.52944 0.00000 1.00000 7.52944 + 18.2610 -9.92715 0.00000 1.00000 9.92715 + 18.2795 -11.6174 0.00000 1.00000 11.6174 + 18.2980 -12.0956 0.00000 1.00000 12.0956 + 18.3165 -10.9327 0.00000 1.00000 10.9327 + 18.3350 -7.88331 0.00000 1.00000 7.88331 + 18.3535 -2.98071 0.00000 1.00000 2.98071 + 18.3720 3.40650 0.00000 1.00000 -3.40650 + 18.3905 10.5811 0.00000 1.00000 -10.5811 + 18.4090 17.5968 0.00000 1.00000 -17.5968 + 18.4275 23.4036 0.00000 1.00000 -23.4036 + 18.4460 27.0310 0.00000 1.00000 -27.0310 + 18.4645 27.7731 0.00000 1.00000 -27.7731 + 18.4830 25.3345 0.00000 1.00000 -25.3345 + 18.5015 19.9052 0.00000 1.00000 -19.9052 + 18.5200 12.1472 0.00000 1.00000 -12.1472 + 18.5385 3.09099 0.00000 1.00000 -3.09099 + 18.5570 -6.03798 0.00000 1.00000 6.03798 + 18.5755 -14.0281 0.00000 1.00000 14.0281 + 18.5940 -19.8843 0.00000 1.00000 19.8843 + 18.6125 -22.9844 0.00000 1.00000 22.9844 + 18.6310 -23.1597 0.00000 1.00000 23.1597 + 18.6495 -20.6881 0.00000 1.00000 20.6881 + 18.6680 -16.2075 0.00000 1.00000 16.2075 + 18.6865 -10.5714 0.00000 1.00000 10.5714 + 18.7050 -4.68098 0.00000 1.00000 4.68098 + 18.7235 0.671251 0.00000 1.00000 -0.671251 + 18.7420 4.91529 0.00000 1.00000 -4.91529 + 18.7605 7.75797 0.00000 1.00000 -7.75797 + 18.7790 9.17588 0.00000 1.00000 -9.17588 + 18.7975 9.35965 0.00000 1.00000 -9.35965 + 18.8160 8.63035 0.00000 1.00000 -8.63035 + 18.8345 7.35145 0.00000 1.00000 -7.35145 + 18.8530 5.85510 0.00000 1.00000 -5.85510 + 18.8715 4.39513 0.00000 1.00000 -4.39513 + 18.8900 3.13002 0.00000 1.00000 -3.13002 + 18.9085 2.13168 0.00000 1.00000 -2.13168 + 18.9270 1.40976 0.00000 1.00000 -1.40976 + 18.9455 0.939913 0.00000 1.00000 -0.939913 + 18.9640 0.686429 0.00000 1.00000 -0.686429 + 18.9825 0.614229 0.00000 1.00000 -0.614229 + 19.0010 0.690570 0.00000 1.00000 -0.690570 + 19.0195 0.880032 0.00000 1.00000 -0.880032 + 19.0380 1.13788 0.00000 1.00000 -1.13788 + 19.0565 1.40627 0.00000 1.00000 -1.40627 + 19.0750 1.61604 0.00000 1.00000 -1.61604 + 19.0935 1.69418 0.00000 1.00000 -1.69418 + 19.1120 1.57467 0.00000 1.00000 -1.57467 + 19.1305 1.20912 0.00000 1.00000 -1.20912 + 19.1490 0.574418 0.00000 1.00000 -0.574418 + 19.1675 -0.322868 0.00000 1.00000 0.322868 + 19.1860 -1.44364 0.00000 1.00000 1.44364 + 19.2045 -2.71278 0.00000 1.00000 2.71278 + 19.2230 -4.01492 0.00000 1.00000 4.01492 + 19.2415 -5.19189 0.00000 1.00000 5.19189 + 19.2600 -6.04623 0.00000 1.00000 6.04623 + 19.2785 -6.35560 0.00000 1.00000 6.35560 + 19.2970 -5.90135 0.00000 1.00000 5.90135 + 19.3155 -4.51168 0.00000 1.00000 4.51168 + 19.3340 -2.11474 0.00000 1.00000 2.11474 + 19.3525 1.20914 0.00000 1.00000 -1.20914 + 19.3710 5.19105 0.00000 1.00000 -5.19105 + 19.3895 9.36912 0.00000 1.00000 -9.36912 + 19.4080 13.1271 0.00000 1.00000 -13.1271 + 19.4265 15.7779 0.00000 1.00000 -15.7779 + 19.4450 16.6827 0.00000 1.00000 -16.6827 + 19.4635 15.3867 0.00000 1.00000 -15.3867 + 19.4820 11.7418 0.00000 1.00000 -11.7418 + 19.5005 5.98757 0.00000 1.00000 -5.98757 + 19.5190 -1.23710 0.00000 1.00000 1.23710 + 19.5375 -8.96359 0.00000 1.00000 8.96359 + 19.5560 -16.0382 0.00000 1.00000 16.0382 + 19.5745 -21.3164 0.00000 1.00000 21.3164 + 19.5930 -23.8699 0.00000 1.00000 23.8699 + 19.6115 -23.1644 0.00000 1.00000 23.1644 + 19.6300 -19.1740 0.00000 1.00000 19.1740 + 19.6485 -12.4057 0.00000 1.00000 12.4057 + 19.6670 -3.82669 0.00000 1.00000 3.82669 + 19.6855 5.29471 0.00000 1.00000 -5.29471 + 19.7040 13.6058 0.00000 1.00000 -13.6058 + 19.7225 19.9014 0.00000 1.00000 -19.9014 + 19.7410 23.3260 0.00000 1.00000 -23.3260 + 19.7595 23.5068 0.00000 1.00000 -23.5068 + 19.7780 20.5929 0.00000 1.00000 -20.5929 + 19.7965 15.1973 0.00000 1.00000 -15.1973 + 19.8150 8.25741 0.00000 1.00000 -8.25741 + 19.8335 0.846490 0.00000 1.00000 -0.846490 + 19.8520 -6.02165 0.00000 1.00000 6.02165 + 19.8705 -11.5565 0.00000 1.00000 11.5565 + 19.8890 -15.2939 0.00000 1.00000 15.2939 + 19.9075 -17.1257 0.00000 1.00000 17.1257 + 19.9260 -17.2573 0.00000 1.00000 17.2573 + 19.9445 -16.1119 0.00000 1.00000 16.1119 + 19.9630 -14.2055 0.00000 1.00000 14.2055 + 19.9815 -12.0275 0.00000 1.00000 12.0275 + 20.0000 -9.95383 0.00000 1.00000 9.95383 diff --git a/src/diffpy/pdffit2/tests/testdata/Ni.stru b/src/diffpy/pdffit2/tests/testdata/Ni.stru new file mode 100644 index 00000000..b4da517c --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/Ni.stru @@ -0,0 +1,33 @@ +title structure Ni FCC +format pdffit +scale 1.000000 +sharp 0.000000, 1.000000, 0.000000 +spcgr Fm-3m +cell 3.520000, 3.520000, 3.520000, 90.000000, 90.000000, 90.000000 +dcell 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +ncell 1, 1, 1, 4 +atoms +NI 0.00000000 0.00000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.00000000 0.50000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.00000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.50000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 diff --git a/src/diffpy/pdffit2/tests/testdata/PbScW25TiO3.stru b/src/diffpy/pdffit2/tests/testdata/PbScW25TiO3.stru new file mode 100644 index 00000000..71ba3651 --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/PbScW25TiO3.stru @@ -0,0 +1,345 @@ +title Pb8 (Sc16/3 W8/3)0.75 (Ti8)0.25 O24, B factors from BNL2 +format pdffit +scale 1.000000 +sharp 0.000000, 1.000000, 0.000000 +spcgr Fm-3m +cell 8.072700, 8.072700, 8.072700, 90.000000, 90.000000, 90.000000 +dcell 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +ncell 1, 1, 1, 56 +atoms +PB 0.25000000 0.25000000 0.25000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +PB 0.25000000 0.75000000 0.75000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +PB 0.75000000 0.25000000 0.75000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +PB 0.75000000 0.75000000 0.25000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +PB 0.25000000 0.25000000 0.75000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +PB 0.75000000 0.25000000 0.25000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +PB 0.25000000 0.75000000 0.25000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +PB 0.75000000 0.75000000 0.75000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.04795025 0.04795025 0.04795025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.00000000 0.25735000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.50000000 0.75735003 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.00000000 0.75735003 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.50000000 0.25735000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.00000000 0.74264997 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.50000000 0.24265000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.00000000 0.24265000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.50000000 0.74264997 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.25735000 0.00000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.75735003 0.00000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.75735003 0.50000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.25735000 0.50000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.74264997 0.00000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.24265000 0.00000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.24265000 0.50000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.74264997 0.50000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.25735000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.75735003 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.75735003 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.25735000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.74264997 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.24265000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.00000000 0.24265000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +O 0.50000000 0.74264997 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.02293025 0.02293025 0.02293025 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.00000000 0.00000000 0.00000000 0.9739 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.00000000 0.50000000 0.50000000 0.9739 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.50000000 0.00000000 0.50000000 0.9739 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.50000000 0.50000000 0.00000000 0.9739 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.50000000 0.50000000 0.50000000 0.0261 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.50000000 0.00000000 0.00000000 0.0261 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.00000000 0.50000000 0.00000000 0.0261 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +SC 0.00000000 0.00000000 0.50000000 0.0261 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.00000000 0.00000000 0.00000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.00000000 0.50000000 0.50000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.50000000 0.00000000 0.50000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.50000000 0.50000000 0.00000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.50000000 0.50000000 0.50000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.50000000 0.00000000 0.00000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.00000000 0.50000000 0.00000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +W 0.00000000 0.00000000 0.50000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.00000000 0.00000000 0.00000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.00000000 0.50000000 0.50000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.50000000 0.00000000 0.50000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.50000000 0.50000000 0.00000000 0.0131 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.50000000 0.50000000 0.50000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.50000000 0.00000000 0.00000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.00000000 0.50000000 0.00000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +TI 0.00000000 0.00000000 0.50000000 0.4869 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00809050 0.00809050 0.00809050 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 diff --git a/src/diffpy/pdffit2/tests/testdata/badNi.dat b/src/diffpy/pdffit2/tests/testdata/badNi.dat new file mode 100644 index 00000000..ef5b7007 --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/badNi.dat @@ -0,0 +1,1001 @@ + 1.50000 -0.539443 0.00000 1.00000 0.539443 + 1.51850 -1.03098 0.00000 1.00000 1.03098 + 1.53700 -1.43712 0.00000 1.00000 1.43712 + 1.55550 -1.73810 0.00000 1.00000 1.73810 + 1.57400 -1.93402 0.00000 1.00000 1.93402 + 1.59250 -2.04145 0.00000 1.00000 2.04145 + 1.61100 -2.08593 0.00000 1.00000 2.08593 + 1.62950 -2.09295 0.00000 1.00000 2.09295 + 1.64800 -2.08072 0.00000 1.00000 2.08072 + 1.66650 -2.05688 0.00000 1.00000 2.05688 + 1.68500 -2.02006 0.00000 1.00000 2.02006 + 1.70350 -1.96554 0.00000 1.00000 1.96554 + 1.72200 -1.89239 0.00000 1.00000 1.89239 + 1.74050 -1.80936 0.00000 1.00000 1.80936 + 1.75900 -1.73670 0.00000 1.00000 1.73670 + 1.77750 -1.70255 0.00000 1.00000 1.70255 + 1.79600 -1.73461 0.00000 1.00000 1.73461 + 1.81450 -1.84946 0.00000 1.00000 1.84946 + 1.83300 -2.04300 0.00000 1.00000 2.04300 + 1.85150 -2.28566 0.00000 1.00000 2.28566 + 1.87000 -2.52486 0.00000 1.00000 2.52486 + 1.88850 -2.69615 0.00000 1.00000 2.69615 + 1.92700 -2.74180 0.00000 1.00000 2.74180 + 1.92550 -2.63223 0.00000 1.00000 2.63223 + 1.94400 -2.38239 0.00000 1.00000 2.38239 + 1.96250 -2.05565 0.00000 1.00000 2.05565 + 1.98100 -1.75092 0.00000 1.00000 1.75092 + 1.99950 -1.57518 0.00000 1.00000 1.57518 + 2.01800 -1.60914 0.00000 1.00000 1.60914 + 2.03650 -1.87687 0.00000 1.00000 1.87687 + 2.05500 -2.33004 0.00000 1.00000 2.33004 + 2.07350 -2.85357 0.00000 1.00000 2.85357 + 2.09200 -3.29353 0.00000 1.00000 3.29353 + 2.11050 -3.50124 0.00000 1.00000 3.50124 + 2.12900 -3.38172 0.00000 1.00000 3.38172 + 2.14750 -2.93205 0.00000 1.00000 2.93205 + 2.16600 -2.25629 0.00000 1.00000 2.25629 + 2.18450 -1.54918 0.00000 1.00000 1.54918 + 2.20300 -1.04888 0.00000 1.00000 1.04888 + 2.22150 -0.968136 0.00000 1.00000 0.968136 + 2.24000 -1.42070 0.00000 1.00000 1.42070 + 2.25850 -2.36300 0.00000 1.00000 2.36300 + 2.27700 -3.56960 0.00000 1.00000 3.56960 + 2.29550 -4.65416 0.00000 1.00000 4.65416 + 2.31400 -5.13684 0.00000 1.00000 5.13684 + 2.33250 -4.54696 0.00000 1.00000 4.54696 + 2.35100 -2.53890 0.00000 1.00000 2.53890 + 2.36950 1.00656 0.00000 1.00000 -1.00656 + 2.38800 5.92223 0.00000 1.00000 -5.92223 + 2.40650 11.7527 0.00000 1.00000 -11.7527 + 2.42500 17.8143 0.00000 1.00000 -17.8143 + 2.44350 23.3057 0.00000 1.00000 -23.3057 + 2.46200 27.4478 0.00000 1.00000 -27.4478 + 2.48050 29.6246 0.00000 1.00000 -29.6246 + 2.49900 29.4986 0.00000 1.00000 -29.4986 + 2.51750 27.0749 0.00000 1.00000 -27.0749 + 2.53600 22.7028 0.00000 1.00000 -22.7028 + 2.55450 17.0112 0.00000 1.00000 -17.0112 + 2.57300 10.7932 0.00000 1.00000 -10.7932 + 2.59150 4.86134 0.00000 1.00000 -4.86134 + 2.61000 -0.0945224 0.00000 1.00000 0.0945224 + 2.62850 -3.61858 0.00000 1.00000 3.61858 + 2.64700 -5.54803 0.00000 1.00000 5.54803 + 2.66550 -6.01016 0.00000 1.00000 6.01016 + 2.68400 -5.36293 0.00000 1.00000 5.36293 + 2.70250 -4.09596 0.00000 1.00000 4.09596 + 2.72100 -2.71625 0.00000 1.00000 2.71625 + 2.73950 -1.64382 0.00000 1.00000 1.64382 + 2.75800 -1.13791 0.00000 1.00000 1.13791 + 2.77650 -1.26649 0.00000 1.00000 1.26649 + 2.79500 -1.92103 0.00000 1.00000 1.92103 + 2.81350 -2.86890 0.00000 1.00000 2.86890 + 2.83200 -3.82782 0.00000 1.00000 3.82782 + 2.85050 -4.54328 0.00000 1.00000 4.54328 + 2.86900 -4.85054 0.00000 1.00000 4.85054 + 2.88750 -4.70809 0.00000 1.00000 4.70809 + 2.90600 -4.19687 0.00000 1.00000 4.19687 + 2.92450 -3.48841 0.00000 1.00000 3.48841 + 2.94300 -2.79256 0.00000 1.00000 2.79256 + 2.96150 -2.29993 0.00000 1.00000 2.29993 + 2.98000 -2.13422 0.00000 1.00000 2.13422 + 2.99850 -2.32552 0.00000 1.00000 2.32552 + 3.01700 -2.80931 0.00000 1.00000 2.80931 + 3.03550 -3.44928 0.00000 1.00000 3.44928 + 3.05400 -4.07624 0.00000 1.00000 4.07624 + 3.07250 -4.53264 0.00000 1.00000 4.53264 + 3.09100 -4.71141 0.00000 1.00000 4.71141 + 3.10950 -4.58013 0.00000 1.00000 4.58013 + 3.12800 -4.18572 0.00000 1.00000 4.18572 + 3.14650 -3.63955 0.00000 1.00000 3.63955 + 3.16500 -3.08796 0.00000 1.00000 3.08796 + 3.18350 -2.67579 0.00000 1.00000 2.67579 + 3.20200 -2.51194 0.00000 1.00000 2.51194 + 3.22050 -2.64475 0.00000 1.00000 2.64475 + 3.23900 -3.05186 0.00000 1.00000 3.05186 + 3.25750 -3.64576 0.00000 1.00000 3.64576 + 3.27600 -4.29257 0.00000 1.00000 4.29257 + 3.29450 -4.83876 0.00000 1.00000 4.83876 + 3.31300 -5.14008 0.00000 1.00000 5.14008 + 3.33150 -5.08721 0.00000 1.00000 5.08721 + 3.35000 -4.62391 0.00000 1.00000 4.62391 + 3.36850 -3.75470 0.00000 1.00000 3.75470 + 3.38700 -2.54063 0.00000 1.00000 2.54063 + 3.40550 -1.08396 0.00000 1.00000 1.08396 + 3.42400 0.493223 0.00000 1.00000 -0.493223 + 3.44250 2.06874 0.00000 1.00000 -2.06874 + 3.46100 3.53152 0.00000 1.00000 -3.53152 + 3.47950 4.78254 0.00000 1.00000 -4.78254 + 3.49800 5.72969 0.00000 1.00000 -5.72969 + 3.51650 6.28423 0.00000 1.00000 -6.28423 + 3.53500 6.36504 0.00000 1.00000 -6.36504 + 3.55350 5.91247 0.00000 1.00000 -5.91247 + 3.57200 4.90861 0.00000 1.00000 -4.90861 + 3.59050 3.39740 0.00000 1.00000 -3.39740 + 3.60900 1.49612 0.00000 1.00000 -1.49612 + 3.62750 -0.608193 0.00000 1.00000 0.608193 + 3.64600 -2.68019 0.00000 1.00000 2.68019 + 3.66450 -4.47243 0.00000 1.00000 4.47243 + 3.68300 -5.76925 0.00000 1.00000 5.76925 + 3.70150 -6.42920 0.00000 1.00000 6.42920 + 3.72000 -6.41719 0.00000 1.00000 6.41719 + 3.73850 -5.81875 0.00000 1.00000 5.81875 + 3.75700 -4.83074 0.00000 1.00000 4.83074 + 3.77550 -3.72667 0.00000 1.00000 3.72667 + 3.79400 -2.80071 0.00000 1.00000 2.80071 + 3.81250 -2.30147 0.00000 1.00000 2.30147 + 3.83100 -2.37126 0.00000 1.00000 2.37126 + 3.84950 -3.00713 0.00000 1.00000 3.00713 + 3.86800 -4.05566 0.00000 1.00000 4.05566 + 3.88650 -5.24604 0.00000 1.00000 5.24604 + 3.90500 -6.25585 0.00000 1.00000 6.25585 + 3.92350 -6.79521 0.00000 1.00000 6.79521 + 3.94200 -6.68830 0.00000 1.00000 6.68830 + 3.96050 -5.93010 0.00000 1.00000 5.93010 + 3.97900 -4.70113 0.00000 1.00000 4.70113 + 3.99750 -3.33259 0.00000 1.00000 3.33259 + 4.01600 -2.22683 0.00000 1.00000 2.22683 + 4.03450 -1.75037 0.00000 1.00000 1.75037 + 4.05300 -2.12498 0.00000 1.00000 2.12498 + 4.07150 -3.34471 0.00000 1.00000 3.34471 + 4.09000 -5.14253 0.00000 1.00000 5.14253 + 4.10850 -7.01935 0.00000 1.00000 7.01935 + 4.12700 -8.33391 0.00000 1.00000 8.33391 + 4.14550 -8.43660 0.00000 1.00000 8.43660 + 4.16400 -6.81920 0.00000 1.00000 6.81920 + 4.18250 -3.24667 0.00000 1.00000 3.24667 + 4.20100 2.16009 0.00000 1.00000 -2.16009 + 4.21950 8.91152 0.00000 1.00000 -8.91152 + 4.23800 16.2134 0.00000 1.00000 -16.2134 + 4.25650 23.0973 0.00000 1.00000 -23.0973 + 4.27500 28.5935 0.00000 1.00000 -28.5935 + 4.29350 31.9106 0.00000 1.00000 -31.9106 + 4.31200 32.5842 0.00000 1.00000 -32.5842 + 4.33050 30.5617 0.00000 1.00000 -30.5617 + 4.34900 26.2027 0.00000 1.00000 -26.2027 + 4.36750 20.1990 0.00000 1.00000 -20.1990 + 4.38600 13.4320 0.00000 1.00000 -13.4320 + 4.40450 6.80337 0.00000 1.00000 -6.80337 + 4.42300 1.07527 0.00000 1.00000 -1.07527 + 4.44150 -3.24700 0.00000 1.00000 3.24700 + 4.46000 -5.96945 0.00000 1.00000 5.96945 + 4.47850 -7.19581 0.00000 1.00000 7.19581 + 4.49700 -7.25613 0.00000 1.00000 7.25613 + 4.51550 -6.59972 0.00000 1.00000 6.59972 + 4.53400 -5.68054 0.00000 1.00000 5.68054 + 4.55250 -4.86170 0.00000 1.00000 4.86170 + 4.57100 -4.35835 0.00000 1.00000 4.35835 + 4.58950 -4.22677 0.00000 1.00000 4.22677 + 4.60800 -4.39508 0.00000 1.00000 4.39508 + 4.62650 -4.72130 0.00000 1.00000 4.72130 + 4.64500 -5.05871 0.00000 1.00000 5.05871 + 4.66350 -5.30848 0.00000 1.00000 5.30848 + 4.68200 -5.44197 0.00000 1.00000 5.44197 + 4.70050 -5.50097 0.00000 1.00000 5.50097 + 4.71900 -5.56456 0.00000 1.00000 5.56456 + 4.73750 -5.69659 0.00000 1.00000 5.69659 + 4.75600 -5.90806 0.00000 1.00000 5.90806 + 4.77450 -6.13525 0.00000 1.00000 6.13525 + 4.79300 -6.24364 0.00000 1.00000 6.24364 + 4.81150 -6.05670 0.00000 1.00000 6.05670 + 4.83000 -5.40165 0.00000 1.00000 5.40165 + 4.84850 -4.16022 0.00000 1.00000 4.16022 + 4.86700 -2.31100 0.00000 1.00000 2.31100 + 4.88550 0.0479985 0.00000 1.00000 -0.0479985 + 4.90400 2.70271 0.00000 1.00000 -2.70271 + 4.92250 5.35252 0.00000 1.00000 -5.35252 + 4.94100 7.65960 0.00000 1.00000 -7.65960 + 4.95950 9.30734 0.00000 1.00000 -9.30734 + 4.97800 10.0558 0.00000 1.00000 -10.0558 + 4.99650 9.78268 0.00000 1.00000 -9.78268 + 5.01500 8.50309 0.00000 1.00000 -8.50309 + 5.03350 6.36470 0.00000 1.00000 -6.36470 + 5.05200 3.62252 0.00000 1.00000 -3.62252 + 5.07050 0.599290 0.00000 1.00000 -0.599290 + 5.08900 -2.36086 0.00000 1.00000 2.36086 + 5.10750 -4.93870 0.00000 1.00000 4.93870 + 5.12600 -6.88149 0.00000 1.00000 6.88149 + 5.14450 -8.03565 0.00000 1.00000 8.03565 + 5.16300 -8.36668 0.00000 1.00000 8.36668 + 5.18150 -7.96304 0.00000 1.00000 7.96304 + 5.20000 -7.02207 0.00000 1.00000 7.02207 + 5.21850 -5.81895 0.00000 1.00000 5.81895 + 5.23700 -4.66171 0.00000 1.00000 4.66171 + 5.25550 -3.83844 0.00000 1.00000 3.83844 + 5.27400 -3.56410 0.00000 1.00000 3.56410 + 5.29250 -3.93573 0.00000 1.00000 3.93573 + 5.31100 -4.90467 0.00000 1.00000 4.90467 + 5.32950 -6.27267 0.00000 1.00000 6.27267 + 5.34800 -7.71536 0.00000 1.00000 7.71536 + 5.36650 -8.83203 0.00000 1.00000 8.83203 + 5.38500 -9.21516 0.00000 1.00000 9.21516 + 5.40350 -8.52808 0.00000 1.00000 8.52808 + 5.42200 -6.57611 0.00000 1.00000 6.57611 + 5.44050 -3.35625 0.00000 1.00000 3.35625 + 5.45900 0.925287 0.00000 1.00000 -0.925287 + 5.47750 5.87209 0.00000 1.00000 -5.87209 + 5.49600 10.9500 0.00000 1.00000 -10.9500 + 5.51450 15.5640 0.00000 1.00000 -15.5640 + 5.53300 19.1477 0.00000 1.00000 -19.1477 + 5.55150 21.2490 0.00000 1.00000 -21.2490 + 5.57000 21.6003 0.00000 1.00000 -21.6003 + 5.58850 20.1588 0.00000 1.00000 -20.1588 + 5.60700 17.1124 0.00000 1.00000 -17.1124 + 5.62550 12.8494 0.00000 1.00000 -12.8494 + 5.64400 7.89927 0.00000 1.00000 -7.89927 + 5.66250 2.85190 0.00000 1.00000 -2.85190 + 5.68100 -1.72997 0.00000 1.00000 1.72997 + 5.69950 -5.39381 0.00000 1.00000 5.39381 + 5.71800 -7.86162 0.00000 1.00000 7.86162 + 5.73650 -9.06420 0.00000 1.00000 9.06420 + 5.75500 -9.13837 0.00000 1.00000 9.13837 + 5.77350 -8.38683 0.00000 1.00000 8.38683 + 5.79200 -7.20818 0.00000 1.00000 7.20818 + 5.81050 -6.01172 0.00000 1.00000 6.01172 + 5.82900 -5.13567 0.00000 1.00000 5.13567 + 5.84750 -4.78662 0.00000 1.00000 4.78662 + 5.86600 -5.01125 0.00000 1.00000 5.01125 + 5.88450 -5.70222 0.00000 1.00000 5.70222 + 5.90300 -6.63275 0.00000 1.00000 6.63275 + 5.92150 -7.51031 0.00000 1.00000 7.51031 + 5.94000 -8.03914 0.00000 1.00000 8.03914 + 5.95850 -7.98163 0.00000 1.00000 7.98163 + 5.97700 -7.20897 0.00000 1.00000 7.20897 + 5.99550 -5.73309 0.00000 1.00000 5.73309 + 6.01400 -3.71335 0.00000 1.00000 3.71335 + 6.03250 -1.43572 0.00000 1.00000 1.43572 + 6.05100 0.734316 0.00000 1.00000 -0.734316 + 6.06950 2.41816 0.00000 1.00000 -2.41816 + 6.08800 3.29880 0.00000 1.00000 -3.29880 + 6.10650 3.18922 0.00000 1.00000 -3.18922 + 6.12500 2.07961 0.00000 1.00000 -2.07961 + 6.14350 0.150522 0.00000 1.00000 -0.150522 + 6.16200 -2.25436 0.00000 1.00000 2.25436 + 6.18050 -4.69426 0.00000 1.00000 4.69426 + 6.19900 -6.72460 0.00000 1.00000 6.72460 + 6.21750 -7.99834 0.00000 1.00000 7.99834 + 6.23600 -8.35142 0.00000 1.00000 8.35142 + 6.25450 -7.84948 0.00000 1.00000 7.84948 + 6.27300 -6.78013 0.00000 1.00000 6.78013 + 6.29150 -5.58671 0.00000 1.00000 5.58671 + 6.31000 -4.75441 0.00000 1.00000 4.75441 + 6.32850 -4.67266 0.00000 1.00000 4.67266 + 6.34700 -5.50714 0.00000 1.00000 5.50714 + 6.36550 -7.11590 0.00000 1.00000 7.11590 + 6.38400 -9.03699 0.00000 1.00000 9.03699 + 6.40250 -10.5592 0.00000 1.00000 10.5592 + 6.42100 -10.8676 0.00000 1.00000 10.8676 + 6.43950 -9.23379 0.00000 1.00000 9.23379 + 6.45800 -5.20861 0.00000 1.00000 5.20861 + 6.47650 1.23011 0.00000 1.00000 -1.23011 + 6.49500 9.61241 0.00000 1.00000 -9.61241 + 6.51350 19.0142 0.00000 1.00000 -19.0142 + 6.53200 28.1967 0.00000 1.00000 -28.1967 + 6.55050 35.8243 0.00000 1.00000 -35.8243 + 6.56900 40.7166 0.00000 1.00000 -40.7166 + 6.58750 42.0833 0.00000 1.00000 -42.0833 + 6.60600 39.6873 0.00000 1.00000 -39.6873 + 6.62450 33.8989 0.00000 1.00000 -33.8989 + 6.64300 25.6256 0.00000 1.00000 -25.6256 + 6.66150 16.1324 0.00000 1.00000 -16.1324 + 6.68000 6.79125 0.00000 1.00000 -6.79125 + 6.69850 -1.18411 0.00000 1.00000 1.18411 + 6.71700 -6.95910 0.00000 1.00000 6.95910 + 6.73550 -10.2079 0.00000 1.00000 10.2079 + 6.75400 -11.1248 0.00000 1.00000 11.1248 + 6.77250 -10.3198 0.00000 1.00000 10.3198 + 6.79100 -8.62815 0.00000 1.00000 8.62815 + 6.80950 -6.88571 0.00000 1.00000 6.88571 + 6.82800 -5.72660 0.00000 1.00000 5.72660 + 6.84650 -5.45332 0.00000 1.00000 5.45332 + 6.86500 -6.00649 0.00000 1.00000 6.00649 + 6.88350 -7.03437 0.00000 1.00000 7.03437 + 6.90200 -8.03570 0.00000 1.00000 8.03570 + 6.92050 -8.53209 0.00000 1.00000 8.53209 + 6.93900 -8.22002 0.00000 1.00000 8.22002 + 6.95750 -7.06140 0.00000 1.00000 7.06140 + 6.97600 -5.29017 0.00000 1.00000 5.29017 + 6.99450 -3.33754 0.00000 1.00000 3.33754 + 7.01300 -1.70148 0.00000 1.00000 1.70148 + 7.03150 -0.800760 0.00000 1.00000 0.800760 + 7.05000 -0.856664 0.00000 1.00000 0.856664 + 7.06850 -1.83505 0.00000 1.00000 1.83505 + 7.08700 -3.46358 0.00000 1.00000 3.46358 + 7.10550 -5.31731 0.00000 1.00000 5.31731 + 7.12400 -6.94715 0.00000 1.00000 6.94715 + 7.14250 -8.01332 0.00000 1.00000 8.01332 + 7.16100 -8.38320 0.00000 1.00000 8.38320 + 7.17950 -8.16268 0.00000 1.00000 8.16268 + 7.19800 -7.64952 0.00000 1.00000 7.64952 + 7.21650 -7.22129 0.00000 1.00000 7.22129 + 7.23500 -7.19206 0.00000 1.00000 7.19206 + 7.25350 -7.68220 0.00000 1.00000 7.68220 + 7.27200 -8.54371 0.00000 1.00000 8.54371 + 7.29050 -9.36819 0.00000 1.00000 9.36819 + 7.30900 -9.58072 0.00000 1.00000 9.58072 + 7.32750 -8.59790 0.00000 1.00000 8.59790 + 7.34600 -6.00785 0.00000 1.00000 6.00785 + 7.36450 -1.72106 0.00000 1.00000 1.72106 + 7.38300 3.95269 0.00000 1.00000 -3.95269 + 7.40150 10.3276 0.00000 1.00000 -10.3276 + 7.42000 16.4640 0.00000 1.00000 -16.4640 + 7.43850 21.3618 0.00000 1.00000 -21.3618 + 7.45700 24.1782 0.00000 1.00000 -24.1782 + 7.47550 24.4162 0.00000 1.00000 -24.4162 + 7.49400 22.0356 0.00000 1.00000 -22.0356 + 7.51250 17.4573 0.00000 1.00000 -17.4573 + 7.53100 11.4623 0.00000 1.00000 -11.4623 + 7.54950 5.01118 0.00000 1.00000 -5.01118 + 7.56800 -0.965076 0.00000 1.00000 0.965076 + 7.58650 -5.75153 0.00000 1.00000 5.75153 + 7.60500 -8.96799 0.00000 1.00000 8.96799 + 7.62350 -10.5969 0.00000 1.00000 10.5969 + 7.64200 -10.9206 0.00000 1.00000 10.9206 + 7.66050 -10.3893 0.00000 1.00000 10.3893 + 7.67900 -9.46200 0.00000 1.00000 9.46200 + 7.69750 -8.46444 0.00000 1.00000 8.46444 + 7.71600 -7.50854 0.00000 1.00000 7.50854 + 7.73450 -6.49304 0.00000 1.00000 6.49304 + 7.75300 -5.18168 0.00000 1.00000 5.18168 + 7.77150 -3.32911 0.00000 1.00000 3.32911 + 7.79000 -0.811546 0.00000 1.00000 0.811546 + 7.80850 2.28073 0.00000 1.00000 -2.28073 + 7.82700 5.61902 0.00000 1.00000 -5.61902 + 7.84550 8.68909 0.00000 1.00000 -8.68909 + 7.86400 10.9073 0.00000 1.00000 -10.9073 + 7.88250 11.7676 0.00000 1.00000 -11.7676 + 7.90100 10.9777 0.00000 1.00000 -10.9777 + 7.91950 8.54633 0.00000 1.00000 -8.54633 + 7.93800 4.79627 0.00000 1.00000 -4.79627 + 7.95650 0.300695 0.00000 1.00000 -0.300695 + 7.97500 -4.24152 0.00000 1.00000 4.24152 + 7.99350 -8.15787 0.00000 1.00000 8.15787 + 8.01200 -10.9420 0.00000 1.00000 10.9420 + 8.03050 -12.3456 0.00000 1.00000 12.3456 + 8.04900 -12.4001 0.00000 1.00000 12.4001 + 8.06750 -11.3663 0.00000 1.00000 11.3663 + 8.08600 -9.63181 0.00000 1.00000 9.63181 + 8.10450 -7.58723 0.00000 1.00000 7.58723 + 8.12300 -5.52117 0.00000 1.00000 5.52117 + 8.14150 -3.56353 0.00000 1.00000 3.56353 + 8.16000 -1.69260 0.00000 1.00000 1.69260 + 8.17850 0.199827 0.00000 1.00000 -0.199827 + 8.19700 2.21044 0.00000 1.00000 -2.21044 + 8.21550 4.33057 0.00000 1.00000 -4.33057 + 8.23400 6.39218 0.00000 1.00000 -6.39218 + 8.25250 8.07555 0.00000 1.00000 -8.07555 + 8.27100 8.97896 0.00000 1.00000 -8.97896 + 8.28950 8.73073 0.00000 1.00000 -8.73073 + 8.30800 7.11016 0.00000 1.00000 -7.11016 + 8.32650 4.14151 0.00000 1.00000 -4.14151 + 8.34500 0.130936 0.00000 1.00000 -0.130936 + 8.36350 -4.36837 0.00000 1.00000 4.36837 + 8.38200 -8.65854 0.00000 1.00000 8.65854 + 8.40050 -12.0433 0.00000 1.00000 12.0433 + 8.41900 -13.9807 0.00000 1.00000 13.9807 + 8.43750 -14.2030 0.00000 1.00000 14.2030 + 8.45600 -12.7704 0.00000 1.00000 12.7704 + 8.47450 -10.0445 0.00000 1.00000 10.0445 + 8.49300 -6.58938 0.00000 1.00000 6.58938 + 8.51150 -3.02663 0.00000 1.00000 3.02663 + 8.53000 0.112114 0.00000 1.00000 -0.112114 + 8.54850 2.49566 0.00000 1.00000 -2.49566 + 8.56700 4.03580 0.00000 1.00000 -4.03580 + 8.58550 4.85377 0.00000 1.00000 -4.85377 + 8.60400 5.18537 0.00000 1.00000 -5.18537 + 8.62250 5.25808 0.00000 1.00000 -5.25808 + 8.64100 5.18193 0.00000 1.00000 -5.18193 + 8.65950 4.89182 0.00000 1.00000 -4.89182 + 8.67800 4.16349 0.00000 1.00000 -4.16349 + 8.69650 2.70252 0.00000 1.00000 -2.70252 + 8.71500 0.282220 0.00000 1.00000 -0.282220 + 8.73350 -3.11124 0.00000 1.00000 3.11124 + 8.75200 -7.17490 0.00000 1.00000 7.17490 + 8.77050 -11.2672 0.00000 1.00000 11.2672 + 8.78900 -14.4886 0.00000 1.00000 14.4886 + 8.80750 -15.8559 0.00000 1.00000 15.8559 + 8.82600 -14.5328 0.00000 1.00000 14.5328 + 8.84450 -10.0609 0.00000 1.00000 10.0609 + 8.86300 -2.52773 0.00000 1.00000 2.52773 + 8.88150 7.37428 0.00000 1.00000 -7.37428 + 8.90000 18.4240 0.00000 1.00000 -18.4240 + 8.91850 29.0726 0.00000 1.00000 -29.0726 + 8.93700 37.7295 0.00000 1.00000 -37.7295 + 8.95550 43.0717 0.00000 1.00000 -43.0717 + 8.97400 44.3044 0.00000 1.00000 -44.3044 + 8.99250 41.3154 0.00000 1.00000 -41.3154 + 9.01100 34.6857 0.00000 1.00000 -34.6857 + 9.02950 25.5570 0.00000 1.00000 -25.5570 + 9.04800 15.3859 0.00000 1.00000 -15.3859 + 9.06650 5.64529 0.00000 1.00000 -5.64529 + 9.08500 -2.45985 0.00000 1.00000 2.45985 + 9.10350 -8.19758 0.00000 1.00000 8.19758 + 9.12200 -11.3936 0.00000 1.00000 11.3936 + 9.14050 -12.3840 0.00000 1.00000 12.3840 + 9.15900 -11.8591 0.00000 1.00000 11.8591 + 9.17750 -10.6446 0.00000 1.00000 10.6446 + 9.19600 -9.48212 0.00000 1.00000 9.48212 + 9.21450 -8.86286 0.00000 1.00000 8.86286 + 9.23300 -8.95166 0.00000 1.00000 8.95166 + 9.25150 -9.60978 0.00000 1.00000 9.60978 + 9.27000 -10.4985 0.00000 1.00000 10.4985 + 9.28850 -11.2264 0.00000 1.00000 11.2264 + 9.30700 -11.4956 0.00000 1.00000 11.4956 + 9.32550 -11.2056 0.00000 1.00000 11.2056 + 9.34400 -10.4851 0.00000 1.00000 10.4851 + 9.36250 -9.64367 0.00000 1.00000 9.64367 + 9.38100 -9.05839 0.00000 1.00000 9.05839 + 9.39950 -9.03059 0.00000 1.00000 9.03059 + 9.41800 -9.65891 0.00000 1.00000 9.65891 + 9.43650 -10.7695 0.00000 1.00000 10.7695 + 9.45500 -11.9282 0.00000 1.00000 11.9282 + 9.47350 -12.5352 0.00000 1.00000 12.5352 + 9.49200 -11.9793 0.00000 1.00000 11.9793 + 9.51050 -9.80968 0.00000 1.00000 9.80968 + 9.52900 -5.88098 0.00000 1.00000 5.88098 + 9.54750 -0.429865 0.00000 1.00000 0.429865 + 9.56600 5.93738 0.00000 1.00000 -5.93738 + 9.58450 12.3467 0.00000 1.00000 -12.3467 + 9.60300 17.8253 0.00000 1.00000 -17.8253 + 9.62150 21.4983 0.00000 1.00000 -21.4983 + 9.64000 22.7684 0.00000 1.00000 -22.7684 + 9.65850 21.4353 0.00000 1.00000 -21.4353 + 9.67700 17.7297 0.00000 1.00000 -17.7297 + 9.69550 12.2556 0.00000 1.00000 -12.2556 + 9.71400 5.85940 0.00000 1.00000 -5.85940 + 9.73250 -0.539853 0.00000 1.00000 0.539853 + 9.75100 -6.11696 0.00000 1.00000 6.11696 + 9.76950 -10.2704 0.00000 1.00000 10.2704 + 9.78800 -12.6954 0.00000 1.00000 12.6954 + 9.80650 -13.3941 0.00000 1.00000 13.3941 + 9.82500 -12.6315 0.00000 1.00000 12.6315 + 9.84350 -10.8487 0.00000 1.00000 10.8487 + 9.86200 -8.55755 0.00000 1.00000 8.55755 + 9.88050 -6.24003 0.00000 1.00000 6.24003 + 9.89900 -4.27478 0.00000 1.00000 4.27478 + 9.91750 -2.90328 0.00000 1.00000 2.90328 + 9.93600 -2.23386 0.00000 1.00000 2.23386 + 9.95450 -2.27104 0.00000 1.00000 2.27104 + 9.97300 -2.95175 0.00000 1.00000 2.95175 + 9.99150 -4.17209 0.00000 1.00000 4.17209 + 10.0100 -5.79607 0.00000 1.00000 5.79607 + 10.0285 -7.64859 0.00000 1.00000 7.64859 + 10.0470 -9.50283 0.00000 1.00000 9.50283 + 10.0655 -11.0757 0.00000 1.00000 11.0757 + 10.0840 -12.0425 0.00000 1.00000 12.0425 + 10.1025 -12.0751 0.00000 1.00000 12.0751 + 10.1210 -10.9017 0.00000 1.00000 10.9017 + 10.1395 -8.37613 0.00000 1.00000 8.37613 + 10.1580 -4.54026 0.00000 1.00000 4.54026 + 10.1765 0.338357 0.00000 1.00000 -0.338357 + 10.1950 5.76996 0.00000 1.00000 -5.76996 + 10.2135 11.0939 0.00000 1.00000 -11.0939 + 10.2320 15.5741 0.00000 1.00000 -15.5741 + 10.2505 18.5225 0.00000 1.00000 -18.5225 + 10.2690 19.4270 0.00000 1.00000 -19.4270 + 10.2875 18.0567 0.00000 1.00000 -18.0567 + 10.3060 14.5227 0.00000 1.00000 -14.5227 + 10.3245 9.27796 0.00000 1.00000 -9.27796 + 10.3430 3.05599 0.00000 1.00000 -3.05599 + 10.3615 -3.24345 0.00000 1.00000 3.24345 + 10.3800 -8.70145 0.00000 1.00000 8.70145 + 10.3985 -12.5330 0.00000 1.00000 12.5330 + 10.4170 -14.2182 0.00000 1.00000 14.2182 + 10.4355 -13.5885 0.00000 1.00000 13.5885 + 10.4540 -10.8525 0.00000 1.00000 10.8525 + 10.4725 -6.55772 0.00000 1.00000 6.55772 + 10.4910 -1.49640 0.00000 1.00000 1.49640 + 10.5095 3.42852 0.00000 1.00000 -3.42852 + 10.5280 7.35363 0.00000 1.00000 -7.35363 + 10.5465 9.59717 0.00000 1.00000 -9.59717 + 10.5650 9.77054 0.00000 1.00000 -9.77054 + 10.5835 7.84234 0.00000 1.00000 -7.84234 + 10.6020 4.14584 0.00000 1.00000 -4.14584 + 10.6205 -0.671143 0.00000 1.00000 0.671143 + 10.6390 -5.74603 0.00000 1.00000 5.74603 + 10.6575 -10.1361 0.00000 1.00000 10.1361 + 10.6760 -12.9671 0.00000 1.00000 12.9671 + 10.6945 -13.5738 0.00000 1.00000 13.5738 + 10.7130 -11.6108 0.00000 1.00000 11.6108 + 10.7315 -7.11852 0.00000 1.00000 7.11852 + 10.7500 -0.532582 0.00000 1.00000 0.532582 + 10.7685 7.36496 0.00000 1.00000 -7.36496 + 10.7870 15.5502 0.00000 1.00000 -15.5502 + 10.8055 22.9046 0.00000 1.00000 -22.9046 + 10.8240 28.3836 0.00000 1.00000 -28.3836 + 10.8425 31.1819 0.00000 1.00000 -31.1819 + 10.8610 30.8667 0.00000 1.00000 -30.8667 + 10.8795 27.4544 0.00000 1.00000 -27.4544 + 10.8980 21.4174 0.00000 1.00000 -21.4174 + 10.9165 13.6149 0.00000 1.00000 -13.6149 + 10.9350 5.15717 0.00000 1.00000 -5.15717 + 10.9535 -2.77403 0.00000 1.00000 2.77403 + 10.9720 -9.11963 0.00000 1.00000 9.11963 + 10.9905 -13.1166 0.00000 1.00000 13.1166 + 11.0090 -14.4189 0.00000 1.00000 14.4189 + 11.0275 -13.1446 0.00000 1.00000 13.1446 + 11.0460 -9.84069 0.00000 1.00000 9.84069 + 11.0645 -5.37361 0.00000 1.00000 5.37361 + 11.0830 -0.766336 0.00000 1.00000 0.766336 + 11.1015 2.99059 0.00000 1.00000 -2.99059 + 11.1200 5.12102 0.00000 1.00000 -5.12102 + 11.1385 5.20555 0.00000 1.00000 -5.20555 + 11.1570 3.25580 0.00000 1.00000 -3.25580 + 11.1755 -0.295787 0.00000 1.00000 0.295787 + 11.1940 -4.68917 0.00000 1.00000 4.68917 + 11.2125 -8.99252 0.00000 1.00000 8.99252 + 11.2310 -12.2872 0.00000 1.00000 12.2872 + 11.2495 -13.8447 0.00000 1.00000 13.8447 + 11.2680 -13.2610 0.00000 1.00000 13.2610 + 11.2865 -10.5280 0.00000 1.00000 10.5280 + 11.3050 -6.02790 0.00000 1.00000 6.02790 + 11.3235 -0.457428 0.00000 1.00000 0.457428 + 11.3420 5.30272 0.00000 1.00000 -5.30272 + 11.3605 10.3468 0.00000 1.00000 -10.3468 + 11.3790 13.9003 0.00000 1.00000 -13.9003 + 11.3975 15.4459 0.00000 1.00000 -15.4459 + 11.4160 14.7993 0.00000 1.00000 -14.7993 + 11.4345 12.1251 0.00000 1.00000 -12.1251 + 11.4530 7.89515 0.00000 1.00000 -7.89515 + 11.4715 2.79743 0.00000 1.00000 -2.79743 + 11.4900 -2.38402 0.00000 1.00000 2.38402 + 11.5085 -6.89848 0.00000 1.00000 6.89848 + 11.5270 -10.1446 0.00000 1.00000 10.1446 + 11.5455 -11.7562 0.00000 1.00000 11.7562 + 11.5640 -11.6477 0.00000 1.00000 11.6477 + 11.5825 -10.0156 0.00000 1.00000 10.0156 + 11.6010 -7.29778 0.00000 1.00000 7.29778 + 11.6195 -4.09885 0.00000 1.00000 4.09885 + 11.6380 -1.08810 0.00000 1.00000 1.08810 + 11.6565 1.11439 0.00000 1.00000 -1.11439 + 11.6750 2.04788 0.00000 1.00000 -2.04788 + 11.6935 1.49867 0.00000 1.00000 -1.49867 + 11.7120 -0.451611 0.00000 1.00000 0.451611 + 11.7305 -3.42848 0.00000 1.00000 3.42848 + 11.7490 -6.82125 0.00000 1.00000 6.82125 + 11.7675 -9.88740 0.00000 1.00000 9.88740 + 11.7860 -11.8896 0.00000 1.00000 11.8896 + 11.8045 -12.2430 0.00000 1.00000 12.2430 + 11.8230 -10.6446 0.00000 1.00000 10.6446 + 11.8415 -7.15722 0.00000 1.00000 7.15722 + 11.8600 -2.22583 0.00000 1.00000 2.22583 + 11.8785 3.38458 0.00000 1.00000 -3.38458 + 11.8970 8.72108 0.00000 1.00000 -8.72108 + 11.9155 12.8213 0.00000 1.00000 -12.8213 + 11.9340 14.9032 0.00000 1.00000 -14.9032 + 11.9525 14.5281 0.00000 1.00000 -14.5281 + 11.9710 11.6999 0.00000 1.00000 -11.6999 + 11.9895 6.87776 0.00000 1.00000 -6.87776 + 12.0080 0.891504 0.00000 1.00000 -0.891504 + 12.0265 -5.22565 0.00000 1.00000 5.22565 + 12.0450 -10.4522 0.00000 1.00000 10.4522 + 12.0635 -13.9931 0.00000 1.00000 13.9931 + 12.0820 -15.4435 0.00000 1.00000 15.4435 + 12.1005 -14.8644 0.00000 1.00000 14.8644 + 12.1190 -12.7520 0.00000 1.00000 12.7520 + 12.1375 -9.90845 0.00000 1.00000 9.90845 + 12.1560 -7.24453 0.00000 1.00000 7.24453 + 12.1745 -5.56166 0.00000 1.00000 5.56166 + 12.1930 -5.36161 0.00000 1.00000 5.36161 + 12.2115 -6.72586 0.00000 1.00000 6.72586 + 12.2300 -9.28835 0.00000 1.00000 9.28835 + 12.2485 -12.3067 0.00000 1.00000 12.3067 + 12.2670 -14.8178 0.00000 1.00000 14.8178 + 12.2855 -15.8476 0.00000 1.00000 15.8476 + 12.3040 -14.6332 0.00000 1.00000 14.6332 + 12.3225 -10.8097 0.00000 1.00000 10.8097 + 12.3410 -4.52145 0.00000 1.00000 4.52145 + 12.3595 3.57058 0.00000 1.00000 -3.57058 + 12.3780 12.3893 0.00000 1.00000 -12.3893 + 12.3965 20.6314 0.00000 1.00000 -20.6314 + 12.4150 27.0092 0.00000 1.00000 -27.0092 + 12.4335 30.4959 0.00000 1.00000 -30.4959 + 12.4520 30.5247 0.00000 1.00000 -30.5247 + 12.4705 27.1034 0.00000 1.00000 -27.1034 + 12.4890 20.8197 0.00000 1.00000 -20.8197 + 12.5075 12.7348 0.00000 1.00000 -12.7348 + 12.5260 4.18409 0.00000 1.00000 -4.18409 + 12.5445 -3.47600 0.00000 1.00000 3.47600 + 12.5630 -9.12640 0.00000 1.00000 9.12640 + 12.5815 -12.0958 0.00000 1.00000 12.0958 + 12.6000 -12.2803 0.00000 1.00000 12.2803 + 12.6185 -10.1467 0.00000 1.00000 10.1467 + 12.6370 -6.61573 0.00000 1.00000 6.61573 + 12.6555 -2.84816 0.00000 1.00000 2.84816 + 12.6740 0.0234471 0.00000 1.00000 -0.0234471 + 12.6925 1.16051 0.00000 1.00000 -1.16051 + 12.7110 0.222329 0.00000 1.00000 -0.222329 + 12.7295 -2.53923 0.00000 1.00000 2.53923 + 12.7480 -6.31966 0.00000 1.00000 6.31966 + 12.7665 -9.93250 0.00000 1.00000 9.93250 + 12.7850 -12.0782 0.00000 1.00000 12.0782 + 12.8035 -11.6556 0.00000 1.00000 11.6556 + 12.8220 -8.04822 0.00000 1.00000 8.04822 + 12.8405 -1.31753 0.00000 1.00000 1.31753 + 12.8590 7.74657 0.00000 1.00000 -7.74657 + 12.8775 17.7420 0.00000 1.00000 -17.7420 + 12.8960 26.9214 0.00000 1.00000 -26.9214 + 12.9145 33.5578 0.00000 1.00000 -33.5578 + 12.9330 36.3277 0.00000 1.00000 -36.3277 + 12.9515 34.6234 0.00000 1.00000 -34.6234 + 12.9700 28.7156 0.00000 1.00000 -28.7156 + 12.9885 19.7233 0.00000 1.00000 -19.7233 + 13.0070 9.38804 0.00000 1.00000 -9.38804 + 13.0255 -0.297908 0.00000 1.00000 0.297908 + 13.0440 -7.52791 0.00000 1.00000 7.52791 + 13.0625 -11.0794 0.00000 1.00000 11.0794 + 13.0810 -10.5807 0.00000 1.00000 10.5807 + 13.0995 -6.58087 0.00000 1.00000 6.58087 + 13.1180 -0.404585 0.00000 1.00000 0.404585 + 13.1365 6.17556 0.00000 1.00000 -6.17556 + 13.1550 11.3708 0.00000 1.00000 -11.3708 + 13.1735 13.8053 0.00000 1.00000 -13.8053 + 13.1920 12.8357 0.00000 1.00000 -12.8357 + 13.2105 8.68336 0.00000 1.00000 -8.68336 + 13.2290 2.34908 0.00000 1.00000 -2.34908 + 13.2475 -4.66287 0.00000 1.00000 4.66287 + 13.2660 -10.7379 0.00000 1.00000 10.7379 + 13.2845 -14.5602 0.00000 1.00000 14.5602 + 13.3030 -15.4343 0.00000 1.00000 15.4343 + 13.3215 -13.4393 0.00000 1.00000 13.4393 + 13.3400 -9.37967 0.00000 1.00000 9.37967 + 13.3585 -4.55053 0.00000 1.00000 4.55053 + 13.3770 -0.382431 0.00000 1.00000 0.382431 + 13.3955 1.93839 0.00000 1.00000 -1.93839 + 13.4140 1.77366 0.00000 1.00000 -1.77366 + 13.4325 -0.818874 0.00000 1.00000 0.818874 + 13.4510 -5.13072 0.00000 1.00000 5.13072 + 13.4695 -10.0255 0.00000 1.00000 10.0255 + 13.4880 -14.2744 0.00000 1.00000 14.2744 + 13.5065 -16.9060 0.00000 1.00000 16.9060 + 13.5250 -17.4714 0.00000 1.00000 17.4714 + 13.5435 -16.1512 0.00000 1.00000 16.1512 + 13.5620 -13.6784 0.00000 1.00000 13.6784 + 13.5805 -11.1043 0.00000 1.00000 11.1043 + 13.5990 -9.47288 0.00000 1.00000 9.47288 + 13.6175 -9.49567 0.00000 1.00000 9.49567 + 13.6360 -11.3153 0.00000 1.00000 11.3153 + 13.6545 -14.4268 0.00000 1.00000 14.4268 + 13.6730 -17.7824 0.00000 1.00000 17.7824 + 13.6915 -20.0552 0.00000 1.00000 20.0552 + 13.7100 -19.9965 0.00000 1.00000 19.9965 + 13.7285 -16.7898 0.00000 1.00000 16.7898 + 13.7470 -10.3089 0.00000 1.00000 10.3089 + 13.7655 -1.20781 0.00000 1.00000 1.20781 + 13.7840 9.18567 0.00000 1.00000 -9.18567 + 13.8025 19.1488 0.00000 1.00000 -19.1488 + 13.8210 26.9489 0.00000 1.00000 -26.9489 + 13.8395 31.2366 0.00000 1.00000 -31.2366 + 13.8580 31.3496 0.00000 1.00000 -31.3496 + 13.8765 27.4511 0.00000 1.00000 -27.4511 + 13.8950 20.4697 0.00000 1.00000 -20.4697 + 13.9135 11.8582 0.00000 1.00000 -11.8582 + 13.9320 3.23523 0.00000 1.00000 -3.23523 + 13.9505 -3.99882 0.00000 1.00000 3.99882 + 13.9690 -8.96984 0.00000 1.00000 8.96984 + 13.9875 -11.4848 0.00000 1.00000 11.4848 + 14.0060 -11.9967 0.00000 1.00000 11.9967 + 14.0245 -11.3970 0.00000 1.00000 11.3970 + 14.0430 -10.7008 0.00000 1.00000 10.7008 + 14.0615 -10.7168 0.00000 1.00000 10.7168 + 14.0800 -11.7936 0.00000 1.00000 11.7936 + 14.0985 -13.7115 0.00000 1.00000 13.7115 + 14.1170 -15.7457 0.00000 1.00000 15.7457 + 14.1355 -16.8835 0.00000 1.00000 16.8835 + 14.1540 -16.1342 0.00000 1.00000 16.1342 + 14.1725 -12.8466 0.00000 1.00000 12.8466 + 14.1910 -6.94542 0.00000 1.00000 6.94542 + 14.2095 0.982134 0.00000 1.00000 -0.982134 + 14.2280 9.77953 0.00000 1.00000 -9.77953 + 14.2465 17.9729 0.00000 1.00000 -17.9729 + 14.2650 24.1178 0.00000 1.00000 -24.1178 + 14.2835 27.1485 0.00000 1.00000 -27.1485 + 14.3020 26.6355 0.00000 1.00000 -26.6355 + 14.3205 22.8839 0.00000 1.00000 -22.8839 + 14.3390 16.8479 0.00000 1.00000 -16.8479 + 14.3575 9.88786 0.00000 1.00000 -9.88786 + 14.3760 3.43554 0.00000 1.00000 -3.43554 + 14.3945 -1.34253 0.00000 1.00000 1.34253 + 14.4130 -3.79922 0.00000 1.00000 3.79922 + 14.4315 -3.91650 0.00000 1.00000 3.91650 + 14.4500 -2.25034 0.00000 1.00000 2.25034 + 14.4685 0.265934 0.00000 1.00000 -0.265934 + 14.4870 2.60091 0.00000 1.00000 -2.60091 + 14.5055 3.90902 0.00000 1.00000 -3.90902 + 14.5240 3.74411 0.00000 1.00000 -3.74411 + 14.5425 2.15013 0.00000 1.00000 -2.15013 + 14.5610 -0.388481 0.00000 1.00000 0.388481 + 14.5795 -3.11515 0.00000 1.00000 3.11515 + 14.5980 -5.23631 0.00000 1.00000 5.23631 + 14.6165 -6.15513 0.00000 1.00000 6.15513 + 14.6350 -5.63898 0.00000 1.00000 5.63898 + 14.6535 -3.87566 0.00000 1.00000 3.87566 + 14.6720 -1.40645 0.00000 1.00000 1.40645 + 14.6905 1.04029 0.00000 1.00000 -1.04029 + 14.7090 2.76304 0.00000 1.00000 -2.76304 + 14.7275 3.28473 0.00000 1.00000 -3.28473 + 14.7460 2.47788 0.00000 1.00000 -2.47788 + 14.7645 0.584519 0.00000 1.00000 -0.584519 + 14.7830 -1.87052 0.00000 1.00000 1.87052 + 14.8015 -4.24417 0.00000 1.00000 4.24417 + 14.8200 -5.96765 0.00000 1.00000 5.96765 + 14.8385 -6.70965 0.00000 1.00000 6.70965 + 14.8570 -6.46211 0.00000 1.00000 6.46211 + 14.8755 -5.52356 0.00000 1.00000 5.52356 + 14.8940 -4.38544 0.00000 1.00000 4.38544 + 14.9125 -3.55512 0.00000 1.00000 3.55512 + 14.9310 -3.36898 0.00000 1.00000 3.36898 + 14.9495 -3.85281 0.00000 1.00000 3.85281 + 14.9680 -4.67590 0.00000 1.00000 4.67590 + 14.9865 -5.21922 0.00000 1.00000 5.21922 + 15.0050 -4.74479 0.00000 1.00000 4.74479 + 15.0235 -2.62144 0.00000 1.00000 2.62144 + 15.0420 1.45687 0.00000 1.00000 -1.45687 + 15.0605 7.32500 0.00000 1.00000 -7.32500 + 15.0790 14.3193 0.00000 1.00000 -14.3193 + 15.0975 21.3835 0.00000 1.00000 -21.3835 + 15.1160 27.2852 0.00000 1.00000 -27.2852 + 15.1345 30.8902 0.00000 1.00000 -30.8902 + 15.1530 31.4245 0.00000 1.00000 -31.4245 + 15.1715 28.6588 0.00000 1.00000 -28.6588 + 15.1900 22.9682 0.00000 1.00000 -22.9682 + 15.2085 15.2541 0.00000 1.00000 -15.2541 + 15.2270 6.74712 0.00000 1.00000 -6.74712 + 15.2455 -1.25964 0.00000 1.00000 1.25964 + 15.2640 -7.68049 0.00000 1.00000 7.68049 + 15.2825 -11.8442 0.00000 1.00000 11.8442 + 15.3010 -13.5919 0.00000 1.00000 13.5919 + 15.3195 -13.2493 0.00000 1.00000 13.2493 + 15.3380 -11.4916 0.00000 1.00000 11.4916 + 15.3565 -9.14144 0.00000 1.00000 9.14144 + 15.3750 -6.95504 0.00000 1.00000 6.95504 + 15.3935 -5.44896 0.00000 1.00000 5.44896 + 15.4120 -4.80772 0.00000 1.00000 4.80772 + 15.4305 -4.88897 0.00000 1.00000 4.88897 + 15.4490 -5.31706 0.00000 1.00000 5.31706 + 15.4675 -5.63285 0.00000 1.00000 5.63285 + 15.4860 -5.45462 0.00000 1.00000 5.45462 + 15.5045 -4.60459 0.00000 1.00000 4.60459 + 15.5230 -3.16776 0.00000 1.00000 3.16776 + 15.5415 -1.46992 0.00000 1.00000 1.46992 + 15.5600 0.0157586 0.00000 1.00000 -0.0157586 + 15.5785 0.806047 0.00000 1.00000 -0.806047 + 15.5970 0.550242 0.00000 1.00000 -0.550242 + 15.6155 -0.861348 0.00000 1.00000 0.861348 + 15.6340 -3.25430 0.00000 1.00000 3.25430 + 15.6525 -6.20584 0.00000 1.00000 6.20584 + 15.6710 -9.14992 0.00000 1.00000 9.14992 + 15.6895 -11.5204 0.00000 1.00000 11.5204 + 15.7080 -12.8909 0.00000 1.00000 12.8909 + 15.7265 -13.0717 0.00000 1.00000 13.0717 + 15.7450 -12.1417 0.00000 1.00000 12.1417 + 15.7635 -10.4097 0.00000 1.00000 10.4097 + 15.7820 -8.32011 0.00000 1.00000 8.32011 + 15.8005 -6.33136 0.00000 1.00000 6.33136 + 15.8190 -4.80087 0.00000 1.00000 4.80087 + 15.8375 -3.90675 0.00000 1.00000 3.90675 + 15.8560 -3.62474 0.00000 1.00000 3.62474 + 15.8745 -3.76225 0.00000 1.00000 3.76225 + 15.8930 -4.03596 0.00000 1.00000 4.03596 + 15.9115 -4.16761 0.00000 1.00000 4.16761 + 15.9300 -3.96959 0.00000 1.00000 3.96959 + 15.9485 -3.39629 0.00000 1.00000 3.39629 + 15.9670 -2.54969 0.00000 1.00000 2.54969 + 15.9855 -1.64188 0.00000 1.00000 1.64188 + 16.0040 -0.928772 0.00000 1.00000 0.928772 + 16.0225 -0.634845 0.00000 1.00000 0.634845 + 16.0410 -0.888145 0.00000 1.00000 0.888145 + 16.0595 -1.67980 0.00000 1.00000 1.67980 + 16.0780 -2.85514 0.00000 1.00000 2.85514 + 16.0965 -4.13661 0.00000 1.00000 4.13661 + 16.1150 -5.17310 0.00000 1.00000 5.17310 + 16.1335 -5.60636 0.00000 1.00000 5.60636 + 16.1520 -5.14159 0.00000 1.00000 5.14159 + 16.1705 -3.60734 0.00000 1.00000 3.60734 + 16.1890 -0.992023 0.00000 1.00000 0.992023 + 16.2075 2.54958 0.00000 1.00000 -2.54958 + 16.2260 6.71807 0.00000 1.00000 -6.71807 + 16.2445 11.1120 0.00000 1.00000 -11.1120 + 16.2630 15.2812 0.00000 1.00000 -15.2812 + 16.2815 18.7822 0.00000 1.00000 -18.7822 + 16.3000 21.2269 0.00000 1.00000 -21.2269 + 16.3185 22.3212 0.00000 1.00000 -22.3212 + 16.3370 21.8912 0.00000 1.00000 -21.8912 + 16.3555 19.8991 0.00000 1.00000 -19.8991 + 16.3740 16.4493 0.00000 1.00000 -16.4493 + 16.3925 11.7863 0.00000 1.00000 -11.7863 + 16.4110 6.28331 0.00000 1.00000 -6.28331 + 16.4295 0.418687 0.00000 1.00000 -0.418687 + 16.4480 -5.25963 0.00000 1.00000 5.25963 + 16.4665 -10.1842 0.00000 1.00000 10.1842 + 16.4850 -13.8295 0.00000 1.00000 13.8295 + 16.5035 -15.7785 0.00000 1.00000 15.7785 + 16.5220 -15.7830 0.00000 1.00000 15.7830 + 16.5405 -13.8070 0.00000 1.00000 13.8070 + 16.5590 -10.0391 0.00000 1.00000 10.0391 + 16.5775 -4.87264 0.00000 1.00000 4.87264 + 16.5960 1.14589 0.00000 1.00000 -1.14589 + 16.6145 7.38649 0.00000 1.00000 -7.38649 + 16.6330 13.2091 0.00000 1.00000 -13.2091 + 16.6515 18.0296 0.00000 1.00000 -18.0296 + 16.6700 21.3708 0.00000 1.00000 -21.3708 + 16.6885 22.8991 0.00000 1.00000 -22.8991 + 16.7070 22.4456 0.00000 1.00000 -22.4456 + 16.7255 20.0158 0.00000 1.00000 -20.0158 + 16.7440 15.7881 0.00000 1.00000 -15.7881 + 16.7625 10.1035 0.00000 1.00000 -10.1035 + 16.7810 3.44424 0.00000 1.00000 -3.44424 + 16.7995 -3.59847 0.00000 1.00000 3.59847 + 16.8180 -10.3717 0.00000 1.00000 10.3717 + 16.8365 -16.2205 0.00000 1.00000 16.2205 + 16.8550 -20.5580 0.00000 1.00000 20.5580 + 16.8735 -22.9372 0.00000 1.00000 22.9372 + 16.8920 -23.1129 0.00000 1.00000 23.1129 + 16.9105 -21.0837 0.00000 1.00000 21.0837 + 16.9290 -17.1032 0.00000 1.00000 17.1032 + 16.9475 -11.6563 0.00000 1.00000 11.6563 + 16.9660 -5.39998 0.00000 1.00000 5.39998 + 16.9845 0.923758 0.00000 1.00000 -0.923758 + 17.0030 6.59122 0.00000 1.00000 -6.59122 + 17.0215 10.9979 0.00000 1.00000 -10.9979 + 17.0400 13.7383 0.00000 1.00000 -13.7383 + 17.0585 14.6477 0.00000 1.00000 -14.6477 + 17.0770 13.7998 0.00000 1.00000 -13.7998 + 17.0955 11.4638 0.00000 1.00000 -11.4638 + 17.1140 8.03578 0.00000 1.00000 -8.03578 + 17.1325 3.96378 0.00000 1.00000 -3.96378 + 17.1510 -0.316698 0.00000 1.00000 0.316698 + 17.1695 -4.42438 0.00000 1.00000 4.42438 + 17.1880 -8.04681 0.00000 1.00000 8.04681 + 17.2065 -10.9324 0.00000 1.00000 10.9324 + 17.2250 -12.8725 0.00000 1.00000 12.8725 + 17.2435 -13.6898 0.00000 1.00000 13.6898 + 17.2620 -13.2456 0.00000 1.00000 13.2456 + 17.2805 -11.4675 0.00000 1.00000 11.4675 + 17.2990 -8.39144 0.00000 1.00000 8.39144 + 17.3175 -4.20001 0.00000 1.00000 4.20001 + 17.3360 0.758004 0.00000 1.00000 -0.758004 + 17.3545 5.98116 0.00000 1.00000 -5.98116 + 17.3730 10.8661 0.00000 1.00000 -10.8661 + 17.3915 14.7906 0.00000 1.00000 -14.7906 + 17.4100 17.2137 0.00000 1.00000 -17.2137 + 17.4285 17.7745 0.00000 1.00000 -17.7745 + 17.4470 16.3661 0.00000 1.00000 -16.3661 + 17.4655 13.1690 0.00000 1.00000 -13.1690 + 17.4840 8.63053 0.00000 1.00000 -8.63053 + 17.5025 3.39246 0.00000 1.00000 -3.39246 + 17.5210 -1.82203 0.00000 1.00000 1.82203 + 17.5395 -6.33848 0.00000 1.00000 6.33848 + 17.5580 -9.64981 0.00000 1.00000 9.64981 + 17.5765 -11.4978 0.00000 1.00000 11.4978 + 17.5950 -11.9009 0.00000 1.00000 11.9009 + 17.6135 -11.1239 0.00000 1.00000 11.1239 + 17.6320 -9.59944 0.00000 1.00000 9.59944 + 17.6505 -7.81972 0.00000 1.00000 7.81972 + 17.6690 -6.22442 0.00000 1.00000 6.22442 + 17.6875 -5.11122 0.00000 1.00000 5.11122 + 17.7060 -4.58875 0.00000 1.00000 4.58875 + 17.7245 -4.58029 0.00000 1.00000 4.58029 + 17.7430 -4.87225 0.00000 1.00000 4.87225 + 17.7615 -5.18968 0.00000 1.00000 5.18968 + 17.7800 -5.27616 0.00000 1.00000 5.27616 + 17.7985 -4.95771 0.00000 1.00000 4.95771 + 17.8170 -4.17763 0.00000 1.00000 4.17763 + 17.8355 -2.99861 0.00000 1.00000 2.99861 + 17.8540 -1.57655 0.00000 1.00000 1.57655 + 17.8725 -0.115674 0.00000 1.00000 0.115674 + 17.8910 1.18232 0.00000 1.00000 -1.18232 + 17.9095 2.16253 0.00000 1.00000 -2.16253 + 17.9280 2.74507 0.00000 1.00000 -2.74507 + 17.9465 2.93310 0.00000 1.00000 -2.93310 + 17.9650 2.80225 0.00000 1.00000 -2.80225 + 17.9835 2.47685 0.00000 1.00000 -2.47685 + 18.0020 2.09940 0.00000 1.00000 -2.09940 + 18.0205 1.79907 0.00000 1.00000 -1.79907 + 18.0390 1.66403 0.00000 1.00000 -1.66403 + 18.0575 1.72260 0.00000 1.00000 -1.72260 + 18.0760 1.93703 0.00000 1.00000 -1.93703 + 18.0945 2.21113 0.00000 1.00000 -2.21113 + 18.1130 2.40837 0.00000 1.00000 -2.40837 + 18.1315 2.37442 0.00000 1.00000 -2.37442 + 18.1500 1.95988 0.00000 1.00000 -1.95988 + 18.1685 1.04724 0.00000 1.00000 -1.04724 + 18.1870 -0.426523 0.00000 1.00000 0.426523 + 18.2055 -2.45315 0.00000 1.00000 2.45315 + 18.2240 -4.90773 0.00000 1.00000 4.90773 + 18.2425 -7.52944 0.00000 1.00000 7.52944 + 18.2610 -9.92715 0.00000 1.00000 9.92715 + 18.2795 -11.6174 0.00000 1.00000 11.6174 + 18.2980 -12.0956 0.00000 1.00000 12.0956 + 18.3165 -10.9327 0.00000 1.00000 10.9327 + 18.3350 -7.88331 0.00000 1.00000 7.88331 + 18.3535 -2.98071 0.00000 1.00000 2.98071 + 18.3720 3.40650 0.00000 1.00000 -3.40650 + 18.3905 10.5811 0.00000 1.00000 -10.5811 + 18.4090 17.5968 0.00000 1.00000 -17.5968 + 18.4275 23.4036 0.00000 1.00000 -23.4036 + 18.4460 27.0310 0.00000 1.00000 -27.0310 + 18.4645 27.7731 0.00000 1.00000 -27.7731 + 18.4830 25.3345 0.00000 1.00000 -25.3345 + 18.5015 19.9052 0.00000 1.00000 -19.9052 + 18.5200 12.1472 0.00000 1.00000 -12.1472 + 18.5385 3.09099 0.00000 1.00000 -3.09099 + 18.5570 -6.03798 0.00000 1.00000 6.03798 + 18.5755 -14.0281 0.00000 1.00000 14.0281 + 18.5940 -19.8843 0.00000 1.00000 19.8843 + 18.6125 -22.9844 0.00000 1.00000 22.9844 + 18.6310 -23.1597 0.00000 1.00000 23.1597 + 18.6495 -20.6881 0.00000 1.00000 20.6881 + 18.6680 -16.2075 0.00000 1.00000 16.2075 + 18.6865 -10.5714 0.00000 1.00000 10.5714 + 18.7050 -4.68098 0.00000 1.00000 4.68098 + 18.7235 0.671251 0.00000 1.00000 -0.671251 + 18.7420 4.91529 0.00000 1.00000 -4.91529 + 18.7605 7.75797 0.00000 1.00000 -7.75797 + 18.7790 9.17588 0.00000 1.00000 -9.17588 + 18.7975 9.35965 0.00000 1.00000 -9.35965 + 18.8160 8.63035 0.00000 1.00000 -8.63035 + 18.8345 7.35145 0.00000 1.00000 -7.35145 + 18.8530 5.85510 0.00000 1.00000 -5.85510 + 18.8715 4.39513 0.00000 1.00000 -4.39513 + 18.8900 3.13002 0.00000 1.00000 -3.13002 + 18.9085 2.13168 0.00000 1.00000 -2.13168 + 18.9270 1.40976 0.00000 1.00000 -1.40976 + 18.9455 0.939913 0.00000 1.00000 -0.939913 + 18.9640 0.686429 0.00000 1.00000 -0.686429 + 18.9825 0.614229 0.00000 1.00000 -0.614229 + 19.0010 0.690570 0.00000 1.00000 -0.690570 + 19.0195 0.880032 0.00000 1.00000 -0.880032 + 19.0380 1.13788 0.00000 1.00000 -1.13788 + 19.0565 1.40627 0.00000 1.00000 -1.40627 + 19.0750 1.61604 0.00000 1.00000 -1.61604 + 19.0935 1.69418 0.00000 1.00000 -1.69418 + 19.1120 1.57467 0.00000 1.00000 -1.57467 + 19.1305 1.20912 0.00000 1.00000 -1.20912 + 19.1490 0.574418 0.00000 1.00000 -0.574418 + 19.1675 -0.322868 0.00000 1.00000 0.322868 + 19.1860 -1.44364 0.00000 1.00000 1.44364 + 19.2045 -2.71278 0.00000 1.00000 2.71278 + 19.2230 -4.01492 0.00000 1.00000 4.01492 + 19.2415 -5.19189 0.00000 1.00000 5.19189 + 19.2600 -6.04623 0.00000 1.00000 6.04623 + 19.2785 -6.35560 0.00000 1.00000 6.35560 + 19.2970 -5.90135 0.00000 1.00000 5.90135 + 19.3155 -4.51168 0.00000 1.00000 4.51168 + 19.3340 -2.11474 0.00000 1.00000 2.11474 + 19.3525 1.20914 0.00000 1.00000 -1.20914 + 19.3710 5.19105 0.00000 1.00000 -5.19105 + 19.3895 9.36912 0.00000 1.00000 -9.36912 + 19.4080 13.1271 0.00000 1.00000 -13.1271 + 19.4265 15.7779 0.00000 1.00000 -15.7779 + 19.4450 16.6827 0.00000 1.00000 -16.6827 + 19.4635 15.3867 0.00000 1.00000 -15.3867 + 19.4820 11.7418 0.00000 1.00000 -11.7418 + 19.5005 5.98757 0.00000 1.00000 -5.98757 + 19.5190 -1.23710 0.00000 1.00000 1.23710 + 19.5375 -8.96359 0.00000 1.00000 8.96359 + 19.5560 -16.0382 0.00000 1.00000 16.0382 + 19.5745 -21.3164 0.00000 1.00000 21.3164 + 19.5930 -23.8699 0.00000 1.00000 23.8699 + 19.6115 -23.1644 0.00000 1.00000 23.1644 + 19.6300 -19.1740 0.00000 1.00000 19.1740 + 19.6485 -12.4057 0.00000 1.00000 12.4057 + 19.6670 -3.82669 0.00000 1.00000 3.82669 + 19.6855 5.29471 0.00000 1.00000 -5.29471 + 19.7040 13.6058 0.00000 1.00000 -13.6058 + 19.7225 19.9014 0.00000 1.00000 -19.9014 + 19.7410 23.3260 0.00000 1.00000 -23.3260 + 19.7595 23.5068 0.00000 1.00000 -23.5068 + 19.7780 20.5929 0.00000 1.00000 -20.5929 + 19.7965 15.1973 0.00000 1.00000 -15.1973 + 19.8150 8.25741 0.00000 1.00000 -8.25741 + 19.8335 0.846490 0.00000 1.00000 -0.846490 + 19.8520 -6.02165 0.00000 1.00000 6.02165 + 19.8705 -11.5565 0.00000 1.00000 11.5565 + 19.8890 -15.2939 0.00000 1.00000 15.2939 + 19.9075 -17.1257 0.00000 1.00000 17.1257 + 19.9260 -17.2573 0.00000 1.00000 17.2573 + 19.9445 -16.1119 0.00000 1.00000 16.1119 + 19.9630 -14.2055 0.00000 1.00000 14.2055 + 19.9815 -12.0275 0.00000 1.00000 12.0275 + 20.0000 -9.95383 0.00000 1.00000 9.95383 diff --git a/src/diffpy/pdffit2/tests/testdata/badNi.stru b/src/diffpy/pdffit2/tests/testdata/badNi.stru new file mode 100644 index 00000000..d0b980cb --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/badNi.stru @@ -0,0 +1,32 @@ +title structure Ni FCC +format pdffit +scale 1.000000 +sharp 0.000000, 1.000000, 0.000000 +spcgr Fm-3m +cell 3.520000, 3.520000, 3.520000, 90.000000, 90.000000, 90.000000 +dcell 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +ncell 1, 1, 1, 4 +atoms +NI 0.00000000 0.00000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.00000000 0.50000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.00000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.50000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 diff --git a/src/diffpy/pdffit2/tests/testdata/badNiZeroVolume.stru b/src/diffpy/pdffit2/tests/testdata/badNiZeroVolume.stru new file mode 100644 index 00000000..089db0da --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/badNiZeroVolume.stru @@ -0,0 +1,33 @@ +title structure Ni FCC +format pdffit +scale 1.000000 +sharp 0.000000, 1.000000, 0.000000 +spcgr Fm-3m +cell 3.520000, 3.520000, 3.520000, 90.000000, 90.000000, 0.000000 +dcell 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +ncell 1, 1, 1, 4 +atoms +NI 0.00000000 0.00000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.00000000 0.50000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.00000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.50000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 diff --git a/src/diffpy/pdffit2/tests/testdata/noLattice.stru b/src/diffpy/pdffit2/tests/testdata/noLattice.stru new file mode 100644 index 00000000..4f8e7212 --- /dev/null +++ b/src/diffpy/pdffit2/tests/testdata/noLattice.stru @@ -0,0 +1,32 @@ +title structure Ni FCC +format pdffit +scale 1.000000 +sharp 0.000000, 1.000000, 0.000000 +spcgr Fm-3m +cell 3.520000, 3.520000, -3.520000, 90.000000, 90.000000, 90.000000 +dcell 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +ncell 1, 1, 1, 4 +atoms +NI 0.00000000 0.00000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.50000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.00000000 0.50000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 +NI 0.50000000 0.50000000 0.00000000 1.0000 + 0.00000000 0.00000000 0.00000000 0.0000 + 0.00126651 0.00126651 0.00126651 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 diff --git a/src/diffpy/pdffit2/version.py b/src/diffpy/pdffit2/version.py new file mode 100644 index 00000000..69e4d1b2 --- /dev/null +++ b/src/diffpy/pdffit2/version.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2024 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge Group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors +# +# See LICENSE.rst for license information. +# +############################################################################## + +"""Definition of __version__.""" + +# We do not use the other three variables, but can be added back if needed. +# __all__ = ["__date__", "__git_commit__", "__timestamp__", "__version__"] + +# obtain version information +from importlib.metadata import version + +__version__ = version("diffpy.pdffit2") + +# End of file From af811e88935b07aa6574624e429e104cc14c8d4d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:52:36 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit hooks --- src/diffpy/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/diffpy/__init__.py b/src/diffpy/__init__.py index 71428827..5b3af482 100644 --- a/src/diffpy/__init__.py +++ b/src/diffpy/__init__.py @@ -21,4 +21,3 @@ __path__ = extend_path(__path__, __name__) # End of file -