aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--default.nix1
-rw-r--r--test-tnpair.nix1
-rw-r--r--tools/snap-align.nix37
-rw-r--r--tools/snap-app.nix19
-rw-r--r--tools/snap-index.nix22
-rw-r--r--tools/snap.nix17
6 files changed, 97 insertions, 0 deletions
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;
+}