Description of cell model (2)
Description of cell model (2)
Ken Webb, 1999
For the past year or so I have been working on a simulation of a biological cell and of various larger biological systems that contain cells.
I'm a senior software developer with ObjecTime Limited in Kanata, Ontario, Canada. ObjecTime has partnered with an American company, Rational Software, to produce a real-time Unified Modeling Language (UML) development and code-generation product called Rational Rose RealTime (RRT). RRT, and its predecessor ObjecTime Developer, is used by software developers at many of the world's largest telecommunication companies, to visually model and develop products such as cell phones, photocopiers and large digital telephone/internet switches. My main role at ObjecTime is developing sample models.
I started using RRT to do a biological system, out of a personal need to take on a more challenging project than small sample models. Also, before starting with ObjecTime, I worked for three years at Nortel Networks, including a year with the architecture team of a large digital switch (300 software and hardware developers), and I wanted to learn more about architecture by comparing what I know of complex digital systems with the even more complex biological systems.
It's natural for someone with a digital switch and data communications background to model architecture and behavior before tackling the graphics. Most developers on that large project at Nortel never see any graphic output; graphics is done as part of a separate network management system implemented on another computer. So I've spent most of my development effort on the biology simulation trying to get a good architecture in place, and am only now figuring out how to get 3D (VRML for now) visualization of what's happening inside the simulation.
My architectural goal has been to model everything in terms of a few basic types of active objects that act on data, and to have the higher-level behavior emerge out of this. Active objects include things like enzymes and other proteins, biological membranes, and the sun. Proteins and membranes continuously act on 100 or so small molecules such as glucose. The model also includes a large number of structural containers such as cell, various organelles, nervous system, circulatory system, digestive system, human being, simple ecology, etc.
I have visually structured everything into an executable model that includes some 400 classes from the cell and biology domain. Depending on how its configured, it includes up to 100,000 or more objects at run-time. Most of my work has involved reading a university textbook on Cell Biology, spending endless hours thinking about what each paragraph or section means in terms that I'm familiar with, capturing my understanding of things directly in the model as entities with biological names, adding state machines to active objects, adding C++ code to the state transitions, and visually plugging all the pieces together.
My simulation is primarily based on message-passing between active objects, called capsules in RRT. Capsules send messages through their ports. If a port isn’t connected to anything, the only bad effect is that the message doesn't get delivered. Most of my ports understand the same set of messages, so it's easy to connect up things that at first glance may not look like they will need to communicate. I also use more traditional C++ constructs where these are most appropriate. This gives me the best combination of flexibility, robustness and high performance.
If my entire RRT/C++ model is compiled (any part of it can be separately compiled and run), it includes the following components all of which interact continuously as the model executes:
- A simple ecology with one plant and a human being.
- A sun to provide solar energy to the plant, and to make the plant visible to the human being.
- A nervous system that in the simulation allows the human to see the plant, and to pass this information to the muscles in the mouth. It includes some 300 neurons with connecting synapses. Axons and dendrites communicate across synapses using the same chemical messaging as the rest of the system.
- A digestive system that allows the human to digest what the mouth provides and pass the digested small molecules to the blood.
- A circulatory system with a heart that continuously pumps some 200 red blood cells through a network of veins, arteries and capillaries. It exchanges sugars, oxygen and carbon dioxide with mucosal cells, neurons, and the lung.
- A respiratory system that exchanges oxygen and carbon dioxide between the external atmosphere and internal capillaries.
- Constant interaction between enzymes/proteins and the small molecules they act on, using standard Michaelis-Menten and other kinetic equations. This includes the Glycolytic Pathway, the TCA cycle, and the movement of small molecules across membranes such as between the cytosol and the compartments of mitochondria. In the complete simulation, small sugar molecules originate in the lettuce plant, are eaten and passed to the blood and eventually find their way into the nerve cells.
- An external gene database specifies the attributes of genes in each cell's chromosomes. Enzymes within each cell are configured by messenger RNA and ribosomes, using the attributes contained in the genes. Thus the behavior (such as which small molecules they act on) of enzymes in the simulation can be changed, or new enzymes can be added, by editing the gene database.
Ultimately I want the simulation to be as autopoietic (self-making) as possible. Autopoiesis is described in Fritjof Capra's book The Web of Life, and he gets the concept from Maturana and Varela. The idea is to have everything in the model not only interacting with everything else, but to actually have everything participating in making everything else. To quote from Capra (page 98), autopoiesis "is a network of production processes, in which the function of each component is to participate in the production or transformation of other components in the network". Also, I want my 3D graphics to display what continuously emerges out of all this self-making.