Jason J. Gullickson

Jason J. Gullickson

Go print yourself with 3dna

3dna is a Python script which derives a 3d model suitable for printing from raw genome data avaliable from services such as 23andme .

First attempt to print the output from
3dna. First attempt at printing the output from 3dna.

The physical output allows you interact with the data in a way that engages the senses more directly that traditional visual-only on-screen methods.

The idea (and name) for 3dna came from Jamie and her interest in genetics. This led us to try 23andme’s genetic analysis service , and when I found out that I could download the raw genome data I knew I had to do something cool with it. Applying 3d printing to the data seemed like a obvious choice.

Raw genome data used as input for
3dna Raw genome data used as input for 3dna

It took some noodling to decide just how to translate the genome data into a 3d model (the options seemed infinite).  The method selected for 3dna came to me while printing several different vase or cup designs that were created by extruding 2-dimensional shapes and altering them in various dimensions along the Z axis. After struggling with the geometry (I am notoriously bad at basic math) I came up with an algorithm for converting the chromosome pair data into points and mapped these in space along a Z axis that coincides with each chromosome.

OpenSCAD is used to preview the output before converting it to
STL OpenSCAD is used to preview the output before converting it to STL in preparation for printing

The results are varied and interesting.  If printed as-is they are solid (closed-top), but if printed hollow could produce cup of vase-like structures (I’m considering baking this into the program in a future version).  Of particular interest to me was to print the genome of myself, my wife Jamie and our daughter Liberty and examine how the models are similar, how they are different and how they might fit together.

3dna is Open-Source and the code is available on Github .  I have a few improvements in mind but feel free to add your own to the Issue tracker , or if you have questions (or would just like to try it out but don’t know where to start) leave a comment and I’ll try to help you out.