diff options
Diffstat (limited to 'day2/ex5-bwa')
-rw-r--r-- | day2/ex5-bwa/default.nix | 52 | ||||
l--------- | day2/ex5-bwa/flake.lock | 1 | ||||
-rwxr-xr-x | day2/ex5-bwa/flake.nix | 20 | ||||
-rw-r--r-- | day2/ex5-bwa/solution.nix | 19 |
4 files changed, 92 insertions, 0 deletions
diff --git a/day2/ex5-bwa/default.nix b/day2/ex5-bwa/default.nix new file mode 100644 index 0000000..9c8356a --- /dev/null +++ b/day2/ex5-bwa/default.nix @@ -0,0 +1,52 @@ +/* +BioNix is a thin wrapper over Nix: there is not much functionality +required for pipelining that is not already present in the base build +engine. As such, the focus is on providing an interface that is +convenient for specifying common bioinformatics workflows. To this end, +BioNix provides a library of tools to help simplify the specification of +common bioinformatics pipelines, with a notable focus on genomics tools. +You can see the available tools at +https://github.com/PapenfussLab/bionix/tree/master/tools. + +This exercise aims to demonstrate how to both use a tool available in +BioNix on some input data and how to chain them together. We will do a +simple alignment with BWA on some simulated reads from a bacterial +genome. The BWA tool is provided by +https://github.com/PapenfussLab/bionix/blob/master/tools/bwa.nix and as +you can see there are alignment functions for alignment with BWA/BWA2, +as well as corresponding index functions for indexing a reference +genome. Don't worry about indexing, this will be handled automatically, +you only have to declare you want an alignment and what genome and the +index will be generated if needed. + +Exercise: + +1. Sample data along with a reference will be fetched from github. As +before, hashes of the content must be known. Fill in the hashes to fully +specify the inputs. + +2. With the hashes in place, the expression should evaluate and BWA +should run. Try swapping BWA out with some of the other available +aligners in BioNix (e.g., bowtie, hisat2, minimap2, whisper). + +3. Aligners produce *unsorted* output, but co-ordinate sorted alignments +are usually desired as they are indexable by position. Pass the aligned +output to the samtools sort function to sort the alignments into co- +ordinate order. +*/ +{bionix}: +with bionix; let + input = { + input1 = fetchFastQ { + url = "https://raw.githubusercontent.com/PapenfussLab/bionix/bac9248a5e08e8afdf5485a6e27cfe72e1ca5090/examples/sample1-1.fq"; + }; + input2 = fetchFastQ { + url = "https://raw.githubusercontent.com/PapenfussLab/bionix/bac9248a5e08e8afdf5485a6e27cfe72e1ca5090/examples/sample1-2.fq"; + }; + }; + + ref = fetchFastA { + url = "https://raw.githubusercontent.com/PapenfussLab/bionix/bac9248a5e08e8afdf5485a6e27cfe72e1ca5090/examples/ref.fa"; + }; +in + bwa.align {} input diff --git a/day2/ex5-bwa/flake.lock b/day2/ex5-bwa/flake.lock new file mode 120000 index 0000000..981422e --- /dev/null +++ b/day2/ex5-bwa/flake.lock @@ -0,0 +1 @@ +../../common/flake.lock
\ No newline at end of file diff --git a/day2/ex5-bwa/flake.nix b/day2/ex5-bwa/flake.nix new file mode 100755 index 0000000..bfaca96 --- /dev/null +++ b/day2/ex5-bwa/flake.nix @@ -0,0 +1,20 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs"; + bionix.url = "github:papenfusslab/bionix"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { + self, + nixpkgs, + bionix, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs {inherit system;}; + bionix' = import bionix {nixpkgs = pkgs;}; + in { + defaultPackage = bionix'.callBionix ./. {}; + }); +} diff --git a/day2/ex5-bwa/solution.nix b/day2/ex5-bwa/solution.nix new file mode 100644 index 0000000..79fc7dc --- /dev/null +++ b/day2/ex5-bwa/solution.nix @@ -0,0 +1,19 @@ +{bionix}: +with bionix; let + input = { + input1 = fetchFastQ { + url = "https://raw.githubusercontent.com/PapenfussLab/bionix/master/examples/sample1-1.fq"; + sha256 = "sha256-qE6s8hKowiz3mvCq8/7xAzUz77xG9rAcsI2E50xMAk4="; + }; + input2 = fetchFastQ { + url = "https://raw.githubusercontent.com/PapenfussLab/bionix/master/examples/sample1-2.fq"; + sha256 = "sha256-s02R49HX/qeJp4t/eZwsKwV9D07uLGId8CEpU2dB8zM="; + }; + }; + + ref = fetchFastA { + url = "https://raw.githubusercontent.com/PapenfussLab/bionix/master/examples/ref.fa"; + sha256 = "sha256-V3zqOJFuGtukDRQttK/pGfKofgOlKrridHaWYhGGyWs="; + }; +in + samtools.sort {} (bwa.align {inherit ref;} input) |