Deaminase-based RNA recording enables high throughput mutational profiling of protein-RNA interactions
Rachael A. Bakker, Oliver B. Nicholson, Heungwon Park, Yu-Lan Xiao, Weixin Tang, Arvind Rasi Subramaniam, and Christopher P. Lapointe
| Preprint | bioRxiv 10.1101/2025.04.11.648485 |
| Sequencing data | NCBI BioProject PRJNA1255650 |
| Per-run accessions | sra_accessions.csv |
| Plasmid sequences | data/plasmid_maps |
| Per-panel data | source_data |
| Questions and reagent requests | open an issue |
| Licence | MIT for the code, CC BY 4.0 for the data |
Everything runs from the repository root through run_everything.sh, which launches each analysis as a Snakemake workflow:
./run_everything.sh./run_everything.sh --plotsThe first command counts reads and then redraws; the second redraws figures from count tables that
are already present. --only <name> restricts either to one analysis, --singularity runs every
step in a container, and a trailing rule name runs one figure. The options may be given in any
order, and anything after them is passed through to Snakemake.
Snakemake, and a Python environment holding pandas, numpy, matplotlib, scipy and biopython. By default every step runs with whatever is on PATH, so nothing further is needed on an ordinary machine. The published figures were produced under Snakemake 7.0.0 with Python 3.12.8, pandas 2.3.1, numpy 1.26.4, matplotlib 3.10.3, scipy 1.16.0 and biopython 1.85.
Adding --singularity instead runs each step inside the container its workflow declares, so that
the versions above are fixed for you:
./run_everything.sh --singularitySnakemake then pulls each docker:// image once into the directory named by SINGULARITY_PREFIX
and reuses it from then on, so the first run of an analysis spends a few extra minutes building
images. Apptainer works in place of Singularity.
| Container | Used by |
|---|---|
r_python:2.4.2 |
every workflow, apart from the two below |
python:1.0.0 |
the in vitro read counter |
hisat2_3n:1.0.1 |
the published-data reanalysis behind Supplementary Figure 3B |
sratools:3.0.8 |
download_from_sra.sh, which runs fasterq-dump inside it |
Every analysis behind the main figures needs nothing but Python. The published-data reanalysis
behind Supplementary Figure 3B is the exception, because it runs HISAT-3N and samtools: give it
--singularity, or put those programs on PATH. The launcher checks for them and says which is
missing before starting anything.
Both scripts read the same settings from the environment, and each one has a working default:
| Variable | Read by | Default | Meaning |
|---|---|---|---|
SNAKEMAKE |
run_everything.sh | snakemake |
the Snakemake executable |
CORES |
run_everything.sh | 4 |
cores the workflows may use |
THREADS |
download_from_sra.sh | 4 |
threads each download may use |
SINGULARITY_PREFIX |
both scripts, with --singularity |
.singularity |
directory that caches the container images |
SINGULARITY_ARGS |
both scripts, with --singularity |
none | arguments passed through to Singularity, for whatever bind mounts the machine needs |
SINGULARITY |
download_from_sra.sh, with --singularity |
singularity |
set this to apptainer instead where that is what is installed |
On a cluster, containers avoid installing anything: bind the filesystem that holds the data, and point the image cache at shared storage so that the images are built once for everyone.
export SINGULARITY_PREFIX=/path/to/shared/singularity
export SINGULARITY_ARGS="-B /fh"
export CORES=12
./run_everything.sh --singularityCount tables for --plots are attached to the
count-tables-v1 release,
fetched by download_count_tables.sh:
./data/download_count_tables.shThat is a 67 MB download, and covers every figure except 1C, whose counts are versioned in the repository. Redrawing from the tables takes minutes.
Raw reads come from the BioProject, fetched by download_from_sra.sh:
./data/download_from_sra.shThis fetches each run by accession and names the files as the workflows expect. Naming sample
identifiers from the sample_id column of sra_accessions.csv fetches
only those runs. It calls fasterq-dump from PATH, which conda installs with
conda install -c bioconda sra-tools; --singularity runs it inside the container instead, so that
nothing has to be installed for it either.
Counting from the reads needs a compute allocation, and far more disk than it downloads:
- The 25 runs are a 6.4 GB download, 20.9 billion bases in all.
- They unpack to 95 GB of FASTQ, because the counting workflows read uncompressed reads. Only the λN DMS mRNA run stays gzipped.
- Counting writes per-barcode intermediates on top of that, leaving 167 GB in the ignored data directory of each analysis folder, 156 GB of it under the in vitro analysis.
- A complete run of the four analyses behind Figures 1C and 2 to 6 took 1 hour 55 minutes on 12 cores, divided about evenly between downloading and counting, and never passed 2 GB of memory.
The published-data reanalysis behind Supplementary Figure 3B is separate, and much heavier: building the HISAT-3N index for GRCh38 alone asks for 300 GB of memory and 16 cores.
| Folder | Contents |
|---|---|
| nanopore_reporter_editing | Low-throughput reporter editing, Figure 1C |
| boxb_in_vitro_sequencing | Purified-enzyme boxB library, Figures 2-4 and Supplementary 1-7 |
| boxb_in_vivo_sequencing | Cellular boxB library, Figure 5 and Supplementary 8 |
| ln_dms_sequencing | λN deep mutational scan, Figure 6 |
| published_rabe_contexts | Reanalysis of published rABE RNA sequencing, Supplementary 3B |
| boxb_structure_views | λN-boxB structure panels, Figures 3E and 6G |
Within each analysis folder, annotations holds the versioned CSVs that define samples, read layouts, coordinates and figure selections; scripts holds the workflows and the plotting code; figures holds the output; tables holds summary tables; and data holds reads and count tables, which are not versioned.
| Summary table | Contents |
|---|---|
| figure_1c_statistics.csv | Fold changes and Fisher exact tests behind Figure 1C |
| wildtype_statistics.csv | λN wild-type dispersion, depth contrast, test calibration and robustness series |
| rabe_rna_sequence_context.csv | Per-context editing in the published rABE samples |