**For Geometric Morphometrics**

*collect.landmarks()*

A function to open jpeg files and collect landmarks. Requires the *ReadImage*s library.

*collect.landmarksScale()*

A function to open jpeg files and collect landmarks where each image has a scale bar. The first two points define the ends of the scale bar. Requires the *ReadImages* library.

*collect.outlines()*

A function to open jpeg files and collect landmarks where the landmarks are afterwards resampled down to *n *equally spaced outline points. Requires the *ReadImages* library.

*fix.landmarks()*

Allows errors to be corrected in data generated by *collect.landmarks()*.

*fix.outlines()*

Allows errors to be corrected in data generated by *collect.outlines()*.

*efourier()*

Function from Julien Claude's text for generating eliptical fourier coefficients from 2D points.

*GPA.by.hand()*

Code to perform steps in generalized Procrustes analysis to see what they do.

*grf2()*

performs a generalized resistant fit theta rho analysis

*group.dists()*

Returns the Procrustes distances between group means given landmark coordinates of several samples. Requires *shapes() *library.

*read.tps()*

Reads a simple TPS file. Note that this function only reads data that are classed as landmarks or outlines. Landmarks are returned inthe format used by Ian Dryden's *shapes()* package.

*read.tps()*

If the above function doesn't work for your TPS file, try this one. This should work with 3D landmarks. Landmarks are returned inthe format used by Ian Dryden's *shapes()* package.

*write.landmarks()*

Function that takes a three-dimensional array of landmarks that are in the format for the *shapes()* package and writes them as a comma-delimited text file.

write.tps()

Writes a text file of landmark coordinates in TPS format. Data to be written should be in the format used by Ian Dryden'' *shapes* package.

**Monte Carlo Methods for Evolutionary Lineages**

*degrade()*

Subsamples from a monte carlo lineage produced by the random walk function.

*long.randomwalk()*

Performs a randomwalk of *n* generations, reporting the values of traits at the end of the random walk.

*long.randomwalk.efficient()*

Performs a randomwalk of specified number of generations, reporting the values of traits at the end of the random walk. Draws from a single normal distribution so it is very quick.

*randomwalk()*

Generates a brownian-motion random walk and saves each step for plotting.

**Rates of Evolution**

*lri()*

Performs Gingerich's Log-rate/Log-interval analysis of evolutionary rates. Note that this function does not use robust regression as recommended by Gingerich and so may produced biased estimates of the per-generation rate of evolution. Data are dentered as a two-column matrix, the first column with morphological measurements, the second with the age of the stratum.

*lriInt()*

Performs Gingerich's Log-rate/Log-interval analysis of evolutionary rates. Note that this function does not use robust regression as recommended by Gingerich and so may produced biased estimates of the per-generation rate of evolution. Data are entered into the function as a pairwise distance matrix and an interval matrix.

**Morphological Disparity**

*disparity.univariate()*

Calculates morphological disparity from univariate data.

*group.disparity()*

Calculates morphological disparity among gorup means for several groups with multivariate data.

*individual.disparity()*

Returns the disparity among individuals of a sample.

**Monte Carlo Methods for Diversity and Clade Dynamics**

*Cohort.Plot()*

Performs a cohort analysis of survivorship on clade data that are in the format created by *LetThereBeLight*().

*Diversity.Plot()*

Produces a spindle diagram for a clade whose data are in the formated created by *LetThereBeLight()*.

*LetThereBeLight()*

Simulates the evolution of diversity in one or more clades.

*Lineage.Plot()*

Produces a plot that shows the stratigraphic ranges of all lineages evolved in *LetThereBeLight()* simulation.