test_that("add_context_seq works on toy example data", {
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
cts_df <- add_context_seq(toy_junc_df, toy_transcripts, size = 400, bsg = bsg)
expect_true(nrow(cts_df) == nrow(toy_junc_df))
expect_true(all(c("cts_seq", "cts_junc_pos", "cts_id") %in% names(cts_df)))
})
test_that("add_context_seq works on toy example data with keep_ranges", {
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
cts_df <- add_context_seq(toy_junc_df, toy_transcripts, size = 400, bsg = bsg,
keep_ranges = TRUE)
expect_true(nrow(cts_df) == nrow(toy_junc_df))
expect_true(all(c("cts_seq", "cts_junc_pos", "cts_id") %in% names(cts_df)))
expect_true(all(c("tx_lst", "tx_mod_lst") %in% names(cts_df)))
expect_true(class(cts_df$tx_lst[[1]]) == "GRanges")
expect_true(class(cts_df$tx_mod_lst[[1]]) == "GRanges")
})
test_that("add_context_seq does not fail on predicted intron retentions at the end and beginning of a transcript ", {
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
df <- tibble(junc_id = c("chr2:152230258-152230259", "chr2:152222655-152222656"),
tx_id = c("ENST00000460812","ENST00000460812" ))
cts_df <- add_context_seq(df, toy_transcripts, size = 400, bsg = bsg,
keep_ranges = TRUE)
expect_true(nrow(cts_df) == nrow(df))
expect_true(all(is.na(cts_df$cts_seq)))
})
test_that("add_context_seq generates expected context sequences", {
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
seq1 = "AAGAAGACTTGACTTGGCTTAAAGGCATTGGTTGCTATGCCTATGATACCCCTGATTTCACTCTGGCTGAAAAGAACAAGACTCTCTACAGCAAGTATAAGTATAAAGAAGTATTTGAAAGGACAAAGTCAGATTTCAAGTATGTTGCCGACTCTCCGATCAATAGGCATTTCAAGTATGCAACTCAATTGATGAATGAGATATGTTGACTGCTCTCTACAATTCGCATATGTGGAGCCAGGTAATGTCTGATGGGATGTGAAGAAGGAGGTTTAGAAGAAGTCTTGGATGCATTCCCTTGTATGCTTTCATTGATTTCCTCTTCCACTCCCTGCCCATGCTGGCTTCATATGGTAAAGCTATGTAAATATTCATTCCTTGTAAATGATCTCTGAATGTG"
seq3 = "AAGAAGTATTTGAAAGGACAAAGTCAGATTTCAAGTATGTTGCCGACTCTCCGATCAATAGGCATTTCAAGTATGCAACTCAATTGATGAATGAGAGAAAATATAAATCTAGTGCCAAGATGTTTCTGCAACATGGATGTAATGAAATTCTGCGTCCAGATATGTTGACTGCTCTCTACAATTCGCATATGTGGAGCCAGGTAATGTCTGATGGGATGTGAAGAAGGAGGTTTAGAAGAAGTCTTGGATGCATTCCCTTGTATGCTTTCATTGATTTCCTCTTCCACTCCCTGCCCATGCTGGCTTCATATGGTAAAGCTATGTAAATATTCATTCCTTGTAAATGATCTCTGAATGTGGCCAAAGGTGATGGGACAGTGGTCATCCGTACATCATCTGACACTTTCAGAACTCTTAATAAAATTAACTGATTCTTTCAAGTGTTATTTCCAAAGTGGTATAACATTAATTTATACTTTTCAGTATTTGCCTCAAAGAAATAGATTCCTTAGAGATTGAAGATAGTAAGTAGATTCAACAGCATGTAAAAGGTCTGAATATTTAATGTTTTCATCTAATGTGTCTCTTGTTCAATTATCACTACAACTGTTGCAGGGAGATGAGGATTACCGTGCAGCTCTATGAATATTGTATATATTCATGGCGCCTCTTGACTTTGATGCTGAATTGCTAGGTTATTTCCAGCACATCTGATCCCACACACACAGGTTAACAGTGTCTCTGATAATAATGCCTTTTTAGAAGGCCAACTGAAGCATGCACTTTCCAGCACATGCTGAAAGGTAAATTTGATGCAGCAATAAACAGTGATAATTGGTAACTACCAGACACAATGTTAGTAATAATACCATTTTTCCCAGACCAAAAAAAAAAAGTTAATTGAGCTTTCCTCTTAGCAACTTGTTTTGTCATTTTAGTTTACCATGAAATCAATATGTGAAATGAGGAGGTTAAGCTCCAATTAAGAGCTTAACCTCCTCATTTCTCCTCCTATAAATATCCTGTTTGCCTGAACTTCCTCCTTTGTCCTTATATGATCCTCAAATAGTTGTGCATGAAATTTTATGGTGCTCTCTGTATCTGTCCTGCTTAAAACAGCTTCTGTGCATGAAAATAATTATGACTTGAAAATTGCAAAAACAAATGAATTTTTTAAAATGATAAATACTTCATATATACTCATTCTTTATTTTACATCCCTGTTTCATCTTTGACATGGAAAAATGCCTTTGGAGATTGTACATGTTCAATACAATATGTTATGAGTAAAACAATATTTGTCAGACTCCAGAGAACAGGTTCTAGTCCTGCTCTGAGATTTGGTCTAAATGTGCCCTTGGGTCAGTCTCGTAACCTCTGGGGGCCTCCGAGTACATGTGTATAAAACATATTGGAACTTGGGAGGCTGAGGCAGAAGAATTGCTTGAATCTGGGAGGTGGAGGTTGCAGTGAGCCGAGATCGCACCACTGCACTCCAGCCTGGGTGACAGAGTAAGACTCCGTCTCGGAGGGAAACAAAAAAAGGAAATTATTAGTAGTAGTATCATCTGCTCACTCCATTTCACTTTTGCTATCAGACACAAATTTATAGTAAACATTTCCAGTTAGGAATTAAAGAGAAAGCTAGATACCATCTCCCACTCTGGTGTTTCAAGAGGACAATTAGATACCTTAAAGCCCACTCTACAACTTCTTAGAGCTCTTTCTTCTCTTCCACAATTTAGATCAAATACAGGAAAAACTATGAAAAATCAAAGGACAAATTTACCTCAATTGTGGATACTCCAGAACACCTGCGTACTACAAAAGTCAACAAACAAATCAGCGATATCCTTTATAAATTGGAATACAACAAGGCCAAACCCAGAGGCTACACCACAATCCACGACACACCCATGTTGCTGCATGTCCGCAAGGTTAAAGA"
seq15 = "AAAACTGGCATTATTGATTATGGAATCCGTCTCAATAGGAGTGAAAGATGGGATGCCTATTGCTACAACCCACACGGTGTGTTAAAAATAATAATTTTATGTTTTGCAAAAACAGTTCCATGCTGCTAAGAGGTTGTTAAAAAAGAAATGGCTACTTTTTCCAGAAATAATTGATTTTGGTAATAATAACTACTACTAATAACTACAATTCATAAAGTGCTTATACTATACCCGACATTGAGTTGTGTTCCTTCGTCTACACTCTAACTTAATATTCACAATAATTCTTCAAGGAGCTATTGTTATACCTATTTTAGAAATCAGGAAATTGAAACTTAGAGAATTAAGTAACCCCAAATCAGGAGTCAATAATGATTAGGCAGATGGGACTGAGAATTCAGATCTTCTCTGTGCCAGGGAACTTCCCAGCCATAAAGAAAAAGAAAATAAAAAAGCAGATTAAAAACTTGTCACAGTAAATTAGCTAAAACAATAAAGTGATGCTACCAAATGGTAACTATTCAAAATTGTCCTTTTGATACAACGGGGAAAAGGAGACAAAGTAAACAAATAAATTCTTTCCTTAATTTCTTTTTGTGTATATATGCTAGTACTTCCAAACTAAGCAACTCTAATTCTATGGTTTAACAATTATATACTGTATATACTAGCTATCATTATACCATATATTTTTATTCATATTTTTTCCATGTTTGCTTGCAACTAGGAAATAATGAGAAAATTAACTCATAATTACTATAAAGAATTATTCTTAGGTCACGTTCTTGGAGAAAAAGTAGGCTGTTCTTTTTGGGTATATTTCCACCAGGACAATGTTACAAAATATTACAGTATGTTACAAAGTCTTCCTGGCATTTAGGATCATAAACATCCTCAGATGTGTCCCATTTGGATTTACCCTATAAGAAATTCCATAACACAGTAGGAGAGTTACATAGTGAGGTTTTAGTGTATTATTATAAAATCTATTATTTAATTATATTAACATTTGGAGAATAGTTTCTCATGTCTGTAACTAACCTATATCTCAAAATTATGTGTAGTCCAAGTAGAAAGATTTTTGCCTACAGCTACAACTAGTCTTAACTGAGACAAAATAGGAATAAATACTTAACAGTGCATTTATGTAACTTTAACTTTCAAGTCACTTTGACATGCTTTAAGCTTATTTAGTCCTATACTATACAGTACTAATTTAGTCCTATATTTAGTTATGTCAACAATATGTATCTTCCTTTCCTCCCTCCCTCTCTTACATTTTCTTAAATATATTTATGCAGACCACTCTTTTTTACTCTTAAGAGTAACTCTTCTTTTCAAATGTATTCTCTGATTCTTCTTTCACTTGATAAACTTTAGGATCTCTGAGCTTCCACTGGATAATTTCCATAGATTAAACTCTAGAGTCATTGAAGAAGTGCCAATGAAATGGTCCTTTCAGTATTTCATTGCCCTTTCATAAGAATATAATCCTAAATTATAAATTATTATAAGTTGCTTTCTTTTCTCAGAGAGGCTGAATACACTCTGGGAATACAGAATCCTGGGAGATTTGTTTTTACCCAATTCTCAGTGCATTTAGCTCGCTTTTGGATTTGGTGGTATGCTGACTATTTAGGATGTGGTTAACTTGAAGGAGACTTGACCGCCTGAACTAGCACTGGGGGAACAGCTCACTGAAACATCACTGGAATAAAAAAAAAAAATAATGGCTTCACAAAAATAAAGCAATCATTATTGATTAATCAATGTCACCAAGTTAGAGCTGATATTCTAAATAATAGATGAGGCAGTAACTAGATATAACATAAAATATAGATCTAAATAAATATAGCCAAATAGGCAGCCAAATTAGTTCAATATTTGAATTTTTTCTAATCTATTAATATATACAACAAAGATTGGATGCTATGGGATGGAACAACTCGCTCCTAAAGCTGGCAATGTACATCCTTATGCAGACATACAAACTATGTGTTGTATATTTTATTATACAGTAAGAATAGCTTATGGGTTGCATAACATCCTTAAATTATTTTCTGTATTTTATCCTTAGAATAACCCTGTGTGATAGATAATGGGAAAGGTATGGCTACATTTATTTTACCAATGAAGAAAATGAAGTGTAGAGTAGTCACCAAGCTTGAACTAGATCCTTGACCTTCATTTGTTGCTCCCCAGCCTTTCTATGCTCCTGTTCTGCTTTATTTCATCAAAGCAGAACAGGAGCATAGAAAGGCTGGGGAGCATCTTTTTTCTAGACATTAGACACTTACCTGATATGGAATTAAAATTAACCAGGGCTTCTTCCTAGCTTTCCCTCTAGGTCATATTGCAAACCACTGATTCTGAGACAGCGTTTTTGTTTTGTTTTATATGTGTTTGTTTTTCTTATGACAATTTATAACATATTGAAATCTGTTAAATGATGAATGACTTGGAAAAACAAACATGAATATCTCCATCAAATCTTAAAATATTAGGATTAGGGTATTAGTTTAAAATCAGTAAAGGCAGTATACAGAATAATTATAAATTATTCCTTTTAAGTGGATTAGAGTGACTTTAAAGTCTCTTGCGATCATGAAATTGTATAATGATTTTCCAAGCAGAATTTATGGGATCCATTATTCTAAGTGCTTGTGGCCCTGAAGACATATGGTGACACCACAGGGCAAAGTCCCTACCATCTTGATAGGGCTGTTTGTAATATAAATGTGTATATATTTGTCAAAATACATAGACATAGGCCAGGTGCCATGGCTCACACCTATAATCCCAACACTTTGGGAAGCTGAGGTGGGTCGATCACCAGAGGTCAGGAGTTCAAGTCCAACCTGGCCCACATGGCAAGACCCTATCTCTACTAAAAATACAAAAATTAGCCAGACGTGGTGGCTCATGCCTGTAATCCCAGCTACTCAGAAGGCTGAGGCATAAGAATTTCTTGAACAATTGCAGAGGCTACAGTGAGCCGAGATTGTGCCACTGCACTCCAGCCTGGGCAACAGAGTGAGACTCCATTTCAAAAAACAACAACAACAAAAAATAGGCGTGTGCACAAAAGACTTGTTATGTTATGCCTTAAAAGATAAAATAAAAATATTTTTAAAAGTACAATTAATTACATTACAATTCTTTTAATTTTAAAATTTATTTTTATTTTTATTTTTTAGAGCTGGAGGTCTCACTATGTTGCCCAGGTTGGCCTCAAACTCCTAGGCTCATGAGATTCTTCTGCCTCAGCCTCCCAATTAGCTGGGACTAAGGGTGAGCATCACTACACCTAGCCATTTTTTTCTTACTATATTTACTTTTTTAAAATTCATGGCTGGGCACAGTGGCTCATGTTTATAATCTCAGCACTTTCAGAGGCAGAGGCAGGAGGCTCACTTGAGGTCAGGAGTTCAATACCAGCCTGGGCAACATTGCAAGATCCATTTCCACACAAAAAAAATAAAAATTACCAGGGCTGGGTGGCACATGCCTGTCATCCCAACTACTTAGGAGGCTGAAGTGGGAGGATTGCTTGAGCCAAGGAGTTCAAGGCTGCAATAAGCTATGATTGGGTCACCGCACTCCAGCCTAGGTGACAGAGCGAGATCTTGTCTCAAAATATAAAAATAAAAATAAATTCACAAAGAGTCCATGTTCATTTTAGAGAATTTAGTAACTATTGATGAAAAAATACATTTATTCTTTAGCTAAAAGCATACATAATATACCATAGATGCTGTATACTAAGACATTTAACATTTCATAAAAAGTAATAGATTGCTAAGAAATGTCATTTTTAACAGGGATAATGTTTTTCCTAATGCTTTGGGGTTTTTACGTTTTTTTTCTTCTCATTTCAGCAAAGGAGTGTGGTGGCGTCTTTACAGATCCAAAGCAAATTTTTAAATCTCCAGGCTTCCCAAATGAGTACGAAGATAACCAAATCTGCTACTGGCACATTAGACTCAAGTATGGTCAGCGTATTCACCTGAGTTTTTTAGATTTTGACCTTGAAGATGACCCAGGTTGCTTGGCTGATTATGTTGAAATATATGACAGT"
seq11 = "TGGCTATTTGCTTGAAAAGCGGGAAACCCAGGCTGTTAACTGGACTAAGGTCAACAGAAAACCTATTATAGAAAGAACATTAAAAGCAACAGGTCTTCAAGAAGGTACCGAATATGAGTTCCGTGTTACAGCTATAAATAAAGCTGGACCAGGCAAACCCAGTGACGCATCCAAGGCCGCTTATGCTCGGGACCCTCAGTTTCCACCTGAGGGAGAACTTGATGCGGACTTAAGGAAGACACTCATATTACGTGCTGGAGTTACTATGAGACTATATGTACCAGTAAAAGGACGCCCACCTCCAAAGATTACTTGGTCTAAACCAAATGTCAATCTAAGAGACAGGATTGGACTGGACATAAAGTCAACTGACTTTGACACTTTCTTGCGCTGTGAAAAT"
expectes_seqs <- c(seq1, seq3, seq11, seq15)
junc_ids <- c("chr2:152389996-152392205:-","chr2:152389955-152389956:-","chr2:179445336-179446633:-", "chr2:152226533-152226534:+")
df_test <- toy_junc_df %>%
filter(junc_id %in% junc_ids)
cts_df <- add_context_seq(df_test, toy_transcripts, size = 400, bsg = bsg)
expect_true(all(cts_df$cts_seq == expectes_seqs))
})
test_that("add_context_seq generates expected context sequences for intron retentions", {
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
cts_df <- add_context_seq(toy_junc_df, toy_transcripts, size = 400, bsg = bsg)
# chr2:152226533-152226534:+ and chr2:152222731-152222732:+ are juncs of the same IR event
# they should result in the same context sequence
expect_true(cts_df$cts_seq[which(cts_df$junc_id == "chr2:152226533-152226534:+")]
== cts_df$cts_seq[which(cts_df$junc_id == "chr2:152222731-152222732:+")])
})
test_that("add_context_seq works on when tx_id is not contained in transcripts", {
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
junc_df <- toy_junc_df
# remove one transcript ID from transcripts object
transcripts <- toy_transcripts[-which(names(toy_transcripts) == "ENST00000342992")]
cts_df <- add_context_seq(junc_df, transcripts, size = 400, bsg = bsg)
expect_true(nrow(cts_df) == nrow(toy_junc_df))
expect_true(all(c("cts_seq", "cts_junc_pos", "cts_id") %in% names(cts_df)))
expect_true(all(is.na(cts_df[cts_df$tx_id == "ENST00000342992", "cts_seq"])))
})
test_that("add_context_seq is independed of junction combinations", {
# skip on CI because it requires long download of a full GTF file
skip("Long download")
# library(EnsDb.Hsapiens.v75)
# library(tidyverse)
# library(AnnotationDbi)
# edb <- EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75
# transcripts <- ensembldb::exonsBy(edb, by = "tx")
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
# transcript database
# see: https://gitlab.rlp.net/tron/splice2neo/-/issues/38#note_235974
# txdb_file <- "/path/to/file.txdb.sqlite"
# txdb <- loadDb(txdb_file)
gtf_url <- "ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_34/GRCh37_mapping/gencode.v34lift37.annotation.gtf.gz"
txdb <- suppressWarnings(GenomicFeatures::makeTxDbFromGFF(gtf_url))
transcripts <- GenomicFeatures::exonsBy(txdb, by = c("tx"), use.names = TRUE)
# Build a GRangesList with cds composed of individual exon ranges
# cds <- GenomicFeatures::cdsBy(txdb, by = c("tx"), use.name = TRUE)
junc_df <- tibble::tibble(
junc_id = c(
"chr10:32832227-32832228:+",
"chr10:32832227-32832228:+",
"chr10:32832227-32832228:+"
),
tx_id = c(
"ENST00000639629.1_3",
"ENST00000639453.1_1",
"ENST00000639041.1_4"
)
)
#=============================================================================
# jx <- junc_df$junc_id %>% junc_to_gr()
# tx_gr <- junc_df$tx_lst %>%
# GenomicRanges::GRangesList() %>%
# base::range() %>%
# unlist()
# findOverlaps(jx, tx_gr)
#=============================================================================
# tx <- junc_df$tx_lst %>%
# GenomicRanges::GRangesList()
# tx_alt <- modify_tx(tx, jx)
#
# SplicingGraphs::plotTranscripts(c(tx, tx_alt), from = 32750000, to = 32850000)
# SplicingGraphs::plotTranscripts(c(tx, tx_alt))
#=============================================================================
cts_df <- add_context_seq(junc_df, transcripts, size = 400, bsg = bsg)
expect_true(is.na(cts_df$junc_pos_tx[[3]]))
expect_true(is.na(cts_df$cts_seq[[3]]))
})
test_that("add_context_seq workds for example with neg issue 46", {
# skip on CI because it requires long download of a full GTF file
skip("Long download")
# library(splice2neo)
# library(GenomicFeatures)
# library(AnnotationDbi)
# library(Biostrings)
requireNamespace("BSgenome.Hsapiens.UCSC.hg19", quietly = TRUE)
bsg <- BSgenome.Hsapiens.UCSC.hg19::BSgenome.Hsapiens.UCSC.hg19
# transcript database
# see: https://gitlab.rlp.net/tron/splice2neo/-/issues/38#note_235974
# txdb_file <- "/path/to/file.txdb.sqlite"
gtf_url <- "ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_34/GRCh37_mapping/gencode.v34lift37.annotation.gtf.gz"
txdb <- suppressWarnings(GenomicFeatures::makeTxDbFromGFF(gtf_url))
transcripts <- GenomicFeatures::exonsBy(txdb, by = c("tx"), use.names = TRUE)
df = dplyr::tibble(
junc_id = "chr1:113153625-113162266:-",
tx_id = "ENST00000492274.1_2"
) %>%
add_context_seq(transcripts, size = 400, bsg = bsg, keep_ranges = TRUE)
df$tx_lst[[1]]
df$tx_mod_lst[[1]]
df$cts_seq
# "AAGAAAGCCGAGTGATGGAATCACCGCGGCGGCCGTCGGAAGGACCCGCCCGGAAACGCCGACCAAGAGGGCCCCATGTCAGTTATGCGCGGGAGTGACGTCTCCTAACGCCAGCGCCCGCGCCCGCGCCCCAGGAAGTAGGGTTTGCCTTAGATATTTGAATGGTGGTACTTCCATAAGCATGGCACATCTTTTATTGAGCAAGTATCTGTAAGCCATTTGCAACCACTGATGGGAGGAACAGAGAGCAGCATTTCAGAACCAGGTTCTCCTTCGAGGAACAGAGAAAATGAAACCAGCAGACAGAATTTGTCAGGTGACTACTTTTCTAATGTGTTTTCAGAGCTGTGTAT"
df$cts_junc_pos
cts_1 = stringr::str_sub(df$cts_seq, 1, df$cts_junc_pos)
cts_2 = stringr::str_sub(df$cts_seq, df$cts_junc_pos + 1)
# cts_1 = stringr::str_sub(df$cts_seq, 1, 153)
# cts_2 = stringr::str_sub(df$cts_seq, 153 + 1)
cts_1 %>% str_sub(-6)
cts_2 %>% str_sub(1, 6)
exp_1 <- Biostrings::getSeq(bsg, "chr1", 113153625 - 5, 113153625)
exp_2 <- Biostrings::getSeq(bsg, "chr1", 113162266, 113162266 + 5)
exp_1
exp_2
ex_gr <- GenomicRanges::GRanges(c(
"chr1:113153620-113153625:-",
"chr1:113162266-113162271:-"
))
expected_seq = "CCTTAGATATTT"
Biostrings::getSeq(bsg, ex_gr)
# wrong order
GenomicFeatures::extractTranscriptSeqs(bsg, GenomicRanges::GRangesList(ex_gr))
# correct order
GenomicFeatures::extractTranscriptSeqs(bsg, GenomicRanges::GRangesList(ex_gr[2:1]))
# wrong order
GenomicFeatures::extractTranscriptSeqs(bsg, GenomicRanges::GRangesList(sort(ex_gr)))
# fixed?
grl <- GenomicRanges::GRangesList(ex_gr)
grl_sorted <- S4Vectors::revElements(grl, any(BiocGenerics::strand(grl) == "-"))
GenomicFeatures::extractTranscriptSeqs(bsg, grl_sorted)
expect_equal(as.character(GenomicFeatures::extractTranscriptSeqs(bsg, grl_sorted)), expected_seq)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.