diff options
author | Justin Bedo <cu@cua0.org> | 2019-06-19 11:24:38 +1000 |
---|---|---|
committer | Justin Bedo <cu@cua0.org> | 2019-07-03 14:59:27 +1000 |
commit | 0b6b3fa8fc20461b41a368b82c62c2f9d7472b31 (patch) | |
tree | 5c0e9aaf7fce678f1b930c3d27bfafb88ffc7a27 /tools | |
parent | 999743ce240460dc25b29ed1a4db0989fd3e955c (diff) |
octopus: initial functions
Diffstat (limited to 'tools')
-rw-r--r-- | tools/octopus-call.nix | 37 | ||||
-rw-r--r-- | tools/octopus-callSomatic.nix | 53 | ||||
-rw-r--r-- | tools/octopus.nix | 8 |
3 files changed, 98 insertions, 0 deletions
diff --git a/tools/octopus-call.nix b/tools/octopus-call.nix new file mode 100644 index 0000000..f88960c --- /dev/null +++ b/tools/octopus-call.nix @@ -0,0 +1,37 @@ +{ bionix +, faidxAttrs ? {} +, indexAttrs ? {} +, flags ? ""}: + +with bionix; +with lib; +with types; + +inputs: + +let + getref = f: matchFiletype "octopus-callSomatic" { bam = {ref, ...}: ref; cram = {ref, ...}: ref;} f; + refs = map getref inputs; + ref = head refs; + +in + +assert (length (unique refs) == 1); + +stage { + name = "octopus-call"; + buildInputs = with pkgs; [ octopus-caller ]; + buildCommand = '' + ln -s ${ref} ref.fa + ln -s ${samtools.faidx faidxAttrs ref} ref.fai + ${concatMapStringsSep "\n" (i: '' + ln -s ${i} $(basename ${i}).bam + ln -s ${samtools.index indexAttrs i} $(basename ${i}).bai + '') inputs} + octopus -R ref.fa -I *.bam -o $out \ + --threads=$NIX_BUILD_CORES \ + ${flags} + ''; + passthru.filtype = filetype.vcf {ref = ref;}; + passthru.multicore = true; +} diff --git a/tools/octopus-callSomatic.nix b/tools/octopus-callSomatic.nix new file mode 100644 index 0000000..e1c7ce6 --- /dev/null +++ b/tools/octopus-callSomatic.nix @@ -0,0 +1,53 @@ +{ bionix +, faidxAttrs ? {} +, indexAttrs ? {} +, flags ? ""}: + +with bionix; +with lib; +with types; + +{normal, tumours}: + +let + smScript = pkgs.writeText "smScript.awk" '' + /^@RG/{ + for(i = 1; i <= NF; i++) { + n=split($i, fields, ":") + if(n == 2 && fields[1] == "SM"){ + print fields[2] + exit + } + } + } + ''; + + inputs = [normal] ++ tumours; + getref = f: matchFiletype "octopus-callSomatic" { bam = {ref, ...}: ref; cram = {ref, ...}: ref;} f; + refs = map getref inputs; + ref = head refs; + +in + +assert (length (unique refs) == 1); + + +stage { + name = "octopus-callSomatic"; + buildInputs = with pkgs; [ octopus-caller samtools ]; + buildCommand = '' + ln -s ${ref} ref.fa + ln -s ${samtools.faidx faidxAttrs ref} ref.fai + ${concatMapStringsSep "\n" (i: '' + ln -s ${i} $(basename ${i}).bam + ln -s ${samtools.index indexAttrs i} $(basename ${i}).bai + '') inputs} + normal=$(samtools view -H ${normal} | awk -f ${smScript}) + octopus -R ref.fa -I *.bam -o $out \ + --threads=$NIX_BUILD_CORES \ + -N $normal \ + ${flags} + ''; + passthru.filetype = filetype.vcf {ref = ref;}; + passthru.multicore = true; +} diff --git a/tools/octopus.nix b/tools/octopus.nix new file mode 100644 index 0000000..4d0c7f6 --- /dev/null +++ b/tools/octopus.nix @@ -0,0 +1,8 @@ +{ bionix }: + +with bionix; + +{ + call = callBionixE ./octopus-call.nix; + callSomatic = callBionixE ./octopus-callSomatic.nix; +} |