aboutsummaryrefslogtreecommitdiff
path: root/day2/ex4-bwa
diff options
context:
space:
mode:
authorJustin Bedo <cu@cua0.org>2022-10-07 15:51:34 +1100
committerJustin Bedo <cu@cua0.org>2022-10-10 11:02:21 +1100
commit8c29f7d34fd713d7630ef081fd8cefbb83ef201b (patch)
tree18edf4af2c1ac0c909c138e7b6969aabf9d751b1 /day2/ex4-bwa
parent4e71791f46031ed248030efed90b6d5ed53ae50c (diff)
add ex4
Diffstat (limited to 'day2/ex4-bwa')
-rw-r--r--day2/ex4-bwa/default.nix52
l---------day2/ex4-bwa/flake.lock1
-rwxr-xr-xday2/ex4-bwa/flake.nix20
-rw-r--r--day2/ex4-bwa/solution.nix19
4 files changed, 92 insertions, 0 deletions
diff --git a/day2/ex4-bwa/default.nix b/day2/ex4-bwa/default.nix
new file mode 100644
index 0000000..9c8356a
--- /dev/null
+++ b/day2/ex4-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/ex4-bwa/flake.lock b/day2/ex4-bwa/flake.lock
new file mode 120000
index 0000000..981422e
--- /dev/null
+++ b/day2/ex4-bwa/flake.lock
@@ -0,0 +1 @@
+../../common/flake.lock \ No newline at end of file
diff --git a/day2/ex4-bwa/flake.nix b/day2/ex4-bwa/flake.nix
new file mode 100755
index 0000000..bfaca96
--- /dev/null
+++ b/day2/ex4-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/ex4-bwa/solution.nix b/day2/ex4-bwa/solution.nix
new file mode 100644
index 0000000..79fc7dc
--- /dev/null
+++ b/day2/ex4-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)