TinkerCell: modular CAD tool for synthetic biology

Background Synthetic biology brings together concepts and techniques from engineering and biology. In this field, computer-aided design (CAD) is necessary in order to bridge the gap between computational modeling and biological data. Using a CAD application, it would be possible to construct models using available biological "parts" and directly generate the DNA sequence that represents the model, thus increasing the efficiency of design and construction of synthetic networks. Results An application named TinkerCell has been developed in order to serve as a CAD tool for synthetic biology. TinkerCell is a visual modeling tool that supports a hierarchy of biological parts. Each part in this hierarchy consists of a set of attributes that define the part, such as sequence or rate constants. Models that are constructed using these parts can be analyzed using various third-party C and Python programs that are hosted by TinkerCell via an extensive C and Python application programming interface (API). TinkerCell supports the notion of a module, which are networks with interfaces. Such modules can be connected to each other, forming larger modular networks. TinkerCell is a free and open-source project under the Berkeley Software Distribution license. Downloads, documentation, and tutorials are available at . Conclusion An ideal CAD application for engineering biological systems would provide features such as: building and simulating networks, analyzing robustness of networks, and searching databases for components that meet the design criteria. At the current state of synthetic biology, there are no established methods for measuring robustness or identifying components that fit a design. The same is true for databases of biological parts. TinkerCell's flexible modeling framework allows it to cope with changes in the field. Such changes may involve the way parts are characterized or the way synthetic networks are modeled and analyzed computationally. TinkerCell can readily accept third-party algorithms, allowing it to serve as a platform for testing different methods relevant to synthetic biology.

• Undo and redo capabilities along with a history window • Memory management for parts and connections • Loading C libraries as separate threads (i.e. parallel processing) • Indexing variables in a model, allowing easy look-up • Parsing math formulas using muparser library (muparser.sourceforge.net) • Console window that plug-ins can use for console-based interaction The plug-ins provide the following features: Parts Tree Provides a window displaying all the parts listed in an XML file.
Connections Tree Provides a window displaying all the connections listed in an XML file. Each connection is restricted to certain types of parts. For example, a "transcription regulation" can only be made between a "transcription factor" and a "regulator" part.
Part Insertion Tool Monitors the Parts Tree and allows user to insert parts from the tree.
Connection Insertion Tool Monitors the Connections Tree and allows user to make permitted connections.
Selection Tool Highlights selected items and handles a few other user interface details.
Name and Family Tool Displays the family information of items and allows users to change the family of items.
Collision Detector Detects collision events and reports to other plug-ins. This information is used by several other plug-ins to respond when user places one item adjacent to another.
Container Tool Allows user to drag items into a container or module. Also displays the parameter window.
Plot Tool Provides a graphing window that can handle multiple graphs. C and Python programs can output to the graph window directly.
3D Plots Provides function for plotting 3D surface plots inside the Plot Tool's graph window.
Module Tool Allows construction of modules with interfaces that can be connected.
Gene Regulatory Network Tool Provides various automated features that allows easier construction of genetic networks. For example, when a user places a promoter upstream of a gene, the gene's transcription rates are automatically updated. Similarly, when a user connects a transcription factor to a regulator, the kinetics are automatically generated.

Sample Python scripts
Linear algebra operations on the Stoichiometry matrix The following script gets the list of reactions that are selected by the user and generates a stoichiometry matrix for just the selected reactions. It then uses SciPy to perform QR and LU factorization on the stoichiometry matrix. Most of the output is not shown for reading clarity. Get all the part sequences in the model as a multi-FASTA file The following script will find all the components in the model that belong to the family called "DNA", which is the root family for promoters, RBS, genes, and other parts that belong on the DNA. Then the script will get the sequence for each part and print the sequence to the screen in FASTA format.

Getting annotation and sequence information about a module and its subcomponents
The following script will find a module with a particular name and obtain all of its sub-parts. Then it will loop through the sub-part and print annotation information and sequence for each sub-part. Names of people in the output have been replaced with "no name", and some of the longer sequences have been truncated. >>part = find("BBa_I0462") >>print annotation(part) ('no name ', '12/04/2003', 'luxR Protein Generator', 'uri', 'reference') >>print getTextAttribute(part,"format") BBa >>print getTextAttribute(part,"type") composite >>subparts = getChildren(part) >>for i in subparts: print getName(i) + " is a " + getFamily(i); BBa_I0462_B0012 is a Terminator BBa_I0462_B0010 is a Terminator BBa_I0462_C0062 is a Coding BBa_I0462_B0034 is a RBS >>for i in subparts: print getName(i) + " : "; print annotation(i); BBa_I0462_B0012 : ('no name', 'NA', 'Transcription terminator for the E.coli RNA polymerase.', 'uri', 'reference')