---
title: 'Summary Read Report'
author: 'ampliCan'
date: '`r format(Sys.time(), "%d %B %Y")`'
output:
  html_document:
    toc: true
    theme: paper
    toc_float: true
    number_sections: true
params:
  barcode_summary: !r system.file('extdata', 'results', 'barcode_reads_filters.csv', package = 'amplican')
  config_summary: !r system.file('extdata', 'results', 'config_summary.csv', package = 'amplican')
  links: "1. [Report by id](./example_id_report.html)\n2. [Report by barcode](./example_barcode_report.html)\n3. [Report by group](./example_group_report.html)\n4. [Report by guide](./example_guide_report.html)\n5. [Report by amplicon](./example_amplicon_report.html)\n"
vignette: >
  %\VignetteIndexEntry{example index report}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r echo = F, results = 'asis'}
if (params$links != "") {
  cat("***\n")
  cat("# Other Reports\n")
  cat("***\n")
  cat(params$links, sep = "")
}
```

***

# Explanation of variables

***

**Experiment Count** - how many IDs belongs to this barcode  
**Read Count** - how many reads belongs to this barcode  
**Bad Base Quality** - how many reads had base quality worse than specified (default is 0)  
**Bad Average Quality** - how many reads had average base quality worse than specified (default is 0)  
**Bad Alphabet** - how many reads had alphabet with bases other than A, C, G, T  
**Filtered Read Count** - how many reads were left after filtering  
**Unique Reads** - how many reads (forward and reverse together) for this barcode is unique  
**Assigned Reads/Unassigned Reads** - how many reads have been assigned/not assigned to any of the experiments  

***

# Total reads

***

## Read Quality

```{r echo = F}
library(ggplot2)
library(waffle)
summaryDF <- data.frame(data.table::fread(params$barcode_summary))

total_reads <- sum(summaryDF$read_count)
total_good_reads <- sum(summaryDF$filtered_read_count)
read_q <- c(total_good_reads, total_reads - total_good_reads)
read_q_per <- round(read_q*100/total_reads)
read_q_per[is.na(read_q_per)] <- 0 # For some cases 0/0 happens, yelding NaN
names(read_q_per) <- c(paste0('Good Reads\n', read_q[1], ' (', read_q_per[1], '%)'), 
                       paste0('Bad Quality Reads\n', read_q[2], ' (', read_q_per[2], '%)'))
waffle(read_q_per, legend_pos = 'bottom', 
       title = "Quality of all reads", rows = 10, colors = c('#E69F00', '#000000'))

bad_read_q <- c(sum(summaryDF$bad_base_quality), 
                sum(summaryDF$bad_average_quality), 
                sum(summaryDF$bad_alphabet))
bad_read_q_per <- round(bad_read_q*100/sum(bad_read_q))
bad_read_q_per[is.na(bad_read_q_per)] <- 0
names(bad_read_q_per) <- c(
  paste0('Bad Base Quality\n', bad_read_q[1], ' (', bad_read_q_per[1], '%)'), 
  paste0('Bad Average Read Quality\n', bad_read_q[2], ' (', bad_read_q_per[2], '%)'),
  paste0('Bad Read Alphabet\n', bad_read_q[3], ' (', bad_read_q_per[3], '%)'))
waffle(bad_read_q_per, legend_pos = 'bottom', 
       title = "\n\nBad quality reads", rows = 10, colors = c('#D55e00', '#f0e442', '#009e73'))
```

## Read assignment

```{r echo = F}
# Assignment of reads from barcodes into experiments (ID)
total_ureads <- sum(summaryDF$unique_reads)
read_a <- c(sum(summaryDF$assigned_reads), sum(summaryDF$unassigned_reads))
read_a_per <- round(read_a*100/total_ureads)
read_a_per[is.na(read_a_per)] <- 0
names(read_a_per) <- c(paste0('Assigned Reads\n', read_a[1], ' (', read_a_per[1], '%)'), 
                       paste0('Unassigned Reads\n', read_a[2], ' (', read_a_per[2], '%)'))
waffle(read_a_per, legend_pos = 'bottom', 
       title = "Succesfull assignment of unique reads", 
       rows = 10, colors = c('#E69F00', '#000000'))

# Filtered reads
configDF <- data.frame(data.table::fread(params$config_summary))
height <- amplican::plot_height(length(unique(configDF$Barcode)))

F_reads <- c(sum(configDF$Reads_Filtered), sum(configDF$PRIMER_DIMER),
              sum(configDF$Low_Score))
F_reads_per <- round(F_reads*100/sum(configDF$Reads))
F_reads_per[is.na(F_reads_per)] <- 0
names(F_reads_per) <- c(paste0('Good Reads\n', F_reads[1], ' (', F_reads_per[1], '%)'), 
                        paste0('PRIMER DIMERs\n', F_reads[2], ' (', 
                               F_reads_per[2], '%)'),
                        paste0('Low Score\n', F_reads[3], ' (', 
                               F_reads_per[3], '%)'))
waffle(F_reads_per, legend_pos = 'bottom', 
       title = "\n\nFiltered Reads", 
       rows = 10, colors = c('#E69F00', '#000000', '#A9A9A9'))
```

## Edits

```{r echo = F}
total_reads <- sum(configDF$Reads_Filtered)
total_reads_ctr <- sum(configDF$Reads_Filtered[configDF$Control])
total_reads_tmt <- sum(configDF$Reads_Filtered[!configDF$Control])
reads_edited <- c(sum(configDF$Reads_Edited[!configDF$Control]), # Treatment
                  total_reads_tmt - sum(configDF$Reads_Edited[!configDF$Control]),
                  sum(configDF$Reads_Edited[configDF$Control]), # Control
                  total_reads_ctr - sum(configDF$Reads_Edited[configDF$Control]))
reads_edited_per <- round(reads_edited*100/total_reads)
reads_edited_per[is.na(reads_edited_per)] <- 0
names(reads_edited_per) <- c(
  paste0('Edits in Treatment\n', reads_edited[1], ' (', reads_edited_per[1], '%)'),
  paste0('No Edits in Treatment\n', reads_edited[2], ' (', reads_edited_per[2], '%)'),
  paste0('Edits in Control\n', reads_edited[3], ' (', reads_edited_per[3], '%)'), 
  paste0('No Edits in Control\n', reads_edited[4], ' (', reads_edited_per[4], '%)'))
waffle(reads_edited_per, legend_pos = 'bottom', 
       title = "Reads with indels", 
       rows = 10, colors = c('#E69F00', '#000000', '#A9A9A9', '#F0E442'))

frameshift <- c(sum(configDF$Reads_Frameshifted[!configDF$Control]), # Treatment
                total_reads_tmt - sum(configDF$Reads_Frameshifted[!configDF$Control]),
                sum(configDF$Reads_Frameshifted[configDF$Control]), # Control
                total_reads_ctr - sum(configDF$Reads_Frameshifted[configDF$Control]))
frameshift_per <- round(frameshift*100/total_reads)
frameshift_per[is.na(frameshift_per)] <- 0
names(frameshift_per) <- c(
  paste0('Frameshift in Treatment\n', frameshift[1], ' (', frameshift_per[1], '%)'),
  paste0('No Frameshift in Treatment\n', frameshift[2], ' (', frameshift_per[2], '%)'),
  paste0('Frameshift in Control\n', frameshift[3], ' (', frameshift_per[3], '%)'), 
  paste0('No Frameshift in Control\n', frameshift[4], ' (', frameshift_per[4], '%)'))
waffle(frameshift_per, legend_pos = 'bottom', 
       title = "\n\nReads with frameshift", 
       rows = 10, colors = c('#E69F00', '#000000', '#A9A9A9', '#F0E442'))

```

***

# Reads by barcode

***

```{r fig.width=8, fig.height = height + 1, echo = F}
library(ggthemes)
summaryDF_per <- summaryDF
filters <- c('bad_base_quality', 'bad_average_quality', 'bad_alphabet')
summaryDF_per[, filters] <- 
  round(summaryDF_per[, filters]*100/rowSums(summaryDF_per[, filters]))
summaryDF_per[, c('assigned_reads', 'unassigned_reads')] <-
   round(summaryDF_per[, c('assigned_reads', 'unassigned_reads')]*100/
           summaryDF_per$unique_reads)
summaryDF_per$bad_read_count <- summaryDF_per$read_count - summaryDF_per$filtered_read_count 
summaryDF_per[, c('filtered_read_count', 'bad_read_count')] <- 
  round(
    summaryDF_per[, c('filtered_read_count','bad_read_count')]*100/summaryDF_per$read_count)
summaryDF_per[is.na(summaryDF_per)] <- 0
summaryDF_per <- data.table::as.data.table(summaryDF_per)

quality_melt <- data.table::melt(summaryDF_per, id.vars = c('Barcode'), 
                     measure.vars = c('filtered_read_count', 'bad_read_count'))
quality_det_melt <-  data.table::melt(summaryDF_per,
                     id.vars = c('Barcode'),
                     measure.vars = c('bad_base_quality',
                                      'bad_average_quality',
                                      'bad_alphabet'))
assignment_melt <-  data.table::melt(summaryDF_per,
                        id.vars = c('Barcode'),
                        measure.vars = c('assigned_reads', 'unassigned_reads'))

ggplot(data = quality_melt,
       aes(x = as.factor(Barcode),
           y = value,
           fill = factor(variable, labels = c('Good Reads', 'Bad Quality Reads')))) +
  geom_bar(position ='stack', stat ='identity') +
  ylab('% of reads in barcode') +
  xlab('Barcode') +
  ggtitle('Quality filtering of reads in barcodes') +
  theme(legend.position = 'top',
        legend.direction = 'horizontal',
        legend.title = element_blank()) +
  coord_flip() +
  scale_fill_manual(values = c('#E69F00', '#000000'))

```

```{r fig.width=8, fig.height=height + 1, echo = F}
ggplot(data = quality_det_melt,
       aes(x = as.factor(Barcode),
           y = value,
           fill = factor(variable, labels = c('Bad Read Base Quality', 
                                              'Bad Average Read Quality', 
                                              'Bad Read Alphabet')))) +
  geom_bar(position='stack', stat='identity') +
  ylab('% of low quality reads in barcode') +
  xlab('Barcode') +
  ggtitle('\n\nDistribution of low quality reads in barcodes') +
  theme(legend.position = 'top',
        legend.direction = 'horizontal',
        legend.title = element_blank()) +
  coord_flip() + 
  scale_color_colorblind()+
  scale_fill_manual(values = c('#D55e00', '#f0e442', '#009e73'))
```

```{r fig.width=8, fig.height=height + 1, echo = F}
ggplot(data = assignment_melt,
       aes(x = as.factor(Barcode),
           y = value,
           fill = factor(variable, labels = c('Assigned Reads', 'Unassigned Reads')))) +
  geom_bar(position='stack', stat='identity') +
  ylab('% of unique reads in barcode') +
  xlab('Barcode') +
  ggtitle('\n\nAssignment of reads in barcodes') +
  theme(legend.position = 'top',
        legend.direction = 'horizontal',
        legend.title = element_blank()) +
  coord_flip() +
  scale_fill_manual(values = c('#E69F00', '#000000'))
```

***

# Summary Table

***

```{r echo = F}
library(knitr)
names(summaryDF) <- c("Barcodes", "Experiment Count", "Read Count",
                      "Bad base quality", "Bad average quality", "Bad alphabet",
                      "Good Reads", "Unique Reads", "Unassigned Reads",
                      "Assigned Reads")
kable(summaryDF)
```

Table 1. Reads distributed for each barcode

***

<script>
//add logo to upper right corner
$(document).ready(function() {
$head = $('#header');
$head.prepend('<img src="data:image/png;base64,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" style=\"float: right;width: 150px;\"/>')
});
</script>