Skip to content

Files in doc directory #157

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Aug 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
194 changes: 194 additions & 0 deletions doc/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# Makefile for Sphinx documentation
#

# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
BASENAME = $(subst .,,$(subst $() $(),,diffpy.pdfgui))

# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif

# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source

.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext

help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"

clean:
rm -rf $(BUILDDIR)/*

html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."

singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."

pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."

json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."

htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."

qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/$(BASENAME).qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/$(BASENAME).qhc"

devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/$(BASENAME)"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/$(BASENAME)"
@echo "# devhelp"

epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."

latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."

latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."

latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."

text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."

man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."

texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."

info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."

gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."

changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."

linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."

doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."

# Manual publishing to the gh-pages branch

GITREPOPATH = $(shell cd $(CURDIR) && git rev-parse --git-dir)
GITREMOTE = origin
GITREMOTEURL = $(shell git config --get remote.$(GITREMOTE).url)
GITLASTCOMMIT = $(shell git rev-parse --short HEAD)

publish:
@test -d build/html || \
( echo >&2 "Run 'make html' first!"; false )
git show-ref --verify --quiet refs/heads/gh-pages || \
git branch --track gh-pages $(GITREMOTE)/gh-pages
test -d build/gh-pages || \
git clone -s -b gh-pages $(GITREPOPATH) build/gh-pages
cd build/gh-pages && \
git pull $(GITREMOTEURL) gh-pages
rsync -acv --delete --exclude=.git --exclude=.rsync-exclude \
--exclude-from=build/gh-pages/.rsync-exclude \
--link-dest=$(CURDIR)/build/html build/html/ build/gh-pages/
cd build/gh-pages && \
git add --all . && \
git diff --cached --quiet || \
git commit -m "Sync with the source at $(GITLASTCOMMIT)."
cd build/gh-pages && \
git push origin gh-pages
148 changes: 148 additions & 0 deletions doc/TUTORIAL.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
===============================================================================
Welcome to the PDFgui tutorial
===============================================================================

The latest version of this document is available online at

`http://danse.us/trac/diffraction/browser/diffraction/diffpy/diffpy/pdfgui/doc`_

Please, have your co-workers or students try it out and let us know if you
have any comments. We want to make it really easy for the new users to get
started with PDFgui.

-------------------------------------------------------------------------------

Lesson 1: Creating simple fit of Ni PDF
----------------------------------------

Input files:

* `<tutorial/Ni-xray.gr>`_ - experimental X-ray PDF data
* `<tutorial/Ni.stru>`_ - Ni f.c.c. structure in PDFfit format

Procedure:

1. Open a terminal and type ``pdfgui`` to start the program.

2. Create a new Fit:
1. Select "FITTING" in the left-most vertical tab.
2. Click right mouse button in the left panel and choose "New Fit" in the pop-up menu.

3. Load structure model:
1. Place the cursor of the mouse onto the title of the Fit, click the right button and choose "Insert Phase" in the pop-up menu.
2. Click the "Open" button and load the `Ni.stru` file.

The right panel has 3 tabs for the initial configuration, constraints panel for expressing structure properties as functions of tunable parameters, and Results panel for refined structure.

4. Load experimental PDF data:
1. Select the title of "Fit 1", click the right button and choose "Insert Data Set" in the pop-up menu.
2. Load the `Ni-xray.gr` file.

Again, the right panel shows 3 tabs for properties of this dataset.

5. Define what is refined:
1. Click on the `Ni-xray.gr` data and select the "Constraints" tab.
2. Type ``@1`` into "Scale Factor" edit box.
3. Select the `Ni.stru` phase and its "Constraints" tab.
4. Fill "a", "b", "c" boxes with ``@5``.

A refined variable can be expressed as a math expression:
``f(@n1, @n2, @n3, ...)`` where
``@n1`` stands for fitted parameter and
``n1, n2, ...`` are arbitrary positive integers.
This allows simple linking of related variables - for example, since
cell lengths a, b, c are all expressed as ``@5``, the refined structure will remain cubic.

6. Start the refinement:
1. Select "Fit 1" in the left panel. The parameters panel shows a list of used parameters and their initial values.
2. Click the "gear" icon on the toolbar and watch the fit progress in the terminal window.

7. Plot the results:
1. Select "PLOTTING" in the left-most vertical tab.
2. Select the `Ni-xray.gr` dataset.
3. Select "r" as the X plotting variable.
4. Hold down shift and select "Gcalc" and "Gtrunc" as the Y plotting variables.
5. Click "Plot" button.

A new window pops up with plots. You can try out the buttons in the toolbar below.

8. Save your project for later use.

-------------------------------------------------------------------------------

Lesson 2: Build structure model using crystal symmetry
------------------------------------------------------

In the previous example the initial structure was defined by an existing file. However, PDFgui makes it very easy to build a structure model from scratch and constrain it with arbitrary crystal symmetry.

1. Create a blank structure:
1. Click the FITTING tab.
2. Repeat steps 1-3a from Lesson 1, but choose the "New" button. Rename "New Phase" to "Ni fcc".

2. Define asymmetric unit:
1. Right click the header of the empty atoms grid in the "Configure" page.
2. Insert 1 atom using the popup menu.
3. Change the elem cell to "Ni".
4. Select the u11-u33 cells and type "0.004" and press Enter.

3. Expand to all equivalent positions:
1. Right click the first Ni atom and select "Expand space group". A "Space Group Expansion" dialog should open.
2. In the dialog, select Fm-3m or just type 225 in the "Space Group" box and hit "OK".

You should now have four atoms in the atoms grid.

4. Generate symmetry constraints:
1. Select the "Constraints" tab.
2. Select all atoms. This can be done by dragging the mouse over the atom names or by clicking on the "elem" header.
3. Right click in a selected cell and select "Symmetry constraints." A "Space Group Constraints" dialog should open.
4. "Fm-3m" should already appear in the "Space Group" box. If it does not, select it as you did in step 3 and hit "OK".

The u11-u33 cells should all read the same value. The "x", "y" and "z" cells should be all empty because Ni atoms are at special positions in Fm-3m. You may try to select lower-symmetry space and check what happens with the constraints. The space group constraints may be mixed by selecting different groups of atoms, for example, when only certain species show lowered symmetry.

5. Continue the fit as in Lesson 1.

-------------------------------------------------------------------------------

Lesson 3: Multi-stage fitting
-----------------------------

Learn how to string together fits.

1. Create a fit as in Lesson 1.

2. Copy the fit:
1. Right click on the fit name "Fit 1" in the right panel (the fit tree).
2. Select "Copy" from the pop-up menu.

3. Paste the fit:
1. Right click in the empty space between the first fit in the fit tree.
2. Select "Paste Fit." This will create "Fit 1_copy", a copy of "Fit 1" in the fit tree.

4. Link the fits:
1. Click on "Fit 1_copy" in the fit tree.
2. In the "Parameters" panel, select the entire "Initial" column.
3. Type ``=Fit 1`` and then press Enter. The "Initial" values of the parameters should now read ``=Fit1:n``, where "n" is the index of the parameter.

This is the linking syntax: ``=name:index``.
"name" is the name of another fit.
"index" is the index of a parameter in that fit.
If you omit "index", it will default to the index of the parameter you are linking from. A linked parameter uses the refined value of the link as its initial value. This is useful when you are running several related fits.

5. Add more fit parameters:
1. Select the "Constraints" tab of the `Ni.stru` phase below "Fit 1_copy".
2. Write ``@9`` in the "delta2" box.

6. Run the fit and plot the results:
1. Run the fit as in Lesson 1.
2. Plot the fit as in Lesson 1, but this time hold down Control and select the data sets from "Fit 1" and "Fit 1_copy". You can change the "offset" in the plotting window to 0 to place the plots on top of each other.

-------------------------------------------------------------------------------

References:
-----------

1. `(pdf) <manual/Proffen-jac-1999.pdf>`_,
Th. Proffen and S. J. L. Billinge, PDFFIT a program for full profile structural refinement of the atomic pair distribution function, J. Appl. Crystallogr. 32, 572-575 (1999)

2. `(pdf) <manual/Farrow-jpcm-2007.pdf>`_,
C. L. Farrow, P. Juhas, J. W. Liu, D. Bryndin, J. Bloch, Th. Proffen and S. J. L. Billinge, PDFfit2 and PDFgui: Computer programs for studying nanostructure in crystals, J. Phys.: Condens. Matter 19, 335219 (2007)
File renamed without changes.
File renamed without changes.
36 changes: 36 additions & 0 deletions doc/make.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
@ECHO OFF

pushd %~dp0

REM Command file for Sphinx documentation

if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
set SPHINXPROJ=PackagingScientificPython

if "%1" == "" goto help

%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)

%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
goto end

:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%

:end
popd
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Empty file added doc/source/_static/.placeholder
Empty file.
Loading
Loading