Research software


Paper | Source | Docs | PyPI | Docker

lib5c is a library for Chromosome Conformation Capture Carbon Copy (5C) data analysis I wrote during my PhD. It forms the backbone of a good portion of my lab's computational infrastructure. In addition to an easily-customizable 5C analysis pipeline, lib5c also provides statistical utilities and custom visualizations we use in nearly every project.


Source | Docs | PyPI | Docker

hic3defdr is a genome-scale differential loop caller for Hi-C data, useful for quantitatively understanding how loops in the genome change across conditions. It implements a negative binomial statistcal model that accounts for technical biases in Hi-C datasets. It also comes with a Hi-C dataset simulator that can be used for benchmarking.


Source | PyPI

treeshaker is a tree-shaking library for Python projects - it identifies the minimal subset of Python modules required by a specific target module, and copies those files to an output directory. This is useful when your code is developed in a large monolithic library that you want to keep private while still releasing specific functionality to the public.


Source | PyPI

iceflow is a meta-framework for training and evaluating neural networks I wrote around TensorFlow and Sonnet back in 2017 when re-using architectures and running reproducible benchmarks was considerably more difficult than it is today. iceflow was designed to make it easy to connect reusable datasets and neural network models in a plug-and-play manner, as shown off in example implementations of an MLP and an autoencoder.


Source | PyPI

projectile is a tile-on-demand tile server I built using PIL and Tornado. projectile exposes parts of a large image or matrix over a tile server-like API without requiring a tiling or chunking step. This makes it attractive for use cases where the image data changes frequently and the median number of expected requests per tile is close to zero - a regime very different from typical map tiling.

Proprietary research tools


hiclite is a Python package for genome-wide loop calling in Hi-C datasets. It re-implements parts of the Juicer/HiCCUPS Hi-C processing and loop calling pipeline, but features a fast implementation of convolution on banded matrices, allowing it to run quickly without GPU acceleration. Since it's written in Python, my lab has been able to tweak hiclite to modify the expected modeling steps and call stripes in Hi-C data. It has been used in our 2019 Nature collaboration as well as a manuscript currently under revision.


hiczoom is a Python package that provides a custom client for projectile that I built using D3.js. It enables browser-based visualization of genome-wide folding maps with seamless zooming and panning, combined with overlayed reference genes, ChIP-seq signal tracks, and annotation of called loops.

Just for fun: webapps and chatbots



scootbot2.0 is a custom multi-function Slack chatbot built with botkit and Node.js. It is the spiritual successor to the original ScootBot which was a Skype chatbot written in C#. scootbot2.0 provides an interface to 14 different APIs including the cloud service.


Source | Live example

sitestatus is a site status webapp built with Django that provides a simple way to display automatically-updating status information for a list of websites or services that can be managed with a CMS-like interface and deployed to Google App Engine. I use it to power the network status page.


Source | Live example

sccms stands for Simple-Comic-CMS and is a Django-based webapp that makes it easy to display a simple webcomic on the web and manage it with a simple CMS-like interface. I use it to power the Roman Chicken webcomic.


Source | Live pre-meteor tech demo

gilgichat was a chat webapp I built using Meteor and MongoDB back in 2016. gilgichat had the basic functionality of today's Slack, including channels, notification icons, status indicators, and emoji support. It was based on an earlier tech demo that was built using Socket.IO in 2012 when websockets were very cool.



sclangular was an opinionated modular project structure and development toolchain for building single-page web applications with AngularJS. I wrote it back in 2014 before Angular 2 existed. It represents an early attempt to think about how to design simple, scalable, and flexible development frameworks.



shk was a Django-based webapp I built back in 2012 when all my friends were playing an online strategy game called Stronghold Kingdoms. We used the app as a market to trade resources among ourselves, manage debt between players in the form of IOUs, and track shipments between our cities.