diff options
author | Justin Bedo <cu@cua0.org> | 2019-08-15 14:27:43 +1000 |
---|---|---|
committer | Justin Bedo <cu@cua0.org> | 2019-08-15 14:27:43 +1000 |
commit | 92da3257c6867b6f54943e39345ab295703a30c4 (patch) | |
tree | 2335f6bcf107bea657b21386eaeda194d969c7ec /tools | |
parent | 3e037c4d706f5ac02c663a8d7f56703373785d29 (diff) |
hisat2: init
Diffstat (limited to 'tools')
-rw-r--r-- | tools/hisat2-align.nix | 38 | ||||
-rw-r--r-- | tools/hisat2-extractExons.nix | 17 | ||||
-rw-r--r-- | tools/hisat2-extractSpliceSites.nix | 17 | ||||
-rw-r--r-- | tools/hisat2-index.nix | 27 | ||||
-rw-r--r-- | tools/hisat2.nix | 18 |
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; +} |