From 86b1b192501eecc8a4e566795327772c32b1633d Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Wed, 5 Dec 2018 10:48:05 +1100 Subject: bowtie: init --- default.nix | 1 + test-tnpair.nix | 11 +++++++---- tools/bowtie-align.nix | 36 ++++++++++++++++++++++++++++++++++++ tools/bowtie-index.nix | 22 ++++++++++++++++++++++ tools/bowtie.nix | 8 ++++++++ 5 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 tools/bowtie-align.nix create mode 100644 tools/bowtie-index.nix create mode 100644 tools/bowtie.nix diff --git a/default.nix b/default.nix index 50b85a3..d607aa2 100644 --- a/default.nix +++ b/default.nix @@ -12,6 +12,7 @@ let types = callBionix ./lib/types.nix {}; bwa = callBionix ./tools/bwa.nix {}; + bowtie = callBionix ./tools/bowtie.nix {}; compression = callBionix ./tools/compression.nix {}; crumble = callBionix ./tools/crumble.nix {}; fastqc = callBionix ./tools/fastqc.nix {}; diff --git a/test-tnpair.nix b/test-tnpair.nix index a6ea163..b01d61e 100644 --- a/test-tnpair.nix +++ b/test-tnpair.nix @@ -21,7 +21,9 @@ let fetchfq = attrs: types.tagFiletype (types.filetype.fq {}) (fetchlocal attrs); fetchfa = attrs: types.tagFiletype (types.filetype.fa {}) (fetchlocal attrs); - alignWithRG = rg: bwa.align { ref = fetchfa ./example/ref.fa; flags = "-R'@RG\\tID:${rg}\\tSM:${rg}'";}; + ref = fetchfa ./example/ref.fa; + + alignWithRG = rg: bwa.align { inherit ref; flags = "-R'@RG\\tID:${rg}\\tSM:${rg}'";}; sort = samtools.sort {}; flagstat = samtools.flagstat {}; check = fastqc.check {}; @@ -35,7 +37,7 @@ let }; normal = {name = "mysample2"; files = { input1 = fetchfq ./example/sample2-1.fq; - input2 = fetchfq ./example/sample2-1.fq; + input2 = fetchfq ./example/sample2-2.fq; }; }; }; @@ -53,8 +55,9 @@ let mkdir $out ln -s ${tnpairResult.variants} $out/strelka mkdir $out/alignments - ln -s ${gridss.callVariants {} (with tnpairResult.alignments; [tumour])} $out/gridss - ln -s ${gridss.call (with tnpairResult.alignments; [tumour])} $out/gridss2 + ln -s ${bowtie.align {inherit ref;} tnpair.normal.files} $out/alignments/bowtie-normal.bam + ln -s ${gridss.callVariants {} (with tnpairResult.alignments; [normal tumour])} $out/gridss + ln -s ${gridss.call (with tnpairResult.alignments; [normal tumour])} $out/gridss2 ln -s ${samtools.merge {} [tnpairResult.alignments.tumour tnpairResult.alignments.normal]} $out/alignments/merged.bam ln -s ${samtools.view { outfmt = types.toCram; } (tnpairResult.alignments.tumour)} $out/alignments/${tnpair.tumour.name}.cram ln -s ${samtools.view { outfmt = types.toCram; } (tnpairResult.alignments.normal)} $out/alignments/${tnpair.normal.name}.cram diff --git a/tools/bowtie-align.nix b/tools/bowtie-align.nix new file mode 100644 index 0000000..456747a --- /dev/null +++ b/tools/bowtie-align.nix @@ -0,0 +1,36 @@ +{ bionix +, nixpkgs +, ref +, bamOutput ? true +, flags ? null +, indexAttrs ? {} +}: + +{ input1 +, input2 ? null +}: + +with nixpkgs; +with lib; +with bionix.types; +with bionix.compression; + +let + fa = f: matchFiletype "bowtie2-ref" { fa = _: f; } f; + fq = f: matchFiletype "bowtie2-input" { fq = _: f; gz = matchFiletype' "bowtie2-input" { fq = _: f; }; } f; + +in stdenv.mkDerivation { + name = "bowtie2-align"; + buildInputs = [ bowtie2 bc ] ++ optional bamOutput samtools; + buildCommand = '' + cores=$(echo $NIX_BUILD_CORES ${optionalString bamOutput "- 1"} | bc) + if [[ $cores -lt 1 ]] ; then + cores=1 + fi + bowtie2 -x ${bionix.bowtie.index indexAttrs ref}/ref ${optionalString (flags != null) flags} --threads $cores \ + ${if input2 != null then "-1 " + fq input1 + " -2 " + fq input2 else "-U " + fq input1} \ + ${optionalString bamOutput "| samtools view -b"} \ + > $out + ''; + passthru.filetype = if bamOutput then filetype.bam {ref = ref; sorting = sort.name {};} else filetype.sam {ref = ref; sorting = sort.name {};}; +} diff --git a/tools/bowtie-index.nix b/tools/bowtie-index.nix new file mode 100644 index 0000000..98e529f --- /dev/null +++ b/tools/bowtie-index.nix @@ -0,0 +1,22 @@ +{ bionix +, nixpkgs +, flags ? null +, seed ? 42 +}: + +ref: + +with nixpkgs; +with lib; +with bionix.types; + +assert (matchFiletype "bowtie-index" { fa = _: true; } ref); + +stdenv.mkDerivation { + name = "bowtie-index"; + buildInputs = [ bowtie2 ]; + buildCommand = '' + mkdir $out + bowtie2-build --seed ${toString seed} --threads $NIX_BUILD_CORES ${optionalString (flags != null) flags} ${ref} $out/ref + ''; +} diff --git a/tools/bowtie.nix b/tools/bowtie.nix new file mode 100644 index 0000000..a9fa2e8 --- /dev/null +++ b/tools/bowtie.nix @@ -0,0 +1,8 @@ +{ bionix, nixpkgs }: + +with bionix; + +{ + align = callBionix ./bowtie-align.nix; + index = callBionix ./bowtie-index.nix; +} -- cgit v1.2.3 From 060cefc054e2f6dda2e5f806c3fa146690363485 Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Mon, 10 Dec 2018 09:25:52 +1100 Subject: qsub: fix $TMPDIR location --- lib/qsub.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/qsub.nix b/lib/qsub.nix index 4ef6dbc..017e52c 100644 --- a/lib/qsub.nix +++ b/lib/qsub.nix @@ -8,14 +8,14 @@ while [ ! -e ${tmpDir}/$PBS_JOBID ] ; do sleep ${toString sleepTime} done + set -a + . ${tmpDir}/$PBS_JOBID/nix-set + set +a TMPDIR=${tmpDir}/$PBS_JOBID TEMP=$TMPDIR TMP=$TMPDIR NIX_BUILD_TOP=$TMPDIR cd $TMPDIR - set -a - . nix-set - set +a ${builder} ${lib.escapeShellArgs args} > qsub-stdout 2> qsub-stderr echo $? > qsub-exit ''; -- cgit v1.2.3 From 2a8c14c6fabc914b8cc173313a685f2b94a26aea Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Tue, 11 Dec 2018 11:09:51 +1100 Subject: qsub: prefix directories to prevent cleanup deleting top level dir --- lib/qsub.nix | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/qsub.nix b/lib/qsub.nix index 017e52c..f7b3c3e 100644 --- a/lib/qsub.nix +++ b/lib/qsub.nix @@ -5,13 +5,13 @@ args = let script = writeScript "qsub-script" '' #!${stdenv.shell} - while [ ! -e ${tmpDir}/$PBS_JOBID ] ; do + while [ ! -e ${tmpDir}/qsub-$PBS_JOBID ] ; do sleep ${toString sleepTime} done set -a - . ${tmpDir}/$PBS_JOBID/nix-set + . ${tmpDir}/qsub-$PBS_JOBID/nix-set set +a - TMPDIR=${tmpDir}/$PBS_JOBID + TMPDIR=${tmpDir}/qsub-$PBS_JOBID TEMP=$TMPDIR TMP=$TMPDIR NIX_BUILD_TOP=$TMPDIR @@ -46,15 +46,15 @@ } trap cleanup INT TERM EXIT - cp -r $TMPDIR ${tmpDir}/$id - set > ${tmpDir}/$id/nix-set + cp -r $TMPDIR ${tmpDir}/qsub-$id + set > ${tmpDir}/qsub-$id/nix-set until qstat -f ''${id%%.} 2>&1 | grep "\(Unknown Job\|job_state = C\)" > /dev/null ; do sleep ${toString sleepTime} done - cat ${tmpDir}/$id/qsub-stderr >&2 - cat ${tmpDir}/$id/qsub-stdout - if [ -e ${tmpDir}/$id/qsub-exit ]; then - exitCode=$(cat ${tmpDir}/$id/qsub-exit) + cat ${tmpDir}/qsub-$id/qsub-stderr >&2 + cat ${tmpDir}/qsub-$id/qsub-stdout + if [ -e ${tmpDir}/qsub-$id/qsub-exit ]; then + exitCode=$(cat ${tmpDir}/qsub-$id/qsub-exit) else exitCode=1 fi -- cgit v1.2.3 From d79fc6785f2b8714fa2762bd07a9a9f937bf4513 Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Tue, 11 Dec 2018 14:11:21 +1100 Subject: gridss: fix softClipsToSplitReads after assembly --- tools/gridss-annotateVariants.nix | 4 ++-- tools/gridss-assemble.nix | 2 +- tools/gridss-softClipsToSplitReads.nix | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/gridss-annotateVariants.nix b/tools/gridss-annotateVariants.nix index 655b268..3560f77 100644 --- a/tools/gridss-annotateVariants.nix +++ b/tools/gridss-annotateVariants.nix @@ -5,7 +5,7 @@ , indexAttrs ? {} , assemblyAttrs ? {} , collectMetricsAttrs ? {} -, softClipsToSplitReadsAttrs ? {} +, softClipsToSplitReadsAttrs ? { flags = "REALIGN_ENTIRE_READ=true"; } , identifyVariantsAttrs ? {} , flags ? null , config ? null @@ -45,7 +45,7 @@ let ln -s ${bionix.samtools.index indexAttrs input} $WRKDIR/$BASENAME.sv.bai ''; - assembly = bionix.samtools.sort {} (softClipsToSplitReads softClipsToSplitReadsAttrs (bionix.samtools.sort { nameSort = true;} (bionix.gridss.assemble assemblyAttrs inputs))); + assembly = bionix.samtools.sort {} (softClipsToSplitReads softClipsToSplitReadsAttrs (bionix.gridss.assemble assemblyAttrs inputs)); in assert (all sorted inputs); diff --git a/tools/gridss-assemble.nix b/tools/gridss-assemble.nix index 847830a..a8124e0 100644 --- a/tools/gridss-assemble.nix +++ b/tools/gridss-assemble.nix @@ -55,5 +55,5 @@ stdenv.mkDerivation rec { WORKING_DIR=$TMPDIR/ \ TMP_DIR=$TMPDIR/ ''; - passthru.filetype = filetype.bam { ref = ref; sorting = sort.coord {}; }; + passthru.filetype = filetype.bam { ref = ref; sorting = sort.name {}; }; } diff --git a/tools/gridss-softClipsToSplitReads.nix b/tools/gridss-softClipsToSplitReads.nix index 9bce063..c23168f 100644 --- a/tools/gridss-softClipsToSplitReads.nix +++ b/tools/gridss-softClipsToSplitReads.nix @@ -35,5 +35,5 @@ stdenv.mkDerivation rec { ${optionalString (config != null) ("OPTIONS_FILE=" + bionix.gridss.gridssConfig config)} \ WORKER_THREADS=$NIX_BUILD_CORES ''; - passthru.filetype = filetype.bam { ref = ref; sorting = matchFileSorting "grids-softClipsToSplitReads" { coord = _: input.sorting; name = _: sort.none {}; none = _: input.sorting;} input;}; + passthru.filetype = filetype.bam { ref = ref; sorting = sort.none {}; }; } -- cgit v1.2.3 From 10bdecf6c1338d7f531ddf7b41da14dfe4a4ac33 Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Tue, 11 Dec 2018 14:11:52 +1100 Subject: samtools-sort: fix reversed link for identity sort --- tools/samtools-sort.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/samtools-sort.nix b/tools/samtools-sort.nix index e77f3db..37df5c8 100644 --- a/tools/samtools-sort.nix +++ b/tools/samtools-sort.nix @@ -25,7 +25,7 @@ in stdenv.mkDerivation { buildInputs = [ samtools ]; buildCommand = if alreadySorted then - "ln -s $out ${input}" + "ln -s ${input} $out" else '' samtools sort -@ $NIX_BUILD_CORES \ -- cgit v1.2.3