From ba3fb4f9ce75a929a6ad5b0f5ae6851bbd28d14e Mon Sep 17 00:00:00 2001 From: lindaxiang Date: Wed, 26 Feb 2020 16:47:36 -0500 Subject: [PATCH 01/10] first nf version of sanger wxs --- .../sanger-wxs-variant-caller/nextflow.config | 1 + .../sanger-wxs-variant-caller.nf | 90 +++++++++++++++++++ .../tests/checker.nf | 61 +++++++++++++ .../tests/nextflow.config | 1 + .../tests/test-job.nf.json | 9 ++ 5 files changed, 162 insertions(+) create mode 100644 tools/sanger-wxs-variant-caller/nextflow.config create mode 100644 tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf create mode 100644 tools/sanger-wxs-variant-caller/tests/checker.nf create mode 100644 tools/sanger-wxs-variant-caller/tests/nextflow.config create mode 100644 tools/sanger-wxs-variant-caller/tests/test-job.nf.json diff --git a/tools/sanger-wxs-variant-caller/nextflow.config b/tools/sanger-wxs-variant-caller/nextflow.config new file mode 100644 index 0000000..d3af3ea --- /dev/null +++ b/tools/sanger-wxs-variant-caller/nextflow.config @@ -0,0 +1 @@ +docker.enabled = true diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf new file mode 100644 index 0000000..42d73d2 --- /dev/null +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf @@ -0,0 +1,90 @@ +#!/usr/bin/env nextflow + +/* + * Copyright (c) 2020, Ontario Institute for Cancer Research (OICR). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +/* + * author Linda Xiang + */ + +nextflow.preview.dsl=2 +version = '3.1.6-2' + +params.reference = "" +params.annot = "" +params.snv_indel = "" +params.tumour = "" +params.tumourIdx = "" +params.normal = "" +params.normalIdx = "" +params.exclude = "chrUn%,HLA%,%_alt,%_random,chrM,chrEBV" +params.species = "human" +params.assembly = "GRCh38" +params.container_version = "" +params.cpus = 18 +params.mem = 4 // GB + + +def getSangerSecondaryFiles(main_file){ //this is kind of like CWL's secondary files + def all_files = [] + for (ext in ['.bas']) { + all_files.add(main_file + ext) + } + return all_files +} + +process sangerWxsVariantCall { + container "quay.io/icgc-argo/sanger-wxs-variant-caller:sanger-wxs-variant-caller.${params.container_version ?: version}" + + cpus params.cpus + memory "${params.mem} GB" + + tag "${tumour.size()}" + + input: + path reference + path annot + path snv_indel + path tumour + path tidx + path tumour_bas + path normal + path nidex + path normal_bas + + output: + path "run.params", emit: run_params + path "WXS_*_vs_*.result.tar.gz", emit: result_archive + path "WXS_*_vs_*.timings.tar.gz", emit: timings + + script: + arg_skipqc = params.skipqc ? "-skipqc" : "" + """ + /opt/wtsi-cgp/bin/ds-cgpwxs.pl \ + -cores ${task.cpus} \ + -reference reference \ + -annot annot \ + -snv_indel snv_indel \ + -tumour tumour \ + -tidx tidx \ + -normal normal \ + -nidx nidx \ + -exclude ${params.exclude} \ + -species ${params.species} \ + -assembly ${params.assembly} + """ +} diff --git a/tools/sanger-wxs-variant-caller/tests/checker.nf b/tools/sanger-wxs-variant-caller/tests/checker.nf new file mode 100644 index 0000000..bedd1b7 --- /dev/null +++ b/tools/sanger-wxs-variant-caller/tests/checker.nf @@ -0,0 +1,61 @@ +#!/usr/bin/env nextflow + +/* + * Copyright (c) 2020, Ontario Institute for Cancer Research (OICR). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +/* + * author Linda Xiang + */ + +nextflow.preview.dsl=2 + +params.reference = "" +params.annot = "" +params.snv_indel = "" +params.tumour = "" +params.tumourIdx = "" +params.normal = "" +params.normalIdx = "" + +include '../sanger-wxs-variant-caller' params(params) + +Channel + .fromPath(getSangerSecondaryFiles(params.tumour), checkIfExists: true) + .set { tumour_ch } + +Channel + .fromPath(getSangerSecondaryFiles(params.normal), checkIfExists: true) + .set { normal_ch } + +// will not run when import as module +workflow { + main: + sangerWxsVariantCall( + file(params.reference), + file(params.annot), + file(params.snv_indel), + file(params.tumour), + file(params.tumourIdx), + tumour_ch.collect(), + file(params.normal), + file(params.normalIdx), + normal_ch.collect() + ) + + publish: + sangerWgsVariantCall.out to: "outdir", overwrite: true +} diff --git a/tools/sanger-wxs-variant-caller/tests/nextflow.config b/tools/sanger-wxs-variant-caller/tests/nextflow.config new file mode 100644 index 0000000..a2203e8 --- /dev/null +++ b/tools/sanger-wxs-variant-caller/tests/nextflow.config @@ -0,0 +1 @@ +includeConfig '../nextflow.config' \ No newline at end of file diff --git a/tools/sanger-wxs-variant-caller/tests/test-job.nf.json b/tools/sanger-wxs-variant-caller/tests/test-job.nf.json new file mode 100644 index 0000000..6fc5eea --- /dev/null +++ b/tools/sanger-wxs-variant-caller/tests/test-job.nf.json @@ -0,0 +1,9 @@ +{ + "reference": "", + "annot": "", + "snv_indel": "", + "tumour": "", + "tumourIdx": "", + "normal": "", + "normalIdx": "" +} \ No newline at end of file From bdf2259d921cfe58e05066a5f37cb3db33f54be1 Mon Sep 17 00:00:00 2001 From: lindaxiang Date: Fri, 28 Feb 2020 15:18:36 -0500 Subject: [PATCH 02/10] add -r when using ln create symbolic links to tackle the issue from link of link --- tools/sanger-wxs-variant-caller/Dockerfile | 2 + .../sanger-wxs-variant-caller/analysisWXS.sh | 236 ++++++++++++++++++ .../sanger-wxs-variant-caller.nf | 18 +- .../tests/checker.nf | 4 +- .../tests/test-job.nf.json | 6 +- 5 files changed, 252 insertions(+), 14 deletions(-) create mode 100644 tools/sanger-wxs-variant-caller/analysisWXS.sh diff --git a/tools/sanger-wxs-variant-caller/Dockerfile b/tools/sanger-wxs-variant-caller/Dockerfile index 93188c3..9a7d1b0 100644 --- a/tools/sanger-wxs-variant-caller/Dockerfile +++ b/tools/sanger-wxs-variant-caller/Dockerfile @@ -1,3 +1,5 @@ FROM quay.io/wtsicgp/dockstore-cgpwxs:3.1.6 +COPY analysisWXS.sh $OPT/bin/analysisWXS.sh + CMD ["/bin/bash"] diff --git a/tools/sanger-wxs-variant-caller/analysisWXS.sh b/tools/sanger-wxs-variant-caller/analysisWXS.sh new file mode 100644 index 0000000..fbd876d --- /dev/null +++ b/tools/sanger-wxs-variant-caller/analysisWXS.sh @@ -0,0 +1,236 @@ +#!/bin/bash + +# about to do some parallel work... +declare -A do_parallel + +TIME_FORMAT='command:%C\\nreal:%e\\nuser:%U\\nsys:%S\\npctCpu:%P\\ntext:%Xk\\ndata:%Dk\\nmax:%Mk\\n'; + +# declare function to run parallel processing +run_parallel () { + # adapted from: http://stackoverflow.com/a/18666536/4460430 + local max_concurrent_tasks=$1 + local -A pids=() + + for key in "${!do_parallel[@]}"; do + while [ $(jobs 2>&1 | grep -c Running) -ge "$max_concurrent_tasks" ]; do + sleep 1 # gnu sleep allows floating point here... + done + + CMD="/usr/bin/time -f $TIME_FORMAT -o $OUTPUT_DIR/timings/${PROTOCOL}_${NAME_MT}_vs_${NAME_WT}.time.$key ${do_parallel[$key]}" + + echo -e "\tStarting $key" + set -x + bash -c "$CMD" & + set +x + pids+=(["$key"]="$!") + done + + errors=0 + for key in "${!do_parallel[@]}"; do + pid=${pids[$key]} + local cur_ret=0 + if [ -z "$pid" ]; then + echo "No Job ID known for the $key process" # should never happen + cur_ret=1 + else + wait $pid + cur_ret=$? + fi + if [ "$cur_ret" -ne 0 ]; then + errors=$(($errors + 1)) + echo "$key (${do_parallel[$key]}) failed." + fi + done + + return $errors +} + +set -e + +echo -e "\nStart workflow: `date`\n" + +if [[ $# -eq 1 ]] ; then + PARAM_FILE=$1 +elif [ -z ${PARAM_FILE+x} ] ; then + PARAM_FILE=$HOME/run.params +fi + +echo "Loading user options from: $PARAM_FILE" +if [ ! -f $PARAM_FILE ]; then + echo -e "\tERROR: file indicated by PARAM_FILE not found: $PARAM_FILE" 1>&2 + exit 1 +fi +source $PARAM_FILE + +if [ -z ${CPU+x} ]; then + CPU=`grep -c ^processor /proc/cpuinfo` +fi + +# create area which allows monitoring site to be started, not actively updated until after PRE-EXEC completes +#cp -r /opt/wtsi-cgp/site $OUTPUT_DIR/site + +echo -e "\tBAM_MT : $BAM_MT" +echo -e "\tBAM_WT : $BAM_WT" + +set -u + +TMP=$OUTPUT_DIR/tmp +mkdir -p $TMP +mkdir -p $OUTPUT_DIR/timings + +## get sample names from BAM headers +NAME_MT=`samtools view -H $BAM_MT | perl -ne 'chomp; if($_ =~ m/^\@RG/) {($sm) = $_ =~m/\tSM:([^\t]+)/; print "$sm\n";}' | uniq` +NAME_WT=`samtools view -H $BAM_WT | perl -ne 'chomp; if($_ =~ m/^\@RG/) {($sm) = $_ =~m/\tSM:([^\t]+)/; print "$sm\n";}' | uniq` + +echo -e "\tNAME_MT : $NAME_MT" +echo -e "\tNAME_WT : $NAME_WT" + +# capture index extension type (assuming same from both) +ALN_EXTN='bam' +IDX_EXTN='' +if [[ "$IDX_MT" == *.bam.bai ]]; then + IDX_EXTN='bam.bai' +elif [[ "$IDX_MT" == *.bam.csi ]]; then + IDX_EXTN='bam.csi' +elif [[ "$IDX_MT" == *.cram.crai ]]; then + IDX_EXTN='cram.crai' + ALN_EXTN='cram' +else + echo "Alignment is not BAM or CRAM file: $" >&2 + exit 1 +fi + +BAM_MT_TMP=$TMP/$NAME_MT.$ALN_EXTN +IDX_MT_TMP=$TMP/$NAME_MT.$IDX_EXTN +BAM_WT_TMP=$TMP/$NAME_WT.$ALN_EXTN +IDX_WT_TMP=$TMP/$NAME_WT.$IDX_EXTN + +ln -rfs $BAM_MT $BAM_MT_TMP +ln -rfs $IDX_MT $IDX_MT_TMP +ln -rfs $BAM_WT $BAM_WT_TMP +ln -rfs $IDX_WT $IDX_WT_TMP + +echo "Setting up Parallel block 1" + +if [ ! -f "${BAM_MT}.bas" ]; then + echo -e "\t[Parallel block 1] BAS $NAME_MT added..." + do_parallel[bas_MT]="bam_stats -i $BAM_MT_TMP -o $BAM_MT_TMP.bas" +else + ln -rfs $BAM_MT.bas $BAM_MT_TMP.bas +fi + +if [ ! -f "${BAM_WT}.bas" ]; then + echo -e "\t[Parallel block 1] BAS $NAME_WT added..." + do_parallel[bas_WT]="bam_stats -i $BAM_WT_TMP -o $BAM_WT_TMP.bas" +else + ln -rfs $BAM_WT.bas $BAM_WT_TMP.bas +fi + +if [ "$ALN_EXTN" == "cram" ]; then + ## prime the cache + USER_CACHE=$OUTPUT_DIR/ref_cache + export REF_CACHE=$USER_CACHE/%2s/%2s/%s + export REF_PATH=$REF_CACHE + do_parallel[cache_POP]="seq_cache_populate.pl -root $USER_CACHE $REF_BASE/genome.fa" +fi + +echo "Starting Parallel block 1: `date`" +run_parallel $CPU do_parallel + +# unset and redeclare the parallel array ready for block 2 +unset do_parallel +declare -A do_parallel + +echo -e "\nSetting up Parallel block 2" + +echo -e "\t[Parallel block 2] cgpPindel added..." +do_parallel[cgpPindel]="pindel.pl \ + -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel \ + -r $REF_BASE/genome.fa \ + -t $BAM_MT_TMP \ + -n $BAM_WT_TMP \ + -s $REF_BASE/pindel/simpleRepeats.bed.gz \ + -u $REF_BASE/pindel/pindel_np.gff3.gz \ + -f $REF_BASE/pindel/${PROTOCOL}_Rules.lst \ + -g $REF_BASE/vagrent/codingexon_regions.indel.bed.gz \ + -st $PROTOCOL \ + -as $ASSEMBLY \ + -sp '$SPECIES' \ + -e $CONTIG_EXCLUDE \ + -b $REF_BASE/pindel/HiDepth.bed.gz \ + -c $CPU \ + -sf $REF_BASE/pindel/softRules.lst" + +# Need empty cn bed for blanket settings +touch $TMP/empty.cn.bed +# Need a germline bed even though not used +echo '#comment' > $TMP/empty.germline.bed + +echo -e "\t[Parallel block 2] CaVEMan added..." +do_parallel[CaVEMan]="caveman.pl \ + -r $REF_BASE/genome.fa.fai \ + -ig $REF_BASE/caveman/HiDepth.tsv \ + -b $REF_BASE/caveman/flagging \ + -ab $REF_BASE/vagrent \ + -u $REF_BASE/caveman \ + -s '$SPECIES' \ + -sa $ASSEMBLY \ + -t $CPU \ + -st $PROTOCOL \ + -in $TMP/empty.germline.bed \ + -tc $TMP/empty.cn.bed \ + -nc $TMP/empty.cn.bed \ + -td 5 -nd 2 \ + -tb $BAM_MT_TMP \ + -nb $BAM_WT_TMP \ + -c $SNVFLAG \ + -f $REF_BASE/caveman/flagging/flag.to.vcf.convert.ini \ + -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman \ + -np $PROTOCOL \ + -tp $PROTOCOL \ + -x $CONTIG_EXCLUDE" + +echo "Starting Parallel block 2: `date`" +run_parallel $CPU do_parallel + +# unset and redeclare the parallel array ready for block 3 +unset do_parallel +declare -A do_parallel + +# annotate pindel +rm -f $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.annot.vcf.gz* +echo -e "\t[Parallel block 3] Pindel_annot added..." +do_parallel[cgpPindel_annot]="AnnotateVcf.pl -t -c $REF_BASE/vagrent/vagrent.cache.gz \ + -i $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.flagged.vcf.gz \ + -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.annot.vcf" + +# annotate caveman +rm -f $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.annot.muts.vcf.gz* +echo -e "\t[Parallel block 3] CaVEMan_annot added..." +do_parallel[CaVEMan_annot]="AnnotateVcf.pl -t -c $REF_BASE/vagrent/vagrent.cache.gz \ + -i $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.flagged.muts.vcf.gz \ + -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.annot.muts.vcf" + +echo "Starting Parallel block 3: `date`" +run_parallel $CPU do_parallel + +# clean up log files +rm -rf $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/*/logs + +# cleanup reference area, see ds-cgpwxs.pl +if [ $CLEAN_REF -gt 0 ]; then + rm -rf $REF_BASE +fi + +# cleanup ref cache +if [ "$ALN_EXTN" == "cram" ]; then + rm -rf $USER_CACHE +fi + +echo 'Package results' +# timings first +tar -C $OUTPUT_DIR -zcf $OUTPUT_DIR/${PROTOCOL}_${NAME_MT}_vs_${NAME_WT}.timings.tar.gz timings +tar -C $OUTPUT_DIR -zcf $OUTPUT_DIR/${PROTOCOL}_${NAME_MT}_vs_${NAME_WT}.result.tar.gz ${NAME_MT}_vs_${NAME_WT} +cp $PARAM_FILE $OUTPUT_DIR/${PROTOCOL}_${NAME_MT}_vs_${NAME_WT}.run.params + +echo -e "\nWorkflow end: `date`" diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf index 42d73d2..88f3e3e 100644 --- a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf @@ -72,19 +72,19 @@ process sangerWxsVariantCall { path "WXS_*_vs_*.timings.tar.gz", emit: timings script: - arg_skipqc = params.skipqc ? "-skipqc" : "" """ /opt/wtsi-cgp/bin/ds-cgpwxs.pl \ -cores ${task.cpus} \ - -reference reference \ - -annot annot \ - -snv_indel snv_indel \ - -tumour tumour \ - -tidx tidx \ - -normal normal \ - -nidx nidx \ + -reference ${reference} \ + -annot ${annot} \ + -snv_indel ${snv_indel} \ + -tumour ${tumour} \ + -tidx ${tidx} \ + -normal ${normal} \ + -nidx ${nidx} \ -exclude ${params.exclude} \ -species ${params.species} \ - -assembly ${params.assembly} + -assembly ${params.assembly} \ + -outdir \$PWD """ } diff --git a/tools/sanger-wxs-variant-caller/tests/checker.nf b/tools/sanger-wxs-variant-caller/tests/checker.nf index bedd1b7..372e895 100644 --- a/tools/sanger-wxs-variant-caller/tests/checker.nf +++ b/tools/sanger-wxs-variant-caller/tests/checker.nf @@ -31,7 +31,7 @@ params.tumourIdx = "" params.normal = "" params.normalIdx = "" -include '../sanger-wxs-variant-caller' params(params) +include sangerWxsVariantCall from '../sanger-wxs-variant-caller' params(params) Channel .fromPath(getSangerSecondaryFiles(params.tumour), checkIfExists: true) @@ -57,5 +57,5 @@ workflow { ) publish: - sangerWgsVariantCall.out to: "outdir", overwrite: true + sangerWxsVariantCall.out to: "outdir", overwrite: true } diff --git a/tools/sanger-wxs-variant-caller/tests/test-job.nf.json b/tools/sanger-wxs-variant-caller/tests/test-job.nf.json index 6fc5eea..6eb02ac 100644 --- a/tools/sanger-wxs-variant-caller/tests/test-job.nf.json +++ b/tools/sanger-wxs-variant-caller/tests/test-job.nf.json @@ -1,7 +1,7 @@ { - "reference": "", - "annot": "", - "snv_indel": "", + "reference": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/core_ref_GRCh38_hla_decoy_ebv.tar.gz", + "annot": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/VAGrENT_ref_GRCh38_hla_decoy_ebv_ensembl_91.tar.gz", + "snv_indel": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/SNV_INDEL_ref_GRCh38_hla_decoy_ebv-fragment.tar.gz", "tumour": "", "tumourIdx": "", "normal": "", From 25cb0263bfda5e85091c0b44bc8c3839e7ed08b5 Mon Sep 17 00:00:00 2001 From: lindaxiang Date: Fri, 28 Feb 2020 15:59:20 -0500 Subject: [PATCH 03/10] make unique function name --- .../sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf | 2 +- tools/sanger-wxs-variant-caller/tests/checker.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf index 88f3e3e..ac3de02 100644 --- a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf @@ -39,7 +39,7 @@ params.cpus = 18 params.mem = 4 // GB -def getSangerSecondaryFiles(main_file){ //this is kind of like CWL's secondary files +def getSangerWxsSecondaryFiles(main_file){ //this is kind of like CWL's secondary files def all_files = [] for (ext in ['.bas']) { all_files.add(main_file + ext) diff --git a/tools/sanger-wxs-variant-caller/tests/checker.nf b/tools/sanger-wxs-variant-caller/tests/checker.nf index 372e895..6325c54 100644 --- a/tools/sanger-wxs-variant-caller/tests/checker.nf +++ b/tools/sanger-wxs-variant-caller/tests/checker.nf @@ -31,14 +31,14 @@ params.tumourIdx = "" params.normal = "" params.normalIdx = "" -include sangerWxsVariantCall from '../sanger-wxs-variant-caller' params(params) +include { sangerWxsVariantCall; getSangerWxsSecondaryFiles } from '../sanger-wxs-variant-caller' params(params) Channel - .fromPath(getSangerSecondaryFiles(params.tumour), checkIfExists: true) + .fromPath(getSangerWxsSecondaryFiles(params.tumour), checkIfExists: true) .set { tumour_ch } Channel - .fromPath(getSangerSecondaryFiles(params.normal), checkIfExists: true) + .fromPath(getSangerWxsSecondaryFiles(params.normal), checkIfExists: true) .set { normal_ch } // will not run when import as module From ab39d2da3faec6a235e4bb0e1d901fb92465f01e Mon Sep 17 00:00:00 2001 From: lindaxiang Date: Mon, 2 Mar 2020 15:16:51 -0500 Subject: [PATCH 04/10] changes process name to follow naming pattern --- .../sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf | 2 +- tools/sanger-wxs-variant-caller/tests/checker.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf index ac3de02..41bff41 100644 --- a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf @@ -47,7 +47,7 @@ def getSangerWxsSecondaryFiles(main_file){ //this is kind of like CWL's seconda return all_files } -process sangerWxsVariantCall { +process sangerWxsVariantCaller { container "quay.io/icgc-argo/sanger-wxs-variant-caller:sanger-wxs-variant-caller.${params.container_version ?: version}" cpus params.cpus diff --git a/tools/sanger-wxs-variant-caller/tests/checker.nf b/tools/sanger-wxs-variant-caller/tests/checker.nf index 6325c54..393f1f8 100644 --- a/tools/sanger-wxs-variant-caller/tests/checker.nf +++ b/tools/sanger-wxs-variant-caller/tests/checker.nf @@ -31,7 +31,7 @@ params.tumourIdx = "" params.normal = "" params.normalIdx = "" -include { sangerWxsVariantCall; getSangerWxsSecondaryFiles } from '../sanger-wxs-variant-caller' params(params) +include { sangerWxsVariantCaller; getSangerWxsSecondaryFiles } from '../sanger-wxs-variant-caller' params(params) Channel .fromPath(getSangerWxsSecondaryFiles(params.tumour), checkIfExists: true) @@ -44,7 +44,7 @@ Channel // will not run when import as module workflow { main: - sangerWxsVariantCall( + sangerWxsVariantCaller( file(params.reference), file(params.annot), file(params.snv_indel), @@ -57,5 +57,5 @@ workflow { ) publish: - sangerWxsVariantCall.out to: "outdir", overwrite: true + sangerWxsVariantCaller.out to: "outdir", overwrite: true } From a5caa3d79aabf7ed1614ffa51c570d103c9828d6 Mon Sep 17 00:00:00 2001 From: lindaxiang Date: Thu, 5 Mar 2020 09:06:30 -0500 Subject: [PATCH 05/10] fix a typo --- tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf index 41bff41..4bf1b2b 100644 --- a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf @@ -63,7 +63,7 @@ process sangerWxsVariantCaller { path tidx path tumour_bas path normal - path nidex + path nidx path normal_bas output: From bd525c61088f9e54000b40072dbc87b3f6df4cf2 Mon Sep 17 00:00:00 2001 From: Junjun Zhang Date: Thu, 12 Mar 2020 17:12:16 -0400 Subject: [PATCH 06/10] set analysisWXS.sh executable, add .dockerignore file --- tools/sanger-wxs-variant-caller/.dockerignore | 5 +++++ tools/sanger-wxs-variant-caller/analysisWXS.sh | 0 2 files changed, 5 insertions(+) create mode 100644 tools/sanger-wxs-variant-caller/.dockerignore mode change 100644 => 100755 tools/sanger-wxs-variant-caller/analysisWXS.sh diff --git a/tools/sanger-wxs-variant-caller/.dockerignore b/tools/sanger-wxs-variant-caller/.dockerignore new file mode 100644 index 0000000..71266ec --- /dev/null +++ b/tools/sanger-wxs-variant-caller/.dockerignore @@ -0,0 +1,5 @@ +.gitignore +.nextflow* +tests +work +outdir diff --git a/tools/sanger-wxs-variant-caller/analysisWXS.sh b/tools/sanger-wxs-variant-caller/analysisWXS.sh old mode 100644 new mode 100755 From 134cc799e5877d84b38a7be01fd3d000d1e7e537 Mon Sep 17 00:00:00 2001 From: lindaxiang Date: Thu, 16 Apr 2020 12:59:56 -0400 Subject: [PATCH 07/10] add option to disable annotation step --- .../sanger-wxs-variant-caller/analysisWXS.sh | 28 +- tools/sanger-wxs-variant-caller/ds-cgpwxs.pl | 285 ++++++++++++++++++ .../sanger-wxs-variant-caller.cwl | 7 + .../sanger-wxs-variant-caller.nf | 11 +- .../tests/checker.nf | 12 +- .../tests/test-job.nf.json | 6 +- 6 files changed, 326 insertions(+), 23 deletions(-) create mode 100755 tools/sanger-wxs-variant-caller/ds-cgpwxs.pl diff --git a/tools/sanger-wxs-variant-caller/analysisWXS.sh b/tools/sanger-wxs-variant-caller/analysisWXS.sh index fbd876d..e4162d8 100755 --- a/tools/sanger-wxs-variant-caller/analysisWXS.sh +++ b/tools/sanger-wxs-variant-caller/analysisWXS.sh @@ -198,18 +198,26 @@ unset do_parallel declare -A do_parallel # annotate pindel -rm -f $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.annot.vcf.gz* -echo -e "\t[Parallel block 3] Pindel_annot added..." -do_parallel[cgpPindel_annot]="AnnotateVcf.pl -t -c $REF_BASE/vagrent/vagrent.cache.gz \ - -i $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.flagged.vcf.gz \ - -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.annot.vcf" +if [ ! -z ${SKIPANNOT+x} ]; then + do_parallel[cgpPindel_annot]="echo 'Pindel_annot disabled by params'" +else + rm -f $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.annot.vcf.gz* + echo -e "\t[Parallel block 3] Pindel_annot added..." + do_parallel[cgpPindel_annot]="AnnotateVcf.pl -t -c $REF_BASE/vagrent/vagrent.cache.gz \ + -i $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.flagged.vcf.gz \ + -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/pindel/${NAME_MT}_vs_${NAME_WT}.annot.vcf" +fi # annotate caveman -rm -f $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.annot.muts.vcf.gz* -echo -e "\t[Parallel block 3] CaVEMan_annot added..." -do_parallel[CaVEMan_annot]="AnnotateVcf.pl -t -c $REF_BASE/vagrent/vagrent.cache.gz \ - -i $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.flagged.muts.vcf.gz \ - -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.annot.muts.vcf" +if [ ! -z ${SKIPANNOT+x} ]; then + do_parallel[CaVEMan_annot]="echo 'CaVEMan_annot disabled by params'" +else + rm -f $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.annot.muts.vcf.gz* + echo -e "\t[Parallel block 3] CaVEMan_annot added..." + do_parallel[CaVEMan_annot]="AnnotateVcf.pl -t -c $REF_BASE/vagrent/vagrent.cache.gz \ + -i $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.flagged.muts.vcf.gz \ + -o $OUTPUT_DIR/${NAME_MT}_vs_${NAME_WT}/caveman/${NAME_MT}_vs_${NAME_WT}.annot.muts.vcf" +fi echo "Starting Parallel block 3: `date`" run_parallel $CPU do_parallel diff --git a/tools/sanger-wxs-variant-caller/ds-cgpwxs.pl b/tools/sanger-wxs-variant-caller/ds-cgpwxs.pl new file mode 100755 index 0000000..ef7ed1f --- /dev/null +++ b/tools/sanger-wxs-variant-caller/ds-cgpwxs.pl @@ -0,0 +1,285 @@ +#!/usr/bin/perl + +use strict; +use Getopt::Long; +use File::Path qw(make_path); +use Pod::Usage qw(pod2usage); +use Data::Dumper; +use autodie qw(:all); +use warnings FATAL => 'all'; + +pod2usage(-verbose => 1, -exitval => 1) if(@ARGV == 0); + +# set defaults +my %opts = ('c' => undef, + 'o' => $ENV{HOME}, + 'sp' => undef, + 'as' => undef, + ); + +GetOptions( 'h|help' => \$opts{'h'}, + 'm|man' => \$opts{'m'}, + 'r|reference=s' => \$opts{'r'}, + 'a|annot=s' => \$opts{'a'}, + 'si|snv_indel=s' => \$opts{'si'}, + 't|tumour=s' => \$opts{'t'}, + 'tidx=s' => \$opts{'tidx'}, + 'n|normal=s' => \$opts{'n'}, + 'nidx=s' => \$opts{'nidx'}, + 'e|exclude=s' => \$opts{'e'}, + 'sp|species:s' => \$opts{'sp'}, + 'as|assembly:s' => \$opts{'as'}, + 'sa|skipannot' => \$opts{'sa'}, + 'c|cores:i' => \$opts{'c'}, + 'o|outdir:s' => \$opts{'o'}, +) or pod2usage(2); + +pod2usage(-verbose => 1, -exitval => 0) if(defined $opts{'h'}); +pod2usage(-verbose => 2, -exitval => 0) if(defined $opts{'m'}); + +delete $opts{'h'}; +delete $opts{'m'}; + +resolve_sp_as(\%opts); + +printf "Options loaded: \n%s\n",Dumper(\%opts); + +# check for bas file +for my $base_af(($opts{'t'}, $opts{'n'})) { + warn "WARN: No 'bas' file found for $base_af, this is generated by the mapping flow\n". + "\tWill generate internally but suboptimal\n" unless(-e "$base_af.bas"); +} + +# figure out if ref already unpacked: +my $ref_area = $opts{'o'}.'/reference_files'; +my $ref_unpack = 1; +if($opts{'r'} eq $opts{'a'} && $opts{'r'} eq $opts{'si'} && -d $opts{'r'}) { + $ref_area = $opts{'r'}; + $ref_unpack = 0; +} +else { + ref_unpack($ref_area, $opts{'r'}); + ref_unpack($ref_area, $opts{'a'}); + ref_unpack($ref_area, $opts{'si'}); +} + +## now complete the caveman flaging file correctly +my $ini = add_species_flag_ini($opts{'sp'}, $ref_area.'/caveman/flag.vcf.config.WXS.ini', $opts{'o'}); + +# make the param file +make_path($opts{'o'}) unless(-e $opts{'o'}); +my $run_file = $opts{'o'}.'/run.params'; +open my $FH,'>',$run_file or die "Failed to write to $run_file: $!"; +print $FH "export PCAP_THREADED_REM_LOGS=1\n"; +# hard-coded +printf $FH "PROTOCOL=WXS\n"; +# required options +printf $FH "OUTPUT_DIR='%s'\n", $opts{'o'}; +printf $FH "REF_BASE='%s'\n", $ref_area; +printf $FH "BAM_MT='%s'\n", $opts{'t'}; +printf $FH "IDX_MT='%s'\n", $opts{'tidx'}; +printf $FH "BAM_WT='%s'\n", $opts{'n'}; +printf $FH "IDX_WT='%s'\n", $opts{'nidx'}; +printf $FH "CONTIG_EXCLUDE='%s'\n", $opts{'e'}; +printf $FH "SPECIES='%s'\n", $opts{'sp'}; +printf $FH "ASSEMBLY='%s'\n", $opts{'as'}; +printf $FH "SNVFLAG='%s'\n", $ini; +printf $FH "CPU=%d\n", $opts{'c'} if(defined $opts{'c'}); +printf $FH "CLEAN_REF=%d\n", $ref_unpack; +# options to disable algorithms +print $FH "SKIPANNOT=1\n" if(exists $opts{'sa'}); +close $FH; + +exec('analysisWXS.sh', $run_file); # I will never return to the perl code + +sub resolve_sp_as { + my $options = shift; + ## read species/assembly from bam headers + my ($mt_species, $mt_assembly) = species_assembly_from_xam($options->{'t'}); + my ($wt_species, $wt_assembly) = species_assembly_from_xam($options->{'n'}); + if($mt_species ne $wt_species) { + warn "WARN: Species mismatch between T/N [CR|B]AM headers\n"; + if(!defined $options->{'sp'} || $options->{'sp'} eq q{}) { + die "ERROR: Please define species to handle this mismatch\n"; + } + } + elsif($mt_species ne q{}) { + $options->{'sp'} = $mt_species; + } + if(!defined $options->{'sp'} || $options->{'sp'} eq q{}) { + die "ERROR: Please define species, not found in [CR|B]AM headers.\n"; + } + + if($mt_assembly ne $wt_assembly) { + warn "WARN: Assembly mismatch between T/N [CR|B]AM headers\n"; + if(!defined $options->{'as'} || $options->{'as'} eq q{}) { + die "ERROR: Please define assembly to handle this mismatch\n"; + } + } + elsif($mt_assembly ne q{}) { + $options->{'as'} = $mt_assembly; + } + if(!defined $options->{'as'} || $options->{'as'} eq q{}) { + die "ERROR: Please define assembly, not found in [CR|B]AM headers.\n"; + } +} + +sub add_species_flag_ini { + my ($species, $ini_in, $outdir) = @_; + $species =~ s/ /_/g; + $species = uc $species; + my $ini_out = $outdir.'/flag.vcf.config.WXS.ini'; + open my $IN, '<', $ini_in; + open my $OUT,'>',$ini_out; + while(my $line = <$IN>) { + $line =~ s/^\[HUMAN_/[${species}_/; + print $OUT $line; + } + close $OUT; + close $IN; + return $ini_out; +} + +sub species_assembly_from_xam { + my $xam = shift; + my %assembly_set; + my %species_set; + open my $SAM, '-|', "samtools view -H $xam" or die $!; + while(my $line = <$SAM>) { + next unless($line =~ m/^\@SQ/); + chomp $line; + $line .= "\t"; # simplify matching + if($line =~ m/\tAS:([^\t]+)\t/) { + $assembly_set{$1}++; + } + if($line =~ m/\SP:([^\t]+)\t/) { + $species_set{$1}++; + } + } + close $SAM; + my $species = q{}; + my $max_val = 0; + for(keys %species_set) { + if($species_set{$_} > $max_val) { + $max_val = $species_set{$_}; + $species = $_; + } + } + my $assembly = q{}; + $max_val = 0; + for(keys %assembly_set) { + if($assembly_set{$_} > $max_val) { + $max_val = $assembly_set{$_}; + $assembly = $_; + } + } + return ($species, $assembly); +} + +sub ref_unpack { + my ($ref_area, $item) = @_; + make_path($ref_area) unless(-d $ref_area); + my $untar = sprintf 'tar --strip-components 1 -C %s -zxvf %s', $ref_area, $item; + system($untar) && die $!; + return 1; +} + +__END__ + + +=head1 NAME + +dh-wrapper.pl - Generate the param file and execute analysisWXS.sh (for dockstore) + +=head1 SYNOPSIS + +dh-wrapper.pl [options] [file(s)...] + + Required parameters: + -reference -r Path to core reference tar.gz + -annot -a Path to VAGrENT*.tar.gz + -snv_indel -si Path to SNV_INDEL*.tar.gz + -tumour -t Tumour [CR|B]AM file + -tidx Tumour index file + -normal -n Normal [CR|B]AM file + -nidx Normal index file + -exclude -e Exclude these contigs from analysis + e.g. NC_007605,hs37d5,GL% + + Optional parameters + -species -sp Species name (may require quoting) + -assembly -a Reference assembly + -outdir -o Set the output folder [$HOME] + -cores -c Set the number of cpu/cores available [default all]. + + Other: + -help -h Brief help message. + -man -m Full documentation. + +=head1 DESCRIPTION + +Wrapper script to map dockstore cwl inputs to PARAMS file used by underlying code. + +=head1 OPTION DETAILS + +=over 4 + +=item B<-reference> + +Path to mapping tar.gz reference files + +=item B<-annot> + +Path to VAGrENT*.tar.gz + +=item B<-snv_indel> + +Path to Path to SNV_INDEL*.tar.gz + +=item B<-tumour> + +Path to tumour BAM or CRAM file with co-located index and BAS file. + +=item B<-tidx> + +Path to tumour alignment file index (bai|csi|crai), still needs to be colocated. + +=item B<-normal> + +Path to normal BAM or CRAM file with co-located index and BAS file. + +=item B<-nidx> + +Path to normal alignment file index (bai|csi|crai), still needs to be colocated. + +=item B<-exclude> + +Contigs to be excluded from analysis, csv, use '%' for wildcard. + +=item B<-species> + +Specify overriding species, by default will select the most prevelant entry in +[CR|B]AM header (to cope with inclusion of viral/decoy sequences). + +=item B<-assembly> + +Specify overriding assembly, by default will select the most prevelant entry in +[CR|B]AM header (to cope with inclusion of viral/decoy sequences). + +=item B<-skipannot> +Disable Pindel, CAVEMan Annotation. + +=item B<-outdir> + +Set the output directory. Defaults to $HOME. + +NOTE: Should B be set when working with dockstore wrapper. + +=item B<-cores> + +Sets the number of cores to be used during processing. Default to use all at appropriate +points in analysis. + +=back + +=cut diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.cwl b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.cwl index f03496a..57ebb40 100644 --- a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.cwl +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.cwl @@ -119,6 +119,13 @@ inputs: separate: true shellQuote: true + skipannot: + type: boolean? + doc: "Disable Pindel and CaVEMan annotation steps" + default: false + inputBinding: + prefix: -skipannot + separate: true outputs: run_params: diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf index 4bf1b2b..e3542ae 100644 --- a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf @@ -24,9 +24,9 @@ nextflow.preview.dsl=2 version = '3.1.6-2' -params.reference = "" -params.annot = "" -params.snv_indel = "" +params.ref_genome_tar = "" +params.vagrent_annot = "" +params.ref_snv_indel_tar = "" params.tumour = "" params.tumourIdx = "" params.normal = "" @@ -34,9 +34,10 @@ params.normalIdx = "" params.exclude = "chrUn%,HLA%,%_alt,%_random,chrM,chrEBV" params.species = "human" params.assembly = "GRCh38" +params.skipannot = false params.container_version = "" params.cpus = 18 -params.mem = 4 // GB +params.mem = 32 // GB def getSangerWxsSecondaryFiles(main_file){ //this is kind of like CWL's secondary files @@ -72,6 +73,7 @@ process sangerWxsVariantCaller { path "WXS_*_vs_*.timings.tar.gz", emit: timings script: + arg_skipannot = params.skipannot ? "-skipannot" : "" """ /opt/wtsi-cgp/bin/ds-cgpwxs.pl \ -cores ${task.cpus} \ @@ -85,6 +87,7 @@ process sangerWxsVariantCaller { -exclude ${params.exclude} \ -species ${params.species} \ -assembly ${params.assembly} \ + ${arg_skipannot} \ -outdir \$PWD """ } diff --git a/tools/sanger-wxs-variant-caller/tests/checker.nf b/tools/sanger-wxs-variant-caller/tests/checker.nf index 393f1f8..1a6cdf9 100644 --- a/tools/sanger-wxs-variant-caller/tests/checker.nf +++ b/tools/sanger-wxs-variant-caller/tests/checker.nf @@ -23,9 +23,9 @@ nextflow.preview.dsl=2 -params.reference = "" -params.annot = "" -params.snv_indel = "" +params.ref_genome_tar = "" +params.vagrent_annot = "" +params.ref_snv_indel_tar = "" params.tumour = "" params.tumourIdx = "" params.normal = "" @@ -45,9 +45,9 @@ Channel workflow { main: sangerWxsVariantCaller( - file(params.reference), - file(params.annot), - file(params.snv_indel), + file(params.ref_genome_tar), + file(params.vagrent_annot), + file(params.ref_snv_indel_tar), file(params.tumour), file(params.tumourIdx), tumour_ch.collect(), diff --git a/tools/sanger-wxs-variant-caller/tests/test-job.nf.json b/tools/sanger-wxs-variant-caller/tests/test-job.nf.json index 6eb02ac..318c45f 100644 --- a/tools/sanger-wxs-variant-caller/tests/test-job.nf.json +++ b/tools/sanger-wxs-variant-caller/tests/test-job.nf.json @@ -1,7 +1,7 @@ { - "reference": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/core_ref_GRCh38_hla_decoy_ebv.tar.gz", - "annot": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/VAGrENT_ref_GRCh38_hla_decoy_ebv_ensembl_91.tar.gz", - "snv_indel": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/SNV_INDEL_ref_GRCh38_hla_decoy_ebv-fragment.tar.gz", + "ref_genome_tar": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/core_ref_GRCh38_hla_decoy_ebv.tar.gz", + "vagrent_annot": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/VAGrENT_ref_GRCh38_hla_decoy_ebv_ensembl_91.tar.gz", + "ref_snv_indel_tar": "https://object.cancercollaboratory.org:9080/swift/v1/genomics-public-data/sanger-variant-calling/SNV_INDEL_ref_GRCh38_hla_decoy_ebv-fragment.tar.gz", "tumour": "", "tumourIdx": "", "normal": "", From f9148799254a571103c153535b4d7afc48b344b8 Mon Sep 17 00:00:00 2001 From: Junjun Zhang Date: Fri, 17 Apr 2020 13:17:05 -0400 Subject: [PATCH 08/10] fix the version --- tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf index e3542ae..4f7f832 100644 --- a/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf +++ b/tools/sanger-wxs-variant-caller/sanger-wxs-variant-caller.nf @@ -22,7 +22,7 @@ */ nextflow.preview.dsl=2 -version = '3.1.6-2' +version = '3.1.6-3' params.ref_genome_tar = "" params.vagrent_annot = "" From 965dad98d484bc1d80a9d0a63895ab71f3fc26c7 Mon Sep 17 00:00:00 2001 From: Junjun Zhang Date: Fri, 17 Apr 2020 13:26:37 -0400 Subject: [PATCH 09/10] copy missing script into docker image --- tools/sanger-wxs-variant-caller/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/sanger-wxs-variant-caller/Dockerfile b/tools/sanger-wxs-variant-caller/Dockerfile index 9a7d1b0..4975921 100644 --- a/tools/sanger-wxs-variant-caller/Dockerfile +++ b/tools/sanger-wxs-variant-caller/Dockerfile @@ -2,4 +2,6 @@ FROM quay.io/wtsicgp/dockstore-cgpwxs:3.1.6 COPY analysisWXS.sh $OPT/bin/analysisWXS.sh +COPY ds-cgpwgs.pl $OPT/bin/ds-cgpwgs.pl + CMD ["/bin/bash"] From ca0f149141c610c88663a869f8dbf25028613507 Mon Sep 17 00:00:00 2001 From: Junjun Zhang Date: Fri, 17 Apr 2020 13:29:26 -0400 Subject: [PATCH 10/10] correct the file name --- tools/sanger-wxs-variant-caller/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/sanger-wxs-variant-caller/Dockerfile b/tools/sanger-wxs-variant-caller/Dockerfile index 4975921..308e971 100644 --- a/tools/sanger-wxs-variant-caller/Dockerfile +++ b/tools/sanger-wxs-variant-caller/Dockerfile @@ -2,6 +2,6 @@ FROM quay.io/wtsicgp/dockstore-cgpwxs:3.1.6 COPY analysisWXS.sh $OPT/bin/analysisWXS.sh -COPY ds-cgpwgs.pl $OPT/bin/ds-cgpwgs.pl +COPY ds-cgpwxs.pl $OPT/bin/ds-cgpwxs.pl CMD ["/bin/bash"]