Team:TEC COSTA RICA/Software

Software

We developed a software tool for the design and assessment of genetic circuits from a sequential logic standpoint. We looked to expand our objectives, empower others in the iGEM and scientific community, and advance the field of synthetic biology.

Inspiration

The idea for our software was born from our {genetic suicide circuit}, as we realized a computational method would help us turn the design process into a more efficient one and expand our overall possibilities. By automatizing the process of the circuit generation, we would optimize the time required, eliminate the designer's bias and achieve a number and diversity of circuits not possible by non-computational methods. By extension, this would help us compare and validate our design, encompass more functions, besides a counter, and enable others in diverse areas to expand their toolbox.

Description

Our software consists of a python library that generates circuits and processes each state change, with an integrated database of the generated state machines, and a user interface for visualization and further analysis. The generation of circuits includes base parameters to guide it towards the desired application or purpose. For the processing of state changes, each of the expressed parts performs their functions which generates a different child circuit, in order to consider all possible scenarios. The database works by storing a circuit's ID and its parts' information. The data can then be extracted, or visualized and filtered in a user interface through a graph where each node represents a circuit's state, and multiple filters for analysis. For an in detail explanation of the complete software you can go to {Software Description}.

Objective

The objective of the software is the design of genetic circuits for complex functions that follow sequential logic, and the exploration of architecture alternatives for specific functionalities.

1. User friendly

Since our goal for the software framework is its implementation in multiple areas, we decided it was necessary for it to be easy to interact with. We first help the user understand through the grounding concepts set in the conceptual framework, and the overall software structure, explained in the software framework. Both tools set the base for the software and complement it. Moreover, in this wiki and in the user manual the user can find a thorough guide for the use and modification of the software. The software uses python language, a high-level programing language, in order to be easily run and modified by users with little knowledge in programming; meanwhile, the user interface allows the visualization of the data without having to interact with the rest of the code.

2. Open source

We made the code available in github for its application and modification. Even though the software is a tool ready for use, we encourage our users to build upon it by adding new parts, filters and other modifications. This is facilitated by the documentation and {software description} where we explain in detail how to modify the code. We aim to offer the users a modular tool that can be implemented and personalized in ways that transcend our initial approach.

3. In-depth approach

The software consists of an approach for in-depth understanding as it is built upon a conceptual framework and a software framework. This integration allows the user to first understand sequential logic, its application in biology, our proposal, and its characteristics and advantages.

4. Complex pattern identification

Through the software, circuits that present specific expression patterns can be found. These can be expression or induction patterns, both of which are tightly related to biological sequential systems. Moreover, our chosen wide design facilitated the discovery of complex patterns, especially because of the exploration of all possible scenarios generated by the expressed parts.

The generation consists of the creation of a base circuit using lists, which define the groups of parts and number of each one (whether twins or only the same kind). Next, the base circuit goes through permutations of parts’ direction and position to generate a new circuit. The program executes the rest of the script (validation and action) and then performs the next permutation for the new circuit; this can be repeated as many times as desired.

Once the circuit is defined, it is then traversed in both directions. When a promoter is encountered, the algorithm lists each of the following coding parts that have the same directionality as the promoter. When it finds a terminator or any other part that stops transcription, it stops and starts again until a new promoter is found. The list of expressed parts also contains the promoter(s) that enabled the transcription.

Each part of the expressed list goes through the actuator. It confirms the presence of the required parts or their expression, depending on what is necessary, and executes the function. The output circuit is given a new ID. An output state is generated per each part's execution.

The generated circuits are saved through a designated ID and all of the parts. For each part, it saves the sequence index (position in the list starting from 0), orientation (forward or reverse strand), type (promoter, terminator, gene, site, recombinase, RDF, or other), capacity to codify, and activated promoter (only for the coding parts).

To the database, we coupled a user interface for the visualization and filtering of circuits. For the set up and execution go to the user manual.
In the user interface, all of the circuits are shown as nodes or vertices of a graph. Each node can be selected to show different information related to it. The menu on the right shows the data on the selected circuit, its structure is shown at the bottom of the page, and the menu on left shows the implemented filters.

The menu on the right shows the circuit´s ID, which can then be matched to the rest of the database, the list of parts, each with the corresponding index (position in the sequence starting from 0), orientation (forward or reverse strand), type (promoter, terminator, gene, etc), and whether it is a coding part or not. For the parts that get expressed, the promoter(s) that enables the transcription is linked.

The filter panel includes a text field button to change the names of the parts of the specific selected circuit. The user types the default name of the part they want to change and the new name they want to give it.
Another text field button allows the user to filter the circuits based on the inclusion of defined parts, the number of times they are present, the position in the circuit, and a drop-down for whether each is expressed or not. However, every parameter is optional

We analyzed the number of generated circuits, the capacity to generate multiple states (whether cyclic or not), the occurrence of alternative states, and the connections or repetition between states of different circuits.