Software

I write open-source software for genomics in C, C++, R, Rust and Python, built for genome-scale data, tested with continuous integration and released through five registries (Bioconductor, CRAN, Bioconda, PyPI and crates.io).

universalmotif

An R package for importing, exporting, converting, scanning and comparing biological sequence motifs, with its performance-critical code written in C++. I have written and maintained it since 2018, and it has been downloaded more than 150,000 times across Bioconductor and Bioconda.

Bioconductor · GitHub · Paper (JOSS, 2024)

The package also has Rust and Python versions. The Rust crate covers most of what the R package does, is checked against it, and is the multithreaded engine behind the Python package, which returns numpy arrays and polars DataFrames.

quaqc

Quality control and filtering for ATAC-seq data from any genome, written in C on top of htslib and built for large multi-sample studies: in the documented example it processes around 80 million Arabidopsis ATAC-seq reads in about a minute. It also works for other unspliced sequencing data such as ChIP-seq. A companion R package, quaqcr, wraps quaqc and adds tools for analysing and plotting its results.

Bioconda · GitHub · Paper (Bioinformatics, 2024)
quaqcr: CRAN · GitHub

Machine learning on regulatory sequence

I train deep sequence-to-function models of chromatin accessibility, ChromBPNet in TensorFlow and seq2PRINT in PyTorch, on single-cell ATAC-seq data from Arabidopsis. The work covers training from scratch and fine-tuning, evaluating accuracy and biases, and interpreting predictions with attribution and feature ablation (more on the Research page). universalmotif draws the contribution-weight motifs that these models produce.

Other tools

  • bwtk: conversion, merging, subsetting and transformation of bigWig and bedGraph files (C). Bioconda
  • yamtk: genome-scale scanning and enrichment of transcription factor binding sites (C).
  • bam2td: builds HOMER tag directories directly from SAM, BAM or CRAM files, handling CIGAR operations that HOMER’s own parser gets wrong (C).
  • msaviz: visualisation of multiple sequence alignments as ggplot2 heatmaps or lollipop charts, fast even for alignments with millions of residues (R).

Data resources

  • TAIR12 blacklist: regions of the TAIR12 Arabidopsis assembly with anomalous signal in sequencing experiments, to filter out of ATAC-seq and ChIP-seq analyses. Generated with the ENCODE Blacklist pipeline to match the TAIR10 blacklist of Klasfeld et al. (2022), with Tatsuya Nobori. GitHub

Pipelines

For the Nobori group I built csRNAseq_pipeline, a tested and containerised Snakemake workflow for csRNA-seq, together with bfqutils (FASTQ trimming, merging and analysis in C) and tssUtils (transcription start site analysis in R).

Earlier projects

  • PhyloCorrelate: a database and R package for inferring bacterial gene functional associations from phylogenetic profiles. GitHub
  • DiffBase: a classification of C. difficile toxin subtypes. GitHub
  • PathFams: statistical detection of pathogen-associated protein domains.
  • mirlyn: diversity analysis of amplicon sequencing data with repeated rarefying, to account for the uncertainty that rarefying introduces (R). Paper (Scientific Reports, 2021)