diff --git a/.gitignore b/.gitignore
index 534d55e3..140c7ad8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
_build
*.bak
*~
+.DS_Store
+.idea
#eclipse
.project
diff --git a/README.md b/README.md
index 930f2425..f15d06d4 100644
--- a/README.md
+++ b/README.md
@@ -9,12 +9,11 @@ Sphinx sources for the [diffpy.org][site] web page.
- [Where to Make Changes](#where-to-make-changes)
- [Adding Citations](#adding-citations)
- [Adding Publications that Describe a DiffPy Project (the "Reference" Section)](#reference-section-1)
- - [Adding Other Publications (the "Publication Using DiffPy-CMI" Section)](#reference-section-2)
-- [Publishing New Version of Existing Project](#new-version)
-- [Publishing New Project](#publishing-new-project)
+ - [Adding Other Publications (the "Publication Using diffpy.cmi" Section)](#reference-section-2)
+- [New Version of Existing Project](#new-version)
+- [New Project](#publishing-new-project)
- [Publishing Changes](#publishing-changes)
- [Testing Changes](#testing-changes)
- - [Contributors (Submitting Changes)](#submitting-changes)
- [Maintainers (Publishing Changes)](#publishing-changes)
@@ -26,18 +25,69 @@ This repository contains 3 branches:
2. [`master`][master] sources compiled to HTML format that are published via GitHub pages
3. [`archive`][archive] converted subversion repository for the old diffpy.org sources
-Please, see the [Wiki](https://github.com/diffpy/diffpy.github.io/wiki) for more
-information and tips about this project.
+The basic logic is we edit on the source branch and follow instructions below to build the
+sources. The built sources, in the form of html files, are then copied to the master branch
+which is what GitHub pages is configured to render.
+
+# Publishing New Version of an Existing Project
+
+For releasing an updated version of a project, first generate the release for the project and
+make sure it is successfully deployed at Pypi and conda-forge.
+
+If you would like to see Connor's commented out comments about how to link pdf versions of
+documentation manuals please see the raw source code of this readme. However, we are moving
+away from having separately built manuals.
+
+
+With the [`source` branch][source] checed out, edit the landing page of your project] (e.g.,
+`products/pdfgetx.rst` for PDFgetx3) to document and provide the updated version of your project.
+
+Once the preceding steps are complete, see
+the instructions of the [Publishing Changes](#submitting-changes) section for publishing these changes.
# Where to Make Changes
-## Adding Citations
+Here is a brief map of where in the sources to make updates when different things happen
+
+## A new paper has appeared describing a diffpy product
### Adding Publications that Describe a DiffPy Project (the "Reference" Section)
-When adding a new publication to the list of [references used within the website](https://www.diffpy.org/publications.html), add the citation text of the publication to the documentation *only once* as a named snippet in [abbreviations.txt](https://github.com/diffpy/diffpy.github.io/blob/source/abbreviations.txt#L286). For example:
+When adding a new publication to the list of [references used within the website](https://www.diffpy.org/publications.html), add the
+citation text of the publication to the documentation *only once* as a named snippet in
+[abbreviations.txt](https://github.com/diffpy/diffpy.github.io/blob/source/abbreviations.txt#L286). For example:
```
.. |citeJuhasJac18| replace::
P. Juhás, J. N. Louwen, L. van Eijck, E. T. C. Vogt, S. J. L. Billinge,
@@ -47,100 +97,91 @@ When adding a new publication to the list of [references used within the website
*J. Appl. Crystallogr.*, **51**, 1492--1497 (2018)
|downloadJuhasJac18|
```
-Here, `|citeJuhasJac18|` is the name that can be used elsewhere in the documentation and the Sphinx documentation generator will replace all instances of this tag with the indented text following the `replace::` directive.
+Here, `|citeJuhasJac18|` is the name that can be used elsewhere in the documentation and
+the Sphinx documentation generator will replace all instances of this tag with the indented
+text following the `replace::` directive.
-**Important:** After defining the publication's tag as described above, make sure to add the publication to the list of publications maintained in [publications.rst](https://github.com/diffpy/diffpy.github.io/blob/source/publications.rst). Make sure that you add the reference to the proper section and do so in descending reverse chronological order (i.e., the newest citations should appear at the top of their respective sections).
+**Important:** After defining the publication's tag as described above, make sure to add the
+publication to the list of publications maintained in [publications.rst](https://github.com/diffpy/diffpy.github.io/blob/source/publications.rst). Make sure that
+you add the reference to the proper section and do so in descending reverse chronological order
+(i.e., the newest citations should appear at the top of their respective sections).
-*Note:* In this example, the citation is for a publication which describes a product of the DiffPy-CMI project (namely, PDFgetN3). For publications which describe a component of DiffPy-CMI, we provide a link to download the publication directly from the [diffpy.org][site] website. Here, the link is provided via the `|downloadJuhasJac18|` tag which is the identifier for another snippet within [abbreviations.txt](https://github.com/diffpy/diffpy.github.io/blob/source/abbreviations.txt#L294) following the definition of `|citeJuhasJac18|`, seen here as:
+*Note:* In this example, the citation is for a publication
+which describes a product of the diffpy.cmi project (namely, PDFgetN3). For publications which
+describe a component of diffpy.cmi, we provide a link to download the publication directly from
+the [diffpy.org][site] website. Here, the link is provided via the `|downloadJuhasJac18|` tag
+which is the identifier for another snippet within [abbreviations.txt](https://github.com/diffpy/diffpy.github.io/blob/source/abbreviations.txt#L294) following the definition
+of `|citeJuhasJac18|`, seen here as:
```
.. |downloadJuhasJac18| image:: /images/pdficon_small.png
:target: /doc/pdfgetx/Juhas-jac-2018.pdf
```
-Furthermore, note that since the initial use of `|downloadJuhasJac18|` occurs within the indented text of the definition of `|citeJuhasJac18|`, the link to `|downloadJuhasJac18|` will appear everywhere `|citeJuhasJac18|` does.
+Furthermore, note that since the initial use of `|downloadJuhasJac18|` occurs within the indented text
+of the definition of `|citeJuhasJac18|`, the link to `|downloadJuhasJac18|` will appear
+everywhere `|citeJuhasJac18|` does.
-Lastly, make sure that the linked publication has been included within this project's files, placed in an appropriate directory (typically, the parent directory of the project that the paper relates to). In the above example, the publication covers the PDFgetN3 feature of the `pdfgetx` package, thus it is placed within `pdfgetx`'s documentation directory and referenced accordingly with the line
+Lastly, make sure that the linked publication has been included within this project's files, placed in
+an appropriate directory (typically, the parent directory of the project that the paper relates to). In
+the above example, the publication covers the PDFgetN3 feature of the `pdfgetx` package, thus it is
+placed within `pdfgetx`'s documentation directory and referenced accordingly with the line
```
:target: /doc/pdfgetx/Juhas-jac-2018.pdf
```
-### Adding Other Publications (the "Publication Using DiffPy-CMI" Section)
-
-Adding references to publications that do not describe the release/use of a product within the DiffPy-CMI project (e.g., papers which use some component of DiffPy-CMI), we simply provide the usual citation text (with appropriate DOI link). To add a citation of this type, refer to the information in [Reference Section](#reference-section-1), but disregard everything starting at, and following, the [Note](#reference-section-note).
+### Adding Other Publications (the "Publication Using diffpy.cmi" Section)
-
-
-# Publishing New Version of Existing Project
-
-For releasing an updated version of a project, first follow the release procedure outlined in the [group wiki](https://gitlab.thebillingegroup.com/resources/group-wiki/-/wikis/Finalizing-a-Project's-(Re)-Release) for packaging and deploying your project.
-
-In what follows, [pdfgetx v2.1.1](https://github.com/diffpy/diffpy.pdfgetx/releases/tag/v2.1.1) was chosen to show example commands for the steps outlined.
-
-After following the steps necessary for releasing your project, grab the set of documentation that will be provided with the deliverable upon user's request (typically, this would be something like the files hosted by GitHub on the GitHub releases page). Create a new directory for the updated version's documentation to live in
-```
-diffpy.github.io (source)$ mkdir static_root/doc/pdfgetx/2.1.1
-```
-Copy the updated documentation to this directory
-```
-diffpy.github.io (source)$ tar --directory=static_root/doc/pdfgetx/2.1.1/ \
- --strip-components=4 \
- -vxzf ~/Downloads/diffpy.pdfgetx-2.1.1.tar.gz \
- diffpy.pdfgetx-2.1.1/doc/manual/_build/PDFgetXNS3_manual.pdf
-
-diffpy.github.io (source)$ tar --directory=static_root/doc/pdfgetx/2.1.1/ \
- --strip-components=5 \
- --exclude=objects.inv \
- --exclude=.buildinfo \
- -vxzf ~/Downloads/diffpy.pdfgetx-2.1.1.tar.gz \
- diffpy.pdfgetx-2.1.1/doc/manual/_build/html/
-
-diffpy.github.io (source)$ cp ~/Downloads/pdfgetxn3-examples.zip \
- static_root/doc/pdfgetx/2.1.1/
-```
-Make sure to include all relevant files (e.g., `PDFgetXNS3_manual.pdf` and `pdfgetxn3-examples.zip`), exclude any files we don't want to provide to the user (e.g., `objects.inv` and `.buildinfo` from `diffpy.pdfgetx-2.1.1.tar.gz`)
-
-Finally, edit the [landing page of your project](https://github.com/diffpy/diffpy.github.io/blob/source/products/pdfgetx.rst) (in the [`source` branch][source]) to properly document and provide the updated version of your project. Once the preceding steps are complete, see the instructions of the [Publishing Changes](#submitting-changes) section for publishing these changes.
+Adding references to publications that do not describe the release/use of a product within the diffpy.cmi
+project (e.g., papers which use some component of diffpy.cmi), we simply provide the usual citation text (with
+appropriate DOI link). To add a citation of this type, refer to the information in [Reference Section](#reference-section-1), but
+disregard everything starting at, and following, the [Note](#reference-section-note).
# Publishing New Project
-For adding a new project to the website, see one of the existing projects (e.g., [pdfgetx](https://www.diffpy.org/products/pdfgetx.html)) as reference.
+For adding a new project to the website, see one of the existing projects (e.g., [pdfgetx](https://www.diffpy.org/products/pdfgetx.html)) as a reference.
-You will need to create a directory for the project to live in within (e.g., [/static_root/doc/pdfgetx](https://github.com/diffpy/diffpy.github.io/tree/source/static_root/doc/pdfgetx)), then write a landing page for the project (e.g., [/products/pdfgetx.rst](https://github.com/diffpy/diffpy.github.io/blob/source/products/pdfgetx.rst)) which will provide any necessary information or files needed for a user to use the project. Once this is complete, see [Publishing New Version of Existing Project](#new-version) for steps on publishing the project.
+You will need to create a directory for the project to live in within (e.g., [/static_root/doc/pdfgetx](https://github.com/diffpy/diffpy.github.io/tree/source/static_root/doc/pdfgetx)), then
+write a landing page for the project (e.g., [/products/pdfgetx.rst](https://github.com/diffpy/diffpy.github.io/blob/source/products/pdfgetx.rst)) which will provide any necessary information
+or files needed for a user to use the project. Once this is complete, see
+[Publishing New Version of Existing Project](#new-version) for steps on publishing the project.
# Publishing Changes
-In order to test and/or publish changes, activate a conda environment that has a working installation of Sphinx (or make sure you have the necessary packages installed at a system level). If unsure how to achieve this, see the [Install Sphinx](https://gitlab.thebillingegroup.com/resources/group-wiki/-/wikis/Finalizing-a-Project's-(Re)-Release#install-sphinx) section of the projecct release wiki.
+In order to test and/or publish changes, activate a conda environment that has a working installation of Sphinx
## Testing Changes
-Make sure you have an active installation of Sphinx as per [Publishing Changes](#publishing-changes), run the set of Sphinx validation command(s) to check that the static files that Sphinx will create to be served on the website are written properly:
+With your sphinx containing env activated, run the set of Sphinx validation command(s) to check that the static
+files that Sphinx will create to be served on the website are written properly:
```
diffpy.github.io (source)$ make linkcheck SPHINXOPTS="-W"
```
-*NOTE:* the `"-W"` flag forces warnings to be treated as errors. If you believe there is a falsely reported warning that should be ignored that is preventing the test from passing, rerun the above command with the `SPHINXOPTS="-W"` portion omitted.
+*NOTE:* the `"-W"` flag forces warnings to be treated as errors. If you believe there is a falsely reported
+warning that should be ignored that is preventing the test from passing, rerun the above command with the
+`SPHINXOPTS="-W"` portion omitted. Note that on Windows this seemed to generate a number of warnings
+not seen on linux and which didn't indicate anything broken.
Additionally, one can visually/user-experience validate that the changes are what is expected by running:
```
diffpy.github.io (source)$ make html
```
-Then opening `/_build/html/index.html` which will open a local instance of the website with the proposed changes in place.
-
-
-## Contributors (Submitting Changes)
-
-In order to update the contents of [diffpy.org][site], create a new branch off of [`source`][source] in your local fork of this repo and make whatever changes you need to. Once the desired edits are complete, follow the steps outlined in [Testing Changes](#testing-changes) to verify the site won't break as a result of these changes. Finally, after verifying that the changes won't break things, push your changes to your fork and open a pull-request to submit the changes back into this repo.
+Then opening `/_build/html/index.html` which will open a local instance of the website with the proposed changes
+in place.
## Maintainers (Publishing Changes)
-First, follow the steps outlines in [Testing Changes](#testing-changes) to verify that the changes won't mess things up (too bad). Note that these tests, as they currently exist, are not extensive and it's quite possible that something indeed may appear incorrectly on the website (hence the manual review portion). After reviewing the changes, have Sphinx generate the static files to be hosted on the website:
+First, follow the steps outlines in [Testing Changes](#testing-changes). Note that these tests, as they currently exist, are
+not extensive and it's quite possible that something indeed may appear incorrectly on the website (hence the manual
+review portion). After reviewing the changes, have Sphinx generate the static files to be hosted on the website:
```
diffpy.github.io (source)$ make html
```
+Note: this could not be run by successfully by simon on Git Bash. It can presumably be run from WSL?
Prepare the changes to be published:
```
diffpy.github.io (source)$ make publish-prepare
diff --git a/_includes/substitutions.rst b/_includes/substitutions.rst
new file mode 100644
index 00000000..96287220
--- /dev/null
+++ b/_includes/substitutions.rst
@@ -0,0 +1,2 @@
+.. define global names and alias here
+.. |diffpycmi| replace:: diffpy.cmi
diff --git a/_templates/menu01.html b/_templates/menu01.html
index 6dc9147d..ebcb477b 100644
--- a/_templates/menu01.html
+++ b/_templates/menu01.html
@@ -7,13 +7,14 @@
diff --git a/abbreviations.txt b/abbreviations.txt
index 13453731..0cab1d73 100644
--- a/abbreviations.txt
+++ b/abbreviations.txt
@@ -66,7 +66,7 @@
.. |DiffPyCMI| replace::
- :doc:`DiffPy-CMI `
+ :doc:`diffpy.cmi `
.. |citeShiPRL14| replace:: Chenyang Shi, Majid Beidaghi, Michael
Naguib, Olha Mashtalir, Yury Gogotsi, and Simon J. L. Billinge,
diff --git a/acknowledgements.rst b/acknowledgements.rst
index eb0b3667..28b9336e 100644
--- a/acknowledgements.rst
+++ b/acknowledgements.rst
@@ -22,7 +22,7 @@ under contract DE-AC02-98CH10886. Previous funding for DiffPy was
provided by the Distributed Data Analysis of Neutron Scattering
Experiments (DANSE) project funded by the US National Science Foundation
under award DMR-0520547. More information on DANSE can be found
-at http://danse.us. The early developments of PDFfit2 were funded by
+`here `_. The early developments of PDFfit2 were funded by
NSF grant DMR-0304391 in the Billinge-group, and with support from
Michigan State University. Any opinions, findings, and conclusions or
recommendations expressed in this material are those of the author(s)
diff --git a/community.rst b/community.rst
index a1aed703..40db810d 100644
--- a/community.rst
+++ b/community.rst
@@ -2,33 +2,30 @@ Community
=========
To ensure a bright future for the DiffPy project it is essential to build a strong community
-of users and contributing developers. There are several Google groups for support and
-development of DiffPy and related applications.
+of users and contributing developers. News about updates and new releases will be made at the
+`diffpy-users `__ Google group,
+as well as it being a place to ask questions
+and find answers about using all diffpy programs.
+When you sign up,
+please leave a short message about why you are requesting to join as we have had spam accounts requesting access
+and so we want to know you are a legitimate user.
-- `diffpy-users `_ Help on usage of DiffPy-CMI,
- PDFgetX3, PDFgetN3, PDFgetS3,
- PDFgui, and other DiffPy components. This group is a knowledge base for PDFgui
- user tips, tricks and troubleshooting. Feel free to search for answers or ask your question here.
+.. raw:: html
- .. raw:: html
+
-
-
-- `diffpy-dev `_ For bug reports, feature requests, and discussions about development
- and changes of DiffPy-CMI, PDFgetX3, PDFgetN3, PDFgetS3,
- PDFgui, and other DiffPy components. Materials scientists, chemists
- physicists, engineers - please contribute by telling us your needs or sharing your suggestions here.
-
- .. raw:: html
-
-
You can also share your comments, suggestions, praise or complaints by sending email to
`Simon J. L. Billinge `_.
To report or browse bugs, please visit https://github.com/diffpy
and continue to the relevant project and its Issues.
+
+Support and Contribute
+========================
+We welcome and encourage contributions to the DiffPy project from all members of the community.
+If you would like to report a bug, request a feature, or contribute code, please visit the
+*Support and Contribute* section found in the README of each DiffPy project repository on GitHub.
+All GitHub repositories for DiffPy projects can be found at ``_.
\ No newline at end of file
diff --git a/conf.py b/conf.py
index 5685cf23..8d74899a 100644
--- a/conf.py
+++ b/conf.py
@@ -40,6 +40,11 @@
# The encoding of source files.
#source_encoding = 'utf-8-sig'
+# The reST default prolog, included at the beginning of every source file.
+rst_prolog = """
+.. include:: _includes/substitutions.rst
+"""
+
# The master toctree document.
master_doc = 'index'
diff --git a/images/diffpycmi_screenshot.png b/images/diffpycmi_screenshot.png
index b4919201..579cf113 100644
Binary files a/images/diffpycmi_screenshot.png and b/images/diffpycmi_screenshot.png differ
diff --git a/images/labpdfproc.png b/images/labpdfproc.png
new file mode 100644
index 00000000..63619f58
Binary files /dev/null and b/images/labpdfproc.png differ
diff --git a/images/morph.png b/images/morph.png
new file mode 100644
index 00000000..825ac9b4
Binary files /dev/null and b/images/morph.png differ
diff --git a/images/pdfmorph.png b/images/pdfmorph.png
new file mode 100644
index 00000000..aad99dd4
Binary files /dev/null and b/images/pdfmorph.png differ
diff --git a/images/pdfprimer.png b/images/pdfprimer.png
new file mode 100644
index 00000000..0833dc73
Binary files /dev/null and b/images/pdfprimer.png differ
diff --git a/index.rst b/index.rst
index 6cb5fff6..b91e6dbe 100644
--- a/index.rst
+++ b/index.rst
@@ -5,17 +5,6 @@
.. _home:
-.. raw:: html
-
-
- Please update your PDFgui to PDFgui v2.0, the first Python 3 version of the software (May 10, 2023)
-
-
- Get PDFgui v2.0
-
- Credits
-
-
DiffPy - Atomic Structure Analysis in Python
============================================
@@ -30,22 +19,19 @@ diffraction analysis and the study of the atomic structure of materials.
.. include:: abbreviations.txt
-DiffPy is the home of the |DiffPyCMI|
-Complex Modeling framework, a modular software framework for robust and extensible
-modeling of diffraction data. We welcome contributions to this project from the
-community.
-The project is currently centered at `Brookhaven National Laboratory`_, a US `Department of
-Energy, Office of Basic Energy Sciences`_ funded laboratory.
+The project is currently maintained by the Billinge Group and DiffPy community members.
+
Many parts of the code were developed under the diffraction part of the DANSE_ project,
a software construction project funded by the `National Science Foundation`_ to provide
-data analysis software tools for neutron scattering experiments. This project was previously
-centered at Columbia University and, before that, Michigan State University.
+data analysis software tools for neutron scattering experiments. The DiffPy project has
+been a collaborative effort, centered in many institutions, including Brookhaven National
+Laboratory, Columbia University, and Michigan State University.
-.. _danse: http://danse.us/
+.. _danse: https://www.its.caltech.edu/~matsci/btf/DANSE_web_page.html
.. _national science foundation: https://www.nsf.gov/
@@ -53,17 +39,30 @@ centered at Columbia University and, before that, Michigan State University.
.. _brookhaven national laboratory: https://www.bnl.gov/
-.. image:: images/blank1x1.png
- :align: left
- :height: 10
-
-.. figure:: logos/BNL_logo.jpg
- :align: left
- :target: `Brookhaven National Laboratory`_
+About DiffPy
+----------------
-.. figure:: logos/DOE_logo.png
+.. image:: images/pdfprimer.png
:align: right
- :target: `Department of Energy, Office of Basic Energy Sciences`_
+ :width: 200
+
+
+DiffPy is the home of a number of software products for atomic structure
+analysis. A large portion of the DiffPy project consists of tools for atomic pair
+distribution function (PDF) analysis. For detailed instructions
+and in-depth examples of modeling Pair Distribution Function data, we highly recommend the book,
+
+
+*Atomic Pair Distribution Function Analysis: A Primer* by Simon J. L. Billinge and Kirsten M. Ø. Jensen (Oxford University Press, 2023).
+
+
+To purchase this book, please visit `this link `_.
+
+The DiffPy project is also home to many other software tools for analysis of scientific data.
+One of which is diffpy.cmi, a general-purpose
+complex modeling infrastructure for analysis of *any* type of data.
+For more information about diffpy.cmi, please visit the
+`diffpy.cmi documentation `_.
.. toctree::
:hidden:
@@ -86,3 +85,4 @@ centered at Columbia University and, before that, Michigan State University.
products/SrMise
products/mPDF
products/xinterpdf
+ products/utils
\ No newline at end of file
diff --git a/logos/CMI-logo.png b/logos/CMI-logo.png
index af32c70a..12a98cb2 100644
Binary files a/logos/CMI-logo.png and b/logos/CMI-logo.png differ
diff --git a/products/Utils_LICENSE.txt b/products/Utils_LICENSE.txt
new file mode 100644
index 00000000..1a431d59
--- /dev/null
+++ b/products/Utils_LICENSE.txt
@@ -0,0 +1,121 @@
+OPEN SOURCE LICENSE AGREEMENT
+=============================
+
+Copyright (c) 1989, 1991 Free Software Foundation, Inc.
+Copyright (c) 2006, The Regents of the University of California through Lawrence Berkeley National Laboratory
+Copyright (c) 2006-2007, Board of Trustees of Michigan State University
+Copyright (c) 2008-2012, The Trustees of Columbia University in the City of New York
+Copyright (c) 2009-2011, University of Tennessee
+Copyright (c) 2014, Australian Synchrotron Research Program Inc., ("ASRP")
+Copyright (c) 2014-2019, Brookhaven Science Associates, Brookhaven National Laboratory
+Copyright (c) 2019-2024, The Trustees of Columbia University in the City of New York.
+All rights reserved.
+
+The "DiffPy-CMI" is distributed subject to the following license conditions:
+
+SOFTWARE LICENSE AGREEMENT
+
+Software: DiffPy-CMI
+
+(1) The "Software", below, refers to the aforementioned DiffPy-CMI (in either
+source code, or binary form and accompanying documentation).
+
+Part of the software was derived from the DANSE, ObjCryst++ (with permission),
+PyCifRW, Python periodictable, CCTBX, and SasView open source projects, of
+which the original Copyrights are contained in each individual file.
+
+Each licensee is addressed as "you" or "Licensee."
+
+(2) The copyright holders shown above and their third-party Licensors hereby
+grant licensee a royalty-free nonexclusive license, subject to the limitations
+stated herein and U.S. Government license rights.
+
+(3) You may modify and make a copy or copies of the software for use within
+your organization, if you meet the following conditions:
+
+ (a) Copies in source code must include the copyright notice and this
+ software license agreement.
+
+ (b) Copies in binary form must include the copyright notice and this
+ Software License Agreement in the documentation and/or other materials
+ provided with the copy.
+
+(4) You may modify a copy or copies of the Software or any portion of it, thus
+forming a work based on the Software, and distribute copies of such work
+outside your organization, if you meet all of the following conditions:
+
+ (a) Copies in source code must include the copyright notice and this
+ Software License Agreement;
+
+ (b) Copies in binary form must include the copyright notice and this
+ Software License Agreement in the documentation and/or other materials
+ provided with the copy;
+
+ (c) Modified copies and works based on the Software must carry prominent
+ notices stating that you changed specified portions of the Software;
+
+ (d) Neither the name of Brookhaven Science Associates or Brookhaven
+ National Laboratory nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ written permission.
+
+(5) Portions of the Software resulted from work developed under a U.S.
+Government contract and are subject to the following license:
+The Government is granted for itself and others acting on its behalf a
+paid-up, nonexclusive, irrevocable worldwide license in this computer software
+to reproduce, prepare derivative works, and perform publicly and display
+publicly.
+
+(6) WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT
+WARRANTY OF ANY KIND. THE COPYRIGHT HOLDERS, THEIR THIRD PARTY
+LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
+THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL
+LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF
+THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF THE SOFTWARE WOULD NOT INFRINGE
+PRIVATELY OWNED RIGHTS, (4) DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
+UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL BE CORRECTED.
+
+(7) LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT HOLDERS, THEIR
+THIRD PARTY LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
+ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT, INCIDENTAL,
+CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF ANY KIND OR NATURE, INCLUDING
+BUT NOT LIMITED TO LOSS OF PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER,
+WHETHER SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT (INCLUDING
+NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE, EVEN IF ANY OF SAID PARTIES HAS
+BEEN WARNED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGES.
+
+Brookhaven National Laboratory Notice
+=====================================
+
+Acknowledgment of sponsorship
+-----------------------------
+
+This software was produced by the Brookhaven National Laboratory, under
+Contract DE-AC02-98CH10886 with the Department of Energy.
+
+Government disclaimer of liability
+----------------------------------
+
+Neither the United States nor the United States Department of Energy, nor
+any of their employees, makes any warranty, express or implied, or assumes
+any legal liability or responsibility for the accuracy, completeness, or
+usefulness of any data, apparatus, product, or process disclosed, or
+represents that its use would not infringe privately owned rights.
+
+Brookhaven disclaimer of liability
+----------------------------------
+
+Brookhaven National Laboratory makes no representations or warranties,
+express or implied, nor assumes any liability for the use of this software.
+
+Maintenance of notice
+---------------------
+
+In the interest of clarity regarding the origin and status of this
+software, Brookhaven National Laboratory requests that any recipient of it
+maintain this notice affixed to any distribution by the recipient that
+contains a copy or derivative of this software.
+
+END OF LICENSE
diff --git a/products/Utilslicense.rst b/products/Utilslicense.rst
new file mode 100644
index 00000000..034894ac
--- /dev/null
+++ b/products/Utilslicense.rst
@@ -0,0 +1,6 @@
+.. this page only contains the LICENSE text for Utils
+
+.. title:: Utils License
+
+.. literalinclude:: Utils_LICENSE.txt
+ :language: text
diff --git a/products/diffpycmi/LICENSE.txt b/products/diffpycmi/LICENSE.txt
index f6d92af7..f761aa49 100644
--- a/products/diffpycmi/LICENSE.txt
+++ b/products/diffpycmi/LICENSE.txt
@@ -14,15 +14,15 @@ Copyright (c) 2014-2019, Brookhaven Science Associates, Brookhaven National
Laboratory
-The "DiffPy-CMI" is distributed subject to the following license conditions:
+The "diffpy.cmi" is distributed subject to the following license conditions:
SOFTWARE LICENSE AGREEMENT
- Software: DiffPy-CMI
+ Software: diffpy.cmi
-(1) The "Software", below, refers to the aforementioned DiffPy-CMI (in either
+(1) The "Software", below, refers to the aforementioned diffpy.cmi (in either
source code, or binary form and accompanying documentation).
Part of the software was derived from the DANSE, ObjCryst++ (with permission),
diff --git a/products/diffpycmi/cmi_exchange.rst b/products/diffpycmi/cmi_exchange.rst
deleted file mode 100644
index e98a29be..00000000
--- a/products/diffpycmi/cmi_exchange.rst
+++ /dev/null
@@ -1,76 +0,0 @@
-CMI Exchange
-=============
-
-The `CMI Exchange`_ is a collection of community developed scripts,
-functions, and IPython plugins that make use of the DiffPy-CMI
-framework. If you are new to DiffPy-CMI it is a great place to get
-started. If you've been working with DiffPy-CMI for a while and feel
-that others would benefit from seeing your code please contribute!
-
-.. _cmi exchange: https://github.com/diffpy/cmi_exchange#cmi-exchange
-
-.. _new_users:
-
-For New Users
--------------
-
-Begin by visiting the `CMI Exchange on github
-`_. As with all
-github projects you will see the following two buttons in the sidebar
-allowing you to clone the project in your desktop or download a zip
-file:
-
-.. image:: ../../images/github_screenshot.png
-
-For now simply follow the download zip link to get the entire project
-and unpack the zip file to a convenient location on your machine. If
-you have correctly installed the |DiffPyCMI| package you
-can start running the scripts right away. Just follow the instructions
-in `New User Tips
-`_.
-
-You'll notice that there are two directories: ``cmi_plugins`` and
-``cmi_scripts``. The scripts are standalone python scripts that can be
-run directly from the `IPython`_ command line, whereas the plugins are a
-set of functions and `IPython extensions`_
-that provide additional functionality to your IPython session.
-
-Scripts
-^^^^^^^
-
-To run a script, simply navigate to the directory containing the .py
-file and type::
-
- $ ipython --pylab
- In [1]: %run script_name.py
-
-Extensions
-^^^^^^^^^^
-
-`IPython extensions`_ are importable IPython modules that can modifpy
-the behavior of the shell to add functionality. They are installed and
-activated from the IPython command line by running::
-
- In [1]: %install_ext name_of_extension.py
- In [2]: %load_ext name_of_extenstion
-
-
-.. _ipython: http://ipython.org/
-
-.. _ipython extensions: http://ipython.org/ipython-doc/rel-0.12.1/config/extensions/index.html
-
-
-.. _contribute_scripts:
-
-Contribute Scripts
-------------------
-
-To contribute your own script to the CMI Exchange you must first fork
-the project on github. Once you've added your own code you can issue a
-pull request.
-
-If you're new to git and don't know what it means to fork a project
-`begin here `_.
-
-
-.. include:: ../../abbreviations.txt
diff --git a/products/diffpycmi/contents.rst b/products/diffpycmi/contents.rst
deleted file mode 100644
index 89fd1348..00000000
--- a/products/diffpycmi/contents.rst
+++ /dev/null
@@ -1,92 +0,0 @@
-.. _contents:
-
-DiffPy-CMI Contents
-===================
-
-The DiffPy-CMI release includes Python and C++ libraries developed by
-the DiffPy team as well as external libraries necessary for functionality.
-
-Libraries developed by the DiffPy team
---------------------------------------
-
-.. list-table::
- :widths: 10, 5, 30
- :header-rows: 1
-
- * - Library
- -
- - Description
-
- * - `diffpy.srfit`_
- - |doc-diffpy.srfit|_
- - Setup and control of general fitting problems.
-
- * - `diffpy.srreal`_
- - |doc-diffpy.srreal|_
- - Python library for calculation of pair based quantities such as
- the pair distribution function (PDF), bond lengths, and bond
- valence sums.
-
- * - `diffpy.structure`_
- - |doc-diffpy.structure|_
- - Light-weigth storage of crystal structure data.
-
- * - `diffpy.utils`_
- - |doc-diffpy.utils|_
- - General purpose utilities for the diffpy libraries.
-
- * - `pyobjcryst`_
- - |doc-pyobjcryst|_
- - Python bindings to the ObjCryst++ crystallographic library.
-
- * - `libdiffpy`_
- - |doc-libdiffpy|_
- - C++ library for calculation of PDF and other real-space
- quantities.
-
-
-
-External libraries
-------------------
-
-.. list-table::
- :widths: 10, 5, 30
- :header-rows: 1
-
- * - Library
- -
- - Description
-
- * - srfit-sasview_
- - `doc `__
- - Selected modules from SasView_, the Small
- Angle Scattering Analysis Software Package.
-
- * - `periodictable`_
- - `doc `__
- - Extensible periodic table of the elements with support for mass,
- density, and X-ray/neutron scattering information.
-
- * - `libobjcryst`_
- - `doc `__
- - ObjCryst++, crystallographic library for C++ re-packaged for
- installation as a shared library.
-
- * - `cxxtest`_
- - `doc `__
- - Testing framework for C++.
-
-.. URL definitions below -----------------------------------------------
-
-.. |doc-diffpy.srfit| replace:: doc
-.. |doc-diffpy.srreal| replace:: doc
-.. |doc-diffpy.structure| replace:: doc
-.. |doc-diffpy.utils| replace:: doc
-.. |doc-pyobjcryst| replace:: doc
-.. |doc-libdiffpy| replace:: doc
-
-.. _cxxtest: http://cxxtest.com/
-.. _periodictable: http://www.reflectometry.org/danse/elements.html
-.. _SasView: https://www.sasview.org
-
-.. include:: ../../abbreviations.txt
diff --git a/products/diffpycmi/contributecode.rst b/products/diffpycmi/contributecode.rst
deleted file mode 100644
index 7de2c19d..00000000
--- a/products/diffpycmi/contributecode.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-How to Contribute Code
-======================
-
-The DiffPy-CMI bundle consists of the following projects, all hosted on
-github. To contribute code simply fork the project you'd like to work
-on and issue a pull request.
-
-====================== ============================================
-Module Description
-====================== ============================================
-`diffpy.srfit`_ Setup and control of general fitting
- problems.
-
-`diffpy.srreal`_ Python library for calculation of pair based
- quantities such as the pair distribution
- function (PDF), bond lengths, and bond
- valence sums.
-
-`diffpy.structure`_ Handles storage of crystal structure data.
-
-`diffpy.utils`_ General purpose shared utilities for the
- diffpy libraries.
-
-`pyobjcryst`_ Python bindings to the ObjCryst++
- Object-Oriented Crystallographic
- Library.
-
-`libdiffpy`_ C++ library for calculation of PDF and
- other real-space quantities.
-
-`libobjcryst`_ ObjCryst++ re-packaged for installation
- as a shared library
-====================== ============================================
-
-.. URL definitions below -----------------------------------------------
-
-.. include:: ../../abbreviations.txt
diff --git a/products/diffpycmi/index.rst b/products/diffpycmi/index.rst
index 4134436a..70f49f50 100644
--- a/products/diffpycmi/index.rst
+++ b/products/diffpycmi/index.rst
@@ -1,26 +1,19 @@
##########
-DiffPy-CMI
+|diffpycmi|
##########
-DiffPy-CMI is our complex modeling framework. It is a highly flexible
-library of Python modules for robust modeling of nanostructures in
-crystals, nanomaterials, and amorphous materials.
-
-The software provides functionality for storage and manipulation of
-structure data and calculation of structure-based quantities, such as
-PDF, SAS, bond valence sums, atom overlaps, bond lengths, and
-coordinations. Most importantly the DiffPy-CMI package contains a
-fitting framework for combining multiple experimental inputs in a single
-optimization problem.
-
-This is an early release of code that is under intense development, with
-support for installation on Unix, Linux, and Macintosh machines. The
-scope and documentation of the project will evolve rapidly, but we want
-to make the code available at the earliest possible date. Please make
-use of the software and provide feedback and suggestions for
-improvement, but please be patient and check back frequently for
-updates.
+Diffpy.cmi is designed as an extensible complex modeling infrastructure.
+Users and developers can readily integrate novel data types and constraints
+into custom workflows. While widely used for advanced analysis of structural
+data, the framework is general and can be applied to any problem where model
+parameters are refined to fit calculated quantities to data.
+Diffpy.cmi is a community-driven project that supports Unix, Linux, macOS,
+and Windows platforms. It is designed to be used in Python scripts enabling
+flexible scripting and automation for advanced and reproducible workflows.
+Users are encouraged to leverage the software for their modeling needs and
+to contribute feedback, use cases, and extensions through the project
+community.
.. figure:: ../../images/diffpycmi_screenshot.png
@@ -30,87 +23,52 @@ updates.
Installation
============
+For the most up-to-date installation instructions, please refer to the installation section of the
+`diffpy.cmi README page on GitHub `_.
-Use of this software is subject to the conditions in
-software :doc:`LICENSE `.
-
-As of version 3.0 DiffPy-CMI is available for Linux and
-Mac as a collection of packages for Anaconda Python. As
-a first step download and install **Anaconda for Python 3.7**
-from |anaconda-download|.
-
-.. note::
- DiffPy-CMI is available from the "diffpy" channel of Anaconda packages. It requires Python 3.5 or later or 2.7. It is recommended to install it in a separate Anaconda environment, for example *py37* or other preferred python versions.
- Make sure that *py37* environment is activated when working with DiffPy-CMI. ::
-
- conda create --name=py37 python=3.7
- conda activate py37
-
-Once Anaconda is ready, DiffPy-CMI can be installed from the "diffpy"
-channel of Anaconda packages as follows ::
-
- conda config --add channels diffpy
- conda install diffpy-cmi
-
-The software distribution over Anaconda makes it easy to publish
-frequent software updates. To update your installation later use ::
+Pack and Profile Installation
+=============================
- conda update diffpy-cmi
+Diffpy.cmi is designed to be modular and extensible through the use of optional
+dependencies known as `packs`. Additionally, users can define custom workflows
+that combine multiple packs with optional post-installation steps, known as `profiles`.
-If you don't want to use Anaconda you can
-:doc:`install DiffPy-CMI from sources `. Note that
-this method takes more time and requires more experience
-with the operating system.
+For more information on packs and profiles please refer to the
+`diffpy.cmi overview page `_.
-
-What next?
-==========
-
-* `Explore CMI exchange
- `__,
- our collection of example scripts and tutorials
-
-* :doc:`Get tips on using the CMI exchange `
-
-* :doc:`Contribute code `
+For information how to install packs and profiles, please refer to the
+`diffpy.cmi command-line interface page `_.
Tutorials
=========
-* ADD2019_ school and conference --
- https://github.com/diffpy/add2019-diffpy-cmi
+Many examples exist for diffpy.cmi. Using the command-line interface (CLI), these
+examples can be copied directly to your computer.
+For information on how to use the command-line interface to access the examples,
+please refer to the
+`diffpy.cmi CLI documentation `_.
+Additionally, here are some direct links to other tutorials and examples,
-.. _ADD2019: https://workshops.ill.fr/event/133/page/32-home
+* A step-by-step tutorial on using diffpy.cmi to `fit a nickel PDF `_.
+* Examples and experimental data from the book *Atomic Pair Distribution Function Analysis: A Primer* are freely available at our
+ `GitHub repository `_.
+
+* Worked examples from ADD2019 school and conference --
+ https://github.com/diffpy/add2019-diffpy-cmi.
Documentation
=============
-Documentation for packages developed by the DiffPy team is available
-at the links below.
-
-* |doc-diffpy.srfit|_ -- configuration and control of data-fitting problems
-* |doc-diffpy.srreal|_ -- calculators for pair distribution function, bond
- valence sums, etc.
-* |doc-diffpy.structure|_ -- light-weight representation of crystal
- structures
-* |doc-pyobjcryst|_ -- Python interface to ObjCryst++ crystallographic
- library
-* |doc-diffpy.utils|_ -- general purpose utilities for the diffpy libraries
-* |doc-libdiffpy|_ -- C++ library for calculation of PDF and other real-space
- quantities
-
-See :ref:`DiffPy-CMI contents ` for a complete list
-of open-source libraries that are included in DiffPy-CMI and
-their respective project pages.
+Documentation for diffpy.cmi is available at https://www.diffpy.org/diffpy.cmi.
Reference
=========
If you use this software in a research work which leads to publication,
-we ask you to acknowledge the use of DiffPy-CMI by citing the following
+we ask you to acknowledge the use of diffpy.cmi by citing the following
paper:
* |citeJuhasAca15|
diff --git a/products/diffpycmi/install.rst b/products/diffpycmi/install.rst
deleted file mode 100644
index 274602b0..00000000
--- a/products/diffpycmi/install.rst
+++ /dev/null
@@ -1,188 +0,0 @@
-.. highlight:: bash
-
-DiffPy-CMI installation from sources
-====================================
-
-Downloaded the most recent `DiffPy-CMI tarball
-`__
-and follow the steps below.
-
-1 Install system software
-------------------------------------------------------------------------
-
-DiffPy-CMI requires the :ref:`system software dependencies `
-which can be installed from command line using a suitable package manager.
-Here are installation commands for several supported systems.
-
-Ubuntu
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-For Ubuntu or other Debian-based Linux distributions use ``apt-get``::
-
- sudo apt-get install \
- libgsl0-dev libboost-all-dev python-dev \
- python-setuptools python-numpy python-scipy \
- python-matplotlib python-lxml ipython \
- build-essential scons git zsh
-
-Fedora
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Use ``yum`` for Fedora or RedHat Linux::
-
- sudo yum install \
- gsl-devel boost-devel python-devel \
- python-setuptools numpy scipy \
- python-matplotlib python-lxml \
- python-ipython-notebook \
- gcc-c++ scons git zsh
-
-Mac OS X
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-For Mac OS X the system dependencies can be installed using the
-`MacPorts `_ software manager. A similar
-package system `Homebrew `_ works as well, but has
-been considerably less tested with DiffPy-CMI.
-
-For best results with MacPorts follow these tips:
-
-* We recommend to upgrade to the `latest version of OS X
- `_.
-* Install `Xcode `_.
- If already present, we recommend to upgrade to the latest version.
-* Be patient, it may take several hours to install all the dependencies
- using MacPorts.
-* Installation command may fail on the first run, but usually works
- when repeated. See MacPorts
- `FAQ `_
- for more help.
-
-To install system dependencies with MacPorts, use::
-
- sudo port install \
- python27 py27-setuptools py27-ipython py27-lxml \
- gsl boost py27-numpy py27-scipy py27-matplotlib scons git
-
-Make sure the MacPorts versions of IPython and Python are active by
-running the following commands::
-
- sudo port select --set ipython ipython27
- sudo port select --set python python27
-
-
-**Important:** When finished installing the Mac OS X dependencies, adjust
-the shell environment so that MacPorts Python is the first in the
-PATH. This can be accomplished by adding the following line to either
-of ``.profile`` or ``.zshenv`` file in your HOME directory ::
-
- export PATH="/opt/local/bin:$PATH"
-
-
-2 Install DiffPy-CMI
-------------------------------------------------------------------------
-
-Unzip the DiffPy-CMI tarball into a directory of your choice.
-Execute the included :file:`install` script and follow the prompts. ::
-
- # replace VERSION to match the actual filename
- tar xzf diffpy_cmi-VERSION.tar.gz
- cd diffpy_cmi-VERSION
- ./install
-
-The install process may take a while and produce a plentiful output,
-but should work if all required software is in place.
-
-
-3 Test
-------------------------------------------------------------------------
-
-Execute the included test script, which should report no warnings
-nor errors::
-
- ./runtests.sh
-
-If there are failures they are most likely due to missing software or
-incorrect versions of Python or other libraries being used together.
-After addressing these issues it may be necessary to recompile the
-sources by running ``./install --build``.
-
-
-Remarks
-------------------------------------------------------------------------
-
-The expanded diffpy_cmi directory can be renamed or moved
-to a different location and the software should still work.
-The only requirement is to update the :file:`diffpy_cmi.pth`
-symbolic link so it points to the new location. This can be
-done by running the ``./install`` script again or by following
-the steps below.
-
-The Python interpreter must have a symbolic link pointing to the
-:file:`diffpy_cmi.pth` file in one of the directories where it
-looks for :file:`.pth` files. This is normally set up by the
-install script. If that process somehow fails, the preferred
-:file:`pth` directory for a single-user installation can be
-found using ::
-
- python -c 'import site; print site.USER_SITE'
-
-For a system-wide installation the standard :file:`pth` locations are ::
-
- python -c 'import site; print site.getsitepackages()'
-
-Once the :file:`pth` directory has been established, navigate to
-the base diffpy_cmi directory and create the symbolic link with ::
-
- ln -si $PWD/diffpy_cmi.pth /path/to/the/pth/directory/
-
-.. note::
-
- It is essential to use a symbolic link. Making a copy of the
- :file:`diffpy_cmi.pth` file will not work.
-
-.. note::
-
- The installation of DiffPy-CMI is entirely contained under the
- expanded diffpy_cmi directory. The software can be completely
- uninstalled by deleting that directory and removing the symbolic
- link.
-
-Contacts
-------------------------------------------------------------------------
-
-If you need help with installing this software, please check discussions
-or post your question to the
-`diffpy-dev `_
-group.
-
-----
-
-.. _dependencies:
-
-List of software dependencies
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-* **gsl** - GNU Scientific Library is collection of routines for numerical analysis.
-
-* **boost** - a set of useful C++ libraries.
-
-* **python-dev** - development tools for Python modules.
-
-* **python-setuptools** - enhancements to the Python distutils.
-
-* **numpy** - general-purpose array-processing for large multi-dimensional arrays in Python.
-
-* **scipy** - the fundamental library for scientific computing with Python.
-
-* **matplotlib** - a Python 2D plotting library.
-
-* **python-lxml** - a Python library for processing XML.
-
-* **ipython** - an enhanced interactive Python shell.
-
-* **scons** - a software build tool.
-
-* **git** - a version control system.
-
-* **zsh** - an interactive shell and powerful scripting language.
diff --git a/products/diffpycmi/license.rst b/products/diffpycmi/license.rst
index 945aabf0..18fed07e 100644
--- a/products/diffpycmi/license.rst
+++ b/products/diffpycmi/license.rst
@@ -1,6 +1,6 @@
-.. this page only contains the LICENSE text for DiffPy-CMI
+.. this page only contains the LICENSE text for |diffpycmi|
-.. title:: DiffPy-CMI License
+.. title:: |diffpycmi| License
.. literalinclude:: LICENSE.txt
:language: text
diff --git a/products/diffpycmi/updatesources.rst b/products/diffpycmi/updatesources.rst
index 5db8ccdf..635a4a19 100644
--- a/products/diffpycmi/updatesources.rst
+++ b/products/diffpycmi/updatesources.rst
@@ -48,4 +48,4 @@ cases, you could use option -n to display the build steps.
other than system Python (e.g. the Enthought Python Distribution) it
may be incompatible with the system boost library and the build may
fail. To resolve the problem, you should rebuild the boost library
- against Enthought Python and then rebuild all DiffPy-CMI modules.
+ against Enthought Python and then rebuild all diffpy.cmi modules.
diff --git a/products/labpdfproc.rst b/products/labpdfproc.rst
new file mode 100644
index 00000000..93735733
--- /dev/null
+++ b/products/labpdfproc.rst
@@ -0,0 +1,47 @@
+######################
+diffpy.labpdfproc
+######################
+
+
+Tools for processing x-ray powder diffraction data from laboratory
+sources.
+
+PDFgetX3 has revolutionized how pair distribution function (PDF) methods
+can be applied to solve
+nanostructure problems. However, the program was designed for use with
+Rapid Acquisition PDF (RAPDF) data from synchrotron sources. A key
+approximation inherent in the use of PDFgetX3 for RAPDF data is that
+absorption effects are negligible. This is typically not the case for
+laboratory x-ray diffractometers, where absorption effects can be
+significant.
+
+This app is designed to preprocess data from laboratory x-ray
+diffractometers before using PDFgetX3 to obtain PDFs. The app currently
+carries out an absorption correction assuming a parallel beam capillary
+geometry which is the most common geometry for lab PDF measurements.
+
+.. figure:: ../images/labpdfproc.png
+ :align: center
+
+Installation
+============
+
+For the most up-to-date installation instructions, please refer to the installation section of the
+`diffpy.labpdfproc README page on GitHub `_.
+
+Running labpdfproc
+======================
+
+To run diffpy.labpdfproc after installation, type the command::
+
+ labpdfproc
+
+Tutorials
+=========
+Tutorials on how to use diffpy.labpdfproc can be found
+at the `diffpy.labpdfproc documentation `_.
+
+Documentation
+=============
+
+Documentation for diffpy.labpdfproc is available at https://www.diffpy.org/diffpy.labpdfproc.
\ No newline at end of file
diff --git a/products/mPDF.rst b/products/mPDF.rst
index 2187bb02..1200206a 100644
--- a/products/mPDF.rst
+++ b/products/mPDF.rst
@@ -1,6 +1,6 @@
-##########
-mpdf
-##########
+#############
+diffpy.mpdf
+#############
.. include:: ../abbreviations.txt
@@ -20,85 +20,32 @@ as lists of spin positions and spin vectors provided by the user.
.. figure:: ../images/mpdf_screenshot.png
:align: center
-This is an early release of mpdf, and the capabilities and documentation of the
-project will evolve. The DiffPy team encourages investigators to provide feedback,
-suggestions, and feature requests.
+ Example usage of diffpy.mpdf
-Getting Started
-=================
+Reference
+=========
-The diffpy.mpdf package requires Python 2.6 or 2.7 and the following software:
+If you use diffpy.mpdf in scientific research, please acknowledge it by citing:
-* ``NumPy`` - numerical mathematics and fast array operations for Python
-* ``SciPy`` - scientific libraries for Python
-* ``matplotlib`` - python plotting library
-* ``diffpy.structure`` - diffpy package for generating atomic structure
-* ``diffpy.srreal`` - diffpy package for calculating real-space quantities
-
-See the :doc:`mpdf license ` for terms and conditions of use.
+ Frandsen et al., "diffpy.mpdf: open-source software for magnetic pair distribution function analysis",
+ J. Appl. Cryst. (2022) 55, 1377-1382. https://doi.org/10.1107/S1600576722007257
Installation
-------------
-
-The recommended way to install this package is through conda. For help installing conda,
-please visit |anaconda-download|.
-Once conda is installed, you can follow the simple steps below to install diffpy.mpdf.
-You will also install the full diffpy-cmi suite along the way.
-
-*Step 1: Add the appropriate conda channels to your conda configuration.* ::
-
- conda config --add channels diffpy
- conda config --add channels benfrandsen
-
-These commands tell conda to look through these channels on the Anaconda cloud server to
-find the appropriate software.
-
-*Step 2 (recommended): Create and activate a conda environment for diffpy + diffpy.mpdf.* ::
-
- conda create --name diffpy python=2.7
- source activate diffpy
-
-Note that you can name the environment anything you choose by passing it a different name
-after the --name flag in the first command.
-
-*Step 3: Install diffpy.mpdf.* ::
-
- conda install diffpy.mpdf
-
-Note that this will also install the full diffpy-cmi suite if it has not already been
-installed in this environment.
-
-*Alternative option: Install from the python package index.*
-
-If you prefer to use the python package index and have pip installed, please install the
-prerequisite software and then use the command ::
-
- pip install diffpy.mpdf
-
-*Alternative option: Download and install from source.*
+============
-If you prefer to install from source, you can also zip and download the entire package
-from `PyPI `__ or
-`GitHub `__, then unzip the file and
-execute the following command from inside the unzipped directory ::
+For the most up-to-date installation instructions, please refer to the
+`diffpy.mpdf README on GitHub `_.
- python setup.py install
+Tutorials
+=========
-Note that this will only work if all the dependencies are already properly installed.
+For tutorials on how to use diffpy.mpdf, please visit: https://github.com/FrandsenGroup/mPDF-tutorial.
Documentation
--------------
-Please see https://pythonhosted.org/diffpy.mpdf
-for the documentation.
-
-What next?
-============
+=============
-Explore the mpdf tutorial and examples on the
-`CMI Exchange `_!
+Full documentation for diffpy.mpdf is available at:
+`https://frandsengroup.github.io/diffpy.mpdf/index.html `_
-.. toctree::
- :hidden:
- mPDFlicense
diff --git a/products/morph.rst b/products/morph.rst
new file mode 100644
index 00000000..3af42237
--- /dev/null
+++ b/products/morph.rst
@@ -0,0 +1,57 @@
+############
+diffpy.morph
+############
+
+Diffpy.morph is a Python software package designed to allow researchers
+the ability to compare experimental datasets to identify structural changes.
+
+Diffpy.morph makes use of several data manipulation techniques to correct
+for benign effects such as thermal expansion (peak shift) and increased
+thermal motion (peak broadening) or a change in scale due to differences
+in incident flux, for example. diffpy.morph will do its best to correct
+for these benign effects before computing and plotting a difference
+curve.
+
+One dataset is designated as the "target", while the second is morphed.
+Such morphs include stretching (modifying the x-axis to simulate uniform expansion),
+smearing (broadening peaks via uniform convolution), and scaling. In addition
+to these operations, diffpy.morph offers other morphing transformations, though
+stretching, smearing, and scaling are the most commonly used. The software
+automatically varies the amplitudes of the selected transformations to obtain
+the best fit between the morphed and target datasets, and then plots both
+datasets along with the resulting difference curve shown below.
+
+Note that diffpy.morph works on other spectra, not just pair distribution functions (PDFs).
+
+.. diffpy.morph will soon be included in :doc:`xPDFsuite `, a powerful end-to-end software for X-ray PDF analysis. xPDFsuite is designed for flexible, high throughput PDF analyses and contains many features for interrogating, comparing, and modeling data as well as simply doing data reduction.
+
+.. figure:: ../images/morph.png
+ :align: center
+
+ diffpy.morph transformation techniques applied to PDFs of IrTe\ :sub:`2` doped with
+ different atomic species at different temperatures.
+ The left column (a, b, and c) shows the unmorphed PDFs at 10K (blue) and 300K (red) and
+ their corresponding difference curves. The right column (d, e, and f) shows the same PDFs
+ after applying the stretch, smear, and scale transformations to the 10K PDFs. No phase transition
+ is observed for PDFs in d and e as the difference curves are flat (low R\ :sub:`w`).
+ However, a large difference curve (high R\ :sub:`w`) is observed in
+ f, signifying a structural phase transition between 10K and 300K.
+
+
+Installation
+============
+
+For the most up-to-date installation instructions, please refer to the installation section of the
+`diffpy.morph README page on GitHub `_.
+
+Tutorials
+=========
+
+Tutorials on how to use diffpy.morph can be found
+at the `diffpy.morph documentation `_.
+
+
+Documentation
+=============
+
+Documentation for diffpy.morph is available at https://www.diffpy.org/diffpy.morph.
diff --git a/products/pdfgetx.rst b/products/pdfgetx.rst
index cc9f5140..a831bfb4 100644
--- a/products/pdfgetx.rst
+++ b/products/pdfgetx.rst
@@ -4,8 +4,15 @@ PDFgetX3, PDFgetN3 and PDFgetS3
.. include:: ../abbreviations.txt
-PDFgetX3, PDFgetN3 and PDFgetS3 are command-line utilities that
-for automated batch processing. PDFgetX3, PDFgetN3 and PDFgetS3 are easy to use, fast and convenient for automated batch processing. The interactive mode provides complete access to all
+PDFgetX3, PDFgetN3 and PDFgetS3 are command-line utilities
+for automated batch processing of 1D powder diffraction data to obtain
+PDFs. For an affordable GUI that allows for high throughput conversion of
+multiple files with interactive graphics, please consider purchasing
+:doc:`xPDFsuite `.
+A version of PDFgetX3 that processes electron diffraction data is available
+by contacting NanoMegas (see `here `_ for more details)
+
+PDFgetX3, PDFgetN3 and PDFgetS3 are easy to use, fast and convenient for automated batch processing. The interactive mode provides complete access to all
parameters and intermediate results, as well as live-plotting feature
that helps to tune conversion parameters and visualize their effect on the results.
PDFgetX3, PDFgetN3 and PDFgetS3 are distributed together with
@@ -13,15 +20,14 @@ Python library diffpy.pdfgetx, which provides the
underlying PDF-processing functions and can be
utilized in custom PDF-conversion scripts.
+User PDFgetX3 for converting x-ray data, PDFgetN3 for neutron data (designed
+for reactor data explicitly and not tested on neutron time-of-flight data), and
+PDFgetS3 for converting correlation functions from nanoparticle assemblies in
+small angle scattering data into superlattice assembly structures.
+
*The software is free for open academic research,
but requires paid license for commercial use.*
-PDFgetX3 is incorporated in the powerful end-to-end x-ray PDF analysis package
-:doc:`xPDFsuite `.
-xPDFsuite is designed for flexible,
-high throughput PDF analyses and contains many features for interrogating, comparing and
-modeling data as well as simply doing data reduction.
-
Download
========
@@ -39,34 +45,94 @@ The PDFgetX3, PDFgetN3 and PDFgetS3 software can be obtained for free from
provided it will be used for open academic research
(please cite the relevant paper below).
If you plan to use the software in any other way, please contact
-`Beth Kauderer `_ at Columbia Technology Ventures.
+``_ at Columbia Technology Ventures.
Use the following steps to obtain the academic license and download
the software:
1. Open new browser window at the licensing page |m11-120|.
-2. Select "Express Licensing" from the navigation bar and
- then "Sign In To Continue".
+2. Select "Request License"
-3. Sign-In redirects to the top page.
- Search for ``pdfgetx3`` or ``m11-120`` to return
- to the licensing page again.
+3. Click on the link for the free or paid license that is appropriate
+ for your needs and situation
-4. Select "Express Licensing" again and choose
- "PDFgetX3 and PDFgetN3, Free Academic".
+4. Follow the link to sign in (or sign up if you don't already have a login)
-5. Submit the license request and wait for license confirmation email.
+5. Follow the prompts to submit the license request and wait for license confirmation email.
+ Make a note of the URL so you can easily navigate back to this page.
-6. The software will be under Top --> More --> "Manage Downloads" or just visit
- https://columbia.resoluteinnovation.com/downloads.
+6. Once the license is approved, the download link on the product page will become live and
+ you can download the software to your local computer.
-Sorry for the complicated process. We hope you enjoy the software!
+7. The download will be a zip file that contains versions of the software for all
+ available Python versions and platforms. Extract the files from the zip file, open
+ ``INSTRUCTIONS.txt`` in a text editor and follow the instructions for installation.
Documentation
=============
+Version 2.4.0 - Latest
+----------------------
+
+* `installation instructions <../doc/pdfgetx/2.4.0/install.html>`__
+* `user manual <../doc/pdfgetx/2.4.0/index.html>`__
+* `tutorial files <../doc/pdfgetx/2.4.0/pdfgetxn3-examples.zip>`__
+
+**Added:**
+
+* New ``transformterminationfunctions`` infrastructure to allow non-trivial termination functions
+* Added ``Lorch`` termination function option
+* Description of terminationfunctions to docs
+
+**Fixed:**
+
+* Build docs using the correct scikit-package script name
+* Reapply the Sphinx dependency `m2r` to `m2r2` fix that seems to have inadvertently been lost
+
+Previous Versions
+=================
+Please reach out to ``_ if you need one of these versions
+
+Version 2.3.0
+-------------
+
+**Added:**
+
+* Support for Python 3.11, 3.12, 3.13.
+* Added Cython build support.
+* Added `.gitattribute` for github release export.
+* Use bg-mpl-stylesheets as a style for matplotlib plots.
+* test for the Q-array issue
+* Added instructions in wheels bundle.
+* Added `pdfgetx3 --list-examples` and `pdfgetx3 --example` commands to list available examples and copy example dir into pwd.
+
+**Changed:**
+
+* Changed build process. Now build `*.c` sdist and c binary wheels for each platform and python version.
+* Updated :code:`tuneconfig.py` to use the latest api from matplotlib.
+* Renamed get_atol() to get_atol_from_rtol() in test_pdfgetter.py
+* Standardized checking if a variable is an iterable.
+* Removed `docs/source` directory and makefiles in installation.
+* Changed `twothetazerofit.ipy` to output `.png` files instead of `.pdf`and `.svgz` files.
+
+**Fixed:**
+
+* Refactored code for prefer_nodisplay_backend and suppress warnings.
+* Support scikit-package Level 5 standard (https://scikit-package.github.io/scikit-package/).
+* Replaced :code:`setup.py` with :code:`pyproject.toml` for releases.
+* Fixed example import errors `diffpy.structure` because of `Structure` deprecation.
+* Fixed tutorial missing image file.
+
+**Removed:**
+
+* Removed deprecated support for `loadData`, `pdfgetxApplication.processFiles`, `pdfgetxApplication.clearSession`, `pdfgetxApplication.loadData`.
+* Removed unused `.coveragerc`, `.gitarchive.cfg`, `.gitattributes`.
+* Support for Python 2.7, and Python <= 3.10
+* :code:`six`, and other Py2 legacy code\
+* Removed pre-commit run in merge-to-main workflow
+
Version 2.2.1 - latest
----------------------
@@ -147,3 +213,8 @@ For publications that use this software to process neutron
diffraction data we ask you to also cite:
* |citeJuhasJac18|
+
+For publication that use this software to process small-angle
+scattering data we ask you to also cite:
+
+* |citeLiuJac20|
\ No newline at end of file
diff --git a/products/pdfgui.rst b/products/pdfgui.rst
index 7547ffee..6e30684a 100644
--- a/products/pdfgui.rst
+++ b/products/pdfgui.rst
@@ -1,94 +1,69 @@
.. highlight:: bash
.. include:: ../abbreviations.txt
-######
-PDFgui
-######
+#############
+diffpy.pdfgui
+#############
-Overview
-========
-For users who do not have the expertise or necessity for command line analysis, PDFgui is
+For users who do not have the expertise or necessity for command line analysis, diffpy.pdfgui is
a convenient and easy to use graphical front end for the PDFfit2 refinement program. It is
capable of full-profile fitting of the atomic pair distribution function (PDF)
derived from x-ray or neutron diffraction data
and comes with built in graphical and structure visualization capabilities.
-PDFgui is also included in :doc:`xPDFsuite `,
-a powerful end-to-end software for X-ray PDF analysis.
-xPDFsuite is designed for flexible,
-high throughput PDF analyses and contains many features for interrogating, comparing and
-modeling data as well as simply doing data reduction.
-
-
.. figure:: ../images/PDFgui_screenshot_small.png
:align: center
- Screen-shot of PDFgui during a refinement of multiple data-sets
+ Screen-shot of diffpy.pdfgui during a refinement of multiple data-sets
-Installation
-============
+Reference
+=========
-By downloading and using this software you are agreeing to the
-conditions specified in the :doc:`software license `.
+If you use this program for a scientific research that leads to publication,
+we ask that you acknowledge use of the program by citing the following paper
+in your publication:
-PDFgui is distributed as a software package for
-`Anaconda Python `__. PDFgui is available
-for all operating systems supported by Anaconda, namely for
-Linux, Mac OS X, and Windows.
+ C L Farrow, P Juhas, J W Liu, D Bryndin, E S Božin,
+ J Bloch, Th Proffen and S J L Billinge, `PDFfit2 and PDFgui:
+ computer programs for studying nanostructure in crystals `_,
+ J. Phys.: Condens. Matter 19 (2007) 335219.
-As a prerequisite for PDFgui installation, download and install
-**Miniconda** (https://docs.conda.io/en/latest/miniconda.html#latest-miniconda-installer-links)
-or Anaconda Python (https://www.anaconda.com/download).
-PDFgui is available from the "conda-forge" channel of Anaconda packages.
-To do so open a *Terminal* window or *Anaconda Command Prompt* and use
-the :program:`conda` command as follows ::
+Installation
+============
+For the most up-to-date installation instructions, please refer to the installation section of the
+`diffpy.pdfgui README page on GitHub `_.
- conda create --name=pdfgui2 python=3.9
- conda activate pdfgui2
- conda install -c conda-forge diffpy.pdfgui
+Running pdfgui
+===============
-PDFgui can be then started from a *Terminal* window or *Anaconda Command Prompt* by typing ::
+To run diffpy.pdfgui after installation, type the command::
pdfgui
-The PDFgui window will appear automatically. An alternative method on Windows is to start
-PDFgui through the *Diffpy* start menu.
-
-.. note::
- To start PDFgui from a Terminal make sure *pdfgui2* is
- the active Anaconda environment::
-
- conda activate pdfgui2
-
- Alternatively you can add the following line to your shell startup
- file :file:`.bashrc` to define an alias which will work in
- any Anaconda environment ::
-
- alias pdfgui="/path/to/pdfgui2/bin/pdfgui"
+Tutorials
+=========
- where ``/path/to`` needs to be adjusted according to the output of
- ``which pdfgui`` command.
+Search "PDFgui" on YouTube for some video tutorials on how to use diffpy.pdfgui.
+For in-depth help in using diffpy.pdfgui to solve scientific problems please
+see the book "Atomic Pair Distribution Function Analysis: A primer" by
+Simon Billinge, Kirsten Jensen, and past and present Billinge group members,
+published by Oxford University Press. Data for the worked examples can
+be found here: https://github.com/Billingegroup/pdfttp_data.
-PDFgui updates
-==============
+Please, join the :doc:`community forum <../community>` for tips, tricks, and feedback.
-The Anaconda package system makes it easy to prepare and distribute
-software updates and bugfixes. To update to the latest version of
-PDFgui use ::
+Documentation
+=============
- conda update -c conda-forge diffpy.pdfgui
+Documentation for diffpy.pdfgui is available at https://www.diffpy.org/diffpy.pdfgui.
-To use a bleeding edge development version, visit the project source
-repository at https://github.com/diffpy/diffpy.pdfgui and consult
-its README file.
+Legacy versions
+===============
-
-Other versions
-==============
v1.1.2 is the last python 2 version of PDFgui. It is no longer supported,
but may be needed to open python 2 generated `.ddp` project files. It can
be installed in a python2 anaconda environment using the commands::
@@ -126,28 +101,6 @@ Name Date Size Description
MD5 check sums for these installer files are available
`here `__.
-
-Documentation and help
-======================
-
-* The user manual is available in `HTML <../doc/pdfgui/index.html>`__
- and `PDF <../doc/pdfgui/pdfgui.pdf>`__ formats.
-
-* Search "PDFgui" on YouTube for some video tutorials on how to use
- PDFgui.
-
-* For in-depth help in using PDFgui to solve scientific problems please
- see the book "Atomic Pair Distribution Function Analysis: A primer" by
- Simon Billinge, Kirsten Jensen, and past and present Billinge group members,
- published by Oxford University Press. Data for the worked examples can
- be found here: https://github.com/Billingegroup/pdfttp_data
-
-* Tutorial files are available from
- `pdfgui-tutorial.zip <../doc/pdfgui/pdfgui-tutorial.zip>`__.
-
-* Please, join the :doc:`community forum <../community>` for tips, tricks, and feedback.
-
-
.. toctree::
:hidden:
diff --git a/products/pythonpackages.rst b/products/pythonpackages.rst
index c847820b..4ae79236 100644
--- a/products/pythonpackages.rst
+++ b/products/pythonpackages.rst
@@ -3,45 +3,30 @@ Python Packages
This is a complete list of all Python packages developed by the DiffPy
team. For more information about a specific package, follow the link to
-the corresponding github page. With the exception of PDFfit2, SrMise,
-and mPDF, all of the packages listed below are bundled in the |DiffPyCMI|
-release.
-
-====================== ============================================
-Module Description
-====================== ============================================
-`diffpy.srfit`_ Setup and control of general fitting
- problems.
-
-`diffpy.srmise`_ Python tool for peak extraction and peak
- fitting of atomic pair distribution
- functions.
-
-`diffpy.srreal`_ Python library for calculation of pair based
- quantities such as the pair distribution
- function (PDF), bond lengths, and bond
- valence sums.
-
-`diffpy.structure`_ Handles storage of crystal structure data.
-
-`diffpy.utils`_ General purpose shared utilities for the
- diffpy libraries.
-
-`pyobjcryst`_ Python bindings to the ObjCryst++
- Object-Oriented Crystallographic
- Library.
-
-`diffpy.pdffit2`_ Atomic structure refinement and PDF fitting
- (this is the computational engine used by
- PDFgui).
-
-`diffpy.mpdf`_ Tools for calculating and refining magnetic
- PDFs.
-====================== ============================================
-
-.. URL definitions below -----------------------------------------------
-
-.. _diffpy.srmise: https://github.com/diffpy/diffpy.srmise
-.. _diffpy.pdffit2: https://github.com/diffpy/diffpy.pdffit2
+the corresponding documentation page.
+
+.. list-table::
+ :widths: 2 8
+ :header-rows: 1
+ :class: wrap-text
+
+ * - Module
+ - Description
+ * - `diffpy.srfit `_
+ - Setup and control of general fitting problems.
+ * - `diffpy.srmise `_
+ - Python tool for peak extraction and peak fitting of atomic pair distribution functions.
+ * - `diffpy.srreal `_
+ - Python library for calculation of pair-based quantities such as the pair distribution function (PDF), bond lengths, and bond valence sums.
+ * - `diffpy.structure `_
+ - Handles storage of crystal structure data.
+ * - `diffpy.utils `_
+ - General purpose shared utilities for the diffpy libraries.
+ * - `pyobjcryst `_
+ - Python bindings to the ObjCryst++ Object-Oriented Crystallographic Library.
+ * - `diffpy.pdffit2 `_
+ - Atomic structure refinement and PDF fitting (this is the computational engine used by PDFgui).
+ * - `diffpy.mpdf `_
+ - Tools for calculating and refining magnetic PDFs.
.. include:: ../abbreviations.txt
diff --git a/products/utils.rst b/products/utils.rst
new file mode 100644
index 00000000..069bb83f
--- /dev/null
+++ b/products/utils.rst
@@ -0,0 +1,121 @@
+############
+diffpy.utils
+############
+
+.. include:: ../abbreviations.txt
+
+General utilities for analyzing diffraction data
+
+The diffpy.utils package provides a number of functions and classes designed to help
+researchers analyze their diffraction data. It also includes some functionality for
+carrying out PDF analysis. Examples are parsers for reading common format diffraction
+data files, ``DiffractionObjects`` that allow you to do algebra on diffraction patterns,
+tools for better capture and propagation of metadata,
+diffraction-friendly interpolation routines, as well as some other tools used across
+diffpy libraries.
+
+Citation
+--------
+
+If you use this program for a scientific research that leads
+to publication, we ask that you acknowledge use of the program
+by citing the following paper in your publication:
+
+ P. Juhás, C. L. Farrow, X. Yang, K. R. Knox and S. J. L. Billinge,
+ `Complex modeling: a strategy and software program for combining
+ multiple information sources to solve ill posed structure and
+ nanostructure inverse problems
+ `__,
+ *Acta Crystallogr. A* **71**, 562-568 (2015).
+
+Documentation
+-------------
+
+Documentation may be found at, https://diffpy.github.io/diffpy.utils
+
+Installation
+------------
+
+The preferred method is to use `Miniconda Python
+`_
+and install from the "conda-forge" channel of Conda packages.
+
+To add "conda-forge" to the conda channels, run the following in a terminal. ::
+
+ conda config --add channels conda-forge
+
+We want to install our packages in a suitable conda environment.
+The following creates and activates a new environment named ``diffpy.utils_env`` ::
+
+ conda create -n diffpy.utils_env diffpy.utils
+ conda activate diffpy.utils_env
+
+To confirm that the installation was successful, type ::
+
+ python -c "import diffpy.utils; print(diffpy.utils.__version__)"
+
+The output should print the latest version displayed on the badges above.
+
+If the above does not work, you can use ``pip`` to download and install the latest release from
+`Python Package Index `_.
+To install using ``pip`` into your ``diffpy.utils_env`` environment, type ::
+
+ pip install diffpy.utils
+
+If you prefer to install from sources, after installing the dependencies, obtain the source archive from
+`GitHub `_. Once installed, ``cd`` into your ``diffpy.utils`` directory
+and run the following ::
+
+ pip install .
+
+Getting Started
+---------------
+
+You may consult our `online documentation `_ for tutorials and API references.
+
+Support and Contribute
+----------------------
+
+`Diffpy user group `_ is the discussion forum for general questions and discussions about the use of diffpy.utils. Please join the diffpy.utils users community by joining the Google group. The diffpy.utils project welcomes your expertise and enthusiasm!
+
+If you see a bug or want to request a feature, please `report it as an issue `_ and/or `submit a fix as a PR `_. You can also post it to the `Diffpy user group `_.
+
+Feel free to fork the project and contribute. To install diffpy.utils
+in a development mode, with its sources being directly used by Python
+rather than copied to a package directory, use the following in the root
+directory ::
+
+ pip install -e .
+
+To ensure code quality and to prevent accidental commits into the default branch, please set up the use of our pre-commit
+hooks.
+
+1. Install pre-commit in your working environment by running ``conda install pre-commit``.
+
+2. Initialize pre-commit (one time only) ``pre-commit install``.
+
+Thereafter your code will be linted by black and isort and checked against flake8 before you can commit.
+If it fails by black or isort, just rerun and it should pass (black and isort will modify the files so should
+pass after they are modified). If the flake8 test fails please see the error messages and fix them manually before
+trying to commit again.
+
+Improvements and fixes are always appreciated.
+
+Before contributing, please read our `Code of Conduct `_.
+
+Contact
+-------
+
+For more information on diffpy.utils please visit the project `web-page `_ or email Simon Billinge at sb2896@columbia.edu.
+
+
+What next?
+============
+
+Explore the diffpy.utils
+`tutorials `_!
+
+.. toctree::
+ :hidden:
+
+ Utilslicense
diff --git a/products/xPDFsuite.rst b/products/xPDFsuite.rst
index c75cfa1c..745dc90b 100644
--- a/products/xPDFsuite.rst
+++ b/products/xPDFsuite.rst
@@ -1,6 +1,8 @@
-##################################################################################################################
-xPDFsuite - an easy to use end-to-end software solution for atomic pair distribution function analysis with x-rays
-##################################################################################################################
+##########
+xPDFsuite
+##########
+
+An easy to use end-to-end software solution for atomic pair distribution function analysis with x-rays.
.. include:: ../abbreviations.txt
.. figure:: ../images/xPDFsuite.png
@@ -43,7 +45,6 @@ Key features:
Explore xPDFsuite
=================
xPDFsuite is available for purchase for either academic or commercial applications.
- * To see xPDFsuite in action, please see the video here. (available soon)
* To help you explore xPDFsuite on your own data we have made a free evaluation version of the software available at |CTV_link|_. This has all the xPDFsuite functionality, but you will not be able to save your results.
* To purchase xPDFsuite (separate academic and commercial license options), please go to |CTV_link|_.
@@ -51,7 +52,7 @@ xPDFsuite is available for purchase for either academic or commercial applicatio
.. _CTV_link: ctv-xpdfsuite_
**Thank you for purchasing xPDFsuite. Funds we raise from sales help us to develop user interfaces and useful features on top of our
-free for academics and open source Diffpy products, such as Diffpy-CMI, PDFgetX3 and PDFgui.**
+free for academics and open source Diffpy products, such as diffpy.cmi, diffpy.pdfgui, and PDFgetX3.**
**We hope you enjoy xPDFsuite and that it supercharges your PDF analyses.** Please contact us with feedback and questions by
emailing `Prof. Simon Billinge `_
diff --git a/products/xinterpdf.rst b/products/xinterpdf.rst
index b23f2ace..fc67dea7 100644
--- a/products/xinterpdf.rst
+++ b/products/xinterpdf.rst
@@ -4,7 +4,7 @@ xINTERPDF
xINTERPDF is a Python GUI program for analyzing X-ray pair distribution
function (PDF) data of organic compounds collected at synchrotron and/or
-laboratory X-ray sources. It uses DiffPy-CMI as a backend for simulation
+laboratory X-ray sources. It uses |diffpycmi| as a backend for simulation
of PDFs.
Currently it supports:
@@ -39,7 +39,7 @@ The xINTERPDF package requires Python 2.7 and the following dependency packages:
* ``SciPy`` - Scientific libraries for Python
* ``matplotlib`` - Python plotting library
* ``Scikit-Learn`` - Python machine learning library; its PCA module is called.
-* ``diffpy-cmi`` - Versatile Python packages for simulation of atomic pair distribution functions
+* ``diffpy.cmi`` - Versatile Python packages for simulation of atomic pair distribution functions
* ``Tkinter`` - Python default library for creation of graphical user interface
See the :doc:`xINTERPDF license ` for terms and conditions of use.
diff --git a/publications.rst b/publications.rst
index 08042c92..66895414 100644
--- a/publications.rst
+++ b/publications.rst
@@ -3,71 +3,37 @@
References
==========
-The following papers in the literature describe the DiffPy products.
-Please cite us if our software has been used in your research.
+The following publications describe DiffPy software packages.
+Please cite the appropriate papers if you use these tools in your research.
+For other DiffPy packages not listed here, please refer to the respective
+`GitHub repository `_ for any relevant publications to cite.
-* |citeLiuJac20|
+**diffpy.cmi**
-* |citeJuhasJac18|
+|citeJuhasAca15|
-* |citeShiJac18|
+**diffpy.pdfgui, diffpy.pdffit2**
-* |citeJuhasAca15|
+|citeFarrowJpcm07|
-* |citeGranlundAca15|
+**PDFgetX3, PDFgetN3**
-* |citeJuhasJac13|
+|citeJuhasJac13|
-* |citeFarrowJpcm07|
+|citeJuhasJac18|
-* |citeProffenJac99|
+**diffpy.srmise**
+|citeGranlundAca15|
+**PDFfit**
-Publications using DiffPy-CMI
-=============================
+|citeProffenJac99|
-The following papers made use of DiffPy developed software for analysis
-and/or modeling.
+**sasPDF**
-* |citeJensenNc16|
+|citeLiuJac20|
-* |citeFrandsenPrl16|
+**xINTERPDF**
-* |citeTerbanCgd16|
-
-* |citePrillAca16|
-
-* |citeTerbanNan15|
-
-* |citePrillJac15|
-
-* |citeDoanNguyenAcsn14|
-
-* |citeBeecherJacs14|
-
-* |citeGhidiuCC14|
-
-* |citeShiPRL14|
-
-* |citeFarrowJac14|
-
-* |citeAbeykoonArxiv14|
-
-* |citeMengqiangZhuESTL14|
-
-* |citeChoiNanol14|
-
-* |citeJacquesNc13|
-
-* |citeDavisCgd13|
-
-* |citeYangPccp13|
-
-* |citeFarrowJacs13|
-
-* |citeTyrstedAcie12|
-
-* |citeJensenJacs12|
-
-* |citeMengqiangZhuGca12|
+|citeShiJac18|
diff --git a/requirements/docs.txt b/requirements/docs.txt
new file mode 100644
index 00000000..871537c0
--- /dev/null
+++ b/requirements/docs.txt
@@ -0,0 +1,5 @@
+sphinx
+sphinx_rtd_theme
+doctr
+m2r
+make
diff --git a/static_root/doc/pdfgetx/2.0.0/_sources/tutorial.rst.txt b/static_root/doc/pdfgetx/2.0.0/_sources/tutorial.rst.txt
index b56541d5..0d5c6f09 100644
--- a/static_root/doc/pdfgetx/2.0.0/_sources/tutorial.rst.txt
+++ b/static_root/doc/pdfgetx/2.0.0/_sources/tutorial.rst.txt
@@ -645,14 +645,14 @@ the zero offset may change for different samples.
This tutorial requires either Linux or Mac OS X platforms,
because the PDF fitting is conducted with
-`DiffPy-CMI `__,
+`diffpy.cmi `__,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use `Anaconda Python`_ and set up a dedicated
Anaconda environment *nbcmi* for this tutorial.
This can be accomplished using the following steps::
- $ conda create -n nbcmi -c diffpy python=2 diffpy-cmi
+ $ conda create -n nbcmi -c diffpy python=2 diffpy.cmi
$ conda activate nbcmi
$ python -m easy_install path/to/diffpy.pdfgetx-VERSION.egg
diff --git a/static_root/doc/pdfgetx/2.0.0/tutorial.html b/static_root/doc/pdfgetx/2.0.0/tutorial.html
index 8ab48d31..4fdebdcd 100644
--- a/static_root/doc/pdfgetx/2.0.0/tutorial.html
+++ b/static_root/doc/pdfgetx/2.0.0/tutorial.html
@@ -644,9 +644,9 @@
Fit twothetazeroDiffPy-CMI,
+diffpy.cmi,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use Anaconda Python and set up a dedicated
Anaconda environment nbcmi for this tutorial.
This can be accomplished using the following steps:
diff --git a/static_root/doc/pdfgetx/2.1.0/_sources/tutorial.rst.txt b/static_root/doc/pdfgetx/2.1.0/_sources/tutorial.rst.txt
index af6ef5db..ee02754b 100644
--- a/static_root/doc/pdfgetx/2.1.0/_sources/tutorial.rst.txt
+++ b/static_root/doc/pdfgetx/2.1.0/_sources/tutorial.rst.txt
@@ -644,14 +644,14 @@ the zero offset may change for different samples.
This tutorial requires either Linux or Mac OS X platforms,
because the PDF fitting is conducted with
-`DiffPy-CMI `__,
+`diffpy.cmi `__,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use `Anaconda Python`_ and set up a dedicated
Anaconda environment *nbcmi* for this tutorial.
This can be accomplished using the following steps::
- $ conda create -n nbcmi -c diffpy python=2 diffpy-cmi
+ $ conda create -n nbcmi -c diffpy python=2 diffpy.cmi
$ conda activate nbcmi
$ pip install path/to/diffpy.pdfgetx-VERSION.whl
diff --git a/static_root/doc/pdfgetx/2.1.0/tutorial.html b/static_root/doc/pdfgetx/2.1.0/tutorial.html
index 2ae28d28..010b4ef1 100644
--- a/static_root/doc/pdfgetx/2.1.0/tutorial.html
+++ b/static_root/doc/pdfgetx/2.1.0/tutorial.html
@@ -646,13 +646,13 @@
Fit twothetazeroDiffPy-CMI,
+diffpy.cmi,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use Anaconda Python and set up a dedicated
Anaconda environment nbcmi for this tutorial.
This can be accomplished using the following steps:
-
diff --git a/static_root/doc/pdfgetx/2.1.1/_sources/tutorial.rst.txt b/static_root/doc/pdfgetx/2.1.1/_sources/tutorial.rst.txt
index af6ef5db..ee02754b 100644
--- a/static_root/doc/pdfgetx/2.1.1/_sources/tutorial.rst.txt
+++ b/static_root/doc/pdfgetx/2.1.1/_sources/tutorial.rst.txt
@@ -644,14 +644,14 @@ the zero offset may change for different samples.
This tutorial requires either Linux or Mac OS X platforms,
because the PDF fitting is conducted with
-`DiffPy-CMI `__,
+`diffpy.cmi `__,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use `Anaconda Python`_ and set up a dedicated
Anaconda environment *nbcmi* for this tutorial.
This can be accomplished using the following steps::
- $ conda create -n nbcmi -c diffpy python=2 diffpy-cmi
+ $ conda create -n nbcmi -c diffpy python=2 diffpy.cmi
$ conda activate nbcmi
$ pip install path/to/diffpy.pdfgetx-VERSION.whl
diff --git a/static_root/doc/pdfgetx/2.1.1/tutorial.html b/static_root/doc/pdfgetx/2.1.1/tutorial.html
index 504ebc88..d20b361a 100644
--- a/static_root/doc/pdfgetx/2.1.1/tutorial.html
+++ b/static_root/doc/pdfgetx/2.1.1/tutorial.html
@@ -646,13 +646,13 @@
Fit twothetazeroDiffPy-CMI,
+diffpy.cmi,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use Anaconda Python and set up a dedicated
Anaconda environment nbcmi for this tutorial.
This can be accomplished using the following steps:
-
diff --git a/static_root/doc/pdfgetx/2.1.2/_sources/tutorial.rst.txt b/static_root/doc/pdfgetx/2.1.2/_sources/tutorial.rst.txt
index af6ef5db..ee02754b 100644
--- a/static_root/doc/pdfgetx/2.1.2/_sources/tutorial.rst.txt
+++ b/static_root/doc/pdfgetx/2.1.2/_sources/tutorial.rst.txt
@@ -644,14 +644,14 @@ the zero offset may change for different samples.
This tutorial requires either Linux or Mac OS X platforms,
because the PDF fitting is conducted with
-`DiffPy-CMI `__,
+`diffpy.cmi `__,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use `Anaconda Python`_ and set up a dedicated
Anaconda environment *nbcmi* for this tutorial.
This can be accomplished using the following steps::
- $ conda create -n nbcmi -c diffpy python=2 diffpy-cmi
+ $ conda create -n nbcmi -c diffpy python=2 diffpy.cmi
$ conda activate nbcmi
$ pip install path/to/diffpy.pdfgetx-VERSION.whl
diff --git a/static_root/doc/pdfgetx/2.1.2/tutorial.html b/static_root/doc/pdfgetx/2.1.2/tutorial.html
index f7293751..ea4be469 100644
--- a/static_root/doc/pdfgetx/2.1.2/tutorial.html
+++ b/static_root/doc/pdfgetx/2.1.2/tutorial.html
@@ -646,13 +646,13 @@
Fit twothetazeroDiffPy-CMI,
+diffpy.cmi,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use Anaconda Python and set up a dedicated
Anaconda environment nbcmi for this tutorial.
This can be accomplished using the following steps:
-
diff --git a/static_root/doc/pdfgetx/2.2.0/_sources/tutorial.rst.txt b/static_root/doc/pdfgetx/2.2.0/_sources/tutorial.rst.txt
index 7850ec08..c87a993f 100644
--- a/static_root/doc/pdfgetx/2.2.0/_sources/tutorial.rst.txt
+++ b/static_root/doc/pdfgetx/2.2.0/_sources/tutorial.rst.txt
@@ -644,14 +644,14 @@ the zero offset may change for different samples.
This tutorial requires either Linux or Mac OS X platforms,
because the PDF fitting is conducted with
-`DiffPy-CMI `__,
+`diffpy.cmi `__,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use `Anaconda Python`_ and set up a dedicated
Anaconda environment *nbcmi* for this tutorial.
This can be accomplished using the following steps::
- $ conda create -n nbcmi -c diffpy python=2 diffpy-cmi
+ $ conda create -n nbcmi -c diffpy python=2 diffpy.cmi
$ conda activate nbcmi
$ pip install path/to/diffpy.pdfgetx-VERSION.whl
diff --git a/static_root/doc/pdfgetx/2.2.0/tutorial.html b/static_root/doc/pdfgetx/2.2.0/tutorial.html
index cb47ae94..c68e86aa 100644
--- a/static_root/doc/pdfgetx/2.2.0/tutorial.html
+++ b/static_root/doc/pdfgetx/2.2.0/tutorial.html
@@ -646,13 +646,13 @@
Fit twothetazeroDiffPy-CMI,
+diffpy.cmi,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use Anaconda Python and set up a dedicated
Anaconda environment nbcmi for this tutorial.
This can be accomplished using the following steps:
-
diff --git a/static_root/doc/pdfgetx/2.2.1/_sources/tutorial.rst.txt b/static_root/doc/pdfgetx/2.2.1/_sources/tutorial.rst.txt
index 7850ec08..c87a993f 100644
--- a/static_root/doc/pdfgetx/2.2.1/_sources/tutorial.rst.txt
+++ b/static_root/doc/pdfgetx/2.2.1/_sources/tutorial.rst.txt
@@ -644,14 +644,14 @@ the zero offset may change for different samples.
This tutorial requires either Linux or Mac OS X platforms,
because the PDF fitting is conducted with
-`DiffPy-CMI `__,
+`diffpy.cmi `__,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use `Anaconda Python`_ and set up a dedicated
Anaconda environment *nbcmi* for this tutorial.
This can be accomplished using the following steps::
- $ conda create -n nbcmi -c diffpy python=2 diffpy-cmi
+ $ conda create -n nbcmi -c diffpy python=2 diffpy.cmi
$ conda activate nbcmi
$ pip install path/to/diffpy.pdfgetx-VERSION.whl
diff --git a/static_root/doc/pdfgetx/2.2.1/tutorial.html b/static_root/doc/pdfgetx/2.2.1/tutorial.html
index df564fed..efb4220c 100644
--- a/static_root/doc/pdfgetx/2.2.1/tutorial.html
+++ b/static_root/doc/pdfgetx/2.2.1/tutorial.html
@@ -646,13 +646,13 @@
Fit twothetazeroDiffPy-CMI,
+diffpy.cmi,
which is not yet available for Windows.
-If DiffPy-CMI is not yet installed,
+If diffpy.cmi is not yet installed,
we recommend to use Anaconda Python and set up a dedicated
Anaconda environment nbcmi for this tutorial.
This can be accomplished using the following steps:
-
diff --git a/static_root/doc/pdfgetx/2.4.0/.buildinfo b/static_root/doc/pdfgetx/2.4.0/.buildinfo
new file mode 100644
index 00000000..dcd50e2c
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: b930593756d2c9edfbe41658e2b6f527
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/static_root/doc/pdfgetx/2.4.0/_images/nickelfqgr.png b/static_root/doc/pdfgetx/2.4.0/_images/nickelfqgr.png
new file mode 100644
index 00000000..3fbc12de
Binary files /dev/null and b/static_root/doc/pdfgetx/2.4.0/_images/nickelfqgr.png differ
diff --git a/static_root/doc/pdfgetx/2.4.0/_images/nickelfqgrnoisy.png b/static_root/doc/pdfgetx/2.4.0/_images/nickelfqgrnoisy.png
new file mode 100644
index 00000000..caab8cf3
Binary files /dev/null and b/static_root/doc/pdfgetx/2.4.0/_images/nickelfqgrnoisy.png differ
diff --git a/static_root/doc/pdfgetx/2.4.0/_images/tunenickelfqgr.png b/static_root/doc/pdfgetx/2.4.0/_images/tunenickelfqgr.png
new file mode 100644
index 00000000..14accde4
Binary files /dev/null and b/static_root/doc/pdfgetx/2.4.0/_images/tunenickelfqgr.png differ
diff --git a/static_root/doc/pdfgetx/2.4.0/_images/tunenickelt4gr.png b/static_root/doc/pdfgetx/2.4.0/_images/tunenickelt4gr.png
new file mode 100644
index 00000000..c95278cd
Binary files /dev/null and b/static_root/doc/pdfgetx/2.4.0/_images/tunenickelt4gr.png differ
diff --git a/static_root/doc/pdfgetx/2.4.0/_images/twothetazerofit.png b/static_root/doc/pdfgetx/2.4.0/_images/twothetazerofit.png
new file mode 100644
index 00000000..42f3ba78
Binary files /dev/null and b/static_root/doc/pdfgetx/2.4.0/_images/twothetazerofit.png differ
diff --git a/static_root/doc/pdfgetx/2.4.0/_modules/diffpy/pdfgetx/functs.html b/static_root/doc/pdfgetx/2.4.0/_modules/diffpy/pdfgetx/functs.html
new file mode 100644
index 00000000..3c10ea5d
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/_modules/diffpy/pdfgetx/functs.html
@@ -0,0 +1,775 @@
+
+
+
+
+
+
+
+ diffpy.pdfgetx.functs — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#!/usr/bin/env python
+##############################################################################
+#
+# diffpy.pdfgetx by DANSE Diffraction group
+# Simon J. L. Billinge
+# (c) 2008 Trustees of the Columbia University
+# in the City of New York. All rights reserved.
+#
+# File coded by: Timur Dykhne
+#
+# See AUTHORS.rst for a list of people who contributed.
+# See LICENSENOTICE.rst for license information.
+#
+##############################################################################
+
+importos.path
+importre
+importsys
+
+
+defcomposition_analysis(compstring):
+"""Pulls out elements and their ratios from the config file.
+
+ compstring -- chemical composition of the sample, e.g.,
+ "NaCl", "H2SO4", "(LaCa)1/2 Mn O3". Blank
+ characters are ignored, unit counts can be omitted.
+ It is critical to use proper upper-lower case for atom
+ symbols as this is used to delimit them in the formula.
+
+ Returns a list of atom symbols and a corresponding list of their counts.
+ """
+ # check if parentheses are balanced
+ ifcompstring.count("(")!=compstring.count(")"):
+ emsgbal='imbalanced parentheses in "%s"'%compstring
+ raiseValueError(emsgbal)
+ # make sure there is at least one uppercase character in the compstring
+ upcasechars=any(c.isupper()forcincompstring)
+ nonblank=any(notc.isspace()forcincompstring)
+ ifnotupcasecharsandnonblank:
+ emsg='invalid chemical composition "%s"'%compstring
+ raiseValueError(emsg)
+ if"("incompstring:
+ head,body,count,tail=_parse_parentheses(compstring)
+ ca_head=composition_analysis(head)
+ ca_body=composition_analysis(body)
+ ca_tail=composition_analysis(tail)
+ names=ca_head[0]+ca_body[0]+ca_tail[0]
+ fractions=ca_head[1]+[count*xforxinca_body[1]]+ca_tail[1]
+ returnnames,fractions
+ # simple composition string here
+ assert")"notincompstring
+ # split at every upper-case letter, possibly followed by a lower case
+ # one and charge specification
+ namefracs=re.split(_re_atomtype,compstring)[1:]
+ names=namefracs[0::2]
+ # use unit count when empty, convert to float otherwise
+ fractions=[_parse_fraction(w)forwinnamefracs[1::2]]
+ returnnames,fractions
+
+
+_re_atomtype="([A-Z][a-z]?(?:[1-8]?[+-])?)"
+
+
+def_parse_parentheses(compstring):
+"""Split fragment of chemical formula at the first pair of
+ parentheses.
+
+ compstring -- chemical formula that contains one or more pairs
+ of parentheses.
+
+ Return a tuple of (head, body, count, tail) where
+
+ head -- is the input string up to the opening parenthesis
+ body -- compstring fragment enclosed by the first parentheses.
+ It may contain more parentheses.
+ count -- floating point ratio following the closing parenthesis.
+ Defaults to 1 when not present.
+ tail -- trailing part of the compstring after the count.
+ """
+ psign={"(":+1,")":-1}
+ ptotal=0
+ p1=compstring.index("(")
+ forp2,cinenumerate(compstring[p1:],p1):
+ ptotal+=psign.get(c,0)
+ ifptotal==0:
+ break
+ mx=re.search(_re_atomtype+r"|\(",compstring[p2:])
+ p3=(mx.start()+p2)ifmxelselen(compstring)
+ head=compstring[:p1]
+ body=compstring[p1+1:p2]
+ scnt=compstring[p2+1:p3]
+ count=_parse_fraction(scnt)
+ tail=compstring[p3:]
+ rv=head,body,count,tail
+ returnrv
+
+
+def_parse_fraction(s):
+"""Convert fraction strings in chemical formulas to floats.
+
+ s -- string convertible to float or a fraction "1/3".
+
+ Return floating point value parsed from s. Return 1.0 when
+ s is empty or of space characters only.
+ """
+ fromfractionsimportFraction
+
+ if"/"ins:
+ rv=float(Fraction(s))
+ elifs.strip():
+ rv=float(s)
+ else:
+ rv=1.0
+ returnrv
+
+
+
+[docs]
+deffindfiles(patterns=(),path=".",dotfiles=False):
+"""Find files that match all specified patterns.
+
+ Pattern syntax:
+
+ * ``^start`` - match "start" only at the beginning of the string.
+ * ``end$`` - match "end" only at the end of string.
+ * ``<7>`` - match number 7 preceded by any number of leading zeros.
+ * ``<1-34>`` - match an integer range from 1 to 34 inclusive.
+ * ``<7->`` - match an integer greater or equal 7.
+ * ``<->`` - match any integer.
+ * ``+`` - start a new group of patterns to match more files.
+ * ``dir/`` - set search path effective from the current pattern group.
+
+ All integer ranges ``<N-M>`` above allow one or more leading zeros.
+ The range syntax does not support matching of negative numbers.
+
+ Parameters
+ ----------
+ patterns : iterable of strings or str, optional
+ String patterns that must all match in returned filenames.
+ Can be also a single string with patterns separated by
+ whitespace characters. When empty match all files in the
+ current directory or in the `path`. A single ``+`` starts
+ a new pattern group for additional matches. Each pattern
+ group may have one entry containing ``/``, for example,
+ ``dir/`` or ``./``, which sets the search directory for
+ this and subsequent pattern groups. When pattern group
+ contains only the path entry it reuses file patterns from
+ the previous group.
+ path : str, optional
+ Directory to be searched for the files. The default is "."
+ to search the current directory.
+ dotfiles : bool, optional
+ When True search also the hidden "." starting files. These
+ files are by default ignored, but can be explicitly selected
+ by adding the ``^.`` pattern.
+
+ Returns
+ -------
+ filenames : list
+ The list of matching filenames. Return all files when
+ `patterns` are not specified.
+ """
+ importshlex
+ fromitertoolsimportgroupby
+ frompathlibimportPurePath
+
+ fromdiffpy.pdfgetx.multipatternimportMultiPattern
+
+ ifisinstance(patterns,str):
+ p1=shlex.split(patterns)
+ else:
+ p1=list(patterns)
+ dirfiles={}
+ # split patterns into groups separated by the '+' item
+ pgroups=[list(g)fork,gingroupby(p1,key=lambdax:x!="+")ifk]
+ pgroups=pgroupsor[[]]
+ cpath=asunicodepath(path)
+ cpatterns=[]
+ files=[]
+
+ # Support backslash to identify directory entry on Windows
+ defhasslash(s):
+ returnPurePath(s).name!=s
+
+ forpginpgroups:
+ gpath=tuple(pforpinpgifhasslash(p))
+ iflen(gpath)>1:
+ emsg="Too many directories {!r}.".format(gpath)
+ raiseValueError(emsg)
+ gpatterns=[pforpinpgifpnotingpath]
+ # update current path and patterns when provided
+ ifgpath:
+ (cpath,)=gpath
+ ifgpatterns:
+ cpatterns=gpatterns
+ ap=os.path.abspath(cpath)
+ ifapnotindirfiles:
+ dirfiles[ap]=os.listdir(ap)
+ dirfiles[ap].sort(key=sortKeyNumericString)
+ keepdotfiles=dotfilesorany(p.startswith("^.")forpincpatterns)
+ mp=MultiPattern(cpatterns)
+
+ deffileok(f):
+ path=PurePath(f)
+ return(notpath.name.startswith(".")orkeepdotfiles)andmp.match(str(path))
+
+ files+=(os.path.normpath(os.path.join(cpath,f))forfindirfiles[ap]iffileok(f))
+ # make matching files unique and filter out any directories
+ rv=[fforfinunique_everseen(files)ifos.path.isfile(f)]
+ returnrv
+
+
+
+
+[docs]
+defloaddata(filename,minrows=10,usecols=None,**kwargs):
+"""Find and load data from a text file.
+
+ The data reading starts at the first matrix block of at least minrows rows
+ and constant number of columns. This seems to work for most of the
+ datafiles including those generated by PDFGetX2.
+
+ Parameters
+ ----------
+
+ filename : str
+ Name of the file to load the text data from.
+ minrows : int, optional
+ Minimum number of rows in the first data block, by default 10.
+ All rows must have the same number of floating point values.
+ usecols : int, str, slice, iterable, optional
+ Indices or names of the columns to be loaded from the data block,
+ the default is all columns. Data blocks that do not contain
+ sufficient number of columns are skipped. When usecols contain
+ string items, they are translated to column indices by looking
+ up a header line preceding the data block. String items formatted
+ as ``i:j:k`` are converted to `slice` objects. When usecols type
+ is string it is split to a list of names at comma and whitespace
+ characters.
+ unpack : bool, optional
+ Return data as a sequence of columns that allows tuple unpacking
+ such as ``x, y = loaddata(FILENAME, unpack=True)``. Note that
+ transposing the loaded array as ``loaddata(FILENAME).T`` has
+ the same effect. The default is False.
+ kwargs : misc, optional
+ Extra keyword arguments that are passed to `numpy.loadtxt`.
+
+ Returns
+ -------
+ data : numpy.ndarray
+ The data block loaded from the text file.
+
+ See also
+ --------
+ numpy.loadtxt
+ """
+ fromnumpyimportarray,loadtxt
+
+ # determine the arguments
+ delimiter=kwargs.get("delimiter")
+ ifdelimiterisnotNone:
+ delimiter=delimiter.encode("utf-8")
+ # required at least one column of floating point values
+ mincv=(1,1)
+ # but if usecols is specified, require sufficient number of columns
+ # where the used columns contain floats
+ ifusecolsisnotNone:
+ usecols=_resolveUsedColumns(usecols,filename)
+ ucx=_expandSliceItems(usecols)or[0]
+ hiidx=max(-min(ucx),max(ucx)+1)
+ mincv=(hiidx,len(set(ucx)))
+ _ucx_cache={}
+
+ defgetucx(n):
+ return_ucx_cache.setdefault(n,_expandSliceItems(usecols,n))
+
+ # Check if a line consists of floats only and return their count
+ # Return zero if some strings cannot be converted.
+ defcountcolumnsvalues(line):
+ words=line.split(delimiter)
+ # remove trailing blank columns
+ whilewordsandnotwords[-1].strip():
+ words.pop(-1)
+ nc=len(words)
+ # build a list of selected words `wsel`
+ wsel=words
+ ifusecolsisnotNone:
+ try:
+ wsel=[words[i]foriingetucx(nc)]
+ exceptIndexError:
+ return0,0
+ # test if all selected words can be converted to float
+ try:
+ nv=len([float(w)forwinwsel])
+ exceptValueError:
+ nc=nv=0
+ returnnc,nv
+
+ # make sure fid gets cleaned up
+ withopen(filename,"rb")asfid:
+ # search for the start of datablock
+ start=ncvblock=None
+ fpos=nrows=0
+ forlineinfid:
+ fpos+=len(line)
+ ncv=countcolumnsvalues(line)
+ ifncv<mincv:
+ start=None
+ continue
+ # ncv is acceptable here, require the same number of columns
+ # throughout the datablock
+ ifstartisNoneorncv!=ncvblock:
+ ncvblock=ncv
+ nrows=0
+ start=fpos-len(line)
+ nrows+=1
+ # block was found here!
+ ifnrows>=minrows:
+ break
+ # Return an empty array when no data found.
+ # loadtxt would otherwise raise an exception on loading from EOF.
+ ifstartisNone:
+ rv=array([],dtype=float)
+ else:
+ fid.seek(start)
+ # always use usecols argument so that loadtxt does not crash
+ # in case of trailing delimiters.
+ n=ncvblock[0]
+ kwargs["usecols"]=list(range(n))ifusecolsisNoneelsegetucx(n)
+ rv=loadtxt(fid,**kwargs)
+ returnrv
+
+
+
+deffindColumnNames(headlines):
+"""Obtain a list of unique column names from a list of header
+ lines."""
+ mxtwospace=re.compile(r"(?:\t| )\s*")
+ colnames=[]
+ forlineinreversed(headlines):
+ words=line.split()
+ ifsum(isfloat(word)forwordinwords)>=len(words)//2:
+ colnames=[]
+ continue
+ ifline.lstrip("#").split()[:2]==["start","data"]:
+ continue
+ iflen(words)>1andwords[0]=="#L":
+ w1=words[1:]
+ s1=line.replace("#L","",1).strip()
+ w2=mxtwospace.split(s1)
+ colnames=w2iflen(w2)>1elsew1
+ break
+ ifwordsandwords[0].startswith("#"):
+ words[0]=words[0].lstrip("#").strip()
+ ifnotwords[0]:
+ words.pop(0)
+ ifwordsandall([w[:1].isalpha()forwinwords]):
+ colnames=words
+ break
+ returncolnames
+
+
+defloadColumnNames(filename):
+"""Obtain unique column names from a text file header section."""
+ withopen(filename)asfp:
+ headlines=fp.readlines(32768)
+ rv=findColumnNames(headlines)
+ returnrv
+
+
+def_resolveUsedColumns(usecols,filename=None):
+"""Translate any column names to corresponding integer indices.
+
+ usecols -- an iterable of integers and/or strings. Can be also
+ an integer or a comma or space-separated string.
+ String names are translated to integers according
+ to column names find in the filename.
+ filename -- text data file where column names are looked up.
+ Do not translate column names when not specified.
+
+ Return a new usecols list containing integers only.
+ Raise ValueError if a column name cannot be resolved.
+ """
+
+ defisstr(s):
+ returnisinstance(s,str)
+
+ # (1) convert usecols to a list
+ uc1=[usecols]ifisstr(usecols)elselist(usecols)ifisiterable(usecols)else[usecols]
+ # (2) split string items at ","
+ uc2=sum((c.replace(","," ").split()ifisstr(c)else[c]forcinuc1),[])
+ # (3) convert integer string items to int
+ uc3=[int(c)ifisstr(c)andisint(c)elsecforcinuc2]
+ # (4) convert slice-like string items to slices
+ uc4=[]
+ forcinuc3:
+ ifnotisstr(c):
+ uc4.append(c)
+ continue
+ ifc.count(":")==0orc.count(":")>2:
+ uc4.append(c)
+ continue
+ a0=[w.strip()forwinc.split(":")]
+ ifnotall(w==""orisint(w)forwina0):
+ uc4.append(c)
+ continue
+ # pad a0 to have 3 elements for sure
+ a0+=3*[""]
+ a1=[int(w)ifwelseNoneforwina0[:3]]
+ ss=slice(*a1)
+ uc4.append(ss)
+ # if there are no string identifiers we are done here
+ iffilenameisNoneorall(notisstr(c)forcinuc4):
+ returnuc4
+ # (5) otherwise we need to translate column names to indices
+ colnames=loadColumnNames(filename)
+ colnamesnum=[(n,i)fori,ninenumerate(colnames)]
+ colnamesfixed=_fixColumnNames(colnames)
+ # use the first matching column in case of repeated names.
+ cnmtoidx=dict(reversed(colnamesnum))
+ # fixed names do not repeat so use them as they are.
+ cnmtoidx.update((n,i)fori,ninenumerate(colnamesfixed))
+ uc5=[cnmtoidx.get(c,c)ifisstr(c)elsecforcinuc4]
+ # any string items left are bad names
+ badnames=[cforcinuc5ifisstr(c)]
+ ifbadnames:
+ emsg="invalid column names: %s"%", ".join(badnames)
+ raiseValueError(emsg)
+ # phew, done here.
+ returnuc5
+
+
+def_fixColumnNames(names):
+"""Remove any parentheses and non-alphabetic symbols from a list of
+ names. Ensure the new list of names is still unique.
+
+ Return a new list of names.
+ """
+ rv=[]
+ nameindices={}
+ mxpar=re.compile(r"[(][^)]*[)]")
+ mxnoword=re.compile(r"\W")
+ fori,nminenumerate(names):
+ whilemxpar.search(nm):
+ nm=mxpar.sub("",nm)
+ nm=mxnoword.sub("",nm)
+ rv.append(nm)
+ nameindices.setdefault(nm,[]).append(i)
+ fornm,indicesinnameindices.items():
+ fori,idxinenumerate(indices[1:]):
+ rv[idx]+=str(i+1)
+ returnrv
+
+
+def_expandSliceItems(lst,size=None):
+"""Replace slice items in a list with corresponding indices.
+
+ When `size` is not specified, extract available *start* and
+ *stop* values to determine the necessary length of the sliced
+ array.
+
+ Parameters
+ ----------
+ lst : list
+ The list which may contain `slice` objects.
+ size : int, optional
+ The size of the iterable to be sliced. When specified
+ expand slice objects to corresponding indices.
+
+ Returns
+ -------
+ lst2 : list
+ The new list with slice items expanded. All other items
+ in the input list `lst` are passed unmodified.
+ """
+ rv=[]
+ indices=list(range(size))ifsizeisnotNoneelse[]
+ forxinlst:
+ ifnotisinstance(x,slice):
+ rv.append(x)
+ continue
+ # x is a slice here
+ # (1) expand indices when size is specified
+ ifsizeisnotNone:
+ rv+=indices[x]
+ continue
+ # (2) otherwise extract known slice bounds
+ ifx.startisnotNone:
+ rv.append(x.start)
+ # keep it simple and process only positive x.stop
+ ifx.stopisnotNoneandx.stop>0:
+ ifx.stepisNoneorx.step>0:
+ n=x.stop-1
+ rv.append(n)
+ returnrv
+
+
+deftwoThetaToQ(twotheta,wavelength):
+"""Converts an array from having values in Two-Theta to Q in
+ angstroms.
+
+ twotheta -- An array of two-theta values in degrees
+ wavelength -- The wavelength of the x-ray beam that was used in Angstroms.
+
+ Returns an array of Q values in 1/A units.
+ """
+ fromnumpyimportpi,sin
+
+ Q=4*pi*sin(twotheta/2.0*pi/180)/wavelength
+ returnQ
+
+
+defpylab_draw_show():
+"""Same as calling pyplot draw and show functions."""
+ importmatplotlib.pyplotasplt
+ frombg_mpl_stylesheets.stylesimportall_styles
+
+ plt.style.use(all_styles["bg-style"])
+ plt.rcParams["lines.linewidth"]=1.5
+
+ plt.draw()
+ plt.show()
+ return
+
+
+defunique_everseen(iterable,key=None):
+"""Return a generator to unique ordered elements in an iterable.
+
+ iterable -- an iterable object
+ key -- function that returns key for finding unique items.
+ Use the item value when None.
+
+ unique_everseen('AAAABBBCCDAABBB') --> A B C D
+ unique_everseen('ABBCcAD', str.lower) --> A B C D
+ """
+ seen=set()
+ forelementiniterable:
+ k=elementifkeyisNoneelsekey(element)
+ ifknotinseen:
+ seen.add(k)
+ yieldelement
+ pass
+
+
+defisiterable(obj):
+"""Return True if object supports iteration protocol."""
+ try:
+ iter(obj)
+ rv=True
+ exceptTypeError:
+ rv=False
+ returnrv
+
+
+defisfloat(x):
+"""Return True if string is convertible to float."""
+ try:
+ float(x)
+ rv=True
+ exceptValueError:
+ rv=False
+ returnrv
+
+
+defisint(x):
+"""Return True if string is convertible to int."""
+ try:
+ int(x)
+ rv=True
+ exceptValueError:
+ rv=False
+ returnrv
+
+
+defgetbooleanorpass(value,ignore=None):
+"""Convert value to a boolean or pass it when ignored.
+
+ Parameters
+ ----------
+ value : str, number, object
+ The value to be converted to `bool` or passed unchanged.
+ ignore : container or callable, optional
+ Specify values that should be passed unchanged. When callable
+ pass the `value` as is when `ignore(value)` is true; otherwise
+ check ``value in ignore``.
+
+ Returns
+ -------
+ result : bool or `value`
+
+ Raises
+ ------
+ ValueError
+ When `value` cannot be converted to `bool` and is not ignored.
+ """
+ # check if the value is ignored
+ ifignoreisnotNone:
+ yesignore=ignore(value)ifcallable(ignore)else(valueinignore)
+ ifyesignore:
+ returnvalue
+ # here we need to convert to bool
+ ifisint(value):
+ returnbool(value)
+ boolean_states={
+ "1":True,
+ "yes":True,
+ "true":True,
+ "on":True,
+ "0":False,
+ "no":False,
+ "false":False,
+ "off":False,
+ }
+ v=str(value).lower()
+ ifvnotinboolean_states:
+ emsg="not a boolean: %s"%value
+ raiseValueError(emsg)
+ returnboolean_states[v]
+
+
+defsortKeyNumericString(s):
+"""This function can be used as a key argument for sort to order
+ string items in numeric, rather than alphabetic order.
+
+ s -- string entry
+
+ Return a key for comparison in sorting. The string s is split at
+ integer segments that are then converted to integers. Signs, decimal
+ points and exponents in s are ignored.
+ """
+ ifnothasattr(sortKeyNumericString,"rxdigits"):
+ sortKeyNumericString.rxdigits=re.compile(r"(\d+)")
+ rv=sortKeyNumericString.rxdigits.split(s)
+ rv[1::2]=map(int,rv[1::2])
+ returnrv
+
+
+defasunicodepath(f):
+"""Convert path to unicode if it has any non-ASCII characters.
+
+ f -- file or directory path. May be already unicode or a bytes
+ array.
+
+ Return f if it is already a unicode. Otherwise decode it to unicode
+ using filesystem encoding.
+ """
+ rv=f
+ ifnotisinstance(f,str):
+ rv=f.decode(sys.getfilesystemencoding())
+ returnrv
+
+
+defmulti_delim_split(delims,string):
+"""Extend Python string splitting to splitting on multiple
+ delimiters.
+
+ delims -- an iterable of strings to be used as delimiters for splitting the
+ given string.
+ string -- the string to be split
+
+ Returns a list of strings identical to if str.split(delim) had been called
+ if specifying multiple delimiters in the arguments were supported.
+ """
+ returnre.split(r"|".join(re.escape(delim)fordelimindelims),string)
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/_modules/diffpy/pdfgetx/plotdata.html b/static_root/doc/pdfgetx/2.4.0/_modules/diffpy/pdfgetx/plotdata.html
new file mode 100644
index 00000000..0ed17621
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/_modules/diffpy/pdfgetx/plotdata.html
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+ diffpy.pdfgetx.plotdata — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#!/usr/bin/env python
+##############################################################################
+#
+# diffpy.pdfgetx by DANSE Diffraction group
+# Simon J. L. Billinge
+# (c) 2008 Trustees of the Columbia University
+# in the City of New York. All rights reserved.
+#
+# File coded by: Pavol Juhas
+#
+# See AUTHORS.rst for a list of people who contributed.
+# See LICENSENOTICE.rst for license information.
+#
+##############################################################################
+"""Program for quick plotting of text data files."""
+
+importos
+importsys
+
+fromdiffpy.pdfgetx.logimportplog
+
+# Constants ------------------------------------------------------------------
+
+_PLOTDATA_BANNER="""\
+Use "plotdata" for more plots and "findfiles" to generate file names.
+See "filenames" for the current data files.
+
+"""
+
+# Functions ------------------------------------------------------------------
+
+
+
+[docs]
+defplotdata(filenames,style=None,x=None,y=None,log=None,ax=None,**kwargs):
+"""Plot one or more text data files.
+
+ The files are searched for data blocks which have enough columns
+ to satisfy both `x` and `y` selectors of the plotted data. This
+ may result in an empty plot when file has none wide-enough data
+ block (e.g., when ``y=100``).
+
+ Parameters
+ ----------
+ filenames : str or an iterable of string file names
+ One or more text data files to be plotted.
+ style : str
+ Optional style argument for the matplotlib |plot| function.
+ x : int, str, or iterable, optional
+ The column to be used for the x data. This can be a zero-based
+ index of the desired column or a column name from data header.
+ A special symbol "." can be used for a sequential data index.
+ When not specified, use the first column.
+ y : int, str, iterable, or slice, optional
+ One or more columns to be used for the y data. This can be
+ a single zero-based index of the desired column or an iterable
+ of several indices. The `y` value can be also a string which
+ is split at commas and converted to integers, column names
+ or slice objects, e.g. "0,sine,4:7". The `slice` instances
+ are applied to the entire data block from each loaded file.
+ Use the second column when not specified.
+ log : {'x', 'y'}, optional
+ Set logarithmic scaling for the specified axis and linear scaling
+ for all others. For example, ``log="y"`` applies linear scaling
+ to the x-axis and logarithmic to the y-axis. Keep the current
+ axis scaling when not specified.
+ ax : matplotlib.axes.Axes, optional
+ The axes to plot to. The plotting will be performed using the
+ ``ax.plot`` method. The default is ``pyplot.gca()``.
+ kwargs : misc, optional
+ Keyword arguments for the matplotlib |plot| function.
+
+ Returns
+ -------
+ lines : list
+ The matplotlib |Line2D| objects added to the current axis.
+
+ See also
+ --------
+ diffpy.pdfgetx.loaddata
+ """
+ rv=[]
+ ifisinstance(filenames,str):
+ filenames=[filenames]
+ else:
+ filenames=list(filenames)
+ iflogisnotNoneandlog.strip("xy"):
+ emsg="log argument may only contain the 'x' or 'y' characters."
+ raiseValueError(emsg)
+ ifnotfilenames:
+ returnrv
+ xydatasets=[_loadplotdata(f,x,y)forfinfilenames]
+ linelabels=[os.path.basename(f)forfinfilenames]
+ # import pyplot which starts backend only when unavoidable
+ ifaxisNone:
+ importmatplotlib.pyplotasplt
+ frombg_mpl_stylesheets.stylesimportall_styles
+
+ plt.style.use(all_styles["bg-style"])
+ plt.rcParams["lines.linewidth"]=1.5
+
+ ax=plt.gca()
+ forpargs,plabelinzip(xydatasets,linelabels):
+ ifstyleisnotNone:
+ pargs+=(style,)
+ rv+=ax.plot(*pargs,label=plabel,**kwargs)
+ iflogisnotNone:
+ xscale="log"if"x"inlogelse"linear"
+ yscale="log"if"y"inlogelse"linear"
+ ax.set(xscale=xscale,yscale=yscale)
+ returnrv
+
+
+
+defmain(args=None):
+"""The entry point for the "plotdata" application.
+
+ Parameters
+ ----------
+ args : list of strings, optional
+ Command line arguments for the "plotdata" program.
+ When not specified, use ``sys.argv[1:]``.
+
+ Returns
+ -------
+ exitcode : int
+ The shell exit code of the "plotdata" program:
+
+ = ============================================
+ 0 successful run
+ 1 data file does not exist or invalid argument
+ 2 any other fatal failure
+ = ============================================
+ """
+ fromdiffpy.pdfgetx.functsimportasunicodepath,findfiles,pylab_draw_show
+ fromdiffpy.pdfgetx.interactionimportcreate_ipython_interface,is_ipython_running,to_slist
+
+ args=sys.argv[1:]ifargsisNoneelseargs
+ ipyface=None
+ exitcode=2
+ try:
+ opts,pargs=_processoptions(args)
+ ifopts.openmanual:
+ fromdiffpy.pdfgetx.manualimportopenHTMLManual
+
+ openHTMLManual("plotdata.html")
+ return0
+ filenames=[asunicodepath(f)forfinpargs]
+ ifopts.find:
+ filenames=findfiles(pargs)
+ ifopts.listfiles:
+ forfinfilenames:
+ print(f)
+ return0
+ ifnotfilenames:
+ plog.warning("No input files, nothing to do.")
+ return0
+ ifnotis_ipython_running():
+ ipyface=create_ipython_interface()
+ plotdata(filenames,style=opts.style,x=opts.x,y=opts.y,log=opts.log)
+ pylab_draw_show()
+ exitcode=0
+ ifipyface:
+ # inject the pyplot functions
+ importmatplotlib.pyplotasplt
+ frombg_mpl_stylesheets.stylesimportall_styles
+
+ plt.style.use(all_styles["bg-style"])
+ plt.rcParams["lines.linewidth"]=1.5
+
+ plotfunctions=dict((n,getattr(plt,n))fornindir(plt)ifnotn.startswith("_"))
+ ipyface.push(plotfunctions,interactive=False)
+ # inject plotdata-related functions and variables
+ ipyface.push(dict(plotdata=plotdata),interactive=False)
+ ipyface.push(dict(findfiles=findfiles),interactive=False)
+ filenames=to_slist(filenames)
+ ipyface.push(dict(filenames=filenames),interactive=True)
+ ipyface.mainloop(banner=_PLOTDATA_BANNER)
+ except(OSError,IOError,ValueError)ase:
+ sys.stderr.write("%s\n"%e)
+ exitcode=1
+ exceptSystemExitase:
+ exitcode=e.code
+ # All done here.
+ returnexitcode
+
+
+# Local Helpers --------------------------------------------------------------
+
+
+def_loadplotdata(filename,xi,yi):
+"""Load x and y arrays from filename as per the xi, yi identifiers.
+
+ Return a tuple of (xdata, ydata) that can be used with the plot
+ function.
+ """
+ importnumpy
+
+ fromdiffpy.pdfgetx.functsimport_resolveUsedColumns,loaddata
+
+ xi=_parsecolumnid(xi)
+ yi=_parsecolumnid(yi)
+ ifyiisNone:
+ ifxiisnotNone:
+ emsg="y-column must be specified for explicit x."
+ raiseValueError(emsg)
+ # xi and yi are both None here
+ d=loaddata(filename)
+ ifd.ndim<=1:
+ rv=numpy.arange(d.size,dtype=float),d
+ else:
+ rv=d[:,0],d[:,1]
+ returnrv
+ # here yi is not None
+ ifxiisNone:
+ xi=[0]
+ assertisinstance(xi,list)andisinstance(yi,list)
+ ucx=_resolveUsedColumns(xi)
+ iflen(ucx)>1:
+ emsg="x may not specify more than one column."
+ raiseValueError(emsg)
+ ifany(isinstance(c,slice)forcinucx):
+ emsg="slice is not allowed for x identifier."
+ raiseValueError(emsg)
+ useindex="."inucx
+ uc=yiifuseindexelsexi+yi
+ d=loaddata(filename,usecols=uc)
+ ifd.size==0:
+ returnd,d
+ # ensure 2-dimensional data array
+ ifd.ndim==1:
+ # determine if this is a single row or single column
+ ucr=_resolveUsedColumns(uc)
+ onerow=(len(ucr)>1)orany(isinstance(c,slice)forcinucr)
+ d=d.reshape((1,-1))ifonerowelsed.reshape((-1,1))
+ assertd.ndim==2
+ nrows=d.shape[0]
+ ifuseindex:
+ rv=numpy.arange(nrows,dtype=float),d
+ else:
+ rv=d[:,:1],d[:,1:]
+ returnrv
+
+
+def_processoptions(args):
+"""Process the command line options and arguments.
+
+ args -- command line arguments without argzero
+
+ Return a (opts, pargs) tuple of option values and
+ the remaining positional arguments.
+ """
+ fromoptparseimportOptionParser
+
+ fromdiffpy.pdfgetximport__version__
+
+ parser=OptionParser("usage: %prog [options] file1.dat file2.dat ...")
+ parser.allow_interspersed_args=True
+ parser.version="%prog "+__version__
+ # fix help string for --help
+ oh=parser.get_option("--help")
+ oh.help="Show this help message and exit."
+ parser.add_option("-V","--version",action="version",help="Show program version and exit.")
+ parser.add_option(
+ "--manual",action="store_true",dest="openmanual",help=("Open manual in a web browser and exit.")
+ )
+ parser.add_option(
+ "-f",
+ "--find",
+ action="store_true",
+ help="Use arguments as file name patterns and ""plot the matching files.",
+ )
+ parser.add_option(
+ "-l",
+ "--list",
+ action="store_true",
+ dest="listfiles",
+ help=("List all input files without plotting. ""Should be used with the --find option."),
+ )
+ parser.add_option(
+ "-x",
+ type="string",
+ help="Index or name of the x-column to plot. "'When "." use the data-row index as x.',
+ )
+ parser.add_option(
+ "-y",
+ type="string",
+ help="Index or name of the y-column to plot. "
+ "May contain a comma separated list of several names or "
+ 'indices or Python-like ranges, like "1,2", "G", "0:6:2". '
+ "Column indices are zero based therefore the second column "
+ 'is specified as "1".',
+ )
+ parser.add_option(
+ "-s",
+ "--style",
+ type="string",
+ help="Optional plot style string. See matplotlib "
+ "documentation for the plot function for a list of "
+ "available styles.",
+ )
+ parser.add_option(
+ "-L",
+ "--log",
+ type="string",
+ help="Set logarithmic scaling for the specified x or y axis "
+ 'and linear for all others, for example, "xy", "y" or "".',
+ )
+ opts,pargs=parser.parse_args(args)
+ returnopts,pargs
+
+
+def_parsecolumnid(sx):
+"""Helper function that converts a string column identifier to
+ either None or a list of integer indices, slice objects and string
+ column names, aka something that is digestable as the loaddata
+ usecols argument."""
+ fromdiffpy.pdfgetx.functsimportisiterable
+
+ ifisinstance(sx,str):
+ rv=sx.replace(","," ").split()
+ elifsxisNoneorsx=="":
+ rv=None
+ else:
+ rv=list(sx)ifisiterable(sx)else[sx]
+ returnrv
+
+
+# Kick starter ---------------------------------------------------------------
+
+if__name__=="__main__":
+ sys.exit(main())
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/_modules/index.html b/static_root/doc/pdfgetx/2.4.0/_modules/index.html
new file mode 100644
index 00000000..352c7e25
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/_modules/index.html
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+ Overview: module code — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Configuration files may define the PDF processing parameters.
+By default, the pdfgetx3 program attempts to read
+.pdfgetx3.cfg file from the user HOME directory,
+then .pdfgetx3.cfg and pdfgetx3.cfg files
+from the current working directory.
+If configuration file has a different name, it needs to be specified
+with the -c,--config option.
+The pdfgetn3 program works in the same way,
+except it checks for configuration files
+~/.pdfgetn3.cfg, .pdfgetn3.cfg and pdfgetn3.cfg.
+
The easiest way of creating a configuration file is to generate
+a template content using the --createconfig option as
+
pdfgetx3--createconfig=test.cfg
+
+
+
and then change the generated test.cfg file in your favorite text
+editor. The configuration file follows a simple “varname=value” syntax,
+any lines starting with “#” are ignored as comments.
+
The configuration file has several sections marked as [SECTIONNAME].
+The [DEFAULT] section is mandatory and it contains the default
+global settings. Any other sections are optional and they are applied
+only when selected with the -s,--section option on the
+command line. Thus
+
pdfgetx3--config=test.cfg--section=nacl
+
+
+
would read the parameters from the [nacl] section after reading the
+defaults. Having several sections in the configuration
+file is useful when there are multiple measurements that share most of
+the parameters, but differ in a few of them, for example in chemical
+composition. The configuration file can then contain sections per each
+sample that define only the composition, while all other parameters are
+specified just once in the global DEFAULT section.
PDFgetX3 and PDFgetN3 accept input powder diffraction data
+in the form of two-column text file,
+where the first column x is either the scattering angle
+2Θ in degrees, momentum transfer Q in inverse nanometers or Q
+in inverse ångströms. The second column y contains the corresponding
+scattered intensities normalized per unit solid angle. The actual type
+of the x-values is identified by the dataformat parameter.
+The input files may contain header with comments or metadata, and the
+actual data are read from the first long section of numerical values.
+
The input files are usually passed as command-line arguments to
+pdfgetx3 or pdfgetn3 programs and must be paths
+accessible from the current working directory.
+
Input files can be also defined by setting the inputfile
+value in the configuration file. The -d,--datapath
+option can be then used to provide additional data directories to
+search for these inputs and for the backgroundfile.
+This is to support configuration files located in a different
+directory than the data.
+
When the --find option is active, the pdfgetx3 arguments
+are understood as filename patterns and the input files are found
+in the current or specified directory.
PDFgetX3 and PDFgetN3 can produce up to four different output data files:
+
+
.iq – I(Q), the background-corrected
+intensities sampled on a regular Q-space grid in inverse ångströms,
+
.sq – S(Q), the total scattering structure function,
+with intensities normalized by average scattering factors and
+corrected by a polynomial fit,
+
.fq – F(Q), the reduced structure function equal to Q(S(Q) - 1),
+
.gr – G(r), the resultant PDF, where the first column is the
+separation r in ångströms and the second is the function G in
+Å-2.
+
+
You can specify what output files should be produced by setting the
+outputtypes parameter in the configuration file or by
+passing the -t,--outputtypes on the command line.
+
The header of all output files contains the parameter values that were
+used in the calculation and thus it is by itself a valid configuration
+file. When passed as an argument to the --config option,
+the PDFgetX3 will reproduce the previous calculation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/genindex.html b/static_root/doc/pdfgetx/2.4.0/genindex.html
new file mode 100644
index 00000000..b495c1f3
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/genindex.html
@@ -0,0 +1,879 @@
+
+
+
+
+
+
+
+ Index — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This software is written in Python programming language, therefore
+you must have Python 3.13, 3.12, or 3.11 installed. In addition,
+the following third-party Python libraries are also required:
+
+
pip - Python package installer
+
setuptools - tools for installing Python packages
+
NumPy - library for scientific computing with Python
Another more convenient option is to obtain one of the science-oriented
+Python distributions such as
+Anaconda Python,
+Enthought Canopy or
+PythonXY,
+These distributions already include all the necessary libraries, so the
+required Python software can be all installed in one step.
+
On Linux operating systems the third-party libraries are usually
+included in a system software repository. For example on an
+Ubuntu Linux computer the software dependencies can be all installed
+with a single shell command
This may be, of course, as well accomplished using the GUI
+driven Synaptic package manager. Other Linux
+distributions may use different software management tools,
+but the names of the necessary packages should be very similar
+to those above.
+
On Windows operating system, it may be necessary to add the
+C:\Python37 directory and the scripts directory
+C:\Python37\Scripts to the system PATH. Some Python
+distributions already do so as a part of their installation process. The
+easiest way to check is to start the Command Prompt, type
+there python and see if this starts the Python interpreter.
+
Alternately, if you want to run the diffpy.pdfgetx software with a specific version of Python,
+we recommend using a virtual environment, such as conda. For example, if you have Anaconda Python installed,
+you can create a conda virtual environment to install the software as follow
You can choose the name of the environment and python version as you desire. You can choose any of the
+supported Python versions. Then, activate this environment and follow the instructions in the
+next section to install the software
The diffpy.pdfgetx software is distributed as a Python wheel file,
+which can be obtained from the
+Columbia Technology Ventures.
+Once all the required software is in
+place, start the command prompt on Windows or a Unix terminal on Linux
+or Mac, navigate to the directory that contains the wheel file and
+execute the following command:
+
pipinstall./diffpy.pdfgetx-VERSION.whl
+
+
+
Here VERSION needs to be replaced to match the actual filename. It is
+critical that pip installer is from a supported Python version otherwise
+the program would not work. On Linux and Mac operating systems the installation may need to run with root user privileges, for example, by prepending sudo to the command line above. If root access is not available, use the pipinstall options --user or --prefix to install the software to a user-writable directory.
+
The package provides three programs for PDF conversion, pdfgetx3, pdfgetn3 and pdfgets3. To check if they are correctly installed run
This should display the software version, which should agree
+with the VERSION string in the wheel package name.
+The installation also includes a plotdata
+command for an easy plotting of text data files. To verify
+if plotdata works, run the plotdata--version command.
+Finally, a comprehensive test of the installed software can
+be executed using
+
python-mdiffpy.pdfgetx.tests.run
+
+
+
+
Note
+
Older versions of diffpy.pdfgetx use Python egg format
+instead of Python wheel.
+To install these use the easy_install command as follows:
These instructions are intended for IPython users who would like to
+integrate PDFgetX3, PDFgetN3 and PDFgetS3 into their IPython environment. If
+you don’t plan to customize IPython in such way you can safely skip
+this paragraph.
+
When pdfgetx3 or pdfgetn3 or pdfgets3 is run in interactive mode, it start
+IPython interactive shell and define an extra %pdfgetx3, %pdfgetn3 and %pdfgets3 magic commands within the IPython session. The IPython
+magic commands are not valid Python code, but work in a similar
+fashion as standard shell commands. The %pdfgetx3, %pdfgetn3 and %pdfgets3 magics can be thus used with the same options and arguments as if run from the shell. This is useful for processing more files, while
+preserving all plots or variables that were already created
+in an IPython session.
+
The %pdfgetx3, %pdfgetn3 and %pdfgets3 magic commands can be defined
+permanently so they are available in all IPython sessions. To set
+this up
+
+
find the profile_default/ipython_config.py file and open it
+in a text editor. If that file does not exists,
+create it first by executing
+
ipythonprofilecreate
+
+
+
+
navigate to the paragraph that contains the
+c.InteractiveShellApp.extensions and add there
+the following line
The interactive mode is activated by using either the
+-i,--interact option or a non-empty
+--plot option. In the interactive mode
+the program starts an IPython interactive shell and pre-loads several
+functions and variables related to the PDF calculation. It also defines
+IPython commands %pdfgetx3 and %pdfgetn3, which can be used with
+the same syntax as the pdfgetx3 and pdfgetn3 in
+system shell.
+The interactive session is also initialized with all functions from the
+matplotlib.pyplot module for convenient plotting.
+The functions and variables related to PDF processing are:
Instance of the PDFGetter class which serves as a
+low-level function that calculates the PDF. This is a callable
+object, which takes as an argument a pair of input arrays for
+(Q, intensity) or (2Θ, intensity) depending on
+dataformat. It can be also called with a keyword
+argument filename=FILE, which would read the input arrays
+from the specified file. When called with no arguments,
+it calculates PDF from the last input data.
+
+
Parameters:
+
+
x (numpy.ndarray, optional) –
+The Q or 2Θ values in powder diffraction pattern.
+
y (numpy.ndarray, optional) –
+The scattered intensities in powder diffraction pattern
+
filename (str, optional) –
+The text data file for loading the x, y values when
+they are not specified.
+
kwargs (misc, optional) –
+Extra keyword arguments that are applied to
+the config object, for example qmax=20.
Instance of the PDFConfig class that stores the
+parameters and input files for the program.
+Use print(config) to display the current configuration values.
+This is the same object as pdfgetter.config. Configuration
+may be changed by setting a respective attribute of the
+config object, for example:
+
In[1]:config.qmax=21
+
+
+
The config values may be also changed by calling the
+pdfgetter() or processfiles() function with a
+corresponding keyword argument, for example
+processfiles(qmax=20,force="once").
These variables are assigned the input raw intensities and the
+intermediate results, stored as matrix rows. The matrix rows
+correspond to twotheta1, intensity1, twotheta2, intensity2, etc.
+Because matrices are iterated row first, the raw intensities
+from all input files can be plotted with the matplotlib plot
+function as plot(*iraw).
+
These variables should be considered read-only and are reset
+with subsequent PDF calculations.
Show a GUI dialog for interactive tuning of configuration variables.
+
+
Parameters:
+
+
plotids – The string or iterable that specify what interactive plots should be
+tuned. By default the same as config.plot. It can be also an
+integer index or name of a transformation in pdfgetter() or
+a reference to a Transformation object.
+
pdfgetter – The optional PDFGetter object to be tuned.
+This is by default the interactive pdfgetter() object.
+
axeslist – An optional list of matplotlib Axes for showing interactive plots.
+When None, use subplot(N,1,i) to create any necessary axes.
+
+
+
+
+
Note
+
Changes from tuneconfig() apply only to the configuration
+and results in memory. Use the processfiles() function
+to save them to disk.
Process all input files again with the current configuration values.
+This is a higher-level function than pdfgetter(), as
+it also saves output files and produces plots as specified by the
+config object.
+
+
Parameters:
+
+
filename – One or more input files to be converted to PDFs and saved or
+plotted according to the config settings. Use the
+previous list of input files when not specified.
+
kwargs – An optional keyword arguments to set for the config
+object, for example (force="once",qmax=18).
The data reading starts at the first matrix block of at least minrows rows
+and constant number of columns. This seems to work for most of the
+datafiles including those generated by PDFGetX2.
+
+
Parameters:
+
+
filename (str) – Name of the file to load the text data from.
+
minrows (int, optional) – Minimum number of rows in the first data block, by default 10.
+All rows must have the same number of floating point values.
+
usecols (int, str, slice, iterable, optional) – Indices or names of the columns to be loaded from the data block,
+the default is all columns. Data blocks that do not contain
+sufficient number of columns are skipped. When usecols contain
+string items, they are translated to column indices by looking
+up a header line preceding the data block. String items formatted
+as i:j:k are converted to slice objects. When usecols type
+is string it is split to a list of names at comma and whitespace
+characters.
+
unpack (bool, optional) – Return data as a sequence of columns that allows tuple unpacking
+such as x,y=loaddata(FILENAME,unpack=True). Note that
+transposing the loaded array as loaddata(FILENAME).T has
+the same effect. The default is False.
+
kwargs (misc, optional) – Extra keyword arguments that are passed to numpy.loadtxt.
+
+
+
Returns:
+
data – The data block loaded from the text file.
+
+
Return type:
+
numpy.ndarray
+
+
+
+
See also
+
numpy.loadtxt
+
+
This function can be imported from the
+diffpy.pdfgetx module.
The files are searched for data blocks which have enough columns
+to satisfy both x and y selectors of the plotted data. This
+may result in an empty plot when file has none wide-enough data
+block (e.g., when y=100).
+
+
Parameters:
+
+
filenames (str or an iterable of string file names) – One or more text data files to be plotted.
+
style (str) – Optional style argument for the matplotlib plot() function.
+
x (int, str, or iterable, optional) – The column to be used for the x data. This can be a zero-based
+index of the desired column or a column name from data header.
+A special symbol “.” can be used for a sequential data index.
+When not specified, use the first column.
+
y (int, str, iterable, or slice, optional) – One or more columns to be used for the y data. This can be
+a single zero-based index of the desired column or an iterable
+of several indices. The y value can be also a string which
+is split at commas and converted to integers, column names
+or slice objects, e.g. “0,sine,4:7”. The slice instances
+are applied to the entire data block from each loaded file.
+Use the second column when not specified.
+
log ({'x', 'y'}, optional) – Set logarithmic scaling for the specified axis and linear scaling
+for all others. For example, log="y" applies linear scaling
+to the x-axis and logarithmic to the y-axis. Keep the current
+axis scaling when not specified.
+
ax (matplotlib.axes.Axes, optional) – The axes to plot to. The plotting will be performed using the
+ax.plot method. The default is pyplot.gca().
+
kwargs (misc, optional) – Keyword arguments for the matplotlib plot() function.
+
+
+
Returns:
+
lines – The matplotlib Line2D objects added to the current axis.
^start - match “start” only at the beginning of the string.
+
end$ - match “end” only at the end of string.
+
<7> - match number 7 preceded by any number of leading zeros.
+
<1-34> - match an integer range from 1 to 34 inclusive.
+
<7-> - match an integer greater or equal 7.
+
<-> - match any integer.
+
+ - start a new group of patterns to match more files.
+
dir/ - set search path effective from the current pattern group.
+
+
All integer ranges <N-M> above allow one or more leading zeros.
+The range syntax does not support matching of negative numbers.
+
+
Parameters:
+
+
patterns (iterable of strings or str, optional) – String patterns that must all match in returned filenames.
+Can be also a single string with patterns separated by
+whitespace characters. When empty match all files in the
+current directory or in the path. A single + starts
+a new pattern group for additional matches. Each pattern
+group may have one entry containing /, for example,
+dir/ or ./, which sets the search directory for
+this and subsequent pattern groups. When pattern group
+contains only the path entry it reuses file patterns from
+the previous group.
+
path (str, optional) – Directory to be searched for the files. The default is “.”
+to search the current directory.
+
dotfiles (bool, optional) – When True search also the hidden “.” starting files. These
+files are by default ignored, but can be explicitly selected
+by adding the ^. pattern.
+
+
+
Returns:
+
filenames – The list of matching filenames. Return all files when
+patterns are not specified.
+
+
Return type:
+
list
+
+
+
This function can be imported from the
+diffpy.pdfgetx module.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/intro.html b/static_root/doc/pdfgetx/2.4.0/intro.html
new file mode 100644
index 00000000..c01b9e31
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/intro.html
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+ Introduction — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diffpy.pdfgetx is a simple yet powerful software for converting X-ray or
+neutron powder diffraction data to atomic Pair Distribution Functions
+(PDFs). In addition, it also allows the extraction of PDFs from small-angle
+scattering (SAS) data. The software includes three command line programs
+PDFgetX3, PDFgetN3 and PDFgetS3 for processing X-ray,
+constant-wavelength neutron and small-angle diffraction data
+respectively. PDFgetX3, PDFgetN3 and PDFgetS3 can be used in a batch
+mode to convert a series of data files without user intervention. The
+programs can be also run in an interactive mode that allows to control
+process parameters and plot the PDFs and any intermediate results. Users
+can interactively tune the PDF processing parameters, visualize their effect on the results and adjust them to their optimum values. The programs are bundled with Python library diffpy.pdfgetx for PDF processing functions, which can be used in custom Python scripts.
Use of this software is subject to and permitted only under a separate,
+written Use License granted by Columbia University. If you or your employer
+is not a party to such an agreement, then your use of this software is
+prohibited. If you don’t know whether or not your anticipated use is under
+a license, you must contact Prof. Simon Billinge at sb2896@columbia.edu.
+Use of this software without a license is prohibited.
+
Copyright 2009-2025, Trustees of Columbia University in the City of New York.
+
For more information please email Prof. Simon Billinge at sb2896@columbia.edu
This code was written by members of the Billinge Group at
+Columbia University and Brookhaven National Laboratory including
+Pavol Juhás,
+Timur Davis,
+Chia-Hao (Timothy) Liu,
+Christopher Wright,
+Christopher Farrow,
+Connor J. Bracy,
+Hung Vuong,
+Songsheng Tao,
+Simon Billinge.
If you use this program for a scientific research that leads
+to publication, we ask that you acknowledge use of the program
+by citing the following paper in your publication:
For research publications utilising the sasPDF utility, PDFGetS3, we ask you to acknowledge the use of the program by citing following paper in your publication:
PDFgetX3, PDFgetN3 and PDFgetS3 are very flexible in allowing users to customize
+the actions of the program. They have a number of parameters that can
+be specified either in configuration file or as command line options.
+Here is a complete description of the parameters and options used by
+either program.
+
+
Note
+
The command line options start with a leading “-” and can
+be only used as command line arguments when starting the
+pdfgetx3 program. Within configuration file the parameter
+names are plain words without any leading dashes. Finally,
+parameters can be also set in the interactive mode as attributes of
+the config object, but the assignments must be valid
+Python statements. Here are examples of setting composition of
+a processed specimen using each of these forms:
+
+
assigned in configuration file:
+
...
+composition=CaTiO3
+...
+
+
+
+
set as a command-line option when starting pdfgetx3 or
+pdfgetn3:
Select input files that match all patterns. The command
+line arguments are by default taken as input files. However,
+with the --find option they are processed as
+file patterns and the matching files are then used as inputs.
+The input files are by default searched in the current directory
+unless there is a path entry (e.g., data/) that
+selects a different search path. The search patterns are
+interpreted as fixed strings, all of which must be present
+in the file name. A single argument + starts
+a new group of patterns to match more files that are not
+covered by one set of patterns. Additional pattern
+groups reuse the current search path unless they provide
+their own path value. Pattern groups containing only
+a path entry reuse file patterns from the last group.
+When pattern groups overlap the repeated matches are ignored
+to make the resulting list of files unique. Files starting
+with . are ignored unless there is ^. pattern
+that explicitly matches them. The search
+syntax provides the following special patterns:
+
+
+
^
+
match at the beginning of the string, i.e., ^start
+matches only filenames that start with “start”.
+
+
$
+
match at the end of string, for example, .chi$ selects
+file names ending with “.chi”. A $ on its own
+matches every string and can be used to select all files.
+
+
<N>
+
match number N preceded by any number of leading zeros,
+e.g., <7> would match in “f7.chi”, “f007.chi”, but not
+in “f77.chi”.
+
+
<N-M>
+
match an integer range from N to M inclusive.
+The matched number may have one or more leading zeros.
+
+
<7->
+
match number 7 or larger.
+
+
<-7>
+
match number 7 or smaller.
+
+
<->
+
match any integer number.
+
+
+
+
start a new pattern group, for example, .chi$+.dat$
+
+
/
+
set search path. An argument containing the / symbol
+is taken as the search path, for example, data/ or
+./. Each pattern group may provide its own search
+path effective for that and any subsequent pattern group.
+
+
+
+
The ^$<> characters are often special to Unix or Windows
+command shells, therefore they need to be enclosed in double
+quotes (\”) when used on command line.
Load the custom configuration file section [SectionName] after
+loading the [DEFAULT] section. This is useful for creating
+several configuration variants in a single configuration file.
This parameter allows to specify one or more input files in the
+configuration file, one file per line. The inputfile
+is only used if no input files were provided on the
+pdfgetx3 or pdfgetn3 command line.
Format of input files. Available formats are: twotheta, QA,
+Qnm corresponding to a two-column text data where the first
+column is either the scattering angle 2Θ in degrees, Q in
+inverse ångströms or Q in inverse nanometers.
Form factor intensities of the scatterers. This is required for sas mode. The form factor file is expected to be in two-column format with (Q, f2avg) data or three-column format with (Q, f2avg, favg2) data. The unit of Q is required to be A^-1.
One or more extra directories to be searched for input or
+background data files. The -d option can be specified
+several times to add more directories, these are prepended in front
+of any default value. Within configuration file the datapath
+directories have to be listed each on a separate line.
+
A special value “NONE” (or “none”) clears any previously defined
+paths and only the further paths, if any, would be searched for
+inputs.
Output file name, write to the standard output when “-”. The
+-t,--outputtypes option controls what results are
+being saved. Normally the OUTPUT is used as a custom basename for
+the output files. The OUTPUT may contain @f, @h, @r, @e, @t, @b, @o
+tokens, which are expanded as follows:
+
+
+
token
+
example
+
definition
+
+
+
+
@h
+
dir1/dir2
+
the input file directory or “.”
+
+
@r
+
dir1/dir2/filename
+
the input path with extension removed
+
+
@e
+
dat
+
the input file extension without “.”
+
+
@t
+
filename.dat
+
the tail component of the input file
+
+
@b
+
filename
+
the tail component with extension removed
+
+
@o
+
gr
+
the output extension iq, sq, fq or gr
+
+
+
+
An empty value works the same as “@b.@o” and saves the data
+in the current directory with a proper extension for the
+saved results. When “@o” is not present in the OUTPUT, it is
+appended as a default filename extension.
Result types to be saved, one or more comma separated values.
+Supported values are “iq”, “sq”, “fq”, “gr”, corresponding to the
+I(Q), S(Q), F(Q) and G(r) curves; these are also used as output
+file extensions.
+
Result files are not written when empty, “none” or “NONE”.
Overwrite existing output files. By default the output
+files are not written if they already exist. Possible values
+in a configuration file are “true”, “yes”, “on”, “1” or
+“false”, “no”, “off”, “0” or “once”. The special value “once”
+permits one overwrite and then resets config.force to
+False. Note that in interactive mode the values assigned
+to config.force are converted to Python bool
+unless equal to “once”.
The PDF conversion mode, i.e., the name of the
+pdfgetter() setup. The available modes correspond
+to the radiation type used in powder diffraction experiment and can
+be “xray” or “neutron”.
X-ray wavelength in ångströms. This value is required
+for the “twotheta” dataformat in order to convert the scattering
+angles 2Θ to a momentum transfer Q. For other data formats
+the wavelength is not necessary and may be left undefined.
Position of the zero scattering angle in diffractometer degrees.
+This parameter corrects for a constant offset in the
+measured 2Θ values. When loading configuration file
+it is assumed 0 unless specified otherwise. This parameter
+is only effective for the “twotheta” dataformat.
Chemical composition of the sample. Supported formats are
+“PbTi0.5Zr0.5O3”, “Pb 1 Ti 1/2 Zr 1/2 O 3” or “CH3 (CH2)3 OH”.
+Space characters are ignored, unit counts can be omitted, but it is
+important to use a proper upper and lower case in atom symbols.
+Elements can appear several times in the formula, e.g., “CH3 CH3”,
+and the formula may contain parentheses or fractional
+stoichiometries.
r-limit for the maximum frequency in the F(Q) correction polynomial.
+The PDF is unreliable at shorter r, however a
+very small rpoly would disable polynomial correction and
+give noisy PDF.
+Larger values produce closer fits with a higher degree polynomial,
+but when too large, they might smooth-out a useful signal in the
+data. The default is 0.9.
The Q cutoff for the meaningful input intensities in inverse
+ångströms. Some data files may contain trailing zeros
+or unreliable intensities at the upper bound of the detector range.
+The qmaxinst defines a threshold for unreliable data.
+The parameter is also used as an upper boundary for the polynomial
+fit correction of the S(Q) data.
The upper Q-limit for the Fourier transformation of the F(Q) curve
+in inverse ångströms. This is essentially a limit, where sample
+signal decays to the level of data noise.
Optional list of termination functions to apply to the F(Q) data
+before the Fourier transformation to the G(r) curve.
+
Termination functions help reduce termination ripples caused by the
+finite Q-range. Each function tapers or truncates the F(Q) signal
+between qmin and qmax.
+
This parameter may be specified as:
+
+
a single function name from the supported list
+
a list of comma-separated or space-separated function names, to be applied in order
+
the alias terminationfunction is also accepted
+
+
Supported function names:
+
+
step
Hard cutoff window. Sets F(Q) = 0 for
+Q < qmin or Q > qmax.
Plot the specified results. A comma separated list with one or
+more items from “iq”, “sq”, “fq”, “gr”. No plot is produced when
+empty, “none” or “NONE”. Setting this option turns on the
+interactive mode.
Start an IPython interactive session after processing all files.
+Useful for tuning the configuration parameters or interactive
+plotting. This is always on when plot option has been set.
+See also Interactive mode for further details.
Level of detail for the program to report about its actions.
+Possible values are “error”, “warning”, “info”, “debug”, “all” or an
+integer number from 0 to 5. Messages are completely suppressed when
+0, all messages are printed when verbose is 5 (“all”) or higher.
+This option is useful for diagnostics of any unexpected behavior
+in the program.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/plotdata.html b/static_root/doc/pdfgetx/2.4.0/plotdata.html
new file mode 100644
index 00000000..8ef9e772
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/plotdata.html
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+ The plotdata program — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The PDFgetX3 software includes a simple stand-alone utility
+plotdata for plotting text data files. In most cases
+this program can be invoked from a command-shell as
+
plotdatafile1.datfile2.dat
+
+
+
which plots the numerical data from the text files file1.dat,
+file2.dat together in a single graph. By default the first
+column is used as an x variable and the second column is used for the
+y values. After displaying the plot the program starts an IPython
+interactive session allowing the user to modify or save plots. The
+IPython session is initialized with the filenames variable
+containing a list of plotted files. It also pre-loads the
+plotdata() and findfiles() functions just as in PDFgetX3
+interactive session. The plotdata()
+function works in a similar way as the plotdata program,
+just its arguments need to be passed as Python function arguments
+instead of command-line options. Thus an equivalent call of the
+plotdata() function would be:
The plotdata program includes a file searching feature
+that is useful for selecting a set of files in large
+directories. It is also convenient for Windows operating systems,
+where the command prompt cannot do filename expansion for patterns
+such as *.dat. The file search feature is controlled by the
+following options:
Use command line arguments as filename patterns and plot all matching
+files. This option works in the same way as for
+pdfgetx3, for full details see the
+pdfgetx3--find documentation. Note that
+within command line the special patterns ^$<> need to be quoted
+in double quotes (\”) so they are not processed by command shell.
List the input files and exit. This is useful in conjunction
+with the -f,--find option to check if data files
+are selected as intended.
+
+
+
Assuming the current directory contains 20 files named
+file1.dat, file2.dat, …, file20.dat,
+the plotting of files 9 to 13 could be done (with a check listing)
+as follows
The plotdata program provides several ways of selecting
+columns for x or y data and for specifying plot markers or line
+formats. The columns can be specified using their integer index,
+but one needs to keep in mind the index of the first column is “0”
+as per Python indexing conventions. Here is a list of options
+supported by the plotdata program (and function):
index or name of the x-column to plot. See the -y option
+for the supported syntax, but note that X may select only one
+column. When set to “.” use the data-row index for x.
index or name of the y-column or columns to plot. The Y column
+specification can be a comma separated list of indices, column names
+or Python-like ranges, for example “1,2”, “G”, “1:4” (START:STOP,
+same as “1,2,3”), “1:4:2” (START:STOP:STEP, same as “1,3”), or
+“-2:” (same as “-2,-1”, i.e, the last 2 columns). Because column
+indexing starts at “0” the second column must be specified as “1”.
+
The column names work if the data section in the file is preceded by
+a headline of unique column names, for example:
+
xsquarecube
+111
+248
+3927
+41664
+
+
+
For such data file the plotdata program will recognize column names
+“x”, “square” and “cube” and an implicit “.” for row index.
The examples directory plotdata contains a sincos.dat
+file that has 3-columns of values labeled as “x”, “sin” and “cos”.
+Here are several examples of the plotdata capabilities
+when used from command line - the user is encouraged to try them out:
This guide assumes that the software has been correctly installed and
+its command line programs PDFgetX3, PDFgetN3 and PDFgetS3 can be
+executed by typing pdfgetx3, pdfgetn3, or
+pdfgets3 in a shell window. Please, refer to the installation section if this is not working yet.
The pdfgetx3 program is a command-line application, therefore all
+the input files and run-parameters are supplied either as command-line
+arguments or through a configuration file. In general, the pdfgetx3 is
+executed from a command shell as
+
pdfgetx3[options]input1input2...inputN
+
+
+
The inputN stands for an input powder diffraction data. The
+inputN file is a simple two-column text file, where the first
+column corresponds to either the 2Θ diffraction angle, or a
+momentum transfer, Q, in inverse nanometer or inverse ångström units.
+The second column contains the corresponding X-ray intensities. The
+input file may start with a header containing comments or metadata
+related to the measurement. PDFgetX3 will ignore any text leading to a
+long two-column section. The example input files in this manual were
+created with the
+FIT2D program using
+its “chi” output format, thus we will also refer to them as “chi-files”.
+A typical content of a “chi” file looks as follows:
The command-line options are arguments that start with a dash “-” and
+are used to specify run-parameters or modify the program behavior. The
+options can be specified in a short form that consists of a dash and
+a single character, or in a long, more descriptive format starting with
+a doubled dash --. Options may require values. For short options,
+the value may be joined to the option string, for example
+-w0.142774, while for the long options it has to be separated
+with an equal sign, e.g., --wavelength=0.142774. Although
+all the PDF calculation parameters can be passed as command line
+options, it is often more convenient to set them in a configuration
+file. When run parameter is present both in a configuration file and
+as command-line option, the command-line value takes precedence. The
+command-line options are all described in the Options and parameters section of
+this manual. A brief summary of options can be also displayed by
+executing
+
pdfgetx3--help
+
+
+
The best way of getting familiar with PDFgetX3 is to process
+the example diffraction data described in the Tutorial.
+In general, the first step is to create a commented configuration file pdfgetx3.cfg using:
+
pdfgetx3--createconfig=pdfgetx3.cfg
+
+
+
The configuration file can have any name, but it is preferable
+to use either pdfgetx3.cfg or .pdfgetx3.cfg,
+for these files are automatically loaded by PDFgetX3. All
+other configuration files must be passed explicitly to the program
+using the -c,--config option.
+
Open the pdfgetx3.cfg file in a text editor. The lines that
+start with a hash mark # are comments and are not used. The lines
+starting with a right brace [ denote sections in the configuration
+file. The active lines are all formatted as
+“NAME=VALUE”. Although PDFgetX3 has many options, in general only a few
+of them are critical for the PDF calculation:
qmaxinst – upper Q boundary for a meaningful measurement
+intensities.
+
qmax – Q-cutoff for the Fourier transformation that
+yields the PDF.
+
+
Save the updated configuration file and run pdfgetx3 on the input data
+FILENAME.chi as
+
pdfgetx3--verbose=info-tgrFILENAME.chi
+
+
+
Here the --verbose=info option makes pdfgetx3
+print
+more information about its operation. This helps to verify
+if the configuration file is indeed loaded and if the parameter
+values are assigned as intended. The PDFgetX3 will not write
+any output files unless told so. The -tgr option
+tells the program to save the final G(r) curve as a
+FILENAME.gr file in the working directory.
+
The saved .gr file contains a header with all the calculation
+parameters and the input file name. The .gr file can be therefore
+also used as a configuration file in order to redo the same
+calculation
+
pdfgetx3-cFILENAME.gr--plot=fq,gr
+
+
+
Note this command does not include any .chi file and this will as
+a result process the previously used input FILENAME.chi.
+The --plot=fq,gr option tells PDFgetX3 to
+display 2 plots for the reduced structure function F(Q) and the
+final PDF G(r). The --plot option also implies an
+interactive mode
+therefore the program does not exit, but starts an
+interactive IPython session. To exit the interactive mode,
+type exit() and press Enter.
The pdfgetx3 and pdfgetn3 programs operate in a very similar fashion
+apart from being set to assume X-ray and neutron data respectively.
+The type of the scattering data can be also specified using the
+--mode option. Running pdfgetn3 is nearly identical
+to executing pdfgetx3--mode=neutron. The only difference between
+these commands is that pdfgetx3 checks for configuration files
+pdfgetx3.cfg and .pdfgetx3.cfg, whereas
+pdfgetn3 looks for pdfgetn3.cfg and .pdfgetn3.cfg.
The pdfgets3 program is virtually the same as its counterparts for x-ray
+(pdfgetx3) and neutron (pdfgetn3) diffraction data. The only difference
+is that instead of referencing the well documented x-ray or neutron
+scattering form factor data, a user-defined form factor data is used
+for getting the PDF from a small-angle scattering (SAS) data. This
+behavior is enabled by specifying mode=sas in the configuration
+file or in the command line tool. The pdfgets3 program by default
+searches for a configuration named pdfgets3.cfg and
+.pdfgets3.cfg in order, when no configuration file is specified.
+
Please refer to the tutorial section for a step-by-step processing of the example data files and for demonstration of the capabilities in PDFgetX3, PDFgetN3 and PDFgetS3.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/release.html b/static_root/doc/pdfgetx/2.4.0/release.html
new file mode 100644
index 00000000..b41b8aad
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/release.html
@@ -0,0 +1,415 @@
+
+
+
+
+
+
+
+
+ Release notes — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Changed self.guifigure.canvas.set_window_title to
+self.guifigure.canvas.manager.set_window_title in
+tuneconfig() to satisfy deprecated usage in matplotlib > 3.4
Added new API for accessing intermediate I(Q) plots as properties on
+PDFGetter instances via properties following a naming convention of
+PDFGetter.iq_<i>, where i is a zero‐based index of the intermediate
+I(Q) to be returned. That is, rather than a single property returning an
+array of the I(Q)’s that would then be indexed, users may directly name
+an intermediate I(Q) (say, the first I(Q)) via a statement such as
+PDFGetter.iq_0.
+
+
Fixed:
+
+
Restored previous API behavior of PDFGetter.iq returning the I(Q) plot
+of the data. Since there are now multiple I(Q) plots (one after each
+subsequent background subtraction), this property now returns the final
+I(Q) data (i.e., the result of applying all background subtractions).
+
Fixed formatting of authors list on PDFgetXNS3_manual.pdf cover page.
Tutorial example for multiple background subtractions (see
+diffpy.pdfgetx/docs/examples/Multiple_Background_Subtraction).
+
New functionality for allowing multiple backgrounds to be subtracted from a
+dataset accessed via using the plural name equivalent of any previously
+singularly named variable (i.e., bgscale → bgscales,
+backgroundfile → backgroundfiles, etc.) in both static config files
+(i.e., *.cfg) and interactive plotting sessions. Each set of parameters
+corresponding to a given background subtraction can also be manipulated by
+a set of sliders present in the tuneconfig window of an interactive shell
+session. In total, the multiple background subtraction functionality should
+work identically to the previous single background subtraction functionality
+except that the multiple background files and initial scale values cannot
+be specified through a pure CLI command (i.e., it must be specified either in
+a config file or added/modified during an interactive plotting session).
+
Added extra test cases for testing the PDFGetter class.
+
Added extra test cases for testing the PDFConfig class.
+
+
Changed:
+
+
Changed python versions specified in requirements.txt files to be in the range
+of the respective minor version rather than fixed to the Python X.Y.0 version.
Fixed the command provided to the users in the installation instructions which
+incorrectly instructed them to setup a Python environment in which pdfgetx
+could be installed by using the flag –python=3.8 to the correct usage of
+this flag as python=3.8.
New mode sas for processing Small Angle Scattering data and for using custom
+scattering factors.
+
qmax-pushes-qmin coupling of sliders in the tuneconfig tool.
+
New program pdfgets3 and IPython magic %pdfgets3.
+
+
Changed:
+
+
Software distribution format to a universal Python wheel.
+
tuneconfig dialog to access full Q-range with all qmin, qmax, and qmaxinst
+sliders. Increased range for the rpoly slider.
+
+
Deprecated:
+
+
Software distribution in setuptools egg package.
+
+
Removed:
+
+
Removed support for Python 3.4.
+
+
Fixed:
+
+
Support backslash in the –find option path argument on Windows.
+Both forward and back slashes are allowed on Windows, but other
+platforms must use forward slash.
+
Recipe for platform-dependent Anaconda package.
+
Bogus test failure when installed in symlinked directory.
New mode neutron for processing constant-wavelength neutron scattering data.
+
Correction for an offset of diffractometer zero angle.
+
Configuration parameter twothetazero and command-line option –twothetazero
+for position of the actual zero angle in diffractometer degrees.
+
New program pdfgetn3 and IPython magic %pdfgetn3.
+
Separate configuration file pdfgetn3.cfg for the pdfgetn3 program.
+
New sub-package diffpy.pdfgetx.apps for entry points to all programs.
+
Table of electron scattering factors from E. J. Kirkland, Advanced Computing in
+Electron Microscopy.
+
The + operator for additive pattern groups when matching input files with
+pdfgetx3 –find.
+
An optional slash-containing entry, e.g., dir/, to set the search path for
+pdfgetx3 –find. Each pattern group may have one path entry which affects
+the current and subsequent pattern groups. Pattern groups that have only the
+path entry reuse the previous file patterns, for example, dir1/ .dat$ + dir2/ + dir3/.
+
The dotfiles flag argument to functs.findfiles to also find dot-starting files
+without an explicit pattern.
+
Support for Python 3.7.
+
Tutorial examples for constant-wavelength neutron diffraction data.
+
+
Changed:
+
+
Initialization arguments of PDFConfig to set initial configuration values.
+
path argument of functs.findfiles to give one search path instead of a list of paths.
+
pdfgetx3 –find to search only the current directory and stop searching in –datapath.
+
Improved PDF accuracy by removing repeated Q-grid interpolation.
+
Handling of dot files by pdfgetx3 –find and the functs.findfiles function. The
+dotfiles are by default ignored unless explicitly selected by a “^.” pattern.
+
Return type of functs.findfiles from IPython SList to a simple list.
+
Rename camel-case interactive functions to lowercase, i.e., loaddata, processfiles, clearsession.
+
Use config.datapath lookup in processfiles(filename).
+
+
Deprecated:
+
+
Function cromermann.felectronatq for electron scattering factors calculation using
+Mott-Bethe approximate formula.
+
IPython extension module diffpy.pdfgetx.ipy_pdfgetx3. Use diffpy.pdfgetx.ipy_magics instead.
Support for Python 3.4, 3.5, 3.6 in addition to Python 2.6 and 2.7.
+
Support for IPython 5.0 <https://ipython.org> with preserved compatibility with
+IPython 0.10 and later.
+
Support for matplotlib 2.0 <https://matplotlib.org>.
+
New option –log=LOG for the plotdata program to set logarithmic scale for either
+of x or y axis. The plotdata() function learnt a new log argument with the same purpose.
+
New argument ax for the plotdata() function that select a specific matplotlib axis for plotting.
+
Support for Unicode filenames and values in the config interactive variable.
+
Processing of parentheses and fractional stoichiometries in chemical formulas as in
+Pb (Ti Zr)1/2 O3.
+
Explanatory error message when PDFgetX3 was installed for unsupported Python.
+
+
Changed:
+
+
The egg package file was enhanced to support all Python versions. The software is now
+distributed in a single egg rather than multiple eggs per each Python version.
+
PDFgetX3 option –force to take a boolean argument (yes, no, true, etc.) or
+once. The configuration parameter force can be likewise set to a bool or to a string
+“once”. This enables a safer one-time overwrite of existing output files.
+
Plot labels to use a proper Unicode “Å” (Ångström) symbols. The “Å” symbol is also used within
+units in output files.
+
The usecols argument of the loadData() function to also accept scalars, open-end slice
+objects and string-denoted slices such as “1:3” or “1:”.
+
The plotdata program and plotdata() function to accept open-end slices for the y-columns selection.
+
The IPython magic function %pdfgetx3 to set the _exit_code variable as do generic shell commands run from IPython.
+
Inline documentation to use NumPy-style Napoleon format, which is human readable and can be included in the manual.
+
Release scripts to build software package bundles and documentation in binary-reproducible way.
+
+
Deprecated:
+
+
Compatibility with Python 2.6.
+
Support for IPython 0.x.
+
Variable __gitsha__ in the version module which was renamed to __git_commit__.
+
+
Removed:
+
+
The hold argument of the plotdata() function, because it was deprecated in matplotlib.
+
Support for multiple x-columns in plotdata program and plotdata() function.
+
Import of all objects from numpy module into the interactive session. NumPy is available under the np name instead.
+
+
Fixed:
+
+
Avoid duplicate “.gr.gr” extension when pdfgetx3 is run with option –output=f.gr.
+
Crash on loading custom configuration section from a local file, when that section is missing in global configuration.
+
Missing checkbox in the tuneconfig dialog caused by matplotlib bug.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/search.html b/static_root/doc/pdfgetx/2.4.0/search.html
new file mode 100644
index 00000000..d25a9602
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/search.html
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+ Search — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/searchindex.js b/static_root/doc/pdfgetx/2.4.0/searchindex.js
new file mode 100644
index 00000000..be753a57
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({"alltitles":{"1.2":[[8,"id11"]],"2.0.0":[[8,"id10"]],"2.1.0":[[8,"id9"]],"2.1.1":[[8,"id8"]],"2.1.2":[[8,"id7"]],"2.2.0":[[8,"id6"]],"2.2.1":[[8,"id5"]],"2.2.2":[[8,"id4"]],"2.3.0":[[8,"id2"]],"2.4.0":[[8,"id1"]],"Authors":[[4,"authors"]],"Configuration file":[[0,"configuration-file"]],"Configuration file options":[[5,"configuration-file-options"]],"Examples":[[6,"examples"]],"Files used in PDF extraction":[[0,null]],"Fit twothetazero":[[9,"fit-twothetazero"]],"IPython magic command":[[2,"ipython-magic-command"]],"Indices":[[1,"indices"]],"Input and output options":[[5,"input-and-output-options"]],"Input files":[[0,"input-files"]],"Installation":[[2,null],[2,"id1"]],"Interactive Multiple Background Subtraction":[[9,"interactive-multiple-background-subtraction"]],"Interactive mode":[[3,null]],"Interactive tuning of parameters":[[9,"interactive-tuning-of-parameters"]],"Introduction":[[4,null]],"License notice":[[4,"license-notice"]],"Multiple Background Subtraction":[[9,"multiple-background-subtraction"]],"Neutron PDF":[[9,"neutron-pdf"]],"Nickel X-ray PDF":[[9,"nickel-x-ray-pdf"]],"Options and parameters":[[5,null]],"Other parameters":[[5,"other-parameters"]],"Output files":[[0,"output-files"]],"PDF parameters":[[5,"pdf-parameters"]],"Platinum X-ray series":[[9,"platinum-x-ray-series"]],"Predefined configuration file":[[9,"id1"]],"Program operation":[[5,"program-operation"]],"Quick-start guide":[[7,null]],"References":[[4,"references"]],"Release notes":[[8,null],[8,"id3"]],"Selecting files":[[6,"selecting-files"]],"Selecting x and y data":[[6,"selecting-x-and-y-data"]],"Small-angle-scattering PDF (sasPDF)":[[9,"small-angle-scattering-pdf-saspdf"]],"Software requirements":[[2,"software-requirements"]],"Table of contents":[[1,"table-of-contents"]],"The plotdata program":[[6,null]],"Tutorial":[[9,null]],"data search path":[[9,"data-search-path"]],"diffpy.pdfgetx":[[1,null]],"matching input files":[[9,"matching-input-files"]],"output file names":[[9,"output-file-names"]],"pdfgetn3 command":[[7,"pdfgetn3-command"]],"pdfgets3 command":[[7,"pdfgets3-command"]],"pdfgetx3 command":[[7,"pdfgetx3-command"]],"predefined configuration file":[[9,"predefined-configuration-file"]],"processing from scratch":[[9,"processing-from-scratch"]]},"docnames":["files","index","install","interact","intro","options","plotdata","quick-start","release","tutorial"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1},"filenames":["files.rst","index.rst","install.rst","interact.rst","intro.rst","options.rst","plotdata.rst","quick-start.rst","release.rst","tutorial.rst"],"indexentries":{"%pdfgetn3 ipython magic":[[2,"index-1",false]],"%pdfgets3 ipython magic":[[2,"index-2",false]],"%pdfgetx3 ipython magic":[[2,"index-0",false]],"--background":[[5,"cmdoption-pdfgetx3-b",false]],"--bgscale":[[5,"cmdoption-pdfgetx3-bgscale",false]],"--composition":[[5,"cmdoption-pdfgetx3-composition",false]],"--config":[[5,"cmdoption-pdfgetx3-c",false]],"--createconfig":[[5,"cmdoption-pdfgetx3-createconfig",false]],"--datapath":[[5,"cmdoption-pdfgetx3-d",false]],"--find":[[5,"cmdoption-pdfgetx3-f",false],[6,"cmdoption-plotdata-f",false]],"--force":[[5,"cmdoption-pdfgetx3-force",false]],"--format":[[5,"cmdoption-pdfgetx3-format",false]],"--formfactorfile":[[5,"cmdoption-pdfgetx3-ff",false]],"--help":[[5,"cmdoption-pdfgetx3-h",false],[6,"cmdoption-plotdata-h",false]],"--interact":[[5,"cmdoption-pdfgetx3-i",false]],"--list":[[5,"cmdoption-pdfgetx3-l",false],[6,"cmdoption-plotdata-l",false]],"--log":[[6,"cmdoption-plotdata-L",false]],"--manual":[[5,"cmdoption-pdfgetx3-manual",false],[6,"cmdoption-plotdata-manual",false]],"--mode":[[5,"cmdoption-pdfgetx3-mode",false]],"--output":[[5,"cmdoption-pdfgetx3-o",false]],"--outputtypes":[[5,"cmdoption-pdfgetx3-t",false]],"--plot":[[5,"cmdoption-pdfgetx3-p",false]],"--qmax":[[5,"cmdoption-pdfgetx3-qmax",false]],"--qmaxinst":[[5,"cmdoption-pdfgetx3-qmaxinst",false]],"--qmin":[[5,"cmdoption-pdfgetx3-qmin",false]],"--rmax":[[5,"cmdoption-pdfgetx3-rmax",false]],"--rmin":[[5,"cmdoption-pdfgetx3-rmin",false]],"--rpoly":[[5,"cmdoption-pdfgetx3-rpoly",false]],"--rstep":[[5,"cmdoption-pdfgetx3-rstep",false]],"--section":[[5,"cmdoption-pdfgetx3-s",false]],"--style":[[6,"cmdoption-plotdata-s",false]],"--terminationfunctions":[[5,"cmdoption-pdfgetx3-terminationfunctions",false]],"--twothetazero":[[5,"cmdoption-pdfgetx3-twothetazero",false]],"--verbose":[[5,"cmdoption-pdfgetx3-verbose",false]],"--version":[[5,"cmdoption-pdfgetx3-V",false],[6,"cmdoption-plotdata-V",false]],"--wavelength":[[5,"cmdoption-pdfgetx3-w",false]],"-b":[[5,"cmdoption-pdfgetx3-b",false]],"-c":[[5,"cmdoption-pdfgetx3-c",false]],"-d":[[5,"cmdoption-pdfgetx3-d",false]],"-f":[[5,"cmdoption-pdfgetx3-f",false],[6,"cmdoption-plotdata-f",false]],"-ff":[[5,"cmdoption-pdfgetx3-ff",false]],"-h":[[5,"cmdoption-pdfgetx3-h",false],[6,"cmdoption-plotdata-h",false]],"-i":[[5,"cmdoption-pdfgetx3-i",false]],"-l":[[5,"cmdoption-pdfgetx3-l",false],[6,"cmdoption-plotdata-L",false],[6,"cmdoption-plotdata-l",false]],"-o":[[5,"cmdoption-pdfgetx3-o",false]],"-p":[[5,"cmdoption-pdfgetx3-p",false]],"-s":[[5,"cmdoption-pdfgetx3-s",false],[6,"cmdoption-plotdata-s",false]],"-t":[[5,"cmdoption-pdfgetx3-t",false]],"-v":[[5,"cmdoption-pdfgetx3-V",false],[6,"cmdoption-plotdata-V",false]],"-w":[[5,"cmdoption-pdfgetx3-w",false]],"-x":[[6,"cmdoption-plotdata-x",false]],"-y":[[6,"cmdoption-plotdata-y",false]],"authors":[[4,"index-1",false]],"backgroundfile (configuration value)":[[5,"confval-backgroundfile",false]],"bgscale (configuration value)":[[5,"confval-bgscale",false]],"citations":[[4,"index-2",false]],"clearsession() (in module _interactive_)":[[3,"interactive_.clearsession",false]],"composition (configuration value)":[[5,"confval-composition",false]],"config (interactive variable)":[[3,"interactvar-config",false]],"dataformat (configuration value)":[[5,"confval-dataformat",false]],"datapath (configuration value)":[[5,"confval-datapath",false]],"example files":[[9,"index-0",false]],"examples":[[9,"index-1",false]],"findfiles() (in module diffpy.pdfgetx)":[[3,"diffpy.pdfgetx.findfiles",false]],"force (configuration value)":[[5,"confval-force",false]],"formfactorfile (configuration value)":[[5,"confval-formfactorfile",false]],"fq (interactive variable)":[[3,"interactvar-fq",false]],"gr (interactive variable)":[[3,"interactvar-gr",false]],"inputfile (configuration value)":[[5,"confval-inputfile",false]],"interact (configuration value)":[[5,"confval-interact",false]],"iq (interactive variable)":[[3,"interactvar-iq",false]],"iraw (interactive variable)":[[3,"interactvar-iraw",false]],"license":[[4,"index-0",false]],"loaddata() (in module diffpy.pdfgetx)":[[3,"diffpy.pdfgetx.loaddata",false]],"mode (configuration value)":[[5,"confval-mode",false]],"output (configuration value)":[[5,"confval-output",false]],"outputtypes (configuration value)":[[5,"confval-outputtypes",false]],"pdfgetn3 (program)":[[7,"index-1",false]],"pdfgets3 (program)":[[7,"index-2",false]],"pdfgetter() (in module _interactive_)":[[3,"interactive_.pdfgetter",false]],"pdfgetx3 (program)":[[7,"index-0",false]],"pdfgetx3 command line option":[[5,"cmdoption-pdfgetx3-V",false],[5,"cmdoption-pdfgetx3-b",false],[5,"cmdoption-pdfgetx3-bgscale",false],[5,"cmdoption-pdfgetx3-c",false],[5,"cmdoption-pdfgetx3-composition",false],[5,"cmdoption-pdfgetx3-createconfig",false],[5,"cmdoption-pdfgetx3-d",false],[5,"cmdoption-pdfgetx3-f",false],[5,"cmdoption-pdfgetx3-ff",false],[5,"cmdoption-pdfgetx3-force",false],[5,"cmdoption-pdfgetx3-format",false],[5,"cmdoption-pdfgetx3-h",false],[5,"cmdoption-pdfgetx3-i",false],[5,"cmdoption-pdfgetx3-l",false],[5,"cmdoption-pdfgetx3-manual",false],[5,"cmdoption-pdfgetx3-mode",false],[5,"cmdoption-pdfgetx3-o",false],[5,"cmdoption-pdfgetx3-p",false],[5,"cmdoption-pdfgetx3-qmax",false],[5,"cmdoption-pdfgetx3-qmaxinst",false],[5,"cmdoption-pdfgetx3-qmin",false],[5,"cmdoption-pdfgetx3-rmax",false],[5,"cmdoption-pdfgetx3-rmin",false],[5,"cmdoption-pdfgetx3-rpoly",false],[5,"cmdoption-pdfgetx3-rstep",false],[5,"cmdoption-pdfgetx3-s",false],[5,"cmdoption-pdfgetx3-t",false],[5,"cmdoption-pdfgetx3-terminationfunctions",false],[5,"cmdoption-pdfgetx3-twothetazero",false],[5,"cmdoption-pdfgetx3-verbose",false],[5,"cmdoption-pdfgetx3-w",false]],"plot (configuration value)":[[5,"confval-plot",false]],"plotdata (program)":[[6,"index-0",false]],"plotdata command line option":[[6,"cmdoption-plotdata-L",false],[6,"cmdoption-plotdata-V",false],[6,"cmdoption-plotdata-f",false],[6,"cmdoption-plotdata-h",false],[6,"cmdoption-plotdata-l",false],[6,"cmdoption-plotdata-manual",false],[6,"cmdoption-plotdata-s",false],[6,"cmdoption-plotdata-x",false],[6,"cmdoption-plotdata-y",false]],"plotdata() (in module diffpy.pdfgetx.plotdata)":[[3,"diffpy.pdfgetx.plotdata.plotdata",false]],"processfiles() (in module _interactive_)":[[3,"interactive_.processfiles",false]],"qmax (configuration value)":[[5,"confval-qmax",false]],"qmaxinst (configuration value)":[[5,"confval-qmaxinst",false]],"qmin (configuration value)":[[5,"confval-qmin",false]],"references":[[4,"index-2",false]],"release notes":[[8,"index-0",false]],"rmax (configuration value)":[[5,"confval-rmax",false]],"rmin (configuration value)":[[5,"confval-rmin",false]],"rpoly (configuration value)":[[5,"confval-rpoly",false]],"rstep (configuration value)":[[5,"confval-rstep",false]],"sq (interactive variable)":[[3,"interactvar-sq",false]],"terminationfunctions (configuration value)":[[5,"confval-terminationfunctions",false]],"tuneconfig (example)":[[9,"index-2",false]],"tuneconfig() (in module _interactive_)":[[3,"interactive_.tuneconfig",false]],"twothetazero (configuration value)":[[5,"confval-twothetazero",false]],"verbose (configuration value)":[[5,"confval-verbose",false]],"wavelength (configuration value)":[[5,"confval-wavelength",false]]},"objects":{"":[[5,1,1,"-","backgroundfile"],[5,1,1,"-","bgscale"],[5,1,1,"-","composition"],[3,2,1,"-","config"],[5,1,1,"-","dataformat"],[5,1,1,"-","datapath"],[5,1,1,"-","force"],[5,1,1,"-","formfactorfile"],[3,2,1,"-","fq"],[3,2,1,"-","gr"],[5,1,1,"-","inputfile"],[5,1,1,"-","interact"],[3,2,1,"-","iq"],[3,2,1,"-","iraw"],[5,1,1,"-","mode"],[5,1,1,"-","output"],[5,1,1,"-","outputtypes"],[5,1,1,"-","plot"],[5,1,1,"-","qmax"],[5,1,1,"-","qmaxinst"],[5,1,1,"-","qmin"],[5,1,1,"-","rmax"],[5,1,1,"-","rmin"],[5,1,1,"-","rpoly"],[5,1,1,"-","rstep"],[3,2,1,"-","sq"],[5,1,1,"-","terminationfunctions"],[5,1,1,"-","twothetazero"],[5,1,1,"-","verbose"],[5,1,1,"-","wavelength"]],"_interactive_":[[3,0,1,"interactive_.clearsession","clearsession"],[3,0,1,"interactive_.pdfgetter","pdfgetter"],[3,0,1,"interactive_.processfiles","processfiles"],[3,0,1,"interactive_.tuneconfig","tuneconfig"]],"diffpy.pdfgetx":[[3,0,1,"","findfiles"],[3,0,1,"","loaddata"]],"diffpy.pdfgetx.plotdata":[[3,0,1,"","plotdata"]],"pdfgetx3":[[5,3,1,"cmdoption-pdfgetx3-b","--background"],[5,3,1,"cmdoption-pdfgetx3-bgscale","--bgscale"],[5,3,1,"cmdoption-pdfgetx3-composition","--composition"],[5,3,1,"cmdoption-pdfgetx3-c","--config"],[5,3,1,"cmdoption-pdfgetx3-createconfig","--createconfig"],[5,3,1,"cmdoption-pdfgetx3-d","--datapath"],[5,3,1,"cmdoption-pdfgetx3-f","--find"],[5,3,1,"cmdoption-pdfgetx3-force","--force"],[5,3,1,"cmdoption-pdfgetx3-format","--format"],[5,3,1,"cmdoption-pdfgetx3-ff","--formfactorfile"],[5,3,1,"cmdoption-pdfgetx3-h","--help"],[5,3,1,"cmdoption-pdfgetx3-i","--interact"],[5,3,1,"cmdoption-pdfgetx3-l","--list"],[5,3,1,"cmdoption-pdfgetx3-manual","--manual"],[5,3,1,"cmdoption-pdfgetx3-mode","--mode"],[5,3,1,"cmdoption-pdfgetx3-o","--output"],[5,3,1,"cmdoption-pdfgetx3-t","--outputtypes"],[5,3,1,"cmdoption-pdfgetx3-p","--plot"],[5,3,1,"cmdoption-pdfgetx3-qmax","--qmax"],[5,3,1,"cmdoption-pdfgetx3-qmaxinst","--qmaxinst"],[5,3,1,"cmdoption-pdfgetx3-qmin","--qmin"],[5,3,1,"cmdoption-pdfgetx3-rmax","--rmax"],[5,3,1,"cmdoption-pdfgetx3-rmin","--rmin"],[5,3,1,"cmdoption-pdfgetx3-rpoly","--rpoly"],[5,3,1,"cmdoption-pdfgetx3-rstep","--rstep"],[5,3,1,"cmdoption-pdfgetx3-s","--section"],[5,3,1,"cmdoption-pdfgetx3-terminationfunctions","--terminationfunctions"],[5,3,1,"cmdoption-pdfgetx3-twothetazero","--twothetazero"],[5,3,1,"cmdoption-pdfgetx3-verbose","--verbose"],[5,3,1,"cmdoption-pdfgetx3-V","--version"],[5,3,1,"cmdoption-pdfgetx3-w","--wavelength"],[5,3,1,"cmdoption-pdfgetx3-V","-V"],[5,3,1,"cmdoption-pdfgetx3-b","-b"],[5,3,1,"cmdoption-pdfgetx3-c","-c"],[5,3,1,"cmdoption-pdfgetx3-d","-d"],[5,3,1,"cmdoption-pdfgetx3-f","-f"],[5,3,1,"cmdoption-pdfgetx3-ff","-ff"],[5,3,1,"cmdoption-pdfgetx3-h","-h"],[5,3,1,"cmdoption-pdfgetx3-i","-i"],[5,3,1,"cmdoption-pdfgetx3-l","-l"],[5,3,1,"cmdoption-pdfgetx3-o","-o"],[5,3,1,"cmdoption-pdfgetx3-p","-p"],[5,3,1,"cmdoption-pdfgetx3-s","-s"],[5,3,1,"cmdoption-pdfgetx3-t","-t"],[5,3,1,"cmdoption-pdfgetx3-w","-w"]],"plotdata":[[6,3,1,"cmdoption-plotdata-f","--find"],[6,3,1,"cmdoption-plotdata-h","--help"],[6,3,1,"cmdoption-plotdata-l","--list"],[6,3,1,"cmdoption-plotdata-L","--log"],[6,3,1,"cmdoption-plotdata-manual","--manual"],[6,3,1,"cmdoption-plotdata-s","--style"],[6,3,1,"cmdoption-plotdata-V","--version"],[6,3,1,"cmdoption-plotdata-L","-L"],[6,3,1,"cmdoption-plotdata-V","-V"],[6,3,1,"cmdoption-plotdata-f","-f"],[6,3,1,"cmdoption-plotdata-h","-h"],[6,3,1,"cmdoption-plotdata-l","-l"],[6,3,1,"cmdoption-plotdata-s","-s"],[6,3,1,"cmdoption-plotdata-x","-x"],[6,3,1,"cmdoption-plotdata-y","-y"]]},"objnames":{"0":["py","function","Python function"],"1":["std","confval","configuration value"],"2":["std","interactvar","interactive variable"],"3":["std","cmdoption","program option"]},"objtypes":{"0":"py:function","1":"std:confval","2":"std:interactvar","3":"std:cmdoption"},"terms":{"":[0,2,3,4,5,6,7,8,9],"0":[1,3,5,6,7,9],"00":7,"00000":9,"0000000e":7,"0001946e":7,"00032":9,"0003892e":7,"00055":[7,9],"0011677e":7,"0029":8,"00903":9,"00903_qmax18":9,"00904":9,"00905":9,"00906":9,"00907":9,"00908":9,"01":[7,9],"02":7,"05":9,"072":9,"075":9,"0865680161":9,"095":9,"097":9,"0989":9,"0x3e20f50":9,"1":[0,1,2,3,5,6,7,9],"10":[3,8],"100":[3,9],"11":[2,8,9],"12":[2,8,9],"13":[2,6,8,9],"14":9,"142774":[7,9],"1465":7,"15":[1,9],"16":[6,9],"17":9,"18":[3,9],"2":[0,1,5,6,7,9],"20":[3,6,9],"2008":9,"2009":4,"2013":4,"2018":4,"2025":[1,4],"21":3,"22":9,"240":9,"26":9,"27":[6,9],"28":9,"29":[8,9],"2\u03b8":[0,2,3,5,6,7,9],"3":[1,2,5,6,9],"30":9,"3000":9,"34":3,"36":9,"38":9,"3_copi":9,"4":[1,3,6,9],"4002724e":7,"451":9,"46":4,"5":[5,6,8,9],"5000":9,"51":4,"549":9,"560":4,"566":4,"5o3":5,"5zr0":5,"6":[6,7,8,9],"605":9,"64":6,"6id":9,"7":[3,5,8,9],"8":[6,8,9],"8003502e":7,"9":[5,6,8],"900":9,"903":9,"905":9,"908":9,"910":9,"947":9,"A":[3,4,5,7,9],"At":9,"By":[0,3,5,6,9],"For":[2,3,4,5,6,7,9],"If":[0,2,4,9],"In":[2,3,4,5,6,7,8,9],"It":[2,3,5,6],"No":[1,3,5],"On":2,"One":[3,5,9],"Such":9,"That":8,"The":[0,1,2,3,4,5,7,8,9],"Then":2,"There":[2,9],"These":[2,3],"To":[2,7,9],"With":9,"__git_commit__":8,"__gitsha__":8,"_exit_cod":8,"_interactive_":3,"_qmax18":9,"abbrevi":9,"abil":9,"about":[5,7,9],"abov":[2,3,9],"accept":[0,5,8,9],"access":[0,2,8],"accomplish":[2,9],"accord":[3,9],"accur":9,"accuraci":8,"acknowledg":4,"action":[5,9],"activ":[0,2,3,7,9],"actual":[0,2,8],"ad":[3,4,8],"add":[2,5,9],"addit":[0,2,3,4,5,8,9],"adjust":[4,9],"advanc":[8,9],"affect":[8,9],"after":[0,5,6,8,9],"again":[3,9],"agre":2,"agreement":4,"al":9,"al2o3":9,"alia":5,"all":[0,2,3,5,6,7,8,9],"allow":[3,4,5,6,8,9],"alon":6,"alreadi":[2,5,9],"also":[0,2,3,4,5,6,7,8,9],"altern":2,"although":7,"alwai":5,"an":[0,2,3,4,5,6,7,8,9],"anaconda":[2,8,9],"analysi":4,"anchor":8,"angl":[0,1,4,5,7,8],"angular":9,"ani":[0,2,3,4,5,7,8,9],"anoth":[2,9],"anticip":4,"anywher":9,"apart":7,"api":8,"app":8,"appear":[1,5,9],"append":5,"appl":4,"appli":[0,3,5,8,9],"applic":7,"approxim":[8,9],"apt":2,"ar":[0,2,3,4,5,6,7,8,9],"arbitrari":9,"area":9,"argument":[0,2,3,5,6,7,8,9],"arrai":[3,8],"ask":4,"assembli":[4,9],"assess":9,"assign":[3,5,7],"assum":[5,6,7],"atom":[4,5],"attempt":0,"attribut":[3,5,9],"au":9,"au_dna_ff":9,"au_dna_npa":9,"author":[1,8],"auto":6,"automat":[4,7,9],"avail":[2,5,6,8,9],"averag":[0,9],"avoid":[8,9],"ax":[3,6,8,9],"axeslist":[3,9],"axi":[3,8,9],"b":[5,9],"b_qmax18":9,"back":8,"background":[0,1,5,8],"backgroundfil":[0,5,8,9],"backslash":8,"base":[3,8,9],"basenam":5,"batch":4,"batio3":9,"beamlin":9,"becaus":[3,6,8,9],"been":[5,7,8,9],"befor":5,"begin":[3,5,9],"behavior":[5,7,8],"being":[5,7,8,9],"below":9,"best":7,"beth":8,"better":9,"between":[5,7],"bg":8,"bgscale":[5,8,9],"billing":4,"binari":8,"block":3,"blue":9,"bogu":8,"bool":[3,5,8],"boolean":8,"both":[3,7,8,9],"bound":[5,9],"boundari":[5,7,9],"box":9,"brace":7,"braci":[4,8],"break":9,"breakpoint":9,"brief":[5,6,7],"brookhaven":4,"browser":[5,6],"bug":8,"build":8,"built":9,"bulk":9,"bundl":[4,8],"button":9,"c":[0,2,4,5,7,8,9],"calcul":[0,3,5,7,8,9],"calibr":9,"call":[3,6,9],"callabl":3,"camel":8,"can":[0,2,3,4,5,6,7,8,9],"cannot":[6,8,9],"canopi":2,"canva":8,"cap":9,"capabl":[6,7],"capillari":9,"carri":9,"case":[5,6,8,9],"catio3":5,"caus":[5,8,9],"cell":9,"ceo2":9,"cfg":[0,7,8,9],"ch":4,"ch2":5,"ch3":5,"chain":9,"chang":[0,3,8,9],"charact":[3,5,7,9],"check":[0,2,6,7,8,9],"checkbox":8,"chemic":[0,5,7,8,9],"chi":[5,7,9],"chia":4,"choos":2,"christoph":4,"circl":9,"cite":4,"citi":4,"class":[3,8],"clear":[3,5,9],"clearsess":[1,3,8,9],"clf":9,"cli":[5,8],"click":9,"close":9,"closer":5,"cmi":9,"co":6,"code":[2,4,8,9],"colloid":9,"columbia":[2,4,9],"column":[0,2,3,5,6,7,8,9],"combin":6,"comma":[3,5,6,9],"command":[0,1,3,4,5,6,8,9],"comment":[0,7],"commit":8,"compar":[8,9],"compat":8,"complain":9,"complet":[5,9],"compon":5,"composit":[0,5,7,9],"comprehens":2,"comput":[2,8],"conda":[2,8,9],"conduct":9,"config":[0,3,5,7,8,9],"config_neutron":9,"config_sa":9,"config_xrai":9,"configfil":9,"configsect":9,"configur":[1,3,7,8],"confirm":9,"conjunct":6,"connor":[4,8],"consid":3,"consist":7,"constant":[3,4,5,8,9],"contact":4,"contain":[0,2,3,5,6,7,8,9],"content":[0,7,9],"continu":9,"contributor":8,"control":[4,5,6,9],"conveni":[2,3,6,7],"convent":[6,8],"convers":[2,5],"convert":[3,4,5,9],"copi":[8,9],"copyright":4,"correct":[0,1,4,5,8,9],"correctli":[2,7,9],"correspond":[0,3,5,7,8,9],"could":[6,8],"count":5,"counterpart":7,"coupl":8,"cours":2,"cover":[5,8,9],"coveragerc":8,"crash":8,"creat":[0,2,3,5,7,9],"createconfig":[0,5,7],"critic":[2,7],"cromermann":8,"crystallogr":4,"cube":6,"current":[0,3,5,6,8,9],"curv":[5,7,9],"custom":[2,4,5,8,9],"cutoff":[5,7,9],"cython":8,"d":[0,4,5,9],"dash":[5,7],"dat":[5,6,8,9],"data":[0,1,2,3,4,5,7,8],"datafil":[3,5],"dataformat":[0,3,5,7,9],"datapath":[0,5,8,9],"dataset":[8,9],"davi":4,"debug":5,"decai":5,"decemb":1,"dedic":9,"default":[0,3,5,6,7,8,9],"defin":[0,2,3,5,7,9],"definit":5,"degre":[0,5,7,8,9],"delft":9,"demonstr":[7,9],"denot":[7,8],"depend":[2,3,8],"deprec":8,"deprecation_polici":8,"der":9,"describ":[7,9],"descript":[5,7,8],"design":9,"desir":[2,3,9],"detail":[5,6,9],"detector":[5,9],"diagnost":5,"dialog":[3,8,9],"did":9,"differ":[0,2,5,7,9],"difficult":9,"diffpi":[2,3,4,6,8,9],"diffract":[0,3,4,5,7,8,9],"diffractomet":[5,8,9],"dir":[3,8],"dir1":[5,8],"dir2":[5,8],"dir3":8,"directli":8,"directori":[0,2,3,5,6,7,8,9],"disabl":5,"discuss":9,"disk":3,"displai":[2,3,5,6,7,9],"distribut":[2,4,8],"dna":9,"do":[2,3,5,6,8,9],"doc":8,"document":[6,7,8,9],"doe":[2,3,7,9],"don":[2,4],"done":[6,9],"dot":8,"dotfil":[3,8],"doubl":[5,6,7],"download":2,"driven":[2,9],"drop":9,"duplic":[8,9],"dure":8,"dynam":9,"e":[2,3,4,5,6,7,8,9],"each":[0,3,5,8,9],"easi":[2,9],"easiest":[0,2],"easy_instal":2,"editor":[0,2,7],"edu":4,"effect":[3,4,5,9],"egg":[2,8],"eijck":4,"either":[0,3,5,7,8,9],"elaps":9,"electron":8,"element":[3,5,9],"email":4,"employ":4,"empti":[3,5,9],"empty_capillari":9,"enabl":[7,8],"enclos":5,"encount":9,"encourag":6,"end":[3,5,8,9],"engin":2,"enhanc":[2,8],"enough":3,"enter":[7,9],"enthought":2,"entir":3,"entri":[3,5,8,9],"environ":[2,8,9],"equal":[0,3,5,7,9],"equival":[6,8,9],"erron":8,"error":[5,8,9],"essenti":[5,9],"etc":[3,8,9],"even":9,"everi":5,"everyth":8,"exact":9,"exampl":[0,1,2,3,5,7,8,9],"except":[0,8,9],"execut":[2,7,9],"exist":[2,5,8,9],"exit":[5,6,7,9],"expand":[5,9],"expans":6,"expect":[5,9],"experi":5,"experiment":9,"explanatori":8,"explicit":8,"explicitli":[3,5,7,8],"export":8,"extens":[2,5,8,9],"extra":[2,3,5,8,9],"extract":[1,4,9],"f":[0,2,3,5,6,7,8,9],"f007":5,"f2avg":5,"f7":5,"f77":5,"fact":9,"faction":9,"factor":[0,5,7,8,9],"failur":8,"fals":[3,5],"familiar":7,"farrow":4,"fashion":[2,7],"fast":9,"favg2":5,"favorit":0,"featur":[6,9],"felectronatq":8,"few":[0,7,9],"ff":5,"fft":9,"fig":9,"figur":9,"file":[1,2,3,4,7,8],"file1":6,"file10":6,"file11":6,"file12":6,"file13":6,"file2":6,"file20":6,"file9":6,"filenam":[0,2,3,5,6,7,8,9],"final":[2,5,7,8,9],"find":[0,2,3,5,6,8,9],"findfil":[0,1,2,3,5,6,7,8,9],"finish":9,"finit":5,"first":[0,2,3,5,6,7,8,9],"fit":[0,1,5],"fit2d":7,"fix":[5,8],"fl":6,"flag":[8,9],"fledg":9,"flexibl":5,"float":[3,5],"folder":9,"follow":[0,2,4,5,6,7,8,9],"forc":[3,5,8,9],"form":[0,5,7,9],"format":[2,3,5,6,7,8],"formfactorfil":[5,9],"formula":[5,8],"forward":[8,9],"found":[0,1,2,9],"four":0,"fourier":[5,7],"fq":[0,3,5,7,9],"fraction":[5,8],"frequenc":5,"fresh":9,"from":[0,2,3,4,5,6,7,8],"front":5,"full":[6,8,9],"fulli":9,"funct":8,"function":[0,3,4,5,6,7,8,9],"further":5,"g":[0,2,3,5,6,7,8,9],"gang":[4,9],"gca":3,"gener":[0,3,6,7,8,9],"get":[2,7,9],"get_atol":8,"get_atol_from_rtol":8,"gettransform":9,"gitarch":8,"gitattribut":8,"github":8,"give":[5,8],"given":[8,9],"global":[0,8],"go":9,"good":9,"gr":[0,3,5,7,8,9],"grant":4,"graph":[6,9],"greater":3,"green":9,"grid":[0,5,8,9],"group":[3,4,5,8,9],"gui":[2,3,9],"guid":1,"guifigur":8,"h":[5,6],"ha":[0,3,5,6,7,9],"had":9,"handl":[8,9],"hao":4,"happen":9,"hard":5,"hash":7,"have":[0,2,3,5,7,8,9],"header":[0,3,7,9],"headlin":6,"help":[5,6,7,9],"here":[2,5,6,7,9],"hidden":3,"higher":[3,5],"highli":4,"hint":9,"hoc":4,"hold":8,"holder":5,"home":[0,9],"how":9,"howev":[5,9],"html":8,"http":[2,8],"human":8,"hundr":9,"hung":4,"i":[0,2,3,4,5,6,7,8,9],"ident":[7,8],"identifi":[0,9],"ignor":[0,3,5,7,8,9],"illustr":9,"imag":8,"immedi":9,"impli":[7,9],"implicit":[6,8],"import":[3,5,6,8,9],"improv":8,"inaccur":[8,9],"inadvert":8,"includ":[2,3,4,6,7,8,9],"inclus":[3,5],"incorrectli":8,"increas":8,"inde":7,"indent":2,"index":[1,2,3,6,8,9],"indic":[3,6,9],"info":[5,6,7,9],"inform":[4,5,7],"initi":[3,6,8],"inlin":8,"input":[1,3,6,7,8],"input1":7,"input2":7,"inputfil":[0,3,5,9],"inputn":7,"instal":[1,7,8,9],"instanc":[3,8],"instanti":8,"instead":[2,6,7,8],"instruct":[2,8,9],"instrument":9,"int":3,"integ":[3,5,6,9],"integr":2,"intend":[2,5,6,7,9],"intens":[0,3,5,7,9],"intensity1":3,"intensity2":3,"interact":[1,2,4,5,6,7,8],"interactiveshellapp":2,"intermedi":[3,4,8,9],"intern":[8,9],"internet":2,"interpol":8,"interpret":[2,5],"intervent":4,"introduct":1,"invari":9,"invers":[0,5,7],"invok":6,"involv":9,"io":8,"ipi":8,"ipy_mag":[2,8],"ipy_pdfgetx3":8,"ipynb":9,"ipython":[1,3,5,6,7,8,9],"ipython3":2,"ipython_config":2,"iq":[0,3,5,8,9],"iq_":8,"iq_0":8,"iraw":[3,9],"issu":[8,9],"item":[3,5],"iter":[3,8],"its":[5,6,7,9],"itself":0,"j":[3,4,8],"jank":4,"join":7,"juh\u00e1":4,"jupyt":9,"just":[0,6,9],"k":3,"kapton":9,"kapton_bgrd_300k_nor_2":9,"keep":[3,6],"keyword":[3,9],"kirkland":8,"know":4,"known":9,"kwarg":3,"l":[4,5,6,9],"label":[6,8],"laboratori":4,"lack":9,"languag":2,"larg":[5,6,9],"larger":5,"last":[3,5,6,9],"later":8,"latest":8,"lead":[2,3,4,5,7],"learnt":8,"least":3,"left":5,"legaci":8,"legend":9,"leli":9,"let":9,"level":[3,5,8],"lf":9,"li":4,"librari":[2,4],"licens":1,"like":[2,6,9],"likewis":8,"limit":5,"line":[0,2,3,4,5,6,7,8,9],"line2d":[0,2,3,5,6,7,9],"linear":[3,6],"linux":[2,9],"list":[3,5,6,8,9],"liu":4,"live":9,"load":[3,5,6,7,8,9],"loaddata":[0,1,2,3,5,6,7,8,9],"loadtxt":3,"loc":9,"local":8,"locat":0,"log":[3,6,8],"logarithm":[3,6,8],"lone":8,"long":[0,7],"look":[3,7,9],"lookup":8,"lorch":[5,8],"lost":8,"louwen":4,"low":[3,9],"lower":[5,9],"lowercas":8,"m":[2,3,5,9],"m2r":8,"m2r2":8,"mac":[2,9],"made":9,"magic":[1,8],"mai":[0,2,3,5,6,7,8,9],"main":8,"make":[5,7,9],"makefil":8,"manag":[2,8],"mandatori":0,"mani":7,"manipul":[8,9],"manual":[1,5,6,7,8],"mark":[0,7],"marker":6,"match":[2,3,5,6,8],"materi":9,"matplotlib":[2,3,6,8,9],"matric":3,"matrix":[3,9],"max":[0,2,3,5,6,7,9],"maximum":[5,9],"may":9,"mean":9,"meaning":[5,7,9],"measur":[0,5,7,9],"member":4,"memori":3,"menthol":9,"merg":8,"messag":[5,8,9],"metadata":[0,7],"method":[3,9],"microscopi":8,"might":5,"mind":6,"minimum":3,"minor":8,"minrow":3,"misc":3,"miss":8,"mode":[1,2,4,5,7,8,9],"modifi":[6,7,8],"modul":[3,8],"momentum":[0,5,7,9],"more":[2,3,4,5,7,9],"most":[0,3,6,9],"mott":8,"move":9,"mpl":8,"multipl":[0,1,8],"multiple_background_subtract":[8,9],"must":[0,2,3,4,5,6,7,8],"n":[3,4,5,9],"nacl":0,"name":[0,2,3,5,6,7,8],"nanomet":[0,5,7],"nanoparticl":[4,9],"napoleon":8,"nation":4,"natur":9,"navig":[2,9],"nbcmi":9,"ndarrai":3,"nearli":7,"necessari":[2,3,5,9],"need":[0,2,5,6,9],"neg":3,"nep":8,"neutron":[1,4,5,7,8],"new":[3,4,5,8,9],"next":[2,9],"ni":9,"ni300mesh_300k_nor_1":9,"nickel":1,"nickel_sub_two_half_background":9,"nicmd":9,"nois":5,"noisi":[5,9],"non":[3,9],"none":[3,5,9],"nonzero":9,"normal":[0,5,9],"notabl":9,"note":[1,3,5,6,7,9],"notebook":9,"noth":9,"notic":[1,9],"now":[8,9],"np":8,"nsl":9,"null":9,"number":[3,5,9],"numer":[0,6,9],"numpi":[2,3,8],"nykypanchuk":9,"o":[4,5,9],"o3":8,"object":[3,5,8,9],"obsolet":8,"obtain":[2,9],"off":5,"offset":[5,8,9],"often":[5,7],"oh":5,"older":2,"oleg":9,"omit":5,"onc":[0,2,3,5,8,9],"one":[2,3,5,6,8,9],"ones":5,"onli":[0,3,4,5,6,7,8,9],"open":[2,5,6,7,8,9],"oper":[1,2,6,7,8],"optimum":4,"option":[0,1,2,3,6,7,8,9],"order":[5,7,9],"org":[2,8],"orient":2,"origin":9,"oscil":9,"other":[0,1,2,3,7,8,9],"otherwis":[2,5],"out":[5,6,9],"outpufil":9,"output":[1,3,7,8],"outputtyp":[0,5,9],"outsid":[5,9],"overal":9,"overlap":[5,9],"overrul":9,"overwrit":[5,8,9],"own":[5,9],"p":[4,5],"packag":[1,2,8],"page":[1,6,8],"pair":[3,4],"paper":4,"paragraph":2,"paramet":[0,1,3,4,7,8],"parenthes":[5,8],"pars":9,"part":[2,9],"parti":[2,4],"pass":[0,3,6,7,9],"patch":8,"path":[0,2,3,5,8],"pattern":[0,3,5,6,8,9],"pavol":4,"pb":[5,8],"pbti0":5,"pdf":[1,2,3,4,7,8],"pdfconfig":[3,8],"pdfgetn3":[0,1,2,3,4,5,8,9],"pdfgets3":[1,2,4,5,8,9],"pdfgetter":[1,3,5,8,9],"pdfgetx":[2,3,4,6,8,9],"pdfgetx2":[3,9],"pdfgetx3":[0,1,2,3,4,5,6,8,9],"pdfgetx3path":8,"pdfgetx_env":2,"pdfgetxappl":8,"pdfgetxns3_manu":8,"pearl":9,"per":[0,5,6,8,9],"perform":[3,9],"perman":2,"permit":[4,5],"permut":9,"photon":9,"pi":[5,8],"pip":[2,9],"place":[2,9],"plain":5,"plan":2,"platform":[8,9],"platinum":1,"pleas":[4,7],"plot":[0,2,3,4,5,6,7,8,9],"plotdata":[0,1,2,3,5,7,8,9],"plotid":3,"plotpdfcomparison":9,"plural":[8,9],"png":8,"point":[3,8,9],"polici":8,"polynomi":[0,5,9],"pop":9,"posit":[5,8],"possibl":5,"powder":[0,3,4,5,7,9],"power":[4,9],"pre":[3,6,8],"preced":[3,5,6,7],"prefer":7,"prefer_nodisplay_backend":8,"prefix":2,"preload":9,"prepend":[2,5],"prerequisit":9,"present":[5,7,8,9],"preserv":[2,8],"press":7,"previou":[0,3,8],"previous":[5,7,8],"print":[3,5,7,9],"privileg":2,"problem":9,"procedur":9,"process":[0,2,3,4,5,6,7,8],"processfil":[1,3,8,9],"produc":[0,3,5,6,9],"prof":[4,9],"profil":2,"profile_default":2,"program":[0,1,2,3,4,7,8,9],"prohibit":4,"prompt":[2,6,9],"proper":[5,8],"properti":8,"protocol":9,"provid":[0,2,5,6,8,9],"pt":9,"pt_bulk":[7,9],"pt_bulk_ramp03":9,"public":4,"publish":9,"pure":8,"purpos":8,"push":8,"put":9,"pwd":8,"py":[2,8,9],"py2":8,"pyplot":[3,6,8],"pyproject":8,"python":[1,2,4,5,6,8,9],"python3":2,"python37":2,"pythonxi":2,"q":[0,2,3,5,6,7,8,9],"qa":[5,9],"qmax":[3,5,7,8,9],"qmaxinst":[5,7,8,9],"qmin":[5,8,9],"qnm":5,"qualiti":9,"quick":1,"quot":[5,6,9],"r":[0,2,3,4,5,6,7,9],"radiat":[5,7],"rai":[1,4,5,7],"rang":[3,5,6,8,9],"rapid":4,"rather":8,"raw":[3,9],"read":[0,3,5],"readabl":8,"reappli":8,"reason":9,"recalcul":9,"recip":8,"recogn":[6,9],"recommend":[2,9],"red":9,"redo":[7,9],"reduc":[0,5,7,9],"refactor":8,"refer":[1,3,7,9],"referenc":7,"refin":9,"reflect":8,"regular":[0,9],"relat":[3,7,9],"releas":[1,2],"relev":9,"reliabl":9,"remark":9,"remov":[5,8,9],"renam":8,"repeat":[5,8],"replac":[2,8,9],"report":5,"repositori":2,"reproduc":[0,8],"requir":[1,5,7,8,9],"resampl":9,"rescal":9,"research":4,"reset":[3,5,9],"residu":9,"resolv":9,"respect":[3,4,7,8,9],"restor":8,"result":[0,3,4,5,7,8,9],"return":[3,8],"reus":[3,5,8,9],"right":7,"rippl":5,"rmax":[5,9],"rmin":[5,9],"root":2,"round":9,"row":[3,6,9],"rpoli":[5,8,9],"rst":8,"rstep":[5,8,9],"run":[2,4,7,8,9],"sa":[4,5,7,8,9],"safe":[2,9],"safer":8,"safeti":9,"sai":8,"same":[0,2,3,5,6,7,8,9],"sampl":[0,5,7,9],"sapphir":9,"sapphire755":9,"saspdf":[1,4],"satisfi":[3,8],"save":[3,5,6,7,9],"sb2896":4,"scalar":8,"scale":[3,5,6,8,9],"scan":[7,9],"scatter":[0,1,3,4,5,7,8],"scienc":2,"scientif":[2,4],"scikit":8,"screen":9,"script":[2,4,8],"sdist":8,"search":[0,1,2,3,5,6,7,8],"second":[0,3,6,7,9],"section":[0,2,5,6,7,8,9],"sectionnam":[0,5],"see":[2,5,6,8,9],"seem":[3,8],"select":[0,1,3,5,8,9],"selector":3,"self":[8,9],"separ":[0,3,4,5,6,7,8,9],"sequenc":3,"sequenti":3,"seri":[1,4],"serv":3,"session":[2,3,5,6,7,8,9],"set":[0,2,3,5,6,7,8,9],"set_window_titl":8,"setup":[5,8,9],"setuptool":[2,8],"sever":[0,3,5,6,9],"sh":8,"shall":9,"shape":9,"share":[0,9],"shell":[2,3,5,6,7,8,9],"short":7,"shortcut":9,"shorter":5,"should":[0,2,3,8,9],"show":[3,6,9],"si90ni10":9,"side":9,"sign":7,"signal":5,"similar":[2,6,7,9],"similarli":9,"simon":4,"simpl":[0,4,6,7,8,9],"simpli":9,"simul":9,"sin":[5,6],"sinc":[8,9],"sinco":6,"sine":3,"singl":[2,3,5,6,7,8,9],"singularli":8,"six":8,"skip":[2,3],"slash":[8,9],"slice":[3,8],"slider":[8,9],"slightli":9,"slist":8,"small":[1,4,5,7,8],"smaller":5,"smooth":5,"so":[2,6,7,9],"softwar":[1,4,6,7,8,9],"solid":0,"solut":9,"some":[2,5,9],"songsheng":4,"sourc":[3,8,9],"space":[0,5],"special":[3,5,6,9],"specif":[2,6,8,9],"specifi":[0,3,5,6,7,8,9],"specimen":5,"spectra":9,"sphinx":8,"split":3,"sq":[0,3,5,9],"squar":6,"sr":6,"stai":9,"stand":[6,7],"standard":[2,5,8,9],"start":[0,1,2,3,5,6,8,9],"state":9,"statement":[5,8,9],"static":8,"step":[2,5,6,7,8,9],"still":9,"stoichiometri":[5,8],"stop":[6,8],"store":[3,9],"str":3,"string":[2,3,5,7,8,9],"strip":9,"structur":[0,7,8],"style":[3,6,8],"stylesheet":8,"sub":8,"subdirectori":9,"subfold":9,"subject":4,"subplot":[3,9],"subsequ":[3,5,8,9],"substr":9,"subtract":[1,8],"successfulli":9,"sudden":9,"sudo":2,"suffici":3,"suffix":9,"suitabl":9,"summari":7,"suppli":7,"support":[0,2,3,5,6,8],"suppress":[5,8],"svgz":8,"symbol":[3,5,8],"symlink":8,"synapt":2,"syntax":[0,3,5,6,9],"system":[2,3,6,9],"t":[0,2,3,4,5,7,9],"t4":9,"tabl":8,"tail":5,"take":[3,7,8],"taken":[5,9],"talapin":4,"tao":4,"taper":5,"technologi":[2,9],"tell":7,"temperatur":9,"templat":[0,5],"tend":9,"termin":[2,5,9],"terminationfunct":[5,8],"terribl":9,"test":[0,2,8],"test_blank":9,"test_pdfgett":8,"text":[0,2,3,5,6,7,9],"than":[0,3,8,9],"thank":9,"thatcher":8,"thei":[0,2,3,5,6,9],"them":[0,3,4,5,6,7,8,9],"thereaft":9,"therefor":[2,5,7,9],"theta":7,"thi":[0,2,3,4,5,6,7,8,9],"third":2,"those":[2,3,9],"three":[2,4,5],"threshold":5,"through":[7,8],"thu":[0,2,6,7,9],"ti":[5,8],"tif":7,"time":[5,8,9],"timothi":4,"timur":4,"togeth":[6,9],"token":[5,9],"told":7,"toml":8,"too":5,"tool":[2,7,8],"top":9,"total":[0,4,8,9],"trail":5,"transfer":[0,5,7,9],"transform":[3,5,7,8,9],"transformbackground":9,"transformfqgrid":9,"transformfqtogr":9,"transformqgridregular":9,"transformsqnormrpoli":9,"transformsqtofq":9,"transformterminationfunct":8,"transformtwothetatoqa":9,"transformxrayasfnormchri":9,"translat":3,"transpos":3,"true":[3,5,8,9],"truncat":5,"truste":4,"try":[6,9],"tunabl":9,"tune":[1,3,4,5],"tuneconfig":[1,3,8,9],"tupl":3,"turn":[5,9],"tutori":[1,3,5,7,8],"two":[0,5,7,9],"twotheta":[5,7,9],"twotheta1":3,"twotheta2":3,"twothetazero":[1,5,8],"twothetazerofit":8,"txt":8,"type":[0,2,3,5,7,8,9],"typic":7,"u":9,"ubuntu":2,"uncorrect":9,"undefin":5,"under":[4,8,9],"understood":[0,9],"unexpect":5,"unicod":8,"uniqu":[5,6,9],"unit":[0,5,7,8],"unittest":8,"univers":[4,8,9],"unix":[2,5,9],"unless":[5,7,8,9],"unpack":3,"unreli":5,"unseemli":9,"unsupport":8,"unus":8,"up":[0,2,3,9],"updat":[3,7,8,9],"upon":9,"upper":[5,7],"us":[1,2,3,4,5,6,7,8,9],"usag":[5,6,8],"usecol":[3,8],"user":[0,1,2,4,5,6,7,8,9],"usual":[0,2,9],"util":[4,6],"utilis":4,"v":[4,5,6],"valid":[0,2,5,9],"valu":[0,3,4,5,6,7,8,9],"van":[4,9],"variabl":[2,3,6,8,9],"variant":5,"varnam":0,"ventur":2,"verbos":[5,7,9],"veri":[2,5,7,9],"verifi":[2,5,7,9],"version":[1,2,5,6,8,9],"via":[8,9],"virtual":[2,7],"visual":[4,9],"vogt":4,"vuong":4,"w":[5,9],"w0":7,"wa":[4,8,9],"wai":[0,2,6,7,8,9],"want":2,"warn":[5,8,9],"wavelength":[4,5,7,8,9],"we":[2,4,7,9],"web":[5,6],"well":[2,7,9],"were":[0,2,5,7,9],"what":[0,3,5,9],"wheel":[2,8],"when":[0,2,3,5,6,7,8,9],"where":[0,5,6,7,8,9],"wherea":7,"whether":4,"which":[2,3,4,5,6,8,9],"while":[0,2,7,9],"whitespac":3,"whl":[2,9],"who":2,"whole":9,"wide":3,"window":[2,5,6,7,8,9],"within":[2,5,6,8],"without":[4,5,8,9],"word":5,"work":[0,2,3,5,6,7,8,9],"workflow":8,"wors":9,"would":[0,2,3,5,6,8,9],"wright":4,"writabl":2,"write":[5,7,9],"written":[2,4,5,9],"www":2,"x":[0,1,3,4,5,7,8],"x21":9,"xrai":[5,9],"xy":6,"y":[0,1,3,8,9],"ye":[5,8,9],"yet":[4,7,9],"yield":7,"york":4,"you":[0,2,4,9],"your":[0,4,9],"z":9,"zach":8,"zero":[3,5,8,9],"zoom":9,"zr":[5,8],"\u00e5":[0,2,3,5,6,7,8,9],"\u00e5ngstr\u00f6m":[0,5,7,8],"\u03b1":9},"titles":["Files used in PDF extraction","diffpy.pdfgetx","Installation","Interactive mode","Introduction","Options and parameters","The plotdata program","Quick-start guide","Release notes","Tutorial"],"titleterms":{"0":8,"1":8,"2":8,"3":8,"4":8,"The":6,"angl":9,"author":4,"background":9,"command":[2,7],"configur":[0,5,9],"content":1,"data":[6,9],"diffpi":1,"exampl":6,"extract":0,"file":[0,5,6,9],"fit":9,"from":9,"guid":7,"indic":1,"input":[0,5,9],"instal":2,"interact":[3,9],"introduct":4,"ipython":2,"licens":4,"magic":2,"match":9,"mode":3,"multipl":9,"name":9,"neutron":9,"nickel":9,"note":8,"notic":4,"oper":5,"option":5,"other":5,"output":[0,5,9],"paramet":[5,9],"path":9,"pdf":[0,5,9],"pdfgetn3":7,"pdfgets3":7,"pdfgetx":1,"pdfgetx3":7,"platinum":9,"plotdata":6,"predefin":9,"process":9,"program":[5,6],"quick":7,"rai":9,"refer":4,"releas":8,"requir":2,"saspdf":9,"scatter":9,"scratch":9,"search":9,"select":6,"seri":9,"small":9,"softwar":2,"start":7,"subtract":9,"tabl":1,"tune":9,"tutori":9,"twothetazero":9,"us":0,"x":[6,9],"y":6}})
\ No newline at end of file
diff --git a/static_root/doc/pdfgetx/2.4.0/tutorial.html b/static_root/doc/pdfgetx/2.4.0/tutorial.html
new file mode 100644
index 00000000..b7e3b63d
--- /dev/null
+++ b/static_root/doc/pdfgetx/2.4.0/tutorial.html
@@ -0,0 +1,908 @@
+
+
+
+
+
+
+
+
+ Tutorial — diffpy.pdfgetx No version found. The correct version will appear in the released version. documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
In this tutorial we will convert several X-ray powder diffraction
+patterns to corresponding PDFs. The examples can be obtained by
+doing the following:
Change to the Ni directory. The file named
+ni300mesh_300k_nor_1-5.chi contains powder X-ray data
+measured from nickel at the Advanced Photon Source beamline
+6ID-D. The file contains two columns for the 2Θ scattering
+angles and X-ray intensities. The second file
+kapton_bgrd_300k_nor_2-3.chi contains the background
+measurement, i.e., the intensities from an empty capillary.
+Finally, the pdfgetx3.cfg contains a complete configuration
+parameters for converting the powder pattern to a PDF. Since all
+processing parameters are already defined in the configuration file,
+the first PDF calculation is very simple and involves running the
+pdfgetx3 program
+with the powder data file as an argument:
+
$ pdfgetx3 ni300mesh_300k_nor_1-5.chi
+
+
+
For the first run there should be no output on the screen,
+however a new file, ni300mesh_300k_nor_1-5.gr should appear
+in the work directory.
+We can use the plotdata program,
+included with this software, to plot the output data:
+
$ plotdata ni300mesh_300k_nor_1-5.gr
+
+
+
This will open a graph window and start an IPython interactive session.
+To exit and close the figure, type exit() on the IPython prompt.
+Let’s run the program again, but now with a
+--verbose=info
+option, to show more details about the program actions.
+
$ pdfgetx3 --verbose=info ni300mesh_300k_nor_1-5.chi
+
+INFO:applying pdfgetx3 defaults
+INFO:set config.mode = xray
+INFO:searching for default config file /home/user/.pdfgetx3.cfg
+INFO:searching for default config file .pdfgetx3.cfg
+INFO:searching for default config file pdfgetx3.cfg
+INFO:loaded default config file pdfgetx3.cfg
+INFO:reset config.twothetazero = 0.0
+INFO:parsing config file section [DEFAULT]
+INFO:set config.dataformat = twotheta
+INFO:set config.backgroundfile = kapton_bgrd_300k_nor_2-3.chi
+INFO:set config.outputtypes = gr
+INFO:set config.wavelength = 0.142774
+INFO:set config.composition = Ni
+INFO:set config.qmaxinst = 26.5
+INFO:set config.qmax = 26.0
+INFO:set config.rmin = 0.0
+INFO:set config.rmax = 30.0
+INFO:set config.rstep = 0.01
+INFO:finished parsing config file
+INFO:processing command line options
+INFO:set config.verbose = info
+INFO:finished with command line options
+INFO:using 1 input files from the command line.
+INFO:configuring PDFGetter mode 'xray'
+INFO:calling config_xray
+INFO:started PDF processing.
+INFO:processing 'ni300mesh_300k_nor_1-5.chi'
+INFO:resolved output file '' as 'ni300mesh_300k_nor_1-5.gr'
+WARNING:ni300mesh_300k_nor_1-5.gr already exists.
+WARNING:Use "--force=yes" or "--force=once" to overwrite.
+INFO:elapsed time: 0.095
+
+
+
Here we can see what configuration files are searched, which of them
+get loaded and what are the effective values of the processing
+parameters. Unless the --verbose option is in effect, the
+program will show only messages that have either WARNING or ERROR
+importance. The warning line above indicates no output has been
+written, because that file already exists. This safety check can be
+overruled with the --force=yes option, upon
+which pdfgetx3 would overwrite any existing files.
+
PDFgetX3 output files start with a header that lists all the processing
+parameters and can be used as a valid configuration file with the
+-c option. Another option, --plot=[iq,sq,fq,gr] turns on plotting of the final PDF or of some other result. A
+side effect of the --plot option is that pdfgetx3 starts in
+an interactive mode, so the user can manipulate or save the plots. To
+put it all together, we are now going to redo the original PDF and plot
+its reduced total scattering function F(Q) and the PDF curve G(r). This
+time the chi file is not necessary, because the input file is already
+listed in the gr file that is now used as a custom configuration:
+
$ pdfgetx3 -c ni300mesh_300k_nor_1-5.gr --plot=fq,gr
+
+WARNING:ni300mesh_300k_nor_1-5.gr already exists.
+WARNING:Use "--force=yes" or "--force=once" to overwrite.
+
+Variables related to PDF processing:
+
+pdfgetter -- PDFGetter used for calculation.
+config -- configuration data used by PDFGetter.
+ See config.inputfiles for a list of inputs.
+iraw -- matrix of input raw intensities with 2 rows per file.
+iq sq fq gr -- intermediate results per each input file stored
+ as matrix rows.
+
+Functions:
+
+tuneconfig -- dynamically tune configuration variables.
+processfiles -- process specified data files.
+clearsession -- clear all elements from the inputfiles, iraw,
+ iq, sq, fq and gr variables.
+plotdata -- plot all or selected columns from a text data file.
+loaddata -- load all or selected columns from a text data file.
+findfiles -- search for files matching the specified patterns.
+
+Use "%pdfgetx3" for a fresh run without exiting IPython.
+In [1]:
+
+
+
This will open a plot figure similar to
+
+
Because of the interactive mode implied by plotting,
+the program enters an IPython session.
+The IPython environment is preloaded with several extra functions
+and variables related to the PDF processing. For example, the
+config variable stores all the configuration parameters,
+and its content can be displayed with the print()
+function as
The processfiles() function allows to redo the
+whole calculation and plotting process for additional input files or
+for new parameter values. To plot the F(Q) and G(r)
+curves calculated at Qmax = 22 Å-1, we can call
+processfiles() and pass it a keyword argument for
+the new qmax as follows:
+
In[2]:processfiles(qmax=22)
+
+# the qmax parameter was updated to a new value, thus
+In[3]:config.qmax
+Out[3]:22
+
+
+
There should be now two lines in each plot axis corresponding to
+the results at Qmax equal 26 and 22 Å-1. To exit the program,
+type exit().
We have already encountered the command-line option-c
+for specifying a custom configuration file. A special argument “NONE”,
+will make pdfgetx3 ignore any configuration files and start up in a
+default state. We can use this feature to process the nickel PDF as if
+we did not have any configuration file:
+
$ pdfgetx3 -c NONE ni300mesh_300k_nor_1-5.chi
+
+WARNING:Nothing to do, use "-t" or "--plot" options.
+ERROR:Configuration error: wavelength not specified.
+ERROR:See "--help" for more hints.
+
+
+
There is an error, for the wavelength is necessary to convert
+the scattering angle 2Θ to momentum transfer Q. The
+X-ray wavelength was 0.142774 Å, which can be passed with the
+-w,--wavelength option:
+
$ pdfgetx3 -c NONE ni300mesh_300k_nor_1-5.chi -w 0.142774
+
+...
+ERROR:Configuration error: Chemical composition not known.
+ERROR:See "--help" for more hints.
+
+
+
There is still an error. The PDF calculation needs an average
+X-ray scattering factor of the material, which is obtained from
+sample chemical composition. The composition can be specified
+with the --composition option. The example
+below uses a “\\” character to indicate the command continues
+on the next line. Such syntax works in Unix terminals, but
+on Windows the command has to be typed all on a single line:
+
$ pdfgetx3 -c NONE ni300mesh_300k_nor_1-5.chi -w 0.142774 \
+ --composition=Ni
+
+WARNING:Nothing to do, use "-t" or "--plot" options.
+...
+
+
+
There was no error message this time, but the program complains
+about a lack of action. The pdfgetx3 program does not write any results
+unless instructed by the -t,--outputtypes option.
+The outputtypes option recognizes the following result types:
+“iq”, “sq”, “fq”, “gr”. One or more of these type strings,
+separated by a comma, can be included with the
+-t option, which will produce the corresponding
+output files. An empty string, such as -t"", or -tNONE
+may be used to clear any outputtypes defined in the configuration file,
+and avoid the unseemly file-exists warnings.
+
At this point, we will not write any output files, but will use the
+--plot option to display the calculated curves. The
+--plot accepts the same arguments as outputtypes, so to
+display the F(Q) and G(r) curves we shall run
+
$ pdfgetx3 -c NONE ni300mesh_300k_nor_1-5.chi -w 0.142774 \
+ --composition=Ni --plot=fq,gr
+
+WARNING:qmaxinst reset to last nonzero point qmaxinst=28.0865680161
+WARNING:qmax reset to the data boundary qmaxinst=28.0865680161
+
+
+
which should open the following plot window:
+
+
The graphs look terrible. The PDF is very noisy and the F(Q) curve
+shows a sudden break at about 27 Å-1. What happened? The powder
+intensities are inaccurate at a very top of the detector angular range.
+The interactive session is setup with
+iraw, iq, sq,
+fq, gr
+variables for the original raw data and intermediate results. We
+are going to plot the “iq” variable that has the input intensities
+resampled on the Q grid. The matplotlib function
+clf() clears the figure,
+the iq variable is a two-row matrix with Q and I rows, and the
+axis()
+function lets us zoom to a given range:
The graph shows a sudden drop in the raw intensities at 27 Å-1.
+The qmaxinst variable defines a Q cutoff for a meaningful
+instrument intensities and, to be on a safe side, we are going to set
+it to 26.5 Å-1
The updated curves looks reasonable without any oscillations and
+breakpoints. The tuneconfig() function provides a
+GUI-driven way for visualizing the processing parameters and their
+effect on the results. Type tuneconfig() to execute the function,
+which should open a new window with several sliders. Try to move
+different sliders and see how do the F(Q) and G(r) curves change.
+The rpoly parameter controls the degree of data-correction
+polynomial and is an approximate low-r bound of reliable G
+values. Once the parameters are tuned, they may be set to
+exact values. We will also turn on the writing of the G(r)
+curve and save it to an output file nicmd.gr:
PDFgetX3 has been designed to handle large series of data files.
+With the fast area-detectors it is easy to measure hundreds of X-ray
+patterns in a time or temperature series. Normally, these input
+files need to be entered as command line arguments to the pdfgetx3
+program. This is usually no problem with Unix-like shells, which
+expand filename patterns to a list of matching files.
+However, such file generation is in general not available on Windows.
+The input file names tend to include scan numbers which are useful
+for selecting desired data, yet even with Unix shells it is
+difficult to match a range of scan numbers
+(z-shell being a notable exception).
The pdfgetx3 program includes a built-in function for finding
+a set of input files. The command line arguments are normally taken as
+input file names. However, if the -f,--find option is
+present, the arguments are understood as patterns and the program looks
+for files that match ALL of them. Another option
+-l,--list makes pdfgetx3 print out the matching files
+without any other action, which can be used to verify if the patterns
+match intended files.
+
We will try out this file search on platinum example files. Open a
+terminal and navigate to the Pt directory. There should be a
+series subdirectory with 6 chi files indexed from 903 to 908.
+At first, let’s stay in the Pt directory and run the following
+command
Without any patterns the file search matches all files in the current
+directory. Now let’s try to add name patterns. There are few special
+patterns, for example ^ matches at the beginning of the filename, $ at the end and <N-M> matches a range of integer values from
+N to M. The patterns containing ^$<> need to be quoted as
+these characters have special meaning in the shell. Here are some
+examples how it works.
+
Filenames containing “y”:
+
$ pdfgetx3 --list --find y
+empty_capillary-00032.chi
+plotpdfcomparison.py
+
+
+
Filenames that containing both “y” and “chi”, here we use the
+options --list and --find in an abbreviated
+form -l and -f:
The special argument + starts a new group of patterns to
+generate extra files when they cannot be all covered by
+a single set of patterns. For example, to match files that
+contain contain both “bulk” and “chi” substrings and then
+also those that have “empty” and “chi” in their names, use:
+
$ pdfgetx3 -lf bulk chi + empty chi
+Pt_bulk-00055.chi
+empty_capillary-00032.chi
+
+
+
When pattern groups overlap the resulting matches are
+made unique and each file is listed only once
+
$ pdfgetx3 -lf bulk chi + chi
+Pt_bulk-00055.chi
+empty_capillary-00032.chi
+
Each group of PDFgetX3 patterns can have one entry containing
+forward slash “/” to specify a non-current path that is searched
+for input files. The path specification affects the current and
+the following pattern groups unless they provide their own path.
+The chi files numbered “903” to “905” and “908” from the
+series subdirectory can be therefore matched using
When additional pattern groups contain only the path
+argument, they reuse the existing set of patterns. The
+“.chi”-ending files in the current and series
+directories can be thus found using
By default the output files are saved in the current directory. The
+output path, can be changed with the -o,--output option.
+The -o recognizes several tokens that are replaced with
+parts of the input file name, for example, “@b” expands to an
+extension-stripped base name. In similar faction, “@o” is replaced
+with the output type extension. Thus to generate PDFs for all files
+in the series directory and save them in the
+series-gr subfolder do
The extension “.@o” is automatic when not included anywhere in the
+output file name. Thus to process the Pt series at Qmax = 18 Å-1
+while saving the results in the same folder, but with a “_qmax18” suffix
+in their filenames do
For input file Pt_bulk_ramp03-00903.chi the -o option
+above expands to output path series-gr/Pt_bulk_ramp03-00903_qmax18.gr.
+The series-gr directory should now contain 12 “gr” files,
+6 of them processed at Qmax = 27 Å-1 as given by configuration
+file and 6 others processed at Qmax = 18 Å-1.
One of the most powerful features of PDFgetX3 is the ability to tune
+PDF processing parameters in an interactive mode and immediately
+visualize their effect on the results. To demonstrate this feature,
+navigate to the Ni directory in the shell and process
+the nickel PDF while plotting the F(Q) and G(r) curves.
+Because of plotting the program will open an interactive IPython
+session. The tuning mode can be then entered by calling the
+tuneconfig()
+function from the IPython environment
The
+tuneconfig()
+function will by default add a second set of live lines
+for the plotted curves and open a GUI dialog with sliders for the
+tunable process parameters. Changing any slider would immediately
+recalculate the PDF and update live lines in the plot.
+
+
The constant data scale check-box rescales the result curves to a
+constant maximum value. This is useful for assessing if a parameter
+change produces different curve shape or if it just rescales the
+results. The tunable parameters are described in the
+PDF parameters section.
+Only the active parameters are displayed in the tuneconfig GUI,
+thus there would be no slider for the bgscale parameter
+if PDF has been processed without any background data.
+
By default the
+tuneconfig()
+function displays the same curves as
+specified by the --plot option, however it can be
+configured to show arbitrary intermediate results or even visualize
+selected steps in the PDF processing. We shall demonstrate this by
+showing a live-plot of the polynomial correction together with the final
+PDF. At first, we shall use the describe() method of the
+pdfgetter() object to print out the chain of
+transformations involved in the PDF processing and obtain a reference to
+the transformation object t4 that applies the polynomial correction.
+The transformation object can be then included in a list of plot
+identifiers that are passed to the tuneconfig() function
+
$ pdfgetx3 -i ni300mesh_300k_nor_1-5.chi
+...
+Use "%pdfgetx3" for a fresh run without exiting IPython.
+
+In [1]: fig, ax = subplots(2)
+In [2]: pdfgetter.describe()
+0 TransformTwoThetaToQA
+ convert x data from twotheta to Q in 1/A
+1 TransformQGridRegular
+ Remove the data outside the (qmin, qmaxinst) range
+2 TransformBackground
+ subtract background intensity
+3 TransformXrayASFnormChris
+ scale and normalize intensities by x-ray scattering factors
+4 TransformSQnormRPoly
+ Normalize S(Q) by fitting a polynomial
+5 TransformSQToFQ
+ Convert S(Q) to F(Q).
+6 TransformFQgrid
+ Resample F(Q) to a regular grid suitable for FFT
+7 TransformFQToGr
+ Convert F(Q) to G(r).
+In [3]: t4 = pdfgetter.getTransformation(4)
+In [4]: tuneconfig([t4, 'gr'], axeslist=ax)
+In [5]: ax[0].legend(loc=2)
+
+
+
The subplots() function above
+is to create a new figure with 2 axes on top of each other.
+Overall, the code above should display the following plot
+and a GUI window:
+
+
The tuning can be finished by clicking the Done button or closing the
+tuneconfig GUI window. The parameter values can be thereafter adjusted
+to a rounded values by setting an attribute of the config
+object, for example:
+
In[5]:config.bgscale=1.5
+
+
+
Finally, to save the new results, we shall first confirm
+outputtypes have been correctly set and then use the
+processfiles() function to redo the calculations, plots and
+data output for the updated configuration. Note that the
+processfiles() function accepts keyword arguments for
+configuration parameters. This is used at line In [8] to
+turn on the force flag and is in effect a shortcut
+for an extra config.force=True statement.
This example illustrates PDF extraction from
+neutron powder data using pdfgetn3.
+Navigate to the n-Sapphire directory in the shell.
+The sapphire755.dat file contains powder diffraction data from
+sapphire (α-Al2O3)
+measured at the constant-wavelength PEARL instrument
+at the Delft University of Technology.
+The pdfgetn3.cfg configuration file specifies
+processing parameters such as wavelength,
+twothetazero, composition, and mode.
For a good quality PDF it is essential to use powder patterns with
+accurate values of Q. Some instruments may produce spectra with
+a slightly offset scattering angle 2Θ which
+causes inaccurate Q and a noticeably worse PDF.
+In this example we fit a constant-wavelength neutron PDF from nickel
+together with the twothetazero correction parameter for
+diffractometer offset.
+The procedure can be used to calibrate the zero correction from
+a standard sample and then use it for subsequent PDF extractions.
+The protocol can be also applied to fit zero correction in
+a full-fledged PDF refinement in case
+the zero offset may change for different samples.
+
This tutorial requires either Linux or Mac OS X platforms,
+because the PDF fitting is conducted with
+DiffPy-CMI,
+which is not yet available for Windows.
+If DiffPy-CMI is not yet installed,
+we recommend to use Anaconda Python and set up a dedicated
+Anaconda environment nbcmi for this tutorial.
+This can be accomplished using the following steps:
When these prerequisites are in place,
+change to the n-twothetazero-fit directory
+and open the self documented Jupyter notebook as follows
+
$ jupyter notebook fit-twothetazero.ipynb
+
+
+
The notebook sets up and executes several PDF refinements and
+compares the results from fits on uncorrected data and with
+a fitted twothetazero.
+After running all cells the notebook should produce similar graphs
+as in the figure below.
+
+
+
+
Refinement of nickel neutron PDF for (a) uncorrected data
+and (b) with a refined zero correction.
+The extracted PDFs are plotted as blue circles,
+simulated PDFs as red lines and
+the difference is plotted offset in green below.
+
+
+
The final refined zero offset in the notebook should be approximately -0.36°.
+The correction produces experimental PDF with a remarkably better fit
+residual Rw which is lowered from (a) 0.18 to (b) 0.05.
Here we illustrate how to extract a PDF from small-angle-scattering (sas) data using pdfgets3.
+To do this, navigate to the Au_DNA_NPA directory in your terminal.
+In this folder, you will find Au_DNA_NPA.chi and
+Au_DNA_FF.chi files which correspond to diffraction data from
+DNA-capped Au nanoparticle assemblies and from a DNA-capped Au
+nanoparticle colloidal solution respectively. Those two files were
+measured at X21 beamline, NSLS and published in D. Nykypanchuk, M. M.
+Maye, D. van der Lelie, and O. Gang, Nature 451, 549 (2008).. We thank Prof. Oleg Gang (Columbia University) for sharing this data. The pdfgets3.cfg
+configuration file specifies processing parameters such as formfactorfile (required by sas mode), qmin, qmax, and mode.
+
To extract the PDF of DNA-capped DNA nanoparticle assemblies
This will save two files Au_DNA_NPA.fq, Au_DNA_NPA.gr in the same directory for the F(Q) and G(r) functions. This also plots F(Q) and G(r) functions in a pop-up window and the processing parameters such as rpoly or so may be tuned interactively by issuing command tuneconfig() in the IPython session as discussed above.
In this tutorial, we will show how to use the multiple-background subtraction
+functionality by obtaining equivalent outputs from different, but equivalent,
+subtractions. Change directory to the Multiple_Background_Subtraction
+directory. The file named
+ni300mesh_300k_nor_1-5.chi contains powder X-ray data measured from
+nickel at the Advanced Photon Source beamline 6ID-D. The file contains two
+columns for the 2Θ scattering angles and X-ray intensities. Similarly,
+kapton_bgrd_300k_nor_2-3.chi contains the background data (i.e., the
+intensities from an empty kapton capillary), and a duplicate file
+kapton_bgrd_300k_nor_2-3_copy.chi contains the same dataset (this
+duplication of the data is necessary when using the same background multiple
+times as the internal system only stores a set of unique background filenames).
+The last .chi file, TEST_blank-00000.chi, simply stores a null
+dataset and can be used to show the invariance of the PDF under permutation of
+the order of background subtractions as well as the fact that more than just
+two backgrounds can be subtracted. There are also two config files
+nickel.cfg and nickel_sub_two_half_backgrounds.cfg, each of
+which contain a set of complete configuration parameters for converting the Ni
+powder pattern to a PDF for the case of doing so via a single background
+subtraction and a multiple background subtraction, respectively. Finally, there
+is a fully processed G(r) file ni300mesh_300k_nor_1-5-expected.gr which
+contains the expected output of producing the PDF of the Ni sample after
+subtracting the kapton background. Since all processing parameters are already
+defined in these configuration files, producing the PDF using multiple
+background subtractions is very simple and involves running the pdfgetx3 program and specifying the multiple background subtraction
+config file and the powder data file as arguments:
The multiple background subtraction functionality can also be carried out
+interactively, as per the Interactive tuning of parameters section, using the plural forms
+of the relevant variables (i.e., config.bgscales, config.backgroundfiles,
+etc.).