Skip to content

Latest commit

 

History

History
62 lines (35 loc) · 2.06 KB

README.md

File metadata and controls

62 lines (35 loc) · 2.06 KB

DNAstore

Software for error-tolerant coding of information into DNA sequences using finite-state transducers.

For license, please see LICENSE.txt

To build:

make dnastore
make test

I have built using Apple LLVM version 7.3.0 (clang-703.0.31). You will also need Boost: http://www.boost.org/

Description of method is in doc/ directory:

cd doc
make
open trans.ps

The tests include a few examples.

To generate a code transducer with 4 nucleotides of context (this will avoid all homopolymer and dinucleotide repeats):

bin/dnastore -l 4

To encode the string "Hello World!" in DNA using this transducer:

bin/dnastore -l 4 -E "Hello World!" > HelloWorld.fasta

To decode this DNA:

bin/dnastore -l 4 -d HelloWorld.fasta

To construct a composite machine using the MIXRADAR6 block code for mixed-radix conversion:

bin/dnastore -l 4 --compose-machine data/flusher.json  --compose-machine data/mixradar6.json --save-machine mixradar6-dnastore4.json

(The flusher.json file describes an outer transducer that automatically flushes MIXRADAR6 whenever the end of the file is reached.)

To encode and decode using this transducer:

bin/dnastore --load-machine mixradar6-dnastore4.json -E "Hello World!" >HelloWorld46.fasta
bin/dnastore --load-machine mixradar6-dnastore4.json -d HelloWorld46.fasta

To use Viterbi decoding instead of exact decoding:

bin/dnastore --load-machine mixradar6-dnastore4.json -V HelloWorld46.fasta --error-global

To create a 64-bit watermark synchronization code with 1 watermark bit per signal bit:

bin/dnastore -l 4 --compose-machine data/water64.1.json --save-machine watmark64-dnastore4.json

Strings encoded using this code must be a multiple of 64 bits in length:

bin/dnastore --load-machine watmark64-dnastore4.json -E "Hello World! (192 bits.)" >hw64.fa
bin/dnastore --load-machine watmark64-dnastore4.json -d hw64.fa

For a list of more options:

bin/dnastore -h

You can also look at the script doc/errdecode.pl for examples of usage (this script does a lot of benchmarking).