Skip to content
Snippets Groups Projects
Commit ac71e415 authored by Cats's avatar Cats
Browse files

fix task order samtools and remove duplicate task

parent 1a90d56f
No related branches found
No related tags found
No related merge requests found
......@@ -98,297 +98,301 @@ task Faidx {
}
}
task Index {
task Fastq {
input {
File bamFile
String? outputBamPath
String memory = "2G"
Int timeMinutes = 1 + ceil(size(bamFile, "G") * 4)
File inputBam
String outputRead1
String? outputRead2
String? outputRead0
Int? includeFilter
Int? excludeFilter
Int? excludeSpecificFilter
Boolean appendReadNumber = false
Boolean outputQuality = false
Int? compressionLevel
Int threads = 1
String memory = "1G"
Int timeMinutes = 1 + ceil(size(inputBam) * 2)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
}
# Select_first is needed, otherwise womtool validate fails.
String outputPath = select_first([outputBamPath, basename(bamFile)])
String bamIndexPath = sub(outputPath, "\.bam$", ".bai")
command {
bash -c '
set -e
# Make sure outputBamPath does not exist.
if [ ! -f ~{outputPath} ]
then
mkdir -p "$(dirname ~{outputPath})"
ln ~{bamFile} ~{outputPath}
fi
samtools index ~{outputPath} ~{bamIndexPath}
'
samtools fastq \
~{true="-1" false="-s" defined(outputRead2)} ~{outputRead1} \
~{"-2 " + outputRead2} \
~{"-0 " + outputRead0} \
~{"-f " + includeFilter} \
~{"-F " + excludeFilter} \
~{"-G " + excludeSpecificFilter} \
~{true="-N" false="-n" appendReadNumber} \
~{true="-O" false="" outputQuality} \
~{"-c " + compressionLevel} \
~{"--threads " + threads} \
~{inputBam}
}
output {
File indexedBam = outputPath
File index = bamIndexPath
File read1 = outputRead1
File? read2 = outputRead2
File? read0 = outputRead0
}
runtime {
cpu: threads
memory: memory
time_minutes: timeMinutes
docker: dockerImage
time_minutes: timeMinutes
}
parameter_meta {
# inputs
bamFile: {description: "The BAM file for which an index should be made.", category: "required"}
outputBamPath: {description: "The location where the BAM file should be written to. The index will appear alongside this link to the BAM file.",
category: "common"}
memory: {description: "The amount of memory needed for the job.", category: "advanced"}
inputBam: {description: "The bam file to process.", category: "required"}
outputRead1: {description: "The location the reads (first reads for pairs, in case of paired-end sequencing) should be written to.", category: "required"}
outputRead2: {description: "The location the second reads from pairs should be written to.", category: "common"}
outputRead0: {description: "The location the unpaired reads should be written to (in case of paired-end sequenicng).", category: "advanced"}
includeFilter: {description: "Include reads with ALL of these flags. Corresponds to `-f`", category: "advanced"}
excludeFilter: {description: "Exclude reads with ONE OR MORE of these flags. Corresponds to `-F`", category: "advanced"}
excludeSpecificFilter: {description: "Exclude reads with ALL of these flags. Corresponds to `-G`", category: "advanced"}
appendReadNumber: {description: "Append /1 and /2 to the read name, or don't. Corresponds to `-n/N`", category: "advanced"}
outputQuality: {description: "Equivalent to samtools fastq's `-O` flag.", category: "advanced"}
threads: {description: "The number of threads to use.", category: "advanced"}
memory: {description: "The amount of memory this job will use.", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
}
}
task Merge {
task FilterShortReadsBam {
input {
Array[File]+ bamFiles
String outputBamPath = "merged.bam"
Boolean force = true
Int timeMinutes = 1 + ceil(size(bamFiles, "G") * 2)
File bamFile
String outputPathBam
String memory = "1G"
Int timeMinutes = 1 + ceil(size(bamFile, "G") * 8)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
}
String indexPath = sub(outputBamPath, "\.bam$",".bai")
String outputPathBamIndex = sub(outputPathBam, "\.bam$", ".bai")
command {
set -e
mkdir -p "$(dirname ~{outputBamPath})"
samtools merge ~{true="-f" false="" force} ~{outputBamPath} ~{sep=' ' bamFiles}
samtools index ~{outputBamPath} ~{indexPath}
mkdir -p "$(dirname ~{outputPathBam})"
samtools view -h ~{bamFile} | \
awk 'length($10) > 30 || $1 ~/^@/' | \
samtools view -bS -> ~{outputPathBam}
samtools index ~{outputPathBam} ~{outputPathBamIndex}
}
output {
File outputBam = outputBamPath
File outputBamIndex = indexPath
File filteredBam = outputPathBam
File filteredBamIndex = outputPathBamIndex
}
runtime {
docker: dockerImage
memory: memory
time_minutes: timeMinutes
docker: dockerImage
}
parameter_meta {
# inputs
bamFiles: {description: "The BAM files to merge.", category: "required"}
outputBamPath: {description: "The location the merged BAM file should be written to.", category: "common"}
force: {description: "Equivalent to samtools merge's `-f` flag.", category: "advanced"}
bamFile: {description: "The bam file to process.", category: "required"}
outputPathBam: {description: "The filtered bam file.", category: "common"}
memory: {description: "The amount of memory this job will use.", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.", category: "advanced"}
}
}
task Sort {
task Flagstat {
input {
File inputBam
String outputPath
Boolean sortByName = false
Int compressionLevel = 1
String memory = "2G"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 2)
Int? threads
String memory = "1G"
Int timeMinutes = 1 + ceil(size(inputBam, "G"))
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
}
command {
set -e
mkdir -p "$(dirname ~{outputPath})"
samtools sort \
-l ~{compressionLevel} \
~{true="-n" false="" sortByName} \
~{"--threads " + threads} \
-o ~{outputPath} \
~{inputBam}
samtools flagstat ~{inputBam} > ~{outputPath}
}
output {
File outputSortedBam = outputPath
File flagstat = outputPath
}
runtime {
cpu: 1 + select_first([threads, 0])
memory: memory
docker: dockerImage
time_minutes: timeMinutes
docker: dockerImage
}
parameter_meta {
# inputs
inputBam: {description: "The input SAM file.", category: "required"}
outputPath: {description: "Output directory path + output file.", category: "required"}
sortByName: {description: "Sort the inputBam by read name instead of position.", category: "advanced"}
compressionLevel: {description: "Compression level from 0 (uncompressed) to 9 (best).", category: "advanced"}
memory: {description: "The amount of memory available to the job.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.", category: "advanced"}
threads: {description: "The number of additional threads that will be used for this task.", category: "advanced"}
inputBam: {description: "The BAM file for which statistics should be retrieved.", category: "required"}
outputPath: {description: "The location the ouput should be written to.", category: "required"}
memory: {description: "The amount of memory needed for the job.", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
# outputs
outputSortedBam: {description: "Sorted BAM file."}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
}
}
task Markdup {
task Index {
input {
File inputBam
String outputBamPath
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 2)
File bamFile
String? outputBamPath
String memory = "2G"
Int timeMinutes = 1 + ceil(size(bamFile, "G") * 4)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
}
# Select_first is needed, otherwise womtool validate fails.
String outputPath = select_first([outputBamPath, basename(bamFile)])
String bamIndexPath = sub(outputPath, "\.bam$", ".bai")
command {
bash -c '
set -e
mkdir -p "$(dirname ~{outputBamPath})"
samtools markdup ~{inputBam} ~{outputBamPath}
# Make sure outputBamPath does not exist.
if [ ! -f ~{outputPath} ]
then
mkdir -p "$(dirname ~{outputPath})"
ln ~{bamFile} ~{outputPath}
fi
samtools index ~{outputPath} ~{bamIndexPath}
'
}
output {
File outputBam = outputBamPath
File indexedBam = outputPath
File index = bamIndexPath
}
runtime {
docker: dockerImage
memory: memory
time_minutes: timeMinutes
docker: dockerImage
}
parameter_meta {
# inputs
inputBam: {description: "The BAM file to be processed.", category: "required"}
outputBamPath: {description: "The location of the output BAM file.", category: "required"}
bamFile: {description: "The BAM file for which an index should be made.", category: "required"}
outputBamPath: {description: "The location where the BAM file should be written to. The index will appear alongside this link to the BAM file.",
category: "common"}
memory: {description: "The amount of memory needed for the job.", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
}
}
task FilterShortReadsBam {
task Markdup {
input {
File bamFile
String outputPathBam
String memory = "1G"
Int timeMinutes = 1 + ceil(size(bamFile, "G") * 8)
File inputBam
String outputBamPath
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 2)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
}
String outputPathBamIndex = sub(outputPathBam, "\.bam$", ".bai")
command {
set -e
mkdir -p "$(dirname ~{outputPathBam})"
samtools view -h ~{bamFile} | \
awk 'length($10) > 30 || $1 ~/^@/' | \
samtools view -bS -> ~{outputPathBam}
samtools index ~{outputPathBam} ~{outputPathBamIndex}
mkdir -p "$(dirname ~{outputBamPath})"
samtools markdup ~{inputBam} ~{outputBamPath}
}
output {
File filteredBam = outputPathBam
File filteredBamIndex = outputPathBamIndex
File outputBam = outputBamPath
}
runtime {
memory: memory
time_minutes: timeMinutes
docker: dockerImage
time_minutes: timeMinutes
}
parameter_meta {
bamFile: {description: "The bam file to process.", category: "required"}
outputPathBam: {description: "The filtered bam file.", category: "common"}
memory: {description: "The amount of memory this job will use.", category: "advanced"}
# inputs
inputBam: {description: "The BAM file to be processed.", category: "required"}
outputBamPath: {description: "The location of the output BAM file.", category: "required"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
}
}
task Flagstat {
task Merge {
input {
File inputBam
String outputPath
Array[File]+ bamFiles
String outputBamPath = "merged.bam"
Boolean force = true
String memory = "1G"
Int timeMinutes = 1 + ceil(size(inputBam, "G"))
Int timeMinutes = 1 + ceil(size(bamFiles, "G") * 2)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
}
String indexPath = sub(outputBamPath, "\.bam$",".bai")
command {
set -e
mkdir -p "$(dirname ~{outputPath})"
samtools flagstat ~{inputBam} > ~{outputPath}
mkdir -p "$(dirname ~{outputBamPath})"
samtools merge ~{true="-f" false="" force} ~{outputBamPath} ~{sep=' ' bamFiles}
samtools index ~{outputBamPath} ~{indexPath}
}
output {
File flagstat = outputPath
File outputBam = outputBamPath
File outputBamIndex = indexPath
}
runtime {
memory: memory
time_minutes: timeMinutes
docker: dockerImage
time_minutes: timeMinutes
}
parameter_meta {
# inputs
inputBam: {description: "The BAM file for which statistics should be retrieved.", category: "required"}
outputPath: {description: "The location the ouput should be written to.", category: "required"}
memory: {description: "The amount of memory needed for the job.", category: "advanced"}
bamFiles: {description: "The BAM files to merge.", category: "required"}
outputBamPath: {description: "The location the merged BAM file should be written to.", category: "common"}
force: {description: "Equivalent to samtools merge's `-f` flag.", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
}
}
task Fastq {
task Sort {
input {
File inputBam
String outputRead1
String? outputRead2
String? outputRead0
Int? includeFilter
Int? excludeFilter
Int? excludeSpecificFilter
Boolean appendReadNumber = false
Boolean outputQuality = false
Int? compressionLevel
String outputPath
Boolean sortByName = false
Int compressionLevel = 1
Int threads = 1
String memory = "1G"
Int timeMinutes = 1 + ceil(size(inputBam) * 2)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String memory = "2G"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 2)
Int? threads
}
command {
samtools fastq \
~{true="-1" false="-s" defined(outputRead2)} ~{outputRead1} \
~{"-2 " + outputRead2} \
~{"-0 " + outputRead0} \
~{"-f " + includeFilter} \
~{"-F " + excludeFilter} \
~{"-G " + excludeSpecificFilter} \
~{true="-N" false="-n" appendReadNumber} \
~{true="-O" false="" outputQuality} \
~{"-c " + compressionLevel} \
set -e
mkdir -p "$(dirname ~{outputPath})"
samtools sort \
-l ~{compressionLevel} \
~{true="-n" false="" sortByName} \
~{"--threads " + threads} \
-o ~{outputPath} \
~{inputBam}
}
output {
File read1 = outputRead1
File? read2 = outputRead2
File? read0 = outputRead0
File outputSortedBam = outputPath
}
runtime {
cpu: threads
cpu: 1 + select_first([threads, 0])
memory: memory
docker: dockerImage
time_minutes: timeMinutes
......@@ -396,20 +400,16 @@ task Fastq {
parameter_meta {
# inputs
inputBam: {description: "The bam file to process.", category: "required"}
outputRead1: {description: "The location the reads (first reads for pairs, in case of paired-end sequencing) should be written to.", category: "required"}
outputRead2: {description: "The location the second reads from pairs should be written to.", category: "common"}
outputRead0: {description: "The location the unpaired reads should be written to (in case of paired-end sequenicng).", category: "advanced"}
includeFilter: {description: "Include reads with ALL of these flags. Corresponds to `-f`", category: "advanced"}
excludeFilter: {description: "Exclude reads with ONE OR MORE of these flags. Corresponds to `-F`", category: "advanced"}
excludeSpecificFilter: {description: "Exclude reads with ALL of these flags. Corresponds to `-G`", category: "advanced"}
appendReadNumber: {description: "Append /1 and /2 to the read name, or don't. Corresponds to `-n/N`", category: "advanced"}
outputQuality: {description: "Equivalent to samtools fastq's `-O` flag.", category: "advanced"}
threads: {description: "The number of threads to use.", category: "advanced"}
memory: {description: "The amount of memory this job will use.", category: "advanced"}
inputBam: {description: "The input SAM file.", category: "required"}
outputPath: {description: "Output directory path + output file.", category: "required"}
sortByName: {description: "Sort the inputBam by read name instead of position.", category: "advanced"}
compressionLevel: {description: "Compression level from 0 (uncompressed) to 9 (best).", category: "advanced"}
memory: {description: "The amount of memory available to the job.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.", category: "advanced"}
threads: {description: "The number of additional threads that will be used for this task.", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
# outputs
outputSortedBam: {description: "Sorted BAM file."}
}
}
......@@ -518,38 +518,4 @@ task View {
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
category: "advanced"}
}
}
task FilterShortReadsBam {
input {
File bamFile
String outputPathBam
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
}
String outputPathBamIndex = sub(outputPathBam, "\.bam$", ".bai")
command {
set -e
mkdir -p "$(dirname ~{outputPathBam})"
samtools view -h ~{bamFile} | \
awk 'length($10) > 30 || $1 ~/^@/' | \
samtools view -bS -> ~{outputPathBam}
samtools index ~{outputPathBam} ~{outputPathBamIndex}
}
output {
File filteredBam = outputPathBam
File filteredBamIndex = outputPathBamIndex
}
runtime {
docker: dockerImage
}
parameter_meta {
bamFile: {description: "The bam file to process.", category: "required"}
outputPathBam: {description: "The filtered bam file.", category: "common"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.", category: "advanced"}
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment