aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--default.nix1
-rw-r--r--tools/star-align.nix38
-rw-r--r--tools/star-index.nix33
-rw-r--r--tools/star.nix8
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;
+}