aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2010-09-26 19:07:01 +0200
committerThomas White <taw@physics.org>2012-02-22 15:26:59 +0100
commitd6fbf62c239cb4f9bd94c2cf4fdb47bf808df985 (patch)
treed25fa752932b89db94e55185a9311427cac44f63 /doc
parent09b3d00c9c2cf365f2cf7c278f86459823032c36 (diff)
Move documentation around
Diffstat (limited to 'doc')
-rw-r--r--doc/0-INDEX19
-rw-r--r--doc/Makefile.am4
-rw-r--r--doc/Makefile.in4
-rw-r--r--doc/examples/Makefile.am2
-rw-r--r--doc/examples/Makefile.in374
-rw-r--r--doc/examples/lcls-dec.geom23
-rw-r--r--doc/examples/lcls-june-r0013-r0128.geom23
-rw-r--r--doc/examples/simple.geom21
-rw-r--r--doc/process_hkl.txt48
-rw-r--r--doc/symmetry.txt17
10 files changed, 524 insertions, 11 deletions
diff --git a/doc/0-INDEX b/doc/0-INDEX
new file mode 100644
index 00000000..40c9489c
--- /dev/null
+++ b/doc/0-INDEX
@@ -0,0 +1,19 @@
+Index to the CrystFEL documentation
+-----------------------------------
+
+indexamajig.txt
+pattern_sim.txt
+process_hkl.txt
+ Information about the individual programs and their use.
+
+geometry.txt
+ Information about detector geometry description files.
+
+twin-calculator.pdf
+ Symmetry tables (in two formats).
+
+symmetry.txt
+ How CrystFEL uses symmetry.
+
+examples/
+ Contains example geometry files.
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 77e3ec2c..1f2a557c 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,3 +1,3 @@
crystfeldir = $(docdir)
-crystfel_DATA = geometry indexamajig pattern_sim process_hkl symmetry \
- twin-calculator.pdf
+crystfel_DATA = geometry.txt indexamajig.txt pattern_sim.txt process_hkl.txt \
+ symmetry.txt twin-calculator.pdf 0-INDEX
diff --git a/doc/Makefile.in b/doc/Makefile.in
index de37ccaa..5b03aaf3 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -166,8 +166,8 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
crystfeldir = $(docdir)
-crystfel_DATA = geometry indexamajig pattern_sim process_hkl symmetry \
- twin-calculator.pdf
+crystfel_DATA = geometry.txt indexamajig.txt pattern_sim.txt process_hkl.txt \
+ symmetry.txt twin-calculator.pdf 0-INDEX
all: all-am
diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am
new file mode 100644
index 00000000..e6eb011f
--- /dev/null
+++ b/doc/examples/Makefile.am
@@ -0,0 +1,2 @@
+crystfeldir = $(docdir)/examples
+crystfel_DATA = lcls-dec.geom lcls-june-r0013-r0128.geom simple.geom
diff --git a/doc/examples/Makefile.in b/doc/examples/Makefile.in
new file mode 100644
index 00000000..f797b5c1
--- /dev/null
+++ b/doc/examples/Makefile.in
@@ -0,0 +1,374 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = doc/examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(crystfeldir)"
+DATA = $(crystfel_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+crystfeldir = $(docdir)/examples
+crystfel_DATA = lcls-dec.geom lcls-june-r0013-r0128.geom simple.geom
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/examples/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-crystfelDATA: $(crystfel_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(crystfeldir)" || $(MKDIR_P) "$(DESTDIR)$(crystfeldir)"
+ @list='$(crystfel_DATA)'; test -n "$(crystfeldir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(crystfeldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(crystfeldir)" || exit $$?; \
+ done
+
+uninstall-crystfelDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(crystfel_DATA)'; test -n "$(crystfeldir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(crystfeldir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(crystfeldir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(crystfeldir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-crystfelDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-crystfelDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-crystfelDATA install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am uninstall uninstall-am uninstall-crystfelDATA
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/examples/lcls-dec.geom b/doc/examples/lcls-dec.geom
new file mode 100644
index 00000000..7403f004
--- /dev/null
+++ b/doc/examples/lcls-dec.geom
@@ -0,0 +1,23 @@
+n_panels = 2
+
+; Upper panel
+0/min_x = 0
+0/max_x = 1023
+0/min_y = 512
+0/max_y = 1023
+0/cx = 491.9
+0/cy = 440.7
+0/clen = 67.8e-3
+0/res = 13333.3 ; 75 micron pixel size
+0/badrow_direction = y
+
+; Lower panel
+1/min_x = 0
+1/max_x = 1023
+1/min_y = 0
+1/max_y = 511
+1/cx = 492.0
+1/cy = 779.7
+1/clen = 70.8e-3
+1/res = 13333.3 ; 75 micron pixel size
+1/badrow_direction = y
diff --git a/doc/examples/lcls-june-r0013-r0128.geom b/doc/examples/lcls-june-r0013-r0128.geom
new file mode 100644
index 00000000..1e3834d8
--- /dev/null
+++ b/doc/examples/lcls-june-r0013-r0128.geom
@@ -0,0 +1,23 @@
+n_panels = 2
+
+; Upper panel (nearest the beam)
+0/min_x = 0
+0/max_x = 1023
+0/min_y = 512
+0/max_y = 1023
+0/cx = 512.9
+0/cy = 459.0
+0/clen = 64.78e-3
+0/res = 13333.3 ; 75 micron pixel size
+0/badrow_direction = y
+
+; Lower panel (furthest from the beam)
+1/min_x = 0
+1/max_x = 1023
+1/min_y = 0
+1/max_y = 511
+1/cx = 519.0
+1/cy = 901.0
+1/clen = 67.73e-3
+1/res = 13333.3 ; 75 micron pixel size
+1/badrow_direction = y
diff --git a/doc/examples/simple.geom b/doc/examples/simple.geom
new file mode 100644
index 00000000..0c309c27
--- /dev/null
+++ b/doc/examples/simple.geom
@@ -0,0 +1,21 @@
+n_panels = 2
+
+; Upper panel
+0/min_x = 0
+0/max_x = 1023
+0/min_y = 512
+0/max_y = 1023
+0/cx = 512.0
+0/cy = 502.0
+0/clen = 50.0e-3
+0/res = 13333.3 ; 75 micron pixel size
+
+; Lower panel
+1/min_x = 0
+1/max_x = 1023
+1/min_y = 0
+1/max_y = 511
+1/cx = 512.0
+1/cy = 522.0
+1/clen = 50.0e-3
+1/res = 13333.3 ; 75 micron pixel size
diff --git a/doc/process_hkl.txt b/doc/process_hkl.txt
index b6411285..51742b3f 100644
--- a/doc/process_hkl.txt
+++ b/doc/process_hkl.txt
@@ -4,3 +4,51 @@ process_hkl - data scaling and merging program
This program takes as input the data stream from "indexamajig". It merges the
many individual intensities together to form a single list of reflection
intensities which are useful for crystallography.
+
+Typical usage is of the form:
+
+$ process_hkl -i mypatterns.stream -o mydata.hkl -y mypointgroup
+
+
+How to choose the point group
+-----------------------------
+
+One of the main features of serial crystallography is that the orientations of
+individual crystals are random. That means that the orientation of each
+crystal must be determined independently, with no information about its
+relationship to the orientation of crystals in other patterns (as would be the
+case for a rotation series of patterns).
+
+The orientation of a crystal can be determined from the diffraction pattern only
+within certain limits. For example, it is never possible, by geometry alone, to
+distinguish between a diffraction pattern and its inverse, e.g. to tell the
+[001] zone axis from [00-1]. That means that it is impossible to tell the
+difference between a reflection and its Friedel opposite. If Friedel's Law is
+not strictly observed, as is the case for data showing anomalous effects, and if
+we wish to measure the anomalous differences, then another way to distinguish
+the orientations apart must be determined.
+
+So far, there is no such method which works reliably. You will need to take
+this into account when deciding how to merge the data.
+
+Because of the above, the use of symmetry in serial crystallography is
+"backwards" with respect to the method in conventional crystallography. If you
+are not interested in distinguishing between any of the possible ambiguities,
+then you would just treat ambiguous reflections as equivalent and merge them
+together in a high-symmetry point group. If you needed to distinguish between
+them, then you would merge into a lower symmetry.
+
+Having first determined the point group for the structure under examination,
+decide whether or not you need to tell Friedel opposites (Bijvoet pairs) apart.
+If not, merge according to the Laue class corresponding to the point group. The
+Laue class is just the point group after introducing a centre of symmetry. The
+point group is equivalent to the Laue class if the structure is centrosymmetric.
+
+Some Laue classes are merohedral. This means that the orientation will have an
+additional ambiguity, but this time more serious. The two (or more) possible
+orientations could be called "twins", but the mechanism of their formation is
+somewhat different to the conventional use of the term. In these cases, you
+will need to merge according to the corresponding holohedral Laue class.
+
+The document twin-calculator.pdf contains more detailed information about this
+issue, as well as tables which contain all the required information.
diff --git a/doc/symmetry.txt b/doc/symmetry.txt
index 3b3ee124..4deafa35 100644
--- a/doc/symmetry.txt
+++ b/doc/symmetry.txt
@@ -1,19 +1,22 @@
How CrystFEL handles symmetry
-----------------------------
-Currently, only process_hkl and render_hkl understand symmetry (and render_hkl
-only understands it when plotting a zone axis pattern).
+Most programs in CrystFEL understand point group symmetry. The exception is
+"get_hkl", which you can read about below. You give the point group following
+the "-y" option to the programs.
+
+Please read doc/process_hkl for important information on how symmetry is used
+during the indexing and merging procedures.
Symmetry definitions are included in src/symmetry.c. Point group definitions
are required for merging and the display of merged results, but space groups are
not taken into account since merging does not care about systematic absences -
-as far as process_hkl is concerned, systematic absences are just measurements
+as far as CrystFEL is concerned, systematic absences are just measurements
which happen to have values of zero. Each space group belongs to exactly one
point group, which you can look up in the International Tables for X-Ray
-Crystallography.
-
-Please read doc/process_hkl for important information on how symmetry is used
-during the indexing and merging procedures.
+Crystallography. Alternatively, "twin-calculator.pdf" in the same directory as
+this file lists all the space groups according to point group, Laue class and
+holohedry.
Adding a new point group