From 0c09091762accf8716ef7853dded34e1c86497aa Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Wed, 17 Apr 2019 19:06:00 +1000 Subject: snap: init --- default.nix | 1 + test-tnpair.nix | 1 + tools/snap-align.nix | 37 +++++++++++++++++++++++++++++++++++++ tools/snap-app.nix | 19 +++++++++++++++++++ tools/snap-index.nix | 22 ++++++++++++++++++++++ tools/snap.nix | 17 +++++++++++++++++ 6 files changed, 97 insertions(+) create mode 100644 tools/snap-align.nix create mode 100644 tools/snap-app.nix create mode 100644 tools/snap-index.nix create mode 100644 tools/snap.nix diff --git a/default.nix b/default.nix index 824ea82..604badb 100644 --- a/default.nix +++ b/default.nix @@ -29,6 +29,7 @@ let platypus = callBionix ./tools/platypus.nix {}; ref = callBionix ./lib/references.nix {}; samtools = callBionix ./tools/samtools.nix {}; + snap = callBionix ./tools/snap.nix {}; snpeff = callBionix ./tools/snpeff.nix {}; strelka = callBionix ./tools/strelka.nix {}; ascat = callBionix ./tools/ascat.nix {}; diff --git a/test-tnpair.nix b/test-tnpair.nix index 4a3a59e..cd8620a 100644 --- a/test-tnpair.nix +++ b/test-tnpair.nix @@ -50,6 +50,7 @@ let (ln (strelka.variants tnpairResult.glvariants) "strelka.gl.vcf") (ln (bowtie.align {inherit ref;} tnpair.normal.files) "alignments/bowtie-normal.bam") (ln (minimap2.align {inherit ref; preset = "sr"; } tnpair.normal.files) "alignments/minimap2-normal.bam") + (ln (snap.align {inherit ref; } tnpair.normal.files) "alignments/snap-normal.bam") (ln (gridss.callVariants {} (with tnpairResult.alignments; [normal tumour])) "gridss") (ln (gridss.call (with tnpairResult.alignments; [normal tumour])) "gridss2") (ln (gridss.callAndAssemble (with tnpairResult.alignments; [normal tumour])) "gridss3") diff --git a/tools/snap-align.nix b/tools/snap-align.nix new file mode 100644 index 0000000..4647142 --- /dev/null +++ b/tools/snap-align.nix @@ -0,0 +1,37 @@ +{ bionix +, ref +, bamOutput ? true +, flags ? null +, indexAttrs ? {} +}: + +{ input1 +, input2 ? null +}: + +with bionix; +with lib; +with types; +with compression; + +let + fa = f: matchFiletype "snap-ref" { fa = _: f; } f; + fq = f: matchFiletype "snap-input" { fq = _: f; gz = matchFiletype' "snap-input" { fq = _: f; }; } f; + +in stage { + name = "snap-align"; + buildInputs = with pkgs; [ bionix.snap.app bc ] ++ optional bamOutput samtools; + buildCommand = '' + for f in /* ; do + ln -s $f + done + snap-aligner ${if input2 == null then "single" else "paired"} ${bionix.snap.index indexAttrs ref} ${fq input1} \ + ${optionalString (input2 != null) (fq input2)} \ + -o ${if bamOutput then "-bam" else "-sam" } - \ + -t $NIX_BUILD_CORES \ + ${optionalString (flags != null) flags} \ + | samtools sort -n > $out + ''; + passthru.filetype = if bamOutput then filetype.bam {ref = ref; sorting = sort.name {};} else filetype.sam {ref = ref; sorting = sort.name {};}; + passthru.multicore = true; +} diff --git a/tools/snap-app.nix b/tools/snap-app.nix new file mode 100644 index 0000000..c845d1f --- /dev/null +++ b/tools/snap-app.nix @@ -0,0 +1,19 @@ +{stdenv, fetchFromGitHub, zlib}: + +stdenv.mkDerivation rec { + name = "snap-git"; + src = fetchFromGitHub { + owner = "amplab"; + repo = "snap"; + rev = "669a341cfa5c3e0a80098bf5aa51e3332f868d2b"; + sha256 = "1810d8wn88wbagip7hlnwwg7z6jqyiyfnnvdiir06s3rrmn95mjh"; + }; + buildInputs = [ zlib ]; + postConfigure = '' + sed -i 's/-Wno-format/-Wformat/g' Makefile + ''; + installPhase = '' + mkdir -p $out/bin + cp snap-aligner $out/bin + ''; +} diff --git a/tools/snap-index.nix b/tools/snap-index.nix new file mode 100644 index 0000000..b72ee01 --- /dev/null +++ b/tools/snap-index.nix @@ -0,0 +1,22 @@ +{ bionix +, flags ? null +}: + +ref: + +with bionix; +with lib; +with types; + +assert (matchFiletype "snap-index" { fa = _: true; } ref); + +stage { + name = "snap-index"; + buildInputs = [ bionix.snap.app ]; + buildCommand = '' + ln -s ${ref} ref.fa + mkdir $out + snap-aligner index ref.fa $out -t$NIX_BUILD_CORES ${optionalString (flags != null) flags} + ''; + passthru.multicore = true; +} diff --git a/tools/snap.nix b/tools/snap.nix new file mode 100644 index 0000000..851c51a --- /dev/null +++ b/tools/snap.nix @@ -0,0 +1,17 @@ +{ bionix }: + +with bionix; + +rec { + app = pkgs.callPackage ./snap-app.nix {}; + + /* Align reads against a reference + Type: snap :: {ref :: fasta, bamOutput :: bool, ...} -> {input1, input2} -> bam/sam + */ + align = callBionixE ./snap-align.nix; + + /* Creates an reference index for SNAP + Type: index :: {...} -> fasta -> SNAP index + */ + index = callBionixE ./snap-index.nix; +} -- cgit v1.2.3