CPL: Cell Programming Language (Release 1.2 8/25/93)
----------------------------------------------------

This is an implementation of a language in which programs describing
the interactions of biological cells can be written. Simulations may
be run and the results displayed.

A technical report (in postscript) describing the language can be
ftp'ed from cs.nyu.edu (128.122.140.24) file: 
/pub/local/agarwal/tr630.ps.Z.
An alpha release of the software is available in a compressed tar file
by ftp from cs.nyu.edu file: /pub/local/agarwal/cpl.tar.Z.

Direct all questions/bug-reports to agarwal@cs.nyu.edu. I may also be
able to provide some support if you are interested in developing
simulations. 

To install CPL:
1) mkdir cpl; cd cpl; move cpl.tar.Z to this directory
2) uncompress cpl.tar.Z
3) tar -xvf cpl.tar

 It is advised that you create all your cpl program files in this
directory and run the simulations from the same.

Software needed to compile and install cpl:
	cpp, cc, gcc (g++), flex, bison, make.
Software needed to visualize results obtained from cpl:
	X11, xv (xview)

CPL has been tested on SUN 4 systems (unix). 

Running CPL programs:
--------------------

Once you have untarred the CPL files, run "make cpl" and that should
prepare a CPL simulation for cellular sorting. To run the simulation
type "nice cpl -t 20 > sorting ", and this runs the simulation for 20
time steps, and stores the results in a file called "sorting". You can
visualize the results using "cplvisual -f sorting -lower 0 -upper 4
-hexagonal". Man pages for cpl, cplvisual, and cplmovie are also
included with the software.

Rerunning make compiles the last modified ".cpl" file. You can edit
the Makefile to change the #defines to suit your needs. Then just
issue a "make" command in the directory.

#defines
--------
1. RANDOM_ORDERING. If defined the cells execute at in a random order
at each time step. The default is random ordering. If you want
all the cells to execute in the same order at each time step you
should place -URANDOM_ORDERING in C++FLAGS.

2. UNIT_CELLS. If all the cells have unit area, then defining
UNIT_CELLS results a large improvement in speed and memory.
There are also fewer bugs in this variant.

3. STABLE_NEIGHBORS. If the neighbor hood of a cell does not change
very often then this variable should be set. By default this is not
set and this causes the recomputation of the neighborhhod of each cell
at each time instant. When STABLE_NEIGHBORS is defined the
neighborhood is recomputed only when a cell's neighborhhod may have
possible changed. This is only used in the UNIT_CELL case. If cells do
not have unit area, then enough changes are expected to make it
worthwhile to recompute neighbor information at each time step. 

4. EIGHT_NEIGHBORHOOD. The default lattice used is the hexagonal
lattice. If unit area cells are used then the eight-neighborhood
lattice may be used instead. This is done by defining the variable
EIGHT_NEIGHBORHOOD in the Makefile. The EIGHT_NEIGHBORHOOD lattice may
not be used in conjunction with non unit area cells.

