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 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.