A Manual of sorts for Predict4

History

The original Predict was written back in 1996 in New Zealand when I felt that Massey needed a data collection strategy program, not least of all for the Arginase project. Although the code is mostly based on that first version, the lastest version (v4) has a number of improvements. Dimitar Nikolov helped with optimising an analytical solution to the diffraction condition equation. Maria Bewley helped with initial coding and debugging the first version.

Everything in the source code is written from scratch, therefore I consider the program to be public domain. You can take it and modify it for your own purposes. You cannot sell it, however, unless you include the source code with it with no restrictions on copying and further distribution. These terms are those of the Gnu copyleft.

Where to find it

xray0/Programs/predict/predict4 is the executible on both SGI and Linux. You will want the source files predict4.c and F77io.c and F77io.h if you want to compile it yourself. I've not built it on OS X yet. Someday.

How it does what it does

Predict works by reading the contents of a Denzo .x file. From this file it extracts the orientation matrix, cell dimensions, and the location of spots on the frame. From this data it empirically fits the data collection geometry. Once this is done we can predict the location of every single reflection in an entire sphere of data. In combination with crystallographic symmetry, one can predict best-case and worst-case data collection scenarios.

The current version assumes a single axis goniostat and thus will not map well to something that has more variable geometry. However the in-house Raxis IIc and Raxis IV systems and beamline X9A are all single-axis so this isn't such a bad approximation. In the latest version it should be fairly straightforward to add new detector types (like Quantum4).xx

Making it go

Index the frame of data you collected. Make sure you do it with
oscillation start 0.0
in your auto.dat (or index.com) file, otherwise I will not guarantee that the program will work properly. (One of these days I will fix that).

The arguments to Predict4 are as follows:

  1. The format (raxis2, raxis4 or x9a) of the detector system
  2. Space group
  3. The name of the Denzo .x file (integrated data)
  4. The name of an existing .hkl file or, more likely, hit return
  5. Angular ranges (solid wedges) you want to check for data collection strategy

Hit ^C (control-C) when you've seen enough.

Note that the third argument is mean to allow you to patch an existing partial dataset to make it more complete. The current implementation makes that a very slow process, and if you used Predict4 in the first place you shouldn't need to use this option.

If you are collecting anomalous (MAD/SAD) data use the -a flag (i.e. predict4 -a) since this tells the program not to use Friedel's Law

The output should be pretty straightforward (here for a large trigonal cell at beamline X9A):

Detector setups supported:
Raxis2    = raxisIIc on home generator
Raxis4    = raxis4   on home generator
X9A       = MARCCD on beamline X9A at NSLS

Type of detector [raxis4]: x9a
Detector type MAR CCD 165mm (81u scan)

2048x2048 pixels

Enter space group [P1]: P3121
Space group info for P3121
Number     : 152
Point Group: 321
Class      : TRIGONAL

Warning: Friedel's Law is ASSUMED
Name of DENZO .x file: woo/15m2_1_001.x
Opened .x file woo/15m2_1_001.x

Name of DENZO additional .hkl file ( for none): 
Additional Denzo HKL file will not be used

Orientation matrix for (h,k,l)
         -0.00206086         -0.00865791         -0.00520570
         -0.00151179          0.00826988         -0.00442148
          0.01340485          0.00654770         -0.00129898

Unit Cell        :    84.62   84.62  143.84   90.00   90.00  120.00
Resolution Limits:    20.00    2.20
Wavelength       :     0.98
Phi Start, Range :     0.00     1.00

Predict found 3608 reflections in the .x file

Now calculating the resolution and Z-value for all reflections

Now correcting Ewald space X and Y estimates for rotation

Rotation around Y with positive sign
Now estimating U->Y and V->X conversion factors (Ewald-to-pixel)

Correlation X with U  1.000 ;  X with V  0.001
Correlation Y with U -0.001 ;  Y with V -1.000
Scale factor for U to X is   1844.865 from 3608 refls
Scale factor for V to X is      0.000 from 3608 refls
Scale factor for U to Y is      0.000 from 3608 refls
Scale factor for V to Y is  -1844.817 from 3608 refls
Intercept    for V to X is   1039.574 from 3608 refls
Intercept    for U to Y is   1042.042 from 3608 refls

Initial values are:
 X =  1844.87U +     0.00V +  1039.57
 Y =     0.00U + -1844.82V +  1042.04
RMS deviations in X,Y,Z:       1.15       1.05    0.00036
Final  values are:
 X =  1844.87U +     0.00V +  1039.57
 Y =     0.00U + -1844.82V +  1042.04
RMS deviations in X,Y,Z:       1.15       1.05    0.00036
Now comparing predictions with observations
RMS deviations in X,Y,Z:       1.15       1.05    0.00036
Acceptable values are  :       1.50       1.50    0.00100

Generating a full sphere of reflections
FullSphere: 518783 reflections checked, 350389 reflections OK

Generating unique indices for each reflection

Reflections sorted on LKH order
Here are the top 50:
HKL: unique:    2   3   0  observed:   -3  -2   0
HKL: unique:    2   3   0  observed:    3   2   0
HKL: unique:    2   3   0  observed:   -2  -3   0
HKL: unique:    2   3   0  observed:    2   3   0
HKL: unique:    3   3   0  observed:   -3  -3   0
HKL: unique:    3   3   0  observed:    3   3   0
HKL: unique:    2   4   0  observed:   -2  -4   0
HKL: unique:    2   4   0  observed:   -4  -2   0
HKL: unique:    2   4   0  observed:    4   2   0
HKL: unique:    2   4   0  observed:    2   4   0
HKL: unique:    3   4   0  observed:   -4  -3   0
HKL: unique:    3   4   0  observed:   -4  -1   0
HKL: unique:    3   4   0  observed:    4   3   0
HKL: unique:    3   4   0  observed:    4   1   0
HKL: unique:    3   4   0  observed:   -1  -4   0
HKL: unique:    3   4   0  observed:    3   4   0
HKL: unique:    3   4   0  observed:   -3  -4   0
HKL: unique:    3   4   0  observed:    1   4   0
HKL: unique:    4   4   0  observed:    0   4   0
HKL: unique:    4   4   0  observed:    4   0   0
HKL: unique:    4   4   0  observed:    4   4   0
HKL: unique:    4   4   0  observed:   -4   0   0
HKL: unique:    4   4   0  observed:    0  -4   0
HKL: unique:    4   4   0  observed:   -4  -4   0
HKL: unique:    3   5   0  observed:   -2  -5   0
HKL: unique:    3   5   0  observed:    5   3   0
HKL: unique:    3   5   0  observed:    5   2   0
HKL: unique:    3   5   0  observed:    2   5   0
HKL: unique:    3   5   0  observed:    3   5   0
HKL: unique:    3   5   0  observed:   -5  -3   0
HKL: unique:    3   5   0  observed:   -3  -5   0
HKL: unique:    3   5   0  observed:   -5  -2   0
HKL: unique:    4   5   0  observed:    4   5   0
HKL: unique:    4   5   0  observed:    1   5   0
HKL: unique:    4   5   0  observed:   -4  -5   0
HKL: unique:    4   5   0  observed:   -5  -4   0
HKL: unique:    4   5   0  observed:   -5  -1   0
HKL: unique:    4   5   0  observed:    5   4   0
HKL: unique:    4   5   0  observed:   -1  -5   0
HKL: unique:    4   5   0  observed:    5   1   0
HKL: unique:    5   5   0  observed:    5   0   0
HKL: unique:    5   5   0  observed:   -5  -5   0
HKL: unique:    5   5   0  observed:    5   5   0
HKL: unique:    5   5   0  observed:   -5   0   0
HKL: unique:    5   5   0  observed:    0   5   0
HKL: unique:    5   5   0  observed:    0  -5   0
HKL: unique:    3   6   0  observed:    6   3   0
HKL: unique:    3   6   0  observed:   -3  -6   0
HKL: unique:    3   6   0  observed:   -6  -3   0
HKL: unique:    3   6   0  observed:    3   6   0
Finding the two diffraction conditions for each reflection (ALGABREIC mode)
Starting refl #0
Starting refl #50000
Starting refl #100000
Starting refl #150000
Starting refl #200000
Starting refl #250000
Starting refl #300000
Starting refl #350000

Testing data collection scenarios for P3121
50% of the data can be collected in approx  20.0 deg.
75% of the data can be collected in approx  45.0 deg.
90% of the data can be collected in approx  60.0 deg.




Enter how many DEGREES of data you want to collect: 10
Scenarios will evaluate wedges of   10.00 degrees
From  -180 to  -170  #obs  19125  #uniq  17149 #total  17149, compl  28.5%, redun   1.1
From  -170 to  -160  #obs  19167  #uniq  17089 #total  17089, compl  28.4%, redun   1.1
From  -160 to  -150  #obs  19147  #uniq  16087 #total  16087, compl  26.7%, redun   1.2
From  -150 to  -140  #obs  19192  #uniq  16223 #total  16223, compl  27.0%, redun   1.2
From  -140 to  -130  #obs  19120  #uniq  17012 #total  17012, compl  28.3%, redun   1.1
From  -130 to  -120  #obs  19150  #uniq  17534 #total  17534, compl  29.1%, redun   1.1
From  -120 to  -110  #obs  19143  #uniq  17674 #total  17674, compl  29.4%, redun   1.1
From  -110 to  -100  #obs  19101  #uniq  17612 #total  17612, compl  29.3%, redun   1.1
From  -100 to   -90  #obs  19160  #uniq  17062 #total  17062, compl  28.3%, redun   1.1
From   -90 to   -80  #obs  19188  #uniq  15931 #total  15931, compl  26.5%, redun   1.2
From   -80 to   -70  #obs  19148  #uniq  14190 #total  14190, compl  23.6%, redun   1.3
From   -70 to   -60  #obs  19174  #uniq  12816 #total  12816, compl  21.3%, redun   1.5
From   -60 to   -50  #obs  19102  #uniq  14649 #total  14649, compl  24.3%, redun   1.3
From   -50 to   -40  #obs  19159  #uniq  14617 #total  14617, compl  24.3%, redun   1.3
From   -40 to   -30  #obs  19127  #uniq  14994 #total  14994, compl  24.9%, redun   1.3
From   -30 to   -20  #obs  19159  #uniq  15389 #total  15389, compl  25.6%, redun   1.2
From   -20 to   -10  #obs  19159  #uniq  16447 #total  16447, compl  27.3%, redun   1.2
From   -10 to     0  #obs  19108  #uniq  16934 #total  16934, compl  28.1%, redun   1.1
From     0 to    10  #obs  19122  #uniq  17146 #total  17146, compl  28.5%, redun   1.1
From    10 to    20  #obs  19164  #uniq  17086 #total  17086, compl  28.4%, redun   1.1
From    20 to    30  #obs  19160  #uniq  16099 #total  16099, compl  26.7%, redun   1.2
From    30 to    40  #obs  19199  #uniq  16230 #total  16230, compl  27.0%, redun   1.2
From    40 to    50  #obs  19121  #uniq  17013 #total  17013, compl  28.3%, redun   1.1
From    50 to    60  #obs  19143  #uniq  17527 #total  17527, compl  29.1%, redun   1.1
From    60 to    70  #obs  19145  #uniq  17676 #total  17676, compl  29.4%, redun   1.1
From    70 to    80  #obs  19100  #uniq  17620 #total  17620, compl  29.3%, redun   1.1
From    80 to    90  #obs  19163  #uniq  17061 #total  17061, compl  28.3%, redun   1.1
From    90 to   100  #obs  19181  #uniq  15919 #total  15919, compl  26.4%, redun   1.2
From   100 to   110  #obs  19137  #uniq  14187 #total  14187, compl  23.6%, redun   1.3
From   110 to   120  #obs  19144  #uniq  12816 #total  12816, compl  21.3%, redun   1.5
From   120 to   130  #obs  19035  #uniq  14595 #total  14595, compl  24.2%, redun   1.3
From   130 to   140  #obs  19017  #uniq  14489 #total  14489, compl  24.1%, redun   1.3
From   140 to   150  #obs  18809  #uniq  14685 #total  14685, compl  24.4%, redun   1.3
From   150 to   160  #obs  18435  #uniq  14753 #total  14753, compl  24.5%, redun   1.2
From   160 to   170  #obs  16101  #uniq  13938 #total  13938, compl  23.2%, redun   1.2
From   170 to   180  #obs  10228  #uniq   9372 #total   9372, compl  15.6%, redun   1.1

Enter how many DEGREES of data you want to collect: 30
Scenarios will evaluate wedges of   30.00 degrees
From  -180 to  -150  #obs  57439  #uniq  37439 #total  37439, compl  62.2%, redun   1.5
From  -170 to  -140  #obs  57506  #uniq  32891 #total  32891, compl  54.6%, redun   1.7
From  -160 to  -130  #obs  57459  #uniq  32152 #total  32152, compl  53.4%, redun   1.8
From  -150 to  -120  #obs  57462  #uniq  35414 #total  35414, compl  58.8%, redun   1.6
From  -140 to  -110  #obs  57413  #uniq  38845 #total  38845, compl  64.5%, redun   1.5
From  -130 to  -100  #obs  57394  #uniq  40627 #total  40627, compl  67.5%, redun   1.4
From  -120 to   -90  #obs  57404  #uniq  40975 #total  40975, compl  68.1%, redun   1.4
From  -110 to   -80  #obs  57449  #uniq  37914 #total  37914, compl  63.0%, redun   1.5
From  -100 to   -70  #obs  57496  #uniq  33725 #total  33725, compl  56.0%, redun   1.7
From   -90 to   -60  #obs  57510  #uniq  29289 #total  29289, compl  48.7%, redun   2.0
From   -80 to   -50  #obs  57424  #uniq  24514 #total  24514, compl  40.7%, redun   2.3
From   -70 to   -40  #obs  57435  #uniq  25410 #total  25410, compl  42.2%, redun   2.3
From   -60 to   -30  #obs  57388  #uniq  29093 #total  29093, compl  48.3%, redun   2.0
From   -50 to   -20  #obs  57445  #uniq  31633 #total  31633, compl  52.6%, redun   1.8
From   -40 to   -10  #obs  57445  #uniq  33718 #total  33718, compl  56.0%, redun   1.7
From   -30 to     0  #obs  57426  #uniq  36688 #total  36688, compl  61.0%, redun   1.6
From   -20 to    10  #obs  57389  #uniq  39179 #total  39179, compl  65.1%, redun   1.5
From   -10 to    20  #obs  57394  #uniq  39815 #total  39815, compl  66.1%, redun   1.4
From     0 to    30  #obs  57446  #uniq  37445 #total  37445, compl  62.2%, redun   1.5
From    10 to    40  #obs  57523  #uniq  32905 #total  32905, compl  54.7%, redun   1.7
From    20 to    50  #obs  57480  #uniq  32171 #total  32171, compl  53.4%, redun   1.8
From    30 to    60  #obs  57463  #uniq  35415 #total  35415, compl  58.8%, redun   1.6
From    40 to    70  #obs  57409  #uniq  38843 #total  38843, compl  64.5%, redun   1.5
From    50 to    80  #obs  57388  #uniq  40636 #total  40636, compl  67.5%, redun   1.4
From    60 to    90  #obs  57408  #uniq  40974 #total  40974, compl  68.1%, redun   1.4
From    70 to   100  #obs  57444  #uniq  37887 #total  37887, compl  62.9%, redun   1.5
From    80 to   110  #obs  57481  #uniq  33700 #total  33700, compl  56.0%, redun   1.7
From    90 to   120  #obs  57462  #uniq  29285 #total  29285, compl  48.7%, redun   2.0
From   100 to   130  #obs  57316  #uniq  24514 #total  24514, compl  40.7%, redun   2.3
From   110 to   140  #obs  57196  #uniq  25410 #total  25410, compl  42.2%, redun   2.3
From   120 to   150  #obs  56861  #uniq  28812 #total  28812, compl  47.9%, redun   2.0
From   130 to   160  #obs  56261  #uniq  30868 #total  30868, compl  51.3%, redun   1.8
From   140 to   170  #obs  53345  #uniq  31082 #total  31082, compl  51.6%, redun   1.7
From   150 to   180  #obs  44764  #uniq  28322 #total  28322, compl  47.1%, redun   1.6

Enter how many DEGREES of data you want to collect: 70
Scenarios will evaluate wedges of   70.00 degrees
From  -180 to  -110  #obs 134044  #uniq  47117 #total  47117, compl  78.3%, redun   2.8
From  -170 to  -100  #obs 134020  #uniq  50473 #total  50473, compl  83.9%, redun   2.7
From  -160 to   -90  #obs 134013  #uniq  55258 #total  55258, compl  91.8%, redun   2.4
From  -150 to   -80  #obs 134054  #uniq  57430 #total  57430, compl  95.4%, redun   2.3
From  -140 to   -70  #obs 134010  #uniq  56790 #total  56790, compl  94.3%, redun   2.4
From  -130 to   -60  #obs 134064  #uniq  53641 #total  53641, compl  89.1%, redun   2.5
From  -120 to   -50  #obs 134016  #uniq  48718 #total  48718, compl  80.9%, redun   2.8
From  -110 to   -40  #obs 134032  #uniq  43570 #total  43570, compl  72.4%, redun   3.1
From  -100 to   -30  #obs 134058  #uniq  39544 #total  39544, compl  65.7%, redun   3.4
From   -90 to   -20  #obs 134057  #uniq  38450 #total  38450, compl  63.9%, redun   3.5
From   -80 to   -10  #obs 134028  #uniq  41277 #total  41277, compl  68.6%, redun   3.2
From   -70 to     0  #obs 133988  #uniq  45804 #total  45804, compl  76.1%, redun   2.9
From   -60 to    10  #obs 133936  #uniq  50807 #total  50807, compl  84.4%, redun   2.6
From   -50 to    20  #obs 133998  #uniq  54584 #total  54584, compl  90.7%, redun   2.5
From   -40 to    30  #obs 133999  #uniq  56225 #total  56225, compl  93.4%, redun   2.4
From   -30 to    40  #obs 134071  #uniq  55581 #total  55581, compl  92.3%, redun   2.4
From   -20 to    50  #obs 134033  #uniq  52930 #total  52930, compl  87.9%, redun   2.5
From   -10 to    60  #obs 134017  #uniq  48707 #total  48707, compl  80.9%, redun   2.8
From     0 to    70  #obs 134054  #uniq  47122 #total  47122, compl  78.3%, redun   2.8
From    10 to    80  #obs 134032  #uniq  50472 #total  50472, compl  83.9%, redun   2.7
From    20 to    90  #obs 134031  #uniq  55261 #total  55261, compl  91.8%, redun   2.4
From    30 to   100  #obs 134052  #uniq  57398 #total  57398, compl  95.4%, redun   2.3
From    40 to   110  #obs 133990  #uniq  56759 #total  56759, compl  94.3%, redun   2.4
From    50 to   120  #obs 134013  #uniq  53638 #total  53638, compl  89.1%, redun   2.5
From    60 to   130  #obs 133905  #uniq  48718 #total  48718, compl  80.9%, redun   2.7
From    70 to   140  #obs 133777  #uniq  43570 #total  43570, compl  72.4%, redun   3.1
From    80 to   150  #obs 133486  #uniq  39544 #total  39544, compl  65.7%, redun   3.4
From    90 to   160  #obs 132758  #uniq  38432 #total  38432, compl  63.8%, redun   3.5
From   100 to   170  #obs 129678  #uniq  39642 #total  39642, compl  65.9%, redun   3.3
From   110 to   180  #obs 120769  #uniq  38590 #total  38590, compl  64.1%, redun   3.1

Enter how many DEGREES of data you want to collect: 

Finished


Note that since you processed your frame with oscillation start 0.0 the angular values are with respect to this first frame.

Bugs, etc

This program can be a memory hog for large unit cells and/or high resolution data. It doesn't handle things well if oscillation start is non-zero. It doesn't handle exotic space groups like R3 or R32. Not all space groups have been tested so you should always check that the data collection results match those for the predictions. Enjoy.
Phil Jeffrey, June 2002