aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/examples/cspad-cxiformat.geom652
-rw-r--r--doc/examples/cspad-single.geom (renamed from doc/examples/cspad-feb2011.geom)381
-rw-r--r--doc/man/ambigator.12
-rw-r--r--doc/man/check_hkl.12
-rw-r--r--doc/man/compare_hkl.14
-rw-r--r--doc/man/crystfel.711
-rw-r--r--doc/man/crystfel_geometry.519
-rw-r--r--doc/man/geoptimiser.125
-rw-r--r--doc/man/hdfsee.112
-rw-r--r--doc/man/indexamajig.157
-rw-r--r--doc/man/list_events.15
-rw-r--r--doc/man/partial_sim.17
-rw-r--r--doc/man/partialator.125
-rw-r--r--doc/reference/libcrystfel/CrystFEL-docs.sgml7
-rw-r--r--doc/reference/libcrystfel/CrystFEL-sections.txt36
15 files changed, 872 insertions, 373 deletions
diff --git a/doc/examples/cspad-cxiformat.geom b/doc/examples/cspad-cxiformat.geom
new file mode 100644
index 00000000..7c1baf14
--- /dev/null
+++ b/doc/examples/cspad-cxiformat.geom
@@ -0,0 +1,652 @@
+; Example of a geometry file for CSPAD data output by Cheetah in CXI format
+
+photon_energy = /LCLS/photon_energy_eV
+clen = /LCLS/detector_1/EncoderValue
+coffset = 0.573224
+adu_per_eV = 0.00338
+res = 9097.53
+
+
+; The following lines define how to interpret the three-dimensional data array
+; containing the image data. The first dimension is the event number, the
+; second and third are spatial dimensions.
+
+dim0 = %
+dim1 = ss
+dim2 = fs
+data = /entry_1/data_1/data
+
+
+; These following lines define where to find a "bad pixel mask" for each event,
+; and how to interpret its contents.
+
+mask = /entry_1/data_1/mask
+mask_good = 0x0000
+mask_bad = 0xffff
+
+
+; The following lines define "rigid groups" which express the physical
+; construction of the detector. This is used when refining the detector
+; geometry.
+
+rigid_group_q0 = q0a0,q0a1,q0a2,q0a3,q0a4,q0a5,q0a6,q0a7,q0a8,q0a9,q0a10,q0a11,q0a12,q0a13,q0a14,q0a15
+rigid_group_q1 = q1a0,q1a1,q1a2,q1a3,q1a4,q1a5,q1a6,q1a7,q1a8,q1a9,q1a10,q1a11,q1a12,q1a13,q1a14,q1a15
+rigid_group_q2 = q2a0,q2a1,q2a2,q2a3,q2a4,q2a5,q2a6,q2a7,q2a8,q2a9,q2a10,q2a11,q2a12,q2a13,q2a14,q2a15
+rigid_group_q3 = q3a0,q3a1,q3a2,q3a3,q3a4,q3a5,q3a6,q3a7,q3a8,q3a9,q3a10,q3a11,q3a12,q3a13,q3a14,q3a15
+
+rigid_group_a0 = q0a0,q0a1
+rigid_group_a1 = q0a2,q0a3
+rigid_group_a2 = q0a4,q0a5
+rigid_group_a3 = q0a6,q0a7
+rigid_group_a4 = q0a8,q0a9
+rigid_group_a5 = q0a10,q0a11
+rigid_group_a6 = q0a12,q0a13
+rigid_group_a7 = q0a14,q0a15
+rigid_group_a8 = q1a0,q1a1
+rigid_group_a9 = q1a2,q1a3
+rigid_group_a10 = q1a4,q1a5
+rigid_group_a11 = q1a6,q1a7
+rigid_group_a12 = q1a8,q1a9
+rigid_group_a13 = q1a10,q1a11
+rigid_group_a14 = q1a12,q1a13
+rigid_group_a15 = q1a14,q1a15
+rigid_group_a16 = q2a0,q2a1
+rigid_group_a17 = q2a2,q2a3
+rigid_group_a18 = q2a4,q2a5
+rigid_group_a19 = q2a6,q2a7
+rigid_group_a20 = q2a8,q2a9
+rigid_group_a21 = q2a10,q2a11
+rigid_group_a22 = q2a12,q2a13
+rigid_group_a23 = q2a14,q2a15
+rigid_group_a24 = q3a0,q3a1
+rigid_group_a25 = q3a2,q3a3
+rigid_group_a26 = q3a4,q3a5
+rigid_group_a27 = q3a6,q3a7
+rigid_group_a28 = q3a8,q3a9
+rigid_group_a29 = q3a10,q3a11
+rigid_group_a30 = q3a12,q3a13
+rigid_group_a31 = q3a14,q3a15
+
+rigid_group_collection_quadrants = q0,q1,q2,q3
+rigid_group_collection_asics = a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31
+
+
+; The geometrical parameters for the panels follow.
+; The above parameters can also be set for each panel individually, but usually
+; it makes more sense to define them once for all panels.
+
+q0a0/min_fs = 0
+q0a0/min_ss = 0
+q0a0/max_fs = 193
+q0a0/max_ss = 184
+q0a0/fs = +0.004806x +0.999989y
+q0a0/ss = -0.999989x +0.004806y
+q0a0/corner_x = 443.819
+q0a0/corner_y = -49.8719
+
+q0a1/min_fs = 194
+q0a1/min_ss = 0
+q0a1/max_fs = 387
+q0a1/max_ss = 184
+q0a1/fs = +0.004806x +0.999989y
+q0a1/ss = -0.999989x +0.004806y
+q0a1/corner_x = 444.766
+q0a1/corner_y = 147.126
+
+q0a2/min_fs = 0
+q0a2/min_ss = 185
+q0a2/max_fs = 193
+q0a2/max_ss = 369
+q0a2/fs = +0.003265x +0.999995y
+q0a2/ss = -0.999995x +0.003265y
+q0a2/corner_x = 239.8
+q0a2/corner_y = -49.3504
+
+q0a3/min_fs = 194
+q0a3/min_ss = 185
+q0a3/max_fs = 387
+q0a3/max_ss = 369
+q0a3/fs = +0.003265x +0.999995y
+q0a3/ss = -0.999995x +0.003265y
+q0a3/corner_x = 240.444
+q0a3/corner_y = 147.649
+
+q0a4/min_fs = 0
+q0a4/min_ss = 370
+q0a4/max_fs = 193
+q0a4/max_ss = 554
+q0a4/fs = -0.999997x +0.002424y
+q0a4/ss = -0.002424x -0.999997y
+q0a4/corner_x = 872.219
+q0a4/corner_y = 342.054
+
+q0a5/min_fs = 194
+q0a5/min_ss = 370
+q0a5/max_fs = 387
+q0a5/max_ss = 554
+q0a5/fs = -0.999997x +0.002424y
+q0a5/ss = -0.002424x -0.999997y
+q0a5/corner_x = 675.22
+q0a5/corner_y = 342.532
+
+q0a6/min_fs = 0
+q0a6/min_ss = 555
+q0a6/max_fs = 193
+q0a6/max_ss = 739
+q0a6/fs = -0.999997x +0.002685y
+q0a6/ss = -0.002685x -0.999997y
+q0a6/corner_x = 871.381
+q0a6/corner_y = 135.836
+
+q0a7/min_fs = 194
+q0a7/min_ss = 555
+q0a7/max_fs = 387
+q0a7/max_ss = 739
+q0a7/fs = -0.999997x +0.002685y
+q0a7/ss = -0.002685x -0.999997y
+q0a7/corner_x = 674.382
+q0a7/corner_y = 136.365
+
+q0a8/min_fs = 0
+q0a8/min_ss = 740
+q0a8/max_fs = 193
+q0a8/max_ss = 924
+q0a8/fs = -0.000078x -0.999999y
+q0a8/ss = +0.999999x -0.000078y
+q0a8/corner_x = 480.758
+q0a8/corner_y = 769.64
+
+q0a9/min_fs = 194
+q0a9/min_ss = 740
+q0a9/max_fs = 387
+q0a9/max_ss = 924
+q0a9/fs = -0.000078x -0.999999y
+q0a9/ss = +0.999999x -0.000078y
+q0a9/corner_x = 480.743
+q0a9/corner_y = 572.64
+
+q0a10/min_fs = 0
+q0a10/min_ss = 925
+q0a10/max_fs = 193
+q0a10/max_ss = 1109
+q0a10/fs = +0.001551x -0.999999y
+q0a10/ss = +0.999999x +0.001551y
+q0a10/corner_x = 689.447
+q0a10/corner_y = 770.295
+
+q0a11/min_fs = 194
+q0a11/min_ss = 925
+q0a11/max_fs = 387
+q0a11/max_ss = 1109
+q0a11/fs = +0.001551x -0.999999y
+q0a11/ss = +0.999999x +0.001551y
+q0a11/corner_x = 689.752
+q0a11/corner_y = 573.296
+
+q0a12/min_fs = 0
+q0a12/min_ss = 1110
+q0a12/max_fs = 193
+q0a12/max_ss = 1294
+q0a12/fs = -0.999998x -0.002161y
+q0a12/ss = +0.002161x -0.999998y
+q0a12/corner_x = 445.672
+q0a12/corner_y = 751.701
+
+q0a13/min_fs = 194
+q0a13/min_ss = 1110
+q0a13/max_fs = 387
+q0a13/max_ss = 1294
+q0a13/fs = -0.999998x -0.002161y
+q0a13/ss = +0.002161x -0.999998y
+q0a13/corner_x = 248.672
+q0a13/corner_y = 751.276
+
+q0a14/min_fs = 0
+q0a14/min_ss = 1295
+q0a14/max_fs = 193
+q0a14/max_ss = 1479
+q0a14/fs = -0.999999x -0.000074y
+q0a14/ss = +0.000074x -0.999999y
+q0a14/corner_x = 445.151
+q0a14/corner_y = 541.081
+
+q0a15/min_fs = 194
+q0a15/min_ss = 1295
+q0a15/max_fs = 387
+q0a15/max_ss = 1479
+q0a15/fs = -0.999999x -0.000074y
+q0a15/ss = +0.000074x -0.999999y
+q0a15/corner_x = 248.151
+q0a15/corner_y = 541.066
+
+q1a0/min_fs = 388
+q1a0/min_ss = 0
+q1a0/max_fs = 581
+q1a0/max_ss = 184
+q1a0/fs = -0.999990x -0.004167y
+q1a0/ss = +0.004167x -0.999990y
+q1a0/corner_x = 28.4776
+q1a0/corner_y = 436.83
+
+q1a1/min_fs = 582
+q1a1/min_ss = 0
+q1a1/max_fs = 775
+q1a1/max_ss = 184
+q1a1/fs = -0.999990x -0.004167y
+q1a1/ss = +0.004167x -0.999990y
+q1a1/corner_x = -168.52
+q1a1/corner_y = 436.009
+
+q1a2/min_fs = 388
+q1a2/min_ss = 185
+q1a2/max_fs = 581
+q1a2/max_ss = 369
+q1a2/fs = -1.000001x +0.000385y
+q1a2/ss = -0.000385x -1.000001y
+q1a2/corner_x = 29.3559
+q1a2/corner_y = 226.978
+
+q1a3/min_fs = 582
+q1a3/min_ss = 185
+q1a3/max_fs = 775
+q1a3/max_ss = 369
+q1a3/fs = -1.000001x +0.000385y
+q1a3/ss = -0.000385x -1.000001y
+q1a3/corner_x = -167.644
+q1a3/corner_y = 227.054
+
+q1a4/min_fs = 388
+q1a4/min_ss = 370
+q1a4/max_fs = 581
+q1a4/max_ss = 554
+q1a4/fs = +0.000539x -1.000000y
+q1a4/ss = +1.000000x +0.000539y
+q1a4/corner_x = -364.144
+q1a4/corner_y = 859.163
+
+q1a5/min_fs = 582
+q1a5/min_ss = 370
+q1a5/max_fs = 775
+q1a5/max_ss = 554
+q1a5/fs = +0.000539x -1.000000y
+q1a5/ss = +1.000000x +0.000539y
+q1a5/corner_x = -364.038
+q1a5/corner_y = 662.163
+
+q1a6/min_fs = 388
+q1a6/min_ss = 555
+q1a6/max_fs = 581
+q1a6/max_ss = 739
+q1a6/fs = -0.000337x -1.000000y
+q1a6/ss = +1.000000x -0.000337y
+q1a6/corner_x = -156.511
+q1a6/corner_y = 857.902
+
+q1a7/min_fs = 582
+q1a7/min_ss = 555
+q1a7/max_fs = 775
+q1a7/max_ss = 739
+q1a7/fs = -0.000337x -1.000000y
+q1a7/ss = +1.000000x -0.000337y
+q1a7/corner_x = -156.577
+q1a7/corner_y = 660.902
+
+q1a8/min_fs = 388
+q1a8/min_ss = 740
+q1a8/max_fs = 581
+q1a8/max_ss = 924
+q1a8/fs = +0.999996x +0.002303y
+q1a8/ss = -0.002303x +0.999996y
+q1a8/corner_x = -786.718
+q1a8/corner_y = 463.506
+
+q1a9/min_fs = 582
+q1a9/min_ss = 740
+q1a9/max_fs = 775
+q1a9/max_ss = 924
+q1a9/fs = +0.999996x +0.002303y
+q1a9/ss = -0.002303x +0.999996y
+q1a9/corner_x = -589.719
+q1a9/corner_y = 463.959
+
+q1a10/min_fs = 388
+q1a10/min_ss = 925
+q1a10/max_fs = 581
+q1a10/max_ss = 1109
+q1a10/fs = +0.999997x +0.001741y
+q1a10/ss = -0.001741x +0.999997y
+q1a10/corner_x = -787.022
+q1a10/corner_y = 668.135
+
+q1a11/min_fs = 582
+q1a11/min_ss = 925
+q1a11/max_fs = 775
+q1a11/max_ss = 1109
+q1a11/fs = +0.999997x +0.001741y
+q1a11/ss = -0.001741x +0.999997y
+q1a11/corner_x = -590.022
+q1a11/corner_y = 668.478
+
+q1a12/min_fs = 388
+q1a12/min_ss = 1110
+q1a12/max_fs = 581
+q1a12/max_ss = 1294
+q1a12/fs = -0.000201x -0.999999y
+q1a12/ss = +0.999999x -0.000201y
+q1a12/corner_x = -761.085
+q1a12/corner_y = 428.541
+
+q1a13/min_fs = 582
+q1a13/min_ss = 1110
+q1a13/max_fs = 775
+q1a13/max_ss = 1294
+q1a13/fs = -0.000201x -0.999999y
+q1a13/ss = +0.999999x -0.000201y
+q1a13/corner_x = -761.125
+q1a13/corner_y = 231.541
+
+q1a14/min_fs = 388
+q1a14/min_ss = 1295
+q1a14/max_fs = 581
+q1a14/max_ss = 1479
+q1a14/fs = +0.003097x -0.999995y
+q1a14/ss = +0.999995x +0.003097y
+q1a14/corner_x = -559.624
+q1a14/corner_y = 428.347
+
+q1a15/min_fs = 582
+q1a15/min_ss = 1295
+q1a15/max_fs = 775
+q1a15/max_ss = 1479
+q1a15/fs = +0.003097x -0.999995y
+q1a15/ss = +0.999995x +0.003097y
+q1a15/corner_x = -559.014
+q1a15/corner_y = 231.348
+
+q2a0/min_fs = 776
+q2a0/min_ss = 0
+q2a0/max_fs = 969
+q2a0/max_ss = 184
+q2a0/fs = -0.004086x -0.999991y
+q2a0/ss = +0.999991x -0.004086y
+q2a0/corner_x = -442.346
+q2a0/corner_y = 20.3382
+
+q2a1/min_fs = 970
+q2a1/min_ss = 0
+q2a1/max_fs = 1163
+q2a1/max_ss = 184
+q2a1/fs = -0.004086x -0.999991y
+q2a1/ss = +0.999991x -0.004086y
+q2a1/corner_x = -443.151
+q2a1/corner_y = -176.66
+
+q2a2/min_fs = 776
+q2a2/min_ss = 185
+q2a2/max_fs = 969
+q2a2/max_ss = 369
+q2a2/fs = +0.000302x -1.000000y
+q2a2/ss = +1.000000x +0.000302y
+q2a2/corner_x = -235.519
+q2a2/corner_y = 19.2312
+
+q2a3/min_fs = 970
+q2a3/min_ss = 185
+q2a3/max_fs = 1163
+q2a3/max_ss = 369
+q2a3/fs = +0.000302x -1.000000y
+q2a3/ss = +1.000000x +0.000302y
+q2a3/corner_x = -235.459
+q2a3/corner_y = -177.769
+
+q2a4/min_fs = 776
+q2a4/min_ss = 370
+q2a4/max_fs = 969
+q2a4/max_ss = 554
+q2a4/fs = +0.999997x -0.002037y
+q2a4/ss = +0.002037x +0.999997y
+q2a4/corner_x = -863.817
+q2a4/corner_y = -370.344
+
+q2a5/min_fs = 970
+q2a5/min_ss = 370
+q2a5/max_fs = 1163
+q2a5/max_ss = 554
+q2a5/fs = +0.999997x -0.002037y
+q2a5/ss = +0.002037x +0.999997y
+q2a5/corner_x = -666.817
+q2a5/corner_y = -370.746
+
+q2a6/min_fs = 776
+q2a6/min_ss = 555
+q2a6/max_fs = 969
+q2a6/max_ss = 739
+q2a6/fs = +1.000000x -0.001155y
+q2a6/ss = +0.001155x +1.000000y
+q2a6/corner_x = -863.549
+q2a6/corner_y = -165.126
+
+q2a7/min_fs = 970
+q2a7/min_ss = 555
+q2a7/max_fs = 1163
+q2a7/max_ss = 739
+q2a7/fs = +1.000000x -0.001155y
+q2a7/ss = +0.001155x +1.000000y
+q2a7/corner_x = -666.549
+q2a7/corner_y = -165.353
+
+q2a8/min_fs = 776
+q2a8/min_ss = 740
+q2a8/max_fs = 969
+q2a8/max_ss = 924
+q2a8/fs = +0.002076x +0.999998y
+q2a8/ss = -0.999998x +0.002076y
+q2a8/corner_x = -473.62
+q2a8/corner_y = -793.473
+
+q2a9/min_fs = 970
+q2a9/min_ss = 740
+q2a9/max_fs = 1163
+q2a9/max_ss = 924
+q2a9/fs = +0.002076x +0.999998y
+q2a9/ss = -0.999998x +0.002076y
+q2a9/corner_x = -473.211
+q2a9/corner_y = -596.474
+
+q2a10/min_fs = 776
+q2a10/min_ss = 925
+q2a10/max_fs = 969
+q2a10/max_ss = 1109
+q2a10/fs = +0.004134x +0.999991y
+q2a10/ss = -0.999991x +0.004134y
+q2a10/corner_x = -676.809
+q2a10/corner_y = -792.653
+
+q2a11/min_fs = 970
+q2a11/min_ss = 925
+q2a11/max_fs = 1163
+q2a11/max_ss = 1109
+q2a11/fs = +0.004134x +0.999991y
+q2a11/ss = -0.999991x +0.004134y
+q2a11/corner_x = -675.995
+q2a11/corner_y = -595.655
+
+q2a12/min_fs = 776
+q2a12/min_ss = 1110
+q2a12/max_fs = 969
+q2a12/max_ss = 1294
+q2a12/fs = +0.999981x -0.006417y
+q2a12/ss = +0.006417x +0.999981y
+q2a12/corner_x = -442.034
+q2a12/corner_y = -769.447
+
+q2a13/min_fs = 970
+q2a13/min_ss = 1110
+q2a13/max_fs = 1163
+q2a13/max_ss = 1294
+q2a13/fs = +0.999981x -0.006417y
+q2a13/ss = +0.006417x +0.999981y
+q2a13/corner_x = -245.038
+q2a13/corner_y = -770.711
+
+q2a14/min_fs = 776
+q2a14/min_ss = 1295
+q2a14/max_fs = 969
+q2a14/max_ss = 1479
+q2a14/fs = +0.999996x -0.002727y
+q2a14/ss = +0.002727x +0.999996y
+q2a14/corner_x = -441.283
+q2a14/corner_y = -566.627
+
+q2a15/min_fs = 970
+q2a15/min_ss = 1295
+q2a15/max_fs = 1163
+q2a15/max_ss = 1479
+q2a15/fs = +0.999996x -0.002727y
+q2a15/ss = +0.002727x +0.999996y
+q2a15/corner_x = -244.283
+q2a15/corner_y = -567.164
+
+q3a0/min_fs = 1164
+q3a0/min_ss = 0
+q3a0/max_fs = 1357
+q3a0/max_ss = 184
+q3a0/fs = +0.999988x -0.004965y
+q3a0/ss = +0.004965x +0.999988y
+q3a0/corner_x = -33.3507
+q3a0/corner_y = -458.693
+
+q3a1/min_fs = 1358
+q3a1/min_ss = 0
+q3a1/max_fs = 1551
+q3a1/max_ss = 184
+q3a1/fs = +0.999988x -0.004965y
+q3a1/ss = +0.004965x +0.999988y
+q3a1/corner_x = 163.647
+q3a1/corner_y = -459.671
+
+q3a2/min_fs = 1164
+q3a2/min_ss = 185
+q3a2/max_fs = 1357
+q3a2/max_ss = 369
+q3a2/fs = +0.999998x -0.002316y
+q3a2/ss = +0.002316x +0.999998y
+q3a2/corner_x = -31.8316
+q3a2/corner_y = -254.931
+
+q3a3/min_fs = 1358
+q3a3/min_ss = 185
+q3a3/max_fs = 1551
+q3a3/max_ss = 369
+q3a3/fs = +0.999998x -0.002316y
+q3a3/ss = +0.002316x +0.999998y
+q3a3/corner_x = 165.168
+q3a3/corner_y = -255.388
+
+q3a4/min_fs = 1164
+q3a4/min_ss = 370
+q3a4/max_fs = 1357
+q3a4/max_ss = 554
+q3a4/fs = +0.002474x +0.999997y
+q3a4/ss = -0.999997x +0.002474y
+q3a4/corner_x = 359.553
+q3a4/corner_y = -886.512
+
+q3a5/min_fs = 1358
+q3a5/min_ss = 370
+q3a5/max_fs = 1551
+q3a5/max_ss = 554
+q3a5/fs = +0.002474x +0.999997y
+q3a5/ss = -0.999997x +0.002474y
+q3a5/corner_x = 360.04
+q3a5/corner_y = -689.512
+
+q3a6/min_fs = 1164
+q3a6/min_ss = 555
+q3a6/max_fs = 1357
+q3a6/max_ss = 739
+q3a6/fs = +0.000059x +1.000000y
+q3a6/ss = -1.000000x +0.000059y
+q3a6/corner_x = 154.142
+q3a6/corner_y = -884.763
+
+q3a7/min_fs = 1358
+q3a7/min_ss = 555
+q3a7/max_fs = 1551
+q3a7/max_ss = 739
+q3a7/fs = +0.000059x +1.000000y
+q3a7/ss = -1.000000x +0.000059y
+q3a7/corner_x = 154.154
+q3a7/corner_y = -687.763
+
+q3a8/min_fs = 1164
+q3a8/min_ss = 740
+q3a8/max_fs = 1357
+q3a8/max_ss = 924
+q3a8/fs = -0.999993x +0.004040y
+q3a8/ss = -0.004040x -0.999993y
+q3a8/corner_x = 784.877
+q3a8/corner_y = -492.935
+
+q3a9/min_fs = 1358
+q3a9/min_ss = 740
+q3a9/max_fs = 1551
+q3a9/max_ss = 924
+q3a9/fs = -0.999993x +0.004040y
+q3a9/ss = -0.004040x -0.999993y
+q3a9/corner_x = 587.878
+q3a9/corner_y = -492.139
+
+q3a10/min_fs = 1164
+q3a10/min_ss = 925
+q3a10/max_fs = 1357
+q3a10/max_ss = 1109
+q3a10/fs = -0.999971x +0.007529y
+q3a10/ss = -0.007529x -0.999971y
+q3a10/corner_x = 784.254
+q3a10/corner_y = -699.59
+
+q3a11/min_fs = 1358
+q3a11/min_ss = 925
+q3a11/max_fs = 1551
+q3a11/max_ss = 1109
+q3a11/fs = -0.999971x +0.007529y
+q3a11/ss = -0.007529x -0.999971y
+q3a11/corner_x = 587.26
+q3a11/corner_y = -698.107
+
+q3a12/min_fs = 1164
+q3a12/min_ss = 1110
+q3a12/max_fs = 1357
+q3a12/max_ss = 1294
+q3a12/fs = +0.004516x +0.999990y
+q3a12/ss = -0.999990x +0.004516y
+q3a12/corner_x = 769.176
+q3a12/corner_y = -460.51
+
+q3a13/min_fs = 1358
+q3a13/min_ss = 1110
+q3a13/max_fs = 1551
+q3a13/max_ss = 1294
+q3a13/fs = +0.004516x +0.999990y
+q3a13/ss = -0.999990x +0.004516y
+q3a13/corner_x = 770.066
+q3a13/corner_y = -263.512
+
+q3a14/min_fs = 1164
+q3a14/min_ss = 1295
+q3a14/max_fs = 1357
+q3a14/max_ss = 1479
+q3a14/fs = +0.004918x +0.999989y
+q3a14/ss = -0.999989x +0.004918y
+q3a14/corner_x = 554.764
+q3a14/corner_y = -460.25
+
+q3a15/min_fs = 1358
+q3a15/min_ss = 1295
+q3a15/max_fs = 1551
+q3a15/max_ss = 1479
+q3a15/fs = +0.004918x +0.999989y
+q3a15/ss = -0.999989x +0.004918y
+q3a15/corner_x = 555.732
+q3a15/corner_y = -263.253
diff --git a/doc/examples/cspad-feb2011.geom b/doc/examples/cspad-single.geom
index 21adb022..b850ca20 100644
--- a/doc/examples/cspad-feb2011.geom
+++ b/doc/examples/cspad-single.geom
@@ -1,896 +1,637 @@
-adu_per_eV = 1.0
+; Example of a CrystFEL geometry file for CSPAD data in single-event HDF5
+; format, with the panel data arranged as by Cheetah
+
+adu_per_eV = 0.00105 ; correct value for CSPAD 1.0 (i.e. old versions only)
+ ; for newer versions (since about 2013), use 0.00338 instead
+res = 9090.91 ; pixels per metre
+clen = /LCLS/detectorPosition ; camera length from HDF5 file
+coffset = 0.0 ; no adjustment to camera length from HDF5 file
+photon_energy = /LCLS/photon_energy_eV ; photon energy (in eV) from HDF5 file
+data = /data/rawdata ; where to find the image data in the HDF5 file
+
+
+; The following lines define "rigid groups" which express the physical
+; construction of the detector. This is used when refining the detector
+; geometry.
+
+rigid_group_q0 = q0a0,q0a1,q0a2,q0a3,q0a4,q0a5,q0a6,q0a7,q0a8,q0a9,q0a10,q0a11,q0a12,q0a13,q0a14,q0a15
+rigid_group_q1 = q1a0,q1a1,q1a2,q1a3,q1a4,q1a5,q1a6,q1a7,q1a8,q1a9,q1a10,q1a11,q1a12,q1a13,q1a14,q1a15
+rigid_group_q2 = q2a0,q2a1,q2a2,q2a3,q2a4,q2a5,q2a6,q2a7,q2a8,q2a9,q2a10,q2a11,q2a12,q2a13,q2a14,q2a15
+rigid_group_q3 = q3a0,q3a1,q3a2,q3a3,q3a4,q3a5,q3a6,q3a7,q3a8,q3a9,q3a10,q3a11,q3a12,q3a13,q3a14,q3a15
+
+rigid_group_a0 = q0a0,q0a1
+rigid_group_a1 = q0a2,q0a3
+rigid_group_a2 = q0a4,q0a5
+rigid_group_a3 = q0a6,q0a7
+rigid_group_a4 = q0a8,q0a9
+rigid_group_a5 = q0a10,q0a11
+rigid_group_a6 = q0a12,q0a13
+rigid_group_a7 = q0a14,q0a15
+rigid_group_a8 = q1a0,q1a1
+rigid_group_a9 = q1a2,q1a3
+rigid_group_a10 = q1a4,q1a5
+rigid_group_a11 = q1a6,q1a7
+rigid_group_a12 = q1a8,q1a9
+rigid_group_a13 = q1a10,q1a11
+rigid_group_a14 = q1a12,q1a13
+rigid_group_a15 = q1a14,q1a15
+rigid_group_a16 = q2a0,q2a1
+rigid_group_a17 = q2a2,q2a3
+rigid_group_a18 = q2a4,q2a5
+rigid_group_a19 = q2a6,q2a7
+rigid_group_a20 = q2a8,q2a9
+rigid_group_a21 = q2a10,q2a11
+rigid_group_a22 = q2a12,q2a13
+rigid_group_a23 = q2a14,q2a15
+rigid_group_a24 = q3a0,q3a1
+rigid_group_a25 = q3a2,q3a3
+rigid_group_a26 = q3a4,q3a5
+rigid_group_a27 = q3a6,q3a7
+rigid_group_a28 = q3a8,q3a9
+rigid_group_a29 = q3a10,q3a11
+rigid_group_a30 = q3a12,q3a13
+rigid_group_a31 = q3a14,q3a15
+
+rigid_group_collection_quadrants = q0,q1,q2,q3
+rigid_group_collection_asics = a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31
+
+
+; The geometrical parameters for the panels follow.
+; The above parameters can also be set for each panel individually, but usually
+; it makes more sense to define them once for all panels.
q0a0/min_fs = 0
q0a0/min_ss = 0
q0a0/max_fs = 193
q0a0/max_ss = 184
-q0a0/badrow_direction = -
-q0a0/res = 9090.91
-q0a0/clen = /LCLS/detectorPosition
q0a0/fs = -0.0057225772x +0.9999836087y
q0a0/ss = -0.9999836087x -0.0057225772y
q0a0/corner_x = 424.384
q0a0/corner_y = -10.6473
-q0a0/no_index = 0
-
q0a1/min_fs = 194
q0a1/min_ss = 0
q0a1/max_fs = 387
q0a1/max_ss = 184
-q0a1/badrow_direction = -
-q0a1/res = 9090.91
-q0a1/clen = /LCLS/detectorPosition
q0a1/fs = -0.0057225772x +0.9999836087y
q0a1/ss = -0.9999836087x -0.0057225772y
q0a1/corner_x = 423.257
q0a1/corner_y = 186.349
-q0a1/no_index = 0
-
q1a0/min_fs = 388
q1a0/min_ss = 0
q1a0/max_fs = 581
q1a0/max_ss = 184
-q1a0/badrow_direction = -
-q1a0/res = 9090.91
-q1a0/clen = /LCLS/detectorPosition
q1a0/fs = -0.9999815226x +0.0060744919y
q1a0/ss = -0.0060744919x -0.9999815226y
q1a0/corner_x = 13.1196
q1a0/corner_y = 422.727
-q1a0/no_index = 0
-
q1a1/min_fs = 582
q1a1/min_ss = 0
q1a1/max_fs = 775
q1a1/max_ss = 184
-q1a1/badrow_direction = -
-q1a1/res = 9090.91
-q1a1/clen = /LCLS/detectorPosition
q1a1/fs = -0.9999815226x +0.0060744919y
q1a1/ss = -0.0060744919x -0.9999815226y
q1a1/corner_x = -183.877
q1a1/corner_y = 423.924
-q1a1/no_index = 0
-
q2a0/min_fs = 776
q2a0/min_ss = 0
q2a0/max_fs = 969
q2a0/max_ss = 184
-q2a0/badrow_direction = -
-q2a0/res = 9090.91
-q2a0/clen = /LCLS/detectorPosition
q2a0/fs = +0.0048825117x -0.9999880791y
q2a0/ss = +0.9999880791x +0.0048825117y
q2a0/corner_x = -428.519
q2a0/corner_y = 8.29208
-q2a0/no_index = 0
-
q2a1/min_fs = 970
q2a1/min_ss = 0
q2a1/max_fs = 1163
q2a1/max_ss = 184
-q2a1/badrow_direction = -
-q2a1/res = 9090.91
-q2a1/clen = /LCLS/detectorPosition
q2a1/fs = +0.0048825117x -0.9999880791y
q2a1/ss = +0.9999880791x +0.0048825117y
q2a1/corner_x = -427.557
q2a1/corner_y = -188.706
-q2a1/no_index = 0
-
q3a0/min_fs = 1164
q3a0/min_ss = 0
q3a0/max_fs = 1357
q3a0/max_ss = 184
-q3a0/badrow_direction = -
-q3a0/res = 9090.91
-q3a0/clen = /LCLS/detectorPosition
q3a0/fs = +0.9999964833x +0.0026521713y
q3a0/ss = -0.0026521713x +0.9999964833y
q3a0/corner_x = -12.1295
q3a0/corner_y = -424.046
-q3a0/no_index = 0
-
q3a1/min_fs = 1358
q3a1/min_ss = 0
q3a1/max_fs = 1551
q3a1/max_ss = 184
-q3a1/badrow_direction = -
-q3a1/res = 9090.91
-q3a1/clen = /LCLS/detectorPosition
q3a1/fs = +0.9999964833x +0.0026521713y
q3a1/ss = -0.0026521713x +0.9999964833y
q3a1/corner_x = 184.870
q3a1/corner_y = -423.523
-q3a1/no_index = 0
-
q0a2/min_fs = 0
q0a2/min_ss = 185
q0a2/max_fs = 193
q0a2/max_ss = 369
-q0a2/badrow_direction = -
-q0a2/res = 9090.91
-q0a2/clen = /LCLS/detectorPosition
q0a2/fs = -0.0003575958x +0.9999999404y
q0a2/ss = -0.9999999404x -0.0003575958y
q0a2/corner_x = 211.039
q0a2/corner_y = -10.9889
-q0a2/no_index = 0
-
q0a3/min_fs = 194
q0a3/min_ss = 185
q0a3/max_fs = 387
q0a3/max_ss = 369
-q0a3/badrow_direction = -
-q0a3/res = 9090.91
-q0a3/clen = /LCLS/detectorPosition
q0a3/fs = -0.0003575958x +0.9999999404y
q0a3/ss = -0.9999999404x -0.0003575958y
q0a3/corner_x = 210.969
q0a3/corner_y = 186.011
-q0a3/no_index = 0
-
q1a2/min_fs = 388
q1a2/min_ss = 185
q1a2/max_fs = 581
q1a2/max_ss = 369
-q1a2/badrow_direction = -
-q1a2/res = 9090.91
-q1a2/clen = /LCLS/detectorPosition
q1a2/fs = -0.9999999404x +0.0003117446y
q1a2/ss = -0.0003117446x -0.9999999404y
q1a2/corner_x = 13.3322
q1a2/corner_y = 208.973
-q1a2/no_index = 0
-
q1a3/min_fs = 582
q1a3/min_ss = 185
q1a3/max_fs = 775
q1a3/max_ss = 369
-q1a3/badrow_direction = -
-q1a3/res = 9090.91
-q1a3/clen = /LCLS/detectorPosition
q1a3/fs = -0.9999999404x +0.0003117446y
q1a3/ss = -0.0003117446x -0.9999999404y
q1a3/corner_x = -183.668
q1a3/corner_y = 209.034
-q1a3/no_index = 0
-
q2a2/min_fs = 776
q2a2/min_ss = 185
q2a2/max_fs = 969
q2a2/max_ss = 369
-q2a2/badrow_direction = -
-q2a2/res = 9090.91
-q2a2/clen = /LCLS/detectorPosition
q2a2/fs = -0.0004957085x -0.9999998808y
q2a2/ss = +0.9999998808x -0.0004957085y
q2a2/corner_x = -215.108
q2a2/corner_y = 8.41637
-q2a2/no_index = 0
-
q2a3/min_fs = 970
q2a3/min_ss = 185
q2a3/max_fs = 1163
q2a3/max_ss = 369
-q2a3/badrow_direction = -
-q2a3/res = 9090.91
-q2a3/clen = /LCLS/detectorPosition
q2a3/fs = -0.0004957085x -0.9999998808y
q2a3/ss = +0.9999998808x -0.0004957085y
q2a3/corner_x = -215.206
q2a3/corner_y = -188.584
-q2a3/no_index = 0
-
q3a2/min_fs = 1164
q3a2/min_ss = 185
q3a2/max_fs = 1357
q3a2/max_ss = 369
-q3a2/badrow_direction = -
-q3a2/res = 9090.91
-q3a2/clen = /LCLS/detectorPosition
q3a2/fs = +1.0000000000x -0.0001447762y
q3a2/ss = +0.0001447762x +1.0000000000y
q3a2/corner_x = -12.1720
q3a2/corner_y = -210.466
-q3a2/no_index = 0
-
q3a3/min_fs = 1358
q3a3/min_ss = 185
q3a3/max_fs = 1551
q3a3/max_ss = 369
-q3a3/badrow_direction = -
-q3a3/res = 9090.91
-q3a3/clen = /LCLS/detectorPosition
q3a3/fs = +1.0000000000x -0.0001447762y
q3a3/ss = +0.0001447762x +1.0000000000y
q3a3/corner_x = 184.828
q3a3/corner_y = -210.495
-q3a3/no_index = 0
-
q0a4/min_fs = 0
q0a4/min_ss = 370
q0a4/max_fs = 193
q0a4/max_ss = 554
-q0a4/badrow_direction = -
-q0a4/res = 9090.91
-q0a4/clen = /LCLS/detectorPosition
q0a4/fs = -0.9999362230x -0.0112929661y
q0a4/ss = +0.0112929661x -0.9999362230y
q0a4/corner_x = 840.468
q0a4/corner_y = 392.435
-q0a4/no_index = 0
-
q0a5/min_fs = 194
q0a5/min_ss = 370
q0a5/max_fs = 387
q0a5/max_ss = 554
-q0a5/badrow_direction = -
-q0a5/res = 9090.91
-q0a5/clen = /LCLS/detectorPosition
q0a5/fs = -0.9999362230x -0.0112929661y
q0a5/ss = +0.0112929661x -0.9999362230y
q0a5/corner_x = 643.481
q0a5/corner_y = 390.210
-q0a5/no_index = 1
-
q1a4/min_fs = 388
q1a4/min_ss = 370
q1a4/max_fs = 581
q1a4/max_ss = 554
-q1a4/badrow_direction = -
-q1a4/res = 9090.91
-q1a4/clen = /LCLS/detectorPosition
q1a4/fs = -0.0003113084x -0.9999999404y
q1a4/ss = +0.9999999404x -0.0003113084y
q1a4/corner_x = -387.060
q1a4/corner_y = 844.837
-q1a4/no_index = 0
-
q1a5/min_fs = 582
q1a5/min_ss = 370
q1a5/max_fs = 775
q1a5/max_ss = 554
-q1a5/badrow_direction = -
-q1a5/res = 9090.91
-q1a5/clen = /LCLS/detectorPosition
q1a5/fs = -0.0003113084x -0.9999999404y
q1a5/ss = +0.9999999404x -0.0003113084y
q1a5/corner_x = -387.121
q1a5/corner_y = 647.837
-q1a5/no_index = 0
-
q2a4/min_fs = 776
q2a4/min_ss = 370
q2a4/max_fs = 969
q2a4/max_ss = 554
-q2a4/badrow_direction = -
-q2a4/res = 9090.91
-q2a4/clen = /LCLS/detectorPosition
q2a4/fs = +0.9999818802x +0.0060196919y
q2a4/ss = -0.0060196919x +0.9999818802y
q2a4/corner_x = -849.683
q2a4/corner_y = -392.889
-q2a4/no_index = 0
-
q2a5/min_fs = 970
q2a5/min_ss = 370
q2a5/max_fs = 1163
q2a5/max_ss = 554
-q2a5/badrow_direction = -
-q2a5/res = 9090.91
-q2a5/clen = /LCLS/detectorPosition
q2a5/fs = +0.9999818802x +0.0060196919y
q2a5/ss = -0.0060196919x +0.9999818802y
q2a5/corner_x = -652.687
q2a5/corner_y = -391.703
-q2a5/no_index = 0
-
q3a4/min_fs = 1164
q3a4/min_ss = 370
q3a4/max_fs = 1357
q3a4/max_ss = 554
-q3a4/badrow_direction = -
-q3a4/res = 9090.91
-q3a4/clen = /LCLS/detectorPosition
q3a4/fs = -0.0023373319x +0.9999972582y
q3a4/ss = -0.9999972582x -0.0023373319y
q3a4/corner_x = 388.452
q3a4/corner_y = -844.271
-q3a4/no_index = 1
-
q3a5/min_fs = 1358
q3a5/min_ss = 370
q3a5/max_fs = 1551
q3a5/max_ss = 554
-q3a5/badrow_direction = -
-q3a5/res = 9090.91
-q3a5/clen = /LCLS/detectorPosition
q3a5/fs = -0.0023373319x +0.9999972582y
q3a5/ss = -0.9999972582x -0.0023373319y
q3a5/corner_x = 387.991
q3a5/corner_y = -647.271
-q3a5/no_index = 0
-
q0a6/min_fs = 0
q0a6/min_ss = 555
q0a6/max_fs = 193
q0a6/max_ss = 739
-q0a6/badrow_direction = -
-q0a6/res = 9090.91
-q0a6/clen = /LCLS/detectorPosition
q0a6/fs = -0.9999533892x -0.0096549187y
q0a6/ss = +0.0096549187x -0.9999533892y
q0a6/corner_x = 842.954
q0a6/corner_y = 182.508
-q0a6/no_index = 0
-
q0a7/min_fs = 194
q0a7/min_ss = 555
q0a7/max_fs = 387
q0a7/max_ss = 739
-q0a7/badrow_direction = -
-q0a7/res = 9090.91
-q0a7/clen = /LCLS/detectorPosition
q0a7/fs = -0.9999533892x -0.0096549187y
q0a7/ss = +0.0096549187x -0.9999533892y
q0a7/corner_x = 645.963
q0a7/corner_y = 180.606
-q0a7/no_index = 0
-
q1a6/min_fs = 388
q1a6/min_ss = 555
q1a6/max_fs = 581
q1a6/max_ss = 739
-q1a6/badrow_direction = -
-q1a6/res = 9090.91
-q1a6/clen = /LCLS/detectorPosition
q1a6/fs = +0.0007214849x -0.9999997616y
q1a6/ss = +0.9999997616x +0.0007214849y
q1a6/corner_x = -174.672
q1a6/corner_y = 844.923
-q1a6/no_index = 0
-
q1a7/min_fs = 582
q1a7/min_ss = 555
q1a7/max_fs = 775
q1a7/max_ss = 739
-q1a7/badrow_direction = -
-q1a7/res = 9090.91
-q1a7/clen = /LCLS/detectorPosition
q1a7/fs = +0.0007214849x -0.9999997616y
q1a7/ss = +0.9999997616x +0.0007214849y
q1a7/corner_x = -174.530
q1a7/corner_y = 647.923
-q1a7/no_index = 0
-
q2a6/min_fs = 776
q2a6/min_ss = 555
q2a6/max_fs = 969
q2a6/max_ss = 739
-q2a6/badrow_direction = -
-q2a6/res = 9090.91
-q2a6/clen = /LCLS/detectorPosition
q2a6/fs = +0.9999990463x +0.0013817062y
q2a6/ss = -0.0013817062x +0.9999990463y
q2a6/corner_x = -850.035
q2a6/corner_y = -179.939
-q2a6/no_index = 0
-
q2a7/min_fs = 970
q2a7/min_ss = 555
q2a7/max_fs = 1163
q2a7/max_ss = 739
-q2a7/badrow_direction = -
-q2a7/res = 9090.91
-q2a7/clen = /LCLS/detectorPosition
q2a7/fs = +0.9999990463x +0.0013817062y
q2a7/ss = -0.0013817062x +0.9999990463y
q2a7/corner_x = -653.035
q2a7/corner_y = -179.667
-q2a7/no_index = 0
-
q3a6/min_fs = 1164
q3a6/min_ss = 555
q3a6/max_fs = 1357
q3a6/max_ss = 739
-q3a6/badrow_direction = -
-q3a6/res = 9090.91
-q3a6/clen = /LCLS/detectorPosition
q3a6/fs = -0.0021083837x +0.9999977946y
q3a6/ss = -0.9999977946x -0.0021083837y
q3a6/corner_x = 175.688
q3a6/corner_y = -844.681
-q3a6/no_index = 0
-
q3a7/min_fs = 1358
q3a7/min_ss = 555
q3a7/max_fs = 1551
q3a7/max_ss = 739
-q3a7/badrow_direction = -
-q3a7/res = 9090.91
-q3a7/clen = /LCLS/detectorPosition
q3a7/fs = -0.0021083837x +0.9999977946y
q3a7/ss = -0.9999977946x -0.0021083837y
q3a7/corner_x = 175.273
q3a7/corner_y = -647.681
-q3a7/no_index = 1
-
q0a8/min_fs = 0
q0a8/min_ss = 740
q0a8/max_fs = 193
q0a8/max_ss = 924
-q0a8/badrow_direction = -
-q0a8/res = 9090.91
-q0a8/clen = /LCLS/detectorPosition
q0a8/fs = +0.0078456579x -0.9999692440y
q0a8/ss = +0.9999692440x +0.0078456579y
q0a8/corner_x = 440.576
q0a8/corner_y = 811.780
-q0a8/no_index = 0
-
q0a9/min_fs = 194
q0a9/min_ss = 740
q0a9/max_fs = 387
q0a9/max_ss = 924
-q0a9/badrow_direction = -
-q0a9/res = 9090.91
-q0a9/clen = /LCLS/detectorPosition
q0a9/fs = +0.0078456579x -0.9999692440y
q0a9/ss = +0.9999692440x +0.0078456579y
q0a9/corner_x = 442.122
q0a9/corner_y = 614.786
-q0a9/no_index = 0
-
q1a8/min_fs = 388
q1a8/min_ss = 740
q1a8/max_fs = 581
q1a8/max_ss = 924
-q1a8/badrow_direction = -
-q1a8/res = 9090.91
-q1a8/clen = /LCLS/detectorPosition
q1a8/fs = +0.9999817014x +0.0060460833y
q1a8/ss = -0.0060460833x +0.9999817014y
q1a8/corner_x = -808.912
q1a8/corner_y = 453.082
-q1a8/no_index = 0
-
q1a9/min_fs = 582
q1a9/min_ss = 740
q1a9/max_fs = 775
q1a9/max_ss = 924
-q1a9/badrow_direction = -
-q1a9/res = 9090.91
-q1a9/clen = /LCLS/detectorPosition
q1a9/fs = +0.9999817014x +0.0060460833y
q1a9/ss = -0.0060460833x +0.9999817014y
q1a9/corner_x = -611.915
q1a9/corner_y = 454.273
-q1a9/no_index = 0
-
q2a8/min_fs = 776
q2a8/min_ss = 740
q2a8/max_fs = 969
q2a8/max_ss = 924
-q2a8/badrow_direction = -
-q2a8/res = 9090.91
-q2a8/clen = /LCLS/detectorPosition
q2a8/fs = -0.0027005512x +0.9999963641y
q2a8/ss = -0.9999963641x -0.0027005512y
q2a8/corner_x = -451.888
q2a8/corner_y = -813.482
-q2a8/no_index = 0
-
q2a9/min_fs = 970
q2a9/min_ss = 740
q2a9/max_fs = 1163
q2a9/max_ss = 924
-q2a9/badrow_direction = -
-q2a9/res = 9090.91
-q2a9/clen = /LCLS/detectorPosition
q2a9/fs = -0.0027005512x +0.9999963641y
q2a9/ss = -0.9999963641x -0.0027005512y
q2a9/corner_x = -452.420
q2a9/corner_y = -616.482
-q2a9/no_index = 0
-
q3a8/min_fs = 1164
q3a8/min_ss = 740
q3a8/max_fs = 1357
q3a8/max_ss = 924
-q3a8/badrow_direction = -
-q3a8/res = 9090.91
-q3a8/clen = /LCLS/detectorPosition
q3a8/fs = -0.9999983311x -0.0018213630y
q3a8/ss = +0.0018213630x -0.9999983311y
q3a8/corner_x = 806.687
q3a8/corner_y = -442.882
-q3a8/no_index = 0
-
q3a9/min_fs = 1358
q3a9/min_ss = 740
q3a9/max_fs = 1551
q3a9/max_ss = 924
-q3a9/badrow_direction = -
-q3a9/res = 9090.91
-q3a9/clen = /LCLS/detectorPosition
q3a9/fs = -0.9999983311x -0.0018213630y
q3a9/ss = +0.0018213630x -0.9999983311y
q3a9/corner_x = 609.687
q3a9/corner_y = -443.241
-q3a9/no_index = 0
-
q0a10/min_fs = 0
q0a10/min_ss = 925
q0a10/max_fs = 193
q0a10/max_ss = 1109
-q0a10/badrow_direction = -
-q0a10/res = 9090.91
-q0a10/clen = /LCLS/detectorPosition
q0a10/fs = +0.0069182217x -0.9999760985y
q0a10/ss = +0.9999760985x +0.0069182217y
q0a10/corner_x = 653.083
q0a10/corner_y = 813.670
-q0a10/no_index = 0
-
q0a11/min_fs = 194
q0a11/min_ss = 925
q0a11/max_fs = 387
q0a11/max_ss = 1109
-q0a11/badrow_direction = -
-q0a11/res = 9090.91
-q0a11/clen = /LCLS/detectorPosition
q0a11/fs = +0.0069182217x -0.9999760985y
q0a11/ss = +0.9999760985x +0.0069182217y
q0a11/corner_x = 654.445
q0a11/corner_y = 616.674
-q0a11/no_index = 0
-
q1a10/min_fs = 388
q1a10/min_ss = 925
q1a10/max_fs = 581
q1a10/max_ss = 1109
-q1a10/badrow_direction = -
-q1a10/res = 9090.91
-q1a10/clen = /LCLS/detectorPosition
q1a10/fs = +0.9999817014x +0.0060461056y
q1a10/ss = -0.0060461056x +0.9999817014y
q1a10/corner_x = -808.912
q1a10/corner_y = 658.082
-q1a10/no_index = 0
-
q1a11/min_fs = 582
q1a11/min_ss = 925
q1a11/max_fs = 775
q1a11/max_ss = 1109
-q1a11/badrow_direction = -
-q1a11/res = 9090.91
-q1a11/clen = /LCLS/detectorPosition
q1a11/fs = +0.9999817014x +0.0060461056y
q1a11/ss = -0.0060461056x +0.9999817014y
q1a11/corner_x = -611.915
q1a11/corner_y = 659.273
-q1a11/no_index = 0
-
q2a10/min_fs = 776
q2a10/min_ss = 925
q2a10/max_fs = 969
q2a10/max_ss = 1109
-q2a10/badrow_direction = -
-q2a10/res = 9090.91
-q2a10/clen = /LCLS/detectorPosition
q2a10/fs = -0.0027005058x +0.9999963641y
q2a10/ss = -0.9999963641x -0.0027005058y
q2a10/corner_x = -656.888
q2a10/corner_y = -813.482
-q2a10/no_index = 0
-
q2a11/min_fs = 970
q2a11/min_ss = 925
q2a11/max_fs = 1163
q2a11/max_ss = 1109
-q2a11/badrow_direction = -
-q2a11/res = 9090.91
-q2a11/clen = /LCLS/detectorPosition
q2a11/fs = -0.0027005058x +0.9999963641y
q2a11/ss = -0.9999963641x -0.0027005058y
q2a11/corner_x = -657.420
q2a11/corner_y = -616.482
-q2a11/no_index = 0
-
q3a10/min_fs = 1164
q3a10/min_ss = 925
q3a10/max_fs = 1357
q3a10/max_ss = 1109
-q3a10/badrow_direction = -
-q3a10/res = 9090.91
-q3a10/clen = /LCLS/detectorPosition
q3a10/fs = -0.9999980927x -0.0019562324y
q3a10/ss = +0.0019562324x -0.9999980927y
q3a10/corner_x = 806.906
q3a10/corner_y = -655.522
-q3a10/no_index = 0
-
q3a11/min_fs = 1358
q3a11/min_ss = 925
q3a11/max_fs = 1551
q3a11/max_ss = 1109
-q3a11/badrow_direction = -
-q3a11/res = 9090.91
-q3a11/clen = /LCLS/detectorPosition
q3a11/fs = -0.9999980927x -0.0019562324y
q3a11/ss = +0.0019562324x -0.9999980927y
q3a11/corner_x = 609.906
q3a11/corner_y = -655.907
-q3a11/no_index = 0
-
q0a12/min_fs = 0
q0a12/min_ss = 1110
q0a12/max_fs = 193
q0a12/max_ss = 1294
-q0a12/badrow_direction = -
-q0a12/res = 9090.91
-q0a12/clen = /LCLS/detectorPosition
q0a12/fs = -0.9999986887x -0.0016366633y
q0a12/ss = +0.0016366633x -0.9999986887y
q0a12/corner_x = 416.434
q0a12/corner_y = 791.587
-q0a12/no_index = 0
-
q0a13/min_fs = 194
q0a13/min_ss = 1110
q0a13/max_fs = 387
q0a13/max_ss = 1294
-q0a13/badrow_direction = -
-q0a13/res = 9090.91
-q0a13/clen = /LCLS/detectorPosition
q0a13/fs = -0.9999986887x -0.0016366633y
q0a13/ss = +0.0016366633x -0.9999986887y
q0a13/corner_x = 219.435
q0a13/corner_y = 791.265
-q0a13/no_index = 0
-
q1a12/min_fs = 388
q1a12/min_ss = 1110
q1a12/max_fs = 581
q1a12/max_ss = 1294
-q1a12/badrow_direction = -
-q1a12/res = 9090.91
-q1a12/clen = /LCLS/detectorPosition
q1a12/fs = +0.0016421415x -0.9999986291y
q1a12/ss = +0.9999986291x +0.0016421415y
q1a12/corner_x = -781.411
q1a12/corner_y = 419.856
-q1a12/no_index = 0
-
q1a13/min_fs = 582
q1a13/min_ss = 1110
q1a13/max_fs = 775
q1a13/max_ss = 1294
-q1a13/badrow_direction = -
-q1a13/res = 9090.91
-q1a13/clen = /LCLS/detectorPosition
q1a13/fs = +0.0016421415x -0.9999986291y
q1a13/ss = +0.9999986291x +0.0016421415y
q1a13/corner_x = -781.088
q1a13/corner_y = 222.856
-q1a13/no_index = 0
-
q2a12/min_fs = 776
q2a12/min_ss = 1110
q2a12/max_fs = 969
q2a12/max_ss = 1294
-q2a12/badrow_direction = -
-q2a12/res = 9090.91
-q2a12/clen = /LCLS/detectorPosition
q2a12/fs = +0.9999987483x -0.0015812991y
q2a12/ss = +0.0015812991x +0.9999987483y
q2a12/corner_x = -423.530
q2a12/corner_y = -793.420
-q2a12/no_index = 0
-
q2a13/min_fs = 970
q2a13/min_ss = 1110
q2a13/max_fs = 1163
q2a13/max_ss = 1294
-q2a13/badrow_direction = -
-q2a13/res = 9090.91
-q2a13/clen = /LCLS/detectorPosition
q2a13/fs = +0.9999987483x -0.0015812991y
q2a13/ss = +0.0015812991x +0.9999987483y
q2a13/corner_x = -226.531
q2a13/corner_y = -793.732
-q2a13/no_index = 0
-
q3a12/min_fs = 1164
q3a12/min_ss = 1110
q3a12/max_fs = 1357
q3a12/max_ss = 1294
-q3a12/badrow_direction = -
-q3a12/res = 9090.91
-q3a12/clen = /LCLS/detectorPosition
q3a12/fs = +0.0000857039x +1.0000000000y
q3a12/ss = -1.0000000000x +0.0000857039y
q3a12/corner_x = 787.680
q3a12/corner_y = -418.886
-q3a12/no_index = 0
-
q3a13/min_fs = 1358
q3a13/min_ss = 1110
q3a13/max_fs = 1551
q3a13/max_ss = 1294
-q3a13/badrow_direction = -
-q3a13/res = 9090.91
-q3a13/clen = /LCLS/detectorPosition
q3a13/fs = +0.0000857039x +1.0000000000y
q3a13/ss = -1.0000000000x +0.0000857039y
q3a13/corner_x = 787.697
q3a13/corner_y = -221.886
-q3a13/no_index = 0
-
q0a14/min_fs = 0
q0a14/min_ss = 1295
q0a14/max_fs = 193
q0a14/max_ss = 1479
-q0a14/badrow_direction = -
-q0a14/res = 9090.91
-q0a14/clen = /LCLS/detectorPosition
q0a14/fs = -0.9999981523x -0.0019349456y
q0a14/ss = +0.0019349456x -0.9999981523y
q0a14/corner_x = 416.424
q0a14/corner_y = 579.070
-q0a14/no_index = 0
-
q0a15/min_fs = 194
q0a15/min_ss = 1295
q0a15/max_fs = 387
q0a15/max_ss = 1479
-q0a15/badrow_direction = -
-q0a15/res = 9090.91
-q0a15/clen = /LCLS/detectorPosition
q0a15/fs = -0.9999981523x -0.0019349456y
q0a15/ss = +0.0019349456x -0.9999981523y
q0a15/corner_x = 219.424
q0a15/corner_y = 578.689
-q0a15/no_index = 0
-
q1a14/min_fs = 388
q1a14/min_ss = 1295
q1a14/max_fs = 581
q1a14/max_ss = 1479
-q1a14/badrow_direction = -
-q1a14/res = 9090.91
-q1a14/clen = /LCLS/detectorPosition
q1a14/fs = +0.0016421643x -0.9999986291y
q1a14/ss = +0.9999986291x +0.0016421643y
q1a14/corner_x = -576.411
q1a14/corner_y = 419.856
-q1a14/no_index = 0
-
q1a15/min_fs = 582
q1a15/min_ss = 1295
q1a15/max_fs = 775
q1a15/max_ss = 1479
-q1a15/badrow_direction = -
-q1a15/res = 9090.91
-q1a15/clen = /LCLS/detectorPosition
q1a15/fs = +0.0016421643x -0.9999986291y
q1a15/ss = +0.9999986291x +0.0016421643y
q1a15/corner_x = -576.088
q1a15/corner_y = 222.856
-q1a15/no_index = 0
-
q2a14/min_fs = 776
q2a14/min_ss = 1295
q2a14/max_fs = 969
q2a14/max_ss = 1479
-q2a14/badrow_direction = -
-q2a14/res = 9090.91
-q2a14/clen = /LCLS/detectorPosition
q2a14/fs = +0.9999768734x -0.0068050129y
q2a14/ss = +0.0068050129x +0.9999768734y
q2a14/corner_x = -423.430
q2a14/corner_y = -582.404
-q2a14/no_index = 0
-
q2a15/min_fs = 970
q2a15/min_ss = 1295
q2a15/max_fs = 1163
q2a15/max_ss = 1479
-q2a15/badrow_direction = -
-q2a15/res = 9090.91
-q2a15/clen = /LCLS/detectorPosition
q2a15/fs = +0.9999768734x -0.0068050129y
q2a15/ss = +0.0068050129x +0.9999768734y
q2a15/corner_x = -226.435
q2a15/corner_y = -583.745
-q2a15/no_index = 0
-
q3a14/min_fs = 1164
q3a14/min_ss = 1295
q3a14/max_fs = 1357
q3a14/max_ss = 1479
-q3a14/badrow_direction = -
-q3a14/res = 9090.91
-q3a14/clen = /LCLS/detectorPosition
q3a14/fs = -0.0010058292x +0.9999995232y
q3a14/ss = -0.9999995232x -0.0010058292y
q3a14/corner_x = 575.673
q3a14/corner_y = -418.865
-q3a14/no_index = 0
-
q3a15/min_fs = 1358
q3a15/min_ss = 1295
q3a15/max_fs = 1551
q3a15/max_ss = 1479
-q3a15/badrow_direction = -
-q3a15/res = 9090.91
-q3a15/clen = /LCLS/detectorPosition
q3a15/fs = -0.0010058292x +0.9999995232y
q3a15/ss = -0.9999995232x -0.0010058292y
q3a15/corner_x = 575.475
q3a15/corner_y = -221.866
-q3a15/no_index = 0
diff --git a/doc/man/ambigator.1 b/doc/man/ambigator.1
index d403f2aa..fad89641 100644
--- a/doc/man/ambigator.1
+++ b/doc/man/ambigator.1
@@ -25,7 +25,7 @@ The algorithm proceeds by calculating the individual correlation coefficients be
Only one indexing ambiguity can be resolved at a time. In other words, each crystal is considered to be indexable in one of only two ways. If the true indexing ambiguity has more possibilities than this, the resolution must be performed by running \fBambigator\fR multiple times with a different ambiguity operator each time.
-If the ambiguity operator is known (or, equivalently, the actual and apparent symmetries are both known), then the algorithm can be enhanced by including in \fIf\fR the correlation coefficients of all the crystals with the opposite indexing assignment to the current one, but after reindexing the other crystal first. Likewise, \fg\fR includes the correlation coefficients of the crystals with the same indexing assignment after reindexing. This enhances the algorithm to an extent roughly equivalent to doubling the number of crystals.
+If the ambiguity operator is known (or, equivalently, the actual and apparent symmetries are both known), then the algorithm can be enhanced by including in \fIf\fR the correlation coefficients of all the crystals with the opposite indexing assignment to the current one, but after reindexing the other crystal first. Likewise, \fIg\fR includes the correlation coefficients of the crystals with the same indexing assignment after reindexing. This enhances the algorithm to an extent roughly equivalent to doubling the number of crystals.
The default behaviour is to compare each crystal to every other crystal. This leads to a computational complexity proportional to the square of the number of crystals. If the number of crystals is large, the number of comparisons can be limited without compromising the algorithm much. In this case, the crystals to correlate against will be selected randomly.
diff --git a/doc/man/check_hkl.1 b/doc/man/check_hkl.1
index ad66dfb2..f02b581b 100644
--- a/doc/man/check_hkl.1
+++ b/doc/man/check_hkl.1
@@ -17,7 +17,7 @@ check_hkl \- calculate figures of merit for reflection data
\fBcheck_hkl --help\fR
.SH DESCRIPTION
-check_hkl calculates figures of merit for reflection data, such as completeness and average signal strengths, in resolution shells. check_hkl accepts a single reflection list in CrystFEL's format, and you must also provide a unit cell (in a PDB file).
+check_hkl calculates figures of merit for reflection data, such as completeness and average signal strengths, in resolution shells. check_hkl accepts a single reflection list in CrystFEL's format, and you must also provide a unit cell (in a PDB file or CrystFEL unit cell format).
.SH OPTIONS
.PD 0
diff --git a/doc/man/compare_hkl.1 b/doc/man/compare_hkl.1
index b628f0b6..8e464d12 100644
--- a/doc/man/compare_hkl.1
+++ b/doc/man/compare_hkl.1
@@ -12,12 +12,12 @@
compare_hkl \- compare reflection data
.SH SYNOPSIS
.PP
-\fBcompare_hkl\fR \fR [\fIoptions\fR] \fB...\fR \fIfile1.hkl\fR \fIfile2.hkl\fR
+\fBcompare_hkl\fR [\fIoptions\fR] \fB... \fIfile1.hkl \fIfile2.hkl\fR -p \fIcell.pdb\fR
.PP
\fBcompare_hkl --help\fR
.SH DESCRIPTION
-compare_hkl compares two sets of reflection data and calculates figures of merit such as R-factors. Reflections will be considered equivalent according to your choice of point group.
+compare_hkl compares two sets of reflection data and calculates figures of merit such as R-factors. Reflections will be considered equivalent according to your choice of point group. You need to provide a unit cell, as a PDB file or a CrystFEL unit cell file.
.SH OPTIONS
.PD 0
diff --git a/doc/man/crystfel.7 b/doc/man/crystfel.7
index fd3f337c..bc545069 100644
--- a/doc/man/crystfel.7
+++ b/doc/man/crystfel.7
@@ -25,7 +25,7 @@ The crystal orientations in each pattern are random and uncorrelated, which lead
.RE
CrystFEL includes programs for simulating and processing patterns subject to the
-above characteristics. Twelve programs form the core of CrystFEL. They are:
+above characteristics. Fifteen programs form the core of CrystFEL. They are:
.IP \fBindexamajig\fR
Batch indexing, integration and data reduction program, which produces a "stream" containing the indexing and integration results for each diffraction pattern.
@@ -63,6 +63,12 @@ A tool for rendering slices of reciprocal space in two dimensions.
.IP \fBgeoptimiser\fR
A program to refine and optimize detector geometry.
+.IP \fBlist_events\fR
+A tool for creating lists of events from multi-event data files.
+
+.IP \fBwhirligig\fR
+A tool for locating runs of crystals with similar orientations, e.g. from 'mini rotation series' arising from the use of a slow extrusion sample injector.
+
.PP
There is also a folder full of scripts for achieving many related tasks.
@@ -149,4 +155,7 @@ You should have received a copy of the GNU General Public License along with Cry
.BR render_hkl (1),
.BR hdfsee (1),
.BR get_hkl (1),
+.BR geoptimiser (1),
+.BR whirligig (1),
+.BR list_events (1),
.BR crystfel_geometry (5).
diff --git a/doc/man/crystfel_geometry.5 b/doc/man/crystfel_geometry.5
index 44fe4450..974d602b 100644
--- a/doc/man/crystfel_geometry.5
+++ b/doc/man/crystfel_geometry.5
@@ -55,14 +55,13 @@ Information about the layout of the file data can be included in the geometry fi
This allows CrystFEL to unambigously identify data blocks which contain
data for a specific event, and to determine the number of events that each file contains.
-
The geometry file should contain lines of the following form:
.IP
-\fIpanel\fR\fB/\fIproperty\fB = \fIvalue\fR
+\fIpanel\fR/clen = 0.560
.PP
-\fIpanel\fR can be any name of your choosing. You can make up names for your panels however you please, as long as the first three letters are not "\fBbad\fR" (in lower case), because this is used to identify bad regions.
+\fIpanel\fR can be any name of your choosing. You can make up names for your panels however you please, as long as the first three letters are not "\fBbad\fR" or "rigid_group" (in lower case), because these are used for special purposes (see below).
.PP
You can also specify values without a panel name, for example:
@@ -133,7 +132,7 @@ The range of pixels in the data block specified by the 'data' property that corr
.PD 0
.IP \fBadu_per_eV\fR
.PD
-The number of detector intensity units (ADU) which will arise from one electron-Volt of photon energy. This is used to estimate Poisson errors.
+The number of detector intensity units (ADU) which will arise from one electron-Volt of photon energy. This is used to estimate Poisson errors. Note that setting different values for this parameter for different panels does \fBnot\fR result in the intensities being scaled accordingly.
.PD 0
.IP \fBbadrow_direction\fR
@@ -149,7 +148,7 @@ The resolution (in pixels per metre) for this panel. This is one over the pixel
.PD 0
.IP \fBclen\fR
.PD
-The camera length (in metres) for this panel. You can also specify the HDF path to a floating point data block containing the camera length in millimetres. For example: "panel0/clen = /LCLS/detectorPosition". If the HDF file contains more than one event, and the data block is scalar, the camera length value
+The camera length (in metres) for this panel. You can also specify the HDF5 path to a floating point data block containing the camera length in millimetres. For example: "panel0/clen = /LCLS/detectorPosition". If the HDF5 file contains more than one event, and the data block is scalar, the camera length value
it contains will be used for all events. If, however, the data block is multidimensional and the second dimension is bigger than one, the CrystFEL programs will try to match the content of the data block with the events in the file, assigning the first value in the data block to the first event in the file,
the second value in the data block to the second event in the file, etc. See \fBcoffset\fR as well.
@@ -187,7 +186,7 @@ Set this to 1 or "true" to ignore this panel completely.
.IP \fBmask_bad\fR
.PD
Bitmasks for bad pixel masks. The pixel is considered good if all of the bits which are set in \fBmask_good\fR are set, \fIand\fR if none of the bits which are set in \fBmask_bad\fR are set. Example:
-.br
+.IP
mask = /processing/hitfinder/masks
.br
mask_good = 0x27
@@ -197,7 +196,9 @@ mask_bad = 0x00
.SH BAD REGIONS
-You can also specify bad regions. Peaks with centroid locations within such a region will not be integrated nor used for indexing. Bad regions are specified in pixel units, either in the lab coordinate system (see above) or in fast scan/slow scan coordinates (mixtures are not allowed). In the latter case, the range of pixels is specified \fIinclusively\fR. Bad regions are distinguished from normal panels by the fact that they begin with the three letters "bad".
+You can also specify bad regions. Bad regions will be completely ignored by CrystFEL. Bad regions are specified in pixel units, either in the lab coordinate system (see above) or in fast scan/slow scan coordinates (mixtures are not allowed). In the latter case, the range of pixels is specified \fIinclusively\fR. Bad regions are distinguished from normal panels by the fact that they begin with the three letters "bad".
+.PP
+You can specify a panel name for the bad region, in which case the pixels will only be considered bad if they are within the range you specify \fIand\fR in the panel you specify. This might be necessary if your HDF5 file layout has overlapping ranges of fs/ss coordinates for different panels (e.g. if the data blocks for the panels are in different HDF5 datasets).
Examples:
.br
@@ -218,6 +219,8 @@ badregionB/max_fs = 160
badregionB/min_ss = 256
.br
badregionB/max_ss = 512
+.br
+badregionB/panel = q0a1
.SH RIGID GROUPS AND RIGID GROUP COLLECTIONS
@@ -248,7 +251,7 @@ The geometry file can include information about beam characteristics, using gene
.PD 0
.IP \fBphoton_energy\fR
.PD
-The beam photon energy in eV. You can also specify the HDF path to a floating point data block value containing the photon energy in eV. For example: "photon_energy = /LCLS/photon_energy_eV". If the HDF file contains more than one event, and the data block is scalar, the photon energy value
+The beam photon energy in eV. You can also specify the HDF5 path to a floating point data block value containing the photon energy in eV. For example: "photon_energy = /LCLS/photon_energy_eV". If the HDF5 file contains more than one event, and the data block is scalar, the photon energy value
it contains will be used for all events. If, however, the data block is multidimensional and the second dimension is bigger than one, the CrystFEL programs will try to match the content of the data block with the events in the file, assigning the first value in the data block to the first event in the file,
the second value in the data block to the second event in the file, etc. See also \fBphoton_energy_scale\fR.
diff --git a/doc/man/geoptimiser.1 b/doc/man/geoptimiser.1
index 19ce4534..2a544830 100644
--- a/doc/man/geoptimiser.1
+++ b/doc/man/geoptimiser.1
@@ -14,7 +14,7 @@ geoptimiser \- detector geometry refinement
.PP
.BR geoptimiser
\fB-i \fIinput.stream \fB-g \fIinput.geom \fB-o \fIoutput.geom \fB-c \fIconnected_rigidgroup_coll \fB-q \fI\quadrant_rigidgroup_coll\fR
-[\fBoptions\fR] \fB...\fR
+[\fBoptions\fR]
.PP
\fBgeoptimiser --help\fR
@@ -33,12 +33,17 @@ the name of two rigid group collections defined in the geometry file: one descri
.PP
See \fBman crystfel_geometry\fR for information on how to create a file describing the detector geometry, and guidelines to define the required rigid groups and rigid groups collections.
+.PP
+Geoptimizer saves error maps before and after the geometry optimization. These maps show an estimation of the geometry error as average displacement, for each pixel, between the predicted and the observed positions of the Bragg peaks. The maps are color-scaled PNG files and
+are named "error_map_before.png" and "error_map_after.png" respectively. In order to better visualize small local errors, the color range has been set to show all displacements bigger that 1 pixel as white (in other words, "displacement saturation" is set at 1 pixel).
+
+
.SH OPTIONS
.PD 0
.IP "\fB-i\fR \fIfilename\fR"
.IP \fB--input=\fR\fIfilename\fR
.PD
-Read the indexed patterns from the \fIfilename\fR stream file.
+Give the filename of the stream from which to read the indexed patterns.
.PD 0
.IP "\fB-g\fR \fIfilename\fR"
@@ -69,6 +74,10 @@ Specifies the name of the rigid group collection for detector 'quadrants'. This
.sp
If a given rigid group is a member of \fIname\fR, then panels which are members of that rigid group and which do not contain enough peaks for positional refinement will be moved according to the average movement of the other panels in the group.
+.PD 0
+.IP \fB--no-error-maps\fR
+.PD
+Forces geoptimiser not to save error maps.
.PD 0
.IP "\fB-x\fR \fIn\fR"
@@ -108,6 +117,16 @@ to be included in the optimization process. The default maximum distance is 8 pi
.PD
By default, geoptimiser refines the distance between the detector and the sample. This option turns off this optimization.
+.PD 0
+.IP \fB--no-cspad\fR
+.PD
+If a geometry file containing 64 panels (ASICs) is provided by the user, geoptimiser assumes that the detector described by the geometry file is a CSPAD, and performs some sanity-checks on the relative ditance and orientation of connected panels. If the checks fail, the geometry optimization is stopped. This option turns off these checks.
+
+.PD 0
+.IP \fB--enforce-cspad-layout\fR
+.PD
+When this option is used, geoptimiser tries to fix the CSPAD layout problems detected by the checks described in the entry for the \fB--no-cspad\fR option. Immediately after performing this operation, geoptimser saves the new detector layout in the output refined geometry file and exits.
+
.SH AUTHOR
This page was written by Valerio Mariani, Oleksandr Yefanov and Thomas White.
@@ -115,7 +134,7 @@ This page was written by Valerio Mariani, Oleksandr Yefanov and Thomas White.
Report bugs to <taw@physics.org>, or visit <http://www.desy.de/~twhite/crystfel>.
.SH COPYRIGHT AND DISCLAIMER
-Copyright © 2012-2015 Deutsches Elektronen-Synchrotron DESY, a research centre of the Helmholtz Association.
+Copyright © 2014-2015 Deutsches Elektronen-Synchrotron DESY, a research centre of the Helmholtz Association.
.P
geoptimiser, and this manual, are part of CrystFEL.
.P
diff --git a/doc/man/hdfsee.1 b/doc/man/hdfsee.1
index 1b2834c2..7a4dddb6 100644
--- a/doc/man/hdfsee.1
+++ b/doc/man/hdfsee.1
@@ -43,7 +43,11 @@ Show the image after binning down by a factor of \fIb\fR.
.IP "\fB-e\fR \fIpath\fR"
.IP \fB--image=\fR\fIpath\fR
.PD
-Get the image data to display from \fIpath\fR inside the HDF5 file. For example: \fI/data/rawdata\fR. If this is not specified, the default behaviour is to display the first two-dimensional dataset with both dimensions greater than 64.
+Get the image data to display from \fIpath\fR inside the HDF5 file. Example: \fI/data/rawdata\fR.
+.IP
+If no geometry file is provided (see \fB-g\fR) and this option is not used, hdfsee will display the first two-dimensional dataset it finds in the file with both dimensions greater than 64. If a geometry file is provided, the data layout description from the file determines which image is displayed (see \fB man crystfel_geometry\fR).
+.IP
+If \fB-e\fR is used in combination with \fB-g\fR, hdfsee will attempt to show the specified dataset with the geometry applied. The data layout description from the geometry file will be ignored, the data block to be used as data source for all panels will be set to \fIpath\fR and it will be assumed to be 2-dimensional.
.PD 0
.IP "\fB-g\fR \fIfilename\fR"
@@ -91,9 +95,13 @@ Apply a noise filter to the image with checks 3x3 squares of pixels and sets all
.SH CALIBRATION MODE
Calibration mode allows you to visually adjust the locations of panels. To enter calibration mode, select Tools->Calibration Mode from the menu. The currently selected panel will be bordered in white. Press + or - to move to the next or previous panel (as listed in the geometry file). Use the arrow keys to move the current panel. Press 'f' to hide or restore the white border. Press 's' to save the geometry file with your modifications. Press 'g' to toggle between moving individual panels, rigid groups (if any are defined in the geometry file) and moving all panels together.
+Most of these actions can also be accessed from the Calibration menu, which becomes aptive when calibration mode is toggled once
+
+.SH EVENT NAVIGATION
+When multi-event files are opened, the Events menu in the menubar becomes active, and some event navigation tools become available. The title bar shows, in addition to the file name, the name of the event currently displayed (See \fBman crystfel_geometry\fR and \fBman indexamajig\fR for a description of event naming). Press 'n' to move to the next event in the file, and 'p' to move to the previous one'. Press 'e' to jump to a specific event, by providing an event name (Use the \fBlist_events\fR program to get a list of the events included in a file). Press 'r' to jump to a random event. These actions are also accessible from the Events menu in the menubar.
.SH AUTHOR
-This page was written by Thomas White.
+This page was written by Thomas White and Valerio Mariani.
.SH REPORTING BUGS
Report bugs to <taw@physics.org>, or visit <http://www.desy.de/~twhite/crystfel>.
diff --git a/doc/man/indexamajig.1 b/doc/man/indexamajig.1
index b46b663b..75fa3e6c 100644
--- a/doc/man/indexamajig.1
+++ b/doc/man/indexamajig.1
@@ -1,7 +1,7 @@
.\"
.\" indexamajig man page
.\"
-.\" Copyright © 2012-2014 Deutsches Elektronen-Synchrotron DESY,
+.\" Copyright © 2012-2015 Deutsches Elektronen-Synchrotron DESY,
.\" a research centre of the Helmholtz Association.
.\"
.\" Part of CrystFEL - crystallography with a FEL
@@ -26,22 +26,24 @@ For minimal basic use, you need to provide the list of diffraction patterns, the
.IP \fBindexamajig\fR
.PD
--i mypatterns.lst -j 10 -g mygeometry.geom --indexing=mosflm,dirax --peaks=hdf5 -o test.stream -p mycell.pdb
+-i mypatterns.lst -g mygeometry.geom --indexing=mosflm,dirax --peaks=hdf5 -o test.stream -p mycell.pdb
.PP
More typical use includes all the above, but might also include extra parameters to modify the behaviour. For example, you'll probably want to
run more than one indexing job at a time (-j <n>).
-See \fBman crystfel_geometry\fR for information about how to create a file describing detector geometry and beam characteristics.
+See \fBman crystfel_geometry\fR for information about how to create a file describing the detector geometry and beam characteristics.
.SH DIFFRACTION PATTERN LIST
-Indexamajig requires an input file with a list of diffraction patterns ("events") to process. In its simplest form, this is just a text files containing a list of HDF5 filenames. The HDF5 files might be in some folder a long way from the current directory, so you might want to specify a full pathname to be added in front of each filename. The geometry file includes a description of the data layout within the HDF5 files. Indexamajig uses this description to make an educated guess at the number of diffraction patterns stored in each file, and tries to process them all. You can however single out an event contained in the file for processing, by putting a string describing the event after the file name (see below).
+Indexamajig requires an input file with a list of diffraction patterns ("events") to process. In its simplest form, this is just a text files containing a list of HDF5 filenames. The HDF5 files might be in some folder a long way from the current directory, so you might want to specify a full pathname to be added in front of each filename. The geometry file includes a description of the data layout within the HDF5 files. Indexamajig uses this description to determine the number of diffraction patterns stored in each file, and tries to process them all. You can also specify explicity which event(s) you would like to process by putting a string describing the event after the file name(s) in this list.
.SH PEAK DETECTION
-You can control the peak detection on the command line. Firstly, you can choose the peak detection method using \fB--peaks=\fR\fImethod\fR. Currently, two values for "method" are available. \fB--peaks=hdf5\fR will take the peak locations from the HDF5 file. It expects a two dimensional array, by default at /processing/hitfinder/peakinfo, whose size in the first dimension equals the number of peaks and whose size in the second dimension is three. The first two columns contain the fast scan and slow scan coordinates, the third contains the intensity. However, the intensity will be ignored since the pattern will always be re-integrated using the unit cell provided by the indexer on the basis of the peaks. You can tell indexamajig where to find this table inside each HDF5 file using \fB--hdf5-peaks=\fR\fIpath\fR.
+You can control the peak detection on the command line. Firstly, you can choose the peak detection method using \fB--peaks=\fR\fImethod\fR. There are three possibilities for "method" here. \fB--peaks=hdf5\fR will take the peak locations from the HDF5 file. It expects a two dimensional array, by default at /processing/hitfinder/peakinfo, whose size in the first dimension equals the number of peaks and whose size in the second dimension is three. The first two columns contain the fast scan and slow scan coordinates, the third contains the intensity. However, the intensity will be ignored since the pattern will always be re-integrated using the unit cell provided by the indexer on the basis of the peaks. You can tell indexamajig where to find this table inside each HDF5 file using \fB--hdf5-peaks=\fR\fIpath\fR.
+
+\fB--peaks=cxi\fR works similarly to this, but expects four separate HDF5 datasets beneath \fIpath\fR, \fBnPeaks\fR, \fBpeakXPosRaw\fR, \fBpeakYPosRaw\fR and \fBpeakTotalIntensity\fR. See the specification for the CXI file format at http://www.cxidb.org/ for more details.
If you use \fB--peaks=zaef\fR, indexamajig will use a simple gradient search after Zaefferer (2000). You can control the overall threshold and minimum squared gradient for finding a peak using \fB--threshold\fR and \fB--min-gradient\fR. The threshold has arbitrary units matching the pixel values in the data, and the minimum gradient has the equivalent squared units. Peaks will be rejected if the 'foot point' is further away from the 'summit' of the peak by more than the inner integration radius (see below). They will also be rejected if the peak is closer than twice the inner integration radius from another peak.
@@ -230,7 +232,7 @@ Prefix the filenames from the input file with \fIprefix\fR. If \fB--basename\fR
.PD 0
.IP \fB--hdf5-peaks=\fR\fIpath\fR
.PD
-When using \fB--peaks=hdf5\fR, read the peak locations from a table in the HDF5 file located at \fIpath\fR.
+When using \fB--peaks=hdf5\fR or \fB--peaks=cxi\fR, read the peak positions from location \fIpath\fR. See \fBPEAK DETECTION\fR above.
.PD 0
.IP \fB--tolerance=\fR\fItol\fR
@@ -263,7 +265,7 @@ Set the overall threshold for peak detection using \fB--peaks=zaef\fR to \fIthre
.PD 0
.IP \fB--min-gradient=\fR\fIgrad\fR
.PD
-Set the gradient threshold for peak detection using \fB--peaks=zaef\fR to \fIgrad\fR, which units of "detector units per pixel". The default is \fB--min-gradient=100000\fR.
+Set the square of the gradient threshold for peak detection using \fB--peaks=zaef\fR to \fIgrad\fR, which has units of "squared detector units per pixel". The default is \fB--min-gradient=100000\fR. The reason it's 'gradient squared' instead of just 'gradient' is historical.
.PD 0
.IP \fB--min-snr=\fR\fIsnr\fR
@@ -293,7 +295,7 @@ Normally, peaks which contain one or more pixels above max_adu (defined in the d
.PD 0
.IP \fB--no-revalidate\fR
.PD
-When using \fB--peaks=hdf5\fR, the peaks will be put through some of the same checks as if you were using \fB--peaks=zaef\fR. These checks reject peaks which are too close to panel edges, are saturated (unless you use \fB--use-saturated\fR), have other nearby peaks (closer than twice the inner integration radius, see \fB--int-radius\fR), or have any part in a bad region. Using this option skips this validation step, and uses the peaks directly.
+When using \fB--peaks=hdf5\fR or \fB--peaks=cxi\fR, the peaks will be put through some of the same checks as if you were using \fB--peaks=zaef\fR. These checks reject peaks which are too close to panel edges, are saturated (unless you use \fB--use-saturated\fR), have other nearby peaks (closer than twice the inner integration radius, see \fB--int-radius\fR), or have any part in a bad region. Using this option skips this validation step, and uses the peaks directly.
.PD 0
.IP \fB--check-hdf5-snr\fR
@@ -326,14 +328,25 @@ When \fBrescut\fR is in the integration method, integrate \fIn\fR nm^-1 higher t
Mark all pixels on the detector higher than \fIn\fR Angstroms as bad. This might be useful when you have noisy patterns and don't expect any signal above a certain resolution.
+.PD 0
+.IP \fB--fix-profile-radius=\fIn\fR
+.IP \fB--fix-bandwidth=\fIn\fR
+.IP \fB--fix-divergence=\fIn\fR
+.PD
+Fix the beam and crystal paramters to the given values. The profile radius is given in m^-1, the bandwidth as a decimal fraction and the divergence in radians (full angle). The default is to set the divergence to zero, the bandwidth to a very small value, and then to automatically determine the profile radius.
+.IP
+You do not have to use all three of these options together. For example, if the automatic profile radius determination is not working well for your data set, you could fix that alone and continue using the default values for the other parameters (which might be automatically determined in future versions of CrystFEL, but are not currently).
+
+.PD 0
+.IP \fB--no-refine
+.PD
+Skip the prediction refinement step.
+
.SH IDENTIFYING SINGLE PATTERNS IN THE INPUT FILE
By default indexamajig processes all diffraction patterns ("events") in each of the data files listed in the input list. It is however, possible, to only process single events in a multi-event file, by adding in the list an event description string after the data filename. The event description always includes a first section with alphanumeric strings separated by forward slashes ("/") and a second section with integer numbers also separated by forward slashes. The two sections are in turn separated by a double forward slash ('//'). Any of the two sections can be empty, but the double forward slash separator must always be present. Indexamajig matches the strings and the numbers in the event description with the event placeholders ('%') present respectively in the 'data' and 'dim' properties defined in the geometry file, and tries to retrieve the full HDF path to the event data and the the its location in a multi-dimensional data space. Consider the following examples:
-Example 1:
-.br
-
-Assuming that the 'data' and 'dim' properties have been defined like this in the geometry file:
+\fBExample 1:\fR The 'data' and 'dim' properties have been defined like this in the geometry file:
.br
data = /data/%/rawdata
@@ -342,18 +355,15 @@ dim0 = ss
.br
dim1 = fs
-The following line:
+The event list contains the following line:
.br
filename.h5 event1//
.br
-Identifies an event in the 2-dimensional data block lying at the /data/event1/rawdata HDF path in the filename.h5 file
-
-Example 2:
-.br
+This identifies an event in the 2-dimensional data block located at /data/event1/rawdata in the HDF5 file called filename.h5.
-Assuming that the 'data' and 'dim' properties have been defined like this in the geometry file:
+\fBExample 2:\fR The 'data' and 'dim' properties have been defined like this in the geometry file:
.br
data = /data/rawdata
@@ -364,18 +374,21 @@ dim1 = ss
.br
dim2 = fs
-The following line:
+The event list contains the following line:
.br
filename.h5 //3
.br
-Identifies an event in the 3-dimensional data block lying at the /data/rawdata HDF path in the filename.h5 file, specifically the 2-dimensional data slice defined by the value 3 of the first axis of the data space.
+This identifies an event in the 3-dimensional data block located at /data/rawdata in the HDF5 file called filename.h5, specifically the 2-dimensional data slice defined by the value 3 of the first axis of the data space.
Indexamajig tries to match the alphanumerical strings to the placeholders in the 'dim' property defined in the geometry file. The first string is matched to the first placeholder, the second to
the second placeholder, and so on. A similar strategy is followed to match integer numbers to the placeholders in the 'dim' property defined in the geometry file.
For a full explanation of how the internal layout of the data file can be described in the geometry file, please see \fBman crystfel_geometry\fR.
+You can use \fBlist_events\fR to prepare a list of each event in one or more input files. Note that you only need to do this if you need to perform some sorting or filtering on this list. If you want to process every event in a file, simply specify the filename in the input file.
+
+
.SH BUGS
ReAx indexing is experimental. It works very nicely for some people, and crashes for others. In a future version, it will be improved and fully supported.
@@ -401,4 +414,6 @@ You should have received a copy of the GNU General Public License along with Cry
.BR crystfel_geometry (5),
.BR cell_explorer (1),
.BR process_hkl (1),
-.BR partialator (1)
+.BR partialator (1),
+.BR list_events (1),
+.BR whirligig (1)
diff --git a/doc/man/list_events.1 b/doc/man/list_events.1
index d1e080e3..900288f6 100644
--- a/doc/man/list_events.1
+++ b/doc/man/list_events.1
@@ -1,7 +1,8 @@
.\"
.\" list_events man page
.\"
-.\" Copyright © 2015 Thomas White <taw@physics.org>
+.\" Copyright © 2015 Deutsches Elektronen-Synchrotron DESY,
+.\" a research centre of the Helmholtz Association.
.\"
.\" Part of CrystFEL - crystallography with a FEL
.\"
@@ -16,7 +17,7 @@ list_events \- generate event lists
\fBlist_events --help\fI
.SH DESCRIPTION
-list_events expands a list of filenames, where each file contains events in a multi-event format (e.g. the CXI format, http://www.cxidb.org/), into a list of individual events.
+list_events expands a list of filenames, where each file contains events in a multi-event format (e.g. the CXI format, http://www.cxidb.org/), into a list of individual events. This might be useful if you need to sort or filter the event list prior to processing, rather than just processing all events.
.SH OPTIONS
diff --git a/doc/man/partial_sim.1 b/doc/man/partial_sim.1
index 67b05edc..e11c75e7 100644
--- a/doc/man/partial_sim.1
+++ b/doc/man/partial_sim.1
@@ -15,7 +15,6 @@ partial_sim \- calculate partial reflections
.BR partial_sim
\fB-o\fR \fIsimulated.stream\fR
\fB-g\fR \fIgeometry.geom\fR
-\fB-b\fR \fIxrays.beam\fR
\fB-p\fR \fIunitcell.pdb\fR
[\fIoptions\fR] \fB...\fR
@@ -113,7 +112,7 @@ Use \fIn\fR threads for simulation. Default: 1.
.B
.IP "\fB--images=\fR\fIprefix\fR"
.PD
-For each chunk in the output stream, write a 'sketch' image in HDF5 format to \fIprefix\fR\fB/sim-\fR\fINNN\fR\fB.h5\fR, where \fINNN\fR is the sequence number of the chunk in the output stream. This option is incompatible with \fB-j\fR. The intensities in the peaks in the sketches will have th
+For each chunk in the output stream, write a 'sketch' image in HDF5 format to \fIprefix\fR\fB/sim-\fR\fINNN\fR\fB.h5\fR, where \fINNN\fR is the sequence number of the chunk in the output stream. This option is incompatible with \fB-j\fR. The intensities in the peaks in the sketches will be equal to the partial intensities in the stream, including noise and overall scaling factors. The images will also contain a random Poisson-distributed background according to \fB--background\fR.
.PD 0
.B
@@ -145,6 +144,10 @@ Set the radius of the scattering density surrounding each reciprocal lattice poi
.PD
Set the central photon energy, in eV, for the incident beam. The default is \fB--photon-energy=9000\fR, i.e. 9 keV X-rays.
+.PD 0
+.IP \fB--really-random\fR
+.PD
+Seed the random number generator using the kernel random number generator (/dev/urandom). This means that truly random numbers for the orientation and crystal size, instead of the same sequence being used for each new run.
.SH AUTHOR
This page was written by Thomas White.
diff --git a/doc/man/partialator.1 b/doc/man/partialator.1
index 75fc34f2..63fb062c 100644
--- a/doc/man/partialator.1
+++ b/doc/man/partialator.1
@@ -93,20 +93,29 @@ Include a reflection in the output only if it appears at least least \fIn\fR tim
The available partiality models are:
-.IP \fBsphere\fR
+.IP \fBscsphere\fR
.PD
The volume of intersection between a sphere centered on each reciprocal lattice
-point, and the part of reciprocal space excited by the Ewald sphere taking into
-account the finite bandwidth and convergence angle. A Lorentz factor will also
-be used, proportional to the distance between the limiting Ewald spheres.
+point and the part of reciprocal space excited by the Ewald sphere taking into
+account the finite bandwidth and convergence angle. A "source coverage factor"
+will be included to take into account the spectral brightness of the effective
+source for the reflection.
-For a full description including diagrams, see T. A. White et al., Acta Cryst.
-D69 (2013) p1231-1240.
+This model is similar to that described in Acta Cryst. D69 (2013) p1231-1240,
+and in Phil. Trans. Roy. Soc. B 369 (2014) 20130330, except that the "Lorentz
+factor" described there is no longer treated as a separate factor.
-.IP \fBunity\fR
+
+.IP \fBscgaussian\fR
.PD
-Fix all partialities at 1, and use no Lorentz factor at all.
+As \fBscsphere\fR, except that the shape of the scattering density centered on
+each reciprocal lattice point is taken to be a 3D Gaussian distribution instead
+of a sphere. The standard deviation of the distribution will be the profile
+radius (determined by indexamajig) divided by 2.6.
+.IP \fBunity\fR
+.PD
+Fix all partialities at 1.
.SH BUGS
diff --git a/doc/reference/libcrystfel/CrystFEL-docs.sgml b/doc/reference/libcrystfel/CrystFEL-docs.sgml
index 1aef3ddb..ae0a115a 100644
--- a/doc/reference/libcrystfel/CrystFEL-docs.sgml
+++ b/doc/reference/libcrystfel/CrystFEL-docs.sgml
@@ -8,7 +8,7 @@
<bookinfo>
<title>CrystFEL Reference Manual</title>
<releaseinfo>
- For libcrystfel from CrystFEL 0.5.4.
+ For libcrystfel from CrystFEL 0.6.0.
</releaseinfo>
<abstract>
This is the internal documentation for CrystFEL. Unless you are looking at
@@ -43,6 +43,11 @@
</chapter>
<chapter>
+ <title>Events</title>
+ <xi:include href="xml/events.xml"/>
+ </chapter>
+
+ <chapter>
<title>Geometry of diffraction</title>
<xi:include href="xml/geometry.xml"/>
</chapter>
diff --git a/doc/reference/libcrystfel/CrystFEL-sections.txt b/doc/reference/libcrystfel/CrystFEL-sections.txt
index f3b5dc59..7b06c2cd 100644
--- a/doc/reference/libcrystfel/CrystFEL-sections.txt
+++ b/doc/reference/libcrystfel/CrystFEL-sections.txt
@@ -94,6 +94,7 @@ cell_get_reciprocal
cell_get_centering
cell_get_lattice_type
cell_get_unique_axis
+cell_has_parameters
<SUBSECTION>
cell_set_cartesian
cell_set_parameters
@@ -132,6 +133,7 @@ right_handed
str_lattice
forbidden_reflection
load_cell_from_pdb
+load_cell_from_file
lattice_from_str
</SECTION>
@@ -202,10 +204,15 @@ histogram_set_num_bins
<SECTION>
<FILE>image</FILE>
image
+beam_params
+imagefeature
ImageFeatureList
SpectrumType
+sample
+<SUBSECTION>
image_add_feature
image_feature_closest
+image_reflection_closest
image_feature_count
image_feature_list_free
image_feature_list_new
@@ -327,11 +334,18 @@ intmat_print
<SECTION>
<FILE>detector</FILE>
+detector
+panel
+badregion
+rigid_group
+rg_collection
+<SUBSECTION>
copy_geom
fill_in_values
free_detector_geometry
get_detector_geometry
write_detector_geometry
+write_detector_geometry_2
find_panel
find_panel_by_name
find_panel_number
@@ -342,15 +356,22 @@ get_q
get_q_for_panel
get_tt
smallest_q
-twod_mapping
reverse_2d_mapping
largest_q
in_bad_region
mark_resolution_range_as_bad
+find_orig_panel
+panel_is_in_rigid_group
+rigid_group_is_in_collection
+single_panel_data_source
+find_rigid_group_collection_by_name
</SECTION>
<SECTION>
<FILE>events</FILE>
+event
+event_list
+<SUBSECTION>
initialize_event
push_path_entry_to_event
pop_path_entry_from_event
@@ -358,6 +379,7 @@ push_dim_entry_to_event
pop_dim_entry_from_event
copy_event
free_event
+find_event
get_event_string
get_event_from_event_string
event_path_placeholder_subst
@@ -374,6 +396,7 @@ initialize_dim_structure
default_dim_structure
set_dim_structure_entry
free_dim_structure_entry
+free_dim_structure
</SECTION>
<SECTION>
@@ -383,6 +406,7 @@ free_dim_structure_entry
<SECTION>
<FILE>hdf5-file</FILE>
hdf5_read
+hdf5_read2
hdf5_write
hdf5_write_image
hdfile
@@ -394,13 +418,17 @@ hdfile_read_group
hdfile_set_first_image
hdfile_set_image
get_value
+get_ev_based_value
copy_hdf5_field
copy_hdf5_fields
add_copy_hdf5_field
new_copy_hdf5_field_list
free_copy_hdf5_field_list
get_peaks
+get_peaks_cxi
hdfile_is_scalar
+check_path_existence
+fill_event_list
</SECTION>
<SECTION>
@@ -419,6 +447,7 @@ crystal_get_profile_radius
crystal_get_reflections
crystal_get_resolution_limit
crystal_get_user_flag
+crystal_get_num_implausible_reflections
crystal_set_cell
crystal_set_image
crystal_set_mosaicity
@@ -428,16 +457,20 @@ crystal_set_profile_radius
crystal_set_reflections
crystal_set_resolution_limit
crystal_set_user_flag
+crystal_set_num_implausible_reflections
</SECTION>
<SECTION>
<FILE>geometry</FILE>
PartialityModel
find_intersections
+find_intersections_to_res
select_intersections
update_partialities
update_partialities_2
polarisation_correction
+sphere_fraction
+gaussian_fraction
</SECTION>
<SECTION>
@@ -501,4 +534,5 @@ rewind_stream
is_stream
write_command
write_geometry_file
+extract_f_from_stuff
</SECTION>