library(conflicted)
library(tidyverse)
library(fs)

source("setup/conflicted.R")
source("setup/knit_engines_simple.R")

16S Barcoding Kit 24 V14 (SQK-16S114.24): 16S01-24

Find more details here

ONT Manual Details

The 16S Barcoding Kit 1-24 (SQK-16S024) offers a method of amplifying and barcoding the ~1500 bp 16S rRNA gene from multiple samples and sequencing them together. By narrowing down to a specific region of interest, a user can see all the organisms in the sample without sequencing unnecessary regions of the genome, making the identification quicker and more economical. There are up to 24 unique barcodes, allowing the user to pool up to 24 different samples in one sequencing experiment with 10 ng of high molecular weight gDNA per sample as input. The DNA is amplified by PCR using the specific 16S barcode primers (27F and 1492R) and 5’ tags which facilitate the ligase-free attachment of Rapid Sequencing Adapters.

“summary of the 16s kit workflow”
“summary of the 16s kit workflow”
Barcode flanking sequence:
Forward 16S primer: 5' - ATCGCCTACCGTGAC - barcode - AGAGTTTGATCMTGGCTCAG - 3' 
Reverse 16S primer: 5' - ATCGCCTACCGTGAC - barcode - CGGTTACCTTGTTACGACTT - 3'

TTTCTGTTGGTGCTGATATTGC - barcode - AGRGTTYGATYMTGGCTCAG

TTTCTGTTGGTGCTGATATTGC - barcode - AGAGTTTGATCMTGGCTCAG

The 3’ flanking sequence of the forward primer contains a wobble base (denoted by M; in the primer the base is either an A or a C) in a variable region of the 16S gene.

Rapid Adapter (RA) Sequence:
Top strand: 5’-TTTTTTTTCCTGTACTTCGTTCAGTTACGTATTGCT-3’

This sequence should be removed when using the –trim ‘adapters’ flag during dorado basecaller

Table for Records

anchor <- "ATCGCCTACCGTGAC"
forward <- "AGAGTTTGATCMTGGCTCAG"
reverse <- "CGGTTACCTTGTTACGACTT"

sqk_16s114_24 <- tibble(
  name = paste0("barcode", sprintf("%02d", 1:24)),
  barcode_sequence  = c(
    "AAGAAAGTTGTCGGTGTCTTTGTG",
    "TCGATTCCGTTTGTAGTCGTCTGT",
    "GAGTCTTGTGTCCCAGTTACCAGG",
    "TTCGGATTCTATCGTGTTTCCCTA",
    "CTTGTCCAGGGTTTGTGTAACCTT",
    "TTCTCGCAAAGGCAGAAAGTAGTC",
    "GTGTTACCGTGGGAATGAATCCTT",
    "TTCAGGGAACAAACCAAGTTACGT",
    "AACTAGGCACAGCGAGTCTTGGTT",
    "AAGCGTTGAAACCTTTGTCCTCTC",
    "GTTTCATCTATCGGAGGGAATGGA",
    "CAGGTAGAAAGAAGCAGAATCGGA",
    "AGAACGACTTCCATACTCGTGTGA",
    "AACGAGTCTCTTGGGACCCATAGA",
    "AGGTCTACCTCGCTAACACCACTG",
    "CGTCAACTGACAGTGGTTCGTACT",
    "ACCCTCCAGGAAAGTACCTCTGAT",
    "CCAAACCCAACAACCTAGATAGGC",
    "GTTCCTCGTGCAGTGTCAAGAGAT",
    "TTGCGTCCTGTTACGAGAACTCAT",
    "GAGCCTCTCATTGTCCGTTCTCTA",
    "ACCACTGCCATGTATCAAAGTACG",
    "CTTACTACCCAGTGAACCTCCTCG",
    "GCATAGTTCTGCATGATGGGTTAG"
  )
) %>%
  rowwise() %>%
  mutate(forward = as.character(paste0(anchor, barcode_sequence, forward)),
         reverse = as.character(paste0(anchor, barcode_sequence, reverse)),
         kit     = "16S")

write_csv(
  sqk_16s114_24,
  "primers/sqk_16s114_24.csv"
)

sqk_16s114_24

FASTA Files for CONCOMPRA primer-chop Step

The primer_set.fa file CONCOMPRA expects only one “head” and one “tail” entry in a FASTA file.

  • The two records must contain the sequences as they appear (5’→3’) in the reads – i.e. do not reverse-complement the reverse primer.
  • The record IDs just have to contain the words head and tail (not case-sensitive).
  • Degenerate bases may be left in IUPAC notation (e.g. M = A/C) – LAST handles them fine.
  • Variable barcode or adapter sequence must be split into separate runs; primer-chop aligns internally and simply needs a unique, constant stretch to lock on to.
primers_16s <- sqk_16s114_24 %>%
  select(name, head = forward, tail = reverse) %>%
  pivot_longer(c("head", "tail"),
               names_to  = "heading",
               values_to = "sequence") %>%
  nest(.by = "name") %>%
  deframe() %>%
  map(\(x) as.list(deframe(x)))
primer_fasta <- function(x, idx) {
  dir_path <- paste0("reads/barcodes/", idx)
  
  dir_create(dir_path)
  
  write_lines(
    paste(
      ">head",
      pluck(x, "head"),
      ">tail",
      pluck(x, "tail"),
      sep = "\n"
    ),
    file = paste0(dir_path, "/primer_set.fa")
  )
}
imap(primers_16s, \(x, idx) primer_fasta(x, idx))
Now you should have 24 subdirectories named for their barcode title, each containing one primer_set.fa file (see below).
reads/barcodes/
├── barcode01
│   └── primer_set.fa
├── barcode02
│   └── primer_set.fa
├── barcode03
│   └── primer_set.fa
├── barcode04
│   └── primer_set.fa
├── barcode05
│   └── primer_set.fa
├── barcode06
│   └── primer_set.fa
├── barcode07
│   └── primer_set.fa
├── barcode08
│   └── primer_set.fa
├── barcode09
│   └── primer_set.fa
├── barcode10
│   └── primer_set.fa
├── barcode11
│   └── primer_set.fa
├── barcode12
│   └── primer_set.fa
├── barcode13
│   └── primer_set.fa
├── barcode14
│   └── primer_set.fa
├── barcode15
│   └── primer_set.fa
├── barcode16
│   └── primer_set.fa
├── barcode17
│   └── primer_set.fa
├── barcode18
│   └── primer_set.fa
├── barcode19
│   └── primer_set.fa
├── barcode20
│   └── primer_set.fa
├── barcode21
│   └── primer_set.fa
├── barcode22
│   └── primer_set.fa
├── barcode23
│   └── primer_set.fa
└── barcode24
    └── primer_set.fa
LS0tCnRpdGxlOiAiQmFyY29kZXMgYW5kIFByaW1lcnMgZm9yIE9OVCBLaXRzIgphdXRob3I6ICJBbGljaWEgTS4gUmljaCwgUGguRC4iCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0aGVtZToKICAgICAgYnNsaWI6IHRydWUKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgY3NzOiBqb3VybmFsLmNzcwogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogIAotLS0KCmBgYHtyIHNldHVwLCBtZXNzYWdlPUZBTFNFLCBjb21tZW50PSIifQpsaWJyYXJ5KGNvbmZsaWN0ZWQpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGZzKQoKc291cmNlKCJzZXR1cC9jb25mbGljdGVkLlIiKQpzb3VyY2UoInNldHVwL2tuaXRfZW5naW5lc19zaW1wbGUuUiIpCmBgYAoKIyAxNlMgQmFyY29kaW5nIEtpdCAyNCBWMTQgKFNRSy0xNlMxMTQuMjQpOiAxNlMwMS0yNAoKW0ZpbmQgbW9yZSBkZXRhaWxzIGhlcmVdKGh0dHBzOi8vbmFub3BvcmV0ZWNoLmNvbS9kb2N1bWVudC9jaGVtaXN0cnktdGVjaG5pY2FsLWRvY3VtZW50KQoKIyMgT05UIE1hbnVhbCBEZXRhaWxzCgo+VGhlIDE2UyBCYXJjb2RpbmcgS2l0IDEtMjQgKCoqU1FLLTE2UzAyNCoqKSBvZmZlcnMgYSBtZXRob2Qgb2YgYW1wbGlmeWluZyBhbmQgYmFyY29kaW5nIHRoZSB+MTUwMCBicCAxNlMgclJOQSBnZW5lIGZyb20gbXVsdGlwbGUgc2FtcGxlcyBhbmQgc2VxdWVuY2luZyB0aGVtIHRvZ2V0aGVyLiBCeSBuYXJyb3dpbmcgZG93biB0byBhIHNwZWNpZmljIHJlZ2lvbiBvZiBpbnRlcmVzdCwgYSB1c2VyIGNhbiBzZWUgYWxsIHRoZSBvcmdhbmlzbXMgaW4gdGhlIHNhbXBsZSB3aXRob3V0IHNlcXVlbmNpbmcgdW5uZWNlc3NhcnkgcmVnaW9ucyBvZiB0aGUgZ2Vub21lLCBtYWtpbmcgdGhlIGlkZW50aWZpY2F0aW9uIHF1aWNrZXIgYW5kIG1vcmUgZWNvbm9taWNhbC4gVGhlcmUgYXJlIHVwIHRvIDI0IHVuaXF1ZSBiYXJjb2RlcywgYWxsb3dpbmcgdGhlIHVzZXIgdG8gcG9vbCB1cCB0byAyNCBkaWZmZXJlbnQgc2FtcGxlcyBpbiBvbmUgc2VxdWVuY2luZyBleHBlcmltZW50IHdpdGggMTAgbmcgb2YgaGlnaCBtb2xlY3VsYXIgd2VpZ2h0IGdETkEgcGVyIHNhbXBsZSBhcyBpbnB1dC4gVGhlIEROQSBpcyBhbXBsaWZpZWQgYnkgUENSIHVzaW5nIHRoZSBzcGVjaWZpYyAqKjE2UyBiYXJjb2RlIHByaW1lcnMqKiAoKioyN0YgYW5kIDE0OTJSKiopIGFuZCA14oCZIHRhZ3Mgd2hpY2ggZmFjaWxpdGF0ZSB0aGUgbGlnYXNlLWZyZWUgYXR0YWNobWVudCBvZiAqKlJhcGlkIFNlcXVlbmNpbmcgQWRhcHRlcnMqKi4KCiFbInN1bW1hcnkgb2YgdGhlIDE2cyBraXQgd29ya2Zsb3ciXShncmFwaGljcy9zcWtfMTZzMTE0XzI0X3N1bW1hcnkuc3ZnKQo8ZGV0YWlscz4KPHN1bW1hcnk+CioqQmFyY29kZSBmbGFua2luZyBzZXF1ZW5jZToqKgo8L3N1bW1hcnk+CgpgYGAKRm9yd2FyZCAxNlMgcHJpbWVyOiA1JyAtIEFUQ0dDQ1RBQ0NHVEdBQyAtIGJhcmNvZGUgLSBBR0FHVFRUR0FUQ01UR0dDVENBRyAtIDMnIApSZXZlcnNlIDE2UyBwcmltZXI6IDUnIC0gQVRDR0NDVEFDQ0dUR0FDIC0gYmFyY29kZSAtIENHR1RUQUNDVFRHVFRBQ0dBQ1RUIC0gMycKYGBgCgpUVFRDVEdUVEdHVEdDVEdBVEFUVEdDIC0gYmFyY29kZSAtIEFHUkdUVFlHQVRZTVRHR0NUQ0FHCgpUVFRDVEdUVEdHVEdDVEdBVEFUVEdDIC0gYmFyY29kZSAtIEFHQUdUVFRHQVRDTVRHR0NUQ0FHCgoqVGhlIDMnIGZsYW5raW5nIHNlcXVlbmNlIG9mIHRoZSBmb3J3YXJkIHByaW1lciBjb250YWlucyBhIHdvYmJsZSBiYXNlIChkZW5vdGVkIGJ5IE07IGluIHRoZSBwcmltZXIgdGhlIGJhc2UgaXMgZWl0aGVyIGFuIEEgb3IgYSBDKSBpbiBhIHZhcmlhYmxlIHJlZ2lvbiBvZiB0aGUgMTZTIGdlbmUuKgoKPC9kZXRhaWxzPgoKCjxkZXRhaWxzPgo8c3VtbWFyeT4KKipSYXBpZCBBZGFwdGVyIChSQSkgU2VxdWVuY2U6KioKPC9zdW1tYXJ5PgoKYGBgClRvcCBzdHJhbmQ6IDXigJktVFRUVFRUVFRDQ1RHVEFDVFRDR1RUQ0FHVFRBQ0dUQVRUR0NULTPigJkKYGBgCgoqVGhpcyBzZXF1ZW5jZSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHVzaW5nIHRoZSAtLXRyaW0gJ2FkYXB0ZXJzJyBmbGFnIGR1cmluZyBgZG9yYWRvIGJhc2VjYWxsZXJgKgoKPC9kZXRhaWxzPgoKIyMgVGFibGUgZm9yIFJlY29yZHMKCmBgYHtyfQphbmNob3IgPC0gIkFUQ0dDQ1RBQ0NHVEdBQyIKZm9yd2FyZCA8LSAiQUdBR1RUVEdBVENNVEdHQ1RDQUciCnJldmVyc2UgPC0gIkNHR1RUQUNDVFRHVFRBQ0dBQ1RUIgoKc3FrXzE2czExNF8yNCA8LSB0aWJibGUoCiAgbmFtZSA9IHBhc3RlMCgiYmFyY29kZSIsIHNwcmludGYoIiUwMmQiLCAxOjI0KSksCiAgYmFyY29kZV9zZXF1ZW5jZSAgPSBjKAogICAgIkFBR0FBQUdUVEdUQ0dHVEdUQ1RUVEdURyIsCiAgICAiVENHQVRUQ0NHVFRUR1RBR1RDR1RDVEdUIiwKICAgICJHQUdUQ1RUR1RHVENDQ0FHVFRBQ0NBR0ciLAogICAgIlRUQ0dHQVRUQ1RBVENHVEdUVFRDQ0NUQSIsCiAgICAiQ1RUR1RDQ0FHR0dUVFRHVEdUQUFDQ1RUIiwKICAgICJUVENUQ0dDQUFBR0dDQUdBQUFHVEFHVEMiLAogICAgIkdUR1RUQUNDR1RHR0dBQVRHQUFUQ0NUVCIsCiAgICAiVFRDQUdHR0FBQ0FBQUNDQUFHVFRBQ0dUIiwKICAgICJBQUNUQUdHQ0FDQUdDR0FHVENUVEdHVFQiLAogICAgIkFBR0NHVFRHQUFBQ0NUVFRHVENDVENUQyIsCiAgICAiR1RUVENBVENUQVRDR0dBR0dHQUFUR0dBIiwKICAgICJDQUdHVEFHQUFBR0FBR0NBR0FBVENHR0EiLAogICAgIkFHQUFDR0FDVFRDQ0FUQUNUQ0dUR1RHQSIsCiAgICAiQUFDR0FHVENUQ1RUR0dHQUNDQ0FUQUdBIiwKICAgICJBR0dUQ1RBQ0NUQ0dDVEFBQ0FDQ0FDVEciLAogICAgIkNHVENBQUNUR0FDQUdUR0dUVENHVEFDVCIsCiAgICAiQUNDQ1RDQ0FHR0FBQUdUQUNDVENUR0FUIiwKICAgICJDQ0FBQUNDQ0FBQ0FBQ0NUQUdBVEFHR0MiLAogICAgIkdUVENDVENHVEdDQUdUR1RDQUFHQUdBVCIsCiAgICAiVFRHQ0dUQ0NUR1RUQUNHQUdBQUNUQ0FUIiwKICAgICJHQUdDQ1RDVENBVFRHVENDR1RUQ1RDVEEiLAogICAgIkFDQ0FDVEdDQ0FUR1RBVENBQUFHVEFDRyIsCiAgICAiQ1RUQUNUQUNDQ0FHVEdBQUNDVENDVENHIiwKICAgICJHQ0FUQUdUVENUR0NBVEdBVEdHR1RUQUciCiAgKQopICU+JQogIHJvd3dpc2UoKSAlPiUKICBtdXRhdGUoZm9yd2FyZCA9IGFzLmNoYXJhY3RlcihwYXN0ZTAoYW5jaG9yLCBiYXJjb2RlX3NlcXVlbmNlLCBmb3J3YXJkKSksCiAgICAgICAgIHJldmVyc2UgPSBhcy5jaGFyYWN0ZXIocGFzdGUwKGFuY2hvciwgYmFyY29kZV9zZXF1ZW5jZSwgcmV2ZXJzZSkpLAogICAgICAgICBraXQgICAgID0gIjE2UyIpCgp3cml0ZV9jc3YoCiAgc3FrXzE2czExNF8yNCwKICAicHJpbWVycy9zcWtfMTZzMTE0XzI0LmNzdiIKKQoKc3FrXzE2czExNF8yNApgYGAKCiMjIEZBU1RBIEZpbGVzIGZvciBgQ09OQ09NUFJBYCBgcHJpbWVyLWNob3BgIFN0ZXAKCj5UaGUgYHByaW1lcl9zZXQuZmFgIGZpbGUgYENPTkNPTVBSQWAgZXhwZWN0cyBvbmx5IG9uZSDigJxoZWFk4oCdIGFuZCBvbmUg4oCcdGFpbOKAnSBlbnRyeSBpbiBhIEZBU1RBIGZpbGUuCgotIFRoZSB0d28gcmVjb3JkcyBtdXN0IGNvbnRhaW4gdGhlIHNlcXVlbmNlcyBhcyB0aGV5IGFwcGVhciAoNeKAmeKGkjPigJkpIGluIHRoZSByZWFkcyAgIOKAkyBpLmUuIGRvIG5vdCByZXZlcnNlLWNvbXBsZW1lbnQgdGhlIHJldmVyc2UgcHJpbWVyLgotIFRoZSByZWNvcmQgSURzIGp1c3QgaGF2ZSB0byBjb250YWluIHRoZSB3b3JkcyBoZWFkIGFuZCB0YWlsIChub3QgY2FzZS1zZW5zaXRpdmUpLgotIERlZ2VuZXJhdGUgYmFzZXMgbWF5IGJlIGxlZnQgaW4gSVVQQUMgbm90YXRpb24gKGUuZy4gTSA9IEEvQykg4oCTIExBU1QgaGFuZGxlcyB0aGVtIGZpbmUuCi0gVmFyaWFibGUgYmFyY29kZSBvciBhZGFwdGVyIHNlcXVlbmNlIG11c3QgYmUgc3BsaXQgaW50byBzZXBhcmF0ZSBydW5zOyBwcmltZXItY2hvcCBhbGlnbnMgaW50ZXJuYWxseSBhbmQgc2ltcGx5IG5lZWRzIGEgdW5pcXVlLCBjb25zdGFudCBzdHJldGNoIHRvIGxvY2sgb24gdG8uCgoKYGBge3J9CnByaW1lcnNfMTZzIDwtIHNxa18xNnMxMTRfMjQgJT4lCiAgc2VsZWN0KG5hbWUsIGhlYWQgPSBmb3J3YXJkLCB0YWlsID0gcmV2ZXJzZSkgJT4lCiAgcGl2b3RfbG9uZ2VyKGMoImhlYWQiLCAidGFpbCIpLAogICAgICAgICAgICAgICBuYW1lc190byAgPSAiaGVhZGluZyIsCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJzZXF1ZW5jZSIpICU+JQogIG5lc3QoLmJ5ID0gIm5hbWUiKSAlPiUKICBkZWZyYW1lKCkgJT4lCiAgbWFwKFwoeCkgYXMubGlzdChkZWZyYW1lKHgpKSkKYGBgCgpgYGB7cn0KcHJpbWVyX2Zhc3RhIDwtIGZ1bmN0aW9uKHgsIGlkeCkgewogIGRpcl9wYXRoIDwtIHBhc3RlMCgicmVhZHMvYmFyY29kZXMvIiwgaWR4KQogIAogIGRpcl9jcmVhdGUoZGlyX3BhdGgpCiAgCiAgd3JpdGVfbGluZXMoCiAgICBwYXN0ZSgKICAgICAgIj5oZWFkIiwKICAgICAgcGx1Y2soeCwgImhlYWQiKSwKICAgICAgIj50YWlsIiwKICAgICAgcGx1Y2soeCwgInRhaWwiKSwKICAgICAgc2VwID0gIlxuIgogICAgKSwKICAgIGZpbGUgPSBwYXN0ZTAoZGlyX3BhdGgsICIvcHJpbWVyX3NldC5mYSIpCiAgKQp9CmBgYAoKYGBge3IsIHJlc3VsdHM9J2hpZGUnfQppbWFwKHByaW1lcnNfMTZzLCBcKHgsIGlkeCkgcHJpbWVyX2Zhc3RhKHgsIGlkeCkpCmBgYAoKPGRldGFpbHM+CjxzdW1tYXJ5PgpOb3cgeW91IHNob3VsZCBoYXZlIDI0IHN1YmRpcmVjdG9yaWVzIG5hbWVkIGZvciB0aGVpciBiYXJjb2RlIHRpdGxlLCBlYWNoIGNvbnRhaW5pbmcgb25lIGBwcmltZXJfc2V0LmZhYCBmaWxlIChzZWUgYmVsb3cpLgo8L3N1bW1hcnk+CgpgYGB7ciwgZWNobz1GQUxTRX0KZGlyX3RyZWUoInJlYWRzL2JhcmNvZGVzLyIpCmBgYAoKPC9kZXRhaWxzPgoK