diff --git a/README.md b/README.md index 0b6c4c9a93637bf032a1179c8fe883b93a92e2a7..6e1df6be39d7c8688b41abfc5b2dc8c80951b206 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ We recommend the use a [mamba](https://mamba.readthedocs.io/) (or conda) environ * Rsubread 2.16.0 * Rsamtools 2.16.0 * DSS 2.48.0 -* vgam 1.1_9 +* VGAM 1.1_9 * survcomp 1.52.0 diff --git a/data/MenT1/Msm.reference.tRNAs.with.CCA.fasta b/data/MenT1/Msm.reference.tRNAs.with.CCA.fasta new file mode 100644 index 0000000000000000000000000000000000000000..c6c296c1624a7c7ac5cce6c3c67cc729f93828fe --- /dev/null +++ b/data/MenT1/Msm.reference.tRNAs.with.CCA.fasta @@ -0,0 +1,94 @@ +>Msm.Ala-CGC.trna33 Mycobacterium_smegmatis_MC2_155_chr.trna33-AlaCGC (5550124-5550049) Ala (CGC) 76 bp Sc: 83.46 +GGGGCTATGGCGCAGTTGGTAGCGCGACTCGTTCGCATCGAGTAGGTCAGGGGTTCGATTCCCCTTAGCTCCAcca +>Msm.Ala-GGC.trna9 Mycobacterium_smegmatis_MC2_155_chr.trna9-AlaGGC (2213142-2213214) Ala (GGC) 73 bp Sc: 83.13 +GGGGCTATGGCGCAGTTGGTAGCGCACCACACTGGCAGTGTGGGGGTCAGGGGTTCGAATCCCCTTAGCTCCAcca +>Msm.Ala-TGC.trna2 Mycobacterium_smegmatis_MC2_155_chr.trna2-AlaTGC (10293-10368) Ala (TGC) 76 bp Sc: 86.37 +GGGGCCTTAGCTCAGTTGGTAGAGCGCTGCCTTTGCAAGGCAGATGTCAGGAGTTCGAATCTCCTAGGCTCCAcca +>Msm.Arg-ACG.trna27 Mycobacterium_smegmatis_MC2_155_chr.trna27-ArgACG (6410438-6410366) Arg (ACG) 73 bp Sc: 78.03 +GCGCCCGTAGCTCAACGGATAGAGCATCTGACTACGGATCAGAAGGTTAGGGGTTCGAATCCCTTCGGGCGCAcca +>Msm.Arg-TCT.trna15 Mycobacterium_smegmatis_MC2_155_chr.trna15-ArgTCT (4797480-4797552) Arg (TCT) 73 bp Sc: 74.64 +GCCTCCGTAGCTCAATGGATAGAGCATCGGCCTTCTAATCCGACGGTTGCAGGTTCGAGTCCTGCCGGGGGCGcca +>Msm.Arg-CCG.trna18 Mycobacterium_smegmatis_MC2_155_chr.trna18-ArgCCG (5058252-5058327) Arg (CCG) 76 bp Sc: 78.92 +GCCCCCGTAGCTCAGGGGATAGAGCGTCTGCCTCCGGAGCAGAAGGCCGCAGGTTCGAATCCTGCCGGGGGCAcca +>Msm.Arg-CCT.trna20 Mycobacterium_smegmatis_MC2_155_chr.trna20-ArgCCT (5685927-5685999) Arg (CCT) 73 bp Sc: 74.23 +GCCCTCGTAGCTCAGGGGATAGAGCACGGCTCTCCTAAAGCCGGTGTCGCAGGTTCGAATCCTGCCGGGGGCAcca +>Msm.Asn-GTT.trna37 Mycobacterium_smegmatis_MC2_155_chr.trna37-AsnGTT (4561282-4561207) Asn (GTT) 76 bp Sc: 79.73 +TCCCCTGTAGCTCAATTGGCAGAGCATTCGGCTGTTAACCGAAGGGTTGCTGGTTCGAGTCCAGCCGGGGGAGcca +>Msm.Asp-GTC.trna31 Mycobacterium_smegmatis_MC2_155_chr.trna31-AspGTC (5834285-5834209) Asp (GTC) 77 bp Sc: 94.44 +GGCCCTGTGGCGCAGTTGGTTAGCGCGCCGCCCTGTCACGGCGGAGGTCGCGGGTTCAAGTCCCGTCAGGGTCGCCA +>Msm.Cys-GCA.trna40 Mycobacterium_smegmatis_MC2_155_chr.trna40-CysGCA (3883718-3883645) Cys (GCA) 74 bp Sc: 57.51 +GCGGGTGTGGCTGAGTGGCTAGGCAGCGGCCTGCAAAGCCGTCTACACGGGTTCGAGTCCCGTCACTCGCTcca +>Msm.Cys-GCA.trna44 Mycobacterium_smegmatis_MC2_155_chr.trna44-CysGCA (2895245-2895172) Cys (GCA) 74 bp Sc: 76.31 +GGTGGAGTGGCCGAGTGGTGAGGCAACGGCCTGCAAAGCCGTGCACACGGGTTCGATTCCCGTCTCCACCTCCA +>Msm.Gln-CTG.trna10 Mycobacterium_smegmatis_MC2_155_chr.trna10-GlnCTG (2467984-2468058) Gln (CTG) 75 bp Sc: 64.27 +TGGGGTATGGTGTAATTGGCAACACAGCTGATTCTGGTTCAGCCATTCTAGGTTCGAGTCCTGGTACCCCAGCCA +>Msm.Gln-TTG.trna19 Mycobacterium_smegmatis_MC2_155_chr.trna19-GlnTTG (5509404-5509475) Gln (TTG) 72 bp Sc: 49.46 +TCCGTCGTGGTGTAATCGGCAGCACCTCTGATTTTGGTTCAGATAGTTCAGGTTCGAGTCCTGGCGACGGAGcca +>Msm.Glu-CTC.trna11 Mycobacterium_smegmatis_MC2_155_chr.trna11-GluCTC (2468127-2468202) Glu (CTC) 76 bp Sc: 61.50 +GCCCCCGTCGTCTAGCGGCCTAGGACGCCGCCCTCTCACGGCGGTAGCGTGGGTTCGAATCCCATCGGGGGTAcca +>Msm.Glu-TTC.trna30 Mycobacterium_smegmatis_MC2_155_chr.trna30-GluTTC (5834394-5834322) Glu (TTC) 73 bp Sc: 62.82 +GCCCCCATCGTCTAGTGGCCTAGGACGCCGCCCTTTCACGGCGGTAGCACGGGTTCGAATCCCGTTGGGGGTAcca +>Msm.Gly-CCC.trna47 Mycobacterium_smegmatis_MC2_155_chr.trna47-GlyCCC (760074-760001) Gly (CCC) 74 bp Sc: 81.73 +GCCGGTGTAGTTCAATGGCAGAACATCAGCTTCCCAAGCTGAATACGCGGGTTCGATTCCCGTCACCGGCTCCA +>Msm.Gly-GCC.trna43 Mycobacterium_smegmatis_MC2_155_chr.trna43-GlyGCC (2895346-2895271) Gly (GCC) 76 bp Sc: 89.46 +GCGGATGTAGCGCAGTTGGTAGCGCATCACCTTGCCAAGGTGAGGGTCGCGGGTTCGAATCCCGTCATCCGCTcca +>Msm.Gly-TCC.trna14 Mycobacterium_smegmatis_MC2_155_chr.trna14-GlyTCC (4764493-4764563) Gly (TCC) 71 bp Sc: 72.19 +GCGGGCGTAGCTCAATGGTAGAGCCCTAGTCTTCCAAACTAGCTACGCGGGTTCGATTCCCGTCGCCCGCTcca +>Msm.His-GTG.trna16 Mycobacterium_smegmatis_MC2_155_chr.trna16-HisGTG (4817832-4817907) His (GTG) 76 bp Sc: 77.37 +GTGGCTGTAGTTCAGTTGGTAGAGCACCAGGTTGTGATCCTGGCTGTCGCGGGTTCGAGTCCCGTCAGCCACCcca +>Msm.Ile-GAT.trna1 Mycobacterium_smegmatis_MC2_155_chr.trna1-IleGAT (10072-10148) Ile (GAT) 77 bp Sc: 88.31 +GGGCCTATAGCTCAGGCGGTTAGAGCGCTTCGCTGATAACGAAGAGGTCGGAGGTTCGAGTCCTCCTAGGCCCAcca +>Msm.Leu-CAA.trna42 Mycobacterium_smegmatis_MC2_155_chr.trna42-LeuCAA (3328766-3328690) Leu (CAA) 77 bp Sc: 53.44 +GCCCTCGTATCCCAACTGGCAGAGGAAACGGATTCAAAACCCGTACAGTGTGAGTTCGAATCTCACCGAGGGCACCA +>Msm.Leu-CAG.trna3 Mycobacterium_smegmatis_MC2_155_chr.trna3-LeuCAG (58144-58226) Leu (CAG) 83 bp Sc: 63.75 +GGGCGAGTGGCGGAATGGCAGACGCGCTGGCTTCAGGTGCCAGTGTCCTTCGGGACGTGGGGGTTCAAGTCCCCCTTCGCCCAcca +>Msm.Leu-GAG.trna13 Mycobacterium_smegmatis_MC2_155_chr.trna13-LeuGAG (4278994-4279079) Leu (GAG) 86 bp Sc: 60.48 +GTCCGAGTGGCGGAATGGCAGACGCGCTAGCTTGAGGTGCTAGTGCCCTATTAACGGGCGTGGGGGTTCAAGTCCCCCCTCGGACAcca +>Msm.Leu-TAA.trna34 Mycobacterium_smegmatis_MC2_155_chr.trna34-LeuTAA (5458984-5458911) Leu (TAA) 74 bp Sc: 63.84 +GCCCCCATAGCCCAATTGGCAGAGGCAGCGGACTTAAAATCCGCCAAGTGTCGGTTCGAGTCCGACTGGGGGCAcca +>Msm.Leu-TAG.trna35 Mycobacterium_smegmatis_MC2_155_chr.trna35-LeuTAG (4992927-4992841) Leu (TAG) 87 bp Sc: 65.79 +GCGGGCGTGGCGAAATCGGTATACGCGCGGGTTTTAGGTGCCCGTGTTCGAGAGAACGTGTGGGTTCGAGTCCCACCGCCCGCACCA +>Msm.Lys-CTT.trna17 Mycobacterium_smegmatis_MC2_155_chr.trna17-LysCTT (4847908-4847983) Lys (CTT) 76 bp Sc: 91.80 +GCGCCGTTAGCTCAGTTGGTAGAGCAGCTGACTCTTAATCAGCGGGTCCGGGGTTCGAAACCCTGACGGCGCACCA +>Msm.Lys-TTT.trna21 Mycobacterium_smegmatis_MC2_155_chr.trna21-LysTTT (5834573-5834645) Lys (TTT) 73 bp Sc: 79.21 +GCCCCTATAGCTCAGTTGGTAGAGCTACGGACTTTTAATCCGCAGGTCCCAGGTTCGAGCCCTGGTGGGGGCAcca +>Msm.Met-CAT.trna8 Mycobacterium_smegmatis_MC2_155_chr.trna8-MetCAT (2047596-2047672) Met (CAT) 77 bp Sc: 81.09 +CGCGGGGTGGAGCAGCTCGGTAGCTCGCTGGGCTCATAACCCAGAGGTCGCAGGTTCGAATCCTGTCCCCGCTAcca +>Msm.Met-CAT.trna6 Mycobacterium_smegmatis_MC2_155_chr.trna6-MetCAT (1436094-1436167) Met (CAT) 74 bp Sc: 82.06 +GGCGGTGTAGCTCAGCTGGTTAGAGCGCACGACTCATAATCGTGAGGTCGGGGGATCGAGCCCCCCCACCGCTAcca +>Msm.Met-CAT.trna38 Mycobacterium_smegmatis_MC2_155_chr.trna38-MetCAT (4532894-4532821) Met (CAT) 74 bp Sc: 85.15 +GGGGCGGTAGCTCAGTCGGTTAGAGCCGCGGACTCATAATCCGCTGGTCGCGGGTTCGAGCCCCGCCCGCCCTAcca +>Msm.Phe-GAA.trna32 Mycobacterium_smegmatis_MC2_155_chr.trna32-PheGAA (5834167-5834094) Phe (GAA) 74 bp Sc: 83.44 +GGCCAGGTAGCTCAGTTGGTACGAGCGTCCGCCTGAAAAGCGGAAGGTCGCCGGTTCGATCCCGGCCCTGGCCAcca +>Msm.Pro-CGG.trna23 Mycobacterium_smegmatis_MC2_155_chr.trna23-ProCGG (6272367-6272440) Pro (CGG) 74 bp Sc: 81.26 +CGGGGTGTGGCGCAGCTTGGTAGCGCGCTTCGTTCGGGACGAAGAGGTCGTGGGTTCGAATCCCGCCACCCCGAcca +>Msm.Pro-GGG.trna41 Mycobacterium_smegmatis_MC2_155_chr.trna41-ProGGG (3800622-3800546) Pro (GGG) 77 bp Sc: 79.60 +CGGGCTGTGGCGCAGCTTGGTAGCGCACTTGACTGGGGGTCAAGTGGTCGCAGGTTCAAATCCTGTCAGCCCGAcca +>Msm.Pro-TGG.trna36 Mycobacterium_smegmatis_MC2_155_chr.trna36-ProTGG (4764371-4764298) Pro (TGG) 74 bp Sc: 81.49 +CGGGGTGTAGCGCAGCTTGGTAGCGCATCCGCTTTGGGAGCGGAAGGCCGCAGGTTCAAATCCTGTCACCCCGAcca +>Msm.SeC-TCA.trna46 Mycobacterium_smegmatis_MC2_155_chr.trna46-SeCTCA (1928522-1928428) SeC (TCA) 95 bp Sc: 30.05 +GGAGGCGTATCCGGTCTGGTGACCGGCGCGGTCTTCAAAATCGCTGAGCGACAGTTTCTGCCGCTGGCGGGTTCGATTCCCGTCCGCCTCCGCCA +>Msm.Ser-CGA.trna28 Mycobacterium_smegmatis_MC2_155_chr.trna28-SerCGA (6393912-6393822) Ser (CGA) 91 bp Sc: 68.85 +GGTGGCGTGTCCGAGCGGCCTAAGGAGCACGCCTCGAAAGCGTGTGTGGGGTAACCCCCCACCGAGGGTTCAAATCCCTCCGCCACCGCCA +>Msm.Ser-GCT.trna26 Mycobacterium_smegmatis_MC2_155_chr.trna26-SerGCT (6410567-6410476) Ser (GCT) 92 bp Sc: 67.19 +GGAGGCGTGCCAGAGCGGCCGAATGGGACTCACTGCTAATGAGTTGTCCCCCTTACCGGGGACCGGAGGTTCAAATCCTCTCGCCTCCGCCA +>Msm.Ser-GGA.trna24 Mycobacterium_smegmatis_MC2_155_chr.trna24-SerGGA (6352992-6353077) Ser (GGA) 86 bp Sc: 56.71 +GGAGGATTCGCCTAGTGGCCTATGGCGCTCGCCTGGAACGCGGGTTGGGTTAATAGCCCTCGCGGGTTCAAATCCCGCATCCTCCGcca +>Msm.Ser-TGA.trna25 Mycobacterium_smegmatis_MC2_155_chr.trna25-SerTGA (6417776-6417690) Ser (TGA) 87 bp Sc: 65.11 +GGTGGCGTGGCAGAGCGGCCTAATGCACTCGCCTTGAAAGCGAGAGACGGCTAACACCGTCCGGGGGTTCAAATCCCTCCGCCACCGcca +>Msm.Thr-CGT.trna29 Mycobacterium_smegmatis_MC2_155_chr.trna29-ThrCGT (6221063-6220991) Thr (CGT) 73 bp Sc: 86.49 +GCCGCCTTAGCTCAGTCGGTAGAGCGATTCACTCGTAATGAATAGGTCGGGGGTTCGATTCCCCCAGGCGGCTcca +>Msm.Thr-GGT.trna5 Mycobacterium_smegmatis_MC2_155_chr.trna5-ThrGGT (1435983-1436055) Thr (GGT) 73 bp Sc: 77.85 +GCCCCCTTAGCTCAGTCGGCAGAGCGTTTCCATGGTAAGGAAAAGGTCAACGGTTCGATTCCGTTAGGGGGCTcca +>Msm.Thr-TGT Thr (TGT) 75 bp Sc: 85.47 +GCCTCCTTAGCTCAGTGGTAGAGCACTCGCCTTGTAAGCGAGCGGTCGTCAGTTCAATCCTGACAGGGGGCTCCA +>Msm.Trp-CCA.trna7 Mycobacterium_smegmatis_MC2_155_chr.trna7-TrpCCA (1437965-1438037) Trp (CCA) 73 bp Sc: 80.23 +AGGGGCGTAGCTCAATTGGCAGAGCAGCGGTCTCCAAAACCGCAGGTTGCAGGTTCAAGTCCTGTCGCCCCTGcca +>Msm.Tyr-GTA.trna4 Mycobacterium_smegmatis_MC2_155_chr.trna4-TyrGTA (1228393-1228478) Tyr (GTA) 86 bp Sc: 56.35 +GGCAGGTTGCCCGAGCGGCCAATGGGAGCGGACTGTAAATCCGTCGGCTAACGCCTACGCAGGTTCGAATCCTGCACCTGCCAcca +>Msm.Val-CAC.trna12 Mycobacterium_smegmatis_MC2_155_chr.trna12-ValCAC (2895813-2895887) Val (CAC) 75 bp Sc: 87.83 +GGTCTCGTAGCTCAGTGGGAGAGCGTCCGCCTCACACGCGGAAGGTCGCTGGTTCGAACCCAGCCGGGACCACCA +>Msm.Val-GAC.trna45 Mycobacterium_smegmatis_MC2_155_chr.trna45-ValGAC (2895160-2895086) Val (GAC) 75 bp Sc: 87.89 +GCGCGATTAGCTCAGCGGGAGAGCGCTTCCCTGACACGGAAGAGGTCACTGGTTCAATCCCAGTATCGCGCACCA +>Msm.Val-TAC.trna39 Mycobacterium_smegmatis_MC2_155_chr.trna39-ValTAC (4405846-4405775) Val (TAC) 72 bp Sc: 75.84 +GGGCGCGTAGCTCAGTGGTAGAGCTCTGGTTTTACACACCAGCGGTCGGCGGTTCGATACCGTCCGCGCCCAccacca diff --git a/scripts/Post-transcriptional.modifications.and.differential.proportion.analysis.Xu-2023.ipynb b/scripts/Post-transcriptional.modifications.and.differential.proportion.analysis.Xu-2023.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..dfc28518cc2c0bb33251423c674e05a2244d8024 --- /dev/null +++ b/scripts/Post-transcriptional.modifications.and.differential.proportion.analysis.Xu-2023.ipynb @@ -0,0 +1,2132 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# *EMOTE-tk* tutorial on 3'-end post transcriptional modifications exploration and differential proportion analysis\n", + "\n", + "From \"MenT nucleotidyltransferase toxins extend tRNA acceptor stems and can be inhibited by asymmetrical antitoxin binding\" by Xu *et al.*, Nature commun. 2023. https://doi.org/10.1038/s41467-023-40264-3\n", + "\n", + "## Download dataset\n", + "\n", + "Data accompanying the article publicly available on European Nucleotide Archive (ENA) at EBI https://www.ebi.ac.uk/ena/browser/view/PRJEB62085\n", + "\n", + "For this notebook, we will use some RNA-Seq samples multiplexed into one raw fastq file to reproduce results on the action of toxin MenT1 which adds ribonucleotides at the 3'-end of tRNAs as illustrated in [figure 3E of the original paper](https://www.nature.com/articles/s41467-023-40264-3/figures/3).\n", + "\n", + "The dataset will be directly downloaded in the `../data/MenT1` directory of the project (that should be readily available if the GitLab project is cloned).\n", + "\n", + "The intial `data/MenT1` directory contains also the reference sequences of the tRNAs (multifasta file) to which we will align the 3'-end sequencing reads: `Msm.reference.tRNAs.with.CCA.fasta`" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "data_dir <- \"../data/MenT1\"\n", + "\n", + "raw_fastq <- paste0(data_dir, \"/Msm.total.RNA.MenT1.Library.fq.gz\")\n", + "\n", + "if(!file.exists(raw_fastq))\n", + " download.file(\"ftp://ftp.sra.ebi.ac.uk/vol1/run/ERR114/ERR11439143/Msm.total.RNA.MenT1.Library.fq.gz\",\n", + " destfile=\"../data/MenT1/Msm.total.RNA.MenT1.Library.fq.gz\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load library functions from R source" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true, + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "── \u001b[1mAttaching core tidyverse packages\u001b[22m ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──\n", + "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.5\n", + "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.0 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.5.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mggplot2 \u001b[39m 3.5.0 \u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.2.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mlubridate\u001b[39m 1.9.3 \u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 1.3.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 1.0.2 \n", + "── \u001b[1mConflicts\u001b[22m ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m<http://conflicted.r-lib.org/>\u001b[39m\u001b[23m) to force all conflicts to become errors\n", + "Loading required package: GenomeInfoDb\n", + "\n", + "Loading required package: BiocGenerics\n", + "\n", + "\n", + "Attaching package: ‘BiocGenerics’\n", + "\n", + "\n", + "The following objects are masked from ‘package:lubridate’:\n", + "\n", + " intersect, setdiff, union\n", + "\n", + "\n", + "The following objects are masked from ‘package:dplyr’:\n", + "\n", + " combine, intersect, setdiff, union\n", + "\n", + "\n", + "The following objects are masked from ‘package:stats’:\n", + "\n", + " IQR, mad, sd, var, xtabs\n", + "\n", + "\n", + "The following objects are masked from ‘package:base’:\n", + "\n", + " anyDuplicated, aperm, append, as.data.frame, basename, cbind,\n", + " colnames, dirname, do.call, duplicated, eval, evalq, Filter, Find,\n", + " get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply,\n", + " match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,\n", + " Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort,\n", + " table, tapply, union, unique, unsplit, which.max, which.min\n", + "\n", + "\n", + "Loading required package: S4Vectors\n", + "\n", + "Loading required package: stats4\n", + "\n", + "\n", + "Attaching package: ‘S4Vectors’\n", + "\n", + "\n", + "The following objects are masked from ‘package:lubridate’:\n", + "\n", + " second, second<-\n", + "\n", + "\n", + "The following objects are masked from ‘package:dplyr’:\n", + "\n", + " first, rename\n", + "\n", + "\n", + "The following object is masked from ‘package:tidyr’:\n", + "\n", + " expand\n", + "\n", + "\n", + "The following object is masked from ‘package:utils’:\n", + "\n", + " findMatches\n", + "\n", + "\n", + "The following objects are masked from ‘package:base’:\n", + "\n", + " expand.grid, I, unname\n", + "\n", + "\n", + "Loading required package: IRanges\n", + "\n", + "\n", + "Attaching package: ‘IRanges’\n", + "\n", + "\n", + "The following object is masked from ‘package:lubridate’:\n", + "\n", + " %within%\n", + "\n", + "\n", + "The following objects are masked from ‘package:dplyr’:\n", + "\n", + " collapse, desc, slice\n", + "\n", + "\n", + "The following object is masked from ‘package:purrr’:\n", + "\n", + " reduce\n", + "\n", + "\n", + "Loading required package: GenomicRanges\n", + "\n", + "Loading required package: Biostrings\n", + "\n", + "Loading required package: XVector\n", + "\n", + "\n", + "Attaching package: ‘XVector’\n", + "\n", + "\n", + "The following object is masked from ‘package:purrr’:\n", + "\n", + " compact\n", + "\n", + "\n", + "\n", + "Attaching package: ‘Biostrings’\n", + "\n", + "\n", + "The following object is masked from ‘package:base’:\n", + "\n", + " strsplit\n", + "\n", + "\n", + "Loading required package: BiocParallel\n", + "\n", + "Loading required package: GenomicAlignments\n", + "\n", + "Loading required package: SummarizedExperiment\n", + "\n", + "Loading required package: MatrixGenerics\n", + "\n", + "Loading required package: matrixStats\n", + "\n", + "\n", + "Attaching package: ‘matrixStats’\n", + "\n", + "\n", + "The following object is masked from ‘package:dplyr’:\n", + "\n", + " count\n", + "\n", + "\n", + "\n", + "Attaching package: ‘MatrixGenerics’\n", + "\n", + "\n", + "The following objects are masked from ‘package:matrixStats’:\n", + "\n", + " colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,\n", + " colCounts, colCummaxs, colCummins, colCumprods, colCumsums,\n", + " colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,\n", + " colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,\n", + " colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,\n", + " colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,\n", + " colWeightedMeans, colWeightedMedians, colWeightedSds,\n", + " colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,\n", + " rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,\n", + " rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,\n", + " rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,\n", + " rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,\n", + " rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,\n", + " rowWeightedMads, rowWeightedMeans, rowWeightedMedians,\n", + " rowWeightedSds, rowWeightedVars\n", + "\n", + "\n", + "Loading required package: Biobase\n", + "\n", + "Welcome to Bioconductor\n", + "\n", + " Vignettes contain introductory material; view with\n", + " 'browseVignettes()'. To cite Bioconductor, see\n", + " 'citation(\"Biobase\")', and for packages 'citation(\"pkgname\")'.\n", + "\n", + "\n", + "\n", + "Attaching package: ‘Biobase’\n", + "\n", + "\n", + "The following object is masked from ‘package:MatrixGenerics’:\n", + "\n", + " rowMedians\n", + "\n", + "\n", + "The following objects are masked from ‘package:matrixStats’:\n", + "\n", + " anyMissing, rowMedians\n", + "\n", + "\n", + "\n", + "Attaching package: ‘GenomicAlignments’\n", + "\n", + "\n", + "The following object is masked from ‘package:dplyr’:\n", + "\n", + " last\n", + "\n", + "\n", + "\n", + "Attaching package: ‘ShortRead’\n", + "\n", + "\n", + "The following object is masked from ‘package:dplyr’:\n", + "\n", + " id\n", + "\n", + "\n", + "The following object is masked from ‘package:purrr’:\n", + "\n", + " compose\n", + "\n", + "\n", + "The following object is masked from ‘package:tibble’:\n", + "\n", + " view\n", + "\n", + "\n", + "Loading required package: splines\n", + "\n", + "Loading required package: survival\n", + "\n", + "Loading required package: prodlim\n", + "\n", + "\n", + "Attaching package: ‘survcomp’\n", + "\n", + "\n", + "The following object is masked from ‘package:VGAM’:\n", + "\n", + " fisherz\n", + "\n", + "\n", + "Loading required package: bsseq\n", + "\n" + ] + } + ], + "source": [ + "source(\"../src/emote-tk.R\")\n", + "options(width = 250)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pre-processing of reads prior mapping\n", + "\n", + "In this section, we will parde the raw reads to\n", + "* validate their content\n", + "* split the fastq into 4 different fastq files, each one of them corresponding to a sample: control without toxin or tRNAs with toxin and replicate 1 or 2\n", + "\n", + "The reads are 100 nt long and their structure can be schematized as follows:\n", + "```\n", + "read pos: 1 2 6 25 40 55 \n", + " N · multiplexing barcode · recognition sequence · UMI · control sequence · 3'-5' tRNA-end reverse complement\n", + " │ │ │ │ │ â”” 55nt long\n", + " │ │ │ │ â”” must be AGATAC\n", + " │ │ │ â”” 15 random nucleotides (A, T, C or G)\n", + " │ │ â”” must be CGGCACCAACCGAGGCTCA\n", + " │ â”” must be one of ACAC, ATTG, GACG or GGTA\n", + " │\n", + " â”” one random nucleotide at the beginning\n", + "```\n", + "\n", + "Here, we define the authorized barcodes and their associated experimental condition (in same order) so that we can reuse them later." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "barcodes <- c(\"ACAC\", \"ATTG\", \"GACG\", \"GGTA\")\n", + "conditions <- c(\"ctrl.r1\", \"ctrl.r2\", \"MenT1.r1\", \"MenT1.r2\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above schematized structure is translated to an `EMOTE_read_features` table that will be used for reads parsing and validation.\n", + "\n", + "For its intialisation, the user must specify which region on the reads contains the sequence destined to be aligned on the reference sequences." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A EMOTE_features: 1 × 7</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>name</th><th scope=col>start</th><th scope=col>width</th><th scope=col>pattern_type</th><th scope=col>pattern</th><th scope=col>max_mismatch</th><th scope=col>readid_prepend</th></tr>\n", + "\t<tr><th scope=col><chr></th><th scope=col><dbl></th><th scope=col><dbl></th><th scope=col><dbl></th><th scope=col><chr></th><th scope=col><dbl></th><th scope=col><lgl></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>readseq</td><td>46</td><td>55</td><td>1</td><td>ACTG</td><td>0</td><td>FALSE</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A EMOTE\\_features: 1 × 7\n", + "\\begin{tabular}{lllllll}\n", + " name & start & width & pattern\\_type & pattern & max\\_mismatch & readid\\_prepend\\\\\n", + " <chr> & <dbl> & <dbl> & <dbl> & <chr> & <dbl> & <lgl>\\\\\n", + "\\hline\n", + "\t readseq & 46 & 55 & 1 & ACTG & 0 & FALSE\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A EMOTE_features: 1 × 7\n", + "\n", + "| name <chr> | start <dbl> | width <dbl> | pattern_type <dbl> | pattern <chr> | max_mismatch <dbl> | readid_prepend <lgl> |\n", + "|---|---|---|---|---|---|---|\n", + "| readseq | 46 | 55 | 1 | ACTG | 0 | FALSE |\n", + "\n" + ], + "text/plain": [ + " name start width pattern_type pattern max_mismatch readid_prepend\n", + "1 readseq 46 55 1 ACTG 0 FALSE " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "read_features <- EMOTE_read_features(start = 46, width = 55) # region to map\n", + "read_features" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, the table is updated with each structure element of the reads.\n", + "\n", + "The barcode from position 2 to 5 is a feature of type 2 which is a set of authorized constant string at a certain location:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "read_features <- EMOTE_add_read_feature(read_features,\n", + " name = \"barcode\",\n", + " start = 2,\n", + " width = 4,\n", + " pattern = barcodes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The UMI from position 25 to 39 are composed of A, T, C or G, thus is a feature of type 1 which is a string composed of a certain alphabet. This feature will be extracted and stored in the read identifier for future uses in the quantification step, thus the `readid_prepend = TRUE` argument)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "read_features <- EMOTE_add_read_feature(read_features,\n", + " name = \"UMI\",\n", + " start = 25,\n", + " width = 15,\n", + " pattern = \"ACGT\",\n", + " pattern_type = 1,\n", + " readid_prepend = TRUE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, the recognition sequence and the control sequence correspond to constant character strings and will be used to validate the reads. These are feature of type 2." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A EMOTE_features: 5 × 7</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>name</th><th scope=col>start</th><th scope=col>width</th><th scope=col>pattern_type</th><th scope=col>pattern</th><th scope=col>max_mismatch</th><th scope=col>readid_prepend</th></tr>\n", + "\t<tr><th scope=col><chr></th><th scope=col><dbl></th><th scope=col><dbl></th><th scope=col><dbl></th><th scope=col><list></th><th scope=col><dbl></th><th scope=col><lgl></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>readseq </td><td>46</td><td>55</td><td>1</td><td> ACTG</td><td>0</td><td>FALSE</td></tr>\n", + "\t<tr><td>barcode </td><td> 2</td><td> 4</td><td>2</td><td>ACAC, AT....</td><td>0</td><td>FALSE</td></tr>\n", + "\t<tr><td>UMI </td><td>25</td><td>15</td><td>1</td><td> ACGT</td><td>0</td><td> TRUE</td></tr>\n", + "\t<tr><td>recognition_seq</td><td> 6</td><td>19</td><td>2</td><td>CGGCACCA....</td><td>1</td><td>FALSE</td></tr>\n", + "\t<tr><td>control_seq </td><td>40</td><td> 6</td><td>2</td><td> AGATAC</td><td>0</td><td>FALSE</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A EMOTE\\_features: 5 × 7\n", + "\\begin{tabular}{lllllll}\n", + " name & start & width & pattern\\_type & pattern & max\\_mismatch & readid\\_prepend\\\\\n", + " <chr> & <dbl> & <dbl> & <dbl> & <list> & <dbl> & <lgl>\\\\\n", + "\\hline\n", + "\t readseq & 46 & 55 & 1 & ACTG & 0 & FALSE\\\\\n", + "\t barcode & 2 & 4 & 2 & ACAC, AT.... & 0 & FALSE\\\\\n", + "\t UMI & 25 & 15 & 1 & ACGT & 0 & TRUE\\\\\n", + "\t recognition\\_seq & 6 & 19 & 2 & CGGCACCA.... & 1 & FALSE\\\\\n", + "\t control\\_seq & 40 & 6 & 2 & AGATAC & 0 & FALSE\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A EMOTE_features: 5 × 7\n", + "\n", + "| name <chr> | start <dbl> | width <dbl> | pattern_type <dbl> | pattern <list> | max_mismatch <dbl> | readid_prepend <lgl> |\n", + "|---|---|---|---|---|---|---|\n", + "| readseq | 46 | 55 | 1 | ACTG | 0 | FALSE |\n", + "| barcode | 2 | 4 | 2 | ACAC, AT.... | 0 | FALSE |\n", + "| UMI | 25 | 15 | 1 | ACGT | 0 | TRUE |\n", + "| recognition_seq | 6 | 19 | 2 | CGGCACCA.... | 1 | FALSE |\n", + "| control_seq | 40 | 6 | 2 | AGATAC | 0 | FALSE |\n", + "\n" + ], + "text/plain": [ + " name start width pattern_type pattern max_mismatch readid_prepend\n", + "1 readseq 46 55 1 ACTG 0 FALSE \n", + "2 barcode 2 4 2 ACAC, AT.... 0 FALSE \n", + "3 UMI 25 15 1 ACGT 0 TRUE \n", + "4 recognition_seq 6 19 2 CGGCACCA.... 1 FALSE \n", + "5 control_seq 40 6 2 AGATAC 0 FALSE " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "read_features <- EMOTE_add_read_feature(read_features,\n", + " name = \"recognition_seq\",\n", + " start = 6,\n", + " width = 19,\n", + " pattern = \"CGGCACCAACCGAGGCTCA\",\n", + " pattern_type = 2,\n", + " max_mismatch = 1,\n", + " readid_prepend = FALSE)\n", + "read_features <- EMOTE_add_read_feature(read_features,\n", + " name = \"control_seq\",\n", + " start = 40,\n", + " width = 6,\n", + " pattern = \"AGATAC\",\n", + " pattern_type = 2,\n", + " readid_prepend = FALSE)\n", + "read_features" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once the `EMOTE_parse_read` table is defined, parsing of read can be performed. As we need also to demultiplex the samples here, we will directly call `EMOTE_demultiplex` which will call the `EMOTE_parse_read` internally to parse and validate the reads.\n", + "\n", + "## Demultiplex original raw fastq file(s) into separate fastq files\n", + "\n", + "Reads are validated against the read features and only valid reads are found in the demultiplexed fastq files." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A data.frame: 4 × 9</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>barcode_group</th><th scope=col>is_valid_readseq</th><th scope=col>is_valid_barcode</th><th scope=col>is_valid_UMI</th><th scope=col>is_valid_recognition_seq</th><th scope=col>is_valid_control_seq</th><th scope=col>is_valid</th><th scope=col>pc_valid</th><th scope=col>demux_filename</th></tr>\n", + "\t<tr><th scope=col><chr></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th><th scope=col><dbl></th><th scope=col><chr></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>ACAC</td><td> 996140</td><td> 996179</td><td> 996179</td><td> 996179</td><td> 996179</td><td> 996140</td><td>0.9999609</td><td>../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_ACAC_valid.fastq.gz</td></tr>\n", + "\t<tr><td>ATTG</td><td> 761196</td><td> 761231</td><td> 761231</td><td> 761231</td><td> 761231</td><td> 761196</td><td>0.9999540</td><td>../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_ATTG_valid.fastq.gz</td></tr>\n", + "\t<tr><td>GACG</td><td> 614477</td><td> 614502</td><td> 614502</td><td> 614502</td><td> 614502</td><td> 614477</td><td>0.9999593</td><td>../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_GACG_valid.fastq.gz</td></tr>\n", + "\t<tr><td>GGTA</td><td>1059530</td><td>1059569</td><td>1059569</td><td>1059569</td><td>1059569</td><td>1059530</td><td>0.9999632</td><td>../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_GGTA_valid.fastq.gz</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A data.frame: 4 × 9\n", + "\\begin{tabular}{lllllllll}\n", + " barcode\\_group & is\\_valid\\_readseq & is\\_valid\\_barcode & is\\_valid\\_UMI & is\\_valid\\_recognition\\_seq & is\\_valid\\_control\\_seq & is\\_valid & pc\\_valid & demux\\_filename\\\\\n", + " <chr> & <int> & <int> & <int> & <int> & <int> & <int> & <dbl> & <chr>\\\\\n", + "\\hline\n", + "\t ACAC & 996140 & 996179 & 996179 & 996179 & 996179 & 996140 & 0.9999609 & ../data/MenT1/Msm.total.RNA.MenT1.Library\\_demux/Msm.total.RNA.MenT1.Library\\_ACAC\\_valid.fastq.gz\\\\\n", + "\t ATTG & 761196 & 761231 & 761231 & 761231 & 761231 & 761196 & 0.9999540 & ../data/MenT1/Msm.total.RNA.MenT1.Library\\_demux/Msm.total.RNA.MenT1.Library\\_ATTG\\_valid.fastq.gz\\\\\n", + "\t GACG & 614477 & 614502 & 614502 & 614502 & 614502 & 614477 & 0.9999593 & ../data/MenT1/Msm.total.RNA.MenT1.Library\\_demux/Msm.total.RNA.MenT1.Library\\_GACG\\_valid.fastq.gz\\\\\n", + "\t GGTA & 1059530 & 1059569 & 1059569 & 1059569 & 1059569 & 1059530 & 0.9999632 & ../data/MenT1/Msm.total.RNA.MenT1.Library\\_demux/Msm.total.RNA.MenT1.Library\\_GGTA\\_valid.fastq.gz\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 9\n", + "\n", + "| barcode_group <chr> | is_valid_readseq <int> | is_valid_barcode <int> | is_valid_UMI <int> | is_valid_recognition_seq <int> | is_valid_control_seq <int> | is_valid <int> | pc_valid <dbl> | demux_filename <chr> |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| ACAC | 996140 | 996179 | 996179 | 996179 | 996179 | 996140 | 0.9999609 | ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_ACAC_valid.fastq.gz |\n", + "| ATTG | 761196 | 761231 | 761231 | 761231 | 761231 | 761196 | 0.9999540 | ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_ATTG_valid.fastq.gz |\n", + "| GACG | 614477 | 614502 | 614502 | 614502 | 614502 | 614477 | 0.9999593 | ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_GACG_valid.fastq.gz |\n", + "| GGTA | 1059530 | 1059569 | 1059569 | 1059569 | 1059569 | 1059530 | 0.9999632 | ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_GGTA_valid.fastq.gz |\n", + "\n" + ], + "text/plain": [ + " barcode_group is_valid_readseq is_valid_barcode is_valid_UMI is_valid_recognition_seq is_valid_control_seq is_valid pc_valid demux_filename \n", + "1 ACAC 996140 996179 996179 996179 996179 996140 0.9999609 ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_ACAC_valid.fastq.gz\n", + "2 ATTG 761196 761231 761231 761231 761231 761196 0.9999540 ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_ATTG_valid.fastq.gz\n", + "3 GACG 614477 614502 614502 614502 614502 614477 0.9999593 ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_GACG_valid.fastq.gz\n", + "4 GGTA 1059530 1059569 1059569 1059569 1059569 1059530 0.9999632 ../data/MenT1/Msm.total.RNA.MenT1.Library_demux/Msm.total.RNA.MenT1.Library_GGTA_valid.fastq.gz" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "demux_report <- EMOTE_demultiplex(fastq_file = raw_fastq,\n", + " yieldsize = 1e6, # number of reads parsed at each iteration\n", + " features = read_features,\n", + " force = FALSE, # demultiplex will not do anything if there already exists a report\n", + " keep_invalid_reads = FALSE) # FALSE: we do not want invalid reads to be returned in a separate fastq file\n", + "demux_report" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The report provides statistics on reads for each sample together with the fastq output file.\n", + "\n", + "## Mapping of reads and quantification of 3'-ends abundances in a count table\n", + "\n", + "First, we need to prepare the index of the reference sequences that we will map to. \n", + "As, reads should align partially, we will use subread. Rsubread function call is as follows for building the index:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " ========== _____ _ _ ____ _____ ______ _____ \n", + " ===== / ____| | | | _ \\| __ \\| ____| /\\ | __ \\ \n", + " ===== | (___ | | | | |_) | |__) | |__ / \\ | | | |\n", + " ==== \\___ \\| | | | _ <| _ /| __| / /\\ \\ | | | |\n", + " ==== ____) | |__| | |_) | | \\ \\| |____ / ____ \\| |__| |\n", + " ========== |_____/ \\____/|____/|_| \\_\\______/_/ \\_\\_____/\n", + " Rsubread 2.16.0\n", + "\n", + "//================================= setting ==================================\\\\\n", + "|| ||\n", + "|| Index name : index ||\n", + "|| Index space : base space ||\n", + "|| Index split : no-split ||\n", + "|| Repeat threshold : 100 repeats ||\n", + "|| Gapped index : no ||\n", + "|| ||\n", + "|| Free / total memory : 11.5GB / 31.3GB ||\n", + "|| ||\n", + "|| Input files : 1 file in total ||\n", + "|| o Msm.reference.tRNAs.with.CCA.fasta ||\n", + "|| ||\n", + "\\\\============================================================================//\n", + "\n", + "//================================= Running ==================================\\\\\n", + "|| ||\n", + "|| Check the integrity of provided reference sequences ... ||\n", + "|| No format issues were found ||\n", + "|| Scan uninformative subreads in reference sequences ... ||\n", + "|| Estimate the index size... ||\n", + "|| 3.0 GB of memory is needed for index building. ||\n", + "|| Build the index... ||\n", + "|| Save current index block... ||\n", + "|| [ 0.0% finished ] ||\n", + "|| [ 10.0% finished ] ||\n", + "|| [ 20.0% finished ] ||\n", + "|| [ 30.0% finished ] ||\n", + "|| [ 40.0% finished ] ||\n", + "|| [ 50.0% finished ] ||\n", + "|| [ 60.0% finished ] ||\n", + "|| [ 70.0% finished ] ||\n", + "|| [ 80.0% finished ] ||\n", + "|| [ 90.0% finished ] ||\n", + "|| [ 100.0% finished ] ||\n", + "|| ||\n", + "|| Total running time: 0.1 minutes. ||\n", + "||Index ../data/MenT1/Msm.reference.tRNAs.with.CCA.fasta.subread/index w ... ||\n", + "|| ||\n", + "\\\\============================================================================//\n", + "\n" + ] + } + ], + "source": [ + "reference_genome <- \"Msm.reference.tRNAs.with.CCA.fasta\"\n", + "reference_fasta <- paste0(data_dir, \"/\", reference_genome)\n", + "reference_index <- paste0(data_dir, \"/\", reference_genome, \".subread\")\n", + "dir.create(reference_index, showWarnings=FALSE)\n", + "buildindex(basename = paste0(reference_index, \"/index\"), reference = reference_fasta)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": true, + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# input\n", + "demux_dir <- paste0(sub(\"(.fastq|.fq)(.gz)?$\", \"\", raw_fastq), \"_demux\")\n", + "fastq_files <- demux_report$demux_filename\n", + "\n", + "# params for mapping\n", + "aligner <- \"subread\"\n", + "max_mismatch <- 0\n", + "bam_dir <- paste0(demux_dir,\n", + " \"/mm\",\n", + " max_mismatch,\n", + " \"_\",\n", + " aligner,\n", + " \"_\",\n", + " reference_genome)\n", + "\n", + "# perform mapping\n", + "bam_files = mclapply(\n", + " fastq_files,\n", + " EMOTE_map_fastq,\n", + " fasta_name = reference_fasta,\n", + " index_name = reference_index,\n", + " max_map_mismatch = max_mismatch,\n", + " aligner = aligner,\n", + " #force = TRUE,\n", + " bam_dir = bam_dir,\n", + " threads = 4,\n", + " mc.cores = 4\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convert bam files to count table with EMOTE_quantify_3prime\n", + "\n", + "The `EMOTE_quantify_3prime` is called on each BAM file. The `read_features` table is passed to take into account the UMIs that were present in the reads to remove duplicates." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true, + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A tibble: 6 × 7</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>barcode</th><th scope=col>rname</th><th scope=col>position</th><th scope=col>strand</th><th scope=col>downstream_seq</th><th scope=col>reads</th><th scope=col>count</th></tr>\n", + "\t<tr><th scope=col><fct></th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><fct></th><th scope=col><fct></th><th scope=col><int></th><th scope=col><int></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>ctrl.r1</td><td>Msm.Ala-CGC.trna33</td><td>25</td><td>+</td><td>ACCACACGGGCAGTGTGGGGGCCAGGGGTTA</td><td>1</td><td>1</td></tr>\n", + "\t<tr><td>ctrl.r1</td><td>Msm.Ala-CGC.trna33</td><td>25</td><td>+</td><td>ACCACGCTGGCAGAGTGGGTGTCAGGGGTAC</td><td>1</td><td>1</td></tr>\n", + "\t<tr><td>ctrl.r1</td><td>Msm.Ala-CGC.trna33</td><td>25</td><td>+</td><td>ACCCCACTGCCAGTGTGGGGGTCAGGGGTTC</td><td>1</td><td>1</td></tr>\n", + "\t<tr><td>ctrl.r1</td><td>Msm.Ala-CGC.trna33</td><td>25</td><td>+</td><td>ACCCCACTGGCAGTGTGGGGGTCAGTGGTTC</td><td>1</td><td>1</td></tr>\n", + "\t<tr><td>ctrl.r1</td><td>Msm.Ala-CGC.trna33</td><td>25</td><td>+</td><td>TCAGGGGTTCGAATCCCCTTAGCTCCACCA </td><td>3</td><td>2</td></tr>\n", + "\t<tr><td>ctrl.r1</td><td>Msm.Ala-CGC.trna33</td><td>26</td><td>+</td><td>GGGACTGGTGAAAAGTACCCCGGGAGGGG </td><td>1</td><td>1</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A tibble: 6 × 7\n", + "\\begin{tabular}{lllllll}\n", + " barcode & rname & position & strand & downstream\\_seq & reads & count\\\\\n", + " <fct> & <fct> & <dbl> & <fct> & <fct> & <int> & <int>\\\\\n", + "\\hline\n", + "\t ctrl.r1 & Msm.Ala-CGC.trna33 & 25 & + & ACCACACGGGCAGTGTGGGGGCCAGGGGTTA & 1 & 1\\\\\n", + "\t ctrl.r1 & Msm.Ala-CGC.trna33 & 25 & + & ACCACGCTGGCAGAGTGGGTGTCAGGGGTAC & 1 & 1\\\\\n", + "\t ctrl.r1 & Msm.Ala-CGC.trna33 & 25 & + & ACCCCACTGCCAGTGTGGGGGTCAGGGGTTC & 1 & 1\\\\\n", + "\t ctrl.r1 & Msm.Ala-CGC.trna33 & 25 & + & ACCCCACTGGCAGTGTGGGGGTCAGTGGTTC & 1 & 1\\\\\n", + "\t ctrl.r1 & Msm.Ala-CGC.trna33 & 25 & + & TCAGGGGTTCGAATCCCCTTAGCTCCACCA & 3 & 2\\\\\n", + "\t ctrl.r1 & Msm.Ala-CGC.trna33 & 26 & + & GGGACTGGTGAAAAGTACCCCGGGAGGGG & 1 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 6 × 7\n", + "\n", + "| barcode <fct> | rname <fct> | position <dbl> | strand <fct> | downstream_seq <fct> | reads <int> | count <int> |\n", + "|---|---|---|---|---|---|---|\n", + "| ctrl.r1 | Msm.Ala-CGC.trna33 | 25 | + | ACCACACGGGCAGTGTGGGGGCCAGGGGTTA | 1 | 1 |\n", + "| ctrl.r1 | Msm.Ala-CGC.trna33 | 25 | + | ACCACGCTGGCAGAGTGGGTGTCAGGGGTAC | 1 | 1 |\n", + "| ctrl.r1 | Msm.Ala-CGC.trna33 | 25 | + | ACCCCACTGCCAGTGTGGGGGTCAGGGGTTC | 1 | 1 |\n", + "| ctrl.r1 | Msm.Ala-CGC.trna33 | 25 | + | ACCCCACTGGCAGTGTGGGGGTCAGTGGTTC | 1 | 1 |\n", + "| ctrl.r1 | Msm.Ala-CGC.trna33 | 25 | + | TCAGGGGTTCGAATCCCCTTAGCTCCACCA | 3 | 2 |\n", + "| ctrl.r1 | Msm.Ala-CGC.trna33 | 26 | + | GGGACTGGTGAAAAGTACCCCGGGAGGGG | 1 | 1 |\n", + "\n" + ], + "text/plain": [ + " barcode rname position strand downstream_seq reads count\n", + "1 ctrl.r1 Msm.Ala-CGC.trna33 25 + ACCACACGGGCAGTGTGGGGGCCAGGGGTTA 1 1 \n", + "2 ctrl.r1 Msm.Ala-CGC.trna33 25 + ACCACGCTGGCAGAGTGGGTGTCAGGGGTAC 1 1 \n", + "3 ctrl.r1 Msm.Ala-CGC.trna33 25 + ACCCCACTGCCAGTGTGGGGGTCAGGGGTTC 1 1 \n", + "4 ctrl.r1 Msm.Ala-CGC.trna33 25 + ACCCCACTGGCAGTGTGGGGGTCAGTGGTTC 1 1 \n", + "5 ctrl.r1 Msm.Ala-CGC.trna33 25 + TCAGGGGTTCGAATCCCCTTAGCTCCACCA 3 2 \n", + "6 ctrl.r1 Msm.Ala-CGC.trna33 26 + GGGACTGGTGAAAAGTACCCCGGGAGGGG 1 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "count_table <- EMOTE_quantify_from_bam_files(bam_files,\n", + " conditions,\n", + " EMOTE_quantify_3prime,\n", + " cores = 4,\n", + " features = read_features,\n", + " min_mapped_length = 20,\n", + " rev_comp_reads = TRUE,\n", + " keep_UMI = FALSE)\n", + "count_table %>%\n", + " head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Downstream analysis: 3'-end post-transciptional modifications exploration\n", + "\n", + "Pivot count_table to have counts for each sample for the same 3'-end. For noise reduction, we will only keep rows for which there are at least 10 reads in one sample." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true, + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A tibble: 6 × 8</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>rname</th><th scope=col>position</th><th scope=col>strand</th><th scope=col>downstream_seq</th><th scope=col>ctrl.r1</th><th scope=col>ctrl.r2</th><th scope=col>MenT1.r1</th><th scope=col>MenT1.r2</th></tr>\n", + "\t<tr><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><fct></th><th scope=col><fct></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>46</td><td>+</td><td>CAGGGGTTCGATTCCCCTTAGCTCCACCA</td><td> 22</td><td> 38</td><td> 33</td><td> 4</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>54</td><td>+</td><td>C </td><td> 2</td><td> 2</td><td> 32</td><td> 76</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>55</td><td>+</td><td> </td><td>2559</td><td>766</td><td>840</td><td>2691</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>55</td><td>+</td><td>GATTCCCCTTAGCTCCACCA </td><td> 69</td><td> 36</td><td> 23</td><td> 15</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>55</td><td>+</td><td>TCCCCTTAGCTCCACC </td><td> 3</td><td> 12</td><td> 10</td><td> 1</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>55</td><td>+</td><td>TCCCCTTAGCTCCACCA </td><td> 270</td><td>541</td><td>320</td><td> 252</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A tibble: 6 × 8\n", + "\\begin{tabular}{llllllll}\n", + " rname & position & strand & downstream\\_seq & ctrl.r1 & ctrl.r2 & MenT1.r1 & MenT1.r2\\\\\n", + " <fct> & <dbl> & <fct> & <fct> & <int> & <int> & <int> & <int>\\\\\n", + "\\hline\n", + "\t Msm.Ala-CGC.trna33 & 46 & + & CAGGGGTTCGATTCCCCTTAGCTCCACCA & 22 & 38 & 33 & 4\\\\\n", + "\t Msm.Ala-CGC.trna33 & 54 & + & C & 2 & 2 & 32 & 76\\\\\n", + "\t Msm.Ala-CGC.trna33 & 55 & + & & 2559 & 766 & 840 & 2691\\\\\n", + "\t Msm.Ala-CGC.trna33 & 55 & + & GATTCCCCTTAGCTCCACCA & 69 & 36 & 23 & 15\\\\\n", + "\t Msm.Ala-CGC.trna33 & 55 & + & TCCCCTTAGCTCCACC & 3 & 12 & 10 & 1\\\\\n", + "\t Msm.Ala-CGC.trna33 & 55 & + & TCCCCTTAGCTCCACCA & 270 & 541 & 320 & 252\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 6 × 8\n", + "\n", + "| rname <fct> | position <dbl> | strand <fct> | downstream_seq <fct> | ctrl.r1 <int> | ctrl.r2 <int> | MenT1.r1 <int> | MenT1.r2 <int> |\n", + "|---|---|---|---|---|---|---|---|\n", + "| Msm.Ala-CGC.trna33 | 46 | + | CAGGGGTTCGATTCCCCTTAGCTCCACCA | 22 | 38 | 33 | 4 |\n", + "| Msm.Ala-CGC.trna33 | 54 | + | C | 2 | 2 | 32 | 76 |\n", + "| Msm.Ala-CGC.trna33 | 55 | + | <!----> | 2559 | 766 | 840 | 2691 |\n", + "| Msm.Ala-CGC.trna33 | 55 | + | GATTCCCCTTAGCTCCACCA | 69 | 36 | 23 | 15 |\n", + "| Msm.Ala-CGC.trna33 | 55 | + | TCCCCTTAGCTCCACC | 3 | 12 | 10 | 1 |\n", + "| Msm.Ala-CGC.trna33 | 55 | + | TCCCCTTAGCTCCACCA | 270 | 541 | 320 | 252 |\n", + "\n" + ], + "text/plain": [ + " rname position strand downstream_seq ctrl.r1 ctrl.r2 MenT1.r1 MenT1.r2\n", + "1 Msm.Ala-CGC.trna33 46 + CAGGGGTTCGATTCCCCTTAGCTCCACCA 22 38 33 4 \n", + "2 Msm.Ala-CGC.trna33 54 + C 2 2 32 76 \n", + "3 Msm.Ala-CGC.trna33 55 + 2559 766 840 2691 \n", + "4 Msm.Ala-CGC.trna33 55 + GATTCCCCTTAGCTCCACCA 69 36 23 15 \n", + "5 Msm.Ala-CGC.trna33 55 + TCCCCTTAGCTCCACC 3 12 10 1 \n", + "6 Msm.Ala-CGC.trna33 55 + TCCCCTTAGCTCCACCA 270 541 320 252 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "count_table_w <- count_table %>%\n", + " select(-reads) %>%\n", + " pivot_wider(names_from = \"barcode\", values_from=\"count\", values_fill = 0) %>%\n", + " filter(if_any(all_of(conditions), ~ . >= 10))\n", + "count_table_w %>%\n", + " head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "Next, we are going to focus on full length tRNAs. Thus, we will need their length.\n", + "\n", + "tRNAs with expected length from genome reference fasta file:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true, + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A tibble: 6 × 3</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>rname</th><th scope=col>rlength</th><th scope=col>seq</th></tr>\n", + "\t<tr><th scope=col><fct></th><th scope=col><int></th><th scope=col><chr></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>GGGGCTATGGCGCAGTTGGTAGCGCGACTCGTTCGCATCGAGTAGGTCAGGGGTTCGATTCCCCTTAGCTCCACCA</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>76</td><td>GGGGCTATGGCGCAGTTGGTAGCGCACCACACTGGCAGTGTGGGGGTCAGGGGTTCGAATCCCCTTAGCTCCACCA</td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>76</td><td>GGGGCCTTAGCTCAGTTGGTAGAGCGCTGCCTTTGCAAGGCAGATGTCAGGAGTTCGAATCTCCTAGGCTCCACCA</td></tr>\n", + "\t<tr><td>Msm.Arg-ACG.trna27</td><td>76</td><td>GCGCCCGTAGCTCAACGGATAGAGCATCTGACTACGGATCAGAAGGTTAGGGGTTCGAATCCCTTCGGGCGCACCA</td></tr>\n", + "\t<tr><td>Msm.Arg-TCT.trna15</td><td>76</td><td>GCCTCCGTAGCTCAATGGATAGAGCATCGGCCTTCTAATCCGACGGTTGCAGGTTCGAGTCCTGCCGGGGGCGCCA</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>76</td><td>GCCCCCGTAGCTCAGGGGATAGAGCGTCTGCCTCCGGAGCAGAAGGCCGCAGGTTCGAATCCTGCCGGGGGCACCA</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A tibble: 6 × 3\n", + "\\begin{tabular}{lll}\n", + " rname & rlength & seq\\\\\n", + " <fct> & <int> & <chr>\\\\\n", + "\\hline\n", + "\t Msm.Ala-CGC.trna33 & 76 & GGGGCTATGGCGCAGTTGGTAGCGCGACTCGTTCGCATCGAGTAGGTCAGGGGTTCGATTCCCCTTAGCTCCACCA\\\\\n", + "\t Msm.Ala-GGC.trna9 & 76 & GGGGCTATGGCGCAGTTGGTAGCGCACCACACTGGCAGTGTGGGGGTCAGGGGTTCGAATCCCCTTAGCTCCACCA\\\\\n", + "\t Msm.Ala-TGC.trna2 & 76 & GGGGCCTTAGCTCAGTTGGTAGAGCGCTGCCTTTGCAAGGCAGATGTCAGGAGTTCGAATCTCCTAGGCTCCACCA\\\\\n", + "\t Msm.Arg-ACG.trna27 & 76 & GCGCCCGTAGCTCAACGGATAGAGCATCTGACTACGGATCAGAAGGTTAGGGGTTCGAATCCCTTCGGGCGCACCA\\\\\n", + "\t Msm.Arg-TCT.trna15 & 76 & GCCTCCGTAGCTCAATGGATAGAGCATCGGCCTTCTAATCCGACGGTTGCAGGTTCGAGTCCTGCCGGGGGCGCCA\\\\\n", + "\t Msm.Arg-CCG.trna18 & 76 & GCCCCCGTAGCTCAGGGGATAGAGCGTCTGCCTCCGGAGCAGAAGGCCGCAGGTTCGAATCCTGCCGGGGGCACCA\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 6 × 3\n", + "\n", + "| rname <fct> | rlength <int> | seq <chr> |\n", + "|---|---|---|\n", + "| Msm.Ala-CGC.trna33 | 76 | GGGGCTATGGCGCAGTTGGTAGCGCGACTCGTTCGCATCGAGTAGGTCAGGGGTTCGATTCCCCTTAGCTCCACCA |\n", + "| Msm.Ala-GGC.trna9 | 76 | GGGGCTATGGCGCAGTTGGTAGCGCACCACACTGGCAGTGTGGGGGTCAGGGGTTCGAATCCCCTTAGCTCCACCA |\n", + "| Msm.Ala-TGC.trna2 | 76 | GGGGCCTTAGCTCAGTTGGTAGAGCGCTGCCTTTGCAAGGCAGATGTCAGGAGTTCGAATCTCCTAGGCTCCACCA |\n", + "| Msm.Arg-ACG.trna27 | 76 | GCGCCCGTAGCTCAACGGATAGAGCATCTGACTACGGATCAGAAGGTTAGGGGTTCGAATCCCTTCGGGCGCACCA |\n", + "| Msm.Arg-TCT.trna15 | 76 | GCCTCCGTAGCTCAATGGATAGAGCATCGGCCTTCTAATCCGACGGTTGCAGGTTCGAGTCCTGCCGGGGGCGCCA |\n", + "| Msm.Arg-CCG.trna18 | 76 | GCCCCCGTAGCTCAGGGGATAGAGCGTCTGCCTCCGGAGCAGAAGGCCGCAGGTTCGAATCCTGCCGGGGGCACCA |\n", + "\n" + ], + "text/plain": [ + " rname rlength seq \n", + "1 Msm.Ala-CGC.trna33 76 GGGGCTATGGCGCAGTTGGTAGCGCGACTCGTTCGCATCGAGTAGGTCAGGGGTTCGATTCCCCTTAGCTCCACCA\n", + "2 Msm.Ala-GGC.trna9 76 GGGGCTATGGCGCAGTTGGTAGCGCACCACACTGGCAGTGTGGGGGTCAGGGGTTCGAATCCCCTTAGCTCCACCA\n", + "3 Msm.Ala-TGC.trna2 76 GGGGCCTTAGCTCAGTTGGTAGAGCGCTGCCTTTGCAAGGCAGATGTCAGGAGTTCGAATCTCCTAGGCTCCACCA\n", + "4 Msm.Arg-ACG.trna27 76 GCGCCCGTAGCTCAACGGATAGAGCATCTGACTACGGATCAGAAGGTTAGGGGTTCGAATCCCTTCGGGCGCACCA\n", + "5 Msm.Arg-TCT.trna15 76 GCCTCCGTAGCTCAATGGATAGAGCATCGGCCTTCTAATCCGACGGTTGCAGGTTCGAGTCCTGCCGGGGGCGCCA\n", + "6 Msm.Arg-CCG.trna18 76 GCCCCCGTAGCTCAGGGGATAGAGCGTCTGCCTCCGGAGCAGAAGGCCGCAGGTTCGAATCCTGCCGGGGGCACCA" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tRNAs_DNASS <- readDNAStringSet( paste0(data_dir, \"/\", reference_genome))\n", + "tRNAs <- tibble(rlength=width(tRNAs_DNASS), seq=as.character(tRNAs_DNASS), name=names(tRNAs_DNASS)) %>%\n", + " mutate(id = str_extract(name, 'trna\\\\d+.\\\\S+'),\n", + " rname = as.factor(str_extract(name, \"^\\\\S+\"))) %>%\n", + " select(rname, rlength, seq)\n", + "tRNAs %>%\n", + " head" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Filter only full length tRNAs with or without Cs added post-transcriptionaly" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true, + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A tibble: 114 × 9</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>rname</th><th scope=col>rlength</th><th scope=col>position</th><th scope=col>strand</th><th scope=col>downstream_seq</th><th scope=col>ctrl.r1</th><th scope=col>ctrl.r2</th><th scope=col>MenT1.r1</th><th scope=col>MenT1.r2</th></tr>\n", + "\t<tr><th scope=col><fct></th><th scope=col><int></th><th scope=col><dbl></th><th scope=col><fct></th><th scope=col><fct></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th><th scope=col><int></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td> </td><td> 73967</td><td>34677</td><td>14672</td><td>48945</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td>C </td><td> 48</td><td> 6</td><td> 4910</td><td>23062</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td>CC </td><td> 250</td><td> 50</td><td> 758</td><td> 9335</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td>CCC </td><td> 131</td><td> 21</td><td> 49</td><td> 650</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td>CCCC</td><td> 11</td><td> 1</td><td> 6</td><td> 50</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>76</td><td>76</td><td>+</td><td> </td><td>113066</td><td>44768</td><td>22540</td><td>89353</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>76</td><td>76</td><td>+</td><td>C </td><td> 56</td><td> 9</td><td> 8552</td><td>37226</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>76</td><td>76</td><td>+</td><td>CC </td><td> 262</td><td> 46</td><td> 948</td><td>10174</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>76</td><td>76</td><td>+</td><td>CCC </td><td> 132</td><td> 23</td><td> 74</td><td> 704</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>76</td><td>76</td><td>+</td><td>CCCC</td><td> 24</td><td> 2</td><td> 4</td><td> 60</td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>76</td><td>76</td><td>+</td><td> </td><td> 3661</td><td> 1299</td><td> 649</td><td> 2242</td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>76</td><td>76</td><td>+</td><td>C </td><td> 3</td><td> 0</td><td> 178</td><td> 525</td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>76</td><td>76</td><td>+</td><td>CC </td><td> 4</td><td> 0</td><td> 11</td><td> 133</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>76</td><td>76</td><td>+</td><td> </td><td> 19072</td><td>37758</td><td>23471</td><td>19872</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>76</td><td>76</td><td>+</td><td>C </td><td> 37</td><td> 3</td><td>10736</td><td>10419</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>76</td><td>76</td><td>+</td><td>CC </td><td> 27</td><td> 8</td><td> 307</td><td> 182</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>76</td><td>76</td><td>+</td><td>CCC </td><td> 10</td><td> 2</td><td> 21</td><td> 14</td></tr>\n", + "\t<tr><td>Msm.Arg-CCT.trna20</td><td>76</td><td>76</td><td>+</td><td> </td><td> 1852</td><td> 1196</td><td> 648</td><td> 1727</td></tr>\n", + "\t<tr><td>Msm.Arg-CCT.trna20</td><td>76</td><td>76</td><td>+</td><td>CC </td><td> 4</td><td> 0</td><td> 23</td><td> 74</td></tr>\n", + "\t<tr><td>Msm.Arg-CCT.trna20</td><td>76</td><td>76</td><td>+</td><td>C </td><td> 0</td><td> 0</td><td> 215</td><td> 544</td></tr>\n", + "\t<tr><td>Msm.Asn-GTT.trna37</td><td>76</td><td>76</td><td>+</td><td> </td><td> 5023</td><td> 1573</td><td> 1089</td><td> 3794</td></tr>\n", + "\t<tr><td>Msm.Asn-GTT.trna37</td><td>76</td><td>76</td><td>+</td><td>CC </td><td> 6</td><td> 1</td><td> 22</td><td> 155</td></tr>\n", + "\t<tr><td>Msm.Asn-GTT.trna37</td><td>76</td><td>76</td><td>+</td><td>C </td><td> 0</td><td> 0</td><td> 187</td><td> 919</td></tr>\n", + "\t<tr><td>Msm.Asp-GTC.trna31</td><td>77</td><td>77</td><td>+</td><td> </td><td> 1160</td><td> 422</td><td> 154</td><td> 487</td></tr>\n", + "\t<tr><td>Msm.Asp-GTC.trna31</td><td>77</td><td>77</td><td>+</td><td>CC </td><td> 1</td><td> 0</td><td> 4</td><td> 12</td></tr>\n", + "\t<tr><td>Msm.Asp-GTC.trna31</td><td>77</td><td>77</td><td>+</td><td>C </td><td> 0</td><td> 0</td><td> 50</td><td> 142</td></tr>\n", + "\t<tr><td>Msm.Cys-GCA.trna44</td><td>74</td><td>74</td><td>+</td><td> </td><td> 15158</td><td> 2074</td><td> 1332</td><td>12106</td></tr>\n", + "\t<tr><td>Msm.Cys-GCA.trna44</td><td>74</td><td>74</td><td>+</td><td>C </td><td> 14</td><td> 5</td><td> 711</td><td> 7282</td></tr>\n", + "\t<tr><td>Msm.Cys-GCA.trna44</td><td>74</td><td>74</td><td>+</td><td>CC </td><td> 19</td><td> 5</td><td> 50</td><td> 732</td></tr>\n", + "\t<tr><td>Msm.Cys-GCA.trna44</td><td>74</td><td>74</td><td>+</td><td>CCC </td><td> 19</td><td> 2</td><td> 0</td><td> 35</td></tr>\n", + "\t<tr><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td></tr>\n", + "\t<tr><td>Msm.SeC-TCA.trna46</td><td>95</td><td>95</td><td>+</td><td> </td><td> 196</td><td> 320</td><td> 165</td><td> 186</td></tr>\n", + "\t<tr><td>Msm.SeC-TCA.trna46</td><td>95</td><td>95</td><td>+</td><td>C </td><td> 1</td><td> 0</td><td> 46</td><td> 46</td></tr>\n", + "\t<tr><td>Msm.SeC-TCA.trna46</td><td>95</td><td>95</td><td>+</td><td>CC </td><td> 0</td><td> 0</td><td> 4</td><td> 10</td></tr>\n", + "\t<tr><td>Msm.Ser-CGA.trna28</td><td>91</td><td>91</td><td>+</td><td> </td><td> 185</td><td> 35</td><td> 18</td><td> 143</td></tr>\n", + "\t<tr><td>Msm.Ser-CGA.trna28</td><td>91</td><td>91</td><td>+</td><td>C </td><td> 0</td><td> 0</td><td> 2</td><td> 34</td></tr>\n", + "\t<tr><td>Msm.Ser-GCT.trna26</td><td>92</td><td>92</td><td>+</td><td> </td><td> 515</td><td> 290</td><td> 102</td><td> 521</td></tr>\n", + "\t<tr><td>Msm.Ser-GCT.trna26</td><td>92</td><td>92</td><td>+</td><td>C </td><td> 0</td><td> 0</td><td> 10</td><td> 93</td></tr>\n", + "\t<tr><td>Msm.Ser-GGA.trna24</td><td>89</td><td>89</td><td>+</td><td> </td><td>15668</td><td> 6042</td><td> 2837</td><td>11699</td></tr>\n", + "\t<tr><td>Msm.Ser-GGA.trna24</td><td>89</td><td>89</td><td>+</td><td>C </td><td> 11</td><td> 2</td><td> 695</td><td> 4528</td></tr>\n", + "\t<tr><td>Msm.Ser-GGA.trna24</td><td>89</td><td>89</td><td>+</td><td>CC </td><td> 4</td><td> 1</td><td> 49</td><td> 503</td></tr>\n", + "\t<tr><td>Msm.Ser-GGA.trna24</td><td>89</td><td>89</td><td>+</td><td>CCC</td><td> 0</td><td> 3</td><td> 3</td><td> 22</td></tr>\n", + "\t<tr><td>Msm.Ser-TGA.trna25</td><td>90</td><td>90</td><td>+</td><td> </td><td> 23</td><td> 13</td><td> 3</td><td> 19</td></tr>\n", + "\t<tr><td>Msm.Thr-CGT.trna29</td><td>76</td><td>76</td><td>+</td><td> </td><td> 311</td><td> 101</td><td> 34</td><td> 155</td></tr>\n", + "\t<tr><td>Msm.Thr-CGT.trna29</td><td>76</td><td>76</td><td>+</td><td>C </td><td> 1</td><td> 0</td><td> 7</td><td> 40</td></tr>\n", + "\t<tr><td>Msm.Thr-GGT.trna5 </td><td>76</td><td>76</td><td>+</td><td> </td><td>11034</td><td>10296</td><td> 5747</td><td> 5073</td></tr>\n", + "\t<tr><td>Msm.Thr-GGT.trna5 </td><td>76</td><td>76</td><td>+</td><td>C </td><td> 11</td><td> 0</td><td> 1312</td><td> 1644</td></tr>\n", + "\t<tr><td>Msm.Thr-GGT.trna5 </td><td>76</td><td>76</td><td>+</td><td>CC </td><td> 8</td><td> 1</td><td> 75</td><td> 170</td></tr>\n", + "\t<tr><td>Msm.Thr-TGT </td><td>75</td><td>75</td><td>+</td><td> </td><td> 76</td><td> 16</td><td> 2</td><td> 47</td></tr>\n", + "\t<tr><td>Msm.Thr-TGT </td><td>75</td><td>75</td><td>+</td><td>C </td><td> 0</td><td> 0</td><td> 0</td><td> 37</td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>76</td><td>76</td><td>+</td><td> </td><td> 90</td><td> 11</td><td> 6</td><td> 32</td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>86</td><td>86</td><td>+</td><td> </td><td> 382</td><td> 96</td><td> 62</td><td> 267</td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>86</td><td>86</td><td>+</td><td>C </td><td> 0</td><td> 0</td><td> 21</td><td> 94</td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>86</td><td>86</td><td>+</td><td>CC </td><td> 0</td><td> 0</td><td> 3</td><td> 26</td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>75</td><td>75</td><td>+</td><td> </td><td> 938</td><td> 537</td><td> 326</td><td> 908</td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>75</td><td>75</td><td>+</td><td>C </td><td> 2</td><td> 0</td><td> 45</td><td> 133</td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>75</td><td>75</td><td>+</td><td>CC </td><td> 1</td><td> 0</td><td> 5</td><td> 40</td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>75</td><td>75</td><td>+</td><td> </td><td>54527</td><td>25738</td><td>17592</td><td>51667</td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>75</td><td>75</td><td>+</td><td>C </td><td> 13</td><td> 0</td><td> 2191</td><td> 7233</td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>75</td><td>75</td><td>+</td><td>CC </td><td> 60</td><td> 9</td><td> 212</td><td> 1501</td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>75</td><td>75</td><td>+</td><td>CCC</td><td> 16</td><td> 5</td><td> 15</td><td> 68</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A tibble: 114 × 9\n", + "\\begin{tabular}{lllllllll}\n", + " rname & rlength & position & strand & downstream\\_seq & ctrl.r1 & ctrl.r2 & MenT1.r1 & MenT1.r2\\\\\n", + " <fct> & <int> & <dbl> & <fct> & <fct> & <int> & <int> & <int> & <int>\\\\\n", + "\\hline\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & & 73967 & 34677 & 14672 & 48945\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & C & 48 & 6 & 4910 & 23062\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & CC & 250 & 50 & 758 & 9335\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & CCC & 131 & 21 & 49 & 650\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & CCCC & 11 & 1 & 6 & 50\\\\\n", + "\t Msm.Ala-GGC.trna9 & 76 & 76 & + & & 113066 & 44768 & 22540 & 89353\\\\\n", + "\t Msm.Ala-GGC.trna9 & 76 & 76 & + & C & 56 & 9 & 8552 & 37226\\\\\n", + "\t Msm.Ala-GGC.trna9 & 76 & 76 & + & CC & 262 & 46 & 948 & 10174\\\\\n", + "\t Msm.Ala-GGC.trna9 & 76 & 76 & + & CCC & 132 & 23 & 74 & 704\\\\\n", + "\t Msm.Ala-GGC.trna9 & 76 & 76 & + & CCCC & 24 & 2 & 4 & 60\\\\\n", + "\t Msm.Ala-TGC.trna2 & 76 & 76 & + & & 3661 & 1299 & 649 & 2242\\\\\n", + "\t Msm.Ala-TGC.trna2 & 76 & 76 & + & C & 3 & 0 & 178 & 525\\\\\n", + "\t Msm.Ala-TGC.trna2 & 76 & 76 & + & CC & 4 & 0 & 11 & 133\\\\\n", + "\t Msm.Arg-CCG.trna18 & 76 & 76 & + & & 19072 & 37758 & 23471 & 19872\\\\\n", + "\t Msm.Arg-CCG.trna18 & 76 & 76 & + & C & 37 & 3 & 10736 & 10419\\\\\n", + "\t Msm.Arg-CCG.trna18 & 76 & 76 & + & CC & 27 & 8 & 307 & 182\\\\\n", + "\t Msm.Arg-CCG.trna18 & 76 & 76 & + & CCC & 10 & 2 & 21 & 14\\\\\n", + "\t Msm.Arg-CCT.trna20 & 76 & 76 & + & & 1852 & 1196 & 648 & 1727\\\\\n", + "\t Msm.Arg-CCT.trna20 & 76 & 76 & + & CC & 4 & 0 & 23 & 74\\\\\n", + "\t Msm.Arg-CCT.trna20 & 76 & 76 & + & C & 0 & 0 & 215 & 544\\\\\n", + "\t Msm.Asn-GTT.trna37 & 76 & 76 & + & & 5023 & 1573 & 1089 & 3794\\\\\n", + "\t Msm.Asn-GTT.trna37 & 76 & 76 & + & CC & 6 & 1 & 22 & 155\\\\\n", + "\t Msm.Asn-GTT.trna37 & 76 & 76 & + & C & 0 & 0 & 187 & 919\\\\\n", + "\t Msm.Asp-GTC.trna31 & 77 & 77 & + & & 1160 & 422 & 154 & 487\\\\\n", + "\t Msm.Asp-GTC.trna31 & 77 & 77 & + & CC & 1 & 0 & 4 & 12\\\\\n", + "\t Msm.Asp-GTC.trna31 & 77 & 77 & + & C & 0 & 0 & 50 & 142\\\\\n", + "\t Msm.Cys-GCA.trna44 & 74 & 74 & + & & 15158 & 2074 & 1332 & 12106\\\\\n", + "\t Msm.Cys-GCA.trna44 & 74 & 74 & + & C & 14 & 5 & 711 & 7282\\\\\n", + "\t Msm.Cys-GCA.trna44 & 74 & 74 & + & CC & 19 & 5 & 50 & 732\\\\\n", + "\t Msm.Cys-GCA.trna44 & 74 & 74 & + & CCC & 19 & 2 & 0 & 35\\\\\n", + "\t â‹® & â‹® & â‹® & â‹® & â‹® & â‹® & â‹® & â‹® & â‹®\\\\\n", + "\t Msm.SeC-TCA.trna46 & 95 & 95 & + & & 196 & 320 & 165 & 186\\\\\n", + "\t Msm.SeC-TCA.trna46 & 95 & 95 & + & C & 1 & 0 & 46 & 46\\\\\n", + "\t Msm.SeC-TCA.trna46 & 95 & 95 & + & CC & 0 & 0 & 4 & 10\\\\\n", + "\t Msm.Ser-CGA.trna28 & 91 & 91 & + & & 185 & 35 & 18 & 143\\\\\n", + "\t Msm.Ser-CGA.trna28 & 91 & 91 & + & C & 0 & 0 & 2 & 34\\\\\n", + "\t Msm.Ser-GCT.trna26 & 92 & 92 & + & & 515 & 290 & 102 & 521\\\\\n", + "\t Msm.Ser-GCT.trna26 & 92 & 92 & + & C & 0 & 0 & 10 & 93\\\\\n", + "\t Msm.Ser-GGA.trna24 & 89 & 89 & + & & 15668 & 6042 & 2837 & 11699\\\\\n", + "\t Msm.Ser-GGA.trna24 & 89 & 89 & + & C & 11 & 2 & 695 & 4528\\\\\n", + "\t Msm.Ser-GGA.trna24 & 89 & 89 & + & CC & 4 & 1 & 49 & 503\\\\\n", + "\t Msm.Ser-GGA.trna24 & 89 & 89 & + & CCC & 0 & 3 & 3 & 22\\\\\n", + "\t Msm.Ser-TGA.trna25 & 90 & 90 & + & & 23 & 13 & 3 & 19\\\\\n", + "\t Msm.Thr-CGT.trna29 & 76 & 76 & + & & 311 & 101 & 34 & 155\\\\\n", + "\t Msm.Thr-CGT.trna29 & 76 & 76 & + & C & 1 & 0 & 7 & 40\\\\\n", + "\t Msm.Thr-GGT.trna5 & 76 & 76 & + & & 11034 & 10296 & 5747 & 5073\\\\\n", + "\t Msm.Thr-GGT.trna5 & 76 & 76 & + & C & 11 & 0 & 1312 & 1644\\\\\n", + "\t Msm.Thr-GGT.trna5 & 76 & 76 & + & CC & 8 & 1 & 75 & 170\\\\\n", + "\t Msm.Thr-TGT & 75 & 75 & + & & 76 & 16 & 2 & 47\\\\\n", + "\t Msm.Thr-TGT & 75 & 75 & + & C & 0 & 0 & 0 & 37\\\\\n", + "\t Msm.Trp-CCA.trna7 & 76 & 76 & + & & 90 & 11 & 6 & 32\\\\\n", + "\t Msm.Tyr-GTA.trna4 & 86 & 86 & + & & 382 & 96 & 62 & 267\\\\\n", + "\t Msm.Tyr-GTA.trna4 & 86 & 86 & + & C & 0 & 0 & 21 & 94\\\\\n", + "\t Msm.Tyr-GTA.trna4 & 86 & 86 & + & CC & 0 & 0 & 3 & 26\\\\\n", + "\t Msm.Val-CAC.trna12 & 75 & 75 & + & & 938 & 537 & 326 & 908\\\\\n", + "\t Msm.Val-CAC.trna12 & 75 & 75 & + & C & 2 & 0 & 45 & 133\\\\\n", + "\t Msm.Val-CAC.trna12 & 75 & 75 & + & CC & 1 & 0 & 5 & 40\\\\\n", + "\t Msm.Val-GAC.trna45 & 75 & 75 & + & & 54527 & 25738 & 17592 & 51667\\\\\n", + "\t Msm.Val-GAC.trna45 & 75 & 75 & + & C & 13 & 0 & 2191 & 7233\\\\\n", + "\t Msm.Val-GAC.trna45 & 75 & 75 & + & CC & 60 & 9 & 212 & 1501\\\\\n", + "\t Msm.Val-GAC.trna45 & 75 & 75 & + & CCC & 16 & 5 & 15 & 68\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 114 × 9\n", + "\n", + "| rname <fct> | rlength <int> | position <dbl> | strand <fct> | downstream_seq <fct> | ctrl.r1 <int> | ctrl.r2 <int> | MenT1.r1 <int> | MenT1.r2 <int> |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | <!----> | 73967 | 34677 | 14672 | 48945 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | C | 48 | 6 | 4910 | 23062 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | CC | 250 | 50 | 758 | 9335 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | CCC | 131 | 21 | 49 | 650 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | CCCC | 11 | 1 | 6 | 50 |\n", + "| Msm.Ala-GGC.trna9 | 76 | 76 | + | <!----> | 113066 | 44768 | 22540 | 89353 |\n", + "| Msm.Ala-GGC.trna9 | 76 | 76 | + | C | 56 | 9 | 8552 | 37226 |\n", + "| Msm.Ala-GGC.trna9 | 76 | 76 | + | CC | 262 | 46 | 948 | 10174 |\n", + "| Msm.Ala-GGC.trna9 | 76 | 76 | + | CCC | 132 | 23 | 74 | 704 |\n", + "| Msm.Ala-GGC.trna9 | 76 | 76 | + | CCCC | 24 | 2 | 4 | 60 |\n", + "| Msm.Ala-TGC.trna2 | 76 | 76 | + | <!----> | 3661 | 1299 | 649 | 2242 |\n", + "| Msm.Ala-TGC.trna2 | 76 | 76 | + | C | 3 | 0 | 178 | 525 |\n", + "| Msm.Ala-TGC.trna2 | 76 | 76 | + | CC | 4 | 0 | 11 | 133 |\n", + "| Msm.Arg-CCG.trna18 | 76 | 76 | + | <!----> | 19072 | 37758 | 23471 | 19872 |\n", + "| Msm.Arg-CCG.trna18 | 76 | 76 | + | C | 37 | 3 | 10736 | 10419 |\n", + "| Msm.Arg-CCG.trna18 | 76 | 76 | + | CC | 27 | 8 | 307 | 182 |\n", + "| Msm.Arg-CCG.trna18 | 76 | 76 | + | CCC | 10 | 2 | 21 | 14 |\n", + "| Msm.Arg-CCT.trna20 | 76 | 76 | + | <!----> | 1852 | 1196 | 648 | 1727 |\n", + "| Msm.Arg-CCT.trna20 | 76 | 76 | + | CC | 4 | 0 | 23 | 74 |\n", + "| Msm.Arg-CCT.trna20 | 76 | 76 | + | C | 0 | 0 | 215 | 544 |\n", + "| Msm.Asn-GTT.trna37 | 76 | 76 | + | <!----> | 5023 | 1573 | 1089 | 3794 |\n", + "| Msm.Asn-GTT.trna37 | 76 | 76 | + | CC | 6 | 1 | 22 | 155 |\n", + "| Msm.Asn-GTT.trna37 | 76 | 76 | + | C | 0 | 0 | 187 | 919 |\n", + "| Msm.Asp-GTC.trna31 | 77 | 77 | + | <!----> | 1160 | 422 | 154 | 487 |\n", + "| Msm.Asp-GTC.trna31 | 77 | 77 | + | CC | 1 | 0 | 4 | 12 |\n", + "| Msm.Asp-GTC.trna31 | 77 | 77 | + | C | 0 | 0 | 50 | 142 |\n", + "| Msm.Cys-GCA.trna44 | 74 | 74 | + | <!----> | 15158 | 2074 | 1332 | 12106 |\n", + "| Msm.Cys-GCA.trna44 | 74 | 74 | + | C | 14 | 5 | 711 | 7282 |\n", + "| Msm.Cys-GCA.trna44 | 74 | 74 | + | CC | 19 | 5 | 50 | 732 |\n", + "| Msm.Cys-GCA.trna44 | 74 | 74 | + | CCC | 19 | 2 | 0 | 35 |\n", + "| â‹® | â‹® | â‹® | â‹® | â‹® | â‹® | â‹® | â‹® | â‹® |\n", + "| Msm.SeC-TCA.trna46 | 95 | 95 | + | <!----> | 196 | 320 | 165 | 186 |\n", + "| Msm.SeC-TCA.trna46 | 95 | 95 | + | C | 1 | 0 | 46 | 46 |\n", + "| Msm.SeC-TCA.trna46 | 95 | 95 | + | CC | 0 | 0 | 4 | 10 |\n", + "| Msm.Ser-CGA.trna28 | 91 | 91 | + | <!----> | 185 | 35 | 18 | 143 |\n", + "| Msm.Ser-CGA.trna28 | 91 | 91 | + | C | 0 | 0 | 2 | 34 |\n", + "| Msm.Ser-GCT.trna26 | 92 | 92 | + | <!----> | 515 | 290 | 102 | 521 |\n", + "| Msm.Ser-GCT.trna26 | 92 | 92 | + | C | 0 | 0 | 10 | 93 |\n", + "| Msm.Ser-GGA.trna24 | 89 | 89 | + | <!----> | 15668 | 6042 | 2837 | 11699 |\n", + "| Msm.Ser-GGA.trna24 | 89 | 89 | + | C | 11 | 2 | 695 | 4528 |\n", + "| Msm.Ser-GGA.trna24 | 89 | 89 | + | CC | 4 | 1 | 49 | 503 |\n", + "| Msm.Ser-GGA.trna24 | 89 | 89 | + | CCC | 0 | 3 | 3 | 22 |\n", + "| Msm.Ser-TGA.trna25 | 90 | 90 | + | <!----> | 23 | 13 | 3 | 19 |\n", + "| Msm.Thr-CGT.trna29 | 76 | 76 | + | <!----> | 311 | 101 | 34 | 155 |\n", + "| Msm.Thr-CGT.trna29 | 76 | 76 | + | C | 1 | 0 | 7 | 40 |\n", + "| Msm.Thr-GGT.trna5 | 76 | 76 | + | <!----> | 11034 | 10296 | 5747 | 5073 |\n", + "| Msm.Thr-GGT.trna5 | 76 | 76 | + | C | 11 | 0 | 1312 | 1644 |\n", + "| Msm.Thr-GGT.trna5 | 76 | 76 | + | CC | 8 | 1 | 75 | 170 |\n", + "| Msm.Thr-TGT | 75 | 75 | + | <!----> | 76 | 16 | 2 | 47 |\n", + "| Msm.Thr-TGT | 75 | 75 | + | C | 0 | 0 | 0 | 37 |\n", + "| Msm.Trp-CCA.trna7 | 76 | 76 | + | <!----> | 90 | 11 | 6 | 32 |\n", + "| Msm.Tyr-GTA.trna4 | 86 | 86 | + | <!----> | 382 | 96 | 62 | 267 |\n", + "| Msm.Tyr-GTA.trna4 | 86 | 86 | + | C | 0 | 0 | 21 | 94 |\n", + "| Msm.Tyr-GTA.trna4 | 86 | 86 | + | CC | 0 | 0 | 3 | 26 |\n", + "| Msm.Val-CAC.trna12 | 75 | 75 | + | <!----> | 938 | 537 | 326 | 908 |\n", + "| Msm.Val-CAC.trna12 | 75 | 75 | + | C | 2 | 0 | 45 | 133 |\n", + "| Msm.Val-CAC.trna12 | 75 | 75 | + | CC | 1 | 0 | 5 | 40 |\n", + "| Msm.Val-GAC.trna45 | 75 | 75 | + | <!----> | 54527 | 25738 | 17592 | 51667 |\n", + "| Msm.Val-GAC.trna45 | 75 | 75 | + | C | 13 | 0 | 2191 | 7233 |\n", + "| Msm.Val-GAC.trna45 | 75 | 75 | + | CC | 60 | 9 | 212 | 1501 |\n", + "| Msm.Val-GAC.trna45 | 75 | 75 | + | CCC | 16 | 5 | 15 | 68 |\n", + "\n" + ], + "text/plain": [ + " rname rlength position strand downstream_seq ctrl.r1 ctrl.r2 MenT1.r1 MenT1.r2\n", + "1 Msm.Ala-CGC.trna33 76 76 + 73967 34677 14672 48945 \n", + "2 Msm.Ala-CGC.trna33 76 76 + C 48 6 4910 23062 \n", + "3 Msm.Ala-CGC.trna33 76 76 + CC 250 50 758 9335 \n", + "4 Msm.Ala-CGC.trna33 76 76 + CCC 131 21 49 650 \n", + "5 Msm.Ala-CGC.trna33 76 76 + CCCC 11 1 6 50 \n", + "6 Msm.Ala-GGC.trna9 76 76 + 113066 44768 22540 89353 \n", + "7 Msm.Ala-GGC.trna9 76 76 + C 56 9 8552 37226 \n", + "8 Msm.Ala-GGC.trna9 76 76 + CC 262 46 948 10174 \n", + "9 Msm.Ala-GGC.trna9 76 76 + CCC 132 23 74 704 \n", + "10 Msm.Ala-GGC.trna9 76 76 + CCCC 24 2 4 60 \n", + "11 Msm.Ala-TGC.trna2 76 76 + 3661 1299 649 2242 \n", + "12 Msm.Ala-TGC.trna2 76 76 + C 3 0 178 525 \n", + "13 Msm.Ala-TGC.trna2 76 76 + CC 4 0 11 133 \n", + "14 Msm.Arg-CCG.trna18 76 76 + 19072 37758 23471 19872 \n", + "15 Msm.Arg-CCG.trna18 76 76 + C 37 3 10736 10419 \n", + "16 Msm.Arg-CCG.trna18 76 76 + CC 27 8 307 182 \n", + "17 Msm.Arg-CCG.trna18 76 76 + CCC 10 2 21 14 \n", + "18 Msm.Arg-CCT.trna20 76 76 + 1852 1196 648 1727 \n", + "19 Msm.Arg-CCT.trna20 76 76 + CC 4 0 23 74 \n", + "20 Msm.Arg-CCT.trna20 76 76 + C 0 0 215 544 \n", + "21 Msm.Asn-GTT.trna37 76 76 + 5023 1573 1089 3794 \n", + "22 Msm.Asn-GTT.trna37 76 76 + CC 6 1 22 155 \n", + "23 Msm.Asn-GTT.trna37 76 76 + C 0 0 187 919 \n", + "24 Msm.Asp-GTC.trna31 77 77 + 1160 422 154 487 \n", + "25 Msm.Asp-GTC.trna31 77 77 + CC 1 0 4 12 \n", + "26 Msm.Asp-GTC.trna31 77 77 + C 0 0 50 142 \n", + "27 Msm.Cys-GCA.trna44 74 74 + 15158 2074 1332 12106 \n", + "28 Msm.Cys-GCA.trna44 74 74 + C 14 5 711 7282 \n", + "29 Msm.Cys-GCA.trna44 74 74 + CC 19 5 50 732 \n", + "30 Msm.Cys-GCA.trna44 74 74 + CCC 19 2 0 35 \n", + "â‹® â‹® â‹® â‹® â‹® â‹® â‹® â‹® â‹® â‹® \n", + "85 Msm.SeC-TCA.trna46 95 95 + 196 320 165 186 \n", + "86 Msm.SeC-TCA.trna46 95 95 + C 1 0 46 46 \n", + "87 Msm.SeC-TCA.trna46 95 95 + CC 0 0 4 10 \n", + "88 Msm.Ser-CGA.trna28 91 91 + 185 35 18 143 \n", + "89 Msm.Ser-CGA.trna28 91 91 + C 0 0 2 34 \n", + "90 Msm.Ser-GCT.trna26 92 92 + 515 290 102 521 \n", + "91 Msm.Ser-GCT.trna26 92 92 + C 0 0 10 93 \n", + "92 Msm.Ser-GGA.trna24 89 89 + 15668 6042 2837 11699 \n", + "93 Msm.Ser-GGA.trna24 89 89 + C 11 2 695 4528 \n", + "94 Msm.Ser-GGA.trna24 89 89 + CC 4 1 49 503 \n", + "95 Msm.Ser-GGA.trna24 89 89 + CCC 0 3 3 22 \n", + "96 Msm.Ser-TGA.trna25 90 90 + 23 13 3 19 \n", + "97 Msm.Thr-CGT.trna29 76 76 + 311 101 34 155 \n", + "98 Msm.Thr-CGT.trna29 76 76 + C 1 0 7 40 \n", + "99 Msm.Thr-GGT.trna5 76 76 + 11034 10296 5747 5073 \n", + "100 Msm.Thr-GGT.trna5 76 76 + C 11 0 1312 1644 \n", + "101 Msm.Thr-GGT.trna5 76 76 + CC 8 1 75 170 \n", + "102 Msm.Thr-TGT 75 75 + 76 16 2 47 \n", + "103 Msm.Thr-TGT 75 75 + C 0 0 0 37 \n", + "104 Msm.Trp-CCA.trna7 76 76 + 90 11 6 32 \n", + "105 Msm.Tyr-GTA.trna4 86 86 + 382 96 62 267 \n", + "106 Msm.Tyr-GTA.trna4 86 86 + C 0 0 21 94 \n", + "107 Msm.Tyr-GTA.trna4 86 86 + CC 0 0 3 26 \n", + "108 Msm.Val-CAC.trna12 75 75 + 938 537 326 908 \n", + "109 Msm.Val-CAC.trna12 75 75 + C 2 0 45 133 \n", + "110 Msm.Val-CAC.trna12 75 75 + CC 1 0 5 40 \n", + "111 Msm.Val-GAC.trna45 75 75 + 54527 25738 17592 51667 \n", + "112 Msm.Val-GAC.trna45 75 75 + C 13 0 2191 7233 \n", + "113 Msm.Val-GAC.trna45 75 75 + CC 60 9 212 1501 \n", + "114 Msm.Val-GAC.trna45 75 75 + CCC 16 5 15 68 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "count_table_w <- tRNAs %>%\n", + " select(-seq) %>%\n", + " inner_join(count_table_w, by = join_by(rname)) %>%\n", + " filter(position == rlength, str_detect(downstream_seq, pattern = \"^C*$\"))\n", + "count_table_w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualize proportions of post-transcriptional modifications with bar plots\n", + "\n", + "Longer format to compute proportions per tRNA per condition" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true, + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A tibble: 6 × 9</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>rname</th><th scope=col>rlength</th><th scope=col>position</th><th scope=col>strand</th><th scope=col>downstream_seq</th><th scope=col>condition</th><th scope=col>count</th><th scope=col>pc</th><th scope=col>total</th></tr>\n", + "\t<tr><th scope=col><fct></th><th scope=col><int></th><th scope=col><dbl></th><th scope=col><fct></th><th scope=col><fct></th><th scope=col><chr></th><th scope=col><int></th><th scope=col><dbl></th><th scope=col><int></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td> </td><td>ctrl.r1 </td><td>73967</td><td>99.4</td><td>74407</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td> </td><td>ctrl.r2 </td><td>34677</td><td>99.8</td><td>34755</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td> </td><td>MenT1.r1</td><td>14672</td><td>71.9</td><td>20395</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td> </td><td>MenT1.r2</td><td>48945</td><td>59.7</td><td>82042</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td>C</td><td>ctrl.r1 </td><td> 48</td><td> 0.1</td><td>74407</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>76</td><td>+</td><td>C</td><td>ctrl.r2 </td><td> 6</td><td> 0.0</td><td>34755</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A tibble: 6 × 9\n", + "\\begin{tabular}{lllllllll}\n", + " rname & rlength & position & strand & downstream\\_seq & condition & count & pc & total\\\\\n", + " <fct> & <int> & <dbl> & <fct> & <fct> & <chr> & <int> & <dbl> & <int>\\\\\n", + "\\hline\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & & ctrl.r1 & 73967 & 99.4 & 74407\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & & ctrl.r2 & 34677 & 99.8 & 34755\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & & MenT1.r1 & 14672 & 71.9 & 20395\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & & MenT1.r2 & 48945 & 59.7 & 82042\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & C & ctrl.r1 & 48 & 0.1 & 74407\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & 76 & + & C & ctrl.r2 & 6 & 0.0 & 34755\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 6 × 9\n", + "\n", + "| rname <fct> | rlength <int> | position <dbl> | strand <fct> | downstream_seq <fct> | condition <chr> | count <int> | pc <dbl> | total <int> |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | <!----> | ctrl.r1 | 73967 | 99.4 | 74407 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | <!----> | ctrl.r2 | 34677 | 99.8 | 34755 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | <!----> | MenT1.r1 | 14672 | 71.9 | 20395 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | <!----> | MenT1.r2 | 48945 | 59.7 | 82042 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | C | ctrl.r1 | 48 | 0.1 | 74407 |\n", + "| Msm.Ala-CGC.trna33 | 76 | 76 | + | C | ctrl.r2 | 6 | 0.0 | 34755 |\n", + "\n" + ], + "text/plain": [ + " rname rlength position strand downstream_seq condition count pc total\n", + "1 Msm.Ala-CGC.trna33 76 76 + ctrl.r1 73967 99.4 74407\n", + "2 Msm.Ala-CGC.trna33 76 76 + ctrl.r2 34677 99.8 34755\n", + "3 Msm.Ala-CGC.trna33 76 76 + MenT1.r1 14672 71.9 20395\n", + "4 Msm.Ala-CGC.trna33 76 76 + MenT1.r2 48945 59.7 82042\n", + "5 Msm.Ala-CGC.trna33 76 76 + C ctrl.r1 48 0.1 74407\n", + "6 Msm.Ala-CGC.trna33 76 76 + C ctrl.r2 6 0.0 34755" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "count_table_l <- count_table_w %>%\n", + " pivot_longer(cols = all_of(conditions),\n", + " names_to = \"condition\",\n", + " values_to = \"count\")\n", + "count_per_tRNA_per_sample <- count_table_l %>%\n", + " group_by(condition, rname) %>%\n", + " summarise(total=sum(count), .groups = \"keep\") %>%\n", + " select(condition, rname, total)\n", + "# totals and percentages\n", + "count_table_l <- count_table_l %>%\n", + " inner_join(count_per_tRNA_per_sample, by = c(\"condition\", \"rname\")) %>%\n", + " mutate(pc = round(count / total * 100, 1)) %>%\n", + " relocate(pc, .after = count)\n", + "count_table_l %>%\n", + " head" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\noKDfy83NzU33X2pqalpaWthnU1NTAGhoaNi7d6+RkZGampq6urqWltaWLVtqamo4m7cZwEs0\nGm3Tpk0aGhoGBgZaWlpGRkZubm7t2bCgoMDV1VVLS0tdXV1NTc3R0TE+Pr552OLFi7kPu7a2\nNra4ePHi9mTy6dMn7AiXl5d3yv7+htzcXFdXVzU1NSMjI3V19UGDBr17966DeYaFhQ0ePBg7\nAdTU1BYtWlRWVsYdEBMTM2rUKHV1dSxgyJAhzU/XK1euYAetg4XpoN8+hVpRVFQ0Z84cbW1t\nbPexqY3YXPMltnLmtH7K8Z6bm5uRkZG2traenp6mpuamTZsaGho6kmGn3GEYDIaJiYmamtqL\nFy86UphO0YmXmKmpKfbfraWlxbnn6+rqYudkD7qsEOQHfk99wSPYlGJZWVntjHd3dzcyMuIs\nJiQkzJo1y8jIiEKhdLAkpqambm5unMXGxkZnZ2crK6unT59WVlbW19e/fv16wIABkydPZjKZ\n7Qloj/79+7c5pZiOjk57stq1a5eFhUVsbCxWNk9PT01NzTanjsnNzTU1NZ09e3ZqampjY2NW\nVtbcuXP79+9fWlra0iZpaWmqqqrJycm/lMn+/futra21tLRu377dnt1hs9lYDanNKcUWLVrU\nntxYLNbIkSOnTJlSUFDAZrNramr27NljYGCALf6e58+fa2pqHjlyJD8/v7GxMSoqysHBYcqU\nKZyAJ0+eaGpqbt68OT09vbGx8evXrzt37tTQ0Hjz5g13Pk5OTnZ2dqqqqhkZGe3/dk9PT2jH\nlGJ3795tZ4a/dwq1Iicnx8TEZOLEidHR0VQqtbKy8ubNmzo6OkePHsUC2nn6NT/l2uOvv/6C\ndkwp9u3bt/bk9vTpUw0NDS8vLwaDwWazY2JiLC0t9+7d+0tF4tZZd5igoCBVVVU7O7vly5f/\nUgEMDQ3bnFLM2Ni4/Rl2xSXGbnbPZ3fxZYXJz8+HLptSLCVlXuf+64pCIl0Btdi1CzbrADZp\nCQCkpqaWlJR8+/bt/v37nJiioqLk5GQ6nf5LObu7u2dmZj558mTs2LHS0tIiIiIjRoy4detW\nZGTk+/fv2xPAY8+fP1+4cCE2tjiRSJw6daqTk1NgYCAngM1m5+XlJSUlcR+K06dPq6mp3bp1\ny8jIiEgk6ujoXLlyhU6n+/j4tP+r28yEzWb7+/tPnjzZwcHBz8+vk/b41+Tl5aWmpu7YsUNV\n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\nmvFo1goB1SW5KS/+s66ltSPvZyjkGlpzQ0H6WwCmkp418b+THX5JfS0oLCGrpt/esXysqa7i\na/Z79sUnOMQbqksL09+Iyihjy1HwpbTIe2VfPg4eNo39Gp95b2EyGKxNo3HOrL3ZcU/yP8Zo\nW81os04SHnmJD1DXMO0Xs6ZjGHRaTekXOq1FQl6NINDxmpYI0id0MMaORCK9fv2aKGS/bAAA\nIABJREFUvWFXW1v7/v17EumnZ9adPn369OnTsdcLFy6cO3futGnTWpVhMpmHDx+eM2eOtbV1\nJ0/bhUO4LD8t5pn3FgCgNtUZjHaynrOV1xnxQN6HV6HnfmcyGQDw9sFpGRVdh+23WXsba8pf\n+x4CAP3R87DIu6Czn+JC2c8wzH4j4effdX3R+7CbMf7HmUwmMAGHx1vN3mww2gkAij8lBJ9c\nxaC1AACZIjbH3Y8iLsvrZLnq1a39JZ9TfmzY/Rh/enFTTuJzHA7PZDJIgsJ2G7xkVfW4m2zP\nKsx4E3xiNQATANJe3SNTxBYfewkA5V8+Zsc/ZS9Jp1EnuZxqaqrz2TyKwaADwMfX/mSK6OJj\nr9iLZcQEvQ06Iyar0n8adqW5qc+8N9dXleAJRCJJcNSivWqGrd9aCNIXddCwMzIySkxMLCoq\nUlBQwCJv3rxRU1Orq6tjL1ZdXV1SUqKoqCgsLIxFPn/+LC4uLikpWVxc3NLSoqysjMPhOPyg\n2trat2/fRkZGfvr0qb0y2DnpdHp8fPyECRM6cwjPNVSXPTn/+6hFeweZTyrKigv2WKmqP1xZ\nr5e2QXvOM+8tgMM57g6QkB/4+Oy6vA+RcQ8vmE1ZXZyV8CbQ82tOcqvyFYVZeAJxxal3PMmW\nh2jUphj/v6UUtWZuu8lgMAKPOEffPaplYUemiIWe+11IVGru3qDG6lLffQ6Pz7qyN4752/vn\nN7ITnn/NThSWkO8wnpv8IifxufE452EOf9SWF/gdmPv47PpFh55zPese9PisKwDT2nGbznD7\n+wcXVBZ9en3noM3c7Wmv/QBgmWcMkfif5bP9/zeLwaCb260dYrf6wfElxZ8Sn1/ebrvs4Lfd\nNFrEjd3cvwreenlzr5KO5bCZGwgC5Bi/4+FXdy0+FoEtuYsgfVoHb2IRERFjY+PXr1+zIlFR\nUTY2NqzN2traffv2OTs7u7u7Ozs7BwYGYvFLly6FhYXt27fvypUr27Zt2759O5VK5fCDKisr\nExMTRUREsPuzbbp06VJISMjvv/+O3brtzCE8lx4dIKduNMh8EgAoaJqNXXZQQLA/rlRDozap\nGthIyA8EgEkup3E43Kd3jwGgKPNteX46gSDQqnx9VQmZIvY5MTzhsTdrce7+ID8tismgj1t+\nBI8nEomkccsPM5mM3OSIr9lJzQ01No5uRCJJVFpJy8KuPP8jsN1x42/ZCc8bqkvxP7xP2oxn\nvgkhEEnDHP4AAFFpJZ3hMxtryrmXK1cw6DQJ+YEGo+cRiYJztt8BgLIvaQBQ/CkBAEqyk1/e\n3FeY8YZVvqm+BgCG2K0GgAmrjgFARWEGa++tP6f2hwlN2TFoLXgC0WDMfDJFjChA1raypzbV\nURvrOj4SQXq9jqc7sbGxCQkJmT17NgA0NjYmJiYuW7YsNPTbbbILFy5QqdTr16+Li4unpaXt\n27dPTk7OysoKAB48ePD3339LS0tXVlYuXbo0Pj7e0tKyvZ+iqqr6xx9/AEBMTAyHZIKDg3fu\n3GloaNjhIXl5eWfPnsVev3//XkSEN82p4k+JClpmTXWVpXmpQqJSg4ZMAI49l/yJTjcat1h3\nuAO2VVn0iclkCovLAoDp5FWmk1eV5qbePzyf/YiW5gZqI/3JxY0A8PbBaQUts2kbL3E/ce6T\nUdEdMX+XuLwatpmd8BQAxOXUirLiAGCg8Vgsrmow/ONr/5ryAjFZFV6lyk0zNl8FgHsH5jTX\n13QYNxy7UMvCjrX59VMSnsBv8zphndmfk8KSn/uU5qYAgLXjNgCoq/gKAMEnVgHAx9f+BAHy\n8uOvgUjUHTHr/XOfKxutJAeol35JBwDr2d8GrSY+uVJXWTx02m9vg87w6nK4D08UmOl2EwCq\ninMqCrM+vvbTNJ9EpvTegdoI0nkddzsPGzbs8+fPxcXFAPD27VtFRUUlJSVsV0tLS2RkpJWV\nVWFhYVpaGgDo6+u/ePEC22thYSEtLQ0AkpKSSkpKtbW1v56upaUl1qrrUE1NzbN/lZSUdGFQ\nYLdoqC4p+fzh7v7Z74LOBp9YFeSxoqW5gSeZ8BKBYOmwUVxODQCy3oTc2z8bh8OPXX6Y80FC\nolJLjkeuOpsoMUC9KDMuPTqAK7nymIiUgu7w2djrxCdX3gWdkVLUktcwqisvZL9JJCqlCACV\nRdm8ybJ3k9cwVjMaDQAMBi30/IavOcn6o+byOqke8SH8dnFWPL2lWYAsJCmnAQBMBg2Hw01Z\nd3bV2USNIePpLc139s8CAFO7NXgCsaW5sSQ3lcmgU8RklHQsAIDW1PQm4KSwuKzp5JU8vhge\nyY5/EuN/vPhToqohWpcI4RMd/yErKipqZGQUFRXl4OAQFRXF/oxCeXk5g8EIDw+PiopiBdXV\n1bEXMjIyrCAe3z0DF+Tl5TsuBAAAgwcPZt0XPnz4cEJCQrck8LNamhtrywsc3f3JwuLUxtr7\nhxcmhl4eOn0dT5Lhrcaacv9DTvVVJSRBkembrwqJSHIovPJ0HOu14+77F11MUl7c0bay7/k0\ne4XyLx8fn3Wtry5RNRgxYY0HAAgICjPh+80yanMDAJAoojxLsddLjw54/c9BOp1mZrfGzG4N\nr9PpEVM3eAHA+/Cb0XeP3js4Z97eoKUe0ay941Yc9V5vXlOWDwA3t45l0On2W2/IDTRMi7z3\n6tb+O3tmzN0TeMt9IgBuwf8e8ewaeG3IlNVDpqzOfR8Ren6DnJpBP+kCR/hbp+5QWFtbh4aG\nTp06NS4ubv7877fMpKSkAGDVqlWDBw/+8SjOT0t0TeeH05FIJFbPopCQEINHo5EoYjKK2hZk\nYXEAIAmJqhmNKs39wJNMeKso813QiZU4HN5q1h+Gts6cC1Mb68rzPypombMiOBye1tLYwzn2\nFqkvfSPvHJSQU5vj6i+poIEFxWRVgclsqqsSFJEAgKribACQVtTiZaK92NOLf+QkhqsZjhiz\n9C8S/41qpdGubRtrYe+Kde4ajlkQ6/d3XUURAHxOChugYSQo+u2PagJBgNbSBAB0GlVKSVNu\noCEA6A6fHX3vWE3pl8KMN0311WSK2N1D33o06yqKA48umrHlBm+ui4vqKooyYh4MmbwKGxuj\nZjhKWFy2+FMCatghfKBTHWmWlpY5OTkPHz6UkZFRVVVlxUkkkoaGBuvRiubmZhcXl5CQkB7J\ntG+SUzeqyE9nbVYWZf84hVt/EOK5hkgkLzsZ3WGrDgCqinOCPFY89dqEbX7NSWIyGQqabS/k\nxWea6ioi7xxUN7F1/DOA1aoDgEHmE3A4XNKTb6tLZcQEk4REUI9dm9Ii/XMSw8YuOzhxrScf\ntuoAgEhsbqiJCz7/bZNGYzDoRAEyADy58MfNXd/HF7ZQGwXI32YqwIbfYegtzTg8nkGj4XA4\namNtVVF2VVE2ADDoLSW5qVy7Dh7CEwXeBZ8r+/fLuamuqrGustUz1wjSR3Wqx05cXFxfX9/H\nx2fmzJmtdi1evHj//v0NDQ1KSkrR0dFUKnXkyO4cqRAWFvbkyZN9+/bxapDcLzIY7eR/cG74\n1Z0Kg82LMuOKPyXM2v5Px4fxl4L0Nww6jShAvrtvFiuoaT7ZfJpLm+Xl1A3JwuI5Cc9v7Zwo\nKCJVnv+RQBQYMd+dW/nyUvxDL6xnLsTz+91D69mbJRU1VfRtkp/7NNZVNdVVfM1O7J839Dvj\nQ7gPDk9IjwpIj/o2LpMoQJq41pO3WXUvUWml2vKCq5tGCIlKYjdbsQ+IjKpuWV6at+tQYXE5\nrA9voosnAMio6JR9+Xh5g5WwhGxteSGTyTQZt0RZz3rlme9jVC66mIjJqszbG8Sja+IqipiM\npvnkZ16bDcbMxxOIaZH35NQMFAcP5XVeCNINODXsVFVVWWPjJk2axGQyhw8fjm1qa2tj92FN\nTU0PHTr07Nmz5ORkPT29GTNmiIqKAoC6urqc3PdVFnR0dNg3dXV1secqfqSvry8u/n2RbDwe\nz7r92uqc7R3Sq4hIDbB3u5ny4p/PiWFisqpzdt0TkVLgdVLcVlmYiScQaC1NdRWFrGBFwfeO\nTAFBCp5AEBL//pZwOvA4xGNFZWFWU12VtLL2jE3XuZox7zDoNDJFlL1yAKCxtkISYJLL6cjb\nB/I+vCIIkKxmbzEcu4BXSfKKuKxqE6W6wziRJEgSpJTlpbAiP86T0tc5/S8k8Oii0tzUmqY6\nIklw1MK9GmYTAMBh2+0QzzVFGW/rKgoFyJQJazwUNIcAgMP2f8Ku7siOf1pT+gVPJFk5bDQc\n0/r9g8cTWEu/9AejnfelvPQtyowDAK1h0/RHOuK6aSw4gvAWrj9MX+Tm5nbkyJGIiAisN3H1\nuSReZ8Q9F9b+9HpKoRqaAGAw9efayvt0L//sD+oNulA/Ba5t3xTuozXAQRcqB9qpH/6rHOjq\nh6uffLKgS/WDvpwR5NehP1AQBEEQBEH4RH/ssUMQBEEQBOFLqMcOQRAEQRCET/DbSjudgYZx\ncIaNsYOfHGbXR0cCdeMYuzb10WrBdOMYO3Z9uk7Yce3D9aM+UYdojB1naIwd0kNQjx2CIAiC\nIAifQA07BEEQBEEQPsHpVuzRo0dfvXo1ffr0FStWsMc3bNiQnZ3t4uIyadKkzv+kqKioJ0+e\nYK+TkpIUFBSwSelIJNKOHTtYxd68eaOgoKCi0ql1XWpra+Pi4ioqKpSVlc3NzbtrRdruUpwV\nTxAgy6rpswfL8lKLPyUKikhqmI7DE/ltei0OCj7Gxj280FxfrTh4qM3cba320unUe/vnjFt+\nRFpZuzPl+ROD8cRr04TVHthWTuLzlBe3WxXRGT6bQBRoM65p/hOfxz7na3bSx9f+dFqL6aQV\n7GtyAEDJ5/ef4p5Yzdr041Fpkf61ZV8s7H/nVprcsOZxTlb8vpELdrMHI/85kJsUQRYRm+p6\nHltS7OaOCTTqfxbiIxDJCw89A4BrW0YC22NzZlN/Mxg9DwDqKoqeXNhYX1UiKjVgkosna2ky\n/pMZG6yibyPItmJ1XUVRflo0g04boGkqhRbrQ/qyDsbYiYuLR0VFLV++nLXwa3FxcW5urrCw\n8M/+JGtra2tra+z1woULJ0+ePG3atFZlGhoazp8/v2LFis407LKzs93d3SUkJJSUlPz9/WVl\nZf/66y8hIaGfTayHMOi0qLtHta3t2Rt28Q8vJD/3UdQyK85Oeh/mM33TFQKxT66o8bNiAzyT\nnlzG4QkEokBKxKf06IBlx18D28q/9/bPqf6aW1mYhTXsOizPl2IDPXOTX7A2a0q/lLOtR8dk\nArWxVlbNQFBEos04HzfsEh57v31wRlBEoqWpLuvdo6muFxS1LVh7X938X1N99Y8Nu9rygsh/\n9otIKvBTw66qiRacWSlSFsUevLZ5ZHNDDQ6Hr68uue42bv5fT0Qk5BprypnM72tkM5lMgFoA\nyE2OaK6vYV/Nu/prDgB8zU4KPLYYAHB4QmNtxXW3cXauF5V0LIDv1FUWv7q9f6bbTVbDLifh\nWfi1XQMGmRIEyNF+x61mbdIb6cjbJBGkyzpo2BkaGiYkJKSnp+vo6GCRqKgoIyOjgoICVpn6\n+vqEhISSkhI1NbUhQ4Zg3xbh4eEqKioSEhKJiYlUKtXKykpSUrLtnwEAAMXFxb6+vnFxcZWV\nle2VCQ8PV1NTKysri4qK2rBhw9WrVwcPHrx7924cDldbW7thw4Z79+4tWrToJ66+Z9BbmqP9\njuenRdeUftEGe1a8PD8jMfSyw/Z/JAaoN9VX33af8ikudPCw1q1bvpT87JqAoPDSv18DQHr0\ng4gbu8Ou7Ry77BC29/3z69Vfcztfnv+8fXD6Y1RAY03Z91+2AMbjlxiPX8LafHnrf7lJ4cNm\nbsB2tRnnSzRq07ugszo2M7E+qit/2Ly6vX/ungcA8Pjs+qKs+Jam+jZX+QzyWMFkMH6M91EF\nddSR11Ob6a2vKNrvWHNDzRC71eZ2aws+vgnxXPXQc7Xj7vsrTsexyjTVll13G6dpMRUAMt8E\nA8CqswmtzvPozG8AgDUK6yqKbu2aHHr+92Unonv2qrirsig78cnlvPcvadQmVpBBp0X47LV0\n+ANrzOWnRj25uElz6GSSEFqLGemTOrh3SSQShw0bFhX1/a/DqKgoVscbAHz+/HndunV37txJ\nS0vz8PA4dOgQNjFeWFjYs2fPvLy8GhsbY2Ji1q1bV1VVxeEHkUgkXV3dhQsXCgi0e3cyLCzM\nz8/v1KlTzc3NAJCRkTF69GjsF6GoqKienl5OTk7nrrpn4XB4GVVdk4nLKOKy7PH06ABVo1ES\nA9QBQFBYfNaOO8o6ljzKkbvodCaDrm5ii21pW00HHK40Lw3bpDZUx/h7iMkqd7I8XxKVVlTR\ns5ZUGNRegdrygsyYoOl/XOlknJ/EP7wAAMOdvg3YsN9yw2buduy1lKKmuoktmSL241HR9442\n1JSJSityLc+eRibgFUQEBoqTW8VTX97F4QnmdmsBQEnHwmrOFrMpq1uVubPPgUwRHbtkPwCU\nffkIACGeq2+4jQ08uqipqQ4r09JULyBIEZGQAwARKQWCAIne0gT8RYAspKBlNuS/9VNdkkdt\nrFUzGo1tKutZ4/H4gvQ3PMgPQbpDx9OdWFtbX7hwYenSpTgcrqys7NOnT+7u7nfv3sX2nj59\n2traeuXKlQBQX1+/adOm+/fvOzg4AEBCQsLZs2cJBMKECRMWLVqUlJQ0atSo9n6KlJTU+PHj\nAcDLy4tDMikpKWfOnBETEwOAf/75hxWvrq5OSkqaPHkyK5KRkbFlyxbsdUVFhYSERIdX2l3w\nRAEd65kA8CHsJnu8ojBLWWdY3odXxVnxgqJSWhZ2QqJSXMuKlwiEVWcTWVvvn18HJnPAIFNs\n8+7+OXgC0XqO2+Oz6ztTni/p2Djo2DjE+v9dVZzdZoFHp39TMxolLq/WyTg/Kc1NIVPEchKe\np726i8Ph9UbOUTcdj+3C7rHeOzCnub6G/ZDy/IwP4bdHLvwz6ckVOq2FB0n3ABkhYqSzPgAo\nn4pnjzNoVLKweJDHirK8VCJZaOT83WpG//mmff/8RnN9jdO+YGyzsaYMAAo+xn675frHcMfd\n/hIDNFae+d6HV/L5Pb2FKiBI6fGr4i4RKQUd65lN9dXR946ygsISsjgcviwvVVhCDgAqi7Kp\nTfX1lV95lyaC/JKOG3ampqb19fWZmZmDBw+Ojo7W19cXF/82A1NDQ0NGRsagQYN8fX2xiIiI\nyIcPH7CG3dChQwkEAgCQyWR5eXkqlfrr6VpZWWGtOnbx8fFnz54dMGDAzJkzWUE6nV5bW4u9\nptFo7He4eKWhujQ9OlBIVEpewzjvfUTiY297t5tiMsodH8k36PSQ02sL0t+QBEVGLdoDALEB\nnvVVJXa/X6TT2np7/FC+f0qL9K8py3fY/k8n43ymoba8ubH2xbVdkgqazfVVT722GI9zHubw\nB4dDHp5aLa9hpG01I+kJP/dlYphMZlNdVVFmnABZsKm2IvT871ZzthiOWcAqEOP/t5isiui/\nXzVCojJEUv2iA0+ASMxPjXp42iXw2JLFx16yyodf25UZGwwAdq4XuHwtPEESEjWZuCzsyg4t\nCzscHp+fFk2miEEv+JWBIF3TccNOQEDAwsLi9evXgwcPjoqKGjFiBGtXXV0dABAIBDqdjkXM\nzMywZ10BQFS0+wcotOp4Ky4uPnfuXFZW1pw5c6ZNm0ZgG1yvq6sbFhaGvXZzc4uJien2ZLpA\nVFppyvpz2Osgj+WJoZdbPdrGxz6+8nt15y8mg644eOjUDV4AUFdZnPTkiqrBcCVti7yUyA7L\n91vvgk4p61oSSYKdjPMbJgCTMXdPsIiUAgAEeax4H36LQ8Mu/OrOlqaGKevOcjFFHsPhcKz+\ntosuprH3T7Aadi9v7mMymVM3XmIVnrcviPVaWc+aIECiNn77G/hrdlKQx3IGnUYSFJm96y5W\n4f3B0OnrFDSHFKTHkoREp6w/H3jUWfi/A2kQpA/p1MoT1tbW3t7eM2fO/Pjx49atW1lxaWlp\nPB5vaWlpZGSERYqLi4nEb+fsiU4y9nNmZma6u7vb2tq6ublRKH3gloGwhJy8xvepxmXVDCoK\n0jmU5yfYU64ikvIz3W4JiUljwZc39wIwiz8lXd00gkmnAcDLW/9LeXl3xuarbZbvn4o/JTTW\nVg6d7trJOP+hiMvWV5WwGhmKg82LMt8BgwHtTG/0Ke4JkSTof2g+ANSUFwCT6bvXfsIaDwl5\nde4lzUU4HE5AUIS1KUASpLGNjcuICSIIkLCRc5j7h+frjXTUtmI914XDeqfyUiIfn1mHw+Ft\nlx0axL9PWLepsihbfpCJsp41ADRUlzXWVnAY8IogvVynJn4bMmRITU3NjRs3dHR02B9uJRAI\n5ubmgYGBDAYDAMrKylxdXT98+NCN+TGZTEY7z7V5enqOHz9+5cqVfaJVBwCqBiNzkyOwe44M\nWkt+WrSsmgGvk+KSpKdXRKQU5h8IZW+lqejZiEorkimiZIookUwBACJJiCIm1V75/in+4QWS\noLC08uBOxvmPjs1MamNtUda3gWXZ8U8EBIXba9UBgJrRKBkVbYq4DEVcBo8n4PAEirgMH88r\nJCQmQ22srasqAYCm2rIWaiP2acI2GfQWxcH/mbKkLC/tpc9e7HVpXiq9pRkbW/b0wh8AuJUn\n3/S3Vh0AhF/dEev/bf7I5GfX5NQNsafcEKQv6lSPHYlEGjp06NOnT7GHJNgtXbr0zz//XL9+\nvYKCwocPH/T19dnv1f66u3fv+vj4+Pr6Cgr+535TSUlJbm4uAGzb9n3qWkNDwwULFrQ+Ra+h\nYzPzU1zo3f/Nklc3+pqTTBIUNpmwlNdJcUNmbDAwmfWVX73Xm7OCqgYjJqz2MBy7ENvEegus\nZ2/WtLDjUJ7bqfcCJTkf2uw8aC/OfwaZTUx45B3ksVxUckBTQw2tuWHM0oMcyo9feYz12nev\nPZ3WMnWDd8+nyTNT1p+7t3/2rR0T8AQig04DgOn/3nh9cWMvALSaCsdg7IL3z30uupjg8QQG\ng47D4Rx3BQAA9jen1+9DWSUFBIWXHG89RoIvDZ2+LvTCxoqiTzgcrurrZzvX87zOCEG6jlPD\nzsbGhnXrc+bMmcrKysOHD8c2Z8yYoampCQBKSkqenp5xcXFlZWVTpkwxNTXFDhk7dixrsB0A\nTJs2TVtbm7Xp4ODAvsnO0dGRfXZifX19JycnbA4U9nPi8XgnJ6dWx6qqqnbqorlFb6Qj++zE\nAmTKtI3e+alR1SW56qbjVA1H4vF8PuMuhkgW+nHWCUnF/zRKxGVVRKUVJRU1O1meLykMHlpZ\n3HrKHtmBBnoj5/xYuL04X5q96+6HF7cL098IiUobj18sJvufCcw1TMc3/ztKrBWNIeOxtg4/\nURIliep9n3NKSlFz/l9Pwi5trS79IiajNHHdWcF/78wKkCnCEnJSiprsh1vN2qykY/n6ziEa\ntVFGRXfyb6exOJkiBsBkLykixT+TxbAjkgTN7NawT0qgoj989g7f/LQoQVEpZR1L9hUpEKTP\nwTGZzI5L9XFubm5HjhyJiIgYOXIkAKw+l8TrjLjnwlrjjgv9V6jGt18DBlPFO3/UPt3LP/uD\neoMu1E+Bq1nnC/fRasF0oXKgE/XTp+uEHdc+XD/qE3XYhfpBX84I8ut61+KqCIIgCIIgSJf1\nxx47BEEQBEEQvoR67BAEQRAEQfhEv2jYaWpqjhs3jn2iFgRBEARBEP7TL27FIgiCIAiC9Af9\noscOQRAEQRCkP0ANOwRBEARBED6BGnYIgiAIgiB8AjXsEARBEARB+ARq2CEIgiAIgvAJ1LBD\nEARBEAThE6hhhyAIgiAIwieIvE6AS3JycioqKnidBS/h8XhTU9P29iYnJ7e0tHAzn95GXFxc\nU1OzzV1NTU0pKSlczqe3UVZWlpeXb3NXSUnJly9fuJxPb6Orq0uhUNrc9enTp6qqKi7n06sQ\niURj43YXvE9MTKTT6dzMp7eRlJTU0NDgdRYIH2H2D/Pnz+d1TfMYhULhUD8DBgzgdYI8NnXq\n1PYqB7XqAOD48ePt1c+pU6d4nR3vJSQktFc/Dg4OvM6Ox6SkpDh8+UhISPA6QR6bPXs2h/pB\nkJ/VX3rsME5OTqKiorzOggf8/PwaGxs5lxEVFXVycuJOPr1KU1PT9evXOyymra09atQoLuTT\n22RnZz979qzDYmPHjm2vy5O/RUZGpqamdlhs4cKF7XXp8TdfX98Oy0hISDg6OnIhmd6mvr7+\n5s2bvM4C4Tf9q2F34MABdXV1XmfBA7GxsZmZmZzLyMjIXLhwgTv59Crl5eWdadgNHz68f9bP\n3bt3O9OwW7Zs2YIFC7iQT2/j4uLSmYbdkSNHFBQUuJBPbxMREVFaWsq5jIKCQv/8cBUUFKCG\nHdLt0MMTCIIgCIIgfAI17BAEQRAEQfgEatghCIIgCILwCdSwQxAEQRAE4ROoYYcgCIIgCMIn\nUMMOQRAEQRCET6CGHYIgCIIgCJ9ADbs2XLhwQaktgwcPBoB58+Z5enp24bR+fn6LFi0yMDAw\nNTVdsWJFRkZGqwKPHj1asmSJmZmZnp7ejBkz7t+/z2QyO8yH+xYvXtxmPosXLwYANTW1t2/f\n/uw56XT6uXPn5syZo6ura2ZmtmTJkri4uE4W4JwPrwwePLjNrC5cuPD27Vs1NbVuORUAVFVV\n7d69e8qUKVpaWjY2Nlu3bs3Pz+/MgTyRnJzcZkpKSkrJycldPm1CQsKaNWssLS11dXXt7e3D\nwsJ+tsCmTZuUlJS69tHuCd34f/cr75B79+4pKSn1qqnLXV1dbW1tWwWvX78+cODA2traNg+J\njIzk8G1ZUlLi5uZma2urpaVla2vr7e1No9HYC7RXCR0eiCA80b8mKO6kmTNnWlhYYK+dnJzm\nzZs3Y8YMAMDhcF0+5+7du318fFxcXFasWFFbW3vt2rUZM2aEhoaqqqpiBdwLzQQMAAAgAElE\nQVTd3a9fv+7s7Dx37lwymRwVFbVp06bExMS9e/f2RD6/Yvfu3Rs2bACAz58/r1u37uTJk4MG\nDQIAMTGxrp2wtrZ20aJFWVlZq1at+u233xoaGgIDA+3t7S9cuDBlypQOC3R7Pt3C19cXa5cH\nBQX5+PjcuXMHiyspKeXm5nbXqVJTU52dncXFxZ2dnTU1NQsLCy9fvjxlypTAwEB1dXUOB3bX\nZf4sTU3N4OBg7PVff/3FYDB27drF2tW1cwYEBGzcuNHe3n7Pnj0kEik0NNTZ2fnixYvYm6cz\nBVpaWh4+fCgiIhIYGOjq6vprl9g9uuv/7hffIYGBgSIiIq9fvy4rK5ORkem2y/sF9vb2fn5+\nmZmZWlparOCjR4/GjBnThYWFPn78uGDBgoEDB65du1ZeXj4hIeHIkSN5eXn79u1jlWmzEjpz\nIILwBi/XM+MibK3Y7Ozsnz3QwMDAy8uLPTJ37tyTJ09yOCQrK6tVJCoqSklJKSYmhhWhUqlj\nx47duHEjtvns2TMlJaVXr16xHxUcHKyoqJiSksI5n84wNjbucK1YdXX1nz3tx48ff8xQVVX1\nzZs37R1CpVJzc3NbBfft22diYlJcXMwe3Llzp6GhYUtLS2cKcMinQ2VlZdCJtWKXL1/+U6dl\nuXLlio6ODnvkzZs3qqqqHA6pqqoqLS3t8FQMBmPKlClOTk7Nzc2sYHNz8+TJk1tl+2MOnYct\nCdXhWrE+Pj4/e+aVK1cuW7bsx/iXL18aGxs7eZLq6modHZ0TJ06wB7du3WppadnJAkwm8/Hj\nx4qKileuXFFUVExPT/+pq1i7di10Yq3YwsLCnzotS+f/73582/ziO6SiokJVVdXb21tVVfXq\n1atdy19bW7vDtWJ1dXU7f8KWlhYDAwP2N2R1dbWqqqqfn197h7x69UpLS6vNXbNmzVqwYAH7\n18j9+/cVFRXz8/OxzfYqocMDOwPrOkVrxSLdC92K7YqWlpbdu3ebmpoaGhoePnwYC86bN+/S\npUt2dnaTJ09uVf7s2bPjxo0bNmwYKyIgIODu7s76i/PEiRMODg7Dhw9nP8rOzu7ixYuCgoI9\neSk9orS01NnZWUdHx9ramtU9o6am9uzZsyFDhri7u7MXrqur8/b23rp1q7y8PHt806ZN+/fv\nb2ho6LBAT19OD0lISMDujtnZ2X38+BEA3r59a25ufv/+fWNjYz8/vw7PEBERkZiY+Ndff5FI\nJFaQRCKdPHmyLy487+np6erqunPnzmHDhmVkZCxevNjLy8vd3X3o0KHW1tYnTpxgMBg/HnXz\n5k0SibRmzRr24Jo1a6ZPn47dmOuwAAAEBAQMGTLEycmJQqE8ePCgxy7xV02cOPHvv/9mbc6d\nO3fHjh0c3ja/+A4JDg7G4/GOjo6Wlpa9p1qIRKKdnV1QUBAr8vTpUzweP378eAAICwubOHHi\noEGDjIyMXFxc2rs5i0lMTIyOjnZzcyMSv9+8mjp16vr16ysrK7HNNiuhMwciCK+ghl1XXLhw\nQV5e3t/ff/ny5Z6enrGxsVjc09NzzJgx/v7+rcqnpaVZWlq2Co4ePRr7W5/JZH78+NHa2vrH\nH2RnZ6ehodEDV9Czdu/ePXfu3MDAQAMDg99//72lpQWL7927d+fOnfv372cvnJWVRaPRfrx8\nSUnJ6dOni4mJdVig5y6k59Dp9N27d+/fv//27dsNDQ27d+/G4lVVVd7e3pcuXZo7d26HJ0lN\nTVVUVBw4cGCruJaWFusmY98SHh5eUlJy//59HR0dADh58qS6unp0dLS3t/etW7dOnz794yFp\naWnGxsZkMpk9qK6uvn37duzGXIcFGhoanj59On36dDKZPGbMmMDAwB68wl9jZ2f38OFD7HVp\naWl0dDTWPmvvbfOL75CAgIDRo0eLiopOmjQpNja2qKioey7jl82cOTMjIyM9PR3bfPz48dix\nY0VFRcvLy1esWGFmZnbv3r0jR45ERUVxHjSZlpZGoVAMDQ3Zg0Qicdu2bQYGBthmm5XQmQMR\nhFdQw64rzM3Nf/vtN3V1dVdXV1lZ2by8PCxubGy8efPmVh9sOp1eXFzMYf3vmpqahoYGOTk5\nVmTChAmsUcwuLi49dBU9Z/HixXZ2dtra2ps2bWpqavr69SsWX7Bgwbx581RUVNgLY1+UrN64\n2tpa9kHcPj4+HRbg3oV1HyaTuWfPniFDhpibmy9evJj1FmpsbPzrr79sbW0lJCQ6PElxcTH7\n2yY0NJS9Zj59+tRT2fcYJpN55swZCwsLrIdJXV192bJlRCJRT09v8+bNXl5ePx6Sn5/P4cPV\nmQKhoaFNTU12dnYAMHHixOzs7A8fPvzadfQUOzu7tLQ0bIxmSEiIkpKSubk5tP+2+ZV3SFFR\nUWxs7LRp0wBg4sSJTCaT1fvOcxYWFoqKilj/WVNTU3h4OJZnc3Pz5s2b9+7da2pqOmnSpPHj\nx3Mez9rhe6O9SujwQAThIdSw6wpjY2PsBR6PFxcXZ8X19fUBoLKykr3ZQSAQJCUlsYFc7Gg0\nWmVlJZ1OFxcXFxUVLSgoYO3y9PQMDg4ODg7Gftn0OSYmJtgLKSkp9rienh78+wuJ9asFe3yE\n9ZgehUIJ/hf26GiHBfoiHA5nZGSEvW5VS9i7aNeuXVgVmZqatncSFRUV9reNpaUlVi03b97s\nmax73KBBg9hvGrJfu4mJSUVFRXl5ua2tLfvfPDIyMuXl5T+eqrKysrm5uTMFAgICtLW1W1pa\ncnNzBw0ahMPhes9tx1YGDRqko6Pz6NEjAMCeH2LtavNt8yvvkAcPHuDxeC0trdzc3JaWlkGD\nBvWevkwcDjdjxgzsbuyLFy+YTCZ2H1ZRUXHBggUPHz48duzYihUrfhzP0Kp+ZGVlf/xmBoDa\n2tq6ujpovxI6PBBBeAg9FdsVQkJCHOISEhLYkCkAwEbIaWlpxcfHL1++nL2wr6/v9u3bU1JS\nREREdHR0wsPDFy1ahO3C7kMBQFVVVS95Eu2ntDcuEKufiRMnsupHWFi4ublZQEAgPDwceyiS\nQCBg37k0Gq24uBgANDQ0OBfoiwgEgoCAwI9xIpGIjdrZtWuXm5sb55Po6OiUlpampKRgv9TF\nxcWxmmGNDehzWn2y6HQ66zU2kQSDwQgMDGQymQCAVZSWltbdu3dpNBr7aKfPnz/b2Nj4+PiM\nGTOGcwFTU9MXL160utcfGBi4Y8eOHrvKX2JnZ/fo0aPp06e/ffv2yJEjWLC9t82vvEMCAgLo\ndPqkSZPYg3l5eawH+XnL3t7+3LlzaWlpjx49srW1FRYWBoD09HQnJydtbW1ra+vZs2dLSUlV\nVVWxH9WqfrS0tKqrq7Ozs1uNeBkzZoyDg8OOHTvaq4QOD+z+C0aQTkM9dt0Ph8OJ/gv75b18\n+fKgoKCkpCRWGSaTeefOHTMzMxEREQBYt25daGjo8+fP2c8THR0dFRXF5eS5gEgksuoHj8cL\nCQktW7bs1KlTX758YS926tQprEOlwwJ8SVBQkFVL7ZUZPny4iYnJn3/+2djYyAoyGAz28fV9\nWkxMDOt1ZGSkhISErKysiIgIVi1YK3DBggVlZWVXrlxhP/DWrVuCgoLYJEGcC4SEhNBotKio\nqIJ/nTx5Mj8/Pz4+niuX+NOmTJkSFxfn5eWlr6/PPt8HptXbpsvvkJycnOTk5OPHj7OqJTY2\ntlf1ZRoYGGhqavr7+z979gy7VQoAvr6+8vLyt2/fXr9+/aRJk9ivGtOqfqysrHR0dLBpd1hl\nwsPDi4qKRo0axaESOB/Y81ePIJygHjtusLOzmzRp0qxZs9atW2dmZtbY2Hjz5s3ExMSQkBCs\nwLhx45ycnJYsWbJkyRIbGxtBQcGYmBhfX9+RI0fyNnPu2LhxY1RU1MSJE9euXWtsbFxfXx8S\nEpKWlqatrd3JAv0TDoc7dOjQwoUL7ezslixZoqWlhc1Spqio2GZ3YJ+TmZm5fft2Jyen1NTU\n48eP//bbbz+WUVRU3Llz5969ezMyMsaPHy8kJPT8+fPLly/v27cP68XhXCAgIMDS0pL9nv6U\nKVO2b9/+4MGDIUOGcO9SO01HR0dDQ+PSpUus+f846PI7JCAggEKhTJ06lRVRVlbGHgtdt25d\nN1xGd7C3tz916hQej2fNVywqKpqfn5+QkCAkJPT48eOQkBBtbW3WGN8f4fH4gwcPLl68eO7c\nuU5OTgoKCh8+fDhx4oSdnZ2NjY2HhweHSuBwYI9fOYJwhHrsuOTixYvu7u6RkZGrVq3atm0b\nADx69Ij9MYtjx455eHikp6dv3Lhxx44d+fn5Dx48+OOPP3i1vAQ3iYqKBgUFLV269PHjxytW\nrPDw8JCTkwsODl68eDH2zESHBfotQ0PDp0+fmpqaXrp0aenSpT4+Po6Ojl5eXo6Oju0NGOhD\nli1b1tzcvGDBghMnTqxevbq9JsXy5ctv3bpVWlq6bdu21atXx8fHnz9/fsmSJR0WKCkpiYmJ\nafUkKYVCmTJlyoMHD9qcXaU3sLOzYzKZ2CzlHeraOyQgIMDOzg67n8Aye/bslJSUrKysX72A\nbmJvb9/c3Gxra0uhULDIypUrra2tnZycFi9eXFNTExISQiAQWLMut8nCwiI0NFRBQeHEiRPO\nzs7//POPi4vLmTNnoKNK4HAggvAYz2bQ464uT1DMH3pogmL+0NMTFPd1PTdBMWfOzs6HDx/u\n3nP2hJ6eoPhHe/bscXR07K6z9bRun6CYn6AJipGegHrsEARB+gYajZafn+/r69uZaQ4RBOmf\nUMMOQRCkb7hw4cKwYcPMzMxmzpzJ61wQBOml0MMTCIL0RteuXeN1Cr3OihUrpk6d2nenb0QQ\nhAtQjx2CIEjfQCaTUasOQRDOUMMOQRAEQRCET6CGHYIgCIIgCJ9ADTsEQRAEQRA+0b8enli3\nbh02GX1/k5ub22GZkpISR0dHLiTT21Cp1M4UCwsL65/1g0211aFTp071nkXiuamTi4+tXr26\nvTWU+VthYWGH66AUFBT0zw/Xj4ueIciv618Nu4cPH/I6BZ5hTc7envr6+rt373Inmb4oJycn\nJyeH11n0XrGxsZ1ZWr7fCgoK4nUKPCMlJcW5QE1NDfryQZDugmMymbzOoccdPnz43LlzHh4e\nxsbGvM6FZ3A4nLq6ent7c3Nz6XQ6N/PpbSgUyoABA9rcRaVSO9lrxcekpaXFxcXb3FVTU4Ot\n3tGfKSsrk0ikNnd9/fq1vr6ey/n0Kng8fuDAge3t/fz5c69dvY07hIWF+/nSiEj36hc9dhUV\nFbm5udLS0hoaGrzOpZdCcyhwQCKR0DuHAzExMTExMV5n0Xuh39mccWjzIQjSBejhCQRBEARB\nED7RL3rsWilwNdune5nXWXDJhbU/ffd59bmknsikd0L1w0EXKgdQ/XDUfyoHUP10pGufLwTp\nEOqxQxAEQRAE4RO9tGF38eLFyMhIXmeBIAiCIAjSl/DyVuyzZ88KCwudnZ1/3JWdnS0nJ9fJ\n89y5c8fAwEBfX79bs/tpSc+upb2619JULyqtaDNvh6yqHvve8Gu7hCXkLGa4siK5yRFvHng2\n1VYIiclYOvyhrGvF9ZR70LUto0bM36VhOr7D+JtAz7RX9+g0qrSyzozNV7Hg++fXYwNOsh+4\n9EQ0gUCi06nBf68sL0hnMhliMip2rucp4rI9fClclfT0amLopVZBgzELzexWA0B6dMD7sJtN\ntZUKg83HLNmPx/fHoRQN1WXvw25UFueIyajoDp8lqfDtuRYGrSU5zKckJ1lUWkl/1FwxWRXe\n5slNr279L+vdYwaNShYWH7lwj6r+cCz+Pswn/uFFGrWRTBEfs/h/Sv9+yaRE3HkXfIbW3ChA\nFh7msEHbyp53uXPD47PrijLjmEymxAD1GVuuEQj/eX65ojDL/6DTZBdPpf9+Cbf3JYYgvRwv\ne+y+fv3amYlzOcvIyPDz86uuru6WlLosLvhsrL8HMJlyAw0ri7IDjiyqqyhi7S1Mf5P19mFN\n6fcpM76kvg49/zuN2qykY0VtqH14am1O4nNeJN4jwq5sb66vbqwu7zAe4++RGHoZhyeISA34\nmp14a+ckLP45OYJBpwtLyLP+EYAAALd2Tv6akyQgKEwRk60s+nTbfQrXLoo7xGRVpJW1Wf/E\n5dSaG2op4tIAkPzsesSNvUQBsri8WnZcaMiJVbxOlgcaqkvvHZhdXZKnZjCypaku8OiiyqJP\n2K6nXpuz3oQoDjavqyh6cHxpfVUJb1PlmrDL29Ii/YDJFJNVbayteHxmXUVhFgAkPrkSfe8Y\nnUYVl1NrrKsMObW2NDcVAD6+9n995yCDRpNS1qa1NEXc2PM+zIfXF9GDbu6YkPchkiIuKyaj\nXJaXdmPLmFYFAo86M+gtjbUV7MH2vsQQpPfj3l/88fHxkZGRtbW1hoaGU6ZMefr0aXh4eGNj\n459//rl3797Lly8bGRl9+PDh9evXXl5ebZ6hVZmsrKzDhw9//fqVa5fAQeqre9LK2rN23AGA\nqq85vntnpr66azHDtaGm/PauSXRaS6vyMf4eZIqY075gbPP6ltGx90+om9hyO+/uFnX3yIfw\nW52Pp7y4TRISdT4SDgDPvLdkxz+tKcsXk1GuKf0iQBZy+t9/J5Sm0xtrytVNxo5f9TcAPPXe\nnBP/rKIwS0pRs0cuhhfUTWzZ3waBx5bIa5joDp8NAHEh51UNbCa5nAaAiBt/ZsYGMxi0/tZp\n9z7MR1xOdcJqDwDQHTGbwaAnPb062vl/ZV8+5n145bT/oYjkAIPR8/0PL/j42t/Mbg2v8+WG\nnMTngiKS2Ifoa05S4NHFcSHnxq88/j7MB4fDLTsRAwDVJbl39sx4E3jSzvVCbMBJPIG41CMK\nO9x7vfm74HOGYxfy8hp6THVJbn1VyWDL6aOd9wFA1puQsKs7s9490jSfjBV4cv73luYG9kPa\n+7JCkL6CS78VQkNDvby8pk6dKi4ufvfu3c+fPzs6On78+LGoqAhbSSYnJyc5OZlCoUyfPr29\nk7Qqo6qq+r///Q8A1q9f/2NhKpVaWlqKvW5sbMTje7Zv0nTyShkVHex1S1MDAEgrawOAoIj4\n5N/OAMDD0y7s5QVIguqm339/k4XFmhtqezRD7jCyXSinpl9d8iXu4fnOxOk0qrrJWOz1yPm7\nsuOfJjzyHrVoT3N9NQ6Pv/rHcDqNKiwhN3XDRREpRSq1UXPoZNZvazq1CQDEZVS5cmU8kPfh\nVXn+R+djLwGgMPNdS3PDMPsN2K5Ri/aOWrSXp9nxRm1ZoaTC93a8jIpO2qt7AJCfGiWtoiMi\nOQAAAIcbaDTqS+rrftKw0x0xZ4CmKfa6ub4GAGTVDABAWFy2saa8PD9dWlk7JzEMAKSVdQCA\nQBSQ0vj+PCZRgExr6dSqen1Rfmo0AGiYTcA2NS3swq7uzIwJwhp2RZnvPidHqBmNzE1+yTqk\nvS8rBOkruNGwo1Kp169fX7Nmzbhx4wBAU1Pz2LFjq1atkpOTq6urY42Nw+FwBw4cwOFwHE7F\nXoZEImFLBbR5SEZGxpIlS1ibEhIS3XdBbTAY7QQAiU+uxD+8QKM2qRmNHmQ2EQDweKKitgUA\n4HD/aVnab/1+7+NTXGh16ZdBQyb0aIbcISKlqGmhWJqb2uo7sc14eX46AEgpa2ObJIo4ANSU\n5wMAnUZlMplisipEAXJF4afb7lMXe7wmCYmMXXoQAO7snVFdkgdMppHtIkI70/3zgbArO0wm\nLCMSSQBQmpsCAHmpr4M919CaGyQVNMav+ltYorPjUPmGjJpeasSdproqQRGJlqb6rLePsFuu\nDTVlImy1ISwh39BvbqJZz9kKABE+ezOiA5lMhqTCIJMJSwFgxqbr191G+/01F4fDMZlMaSUt\nS4eNALDw4DPWsYlPrlCb6mVUdXmVfE/TMJ/42vdQ9L2j2LjDR6ddAKCu8tt9noenXIQl5HRH\nOLI37Nr7EkOQvoIbDbuioqLa2lorq2/jUm1sbCwsLIjE1j/a2NiYc6uuk2UwYmJiWDsSAJKT\nk9PT038y665Q0raor/qanxqV+z7ic1LYQOOxnMtTm+qeX3L7kvJaUmGQ7dKDXMiwV8F+JZOE\nRNhiuJbGOgAYaDxGfch47K/qgrTokFNrX1zeNmHNt8cptK3s8z68+pqd9D7Mx2icM589P4GJ\nvH0AmIwhU74NpKstzQeAuODzOtb2eCIx9eXde/tnLT4SAT3cFd3bGI6ZX/Ax5vZuOwn5gXUV\nRbJq+vWVXwGA1tyIF/jexCeQyC1NdbxLkwfUTcbWVxWXZCdXFn36EH7TYMyCaP9jLc0NIpLy\nEgPUSz6nlBdmsd+CbKyrfHB8SfXXXDJFzGEL346xExKRVDcZm5MYdvE3UxwA4HAAQCQLAcCD\n40sZ9JY5u+4W57zncZYI0q240bCrqanB4XDsi9ALCAj8WExISKjDU3WmDEZVVfXQoUPYazc3\nt0ePHnXywF8hq6Yvq6YPANc2j0x6eo1zwy4jJujVrX04PGGYw0bjcYu5kF5vM0DDCABqy4vY\nYkxhSTkAwEbRYZR0rXA4fMW/Y+QBwGTCUpMJS+sqi2/tnPT2wZlRi/ZwK2XuyYh5oDlsKmuT\nRBEFgKkbLsoNNAQAZV3rh6fWfkmNUjEYzrMUeYEgQLZzvVCWl1pfVSKjqpuT8LyhugwAhMSk\n63KLWcWoDbVCYjK8S5MHVA1GqBqMAADv9eZJT68ZjFmQFnlPTFZl3t4grMCl3y2ifI9gDbu4\n4PNxjy7gAKc7fNaI+e68zLvnjV/1d0nO+w8v/qGIywyZvPLqpuFi0ko5ic+LPyUMneGK3ShA\nEH7CjT/35eTkmExmYWEhttnc3Ozt7V1ZWdmqWGe64jrZXcdtDMZFF9O4kAusAJFMaa6v4nDE\np7jQFzd2K+vZLPs7qn+26uDfe6+F6bHYZkFaNAAoapkXfIy9tnlkcVYCqySTyaSIyyU89r7o\nYlJT9u3hYmxAVV1FIbfz7nnp0QG0lmaL6d8Hj0opDQYAcblvS/pKyA8EgOYGHj8Mzn3l+RmZ\nb0JkVPXUjEYLS8gXZcbJDzIGAHE51YqCTGAy/y2WLi7fP5Y/ptMvupiEXdnJCuAJROxpACaD\nISqtyIoLkIWpjXUAkPjkStzD85IDNFZ6vuX7Vh0ABBx1riz+NHbpAUuHjenRAQCgM3xW6ktf\nAHgbeOqii+njM+sAIOzqzhvb+vzjawgC3GnYycvL6+rqXrlypbm5mUql+vv7v3jxAls1vLm5\nmfOxJSUlSUlJDAaDC3l2HR5PEZdJeXG7qa4KALLePa6vLFbR59SVEnX3qJiM8sQ1J/rbrbRW\nRKQUyvJSscbZ8ys7cDi8oa2zkpZ5c0PNozO/VZfkAsD9w/MBmGZ2a/RHzQOAYI8VQKcDQMBR\nZwDQGzWXp1fQI1IjfIVEpQRFvg8M1TSfRCCSHp5ay2DQGAzaU69NODxhoHHriRv4Hp3WHH51\n55eUSADIT43KS4nEHhlWN7FtaW7IfBMCALXlBdnxT7WtZvA4V+4gEAgC5Oz40LrKYgBICL1M\nozYNGGQCAAJkocKMt2V5qQCQHh3QVFcpIa8GAHHB5wQEhee4+wGBwNvcuaMsL+3Vrf01ZfkN\n1aWx908QSYJK2hZmU9YYjHYyGD3PYPQ8NaORAKCsaznUzqXDsyFI78elp2I3btx46NAhJycn\nAoEgJCS0ZcsWAoGgqanp6+u7fv36U6dOtXfgixcvfHx8fH19BQUFuZNq14xfeTzk5MrrW0fj\n8AQmgy6vYWI1ewuH8o215Y01zIsuJqyIsLjcgoNPej7T3mX6pit3/px2a9e36ehGOrkDABAI\nQyavin908c6eb7+bB1tOV9K2AABt65npUfcvrjfD4mpGI/lgjpgfVRRmKQ42bxUcs+TA88vb\nvNcPBQA8njBq4R4imdLW0fxMbqCh6aQVj8+6koXFaNSm0c77sMluBASFbZcfeX7ZLf6RV11l\nscFoJzXDUbxOlktslx566vUHaw5IYQl5bE4cO9eLD/5e6n9oPhYnUURnbr0FAHQalU6jsn/5\nEAXIy07Gcj1xLhkxf2fEjb3/7J4KAHgC0WH7PwAwQNOU9ShxXkpkbvLLwcOmaVrY8TJRBOkm\nXGrYDRgwwMPD4+vXrw0NDcrKyiQSCQCGDRt26dIlbG7h5cuXCwsLs8qvWrUK69IbM2aMnp4e\nmUz+sQzLnj17lJWVuXMh7ZHXMFri8bo4M76uqkRJ2+LHxxVHLNgtzTbdmvUPzT72myZ9nbiC\nusFoJzXj0R3GRSQHLPd8m5cSWVuarzPCgTUjvPk0FyPbBekxQTgcbrCNA4n0bWzlqIV/Wkxf\nl/XuEQBoWtgJiUhy4XK4b9jMDSp6Nq2CGkPGDzQZU/AxFhhMJR1L/A+PH/UTQ6ev0x81r6Gm\nTEpRE0/4XgmqBsMXH3lRWZwtIqVApojxMEMuG2gyZplnbPa7JzXlBYPMJmK36QFATt1wxal3\neSmRpTkf1IxGyvy7Fg72CD871i1+vqRtZa9uPCYtKkBGWUdJZ9iPBQaoGxqMdlLSsWQPtvcl\nhiC9H47576gUPubm5nbkyJGIiIiRI0cCQIGr2T7dy7xOiksurDXuuNB/rT6X1BOZ9E6ofjjo\nQuUAqh+O+k/lAKqfjnTt84UgHerXA7wQBEEQBEH4SX/ssUMQBEEQBOFLqMcOQRAEQRCET/TH\n8ddoGAdnqH446z/1g8bYcYbePJyh+uEMjbFDegjqsUMQBEEQBOETvbRht23btoCAAF5ngSAI\ngiAI0pfw8lbszZs3s7Oz3d27uKYNnU739fUNDw+vrKxUVlZ2dHS0srLq3gy74N6BORLy6uNW\nHGFFkp5diws+T2tpIguJ2i4/rKxrxbk8f/D6zdR6jpv+6HmsyL39cyqKsoDJFCBTZu30FZNR\nBoDGmnK/v+Y21JQBAA5PMJm4dOi0dQBQWfTpwd9Lm+trAIBIEpz6u0BLdWgAACAASURBVJec\numFeSiS2+A87ATJlqUcU9y6MWyoLs+4dcFx5Jp49+PTiprwPr+j0FmEJ+WkbvMRkVXiVHs/l\nJDz79C503MqjnYz3E3Q69f7BBRWFWQBMHJ5gPnWt6aQV2K7c9y+eeW2l06gAOFXDEZPWevI2\nVa55det/aZF+7JHlJ94QSKTirIRHZ1xamhsBgEAUGO7krm01vV99ySD8qtf12BUUFHSyzL17\n94KCghYtWnTkyBFLS8tDhw7Fx8d3eGzPqSzKfnlzb0VBJnswPy0m1t9DQWvI+BVHBEUkHp3+\njdpUx6F8X0enU7PePbqxzbbV09bBJ1ZWFGaqm4wdMnkVjdp093+zsLj/IaeGmjJtK3ubudtJ\nQiIJj7w/J4YDgP/BedSGOuMJy4bOcGUy6IHHFsO/84iy/umNmA0Abc442qfRmhuy3j0OOrEC\n4D91+Mx76+ekcJOJy60c/miqqww+sZJXGfJWS1N9flpM7P0TnYz3K/5/OVUUZqqbjh3utJMi\nJvP2wemSnPcAUFdRGHpuA5EkaGH/u5iMUt77l+/DfHidLJeUfUnD4XDsXx0EEgkAQjxX01qa\nNc0nGYyZz2QyI3z+hH7zJYPwNy712NHp9Js3b7569aq2ttbQ0HD16tVBQUH3798HgNmzZ9+7\nd8/d3d3CwiIiIiIvL8/X17fNk7QqExYWZm9vP2LECABQV1fPyMgICwsbMmQId66olfqqknsH\n5vwYfxd0miQkOvm3MwCgYjjq8u/D3j04Y+3o1l75vu7Vzf0ZMQ9+jBdlxolIKY5feRwACETi\n26CzeSmRqvrD66tK5AYajlq0BwD0h8++uN4s/tEFsrAondZiNesPQ1tnANAwtb2zZ8a7oLPm\n01ysHd1Y5/T7ay6ZIjZhtQeXro1bHp11Lf6UwGQycGxBBoOWk/jcYIyTmd1qAMATBZKeXGUw\naHh8v3v+6anX5sqi7OaGmk7G+5XK4mxppcHYB01vxByv34a8uOHuuDsg7MpOwOEWH3sJACYT\nll7bMqoo463h2IW8zpcbasuLBARF2L86AIDaWEenUQ3GzLeesxUAcDjc+7CbJTnv5dQN+8OX\nDMLfuPRbwdvbOy4ubs2aNTgc7tatW8eOHTt06BCJRGK/Fevr6zt58mQXF07LMLOXGTt2rI3N\n92WXGhsb2deTrampefPmDfa6pKQEW8Ss5whLyK08HQcAl1wt2OPVJbnSyoOx10QiSUhE8mtO\nEofyfd1o532jnfeV5qbePzyfFaTTqUwmQ9VgOLZpOnnV26CzWbHBqjpWYrIqJhOW/VuMjr2o\nKcsHACFxWWxTREIBAIqy4th/UMHH2PKCjPn/C+nhC+KBaRu9ASDW/+/k5zdYwdykcCaDbjpp\nJTAYzU11+qPm6Y+a1/45+NmU9ecA4LXvocbq8s7E+xcmU0Dw+7qLODy+vqoUAErzUili0gBQ\nV1ksIia7+GgEzzLkOmpjHZPJuOhiCsDEE4jD7F0NbZ1JJKH5+x+KiMvT6dSyvLRPcaE4HE5O\n3ZD9QD7+kkH4GzcadvX19Y8fP96zZ4+xsTEAiIqKXrx4sampqVUxLS2t+fPnt3WCtsvMnTuX\nFff3909LS9u/fz8rkpeXt23bNtamiIjIL15F19CoTUKiUqxNkpBoU10VTzLhoZLsZACQkGdf\njxJXW14EBMK8vUHYNrWx7tauyQBgM2+7jKpuhM/elz57hcVlCUTy47PrAaCprpL9nKHnf5dV\n0xeR4p8FdjmrLMoBHO6Z95bCzHfAZAqQhUY771M3Hc/rvJDehSQkWpydmPLiHzWjkeHX3Bl0\nGg6Hg/+zd59xURxtAMCfvTsOOI4uvQmCVBFEESFiQSMW7GLQxB6NKMQUxV6wIZZoYgQL9oqI\ngBpLVEQpoohIFysoAoL0enC374c1m3uRO0qUU3j+Pz/czs7MzezurcPszgyAoKFe0NCwf0Ev\nkhQAAFdZc4rvJWAyJV3e9iDgNxAMwnrINGk5xYd/7Y07t0PLpHcXfQvq7nHsl4G8mgoA6DV8\nbqOEne0mgzqM9mjY5ebm8vl8c3NzatPExGTr1iZebTY0NGw2qw/jZGZmBgUFvX37dtmyZZaW\nlnS4hoaGl5cX9fny5ctpaWltLP1/8+GyHqRAIIFySJSgqSoLBA3051tHV2fFXwCAPmO8NQx7\nAsBX3yyPObP5wm9zAEBWXhUAZLjKdPy4kK0NvNqRi/Z/6pJ/PqpK3wJJVhbnTVh+hsWSvrxn\n4Y2gpdO29WPLSOYvFvR5Grvk2PnNHjHBfjHBfgymFJPFZrCkAIAkydqqUlPHcXYj5z26djgt\n6vT57dPHLekUr9mN/vmgirYRm6MIAKYObseXDY07t93tpyBqr/vq0LynD2PPbkm8vE/fqj/d\nadcJbzKow2iPhl1DQwNBEAxGMwM1pKWlm81KOI5AINi/f39kZOT48eNHjx4t/BwWANTU1KZP\nn059Tk9P/7CDsH1IsWWEu5p4tVVcJXWJlESCNI1tAKC88LVQGEmNiuXxak4uHcqrreyiZzZq\n0QG27PtmikX/SRb9J1UWv2FzlZlMZpCXvUKXf0eAZkSfk1PSYLNl27MWkiWnpA4AY5ccleGq\nAMBwz91n1o15+ehW976jJF009BlR0ug6c2ccr6aSV1vJVdY84NWHLSMHAARByCqoDvh2DQA4\nTV76LOFK8evHki5sO9E0tqU/cxTVCIJRVVrw7vXjx3HhjpOWcBTVutl93c3u632eNg/+CqTe\nh4ZOeZNBHUZ7jIrV0dEBgMeP399HysrKFi1aVFhY+B+zPXz48KNHj3bv3u3u7t6oVff5UFDT\ne/fPuFeBoKG24p1aVyvJFqn9MZlsgmDkpEVTm9RwvG52rgBweuXw+roqt58OjF92mm7VAcDh\nX/pHHl3FVdFms2WjT20GgD6jF1C7Cl48auDV2n3w3KRj0+reGwBqyoupzdqqUgCg3ppCiBay\nYdLZ9RPYslyusmZpwUsBv97YfhQAsKRl+fU8OhqfX99Jht3kZsTtW2D76PoRapNXXUaSAiVN\no6JXj1MjT+ZmxL0Pr6kEABb7/f8jnfMmgzqM9vhtKyoqDho0aPfu3T/88AOLxQoNDQUANTU1\ngiCKi4tLSkqUlZVFpU1NTX306NHkyZNZrP8ram1t7V9//eXm5pabm0vPkKKkpGRgYNBUNhLT\n223B5d0Loo6tsRo09faJdUAQ9mO9JV0oCdDoZpP/NDE+bGcXPYv48ztZUtJdbQaVFrysrSxV\nVNPLTrmTnXKHiqln7qBj3g8IeHL3opSUNMFgPY49z1XR4vwzluJe2O8AYNZ/gsQqIwlaxr1k\n5ZUjdsxy+mY5QRDRpzayZbi6pjgLA/o/HKUur9PjLv0+T8fMIeHCHoLB7DvWGwCsBnk8vHwg\nfNsMS+dJ6XdC6murTB3HSbqw7UHHvB+Dwbx3fldZQbaqTvd74b8DEAOmrpGVU7p9fO2VAG/7\nMV5Mtiw1S07vUe+H7nXOmwzqMNrpjzZPT88jR47s2rWrurq6R48eK1asAAAHB4dbt24tXLjw\nxIkTohKmp6efOXNmwoQJjRp2ubm5PB7v3Llz5879O/Okk5OTj4/PB3lIkp6Fk/0Y78TL+x7H\nRUhz5Icv2NM5X4oa/fPBs+snPLp2BICUkuZMWhUCAE/v/QUAZYWvkv/5exoAcjNiJ6w4O27J\n8dDNHul3QgAIeVUdD6GBaYXZ6fQf1p3K+GVnInbMijy0HADku+gM99wNzb3egDqbEQsDTq9x\ny82Mz82Ml5LmjF92igrv47awNP/Fy6TIgudJBEF0tR5APZbtDEZ6B17+c2FmTCgAsKSkh83/\nTVZBFQBc5myJPLQi7twOAGCy2M4eq5S1ulFJOu1NBnUMRKOJZDskHx8ff3//qKgoZ2dnwHWm\nm4PHR7zOc3zatkg5Hh8xOs/BATw+zWnb7wuhZuFf/AghhBBCHQQ27BBCCCGEOojO+CgWIYQQ\nQqhD6hQj3hvJ9bZrYUxf84OftCTtoA2vcVw1MrYapdjCyF/6IcLXgMTAd+zEa9uPi/rQ8p9Y\nI1/QL+6j33y+oLq3BL5jhz4RfBSLEEIIIdRBYMMOIYQQQqiDEPcoduvWrXfu3FmwYMGwYcOE\nw7dv3x4VFeXp6enq6trybwoLCzt4sImOdBkZmeDg4JbngxBCCCGEmtTMO3YEQcTExAg37Boa\nGu7fv08QRGu/acCAARYWFtTn1atXDxkyhBrK0Cir9evXu7i4ODo6tjznNiRpH7zqimNLB3fr\nPXzgNF/h8JCNk5Q0DIfM8ZdUwdpBTlr0lT8XNgqUkubM/C2W3ty/wNZxko/lwG+ozfynDy//\n6VlfVwMATJbUVx6rTPuNFk6eeefc7VPrB8/YaGw/8hMX/3Px9mXK3/t+qS4rBACusubX835T\n1TOTdKE+I/wGXlzItuzkKFLAN3Uc28dtAbT+1tTBhPl/9zY7FUiSIBjdHUYP+G4tFZ6dcuv6\n/iX8Bh4Aod+jv+v83yVazPbT5I1F/A3qzsn1mbFhpIBPMJj2Y717DpkugXIj1FbNNOzMzMxS\nUlIqKirk5eWpkKSkJA6HIycn19pvUlZWppcOY7FYGhoa3bt3p/eSJFlUVHT79u2EhAQXFxfx\nWeXm5uro6LQqiURc3PU9v6FeOKQk73nKzWPFuU+UNAwlVar2oWnYw2qgB70p4Nen3wnRMesL\nAHw+78XDG3Eh2xqNyL70+zyBoMG4t6uMvEr67eCo42uEG3Y8Xs2d0xvbrfyfBYHg0u/zGAzW\noBkb+Q31cSFbw7fPmLEjupOs8tkSkYdWVJcXDZ27reLdm9vH18kpa1j0nyTpQknS9QOL375M\nUTOw6GozJC3y5OO4ME3jXqb9RlcWv7kasEiao2A3an5m9LmclNspN4/3GPytpMvbHpq8sYi5\nQT28vC8j+lwXPXNDm0EPrx6MD/3N3HEsm9PGwS4Itb9m/ofQ0NCor6+/e/fu0KFDqZDY2FhH\nR8e7d+9SmyRJhoWFXb9+/e3btwYGBjNnzrS0tASAVatWOTo6FhQUJCYmlpSUDBs27Ntvxd1E\nMjIytm3bJr4wq1atsre3j4qKysnJCQ4ObkkSCUq5eeJdbhZB/PsWY1Xp25CNneV/HTZH0dH9\n3+Xdzm2aLM1R+HrebwBw58SGrLsRjeLzair5DTyrQVMcJy0BAIIgUm6eePsiRd2wx/sc1ne6\ndRvfPEusr60e4RWga94PABTV9SO2z8xJud2152BJF+2zUF746uWjm1M2XuEoqql37VFXVVZT\n/k7ShZKwN1kJBIM5zuckAFgP+jZokX3W3XDTfqNvHloBBDF9220AsPl65pHFA/Ky7neGhp2Y\nG4uoG1TStcPScgrUamx6ll+Fb5/5/OENM6fxkqoCQq3V/J/+Tk5OMTExVMOOz+fHx8evXLmS\nbtidPn36+vXrs2fP1tTUTEhI2LBhw+bNm7t27QoAYWFh8+fPnzFjRlJS0urVq3v27NmjRw9R\n32JhYUG9gefu7i6mMMHBwcOHD/f09Gw2SUFBAf3q3tOnTzkcTrM1/YiqSt/Gh+7oNXzewyv7\n6UA5JfXvdz8AgCBv+/YsjMTlZsa/y82a8s96rwOn+Q6c5luYnX5+yxQ6DpstO2XDX1xFDT6f\nV5ST8ezBVYIg6Fbdw8v7Kt69sR0+5+HlAxKogIQwmVK65g5Uqw4AqsuKJFuez01O6p0u+uYc\nRTVBQz0wGBbO4m4dnYSuWd+nCVduHlrRY/DU28fXAkB3hzEAUJiTzlFQBYDKknyugtr0rVES\nLWb7EX9joTS6QdXXVZv0HAUAlcVvuuhbzN4VL4FyI/QftKhhd/z4ceppbGpqKovFMjN7/5YP\nSZLnz59fsmRJ7969AcDIyCgnJycsLGzRokXUpo2NDQDY2Nhoamrm5+eLadi1kImJyZQpU5qP\nB1BYWHjkyL9Ly8vItOuKzhd3zlFQ07Mb+X8Nu07rauCPagaWXBVtcZGYTCrCsV8G8moqAKDX\n8LnUnpryd/cvBuiY9dUwsvn0hf2MaBj1HOEVSH0uefM06tgatiwXu+toVaVvpWTkrgctyX50\niwSyq/XA/h4rpeU69SOzwbP8XmfefXr/0tP7lwBAx9Seep9B0FAvaGjYv6AXSQoAgKusOcX3\nEjCZEi5uOxB9Y6EJ36AqS/IBoODFo32e7+82BtbOw37oLO8joo6h+elONDU1DQwM4uPj4Z/n\nsPRwh8LCwtra2g0bNoz7x507d969e/80RE9Pj85EWlr6oxTX0LClr6Z17dp1zz969epVUVHx\nUQrQEvcjdpcX5Y5ahE06AIC4kK0NvNqRLT4a7qtDXWb7yyqoJl7e9/ZFCgCEbJzEZLFHeu/9\nlMX8fAkEDX/v//XsxkkstvS4packXZzPSG1VaW5mvGY32+/8IyetDCkvfB19ZrOkCyVhoZu/\nqa0sNXMaP9IrQNfcIffxvdjgLQBAkmRtVWn3fmOmbLxiOeCbypL889s714CAD28slEY3qHev\nMwGgoijXyX3pN74Xu+ibZyffTo08IZlCI9QmLZrHjnoaS5Lk3bt3hQefUs83d+3adf4f4eHh\n69evp/ayWB//Fe+WNxC5XK79P5SVlevr65tP8zHUVhYnXT1o5jiuqqywMCcdSLK2suRdblb7\nfPtnKCP6nJySBpstKz7au9ePY8/6AwBHUa2b3dff+d0AgAd/BSZc2FNTUdxrxLyctOjC7DQA\nKHqV+e7143Yo+efg3eusI78456Tcthvxw3dbIhXV9JpP02nIyCmpd7WyGujBlpFTVDewcZ2V\nk3IbOsEaiWIUvXqsbmjtPHW1jnm/EV6BbI7847gwACAIgqPYZcC3a7jKmk6Tl8rIKRV3jh+R\nqBsLHaHRDUpV1wwAjPuMsBz4jUIX3fFLTxEEkRF9ThJlR6iNWtT2cnR0PHny5P379wUCATU2\ngsLlclVUVFJTUw0MDKiQgIAAKyur/v37f5LCfgkqivNJUpARHZIRHUKF5KTeeZUeS71d19kU\nvHjUwKt1nLC42ZhFrx6nRp40sOqvY94PAHg1lQDAYssUvHgEAPfD/30UknzjWEb0OeFpUzoq\ngaAhfOt3HCX1iSvOstjt+i7BF0FZyyg75d93xRrqaqWkOZ1+uhOSFDT8uyUgSQEJACxpWX49\njw7m8+s7ydhqUTcWau+HNyiusiYA1FaVvN/m80mSlJJu9SwQCElQi37bOjo6urq6gYGB/fr1\nYzD+r5Nv4sSJJ06c4HK5urq6UVFRN27cGD16tKh82iA1NfXRo0eTJ0/+FP1/n4KavsXcPUn0\n5gGv3sZ9RjSax67zuBf2OwCY9W9+QKup/cjbx9deCfC2H+PFZMvGn98JAL1HeSprdaPjUFNP\ndZ557B5dO9xQX2fSZ3jW3Qt0oFEvFxmuigRL9fkw6vX13dDf4kK2Wji7V7zLS7i4x9RxrKQL\nJWFcFa3C7PSbB5fqWw9Iu3WGV1tp1GsoAFgN8nh4+UD4thmWzpPS74TU11aZOo6TdGHbg6gb\nC7W3yRuUkqbhq7SYqGNrNY173QvbCQB9x/3Y7gVHqO1a2lpycnI6efLkh5MAjxo1iiTJM2fO\nFBUV6evrr1mzRkdH58PkTCazbS2z9PT0M2fOTJgw4Utp2CFhhdnpLe1qYjJd5myJPLQi7twO\nAGCy2M4eq4RbdZ1QwfMkAHjw1z7hQBmuEvVfNWKxZUb/fDD69KbzflNkuMpmjuNsXGdLulAS\nNnF16PlNk58mXH2acIUgCF2LfkPmbAWAPm4LS/NfvEyKLHieRBBEV+sBA75dI+nCtguxN5Ym\nb1DuK0JOrxvzOC78cVwYg8nqO/4nLZPe7V1shP4DguwEr6T4+Pj4+/tHRUVRa13ketu1MKGv\neRNroH1Z9s7v2dokV42MrUa1dGjhl36I2nB85gU8+hQl+Qy14eAAHh+xrhoZUx9a/hNr5Av6\nxX30m88XVPeWaNvvC6FmtWjwBEIIIYQQ+vx1xh47hBBCCKEOCXvsEEIIIYQ6iM44IqHl79hR\nvugXO9r8GlBneAcI2nR8Wnv9tM3ncBjxHTvx/ss7drQO/EP7dO8gfv51bwl8xw59IthjhxBC\nCCHUQWDDDiGEEEKogxD3KHbr1q137tz57rvvJk2aJBy+evXqpKQkT09PV1fXln9TRETE0aNH\nqc88Ho/JZDKZTACQlpY+ceLflfjy8/M5HI6CgkILsy0qKiopKdHW1paT+ywmBy/MSWcQDFU9\nM+HAd6+zSvKf61s4sTnydGBa1GlSIKA3u/YcxFXRar+CtpfKkvwn8Re79hz0f5PS8flPH1yp\nLH1r6jBaVkFVTDivuizhYmCjPFW0jFsy6fGXq7pe8OLh31IyXG3TPh+uEMCrrXz+4JqZ03iJ\nlO1zUFtZWvEul6OoJqekLhxeX1tV9jZbhqvcIX9K4r1IulH85qmhjYuK9v897c3NjM9/+tCw\n1xA6POHCHl7N/62dzZKWtR/j3X5lbUdpt04b9BxIrSdBy82MLy14afnVRGAy/w0VdVMSnQ9C\nn6dm3rFjs9kxMTHCDbuKioqUlBQ2m93abxo9ejS9KMW33347efJkNze3RnFIktyyZcukSZM+\nnAn5Q2VlZf7+/qmpqRwOp6amZuTIkXPmzCEkvaDQ1QBvzW69hszxpzarSt+G+k2pKS8iCAZJ\nCoz7DB88czMAVJcVxpzxE07I59f3HNLRluU+s8atrPAVANyP2K1r7jDCKxAAslNuXQv8mSQF\nAHAvbJdRr6HUHKpNhue/SEm9dapRtlIych24YReYWLApNldAJgEAk8UeNv93XXMH4QiXds0r\nepXZaRt20ac3pd85y5aR49VUGlgPHDLHn8liA0Bq5Mn4sF1sGbm66nL1rlYus/0bNfs6qqKc\n9PP+35ECPgA8uBggr6rjsf4SAPB4NSeWDK7n1QDAg78C5VW1Pdb/BQCJl/cDNJ4MoUM27GrK\n38UE+wGA5cBv6JCTK4fzG3gAEHNm81ceKyz6TwLRNyVR+SD0OWumYWdtbZ2UlJSXl6el9f4v\n4Hv37hkYGFRWVgpHKysre/v2rXC32cuXLxUVFZWVlfPz8+vr63V1dcU3uSoqKu7fvx8dHf3s\n2TNRcag8+Xx+YmLi119/ffjw4ZKSkkOHDqmoqKSlpa1bt05HR2fEiBEtqvfH1tDAux+2Kzvl\ndnVZkXD4X3/8UF9b6b7mvJKGYdLVg/fCfzfuM0Lfqv+bx/cAYM7uhA68YuO1vT+VFb5ynLTY\n3HlSyPpJrzPuFr95qqJtfOOADwCMXXxMSUM/eP3E54l/11SWyHKVmwzXt/xKeIm2krxnZ9dP\n6OPmKbFafWICgE2xud1VZB2WXaurKQ/d7HHjoM/0rf+uiJoWdbowO41gMMVk0oG9TL715N6l\nMb8c1jDqWZr/ItRvSlrUGWuX70rynsWd2zZktr+h7ZC66vKrAT9Gn9o4bP4uSZe3PVz+cyGQ\npMts/642A6/sXpj7+N7DKwdsXedc3D6znlfj7LHKrP+E6wcWP0/8+27obw7jf5q756Fw8gNe\nfdQMLEVl/oXKf/rwXvjvBS+SG4WHbZ3Gb6gfs/iIsk73E0uHxJzeTDXsRN2UROWD0OesmXfs\nuFxuz549Y2Ji6JDY2FgnJyd6s6KiwtfXd9q0aatWrZo2bVp4eDgVHhQUdPPmTV9f30OHDi1d\nunTZsmU8Hq9x7kJKSkqSkpK4XC6TKfJ/rKCgoEuXLv3444/Uo9vExEQ3NzcVFRUAsLS07Nu3\n78OHD0Wl/dQaaqtfPrpFCgSN1iAvLcg27jNcScMQAGyGzZLhKj+8cgAACl4ks6SkK9/lZd29\nUF74SjKF/sRyUu/Iq+pYDZrKZLLH+ZxQ1ele8e41APAb6mUVVNQNe7A5iiZ93QCgMDtNTLiw\nCztmd9E3txo0td1r004KKnkCEkaZKLM58vKqOmpdLetrq+i91eXv4s5ulevEz4OqSgpMHUZr\nGPUEACVNQ+3uvSuL8wHgzeP7ShqGhrZDAECao2A1eEru43sSLmt74dfXaRrbdrP7mslkj1wY\nAABFrzIAoKqskCAYVN+285SVAPDudWajtFcDvRlM5phfD7d3oT+xvCf3371+zGRKNQqveJfb\nRc9Uw7Anmy07cJovSQpSI0+A6JuPqHwQ+pw1313k5OR06dKliRMnAkBNTU1SUtKsWbOuXr1K\n7d27dy+Pxzt69KiiomJGRoavr6+6unq/fv0AICIiYseOHaqqqiUlJTNnzkxMTHRwcBD1Lfr6\n+j///DMA3L17V0xhLl68uGLFih49egDA4sWLDQwMqHCSJJ8/f25lZUXHfPnypb//++ehT548\nkZeX/zC3j0iGq0Q9/gjythcOJwiipvwdvdnAq6kufQsAxW+e8Rt4p9e4EQRBkqSqTvcJy04D\no0ONZRHwG/St+j+9dyknLVrf8qsJK4KpcE2TXnlZCWfXT+AoqL7JSmCxZfQtvxITTntwMbCu\nunya3w0JVKa9aHHZxsoyfyTkGzLX1VVX5GbGG9oMofde/G22fBddHbO+GdHnJFhICbIcMBkA\n+A28N1n3S948LXqVaTfyBwAwsB6gbdqHjlaUk8FR7CKxUravGTtiACDvSUL67bO5mfFAEH1G\newGA9ZBp8aG/HV82RN3A8nXmPSAI+zH/t5h92dvs7OQ7I732SKbcn5Lt8Lm2w+cWZqef3zKF\nDuRVlwGAzj8vNhjauADAm6wEq0FTRd18mswHoc9c8y2Jvn37vnz5Mj8/HwDu37+vra2to6ND\n7aqvr4+Oju7Xr9+bN28yMjIAwNLS8tatW9Ree3t7VVVVAFBWVtbR0amoqGj6C1rDwcGBatUB\ngJWVFdVcKysrW79+fXl5+fjx/751VFlZee8fJSUlUlKS+ZNL17xfduqd6weWPLgUeHqNWwOv\ntqG+DgD49bUyXKXJa8K///Oh0+Sl73Kzok76SqSEn0jxm6cAq/DLowAAIABJREFU8Dj2/M3D\nK54lXL15eMUxn8HULvsxXgRBlOQ9y318jyQFlgOniA+n8Hm8xMv7TB3Hgug+3Y7Bu49mXYPg\ncVzEy6SbBINp6zqHCn9wKbCs8NWoRfslW7zPAa+mMj70t4SLASo6JtQ4Ca6KFjU6hyQFyTeO\nJf99xH60l6SL2a4yos8/e3CttqqUo6Aqr6wNAObO7lLSnOqyopfJtxt4NSpa3dQMLISThG+b\nwVVW1zHvJ6Eit7f858kAIK+qIxRGVJbkQ3M3H4S+LM037OTl5a2trWNjYwEgNjZWeFjDu3fv\nBAJBZGTk8X/U1NSoqalRe7t0+fcvZsZH6ovS0NAQ3uTz+SEhIXPnziUIYvv27cJ7zc3Nb/7D\n2dm5pKTkoxSgtVx/2GXSZ0RuZlzy9aOK6vryqjrSHAUAGLvk+HdbIhU1DADAcsA38qo6r9Pj\nJFLCT6SyOA8ACAZjxs647/9MtB/7Y01F8e0TvgAQvm2GDFdl9s57c/ckdXcY/ejawcyYUDHh\nlKt7vQFI56mrJVWj9pGQV+V97eX8Xhrf737w/R8JGl17nPfzAIGgrPBV4uV99mO9O8mAAPFk\n5VUmrgz5zu+GoKH+7rntdPjblymhm79JjTz59Q87jey+lmAJ29/gmRvn7nk4eNbm6rKii7/P\nBYBTy4c11NdNWnVu7p6HQ+duL37zNGLHLDr+y6TI2sqSIXO2Sa7I7Y1DDbSvEX5BnGSxZaG5\nmw9CX5YWvbnv6Oh49erVUaNGPXjwYMqUf/+Uod5vmzt3bvfu3T9M9SkGqAq/gVdeXr569WoG\ng7F27Vpzc/MPY9JzpkhJSUlsSVwGY9CMjfTWoZ+dNIysAaDkzVN5VW2WNIcKl+EqVbx7I5kS\nfhqa3WwBwKSvG5stCwA2X8+8H/5HXtb9zJhQIMnBMzYw2WwAGDjN90n8xZSbJwCgyXB67Gfu\n4/sqOk1cZh3MkZRCKQaxwknHFwAYjMGz/E4s//rpgyspN48zWeyKotzo05vynj4gSUH06U1G\ntkO0Te2bzbMjybp7QV5VW8vEDgCkZOSM+wxPvPy+CzM18sT9C3vsRsy1HOhBjZPtFPj8U2tH\nO0z4mXqwaNx7+J0TvsVvngBAXXW5rrkD1ZFpaOMiK69S+DKVThd7dgtLSlrdsIekCt7+uuhb\nAEDJm/fj83i8GgBQ6KIr6qbUaQeeoy9dizrSHBwcXrx48ddff3Xp0kVfX58OZ7PZRkZG9NCK\nuro6T0/PS5cufZKSfmDnzp3Kyspbt279sFX3+Ti3afKJ5e97Dl5nxNXXVtm6fg8A57dMDd/+\n71/PpfnPlTS6SqSEnwhblksQjPyn74ezVBa/IUmBfBcdVV0zAHiZ/H6YZ2VJPkkKZOSVRYVT\nm4/jwkgB38l9aXtXo91pyEk1CMi8yvcjjXIz4wFAXlWXo9CFyZJ6lnD5WcLl8rc5QJLPEi7n\nPZXYaCFJKXjxKPnGMXqzJO85V1kDAAqeJ98N/c3tpyDrIdM7UasOAJjMiuI3Dy4GvN/k8xt4\nddKyXAAgCKK0IIeOyKupYLKk6GiVJfnaZn3bu7SSxmRJvUqLpj7HBfsDgM2wWeJvPgh9cVrU\nY6eoqGhpaXn8+PFx48Y12jV9+vQNGzZUV1fr6OjExcXxeDxnZ+ePWL6bN29eu3bN19e30cx5\nZWVlDx48cHJyOn36NB2or6/fv3//j/jt/53lgMm3T/gGrxurpGmUkxKlqmuqZdwLAMyd3VNu\nHAv2Haemb/E6825DPW/QjA2SLuxHZmjr8jzx7xPLv5ZT1izMTiMIYsjsLWyOorScYlrU6dzH\nd6VkuEU56UAQg6Zv4CprNhlOZZVy4zgQhKaxrWRr1A4W9dE6nFzofCxdJ3VZfW11Tlq0Qhdd\nDSPrYfN/p+NEn96UEX1u+rY7EiynpFgO+CbUz+P2CV8No57FuVnpt89+/cNvAJAVH8FRVHuV\nFk3/t81kSVl3uIkhm6RuYPX2ZcrJlSO4yhqFOekkKRjw7VoA0LN0ykmNPrbURVFN/93rx/yG\neofxv1BJHl4/AgA9h0yTYLElwsLZPeXmiTNr3GQV1fKfJnJVtKi/qMXcfBD64ojrsdPX19fT\n06M+u7q6mpqafvXV+1GKpqam1HNYW1tbPz8/BoORnJxsYWGxbds2akCDoaGhuvq/LwOZmZkJ\nb5qbm1PjKj5kaWmpqPjv8s8MBoN+/CqcZ3l5uZWVVVlZWbqQ169ft7L6Hx9XRVNBTZfeNHMa\n7zhpCb++rign3aTvqAnLz1Dh/Sb80mf0Qn593euMOEU1vclrwv7/ld6OYMicrRbO7vV1Ne9e\nZcqranusv8TmKALAdL+bOmZ9q0oKil9nyatqu68+T83nLiocAHg1FYpqepKsTHvhshnxM6wc\ndLhvsu6/e/24e99R7mvDGsWRV9XuPEM+G1HRNh635AQAPE/8u6G+bsyvh/UsnABASpqj0EUn\nN/Mu/e/NkweSLmw7GbvkmKHN4LqqksLsVGmO/EjvvdR4CFfP3T2/nsGv5xVmpzKlpAfP2kzP\nr/v2RRKLLaNl0luiBf/kpGQ4DCZTVvHf/2v6TVxsPWR6TWVpUXa6ZjfbKRsuU+Fibj5N5oPQ\n54yQ2Mtn7cjHx8ff3z8qKorqTcz1tmtVcl/zg5+mXO1h7/yerU1y1cgYAKxGKTYbs0lf1uFq\nw/Fp7fXTNp/DYWzDwQGAeQGPPnpJPk9t/nEJ68A/tP9yfMQfls+/7i3Rtt8XQs3qUBOnIYQQ\nQgh1Zp2xxw4hhBBCqEPqsAuVolYpKysTCASSLoUkSUlJcbncJnfx+fzy8vJ2Ls/nRlZWVkZG\npslddXV11dXV7Vyez42CgoKo5RArKyvr6+vbuTyfFYIglJSURO0tLS3tDP0LYrDZbHqZdYQ+\nArIT8PPzMzIyio+Pl3RBPl+amu/fFGaz2Y0GILcQQRDS0tIsVlv+VGCxWNLS0m2bxfpjFXjU\nqFGiDk5aWppwkratYsJkMttcRykpKWlp6TYk/C8npVGBt2/fLur4/PHHH8JJxCz3LEab6wgA\n//GkfJQCP3z4UNTxoVfEoa7ztk3wKS0t3bbrnMFgtLmO/7HA9ElRUVERc/Oh23xt/i1Tdfwv\nN5+21fFjFXjixIktvFEj1BKdosfOx8fHx8dH0qX4rDk7OxcXFwNAeXm5QCAQ8+e1KFS3lrS0\nNIfDaW3ampqa2tpaeXn5Ntyay8rKAEB4JHULNTQ0VFRU0AW2sbERFVNOTm7IkCEAIBAIysrK\n2vbndW1tbU1NDZfLbUMT5D+eFDGdkWJQ/XBycnLUf130uswf0tPTo44PlYTD4bShiUZ1aykp\nKbX2v1iSJEtLS1ksVhvWg+bxeFVVVR+lwGK+3dramurxraqq4vF4ioqKbWjfl5SUCE+63nL1\n9fWVlZUyMjKysrKtTVtdXV1XVyemM1KM0tJSBoNBFVj8qRk4cGBlZSWVBAA6z82HPin0OpkI\nfRySblmiz8vYsWNdXFzakDAjI8POzs7Pz68Naf/44w87O7uEhIQ2pB09evTQoUPbkDAtLc3O\nzm7Lli0tT5KXl2dnZ7d06dI2fN3Ro0ft7OyuX7/ehrTTpk3r06dPGxLm5uba2dktW7asDWmP\nHDliZ2d348aNlieJiIiws7MLCQlpw9d5e3vb2dmVlZW1NmFVVZWdnd38+fPb8KXh4eF2dnbn\nzp1rQ1ovLy87O7vy8vKWJ1m9erWdnV12dnYbvq5fv34eHh5tSBgVFWVnZxcUFNSGtKtWrbKz\ns8vJyWlDWgcHh6lTp7YqyfDhw4cPH96G73r06JGdnd2OHTvakHb79u12dnbJycltSOvq6jpy\n5Mg2JHz48KGdnd3OnTvbkBahZuGoWIQQQgihDgIbdgghhBBCHQRz7dq1ki4D+oyoqKjY29t3\n7969tQlZLJaurm6fPn3ocRgtJycnZ2FhYW1t3YZ311RVVe3t7U1MTFqbkMVi6enptarADAZD\nS0urb9++OjqtXiaEw+GYmpra2tq24VUwZWXl3r17t2FNZCaTqaWlZW9v34YCy8rKmpqa2tjY\ntLzAsrKy3bp169Wrl7Jyq9fZVFRUtLW1tbCwaO3rXARBqKurOzg4CC9j3UIyMjLGxsa2trZt\nLrClpWXLCywvL29tbW1lZdWGN+67dOnSr18/Q0PD1iZks9mGhoZ2dnZdurR6tRKqwD169Ghb\ngR0cHFpVYBUVlb59+7bhtywlJaWnp9e7d28NDY3WppWTk7O0tLS2tm7DO4hUgY2NG0863Swp\nKSl9ff22FRihZnWKeewQQgghhDoDfBSLEEIIIdRBYMMOIYQQQqiDwIYdQgghhFAH0SkmKAaA\nqVOnnjx5UtKlkCQOh1NVVSUmAp/PP3LkSGxsbENDg729/ffffy9+Kt1nz54dOnTo2bNn0tLS\ndnZ206dPpyYjXbt2bWJiIh2tZ8+e69evF074+PHjxYsXC4ds2bKFGhlw/fr18PDwd+/emZqa\nLliwoNHr3rGxsX5+fo2K4eLi8uOPP4aEhBw9epQOZDKZ58+fpzefPn26a9cueoEEACgrK9uz\nZ09qaqqSkpKrq6ubm5v4cPG7mnTnzp2zZ8/m5eWpqqq6uLiMHz+eyWSSJDlp0iQej0dH+/bb\nb93d3YUTiqpLsydo7969ly5dalSMRYsWDR48WPxJCQsLKygomDdvHh2SlZUVFBSUnZ2tq6s7\nbdo0a2tr8eHid32Iz+cHBwdHRkaWlJTo6uq6u7v369cPxF4bNFF1afYEeXl5ZWdnNwo8cOCA\nmpqa+JOyfv16FxcXR0dHOkTUhSrmAhZ/bTdSWlp66NChpKQkHo9namo6Y8aMrl27guhrgybm\nAhN/gioqKqZOndqoGOrq6gcOHBB/UhoaGqZPnx4YGEgPshF1oYq5gPHmIyYcodbqLA07ipOT\nUxuGPnUAd+/ebXYp2IMHD8bGxnp6ejKZzICAgN27d//000+iIldUVKxdu9ba2nr9+vUVFRWH\nDh3auHGjn58fQRCvX7+eOHGilZUVFfPDufJzc3O7dOmycOFCOoQazxgXF/fnn3/OnTvXwMDg\n7Nmzy5YtCwwMFB5yaGFhITyIu6GhYdeuXfb29lSevXv3HjVqFLWLXr2gtrb22bNnBw4caFSG\n1atXc7nc5cuX5+XlBQYGysrKUmsniAoXv+tDaWlp27Zt++677+zs7F6+fLl///7a2trvvvuu\nsLCQx+MtXryYHv+rra394fFpsi7NnqARI0b06dOH3szPzz927JilpSUAiDop5eXlKSkpZ8+e\ndXZ2phMWFRWtXLnSxcVl1qxZcXFxa9eu3bVrl56enqhwMUlEHZ+QkJALFy7Mnz9fV1f33r17\nfn5+a9as6dWrl6hrQ5ioujR7gjw9PWtqaujN+Pj4J0+eqKqqijopJEkWFRXdvn07ISHBxcWF\nTijqQhVzATd7bTeyffv28vLyX3/9VVpa+vz58ytWrNi9e7eysrKoa4Mmqi7NniAOh9NohoTT\np09TA1RFnRQ+n//69euQkJCKigrhhKIuVDEXMN58xIQj1GqSnR+53UyZMgUAnj9/LumCSEbP\nnj05HI6YCNXV1ZMmTYqOjqY2ExISxo4dSy3O3aTIyEh3d/e6ujpq88mTJ25ubq9fv66rqxs9\nerT443zkyJGNGzd+GL506dKAgADqc1VV1bhx4+Li4sTkc/r06X379lGfFy9eHBER8WGcTZs2\nzZw5c/LkyQsXLqQDk5OTR48eXVxcTG0eOnTI29tbTLj4XU36448/Vq5cSW+eP39+2rRpJEkm\nJiZ+8803YhKKqktrTxBJkqtWrYqNjSVJUtRJ4fP5M2fOnDlz5oQJEwIDA+nwEydOeHp60pu/\n/PILdZxFhYvf1aS5c+eeOXOG3vT19d26dSsp+tqgiapLa09QeXn5Dz/8kJeXR4o+KWlpadTx\nGT16dExMDB0u6kIVcwG36touKipyc3NLT0+nNhsaGqZMmXLlyhVS9HVOE1WX1p6g1NTUn3/+\nub6+nhR9Us6dOzdz5sxvv/3Wzc2NXoFD1IUq5gLGm4+YcITaoHP12CFRsrOza2tr6fVSe/bs\nKRAInj171qtXrybjq6mpzZw5k57diuoIIUmS+p8yJCQkMTFRVla2T58+06dPb7SAY25ubmlp\n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\nsBH/D0htsRUz4owTAAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "palettefig <- c(\n", + " `3'-` = \"#6696D0\",\n", + " `3'-C` = \"#E46D32\",\n", + " `3'-CC` = \"#B82123\",\n", + " `3'-CCC` = \"#F3B81B\",\n", + " `3'-CCCC` = \"#D6D65F\"\n", + ")\n", + "options(repr.plot.width = 7, repr.plot.height = 7)\n", + "\n", + "tRNAlabs = count_table_l$rname\n", + "labs = tRNAlabs %>% as.character %>% unique %>% str_sub(5,11)\n", + "names(labs) = tRNAlabs %>% as.character %>% unique \n", + "\n", + "count_table_l %>%\n", + " mutate(rname = fct_relevel(rname,\n", + " sort(unique(as.character(rname)),\n", + " decreasing = FALSE)),\n", + " condition = fct_relevel(condition,\n", + " sort(unique(as.character(condition)),\n", + " decreasing = TRUE)),\n", + " downstream_seq = paste0(\"3'-\", downstream_seq)) %>%\n", + " ggplot(aes(fill = downstream_seq, y = pc, x = condition)) +\n", + " geom_bar(position = \"stack\", stat = \"identity\") +\n", + " coord_flip() +\n", + " scale_fill_manual(values = palettefig) +\n", + " geom_text(aes(condition, 50, label = total, fill = NULL), size = 3) +\n", + " theme_classic() +\n", + " xlab(NULL) +\n", + " ylab(NULL) +\n", + " facet_wrap(facets = . ~ rname, ncol = 6, labeller = labeller(rname = labs)) + \n", + " labs(fill = \"3'-end modification\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Differential proportion analysis: which tRNAs are significantly modified by toxin?\n", + "\n", + "Are the observed differences in proportions of 3'-end modified transcripts statistically significant?\n", + "\n", + "For this, we will compare the proportion of modified tRNAs in the conrtol *vs.* the proportion of modified tRNAs in the samples treated with MenT1.\n", + "\n", + "In the following, we regroup the modified tRNAs as the \"fraction\" and we sum up unmodfied and modified tRNAs in the \"total\" as expected by `EMOTE_differential_proportion`." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A grouped_df: 296 × 5</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>rname</th><th scope=col>strand</th><th scope=col>position</th><th scope=col>count</th><th scope=col>sample_id</th></tr>\n", + "\t<tr><th scope=col><fct></th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><int></th><th scope=col><chr></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 5723</td><td>MenT1.r1.fraction</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 20395</td><td>MenT1.r1.total </td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 33097</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 82042</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 440</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 74407</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 78</td><td>ctrl.r2.fraction </td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>+</td><td>76</td><td> 34755</td><td>ctrl.r2.total </td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td> 9578</td><td>MenT1.r1.fraction</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td> 32118</td><td>MenT1.r1.total </td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td> 48164</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td>137517</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td> 474</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td>113540</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td> 80</td><td>ctrl.r2.fraction </td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>+</td><td>76</td><td> 44848</td><td>ctrl.r2.total </td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 189</td><td>MenT1.r1.fraction</td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 838</td><td>MenT1.r1.total </td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 658</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 2900</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 7</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 3668</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 0</td><td>ctrl.r2.fraction </td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>+</td><td>76</td><td> 1299</td><td>ctrl.r2.total </td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>+</td><td>76</td><td> 11064</td><td>MenT1.r1.fraction</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>+</td><td>76</td><td> 34535</td><td>MenT1.r1.total </td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>+</td><td>76</td><td> 10615</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>+</td><td>76</td><td> 30487</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>+</td><td>76</td><td> 74</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>+</td><td>76</td><td> 19146</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td><td>â‹®</td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>+</td><td>76</td><td> 0</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>+</td><td>76</td><td> 32</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>+</td><td>76</td><td> 0</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>+</td><td>76</td><td> 90</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>+</td><td>76</td><td> 0</td><td>ctrl.r2.fraction </td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>+</td><td>76</td><td> 11</td><td>ctrl.r2.total </td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 24</td><td>MenT1.r1.fraction</td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 86</td><td>MenT1.r1.total </td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 120</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 387</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 0</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 382</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 0</td><td>ctrl.r2.fraction </td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>+</td><td>86</td><td> 96</td><td>ctrl.r2.total </td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 50</td><td>MenT1.r1.fraction</td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 376</td><td>MenT1.r1.total </td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 173</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 1081</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 3</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 941</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 0</td><td>ctrl.r2.fraction </td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>+</td><td>75</td><td> 537</td><td>ctrl.r2.total </td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td> 2418</td><td>MenT1.r1.fraction</td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td>20010</td><td>MenT1.r1.total </td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td> 8802</td><td>MenT1.r2.fraction</td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td>60469</td><td>MenT1.r2.total </td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td> 89</td><td>ctrl.r1.fraction </td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td>54616</td><td>ctrl.r1.total </td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td> 14</td><td>ctrl.r2.fraction </td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>+</td><td>75</td><td>25752</td><td>ctrl.r2.total </td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A grouped\\_df: 296 × 5\n", + "\\begin{tabular}{lllll}\n", + " rname & strand & position & count & sample\\_id\\\\\n", + " <fct> & <fct> & <dbl> & <int> & <chr>\\\\\n", + "\\hline\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 5723 & MenT1.r1.fraction\\\\\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 20395 & MenT1.r1.total \\\\\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 33097 & MenT1.r2.fraction\\\\\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 82042 & MenT1.r2.total \\\\\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 440 & ctrl.r1.fraction \\\\\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 74407 & ctrl.r1.total \\\\\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 78 & ctrl.r2.fraction \\\\\n", + "\t Msm.Ala-CGC.trna33 & + & 76 & 34755 & ctrl.r2.total \\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 9578 & MenT1.r1.fraction\\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 32118 & MenT1.r1.total \\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 48164 & MenT1.r2.fraction\\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 137517 & MenT1.r2.total \\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 474 & ctrl.r1.fraction \\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 113540 & ctrl.r1.total \\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 80 & ctrl.r2.fraction \\\\\n", + "\t Msm.Ala-GGC.trna9 & + & 76 & 44848 & ctrl.r2.total \\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 189 & MenT1.r1.fraction\\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 838 & MenT1.r1.total \\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 658 & MenT1.r2.fraction\\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 2900 & MenT1.r2.total \\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 7 & ctrl.r1.fraction \\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 3668 & ctrl.r1.total \\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 0 & ctrl.r2.fraction \\\\\n", + "\t Msm.Ala-TGC.trna2 & + & 76 & 1299 & ctrl.r2.total \\\\\n", + "\t Msm.Arg-CCG.trna18 & + & 76 & 11064 & MenT1.r1.fraction\\\\\n", + "\t Msm.Arg-CCG.trna18 & + & 76 & 34535 & MenT1.r1.total \\\\\n", + "\t Msm.Arg-CCG.trna18 & + & 76 & 10615 & MenT1.r2.fraction\\\\\n", + "\t Msm.Arg-CCG.trna18 & + & 76 & 30487 & MenT1.r2.total \\\\\n", + "\t Msm.Arg-CCG.trna18 & + & 76 & 74 & ctrl.r1.fraction \\\\\n", + "\t Msm.Arg-CCG.trna18 & + & 76 & 19146 & ctrl.r1.total \\\\\n", + "\t â‹® & â‹® & â‹® & â‹® & â‹®\\\\\n", + "\t Msm.Trp-CCA.trna7 & + & 76 & 0 & MenT1.r2.fraction\\\\\n", + "\t Msm.Trp-CCA.trna7 & + & 76 & 32 & MenT1.r2.total \\\\\n", + "\t Msm.Trp-CCA.trna7 & + & 76 & 0 & ctrl.r1.fraction \\\\\n", + "\t Msm.Trp-CCA.trna7 & + & 76 & 90 & ctrl.r1.total \\\\\n", + "\t Msm.Trp-CCA.trna7 & + & 76 & 0 & ctrl.r2.fraction \\\\\n", + "\t Msm.Trp-CCA.trna7 & + & 76 & 11 & ctrl.r2.total \\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 24 & MenT1.r1.fraction\\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 86 & MenT1.r1.total \\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 120 & MenT1.r2.fraction\\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 387 & MenT1.r2.total \\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 0 & ctrl.r1.fraction \\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 382 & ctrl.r1.total \\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 0 & ctrl.r2.fraction \\\\\n", + "\t Msm.Tyr-GTA.trna4 & + & 86 & 96 & ctrl.r2.total \\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 50 & MenT1.r1.fraction\\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 376 & MenT1.r1.total \\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 173 & MenT1.r2.fraction\\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 1081 & MenT1.r2.total \\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 3 & ctrl.r1.fraction \\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 941 & ctrl.r1.total \\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 0 & ctrl.r2.fraction \\\\\n", + "\t Msm.Val-CAC.trna12 & + & 75 & 537 & ctrl.r2.total \\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 2418 & MenT1.r1.fraction\\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 20010 & MenT1.r1.total \\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 8802 & MenT1.r2.fraction\\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 60469 & MenT1.r2.total \\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 89 & ctrl.r1.fraction \\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 54616 & ctrl.r1.total \\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 14 & ctrl.r2.fraction \\\\\n", + "\t Msm.Val-GAC.trna45 & + & 75 & 25752 & ctrl.r2.total \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A grouped_df: 296 × 5\n", + "\n", + "| rname <fct> | strand <fct> | position <dbl> | count <int> | sample_id <chr> |\n", + "|---|---|---|---|---|\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 5723 | MenT1.r1.fraction |\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 20395 | MenT1.r1.total |\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 33097 | MenT1.r2.fraction |\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 82042 | MenT1.r2.total |\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 440 | ctrl.r1.fraction |\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 74407 | ctrl.r1.total |\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 78 | ctrl.r2.fraction |\n", + "| Msm.Ala-CGC.trna33 | + | 76 | 34755 | ctrl.r2.total |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 9578 | MenT1.r1.fraction |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 32118 | MenT1.r1.total |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 48164 | MenT1.r2.fraction |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 137517 | MenT1.r2.total |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 474 | ctrl.r1.fraction |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 113540 | ctrl.r1.total |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 80 | ctrl.r2.fraction |\n", + "| Msm.Ala-GGC.trna9 | + | 76 | 44848 | ctrl.r2.total |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 189 | MenT1.r1.fraction |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 838 | MenT1.r1.total |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 658 | MenT1.r2.fraction |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 2900 | MenT1.r2.total |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 7 | ctrl.r1.fraction |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 3668 | ctrl.r1.total |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 0 | ctrl.r2.fraction |\n", + "| Msm.Ala-TGC.trna2 | + | 76 | 1299 | ctrl.r2.total |\n", + "| Msm.Arg-CCG.trna18 | + | 76 | 11064 | MenT1.r1.fraction |\n", + "| Msm.Arg-CCG.trna18 | + | 76 | 34535 | MenT1.r1.total |\n", + "| Msm.Arg-CCG.trna18 | + | 76 | 10615 | MenT1.r2.fraction |\n", + "| Msm.Arg-CCG.trna18 | + | 76 | 30487 | MenT1.r2.total |\n", + "| Msm.Arg-CCG.trna18 | + | 76 | 74 | ctrl.r1.fraction |\n", + "| Msm.Arg-CCG.trna18 | + | 76 | 19146 | ctrl.r1.total |\n", + "| â‹® | â‹® | â‹® | â‹® | â‹® |\n", + "| Msm.Trp-CCA.trna7 | + | 76 | 0 | MenT1.r2.fraction |\n", + "| Msm.Trp-CCA.trna7 | + | 76 | 32 | MenT1.r2.total |\n", + "| Msm.Trp-CCA.trna7 | + | 76 | 0 | ctrl.r1.fraction |\n", + "| Msm.Trp-CCA.trna7 | + | 76 | 90 | ctrl.r1.total |\n", + "| Msm.Trp-CCA.trna7 | + | 76 | 0 | ctrl.r2.fraction |\n", + "| Msm.Trp-CCA.trna7 | + | 76 | 11 | ctrl.r2.total |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 24 | MenT1.r1.fraction |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 86 | MenT1.r1.total |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 120 | MenT1.r2.fraction |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 387 | MenT1.r2.total |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 0 | ctrl.r1.fraction |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 382 | ctrl.r1.total |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 0 | ctrl.r2.fraction |\n", + "| Msm.Tyr-GTA.trna4 | + | 86 | 96 | ctrl.r2.total |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 50 | MenT1.r1.fraction |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 376 | MenT1.r1.total |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 173 | MenT1.r2.fraction |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 1081 | MenT1.r2.total |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 3 | ctrl.r1.fraction |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 941 | ctrl.r1.total |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 0 | ctrl.r2.fraction |\n", + "| Msm.Val-CAC.trna12 | + | 75 | 537 | ctrl.r2.total |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 2418 | MenT1.r1.fraction |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 20010 | MenT1.r1.total |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 8802 | MenT1.r2.fraction |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 60469 | MenT1.r2.total |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 89 | ctrl.r1.fraction |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 54616 | ctrl.r1.total |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 14 | ctrl.r2.fraction |\n", + "| Msm.Val-GAC.trna45 | + | 75 | 25752 | ctrl.r2.total |\n", + "\n" + ], + "text/plain": [ + " rname strand position count sample_id \n", + "1 Msm.Ala-CGC.trna33 + 76 5723 MenT1.r1.fraction\n", + "2 Msm.Ala-CGC.trna33 + 76 20395 MenT1.r1.total \n", + "3 Msm.Ala-CGC.trna33 + 76 33097 MenT1.r2.fraction\n", + "4 Msm.Ala-CGC.trna33 + 76 82042 MenT1.r2.total \n", + "5 Msm.Ala-CGC.trna33 + 76 440 ctrl.r1.fraction \n", + "6 Msm.Ala-CGC.trna33 + 76 74407 ctrl.r1.total \n", + "7 Msm.Ala-CGC.trna33 + 76 78 ctrl.r2.fraction \n", + "8 Msm.Ala-CGC.trna33 + 76 34755 ctrl.r2.total \n", + "9 Msm.Ala-GGC.trna9 + 76 9578 MenT1.r1.fraction\n", + "10 Msm.Ala-GGC.trna9 + 76 32118 MenT1.r1.total \n", + "11 Msm.Ala-GGC.trna9 + 76 48164 MenT1.r2.fraction\n", + "12 Msm.Ala-GGC.trna9 + 76 137517 MenT1.r2.total \n", + "13 Msm.Ala-GGC.trna9 + 76 474 ctrl.r1.fraction \n", + "14 Msm.Ala-GGC.trna9 + 76 113540 ctrl.r1.total \n", + "15 Msm.Ala-GGC.trna9 + 76 80 ctrl.r2.fraction \n", + "16 Msm.Ala-GGC.trna9 + 76 44848 ctrl.r2.total \n", + "17 Msm.Ala-TGC.trna2 + 76 189 MenT1.r1.fraction\n", + "18 Msm.Ala-TGC.trna2 + 76 838 MenT1.r1.total \n", + "19 Msm.Ala-TGC.trna2 + 76 658 MenT1.r2.fraction\n", + "20 Msm.Ala-TGC.trna2 + 76 2900 MenT1.r2.total \n", + "21 Msm.Ala-TGC.trna2 + 76 7 ctrl.r1.fraction \n", + "22 Msm.Ala-TGC.trna2 + 76 3668 ctrl.r1.total \n", + "23 Msm.Ala-TGC.trna2 + 76 0 ctrl.r2.fraction \n", + "24 Msm.Ala-TGC.trna2 + 76 1299 ctrl.r2.total \n", + "25 Msm.Arg-CCG.trna18 + 76 11064 MenT1.r1.fraction\n", + "26 Msm.Arg-CCG.trna18 + 76 34535 MenT1.r1.total \n", + "27 Msm.Arg-CCG.trna18 + 76 10615 MenT1.r2.fraction\n", + "28 Msm.Arg-CCG.trna18 + 76 30487 MenT1.r2.total \n", + "29 Msm.Arg-CCG.trna18 + 76 74 ctrl.r1.fraction \n", + "30 Msm.Arg-CCG.trna18 + 76 19146 ctrl.r1.total \n", + "â‹® â‹® â‹® â‹® â‹® â‹® \n", + "267 Msm.Trp-CCA.trna7 + 76 0 MenT1.r2.fraction\n", + "268 Msm.Trp-CCA.trna7 + 76 32 MenT1.r2.total \n", + "269 Msm.Trp-CCA.trna7 + 76 0 ctrl.r1.fraction \n", + "270 Msm.Trp-CCA.trna7 + 76 90 ctrl.r1.total \n", + "271 Msm.Trp-CCA.trna7 + 76 0 ctrl.r2.fraction \n", + "272 Msm.Trp-CCA.trna7 + 76 11 ctrl.r2.total \n", + "273 Msm.Tyr-GTA.trna4 + 86 24 MenT1.r1.fraction\n", + "274 Msm.Tyr-GTA.trna4 + 86 86 MenT1.r1.total \n", + "275 Msm.Tyr-GTA.trna4 + 86 120 MenT1.r2.fraction\n", + "276 Msm.Tyr-GTA.trna4 + 86 387 MenT1.r2.total \n", + "277 Msm.Tyr-GTA.trna4 + 86 0 ctrl.r1.fraction \n", + "278 Msm.Tyr-GTA.trna4 + 86 382 ctrl.r1.total \n", + "279 Msm.Tyr-GTA.trna4 + 86 0 ctrl.r2.fraction \n", + "280 Msm.Tyr-GTA.trna4 + 86 96 ctrl.r2.total \n", + "281 Msm.Val-CAC.trna12 + 75 50 MenT1.r1.fraction\n", + "282 Msm.Val-CAC.trna12 + 75 376 MenT1.r1.total \n", + "283 Msm.Val-CAC.trna12 + 75 173 MenT1.r2.fraction\n", + "284 Msm.Val-CAC.trna12 + 75 1081 MenT1.r2.total \n", + "285 Msm.Val-CAC.trna12 + 75 3 ctrl.r1.fraction \n", + "286 Msm.Val-CAC.trna12 + 75 941 ctrl.r1.total \n", + "287 Msm.Val-CAC.trna12 + 75 0 ctrl.r2.fraction \n", + "288 Msm.Val-CAC.trna12 + 75 537 ctrl.r2.total \n", + "289 Msm.Val-GAC.trna45 + 75 2418 MenT1.r1.fraction\n", + "290 Msm.Val-GAC.trna45 + 75 20010 MenT1.r1.total \n", + "291 Msm.Val-GAC.trna45 + 75 8802 MenT1.r2.fraction\n", + "292 Msm.Val-GAC.trna45 + 75 60469 MenT1.r2.total \n", + "293 Msm.Val-GAC.trna45 + 75 89 ctrl.r1.fraction \n", + "294 Msm.Val-GAC.trna45 + 75 54616 ctrl.r1.total \n", + "295 Msm.Val-GAC.trna45 + 75 14 ctrl.r2.fraction \n", + "296 Msm.Val-GAC.trna45 + 75 25752 ctrl.r2.total " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "proportion_table <- count_table_l %>% \n", + " select(-rlength) %>%\n", + " mutate(count_of = ifelse(downstream_seq==\"\", \"total\", \"fraction\")) %>%\n", + " group_by(rname, strand, position, condition, count_of) %>%\n", + " summarise(count = sum(count), .groups = \"keep\") %>%\n", + " separate(condition, into = c(\"group\", \"replicate\")) %>%\n", + " pivot_wider(names_from=\"count_of\", values_from=\"count\", values_fill=0) %>%\n", + " mutate(total = total + fraction)%>% # for dss which expects total and fraction\n", + " pivot_longer(cols = c(\"fraction\", \"total\"),\n", + " names_to = \"count_of\",\n", + " values_to = \"count\") %>%\n", + " mutate(sample_id = paste0(group, \".\", replicate, \".\", count_of)) %>%\n", + " select(-group, -replicate, -count_of)\n", + "proportion_table" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, we need a `design_matrix` to specify the group and replicate for each `sample_id` and also if the counts in the `count_table` corresponds to the fractin or the total." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A tibble: 8 × 4</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>sample_id</th><th scope=col>group</th><th scope=col>replicate</th><th scope=col>count_of</th></tr>\n", + "\t<tr><th scope=col><chr></th><th scope=col><chr></th><th scope=col><chr></th><th scope=col><chr></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>ctrl.r1.fraction </td><td>ctrl </td><td>r1</td><td>fraction</td></tr>\n", + "\t<tr><td>ctrl.r1.total </td><td>ctrl </td><td>r1</td><td>total </td></tr>\n", + "\t<tr><td>ctrl.r2.fraction </td><td>ctrl </td><td>r2</td><td>fraction</td></tr>\n", + "\t<tr><td>ctrl.r2.total </td><td>ctrl </td><td>r2</td><td>total </td></tr>\n", + "\t<tr><td>MenT1.r1.fraction</td><td>MenT1</td><td>r1</td><td>fraction</td></tr>\n", + "\t<tr><td>MenT1.r1.total </td><td>MenT1</td><td>r1</td><td>total </td></tr>\n", + "\t<tr><td>MenT1.r2.fraction</td><td>MenT1</td><td>r2</td><td>fraction</td></tr>\n", + "\t<tr><td>MenT1.r2.total </td><td>MenT1</td><td>r2</td><td>total </td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A tibble: 8 × 4\n", + "\\begin{tabular}{llll}\n", + " sample\\_id & group & replicate & count\\_of\\\\\n", + " <chr> & <chr> & <chr> & <chr>\\\\\n", + "\\hline\n", + "\t ctrl.r1.fraction & ctrl & r1 & fraction\\\\\n", + "\t ctrl.r1.total & ctrl & r1 & total \\\\\n", + "\t ctrl.r2.fraction & ctrl & r2 & fraction\\\\\n", + "\t ctrl.r2.total & ctrl & r2 & total \\\\\n", + "\t MenT1.r1.fraction & MenT1 & r1 & fraction\\\\\n", + "\t MenT1.r1.total & MenT1 & r1 & total \\\\\n", + "\t MenT1.r2.fraction & MenT1 & r2 & fraction\\\\\n", + "\t MenT1.r2.total & MenT1 & r2 & total \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 8 × 4\n", + "\n", + "| sample_id <chr> | group <chr> | replicate <chr> | count_of <chr> |\n", + "|---|---|---|---|\n", + "| ctrl.r1.fraction | ctrl | r1 | fraction |\n", + "| ctrl.r1.total | ctrl | r1 | total |\n", + "| ctrl.r2.fraction | ctrl | r2 | fraction |\n", + "| ctrl.r2.total | ctrl | r2 | total |\n", + "| MenT1.r1.fraction | MenT1 | r1 | fraction |\n", + "| MenT1.r1.total | MenT1 | r1 | total |\n", + "| MenT1.r2.fraction | MenT1 | r2 | fraction |\n", + "| MenT1.r2.total | MenT1 | r2 | total |\n", + "\n" + ], + "text/plain": [ + " sample_id group replicate count_of\n", + "1 ctrl.r1.fraction ctrl r1 fraction\n", + "2 ctrl.r1.total ctrl r1 total \n", + "3 ctrl.r2.fraction ctrl r2 fraction\n", + "4 ctrl.r2.total ctrl r2 total \n", + "5 MenT1.r1.fraction MenT1 r1 fraction\n", + "6 MenT1.r1.total MenT1 r1 total \n", + "7 MenT1.r2.fraction MenT1 r2 fraction\n", + "8 MenT1.r2.total MenT1 r2 total " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "design_matrix <- tibble(sample_id = unique(sort(proportion_table$sample_id))) %>%\n", + " separate(sample_id,\n", + " sep=\"\\\\.\",\n", + " into=c(\"group\", \"replicate\", \"count_of\"),\n", + " remove = F)\n", + "design_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Estimating dispersion for each CpG site, this will take a while ...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in est.prior.BSseq.logN(X, N):\n", + "“The coverages are too low. Cannot get good estimations of prior. Use arbitrary prior N(-3,1).â€\n", + "Warning message in est.prior.BSseq.logN(X, N):\n", + "“The coverages are too low. Cannot get good estimations of prior. Use arbitrary prior N(-3,1).â€\n" + ] + }, + { + "data": { + "text/html": [ + "<table class=\"dataframe\">\n", + "<caption>A grouped_df: 37 × 7</caption>\n", + "<thead>\n", + "\t<tr><th scope=col>rname</th><th scope=col>position</th><th scope=col>strand</th><th scope=col>ctrl</th><th scope=col>MenT1</th><th scope=col>pval</th><th scope=col>fdr</th></tr>\n", + "\t<tr><th scope=col><chr></th><th scope=col><dbl></th><th scope=col><fct></th><th scope=col><dbl></th><th scope=col><dbl></th><th scope=col><dbl></th><th scope=col><dbl></th></tr>\n", + "</thead>\n", + "<tbody>\n", + "\t<tr><td>Msm.Gly-TCC.trna14</td><td>74</td><td>+</td><td>0.0047935237</td><td>0.4121249</td><td>3.894238e-15</td><td>1.440868e-13</td></tr>\n", + "\t<tr><td>Msm.Cys-GCA.trna44</td><td>74</td><td>+</td><td>0.0045857200</td><td>0.3814740</td><td>1.704723e-12</td><td>3.153737e-11</td></tr>\n", + "\t<tr><td>Msm.Arg-CCG.trna18</td><td>76</td><td>+</td><td>0.0021046082</td><td>0.3342759</td><td>2.702900e-11</td><td>3.333577e-10</td></tr>\n", + "\t<tr><td>Msm.Ala-GGC.trna9 </td><td>76</td><td>+</td><td>0.0029792716</td><td>0.3242266</td><td>1.703489e-09</td><td>1.575728e-08</td></tr>\n", + "\t<tr><td>Msm.Arg-CCT.trna20</td><td>76</td><td>+</td><td>0.0010775862</td><td>0.2660812</td><td>1.381940e-08</td><td>1.022635e-07</td></tr>\n", + "\t<tr><td>Msm.Leu-CAA.trna42</td><td>77</td><td>+</td><td>0.0014649780</td><td>0.2633938</td><td>1.811690e-08</td><td>1.117209e-07</td></tr>\n", + "\t<tr><td>Msm.Leu-CAG.trna3 </td><td>86</td><td>+</td><td>0.0013108723</td><td>0.2654050</td><td>4.124288e-08</td><td>2.179981e-07</td></tr>\n", + "\t<tr><td>Msm.Tyr-GTA.trna4 </td><td>86</td><td>+</td><td>0.0000000000</td><td>0.2945736</td><td>6.516015e-08</td><td>3.013657e-07</td></tr>\n", + "\t<tr><td>Msm.Asp-GTC.trna31</td><td>77</td><td>+</td><td>0.0004306632</td><td>0.2499325</td><td>2.874203e-07</td><td>1.063455e-06</td></tr>\n", + "\t<tr><td>Msm.Leu-GAG.trna13</td><td>89</td><td>+</td><td>0.0030815038</td><td>0.2476372</td><td>2.787857e-07</td><td>1.063455e-06</td></tr>\n", + "\t<tr><td>Msm.Ala-TGC.trna2 </td><td>76</td><td>+</td><td>0.0009541985</td><td>0.2262168</td><td>3.284763e-07</td><td>1.104875e-06</td></tr>\n", + "\t<tr><td>Msm.Ala-CGC.trna33</td><td>76</td><td>+</td><td>0.0040788518</td><td>0.3420117</td><td>7.213601e-07</td><td>2.224194e-06</td></tr>\n", + "\t<tr><td>Msm.SeC-TCA.trna46</td><td>95</td><td>+</td><td>0.0025380711</td><td>0.2319815</td><td>2.012279e-06</td><td>5.727255e-06</td></tr>\n", + "\t<tr><td>Msm.Thr-GGT.trna5 </td><td>76</td><td>+</td><td>0.0009080530</td><td>0.2289079</td><td>4.550638e-06</td><td>1.202669e-05</td></tr>\n", + "\t<tr><td>Msm.Lys-CTT.trna17</td><td>76</td><td>+</td><td>0.0014266952</td><td>0.1817989</td><td>5.994505e-06</td><td>1.478645e-05</td></tr>\n", + "\t<tr><td>Msm.Pro-GGG.trna41</td><td>77</td><td>+</td><td>0.0026701323</td><td>0.2522951</td><td>8.585435e-06</td><td>1.985382e-05</td></tr>\n", + "\t<tr><td>Msm.Ser-GGA.trna24</td><td>89</td><td>+</td><td>0.0009742566</td><td>0.2550310</td><td>1.487132e-05</td><td>3.236698e-05</td></tr>\n", + "\t<tr><td>Msm.Pro-CGG.trna23</td><td>77</td><td>+</td><td>0.0007990889</td><td>0.1705532</td><td>2.085183e-05</td><td>4.060620e-05</td></tr>\n", + "\t<tr><td>Msm.Thr-TGT </td><td>75</td><td>+</td><td>0.0000000000</td><td>0.2202381</td><td>2.059844e-05</td><td>4.060620e-05</td></tr>\n", + "\t<tr><td>Msm.Glu-TTC.trna30</td><td>76</td><td>+</td><td>0.0010031082</td><td>0.2062107</td><td>2.579545e-05</td><td>4.772159e-05</td></tr>\n", + "\t<tr><td>Msm.Asn-GTT.trna37</td><td>76</td><td>+</td><td>0.0009142021</td><td>0.1908207</td><td>6.217302e-05</td><td>1.072207e-04</td></tr>\n", + "\t<tr><td>Msm.Gln-CTG.trna10</td><td>75</td><td>+</td><td>0.0026154947</td><td>0.1644501</td><td>6.375287e-05</td><td>1.072207e-04</td></tr>\n", + "\t<tr><td>Msm.Ile-GAT.trna1 </td><td>77</td><td>+</td><td>0.0010919056</td><td>0.1726496</td><td>1.143330e-04</td><td>1.839271e-04</td></tr>\n", + "\t<tr><td>Msm.Lys-TTT.trna21</td><td>76</td><td>+</td><td>0.0032751092</td><td>0.1698718</td><td>1.659308e-04</td><td>2.558100e-04</td></tr>\n", + "\t<tr><td>Msm.Thr-CGT.trna29</td><td>76</td><td>+</td><td>0.0016025641</td><td>0.1879300</td><td>2.265958e-04</td><td>3.353618e-04</td></tr>\n", + "\t<tr><td>Msm.Val-CAC.trna12</td><td>75</td><td>+</td><td>0.0015940489</td><td>0.1465079</td><td>2.459944e-04</td><td>3.500690e-04</td></tr>\n", + "\t<tr><td>Msm.Val-GAC.trna45</td><td>75</td><td>+</td><td>0.0010866031</td><td>0.1332009</td><td>2.814170e-04</td><td>3.856456e-04</td></tr>\n", + "\t<tr><td>Msm.His-GTG.trna16</td><td>76</td><td>+</td><td>0.0000000000</td><td>0.2057971</td><td>4.753719e-04</td><td>6.281700e-04</td></tr>\n", + "\t<tr><td>Msm.Gly-GCC.trna43</td><td>76</td><td>+</td><td>0.0000000000</td><td>0.1743697</td><td>6.628529e-04</td><td>8.457088e-04</td></tr>\n", + "\t<tr><td>Msm.Ser-CGA.trna28</td><td>91</td><td>+</td><td>0.0000000000</td><td>0.1460452</td><td>3.061112e-03</td><td>3.775371e-03</td></tr>\n", + "\t<tr><td>Msm.Ser-GCT.trna26</td><td>92</td><td>+</td><td>0.0000000000</td><td>0.1203758</td><td>4.180587e-03</td><td>4.989733e-03</td></tr>\n", + "\t<tr><td>Msm.Glu-CTC.trna11</td><td>76</td><td>+</td><td>0.0000000000</td><td>0.1670179</td><td>4.339685e-03</td><td>5.017761e-03</td></tr>\n", + "\t<tr><td>Msm.Met-CAT.trna6 </td><td>77</td><td>+</td><td>0.0000000000</td><td>0.0000000</td><td>7.271370e-01</td><td>8.152748e-01</td></tr>\n", + "\t<tr><td>Msm.Met-CAT.trna8 </td><td>77</td><td>+</td><td>0.0000000000</td><td>0.0000000</td><td>7.798606e-01</td><td>8.179412e-01</td></tr>\n", + "\t<tr><td>Msm.Pro-TGG.trna36</td><td>77</td><td>+</td><td>0.0000000000</td><td>0.0000000</td><td>7.974767e-01</td><td>8.179412e-01</td></tr>\n", + "\t<tr><td>Msm.Ser-TGA.trna25</td><td>90</td><td>+</td><td>0.0000000000</td><td>0.0000000</td><td>8.042608e-01</td><td>8.179412e-01</td></tr>\n", + "\t<tr><td>Msm.Trp-CCA.trna7 </td><td>76</td><td>+</td><td>0.0000000000</td><td>0.0000000</td><td>8.179412e-01</td><td>8.179412e-01</td></tr>\n", + "</tbody>\n", + "</table>\n" + ], + "text/latex": [ + "A grouped\\_df: 37 × 7\n", + "\\begin{tabular}{lllllll}\n", + " rname & position & strand & ctrl & MenT1 & pval & fdr\\\\\n", + " <chr> & <dbl> & <fct> & <dbl> & <dbl> & <dbl> & <dbl>\\\\\n", + "\\hline\n", + "\t Msm.Gly-TCC.trna14 & 74 & + & 0.0047935237 & 0.4121249 & 3.894238e-15 & 1.440868e-13\\\\\n", + "\t Msm.Cys-GCA.trna44 & 74 & + & 0.0045857200 & 0.3814740 & 1.704723e-12 & 3.153737e-11\\\\\n", + "\t Msm.Arg-CCG.trna18 & 76 & + & 0.0021046082 & 0.3342759 & 2.702900e-11 & 3.333577e-10\\\\\n", + "\t Msm.Ala-GGC.trna9 & 76 & + & 0.0029792716 & 0.3242266 & 1.703489e-09 & 1.575728e-08\\\\\n", + "\t Msm.Arg-CCT.trna20 & 76 & + & 0.0010775862 & 0.2660812 & 1.381940e-08 & 1.022635e-07\\\\\n", + "\t Msm.Leu-CAA.trna42 & 77 & + & 0.0014649780 & 0.2633938 & 1.811690e-08 & 1.117209e-07\\\\\n", + "\t Msm.Leu-CAG.trna3 & 86 & + & 0.0013108723 & 0.2654050 & 4.124288e-08 & 2.179981e-07\\\\\n", + "\t Msm.Tyr-GTA.trna4 & 86 & + & 0.0000000000 & 0.2945736 & 6.516015e-08 & 3.013657e-07\\\\\n", + "\t Msm.Asp-GTC.trna31 & 77 & + & 0.0004306632 & 0.2499325 & 2.874203e-07 & 1.063455e-06\\\\\n", + "\t Msm.Leu-GAG.trna13 & 89 & + & 0.0030815038 & 0.2476372 & 2.787857e-07 & 1.063455e-06\\\\\n", + "\t Msm.Ala-TGC.trna2 & 76 & + & 0.0009541985 & 0.2262168 & 3.284763e-07 & 1.104875e-06\\\\\n", + "\t Msm.Ala-CGC.trna33 & 76 & + & 0.0040788518 & 0.3420117 & 7.213601e-07 & 2.224194e-06\\\\\n", + "\t Msm.SeC-TCA.trna46 & 95 & + & 0.0025380711 & 0.2319815 & 2.012279e-06 & 5.727255e-06\\\\\n", + "\t Msm.Thr-GGT.trna5 & 76 & + & 0.0009080530 & 0.2289079 & 4.550638e-06 & 1.202669e-05\\\\\n", + "\t Msm.Lys-CTT.trna17 & 76 & + & 0.0014266952 & 0.1817989 & 5.994505e-06 & 1.478645e-05\\\\\n", + "\t Msm.Pro-GGG.trna41 & 77 & + & 0.0026701323 & 0.2522951 & 8.585435e-06 & 1.985382e-05\\\\\n", + "\t Msm.Ser-GGA.trna24 & 89 & + & 0.0009742566 & 0.2550310 & 1.487132e-05 & 3.236698e-05\\\\\n", + "\t Msm.Pro-CGG.trna23 & 77 & + & 0.0007990889 & 0.1705532 & 2.085183e-05 & 4.060620e-05\\\\\n", + "\t Msm.Thr-TGT & 75 & + & 0.0000000000 & 0.2202381 & 2.059844e-05 & 4.060620e-05\\\\\n", + "\t Msm.Glu-TTC.trna30 & 76 & + & 0.0010031082 & 0.2062107 & 2.579545e-05 & 4.772159e-05\\\\\n", + "\t Msm.Asn-GTT.trna37 & 76 & + & 0.0009142021 & 0.1908207 & 6.217302e-05 & 1.072207e-04\\\\\n", + "\t Msm.Gln-CTG.trna10 & 75 & + & 0.0026154947 & 0.1644501 & 6.375287e-05 & 1.072207e-04\\\\\n", + "\t Msm.Ile-GAT.trna1 & 77 & + & 0.0010919056 & 0.1726496 & 1.143330e-04 & 1.839271e-04\\\\\n", + "\t Msm.Lys-TTT.trna21 & 76 & + & 0.0032751092 & 0.1698718 & 1.659308e-04 & 2.558100e-04\\\\\n", + "\t Msm.Thr-CGT.trna29 & 76 & + & 0.0016025641 & 0.1879300 & 2.265958e-04 & 3.353618e-04\\\\\n", + "\t Msm.Val-CAC.trna12 & 75 & + & 0.0015940489 & 0.1465079 & 2.459944e-04 & 3.500690e-04\\\\\n", + "\t Msm.Val-GAC.trna45 & 75 & + & 0.0010866031 & 0.1332009 & 2.814170e-04 & 3.856456e-04\\\\\n", + "\t Msm.His-GTG.trna16 & 76 & + & 0.0000000000 & 0.2057971 & 4.753719e-04 & 6.281700e-04\\\\\n", + "\t Msm.Gly-GCC.trna43 & 76 & + & 0.0000000000 & 0.1743697 & 6.628529e-04 & 8.457088e-04\\\\\n", + "\t Msm.Ser-CGA.trna28 & 91 & + & 0.0000000000 & 0.1460452 & 3.061112e-03 & 3.775371e-03\\\\\n", + "\t Msm.Ser-GCT.trna26 & 92 & + & 0.0000000000 & 0.1203758 & 4.180587e-03 & 4.989733e-03\\\\\n", + "\t Msm.Glu-CTC.trna11 & 76 & + & 0.0000000000 & 0.1670179 & 4.339685e-03 & 5.017761e-03\\\\\n", + "\t Msm.Met-CAT.trna6 & 77 & + & 0.0000000000 & 0.0000000 & 7.271370e-01 & 8.152748e-01\\\\\n", + "\t Msm.Met-CAT.trna8 & 77 & + & 0.0000000000 & 0.0000000 & 7.798606e-01 & 8.179412e-01\\\\\n", + "\t Msm.Pro-TGG.trna36 & 77 & + & 0.0000000000 & 0.0000000 & 7.974767e-01 & 8.179412e-01\\\\\n", + "\t Msm.Ser-TGA.trna25 & 90 & + & 0.0000000000 & 0.0000000 & 8.042608e-01 & 8.179412e-01\\\\\n", + "\t Msm.Trp-CCA.trna7 & 76 & + & 0.0000000000 & 0.0000000 & 8.179412e-01 & 8.179412e-01\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A grouped_df: 37 × 7\n", + "\n", + "| rname <chr> | position <dbl> | strand <fct> | ctrl <dbl> | MenT1 <dbl> | pval <dbl> | fdr <dbl> |\n", + "|---|---|---|---|---|---|---|\n", + "| Msm.Gly-TCC.trna14 | 74 | + | 0.0047935237 | 0.4121249 | 3.894238e-15 | 1.440868e-13 |\n", + "| Msm.Cys-GCA.trna44 | 74 | + | 0.0045857200 | 0.3814740 | 1.704723e-12 | 3.153737e-11 |\n", + "| Msm.Arg-CCG.trna18 | 76 | + | 0.0021046082 | 0.3342759 | 2.702900e-11 | 3.333577e-10 |\n", + "| Msm.Ala-GGC.trna9 | 76 | + | 0.0029792716 | 0.3242266 | 1.703489e-09 | 1.575728e-08 |\n", + "| Msm.Arg-CCT.trna20 | 76 | + | 0.0010775862 | 0.2660812 | 1.381940e-08 | 1.022635e-07 |\n", + "| Msm.Leu-CAA.trna42 | 77 | + | 0.0014649780 | 0.2633938 | 1.811690e-08 | 1.117209e-07 |\n", + "| Msm.Leu-CAG.trna3 | 86 | + | 0.0013108723 | 0.2654050 | 4.124288e-08 | 2.179981e-07 |\n", + "| Msm.Tyr-GTA.trna4 | 86 | + | 0.0000000000 | 0.2945736 | 6.516015e-08 | 3.013657e-07 |\n", + "| Msm.Asp-GTC.trna31 | 77 | + | 0.0004306632 | 0.2499325 | 2.874203e-07 | 1.063455e-06 |\n", + "| Msm.Leu-GAG.trna13 | 89 | + | 0.0030815038 | 0.2476372 | 2.787857e-07 | 1.063455e-06 |\n", + "| Msm.Ala-TGC.trna2 | 76 | + | 0.0009541985 | 0.2262168 | 3.284763e-07 | 1.104875e-06 |\n", + "| Msm.Ala-CGC.trna33 | 76 | + | 0.0040788518 | 0.3420117 | 7.213601e-07 | 2.224194e-06 |\n", + "| Msm.SeC-TCA.trna46 | 95 | + | 0.0025380711 | 0.2319815 | 2.012279e-06 | 5.727255e-06 |\n", + "| Msm.Thr-GGT.trna5 | 76 | + | 0.0009080530 | 0.2289079 | 4.550638e-06 | 1.202669e-05 |\n", + "| Msm.Lys-CTT.trna17 | 76 | + | 0.0014266952 | 0.1817989 | 5.994505e-06 | 1.478645e-05 |\n", + "| Msm.Pro-GGG.trna41 | 77 | + | 0.0026701323 | 0.2522951 | 8.585435e-06 | 1.985382e-05 |\n", + "| Msm.Ser-GGA.trna24 | 89 | + | 0.0009742566 | 0.2550310 | 1.487132e-05 | 3.236698e-05 |\n", + "| Msm.Pro-CGG.trna23 | 77 | + | 0.0007990889 | 0.1705532 | 2.085183e-05 | 4.060620e-05 |\n", + "| Msm.Thr-TGT | 75 | + | 0.0000000000 | 0.2202381 | 2.059844e-05 | 4.060620e-05 |\n", + "| Msm.Glu-TTC.trna30 | 76 | + | 0.0010031082 | 0.2062107 | 2.579545e-05 | 4.772159e-05 |\n", + "| Msm.Asn-GTT.trna37 | 76 | + | 0.0009142021 | 0.1908207 | 6.217302e-05 | 1.072207e-04 |\n", + "| Msm.Gln-CTG.trna10 | 75 | + | 0.0026154947 | 0.1644501 | 6.375287e-05 | 1.072207e-04 |\n", + "| Msm.Ile-GAT.trna1 | 77 | + | 0.0010919056 | 0.1726496 | 1.143330e-04 | 1.839271e-04 |\n", + "| Msm.Lys-TTT.trna21 | 76 | + | 0.0032751092 | 0.1698718 | 1.659308e-04 | 2.558100e-04 |\n", + "| Msm.Thr-CGT.trna29 | 76 | + | 0.0016025641 | 0.1879300 | 2.265958e-04 | 3.353618e-04 |\n", + "| Msm.Val-CAC.trna12 | 75 | + | 0.0015940489 | 0.1465079 | 2.459944e-04 | 3.500690e-04 |\n", + "| Msm.Val-GAC.trna45 | 75 | + | 0.0010866031 | 0.1332009 | 2.814170e-04 | 3.856456e-04 |\n", + "| Msm.His-GTG.trna16 | 76 | + | 0.0000000000 | 0.2057971 | 4.753719e-04 | 6.281700e-04 |\n", + "| Msm.Gly-GCC.trna43 | 76 | + | 0.0000000000 | 0.1743697 | 6.628529e-04 | 8.457088e-04 |\n", + "| Msm.Ser-CGA.trna28 | 91 | + | 0.0000000000 | 0.1460452 | 3.061112e-03 | 3.775371e-03 |\n", + "| Msm.Ser-GCT.trna26 | 92 | + | 0.0000000000 | 0.1203758 | 4.180587e-03 | 4.989733e-03 |\n", + "| Msm.Glu-CTC.trna11 | 76 | + | 0.0000000000 | 0.1670179 | 4.339685e-03 | 5.017761e-03 |\n", + "| Msm.Met-CAT.trna6 | 77 | + | 0.0000000000 | 0.0000000 | 7.271370e-01 | 8.152748e-01 |\n", + "| Msm.Met-CAT.trna8 | 77 | + | 0.0000000000 | 0.0000000 | 7.798606e-01 | 8.179412e-01 |\n", + "| Msm.Pro-TGG.trna36 | 77 | + | 0.0000000000 | 0.0000000 | 7.974767e-01 | 8.179412e-01 |\n", + "| Msm.Ser-TGA.trna25 | 90 | + | 0.0000000000 | 0.0000000 | 8.042608e-01 | 8.179412e-01 |\n", + "| Msm.Trp-CCA.trna7 | 76 | + | 0.0000000000 | 0.0000000 | 8.179412e-01 | 8.179412e-01 |\n", + "\n" + ], + "text/plain": [ + " rname position strand ctrl MenT1 pval fdr \n", + "1 Msm.Gly-TCC.trna14 74 + 0.0047935237 0.4121249 3.894238e-15 1.440868e-13\n", + "2 Msm.Cys-GCA.trna44 74 + 0.0045857200 0.3814740 1.704723e-12 3.153737e-11\n", + "3 Msm.Arg-CCG.trna18 76 + 0.0021046082 0.3342759 2.702900e-11 3.333577e-10\n", + "4 Msm.Ala-GGC.trna9 76 + 0.0029792716 0.3242266 1.703489e-09 1.575728e-08\n", + "5 Msm.Arg-CCT.trna20 76 + 0.0010775862 0.2660812 1.381940e-08 1.022635e-07\n", + "6 Msm.Leu-CAA.trna42 77 + 0.0014649780 0.2633938 1.811690e-08 1.117209e-07\n", + "7 Msm.Leu-CAG.trna3 86 + 0.0013108723 0.2654050 4.124288e-08 2.179981e-07\n", + "8 Msm.Tyr-GTA.trna4 86 + 0.0000000000 0.2945736 6.516015e-08 3.013657e-07\n", + "9 Msm.Asp-GTC.trna31 77 + 0.0004306632 0.2499325 2.874203e-07 1.063455e-06\n", + "10 Msm.Leu-GAG.trna13 89 + 0.0030815038 0.2476372 2.787857e-07 1.063455e-06\n", + "11 Msm.Ala-TGC.trna2 76 + 0.0009541985 0.2262168 3.284763e-07 1.104875e-06\n", + "12 Msm.Ala-CGC.trna33 76 + 0.0040788518 0.3420117 7.213601e-07 2.224194e-06\n", + "13 Msm.SeC-TCA.trna46 95 + 0.0025380711 0.2319815 2.012279e-06 5.727255e-06\n", + "14 Msm.Thr-GGT.trna5 76 + 0.0009080530 0.2289079 4.550638e-06 1.202669e-05\n", + "15 Msm.Lys-CTT.trna17 76 + 0.0014266952 0.1817989 5.994505e-06 1.478645e-05\n", + "16 Msm.Pro-GGG.trna41 77 + 0.0026701323 0.2522951 8.585435e-06 1.985382e-05\n", + "17 Msm.Ser-GGA.trna24 89 + 0.0009742566 0.2550310 1.487132e-05 3.236698e-05\n", + "18 Msm.Pro-CGG.trna23 77 + 0.0007990889 0.1705532 2.085183e-05 4.060620e-05\n", + "19 Msm.Thr-TGT 75 + 0.0000000000 0.2202381 2.059844e-05 4.060620e-05\n", + "20 Msm.Glu-TTC.trna30 76 + 0.0010031082 0.2062107 2.579545e-05 4.772159e-05\n", + "21 Msm.Asn-GTT.trna37 76 + 0.0009142021 0.1908207 6.217302e-05 1.072207e-04\n", + "22 Msm.Gln-CTG.trna10 75 + 0.0026154947 0.1644501 6.375287e-05 1.072207e-04\n", + "23 Msm.Ile-GAT.trna1 77 + 0.0010919056 0.1726496 1.143330e-04 1.839271e-04\n", + "24 Msm.Lys-TTT.trna21 76 + 0.0032751092 0.1698718 1.659308e-04 2.558100e-04\n", + "25 Msm.Thr-CGT.trna29 76 + 0.0016025641 0.1879300 2.265958e-04 3.353618e-04\n", + "26 Msm.Val-CAC.trna12 75 + 0.0015940489 0.1465079 2.459944e-04 3.500690e-04\n", + "27 Msm.Val-GAC.trna45 75 + 0.0010866031 0.1332009 2.814170e-04 3.856456e-04\n", + "28 Msm.His-GTG.trna16 76 + 0.0000000000 0.2057971 4.753719e-04 6.281700e-04\n", + "29 Msm.Gly-GCC.trna43 76 + 0.0000000000 0.1743697 6.628529e-04 8.457088e-04\n", + "30 Msm.Ser-CGA.trna28 91 + 0.0000000000 0.1460452 3.061112e-03 3.775371e-03\n", + "31 Msm.Ser-GCT.trna26 92 + 0.0000000000 0.1203758 4.180587e-03 4.989733e-03\n", + "32 Msm.Glu-CTC.trna11 76 + 0.0000000000 0.1670179 4.339685e-03 5.017761e-03\n", + "33 Msm.Met-CAT.trna6 77 + 0.0000000000 0.0000000 7.271370e-01 8.152748e-01\n", + "34 Msm.Met-CAT.trna8 77 + 0.0000000000 0.0000000 7.798606e-01 8.179412e-01\n", + "35 Msm.Pro-TGG.trna36 77 + 0.0000000000 0.0000000 7.974767e-01 8.179412e-01\n", + "36 Msm.Ser-TGA.trna25 90 + 0.0000000000 0.0000000 8.042608e-01 8.179412e-01\n", + "37 Msm.Trp-CCA.trna7 76 + 0.0000000000 0.0000000 8.179412e-01 8.179412e-01" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_prop <- EMOTE_differential_proportion(proportion_table,\n", + " design_matrix,\n", + " group1 = \"ctrl\",\n", + " group2 = \"MenT1\")\n", + "diff_prop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.3.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/emote-tk-shared-env-R4.3.2.txt b/src/emote-tk-shared-env-R4.3.2.txt new file mode 100644 index 0000000000000000000000000000000000000000..ac9bcffed1d92153f41603f1cc7e277724bd56f8 --- /dev/null +++ b/src/emote-tk-shared-env-R4.3.2.txt @@ -0,0 +1,11 @@ +r-base=4.3.2 +r-tidyverse=2.0.0 +r-dt=0.31 +bioconductor-biostrings=2.68.1 +bioconductor-rsubread=2.16.0 +bioconductor-rbowtie=1.42.0 +bioconductor-shortread=1.58.0 +bioconductor-rsamtools=2.16.0 +r-vgam=1.1_9 +bioconductor-survcomp=1.52.0 +bioconductor-dss=2.48.0 diff --git a/src/emote-tk.R b/src/emote-tk.R new file mode 100644 index 0000000000000000000000000000000000000000..6d800f405da7180e5429f9f1a2e6a3b45a9d92e9 --- /dev/null +++ b/src/emote-tk.R @@ -0,0 +1,1429 @@ +library(tidyverse) +library(parallel) +library(Rsamtools) +library(Rsubread) +library(Rbowtie) +library(ShortRead) +library(VGAM) +library(survcomp) +library(DSS) + + +# EMOTE_feature constructor +# Initialize the EMOTE_features object with the minimal feature "readseq" +#' @param start (integer) Relative start of the "readseq" feature +#' @param width (integer) Width of the "readseq" feature +#' @param pattern (character) Characters allowed in the "readseq" sequence +#' @param max_mismatch (integer) Number of max mismatch allowed in the readseq sequence +#' @param readid_prepend (logical) If TRUE the sequence of this feature will be put in the read id (in front of) +#' @param rf_file (character) Path of the EMOTE_feature csv if already built. +#' @return An EMOTE_feature object with 1 column which is the description of the read feature +#' @export +#' @import tidyverse +EMOTE_read_features = function(start, + width, + pattern = "ACTG", + rf_file = NA, + max_mismatch = 0) { + if(is.na(rf_file)){ + rf = tibble(name="readseq", + start = start, + width = width, + pattern_type = 1, + pattern = pattern, + max_mismatch = max_mismatch, + readid_prepend = FALSE) + } + else{ + rf = read_csv(rf_file) %>% mutate(pattern = str_split(pattern, ";")) + } + class(rf) = c("EMOTE_features", class(rf)) + return(rf) +} + +# Adding a feature to the EMOTE feature object +# This function add a feature to the EMOTE_feature object build with the EMOTE_read_features or the EMOTE_add_read_feature function. +#' @param rf EMOTE_feature object +#' @param name (character) Name of the feature +#' @param start (integer) Relative start of the feature +#' @param width (integer) Width of the feature +#' @param pattern (character) Characters allowed in the feature sequence +#' @param pattern_type (integer) Type of the pattern given (1 or 2 allowed) +#' @param max_mismatch (integer) Number of max mismatch allowed in the feature sequence +#' @param readid_prepend (logical) If TRUE the sequence of this feature will be put in the read id (in front of) +#' @return The given EMOTE_feature object with the added feature +#' @export +#' @import tidyverse +EMOTE_add_read_feature = function(rf, + name, + start, + width, + pattern, + pattern_type = 2, + max_mismatch = 0, + readid_prepend = FALSE) { + + if(!is.null(rf[rf$name==name,])){rf = rf[rf$name!=name,]} # Delete features if already exists + rf = rbind(rf, tibble(name = name, + start = start, + width = width, + pattern_type = pattern_type, + pattern = list(pattern), + max_mismatch = max_mismatch, + readid_prepend = readid_prepend) ) %>% + mutate(pattern_type = ifelse(name=="barcode", 2, pattern_type), + max_mismatch = ifelse(name=="barcode", 0, max_mismatch) ) + return(rf) +} + +# Demultiplex a EMOTE FASTQ file according to barcode sequence reads provides through an EMOTE_features object +# This function parse each read to retrieve features in the sequence and test their validity. +# Valid are write in separated files (fastq_file.barcode.fastq.gz) and if keep_invalid_reads = TRUE, invalid reads are write in fastq_file.invalid.fastq.gz +# It also write a feature report which contains features given in the features parameter and a demultiplex report which contains number of valid features for each barcode. +#' @param fastq_file (character) Path of the FASTQ file (eventually gzipped) containing single-end EMOTE reads +#' @param features EMOTE_feature object +#' @param out_dir (character) Path of the output directory where the demultiplexed FASTQ files will be stored +#' @param keep_invalid_reads (logical) If TRUE invalid reads will be kept in a dedicated file +#' @param force (logical) If TRUE recursively remove the content of out_dir before running instead of stopping the function with an error message +#' @param yieldsize (integer) Number of read to process per iteration +#' @return A tibble with demultiplexing statistics +#' @export +#' @importFrom ShortRead FastqStreamer +#' @import tidyverse +#' @import Biostrings +#' @import EMOTE_parse_reads +EMOTE_demultiplex = function(fastq_file, + features, + out_dir = NULL, + keep_invalid_reads = FALSE, + force = FALSE, + yieldsize = 1e6, + min_read_length = 12, + write_read_parsing_tb = FALSE){ + + # Test if demux report already exists + fq_basename = sub("(.fastq|.fq)(.gz)?$", "", basename(fastq_file)) + if(is.null(out_dir)){ + out_dir = paste0(sub("(.fastq|.fq)(.gz)?$", "", fastq_file),"_demux") + } + parse_report = paste0(out_dir,"/",fq_basename,"_parse_report.csv") + if(file.exists(parse_report) && !force){ + message(paste0("Demux report already exists set force=T to overwrite: ", parse_report)) + return(read_csv(parse_report, show_col_types = FALSE)) + } + # Test features + if(features$name %>% str_detect(pattern = "readseq") %>% sum !=1){ + return("You must have at least and only one feature named 'readseq'") + } + if(nrow(features[features$name=="barcode",])!=1){ + return("You need to have 1 and only 1 feature named 'barcode'") + } + # Create out_dir + dir.create(out_dir, showWarnings = FALSE) + # Write features + features %>% + rowwise() %>% + mutate(pattern=paste(unlist(pattern), collapse = ';')) %>% + write_csv(paste0(out_dir, "/", fq_basename, "_features.csv") ) + # Get valid barcode to create demux out file + valid_barcodes = features[features$name=="barcode",]$pattern %>% + unlist() %>% + sort() %>% + as.factor + # Deleted pre-exinsting out_file + filenames_out_valid_demux = paste0(out_dir, "/", fq_basename,"_",valid_barcodes, "_valid.fastq.gz") + unlink(filenames_out_valid_demux) + if(keep_invalid_reads){ + filename_out_invalid_demux = paste0(out_dir, "/", fq_basename,"_invalid.fastq.gz") + unlink(filename_out_invalid_demux) + } + if(write_read_parsing_tb){ + filename_read_parsing_tb = paste0(out_dir,"/",fq_basename,"_read_parsing.csv.gz") + unlink(filename_read_parsing_tb) + } + # Initialize stat_tb + stat_tb = tibble() + # Initilialize a streamer on the input file + fq_streamer = FastqStreamer(fastq_file, yieldsize) + while (length(sr <- yield(fq_streamer))) { + #sr = softTrim(reads = sr, minQuality = 5) + # Parsed read to retrieve all features and test their validity + X = .EMOTE_parse_yield(yield = sr, features = features, min_read_length) + # Trim read to keep only the mappable part + sr = .EMOTE_trim_yield(yield = sr, features = features, read_parsed = X) + # Update parse report + stat = X %>% mutate(barcode_group = ifelse(is_valid_barcode, barcode, "INVALID")) %>% + select(contains("is_valid"), barcode_group) %>% + aggregate(. ~barcode_group, sum) + stat_tb <- aggregate(. ~ barcode_group, rbind(stat_tb, stat), sum) + # Split sr by global validity + X = X %>% mutate(barcode_group = ifelse(is_valid, barcode, "INVALID")) + fq_sr_out = split(sr, X$barcode_group) + fq_sr_out_invalid = fq_sr_out$INVALID + if(!is.null(fq_sr_out_invalid)){ + fq_sr_out_valid = fq_sr_out[-grep("INVALID", names(fq_sr_out))] + } + else{fq_sr_out_valid = fq_sr_out} + filenames_out_valid_demux = paste0(out_dir, "/", fq_basename,"_", names(fq_sr_out_valid), "_valid.fastq.gz") + # Write if there is read to write + if(!is.null(fq_sr_out_valid)){ + mapply(writeFastq, fq_sr_out_valid, filenames_out_valid_demux, MoreArgs = list(compress = TRUE, mode = "a")) + } + if(keep_invalid_reads & !is.null(fq_sr_out_invalid)){ + writeFastq(fq_sr_out_invalid, filename_out_invalid_demux, compress = TRUE, mode = "a") + } + # Write X if write_read_parsing_tb = TRUE + if(write_read_parsing_tb){ + write_csv(X, gzfile(filename_read_parsing_tb), append = TRUE, col_names = TRUE) + } + } + close(fq_streamer) + # Write parse report + stat_tb = stat_tb %>% + mutate(pc_valid = ifelse(barcode_group !="INVALID", is_valid/is_valid_barcode, 0) ) %>% + mutate(demux_filename = + ifelse(barcode_group!="INVALID", + paste0(out_dir, "/", fq_basename,"_", barcode_group, "_valid.fastq.gz"), + paste0(out_dir, "/", fq_basename,"_invalid.fastq.gz")) ) + write_csv(stat_tb, file = parse_report) +return(stat_tb) + +} + +# This function parse each read to retrieve features in the sequence and test their validity. +# Valid reads are write dedicated file and if keep_invalid_reads = TRUE, invalid reads are write in fastq_file.invalid.fastq.gz +# It also write a feature report which contains features given in the features parameter and a parsing report which contains number of read with valid features. +#' @param fastq_file (character) Path of the FASTQ file (eventually gzipped) containing single-end EMOTE reads +#' @param features EMOTE_feature object +#' @param out_dir (character) Path of the output directory where the demultiplexed FASTQ files will be stored +#' @param keep_invalid_reads (logical) If TRUE invalid reads will be kept in a dedicated file +#' @param force (logical) If TRUE recursively remove the content of out_dir before running instead of stopping the function with an error message +#' @param min_read_length (integer) Minimal reads width +#' @param yieldsize (integer) Number of read to process per iteration +#' @param write_read_parsing_tb (logical) +#' @return A tibble with parsing statistics +#' @export +#' @importFrom ShortRead FastqStreamer +#' @import tidyverse +#' @import Biostrings +EMOTE_parse_read = function(fastq_file, + features, + out_dir = NULL, + keep_invalid_reads = FALSE, + force = FALSE, + min_read_length = 18, + yieldsize = 1e6, + write_read_parsing_tb = FALSE){ + + # Test if demux report already exists + fq_basename = sub("(.fastq|.fq)(.gz)?$", "", basename(fastq_file)) + if(is.null(out_dir)){ + out_dir = paste0(sub("(.fastq|.fq)(.gz)?$", "", fastq_file),"_demux") + } + parse_report = paste0(out_dir,"/",fq_basename,"_parse_report.csv") + if(file.exists(parse_report) && !force){ + message(paste0("Demux report already exists set force=T to overwrite: ", parse_report)) + return(read_csv(parse_report, show_col_types = FALSE)) + } + # Test features + if(features$name %>% str_detect(pattern = "readseq") %>% sum !=1){ + return("You must have at least and only one feature named 'readseq'") + } + # Create out_dir + dir.create(out_dir, showWarnings = FALSE) + # Write features + features %>% + rowwise() %>% + mutate(pattern=paste(unlist(pattern), collapse = ';')) %>% + write_csv(paste0(out_dir, "/", fq_basename, "_features.csv") ) + # Split features into 2 groups + # Deleted pre-exinsting out_file + filename_out_valid = paste0(out_dir, "/", fq_basename, "_valid.fastq.gz") + unlink(filename_out_valid) + if(keep_invalid_reads){ + filename_out_invalid = paste0(out_dir, "/", fq_basename, "_invalid.fastq.gz") + unlink(filename_out_invalid) } + if(write_read_parsing_tb){ + filename_read_parsing_tb = paste0(out_dir,"/",fq_basename,"_read_parsing.csv.gz") + unlink(filename_read_parsing_tb) + } + # Initialize stat_tb + stat_tb = tibble() + # Initilialize a streamer on the input file + fq_streamer = FastqStreamer(fastq_file, yieldsize) + while (length(sr <- yield(fq_streamer))) { + #sr = softTrim(reads = sr, minQuality = 5) + # Parsed read to retrieve all features and test their validity + X = .EMOTE_parse_yield(yield = sr, features = features, min_read_length) + # Trim read to keep only the mappable part + sr = .EMOTE_trim_yield(yield = sr, features = features, read_parsed = X) + # Update parse report + tot_read = X %>% mutate(group = ifelse(is_valid, "VALID", "INVALID")) %>% + group_by(group) %>% summarise(total_read = n()) + stat = X %>% mutate(group = ifelse(is_valid, "VALID", "INVALID")) %>% + select(contains("is_valid_"), group) %>% + aggregate(. ~group, sum) %>% + inner_join(tot_read, by = "group") + stat_tb <- aggregate(. ~ group, rbind(stat_tb, stat), sum) + # Split sr by global validity + X = X %>% mutate(group = ifelse(is_valid==TRUE, "valid", "invalid")) + fq_sr_out = split(sr, X$group) + fq_sr_out_valid = fq_sr_out$valid + filename_out_valid = paste0(out_dir, "/", fq_basename, "_valid.fastq.gz") + # Write if there is read to write + if(!is.null(fq_sr_out_valid)){ + writeFastq(fq_sr_out_valid, file = filename_out_valid, compress = TRUE, mode = "a") + } + if(keep_invalid_reads & !is.null(fq_sr_out$invalid)){ + writeFastq(fq_sr_out$invalid, filename_out_invalid, compress = TRUE, mode = "a") + } + # Write X if write_read_parsing_tb = TRUE + if(write_read_parsing_tb){ + write_csv(X, gzfile(filename_read_parsing_tb), append = TRUE, col_names = TRUE) + } + } + close(fq_streamer) + # Write parse report + stat_tb = mutate(stat_tb, pc_valid = is_valid/total_read) %>% + mutate(demux_filename = paste0(out_dir, "/", fq_basename,"_", tolower(group), ".fastq.gz")) + if(stat_tb[stat_tb$group=="VALID",]$pc_valid == 0){ + warning("There is no valid reads, check your EMOTE_read_features to ensure it is correct (an empty file was created anyway)") + } + if(stat_tb[stat_tb$group=="VALID",]$pc_valid == 1){ + message("There is no invalid reads, an empty file was created anyway") + } + write_csv(stat_tb, file = parse_report) +return(stat_tb)} + +.EMOTE_parse_yield = function(yield, features, min_read_length){ + features_removal = filter(features, pattern_type==3) + features = filter(features, pattern_type!=3) + X = tibble(.rows = length(yield)) + is_valid_X = tibble(.rows = length(yield)) + + for(i in 1:nrow(features)){ + # Retrieve the feature sequence + feat = narrow(sread(yield), + start = as.numeric(features[i,]$start), + width = as.numeric(features[i,]$width) ) %>% + as.character() + X[,i] = feat + # Test feature validity + ## For feature type 2 + if(features[i,]$pattern_type==2) { + is_valid_X[,i] = + if(features[i,]$max_mismatch!=0) { + sapply(unlist(features[i,]$pattern), + function (x) + vcountPattern(x, feat, max.mismatch = features[i,]$max_mismatch ) ) %>% rowSums() > 0 + } + else {feat %in% unlist(features[i,]$pattern)} + } + ## For feature type 1 + if(features[i,]$pattern_type==1) { + is_valid_X[,i] = abs(letterFrequency(DNAStringSet(feat), unlist(features[i,]$pattern) ) - width(feat) ) <= features[i,]$max_mismatch + } + } + # Build stat tibble + X = cbind(X, is_valid_X) + colnames(X) = c(features$name,paste0("is_valid_", features$name)) + # PolyA removal + if(nrow(features_removal)>0){ + for(i in 1:nrow(features_removal)){ + loc_pat = str_locate(X$readseq, pattern = unlist(features_removal[i,]$pattern)) %>% + as_tibble() %>% + mutate(start = ifelse(is.na(start), features[features$name=="readseq", ]$width + 1 , start)) + X$readseq = str_sub(X$readseq, 1, loc_pat$start - 1) + X = mutate(X, is_valid_readseq = ifelse(nchar(readseq)>=min_read_length, is_valid_readseq, FALSE)) + } + } + # Compute some stat to reduce the size of X + X$is_valid = X %>% select(contains("is_valid")) %>% rowSums == nrow(features) + return(X) +} + +.EMOTE_trim_yield = function(yield, features, read_parsed){ + yield = yield %>% + narrow(start = str_locate(as.character(yield@sread), pattern = read_parsed$readseq)[,"start"], + end = str_locate(as.character(yield@sread), pattern = read_parsed$readseq)[,"end"]) + # Add feature prepend to ID + to_id = read_parsed %>% + select(features[features$readid_prepend==TRUE,]$name) %>% + as.vector + if(length(to_id)>0){ + to_id = Reduce(function(x, y) paste(x, y, sep = ";"), to_id) + yield@id = BStringSet(paste0(to_id, ":", yield@id)) + } + return(yield) +} + +# Map a fastq file using either bowtie or subread method +# The function takes a fastq file and a genome fasta file. A index is created if not existing, reads are mapped on the given reference genome. +# Results are returned as a bam file +#' @param fastq_file (character) Path of the FASTQ file (eventually gzipped) containing single-end EMOTE reads +#' @param fasta_name (character) Path of the FASTA genome reference file +#' @param index_name (character) Name of the index (index will be created if not exist) +#' @param max_map_mismatch a int corresponding to the number of allowed mismatch +#' @param bam_dir (character) Path of the output directory +#' @param aligner (character) Mapping aligner (either "bowtie" or "subread") +#' @param threads (integer) Number of threads used +#' @param force (logical) If TRUE overwrite already existing bam file +#' @return (character) path of bam file created +#' @export +#' @import Rsubread +#' @import Rbowtie +#' @import Rsamtools +EMOTE_map_fastq = function(fastq_file, + fasta_name, + index_name, + max_map_mismatch = 0, + bam_dir = "", + aligner = "bowtie", + threads = 3, + map_unique = TRUE, + force = FALSE) { + + # Create bam directory (if no dir name, dir name = parameters) + if(bam_dir==""){ + bam_dir = paste0(dirname(fastq_file), + "/", + basename(fastq_file), + "_", + basename(fasta_name), + "_mm", + max_map_mismatch, + "_", + aligner) + } + dir.create(bam_dir, showWarnings=FALSE) + bam_file = paste0(bam_dir , "/", basename(fastq_file), ".bam") + + if(file.exists(bam_file) && !force) { + message(paste0("bam_file '", + bam_file, + "' already exists, set force=TRUE to recompute") ) + return(bam_file) + } + + # Mapping with either bowtier or subread + if(aligner == "bowtie"){ + # Index creation or retrieval + if(!dir.exists(index_name)){ + bowtie_build(references=fasta_name, outdir=file.path(index_name)) + } + else{ + warning("Index directory already exists remove it if you want to recreate it") + } + + fastq_file = as.character(fastq_file) + sam_file = tempfile(fileext = ".sam", tmpdir = bam_dir) + # Mapping + do.call(bowtie,c(list( + sam = TRUE, + sequences = fastq_file, + index = paste0(index_name, "/index"), + outfile = sam_file, + threads = threads, + v = max_map_mismatch), + list(m = 1)[map_unique] ) ) + # Convert sam to bam + asBam(sam_file, + str_remove(bam_file, pattern=".bam"), + indexDestination = TRUE, + overwrite = TRUE) # mandatory for indexing and have real bamfile + unlink(sam_file) + } + else if (aligner == "subread"){ + # Index constructor or retrieval + if(!dir.exists(index_name)){ + dir.create(index_name, showWarnings=FALSE) + buildindex(basename = paste0(index_name, "/index"), + reference = fasta_name) + } + else{print("Index directory already exists remove it if you want to recreate it")} + align(index = paste0(index_name,"/index"), + readfile1 = fastq_file, + unique = map_unique, + output_format = "BAM", + type = "dna", + output_file = bam_file, + nthreads = threads, + maxMismatches = max_map_mismatch, + indels = 0, + sortReadsByCoordinates = TRUE) + } + else{return("Please set either bowtie or subread")} + return(bam_file) +} + +# Wrapper of the EMOTE_map_fastq_file function which allow the mapping of multiples fastq files +# The function takes a vector of fastq file paths and others EMOTE_map_fastq parameters. +# All parameters can be replaced by a "mapping table" which is a tibble where each column correspond to a parameters of the EMOTE_map_fastq function. +# Useful for mapping multiple fastq file with different mapping parameters +#' @param list_fastq_files (character) or (vector of character) Path of the FASTQ file (eventually gzipped) containing single-end EMOTE reads +#' @param mapping_tb (tibble) where colnames = parameters of the EMOTE_map_fastq_file function +#' @param cores (integer) Number of cores used in the mclappy function +#' @param fasta_name (character) Path of the FASTA genome reference file +#' @param index_name (character) Name of the index (index will be created if not exist) +#' @param max_map_mismatch a int corresponding to the number of allowed mismatch +#' @param bam_dir (character) Path of the output directory +#' @param aligner (character) Mapping aligner (either "bowtie" or "subread") +#' @param threads (integer) Number of threads used +#' @param force (logical) If TRUE overwrite already existing bam file +#' @return (character) bam file created +#' @export +#' @import EMOTE_map_fastq +EMOTE_map_fastq_files = function(list_fastq_files, + fasta_name, + index_name, + max_map_mismatch = 0, + bam_dir = "", + aligner = "bowtie", + threads = 3, + map_unique = TRUE, + force = FALSE, + mapping_tb = NULL, + cores = 1){ + + if(aligner == "bowtie"){ + # Index creation or retrieval + if(!dir.exists(index_name)){ + bowtie_build(references=fasta_name, outdir=file.path(index_name)) + } + if(aligner =="subread") + if(!dir.exists(index_name)){ + dir.create(index_name, showWarnings=FALSE) + buildindex(basename = paste0(index_name, "/index"), + reference = fasta_name) + } + } + if(!is.null(mapping_tb)){ + mclapply( + 1:nrow(mapping_tb), + function(x) + EMOTE_map_fastq(fastq_file = mapping_tb[x,]$fastq_file, + fasta_name = mapping_tb[x,]$fasta_name, + index_name = mapping_tb[x,]$index_name, + max_map_mismatch = mapping_tb[x,]$max_map_mismatch, + bam_dir = mapping_tb[x,]$bam_dir, + aligner = mapping_tb[x,]$aligner, + threads = mapping_tb[x,]$threads, + map_unique = mapping_tb[x,]$map_unique, + force = mapping_tb[x,]$force), + mc.cores = cores ) + } + else{ + mclapply( + list_fastq_files, + function(x) + EMOTE_map_fastq(fastq_file = x, + fasta_name = fasta_name, + index_name = index_name, + max_map_mismatch = max_map_mismatch, + bam_dir = bam_dir, + aligner = aligner, + threads = threads, + map_unique = map_unique, + force = force), + mc.cores = cores) + } +} + +# Mapping stat +# This function parse a given bam.files and fastq_files and return mapping stats such reads mapped +#' @param bam_dir (character) Path of the bam file +#' @return (tibble) with mapping stat +#' @export +#' @import Rsamtools +#' @import tidyverse +#' @import parralele +EMOTE_map_stats_bam_files = function(bam_files, cores = 1){ + stat = mclapply(bam_files, function(x) EMOTE_map_stats(bam_file = x), + mc.cores = cores) %>% + bind_rows() + + return(stat) +} + +# Mapping stat +# This function parse a given bam.files and fastq_files and return mapping stats such reads mapped +#' @param bam_dir (character) Path of the bam file +#' @return (tibble) with mapping stat +#' @export +#' @import Rsamtools +#' @import tidyverse +#' @import parralele +EMOTE_map_stats = function(bam_file){ + alns = scanBam( + bam_file, + param = ScanBamParam( + scanBamFlag(isUnmappedQuery = NA), + what = c("qname", "flag", "pos") ) ) + tb = tibble(bam_file = basename(bam_file), + qname = alns[[1]]$qname, + position = alns[[1]]$pos, + flag = alns[[1]]$flag ) %>% + mutate(flag = ifelse(flag==4,"unmapped","mapped")) %>% + group_by(bam_file, flag) %>% summarise(counts = n(), .groups = "drop") %>% + pivot_wider(id_cols = bam_file, names_from = flag, values_from = counts) %>% + mutate(pc_mapped = mapped/(mapped+unmapped)) + return(tb) + } + +# Bam file parser +# This function parse a given bam file and return different mapping informations in a tibble +#' @param bam_file (character) Path of the bam file +#' @param UMI_length (integer) Width of the UMI (if UMIs have not been put in the qname let this value default) +#' @return (tibble) with mapping informations +#' @export +#' @import Rsamtools +EMOTE_load_bam_as_tibble = function(bam_file, features=NULL) { + + is_there_UMI = FALSE + UMI_loc_in_readid = 0 + UMI_width = 1 + # Retrieve UMI position in the readID (if it has been put in it) + if(!is.null(features)){ + is_there_UMI = nrow(features[features$name=="UMI",])>0 + if(is_there_UMI){ + UMI_width = features[features$name=="UMI",]$width + prep = features[features$readid_prepend==TRUE,] + UMI_index = which(prep$name=="UMI") + UMI_loc_in_readid = ifelse(UMI_index!=1, + sum(prep[1:(UMI_index-1),]$width+1) + 1, + 1) # Because of the ; added + } + } + alns = scanBam( + bam_file, + param = ScanBamParam( + scanBamFlag(isUnmappedQuery = FALSE), + what = c("rname", "qname", "pos", "strand","qwidth", "cigar", "seq") ) ) + tibble(rname = as.factor(alns[[1]]$rname), + qname = as.factor(alns[[1]]$qname), + UMI = as.factor(str_sub(alns[[1]]$qname, UMI_loc_in_readid, UMI_loc_in_readid+UMI_width-1)), + position = alns[[1]]$pos, + strand = as.factor(droplevels(alns[[1]]$strand, "*")), + width = alns[[1]]$qwidth, + seq = as.factor(as.character(alns[[1]]$seq)), + cigar = as.factor(alns[[1]]$cigar)) +} + +.parse_cigar_for_strand = function(alns, chr_strand, regexp, into) + alns %>% + filter(strand==chr_strand) %>% + extract(col = cigar, + regex = regexp, + into = into, + remove = FALSE, + convert = TRUE + ) + +# Parse mapping information retrieve by EMOTE_load_bam_as_tibble +# This function parse the output of EMOTE_load_bam_as_tibble and count the number of reads mapped at each exact genomic position +# Output formats are different in function of the presence of not of UMI and the will of keeping them or not +#' @param alns (tibble) Mapping table returned by EMOTE_load_bam_as_tibble +#' @param UMI_length (integer) Width of the UMI (if UMIs have not been put in the qname let this value default) +#' @param keep_UMI (logical) If TRUE the result tibble will display the count value for each UMI at each exact position +#' @return (tibble) count table +#' @export +#' @import tidyverse +EMOTE_summarise_alignements = function(alns, + UMI_length, + keep_UMI) { + # summarise to counts + if (UMI_length>0 && keep_UMI) { # regroup by UMI (uncompacted format) + counts = alns %>% + group_by_all() %>% # (rname, position, strand, UMI) + summarise(count=n(), .groups="drop") %>% + arrange(rname, position, strand, UMI) + } else if (UMI_length>0) { # regroup by UMI then count UMI (compacted format) + counts = alns %>% + group_by_all() %>% + summarise(umi=n(), .groups="drop") %>% + group_by(across(c(-UMI, -umi))) %>% + summarise(reads = sum(umi), count = n(), .groups="drop") %>% + arrange(rname, position, strand) + } else { # count reads as UMI_length=0 + counts = alns %>% + group_by(across(c(-UMI))) %>% + summarise(count = n(), .groups="drop") %>% + arrange(rname, position, strand) + } + return (counts) +} + + +# Function used to quantify the exact 5'-ends of mapped reads +# Caller of EMOTE_load_bam_as_tibble and EMOTE_summarise_alignements +# This function take a bam_file and return a count table with the chosen format. +#' @param bam_files (character) Path of the bam file containing single-end EMOTE reads mapped +#' @param UMI_length (integer) Width of UMI, default is 0 (if 0 the read id qname will be return) +#' @param keep_UMI (logical) If FALSE the count value corresponds to the number fo different UMI at an exact position +#' @return a tibble with quantification of the reads in the given bam files, by exact position (and by UMI if UMI_length>0) +#' @export +#' @import Rsamtools +#' @import tidyverse +EMOTE_quantify_5prime = function(bam_file, + features=NULL, + keep_UMI = FALSE){ + # LOAD alignments from BAM file + alns = EMOTE_load_bam_as_tibble(bam_file, features) + # Modify the position for strand - + alns = alns %>% + mutate(position = ifelse(strand== "-", + position + width-1, + position)) %>% + select(-qname, -width, -seq, -cigar) + if(!is.null(features) && nrow(features[features$name=="UMI",])>0){ + UMI_length = features[features$name=="UMI",]$width + } + else {UMI_length=0} + counts = EMOTE_summarise_alignements(alns, UMI_length, keep_UMI) + return(counts) +} + + +EMOTE_quantify_3prime = function( + bam_file, + features = NULL, + keep_UMI = FALSE, + min_mapped_length = NA, + rev_comp_reads = FALSE + ){ + # LOAD alignments from BAM file + alns = EMOTE_load_bam_as_tibble(bam_file, features) + # if reads contains the reverse complement of RNAs + if (rev_comp_reads) { + alns = alns %>% mutate(strand=as.factor(ifelse(strand=='+', '-', '+'))) + } + # with min_mapped_length=NA match should be 100% identical: easy case + if (is.na(min_mapped_length)) { + alns = alns %>% + filter(str_detect(cigar, "^\\d+M$")) %>% + mutate(position = ifelse(strand=="+", position + width - 1, position)) %>% + select(-qname, -seq, -cigar, -width) + } + # count table should contain the RNA sequence after the last 3'-end mapped nucleotide + # break up cigar code depending on strand + else { + alns_direct = alns %>% + .parse_cigar_for_strand('+', "(\\d+)M(\\d+S)?$", c("matches", "mismatches_code")) # ensure we have the very last mapped region + alns_complement = alns %>% + .parse_cigar_for_strand('-', "^(\\d+S)?(\\d+)M", c("mismatches_code", "matches")) # ensure we have the very 1st mapped region + alns = rbind(alns_direct, alns_complement) %>% + filter(matches >= min_mapped_length) %>% # filter minimum alignment length + mutate(mismatches = as.integer(str_extract(mismatches_code, "\\d+"))) %>% # then extract S length + replace_na(list(mismatches=0)) %>% + mutate(position = ifelse(strand=='+', + position + width - 1 - mismatches, + position + mismatches), + downstream_seq = as.factor(ifelse(strand=='+', + str_sub(seq, width - mismatches +1), + as.character(reverseComplement(DNAStringSet(str_sub(seq, 1, mismatches)))))) + ) %>% + select(-qname, -width, -seq, -cigar, -matches, -mismatches_code, -mismatches) + } + if(!is.null(features) && nrow(features[features$name=="UMI",])>0){ + UMI_length = features[features$name=="UMI",]$width + } + else {UMI_length=0} + counts = EMOTE_summarise_alignements(alns, UMI_length, keep_UMI) + return (counts) +} + +# Wrapper of EMOTE_quantify_5prime and EMOTE_quantify_3prime quantification functions. +# This function takes a vector of bam files and call the "fun" quantification function. +# It allow the parralelization through the "cores" parameters +#' @param bam_files (vector of characters) Path of the bam files containing single-end EMOTE reads mapped +#' @param barcodes (vector of characters) corresponding to a string for identifying the source of reads +#' @param fun (character) The quantification method used (EMOTE_quantify_3prime or EMOTE_quantify_5prime) +#' @param cores (integer) Number of cores +#' @param ... parameters to give to the "fun" function +#' @return a tibble with quantification of the reads in the given bam files, by exact position (and by UMI if UMI_length>0) +#' @export +#' @import Rsamtools +#' @import tidyverse +#' @import parallel +EMOTE_quantify_from_bam_files = function(bam_files, + barcodes, + fun, + cores=1, + ...) { + # list_q = sapply(bam_files, fun, simplify = TRUE, USE.NAMES = TRUE, ...) + list_q = mclapply(bam_files, fun, mc.cores=cores, ...) + # add barcodes + names(list_q) = barcodes + return(bind_rows(list_q, .id="barcode") %>% mutate(barcode = as.factor(barcode))) +} + + +# This function calcul an observed frequency for each UMI +#' @param count_table (tibble) Quantifcation table +#' @param UMI_chars (character) Expected characters in UMI +#' @param UMI_length (integer) Length of UMI +#' @param unseen_base (integer) Count value set to UMI not present in unsaturated_position +#' @return a tibble with the observed frequency and count for each possible UMI +#' @export +#' @import tidyverse +EMOTE_UMI_frequence = function(count_table, + UMI_chars = "ACTG", + UMI_length = 7, + unseen_base = 0){ + # Select non duplicated and non saturated positions + unsaturated_position = count_table %>% + group_by(position,strand,barcode) %>% + summarise(UM=n(), + reads=sum(count), + .groups = "keep") %>% + filter(reads==UM) %>% + select(position,strand,barcode) + + # Retrieve corresponding UMI + UMI_bg_freq = count_table %>% + inner_join(unsaturated_position, + by = c("position","strand","barcode")) %>% + group_by(UMI) %>% + summarise(n = n(), .groups = "keep") + # Add missing UMI + UMIs_all = data.frame(UMI=do.call(paste0, + expand.grid(rep(str_split(UMI_chars,''), + UMI_length)) ) + ) %>% + left_join(UMI_bg_freq, by = "UMI") %>% + mutate(n = ifelse(is.na(n), unseen_base, n)) %>% + mutate(freq=n/sum(n)) + + return(UMIs_all) +} + + +# Remove PCR duplicate reads taking into account the observed frequency of each UMI (**to add later** uniform distribution of UMI) +# Note that the input count_table needs to be in the format keep_UMI=TRUE +# We recommand to check if UMI are long enought to avoid the saturation before using this function +#' @param count_table (tibble) Count table +#' @param alpha (double) Confidence level of the binomial test (set higher will increase the value of UMI_desat) +#' @param threshold (integer) Minimum reads on a position to desature +#' @param UMI_chars (character) Expected characters in UMI +#' @param UMI_length (integer) Length of UMI +#' @return (tibble) Count table with the number of unique molecule for each position,strand,barcode +#' @export +#' @import tidyverse +EMOTE_desat_count_table = function(count_table, + alpha = 0.95, + threshold = 50, + UMI_chars = "ACTG") { + # Calcul the frequency of UMI + UMI_length = unique(width(count_table$UMI)) + UMI_bg_freq = EMOTE_UMI_frequence(count_table = count_table, + UMI_chars = UMI_chars, + UMI_length = UMI_length, + unseen_base = 1) + # Format the quantif table and filter reads to desaturate + desat_table = count_table %>% + inner_join(UMI_bg_freq, by = "UMI") %>% + group_by(position, strand, barcode) %>% + mutate(reads = sum(count)) %>% + filter(reads > threshold) + # Desaturate + desat_table2 = EMOTE_desat_binom(desat_table, 0.95) + # Format tibble + ## Retrieve inital reads count values + compact_desat_table = + desat_table %>% + select(position, strand, barcode, reads) %>% + unique + ## Retrieve UMI_desat values + compact_desat_table2 = + desat_table2 %>% + group_by(rname, position, strand, barcode) %>% + summarise(count = sum(UMI_desat), .groups = "keep") %>% + inner_join(compact_desat_table, + by = c("position", "strand", "barcode") ) + ## Add non saturated position + compact_count_table = count_table %>% + group_by(rname, position, strand, barcode) %>% + summarise(reads = sum(count), + count = n(), + .groups = "keep" ) + # Merge all + full_desat_table = + anti_join(compact_count_table, + compact_desat_table2, + by = c("rname", "position", "barcode", "strand")) %>% + rbind(compact_desat_table2) %>% + arrange(position) + + return(full_desat_table) +} + +# Desaturate a joined Count table and UMI frequency table +# This function will be use in the EMOTE_desat_barcode_binom function +#' @param count_table_UMI_bg_freq (tibble) Quantifcation table joined to the UMI_bg_freq tibble and filter (provide by the EMOTE_desat_barcode_binom function) +#' @param alpha (double) Confidence level of the binomial test (set higher will increase the value of UMI_desat) +#' @return (tibble) Desaturated Count table +#' @export +#' @import tidyverse +EMOTE_desat_binom = function(count_table_UMI_bg_freq, + alpha) { + # Initialize UMI_desat column and compteurs + count_table_UMI_bg_freq$UMI_desat = count_table_UMI_bg_freq$count + nb_transcrit = 1 + + # Desature in a loop + while (sum(count_table_UMI_bg_freq$UMI_desat) != nb_transcrit) { + nb_transcrit = sum(count_table_UMI_bg_freq$UMI_desat) + # Calcul if the count value is binomially possible. If it could be more we keep the count value. + #If it should be lower we put the binomial returned value and if should be 0 we put to 1. + count_table_UMI_bg_freq = + mutate(count_table_UMI_bg_freq, + binom = qbinom(alpha, reads, freq), + UMI_desat = ifelse(binom >= count, + count, + ifelse(binom==0, 1, binom) ) + ) %>% select(!reads) + # Update the number of reads at each position,strand,barcode according to the UMI_desat values + + # Update the count value + count_table_UMI_bg_freq = count_table_UMI_bg_freq %>% + group_by(position,strand,barcode) %>% + summarise(reads = sum(UMI_desat), .groups="keep") %>% + inner_join(count_table_UMI_bg_freq, + by = c("position", "strand", "barcode")) %>% + mutate(count = UMI_desat) + } + return(count_table_UMI_bg_freq) +} + +# Filter a PQ-EMOTE Count table +# This function filter out position with a count value lower than the given threshold. +# Note that this function will apply the filter only on the total sample but it remove also corresponding positions in the mono sample. +#' @param count_table (tibble) Count table +#' @param design_tb (tibble) Description of the barcodes (it must contains a barcode,strain,replicate,assay(total/mono) columns) +#' @param threshold (integer) Minimum count value allowed in the total sample +#' @return (tibble) Filtered Count table +#' @export +#' @import tidyverse +EMOTE_filter = function(count_table, + design_tb, + threshold) { + x = count_table %>% inner_join(design_tb, by = "barcode") + count_table_filtered = x %>% + pivot_wider(id_cols = c(rname, position, strand, strain, replicate), + names_from = assay, + values_from = count) %>% + filter(total >= threshold) %>% + pivot_longer(cols = c(mono, total), + names_to = "assay", values_to = "count") %>% + inner_join(x, by = c("rname", + "position", + "strand", + "strain", + "replicate", + "assay", + "count")) %>% + select(rname, position, strand, barcode, count) + + return(count_table_filtered) +} + +# Normalize a PQ-EMOTE Count table. +# This function use a given normalize method ("nf_method") to normalize each pair of mono/total sample which is mandatory for the proportion calcul +#' @param count_table (tibble) Count table +#' @param design_tb (tibble) Description of the barcodes (it must contains a barcode,strain,replicate,assay(total/mono) columns) +#' @param list_pos (vector of integer) Position(s) used to calcul a normalization factor +#' @return (tibble) Normalized Count table +#' @export +#' @import tidyverse +#' @import EMOTE_calc_norm_fac +EMOTE_normalize = function (count_table, + design_tb, + list_pos, + nf_method = "med_of_nf") { +# Calcul normalization factor + if(nf_method == "med_of_nf"){ + nf = EMOTE_calc_norm_fac(count_table, list_pos, design_tb) + } + if(nf_method == "nf_of_sum"){ + nf = EMOTE_calc_norm_fac_sum(count_table, list_pos, design_tb) + } +# Normalisation + count_table_norm = count_table %>% + inner_join(design_tb, by = "barcode") %>% + inner_join(nf, by = c("strain", "replicate")) %>% + mutate(count = ifelse(assay=="total", round(count*nf), count)) %>% + select(rname, position, strand, barcode, count) + + return(count_table_norm) +} + +# Calcul a normalization factor for each pair of barcodes (mono/total) +# This function calcul a factor for each positions given in the "list_pos" then return the median nf for each pair of barcodes. +#' @param count_table (tibble) Count table +#' @param list_pos (vector of integer) Position(s) used to calcul a normalization factor +#' @param design_tb (tibble) Description of the barcodes (it must contains a barcode,strain,replicate,assay(total/mono) columns) +#' @return a tibble with a normalization factor for each pair of barcode +#' @export +#' @import tidyverse +EMOTE_calc_norm_fac = function (count_table, + list_pos, + design_tb) { + nf = count_table %>% + inner_join(design_tb, by = "barcode") %>% + filter(position %in% list_pos) %>% + pivot_wider(id_cols = c(position, strand, replicate, strain), + names_from = assay, + values_from = count) %>% + mutate(norm_fac = mono/total) %>% + group_by(strain, replicate) %>% + na.omit %>% + summarise(nf = median(norm_fac), .groups="drop") + + return(nf) +} + +# Calcul a normalization factor for each pair of barcodes (mono/total) +# This function calcul the sum of count at the given position in the "list_pos" then calcul a nf (sum mono divided by sum total) and return a nf for each pair of barcodes. +#' @param count_table (tibble) Count table +#' @param list_pos (vector of integer) Position(s) used to calcul a normalization factor +#' @param design_tb (tibble) Description of the barcodes (it must contains a barcode,strain,replicate,assay(total/mono) columns) +#' @return a tibble with a normalization factor for each pair of barcode +#' @export +#' @import tidyverse +EMOTE_calc_norm_fac_sum = function (count_table, + list_pos, + design_tb) { + + nf = count_table %>% inner_join(design_tb, by="barcode") %>% + pivot_wider(id_cols = c(position, strand, strain, replicate), + names_from = assay, values_from = count, values_fill = 0) %>% + group_by(strain,replicate) %>% + summarise(s_mono = sum(mono, na.rm = T), + s_total = sum(total, na.rm = T), + .groups="drop") %>% + mutate(nf = s_mono/s_total) + + return(nf) +} + + +# Statistical comparison of 2 sets of proportion values taking into account replicates +#' @param count_table (tibble) Count table +#' @param design_matrix (tibble) Description of the samples (it must contains a sample_id, group, replicate, count_of(fraction/total) columns) +#' @param group1 (character) Name of strain 1 +#' @param group2 (character) Name of strain 2 +#' @param ... arguments that can be pass to the DMLtest function +#' @return a tibble with for each position the pvalue +#' @export +#' @import tidyverse +#' @import DSS +EMOTE_differential_proportion2 = function(count_table, + design_matrix, + group1, + group2, + ...) { + format = count_table %>% + inner_join(design_matrix, by = c("sample_id")) %>% + pivot_wider(id_cols = c(rname, position, strand, group, replicate), + names_from = count_of, + values_from = count) %>% + filter(group == group1 | group == group2) %>% + na.omit %>% + arrange(group, replicate) %>% + mutate(fraction = ifelse(fraction>total, total, fraction)) + # Tb strain replicate used for samples names + tb_group_rep = format %>% + ungroup %>% + select(group, replicate) %>% + unique + # Mono matrix + M = format %>% + pivot_wider(id_cols = c(rname, position, strand), + names_from = c(group, replicate), + values_from = fraction) + pos = M$position + rname = M$rname + M = M[,-c(1:3)] %>% as.matrix() + M[is.na(M)] <- 0 + + # Total matrix + Cov = format %>% + pivot_wider(id_cols = c(rname, position, strand), + names_from = c(group, replicate), + values_from = total) + Cov = Cov[,-c(1:3)] %>% as.matrix() + Cov[is.na(Cov)] <- 0 + + gr <- GRanges(seqnames = rname, ranges = IRanges(start = pos, width = 1L)) + + sn = sort(c(paste0(tb_group_rep$group, "_", tb_group_rep$replicate))) + M = M[, sort(colnames(M))] + Cov = Cov[, sort(colnames(Cov))] + + bss = BSseq(M = M, Cov = Cov, gr = gr, sampleNames = sn) + dmlTest = DMLtest(bss, + group1 = sn[str_detect(sn, group1)], + group2 = sn[str_detect(sn, group2)], + ...) + dmlTest = format %>% mutate(proportion = fraction/total) %>% + group_by(rname, position, strand, group) %>% + summarise(mean_prop = mean(c(proportion)), .groups = "keep") %>% + pivot_wider(id_cols = c(rname, position, strand), + names_from = group, + values_from = mean_prop) %>% + inner_join(dmlTest, by = c("rname" = "chr", "position" = "pos")) %>% + select(rname, position, strand, group1[[1]], group2[[1]], pval, fdr) %>% + arrange(fdr) + + return(dmlTest) +} + +# Wrapper of EMOTE_differential_proportion_one_stranded function allow to compare proportion of both strand +#' @param count_table (tibble) Count table +#' @param design_matrix (tibble) Description of the barcodes (it must contains a barcode,strain,replicate,assay(total/mono) columns) +#' @param group1 (character) Name of strain 1 +#' @param group2 (character) Name of strain 2 +#' @param cores number of cores used in the mclappy function +#' @param ... arguments that can be pass to the DMLtest function +#' @return a tibble with for each position the pvalue +#' @export +#' @import tidyverse +#' @import EMOTE_differential_proportion2 +EMOTE_differential_proportion = function(count_table, + design_matrix, + group1, + group2, + cores = 1, + ...) { + + list_qt = count_table %>% + split(~strand) + res_dmlTest = + mclapply(list_qt, + function (x) + EMOTE_differential_proportion2(x, design_matrix, group1, group2, ...), + mc.cores = cores) %>% + bind_rows() + return(res_dmlTest) +} + +# Calculating a pvalue for a single position using the betabinomial model (as in TSS-EMOTE) +#' @param k_total (integer) Count on the +RppH (total) (=Cov) at a specific position +#' @param k_mono (integer) Count on the -RppH (mono) (=M) at a specific position +#' @param n_total (integer) Total count on the +RppH (total) (=Cov) +#' @param n_mono (integer) Total count on the -RppH (mono) (=M) +#' @return a pvalue +#' @export +#' @import VGAM +EMOTE_tss_model <- function(k_total, + k_mono, + n_total, + n_mono, + p.lb=1e-30) { + p <- 1 - pbetabinom.ab(k_total, n_total, 1 + k_mono, 1 + n_mono - k_mono) + pmax(p, p.lb) +} + +# Detection of TSS +# This function calcul a pvalue for each position present in a PQ-EMOTE Count table +# Pvalue of replicate samples are combine using a chosen method and pvalue are adjusted with an adjusting method +#' @param count_table (tibble) Count table +#' @param design_tb (tibble) Description of the barcodes (it must contains a barcode,strain,replicate,assay(total/mono) columns) +#' @param combine_method (character) Combine method used default is "z.transform" ("fisher", "z.transform", "logit") +#' @param fdr_method (character) Adjuted pval method, default is "BH" ("holm", "hochberg", "hommel", "bonferroni", "BH", "BY","fdr", "none")) +#' @return a tibble with for each position the pvalue +#' @export +#' @import tidyverse +#' @import EMOTE_tss_model +#' @import survcomp +EMOTE_betabinom_TSS = function(count_table, + design_tb, + combine_method = "z.transform", + fdr_method = "BH", + threshold = 5){ + # Reformatage pour avoir + et - RppH + dfl_bbin = + count_table %>% + inner_join(design_tb, by="barcode") %>% + pivot_wider(id_cols = c(position, strand, strain, replicate), + values_fill = 0, + names_from = assay, + values_from = count) %>% + group_by(strain, replicate) %>% # Calcul of p-val using betabinomial + mutate(sum_mono = sum(mono, na.rm = T), + sum_total = sum(total, na.rm = T) ) %>% + ungroup %>% + filter(total >= threshold) %>% + mutate(p.betabinom_UMI = EMOTE_tss_model(total, mono, sum_total, sum_mono) , + p.betabinom_UMI = ifelse(p.betabinom_UMI > 1, 1, p.betabinom_UMI) ) %>% # Because sometimes pval = 1.00000008 + arrange(position) %>% + filter(!is.na(p.betabinom_UMI)) %>% # Combine p-val rep1 rep2 ... + mutate(w = sqrt(total + mono)) %>% # Zaykin 2011 recommande d'utiliser le sqrt de size ech (see M2 report) + group_by(strain, position, strand) %>% + summarise(p_comb = combine.test(p.betabinom_UMI, + weight = w, + method = combine_method), + .groups="drop") %>% + mutate(fdr = p.adjust(p_comb, method = fdr_method)) # P-val fdr correction + return(dfl_bbin) +} + +EMOTE_betabinom_TSS_DEPRECIATED = function(count_table, + design_tb, + combine_method = "z.transform", + fdr_method = "BH", + threshold = 5){ + # Get total read mmap by barcode + tot = count_table %>% inner_join(design_tb, by = "barcode") %>% group_by(strain,replicate,assay) %>% summarise(tot = sum(reads), .groups = "drop") %>% + pivot_wider(id_cols = c(strain,replicate) , values_from = tot , names_from = assay) + + # Calcul a pval for each position above the treshold using a betabinomial model + dfl_bbin = count_table %>% + inner_join(design_tb, by = "barcode") %>% + pivot_wider(id_cols = c(position, strand, strain, replicate), + values_fill = 0, + names_from = assay, + values_from = count) %>% + inner_join(tot, by=c("strain","replicate"), suffix = c(".k",".n")) %>% + filter(total.k >= 5) %>% + mutate(p.betabinom_UMI = EMOTE_tss_model(total.k, mono.k, total.n, mono.n), + p.betabinom_UMI = ifelse(p.betabinom_UMI > 1, 1, p.betabinom_UMI) ) %>% # Because sometimes pval = 1.00000008 + arrange(position) %>% + filter(!is.na(p.betabinom_UMI)) %>% # Combine p-val rep1 rep2 ... + mutate(w = sqrt(total.k + mono.k)) %>% # Zaykin 2011 recommande d'utiliser le sqrt de size ech (see M2 report) + group_by(strain, position, strand) %>% + summarise(p_comb = combine.test(p.betabinom_UMI, + weight = w, + method = "fisher"), + .groups="drop") %>% + mutate(fdr = p.adjust(p_comb, method = "fdr")) # P-val fdr correction + return(dfl_bbin) +} + +# Parse bam files and gff file into tibble object +# This function parse the gff file to retrieve positions around start and stop codons. +# It also use the EMOTE_quantify_5prime to read passed bam file and provide a Count table if not already given +#' @param region (charcater or vector of characters) Path of bam file(s) +#' @param count_table (tibble) count table (if not empty bam_files will be ignored) +#' @return +#' @export +#' @import tidyverse +EMOTE_parse_region = function(region, + count_table){ + + # Start region + count_table_region_start = count_table %>% + filter(strand == region$strand & position>=region$start_lower_bound & position<=region$start_upper_bound) %>% + mutate(reg = "start") %>% + group_by(barcode) %>% mutate(tot = sum(count)) + + # STOP region + count_table_region_end = count_table %>% + filter(strand == region$strand & position>=region$stop_lower_bound & position<=region$stop_upper_bound) %>% + mutate(reg = "stop") %>% + group_by(barcode) %>% mutate(tot = sum(count)) + + # Merge regions + count_table_region = rbind(count_table_region_start, count_table_region_end) + + # Normalize count by tot in the span window + count_table_region %>% mutate(start = region$start, + stop = ifelse(strand=="+",region$end-2,region$end+2), + dist_to = ifelse(reg=="start", position-start, position-stop), + dist_to = ifelse(strand=="+", dist_to, -dist_to), + count_norm = count/tot) %>% + group_by(rname, position, strand, reg, start, stop, dist_to) %>% + summarise(count_norm_sum = sum(count_norm), .groups = "drop") +} + +# Metagene counts +# This fonction queries a region (span.size) around the CDS start and stop codons and gets a vector containing 5'-ends count information. +# These vectors are then summed up to derive a metagene coverage aound the start and stop codons. *** SENTENCE TAKE FROM FIVEPSEQ PAPER *** +# Note that it is possible to not pool CDS regions together by setting "by_feature = TRUE" +#' @param count_table (tibble) Count table (if not empty bam_files will be ignored) +#' @param annotation_tb (character) Path of a gff file +#' @param span_size (integer) Number of position on the left and on the right to the feature +#' @param by_region (logical) if TRUE it will provide a metaC profil for each region in the annotation_tb +#' @return a list of 2 tibble (1 for start region and 1 for stop region ) +#' @export +#' @import tidyverse +#' @import EMOTE_quantify_from_bam_files +EMOTE_metacounts_profile = function(count_table = NULL, + annotation_tb, + span_size = 100, + by_region = FALSE, + ...){ + + # Set up region to analyse + feature_spaned_tb = annotation_tb %>% + mutate(start_lower_bound = start-span_size, + start_upper_bound = start+span_size, + stop_lower_bound = end-span_size, + stop_upper_bound = end+span_size) + + # Retrieve count table from bam file or count table + if(is.null(count_table)){ + count_table = EMOTE_quantify_from_bam_files(...) + } + else{ + count_table = count_table + } + # Get normalized counts mapped on the selected features + regions_count_table = + lapply(1:nrow(feature_spaned_tb), function(i) EMOTE_parse_region(region = feature_spaned_tb[i,], count_table = count_table)) %>% + bind_rows() + + if(!by_region){ + # Get the median value for each relative position + metaC = regions_count_table %>% + group_by(reg, dist_to) %>% + summarise(value = median(count_norm_sum, na.rm = T), .groups = "drop") + } + else{ + metaC = regions_count_table %>% + group_by(start, strand, reg, dist_to) %>% + summarise(value = median(count_norm_sum, na.rm = T), .groups = "drop") %>% + inner_join(annot, by=c("start","strand") ) + } + return(metaC) +} + +.EMOTE_compute_FFT = function(metaC_tot, q25, max_period = 25){ + # Calcul fft values + fft = abs(fft(metaC_tot$value)) + # Filter half of fft values because of symmetry and remove the first one beacuse it's freq 0 ? + fft_reduced = fft[2:((q25+1)/2)] + # Add fft values into a tibble and add the frequency value + fft_extended = tibble(signal = fft_reduced) %>% mutate(freq = row_number()) + # Calcul the period + fft = fft_extended %>% + mutate(period = (q25+1)/freq) %>% + filter(period<=max_period) %>% + arrange(desc(signal)) %>% + mutate(reg = unique(metaC_tot$reg)) + + if("start" %in% names(metaC_tot)){ + fft = fft %>% + mutate(start = unique(metaC_tot$start), + strand = unique(metaC_tot$strand) ) + } + + return(fft) +} + +# FFT analysis +# This function calcul the periodicity of the metagene count start and stop profiles +#' @param count_table (tibble) Count table (if not empty bam_files will be ignored) +#' @param annotation_tb (character) Path of a gff file +#' @param ... parameters of the EMOTE_quantify_from_bam_files function if no count table is provide +#' @return a list of nconds tibbles with a signal for a period +#' @export +#' @import tidyverse +#' @import EMOTE_quantify_from_bam_files +EMOTE_FFT = function(count_table = NULL, + annotation_tb, + by_region = FALSE, + ...){ + + # ATTENTION CAR LE END +/- 2 fait des changer le q25 et aussi le pos_tot !!! + q25 = quantile(abs(annotation_tb$end - annotation_tb$start), probs = 0.25) # Probs parametrable ? + + feature_spaned_tb = annotation_tb %>% + mutate(start_lower_bound = ifelse(strand=="+", start, start-q25), + start_upper_bound = ifelse(strand=="+", start+q25, start), + stop_lower_bound = ifelse(strand=="+", end-q25, end), + stop_upper_bound = ifelse(strand=="+", end, end+q25) ) + + # Retrieve count table from bam file or count table + if(is.null(count_table)){ + count_table = EMOTE_quantify_from_bam_files(...) + } + else{ + count_table = count_table + } + # Get normalized counts mapped on the selected features + regions_count_table = + lapply(1:nrow(feature_spaned_tb), function(i) EMOTE_parse_region(region = feature_spaned_tb[i,], count_table = count_table)) %>% + bind_rows() + + if(!by_region){ + # Get the median value for each relative position + metaC = regions_count_table %>% + group_by(reg, dist_to) %>% + summarise(value = median(count_norm_sum), .groups = "drop") + # Add 0 to missing positions + metaC_tot = tibble(reg = c(rep("start", q25+1),rep("stop",q25+1)), dist_to = c(0:q25,-q25:0), value = 0) %>% + anti_join(metaC, by = c("reg","dist_to")) %>% rbind(metaC) %>% + arrange(reg, dist_to) %>% + group_by(reg) %>% + group_split() + } + else{ + # Get the median value for each relative position + metaC = regions_count_table %>% + group_by(start, strand, reg, dist_to) %>% + summarise(value = median(count_norm_sum), .groups = "drop") + + # Add 0 to missing positions + metaC_tot = tibble(reg = "start", start = feature_spaned_tb$start, strand = feature_spaned_tb$strand, width = q25+1, value = 0) %>% + rbind(tibble(reg = "stop", start = feature_spaned_tb$start, strand = feature_spaned_tb$strand, width = q25+1, value = 0)) %>% + uncount(width) %>% + mutate(dist_to = c(rep(0:q25, nrow(feature_spaned_tb)),rep(-q25:0, nrow(feature_spaned_tb)) )) %>% + anti_join(metaC, by = c("start","strand","reg","dist_to")) %>% rbind(metaC) %>% + arrange(reg, start, dist_to) %>% + group_by(start, strand, reg) %>% + group_split() + } + # Iterate on each region (or each region + start) + fft = lapply(metaC_tot, function (x) .EMOTE_compute_FFT(metaC_tot = x, q25 = q25)) %>% + bind_rows() + + return(fft) +} + +# Global frame preference +# This function calcul the global frame preference of the reads distribution by calculing the number of count falling into each translational frame. +#' @param count_table (tibble) Count table (if not empty bam_files will be ignored) +#' @param annotation_tb (character) Path of a gff file +#' @return a list of nconds tibbles with a signal for a period +#' @export +#' @import tidyverse +#' @import EMOTE_quantify_from_bam_files +EMOTE_frame_preference = function(count_table = NULL, + annotation_tb, + by_region = FALSE, + ...){ + + feature_spaned_tb = annotation_tb %>% + mutate(start_lower_bound = ifelse(strand=="+", start, end), + start_upper_bound = ifelse(strand=="+", end, start), + stop_lower_bound = 0, + stop_upper_bound = 0) + + # Retrieve count table from bam file or count table + if(is.null(count_table)){ + count_table = EMOTE_quantify_from_bam_files(...) + } + else{ + count_table = count_table + } + # Get normalized counts mapped on the selected features + regions_count_table = + lapply(1:nrow(feature_spaned_tb), function(i) EMOTE_parse_region(region = feature_spaned_tb[i,], count_table = count_table)) %>% + bind_rows() + + # Retrieve percent of read mapped on each 3 translation frames + if(!by_region){ + frame = regions_count_table %>% + mutate(frame = abs(dist_to%%3) + 1) %>% + group_by(frame) %>% + summarise(percent = sum(count_norm_sum)/sum(regions_count_table$count_norm_sum), .groups = "drop") + } + else{ + frame = regions_count_table %>% + mutate(frame = abs(dist_to%%3) + 1) %>% + group_by(start, strand,frame) %>% + summarise(percent = sum(count_norm_sum)/sum(regions_count_table$count_norm_sum), .groups = "drop") %>% + inner_join(annot, by = c("start","strand")) + } + return(frame) +} \ No newline at end of file