Self-assembly is a process by which small molecular components can spontaneously assemble into functional structures or molecular machines. Self-assembly systems in nature can range from relatively
small heterocomplexes, such as the ribosome, spliceasome, or proteasome, to large structures such as the actin or tubulin cytoskeletons of cells. Such assemblies are involved in numerous critical
cellular processes, including DNA replication and transcription, protein translation and degradation, and cell motility and shape control. Self-assembly is also central to many human diseases. Viruses,
for example, are themselves incredibly sophisticated self-assembly systems. Amyloid diseases, such as Alzheimer's, are also characterized by a self-assembly process in which normally harmless proteins
assemble into fibrous structures that are the signature trait of these diseases. Furthermore, self-assembly has recently emerged as a promising technology for fabrication at the nanometer scale.

All of the above suggests that there would be great value in being able to simulate self-assembly systems. Realistic simulations of self-assembly would give us a means of better understanding many of these
processes, the factors that control them, and how we might manipulate them. For example, computer models of virus or amyloid assembly could become a valuable testbed for hypothetical drug treatments,
potentially saving considerable time and expense in the laboratory and the clinic. Furthermore, given the ubiquity of self-assembly in cell biology, building realistic quantitative models of self-assembly
dynamics is going to be an essential precondition of building predictive models of overall cell behavior, itself one of the key promises of the emerging field of systems biology. Similar advantages can be
expected should self-assembly continue to show promise for nanometer scale fabrication, as reliable quantitative simulations would give us a way to prototype and optimize systems in the computer before going
through the slow and costly process of fabrication.

Yet simulation of complicated self-assembly systems remains a daunting challenge, particularly at the scales seen in typical cellular systems. Traditional methods for chemical simulation cannot deal well with
the small scales or large numbers of reaction intermediates possible in typical self-assembly systems. Discrete-event computational methods, which keep track of absolute counts of particles and treat assembly
as a stochastic process, show greater promise but are still not capable of handling systems of very large numbers of distinct intermediates.

The original goal of this project was to fill in some of the gaps in conventional self-assembly simulation methods by developing new data structures and algorithms for fast, memory-efficient simulation of even the most
complicated assemblies. We accomplished this by developing computational queue data structures to allow us to reduce work per simulation step while keeping memory overhead low. We developed a highly
general model of self-assembly based on the local rules principles of Berger et al. (1994) and extensions to handle binding kinetics developed in Schwartz et al. (1998). We have further implemented this model
using our novel queuing methods in a prototype simulation tool. This tool is meant to illustrate our method and allow preliminary validation. We hope it can illustrate our methods and facilitate their use on model systems beyond those being studied by our group. We intend to eventually adapt this into a highly efficient, robust, and easily useable
tool for anyone interested in self-assembly.

Our work on this problem is currently largely focused on the problem of fitting models to specific experimental systems, especially virus capsid assembly systems. By finding rate parameters that allow a close
match between observed and simulated experimental data, we can learn physical properties of these systems for which there are currently no direct experimental assays. Using these parameters, we can in turn use
our simulations to infer properties of the assembly processes of these viruses that we cannot directly observe. The resulting simulations can also serve as a platform for conducting in silico experiments on
these systems and projecting how their behavior might vary in response to different sorts of perturbations.