5b64d732c8ae

Update
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Sat, 02 Sep 2023 12:59:42 -0400
parents dbc689895e19
children 54855618b079
branches/tags (none)
files README.markdown

Changes

--- a/README.markdown	Thu Aug 31 22:52:31 2023 -0400
+++ b/README.markdown	Sat Sep 02 12:59:42 2023 -0400
@@ -614,3 +614,82 @@
 
 The number of recombination events (crossovers) per chromosome is random, but is
 usually relatively low (3-5 per chromosome).
+
+# September 2023
+
+## 2023-09-01
+
+HG545.  Looked over the slides last night and was a little worried, but felt
+okay after the lecture for the most part.  Still a few things I need to look up
+and I do still need to get my fleeting notes into this, but I feel okay.
+
+Continuing the Snakemake tutorial.
+
+Threads can be specified for a given job with `threads: 8`, and you need to
+propagate that to the command yourself with `{threads}`.  Will be scaled down if
+run with fewer cores than threads, otherwise will wait until that many are
+available.
+
+Snakemake has some support for noticing log files, but it seems like you have to
+manually create them yourself?  This seems… tedious?
+
+    rule bwa_map:
+        input:
+            "data/genome.fa",
+            lambda wc: SAMPLES[wc.sample]
+        output:
+            "mapped_reads/{sample}.bam"
+        threads: 8
+        params:
+            rg=r"@RG\tID:{sample}\tSM:{sample}"
+        log: "logs/bwa_map/{sample}.log"
+        shell:
+            "("
+            "bwa mem -R '{params.rg}' -t {threads} {input}"
+            " | samtools view -Sb - > {output}"
+            ") >{log} 2>&1"
+
+Do I really have to wrap everything in `(…) >{log} 2>&1` by hand myself?
+
+You can get a summary of file provenance with `snakemake --summary`.  The output
+is a TSV, so I went down a rathole of pretty-printing TSVs and eventually found
+that `| column -s $'\t' -t` works (mnemonic: `s$tt`).  I love how every UNIX
+program gets to invent its own bespoke command line interface for specifying
+special characters. Really great.
+
+Can mark outputs as `temp()` and `protected()`, which is nice.
+
+Need to install singularity *inside* my VM:
+
+    # Ensure repositories are up-to-date
+    sudo apt-get update
+
+    # Install debian packages for dependencies
+    sudo apt-get install -y \
+        wget \
+        build-essential \
+        libseccomp-dev \
+        libglib2.0-dev \
+        pkg-config \
+        squashfs-tools \
+        cryptsetup \
+        runc
+
+    # Install Golang
+    export VERSION=1.21.0 OS=linux ARCH=amd64 && \
+        wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \
+        sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \
+        rm go$VERSION.$OS-$ARCH.tar.gz
+
+    echo 'export PATH=/usr/local/go/bin:$PATH' >> ~/.bashrc && \
+        source ~/.bashrc
+
+    # Install Singularity
+    export VERSION=3.11.4 && \
+        wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-ce-${VERSION}.tar.gz && \
+        tar -xzf singularity-ce-${VERSION}.tar.gz && \
+        cd singularity-ce-${VERSION}
+
+    ./mconfig && \
+        make -C builddir && \
+        sudo make -C builddir install