DRACO logo

Introduction

RNA structures are highly diverse and dynamic. Inside the cell, the same RNA is present in multiple identical copies, and not all of them will fold into the same structure. Rather, many alternative structures (or conformations) for the same RNA coexist in a dynamic equilibrium. In addition to that, each conformation is not static over time, but it can interconvert between any other potential conformation for that RNA. This structurally heterogeneous set of RNAs is commonly referred to as an ensemble.

Deconvolution of RNA Alternative COnformations (or DRACO), is a method that, by using a combination of spectral deconvolution and fuzzy clustering, can deconvolute the number of coexisting RNA structural conformations in a biological sample, as well as reconstruct their relative stoichiometries and individual reactivity profiles, starting from mutational profiling (MaP) data.

In order to use DRACO, BAM files from mutational profiling experiments must be pre-processed into mutation map (MM) files using the RNA Framework.

For support requests, please post your questions to: https://github.com/dincarnato/draco/issues

Version

The latest stable version of DRACO is v1.3 (released on December 12, 2025)

Author(s)

Edoardo Morandi (emorandi[at]rnaframework.com) [Main developer]
Danny Incarnato (dincarnato[at]rnaframework.com)

Reference

Morandi et al., (2021) Genome-scale deconvolution of RNA structure ensembles (PMID: 33619392).

License

This program is free software, and can be redistribute and/or modified under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.

Please see http://www.gnu.org/licenses/ for more information.

Installation

Clone the DRACO git repository:

git clone https://github.com/dincarnato/draco

This will create a "draco" folder.

There are two ways you can compile and use DRACO.

You can use docker to build an image with all the necessary pre-requisites to compile and run DRACO.

Building the image

cd draco
docker build --tag draco .

Running DRACO

To run DRACO using the docker image, it is necessary to expose the input and output directories to the docker container that is being spawned.

For instance, if your .mm files are located in the /my/mm/files folder, docker needs to be invoked as it follows:

docker run --init --rm -u $(id -u ${USER}):$(id -g ${USER}) -v /my/mm/files:/data draco --mm rna.mm <other draco parameters>...

where:

  • --init forwards the signals to the process (i.e., stopping using CTRL+C)
  • --rm cleans up the container after its use
  • -u $(id -u ${USER}):$(id -g ${USER}) runs DRACO with the specified user and group id
  • -v /my/mm/files:/data is to mount the directory /my/mm/files to /data inside the container. DRACO runs inside this directory, therefore all the paths should be relative and within the directory /my/mm/files (see the next parameter)
  • --mm rna.mm is the MM file to be analyzed, which must be located inside the /my/mm/files directory

DRACO's output files will be placed inside the /my/mm/files directory.

Compiling and running DRACO without Docker

Prerequisites

Compilation

To compile DRACO:

cd draco
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DLINK_TIME_OPTIMIZATIONS=ON -DNATIVE_BUILD=ON -DARMA_NO_WRAPPER=ON
make -jN

where N is the number of processors on your computer. The parameter CMAKE_INSTALL_PREFIX can be used to set the installation directory. For example, to install DRACO in /usr/local/bin, just set it to /usr/local.
The draco executable will be located under build/src/.

Compiling and running the simulate_mm utility

Prerequisites

To compile the simulate_mm utility, Rust and Cargo are needed (https://doc.rust-lang.org/cargo/getting-started/installation.html).

Compilation

cd extra/simulate_mm
cargo build --release

The simulate_mm executable will be located under target/release/.

In some cases, we observed issues related to the internal multithreading used by OpenBLAS. To avoid these and to make sure that only DRACO's multithreading is used, set the following environment variables:

export OPENBLAS_NUM_THREADS=1
export GOTO_NUM_THREADS=1
export OMP_NUM_THREADS=1

Testing your installation

Under examples/ it is possible to find three sample MM files, each one containing simulated data for a single transcript, forming one, two, or three coexisting conformations.
To analyze these samples, if DRACO is compiled within Docker simply run:

docker run --init --rm -u $(id -u ${USER}):$(id -g ${USER}) -v examples:/data draco --mm 1conf.mm        # 1 conformation
docker run --init --rm -u $(id -u ${USER}):$(id -g ${USER}) -v examples:/data draco --mm 2confs.mm       # 2 conformations
docker run --init --rm -u $(id -u ${USER}):$(id -g ${USER}) -v examples:/data draco --mm 3confs.mm       # 3 conformations

If DRACO is compiled as a stand-alone executable, run:

./build/src/draco --mm examples/1conf.mm        # 1 conformation
./build/src/draco --mm examples/2confs.mm       # 2 conformations
./build/src/draco --mm examples/3confs.mm       # 3 conformations

Known issues

Clang ≥ 19 and dlib

On Ubuntu 25.04, if Clang is used to compile DRACO and LibC++ is used (with -DUSE_LIBCXX=ON), a compilation error is triggered, which appears to be caused by dlib.

The error message looks like the following:

/usr/include/dlib/matrix/../serialize.h:1963:14: note: in instantiation of member function 'std::basic_string<unsigned int>::resize' requested here
 1963 |         item.resize(size);
      |              ^

This has been reported in a closed dlib issue, and the problem should be fixed in version 19.24.7.

Unfortunately, to date, as Ubuntu 25.04 ships with an older version of the library, we suggest to use GCC or, if possible, to manually update dlib.