diff options
author | Justin Bedo <cu@cua0.org> | 2020-11-02 11:11:42 +1100 |
---|---|---|
committer | Justin Bedo <cu@cua0.org> | 2020-11-02 11:11:55 +1100 |
commit | a719ec06337643949bb0a9cbbecb7425340c49af (patch) | |
tree | 32a5403417583fa70910908d04d633f9dacd8b44 | |
parent | fe1ac7b64a2a56bcd2d71dd3fd4f55912c277a86 (diff) |
star: init
-rw-r--r-- | default.nix | 1 | ||||
-rw-r--r-- | tools/star-align.nix | 38 | ||||
-rw-r--r-- | tools/star-index.nix | 33 | ||||
-rw-r--r-- | tools/star.nix | 8 |
4 files changed, 80 insertions, 0 deletions
diff --git a/default.nix b/default.nix index 170a6d3..b04fdc2 100644 --- a/default.nix +++ b/default.nix @@ -47,6 +47,7 @@ let lumpy = callBionix ./tools/lumpy.nix {}; lastal = callBionix ./tools/last.nix {}; whisper = callBionix ./tools/whisper.nix {}; + star = callBionix ./tools/star.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/tools/star-align.nix b/tools/star-align.nix new file mode 100644 index 0000000..0cf9ab9 --- /dev/null +++ b/tools/star-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 "star-ref" { fa = _: f; } f; + fq = f: matchFiletype "star-input" { fq = _: f; gz = matchFiletype' "star-input" { fq = _: "<(gunzip < ${f})"; }; } f; + +in stage { + name = "star-align"; + buildInputs = with pkgs; [ star 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 + STAR ${optionalString (flags != null) flags} \ + --runThreadN $cores \ + --genomeDir ${star.index indexAttrs ref} \ + --readFilesIn ${fq input1} ${optionalString (input2 != null) (fq input2)} + ${if bamOutput then "samtools view -b Aligned.out.sam > $out" else "cp Aligned.out.sam $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/star-index.nix b/tools/star-index.nix new file mode 100644 index 0000000..4bc8399 --- /dev/null +++ b/tools/star-index.nix @@ -0,0 +1,33 @@ +{ bionix +, gtf +, flags ? null +, extractSpliceSitesAttrs ? {} +, extractExonsAttrs ? {} +, overhang ? 100 +}: + +ref: + +with bionix; +with lib; +with types; + +assert (matchFiletype "star-index" { fa = _: true; } ref); + +stage { + name = "star-index"; + buildInputs = with pkgs; [ star ]; + buildCommand = '' + ln -s ${ref} ref.fa + mkdir $out + STAR --runMode genomeGenerate \ + --runThreadN $NIX_BUILD_CORES \ + --sjdbGTFfile ${gtf} \ + --genomeDir $out \ + --genomeFastaFiles ${ref} \ + --sjdbOverhang ${toString overhang} \ + ${optionalString (flags != null) flags} + ''; + passthru.multicore = true; + stripStorePaths = false; +} diff --git a/tools/star.nix b/tools/star.nix new file mode 100644 index 0000000..a0a2d58 --- /dev/null +++ b/tools/star.nix @@ -0,0 +1,8 @@ +{ bionix }: + +with bionix; + +{ + align = callBionixE ./star-align.nix; + index = callBionixE ./star-index.nix; +} |