Mercurial > repos > iarc > mutspec
diff R/mutationSpectra_Galaxy.r @ 7:eda59b985b1c draft default tip
Uploaded
author | iarc |
---|---|
date | Mon, 13 Mar 2017 08:21:19 -0400 |
parents | 46a10309dfe2 |
children |
line wrap: on
line diff
--- a/R/mutationSpectra_Galaxy.r Tue Jun 28 02:59:32 2016 -0400 +++ b/R/mutationSpectra_Galaxy.r Mon Mar 13 08:21:19 2017 -0400 @@ -1,203 +1,203 @@ -#!/usr/bin/Rscript - -#-----------------------------------# -# Author: Maude # -# Script: mutationSpectra_Galaxy.r # -# Last update: 23/07/15 # -#-----------------------------------# - -######################################################################################################################################### -# Represent the mutation spectra with a bar graph # -######################################################################################################################################### - -#------------------------------------------------------------------------------- -# Print a usage message if there is no argument pass to the command line -#------------------------------------------------------------------------------- -args <- commandArgs(TRUE) -usage <- function() -{ - msg <- paste0('Usage:\n', - ' mutationSpectra_Galaxy.r input_Mutation_Spectra Sample_Name Output_Folder_High_Resolution Output_Folder_Low_Resolution Count_ca Count_cg Count_ta Count_tc Count_tg\n', - '\ninput_Mutation_Spectra should be tab-separated: alteration context value\n', - '\nOutput_Folder_High_Resolution: Folder for saving the high resolution image (display on the HTML page)\n', - '\nOutput_Folder_Low_Resolution: Folder for saving the low resolution image (display on the Excel report)\n' - ) - cat(msg, '\n', file="/dev/stderr") - quit(status=1) -} - -input = args[length(args)] - -if (length(args) == 0) { usage() } - - -#------------------------------------------------------------------------------- -# Load library -#------------------------------------------------------------------------------- -suppressMessages(suppressWarnings(library(ggplot2))) -suppressMessages(suppressWarnings(library(reshape))) -suppressMessages(suppressWarnings(library(grid))) -suppressMessages(suppressWarnings(library(scales))) -suppressMessages(suppressWarnings(library(gridExtra))) - - - -#------------------------------------------------------------------------------- -# Recover the arguments -#------------------------------------------------------------------------------- -input <- args[1] -sampleName <- args[2] -output_html <- args[3] -output_report <- args[4] -count_ca <- as.numeric(args[5]) -count_cg <- as.numeric(args[6]) -count_ct <- as.numeric(args[7]) -count_ta <- as.numeric(args[8]) -count_tc <- as.numeric(args[9]) -count_tg <- as.numeric(args[10]) - -count_ca <- paste("C>A (", count_ca, ")") -count_cg <- paste("C>G (", count_cg, ")") -count_ct <- paste("C>T (", count_ct, ")") -count_ta <- paste("T>A (", count_ta, ")") -count_tc <- paste("T>C (", count_tc, ")") -count_tg <- paste("T>G (", count_tg, ")") - - - - ############################################################################### - # Load the functions # - ############################################################################### - -#------------------------------------------------------------------------------- -# Set the font depending on X11 availability -#------------------------------------------------------------------------------- -font <- "" -# Check the device available -device <- capabilities() -# X11 is available -if(device[5]) { font <- "Helvetica" } else { font <- "mono" } - -#------------------------------------------------------------------------------- -# My own thme -#------------------------------------------------------------------------------- -theme_custom <- function(base_size = 12, base_family = "") -{ - # Starts with theme_grey and then modify some parts - theme_grey(base_size = base_size, base_family = base_family) %+replace% - theme( - axis.text = element_text(size = rel(1), family=font), - axis.ticks = element_line(colour = "black"), - axis.line = element_line(colour = "black", size = .5), - legend.key = element_blank(), - panel.background = element_blank(), - panel.border = element_blank(), - panel.grid.major = element_blank(), - panel.grid.minor = element_blank() - ) -} - - -#------------------------------------------------------------------------------- -# Customize the theme for adding a y axis -#------------------------------------------------------------------------------- -mytheme <- theme_custom() -mytheme$axis.line.x <- mytheme$axis.line.y <- mytheme$axis.line -mytheme$axis.line.x$colour <- 'white' - -#------------------------------------------------------------------------------- -# Set the decimal precision to 0.0 -#------------------------------------------------------------------------------ -fmt <- function() -{ - function(x) format(x,nsmall = 1,scientific = FALSE, digits=1) -} - - - - ############################################################################### - # MAIN # - ############################################################################### - -matrixW_inputggplot2 <- read.table(input, header=T) -matrixW_melt <- melt(matrixW_inputggplot2) -max_matrixW <- max(matrixW_inputggplot2[,3:ncol(matrixW_inputggplot2)]) - - -p <- ggplot(matrixW_melt, aes(x=context, y=value, fill=alteration)) + geom_bar(stat="identity", width=0.5) + facet_grid(variable ~ alteration, scales="free_y") -# Color the mutation like Alexandrov et al. -p <- p + scale_fill_manual(values=c("blue", "black", "red", "#828282", "#00CC33", "pink")) -# Remove the legend -p <- p + guides(fill=FALSE) -# customized theme (no background, no facet grid and strip, y axis only) -p <- p + mytheme -# Remove the title of the x facet strip -p <- p + theme(strip.text.x=element_blank(), strip.text.y=element_blank()) -# Remove the x axis label, thicks and title -p <- p + theme(axis.title.x=element_blank(), axis.ticks.x=element_blank(), axis.title.y=element_text(size=15)) -# Scale the y axis to the maximum value -p <- p + scale_y_continuous(limits=c(0,max_matrixW), oob=squish, breaks=c(0,max_matrixW), labels=fmt()) -# Rename the y axis -p <- p + ylab("percent") -# Add a title to the plot -p <- p + ggtitle(sampleName) + theme(plot.title = element_text(vjust = 3.4, family=font)) -# Add a top margin for writing the title of the plot -p <- p + theme(plot.margin=unit(c(.7,0,0,0), "cm")) -p <- p + scale_x_discrete(breaks = c("A_A","A_C","A_G","A_T", "C_A","C_C","C_G","C_T", "G_A","G_C","G_G","G_T", "T_A","T_C","T_G","T_T"), - labels =c('A\nA',"\nC","\nG","\nT", 'C\nA',"\nC","\nG","\nT", - 'G\nA',"\nC","\nG","\nT", 'T\nA',"\nC","\nG","\nT" - ) - ) - -#------------------------------------------------------------------------------------------------------------------------------ -# Change the color of the facets for the mutation type -#------------------------------------------------------------------------------------------------------------------------------ -cols <- rep( c("blue", "black", "red", "#828282", "#00CC33", "pink")) # Facet strip colours - -# Make a grob object -Pg <- ggplotGrob(p) -# To keep track of strip.background grobs -idx <- 0 -# Find each strip.background and alter its backround colour -for( g in 1:length(Pg$grobs) ) -{ - if( grepl( "strip.absoluteGrob" , Pg$grobs[[g]]$name ) ) - { - idx <- idx + 1 - sb <- which( grepl( "strip\\.background" , names( Pg$grobs[[g]]$children ) ) ) - Pg$grobs[[g]]$children[[sb]][]$gp$fill <- cols[idx] - } -} - -# Reduce the size of the facet strip -Pg$heights[[3]] = unit(.1,"cm") - - -# Save the plot for the HTML page (higher resolution) -graphics.off() # close graphics windows -# Use cairo device as isn't possible to install X11 on the server... -png(paste0(output_html, "/", sampleName, "-MutationSpectraPercent-Genomic.png"), width=3500, heigh=500, res=300, type=c("cairo-png")) -plot(Pg) -## Add label for the mutation type above the strip facet -grid.text(0.13, unit(0.90,"npc") - unit(1,"line"), label=count_ca) -grid.text(0.29, unit(0.90,"npc") - unit(1,"line"), label=count_cg) -grid.text(0.45, unit(0.90,"npc") - unit(1,"line"), label=count_ct) -grid.text(0.6, unit(0.90,"npc") - unit(1,"line"), label=count_ta) -grid.text(0.76, unit(0.90,"npc") - unit(1,"line"), label=count_tc) -grid.text(0.92, unit(0.90,"npc") - unit(1,"line"), label=count_tg) -invisible( dev.off() ) - -# Save the plot for the report -png(paste0(output_report, "/", sampleName, "-MutationSpectraPercent-Genomic-Report.png"), width=1000, heigh=150, type=c("cairo-png")) -plot(Pg) -## Add label for the mutation type above the strip facet -grid.text(0.13, unit(0.90,"npc") - unit(1,"line"), label=count_ca) -grid.text(0.29, unit(0.90,"npc") - unit(1,"line"), label=count_cg) -grid.text(0.45, unit(0.90,"npc") - unit(1,"line"), label=count_ct) -grid.text(0.6, unit(0.90,"npc") - unit(1,"line"), label=count_ta) -grid.text(0.76, unit(0.90,"npc") - unit(1,"line"), label=count_tc) -grid.text(0.92, unit(0.90,"npc") - unit(1,"line"), label=count_tg) -invisible( dev.off() ) - -# Delete the empty plot created by the script -if (file.exists("Rplots.pdf")) invisible( file.remove("Rplots.pdf") ) +#!/usr/bin/Rscript + +#-----------------------------------# +# Author: Maude # +# Script: mutationSpectra_Galaxy.r # +# Last update: 23/07/15 # +#-----------------------------------# + +######################################################################################################################################### +# Represent the mutation spectra with a bar graph # +######################################################################################################################################### + +#------------------------------------------------------------------------------- +# Print a usage message if there is no argument pass to the command line +#------------------------------------------------------------------------------- +args <- commandArgs(TRUE) +usage <- function() +{ + msg <- paste0('Usage:\n', + ' mutationSpectra_Galaxy.r input_Mutation_Spectra Sample_Name Output_Folder_High_Resolution Output_Folder_Low_Resolution Count_ca Count_cg Count_ta Count_tc Count_tg\n', + '\ninput_Mutation_Spectra should be tab-separated: alteration context value\n', + '\nOutput_Folder_High_Resolution: Folder for saving the high resolution image (display on the HTML page)\n', + '\nOutput_Folder_Low_Resolution: Folder for saving the low resolution image (display on the Excel report)\n' + ) + cat(msg, '\n', file="/dev/stderr") + quit(status=1) +} + +input = args[length(args)] + +if (length(args) == 0) { usage() } + + +#------------------------------------------------------------------------------- +# Load library +#------------------------------------------------------------------------------- +suppressMessages(suppressWarnings(library(ggplot2))) +suppressMessages(suppressWarnings(library(reshape))) +suppressMessages(suppressWarnings(library(grid))) +suppressMessages(suppressWarnings(library(scales))) +suppressMessages(suppressWarnings(library(gridExtra))) + + + +#------------------------------------------------------------------------------- +# Recover the arguments +#------------------------------------------------------------------------------- +input <- args[1] +sampleName <- args[2] +output_html <- args[3] +output_report <- args[4] +count_ca <- as.numeric(args[5]) +count_cg <- as.numeric(args[6]) +count_ct <- as.numeric(args[7]) +count_ta <- as.numeric(args[8]) +count_tc <- as.numeric(args[9]) +count_tg <- as.numeric(args[10]) + +count_ca <- paste("C>A (", count_ca, ")") +count_cg <- paste("C>G (", count_cg, ")") +count_ct <- paste("C>T (", count_ct, ")") +count_ta <- paste("T>A (", count_ta, ")") +count_tc <- paste("T>C (", count_tc, ")") +count_tg <- paste("T>G (", count_tg, ")") + + + + ############################################################################### + # Load the functions # + ############################################################################### + +#------------------------------------------------------------------------------- +# Set the font depending on X11 availability +#------------------------------------------------------------------------------- +font <- "" +# Check the device available +device <- capabilities() +# X11 is available +if(device[5]) { font <- "Helvetica" } else { font <- "mono" } + +#------------------------------------------------------------------------------- +# My own thme +#------------------------------------------------------------------------------- +theme_custom <- function(base_size = 12, base_family = "") +{ + # Starts with theme_grey and then modify some parts + theme_grey(base_size = base_size, base_family = base_family) %+replace% + theme( + axis.text = element_text(size = rel(1), family=font), + axis.ticks = element_line(colour = "black"), + axis.line = element_line(colour = "black", size = .5), + legend.key = element_blank(), + panel.background = element_blank(), + panel.border = element_blank(), + panel.grid.major = element_blank(), + panel.grid.minor = element_blank() + ) +} + + +#------------------------------------------------------------------------------- +# Customize the theme for adding a y axis +#------------------------------------------------------------------------------- +mytheme <- theme_custom() +mytheme$axis.line.x <- mytheme$axis.line.y <- mytheme$axis.line +mytheme$axis.line.x$colour <- 'white' + +#------------------------------------------------------------------------------- +# Set the decimal precision to 0.0 +#------------------------------------------------------------------------------ +fmt <- function() +{ + function(x) format(x,nsmall = 1,scientific = FALSE, digits=1) +} + + + + ############################################################################### + # MAIN # + ############################################################################### + +matrixW_inputggplot2 <- read.table(input, header=T) +matrixW_melt <- melt(matrixW_inputggplot2) +max_matrixW <- max(matrixW_inputggplot2[,3:ncol(matrixW_inputggplot2)]) + + +p <- ggplot(matrixW_melt, aes(x=context, y=value, fill=alteration)) + geom_bar(stat="identity", width=0.5) + facet_grid(variable ~ alteration, scales="free_y") +# Color the mutation like Alexandrov et al. +p <- p + scale_fill_manual(values=c("blue", "black", "red", "#828282", "#00CC33", "pink")) +# Remove the legend +p <- p + guides(fill=FALSE) +# customized theme (no background, no facet grid and strip, y axis only) +p <- p + mytheme +# Remove the title of the x facet strip +p <- p + theme(strip.text.x=element_blank(), strip.text.y=element_blank()) +# Remove the x axis label, thicks and title +p <- p + theme(axis.title.x=element_blank(), axis.ticks.x=element_blank(), axis.title.y=element_text(size=15)) +# Scale the y axis to the maximum value +p <- p + scale_y_continuous(limits=c(0,max_matrixW), oob=squish, breaks=c(0,max_matrixW), labels=fmt()) +# Rename the y axis +p <- p + ylab("percent") +# Add a title to the plot +p <- p + ggtitle(sampleName) + theme(plot.title = element_text(vjust = 3.4, family=font)) +# Add a top margin for writing the title of the plot +p <- p + theme(plot.margin=unit(c(.7,0,0,0), "cm")) +p <- p + scale_x_discrete(breaks = c("A_A","A_C","A_G","A_T", "C_A","C_C","C_G","C_T", "G_A","G_C","G_G","G_T", "T_A","T_C","T_G","T_T"), + labels =c('A\nA',"\nC","\nG","\nT", 'C\nA',"\nC","\nG","\nT", + 'G\nA',"\nC","\nG","\nT", 'T\nA',"\nC","\nG","\nT" + ) + ) + +#------------------------------------------------------------------------------------------------------------------------------ +# Change the color of the facets for the mutation type +#------------------------------------------------------------------------------------------------------------------------------ +cols <- rep( c("blue", "black", "red", "#828282", "#00CC33", "pink")) # Facet strip colours + +# Make a grob object +Pg <- ggplotGrob(p) +# To keep track of strip.background grobs +idx <- 0 +# Find each strip.background and alter its backround colour +for( g in 1:length(Pg$grobs) ) +{ + if( grepl( "strip.absoluteGrob" , Pg$grobs[[g]]$name ) ) + { + idx <- idx + 1 + sb <- which( grepl( "strip\\.background" , names( Pg$grobs[[g]]$children ) ) ) + Pg$grobs[[g]]$children[[sb]][]$gp$fill <- cols[idx] + } +} + +# Reduce the size of the facet strip +Pg$heights[[3]] = unit(.1,"cm") + + +# Save the plot for the HTML page (higher resolution) +graphics.off() # close graphics windows +# Use cairo device as isn't possible to install X11 on the server... +png(paste0(output_html, "/", sampleName, "-MutationSpectraPercent-Genomic.png"), width=3500, heigh=500, res=300, type=c("cairo-png")) +plot(Pg) +## Add label for the mutation type above the strip facet +grid.text(0.13, unit(0.90,"npc") - unit(1,"line"), label=count_ca) +grid.text(0.29, unit(0.90,"npc") - unit(1,"line"), label=count_cg) +grid.text(0.45, unit(0.90,"npc") - unit(1,"line"), label=count_ct) +grid.text(0.6, unit(0.90,"npc") - unit(1,"line"), label=count_ta) +grid.text(0.76, unit(0.90,"npc") - unit(1,"line"), label=count_tc) +grid.text(0.92, unit(0.90,"npc") - unit(1,"line"), label=count_tg) +invisible( dev.off() ) + +# Save the plot for the report +png(paste0(output_report, "/", sampleName, "-MutationSpectraPercent-Genomic-Report.png"), width=1000, heigh=150, type=c("cairo-png")) +plot(Pg) +## Add label for the mutation type above the strip facet +grid.text(0.13, unit(0.90,"npc") - unit(1,"line"), label=count_ca) +grid.text(0.29, unit(0.90,"npc") - unit(1,"line"), label=count_cg) +grid.text(0.45, unit(0.90,"npc") - unit(1,"line"), label=count_ct) +grid.text(0.6, unit(0.90,"npc") - unit(1,"line"), label=count_ta) +grid.text(0.76, unit(0.90,"npc") - unit(1,"line"), label=count_tc) +grid.text(0.92, unit(0.90,"npc") - unit(1,"line"), label=count_tg) +invisible( dev.off() ) + +# Delete the empty plot created by the script +if (file.exists("Rplots.pdf")) invisible( file.remove("Rplots.pdf") )