Mercurial > repos > stef > qdnaseq
changeset 78:81ba2f857fe2 draft
Uploaded
author | stef |
---|---|
date | Wed, 04 Mar 2015 08:42:14 -0500 |
parents | acf62630e4b5 |
children | 05e5358b8828 |
files | QDNAseq-plot.R QDNAseq-plot.xml QDNAseq.R QDNAseq.xml static/css/QDNAseq.css tool_dependencies.xml |
diffstat | 6 files changed, 439 insertions(+), 70 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QDNAseq-plot.R Wed Mar 04 08:42:14 2015 -0500 @@ -0,0 +1,51 @@ +#!/usr/bin/Rscript + +## -------------------- +## prints all arguments as msg +## -------------------- +catMsg <- function( msg=c() ){ + cat( MAIN_NAME, paste( msg, collapse="" ), "\n", sep='') +} + + +## ================================================== +## Start of analysis +## ================================================== +MAIN_NAME <- '[INFO] ' +catMsg( "Starting QDNAseq-plot wrapper" ) +catMsg( "Loading R libraries" ) + +## supress msg to allow R to finish with non-error msg +suppressWarnings( suppressMessages( library( QDNAseq, quietly = TRUE ) ) ) + +## only one param: the tmp config file +cmdLineArgs <- commandArgs(TRUE) +config <- cmdLineArgs[1] + +## sourcing the config file will load all input params +## many variables are imported via sourced "config" +source( config ) # outputPngPath, outputPdfPath, allOrOne, rdsFilePath +#cat( "ALL? ", allOrOne, sep='' ) + +## desparate tries to make png text scale well, damn you R...! +PLOT_RES <- min( PLOT_WIDTH, PLOT_HEIGHT ) / 6.3 +PAR_SET <- list( pch=22 ) +systemUser <- system("whoami",T) +qdnaseqVersion <- packageDescription( "QDNAseq" )$Version +rVersion <- R.version.string +catMsg( c("QDNAseq version: ", qdnaseqVersion) ) +catMsg( c( rVersion ) ) + +qdnaseqObject <- readRDS( rdsFilePath ) +## COPYNUMBER PLOT +sample <- SAMPLE_INDEX +png( outputPngPath, width=PLOT_WIDTH, height=PLOT_HEIGHT, res=PLOT_RES ) + par( PAR_SET ) + plot( qdnaseqObject[ ,sample ] ) + #mtext( "plotted in galaxy", 3 ) + abline( h=c(-2,-1,1,2,3,4), lty=1, lwd=0.5, col="grey" ) +dev.off() + + +## all ok +q(status=0)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QDNAseq-plot.xml Wed Mar 04 08:42:14 2015 -0500 @@ -0,0 +1,154 @@ +<tool id="QDNAseq-plot" name="QDNAseq-plot" version="0.0.1" force_history_refresh="True"> + + <requirements> + + <!-- R 3.1.0 dependency will be used instead when available, now default R is used, see command --> + <!-- <requirement type="package" version="3.1.0">R</requirement> --> + <!-- <requirement type="package" version="1.2.2">qdnaseq</requirement> --> + + </requirements> + + <description>Plot QDNAseq copy-number/segments/calls profile</description> + + <!-- change to /full/path/to/Rscript if required (eg /ccagc/lib/R/R-3.1.0/bin/Rscript) --> + <command interpreter="Rscript"> + QDNAseq-plot.R + $cfg + </command> + + <stdio> + <!-- Anything higher than 0 means the R script didnt finish (correctly) --> + <!-- Because different R packages deal with err/warn differently unable to waterproof this --> + <exit_code range="1:" level="fatal" description="R script finished too early, check log" /> + </stdio> + + <inputs> + + <!-- ==================== --> + <!-- General inputs --> + <!-- ==================== --> + + <!-- Job name: must contain non-whitespace chars --> + <param name="jobName" type="text" optional="false" label="Analysis/ouput name" help="Supply a name for the outputs to remind you what they contain" value="TEST"> + <!-- <validator type="empty_field" /> --> + <validator type="regex" message="No whitespace characters allowed">^[^\s\\]*$</validator> + </param> + + <!-- ==================== --> + <!-- Input RDS --> + <!-- ==================== --> + <param name="rdsFile" type="data" optional="False" format="rds" label="Input RDS file (QDNAseq R object)" help="RDS file should contain a QDNAseq/CGHcall object. If segment and/or call values are present these are added to the plot." /> + + <!-- ==================== --> + <!-- One pdf with all samples or a png of one chosen sample --> + <!-- ==================== --> + <!-- + <conditional name="all_or_one"> + <param name="show" type="select" label="Plot all samples in RDS object or choose one" help=""> + <option value="all">Plot all samples</option> + <option value="one">Choose which one</option> + </param> + <when value="one"> + <param name="sample_nr" type="integer" required="True" value="1" label="sample-nr (integer)" help="" /> + </when> + <when value="all"> + <param name="plotAll" type="hidden" value="" /> + </when> + + </conditional> + --> + <param name="sample_index" type="integer" required="True" value="1" label="Sample-index (integer)" help="The RDS input object can contain data from multiple individuals, this number tells the script which one to plot. Plotting multiple at the same time is not supported." /> + + <!-- ==================== --> + <!-- Optional advanced options --> + <!-- ==================== --> + <conditional name="advanced"> + <param name="show" type="select" label="Extra options" help="Select yes to show extra options"> + <option value="no">no</option> + <option value="yes">yes</option> + </param> + <when value="yes"> + <!-- ==================== --> + <!-- Optional graphical/plotting options --> + <!-- ==================== --> + <param name="plot_width" size="3" type="integer" value="1440" label="Width of the png image produced" /> + <param name="plot_height" size="3" type="integer" value="720" label="Height of the png image produced" /> + </when> + + <!-- need to set defaults because params are passed to R regardless of conditional opened/closed --> + <when value="no"> + <param name="plot_width" type="hidden" value="1440" /> + <param name="plot_height" type="hidden" value="720" /> + </when> + </conditional> + + </inputs> + <!-- ==================== --> + <!-- Config file to pass params to R script --> + <!-- ==================== --> + <configfiles> + <configfile name="cfg"> +## Desc: this file is sourced in QDNAseq-plot.R wrapper script +## as means to pass all galaxy params to R + +## ----- +## required params +## ----- +"${jobName}" -> outputName +"${outputPng}" -> outputPngPath +"${rdsFile}" -> rdsFilePath +as.integer( "${sample_index}" ) -> SAMPLE_INDEX + +## ----- +## extra options +## ----- +as.integer( "${advanced.plot_width}" ) -> PLOT_WIDTH +as.integer( "${advanced.plot_height}" ) -> PLOT_HEIGHT + + </configfile> + </configfiles> + + <!-- ==================== --> + <!-- One image as output --> + <!-- ==================== --> + <outputs> + <data format="png" name="outputPng" label="QDNAseq: ${jobName} PNG plot" /> + <!-- + <data format="png" name="outputPng" label="QDNAseq: ${jobName} PNG plot"> + <filter>(all_or_one['show'] == 'one')</filter> + </data> + --> + </outputs> + + <help> +.. class:: infomark + +**Introduction** + +This tool is a wrapper for the plot function of the R Bioconductor package QDNAseq_ + +.. _QDNAseq: http://www.bioconductor.org/packages/release/bioc/html/QDNAseq.html + +----- + +.. class:: warningmark + +As there is no R 3.1.0 galaxy-package yet (a requirement for QDNAseq), the **dependencies** need to be installed by hand and available to the user under which galaxy runs: R (3.1.0) and bioconductor package QDNAseq (>= 1.2.2). In case the default R is not 3.1.0, also the wrapper xml must be updated to include the correct path during installation of this tool. + +----- + +**Citation** + +For the underlying QDNAseq R package please cite: +Scheinin I, Sie D, Bengtsson H, van de Wiel MA, Olshen AB, van Thuijl HF, van Essen HF, Eijk PP, Rustenburg F, Meijer GA, Reijneveld JC, Wesseling P, Pinkel D, Albertson DG and Ylstra B (2014). “DNA copy number analysis of fresh and formalin-fixed specimens by shallow whole-genome sequencing with identification and exclusion of problematic regions in the genome assembly.” Genome Research. doi:10.1101/gr.175141.114. + +See also the bioconductor package_ documentation. + +.. _package: http://www.bioconductor.org/packages/release/bioc/html/QDNAseq.html + +.. image:: LGG150_copynumber.png +.. image:: LGG150_copynumberSegmented.png + + </help> + +</tool>
--- a/QDNAseq.R Thu Nov 06 05:48:52 2014 -0500 +++ b/QDNAseq.R Wed Mar 04 08:42:14 2015 -0500 @@ -131,14 +131,21 @@ return(storeList) } +## ================================================== +## Unused but potential usefull code +## ================================================== +#@ a bit hacky galaxy way to allow an unknown number of output files based on param selection +#@ see: https://wiki.galaxyproject.org/Admin/Tools/Multiple%20Output%20Files +#historyName <- paste(binSize, 'kbp-IGV', sep="") +#igvFile <- paste( newFilePath, "/primary_", outputId, "_", historyName, "_visible_txt", sep="" ) ## ================================================== ## Start of analysis ## ================================================== MAIN_NAME <- '[INFO] ' catMsg( "Starting QDNAseq wrapper" ) +#catMsg( R.version.string ) catMsg( "Loading R libraries" ) -catMsg( R.version.string ) ## supress msg to allow R to finish with non-error msg suppressWarnings( suppressMessages( library( QDNAseq, quietly = TRUE ) ) ) @@ -157,6 +164,9 @@ ## many variables are imported via sourced "config" source( config ) +## if calling requested we always need segmenting first as well +if ( doCall ){ doSegment <- TRUE } + ## desparate tries to make png text scale well, damn you R...! PLOT_RES <- min( PLOT_WIDTH, PLOT_HEIGHT ) / 6.3 PAR_SET <- list( pch=22 ) @@ -171,7 +181,15 @@ ## get the comma separated list of chromosomes to exclude excludeChrs <- unlist( strsplit( excludeChrsString, ",") ) -binSizes <- as.numeric( unlist( strsplit( binSizesString, ",") ) ) + +## format binSizes back to integers because stupid galaxy doesn't do what I want +#print( binSizesString ) +binSizes <- gsub( 'kb', '', binSizesString ) # remove the kb string to get integers +#print( binSizes ) +binSizes <- gsub( 'bin', '', binSizes ) # remove the kb string to get integers +#print( binSizes ) +binSizes <- as.numeric( unlist( strsplit( binSizes, ",") ) ) +#print( binSizes ) ## ------------------------ @@ -205,11 +223,11 @@ plotted_images <- list() # to keep track of images for later linking regions <- list() # will contain the segments -outputFiles <- list() ## ------------------------ ## in case of debug just use inbuilt LGG data for speedup if ( debug ){ + catMsg( c("Built in data only contains binsize 15kb so overriding chosen binSizes to single 15kb") ) binSizes <- c(15) bamsPaths <- c( "BUILD_IN_DATA") bamsNames <- c( "LGG150") @@ -219,22 +237,23 @@ for ( binSize in binSizes ){ + catMsg( c("Starting analysis for binSize: ", binSize) ) ## ------------------------ ## construct output file-names and -paths ## ------------------------ - robjReadCoName <- paste( binSize, 'kbp_QDNAseqReadCounts.rds', sep='') - robjCopyNrName <- paste( binSize, 'kbp_QDNAseqCopyNumbers.rds', sep='') - igvCopyNrName <- paste( binSize, 'kbp_QDNAseqCopyNumbers.igv', sep='') - robjSegmntName <- paste( binSize, 'kbp_QDNAseqCopyNumbersSegmented.rds', sep='') + rdsReadName <- paste( binSize, 'kbp_QDNAseqReadCounts.rds', sep='') + rdsCopyName <- paste( binSize, 'kbp_QDNAseqCopyNumbers.rds', sep='') + rdsSegmName <- paste( binSize, 'kbp_QDNAseqCopyNumbersSegmented.rds', sep='') + rdsCallName <- paste( binSize, 'kbp_QDNAseqCopyNumbersCalled.rds', sep='') + igvCopyName <- paste( binSize, 'kbp_QDNAseqCopyNumbers.igv', sep='') + igvSegmName <- paste( binSize, 'kbp_QDNAseqCopyNumbersSegmented.igv', sep='') + igvCallName <- paste( binSize, 'kbp_QDNAseqCopyNumbersCalled.igv', sep='') + regiOutputName <- paste( binSize, 'kbp_QDNAseqRegions.rds', sep='') noiseImgName <- paste( binSize, 'kbp_QDNAseqNoiseplot.png', sep='') - robjReadCoPath <- paste( outputPath, '/', robjReadCoName, sep='') - robjCopyNrPath <- paste( outputPath, '/', robjCopyNrName, sep='') - robjSegmntPath <- paste( outputPath, '/', robjSegmntName, sep='') - robjRegionPath <- paste( outputPath, '/', regiOutputName, sep='') - igvCopyNrPath <- paste( outputPath, '/', igvCopyNrName, sep='') - noiseImgPath <- paste( outputPath, '/', noiseImgName, sep='') + rdsRegiPath <- paste( outputPath, '/', regiOutputName, sep='') + noiseImgPath <- paste( outputPath, '/', noiseImgName, sep='') binAnnFile <- paste( TOOL_PATH, '/static/binannotation/', binSize, 'kbp_binAnnotations.rds', sep="" ) if ( file.exists(binAnnFile) ){ @@ -246,7 +265,7 @@ ## in case of debug just use inbuilt LGG data for speedup if ( debug ){ - data(LGG150) + data( LGG150 ) readCounts <- LGG150 }else{ ## provide bamnames because in galaxy everyting is called "dataset_###" @@ -260,27 +279,49 @@ copyNumbersSmooth <- smoothOutlierBins( copyNumbersNormalized ) sampleNames <- readCountsFiltered@phenoData@data$name - ## save objects to output dir - saveRDS( readCountsFiltered, robjReadCoPath ); - saveRDS( copyNumbersSmooth, robjCopyNrPath ); - exportBins( copyNumbersSmooth, file=igvCopyNrPath, format="igv" ) + ## set file to output if output requested + outputData <- copyNumbersSmooth + outputType <- 'copynumber' + outputLogT <- TRUE + rdsReadPath <- paste( outputPath, '/', rdsReadName, sep='') + saveRDS( readCounts, rdsReadPath ); + rdsPath <- paste( outputPath, '/', rdsCopyName, sep='') + igvPath <- paste( outputPath, '/', igvCopyName, sep='') + + ## proceed with segmenting / calling if requested + if ( doSegment ){ + copyNumbersSegmented <- segmentBins( copyNumbersSmooth, undo.splits=undoSplits, undo.SD=undoSD, transformFun="sqrt" ) + copyNumbersSegmented <- normalizeSegmentedBins( copyNumbersSegmented ) + outputData <- copyNumbersSegmented + outputType <- 'segments' + igvPath <- paste( outputPath, '/', rdsSegmName, sep='') + rdsPath <- paste( outputPath, '/', igvSegmName, sep='') + } + if ( doCall ){ + copyNumbersCalled <- callBins(copyNumbersSegmented) + outputData <- copyNumbersCalled + outputType <- 'calls' + outputLogT <- FALSE # call values should not be transformed at output + rdsPath <- paste( outputPath, '/', rdsCallName, sep='') + igvPath <- paste( outputPath, '/', igvCallName, sep='') + } + + ## save the QDNAseq objects and tsv file of highest level (calls or segments) + saveRDS( outputData, rdsPath ); + exportBins( outputData, file=igvPath, format="igv", type=outputType, logTransform=outputLogT ) ## also save objects for galaxy history output if requested - if ( doOutputCopynumbersIgv ){ - #@ a bit hacky galaxy way to allow an unknown number of output files based on param selection - #@ see: https://wiki.galaxyproject.org/Admin/Tools/Multiple%20Output%20Files - historyName <- paste(binSize, 'kbp-IGV', sep="") - igvFile <- paste( newFilePath, "/primary_", outputId, "_", historyName, "_visible_txt", sep="" ) - exportBins( copyNumbersSmooth, file=igvFile, format="igv" ) - catMsg( c("Exported igv file to history for ", binSize, "kbp bin") ) + if ( txt2history ){ + fileId <- paste('txt_', binSize, sep='') + historyOutputPath <- historyOutputFiles[[ fileId ]] + catMsg( c("About to export igv/txt file to history for ", binSize, "kbp bin") ) + exportBins( outputData, file=historyOutputPath, format="igv", type=outputType, logTransform=outputLogT ) } - - ## proceed with calling if requested - if ( doSegment ){ - copyNumbersSegmented <- segmentBins( copyNumbersSmooth, undo.splits=undoSplits, undo.SD=undoSD ) - copyNumbersSegmented <- normalizeSegmentedBins( copyNumbersSegmented ) - cgh <- makeCgh( copyNumbersSegmented ) - saveRDS( copyNumbersSegmented, robjSegmntPath ); + if ( rds2history ){ + fileId <- paste('rds_', binSize, sep='') + rdsHistoryOutputPath <- historyOutputFiles[[ fileId ]] + catMsg( c("About to export rds file to history for ", binSize, "kbp bin") ) + saveRDS( outputData, file=rdsHistoryOutputPath ) } ## ------------------------ @@ -293,6 +334,7 @@ binSize <- as.character( binSize ) # to avoid R using it as array index... (*#$^@ you R!) binSizeString <- paste( binSize, 'kbp', sep='') + cgh <- makeCgh( outputData ) # needed for fuseRegions function for (i in 1:length(sampleNames) ){ @@ -308,7 +350,7 @@ png( img_file_path, width=PLOT_WIDTH, height=PLOT_HEIGHT, res=PLOT_RES ); par( PAR_SET ) plot( copyNumbersSmooth[ ,sample ], main=paste(sample, ": CopyNumbers", sep="") ) - mtext( paste( binSizeString, " bins", sep=""), 3 ) + mtext( paste( "(", binSizeString, " bins)", sep=""), 3 ) abline( h=c(-2,-1,1,2,3,4), lty=1, lwd=0.5, col="grey" ) dev.off() @@ -319,16 +361,17 @@ img_file <- paste( sample, '_', binSize, 'kbp_QDNAseq', type, '.png', sep='') img_file_path <- paste( outputPath, '/', img_file, sep='' ) - ## COPYNUMBER PLOT + ## COPYNUMBER + SEGMENTS PLOT png( img_file_path, width=PLOT_WIDTH, height=PLOT_HEIGHT, res=PLOT_RES ); par( PAR_SET ) - plot( copyNumbersSegmented[ ,sample ], main=paste(sample, ": CopyNumbers and Segments", sep="") ) + plot( copyNumbersSegmented[ ,sample ], main=paste(sample, ": CopyNumbers (Segmented)", sep="") ) mtext( paste( "(", binSizeString, " bins)", sep=""), 3 ) abline( h=c(-2,-1,1,2,3,4), lty=1, lwd=0.5, col="grey" ) dev.off() plotted_images[[ paste(binSize, sample, type, sep="_" ) ]] <- img_file + ## if segmented we can also retrieve the segment locations catMsg( c(" Fusing regions of sample: ", sample) ) regions[[ sample ]] <- fuseRegions( cgh[, sample] ) @@ -336,13 +379,29 @@ catMsg( c( ' sample "', sample, '" has ', region_count, " regions" ) ) plotted_images[[ paste(binSize, sample, 'region_count', sep="_" ) ]] <- region_count } + + if ( doCall ){ + type <- 'Called' + img_file <- paste( sample, '_', binSize, 'kbp_QDNAseq', type, '.png', sep='') + img_file_path <- paste( outputPath, '/', img_file, sep='' ) + + ## COPYNUMBER + SEGMENTS + CALLS PLOT + png( img_file_path, width=PLOT_WIDTH, height=PLOT_HEIGHT, res=PLOT_RES ); + par( PAR_SET ) + plot( copyNumbersCalled[ ,sample ], main=paste(sample, ": CopyNumbers (Segmented and Called)", sep="") ) + mtext( paste( "(", binSizeString, " bins)", sep=""), 3 ) + abline( h=c(-2,-1,1,2,3,4), lty=1, lwd=0.5, col="grey" ) + dev.off() + + plotted_images[[ paste(binSize, sample, type, sep="_" ) ]] <- img_file + } ## add USED read counts plotted_images[[ paste(binSize, sample, 'usedReads', sep="_" ) ]] <- usedReads } if ( doSegment ){ - saveRDS( regions, robjRegionPath ) + saveRDS( regions, rdsRegiPath ) plotted_images <- outputRegionsFromList( regions, outputBasename=outputName, outputDir=outputPath, binSize=binSize, storeList=plotted_images ) } }# end bin @@ -418,13 +477,20 @@ ## list with links to all output files ## ------------------------ cat( '<h3 class="qdnaseq">Output files</h3><p>', "\n") - cat( '<p>This table contains output files that can be used for local downstream analysis with the bioconductor QDNAseq package. For each bin-size / data-level there is a R data structure file with data of all samples. See ', htmlLink( WEB_LINK, 'the bioconductor QDNAseq documentation' ), ' for more information on how to work with these files</p>', "\n", sep='') + cat( '<p>This table contains output files that can be used for local downstream analysis with the bioconductor QDNAseq package. For each bin-size / data-level there is a R data structure file with data of all samples. See ', htmlLink( WEB_LINK, 'the bioconductor QDNAseq documentation' ), ' for more information on how to work with these files.</p>', "\n", sep='') cat( '<table class="pure-table pure-table-striped">', "\n" ) cat( '<thead><th>Type</th>', as.vector( mapply( paste, "<th>", binSizes, "kbp</th>", sep="" ) ),'</thead>', "\n" ) cat( "<tbody>", "\n") files <- list() - fileTypes <- c( 'ReadCounts.rds', 'CopyNumbers.rds' ) - if ( doSegment ){ fileTypes <- c( fileTypes, 'CopyNumbersSegmented.rds') } + #fileTypes <- c( 'ReadCounts.rds', 'CopyNumbers.rds' ) + fileTypes <- c( 'ReadCounts.rds' ) + if ( doCall ){ + fileTypes <- c( fileTypes, 'CopyNumbersCalled.rds') + }else if ( doSegment ){ + fileTypes <- c( fileTypes, 'CopyNumbersSegmented.rds') + }else { + fileTypes <- c( fileTypes, 'CopyNumbers.rds') + } for ( fileType in fileTypes ){ fileNames <- mapply( paste, binSizes, paste( 'kbp_QDNAseq', fileType, sep=''), sep='') @@ -441,7 +507,7 @@ width_t <- 100; height_t <- 40 ## thumb img cat( '<h3 class="qdnaseq">Results: overview</h3><p>', "\n") - cat( '<p>This table contains the visual results of the copy number aberration analysis. You can click on an image to jump to the larger version. If segmentation was performed as well the number of segments is shown and a file with genomic regions can be downloaded (just remember to inspect the results carefully as this is a more exprimental step).</p>', "\n", sep='') + cat( '<p>This table contains the visual results of the copy number aberration analysis. You can click on an image to jump to the larger version. If segmentation was performed as well the number of segments is shown and a file with genomic regions can be downloaded (just remember to inspect the results carefully as this is, together with optional calling afterwards, a more experimental type of analysis).</p>', "\n", sep='') plots_html <- '' colspan <- 1 @@ -468,6 +534,7 @@ html_copy_thumb <- htmlLink( path=paste('#', copy_img, sep=''), paste('<img src="',copy_img,'" alt="', bam_file, '" width="', width_t, '" height="', height_t, '">', sep='') ) html_copy_img <- htmlLink( path=copy_img, paste('<img id="', copy_img,'" src="',copy_img,'" alt="',bam_file, '" width="', width, '" height="', height, '">', sep='') ) html_segm_img <- '' + html_call_img <- '' html_bedGraph <- '' region_count <- '' htmlRow <- paste( htmlRow, '<td>', html_copy_thumb, '</td>' ) @@ -480,7 +547,11 @@ html_segm_img <- htmlLink( path=segm_img, paste('<img id="', segm_img,'" src="', segm_img,'" alt="', bam_file, '" width="', width, '" height="', height,'">', sep='') ) htmlRow <- paste( htmlRow, '<td>', region_count, ' (', html_bedGraph, ')</td>', sep="" ) } - plots_html <- paste( plots_html, html_copy_img, "\n", html_segm_img, "\n<br \\>\n", sep='' ) + if ( doCall ){ + call_img <- plotted_images[[ paste(binSize, bam_file, 'Called', sep="_" ) ]] + html_call_img <- htmlLink( path=call_img, paste('<img id="', call_img,'" src="', call_img,'" alt="', bam_file, '" width="', width, '" height="', height,'">', sep='') ) + } + plots_html <- paste( plots_html, html_copy_img, "\n", html_segm_img, "\n", html_call_img, "\n<br \\>\n", sep='' ) } plots_html <- paste( plots_html, "\n<hr \\>\n", sep='' ) ## add info to overview table, including small thumbnails
--- a/QDNAseq.xml Thu Nov 06 05:48:52 2014 -0500 +++ b/QDNAseq.xml Wed Mar 04 08:42:14 2015 -0500 @@ -1,11 +1,11 @@ -<tool id="QDNAseq" name="QDNAseq" version="0.0.2" force_history_refresh="True"> +<tool id="QDNAseq" name="QDNAseq" version="1.0.0" force_history_refresh="True"> <requirements> <requirement type="package" version="0.1.18">samtools</requirement> <!-- R 3.1.0 dependency will be used instead when available, now default R is used, see command --> <!-- <requirement type="package" version="3.1.0">R</requirement> --> - <!-- <requirement type="package" version="1.0.5">qdnaseq</requirement> --> + <!-- <requirement type="package" version="1.2.2">qdnaseq</requirement> --> <requirement type="set_environment">QDNASEQ_PATH</requirement> </requirements> @@ -22,7 +22,7 @@ <stdio> <!-- Anything higher than 0 means the R script didnt finish (correctly) --> <!-- Because different R packages deal with err/warn differently unable to waterproof this --> - <exit_code range="1:" level="fatal" description="R script didnt finish correctly, check log" /> + <exit_code range="1:" level="fatal" description="R script finished too early, check log" /> </stdio> <inputs> @@ -34,17 +34,17 @@ <!-- Job name: must contain non-whitespace chars --> <param name="jobName" type="text" optional="false" label="Analysis/ouput name" help="Supply a name for the outputs to remind you what they contain" value="TEST"> <validator type="empty_field" /> - <validator type="regex" message="This field should contain some non-whitespace character">.*\S</validator> + <validator type="regex" message="No whitespace characters allowed">^[^\s\\]+$</validator> </param> <!-- Bin Size: only certain sizes are supported by QDNAseq package --> - <param name="binSizes" type="select" optional="false" multiple="true" label="Select bin-sizes to use (kb)" help="Larger bin sizes provide faster analysis but lower resolution"> - <option value="1000" selected="true">1Mb</option> - <option value="100" selected="true">100kb</option> - <option value="30">30kb</option> - <option value="15" selected="true">15kb</option> - <option value="5">5kb</option> - <option value="1">1kb</option> + <param name="binSizes" type="select" display="checkboxes" optional="false" multiple="true" label="Select bin-sizes to use (kb)" help="Larger bin sizes provide faster analysis but lower resolution. NOTE: BAM files are traversed again for each binsize, so selecting multiple bin-sizes takes extra analysis time!"> + <option value="bin1000kb">1Mb</option> + <option value="bin100kb">100kb</option> + <option value="bin30kb">30kb</option> + <option value="bin15kb" selected="true">15kb</option> + <option value="bin5kb">5kb</option> + <option value="bin1kb">1kb</option> </param> <!-- Experiment type: only one type (SR50) supported now, maybe more in the future--> @@ -59,16 +59,42 @@ <param name="bams" type="data" multiple="true" optional="True" format="bam" label="Input BAMs" help="Select the BAM files to analyze" /> <!-- ==================== --> - <!-- Optional segmenting --> + <!-- Optional segmenting step --> <!-- ==================== --> <param name="doSegment" type="select" label="Also perform segmentation" help="Segmentation collects bins with similar ratio into regions"> + <option value="FALSE">no</option> <option value="TRUE">yes</option> + </param> + + <!-- ==================== --> + <!-- Optional calling step --> + <!-- ==================== --> + <param name="doCall" type="select" label="Also perform calling" help="Calling tries to determine a state for each segment (GAIN, LOSS, etc)"> <option value="FALSE">no</option> + <option value="TRUE">yes</option> + </param> + + <!-- ==================== --> + <!-- Optional hisotry output: copynumber TXT file --> + <!-- ==================== --> + <param name="txt2history" type="select" label="Also output copynumber TXT file to history"> + <option value="FALSE">no</option> + <option value="TRUE">yes</option> + </param> + + <!-- ==================== --> + <!-- Optional history output: R object RDS file --> + <!-- ==================== --> + <param name="rds2history" type="select" label="Also output copynumber RDS files to history"> + <option value="FALSE">no</option> + <option value="TRUE">yes</option> </param> <!-- ==================== --> <!-- Option to use your own bin annotations file --> <!-- ==================== --> + <!-- NOT IN USE YET --> + <!-- <conditional name="binannotations_source"> <param name="show" type="select" label="Bin annotations to use" help="Default bin-annotations are for GRCh37/hg19 and tuned for 50bp reads (single end)"> <option value="default">Default</option> @@ -82,6 +108,7 @@ </when> </conditional> + --> <!-- ==================== --> <!-- Optional advanced options --> @@ -92,11 +119,6 @@ <option value="yes">yes</option> </param> <when value="yes"> - - <param name="copynumbers_igv" type="select" label="Also output copynumber IGV file to history"> - <option value="FALSE">no</option> - <option value="TRUE">yes</option> - </param> <param name="undo_splits" type="select" label="undoSplits" help="If set to sdundo, see undoSD below"> <option value="sdundo">sdundo</option> @@ -137,7 +159,6 @@ <!-- need to set defaults because params are passed to R regardless of conditional opened/closed --> <when value="no"> - <param name="copynumbers_igv" type="hidden" value="FALSE" /> <param name="undoSD" type="hidden" value="1" /> <param name="undo_splits" type="hidden" value="sdundo" /> <param name="blacklist" type="hidden" value="TRUE" /> @@ -162,7 +183,7 @@ <!-- ==================== --> <configfiles> <configfile name="qdnaseq_cfg"> -## Desc: this file was sourced in QDNAseq R wrapper script +## Desc: this file is sourced in QDNAseq R wrapper script ## as means to pass all galaxy params to R ## ----- @@ -180,14 +201,34 @@ "${htmlFile.id}" -> outputId "${__new_file_path__}" -> newFilePath +list() -> historyOutputFiles + +"${txt_1}" -> historyOutputFiles[[ 'txt_1' ]] +"${txt_5}" -> historyOutputFiles[[ 'txt_5' ]] +"${txt_15}" -> historyOutputFiles[[ 'txt_15' ]] +"${txt_30}" -> historyOutputFiles[[ 'txt_30' ]] +"${txt_100}" -> historyOutputFiles[[ 'txt_100' ]] +"${txt_1000}" -> historyOutputFiles[[ 'txt_1000' ]] + +"${rds_1}" -> historyOutputFiles[[ 'rds_1' ]] +"${rds_5}" -> historyOutputFiles[[ 'rds_5' ]] +"${rds_15}" -> historyOutputFiles[[ 'rds_15' ]] +"${rds_30}" -> historyOutputFiles[[ 'rds_30' ]] +"${rds_100}" -> historyOutputFiles[[ 'rds_100' ]] +"${rds_1000}" -> historyOutputFiles[[ 'rds_1000' ]] + + "${htmlFile.files_path}" -> outputPath as.logical( "${doSegment}" ) -> doSegment +as.logical( "${doCall}" ) -> doCall as.logical( "${debug}" ) -> debug ## ----- ## own bin-annotations file options ## ----- +<!-- "${binannotations_source.binannotation_file}" -> binAnnotations +--> ## ----- ## advanced options @@ -196,11 +237,8 @@ as.logical( "${advanced.blacklist}" ) -> filterBlacklistedBins as.integer( "${advanced.mappability}" ) -> mappabilityCutoff "${advanced.undo_splits}" -> undoSplits -as.logical( "${advanced.copynumbers_igv}" ) -> doOutputCopynumbersIgv - -## #for binSize in $binSizes}.split(",")# -## "${binSize}kbp_${igvCopyNumbers}" -> copyNumbersIgvDatasetFile -## #end for +as.logical( "${txt2history}" ) -> txt2history +as.logical( "${rds2history}" ) -> rds2history ## ----- ## plot options @@ -230,7 +268,49 @@ <!-- main output is a html report --> <!-- ...but there can be more outputs using the id of the htmlFile output --> - <data format="html" name="htmlFile" label="QDNAseq: ${jobName}" /> + + <data format="html" name="htmlFile" label="QDNAseq: ${jobName} report" /> + + <!-- WHY does there seem to be no way to use split() within this code in galaxy!!! --> + <!-- now have to fall back to using unique names within binSizes instead of just integers --> + <!-- Problem with integers is that both "1" and "5" are also present in eg "15,100" --> + <data format="tsv" name="txt_1000" label="QDNAseq: ${jobName} txt 1000kb"> + <filter>( "bin1000kb" in binSizes and txt2history == 'TRUE')</filter> + </data> + <data format="tsv" name="txt_100" label="QDNAseq: ${jobName} txt 100kb"> + <filter>("bin100kb" in binSizes and txt2history == 'TRUE')</filter> + </data> + <data format="tsv" name="txt_30" label="QDNAseq: ${jobName} txt 30kb"> + <filter>("bin30kb" in binSizes and txt2history == 'TRUE')</filter> + </data> + <data format="tsv" name="txt_15" label="QDNAseq: ${jobName} txt 15kb"> + <filter>("bin15kb" in binSizes and txt2history == 'TRUE')</filter> + </data> + <data format="tsv" name="txt_5" label="QDNAseq: ${jobName} txt 5kb"> + <filter>("bin5kb" in binSizes and txt2history == 'TRUE')</filter> + </data> + <data format="tsv" name="txt_1" label="QDNAseq: ${jobName} txt 1kb"> + <filter>("bin1kb" in binSizes and txt2history == 'TRUE')</filter> + </data> + + <data format="rds" name="rds_1000" label="QDNAseq: ${jobName} rds 1000kb"> + <filter>( "bin1000kb" in binSizes and rds2history == 'TRUE')</filter> + </data> + <data format="rds" name="rds_100" label="QDNAseq: ${jobName} rds 100kb"> + <filter>( "bin100kb" in binSizes and rds2history == 'TRUE')</filter> + </data> + <data format="rds" name="rds_30" label="QDNAseq: ${jobName} rds 30kb"> + <filter>( "bin30kb" in binSizes and rds2history == 'TRUE')</filter> + </data> + <data format="rds" name="rds_15" label="QDNAseq: ${jobName} rds 15kb"> + <filter>( "bin15kb" in binSizes and rds2history == 'TRUE')</filter> + </data> + <data format="rds" name="rds_5" label="QDNAseq: ${jobName} rds 5kb"> + <filter>( "bin5kb" in binSizes and rds2history == 'TRUE')</filter> + </data> + <data format="rds" name="rds_1" label="QDNAseq: ${jobName} rds 1kb"> + <filter>( "bin1kb" in binSizes and rds2history == 'TRUE')</filter> + </data> </outputs>
--- a/static/css/QDNAseq.css Thu Nov 06 05:48:52 2014 -0500 +++ b/static/css/QDNAseq.css Wed Mar 04 08:42:14 2015 -0500 @@ -1,4 +1,17 @@ -/* --- QDNAseq CSS --- */ +/*! +Pure v0.5.0 +Copyright 2014 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +https://github.com/yui/pure/blob/master/LICENSE.md +*/ +/*! +normalize.css v1.1.3 | MIT License | git.io/normalize +Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.css v1.1.3 | MIT License | git.io/normalize */ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-5-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-2-24,.pure-u-3-24,.pure-u-4-24,.pure-u-5-24,.pure-u-6-24,.pure-u-7-24,.pure-u-8-24,.pure-u-9-24,.pure-u-10-24,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-1-12,.pure-u-2-24{width:8.3333%;*width:8.3023%}.pure-u-1-8,.pure-u-3-24{width:12.5%;*width:12.469%}.pure-u-1-6,.pure-u-4-24{width:16.6667%;*width:16.6357%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-1-4,.pure-u-6-24{width:25%;*width:24.969%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-1-3,.pure-u-8-24{width:33.3333%;*width:33.3023%}.pure-u-3-8,.pure-u-9-24{width:37.5%;*width:37.469%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-5-12,.pure-u-10-24{width:41.6667%;*width:41.6357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-1-2,.pure-u-12-24{width:50%;*width:49.969%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-7-12,.pure-u-14-24{width:58.3333%;*width:58.3023%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-5-8,.pure-u-15-24{width:62.5%;*width:62.469%}.pure-u-2-3,.pure-u-16-24{width:66.6667%;*width:66.6357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-3-4,.pure-u-18-24{width:75%;*width:74.969%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-5-6,.pure-u-20-24{width:83.3333%;*width:83.3023%}.pure-u-7-8,.pure-u-21-24{width:87.5%;*width:87.469%}.pure-u-11-12,.pure-u-22-24{width:91.6667%;*width:91.6357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-u-1,.pure-u-1-1,.pure-u-5-5,.pure-u-24-24{width:100%}.pure-button{display:inline-block;*display:inline;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-family:inherit;font-size:100%;*font-size:90%;*overflow:visible;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);*color:#444;border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=text]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input:not([type]):focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:thin dotted #333;outline:1px auto #129FEA}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=text][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form textarea:focus:invalid,.pure-form select:focus:invalid{color:#b94a48;border-color:#ee5f5b}.pure-form input:focus:invalid:focus,.pure-form textarea:focus:invalid:focus,.pure-form select:focus:invalid:focus{border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=text],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked select,.pure-form-stacked label,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned textarea,.pure-form-aligned select,.pure-form-aligned .pure-help-inline,.pure-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 10em}.pure-form input.pure-input-rounded,.pure-form .pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input{display:block;padding:10px;margin:0;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus{z-index:2}.pure-form .pure-group input:first-child{top:1px;border-radius:4px 4px 0 0}.pure-form .pure-group input:last-child{top:-2px;border-radius:0 0 4px 4px}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=text],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message-inline,.pure-form-message{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu ul{position:absolute;visibility:hidden}.pure-menu.pure-menu-open{visibility:visible;z-index:2;width:100%}.pure-menu ul{left:-10000px;list-style:none;margin:0;padding:0;top:-10000px;z-index:1}.pure-menu>ul{position:relative}.pure-menu-open>ul{left:0;top:0;visibility:visible}.pure-menu-open>ul:focus{outline:0}.pure-menu li{position:relative}.pure-menu a,.pure-menu .pure-menu-heading{display:block;color:inherit;line-height:1.5em;padding:5px 20px;text-decoration:none;white-space:nowrap}.pure-menu.pure-menu-horizontal>.pure-menu-heading{display:inline-block;*display:inline;zoom:1;margin:0;vertical-align:middle}.pure-menu.pure-menu-horizontal>ul{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu li a{padding:5px 20px}.pure-menu-can-have-children>.pure-menu-label:after{content:'\25B8';float:right;font-family:'Lucida Grande','Lucida Sans Unicode','DejaVu Sans',sans-serif;margin-right:-20px;margin-top:-1px}.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-separator{background-color:#dfdfdf;display:block;height:1px;font-size:0;margin:7px 2px;overflow:hidden}.pure-menu-hidden{display:none}.pure-menu-fixed{position:fixed;top:0;left:0;width:100%}.pure-menu-horizontal li{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu-horizontal li li{display:block}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label:after{content:"\25BE"}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-horizontal li.pure-menu-separator{height:50%;width:1px;margin:0 7px}.pure-menu-horizontal li li.pure-menu-separator{height:1px;width:auto;margin:7px 2px}.pure-menu.pure-menu-open,.pure-menu.pure-menu-horizontal li .pure-menu-children{background:#fff;border:1px solid #b7b7b7}.pure-menu.pure-menu-horizontal,.pure-menu.pure-menu-horizontal .pure-menu-heading{border:0}.pure-menu a{border:1px solid transparent;border-left:0;border-right:0}.pure-menu a,.pure-menu .pure-menu-can-have-children>li:after{color:#777}.pure-menu .pure-menu-can-have-children>li:hover:after{color:#fff}.pure-menu .pure-menu-open{background:#dedede}.pure-menu li a:hover,.pure-menu li a:focus{background:#eee}.pure-menu li.pure-menu-disabled a:hover,.pure-menu li.pure-menu-disabled a:focus{background:#fff;color:#bfbfbf}.pure-menu .pure-menu-disabled>a{background-image:none;border-color:transparent;cursor:default}.pure-menu .pure-menu-disabled>a,.pure-menu .pure-menu-can-have-children.pure-menu-disabled>a:after{color:#bfbfbf}.pure-menu .pure-menu-heading{color:#565d64;text-transform:uppercase;font-size:90%;margin-top:.5em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dfdfdf}.pure-menu .pure-menu-selected a{color:#000}.pure-menu.pure-menu-open.pure-menu-fixed{border:0;border-bottom:1px solid #b7b7b7}.pure-paginator{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;list-style:none;margin:0;padding:0}.opera-only :-o-prefocus,.pure-paginator{word-spacing:-.43em}.pure-paginator li{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-paginator .pure-button{border-radius:0;padding:.8em 1.4em;vertical-align:top;height:1.1em}.pure-paginator .pure-button:focus,.pure-paginator .pure-button:active{outline-style:none}.pure-paginator .prev,.pure-paginator .next{color:#C0C1C3;text-shadow:0 -1px 0 rgba(0,0,0,.45)}.pure-paginator .prev{border-radius:2px 0 0 2px}.pure-paginator .next{border-radius:0 2px 2px 0}@media (max-width:480px){.pure-menu-horizontal{width:100%}.pure-menu-children li{display:block;border-bottom:1px solid #000}}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child td,.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0} + +/* --- QDNAseq extra CSS --- */ body{ padding: 0px 20px; } pre { padding: 0px 25px; } h3.qdnaseq{ color: #355681; border-bottom: 1px solid #355681;}
--- a/tool_dependencies.xml Thu Nov 06 05:48:52 2014 -0500 +++ b/tool_dependencies.xml Wed Mar 04 08:42:14 2015 -0500 @@ -5,7 +5,7 @@ <repository changeset_revision="c0f72bdba484" name="package_samtools_0_1_18" owner="devteam" prior_installation_required="TRUE" toolshed="https://testtoolshed.g2.bx.psu.edu" /> </package> - <!-- As soon as R 3_1_0 package works with all packages, all dependencies will be set via "package_qdnaseq_1_0_5" --> + <!-- As soon as R 3_1_0 package works with all packages, all dependencies will be set via "package_qdnaseq_1_2_2" --> <!-- Currently these have to be manually installed by installing Bioconductor package "QDNAseq" --> <!-- @@ -15,8 +15,8 @@ --> <!-- - <package name="qdnaseq" version="1.0.5"> - <repository name="package_qdnaseq_1_0_5" owner="stef" prior_installation_required="TRUE"/> + <package name="qdnaseq" version="1.2.2"> + <repository name="package_qdnaseq_1_2_2" owner="stef" prior_installation_required="TRUE"/> </package> -->