1 Introduction

tRNAscan-SE (Lowe and Eddy 1997) can be used for prediction of tRNA genes in whole genomes based on sequence context and calculated structural features. Many tRNA annotations in genomes contain or are based on information generated by tRNAscan-SE, for example the current SGD reference genome sacCer3 for Saccharomyces cerevisiae. However, not all available information from tRNAscan-SE end up in the genome annotation. Among these are for example structural information, additional scores and the information, whether the conserved CCA-end is encoded in the genomic DNA. To work with this complete set of information, the tRNAscan-SE output can be parsed into a more accessible GRanges object using tRNAscanImport.

2 Getting started

The default tRNAscan-SE output, either from running tRNAscan-SE (Lowe and Eddy 1997) locally or retrieving the output from the gtRNADb (Chan and Lowe 2016), consist of a formatted text document containing individual text blocks per tRNA delimited by an empty line.

library(tRNAscanImport)
yeast_file <- system.file("extdata",
                          file = "yeast.tRNAscan",
                          package = "tRNAscanImport")

# output for sacCer3
# Before
readLines(con = yeast_file, n = 7L)
## [1] "chrI.trna1 (139152-139254)\tLength: 103 bp"                                                                  
## [2] "Type: Pro\tAnticodon: TGG at 33-35 (139184-139186)\tScore: 62.1"                                             
## [3] "Possible intron: 37-67 (139188-139218)"                                                                      
## [4] "HMM Sc=37.90\tSec struct Sc=24.20"                                                                           
## [5] "         *    |    *    |    *    |    *    |    *    |    *    |    *    |    *    |    *    |    *    |  " 
## [6] "Seq: GGGCGTGTGGTCTAGTGGTATGATTCTCGCTTTGGGcgacttcctgattaaacaggaagacaaagcaTGCGAGAGGcCCTGGGTTCAATTCCCAGCTCGCCCC"
## [7] "Str: >>>>>.>..>>>.........<<<.>>>>>......................................<<<<<.....>>>>>.......<<<<<<.<<<<<."

3 Importing as GRanges

To access the information in a BioC context the import as a GRanges object comes to mind. import.tRNAscanAsGRanges() performs this task by evaluating each text block using regular expressions.

# output for sacCer3
# After
gr <- import.tRNAscanAsGRanges(yeast_file)
head(gr, 2)
## GRanges object with 2 ranges and 18 metadata columns:
##       seqnames        ranges strand |        no tRNA_length   tRNA_type
##          <Rle>     <IRanges>  <Rle> | <integer>   <integer> <character>
##   [1]     chrI 139152-139254      + |         1          72         Pro
##   [2]     chrI 166267-166339      + |         2          73         Ala
##       tRNA_anticodon tRNA_anticodon.start tRNA_anticodon.end tRNAscan_score
##          <character>            <integer>          <integer>      <numeric>
##   [1]            TGG                   33                 35           62.1
##   [2]            TGC                   34                 36             76
##                      tRNA_seq                tRNA_str tRNA_CCA.end
##                <DNAStringSet>   <DotBracketStringSet>    <logical>
##   [1] GGGCGTGTGG...AGCTCGCCCC <<<<<.<..<...>>>.>>>>>.        FALSE
##   [2] GGGCACATGG...GTTGCGTCCA <<<<.<<..<...>>>>.>>>>.        FALSE
##       tRNAscan_potential.pseudogene tRNAscan_intron.start
##                           <logical>             <integer>
##   [1]                         FALSE                139188
##   [2]                         FALSE                  <NA>
##       tRNAscan_intron.end tRNAscan_intron.locstart tRNAscan_intron.locend
##                 <integer>                <integer>              <integer>
##   [1]              139218                       37                     67
##   [2]                <NA>                     <NA>                   <NA>
##       tRNAscan_hmm.score tRNAscan_sec.str.score tRNAscan_infernal
##                <numeric>              <numeric>         <numeric>
##   [1]               37.9                   24.2              <NA>
##   [2]               53.4                   22.6              <NA>
##   -------
##   seqinfo: 17 sequences from an unspecified genome; no seqlengths
# Any GRanges passing this, can be used for subsequent function
istRNAscanGRanges(gr)
## [1] TRUE

The result can be used directly in R or saved as gff3/fasta file for further use, including processing the sequences for HTS read mapping or statistical analysis on tRNA content of the analyzed genome.

library(Biostrings)
library(rtracklayer)
# suppressMessages(library(rtracklayer, quietly = TRUE))
# Save tRNA sequences
writeXStringSet(gr$tRNA_seq, filepath = tempfile())
# to be GFF3 compliant use tRNAscan2GFF
gff <- tRNAscan2GFF(gr)
export.gff3(gff, con = tempfile())

4 Visualization

The tRNAscan-SE information can be visualized using the gettRNAFeaturePlots() function of the tRNA package, returning a named list of ggplot2 plots, which can be plotted or further modified. Alternatively, gettRNASummary() returns the aggregated information for further use.

# tRNAscan-SE output for hg38
human_file <- system.file("extdata",
                          file = "human.tRNAscan",
                          package = "tRNAscanImport")
# tRNAscan-SE output for E. coli MG1655
eco_file <- system.file("extdata",
                        file = "ecoli.tRNAscan",
                        package = "tRNAscanImport")
# import tRNAscan-SE files
gr_human <- import.tRNAscanAsGRanges(human_file)
gr_eco <- import.tRNAscanAsGRanges(eco_file)

# get summary plots
grl <- GRangesList(Sce = gr,
                   Hsa = gr_human,
                   Eco = gr_eco)
plots <- gettRNAFeaturePlots(grl)
plots$length
tRNA length.

Figure 1: tRNA length

plots$tRNAscan_score
tRNAscan-SE scores.

Figure 2: tRNAscan-SE scores

plots$gc
tRNA GC content.

Figure 3: tRNA GC content

plots$tRNAscan_intron
tRNAs with introns.

Figure 4: tRNAs with introns

plots$variableLoop_length
Length of the variable loop.

Figure 5: Length of the variable loop

5 Further reading

Further examples of working with tRNA information can be found in the vignette of the tRNA package.

6 Session info

sessionInfo()
## R version 3.6.0 (2019-04-26)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.2 LTS
## 
## Matrix products: default
## BLAS:   /home/biocbuild/bbs-3.9-bioc/R/lib/libRblas.so
## LAPACK: /home/biocbuild/bbs-3.9-bioc/R/lib/libRlapack.so
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        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] parallel  stats4    stats     graphics  grDevices utils     datasets 
## [8] methods   base     
## 
## other attached packages:
##  [1] rtracklayer_1.44.0   tRNAscanImport_1.4.2 tRNA_1.2.2          
##  [4] Structstrings_1.0.3  Biostrings_2.52.0    XVector_0.24.0      
##  [7] GenomicRanges_1.36.0 GenomeInfoDb_1.20.0  IRanges_2.18.1      
## [10] S4Vectors_0.22.0     BiocGenerics_0.30.0  BiocStyle_2.12.0    
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.1                  lattice_0.20-38            
##  [3] assertive.properties_0.0-4  Rsamtools_2.0.0            
##  [5] assertive.types_0.0-3       assertive.data.us_0.0-2    
##  [7] assertthat_0.2.1            digest_0.6.19              
##  [9] R6_2.4.0                    plyr_1.8.4                 
## [11] evaluate_0.14               assertive.code_0.0-3       
## [13] highr_0.8                   ggplot2_3.1.1              
## [15] pillar_1.4.1                assertive.strings_0.0-3    
## [17] zlibbioc_1.30.0             rlang_0.3.4                
## [19] lazyeval_0.2.2              Matrix_1.2-17              
## [21] assertive_0.3-5             assertive.data_0.0-3       
## [23] rmarkdown_1.13              labeling_0.3               
## [25] BiocParallel_1.18.0         stringr_1.4.0              
## [27] RCurl_1.95-4.12             munsell_0.5.0              
## [29] DelayedArray_0.10.0         compiler_3.6.0             
## [31] xfun_0.7                    pkgconfig_2.0.2            
## [33] htmltools_0.3.6             tidyselect_0.2.5           
## [35] SummarizedExperiment_1.14.0 tibble_2.1.3               
## [37] GenomeInfoDbData_1.2.1      bookdown_0.11              
## [39] matrixStats_0.54.0          assertive.sets_0.0-3       
## [41] codetools_0.2-16            XML_3.98-1.20              
## [43] withr_2.1.2                 crayon_1.3.4               
## [45] dplyr_0.8.1                 GenomicAlignments_1.20.0   
## [47] bitops_1.0-6                grid_3.6.0                 
## [49] assertive.base_0.0-7        gtable_0.3.0               
## [51] magrittr_1.5                assertive.models_0.0-2     
## [53] scales_1.0.0                stringi_1.4.3              
## [55] assertive.matrices_0.0-2    assertive.reflection_0.0-4 
## [57] assertive.datetimes_0.0-2   RColorBrewer_1.1-2         
## [59] tools_3.6.0                 Biobase_2.44.0             
## [61] glue_1.3.1                  purrr_0.3.2                
## [63] assertive.numbers_0.0-2     yaml_2.2.0                 
## [65] colorspace_1.4-1            BiocManager_1.30.4         
## [67] assertive.files_0.0-2       assertive.data.uk_0.0-2    
## [69] knitr_1.23                  Modstrings_1.0.2

References

Chan, Patricia P., and Todd M. Lowe. 2016. “GtRNAdb 2.0: An Expanded Database of Transfer Rna Genes Identified in Complete and Draft Genomes.” Nucleic Acids Research 44 (D1):D184–9. https://doi.org/10.1093/nar/gkv1309.

Lowe, T. M., and S. R. Eddy. 1997. “TRNAscan-Se: A Program for Improved Detection of Transfer Rna Genes in Genomic Sequence.” Nucleic Acids Research 25 (5):955–64.