Skip to content
Snippets Groups Projects
bwa.wdl 2.72 KiB
version 1.0

task Mem {
    input {
        String? preCommand
        File inputR1
        File? inputR2
        BwaIndex bwaIndex
        String outputPath
        String? readgroup

        String? picardJar

        Int threads = 1
        Int memory = 8
        Int picardMemory = 4
    }

    String picardCommand = if defined(picardJar)
        then "java -Xmx" + picardMemory + "G -jar " + picardJar
        else "picard -Xmx" + picardMemory + "G"

    String altCommand = if (defined(bwaIndex.altIndex)) then "| bwa-postalt " + bwaIndex.altIndex+  " | \
        " + picardCommand + " SetNmAndUqTags \
        INPUT=/dev/stdin OUTPUT=" + outputPath + " \
        CREATE_INDEX=true R=" + bwaIndex.fasta else ""

    command {
        set -e -o pipefail
        mkdir -p $(dirname ~{outputPath})
        ~{preCommand}
        bwa mem ~{"-t " + threads} \
        ~{"-R '" + readgroup + "'"} \
        ~{bwaIndex.fastaFile} \
        ~{inputR1} \
        ~{inputR2} \
        ~{altCommand} \
        | ~{picardCommand} SortSam \
              INPUT=/dev/stdin OUTPUT=/dev/stdout SORT_ORDER=coordinate | \
              java -jar $PICARD SetNmAndUqTags \
              INPUT=/dev/stdin OUTPUT=${outputPath} \
              CREATE_INDEX=true R=~{bwaIndex.fasta}
    }

    output {
        IndexedBamFile bamFile = {
          "file": outputPath,
          "index": sub(outputPath, ".bam$", ".bai")
        }
    }

    runtime{
        cpu: threads
        memory: memory + picardMemory + picardMemory
    }
}

task Index {
    input {
        File fasta
        String? preCommand
        String? constructionAlgorithm
        Int? blockSize
        String? outputDir
    }

    String fastaFilename = basename(fasta)
    String outputFile = if (defined(outputDir)) then outputDir + "/" + fastaFilename else fasta

    command {
        set -e -o pipefail
        ~{"mkdir -p " + outputDir}
        ~{preCommand}
        if [[ ! '~{outputDir}' =  '' ]]
        then
            ln -sf ~{fasta} ~{outputDir + "/"}~{fastaFilename}
        fi
        bwa index \
        ~{"-a " + constructionAlgorithm} \
        ~{"-b" + blockSize} \
        ~{outputFile}
    }

    output {
        File indexedFasta = outputFile
        Array[File] indexFiles = [outputFile + ".bwt",outputFile + ".pac",outputFile + ".sa",outputFile + ".amb",outputFile + ".ann"]
    }

    parameter_meta {
        fasta: "Fasta file to be indexed"
        constructionAlgorithm: "-a STR    BWT construction algorithm: bwtsw, is or rb2 [auto]"
        blockSize: "-b INT    block size for the bwtsw algorithm (effective with -a bwtsw) [10000000]"
        outputDir: "index will be created in this output directory"
    }
}

struct BwaIndex {
    File fastaFile
    Array[File] indexFiles
    File? altIndex
}