Repo for the software suite ShoRAH (Short Reads Assembly into Haplotypes)
Clone or download
DrYak and SoapZA With htslib (#52)
* Switching autoconf/automake to HTSlib
* Porting b2w.cpp to htslib
 - partially replacing tmp struct with a closure
(because C++ lambas have been available for a nearly decade)
* Code clean-up of b2w
* Missing license header in fil.cpp
* Porting fil.cpp to htslib
 - merging amplicon and normal loops, using lambdas
* Code clean-up of fil
Latest commit 73ca1ce Aug 13, 2018

What is ShoRAH?

Build Status Bioconda package Docker container

ShoRAH is an open source project for the analysis of next generation sequencing data. It is designed to analyse genetically heterogeneous samples. Its tools are written in different programming languages and provide error correction, haplotype reconstruction and estimation of the frequency of the different genetic variants present in a mixed sample.

More information here.

The software suite ShoRAH (Short Reads Assembly into Haplotypes) consists of several programs, the most imporant of which are:

Tool What it does amplicon based analysis local error correction based on diri_sampler
diri_sampler Gibbs sampling for error correction via Dirichlet process mixture
contain removal of redundant reads maximum matching haplotype construction
freqEst EM algorithm for haplotype frequency detects single nucleotide variants, taking strand bias into account wrapper for everything


If you use shorah, please cite the application note paper Zagordi et al. on BMC Bioinformatics.

General usage


shorah requires the following pieces of software:

  1. Python 2 or Python 3, backward compatibility is provided as some current Linux distributions and OS X systems are still using 2.x as default. The required dependencies are:

    a) Biopython, and b) NumPy. These packages can be downloaded using pip or anaconda

  2. Perl, for some scripts

  3. zlib, which is used by the bundled samtools for compressing bam files

  4. pkg-config, for discovering dependencies, which most Unix-like systems include

  5. GNU scientific library, for random number generation

In addition, if you want to bootstrap the git version of shorah instead of using the provided tarballs, you will need the GNU Autotools:

  1. Autoconf 2.69

  2. Automake 1.15

  3. m4, which most Unix-like system include


We strongly recommend you use one of the versioned tarballs from the releases page. ShoRAH uses Autoconf and Automake, and these tarballs include all necessary scripts and files required for installation, whereas the git tree only contains the bare minimum of files required for bootstrapping.

Further, we strongly recommend you use a virtualenv for python installation that shares the same directory root as where you'd like to install shorah to. Not using a virtualenv means that the python dependencies will not be located in the installation root, which will likely require you to specify PYTHONPATH, making the installation more brittle.

Say for instance, you would like to install shorah to /usr/local/shorah. The first step consists of installing the required python dependencies. Create a virtualenv:

/opt/local/bin/virtualenv-3.6 /usr/local/shorah

where /opt/local/bin/virtualenv-3.6 is the virtualenv command for python 3.6 on MacPorts. Now install the python dependencies:

/usr/local/shorah/bin/pip install Biopython numpy

Now call the configure script from the shorah tarball, taking care to specify the absolute path of the python interpreter (or the relative one if it is in your PATH), as this gets inserted into the shebang line of all python scripts:

./configure --prefix=/usr/local/shorah PYTHON=/usr/local/shorah/bin/python3.6

The configure script finds the dependencies using pkg-config. Once it completes, run:

make -j4

where 4 specifies the number of compilation threads to use. Finally, after compilation, install using:

make install

All the programs should now be located in /usr/local/shorah/bin.

Boostrapping from git

If you opted to clone the git repository instead of downloading a prepared tarball, you will need to bootstrap the configure script:

autoreconf -vif

After this, you can run the configure script as described previously.

Windows users

You can install and run shorah with Cygwin. Please see the relevant paragraph on the documentation page.


The input is a sorted bam file. Analysis can be performed in local or global mode.

Local analysis

The local analysis alone can be run invoking or (program for the amplicon mode). They work by cutting window from the multiple sequence alignment, invoking diri_sampler on the windows and calling for the SNV calling. See the README file in directory amplicon_test.

Global analysis

The whole global reconstruction consists of the following steps:

  1. error correction (i.e. local haplotype reconstruction);
  2. SNV calling;
  3. removal of redundant reads;
  4. global haplotype reconstruction;
  5. frequency estimation.

These can be run one after the other, or one can invoke, that runs the whole process from bam file to frequency estimation and SNV calling.

Coding style

All changes to the C++ code in src/cpp should always be formatted according to the included .clang-format style by doing

clang-format -style=file -i src/cpp/*.[ch]pp

in the root of the repository.

All changes to the python code in src/shorah should always be formatted conforming to the PEP 8 style guide. To this end, we advise to use autopep8.