Ada Madejska, MCDB, UCSB  (contact: [email protected])
Nick Noll, UCSB

This pipeline takes error-prone Nanopore reads and tries to increase the percentage identity
of the results of identifying species with BLAST. The reads in fastq format are put through the pipeline
which includes the following steps.

  1. Quality control
  • very short and very long reads (reads that highly deviate from the usual length of the 16S sequence)
    are dropped.
  1. Kmer frequency matrix
  • make a kmer frequency matrix based on the reads from the quality control step. The value of k
    can be changed (k=5 or 6 is recommended)
  1. UMAP projection and HDBSCAN clustering
  • the kmer frequency matrix is used to create a UMAP projection. The default parameters for UMAP
    and HDBSCAN functions have been chosen based on mock dataset but can be changed.
  1. Refinement
  • based on our tests on mock datasets, sometimes reads from different species can cluster together.
    To prevent that, we include a refinement step based on MSA of Clustal Omega on each cluster.
    The alignment outputs a guide tree which is used for dividing the cluster into smaller subclusters.
    The distance threshold can be changed to suit each dataset.
  1. Consensus making
  • lastly, based on the defined clusters, the last step creates a consensus sequence based on
    majority calling. The direction of the reads is fixed using minimap2, the alignment is performed
    by MAFFT, and the consensus is created using em_cons. The reads are run through BLASTN to check
    for identity of each cluster.

Software Dependencies:

To successfully run the pipeline, certain software need to be installed.

  1. Minimap2 - for the consensus making step (
  2. MAFFT - for alignment in the consensus making step (
  3. EM_CONS - for creating the consensus (
  4. NCBIN - for identification of the consensus sequences in the database
    ( (a 16S database is also required)
  5. CLUSTALO - for the refinement step (


This pipeline runs in python3.8.10 and julia v"1.4.1".

The following Python libraries are also required:

Following Julia packages are required:

GitHub - adamadejska/Nanopore_consensus_pipeline at
A pipeline that creates consensus sequences from a Nanopore reads. It clusters reads that are similar to each other and creates a consensus that is then identified using BLAST. - GitHub - adamadejs...