From 92da3257c6867b6f54943e39345ab295703a30c4 Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Thu, 15 Aug 2019 14:27:43 +1000 Subject: hisat2: init --- default.nix | 1 + test-tnpair.nix | 1 + tools/hisat2-align.nix | 38 +++++++++++++++++++++++++++++++++++++ tools/hisat2-extractExons.nix | 17 +++++++++++++++++ tools/hisat2-extractSpliceSites.nix | 17 +++++++++++++++++ tools/hisat2-index.nix | 27 ++++++++++++++++++++++++++ tools/hisat2.nix | 18 ++++++++++++++++++ 7 files changed, 119 insertions(+) create mode 100644 tools/hisat2-align.nix create mode 100644 tools/hisat2-extractExons.nix create mode 100644 tools/hisat2-extractSpliceSites.nix create mode 100644 tools/hisat2-index.nix create mode 100644 tools/hisat2.nix 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; +} -- cgit v1.2.3