repp
is a tool for DNA assembly. It takes a target plasmid and finds the least expensive combination of fragments from user and public repositories to create it via Gibson Assembly.
Biologists profit when they can re-use DNA during plasmid design: it enables cheaper designs and faster builds. But parsing through all re-usable DNA is completely infeasible. For example, there are over 75,000 plasmids in Addgene – the likelihood of knowing the best combination and ordering of sub-sequences from Addgene for a given plasmid design is low.
repp
does such plasmid design. It turns specifications into assembly plans that use the least expensive combination of existing (PCR) and newly synthesized DNA fragments. Target plasmids are specifiable using their target sequence, features, or sub-fragments.
Publication
We published a paper about repp
in PLOS One: Timmons, J.J. & Densmore D. Repository-based plasmid design. PLOS One. We used it to build thousands of plasmids from iGEM and Addgene and showed that it reduced the cost of plasmid design as compared to synthesis.
Examples
See /examples to see input/output from repp
.
Documentation
See the docs or --help
for any command.
Installation
From Docker
Run repp
via Docker:
mkdir -p $HOME/.repp
alias repp="docker run -i --rm --mount type=bind,src=$HOME/.repp,dst=/root/.repp jjtimmons/repp:latest"
repp --help
From Source
Note: repp
depends on:
Go >= 1.18.0
for compilation- BLAST+ for sequence alignment
- Primer3 for hairpin detection and off-target primer-binding detection
git clone https://github.com/Lattice-Automation/repp.git
cd repp
make install
Sequence Databases
repp
uses sequence databases for plasmid assembly. These are added as FASTA files along with the name and cost per plasmid from that source.
Some existing FASTA files are maintained in our S3 bucket repp
. Below is a snippet for downloading and installing each via the AWS CLI:
for db in igem addgene dnasu; do
curl -o "$db.fa.gz" "https://repp.s3.amazonaws.com/$db.fa.gz"
gzip -d "$db.fa.gz"
done
# add sequence DBs with the cost of ordering a plasmid from each source
repp add database --name igem --cost 0.0 < igem.fa
repp add database --name addgene --cost 65.0 < addgene.fa
repp add database --name dnasu --cost 55.0 < dnasu.fa
Plasmid Design
Sequence
To design a plasmid based on its target sequence save it to a FASTA file. For example:
>2ndVal_mScarlet-I
CAACCTTACCAGAGGGCGCCCCAGCTGGCAATTCCGACGTCTAAGAAACCATTATTATCA...
Then call repp make sequence
to design it. The following example uses Addgene and a local BLAST database parts_library.fa
as fragment sources:
repp make sequence --in "./2ndVal_mScarlet-I.fa" --dbs "addgene,parts_library.fa"
Features
To design a plasmid based on the features it should contain, specify the features by name. By default, these should refer to features that are in repp
’s feature database (~/.repp/features.tsv
). Features can also refer to fragments, as in the following example where a plasmid is specified by its constituent list of iGEM parts:
repp make features "BBa_R0062,BBa_B0034,BBa_C0040,BBa_B0010,BBa_B0012" --backbone pSB1C3 --enzymes "EcoRI,PstI" --dbs igem
Fragments
To design a plasmid from its constituent fragments, save them to a multi-FASTA.
>GFP
ATGAGTAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGG...
>backbone
TACTAGTAGCGGCCGCTGCAGTCCGGCAAAAAAGGGCAAGGTGTCACCACCCTGCCCTT...
And call the file from repp make fragments
:
repp make fragments --in "./fragments.fa" --out "plasmid.json"
Configuration
The default settings file used by repp
is in ~/.repp/config.yaml
. The maximum number of fragments in an assembly, the minimum overlap between adjacent fragments, and cost curves for synthesis are all defined there. Editing this file directly will change the default values used during plasmid designs. For more details, see configuration.
To overwrite some repp
settings on a per-design basis, create another YAML file:
# custom_settings.yaml
fragments-min-junction-length: 25
synthetic-fragment-cost:
1800: # max length in bp
fixed: false
cost: 0.07 # per bp cost
And reference it during plasmid design:
repp make sequence --in "./2ndVal_mScarlet-I.fa" --dbs addgene --settings "./custom_settings.yaml"
Backbones and Enzymes
The plasmid sequence in the input file is designed as a circular plasmid by default. In other words, repp
assumes that the sequence includes an insert sequence as well as a backbone. To use the sequence in the input file as an insert sequence but another fragment as a backbone, use the --backbone
and --enzymes
command in combination. This will lookup --backbone
in the fragment databases and digest it with the enzyme selected through the --enzymes
flag. The linearized backbone will be concatenated to the insert sequence. For example, to insert a GFP_CDS
sequence into iGEM’s pSB1A3
backbone after linearizing it with PstI
and EcoRI
:
repp make sequence --in "./GFP_CDS.fa" --dbs addgene,igem --backbone pSB1A3 --enzymes "PstI,EcoRI"
The largest linearized fragment post-digestion with all enzymes is used as the backbone in the Gibson Assembly.
Output
repp
saves plasmid designs to JSON files at the path specified through the --out
flag. Below is an abbreviated example of plasmid design output:
{
"target": "2ndVal_mScarlet-I",
"seq": "CAACCTTACCAGAGGGCGCCCCAG...",
"time": "2019/06/24 11:51:39",
"solutions": [
{
"count": 2,
"cost": 236.65,
"fragments": [
{
"type": "pcr",
"cost": 94.67,
"url": "https://www.addgene.org/103998/",
"seq": "ACAAATAAATGTCCAGACCTGCAG...",
"pcrSeq": "ACAAATAAATGTCCAGACCTGCAG...",
"primers": [
{
"seq": "ACAAATAAATGTCCAGACCTGCA",
"strand": true,
"penalty": 4.406456,
"pairPenalty": 18.046225,
"tm": 58.594,
"gc": 39.13
},
{
"seq": "CATATGTATATCTCCTTCTTAAATCT",
"strand": false,
"penalty": 13.639769,
"pairPenalty": 18.046225,
"tm": 52.36,
"gc": 26.923
}
]
},
{
"id": "103998-103998-synthesis-1",
"type": "synthetic",
"cost": 129,
"seq": "AGGAGATATACATATGGTGAGTAA..."
}
]
}
]
}