crisprBwa
provides two main functions to align short DNA sequences to
a reference genome using the short read aligner BWA-backtrack (Li and Durbin 2009)
and return the alignments as R objects: runBwa
and runCrisprBwa
.
It utilizes the Bioconductor package Rbwa
to access the BWA program
in a platform-independent manner. This means that users do not need to install
BWA prior to using crisprBwa
.
The latter function (runCrisprBwa
) is specifically designed
to map and annotate CRISPR guide RNA (gRNA) spacer sequences using
CRISPR nuclease objects and CRISPR genomic arithmetics defined in
the Bioconductor package crisprBase.
This enables a fast and accurate on-target and off-target search of
gRNA spacer sequences for virtually any type of CRISPR nucleases.
It also provides an off-target search engine for our main gRNA design package crisprDesign of the
crisprVerse ecosystem. See the
addSpacerAlignments
function in crisprDesign
for more details.
This package is supported for macOS and Linux only. Package was developed and tested on R version 4.2.1.
crisprBwa
can be installed from from the Bioconductor devel branch
using the following commands in a fresh R session:
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(version="devel")
BiocManager::install("crisprBwa")
To use runBwa
or runCrisprBwa
, users need to first build a BWA
genome index. For a given genome, this step has to be done only once.
The Rbwa
package conveniently provides the function bwa_build_index
to build a BWA index from any custom genome from a FASTA file.
As an example, we build a BWA index for a small portion of the human
chromosome 12 (chr12.fa
file provided in the crisprBwa
package) and
save the index file as myIndex
to a temporary directory:
library(Rbwa)
fasta <- system.file(package="crisprBwa", "example/chr12.fa")
outdir <- tempdir()
index <- file.path(outdir, "chr12")
Rbwa::bwa_build_index(fasta,
index_prefix=index)
To learn how to create a BWA index for a complete genome or transcriptome, please visit our tutorial page.
runCrisprBwa
As an example, we align 5 spacer sequences (of length 20bp) to the custom genome built above, allowing a maximum of 3 mismatches between the spacer and protospacer sequences.
We specify that the search is for the wildtype Cas9 (SpCas9) nuclease
by providing the CrisprNuclease
object SpCas9
available through the
crisprBase
package. The argument canonical=FALSE
specifies that
non-canonical PAM sequences are also considered (NAG and NGA for SpCas9).
The function getAvailableCrisprNucleases
in crisprBase
returns a character
vector of available crisprNuclease
objects found in crisprBase
.
We also need to provide a BSgenome
object corresponding to the reference
genome used for alignment to extract protospacer and PAM sequences of the
target sequences.
library(crisprBwa)
library(BSgenome.Hsapiens.UCSC.hg38)
## Loading required package: BSgenome
## Loading required package: BiocGenerics
##
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:stats':
##
## IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
##
## Filter, Find, Map, Position, Reduce, anyDuplicated, aperm, append,
## as.data.frame, basename, cbind, colnames, dirname, do.call,
## duplicated, eval, evalq, get, grep, grepl, intersect, is.unsorted,
## lapply, mapply, match, mget, order, paste, pmax, pmax.int, pmin,
## pmin.int, rank, rbind, rownames, sapply, setdiff, sort, table,
## tapply, union, unique, unsplit, which.max, which.min
## Loading required package: S4Vectors
## Loading required package: stats4
##
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:base':
##
## I, expand.grid, unname
## Loading required package: IRanges
## Loading required package: GenomeInfoDb
## Loading required package: GenomicRanges
## Loading required package: Biostrings
## Loading required package: XVector
##
## Attaching package: 'Biostrings'
## The following object is masked from 'package:base':
##
## strsplit
## Loading required package: rtracklayer
data(SpCas9, package="crisprBase")
crisprNuclease <- SpCas9
bsgenome <- BSgenome.Hsapiens.UCSC.hg38
spacers <- c("AGCTGTCCGTGGGGGTCCGC",
"CCCCTGCTGCTGTGCCAGGC",
"ACGAACTGTAAAAGGCTTGG",
"ACGAACTGTAACAGGCTTGG",
"AAGGCCCTCAGAGTAATTAC")
runCrisprBwa(spacers,
bsgenome=bsgenome,
crisprNuclease=crisprNuclease,
n_mismatches=3,
canonical=FALSE,
bwa_index=index)
## [runCrisprBwa] Using BSgenome.Hsapiens.UCSC.hg38
## [runCrisprBwa] Searching for SpCas9 protospacers
## spacer protospacer pam chr pam_site strand
## 1 AAGGCCCTCAGAGTAATTAC AAGGCCCTCAGAGTAATTAC AGA chr12 170636 +
## 2 ACGAACTGTAAAAGGCTTGG ACGAACTGTAAAAGGCTTGG AGG chr12 170815 -
## 3 ACGAACTGTAACAGGCTTGG ACGAACTGTAAAAGGCTTGG AGG chr12 170815 -
## 4 AGCTGTCCGTGGGGGTCCGC AGCTGTCCGTGGGGGTCCGC AGG chr12 170585 +
## 5 CCCCTGCTGCTGTGCCAGGC CCCCTGCTGCTGTGCCAGGC CGG chr12 170609 +
## n_mismatches canonical
## 1 0 FALSE
## 2 0 TRUE
## 3 1 TRUE
## 4 0 TRUE
## 5 0 TRUE
The function runBwa
is similar to runCrisprBwa
,
but does not impose constraints on PAM sequences.
It can be used to search for any short read sequence in a genome.
Seed-related off-targets caused by mismatch tolerance outside of the
seed region is a well-studied and characterized problem observed in RNA
interference (RNAi) experiments. runBWa
can be used to map shRNA/siRNA seed
sequences to reference genomes to predict putative off-targets:
seeds <- c("GTAAGCGGAGTGT", "AACGGGGAGATTG")
runBwa(seeds,
n_mismatches=2,
bwa_index=index)
## query chr pos strand n_mismatches
## 1 AACGGGGAGATTG chr12 68337 - 2
## 2 AACGGGGAGATTG chr12 1666 - 2
## 3 AACGGGGAGATTG chr12 123863 + 2
## 4 AACGGGGAGATTG chr12 151731 - 2
## 5 AACGGGGAGATTG chr12 110901 + 2
## 6 GTAAGCGGAGTGT chr12 101550 - 2
sessionInfo()
## R version 4.2.1 (2022-06-23)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.5 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas.so
## LAPACK: /home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_GB LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] BSgenome.Hsapiens.UCSC.hg38_1.4.4 BSgenome_1.66.0
## [3] rtracklayer_1.58.0 Biostrings_2.66.0
## [5] XVector_0.38.0 GenomicRanges_1.50.0
## [7] GenomeInfoDb_1.34.0 IRanges_2.32.0
## [9] S4Vectors_0.36.0 BiocGenerics_0.44.0
## [11] crisprBwa_1.2.0 Rbwa_1.2.0
## [13] BiocStyle_2.26.0
##
## loaded via a namespace (and not attached):
## [1] lattice_0.20-45 Rsamtools_2.14.0
## [3] digest_0.6.30 utf8_1.2.2
## [5] R6_2.5.1 evaluate_0.17
## [7] pillar_1.8.1 zlibbioc_1.44.0
## [9] rlang_1.0.6 jquerylib_0.1.4
## [11] Matrix_1.5-1 rmarkdown_2.17
## [13] BiocParallel_1.32.0 readr_2.1.3
## [15] stringr_1.4.1 bit_4.0.4
## [17] RCurl_1.98-1.9 DelayedArray_0.24.0
## [19] compiler_4.2.1 xfun_0.34
## [21] pkgconfig_2.0.3 htmltools_0.5.3
## [23] tidyselect_1.2.0 SummarizedExperiment_1.28.0
## [25] tibble_3.1.8 GenomeInfoDbData_1.2.9
## [27] bookdown_0.29 codetools_0.2-18
## [29] matrixStats_0.62.0 XML_3.99-0.12
## [31] fansi_1.0.3 crayon_1.5.2
## [33] tzdb_0.3.0 GenomicAlignments_1.34.0
## [35] bitops_1.0-7 grid_4.2.1
## [37] jsonlite_1.8.3 lifecycle_1.0.3
## [39] magrittr_2.0.3 vroom_1.6.0
## [41] cli_3.4.1 stringi_1.7.8
## [43] cachem_1.0.6 crisprBase_1.2.0
## [45] bslib_0.4.0 ellipsis_0.3.2
## [47] vctrs_0.5.0 rjson_0.2.21
## [49] restfulr_0.0.15 tools_4.2.1
## [51] bit64_4.0.5 archive_1.1.5
## [53] Biobase_2.58.0 glue_1.6.2
## [55] hms_1.1.2 MatrixGenerics_1.10.0
## [57] parallel_4.2.1 fastmap_1.1.0
## [59] yaml_2.3.6 BiocManager_1.30.19
## [61] knitr_1.40 sass_0.4.2
## [63] BiocIO_1.8.0
Li, Heng, and Richard Durbin. 2009. “Fast and Accurate Short Read Alignment with Burrows–Wheeler Transform.” Bioinformatics 25 (14): 1754–60.