aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Bedo <cu@cua0.org>2019-08-15 14:27:43 +1000
committerJustin Bedo <cu@cua0.org>2019-08-15 14:27:43 +1000
commit92da3257c6867b6f54943e39345ab295703a30c4 (patch)
tree2335f6bcf107bea657b21386eaeda194d969c7ec
parent3e037c4d706f5ac02c663a8d7f56703373785d29 (diff)
hisat2: init
-rw-r--r--default.nix1
-rw-r--r--test-tnpair.nix1
-rw-r--r--tools/hisat2-align.nix38
-rw-r--r--tools/hisat2-extractExons.nix17
-rw-r--r--tools/hisat2-extractSpliceSites.nix17
-rw-r--r--tools/hisat2-index.nix27
-rw-r--r--tools/hisat2.nix18
7 files changed, 119 insertions, 0 deletions
diff --git a/default.nix b/default.nix
index 5bc000a..541d519 100644
--- a/default.nix
+++ b/default.nix
@@ -38,6 +38,7 @@ let
fastp = callBionix ./tools/fastp.nix {};
octopus = callBionix ./tools/octopus.nix {};
snver = callBionix ./tools/snver.nix {};
+ hisat2 = callBionix ./tools/hisat2.nix {};
slurm = attrs: bionix.extend (self: super: with self; rec {
slurmDefs = { ppn = 1; mem = 1; walltime = "24:00:00"; partition = null; slurmFlags = null; salloc = "/usr/bin/salloc"; srun = "/usr/bin/srun"; } // attrs;
diff --git a/test-tnpair.nix b/test-tnpair.nix
index eaabd9f..0f2b55d 100644
--- a/test-tnpair.nix
+++ b/test-tnpair.nix
@@ -61,6 +61,7 @@ let
"minimap2-normal.bam" = minimap2.align {inherit ref; preset = "sr"; } tnpair.normal.files;
"snap-normal.bam" = snap.align {inherit ref; } tnpair.normal.files;
"${tnpair.tumour.name}.flagstat" = flagstat tnpairResult.alignments.tumour;
+ "hisat2-normal.bam" = hisat2.align {inherit ref;} tnpair.normal.files;
};
testNaming = linkOutputs {
diff --git a/tools/hisat2-align.nix b/tools/hisat2-align.nix
new file mode 100644
index 0000000..277b499
--- /dev/null
+++ b/tools/hisat2-align.nix
@@ -0,0 +1,38 @@
+{ bionix
+, ref
+, bamOutput ? true
+, flags ? null
+, indexAttrs ? {}
+}:
+
+{ input1
+, input2 ? null
+}:
+
+with bionix;
+with lib;
+with types;
+with compression;
+
+let
+ fa = f: matchFiletype "hisat2-ref" { fa = _: f; } f;
+ fq = f: matchFiletype "hisat2-input" { fq = _: f; gz = matchFiletype' "hisat2-input" { fq = _: "<(gunzip < ${f})"; }; } f;
+
+in stage {
+ name = "hisat2-align";
+ buildInputs = with pkgs; [ hisat2 bc samtools ];
+ buildCommand = ''
+ ln -s ${fa ref} ref.fa
+ cores=$(echo $NIX_BUILD_CORES ${optionalString bamOutput "- 1"} | bc)
+ if [[ $cores -lt 1 ]] ; then
+ cores=1
+ fi
+ hisat2 ${optionalString (flags != null) flags} -p $cores -x ${hisat2.index indexAttrs ref}/ \
+ ${if input2 != null then "-1 ${fq input1} -2 ${fq input2}" else "-U ${fq input1}"} \
+ ${optionalString bamOutput "| samtools view -b"} \
+ | 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/hisat2-extractExons.nix b/tools/hisat2-extractExons.nix
new file mode 100644
index 0000000..5785954
--- /dev/null
+++ b/tools/hisat2-extractExons.nix
@@ -0,0 +1,17 @@
+{ bionix
+, flags ? null
+}:
+
+gtf:
+
+with bionix;
+with lib;
+with types;
+
+stage {
+ name = "hisat2-extractExons";
+ buildInputs = with pkgs; [ hisat2 ];
+ buildCommand = ''
+ hisat2_extract_exons.py ${gtf} > $out
+ '';
+}
diff --git a/tools/hisat2-extractSpliceSites.nix b/tools/hisat2-extractSpliceSites.nix
new file mode 100644
index 0000000..553e682
--- /dev/null
+++ b/tools/hisat2-extractSpliceSites.nix
@@ -0,0 +1,17 @@
+{ bionix
+, flags ? null
+}:
+
+gtf:
+
+with bionix;
+with lib;
+with types;
+
+stage {
+ name = "hisat2-extractSpliceSites";
+ buildInputs = with pkgs; [ hisat2 ];
+ buildCommand = ''
+ hisat2_extract_splice_sites.py ${gtf} > $out
+ '';
+}
diff --git a/tools/hisat2-index.nix b/tools/hisat2-index.nix
new file mode 100644
index 0000000..82935eb
--- /dev/null
+++ b/tools/hisat2-index.nix
@@ -0,0 +1,27 @@
+{ bionix
+, gtf ? null
+, flags ? null
+, extractSpliceSitesAttrs ? {}
+, extractExonsAttrs ? {}
+}:
+
+ref:
+
+with bionix;
+with lib;
+with types;
+
+assert (matchFiletype "hisat2-index" { fa = _: true; } ref);
+
+stage {
+ name = "hisat2-index";
+ buildInputs = with pkgs; [ hisat2 ];
+ buildCommand = ''
+ ln -s ${ref} ref.fa
+ mkdir $out
+ hisat2-build -p $NIX_BUILD_CORES ${optionalString (flags != null) flags} \
+ ${optionalString (gtf != null) "--ss ${hisat2.extractSpliceSites extractSpliceSitesAttrs gtf} --exon ${hisat2.extractExons extractExonsAttrs gtf}"} \
+ ref.fa $out/
+ '';
+ passthru.multicore = true;
+}
diff --git a/tools/hisat2.nix b/tools/hisat2.nix
new file mode 100644
index 0000000..8cc4ddf
--- /dev/null
+++ b/tools/hisat2.nix
@@ -0,0 +1,18 @@
+{ bionix }:
+
+with bionix;
+
+rec {
+ /* Align read against a reference
+ Type: hisat2-mem :: {ref :: fasta, bamOutput :: bool, ...} -> {input1, input2} -> bam/sam
+ */
+ align = callBionixE ./hisat2-align.nix;
+
+ /* Creates an reference index for HISAT2
+ Type: index :: {...} -> fasta -> HISAT2 index
+ */
+ index = callBionixE ./hisat2-index.nix;
+
+ extractSpliceSites = callBionixE ./hisat2-extractSpliceSites.nix;
+ extractExons = callBionixE ./hisat2-extractExons.nix;
+}