mirror of
https://github.com/MillironX/nf-core_modules.git
synced 2024-11-14 05:43:08 +00:00
df60a58426
* round the < to ( to make markdown work for meta.yml * changing md5sums and stub output so it doesnt trigger the empty file linting error
155 lines
6.1 KiB
Text
155 lines
6.1 KiB
Text
process ASCAT {
|
|
tag "$meta.id"
|
|
label 'process_medium'
|
|
|
|
conda (params.enable_conda ? "bioconda::ascat=3.0.0 bioconda::cancerit-allelecount-4.3.0": null)
|
|
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
|
|
'https://depot.galaxyproject.org/singularity/mulled-v2-c278c7398beb73294d78639a864352abef2931ce:dfe5aaa885de434adb2b490b68972c5840c6d761-0':
|
|
'quay.io/biocontainers/mulled-v2-c278c7398beb73294d78639a864352abef2931ce:dfe5aaa885de434adb2b490b68972c5840c6d761-0' }"
|
|
|
|
input:
|
|
tuple val(meta), path(input_normal), path(index_normal), path(input_tumor), path(index_tumor)
|
|
path(allele_files)
|
|
path(loci_files)
|
|
|
|
output:
|
|
tuple val(meta), path("*png"), emit: png
|
|
tuple val(meta), path("*cnvs.txt"), emit: cnvs
|
|
tuple val(meta), path("*purityploidy.txt"), emit: purityploidy
|
|
tuple val(meta), path("*segments.txt"), emit: segments
|
|
path "versions.yml", emit: versions
|
|
|
|
when:
|
|
task.ext.when == null || task.ext.when
|
|
|
|
script:
|
|
def args = task.ext.args ?: ''
|
|
def prefix = task.ext.prefix ?: "${meta.id}"
|
|
def gender = args.gender ? "$args.gender" : "NULL"
|
|
def genomeVersion = args.genomeVersion ? "$args.genomeVersion" : "NULL"
|
|
def purity = args.purity ? "$args.purity" : "NULL"
|
|
def ploidy = args.ploidy ? "$args.ploidy" : "NULL"
|
|
def gc_files = args.gc_files ? "$args.gc_files" : "NULL"
|
|
|
|
def minCounts_arg = args.minCounts ? ",minCounts = $args.minCounts" : ""
|
|
def chrom_names_arg = args.chrom_names ? ",chrom_names = $args.chrom_names" : ""
|
|
def min_base_qual_arg = args.min_base_qual ? ",min_base_qual = $args.min_base_qual" : ""
|
|
def min_map_qual_arg = args.min_map_qual ? ",min_map_qual = $args.min_map_qual" : ""
|
|
def ref_fasta_arg = args.ref_fasta ? ",ref.fasta = '$args.ref_fasta'" : ""
|
|
def skip_allele_counting_tumour_arg = args.skip_allele_counting_tumour ? ",skip_allele_counting_tumour = $args.skip_allele_counting_tumour" : ""
|
|
def skip_allele_counting_normal_arg = args.skip_allele_counting_normal ? ",skip_allele_counting_normal = $args.skip_allele_counting_normal" : ""
|
|
|
|
|
|
|
|
"""
|
|
#!/usr/bin/env Rscript
|
|
library(RColorBrewer)
|
|
library(ASCAT)
|
|
options(bitmapType='cairo')
|
|
|
|
|
|
#prepare from BAM files
|
|
ascat.prepareHTS(
|
|
tumourseqfile = "$input_tumor",
|
|
normalseqfile = "$input_normal",
|
|
tumourname = "Tumour",
|
|
normalname = "Normal",
|
|
allelecounter_exe = "alleleCounter",
|
|
alleles.prefix = "$allele_files",
|
|
loci.prefix = "$loci_files",
|
|
gender = "$gender",
|
|
genomeVersion = "$genomeVersion",
|
|
nthreads = $task.cpus
|
|
$minCounts_arg
|
|
$chrom_names_arg
|
|
$min_base_qual_arg
|
|
$min_map_qual_arg
|
|
$ref_fasta_arg
|
|
$skip_allele_counting_tumour_arg
|
|
$skip_allele_counting_normal_arg
|
|
)
|
|
|
|
|
|
#Load the data
|
|
ascat.bc = ascat.loadData(
|
|
Tumor_LogR_file = "Tumour_tumourLogR.txt",
|
|
Tumor_BAF_file = "Tumour_normalBAF.txt",
|
|
Germline_LogR_file = "Tumour_normalLogR.txt",
|
|
Germline_BAF_file = "Tumour_normalBAF.txt",
|
|
genomeVersion = "$genomeVersion",
|
|
gender = "$gender"
|
|
)
|
|
|
|
#optional GC wave correction
|
|
if(!is.null($gc_files)){
|
|
ascat.bc = ascat.GCcorrect(ascat.bc, $gc_files)
|
|
}
|
|
|
|
#Plot the raw data
|
|
ascat.plotRawData(ascat.bc)
|
|
|
|
#Segment the data
|
|
ascat.bc = ascat.aspcf(ascat.bc)
|
|
|
|
#Plot the segmented data
|
|
ascat.plotSegmentedData(ascat.bc)
|
|
|
|
#Run ASCAT to fit every tumor to a model, inferring ploidy, normal cell contamination, and discrete copy numbers
|
|
#If psi and rho are manually set:
|
|
if (!is.null($purity) && !is.null($ploidy)){
|
|
ascat.output <- ascat.runAscat(ascat.bc, gamma=1, rho_manual=$purity, psi_manual=$ploidy)
|
|
} else if(!is.null($purity) && is.null($ploidy)){
|
|
ascat.output <- ascat.runAscat(ascat.bc, gamma=1, rho_manual=$purity)
|
|
} else if(!is.null($ploidy) && is.null($purity)){
|
|
ascat.output <- ascat.runAscat(ascat.bc, gamma=1, psi_manual=$ploidy)
|
|
} else {
|
|
ascat.output <- ascat.runAscat(ascat.bc, gamma=1)
|
|
}
|
|
|
|
#Write out segmented regions (including regions with one copy of each allele)
|
|
write.table(ascat.output[["segments"]], file=paste0("$prefix", ".segments.txt"), sep="\t", quote=F, row.names=F)
|
|
|
|
#Write out CNVs in bed format
|
|
cnvs=ascat.output[["segments"]][2:6]
|
|
write.table(cnvs, file=paste0("$prefix",".cnvs.txt"), sep="\t", quote=F, row.names=F, col.names=T)
|
|
|
|
#Write out purity and ploidy info
|
|
summary <- tryCatch({
|
|
matrix(c(ascat.output[["aberrantcellfraction"]], ascat.output[["ploidy"]]), ncol=2, byrow=TRUE)}, error = function(err) {
|
|
# error handler picks up where error was generated
|
|
print(paste("Could not find optimal solution: ",err))
|
|
return(matrix(c(0,0),nrow=1,ncol=2,byrow = TRUE))
|
|
}
|
|
)
|
|
colnames(summary) <- c("AberrantCellFraction","Ploidy")
|
|
write.table(summary, file=paste0("$prefix",".purityploidy.txt"), sep="\t", quote=F, row.names=F, col.names=T)
|
|
|
|
#version export. Have to hardcode process name and software name because
|
|
#won't run inside an R-block
|
|
version_file_path="versions.yml"
|
|
f <- file(version_file_path,"w")
|
|
writeLines("ASCAT:", f)
|
|
writeLines(" ascat: 3.0.0",f)
|
|
close(f)
|
|
"""
|
|
|
|
|
|
stub:
|
|
def prefix = task.ext.prefix ?: "${meta.id}"
|
|
"""
|
|
echo stub > ${prefix}.cnvs.txt
|
|
echo stub > ${prefix}.purityploidy.txt
|
|
echo stub > ${prefix}.segments.txt
|
|
echo stub > Tumour.ASCATprofile.png
|
|
echo stub > Tumour.ASPCF.png
|
|
echo stub > Tumour.germline.png
|
|
echo stub > Tumour.rawprofile.png
|
|
echo stub > Tumour.sunrise.png
|
|
echo stub > Tumour.tumour.png
|
|
|
|
echo 'ASCAT:' > versions.yml
|
|
echo ' ascat: 3.0.0' >> versions.yml
|
|
"""
|
|
|
|
|
|
}
|