aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-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
5 files changed, 117 insertions, 0 deletions
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;
+}