{"id":13625277,"url":"https://github.com/pallada-92/dna-3d-engine","last_synced_at":"2025-04-16T06:32:08.442Z","repository":{"id":95166306,"uuid":"312912498","full_name":"pallada-92/dna-3d-engine","owner":"pallada-92","description":"3d engine implementation in DNA code!","archived":false,"fork":false,"pushed_at":"2020-11-29T18:08:16.000Z","size":119,"stargazers_count":547,"open_issues_count":3,"forks_count":26,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-08-01T22:04:44.178Z","etag":null,"topics":["3d","3d-engine","biology","chemical-kinetics","chemical-reaction-networks","chemical-reactions","cube","dna","in-vitro","molecular-biology","molecular-programming","piperine","raymarching","real-reactive-programming","strand-displacement"],"latest_commit_sha":null,"homepage":"https://observablehq.com/@pallada-92/3d-engine-in-dna-code","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pallada-92.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-11-14T22:23:06.000Z","updated_at":"2024-07-23T06:42:41.000Z","dependencies_parsed_at":"2023-04-28T02:32:14.487Z","dependency_job_id":null,"html_url":"https://github.com/pallada-92/dna-3d-engine","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallada-92%2Fdna-3d-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallada-92%2Fdna-3d-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallada-92%2Fdna-3d-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallada-92%2Fdna-3d-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pallada-92","download_url":"https://codeload.github.com/pallada-92/dna-3d-engine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223700330,"owners_count":17188300,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","3d-engine","biology","chemical-kinetics","chemical-reaction-networks","chemical-reactions","cube","dna","in-vitro","molecular-biology","molecular-programming","piperine","raymarching","real-reactive-programming","strand-displacement"],"created_at":"2024-08-01T21:01:53.372Z","updated_at":"2024-11-08T14:30:52.384Z","avatar_url":"https://github.com/pallada-92.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://hsto.org/webt/r6/dp/ks/r6dpksrxkvmgumetfjvfjcwn4wy.png\" alt=\"CubeCRN logo\" width=\"400\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ecube3d.dna\u003c/h1\u003e\n \n\u003cp align=\"center\"\u003e\n  The most advanced and compact 3d engine ever implemented in DNA code.\n  \u003cbr\u003e\u003cbr\u003e\n  \u003cimg alt=\"environment: in vitro\" src=\"https://img.shields.io/badge/environment-in%20vitro-red\"/\u003e\n  \u003cimg alt=\"platform: DNA | TMSD\" src=\"https://img.shields.io/badge/platform-DNA%20%7C%20TMSD-white\"/\u003e\n  \u003cimg alt=\"license: GPL-v.3.0+\" src=\"https://img.shields.io/badge/license-GPL--v.3.0%2B-green.svg\"/\u003e\n  \u003cbr\u003e\n  \u003cimg alt=\"lint status\" src=\"https://github.com/pallada-92/dna-3d-engine/workflows/lint/badge.svg\"/\u003e\n  \u003cimg alt=\"tests status\" src=\"https://github.com/pallada-92/dna-3d-engine/workflows/tests/badge.svg\"/\u003e\n  \u003cimg alt=\"coverage\" src=\"https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/pallada-92/7b35716db8bedb6914c6cf2fab3a4dd0/raw/coverage_badge.json\"/\u003e\n  \u003cimg alt=\"total lines\" src=\"https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/pallada-92/7b35716db8bedb6914c6cf2fab3a4dd0/raw/loc_badge.json\"/\u003e\n  \u003cimg alt=\"bundle size\" src=\"https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/pallada-92/7b35716db8bedb6914c6cf2fab3a4dd0/raw/bundle_size_badge.json\"/\u003e  \n  \u003c!-- \u003cimg alt=\"active installs: 0\" src=\"https://img.shields.io/badge/active%20installs-0-yellow\"/\u003e --\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n \n## Getting started\n\n* [Getting started tutorial on ObservableHQ](https://observablehq.com/d/45f2227392644567)\n* [Try this in your browser on ObservableHQ](https://observablehq.com/d/5288cbf0a5de42b2#3d-engine)\n\n## How to deploy\n\n1. Synthesize the oligonucleotides from the [cube3d.dna](./cube3d.dna) file.\n2. Arrange the test tubes as shown in the diagram below.\n3. Don't forget to provide the initial concentrations according to the table below.\n4. Use a pipette to encode the position (row and column) of each tube to start the computation.\n\n\u003cdetails\u003e\n\u003csummary\u003eEnvironment variables\u003c/summary\u003e\n\n```\nq = 0.01\ncxtm = 0.606\naxp = 0.606\ncytm = 0.898\nayp = 0.898\ncztm = 1.243\nazp = 1.243\nmxyzm = 0.3\nnx = 0.036 + 0.555 Col + 0.147 Row\nny = 0.853 + -0.517 Row\nnz = 0.737 + -0.270 Col + 0.302 Row\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://habrastorage.org/webt/v8/hf/gw/v8hfgw7rpxrhw8owhwxewnalfle.png\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n## Testing\n\n1. Pick the \u003ca href=\"https://en.wikipedia.org/wiki/Fluorophore\"\u003efluorophore\u003c/a\u003e of your favorite color and attach it to the `Strand R0`, so that it activates when the `R` species are being produced.\n2. Use a light source with a specific wavelength (depending on the fluorophore you've chosen) to render the result.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://hsto.org/webt/hv/q_/zy/hvq_zyw6uuwwfpg6umqthctq6tm.png\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n\u003ci\u003eDisclaimer: perhaps it would not be a good idea to try this experiment in a real lab, because it will cost you a lot of money and most likely won’t work as intended the first time.\u003c/i\u003e\n\n## Ports to other languages\n\n* [SQLite version](https://observablehq.com/@pallada-92/sql-3d-engine)\n* [Excel version](https://observablehq.com/@pallada-92/excel-3d-engine-emulator)\n* [JavaScript version](https://observablehq.com/d/940d2895b3e9e611)\n* [Russian (Русский)](https://habr.com/ru/post/437168/)\n\n## Gallery\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" valign=\"center\" width=\"50%\"\u003e\n      \u003cimg src=\"https://habrastorage.org/getpro/habr/post_images/9e2/fc9/d46/9e2fc9d4605a01c82ae317775fad1e10.gif\" width=\"100%\" /\u003e\u003cbr\u003e\n      Ray marching common implementation\u003cbr\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/gl/b_/e8/glb_e8-jvkdoyhuri8gctsnysy4.png\" width=\"200\" /\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" valign=\"center\" width=\"50%\"\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/8n/r_/6o/8nr_6oqof2xrvhf8mbt0r4lmtmu.gif\" width=\"100%\" /\u003e\u003cbr\u003e\n      Ray marching differential form used here\u003cbr\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/ao/ze/qh/aozeqh4htzkzvbh_po67dmh_zho.png\" width=\"200\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/gw/zb/v1/gwzbv1w5humyabeelkyx_c3gq7k.gif\" width=\"100%\" /\u003e\u003cbr\u003e\n      Simplified animation of the toehold mediated strand displacement technique (based on supplementary materials from [2])\n    \u003c/td\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/ph/iv/ax/phivaxoqftqzm2h7qvbbj41dwiq.png\" width=\"100%\" /\u003e\u003cbr\u003e\u003cbr\u003e\n      The types of oligonucleotides required for a single reaction (based on supplementary materials from [2])\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/ww/9k/xd/ww9kxd64xtigxtbpc5mm3tvsswg.png\" width=\"100%\" /\u003e\u003cbr\u003e\n      Data flow graph of the JS implementation.\n    \u003c/td\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/uj/_l/2_/uj_l2_q26onfetzrpq_0wfetxic.png\" width=\"100%\" /\u003e\u003cbr\u003e\n      Species interaction graph of this implementation.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/-j/ak/5i/-jak5iv5d7pkkosrhl_g4r3oo34.png\" width=\"100%\" /\u003e\u003cbr\u003e\u003cbr\u003e\n      Unminified source code of this implementation which just comprises plain reactions with a few macros.\n      The minifier was written in Wolfram Language specially for this project.\n    \u003c/td\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cbr\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/qn/-j/bu/qn-jbugqz0opyuxhvm6j09wv5te.png\" width=\"100%\" /\u003e\u003cbr\u003e\u003cbr\u003e\n      CRN++ source code for comparison (\u003ca href=\"https://github.com/marko-vasic/crnPlusPlus\"\u003eCRN++\u003c/a\u003e is not used in this implementation).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/lv/ah/vs/lvahvszdgpw5vbvottwja7gwtjw.png\" width=\"100%\" /\u003e\u003cbr\u003e\u003cbr\u003e\n      10 reactions after the minification used in this project.\n      Since the piperine compiler doesn't support more than 2 products on the right-hand side, the reactions were split.\n    \u003c/td\u003e\n    \u003ctd align=\"center\" valign=\"center\"\u003e\n      \u003cbr\u003e\n      \u003cimg src=\"https://habrastorage.org/webt/lh/hx/j8/lhhxj842nxuxdocbz1zsyazvfok.png\" width=\"100%\" /\u003e\u003cbr\u003e\u003cbr\u003e\n      CRN++ 70 reactions output for comparison (\u003ca href=\"https://github.com/marko-vasic/crnPlusPlus\"\u003eCRN++\u003c/a\u003e is not used in this implementation).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Building from source\n\n1. Install the \u003ca href=\"https://github.com/DNA-and-Natural-Algorithms-Group/piperine\"\u003epiperine compiler\u003c/a\u003e by the DNA and Natural Algorithms Group.\n2. Run the following command\n\n```\npiperine-design cube3d.crn --maxspurious 0.765\n```\n\n3. Wait 2-3 hours for the compilation results.\n\n## References\n\n1. David Soloveichik, Georg Seelig and Erik Winfree\u003cbr\u003e\n   \u003ca href=\"https://www.pnas.org/content/107/12/5393\"\u003eDNA as a universal substrate for chemical kinetics\u003c/a\u003e\u003cbr\u003e\n   Proceedings of the National Academy of Sciences Mar 2010, 107 (12) 5393-5398; DOI: 10.1073/pnas.0909380107\u003cbr\u003e\u003cbr\u003e\n\n1. Niranjan Srinivas, James Parkin, Georg Seelig, Erik Winfree and David Soloveichik\u003cbr\u003e\n   \u003ca href=\"https://science.sciencemag.org/content/358/6369/eaal2052.full\"\u003eEnzyme-free nucleic acid dynamical systems\u003c/a\u003e\u003cbr\u003e\n   Science 358, eaal2052 (2017).\u003cbr\u003e\n   Some images were taken from \u003ca href=\"https://science.sciencemag.org/content/suppl/2017/12/13/358.6369.eaal2052.DC1\"\u003esupplementary materials\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n\n1. Chalk, Cameron, Niels Kornerup, Wyatt Reeves, and David Soloveichik.\u003cbr\u003e\n   \u003ca href=\"https://arxiv.org/abs/1907.00053\"\u003eComposable rate-independent computation in continuous chemical reaction networks.\u003c/a\u003e\u003cbr\u003e\n   International Conference on Computational Methods in Systems Biology, pp. 256-273. Springer, Cham, 2018.\u003cbr\u003e\u003cbr\u003e\n\n1. Chen, Ho-Lin, David Doty, and David Soloveichik.\u003cbr\u003e\n   \u003ca href=\"https://dl.acm.org/doi/abs/10.1145/2554797.2554827\"\u003eRate-independent computation in continuous chemical reaction networks.\u003c/a\u003e\u003cbr\u003e\n   Proceedings of the 5th conference on Innovations in theoretical computer science. 2014.\u003cbr\u003e\u003cbr\u003e\n\n1. Marko Vasic, David Soloveichik and Sarfraz Khurshid\u003cbr\u003e\n   \u003ca href=\"https://arxiv.org/abs/1809.07430\"\u003eCRN++: Molecular Programming Language\u003c/a\u003e\u003cbr\u003e\n   Natural Computing (2020) 19:391–407 DOI: 10.1007/s11047-019-09775-1\u003cbr\u003e\n   \u003ca href=\"https://github.com/marko-vasic/crnPlusPlus\"\u003eCRN++ on GitHub\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n\n1. Inigo Quilez\u003cbr\u003e\n   https://www.iquilezles.org/www/index.htm\u003cbr\u003e\n   Introduction to Raymarching Signed Distance Functions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpallada-92%2Fdna-3d-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpallada-92%2Fdna-3d-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpallada-92%2Fdna-3d-engine/lists"}