Running a Snakemake pipeline
This page provides instructions for running Snakemake pipelines. The Quickstart section includes a code block that succinctly lays out all of the required steps. The Setup section goes into more detail about each step touched upon in the Quickstart.
Quickstart
All of the steps necessary to deploy the pipeline are discussed in great detail below. Here, I will present a super succinct description of what needs to be done, with all necessary code included:
###
# PREREQUISITES: INSTALL MAMBA AND GIT (only need to do once)
###
# CREATE ENVIRONMENT (only need to do once)
mamba create -c conda-forge -c bioconda --name deploy_snakemake snakemake snakedeploy
# CREATE AND NAVIGATE TO WORKING DIRECTORY (only need to do once)
mkdir path/to/working/directory
cd path/to/working/directory
# DEPLOY PIPELINE TO YOUR WORKING DIRECTORY (only need to do once)
conda activate deploy_snakemake
snakedeploy deploy-workflow <link to pipeline git> . --branch main
# Example <links to pipeline gits>:
# THE_Aligner: https://github.com/isaacvock/THE_Aligner.git
# PROseq_etal: https://github.com/isaacvock/PROseq_etal.git
# bam2bakR: https://github.com/simonlabcode/bam2bakR.git
###
# EDIT CONFIG FILE (need to do once for each new dataset)
###
# RUN PIPELINE
# See [here](https://snakemake.readthedocs.io/en/stable/executing/cli.html) for details on all of the configurable parameters
snakemake --cores all --use-conda --rerun-triggers mtime
Detailed instructions
There are 4 steps required to get up and running with THE_Aligner
- Install conda (or mamba) on your system. This is the package manager that THE_Aligner uses to make setting up the necessary dependencies a breeze.
- Deploy workflow with Snakedeploy
- Edit the config file (located in config/ directory of deployed/cloned repo) to your liking
- Run it!
The remaining documentation on this page will describe each of these steps in greater detail and point you to additional documentation that might be useful.
Install conda (or mamba)
Conda is a package/environment management system. Mamba is a newer, faster, C++ reimplementation of conda. While often associated with Python package management, lots of software, including all of the THE_Aligner pipeline dependencies, can be installed with these package managers. They have pretty much the same syntax and can do the same things, so I highly suggest using Mamba in place of Conda whenever possible.
One way to install Mamba is to first install Conda following the instructions at this link. Then you can call:
conda install -n base -c conda-forge mamba
to install Mamba.
A second strategy would be to install Mambaforge, which is similar to something called Miniconda but uses Mamba instead of Conda. I will reproduce the instructions to install Mambaforge below, as this is probably the easiest way to get started with the necessary installation of Mamba. These instructions come from the Snakemake Getting Started tutorial, so go to that link if you'd like to see the full original details:
- For Linux users with a 64-bit system, run these two lines of code from the terminal:
curl -L https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh -o Mambaforge-Linux-x86_64.sh
bash Mambaforge-Linux-x86_64.sh
- For Mac users with x86_64 architecture:
curl -L https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-x86_64.sh -o Mambaforge-MacOSX-x86_64.sh
bash Mambaforge-MacOSX-x86_64.sh
- And for Mac users with ARM/M1 architecture:
curl -L https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-arm64.sh -o Mambaforge-MacOSX-arm64.sh
bash Mambaforge-MacOSX-arm64.sh
When asked this question:
Do you wish the installer to preprend the install location to PATH ...? [yes|no]
answer with yes. Prepending to PATH means that after closing your current terminal and opening a new one, you can call the mamba (or conda) command to install software packages and create isolated environments. We'll be using this in the next step.
Deploy workflow
Snakemake pipelines can be deployed using the tool Snakedeploy. This is often more convenient than cloning the full repository locally. To get started with Snakedeploy, you first need to create a simple conda environment with Snakemake and Snakedeploy:
mamba create -c conda-forge -c bioconda --name deploy_snakemake snakemake snakedeploy
Next, create a directory that you want to run THE_Aligner in (I'll refer to it as workdir) and move into it:
mkdir workdir
cd workdir
Now, activate the deploy_snakemake environment and deploy the workflow as follows:
conda activate deploy_snakemake
snakedeploy deploy-workflow <path to pipeline git> . --branch main
snakedeploy deploy-workflow <path to pipeline git> copies the content of the config directory in the pipeline's Github repo into the directoy specified (., which means current directory, i.e., workdir in this example). It also creates a directory called workflow that contains a singular Snakefile that instructs Snakemake to use the workflow hosted on the main branch (that is what --branch main determines) of the pipeline's Github repo. --branch main can be replaced with any other existing branch.
Edit the config file
In the config/ directory you will find a file named config.yaml. If you open it in a text editor, you will see several parameters which you can alter to your heart's content. For pipeline's that I developed (bam2bakR, PROseq_etal, THE_Aligner, etc.), see the configuration section for a detailed description of all parameters present in each pipeline's config file.
Run it!
Once steps 1-3 are complete, a Snakemake pipeline can be run from the directory you deployed the workflow to as follows:
snakemake --cores all --use-conda --rerun-triggers mtime
The --rerun-triggers mtime addition is a suggestion that will prevent the pipline from rerunning certain steps who's output already exists and who's input has not been modified since the last run. See this post for a discussion as to why this is necessary as of Snakemake version 7.8.0.
Some additional parameters that you might find useful include:
- `--show-failed-logs`: When you include this, the log files for any rules that fail will be print to the screen. This can make it easier to figure out which steps went wrong and to quickly check the error messages.
- `--keep-going`: Including this will make Snakemake continue running independent rules even if one rule fails. Snakemake doesn't do this by default because the idea is if something went wrong in a rule, there could be upstream problems lurking that will plague all downstream rules. The `--keep-going` option can be useful in pipelines like bam2bakR though, where there are two independent rules at the end of the pipeline (makecB and maketdf) that don't need each other to complete successfully for the other to complete, and where one of the rules (maketdf) can fail due to a number of reasons (not enough available RAM, IGVtools bugs, etc.) that will not impact the other rule (makecB).
There are A LOT of adjustable parameters that you can play with when running a Snakemake pipeline. I would point you to the Snakemake documentation for the details on everything you can change when running the pipeline.