This project contains implementation of the CRN++ language. CRN++ is a language for programming deterministic (mass-action) chemical kinetics to perform computation. This project contains a compiler, translating CRN++ programs into chemical reactions, as well as simulation framework for simulation of the Chemical Reaction Networks. We rely on the Mathematica package developed by David Soloveichik for the simulation of Chemical Reaction Networks.
If you want to gain a more in-depth understanding of how our technique works, please take a look at our publication. Also, If you would like to reference CRN++ in an academic publication, please cite our journal publication by including the following bibtex entry:
@article{vasic2020crn++,
title={CRN++: Molecular programming language},
author={Vasi{\'c}, Marko and Soloveichik, David and Khurshid, Sarfraz},
journal={Natural Computing},
volume={19},
number={2},
pages={391--407},
year={2020},
publisher={Springer}
}
Mathematica version 11.2 or higher. Earlier versions of Mathematica might be supported, but project was not tested under earlier versions.
Examples of the CRN++ programs are under the examples directory. Each example is divided into two files, mathematica ('.m') file containing the core part of the code (actual program), and notebook ('.nb') file containing the 'glue' code for simulating and plotting the results. User can simply open the notebook file, see simulation results of the program, and update the simulation parameters if desired. The CRN++ compiler and simulation framework are stored in the packages directory.
If you would like to develop and test new CRN++ programs, please follow the structure of examples under the examples directory.
Yaroslav Sergienko contributed to CRN++ by writing a 3D Engine using a ray marching technique! It is located in the files engine.m and engine.nb.