OA_EXECUTABLES is a collection of executable C programs which create, manipulate, and test orthogonal arrays (OA's).
These main programs all require routines from the OA library, where information may also be found explaining orthogonal arrays.
Some sample orthogonal arrays are available in the OA dataset collection.
Art Owen,
Department of Statistics,
Sequoia Hall,
Stanford CA 94305.
The bose program produces OA( q^2, k, q, 2 ), for k <= q+1, where q is a power of a prime. The program needs to know q and k, in that order. The values can be placed on the command line or in standard input (that is, typed in interactively). If only one number appears on the command line, it is taken to be q, and k is taken to be q+1, the maximum possible k.
Usage:
Files you may copy include:
The bush program produces OA( q^3, k, q, 3 ), for k <= q+1, q is a power of a prime. The program needs to know q and k, in that order. The values can be placed on the command line or in standard input (that is, typed in interactively). If only one number appears on the command line, it is taken to be q, and k is taken to be q+1, the maximum possible k.
Usage:
The busht program is a version of the bush program that produces orthogonal arrays of any strength t. In particular, it produces OA( q^t, k, q, t ), for k <= q+1, q is a power of a prime. The program needs to know t, q and k, in that order. The values can be placed on the command line or in standard input (that is, typed in interactively). If only two numbers appear on the command line, they are taken to be t and q, and k is taken to be q+1.
Usage:
Files you may copy include:
The bosebush program produces orthogonal arrays of strength 2. In particular, it produces OA( 2*q^2, k, q, 2 ), for k <= 2*q+1, and q is a power of 2. The program needs to know q and k, in that order. The values can be placed on the command line or in standard input (that is, typed in interactively). If only one number appears on the command line, it is taken to be q, and k is taken to be 2*q. 2q columns can be constructed without a coincidence defect. Setting k=2q+1 leads to an array with the coincidence defect, and some triples of columns contain duplicate rows. (The lack of a coincidence defect has been verified for q = 2, 4, 8, 16, 32 and k = 2q.)
Usage:
Files you may copy include:
The bosebushl program produces OA( lambda*q^2, k, q, 2 ), with k <= lambda*q+1, for prime powers q and lambda > 1. Both q and lambda must be powers of the same prime. The program needs to know lambda, q and k, in that order. They can be placed on the command line or in standard input. If two numbers appear on the command line they are taken to be lambda and q respectively, and k is set to lambda*q.
Usage:
Coincidences are harder to understand with these designs. For example "bosebushl 3 9" does lead to a number of triple coincidences, that is pairs of rows in which 3 columns agree, but no quadruple coincidences. "bosebush 3 9 28" produces an extra column that figures in some quadruple coincidences.
The arrays produced by this program are not always the largest possible. The article by Bose and Bush describes ways of adjoining some extra columns.
When k <= lambda*q, the program produces an array that is "completely resolvable". What this means is that the rows of the array may be split into lambda*q consecutive nonoverlapping sets of rows each of which is OA( q,k,q,1 ).
Files you may copy include:
The addelkemp program produces OA( 2q^2, k, q, 2 ), k <= 2q+1, for odd prime powers q. Even prime powers may be produced using bosebush. The program needs to know q and k, in that order. They can be placed on the command line or in standard input. If one number appears on the command line it is taken to be q, and k is set to 2q. 2q columns can be constructed without a coincidence defect. Setting k=2q+1 leads to an array with the coincidence defect. Some triples of columns contain duplicate rows. (The lack of a coincidence defect has been verified for q = 2, 3, 4, 5, 7, 9, 11, 13, 17, 19, 23, 25 and k=2q.)
Usage:
This construction should work for all prime powers q, but it failed to do so for even powers greater than 4. This may have been a programming error, or it may have stemmed from misunderstanding of the description of the algorithm. The program rejects requests with q=2^r for r>2. The Bose Bush construction handles these cases.
The description of the construction for odd prime powers calls for some arithmetic involving the number 4. In Galois fields with 3^r elements, there is no 4. Replacing 4 by 1 for these fields works when q = 3, 9, 27 (brute force verification).
Files you may copy include:
The addelkemp3 program produces OA( 2*q^3, k, q, 2 ), k <= 2q^2+2q+1, for prime powers q. q may be an odd prime power, or q may be 2 or 4. This construction is based on the paper by Addelman and Kempthorne, with n = 3. The program needs to know q and k, in that order. They can be placed on the command line or in standard input. If one number appears on the command line it is taken to be q and k is set to 2*q^2+2*q+1
Usage:
Coincidences are much harder to understand with these designs. For example "addelkemp3 3 9" does lead to a number of triple coincidences, that is pairs of rows in which 3 columns agree, but no quadruple coincidences. "addelkemp 3 9 28" produces an extra column that figures in some quadruple coincidences.
As for addelkemp above, 4 is replaced by 1 in fields that do not have an element 4. Also powers of 2 larger than 4 are not allowed, as described above for addelkemp.
Files you may copy include:
The oarand program reads an orthogonal array from standard input, permutes the symbols in each column and prints the array to standard output. The permutations are uniformly distributed (all q! permutations have the same probability) and all columns are permuted independently.
Input is described above under OA input conventions, with exceptions noted below to allow passing a random seed. If oarand is called twice with the same input array, the same permuted output will result both times, unless different seeds are given.
If the command line consists of 4 or more integers the last four integers are taken to be a random seed. The random number generator is a version of the Marsaglia-Zaman random number generator, transliterated into C from FORTRAN. The seed must be four integers between 1 and 168 inclusive, with not all values equal to 1.
If one prefers some other random number generator one can replace runif() in runif.c. In that case it is also likely to be necessary to change how the seed is read in oarand.c.
Usage:
The first and second runs use the default seeds. The third run uses 9 81 10 22 as seeds, figuring out the dimension of the array by reading it. If the integers 9 81 10 were meant to be dimensions they aren't being used that way. The fourth run one passes the seed information 11 22 33 44 to the random number generator.
Note that
bose 9 | oarand | oarand
doesn't get an array independent of the one produced
by one pass through oarand. What it produces is
an array with a particular random permutation applied
twice. Any symbols that are unchanged by the permutation
in oarand will be unchanged by applying it twice.
Files you may copy include:
The oadimen program attempts to count the number of rows columns and symbols in an orthogonal array.
The required form of the file or stream containing the orthogonal array is described above OA input conventions.
Usage:
The array has 32 rows, 8 columns and appears
to have 4 symbols, since the largest symbol is 3.
Files you may copy include:
You can go up one level to the C source codes.