From 2b6e86cc7f6d10e6bc6b77284b3e38e6b9db2db7 Mon Sep 17 00:00:00 2001
From: fridellsa <gus.fridell@nih.gov>
Date: Wed, 12 Jan 2022 16:28:23 -0500
Subject: [PATCH 01/91] Changed library loading location before config

---
 workflows/rnaseq/downstream/rnaseq.Rmd | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/workflows/rnaseq/downstream/rnaseq.Rmd b/workflows/rnaseq/downstream/rnaseq.Rmd
index 8bce54f6..a36dd080 100644
--- a/workflows/rnaseq/downstream/rnaseq.Rmd
+++ b/workflows/rnaseq/downstream/rnaseq.Rmd
@@ -26,6 +26,27 @@ devtools::document('../../../lib/lcdbwf')
 devtools::load_all('../../../lib/lcdbwf')
 ```
 
+```{r}
+library(AnnotationHub)
+library(BiocParallel)
+library(clusterProfiler)
+library(cowplot)
+library(DESeq2)
+library(dplyr)
+library(DT)
+library(genefilter)
+library(ggplot2)
+library(gridExtra)
+library(plotly)
+library(purrr)
+library(ReactomePA)
+library(readr)
+library(reshape)
+library(tibble)
+library(tximport)
+library(UpSetR)
+```
+
 ```{r config}
 
 # HOW TO CONFIGURE ------------------------------------------------------

From b9bcb65e9793df97858166223628a6e63c28346c Mon Sep 17 00:00:00 2001
From: fridells51 <63575426+fridells51@users.noreply.github.com>
Date: Mon, 24 Jan 2022 10:12:03 -0500
Subject: [PATCH 02/91] Update rnaseq.Rmd

---
 workflows/rnaseq/downstream/rnaseq.Rmd | 24 +-----------------------
 1 file changed, 1 insertion(+), 23 deletions(-)

diff --git a/workflows/rnaseq/downstream/rnaseq.Rmd b/workflows/rnaseq/downstream/rnaseq.Rmd
index 05981028..02fd620d 100644
--- a/workflows/rnaseq/downstream/rnaseq.Rmd
+++ b/workflows/rnaseq/downstream/rnaseq.Rmd
@@ -27,7 +27,7 @@ devtools::document('../../../lib/lcdbwf')
 devtools::load_all('../../../lib/lcdbwf')
 ```
 
-```{r}
+```{r libraries}
 library(AnnotationHub)
 library(BiocParallel)
 library(clusterProfiler)
@@ -82,28 +82,6 @@ if (config$parallel$parallel){
 Last run: `r date()`
 
 
-```{r libraries}
-library(AnnotationHub)
-library(BiocParallel)
-library(clusterProfiler)
-library(cowplot)
-library(DESeq2)
-library(dplyr)
-library(DT)
-library(genefilter)
-library(ggplot2)
-library(gridExtra)
-library(plotly)
-library(purrr)
-library(ReactomePA)
-library(readr)
-library(reshape)
-library(tibble)
-library(tximport)
-library(UpSetR)
-```
-
-
 
 ```{r coldata_setup}
 # Set up all of the metadata for the samples and experimental design. Use this

From b934b3618607050918f705044d0cf5c1ea36e92a Mon Sep 17 00:00:00 2001
From: daler <dalerr@niddk.nih.gov>
Date: Tue, 25 Jan 2022 11:55:23 -0500
Subject: [PATCH 03/91] try adding actions config

---
 .github/workflows/main.yaml | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
 create mode 100644 .github/workflows/main.yaml

diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
new file mode 100644
index 00000000..2a27947a
--- /dev/null
+++ b/.github/workflows/main.yaml
@@ -0,0 +1,30 @@
+on: [push]
+jobs:
+
+  build:
+    runs-on: ubuntu-latest
+    container: continuumio/miniconda3
+    steps:
+
+      - uses: actions/checkout@v1
+
+      - name: Cache conda env
+        id: cache-conda
+        uses: actions/cache@v1
+        with:
+          path: /opt/conda
+          key: ${{ hashFiles('env.yml') }}
+
+      - name: Rebuild cache
+        if: steps.cache-conda.outputs.cache-hit != 'true'
+        run: |
+          conda config --add channels defaults
+          conda config --add channels bioconda
+          conda config --add channels conda-forge
+          conda env create -n lcdb-wf-test --file env.yml
+
+      - name: STAR available?
+        shell: bash
+        run: |
+          source activate lcdb-wf-test
+          STAR --version

From b100c363aa752919f5eae91d99637d59c8e5b21b Mon Sep 17 00:00:00 2001
From: daler <dalerr@niddk.nih.gov>
Date: Tue, 25 Jan 2022 11:58:58 -0500
Subject: [PATCH 04/91] create backup circleci config

---
 .circleci/{config.yml => config.bak} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename .circleci/{config.yml => config.bak} (100%)

diff --git a/.circleci/config.yml b/.circleci/config.bak
similarity index 100%
rename from .circleci/config.yml
rename to .circleci/config.bak

From b8eeee21f0d5609d0570c795f20113236f9daa42 Mon Sep 17 00:00:00 2001
From: daler <dalerr@niddk.nih.gov>
Date: Tue, 25 Jan 2022 12:08:07 -0500
Subject: [PATCH 05/91] mv circleci dir

---
 {.circleci => .circleci.back}/config.bak | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {.circleci => .circleci.back}/config.bak (100%)

diff --git a/.circleci/config.bak b/.circleci.back/config.bak
similarity index 100%
rename from .circleci/config.bak
rename to .circleci.back/config.bak

From 49160a15ddd68e5a2b6d9fcdcc18609dab5a7274 Mon Sep 17 00:00:00 2001
From: daler <dalerr@niddk.nih.gov>
Date: Tue, 25 Jan 2022 12:30:11 -0500
Subject: [PATCH 06/91] use mamba, and build r env too

---
 .github/workflows/main.yaml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 2a27947a..062fec00 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -21,7 +21,9 @@ jobs:
           conda config --add channels defaults
           conda config --add channels bioconda
           conda config --add channels conda-forge
-          conda env create -n lcdb-wf-test --file env.yml
+          conda install mamba -y
+          mamba env create -n lcdb-wf-test --file env.yml
+          mamba env create -n lcdb-wf-test-r --file env-r.yml
 
       - name: STAR available?
         shell: bash

From 2a6b3d426b4f2b5784f0da05bafbc0be6e9b33b4 Mon Sep 17 00:00:00 2001
From: daler <dalerr@niddk.nih.gov>
Date: Sun, 18 Sep 2022 21:38:24 -0400
Subject: [PATCH 07/91] remove builds from env-r.yml

---
 env-r.yml | 795 +++++++++++++++++++++++++++---------------------------
 1 file changed, 396 insertions(+), 399 deletions(-)

diff --git a/env-r.yml b/env-r.yml
index d4076b0f..3d4f02c7 100644
--- a/env-r.yml
+++ b/env-r.yml
@@ -1,403 +1,400 @@
-name: null
 channels:
   - conda-forge
   - bioconda
-  - defaults
 dependencies:
-  - _libgcc_mutex=0.1=conda_forge
-  - _openmp_mutex=4.5=1_gnu
-  - _r-mutex=1.0.1=anacondar_1
-  - binutils_impl_linux-64=2.36.1=h193b22a_2
-  - binutils_linux-64=2.36=hf3e587d_1
-  - bioconductor-all=1.36.0=r41hdfd78af_0
-  - bioconductor-annotate=1.72.0=r41hdfd78af_0
-  - bioconductor-annotationdbi=1.56.1=r41hdfd78af_0
-  - bioconductor-annotationfilter=1.18.0=r41hdfd78af_0
-  - bioconductor-annotationhub=3.2.0=r41hdfd78af_0
-  - bioconductor-apeglm=1.16.0=r41h399db7b_0
-  - bioconductor-biobase=2.54.0=r41hd029910_0
-  - bioconductor-biocfilecache=2.2.0=r41hdfd78af_0
-  - bioconductor-biocgenerics=0.40.0=r41hdfd78af_0
-  - bioconductor-biocio=1.4.0=r41hdfd78af_0
-  - bioconductor-biocparallel=1.28.0=r41h399db7b_0
-  - bioconductor-biocversion=3.14.0=r41hdfd78af_0
-  - bioconductor-biomart=2.50.0=r41hdfd78af_0
-  - bioconductor-biostrings=2.62.0=r41hd029910_0
-  - bioconductor-clusterprofiler=4.2.0=r41hdfd78af_0
-  - bioconductor-complexheatmap=2.10.0=r41hdfd78af_0
-  - bioconductor-consensusclusterplus=1.58.0=r41hdfd78af_0
-  - bioconductor-degreport=1.30.0=r41hdfd78af_0
-  - bioconductor-delayedarray=0.20.0=r41hd029910_0
-  - bioconductor-deseq2=1.34.0=r41h399db7b_0
-  - bioconductor-do.db=2.9=r41hdfd78af_12
-  - bioconductor-dose=3.20.0=r41hdfd78af_0
-  - bioconductor-dupradar=1.24.0=r41hdfd78af_0
-  - bioconductor-edger=3.36.0=r41h399db7b_0
-  - bioconductor-enrichplot=1.14.1=r41hdfd78af_0
-  - bioconductor-ensembldb=2.18.1=r41hdfd78af_0
-  - bioconductor-fgsea=1.20.0=r41h399db7b_0
-  - bioconductor-genefilter=1.76.0=r41hba52eb8_0
-  - bioconductor-geneplotter=1.72.0=r41hdfd78af_0
-  - bioconductor-genomeinfodb=1.30.0=r41hdfd78af_0
-  - bioconductor-genomeinfodbdata=1.2.7=r41hdfd78af_1
-  - bioconductor-genomicalignments=1.30.0=r41hd029910_0
-  - bioconductor-genomicfeatures=1.46.1=r41hdfd78af_0
-  - bioconductor-genomicranges=1.46.0=r41hd029910_0
-  - bioconductor-ggtree=3.2.0=r41hdfd78af_0
-  - bioconductor-go.db=3.14.0=r41hdfd78af_0
-  - bioconductor-gosemsim=2.20.0=r41h399db7b_0
-  - bioconductor-graph=1.72.0=r41hd029910_0
-  - bioconductor-graphite=1.40.0=r41hdfd78af_0
-  - bioconductor-ihw=1.22.0=r41hdfd78af_0
-  - bioconductor-interactivedisplaybase=1.32.0=r41hdfd78af_0
-  - bioconductor-iranges=2.28.0=r41hd029910_0
-  - bioconductor-keggrest=1.34.0=r41hdfd78af_0
-  - bioconductor-limma=3.50.0=r41hd029910_0
-  - bioconductor-lpsymphony=1.22.0=r41h399db7b_0
-  - bioconductor-matrixgenerics=1.6.0=r41hdfd78af_0
-  - bioconductor-protgenerics=1.26.0=r41hdfd78af_0
-  - bioconductor-qvalue=2.26.0=r41hdfd78af_0
-  - bioconductor-reactome.db=1.77.0=r41hdfd78af_0
-  - bioconductor-reactomepa=1.38.0=r41hdfd78af_0
-  - bioconductor-rhdf5=2.38.0=r41hfe70e90_1
-  - bioconductor-rhdf5filters=1.6.0=r41h399db7b_0
-  - bioconductor-rhdf5lib=1.16.0=r41hd029910_0
-  - bioconductor-rhtslib=1.26.0=r41hd029910_0
-  - bioconductor-rsamtools=2.10.0=r41h399db7b_0
-  - bioconductor-rsubread=2.8.0=r41hd029910_0
-  - bioconductor-rtracklayer=1.54.0=r41ha2fdcc6_1
-  - bioconductor-s4vectors=0.32.0=r41hd029910_0
-  - bioconductor-summarizedexperiment=1.24.0=r41hdfd78af_0
-  - bioconductor-sva=3.42.0=r41hd029910_0
-  - bioconductor-treeio=1.18.0=r41hdfd78af_0
-  - bioconductor-tximport=1.22.0=r41hdfd78af_0
-  - bioconductor-xvector=0.34.0=r41hd029910_0
-  - bioconductor-zlibbioc=1.40.0=r41hd029910_0
-  - bwidget=1.9.14=ha770c72_1
-  - bzip2=1.0.8=h7f98852_4
-  - c-ares=1.18.1=h7f98852_0
-  - ca-certificates=2021.10.8=ha878542_0
-  - cairo=1.16.0=h6cf1ce9_1008
-  - curl=7.80.0=h2574ce0_0
-  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
-  - font-ttf-inconsolata=3.000=h77eed37_0
-  - font-ttf-source-code-pro=2.038=h77eed37_0
-  - font-ttf-ubuntu=0.83=hab24e00_0
-  - fontconfig=2.13.1=hba837de_1005
-  - fonts-conda-ecosystem=1=0
-  - fonts-conda-forge=1=0
-  - freetype=2.10.4=h0708190_1
-  - fribidi=1.0.10=h36c2ea0_0
-  - gcc_impl_linux-64=9.4.0=h03d3576_11
-  - gcc_linux-64=9.4.0=h391b98a_1
-  - gettext=0.19.8.1=h73d1719_1008
-  - gfortran_impl_linux-64=9.4.0=h0003116_11
-  - gfortran_linux-64=9.4.0=hf0ab688_1
-  - gmp=6.2.1=h58526e2_0
-  - graphite2=1.3.13=h58526e2_1001
-  - gsl=2.7=he838d99_0
-  - gxx_impl_linux-64=9.4.0=h03d3576_11
-  - gxx_linux-64=9.4.0=h0316aca_1
-  - harfbuzz=3.1.1=h83ec7ef_0
-  - icu=68.2=h9c3ff4c_0
-  - jbig=2.1=h7f98852_2003
-  - jpeg=9d=h36c2ea0_0
-  - kernel-headers_linux-64=2.6.32=he073ed8_15
-  - krb5=1.19.2=hcc1bbae_3
-  - ld_impl_linux-64=2.36.1=hea4e1c9_2
-  - lerc=3.0=h9c3ff4c_0
-  - libblas=3.9.0=12_linux64_openblas
-  - libcblas=3.9.0=12_linux64_openblas
-  - libcurl=7.80.0=h2574ce0_0
-  - libdeflate=1.8=h7f98852_0
-  - libedit=3.1.20191231=he28a2e2_2
-  - libev=4.33=h516909a_1
-  - libffi=3.4.2=h7f98852_5
-  - libgcc-devel_linux-64=9.4.0=hd854feb_11
-  - libgcc-ng=11.2.0=h1d223b6_11
-  - libgfortran-ng=11.2.0=h69a702a_11
-  - libgfortran5=11.2.0=h5c6108e_11
-  - libgit2=1.3.0=hee63804_1
-  - libglib=2.70.0=h174f98d_1
-  - libgomp=11.2.0=h1d223b6_11
-  - libiconv=1.16=h516909a_0
-  - liblapack=3.9.0=12_linux64_openblas
-  - libnghttp2=1.43.0=h812cca2_1
-  - libopenblas=0.3.18=pthreads_h8fe5266_0
-  - libpng=1.6.37=h21135ba_2
-  - libsanitizer=9.4.0=h79bfe98_11
-  - libssh2=1.10.0=ha56f1ee_2
-  - libstdcxx-devel_linux-64=9.4.0=hd854feb_11
-  - libstdcxx-ng=11.2.0=he4da1e4_11
-  - libtiff=4.3.0=h6f004c6_2
-  - libuuid=2.32.1=h7f98852_1000
-  - libwebp-base=1.2.1=h7f98852_0
-  - libxcb=1.13=h7f98852_1004
-  - libxml2=2.9.12=h72842e0_0
-  - libzlib=1.2.11=h36c2ea0_1013
-  - lz4-c=1.9.3=h9c3ff4c_1
-  - make=4.3=hd18ef5c_1
-  - ncurses=6.2=h58526e2_4
-  - openssl=1.1.1l=h7f98852_0
-  - pandoc=2.16.1=h7f98852_0
-  - pango=1.48.10=h54213e6_2
-  - pcre=8.45=h9c3ff4c_0
-  - pcre2=10.37=h032f7d1_0
-  - pixman=0.40.0=h36c2ea0_0
-  - pthread-stubs=0.4=h36c2ea0_1001
-  - r-ape=5.5=r41h306847c_0
-  - r-aplot=0.1.1=r41hc72bb7e_0
-  - r-ashr=2.2_47=r41h03ef668_1
-  - r-askpass=1.1=r41hcfec24a_2
-  - r-assertthat=0.2.1=r41hc72bb7e_2
-  - r-babelgene=21.4=r41hc72bb7e_0
-  - r-backports=1.3.0=r41hcfec24a_0
-  - r-base=4.1.1=hb93adac_1
-  - r-base64enc=0.1_3=r41hcfec24a_1004
-  - r-bbmle=1.0.24=r41hc72bb7e_0
-  - r-bdsmatrix=1.3_4=r41hcfec24a_1
-  - r-bh=1.75.0_0=r41hc72bb7e_0
-  - r-biocmanager=1.30.16=r41hc72bb7e_0
-  - r-bit=4.0.4=r41hcfec24a_0
-  - r-bit64=4.0.5=r41hcfec24a_0
-  - r-bitops=1.0_7=r41hcfec24a_0
-  - r-blob=1.2.2=r41hc72bb7e_0
-  - r-brew=1.0_6=r41hc72bb7e_1003
-  - r-brio=1.1.2=r41hcfec24a_0
-  - r-broom=0.7.10=r41hc72bb7e_0
-  - r-bslib=0.3.1=r41hc72bb7e_0
-  - r-cachem=1.0.6=r41hcfec24a_0
-  - r-callr=3.7.0=r41hc72bb7e_0
-  - r-catools=1.18.2=r41h03ef668_0
-  - r-checkmate=2.0.0=r41hcfec24a_1
-  - r-circlize=0.4.13=r41hc72bb7e_0
-  - r-cli=3.1.0=r41h03ef668_0
-  - r-clipr=0.7.1=r41hc72bb7e_0
-  - r-clue=0.3_60=r41hcfec24a_0
-  - r-cluster=2.1.2=r41h859d828_0
-  - r-coda=0.19_4=r41hc72bb7e_0
-  - r-codetools=0.2_18=r41hc72bb7e_0
-  - r-colorspace=2.0_2=r41hcfec24a_0
-  - r-commonmark=1.7=r41hcfec24a_1002
-  - r-covr=3.5.1=r41h03ef668_0
-  - r-cowplot=1.1.1=r41hc72bb7e_0
-  - r-cpp11=0.4.1=r41hc72bb7e_0
-  - r-crayon=1.4.2=r41hc72bb7e_0
-  - r-credentials=1.3.1=r41hc72bb7e_0
-  - r-crosstalk=1.2.0=r41hc72bb7e_0
-  - r-curl=4.3.2=r41hcfec24a_0
-  - r-data.table=1.14.2=r41hcfec24a_0
-  - r-dbi=1.1.1=r41hc72bb7e_0
-  - r-dbplyr=2.1.1=r41hc72bb7e_0
-  - r-dendextend=1.15.2=r41hc72bb7e_0
-  - r-desc=1.4.0=r41hc72bb7e_0
-  - r-devtools=2.4.2=r41hc72bb7e_0
-  - r-diffobj=0.3.5=r41hcfec24a_0
-  - r-digest=0.6.28=r41h03ef668_0
-  - r-doparallel=1.0.16=r41hc72bb7e_0
-  - r-downloader=0.4=r41hc72bb7e_1003
-  - r-dplyr=1.0.7=r41h03ef668_0
-  - r-dt=0.19=r41hc72bb7e_0
-  - r-egg=0.4.5=r41hc72bb7e_2
-  - r-ellipsis=0.3.2=r41hcfec24a_0
-  - r-emdbook=1.3.12=r41hc72bb7e_1
-  - r-etrunct=0.1=r41ha770c72_1002
-  - r-evaluate=0.14=r41hc72bb7e_2
-  - r-fansi=0.4.2=r41hcfec24a_0
-  - r-farver=2.1.0=r41h03ef668_0
-  - r-fastmap=1.1.0=r41h03ef668_0
-  - r-fastmatch=1.1_3=r41hcfec24a_0
-  - r-fdrtool=1.2.16=r41hcfec24a_0
-  - r-filelock=1.0.2=r41hcfec24a_1002
-  - r-fontawesome=0.2.2=r41hc72bb7e_0
-  - r-forcats=0.5.1=r41hc72bb7e_0
-  - r-foreach=1.5.1=r41hc72bb7e_0
-  - r-formatr=1.11=r41hc72bb7e_0
-  - r-fs=1.5.0=r41h03ef668_0
-  - r-futile.logger=1.4.3=r41hc72bb7e_1003
-  - r-futile.options=1.0.1=r41hc72bb7e_1002
-  - r-gclus=1.3.2=r41hc72bb7e_2
-  - r-generics=0.1.1=r41hc72bb7e_0
-  - r-gert=1.4.3=r41h29657ab_0
-  - r-getoptlong=1.0.5=r41hc72bb7e_0
-  - r-ggally=2.1.2=r41hc72bb7e_0
-  - r-ggdendro=0.1.22=r41hc72bb7e_0
-  - r-ggforce=0.3.3=r41h03ef668_0
-  - r-ggfun=0.0.4=r41hc72bb7e_0
-  - r-ggnewscale=0.4.5=r41hc72bb7e_0
-  - r-ggplot2=3.3.5=r41hc72bb7e_0
-  - r-ggplotify=0.1.0=r41hc72bb7e_0
-  - r-ggraph=2.0.5=r41h03ef668_0
-  - r-ggrepel=0.9.1=r41h03ef668_0
-  - r-gh=1.3.0=r41hc72bb7e_0
-  - r-git2r=0.28.0=r41hf628c3e_1
-  - r-gitcreds=0.1.1=r41hc72bb7e_0
-  - r-globaloptions=0.1.2=r41ha770c72_0
-  - r-glue=1.5.0=r41hcfec24a_0
-  - r-gplots=3.1.1=r41hc72bb7e_0
-  - r-graphlayouts=0.7.1=r41h03ef668_0
-  - r-gridextra=2.3=r41hc72bb7e_1003
-  - r-gridgraphics=0.5_1=r41hc72bb7e_0
-  - r-gtable=0.3.0=r41hc72bb7e_3
-  - r-gtools=3.9.2=r41hcfec24a_0
-  - r-heatmaply=1.3.0=r41hc72bb7e_0
-  - r-hexbin=1.28.2=r41h859d828_0
-  - r-highr=0.9=r41hc72bb7e_0
-  - r-hms=1.1.1=r41hc72bb7e_0
-  - r-htmltools=0.5.2=r41h03ef668_0
-  - r-htmlwidgets=1.5.4=r41hc72bb7e_0
-  - r-httpuv=1.6.3=r41h03ef668_0
-  - r-httr=1.4.2=r41hc72bb7e_0
-  - r-igraph=1.2.8=r41he0372cf_0
-  - r-ini=0.3.1=r41hc72bb7e_1003
-  - r-invgamma=1.1=r41hc72bb7e_1
-  - r-irlba=2.3.3=r41he454529_3
-  - r-isoband=0.2.5=r41h03ef668_0
-  - r-iterators=1.0.13=r41hc72bb7e_0
-  - r-jquerylib=0.1.4=r41hc72bb7e_0
-  - r-jsonlite=1.7.2=r41hcfec24a_0
-  - r-kernsmooth=2.23_20=r41h742201e_0
-  - r-knitr=1.35=r41hc72bb7e_0
-  - r-labeling=0.4.2=r41hc72bb7e_0
-  - r-lambda.r=1.2.4=r41hc72bb7e_1
-  - r-lasso2=1.2_22=r41hcfec24a_0
-  - r-later=1.2.0=r41h03ef668_0
-  - r-lattice=0.20_45=r41hcfec24a_0
-  - r-lazyeval=0.2.2=r41hcfec24a_2
-  - r-lifecycle=1.0.1=r41hc72bb7e_0
-  - r-locfit=1.5_9.4=r41hcfec24a_1
-  - r-logging=0.10_108=r41ha770c72_2
-  - r-magrittr=2.0.1=r41hcfec24a_1
-  - r-markdown=1.1=r41hcfec24a_1
-  - r-mass=7.3_54=r41hcfec24a_0
-  - r-matrix=1.3_4=r41he454529_0
-  - r-matrixstats=0.61.0=r41hcfec24a_0
-  - r-memoise=2.0.0=r41hc72bb7e_0
-  - r-mgcv=1.8_38=r41he454529_0
-  - r-mime=0.12=r41hcfec24a_0
-  - r-mixsqp=0.3_43=r41h306847c_1
-  - r-mnormt=2.0.2=r41h859d828_0
-  - r-msigdbr=7.4.1=r41hc72bb7e_0
-  - r-munsell=0.5.0=r41hc72bb7e_1003
-  - r-mvtnorm=1.1_3=r41h859d828_0
-  - r-nlme=3.1_153=r41h859d828_0
-  - r-nozzle.r1=1.1_1=r41ha770c72_1003
-  - r-numderiv=2016.8_1.1=r41hc72bb7e_3
-  - r-openssl=1.4.5=r41he36bf35_1
-  - r-openxlsx=4.2.4=r41h03ef668_0
-  - r-patchwork=1.1.1=r41hc72bb7e_0
-  - r-pheatmap=1.0.12=r41hc72bb7e_2
-  - r-pillar=1.6.4=r41hc72bb7e_0
-  - r-pkgbuild=1.2.0=r41hc72bb7e_0
-  - r-pkgconfig=2.0.3=r41hc72bb7e_1
-  - r-pkgload=1.2.3=r41h03ef668_0
-  - r-plogr=0.2.0=r41hc72bb7e_1003
-  - r-plotly=4.10.0=r41hc72bb7e_0
-  - r-plyr=1.8.6=r41h03ef668_1
-  - r-png=0.1_7=r41hcfec24a_1004
-  - r-polyclip=1.10_0=r41h03ef668_2
-  - r-praise=1.0.0=r41hc72bb7e_1004
-  - r-prettyunits=1.1.1=r41hc72bb7e_1
-  - r-processx=3.5.2=r41hcfec24a_0
-  - r-progress=1.2.2=r41hc72bb7e_2
-  - r-promises=1.2.0.1=r41h03ef668_0
-  - r-ps=1.6.0=r41hcfec24a_0
-  - r-psych=2.1.9=r41hc72bb7e_0
-  - r-purrr=0.3.4=r41hcfec24a_1
-  - r-qap=0.1_1=r41h859d828_1006
-  - r-r6=2.5.1=r41hc72bb7e_0
-  - r-rappdirs=0.3.3=r41hcfec24a_0
-  - r-rcmdcheck=1.4.0=r41h785f33e_0
-  - r-rcolorbrewer=1.1_2=r41h785f33e_1003
-  - r-rcpp=1.0.7=r41h03ef668_0
-  - r-rcpparmadillo=0.10.7.3.0=r41h306847c_0
-  - r-rcppeigen=0.3.3.9.1=r41h306847c_0
-  - r-rcppnumerical=0.4_0=r41h03ef668_1
-  - r-rcurl=1.98_1.5=r41hcfec24a_0
-  - r-readr=2.1.0=r41h03ef668_0
-  - r-registry=0.5_1=r41hc72bb7e_2
-  - r-rematch2=2.1.2=r41hc72bb7e_1
-  - r-remotes=2.4.1=r41hc72bb7e_0
-  - r-reshape=0.8.8=r41hcfec24a_2
-  - r-reshape2=1.4.4=r41h03ef668_1
-  - r-restfulr=0.0.13=r41hdf9a8c9_1
-  - r-rex=1.2.0=r41hc72bb7e_1
-  - r-rjson=0.2.20=r41h03ef668_1002
-  - r-rlang=0.4.12=r41hcfec24a_0
-  - r-rmarkdown=2.11=r41hc72bb7e_0
-  - r-roxygen2=7.1.2=r41h03ef668_0
-  - r-rprojroot=2.0.2=r41hc72bb7e_0
-  - r-rsqlite=2.2.8=r41h03ef668_0
-  - r-rstudioapi=0.13=r41hc72bb7e_0
-  - r-rvcheck=0.1.8=r41hc72bb7e_1
-  - r-rversions=2.1.1=r41hc72bb7e_0
-  - r-sass=0.4.0=r41h03ef668_0
-  - r-scales=1.1.1=r41hc72bb7e_0
-  - r-scatterpie=0.1.6=r41hc72bb7e_0
-  - r-seriation=1.3.1=r41h859d828_0
-  - r-sessioninfo=1.2.1=r41hc72bb7e_0
-  - r-shadowtext=0.0.9=r41hc72bb7e_0
-  - r-shape=1.4.6=r41ha770c72_0
-  - r-shiny=1.7.1=r41h785f33e_0
-  - r-slam=0.1_48=r41hbfbffee_0
-  - r-snow=0.4_4=r41hc72bb7e_0
-  - r-sourcetools=0.1.7=r41h9c3ff4c_1002
-  - r-sparsem=1.81=r41h859d828_0
-  - r-spp=1.16.0=r41h52a8340_5
-  - r-squarem=2021.1=r41hc72bb7e_0
-  - r-stringi=1.7.5=r41hcabe038_0
-  - r-stringr=1.4.0=r41hc72bb7e_2
-  - r-survival=3.2_13=r41hcfec24a_0
-  - r-sys=3.4=r41hcfec24a_0
-  - r-testthat=3.1.0=r41h03ef668_0
-  - r-tibble=3.1.6=r41hcfec24a_0
-  - r-tidygraph=1.2.0=r41h03ef668_0
-  - r-tidyr=1.1.4=r41h03ef668_0
-  - r-tidyselect=1.1.1=r41hc72bb7e_0
-  - r-tidytree=0.3.6=r41hc72bb7e_0
-  - r-tinytex=0.35=r41hc72bb7e_0
-  - r-tmvnsim=1.0_2=r41h859d828_3
-  - r-truncnorm=1.0_8=r41hcfec24a_1002
-  - r-tsp=1.1_11=r41hcfec24a_0
-  - r-tweenr=1.0.2=r41h03ef668_0
-  - r-tzdb=0.2.0=r41h03ef668_0
-  - r-upsetr=1.4.0=r41hc72bb7e_2
-  - r-usethis=2.1.3=r41hc72bb7e_0
-  - r-utf8=1.2.2=r41hcfec24a_0
-  - r-vctrs=0.3.8=r41hcfec24a_1
-  - r-viridis=0.6.2=r41hc72bb7e_0
-  - r-viridislite=0.4.0=r41hc72bb7e_0
-  - r-vroom=1.5.6=r41h03ef668_0
-  - r-waldo=0.3.1=r41hc72bb7e_0
-  - r-webshot=0.5.2=r41hc72bb7e_1
-  - r-whisker=0.4=r41hc72bb7e_1
-  - r-withr=2.4.2=r41hc72bb7e_0
-  - r-xfun=0.28=r41h03ef668_0
-  - r-xml=3.99_0.8=r41hcfec24a_0
-  - r-xml2=1.3.2=r41h03ef668_1
-  - r-xopen=1.0.0=r41hc72bb7e_1003
-  - r-xtable=1.8_4=r41hc72bb7e_3
-  - r-yaml=2.2.1=r41hcfec24a_1
-  - r-yulab.utils=0.0.4=r41hc72bb7e_0
-  - r-zip=2.2.0=r41hcfec24a_0
-  - readline=8.1=h46c0cb4_0
-  - sed=4.8=he412f7d_0
-  - sysroot_linux-64=2.12=he073ed8_15
-  - tk=8.6.11=h27826a3_1
-  - tktable=2.10=hb7b940f_3
-  - xorg-kbproto=1.0.7=h7f98852_1002
-  - xorg-libice=1.0.10=h7f98852_0
-  - xorg-libsm=1.2.3=hd9c2040_1000
-  - xorg-libx11=1.7.2=h7f98852_0
-  - xorg-libxau=1.0.9=h7f98852_0
-  - xorg-libxdmcp=1.1.3=h7f98852_0
-  - xorg-libxext=1.3.4=h7f98852_1
-  - xorg-libxrender=0.9.10=h7f98852_1003
-  - xorg-libxt=1.2.1=h7f98852_2
-  - xorg-renderproto=0.11.1=h7f98852_1002
-  - xorg-xextproto=7.3.0=h7f98852_1002
-  - xorg-xproto=7.0.31=h7f98852_1007
-  - xz=5.2.5=h516909a_1
-  - zlib=1.2.11=h36c2ea0_1013
-  - zstd=1.5.0=ha95c52a_0
-prefix: /gpfs/gsfs10/users/NICHD-core0/test/dalerr/lcdb-wf/env-r-loose
+  - _libgcc_mutex=0.1
+  - _openmp_mutex=4.5
+  - _r-mutex=1.0.1
+  - binutils_impl_linux-64=2.36.1
+  - binutils_linux-64=2.36
+  - bioconductor-all=1.36.0
+  - bioconductor-annotate=1.72.0
+  - bioconductor-annotationdbi=1.56.1
+  - bioconductor-annotationfilter=1.18.0
+  - bioconductor-annotationhub=3.2.0
+  - bioconductor-apeglm=1.16.0
+  - bioconductor-biobase=2.54.0
+  - bioconductor-biocfilecache=2.2.0
+  - bioconductor-biocgenerics=0.40.0
+  - bioconductor-biocio=1.4.0
+  - bioconductor-biocparallel=1.28.0
+  - bioconductor-biocversion=3.14.0
+  - bioconductor-biomart=2.50.0
+  - bioconductor-biostrings=2.62.0
+  - bioconductor-clusterprofiler=4.2.0
+  - bioconductor-complexheatmap=2.10.0
+  - bioconductor-consensusclusterplus=1.58.0
+  - bioconductor-degreport=1.30.0
+  - bioconductor-delayedarray=0.20.0
+  - bioconductor-deseq2=1.34.0
+  - bioconductor-do.db=2.9
+  - bioconductor-dose=3.20.0
+  - bioconductor-dupradar=1.24.0
+  - bioconductor-edger=3.36.0
+  - bioconductor-enrichplot=1.14.1
+  - bioconductor-ensembldb=2.18.1
+  - bioconductor-fgsea=1.20.0
+  - bioconductor-genefilter=1.76.0
+  - bioconductor-geneplotter=1.72.0
+  - bioconductor-genomeinfodb=1.30.0
+  - bioconductor-genomeinfodbdata=1.2.7
+  - bioconductor-genomicalignments=1.30.0
+  - bioconductor-genomicfeatures=1.46.1
+  - bioconductor-genomicranges=1.46.0
+  - bioconductor-ggtree=3.2.0
+  - bioconductor-go.db=3.14.0
+  - bioconductor-gosemsim=2.20.0
+  - bioconductor-graph=1.72.0
+  - bioconductor-graphite=1.40.0
+  - bioconductor-ihw=1.22.0
+  - bioconductor-interactivedisplaybase=1.32.0
+  - bioconductor-iranges=2.28.0
+  - bioconductor-keggrest=1.34.0
+  - bioconductor-limma=3.50.0
+  - bioconductor-lpsymphony=1.22.0
+  - bioconductor-matrixgenerics=1.6.0
+  - bioconductor-protgenerics=1.26.0
+  - bioconductor-qvalue=2.26.0
+  - bioconductor-reactome.db=1.77.0
+  - bioconductor-reactomepa=1.38.0
+  - bioconductor-rhdf5=2.38.0
+  - bioconductor-rhdf5filters=1.6.0
+  - bioconductor-rhdf5lib=1.16.0
+  - bioconductor-rhtslib=1.26.0
+  - bioconductor-rsamtools=2.10.0
+  - bioconductor-rsubread=2.8.0
+  - bioconductor-rtracklayer=1.54.0
+  - bioconductor-s4vectors=0.32.0
+  - bioconductor-summarizedexperiment=1.24.0
+  - bioconductor-sva=3.42.0
+  - bioconductor-treeio=1.18.0
+  - bioconductor-tximport=1.22.0
+  - bioconductor-xvector=0.34.0
+  - bioconductor-zlibbioc=1.40.0
+  - bwidget=1.9.14
+  - bzip2=1.0.8
+  - c-ares=1.18.1
+  - ca-certificates=2021.10.8
+  - cairo=1.16.0
+  - curl=7.80.0
+  - font-ttf-dejavu-sans-mono=2.37
+  - font-ttf-inconsolata=3.000
+  - font-ttf-source-code-pro=2.038
+  - font-ttf-ubuntu=0.83
+  - fontconfig=2.13.1
+  - fonts-conda-ecosystem=1
+  - fonts-conda-forge=1
+  - freetype=2.10.4
+  - fribidi=1.0.10
+  - gcc_impl_linux-64=9.4.0
+  - gcc_linux-64=9.4.0
+  - gettext=0.19.8.1
+  - gfortran_impl_linux-64=9.4.0
+  - gfortran_linux-64=9.4.0
+  - gmp=6.2.1
+  - graphite2=1.3.13
+  - gsl=2.7
+  - gxx_impl_linux-64=9.4.0
+  - gxx_linux-64=9.4.0
+  - harfbuzz=3.1.1
+  - icu=68.2
+  - jbig=2.1
+  - jpeg=9d
+  - kernel-headers_linux-64=2.6.32
+  - krb5=1.19.2
+  - ld_impl_linux-64=2.36.1
+  - lerc=3.0
+  - libblas=3.9.0
+  - libcblas=3.9.0
+  - libcurl=7.80.0
+  - libdeflate=1.8
+  - libedit=3.1.20191231
+  - libev=4.33
+  - libffi=3.4.2
+  - libgcc-devel_linux-64=9.4.0
+  - libgcc-ng=11.2.0
+  - libgfortran-ng=11.2.0
+  - libgfortran5=11.2.0
+  - libgit2=1.3.0
+  - libglib=2.70.0
+  - libgomp=11.2.0
+  - libiconv=1.16
+  - liblapack=3.9.0
+  - libnghttp2=1.43.0
+  - libopenblas=0.3.18
+  - libpng=1.6.37
+  - libsanitizer=9.4.0
+  - libssh2=1.10.0
+  - libstdcxx-devel_linux-64=9.4.0
+  - libstdcxx-ng=11.2.0
+  - libtiff=4.3.0
+  - libuuid=2.32.1
+  - libwebp-base=1.2.1
+  - libxcb=1.13
+  - libxml2=2.9.12
+  - libzlib=1.2.11
+  - lz4-c=1.9.3
+  - make=4.3
+  - ncurses=6.2
+  - openssl=1.1.1l
+  - pandoc=2.16.1
+  - pango=1.48.10
+  - pcre=8.45
+  - pcre2=10.37
+  - pixman=0.40.0
+  - pthread-stubs=0.4
+  - r-ape=5.5
+  - r-aplot=0.1.1
+  - r-ashr=2.2_47
+  - r-askpass=1.1
+  - r-assertthat=0.2.1
+  - r-babelgene=21.4
+  - r-backports=1.3.0
+  - r-base=4.1.1
+  - r-base64enc=0.1_3
+  - r-bbmle=1.0.24
+  - r-bdsmatrix=1.3_4
+  - r-bh=1.75.0_0
+  - r-biocmanager=1.30.16
+  - r-bit=4.0.4
+  - r-bit64=4.0.5
+  - r-bitops=1.0_7
+  - r-blob=1.2.2
+  - r-brew=1.0_6
+  - r-brio=1.1.2
+  - r-broom=0.7.10
+  - r-bslib=0.3.1
+  - r-cachem=1.0.6
+  - r-callr=3.7.0
+  - r-catools=1.18.2
+  - r-checkmate=2.0.0
+  - r-circlize=0.4.13
+  - r-cli=3.1.0
+  - r-clipr=0.7.1
+  - r-clue=0.3_60
+  - r-cluster=2.1.2
+  - r-coda=0.19_4
+  - r-codetools=0.2_18
+  - r-colorspace=2.0_2
+  - r-commonmark=1.7
+  - r-covr=3.5.1
+  - r-cowplot=1.1.1
+  - r-cpp11=0.4.1
+  - r-crayon=1.4.2
+  - r-credentials=1.3.1
+  - r-crosstalk=1.2.0
+  - r-curl=4.3.2
+  - r-data.table=1.14.2
+  - r-dbi=1.1.1
+  - r-dbplyr=2.1.1
+  - r-dendextend=1.15.2
+  - r-desc=1.4.0
+  - r-devtools=2.4.2
+  - r-diffobj=0.3.5
+  - r-digest=0.6.28
+  - r-doparallel=1.0.16
+  - r-downloader=0.4
+  - r-dplyr=1.0.7
+  - r-dt=0.19
+  - r-egg=0.4.5
+  - r-ellipsis=0.3.2
+  - r-emdbook=1.3.12
+  - r-etrunct=0.1
+  - r-evaluate=0.14
+  - r-fansi=0.4.2
+  - r-farver=2.1.0
+  - r-fastmap=1.1.0
+  - r-fastmatch=1.1_3
+  - r-fdrtool=1.2.16
+  - r-filelock=1.0.2
+  - r-fontawesome=0.2.2
+  - r-forcats=0.5.1
+  - r-foreach=1.5.1
+  - r-formatr=1.11
+  - r-fs=1.5.0
+  - r-futile.logger=1.4.3
+  - r-futile.options=1.0.1
+  - r-gclus=1.3.2
+  - r-generics=0.1.1
+  - r-gert=1.4.3
+  - r-getoptlong=1.0.5
+  - r-ggally=2.1.2
+  - r-ggdendro=0.1.22
+  - r-ggforce=0.3.3
+  - r-ggfun=0.0.4
+  - r-ggnewscale=0.4.5
+  - r-ggplot2=3.3.5
+  - r-ggplotify=0.1.0
+  - r-ggraph=2.0.5
+  - r-ggrepel=0.9.1
+  - r-gh=1.3.0
+  - r-git2r=0.28.0
+  - r-gitcreds=0.1.1
+  - r-globaloptions=0.1.2
+  - r-glue=1.5.0
+  - r-gplots=3.1.1
+  - r-graphlayouts=0.7.1
+  - r-gridextra=2.3
+  - r-gridgraphics=0.5_1
+  - r-gtable=0.3.0
+  - r-gtools=3.9.2
+  - r-heatmaply=1.3.0
+  - r-hexbin=1.28.2
+  - r-highr=0.9
+  - r-hms=1.1.1
+  - r-htmltools=0.5.2
+  - r-htmlwidgets=1.5.4
+  - r-httpuv=1.6.3
+  - r-httr=1.4.2
+  - r-igraph=1.2.8
+  - r-ini=0.3.1
+  - r-invgamma=1.1
+  - r-irlba=2.3.3
+  - r-isoband=0.2.5
+  - r-iterators=1.0.13
+  - r-jquerylib=0.1.4
+  - r-jsonlite=1.7.2
+  - r-kernsmooth=2.23_20
+  - r-knitr=1.35
+  - r-labeling=0.4.2
+  - r-lambda.r=1.2.4
+  - r-lasso2=1.2_22
+  - r-later=1.2.0
+  - r-lattice=0.20_45
+  - r-lazyeval=0.2.2
+  - r-lifecycle=1.0.1
+  - r-locfit=1.5_9.4
+  - r-logging=0.10_108
+  - r-magrittr=2.0.1
+  - r-markdown=1.1
+  - r-mass=7.3_54
+  - r-matrix=1.3_4
+  - r-matrixstats=0.61.0
+  - r-memoise=2.0.0
+  - r-mgcv=1.8_38
+  - r-mime=0.12
+  - r-mixsqp=0.3_43
+  - r-mnormt=2.0.2
+  - r-msigdbr=7.4.1
+  - r-munsell=0.5.0
+  - r-mvtnorm=1.1_3
+  - r-nlme=3.1_153
+  - r-nozzle.r1=1.1_1
+  - r-numderiv=2016.8_1.1
+  - r-openssl=1.4.5
+  - r-openxlsx=4.2.4
+  - r-patchwork=1.1.1
+  - r-pheatmap=1.0.12
+  - r-pillar=1.6.4
+  - r-pkgbuild=1.2.0
+  - r-pkgconfig=2.0.3
+  - r-pkgload=1.2.3
+  - r-plogr=0.2.0
+  - r-plotly=4.10.0
+  - r-plyr=1.8.6
+  - r-png=0.1_7
+  - r-polyclip=1.10_0
+  - r-praise=1.0.0
+  - r-prettyunits=1.1.1
+  - r-processx=3.5.2
+  - r-progress=1.2.2
+  - r-promises=1.2.0.1
+  - r-ps=1.6.0
+  - r-psych=2.1.9
+  - r-purrr=0.3.4
+  - r-qap=0.1_1
+  - r-r6=2.5.1
+  - r-rappdirs=0.3.3
+  - r-rcmdcheck=1.4.0
+  - r-rcolorbrewer=1.1_2
+  - r-rcpp=1.0.7
+  - r-rcpparmadillo=0.10.7.3.0
+  - r-rcppeigen=0.3.3.9.1
+  - r-rcppnumerical=0.4_0
+  - r-rcurl=1.98_1.5
+  - r-readr=2.1.0
+  - r-registry=0.5_1
+  - r-rematch2=2.1.2
+  - r-remotes=2.4.1
+  - r-reshape=0.8.8
+  - r-reshape2=1.4.4
+  - r-restfulr=0.0.13
+  - r-rex=1.2.0
+  - r-rjson=0.2.20
+  - r-rlang=0.4.12
+  - r-rmarkdown=2.11
+  - r-roxygen2=7.1.2
+  - r-rprojroot=2.0.2
+  - r-rsqlite=2.2.8
+  - r-rstudioapi=0.13
+  - r-rvcheck=0.1.8
+  - r-rversions=2.1.1
+  - r-sass=0.4.0
+  - r-scales=1.1.1
+  - r-scatterpie=0.1.6
+  - r-seriation=1.3.1
+  - r-sessioninfo=1.2.1
+  - r-shadowtext=0.0.9
+  - r-shape=1.4.6
+  - r-shiny=1.7.1
+  - r-slam=0.1_48
+  - r-snow=0.4_4
+  - r-sourcetools=0.1.7
+  - r-sparsem=1.81
+  - r-spp=1.16.0
+  - r-squarem=2021.1
+  - r-stringi=1.7.5
+  - r-stringr=1.4.0
+  - r-survival=3.2_13
+  - r-sys=3.4
+  - r-testthat=3.1.0
+  - r-tibble=3.1.6
+  - r-tidygraph=1.2.0
+  - r-tidyr=1.1.4
+  - r-tidyselect=1.1.1
+  - r-tidytree=0.3.6
+  - r-tinytex=0.35
+  - r-tmvnsim=1.0_2
+  - r-truncnorm=1.0_8
+  - r-tsp=1.1_11
+  - r-tweenr=1.0.2
+  - r-tzdb=0.2.0
+  - r-upsetr=1.4.0
+  - r-usethis=2.1.3
+  - r-utf8=1.2.2
+  - r-vctrs=0.3.8
+  - r-viridis=0.6.2
+  - r-viridislite=0.4.0
+  - r-vroom=1.5.6
+  - r-waldo=0.3.1
+  - r-webshot=0.5.2
+  - r-whisker=0.4
+  - r-withr=2.4.2
+  - r-xfun=0.28
+  - r-xml=3.99_0.8
+  - r-xml2=1.3.2
+  - r-xopen=1.0.0
+  - r-xtable=1.8_4
+  - r-yaml=2.2.1
+  - r-yulab.utils=0.0.4
+  - r-zip=2.2.0
+  - readline=8.1
+  - sed=4.8
+  - sysroot_linux-64=2.12
+  - tk=8.6.11
+  - tktable=2.10
+  - xorg-kbproto=1.0.7
+  - xorg-libice=1.0.10
+  - xorg-libsm=1.2.3
+  - xorg-libx11=1.7.2
+  - xorg-libxau=1.0.9
+  - xorg-libxdmcp=1.1.3
+  - xorg-libxext=1.3.4
+  - xorg-libxrender=0.9.10
+  - xorg-libxt=1.2.1
+  - xorg-renderproto=0.11.1
+  - xorg-xextproto=7.3.0
+  - xorg-xproto=7.0.31
+  - xz=5.2.5
+  - zlib=1.2.11
+  - zstd=1.5.0

From 3a30e1cf4ad8c6ec47fae6b16e54c9f5543cbb36 Mon Sep 17 00:00:00 2001
From: daler <dalerr@niddk.nih.gov>
Date: Sun, 18 Sep 2022 21:45:12 -0400
Subject: [PATCH 08/91] update env-r.yml export

---
 env-r.yml | 83 +++++++++++++++++++++++++++----------------------------
 1 file changed, 40 insertions(+), 43 deletions(-)

diff --git a/env-r.yml b/env-r.yml
index 3d4f02c7..a4fec770 100644
--- a/env-r.yml
+++ b/env-r.yml
@@ -6,7 +6,6 @@ dependencies:
   - _openmp_mutex=4.5
   - _r-mutex=1.0.1
   - binutils_impl_linux-64=2.36.1
-  - binutils_linux-64=2.36
   - bioconductor-all=1.36.0
   - bioconductor-annotate=1.72.0
   - bioconductor-annotationdbi=1.56.1
@@ -76,69 +75,67 @@ dependencies:
   - c-ares=1.18.1
   - ca-certificates=2021.10.8
   - cairo=1.16.0
-  - curl=7.80.0
+  - curl=7.83.1
+  - expat=2.4.8
   - font-ttf-dejavu-sans-mono=2.37
   - font-ttf-inconsolata=3.000
   - font-ttf-source-code-pro=2.038
   - font-ttf-ubuntu=0.83
-  - fontconfig=2.13.1
+  - fontconfig=2.14.0
   - fonts-conda-ecosystem=1
   - fonts-conda-forge=1
   - freetype=2.10.4
   - fribidi=1.0.10
-  - gcc_impl_linux-64=9.4.0
-  - gcc_linux-64=9.4.0
+  - gcc_impl_linux-64=12.1.0
   - gettext=0.19.8.1
-  - gfortran_impl_linux-64=9.4.0
-  - gfortran_linux-64=9.4.0
+  - gfortran_impl_linux-64=12.1.0
   - gmp=6.2.1
   - graphite2=1.3.13
   - gsl=2.7
-  - gxx_impl_linux-64=9.4.0
-  - gxx_linux-64=9.4.0
-  - harfbuzz=3.1.1
-  - icu=68.2
-  - jbig=2.1
-  - jpeg=9d
+  - gxx_impl_linux-64=12.1.0
+  - harfbuzz=5.1.0
+  - icu=70.1
+  - jpeg=9e
   - kernel-headers_linux-64=2.6.32
-  - krb5=1.19.2
+  - keyutils=1.6.1
+  - krb5=1.19.3
   - ld_impl_linux-64=2.36.1
   - lerc=3.0
   - libblas=3.9.0
   - libcblas=3.9.0
-  - libcurl=7.80.0
-  - libdeflate=1.8
+  - libcurl=7.83.1
+  - libdeflate=1.12
   - libedit=3.1.20191231
   - libev=4.33
   - libffi=3.4.2
-  - libgcc-devel_linux-64=9.4.0
-  - libgcc-ng=11.2.0
-  - libgfortran-ng=11.2.0
-  - libgfortran5=11.2.0
+  - libgcc-devel_linux-64=12.1.0
+  - libgcc-ng=12.1.0
+  - libgfortran-ng=12.1.0
+  - libgfortran5=12.1.0
   - libgit2=1.3.0
-  - libglib=2.70.0
-  - libgomp=11.2.0
+  - libglib=2.72.1
+  - libgomp=12.1.0
   - libiconv=1.16
   - liblapack=3.9.0
-  - libnghttp2=1.43.0
-  - libopenblas=0.3.18
-  - libpng=1.6.37
-  - libsanitizer=9.4.0
+  - libnghttp2=1.47.0
+  - libopenblas=0.3.21
+  - libpng=1.6.38
+  - libsanitizer=12.1.0
   - libssh2=1.10.0
-  - libstdcxx-devel_linux-64=9.4.0
-  - libstdcxx-ng=11.2.0
-  - libtiff=4.3.0
+  - libstdcxx-devel_linux-64=12.1.0
+  - libstdcxx-ng=12.1.0
+  - libtiff=4.4.0
   - libuuid=2.32.1
   - libwebp-base=1.2.1
   - libxcb=1.13
-  - libxml2=2.9.12
-  - libzlib=1.2.11
+  - libxml2=2.9.14
+  - libzlib=1.2.12
   - lz4-c=1.9.3
   - make=4.3
-  - ncurses=6.2
-  - openssl=1.1.1l
+  - ncurses=6.3
+  - openssl=1.1.1q
   - pandoc=2.16.1
-  - pango=1.48.10
+  - pango=1.50.9
   - pcre=8.45
   - pcre2=10.37
   - pixman=0.40.0
@@ -150,7 +147,7 @@ dependencies:
   - r-assertthat=0.2.1
   - r-babelgene=21.4
   - r-backports=1.3.0
-  - r-base=4.1.1
+  - r-base=4.1.3
   - r-base64enc=0.1_3
   - r-bbmle=1.0.24
   - r-bdsmatrix=1.3_4
@@ -237,7 +234,7 @@ dependencies:
   - r-gridextra=2.3
   - r-gridgraphics=0.5_1
   - r-gtable=0.3.0
-  - r-gtools=3.9.2
+  - r-gtools=3.9.2.2
   - r-heatmaply=1.3.0
   - r-hexbin=1.28.2
   - r-highr=0.9
@@ -279,7 +276,7 @@ dependencies:
   - r-munsell=0.5.0
   - r-mvtnorm=1.1_3
   - r-nlme=3.1_153
-  - r-nozzle.r1=1.1_1
+  - r-nozzle.r1=1.1_1.1
   - r-numderiv=2016.8_1.1
   - r-openssl=1.4.5
   - r-openxlsx=4.2.4
@@ -311,7 +308,7 @@ dependencies:
   - r-rcpparmadillo=0.10.7.3.0
   - r-rcppeigen=0.3.3.9.1
   - r-rcppnumerical=0.4_0
-  - r-rcurl=1.98_1.5
+  - r-rcurl=1.98_1.8
   - r-readr=2.1.0
   - r-registry=0.5_1
   - r-rematch2=2.1.2
@@ -343,7 +340,7 @@ dependencies:
   - r-sparsem=1.81
   - r-spp=1.16.0
   - r-squarem=2021.1
-  - r-stringi=1.7.5
+  - r-stringi=1.7.8
   - r-stringr=1.4.0
   - r-survival=3.2_13
   - r-sys=3.4
@@ -378,10 +375,10 @@ dependencies:
   - r-yaml=2.2.1
   - r-yulab.utils=0.0.4
   - r-zip=2.2.0
-  - readline=8.1
+  - readline=8.1.2
   - sed=4.8
   - sysroot_linux-64=2.12
-  - tk=8.6.11
+  - tk=8.6.12
   - tktable=2.10
   - xorg-kbproto=1.0.7
   - xorg-libice=1.0.10
@@ -396,5 +393,5 @@ dependencies:
   - xorg-xextproto=7.3.0
   - xorg-xproto=7.0.31
   - xz=5.2.5
-  - zlib=1.2.11
-  - zstd=1.5.0
+  - zlib=1.2.12
+  - zstd=1.5.2

From d9be76267f357130e694e3320e2ff7b94da1cd90 Mon Sep 17 00:00:00 2001
From: daler <dalerr@niddk.nih.gov>
Date: Sun, 18 Sep 2022 21:46:01 -0400
Subject: [PATCH 09/91] remove builds from env.yml

---
 env.yml | 684 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 342 insertions(+), 342 deletions(-)

diff --git a/env.yml b/env.yml
index fb7f9eb7..f0b068e2 100644
--- a/env.yml
+++ b/env.yml
@@ -3,345 +3,345 @@ channels:
   - bioconda
   - defaults
 dependencies:
-  - _libgcc_mutex=0.1=conda_forge
-  - _openmp_mutex=4.5=1_llvm
-  - _r-mutex=1.0.1=anacondar_1
-  - aiohttp=3.7.4=py39h3811e60_0
-  - alsa-lib=1.2.3=h516909a_0
-  - amply=0.1.4=py_0
-  - apipkg=1.5=py_0
-  - appdirs=1.4.4=pyh9f0ad1d_0
-  - argcomplete=1.12.3=pyhd8ed1ab_2
-  - argh=0.26.2=pyh9f0ad1d_1002
-  - async-timeout=3.0.1=py_1000
-  - attrs=20.3.0=pyhd3deb0d_0
-  - azure-common=1.1.27=pyhd8ed1ab_0
-  - azure-core=1.12.0=pyhd8ed1ab_0
-  - azure-storage-blob=12.8.1=pyhd8ed1ab_0
-  - backcall=0.2.0=pyh9f0ad1d_0
-  - backports=1.0=py_2
-  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
-  - bedtools=2.30.0=h7d7f7ad_1
-  - binutils_impl_linux-64=2.35.1=h193b22a_2
-  - binutils_linux-64=2.35=h67ddf6f_30
-  - biopython=1.78=py39h3811e60_2
-  - blinker=1.4=py_1
-  - boost-cpp=1.74.0=hc6e9bd1_2
-  - boto=2.49.0=py_0
-  - boto3=1.17.56=pyhd8ed1ab_0
-  - botocore=1.20.57=pyhd8ed1ab_0
-  - bowtie=1.3.0=py39h176da8b_2
-  - bowtie2=2.4.2=py39hc9c6fcd_2
-  - brotlipy=0.7.0=py39h3811e60_1001
-  - bwidget=1.9.14=0
-  - bx-python=0.8.11=py39h5d76eff_1
-  - bzip2=1.0.8=h7f98852_4
-  - c-ares=1.17.1=h7f98852_1
-  - ca-certificates=2021.4.13=h06a4308_1
-  - cachetools=4.2.1=pyhd8ed1ab_0
-  - cairo=1.16.0=h6cf1ce9_1008
-  - certifi=2020.12.5=py39hf3d152e_1
-  - cffi=1.14.5=py39he32792d_0
-  - chardet=4.0.0=py39hf3d152e_1
-  - click=7.1.2=pyh9f0ad1d_0
-  - coincbc=2.10.5=hcee13e7_1
-  - colorama=0.4.4=pyh9f0ad1d_0
-  - coloredlogs=15.0=py39hf3d152e_0
-  - colormath=3.0.0=py_2
-  - commonmark=0.9.1=py_0
-  - configargparse=1.4=pyhd8ed1ab_0
-  - cryptography=3.4.7=py39hbca0aa6_0
-  - curl=7.76.1=h979ede3_1
-  - cutadapt=3.4=py39h38f01e4_1
-  - cycler=0.10.0=py_2
-  - datrie=0.8.2=py39h07f9747_1
-  - dbus=1.13.18=hb2f20db_0
-  - decorator=5.0.7=pyhd8ed1ab_0
-  - deeptools=3.5.1=py_0
-  - deeptoolsintervals=0.1.9=py39h38f01e4_3
-  - dnaio=0.5.0=py39h38f01e4_1
-  - docutils=0.17.1=py39hf3d152e_0
-  - execnet=1.8.0=pyh44b312d_0
-  - expat=2.3.0=h9c3ff4c_0
-  - fastq-screen=0.14.0=pl5262hdfd78af_1
-  - fastqc=0.11.9=hdfd78af_1
-  - filelock=3.0.12=pyh9f0ad1d_0
-  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
-  - fontconfig=2.13.1=hba837de_1005
-  - freetype=2.10.4=h0708190_1
-  - fribidi=1.0.10=h516909a_0
-  - future=0.18.2=py39hf3d152e_3
-  - gat=1.3.6=py39hd1f1204_3
-  - gcc_impl_linux-64=9.3.0=h70c0ae5_19
-  - gcc_linux-64=9.3.0=hf25ea35_30
-  - gettext=0.21.0=hf68c758_0
-  - gffread=0.12.1=h2e03b76_1
-  - gffutils=0.10.1=pyh864c0ab_1
-  - gfortran_impl_linux-64=9.3.0=hc4a2995_19
-  - gfortran_linux-64=9.3.0=hdc58fab_30
-  - giflib=5.2.1=h516909a_2
-  - gitdb=4.0.7=pyhd8ed1ab_0
-  - gitpython=3.1.15=pyhd8ed1ab_0
-  - glib=2.68.1=h9c3ff4c_0
-  - glib-tools=2.68.1=h9c3ff4c_0
-  - google-api-core=1.26.2=pyhd8ed1ab_0
-  - google-auth=1.29.0=pyhd3eb1b0_0
-  - google-cloud-core=1.6.0=pyhd3eb1b0_0
-  - google-cloud-storage=1.37.1=pyhd3eb1b0_0
-  - google-crc32c=1.1.2=py39hb81f231_0
-  - google-resumable-media=1.2.0=pyhd3deb0d_0
-  - googleapis-common-protos=1.53.0=py39hf3d152e_0
-  - graphite2=1.3.14=h23475e2_0
-  - gsl=2.6=he838d99_2
-  - gst-plugins-base=1.18.4=hf529b03_1
-  - gstreamer=1.18.4=h76c114f_1
-  - gxx_impl_linux-64=9.3.0=hd87eabc_19
-  - gxx_linux-64=9.3.0=h3fbe746_30
-  - harfbuzz=2.8.0=h83ec7ef_1
-  - hdf5=1.10.6=nompi_h6a2412b_1114
-  - hisat2=2.2.1=h1b792b2_3
-  - htslib=1.12=h9093b5e_1
-  - humanfriendly=9.1=py39hf3d152e_0
-  - icu=68.1=h58526e2_0
-  - idna=2.10=pyh9f0ad1d_0
-  - importlib-metadata=4.0.1=py39hf3d152e_0
-  - importlib_metadata=4.0.1=hd8ed1ab_0
-  - iniconfig=1.1.1=pyh9f0ad1d_0
-  - intervalstats=1.01=0
-  - ipython=7.22.0=py39hef51801_0
-  - ipython_genutils=0.2.0=py_1
-  - isa-l=2.30.0=ha770c72_4
-  - isodate=0.6.0=py_1
-  - jedi=0.18.0=py39hf3d152e_2
-  - jemalloc=5.2.1=h9c3ff4c_5
-  - jinja2=2.11.3=pyh44b312d_0
-  - jmespath=0.10.0=pyh9f0ad1d_0
-  - jpeg=9d=h516909a_0
-  - jsonschema=3.2.0=pyhd8ed1ab_3
-  - jupyter_core=4.7.1=py39hf3d152e_0
-  - kallisto=0.46.2=h60f4f9f_2
-  - kernel-headers_linux-64=2.6.32=h77966d4_13
-  - kiwisolver=1.3.1=py39h1a9c180_1
-  - krb5=1.17.2=h926e7f8_0
-  - lcms2=2.12=hddcbb42_0
-  - ld_impl_linux-64=2.35.1=hea4e1c9_2
-  - libblas=3.9.0=8_mkl
-  - libcblas=3.9.0=8_mkl
-  - libclang=11.1.0=default_ha53f305_0
-  - libcrc32c=1.1.1=he1b5a44_2
-  - libcurl=7.76.1=hc4aaa36_1
-  - libdeflate=1.7=h7f98852_5
-  - libedit=3.1.20210216=h27cfd23_1
-  - libev=4.33=h516909a_1
-  - libevent=2.1.10=hcdb4288_3
-  - libffi=3.3=h58526e2_2
-  - libgcc-devel_linux-64=9.3.0=h7864c58_19
-  - libgcc-ng=9.3.0=h2828fa1_19
-  - libgd=2.3.2=h78a0170_0
-  - libgfortran-ng=9.3.0=hff62375_19
-  - libgfortran5=9.3.0=hff62375_19
-  - libglib=2.68.1=h3e27bee_0
-  - libgomp=9.3.0=h2828fa1_19
-  - libiconv=1.16=h516909a_0
-  - liblapack=3.9.0=8_mkl
-  - libllvm11=11.1.0=hf817b99_2
-  - libnghttp2=1.43.0=h812cca2_0
-  - libopenblas=0.3.13=pthreads_h8fe5266_0
-  - libpng=1.6.37=hed695b0_2
-  - libpq=13.2=hfd2b0eb_2
-  - libprotobuf=3.15.8=h780b84a_0
-  - libssh2=1.9.0=ha56f1ee_6
-  - libstdcxx-devel_linux-64=9.3.0=hb016644_19
-  - libstdcxx-ng=9.3.0=h6de172a_19
-  - libtiff=4.2.0=hdc55705_1
-  - libuuid=2.32.1=h14c3975_1000
-  - libwebp=1.2.0=h3452ae3_0
-  - libwebp-base=1.2.0=h7f98852_2
-  - libxcb=1.14=h7b6447c_0
-  - libxkbcommon=1.0.3=he3ba5ed_0
-  - libxml2=2.9.10=h72842e0_4
-  - llvm-openmp=11.1.0=h4bd325d_1
-  - lz4-c=1.9.3=h9c3ff4c_0
-  - lzo=2.10=h516909a_1000
-  - lzstring=1.0.4=py_1001
-  - make=4.3=hd18ef5c_1
-  - markdown=3.3.4=pyhd8ed1ab_0
-  - markupsafe=1.1.1=py39h3811e60_3
-  - matplotlib=3.4.1=py39hf3d152e_0
-  - matplotlib-base=3.4.1=py39h2fa2bec_0
-  - mkl=2020.4=h726a3e6_304
-  - more-itertools=8.7.0=pyhd8ed1ab_0
-  - msrest=0.6.21=pyh44b312d_0
-  - multidict=5.1.0=py39h3811e60_1
-  - multiqc=1.10.1=py_0
-  - mysql-common=8.0.23=ha770c72_1
-  - mysql-connector-c=6.1.11=h6eb9d5d_1007
-  - mysql-libs=8.0.23=h935591d_1
-  - nbformat=5.1.3=pyhd8ed1ab_0
-  - ncbi-ngs-sdk=2.11.0=hff44eed_0
-  - ncurses=6.2=h58526e2_4
-  - networkx=2.5=py_0
-  - nspr=4.30=h9c3ff4c_0
-  - nss=3.64=hb5efdd6_0
-  - numpy=1.20.2=py39hdbf815f_0
-  - oauthlib=3.1.0=py_0
-  - olefile=0.46=pyh9f0ad1d_1
-  - openblas=0.3.13=pthreads_h4748800_0
-  - openjdk=11.0.9.1=h5cc2fde_1
-  - openssl=1.1.1k=h7f98852_0
-  - packaging=20.9=pyh44b312d_0
-  - pandas=1.2.4=py39hde0f152_0
-  - pandoc=2.12=h7f98852_0
-  - pango=1.48.4=hb8ff022_0
-  - parso=0.8.2=pyhd8ed1ab_0
-  - patsy=0.5.1=py_0
-  - pcre=8.44=he1b5a44_0
-  - pcre2=10.36=h032f7d1_1
-  - perl=5.26.2=h36c2ea0_1008
-  - perl-app-cpanminus=1.7044=pl526_1
-  - perl-business-isbn=3.004=pl526_0
-  - perl-business-isbn-data=20140910.003=pl526_0
-  - perl-carp=1.38=pl526_3
-  - perl-constant=1.33=pl526_1
-  - perl-data-dumper=2.173=pl526_0
-  - perl-encode=2.88=pl526_1
-  - perl-exporter=5.72=pl526_1
-  - perl-extutils-makemaker=7.36=pl526_1
-  - perl-file-path=2.16=pl526_0
-  - perl-file-temp=0.2304=pl526_2
-  - perl-gd=2.68=pl526he941832_0
-  - perl-gdgraph=1.54=pl526_0
-  - perl-gdtextutil=0.86=pl526h14c3975_5
-  - perl-mime-base64=3.15=pl526_1
-  - perl-parent=0.236=pl526_1
-  - perl-uri=1.76=pl526_0
-  - perl-xml-libxml=2.0132=pl526h7ec2d77_1
-  - perl-xml-namespacesupport=1.12=pl526_0
-  - perl-xml-sax=1.02=pl526_0
-  - perl-xml-sax-base=1.09=pl526_0
-  - perl-xsloader=0.24=pl526_0
-  - pexpect=4.8.0=pyh9f0ad1d_2
-  - picard=2.25.2=hdfd78af_0
-  - pickleshare=0.7.5=py39hde42818_1002
-  - pigz=2.6=h27826a3_0
-  - pillow=8.2.0=py39he98fc37_0
-  - pip=21.0.1=pyhd8ed1ab_0
-  - pixman=0.40.0=h36c2ea0_0
-  - plotly=4.14.3=pyh44b312d_0
-  - pluggy=0.13.1=py39hf3d152e_4
-  - preseq=3.1.2=h06ef8b0_1
-  - prompt-toolkit=3.0.18=pyha770c72_0
-  - protobuf=3.15.8=py39he80948d_0
-  - psutil=5.8.0=py39h3811e60_1
-  - ptyprocess=0.7.0=pyhd3deb0d_0
-  - pulp=2.4=py39hf3d152e_0
-  - py=1.10.0=pyhd3deb0d_0
-  - py2bit=0.3.0=py39h38f01e4_5
-  - pyasn1=0.4.8=py_0
-  - pyasn1-modules=0.2.8=py_0
-  - pybedtools=0.8.2=py39h39abbe0_1
-  - pybigwig=0.3.18=py39h015b436_1
-  - pycparser=2.20=pyh9f0ad1d_2
-  - pyfaidx=0.5.9.5=pyh3252c3a_0
-  - pygments=2.8.1=pyhd8ed1ab_0
-  - pyjwt=2.0.1=pyhd8ed1ab_1
-  - pyopenssl=20.0.1=pyhd8ed1ab_0
-  - pyparsing=2.4.7=pyh9f0ad1d_0
-  - pyqt=5.12.3=py39hf3d152e_7
-  - pyqt-impl=5.12.3=py39h0fcd23e_7
-  - pyqt5-sip=4.19.18=py39he80948d_7
-  - pyqtchart=5.12=py39h0fcd23e_7
-  - pyqtwebengine=5.12.1=py39h0fcd23e_7
-  - pyrsistent=0.17.3=py39h3811e60_2
-  - pysam=0.16.0.1=py39h051187c_3
-  - pysocks=1.7.1=py39hf3d152e_3
-  - pytest=6.2.3=py39hf3d152e_0
-  - pytest-forked=1.3.0=pyhd3deb0d_0
-  - pytest-xdist=2.2.1=pyhd8ed1ab_0
-  - python=3.9.4=hdb3f193_0
-  - python-dateutil=2.8.1=py_0
-  - python-isal=0.10.0=py39h3811e60_0
-  - python-lzo=1.12=py39h265373d_1003
-  - python_abi=3.9=1_cp39
-  - pytz=2021.1=pyhd8ed1ab_0
-  - pyyaml=5.4.1=py39h3811e60_0
-  - qt=5.12.9=hda022c4_4
-  - r-base=4.0.3=h349a78a_8
-  - ratelimiter=1.2.0=py_1002
-  - readline=8.1=h46c0cb4_0
-  - requests=2.25.1=pyhd3deb0d_0
-  - requests-oauthlib=1.3.0=pyh9f0ad1d_0
-  - retrying=1.3.3=py_2
-  - rich=10.1.0=py39hf3d152e_0
-  - rsa=4.7.2=pyh44b312d_0
-  - rseqc=4.0.0=py39h38f01e4_1
-  - s3transfer=0.4.2=pyhd8ed1ab_0
-  - salmon=1.4.0=h84f40af_1
-  - samtools=1.12=h9aed4be_1
-  - scipy=1.6.2=py39hee8e79c_0
-  - seaborn=0.11.1=ha770c72_0
-  - seaborn-base=0.11.1=pyhd8ed1ab_1
-  - sed=4.8=he412f7d_0
-  - setuptools=52.0.0=py39h06a4308_0
-  - simplejson=3.17.2=py39h3811e60_2
-  - six=1.15.0=pyh9f0ad1d_0
-  - smart_open=5.0.0=pyhd8ed1ab_0
-  - smmap=3.0.5=pyh44b312d_0
-  - snakemake-minimal=6.2.1=pyhdfd78af_0
-  - spectra=0.0.11=py_1
-  - sqlite=3.35.5=h74cdb3f_0
-  - sra-tools=2.10.0=pl526he1b5a44_0
-  - star=2.7.8a=h9ee0642_1
-  - statsmodels=0.12.2=py39hce5d2b2_0
-  - stopit=1.1.2=py_0
-  - subread=2.0.1=h5bf99c6_1
-  - sysroot_linux-64=2.12=h77966d4_13
-  - tbb=2020.3=hfd86e86_0
-  - tk=8.6.10=hed695b0_1
-  - tktable=2.10=hb7b940f_3
-  - toml=0.10.2=pyhd8ed1ab_0
-  - toposort=1.6=pyhd8ed1ab_0
-  - tornado=6.1=py39h3811e60_1
-  - trackhub=0.2.4=pyh864c0ab_2
-  - traitlets=5.0.5=py_0
-  - typing-extensions=3.7.4.3=0
-  - typing_extensions=3.7.4.3=py_0
-  - tzdata=2021a=he74cb21_0
-  - ucsc-bedgraphtobigwig=377=h0b8a92a_2
-  - ucsc-bedsort=377=h0b8a92a_3
-  - ucsc-bedtobigbed=377=h0b8a92a_2
-  - ucsc-bigwigmerge=377=h0b8a92a_2
-  - ucsc-fetchchromsizes=377=h0b8a92a_2
-  - ucsc-genepredtobed=377=h0b8a92a_4
-  - ucsc-gtftogenepred=377=h0b8a92a_4
-  - ucsc-liftover=377=h0b8a92a_3
-  - ucsc-oligomatch=377=h0b8a92a_2
-  - ucsc-twobittofa=377=h0b8a92a_3
-  - ucsc-wigtobigwig=377=h0b8a92a_2
-  - urllib3=1.26.4=pyhd8ed1ab_0
-  - wcwidth=0.2.5=pyh9f0ad1d_2
-  - wheel=0.36.2=pyhd3deb0d_0
-  - wrapt=1.12.1=py39h3811e60_3
-  - xopen=1.1.0=py39hf3d152e_2
-  - xorg-fixesproto=5.0=h14c3975_1002
-  - xorg-inputproto=2.3.2=h14c3975_1002
-  - xorg-kbproto=1.0.7=h14c3975_1002
-  - xorg-libice=1.0.10=h516909a_0
-  - xorg-libsm=1.2.3=hd9c2040_1000
-  - xorg-libx11=1.6.12=h516909a_0
-  - xorg-libxext=1.3.4=h516909a_0
-  - xorg-libxfixes=5.0.3=h516909a_1004
-  - xorg-libxi=1.7.10=h516909a_0
-  - xorg-libxrender=0.9.10=h516909a_1002
-  - xorg-libxt=1.2.1=h7f98852_0
-  - xorg-libxtst=1.2.3=h516909a_1002
-  - xorg-recordproto=1.14.2=h516909a_1002
-  - xorg-renderproto=0.11.1=h14c3975_1002
-  - xorg-xextproto=7.3.0=h14c3975_1002
-  - xorg-xproto=7.0.31=h14c3975_1007
-  - xz=5.2.5=h516909a_1
-  - yaml=0.2.5=h516909a_0
-  - yarl=1.5.1=py39h07f9747_0
-  - zipp=3.4.1=pyhd8ed1ab_0
-  - zlib=1.2.11=h516909a_1010
-  - zstd=1.4.9=ha95c52a_0
+  - _libgcc_mutex=0.1
+  - _openmp_mutex=4.5
+  - _r-mutex=1.0.1
+  - aiohttp=3.7.4
+  - alsa-lib=1.2.3
+  - amply=0.1.4
+  - apipkg=1.5
+  - appdirs=1.4.4
+  - argcomplete=1.12.3
+  - argh=0.26.2
+  - async-timeout=3.0.1
+  - attrs=20.3.0
+  - azure-common=1.1.27
+  - azure-core=1.12.0
+  - azure-storage-blob=12.8.1
+  - backcall=0.2.0
+  - backports=1.0
+  - backports.functools_lru_cache=1.6.4
+  - bedtools=2.30.0
+  - binutils_impl_linux-64=2.35.1
+  - binutils_linux-64=2.35
+  - biopython=1.78
+  - blinker=1.4
+  - boost-cpp=1.74.0
+  - boto=2.49.0
+  - boto3=1.17.56
+  - botocore=1.20.57
+  - bowtie=1.3.0
+  - bowtie2=2.4.2
+  - brotlipy=0.7.0
+  - bwidget=1.9.14
+  - bx-python=0.8.11
+  - bzip2=1.0.8
+  - c-ares=1.17.1
+  - ca-certificates=2021.4.13
+  - cachetools=4.2.1
+  - cairo=1.16.0
+  - certifi=2020.12.5
+  - cffi=1.14.5
+  - chardet=4.0.0
+  - click=7.1.2
+  - coincbc=2.10.5
+  - colorama=0.4.4
+  - coloredlogs=15.0
+  - colormath=3.0.0
+  - commonmark=0.9.1
+  - configargparse=1.4
+  - cryptography=3.4.7
+  - curl=7.76.1
+  - cutadapt=3.4
+  - cycler=0.10.0
+  - datrie=0.8.2
+  - dbus=1.13.18
+  - decorator=5.0.7
+  - deeptools=3.5.1
+  - deeptoolsintervals=0.1.9
+  - dnaio=0.5.0
+  - docutils=0.17.1
+  - execnet=1.8.0
+  - expat=2.3.0
+  - fastq-screen=0.14.0
+  - fastqc=0.11.9
+  - filelock=3.0.12
+  - font-ttf-dejavu-sans-mono=2.37
+  - fontconfig=2.13.1
+  - freetype=2.10.4
+  - fribidi=1.0.10
+  - future=0.18.2
+  - gat=1.3.6
+  - gcc_impl_linux-64=9.3.0
+  - gcc_linux-64=9.3.0
+  - gettext=0.21.0
+  - gffread=0.12.1
+  - gffutils=0.10.1
+  - gfortran_impl_linux-64=9.3.0
+  - gfortran_linux-64=9.3.0
+  - giflib=5.2.1
+  - gitdb=4.0.7
+  - gitpython=3.1.15
+  - glib=2.68.1
+  - glib-tools=2.68.1
+  - google-api-core=1.26.2
+  - google-auth=1.29.0
+  - google-cloud-core=1.6.0
+  - google-cloud-storage=1.37.1
+  - google-crc32c=1.1.2
+  - google-resumable-media=1.2.0
+  - googleapis-common-protos=1.53.0
+  - graphite2=1.3.14
+  - gsl=2.6
+  - gst-plugins-base=1.18.4
+  - gstreamer=1.18.4
+  - gxx_impl_linux-64=9.3.0
+  - gxx_linux-64=9.3.0
+  - harfbuzz=2.8.0
+  - hdf5=1.10.6
+  - hisat2=2.2.1
+  - htslib=1.12
+  - humanfriendly=9.1
+  - icu=68.1
+  - idna=2.10
+  - importlib-metadata=4.0.1
+  - importlib_metadata=4.0.1
+  - iniconfig=1.1.1
+  - intervalstats=1.01
+  - ipython=7.22.0
+  - ipython_genutils=0.2.0
+  - isa-l=2.30.0
+  - isodate=0.6.0
+  - jedi=0.18.0
+  - jemalloc=5.2.1
+  - jinja2=2.11.3
+  - jmespath=0.10.0
+  - jpeg=9d
+  - jsonschema=3.2.0
+  - jupyter_core=4.7.1
+  - kallisto=0.46.2
+  - kernel-headers_linux-64=2.6.32
+  - kiwisolver=1.3.1
+  - krb5=1.17.2
+  - lcms2=2.12
+  - ld_impl_linux-64=2.35.1
+  - libblas=3.9.0
+  - libcblas=3.9.0
+  - libclang=11.1.0
+  - libcrc32c=1.1.1
+  - libcurl=7.76.1
+  - libdeflate=1.7
+  - libedit=3.1.20210216
+  - libev=4.33
+  - libevent=2.1.10
+  - libffi=3.3
+  - libgcc-devel_linux-64=9.3.0
+  - libgcc-ng=9.3.0
+  - libgd=2.3.2
+  - libgfortran-ng=9.3.0
+  - libgfortran5=9.3.0
+  - libglib=2.68.1
+  - libgomp=9.3.0
+  - libiconv=1.16
+  - liblapack=3.9.0
+  - libllvm11=11.1.0
+  - libnghttp2=1.43.0
+  - libopenblas=0.3.13
+  - libpng=1.6.37
+  - libpq=13.2
+  - libprotobuf=3.15.8
+  - libssh2=1.9.0
+  - libstdcxx-devel_linux-64=9.3.0
+  - libstdcxx-ng=9.3.0
+  - libtiff=4.2.0
+  - libuuid=2.32.1
+  - libwebp=1.2.0
+  - libwebp-base=1.2.0
+  - libxcb=1.14
+  - libxkbcommon=1.0.3
+  - libxml2=2.9.10
+  - llvm-openmp=11.1.0
+  - lz4-c=1.9.3
+  - lzo=2.10
+  - lzstring=1.0.4
+  - make=4.3
+  - markdown=3.3.4
+  - markupsafe=1.1.1
+  - matplotlib=3.4.1
+  - matplotlib-base=3.4.1
+  - mkl=2020.4
+  - more-itertools=8.7.0
+  - msrest=0.6.21
+  - multidict=5.1.0
+  - multiqc=1.10.1
+  - mysql-common=8.0.23
+  - mysql-connector-c=6.1.11
+  - mysql-libs=8.0.23
+  - nbformat=5.1.3
+  - ncbi-ngs-sdk=2.11.0
+  - ncurses=6.2
+  - networkx=2.5
+  - nspr=4.30
+  - nss=3.64
+  - numpy=1.20.2
+  - oauthlib=3.1.0
+  - olefile=0.46
+  - openblas=0.3.13
+  - openjdk=11.0.9.1
+  - openssl=1.1.1k
+  - packaging=20.9
+  - pandas=1.2.4
+  - pandoc=2.12
+  - pango=1.48.4
+  - parso=0.8.2
+  - patsy=0.5.1
+  - pcre=8.44
+  - pcre2=10.36
+  - perl=5.26.2
+  - perl-app-cpanminus=1.7044
+  - perl-business-isbn=3.004
+  - perl-business-isbn-data=20140910.003
+  - perl-carp=1.38
+  - perl-constant=1.33
+  - perl-data-dumper=2.173
+  - perl-encode=2.88
+  - perl-exporter=5.72
+  - perl-extutils-makemaker=7.36
+  - perl-file-path=2.16
+  - perl-file-temp=0.2304
+  - perl-gd=2.68
+  - perl-gdgraph=1.54
+  - perl-gdtextutil=0.86
+  - perl-mime-base64=3.15
+  - perl-parent=0.236
+  - perl-uri=1.76
+  - perl-xml-libxml=2.0132
+  - perl-xml-namespacesupport=1.12
+  - perl-xml-sax=1.02
+  - perl-xml-sax-base=1.09
+  - perl-xsloader=0.24
+  - pexpect=4.8.0
+  - picard=2.25.2
+  - pickleshare=0.7.5
+  - pigz=2.6
+  - pillow=8.2.0
+  - pip=21.0.1
+  - pixman=0.40.0
+  - plotly=4.14.3
+  - pluggy=0.13.1
+  - preseq=3.1.2
+  - prompt-toolkit=3.0.18
+  - protobuf=3.15.8
+  - psutil=5.8.0
+  - ptyprocess=0.7.0
+  - pulp=2.4
+  - py=1.10.0
+  - py2bit=0.3.0
+  - pyasn1=0.4.8
+  - pyasn1-modules=0.2.8
+  - pybedtools=0.8.2
+  - pybigwig=0.3.18
+  - pycparser=2.20
+  - pyfaidx=0.5.9.5
+  - pygments=2.8.1
+  - pyjwt=2.0.1
+  - pyopenssl=20.0.1
+  - pyparsing=2.4.7
+  - pyqt=5.12.3
+  - pyqt-impl=5.12.3
+  - pyqt5-sip=4.19.18
+  - pyqtchart=5.12
+  - pyqtwebengine=5.12.1
+  - pyrsistent=0.17.3
+  - pysam=0.16.0.1
+  - pysocks=1.7.1
+  - pytest=6.2.3
+  - pytest-forked=1.3.0
+  - pytest-xdist=2.2.1
+  - python=3.9.4
+  - python-dateutil=2.8.1
+  - python-isal=0.10.0
+  - python-lzo=1.12
+  - python_abi=3.9
+  - pytz=2021.1
+  - pyyaml=5.4.1
+  - qt=5.12.9
+  - r-base=4.0.3
+  - ratelimiter=1.2.0
+  - readline=8.1
+  - requests=2.25.1
+  - requests-oauthlib=1.3.0
+  - retrying=1.3.3
+  - rich=10.1.0
+  - rsa=4.7.2
+  - rseqc=4.0.0
+  - s3transfer=0.4.2
+  - salmon=1.4.0
+  - samtools=1.12
+  - scipy=1.6.2
+  - seaborn=0.11.1
+  - seaborn-base=0.11.1
+  - sed=4.8
+  - setuptools=52.0.0
+  - simplejson=3.17.2
+  - six=1.15.0
+  - smart_open=5.0.0
+  - smmap=3.0.5
+  - snakemake-minimal=6.2.1
+  - spectra=0.0.11
+  - sqlite=3.35.5
+  - sra-tools=2.10.0
+  - star=2.7.8a
+  - statsmodels=0.12.2
+  - stopit=1.1.2
+  - subread=2.0.1
+  - sysroot_linux-64=2.12
+  - tbb=2020.3
+  - tk=8.6.10
+  - tktable=2.10
+  - toml=0.10.2
+  - toposort=1.6
+  - tornado=6.1
+  - trackhub=0.2.4
+  - traitlets=5.0.5
+  - typing-extensions=3.7.4.3
+  - typing_extensions=3.7.4.3
+  - tzdata=2021a
+  - ucsc-bedgraphtobigwig=377
+  - ucsc-bedsort=377
+  - ucsc-bedtobigbed=377
+  - ucsc-bigwigmerge=377
+  - ucsc-fetchchromsizes=377
+  - ucsc-genepredtobed=377
+  - ucsc-gtftogenepred=377
+  - ucsc-liftover=377
+  - ucsc-oligomatch=377
+  - ucsc-twobittofa=377
+  - ucsc-wigtobigwig=377
+  - urllib3=1.26.4
+  - wcwidth=0.2.5
+  - wheel=0.36.2
+  - wrapt=1.12.1
+  - xopen=1.1.0
+  - xorg-fixesproto=5.0
+  - xorg-inputproto=2.3.2
+  - xorg-kbproto=1.0.7
+  - xorg-libice=1.0.10
+  - xorg-libsm=1.2.3
+  - xorg-libx11=1.6.12
+  - xorg-libxext=1.3.4
+  - xorg-libxfixes=5.0.3
+  - xorg-libxi=1.7.10
+  - xorg-libxrender=0.9.10
+  - xorg-libxt=1.2.1
+  - xorg-libxtst=1.2.3
+  - xorg-recordproto=1.14.2
+  - xorg-renderproto=0.11.1
+  - xorg-xextproto=7.3.0
+  - xorg-xproto=7.0.31
+  - xz=5.2.5
+  - yaml=0.2.5
+  - yarl=1.5.1
+  - zipp=3.4.1
+  - zlib=1.2.11
+  - zstd=1.4.9

From a1afb65d51d2a79f8b3997f83d083e8415d893df Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Wed, 9 Nov 2022 15:08:36 -0500
Subject: [PATCH 10/91] fully remove phix

---
 include/reference_configs/PhiX.yaml            | 11 -----------
 test/test_configs/test_chipseq_no_peaks.yaml   |  1 -
 test/test_configs/test_chipseq_regression.yaml |  1 -
 test/test_configs/test_rnaseq_config.yaml      |  1 -
 4 files changed, 14 deletions(-)
 delete mode 100644 include/reference_configs/PhiX.yaml

diff --git a/include/reference_configs/PhiX.yaml b/include/reference_configs/PhiX.yaml
deleted file mode 100644
index 6c2dce35..00000000
--- a/include/reference_configs/PhiX.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-references:
-  phix:
-    default:
-      genome:
-        url: 'ftp://ftp.ncbi.nlm.nih.gov/genomes/Viruses/enterobacteria_phage_phix174_sensu_lato_uid14015/NC_001422.fna'
-        postprocess:
-          - 'lib.common.gzipped'
-        indexes:
-          - 'bowtie2'
-          - 'hisat2'
-          - 'star'
diff --git a/test/test_configs/test_chipseq_no_peaks.yaml b/test/test_configs/test_chipseq_no_peaks.yaml
index f40361c6..ccb0d77f 100644
--- a/test/test_configs/test_chipseq_no_peaks.yaml
+++ b/test/test_configs/test_chipseq_no_peaks.yaml
@@ -27,5 +27,4 @@ merged_bigwigs: {}
 
 include_references:
   - '../../include/reference_configs/test.yaml'
-  - '../../include/reference_configs/PhiX.yaml'
   - '../../include/reference_configs/Drosophila_melanogaster.yaml'
diff --git a/test/test_configs/test_chipseq_regression.yaml b/test/test_configs/test_chipseq_regression.yaml
index 6b91f5db..220dfaed 100644
--- a/test/test_configs/test_chipseq_regression.yaml
+++ b/test/test_configs/test_chipseq_regression.yaml
@@ -36,5 +36,4 @@ merged_bigwigs: {}
 
 include_references:
   - '../../include/reference_configs/test.yaml'
-  - '../../include/reference_configs/PhiX.yaml'
   - '../../include/reference_configs/Drosophila_melanogaster.yaml'
diff --git a/test/test_configs/test_rnaseq_config.yaml b/test/test_configs/test_rnaseq_config.yaml
index ad4a06c7..93ab5e0c 100644
--- a/test/test_configs/test_rnaseq_config.yaml
+++ b/test/test_configs/test_rnaseq_config.yaml
@@ -43,5 +43,4 @@ fastq_screen:
 
 include_references:
   - '../../include/reference_configs/test.yaml'
-  - '../../include/reference_configs/PhiX.yaml'
   - '../../include/reference_configs/Drosophila_melanogaster.yaml'

From bc33b285d010b991c897da00365e62718ba5a82d Mon Sep 17 00:00:00 2001
From: Ryan Dale <ryan.dale@nih.gov>
Date: Fri, 11 Nov 2022 18:38:13 -0500
Subject: [PATCH 11/91] use v1.9 env yml

---
 env-r.yml | 776 +++++++++++++++++++++++++++---------------------------
 env.yml   | 511 ++++++++++++++++++-----------------
 2 files changed, 634 insertions(+), 653 deletions(-)

diff --git a/env-r.yml b/env-r.yml
index a4fec770..4b30a89a 100644
--- a/env-r.yml
+++ b/env-r.yml
@@ -1,397 +1,387 @@
+name: null
 channels:
   - conda-forge
   - bioconda
 dependencies:
-  - _libgcc_mutex=0.1
-  - _openmp_mutex=4.5
-  - _r-mutex=1.0.1
-  - binutils_impl_linux-64=2.36.1
-  - bioconductor-all=1.36.0
-  - bioconductor-annotate=1.72.0
-  - bioconductor-annotationdbi=1.56.1
-  - bioconductor-annotationfilter=1.18.0
-  - bioconductor-annotationhub=3.2.0
-  - bioconductor-apeglm=1.16.0
-  - bioconductor-biobase=2.54.0
-  - bioconductor-biocfilecache=2.2.0
-  - bioconductor-biocgenerics=0.40.0
-  - bioconductor-biocio=1.4.0
-  - bioconductor-biocparallel=1.28.0
-  - bioconductor-biocversion=3.14.0
-  - bioconductor-biomart=2.50.0
-  - bioconductor-biostrings=2.62.0
-  - bioconductor-clusterprofiler=4.2.0
-  - bioconductor-complexheatmap=2.10.0
-  - bioconductor-consensusclusterplus=1.58.0
-  - bioconductor-degreport=1.30.0
-  - bioconductor-delayedarray=0.20.0
-  - bioconductor-deseq2=1.34.0
-  - bioconductor-do.db=2.9
-  - bioconductor-dose=3.20.0
-  - bioconductor-dupradar=1.24.0
-  - bioconductor-edger=3.36.0
-  - bioconductor-enrichplot=1.14.1
-  - bioconductor-ensembldb=2.18.1
-  - bioconductor-fgsea=1.20.0
-  - bioconductor-genefilter=1.76.0
-  - bioconductor-geneplotter=1.72.0
-  - bioconductor-genomeinfodb=1.30.0
-  - bioconductor-genomeinfodbdata=1.2.7
-  - bioconductor-genomicalignments=1.30.0
-  - bioconductor-genomicfeatures=1.46.1
-  - bioconductor-genomicranges=1.46.0
-  - bioconductor-ggtree=3.2.0
-  - bioconductor-go.db=3.14.0
-  - bioconductor-gosemsim=2.20.0
-  - bioconductor-graph=1.72.0
-  - bioconductor-graphite=1.40.0
-  - bioconductor-ihw=1.22.0
-  - bioconductor-interactivedisplaybase=1.32.0
-  - bioconductor-iranges=2.28.0
-  - bioconductor-keggrest=1.34.0
-  - bioconductor-limma=3.50.0
-  - bioconductor-lpsymphony=1.22.0
-  - bioconductor-matrixgenerics=1.6.0
-  - bioconductor-protgenerics=1.26.0
-  - bioconductor-qvalue=2.26.0
-  - bioconductor-reactome.db=1.77.0
-  - bioconductor-reactomepa=1.38.0
-  - bioconductor-rhdf5=2.38.0
-  - bioconductor-rhdf5filters=1.6.0
-  - bioconductor-rhdf5lib=1.16.0
-  - bioconductor-rhtslib=1.26.0
-  - bioconductor-rsamtools=2.10.0
-  - bioconductor-rsubread=2.8.0
-  - bioconductor-rtracklayer=1.54.0
-  - bioconductor-s4vectors=0.32.0
-  - bioconductor-summarizedexperiment=1.24.0
-  - bioconductor-sva=3.42.0
-  - bioconductor-treeio=1.18.0
-  - bioconductor-tximport=1.22.0
-  - bioconductor-xvector=0.34.0
-  - bioconductor-zlibbioc=1.40.0
-  - bwidget=1.9.14
-  - bzip2=1.0.8
-  - c-ares=1.18.1
-  - ca-certificates=2021.10.8
-  - cairo=1.16.0
-  - curl=7.83.1
-  - expat=2.4.8
-  - font-ttf-dejavu-sans-mono=2.37
-  - font-ttf-inconsolata=3.000
-  - font-ttf-source-code-pro=2.038
-  - font-ttf-ubuntu=0.83
-  - fontconfig=2.14.0
-  - fonts-conda-ecosystem=1
-  - fonts-conda-forge=1
-  - freetype=2.10.4
-  - fribidi=1.0.10
-  - gcc_impl_linux-64=12.1.0
-  - gettext=0.19.8.1
-  - gfortran_impl_linux-64=12.1.0
-  - gmp=6.2.1
-  - graphite2=1.3.13
-  - gsl=2.7
-  - gxx_impl_linux-64=12.1.0
-  - harfbuzz=5.1.0
-  - icu=70.1
-  - jpeg=9e
-  - kernel-headers_linux-64=2.6.32
-  - keyutils=1.6.1
-  - krb5=1.19.3
-  - ld_impl_linux-64=2.36.1
-  - lerc=3.0
-  - libblas=3.9.0
-  - libcblas=3.9.0
-  - libcurl=7.83.1
-  - libdeflate=1.12
-  - libedit=3.1.20191231
-  - libev=4.33
-  - libffi=3.4.2
-  - libgcc-devel_linux-64=12.1.0
-  - libgcc-ng=12.1.0
-  - libgfortran-ng=12.1.0
-  - libgfortran5=12.1.0
-  - libgit2=1.3.0
-  - libglib=2.72.1
-  - libgomp=12.1.0
-  - libiconv=1.16
-  - liblapack=3.9.0
-  - libnghttp2=1.47.0
-  - libopenblas=0.3.21
-  - libpng=1.6.38
-  - libsanitizer=12.1.0
-  - libssh2=1.10.0
-  - libstdcxx-devel_linux-64=12.1.0
-  - libstdcxx-ng=12.1.0
-  - libtiff=4.4.0
-  - libuuid=2.32.1
-  - libwebp-base=1.2.1
-  - libxcb=1.13
-  - libxml2=2.9.14
-  - libzlib=1.2.12
-  - lz4-c=1.9.3
-  - make=4.3
-  - ncurses=6.3
-  - openssl=1.1.1q
-  - pandoc=2.16.1
-  - pango=1.50.9
-  - pcre=8.45
-  - pcre2=10.37
-  - pixman=0.40.0
-  - pthread-stubs=0.4
-  - r-ape=5.5
-  - r-aplot=0.1.1
-  - r-ashr=2.2_47
-  - r-askpass=1.1
-  - r-assertthat=0.2.1
-  - r-babelgene=21.4
-  - r-backports=1.3.0
-  - r-base=4.1.3
-  - r-base64enc=0.1_3
-  - r-bbmle=1.0.24
-  - r-bdsmatrix=1.3_4
-  - r-bh=1.75.0_0
-  - r-biocmanager=1.30.16
-  - r-bit=4.0.4
-  - r-bit64=4.0.5
-  - r-bitops=1.0_7
-  - r-blob=1.2.2
-  - r-brew=1.0_6
-  - r-brio=1.1.2
-  - r-broom=0.7.10
-  - r-bslib=0.3.1
-  - r-cachem=1.0.6
-  - r-callr=3.7.0
-  - r-catools=1.18.2
-  - r-checkmate=2.0.0
-  - r-circlize=0.4.13
-  - r-cli=3.1.0
-  - r-clipr=0.7.1
-  - r-clue=0.3_60
-  - r-cluster=2.1.2
-  - r-coda=0.19_4
-  - r-codetools=0.2_18
-  - r-colorspace=2.0_2
-  - r-commonmark=1.7
-  - r-covr=3.5.1
-  - r-cowplot=1.1.1
-  - r-cpp11=0.4.1
-  - r-crayon=1.4.2
-  - r-credentials=1.3.1
-  - r-crosstalk=1.2.0
-  - r-curl=4.3.2
-  - r-data.table=1.14.2
-  - r-dbi=1.1.1
-  - r-dbplyr=2.1.1
-  - r-dendextend=1.15.2
-  - r-desc=1.4.0
-  - r-devtools=2.4.2
-  - r-diffobj=0.3.5
-  - r-digest=0.6.28
-  - r-doparallel=1.0.16
-  - r-downloader=0.4
-  - r-dplyr=1.0.7
-  - r-dt=0.19
-  - r-egg=0.4.5
-  - r-ellipsis=0.3.2
-  - r-emdbook=1.3.12
-  - r-etrunct=0.1
-  - r-evaluate=0.14
-  - r-fansi=0.4.2
-  - r-farver=2.1.0
-  - r-fastmap=1.1.0
-  - r-fastmatch=1.1_3
-  - r-fdrtool=1.2.16
-  - r-filelock=1.0.2
-  - r-fontawesome=0.2.2
-  - r-forcats=0.5.1
-  - r-foreach=1.5.1
-  - r-formatr=1.11
-  - r-fs=1.5.0
-  - r-futile.logger=1.4.3
-  - r-futile.options=1.0.1
-  - r-gclus=1.3.2
-  - r-generics=0.1.1
-  - r-gert=1.4.3
-  - r-getoptlong=1.0.5
-  - r-ggally=2.1.2
-  - r-ggdendro=0.1.22
-  - r-ggforce=0.3.3
-  - r-ggfun=0.0.4
-  - r-ggnewscale=0.4.5
-  - r-ggplot2=3.3.5
-  - r-ggplotify=0.1.0
-  - r-ggraph=2.0.5
-  - r-ggrepel=0.9.1
-  - r-gh=1.3.0
-  - r-git2r=0.28.0
-  - r-gitcreds=0.1.1
-  - r-globaloptions=0.1.2
-  - r-glue=1.5.0
-  - r-gplots=3.1.1
-  - r-graphlayouts=0.7.1
-  - r-gridextra=2.3
-  - r-gridgraphics=0.5_1
-  - r-gtable=0.3.0
-  - r-gtools=3.9.2.2
-  - r-heatmaply=1.3.0
-  - r-hexbin=1.28.2
-  - r-highr=0.9
-  - r-hms=1.1.1
-  - r-htmltools=0.5.2
-  - r-htmlwidgets=1.5.4
-  - r-httpuv=1.6.3
-  - r-httr=1.4.2
-  - r-igraph=1.2.8
-  - r-ini=0.3.1
-  - r-invgamma=1.1
-  - r-irlba=2.3.3
-  - r-isoband=0.2.5
-  - r-iterators=1.0.13
-  - r-jquerylib=0.1.4
-  - r-jsonlite=1.7.2
-  - r-kernsmooth=2.23_20
-  - r-knitr=1.35
-  - r-labeling=0.4.2
-  - r-lambda.r=1.2.4
-  - r-lasso2=1.2_22
-  - r-later=1.2.0
-  - r-lattice=0.20_45
-  - r-lazyeval=0.2.2
-  - r-lifecycle=1.0.1
-  - r-locfit=1.5_9.4
-  - r-logging=0.10_108
-  - r-magrittr=2.0.1
-  - r-markdown=1.1
-  - r-mass=7.3_54
-  - r-matrix=1.3_4
-  - r-matrixstats=0.61.0
-  - r-memoise=2.0.0
-  - r-mgcv=1.8_38
-  - r-mime=0.12
-  - r-mixsqp=0.3_43
-  - r-mnormt=2.0.2
-  - r-msigdbr=7.4.1
-  - r-munsell=0.5.0
-  - r-mvtnorm=1.1_3
-  - r-nlme=3.1_153
-  - r-nozzle.r1=1.1_1.1
-  - r-numderiv=2016.8_1.1
-  - r-openssl=1.4.5
-  - r-openxlsx=4.2.4
-  - r-patchwork=1.1.1
-  - r-pheatmap=1.0.12
-  - r-pillar=1.6.4
-  - r-pkgbuild=1.2.0
-  - r-pkgconfig=2.0.3
-  - r-pkgload=1.2.3
-  - r-plogr=0.2.0
-  - r-plotly=4.10.0
-  - r-plyr=1.8.6
-  - r-png=0.1_7
-  - r-polyclip=1.10_0
-  - r-praise=1.0.0
-  - r-prettyunits=1.1.1
-  - r-processx=3.5.2
-  - r-progress=1.2.2
-  - r-promises=1.2.0.1
-  - r-ps=1.6.0
-  - r-psych=2.1.9
-  - r-purrr=0.3.4
-  - r-qap=0.1_1
-  - r-r6=2.5.1
-  - r-rappdirs=0.3.3
-  - r-rcmdcheck=1.4.0
-  - r-rcolorbrewer=1.1_2
-  - r-rcpp=1.0.7
-  - r-rcpparmadillo=0.10.7.3.0
-  - r-rcppeigen=0.3.3.9.1
-  - r-rcppnumerical=0.4_0
-  - r-rcurl=1.98_1.8
-  - r-readr=2.1.0
-  - r-registry=0.5_1
-  - r-rematch2=2.1.2
-  - r-remotes=2.4.1
-  - r-reshape=0.8.8
-  - r-reshape2=1.4.4
-  - r-restfulr=0.0.13
-  - r-rex=1.2.0
-  - r-rjson=0.2.20
-  - r-rlang=0.4.12
-  - r-rmarkdown=2.11
-  - r-roxygen2=7.1.2
-  - r-rprojroot=2.0.2
-  - r-rsqlite=2.2.8
-  - r-rstudioapi=0.13
-  - r-rvcheck=0.1.8
-  - r-rversions=2.1.1
-  - r-sass=0.4.0
-  - r-scales=1.1.1
-  - r-scatterpie=0.1.6
-  - r-seriation=1.3.1
-  - r-sessioninfo=1.2.1
-  - r-shadowtext=0.0.9
-  - r-shape=1.4.6
-  - r-shiny=1.7.1
-  - r-slam=0.1_48
-  - r-snow=0.4_4
-  - r-sourcetools=0.1.7
-  - r-sparsem=1.81
-  - r-spp=1.16.0
-  - r-squarem=2021.1
-  - r-stringi=1.7.8
-  - r-stringr=1.4.0
-  - r-survival=3.2_13
-  - r-sys=3.4
-  - r-testthat=3.1.0
-  - r-tibble=3.1.6
-  - r-tidygraph=1.2.0
-  - r-tidyr=1.1.4
-  - r-tidyselect=1.1.1
-  - r-tidytree=0.3.6
-  - r-tinytex=0.35
-  - r-tmvnsim=1.0_2
-  - r-truncnorm=1.0_8
-  - r-tsp=1.1_11
-  - r-tweenr=1.0.2
-  - r-tzdb=0.2.0
-  - r-upsetr=1.4.0
-  - r-usethis=2.1.3
-  - r-utf8=1.2.2
-  - r-vctrs=0.3.8
-  - r-viridis=0.6.2
-  - r-viridislite=0.4.0
-  - r-vroom=1.5.6
-  - r-waldo=0.3.1
-  - r-webshot=0.5.2
-  - r-whisker=0.4
-  - r-withr=2.4.2
-  - r-xfun=0.28
-  - r-xml=3.99_0.8
-  - r-xml2=1.3.2
-  - r-xopen=1.0.0
-  - r-xtable=1.8_4
-  - r-yaml=2.2.1
-  - r-yulab.utils=0.0.4
-  - r-zip=2.2.0
-  - readline=8.1.2
-  - sed=4.8
-  - sysroot_linux-64=2.12
-  - tk=8.6.12
-  - tktable=2.10
-  - xorg-kbproto=1.0.7
-  - xorg-libice=1.0.10
-  - xorg-libsm=1.2.3
-  - xorg-libx11=1.7.2
-  - xorg-libxau=1.0.9
-  - xorg-libxdmcp=1.1.3
-  - xorg-libxext=1.3.4
-  - xorg-libxrender=0.9.10
-  - xorg-libxt=1.2.1
-  - xorg-renderproto=0.11.1
-  - xorg-xextproto=7.3.0
-  - xorg-xproto=7.0.31
-  - xz=5.2.5
-  - zlib=1.2.12
-  - zstd=1.5.2
+  - _libgcc_mutex=0.1=conda_forge
+  - _openmp_mutex=4.5=2_gnu
+  - _r-mutex=1.0.1=anacondar_1
+  - binutils_impl_linux-64=2.39=h6ceecb4_0
+  - bioconductor-all=1.32.0=r40hdfd78af_1
+  - bioconductor-annotate=1.68.0=r40hdfd78af_1
+  - bioconductor-annotationdbi=1.52.0=r40hdfd78af_1
+  - bioconductor-annotationhub=2.22.0=r40hdfd78af_1
+  - bioconductor-apeglm=1.12.0=r40h399db7b_1
+  - bioconductor-biobase=2.50.0=r40hd029910_1
+  - bioconductor-biocfilecache=1.14.0=r40hdfd78af_1
+  - bioconductor-biocgenerics=0.36.0=r40hdfd78af_1
+  - bioconductor-biocparallel=1.24.1=r40h399db7b_0
+  - bioconductor-biocversion=3.12.0=r40hdfd78af_1
+  - bioconductor-biomart=2.46.3=r40hdfd78af_0
+  - bioconductor-biostrings=2.58.0=r40hd029910_1
+  - bioconductor-clusterprofiler=3.18.1=r40hdfd78af_0
+  - bioconductor-complexheatmap=2.6.2=r40hdfd78af_1
+  - bioconductor-consensusclusterplus=1.54.0=r40hdfd78af_1
+  - bioconductor-degreport=1.26.0=r40hdfd78af_1
+  - bioconductor-delayedarray=0.16.3=r40hd029910_0
+  - bioconductor-deseq2=1.30.1=r40h399db7b_0
+  - bioconductor-do.db=2.9=r40hdfd78af_10
+  - bioconductor-dose=3.16.0=r40hdfd78af_1
+  - bioconductor-dupradar=1.20.0=r40hdfd78af_1
+  - bioconductor-edger=3.32.1=r40h399db7b_0
+  - bioconductor-enrichplot=1.10.2=r40hdfd78af_0
+  - bioconductor-fgsea=1.16.0=r40h399db7b_1
+  - bioconductor-genefilter=1.72.1=r40hba52eb8_0
+  - bioconductor-geneplotter=1.68.0=r40hdfd78af_1
+  - bioconductor-genomeinfodb=1.26.4=r40hdfd78af_0
+  - bioconductor-genomeinfodbdata=1.2.4=r40hdfd78af_2
+  - bioconductor-genomicalignments=1.26.0=r40hd029910_1
+  - bioconductor-genomicfeatures=1.42.2=r40hdfd78af_0
+  - bioconductor-genomicranges=1.42.0=r40hd029910_1
+  - bioconductor-go.db=3.12.1=r40hdfd78af_1
+  - bioconductor-gosemsim=2.16.1=r40h399db7b_0
+  - bioconductor-graph=1.68.0=r40hd029910_1
+  - bioconductor-graphite=1.36.0=r40hdfd78af_1
+  - bioconductor-ihw=1.18.0=r40hdfd78af_1
+  - bioconductor-interactivedisplaybase=1.28.0=r40hdfd78af_1
+  - bioconductor-iranges=2.24.1=r40hd029910_0
+  - bioconductor-limma=3.46.0=r40hd029910_1
+  - bioconductor-lpsymphony=1.18.0=r40h399db7b_1
+  - bioconductor-matrixgenerics=1.2.1=r40hdfd78af_0
+  - bioconductor-qvalue=2.22.0=r40hdfd78af_1
+  - bioconductor-reactome.db=1.74.0=r40hdfd78af_1
+  - bioconductor-reactomepa=1.34.0=r40hdfd78af_1
+  - bioconductor-rhdf5=2.34.0=r40h399db7b_1
+  - bioconductor-rhdf5filters=1.2.0=r40h399db7b_1
+  - bioconductor-rhdf5lib=1.12.1=r40hd029910_0
+  - bioconductor-rhtslib=1.22.0=r40hd029910_1
+  - bioconductor-rsamtools=2.6.0=r40h399db7b_1
+  - bioconductor-rsubread=2.4.3=r40hd029910_0
+  - bioconductor-rtracklayer=1.50.0=r40h7f5ccec_2
+  - bioconductor-s4vectors=0.28.1=r40hd029910_0
+  - bioconductor-summarizedexperiment=1.20.0=r40hdfd78af_1
+  - bioconductor-sva=3.38.0=r40hd029910_1
+  - bioconductor-tximport=1.18.0=r40hdfd78af_1
+  - bioconductor-xvector=0.30.0=r40hd029910_1
+  - bioconductor-zlibbioc=1.36.0=r40hd029910_1
+  - bwidget=1.9.14=ha770c72_1
+  - bzip2=1.0.8=h7f98852_4
+  - c-ares=1.18.1=h7f98852_0
+  - ca-certificates=2022.9.24=ha878542_0
+  - cairo=1.16.0=ha61ee94_1014
+  - curl=7.86.0=h7bff187_1
+  - expat=2.5.0=h27087fc_0
+  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
+  - font-ttf-inconsolata=3.000=h77eed37_0
+  - font-ttf-source-code-pro=2.038=h77eed37_0
+  - font-ttf-ubuntu=0.83=hab24e00_0
+  - fontconfig=2.14.1=hc2a2eb6_0
+  - fonts-conda-ecosystem=1=0
+  - fonts-conda-forge=1=0
+  - freetype=2.12.1=hca18f0e_0
+  - fribidi=1.0.10=h36c2ea0_0
+  - gcc_impl_linux-64=12.2.0=hcc96c02_19
+  - gettext=0.21.1=h27087fc_0
+  - gfortran_impl_linux-64=12.2.0=h55be85b_19
+  - glpk=5.0=h445213a_0
+  - gmp=6.2.1=h58526e2_0
+  - graphite2=1.3.13=h58526e2_1001
+  - gsl=2.7=he838d99_0
+  - gxx_impl_linux-64=12.2.0=hcc96c02_19
+  - harfbuzz=5.3.0=h418a68e_0
+  - icu=70.1=h27087fc_0
+  - jpeg=9e=h166bdaf_2
+  - kernel-headers_linux-64=2.6.32=he073ed8_15
+  - keyutils=1.6.1=h166bdaf_0
+  - krb5=1.19.3=h3790be6_0
+  - ld_impl_linux-64=2.39=hc81fddc_0
+  - lerc=4.0.0=h27087fc_0
+  - libblas=3.9.0=16_linux64_openblas
+  - libcblas=3.9.0=16_linux64_openblas
+  - libcurl=7.86.0=h7bff187_1
+  - libdeflate=1.14=h166bdaf_0
+  - libedit=3.1.20191231=he28a2e2_2
+  - libev=4.33=h516909a_1
+  - libffi=3.4.2=h7f98852_5
+  - libgcc-devel_linux-64=12.2.0=h3b97bd3_19
+  - libgcc-ng=12.2.0=h65d4601_19
+  - libgfortran-ng=12.2.0=h69a702a_19
+  - libgfortran5=12.2.0=h337968e_19
+  - libgit2=1.5.0=hde0c96a_1
+  - libglib=2.74.1=h606061b_1
+  - libgomp=12.2.0=h65d4601_19
+  - libiconv=1.17=h166bdaf_0
+  - liblapack=3.9.0=16_linux64_openblas
+  - libnghttp2=1.47.0=hdcd2b5c_1
+  - libopenblas=0.3.21=pthreads_h78a6416_3
+  - libpng=1.6.38=h753d276_0
+  - libsanitizer=12.2.0=h46fd767_19
+  - libssh2=1.10.0=haa6b8db_3
+  - libstdcxx-devel_linux-64=12.2.0=h3b97bd3_19
+  - libstdcxx-ng=12.2.0=h46fd767_19
+  - libtiff=4.4.0=h55922b4_4
+  - libuuid=2.32.1=h7f98852_1000
+  - libwebp-base=1.2.4=h166bdaf_0
+  - libxcb=1.13=h7f98852_1004
+  - libxml2=2.10.3=h7463322_0
+  - libzlib=1.2.13=h166bdaf_4
+  - make=4.3=hd18ef5c_1
+  - ncurses=6.3=h27087fc_1
+  - openssl=1.1.1s=h166bdaf_0
+  - pandoc=2.19.2=h32600fe_1
+  - pango=1.50.11=h382ae3d_0
+  - pcre2=10.40=hc3806b6_0
+  - pixman=0.40.0=h36c2ea0_0
+  - pthread-stubs=0.4=h36c2ea0_1001
+  - r-ashr=2.2_54=r40h7525677_0
+  - r-askpass=1.1=r40hcfec24a_2
+  - r-assertthat=0.2.1=r40hc72bb7e_2
+  - r-babelgene=22.3=r40hc72bb7e_0
+  - r-backports=1.4.1=r40hcfec24a_0
+  - r-base=4.0.5=hb87df5d_8
+  - r-base64enc=0.1_3=r40hcfec24a_1004
+  - r-bbmle=1.0.25=r40hc72bb7e_0
+  - r-bdsmatrix=1.3_6=r40h06615bd_0
+  - r-bh=1.78.0_0=r40hc72bb7e_0
+  - r-biocmanager=1.30.18=r40hc72bb7e_0
+  - r-bit=4.0.4=r40hcfec24a_0
+  - r-bit64=4.0.5=r40hcfec24a_0
+  - r-bitops=1.0_7=r40h06615bd_0
+  - r-blob=1.2.3=r40hc72bb7e_0
+  - r-brew=1.0_7=r40hc72bb7e_0
+  - r-brio=1.1.3=r40hcfec24a_0
+  - r-broom=1.0.1=r40hc72bb7e_0
+  - r-bslib=0.4.0=r40hc72bb7e_0
+  - r-cachem=1.0.6=r40hcfec24a_0
+  - r-cairo=1.6_0=r40h06615bd_0
+  - r-callr=3.7.2=r40hc72bb7e_0
+  - r-catools=1.18.2=r40h7525677_0
+  - r-checkmate=2.1.0=r40h06615bd_0
+  - r-circlize=0.4.15=r40hc72bb7e_0
+  - r-cli=3.4.1=r40h7525677_0
+  - r-clipr=0.8.0=r40hc72bb7e_0
+  - r-clue=0.3_60=r40hcfec24a_0
+  - r-cluster=2.1.3=r40h8da6f51_0
+  - r-coda=0.19_4=r40hc72bb7e_0
+  - r-codetools=0.2_18=r40hc72bb7e_0
+  - r-colorspace=2.0_3=r40h06615bd_0
+  - r-commonmark=1.8.0=r40h06615bd_0
+  - r-cowplot=1.1.1=r40hc72bb7e_0
+  - r-cpp11=0.4.2=r40hc72bb7e_0
+  - r-crayon=1.5.1=r40hc72bb7e_0
+  - r-credentials=1.3.2=r40hc72bb7e_0
+  - r-crosstalk=1.2.0=r40hc72bb7e_0
+  - r-curl=4.3.2=r40hcfec24a_0
+  - r-data.table=1.14.2=r40hcfec24a_0
+  - r-dbi=1.1.3=r40hc72bb7e_0
+  - r-dbplyr=2.2.1=r40hc72bb7e_0
+  - r-dendextend=1.16.0=r40hc72bb7e_0
+  - r-desc=1.4.2=r40hc72bb7e_0
+  - r-devtools=2.4.4=r40hc72bb7e_0
+  - r-diffobj=0.3.5=r40hcfec24a_0
+  - r-digest=0.6.29=r40h03ef668_0
+  - r-downlit=0.4.2=r40hc72bb7e_0
+  - r-downloader=0.4=r40hc72bb7e_1003
+  - r-dplyr=1.0.10=r40h7525677_0
+  - r-dt=0.25=r40hc72bb7e_0
+  - r-egg=0.4.5=r40hc72bb7e_2
+  - r-ellipsis=0.3.2=r40hcfec24a_0
+  - r-emdbook=1.3.12=r40hc72bb7e_1
+  - r-etrunct=0.1=r40hc72bb7e_1003
+  - r-evaluate=0.16=r40hc72bb7e_0
+  - r-fansi=1.0.3=r40h06615bd_0
+  - r-farver=2.1.1=r40h7525677_0
+  - r-fastmap=1.1.0=r40h03ef668_0
+  - r-fastmatch=1.1_3=r40hcfec24a_0
+  - r-fdrtool=1.2.17=r40hcfec24a_0
+  - r-fontawesome=0.3.0=r40hc72bb7e_0
+  - r-forcats=0.5.2=r40hc72bb7e_0
+  - r-foreach=1.5.2=r40hc72bb7e_0
+  - r-formatr=1.12=r40hc72bb7e_0
+  - r-fs=1.5.2=r40h7525677_1
+  - r-futile.logger=1.4.3=r40hc72bb7e_1003
+  - r-futile.options=1.0.1=r40hc72bb7e_1002
+  - r-gclus=1.3.2=r40hc72bb7e_2
+  - r-generics=0.1.3=r40hc72bb7e_0
+  - r-gert=1.5.0=r40h163148b_2
+  - r-getoptlong=1.0.5=r40hc72bb7e_0
+  - r-ggally=2.1.2=r40hc72bb7e_0
+  - r-ggdendro=0.1.23=r40hc72bb7e_0
+  - r-ggforce=0.3.4=r40h7525677_0
+  - r-ggfun=0.0.7=r40hc72bb7e_0
+  - r-ggnewscale=0.4.7=r40hc72bb7e_0
+  - r-ggplot2=3.3.6=r40hc72bb7e_0
+  - r-ggraph=2.0.6=r40h7525677_0
+  - r-ggrepel=0.9.1=r40h03ef668_0
+  - r-gh=1.3.1=r40hc72bb7e_0
+  - r-gitcreds=0.1.2=r40hc72bb7e_0
+  - r-globaloptions=0.1.2=r40ha770c72_0
+  - r-glue=1.6.2=r40h06615bd_0
+  - r-gplots=3.1.3=r40hc72bb7e_0
+  - r-graphlayouts=0.8.1=r40h7525677_0
+  - r-gridextra=2.3=r40hc72bb7e_1003
+  - r-gtable=0.3.1=r40hc72bb7e_0
+  - r-gtools=3.9.3=r40h06615bd_0
+  - r-heatmaply=1.3.0=r40hc72bb7e_0
+  - r-hexbin=1.28.2=r40h8da6f51_0
+  - r-highr=0.9=r40hc72bb7e_0
+  - r-hms=1.1.2=r40hc72bb7e_0
+  - r-htmltools=0.5.3=r40h7525677_0
+  - r-htmlwidgets=1.5.4=r40hc72bb7e_0
+  - r-httpuv=1.6.6=r40h7525677_0
+  - r-httr=1.4.4=r40hc72bb7e_0
+  - r-igraph=1.3.4=r40hb34fc8a_0
+  - r-ini=0.3.1=r40hc72bb7e_1003
+  - r-invgamma=1.1=r40hc72bb7e_1
+  - r-irlba=2.3.5=r40h5f7b363_0
+  - r-isoband=0.2.5=r40h03ef668_0
+  - r-iterators=1.0.14=r40hc72bb7e_0
+  - r-jquerylib=0.1.4=r40hc72bb7e_0
+  - r-jsonlite=1.8.0=r40h06615bd_0
+  - r-kernsmooth=2.23_20=r40h742201e_0
+  - r-knitr=1.40=r40hc72bb7e_0
+  - r-labeling=0.4.2=r40hc72bb7e_1
+  - r-lambda.r=1.2.4=r40hc72bb7e_1
+  - r-lasso2=1.2_22=r40hcfec24a_0
+  - r-later=1.2.0=r40h03ef668_0
+  - r-lattice=0.20_45=r40hcfec24a_0
+  - r-lazyeval=0.2.2=r40hcfec24a_2
+  - r-lifecycle=1.0.2=r40hc72bb7e_0
+  - r-locfit=1.5_9.4=r40hcfec24a_1
+  - r-logging=0.10_108=r40ha770c72_2
+  - r-magrittr=2.0.3=r40h06615bd_0
+  - r-mass=7.3_58.1=r40h06615bd_0
+  - r-matrix=1.4_1=r40h0154571_0
+  - r-matrixstats=0.62.0=r40h06615bd_0
+  - r-memoise=2.0.1=r40hc72bb7e_0
+  - r-mgcv=1.8_40=r40h0154571_0
+  - r-mime=0.12=r40hcfec24a_0
+  - r-miniui=0.1.1.1=r40hc72bb7e_1002
+  - r-mixsqp=0.3_43=r40h306847c_1
+  - r-mnormt=2.1.0=r40h8da6f51_0
+  - r-msigdbr=7.5.1=r40hc72bb7e_0
+  - r-munsell=0.5.0=r40hc72bb7e_1004
+  - r-mvtnorm=1.1_3=r40h859d828_0
+  - r-nlme=3.1_159=r40h8da6f51_0
+  - r-nozzle.r1=1.1_1.1=r40ha770c72_0
+  - r-numderiv=2016.8_1.1=r40hc72bb7e_3
+  - r-openssl=2.0.3=r40hfaab4ff_0
+  - r-openxlsx=4.2.5=r40h03ef668_0
+  - r-pheatmap=1.0.12=r40hc72bb7e_2
+  - r-pillar=1.8.1=r40hc72bb7e_0
+  - r-pkgbuild=1.3.1=r40hc72bb7e_0
+  - r-pkgconfig=2.0.3=r40hc72bb7e_1
+  - r-pkgdown=2.0.6=r40hc72bb7e_0
+  - r-pkgload=1.3.0=r40hc72bb7e_0
+  - r-plogr=0.2.0=r40hc72bb7e_1003
+  - r-plotly=4.10.0=r40hc72bb7e_0
+  - r-plyr=1.8.7=r40h7525677_0
+  - r-png=0.1_7=r40hcfec24a_1004
+  - r-polyclip=1.10_0=r40h7525677_2
+  - r-praise=1.0.0=r40hc72bb7e_1005
+  - r-prettyunits=1.1.1=r40hc72bb7e_1
+  - r-processx=3.7.0=r40h06615bd_0
+  - r-profvis=0.3.7=r40hcfec24a_0
+  - r-progress=1.2.2=r40hc72bb7e_2
+  - r-promises=1.2.0.1=r40h03ef668_0
+  - r-ps=1.7.1=r40h06615bd_0
+  - r-psych=2.2.5=r40hc72bb7e_0
+  - r-purrr=0.3.4=r40hcfec24a_1
+  - r-qap=0.1_2=r40h8da6f51_0
+  - r-r6=2.5.1=r40hc72bb7e_0
+  - r-ragg=1.2.2=r40hc1f6985_0
+  - r-rappdirs=0.3.3=r40hcfec24a_0
+  - r-rcmdcheck=1.4.0=r40h785f33e_0
+  - r-rcolorbrewer=1.1_3=r40h785f33e_0
+  - r-rcpp=1.0.9=r40h7525677_1
+  - r-rcpparmadillo=0.11.2.3.1=r40h9f5de39_0
+  - r-rcppeigen=0.3.3.9.2=r40h43535f1_0
+  - r-rcppnumerical=0.4_0=r40h03ef668_1
+  - r-rcurl=1.98_1.8=r40h06615bd_0
+  - r-readr=2.1.2=r40h03ef668_0
+  - r-registry=0.5_1=r40hc72bb7e_2
+  - r-rematch2=2.1.2=r40hc72bb7e_1
+  - r-remotes=2.4.2=r40hc72bb7e_0
+  - r-reshape=0.8.9=r40hc72bb7e_0
+  - r-reshape2=1.4.4=r40h03ef668_1
+  - r-rjson=0.2.21=r40h7525677_1
+  - r-rlang=1.0.6=r40h7525677_0
+  - r-rmarkdown=2.16=r40hc72bb7e_0
+  - r-roxygen2=7.2.1=r40h7525677_0
+  - r-rprojroot=2.0.3=r40hc72bb7e_0
+  - r-rsqlite=2.2.8=r40h03ef668_0
+  - r-rstudioapi=0.14=r40hc72bb7e_0
+  - r-rvcheck=0.2.1=r40hc72bb7e_0
+  - r-rversions=2.1.2=r40hc72bb7e_0
+  - r-sass=0.4.2=r40h7525677_0
+  - r-scales=1.2.1=r40hc72bb7e_0
+  - r-scatterpie=0.1.8=r40hc72bb7e_0
+  - r-seriation=1.3.6=r40h8da6f51_0
+  - r-sessioninfo=1.2.2=r40hc72bb7e_0
+  - r-shadowtext=0.1.2=r40hc72bb7e_0
+  - r-shape=1.4.6=r40ha770c72_0
+  - r-shiny=1.7.2=r40h785f33e_0
+  - r-slam=0.1_50=r40hb699f27_1
+  - r-snow=0.4_4=r40hc72bb7e_0
+  - r-sourcetools=0.1.7=r40h03ef668_1002
+  - r-sparsem=1.81=r40h859d828_0
+  - r-spp=1.16.0=r40h52a8340_4
+  - r-squarem=2021.1=r40hc72bb7e_0
+  - r-stringi=1.7.8=r40h30a9eb7_0
+  - r-stringr=1.4.1=r40hc72bb7e_0
+  - r-survival=3.4_0=r40h06615bd_0
+  - r-sys=3.4=r40hcfec24a_0
+  - r-systemfonts=1.0.4=r40hef9c87a_0
+  - r-testthat=3.1.4=r40h7525677_0
+  - r-textshaping=0.3.6=r40h9354b80_2
+  - r-tibble=3.1.8=r40h06615bd_0
+  - r-tidygraph=1.2.2=r40h7525677_0
+  - r-tidyr=1.2.1=r40h7525677_0
+  - r-tidyselect=1.1.2=r40hc72bb7e_0
+  - r-tinytex=0.42=r40hc72bb7e_0
+  - r-tmvnsim=1.0_2=r40h859d828_3
+  - r-truncnorm=1.0_8=r40hcfec24a_1002
+  - r-tsp=1.2_1=r40h06615bd_0
+  - r-tweenr=2.0.2=r40h7525677_0
+  - r-tzdb=0.3.0=r40h7525677_0
+  - r-upsetr=1.4.0=r40hc72bb7e_2
+  - r-urlchecker=1.0.1=r40hc72bb7e_0
+  - r-usethis=2.1.6=r40hc72bb7e_0
+  - r-utf8=1.2.2=r40hcfec24a_0
+  - r-vctrs=0.4.1=r40h7525677_0
+  - r-viridis=0.6.2=r40hc72bb7e_0
+  - r-viridislite=0.4.1=r40hc72bb7e_0
+  - r-vroom=1.5.7=r40h03ef668_0
+  - r-waldo=0.4.0=r40hc72bb7e_0
+  - r-webshot=0.5.4=r40hc72bb7e_0
+  - r-whisker=0.4=r40hc72bb7e_1
+  - r-withr=2.5.0=r40hc72bb7e_0
+  - r-xfun=0.33=r40h7525677_0
+  - r-xml=3.99_0.10=r40h06615bd_0
+  - r-xml2=1.3.3=r40h7525677_1
+  - r-xopen=1.0.0=r40hc72bb7e_1003
+  - r-xtable=1.8_4=r40hc72bb7e_3
+  - r-yaml=2.3.5=r40h06615bd_0
+  - r-yulab.utils=0.0.5=r40hc72bb7e_0
+  - r-zip=2.2.1=r40h06615bd_0
+  - readline=8.1.2=h0f457ee_0
+  - sed=4.8=he412f7d_0
+  - sysroot_linux-64=2.12=he073ed8_15
+  - tk=8.6.12=h27826a3_0
+  - tktable=2.10=hb7b940f_3
+  - xorg-kbproto=1.0.7=h7f98852_1002
+  - xorg-libice=1.0.10=h7f98852_0
+  - xorg-libsm=1.2.3=hd9c2040_1000
+  - xorg-libx11=1.7.2=h7f98852_0
+  - xorg-libxau=1.0.9=h7f98852_0
+  - xorg-libxdmcp=1.1.3=h7f98852_0
+  - xorg-libxext=1.3.4=h7f98852_1
+  - xorg-libxrender=0.9.10=h7f98852_1003
+  - xorg-libxt=1.2.1=h7f98852_2
+  - xorg-renderproto=0.11.1=h7f98852_1002
+  - xorg-xextproto=7.3.0=h7f98852_1002
+  - xorg-xproto=7.0.31=h7f98852_1007
+  - xz=5.2.6=h166bdaf_0
+  - zlib=1.2.13=h166bdaf_4
+  - zstd=1.5.2=h6239696_4
+prefix: /home/dalerr/proj/lcdb-wf/env-r
diff --git a/env.yml b/env.yml
index f0b068e2..66a8bd01 100644
--- a/env.yml
+++ b/env.yml
@@ -1,312 +1,306 @@
 channels:
   - conda-forge
   - bioconda
-  - defaults
 dependencies:
   - _libgcc_mutex=0.1
   - _openmp_mutex=4.5
   - _r-mutex=1.0.1
-  - aiohttp=3.7.4
-  - alsa-lib=1.2.3
-  - amply=0.1.4
-  - apipkg=1.5
+  - alsa-lib=1.2.3.2
+  - amply=0.1.5
   - appdirs=1.4.4
-  - argcomplete=1.12.3
+  - argcomplete=2.0.0
   - argh=0.26.2
-  - async-timeout=3.0.1
-  - attrs=20.3.0
-  - azure-common=1.1.27
-  - azure-core=1.12.0
-  - azure-storage-blob=12.8.1
+  - asttokens=2.0.8
+  - attr=2.5.1
+  - attrs=22.1.0
   - backcall=0.2.0
   - backports=1.0
   - backports.functools_lru_cache=1.6.4
   - bedtools=2.30.0
-  - binutils_impl_linux-64=2.35.1
-  - binutils_linux-64=2.35
-  - biopython=1.78
-  - blinker=1.4
+  - binutils_impl_linux-64=2.39
+  - binutils_linux-64=2.39
+  - biopython=1.79
   - boost-cpp=1.74.0
-  - boto=2.49.0
-  - boto3=1.17.56
-  - botocore=1.20.57
-  - bowtie=1.3.0
-  - bowtie2=2.4.2
+  - bowtie=1.3.1
+  - bowtie2=2.5.0
+  - brotli=1.0.9
+  - brotli-bin=1.0.9
   - brotlipy=0.7.0
   - bwidget=1.9.14
-  - bx-python=0.8.11
+  - bx-python=0.9.0
   - bzip2=1.0.8
-  - c-ares=1.17.1
-  - ca-certificates=2021.4.13
-  - cachetools=4.2.1
+  - c-ares=1.18.1
+  - ca-certificates=2022.9.24
   - cairo=1.16.0
-  - certifi=2020.12.5
-  - cffi=1.14.5
-  - chardet=4.0.0
-  - click=7.1.2
-  - coincbc=2.10.5
-  - colorama=0.4.4
-  - coloredlogs=15.0
+  - certifi=2022.9.24
+  - cffi=1.15.1
+  - charset-normalizer=2.1.1
+  - click=8.1.3
+  - coin-or-cbc=2.10.8
+  - coin-or-cgl=0.60.6
+  - coin-or-clp=1.17.7
+  - coin-or-osi=0.108.7
+  - coin-or-utils=2.11.6
+  - coincbc=2.10.8
+  - colorama=0.4.6
+  - coloredlogs=15.0.1
   - colormath=3.0.0
   - commonmark=0.9.1
-  - configargparse=1.4
-  - cryptography=3.4.7
-  - curl=7.76.1
-  - cutadapt=3.4
-  - cycler=0.10.0
+  - configargparse=1.5.3
+  - connection_pool=0.0.3
+  - contourpy=1.0.6
+  - cryptography=38.0.2
+  - curl=7.86.0
+  - cutadapt=4.1
+  - cycler=0.11.0
+  - dataclasses=0.8
   - datrie=0.8.2
-  - dbus=1.13.18
-  - decorator=5.0.7
+  - dbus=1.13.6
+  - decorator=5.1.1
   - deeptools=3.5.1
   - deeptoolsintervals=0.1.9
-  - dnaio=0.5.0
-  - docutils=0.17.1
-  - execnet=1.8.0
-  - expat=2.3.0
-  - fastq-screen=0.14.0
+  - dnaio=0.9.1
+  - docutils=0.19
+  - dpath=2.0.6
+  - exceptiongroup=1.0.0
+  - execnet=1.9.0
+  - executing=1.1.1
+  - expat=2.5.0
+  - fastq-screen=0.15.2
   - fastqc=0.11.9
-  - filelock=3.0.12
+  - fftw=3.3.10
+  - filelock=3.8.0
   - font-ttf-dejavu-sans-mono=2.37
-  - fontconfig=2.13.1
-  - freetype=2.10.4
+  - font-ttf-inconsolata=3.000
+  - font-ttf-source-code-pro=2.038
+  - font-ttf-ubuntu=0.83
+  - fontconfig=2.14.1
+  - fonts-conda-ecosystem=1
+  - fonts-conda-forge=1
+  - fonttools=4.38.0
+  - freetype=2.12.1
   - fribidi=1.0.10
   - future=0.18.2
   - gat=1.3.6
-  - gcc_impl_linux-64=9.3.0
-  - gcc_linux-64=9.3.0
-  - gettext=0.21.0
-  - gffread=0.12.1
-  - gffutils=0.10.1
-  - gfortran_impl_linux-64=9.3.0
-  - gfortran_linux-64=9.3.0
+  - gcc_impl_linux-64=10.4.0
+  - gcc_linux-64=10.4.0
+  - gettext=0.21.1
+  - gffread=0.12.7
+  - gffutils=0.11.1
+  - gfortran_impl_linux-64=10.4.0
+  - gfortran_linux-64=10.4.0
   - giflib=5.2.1
-  - gitdb=4.0.7
-  - gitpython=3.1.15
-  - glib=2.68.1
-  - glib-tools=2.68.1
-  - google-api-core=1.26.2
-  - google-auth=1.29.0
-  - google-cloud-core=1.6.0
-  - google-cloud-storage=1.37.1
-  - google-crc32c=1.1.2
-  - google-resumable-media=1.2.0
-  - googleapis-common-protos=1.53.0
-  - graphite2=1.3.14
-  - gsl=2.6
-  - gst-plugins-base=1.18.4
-  - gstreamer=1.18.4
-  - gxx_impl_linux-64=9.3.0
-  - gxx_linux-64=9.3.0
-  - harfbuzz=2.8.0
-  - hdf5=1.10.6
+  - gitdb=4.0.9
+  - gitpython=3.1.29
+  - glib=2.74.1
+  - glib-tools=2.74.1
+  - graphite2=1.3.13
+  - gsl=2.7
+  - gst-plugins-base=1.18.5
+  - gstreamer=1.20.3
+  - gxx_impl_linux-64=10.4.0
+  - gxx_linux-64=10.4.0
+  - harfbuzz=4.2.0
+  - hdf5=1.12.1
   - hisat2=2.2.1
-  - htslib=1.12
-  - humanfriendly=9.1
-  - icu=68.1
-  - idna=2.10
-  - importlib-metadata=4.0.1
-  - importlib_metadata=4.0.1
+  - htslib=1.16
+  - humanfriendly=10.0
+  - icu=69.1
+  - idna=3.4
+  - importlib-metadata=4.11.4
+  - importlib_metadata=4.11.4
+  - importlib_resources=5.10.0
   - iniconfig=1.1.1
   - intervalstats=1.01
-  - ipython=7.22.0
-  - ipython_genutils=0.2.0
+  - ipython=8.6.0
   - isa-l=2.30.0
-  - isodate=0.6.0
-  - jedi=0.18.0
-  - jemalloc=5.2.1
-  - jinja2=2.11.3
-  - jmespath=0.10.0
-  - jpeg=9d
-  - jsonschema=3.2.0
-  - jupyter_core=4.7.1
-  - kallisto=0.46.2
+  - jack=1.9.18
+  - jedi=0.18.1
+  - jinja2=3.1.2
+  - jpeg=9e
+  - jsonschema=4.16.0
+  - jupyter_core=4.11.1
+  - kallisto=0.48.0
   - kernel-headers_linux-64=2.6.32
-  - kiwisolver=1.3.1
-  - krb5=1.17.2
-  - lcms2=2.12
-  - ld_impl_linux-64=2.35.1
+  - keyutils=1.6.1
+  - kiwisolver=1.4.4
+  - krb5=1.19.3
+  - lcms2=2.13.1
+  - ld_impl_linux-64=2.39
+  - lerc=4.0.0
   - libblas=3.9.0
+  - libbrotlicommon=1.0.9
+  - libbrotlidec=1.0.9
+  - libbrotlienc=1.0.9
+  - libcap=2.64
   - libcblas=3.9.0
-  - libclang=11.1.0
-  - libcrc32c=1.1.1
-  - libcurl=7.76.1
-  - libdeflate=1.7
-  - libedit=3.1.20210216
+  - libclang=13.0.1
+  - libcups=2.3.3
+  - libcurl=7.86.0
+  - libdb=6.2.32
+  - libdeflate=1.13
+  - libedit=3.1.20191231
   - libev=4.33
   - libevent=2.1.10
-  - libffi=3.3
-  - libgcc-devel_linux-64=9.3.0
-  - libgcc-ng=9.3.0
-  - libgd=2.3.2
-  - libgfortran-ng=9.3.0
-  - libgfortran5=9.3.0
-  - libglib=2.68.1
-  - libgomp=9.3.0
-  - libiconv=1.16
+  - libffi=3.4.2
+  - libflac=1.3.4
+  - libgcc-devel_linux-64=10.4.0
+  - libgcc-ng=12.2.0
+  - libgd=2.3.3
+  - libgfortran-ng=12.2.0
+  - libgfortran5=12.2.0
+  - libglib=2.74.1
+  - libgomp=12.2.0
+  - libiconv=1.17
+  - libjemalloc=5.2.1
   - liblapack=3.9.0
-  - libllvm11=11.1.0
-  - libnghttp2=1.43.0
-  - libopenblas=0.3.13
-  - libpng=1.6.37
-  - libpq=13.2
-  - libprotobuf=3.15.8
-  - libssh2=1.9.0
-  - libstdcxx-devel_linux-64=9.3.0
-  - libstdcxx-ng=9.3.0
-  - libtiff=4.2.0
+  - liblapacke=3.9.0
+  - libllvm13=13.0.1
+  - libnghttp2=1.47.0
+  - libnsl=2.0.0
+  - libogg=1.3.4
+  - libopenblas=0.3.21
+  - libopus=1.3.1
+  - libpng=1.6.38
+  - libpq=14.5
+  - libsanitizer=10.4.0
+  - libsndfile=1.0.31
+  - libsqlite=3.39.4
+  - libssh2=1.10.0
+  - libstdcxx-devel_linux-64=10.4.0
+  - libstdcxx-ng=12.2.0
+  - libtiff=4.4.0
+  - libtool=2.4.6
+  - libudev1=251
   - libuuid=2.32.1
-  - libwebp=1.2.0
-  - libwebp-base=1.2.0
-  - libxcb=1.14
+  - libvorbis=1.3.7
+  - libwebp=1.2.4
+  - libwebp-base=1.2.4
+  - libxcb=1.13
   - libxkbcommon=1.0.3
-  - libxml2=2.9.10
-  - llvm-openmp=11.1.0
-  - lz4-c=1.9.3
+  - libxml2=2.9.12
+  - libzlib=1.2.13
   - lzo=2.10
   - lzstring=1.0.4
   - make=4.3
-  - markdown=3.3.4
-  - markupsafe=1.1.1
-  - matplotlib=3.4.1
-  - matplotlib-base=3.4.1
-  - mkl=2020.4
-  - more-itertools=8.7.0
-  - msrest=0.6.21
-  - multidict=5.1.0
-  - multiqc=1.10.1
-  - mysql-common=8.0.23
+  - markdown=3.4.1
+  - markupsafe=2.1.1
+  - matplotlib=3.6.0
+  - matplotlib-base=3.6.0
+  - matplotlib-inline=0.1.6
+  - multiqc=1.13
+  - munkres=1.1.4
+  - mysql-common=8.0.31
   - mysql-connector-c=6.1.11
-  - mysql-libs=8.0.23
-  - nbformat=5.1.3
-  - ncbi-ngs-sdk=2.11.0
-  - ncurses=6.2
-  - networkx=2.5
-  - nspr=4.30
-  - nss=3.64
-  - numpy=1.20.2
-  - oauthlib=3.1.0
-  - olefile=0.46
-  - openblas=0.3.13
-  - openjdk=11.0.9.1
-  - openssl=1.1.1k
-  - packaging=20.9
-  - pandas=1.2.4
-  - pandoc=2.12
-  - pango=1.48.4
-  - parso=0.8.2
-  - patsy=0.5.1
-  - pcre=8.44
-  - pcre2=10.36
-  - perl=5.26.2
-  - perl-app-cpanminus=1.7044
-  - perl-business-isbn=3.004
-  - perl-business-isbn-data=20140910.003
-  - perl-carp=1.38
-  - perl-constant=1.33
-  - perl-data-dumper=2.173
-  - perl-encode=2.88
-  - perl-exporter=5.72
-  - perl-extutils-makemaker=7.36
-  - perl-file-path=2.16
-  - perl-file-temp=0.2304
-  - perl-gd=2.68
+  - mysql-libs=8.0.31
+  - nbformat=5.7.0
+  - ncurses=6.3
+  - networkx=2.8.7
+  - nspr=4.32
+  - nss=3.78
+  - numpy=1.23.4
+  - openjdk=11.0.1
+  - openjpeg=2.5.0
+  - openssl=1.1.1q
+  - packaging=21.3
+  - pandas=1.5.1
+  - pandoc=2.19.2
+  - pango=1.50.7
+  - parso=0.8.3
+  - patsy=0.5.3
+  - pbzip2=1.1.13
+  - pcre2=10.37
+  - perl=5.32.1
+  - perl-gd=2.76
   - perl-gdgraph=1.54
   - perl-gdtextutil=0.86
-  - perl-mime-base64=3.15
-  - perl-parent=0.236
-  - perl-uri=1.76
-  - perl-xml-libxml=2.0132
-  - perl-xml-namespacesupport=1.12
-  - perl-xml-sax=1.02
-  - perl-xml-sax-base=1.09
-  - perl-xsloader=0.24
   - pexpect=4.8.0
-  - picard=2.25.2
+  - picard=2.27.4
   - pickleshare=0.7.5
   - pigz=2.6
-  - pillow=8.2.0
-  - pip=21.0.1
+  - pillow=9.2.0
+  - pip=22.3
   - pixman=0.40.0
-  - plotly=4.14.3
-  - pluggy=0.13.1
-  - preseq=3.1.2
-  - prompt-toolkit=3.0.18
-  - protobuf=3.15.8
-  - psutil=5.8.0
+  - pkgutil-resolve-name=1.3.10
+  - plac=1.3.5
+  - plotly=5.11.0
+  - pluggy=1.0.0
+  - preseq=3.2.0
+  - prompt-toolkit=3.0.31
+  - psutil=5.9.3
+  - pthread-stubs=0.4
   - ptyprocess=0.7.0
-  - pulp=2.4
-  - py=1.10.0
+  - pulp=2.6.0
+  - pulseaudio=14.0
+  - pure_eval=0.2.2
   - py2bit=0.3.0
-  - pyasn1=0.4.8
-  - pyasn1-modules=0.2.8
-  - pybedtools=0.8.2
+  - pybedtools=0.9.0
   - pybigwig=0.3.18
-  - pycparser=2.20
-  - pyfaidx=0.5.9.5
-  - pygments=2.8.1
-  - pyjwt=2.0.1
-  - pyopenssl=20.0.1
-  - pyparsing=2.4.7
-  - pyqt=5.12.3
-  - pyqt-impl=5.12.3
-  - pyqt5-sip=4.19.18
-  - pyqtchart=5.12
-  - pyqtwebengine=5.12.1
-  - pyrsistent=0.17.3
-  - pysam=0.16.0.1
+  - pycparser=2.21
+  - pyfaidx=0.7.1
+  - pygments=2.13.0
+  - pyopenssl=22.1.0
+  - pyparsing=3.0.9
+  - pyqt=5.15.4
+  - pyqt5-sip=12.9.0
+  - pyrsistent=0.18.1
+  - pysam=0.19.1
   - pysocks=1.7.1
-  - pytest=6.2.3
-  - pytest-forked=1.3.0
-  - pytest-xdist=2.2.1
-  - python=3.9.4
-  - python-dateutil=2.8.1
-  - python-isal=0.10.0
-  - python-lzo=1.12
-  - python_abi=3.9
-  - pytz=2021.1
-  - pyyaml=5.4.1
-  - qt=5.12.9
-  - r-base=4.0.3
+  - pytest=7.2.0
+  - pytest-xdist=3.0.2
+  - python=3.10.6
+  - python-dateutil=2.8.2
+  - python-fastjsonschema=2.16.2
+  - python-isal=1.1.0
+  - python-lzo=1.14
+  - python_abi=3.10
+  - pytz=2022.5
+  - pyvcf3=1.0.3
+  - pyyaml=6.0
+  - qt-main=5.15.2
+  - r-base=4.1.3
   - ratelimiter=1.2.0
-  - readline=8.1
-  - requests=2.25.1
-  - requests-oauthlib=1.3.0
-  - retrying=1.3.3
-  - rich=10.1.0
-  - rsa=4.7.2
-  - rseqc=4.0.0
-  - s3transfer=0.4.2
-  - salmon=1.4.0
-  - samtools=1.12
-  - scipy=1.6.2
-  - seaborn=0.11.1
-  - seaborn-base=0.11.1
+  - readline=8.1.2
+  - requests=2.28.1
+  - reretry=0.11.1
+  - rich=12.6.0
+  - rich-click=1.5.2
+  - rseqc=5.0.1
+  - salmon=1.9.0
+  - samtools=1.16.1
+  - scipy=1.9.3
+  - seaborn=0.12.1
+  - seaborn-base=0.12.1
   - sed=4.8
-  - setuptools=52.0.0
-  - simplejson=3.17.2
-  - six=1.15.0
-  - smart_open=5.0.0
+  - setuptools=65.5.0
+  - simplejson=3.17.6
+  - sip=6.5.1
+  - six=1.16.0
+  - smart_open=6.2.0
   - smmap=3.0.5
-  - snakemake-minimal=6.2.1
+  - snakemake-minimal=7.17.1
   - spectra=0.0.11
-  - sqlite=3.35.5
-  - sra-tools=2.10.0
-  - star=2.7.8a
-  - statsmodels=0.12.2
+  - sqlite=3.39.4
+  - sra-tools=2.9.6
+  - stack_data=0.5.1
+  - star=2.7.10a
+  - statsmodels=0.13.2
   - stopit=1.1.2
   - subread=2.0.1
   - sysroot_linux-64=2.12
-  - tbb=2020.3
-  - tk=8.6.10
+  - tabulate=0.9.0
+  - tbb=2021.6.0
+  - tenacity=8.1.0
+  - tk=8.6.12
   - tktable=2.10
   - toml=0.10.2
-  - toposort=1.6
-  - tornado=6.1
+  - tomli=2.0.1
+  - toposort=1.7
+  - tornado=6.2
   - trackhub=0.2.4
-  - traitlets=5.0.5
-  - typing-extensions=3.7.4.3
-  - typing_extensions=3.7.4.3
-  - tzdata=2021a
+  - traitlets=5.5.0
+  - typing_extensions=4.4.0
+  - tzdata=2022f
   - ucsc-bedgraphtobigwig=377
   - ucsc-bedsort=377
   - ucsc-bedtobigbed=377
@@ -318,30 +312,27 @@ dependencies:
   - ucsc-oligomatch=377
   - ucsc-twobittofa=377
   - ucsc-wigtobigwig=377
-  - urllib3=1.26.4
+  - unicodedata2=15.0.0
+  - urllib3=1.26.11
   - wcwidth=0.2.5
-  - wheel=0.36.2
-  - wrapt=1.12.1
-  - xopen=1.1.0
-  - xorg-fixesproto=5.0
-  - xorg-inputproto=2.3.2
+  - wheel=0.37.1
+  - wrapt=1.14.1
+  - xopen=1.6.0
   - xorg-kbproto=1.0.7
   - xorg-libice=1.0.10
   - xorg-libsm=1.2.3
-  - xorg-libx11=1.6.12
+  - xorg-libx11=1.7.2
+  - xorg-libxau=1.0.9
+  - xorg-libxdmcp=1.1.3
   - xorg-libxext=1.3.4
-  - xorg-libxfixes=5.0.3
-  - xorg-libxi=1.7.10
   - xorg-libxrender=0.9.10
   - xorg-libxt=1.2.1
-  - xorg-libxtst=1.2.3
-  - xorg-recordproto=1.14.2
   - xorg-renderproto=0.11.1
   - xorg-xextproto=7.3.0
   - xorg-xproto=7.0.31
-  - xz=5.2.5
+  - xz=5.2.6
   - yaml=0.2.5
-  - yarl=1.5.1
-  - zipp=3.4.1
-  - zlib=1.2.11
-  - zstd=1.4.9
+  - yte=1.5.1
+  - zipp=3.10.0
+  - zlib=1.2.13
+  - zstd=1.5.2

From 1748d992f42e6e6230ea21ce59552b77783982dc Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 12 Nov 2022 09:07:00 -0500
Subject: [PATCH 12/91] update conda config; hash on env-r

---
 .github/workflows/main.yaml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 062fec00..5ce27779 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -13,7 +13,7 @@ jobs:
         uses: actions/cache@v1
         with:
           path: /opt/conda
-          key: ${{ hashFiles('env.yml') }}
+          key: ${{ hashFiles('env.yml') }}-${{ hashFiles('env-r.yml') }}
 
       - name: Rebuild cache
         if: steps.cache-conda.outputs.cache-hit != 'true'
@@ -21,6 +21,8 @@ jobs:
           conda config --add channels defaults
           conda config --add channels bioconda
           conda config --add channels conda-forge
+          conda config --set channel_priority strict
+
           conda install mamba -y
           mamba env create -n lcdb-wf-test --file env.yml
           mamba env create -n lcdb-wf-test-r --file env-r.yml

From 9daee34bf6d0128664191a7f44a9f9b357ef6c76 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 12 Nov 2022 09:09:03 -0500
Subject: [PATCH 13/91] update cache action to v3

---
 .github/workflows/main.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 5ce27779..eea6b2e9 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -10,7 +10,7 @@ jobs:
 
       - name: Cache conda env
         id: cache-conda
-        uses: actions/cache@v1
+        uses: actions/cache@v3
         with:
           path: /opt/conda
           key: ${{ hashFiles('env.yml') }}-${{ hashFiles('env-r.yml') }}

From 85b7951cdc73d4fc0cb09694bb141a732fd0fc12 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 12 Nov 2022 09:11:23 -0500
Subject: [PATCH 14/91] github actions fail fast

---
 .github/workflows/main.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index eea6b2e9..9d4581eb 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -3,6 +3,8 @@ jobs:
 
   build:
     runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
     container: continuumio/miniconda3
     steps:
 

From cd7e6b0b6967bcf97e4be7ceed80c0ad75f90b61 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 14:42:21 -0500
Subject: [PATCH 15/91] add gres=lscratch to clusterconfig and wrapper_slurm

This is because recent versions of Snakemake use tempdir, so everything
(including the main process) needs to use it as well.
---
 include/WRAPPER_SLURM                      |  1 +
 workflows/rnaseq/config/clusterconfig.yaml | 12 ++++++------
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/include/WRAPPER_SLURM b/include/WRAPPER_SLURM
index 548f6afb..bed1df6d 100755
--- a/include/WRAPPER_SLURM
+++ b/include/WRAPPER_SLURM
@@ -2,6 +2,7 @@
 #SBATCH --job-name="lcdb-wf"
 #SBATCH --partition="norm"
 #SBATCH --time=12:00:00
+#SBATHC --gres=lscratch:5
 
 # make logdir
 if [[ ! -e logs ]]; then mkdir -p logs; fi
diff --git a/workflows/rnaseq/config/clusterconfig.yaml b/workflows/rnaseq/config/clusterconfig.yaml
index f002fffd..e71837e1 100644
--- a/workflows/rnaseq/config/clusterconfig.yaml
+++ b/workflows/rnaseq/config/clusterconfig.yaml
@@ -20,16 +20,16 @@ collectrnaseqmetrics:
   prefix: "--gres=lscratch:20 --time=4:00:00 --mem=32g --partition=quick"
 
 salmon_index:
-  prefix: "--mem=32g"
+  prefix: "--gres=lscratch:20 --mem=32g"
 
 salmon:
-  prefix: "--mem=32g"
+  prefix: "--gres=lscratch:20 --mem=32g"
 
 kallisto_index:
-  prefix: "--mem=32g"
+  prefix: "--gres=lscratch:20 --mem=32g"
 
 kallisto:
-  prefix: "--mem=32g"
+  prefix: "--gres=lscratch:20 --mem=32g"
 
 bigwig_neg:
   prefix: "--gres=lscratch:20 --mem=16g"
@@ -38,7 +38,7 @@ bigwig_pos:
   prefix: "--gres=lscratch:20 --mem=16g"
 
 star:
-  prefix: "--time=8:00:00 --mem=64g"
+  prefix: "--gres=lscratch:20 --time=8:00:00 --mem=64g"
 
 star_index:
-  prefix: "--time=8:00:00 --mem=64g"
+  prefix: "--gres=lscratch:20 --time=8:00:00 --mem=64g"

From 1f4782461f9436717c9e5d8217a30e1c5ef31885 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 14:47:43 -0500
Subject: [PATCH 16/91] fix #368

---
 lib/common.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/common.py b/lib/common.py
index 24b7e95c..79d43187 100644
--- a/lib/common.py
+++ b/lib/common.py
@@ -629,6 +629,9 @@ def load_config(config, missing_references_ok=False):
     # Here we populate a list of reference sections. Items later on the list
     # will have higher priority
     includes = config.get('include_references', [])
+    for i in includes:
+        if not os.path.exists(i):
+            raise ValueError("include_references: '{}' does not exist".format(i))
     reference_sections = []
 
     # First the directories. Directories that come earlier lose to those that

From 172c4147a5f1c6040f1ecd34e49c4997b2309db3 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 15:01:40 -0500
Subject: [PATCH 17/91] fix #367

Detects SRA sampletables and raises exeception if "Layout" or "layout"
column not found.
---
 lib/common.py | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/lib/common.py b/lib/common.py
index 79d43187..829cc129 100644
--- a/lib/common.py
+++ b/lib/common.py
@@ -719,6 +719,21 @@ def is_paired_end(sampletable, sample):
     sample : str
         Assumed to be found in the first column of `sampletable`
     """
+    # We can't fall back to detecting PE based on two fastq files provided for
+    # each sample when it's an SRA sampletable (which only has SRR accessions).
+    #
+    # So detect first detect if SRA sampletable based on presence of "Run"
+    # column and all values of that column starting with "SRR", and then raise
+    # an error if the Layout column does not exist.
+
+    if "Run" in sampletable.columns:
+        if all(sampletable["Run"].str.startswith("SRR")):
+            if "Layout" not in sampletable.columns and "layout" not in sampletable.columns:
+                raise ValueError(
+                    "Sampletable appears to be SRA, but no 'Layout' column "
+                    "found. This is required to specify single- or paired-end "
+                    "libraries.")
+
     row = sampletable.set_index(sampletable.columns[0]).loc[sample]
     if 'orig_filename_R2' in row:
         return True

From 98f420a8d5db3d076a1fdda6cfaacb78a03f6d09 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 15:08:17 -0500
Subject: [PATCH 18/91] add .bai to patterns/targets for markduplicates; fix
 #351

This ensures it's always created, even if bigwigs are not created (which
otherwise cause them to enter the DAG)
---
 workflows/chipseq/config/chipseq_patterns.yaml | 1 +
 workflows/rnaseq/config/rnaseq_patterns.yaml   | 1 +
 2 files changed, 2 insertions(+)

diff --git a/workflows/chipseq/config/chipseq_patterns.yaml b/workflows/chipseq/config/chipseq_patterns.yaml
index c93562f2..84d59520 100644
--- a/workflows/chipseq/config/chipseq_patterns.yaml
+++ b/workflows/chipseq/config/chipseq_patterns.yaml
@@ -24,6 +24,7 @@ patterns_by_sample:
 
   markduplicates:
     bam: 'data/chipseq_samples/{sample}/{sample}.cutadapt.unique.nodups.bam'
+    bai: 'data/chipseq_samples/{sample}/{sample}.cutadapt.unique.nodups.bam.bai'
     metrics: 'data/chipseq_samples/{sample}/{sample}.cutadapt.unique.nodups.bam.metrics'
 
   merged_techreps: 'data/chipseq_merged/{label}/{label}.cutadapt.unique.nodups.merged.bam'
diff --git a/workflows/rnaseq/config/rnaseq_patterns.yaml b/workflows/rnaseq/config/rnaseq_patterns.yaml
index ecd95d7d..e7a6bdd1 100644
--- a/workflows/rnaseq/config/rnaseq_patterns.yaml
+++ b/workflows/rnaseq/config/rnaseq_patterns.yaml
@@ -25,6 +25,7 @@ rrna:
 multiqc: 'data/rnaseq_aggregation/multiqc.html'
 markduplicates:
    bam: 'data/rnaseq_samples/{sample}/{sample}.cutadapt.markdups.bam'
+   bai: 'data/rnaseq_samples/{sample}/{sample}.cutadapt.markdups.bam.bai'
    metrics: 'data/rnaseq_samples/{sample}/{sample}.cutadapt.markdups.bam.metrics'
 collectrnaseqmetrics:
    metrics: 'data/rnaseq_samples/{sample}/{sample}.collectrnaseqmetrics.metrics'

From 85be804a55a247c4c425afface048f955839c8f1 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 17:05:58 -0500
Subject: [PATCH 19/91] fix R tests

- use fully-qualified `:::` for accessing lcdbwf pkg functions
- fix function and argument names in tests
---
 lib/lcdbwf/DESCRIPTION                   |  2 +-
 lib/lcdbwf/R/loading.R                   |  2 +-
 lib/lcdbwf/tests/testthat/test-dds.R     |  6 +++---
 lib/lcdbwf/tests/testthat/test-helpers.R |  4 ++--
 lib/lcdbwf/tests/testthat/test-loading.R | 12 ++++++------
 5 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/lib/lcdbwf/DESCRIPTION b/lib/lcdbwf/DESCRIPTION
index d6781bb2..97dc6126 100644
--- a/lib/lcdbwf/DESCRIPTION
+++ b/lib/lcdbwf/DESCRIPTION
@@ -23,4 +23,4 @@ License: MIT
 Encoding: UTF-8
 LazyData: true
 Roxygen: list(markdown = TRUE)
-RoxygenNote: 7.1.1
+RoxygenNote: 7.2.1
diff --git a/lib/lcdbwf/R/loading.R b/lib/lcdbwf/R/loading.R
index 06422033..9ff0eae1 100644
--- a/lib/lcdbwf/R/loading.R
+++ b/lib/lcdbwf/R/loading.R
@@ -19,7 +19,7 @@
 #' Additional args are passed to DESeq2::DESeqDataSetFromMatrix.
 DESeqDataSetFromCombinedFeatureCounts <- function(filename, sampletable,
                                                 design,
-                                                sample_func=lcdbwf.samplename,
+                                                sample_func=lcdbwf_samplename,
                                                 subset_counts=FALSE, ...){
 
   # The sampletable may be data.frame or tibble; if it's a tibble then it
diff --git a/lib/lcdbwf/tests/testthat/test-dds.R b/lib/lcdbwf/tests/testthat/test-dds.R
index a9043b3b..64f2da7f 100644
--- a/lib/lcdbwf/tests/testthat/test-dds.R
+++ b/lib/lcdbwf/tests/testthat/test-dds.R
@@ -5,13 +5,13 @@ test_that("stripping gene versions", {
 
   rownames(dds) <- paste(rownames(dds), seq(1000), sep='.')
 
-  expect_error(lcdbwf::strip_dotted_version_from_dds(dds), "Gene names don't appear to be Ensembl")
+  expect_error(lcdbwf:::strip_dotted_version_from_dds(dds), "Gene names don't appear to be Ensembl")
 
-  forced <- lcdbwf::strip_dotted_version_from_dds(dds, force=TRUE)
+  forced <- lcdbwf:::strip_dotted_version_from_dds(dds, force=TRUE)
   expect_equal(rownames(forced)[1], "gene1")
 
   rownames(dds) <- paste0("ENS", rownames(dds), '.', seq(1000))
-  fixed <- lcdbwf::strip_dotted_version_from_dds(dds)
+  fixed <- lcdbwf:::strip_dotted_version_from_dds(dds)
   expect_equal(rownames(fixed)[1], "ENSgene1")
 
 })
diff --git a/lib/lcdbwf/tests/testthat/test-helpers.R b/lib/lcdbwf/tests/testthat/test-helpers.R
index 491fc605..9938cf8f 100644
--- a/lib/lcdbwf/tests/testthat/test-helpers.R
+++ b/lib/lcdbwf/tests/testthat/test-helpers.R
@@ -532,8 +532,8 @@ res <- new("DESeqResults", priorInfo = list(), rownames = c("FBgn0000061",
         lfcThreshold = 0))
 
 
-test_that("lcdbwf.samplename works", {
-  res <- lcdbwf.samplename("data/rnaseq_samples/sampleNNN.cutadapt.bam")
+test_that("lcdbwf_samplename works", {
+  res <- lcdbwf_samplename("data/rnaseq_samples/sampleNNN.cutadapt.bam")
   expect_equal(res, "sampleNNN")
 })
 
diff --git a/lib/lcdbwf/tests/testthat/test-loading.R b/lib/lcdbwf/tests/testthat/test-loading.R
index 762813c5..9611d676 100644
--- a/lib/lcdbwf/tests/testthat/test-loading.R
+++ b/lib/lcdbwf/tests/testthat/test-loading.R
@@ -5,7 +5,7 @@ sampletable <- data.frame(
 
 
 test_that("load from combined featurecounts", {
-    dds <- lcdbwf::DESeqDataSetFromCombinedFeatureCounts(
+    dds <- lcdbwf:::DESeqDataSetFromCombinedFeatureCounts(
         "featurecounts.txt",
         sampletable,
         design=~group
@@ -15,7 +15,7 @@ test_that("load from combined featurecounts", {
 
 test_that("load from combined featurecounts, subset sampletable, no subset.counts", {
   expect_error(
-    lcdbwf::DESeqDataSetFromCombinedFeatureCounts(
+    lcdbwf:::DESeqDataSetFromCombinedFeatureCounts(
       "featurecounts.txt",
       sampletable %>% dplyr::filter(samplename != "sample4"),
       design=~group),
@@ -27,10 +27,10 @@ test_that("load from combined featurecounts, subset sampletable, no subset.count
 })
 
 test_that("load from combined featurecounts, subset sampletable, with subset.counts", {
-    dds <- lcdbwf::DESeqDataSetFromCombinedFeatureCounts(
+    dds <- lcdbwf:::DESeqDataSetFromCombinedFeatureCounts(
         "featurecounts.txt",
         sampletable %>% dplyr::filter(samplename != "sample4"),
-        design=~group, subset.counts=TRUE)
+        design=~group, subset_counts=TRUE)
     expect_s4_class(dds, "DESeqDataSet")
 })
 
@@ -47,10 +47,10 @@ test_that("load from combined featurecounts, using custom func", {
         stringr::str_split(stringr::fixed('/'), simplify=TRUE)
     x[,1]
 }
-  dds <- lcdbwf::DESeqDataSetFromCombinedFeatureCounts(
+  dds <- lcdbwf:::DESeqDataSetFromCombinedFeatureCounts(
       "featurecounts.txt",
       sampletable2,
-      sample.func=custom.func,
+      sample_func=custom.func,
       design=~group)
 
     expect_s4_class(dds, "DESeqDataSet")

From 43d8d8e0d4f58f636d67e1a260a6ad6bc5b0e9be Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 17:42:44 -0500
Subject: [PATCH 20/91] add test settings to bam coverage args

---
 workflows/rnaseq/Snakefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/workflows/rnaseq/Snakefile b/workflows/rnaseq/Snakefile
index 29d5af4a..e086402d 100644
--- a/workflows/rnaseq/Snakefile
+++ b/workflows/rnaseq/Snakefile
@@ -921,7 +921,7 @@ rule rseqc_read_distribution:
 BAMCOVERAGE_ARGS = (
     '--minMappingQuality 20 '  # excludes multimappers
     '--smoothLength 10 '       # smooth signal with specified window
-    '--normalizeUsing BPM '    # equivalent to TPM
+    # '--normalizeUsing BPM '    # equivalent to TPM # [TEST SETTINGS]
 )
 
 rule bigwig_neg:

From ea937ac962dc64117782370d042b87e3149ac4cc Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 17:47:29 -0500
Subject: [PATCH 21/91] initial move to using the lcdb-wf-test script for CI

---
 .circleci/config.yml |   7 +-
 test/lcdb-wf-test    | 170 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 175 insertions(+), 2 deletions(-)
 create mode 100755 test/lcdb-wf-test

diff --git a/.circleci/config.yml b/.circleci/config.yml
index c5ab1074..4a67bf43 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -98,6 +98,8 @@ variables:
         cp workflows/colocalization/run_test.sh $DEPLOY/workflows/references
         cp workflows/colocalization/run_test.sh $DEPLOY/workflows/colocalization
         mkdir $DEPLOY/ci
+        mkdir $DEPLOY/test
+        cp test/lcdb-wf-test $DEPLOY/test
         cp ci/get-data.py $DEPLOY/ci
 
         # the ./run_test.sh scripts run this
@@ -105,7 +107,7 @@ variables:
 
         # download example data
         cd $DEPLOY
-        python ci/get-data.py
+        test/lcdb-wf-test --get-data --kinds all
 
   # --------------------------------------------------------------------------
   # Run the doctests across the included modules
@@ -137,7 +139,8 @@ variables:
         command: |
           cd $DEPLOY/workflows/rnaseq
           source activate lcdb-wf-test
-          ./run_test.sh --use-conda -n
+          $DEPLOY/test/lcdb-wf-test --rnaseq dryrun
+
   # --------------------------------------------------------------------------
   # Standard chipseq workflow
   chipseq-step: &chipseq-step
diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
new file mode 100755
index 00000000..18e4664a
--- /dev/null
+++ b/test/lcdb-wf-test
@@ -0,0 +1,170 @@
+#!/usr/bin/env python
+
+"""
+This script aims to make it more convenient to run various tests using
+different configs.
+"""
+import os
+import subprocess as sp
+import sys
+from pathlib import Path
+
+HERE = Path(__file__).resolve().parent
+TOPLEVEL = Path(__file__).resolve().parent.parent
+
+
+def get_data(kinds="all", branch="master", verbose=True):
+    """
+    Download the test data from the lcdb-test-data repo
+    """
+    URL = "https://github.com/lcdb/lcdb-test-data/blob/{0}/data/{{}}?raw=true".format(
+        branch
+    )
+    data_files = {
+        "rnaseq": [
+            (
+                "rnaseq_samples/sample1/sample1.small_R1.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample1.fq.gz",
+            ),
+            (
+                "rnaseq_samples/sample2/sample2.small_R1.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample2.fq.gz",
+            ),
+            (
+                "rnaseq_samples/sample3/sample3.small_R1.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample3.fq.gz",
+            ),
+            (
+                "rnaseq_samples/sample4/sample4.small_R1.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample4.fq.gz",
+            ),
+            (
+                "rnaseq_samples/sample1/sample1.small_R1.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample1PE_1.fq.gz",
+            ),
+            (
+                "rnaseq_samples/sample1/sample1.small_R2.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample1PE_2.fq.gz",
+            ),
+            (
+                "rnaseq_samples/sample2/sample2.small_R1.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample2PE_1.fq.gz",
+            ),
+            (
+                "rnaseq_samples/sample2/sample2.small_R2.fastq.gz",
+                "workflows/rnaseq/data/example_data/rnaseq_sample2PE_2.fq.gz",
+            ),
+        ],
+        "chipseq": [
+            (
+                "chipseq_samples/input_1/input_1.tiny_R1.fastq.gz",
+                "workflows/chipseq/data/example_data/chipseq_input1.fq.gz",
+            ),
+            (
+                "chipseq_samples/input_2/input_2.tiny_R1.fastq.gz",
+                "workflows/chipseq/data/example_data/chipseq_input2.fq.gz",
+            ),
+            (
+                "chipseq_samples/input_3/input_3.tiny_R1.fastq.gz",
+                "workflows/chipseq/data/example_data/chipseq_input3.fq.gz",
+            ),
+            (
+                "chipseq_samples/ip_1/ip_1.tiny_R1.fastq.gz",
+                "workflows/chipseq/data/example_data/chipseq_ip1.fq.gz",
+            ),
+            (
+                "chipseq_samples/ip_2/ip_2.tiny_R1.fastq.gz",
+                "workflows/chipseq/data/example_data/chipseq_ip2.fq.gz",
+            ),
+            (
+                "chipseq_samples/ip_3/ip_3.tiny_R1.fastq.gz",
+                "workflows/chipseq/data/example_data/chipseq_ip3.fq.gz",
+            ),
+            (
+                "chipseq_samples/ip_4/ip_4.tiny_R1.fastq.gz",
+                "workflows/chipseq/data/example_data/chipseq_ip4.fq.gz",
+            ),
+        ],
+    }
+    cwd = os.getcwd()
+    if str(cwd) != str(TOPLEVEL):
+        raise ValueError(f"cwd: {cwd}; Please run this from the top level of the repo")
+    if kinds == "all":
+        kinds = list(data_files.keys())
+    for kind in kinds:
+        for fn, dest in data_files[kind]:
+            url = URL.format(fn)
+            if verbose:
+                print(f"downloading {url}")
+            if dest is None:
+                dest = fn
+            dest = Path(dest)
+            dest.parent.mkdir(parents=True, exist_ok=True)
+            sp.run(f"wget -q -O- {url} > {dest}", shell=True, check=True)
+
+def run_pytest():
+    sp.run(["pytest", "--doctest-modules", "lib"], check=True)
+
+def run_url_check():
+    sys.path.insert(0, str(TOPLEVEL))
+    from lib.common import check_all_urls_found
+    check_all_urls_found()
+
+def r_package_check(env_r='./env-r'):
+    sp.run([f"{env_r}/bin/Rscript", "-e", "testthat::test('lib/lcdbwf', export_all=TRUE)"])
+
+def snakefile(directory, args=None):
+    sp.run(['bash', 'run_test.sh'] + args, cwd=TOPLEVEL / directory, check=True)
+
+
+if __name__ == "__main__":
+
+    import argparse
+
+    ap = argparse.ArgumentParser()
+    ap.add_argument(
+        "--get-data",
+        action="store_true",
+        help="Download example data. See --kinds argument for controlling this",
+    )
+    ap.add_argument(
+        "--kinds",
+        nargs="+",
+        default="all",
+        choices=["chipseq", "rnaseq", "all"],
+        help="Download data for which workflows?"
+    )
+
+
+    ap.add_argument('--env', default='./env', help="Specify main conda env. Default is %(default)s")
+    ap.add_argument('--env-r', default='./env-r', help="Specify R conda env. Default is %(default)s")
+    ap.add_argument('--pytest', action='store_true', help="Run pytest unit tests on lib directory")
+    ap.add_argument('--urls', action='store_true', help='Check all URLs found across config files')
+    ap.add_argument('--r-test', action='store_true', help='Run devtools::test on lcdbwf R package. Set R environment with --env-r.')
+    ap.add_argument('--rnaseq', choices=['dryrun', 'standard'])
+    ap.add_argument('--references', action='store_true')
+    ap.add_argument('--cpus', help='Number of cores to use when calling snakemake, default is %(default)s', default='2')
+    args = ap.parse_args()
+    if args.get_data:
+        get_data(kinds=args.kinds)
+
+    if args.pytest:
+        run_pytest()
+
+    if args.urls:
+        run_url_check()
+
+    if args.r_test:
+        r_package_check()
+
+    if args.rnaseq:
+        if args.rnaseq == 'dryrun':
+            snakefile('workflows/rnaseq', ['-n', '--use-conda'])
+
+        if args.rnaseq == 'standard':
+            snakefile('workflows/rnaseq', ['--use-conda', '-j', args.cpus, '-k', '-p', '-r'])
+            sp.run(['python', 'rnaseq_trackhub.py', 'config/config.yaml', 'config/hub_config.yaml'], check=True, cwd='workflows/rnaseq')
+
+    if args.references:
+        snakefile('workflows/references', ['--use-conda', '-j', args.cpus, '-k', '-p', '-r', '--configfile', 'config/config.yaml'])
+# vim: ft=python

From 0e239d6966e25e3a0f6e18c4e4f795e54df7065f Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 17:56:24 -0500
Subject: [PATCH 22/91] fix "kinds" arg

---
 test/lcdb-wf-test | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 18e4664a..2c6e3633 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -89,7 +89,7 @@ def get_data(kinds="all", branch="master", verbose=True):
     cwd = os.getcwd()
     if str(cwd) != str(TOPLEVEL):
         raise ValueError(f"cwd: {cwd}; Please run this from the top level of the repo")
-    if kinds == "all":
+    if "all" in kinds:
         kinds = list(data_files.keys())
     for kind in kinds:
         for fn, dest in data_files[kind]:

From ab28a1f6ce7c9b16f0a2a8c66ae8b9aeaf900fae Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov`>
Date: Sat, 19 Nov 2022 18:06:11 -0500
Subject: [PATCH 23/91] start v1.10 changelog

---
 docs/changelog.rst | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/docs/changelog.rst b/docs/changelog.rst
index e1fb489d..160bba54 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -1,5 +1,17 @@
 Changelog
 =========
+v1.10
+-----
+
+General
+~~~~~~~
+- Migrated to a unified testing script that simplifies local and CI testing
+- Added "--gres:lscratch" to all slurm-related params
+- If sampletable is from SRA, raise an error if a Layout column can't be found
+  (to prevent incorrect interpretation of samples as single-end)
+- Fix R tests
+- ensure bam indexes are made for the markdups bams, even if bigwigs are not created
+- fix library loads in rnaseq.Rmd to ensure they come before parallelization configuration
 
 v1.9
 ----

From 7d39e803f093f1ef61f064a07e979bea2edcab9c Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Tue, 22 Nov 2022 20:03:22 -0500
Subject: [PATCH 24/91] next round of porting all tests to test/lcdb-wf-test

---
 .circleci/config.yml                          |  95 +---
 ci/ensure_docs.py                             |   4 +
 test/lcdb-wf-test                             | 451 ++++++++++++------
 test/test_configs/star_1pass.tsv              |   3 +
 test/test_configs/star_2pass.tsv              |   3 +
 .../test_sra_sampletable_SE_only.tsv          |   6 +-
 test/test_configs/two_samples.tsv             |   4 +-
 test/workflow_test_params.yaml                |  61 +++
 workflows/rnaseq/run_downstream_test.sh       |   8 +
 9 files changed, 422 insertions(+), 213 deletions(-)
 mode change 100644 => 100755 ci/ensure_docs.py
 create mode 100644 test/test_configs/star_1pass.tsv
 create mode 100644 test/test_configs/star_2pass.tsv
 create mode 100644 test/workflow_test_params.yaml

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4a67bf43..b1a63dc1 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -107,7 +107,7 @@ variables:
 
         # download example data
         cd $DEPLOY
-        test/lcdb-wf-test --get-data --kinds all
+        test/lcdb-wf-test data --kinds=all --verbose
 
   # --------------------------------------------------------------------------
   # Run the doctests across the included modules
@@ -117,17 +117,17 @@ variables:
       command: |
         source activate lcdb-wf-test
 
-        # Ensure that the chunks in rnaseq.Rmd have matching documentation
-        (cd ci && python ensure_docs.py)
+        # run unit tests and doctests for the modules in lib
+        test/lcdb-wf-test unit_tests --pytest
 
-        pytest --doctest-modules lib
+        # Ensure that the chunks in rnaseq.Rmd have matching documentation
+        test/lcdb-wf-test unit_tests --ensure-docs
 
         # find all URLs in reference configs and make sure they exist
-        python -c 'from lib.common import check_all_urls_found; check_all_urls_found()'
+        test/lcdb-wf-test unit_tests --url-check
 
-        source deactivate
-        source activate lcdb-wf-test-r
-        Rscript -e "devtools::test('lib/lcdbwf')"
+        # run R package unit tests using the R env
+        test/lcdb-wf-test unit_tests --r-test --env-r lcdb-wf-test-r
 
 
   # --------------------------------------------------------------------------
@@ -137,7 +137,6 @@ variables:
       run:
         name: dry run
         command: |
-          cd $DEPLOY/workflows/rnaseq
           source activate lcdb-wf-test
           $DEPLOY/test/lcdb-wf-test --rnaseq dryrun
 
@@ -190,27 +189,29 @@ variables:
         command: |
           cd $DEPLOY/workflows/references
           source activate lcdb-wf-test
-          ./run_test.sh  --use-conda -j2 -k -p -r --configfile config/config.yaml
+          $DEPLOY/test/lcdb-wf-test --references
+
   # --------------------------------------------------------------------------
   # Standard RNA-seq workflow
   rnaseq-step: &rnaseq-step
       run:
         name: rnaseq workflow
         command: |
-          cd $DEPLOY/workflows/rnaseq
+          cd $DEPLOY
           source activate lcdb-wf-test
-          ./run_test.sh --use-conda -j2 -k -p -r
-          python rnaseq_trackhub.py config/config.yaml config/hub_config.yaml
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --use-conda -j2 -k -p -r
+
+          $DEPLOY/test/lcdb-wf-test rnaseq --trackhub
 
           # Starting in v1.6, we separate out the non-R from the
           # R environments. So we need to test the rnaseq.Rmd separately
           # outside the context of the Snakefile.
           source activate lcdb-wf-test-r
 
-          # This script runs the preprocessor on the Rmd files and stores them
+          # This run the preprocessor on the Rmd files and stores them
           # in a new download-test directory (see the comments in the script
           # for details)
-          bash run_downstream_test.sh
+         $DEPLOY/ test/lcdb-wf-test rnaseq --downstream
 
           # bundle up the entire directory to be used as an artifact
           tar -zcf downstream.tar.gz downstream-test/
@@ -224,63 +225,17 @@ variables:
         command: |
           ORIG=$(pwd)
           cd $DEPLOY
-          cp -r workflows/rnaseq workflows/rnaseq-misc-test
-
-          # make a copy of the data so we can get a fresh copy each time below
-          cp -r workflows/rnaseq/data /tmp/data
-          cd workflows/rnaseq-misc-test
           source activate lcdb-wf-test
 
-          echo "test SRA, PE"
-          rm -r data
-          ./run_test.sh -j 1 --use-conda -k -p -r --until cutadapt \
-            --configfile $ORIG/test/test_configs/test_rnaseq_config.yaml \
-            --config sampletable=$ORIG/test/test_configs/test_sra_sampletable.tsv
-
-          echo "test SRA, SE"
-          rm -r data
-          ./run_test.sh -j 1 --use-conda -k -p -r --until cutadapt \
-            --configfile $ORIG/test/test_configs/test_rnaseq_config.yaml \
-            --config sampletable=$ORIG/test/test_configs/test_sra_sampletable_SE_only.tsv
-
-          echo "test strandedness, PE"
-          rm -r data && cp -r /tmp/data data
-          ./run_test.sh -j 2 --use-conda -k -p -r --until strand_check \
-            --configfile $ORIG/test/test_configs/test_rnaseq_config.yaml \
-            --config sampletable=$ORIG/test/test_configs/test_pe_sampletable.tsv
-
-          echo "test strandedness, SE"
-          rm -r data && cp -r /tmp/data data
-          ./run_test.sh -j 2 --use-conda -k -p -r --until strand_check \
-            --configfile $ORIG/test/test_configs/test_rnaseq_config.yaml \
-            --config sampletable=$ORIG/test/test_configs/two_samples.tsv
-
-          echo "test STAR 2-pass alignment"
-          rm -r data && cp -r /tmp/data data
-          ./run_test.sh -j 2 --use-conda -k -p -r \
-            --forcerun star_pass1 \
-            --configfile \
-              $ORIG/test/test_configs/test_rnaseq_config.yaml \
-              $ORIG/test/test_configs/star_override_2pass.yaml \
-            --config sampletable=$ORIG/test/test_configs/two_samples.tsv \
-            --until star_pass2
-
-          echo "test STAR 1-pass alignment"
-          rm -r data && cp -r /tmp/data data
-          ./run_test.sh -j 2 --use-conda -k -p -r \
-            --forcerun star \
-            --configfile \
-              $ORIG/test/test_configs/test_rnaseq_config.yaml \
-              $ORIG/test/test_configs/star_override_1pass.yaml \
-            --config sampletable=$ORIG/test/test_configs/two_samples.tsv \
-            --until star
-
-          echo "test PE reads"
-          rm -r data && cp -r /tmp/data data
-          ./run_test.sh -j 2 --use-conda -k -p -r --until multiqc \
-            --configfile \
-              $ORIG/test/test_configs/test_rnaseq_config.yaml \
-            --config sampletable=$ORIG/test/test_configs/test_pe_sampletable.tsv
+          # Check the help for test/lcdb-wf-test to see what args these
+          # provide; some of them use the --until argument to restrict the
+          # rules that are run.
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --sra-pe          -k -r -p -j2 --use-conda
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --sra-se          -k -r -p -j2 --use-conda
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --strandedness-pe -k -r -p -j2 --use-conda
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --star-2pass      -k -r -p -j2 --use-conda
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --star-1pass      -k -r -p -j2 --use-conda
+
 
   # --------------------------------------------------------------------------
   # Standard colocalization workflow
diff --git a/ci/ensure_docs.py b/ci/ensure_docs.py
old mode 100644
new mode 100755
index cee62f6d..232d8fab
--- a/ci/ensure_docs.py
+++ b/ci/ensure_docs.py
@@ -96,3 +96,7 @@ def get_headings(rst, underline="-"):
     print("\n")
     print("\n".join(errors))
     sys.exit(1)
+
+else:
+    print("OK: found documentation for these identified chunks:")
+    print("- " + "\n- ".join(sorted(headings)))
diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 2c6e3633..3e04c7ba 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -3,168 +3,343 @@
 """
 This script aims to make it more convenient to run various tests using
 different configs.
+
+data: gets example data
+unit: runs unit tests (pytest, testthat, check urls, check docs)
+workflows: runs workflows and downstream tasks
+
+rnaseq:
+  standard:
+    desc: "Run main rnaseq workflow. Supply additional snakemake args."
+    command: "cd workflows/rnaseq && ./run_test.sh $SNAKEMAKE_ARGS"
+  trackhub:
+    desc: "Build the trackhub for rnaseq. Requires 'standard' to have been run"
+    command: "cd workflows/rnaseq && python rnaseq_trackhub.py config/config.yaml config/hub_config.yaml"
+
 """
 import os
+import shlex
 import subprocess as sp
 import sys
 from pathlib import Path
+import argparse
+import yaml
 
 HERE = Path(__file__).resolve().parent
 TOPLEVEL = Path(__file__).resolve().parent.parent
 
+WORKFLOW_ARGS = yaml.safe_load(open(TOPLEVEL / "test" / "workflow_test_params.yaml"))
+
 
-def get_data(kinds="all", branch="master", verbose=True):
+def print_header(name):
+    print("-" * 80)
+    print("lcdb-wf-test: ", name)
+    print("-" * 80)
+
+
+class Runner(object):
     """
-    Download the test data from the lcdb-test-data repo
+    To add a new command, create a new method with a name starting with
+    "_cmd_", create a new ArgumentParser.
     """
-    URL = "https://github.com/lcdb/lcdb-test-data/blob/{0}/data/{{}}?raw=true".format(
-        branch
+
+    global_parser = argparse.ArgumentParser(add_help=False)
+    global_parser.add_argument(
+        "--env", default=str(TOPLEVEL / "env"), help="Main conda environment to use"
+    )
+    global_parser.add_argument(
+        "--env-r",
+        default=str(TOPLEVEL / "env-r"),
+        help="Conda environment containing R to use",
+    )
+    global_parser.add_argument(
+        "--orig",
+        default=str(TOPLEVEL),
+        help=f"""If specified, you can use the special string '__ORIG__' in
+        command line arguments (for example, when specifying config files).
+        Mostly used in CI.""",
     )
-    data_files = {
-        "rnaseq": [
-            (
-                "rnaseq_samples/sample1/sample1.small_R1.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample1.fq.gz",
-            ),
-            (
-                "rnaseq_samples/sample2/sample2.small_R1.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample2.fq.gz",
-            ),
-            (
-                "rnaseq_samples/sample3/sample3.small_R1.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample3.fq.gz",
-            ),
-            (
-                "rnaseq_samples/sample4/sample4.small_R1.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample4.fq.gz",
-            ),
-            (
-                "rnaseq_samples/sample1/sample1.small_R1.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample1PE_1.fq.gz",
-            ),
-            (
-                "rnaseq_samples/sample1/sample1.small_R2.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample1PE_2.fq.gz",
-            ),
-            (
-                "rnaseq_samples/sample2/sample2.small_R1.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample2PE_1.fq.gz",
-            ),
-            (
-                "rnaseq_samples/sample2/sample2.small_R2.fastq.gz",
-                "workflows/rnaseq/data/example_data/rnaseq_sample2PE_2.fq.gz",
-            ),
-        ],
-        "chipseq": [
-            (
-                "chipseq_samples/input_1/input_1.tiny_R1.fastq.gz",
-                "workflows/chipseq/data/example_data/chipseq_input1.fq.gz",
-            ),
-            (
-                "chipseq_samples/input_2/input_2.tiny_R1.fastq.gz",
-                "workflows/chipseq/data/example_data/chipseq_input2.fq.gz",
-            ),
-            (
-                "chipseq_samples/input_3/input_3.tiny_R1.fastq.gz",
-                "workflows/chipseq/data/example_data/chipseq_input3.fq.gz",
-            ),
-            (
-                "chipseq_samples/ip_1/ip_1.tiny_R1.fastq.gz",
-                "workflows/chipseq/data/example_data/chipseq_ip1.fq.gz",
-            ),
-            (
-                "chipseq_samples/ip_2/ip_2.tiny_R1.fastq.gz",
-                "workflows/chipseq/data/example_data/chipseq_ip2.fq.gz",
-            ),
-            (
-                "chipseq_samples/ip_3/ip_3.tiny_R1.fastq.gz",
-                "workflows/chipseq/data/example_data/chipseq_ip3.fq.gz",
-            ),
-            (
-                "chipseq_samples/ip_4/ip_4.tiny_R1.fastq.gz",
-                "workflows/chipseq/data/example_data/chipseq_ip4.fq.gz",
-            ),
-        ],
-    }
-    cwd = os.getcwd()
-    if str(cwd) != str(TOPLEVEL):
-        raise ValueError(f"cwd: {cwd}; Please run this from the top level of the repo")
-    if "all" in kinds:
-        kinds = list(data_files.keys())
-    for kind in kinds:
-        for fn, dest in data_files[kind]:
-            url = URL.format(fn)
-            if verbose:
-                print(f"downloading {url}")
-            if dest is None:
-                dest = fn
-            dest = Path(dest)
-            dest.parent.mkdir(parents=True, exist_ok=True)
-            sp.run(f"wget -q -O- {url} > {dest}", shell=True, check=True)
-
-def run_pytest():
-    sp.run(["pytest", "--doctest-modules", "lib"], check=True)
-
-def run_url_check():
-    sys.path.insert(0, str(TOPLEVEL))
-    from lib.common import check_all_urls_found
-    check_all_urls_found()
-
-def r_package_check(env_r='./env-r'):
-    sp.run([f"{env_r}/bin/Rscript", "-e", "testthat::test('lib/lcdbwf', export_all=TRUE)"])
-
-def snakefile(directory, args=None):
-    sp.run(['bash', 'run_test.sh'] + args, cwd=TOPLEVEL / directory, check=True)
 
+    def __init__(self):
+        parser = argparse.ArgumentParser(
+            description="Test runner for lcdb-wf",
+            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+        )
 
-if __name__ == "__main__":
+        choices = [i.replace("_cmd_", "") for i in dir(self) if i.startswith("_cmd_")]
 
-    import argparse
+        parser.add_argument("command", help="Subcommand to run", choices=choices)
+        args = parser.parse_args(sys.argv[1:2])
+        if not hasattr(self, "_cmd_" + args.command):
+            print("Unrecognized command")
+            parser.print_help()
+            sys.exit(1)
+        getattr(self, "_cmd_" + args.command)()
 
-    ap = argparse.ArgumentParser()
-    ap.add_argument(
-        "--get-data",
-        action="store_true",
-        help="Download example data. See --kinds argument for controlling this",
-    )
-    ap.add_argument(
-        "--kinds",
-        nargs="+",
-        default="all",
-        choices=["chipseq", "rnaseq", "all"],
-        help="Download data for which workflows?"
-    )
+    def _cmd_data(self):
+        parser = argparse.ArgumentParser(
+            description="Download data",
+            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+            parents=[self.global_parser],
+        )
+
+        parser.add_argument(
+            "--kind",
+            default="all",
+            choices=["rnaseq", "chipseq"],
+            help="Kind of data to download",
+        )
+        parser.add_argument(
+            "--branch", default="main", help="Branch from lcdb-test-data to use"
+        )
+        parser.add_argument(
+            "--verbose",
+            action="store_true",
+            help="Be verbose about what's being downloaded",
+        )
 
+        args = parser.parse_args(sys.argv[2:])
 
-    ap.add_argument('--env', default='./env', help="Specify main conda env. Default is %(default)s")
-    ap.add_argument('--env-r', default='./env-r', help="Specify R conda env. Default is %(default)s")
-    ap.add_argument('--pytest', action='store_true', help="Run pytest unit tests on lib directory")
-    ap.add_argument('--urls', action='store_true', help='Check all URLs found across config files')
-    ap.add_argument('--r-test', action='store_true', help='Run devtools::test on lcdbwf R package. Set R environment with --env-r.')
-    ap.add_argument('--rnaseq', choices=['dryrun', 'standard'])
-    ap.add_argument('--references', action='store_true')
-    ap.add_argument('--cpus', help='Number of cores to use when calling snakemake, default is %(default)s', default='2')
-    args = ap.parse_args()
-    if args.get_data:
-        get_data(kinds=args.kinds)
+        repo = "lcdb-test-data"
+        URL = f"https://github.com/lcdb/{repo}/blob/{args.branch}/data/{{}}?raw=true"
 
-    if args.pytest:
-        run_pytest()
+        # This dict maps files in the `data` directory of the repo to a local
+        # path to which it should be downloaded.
+        data_files = {
+            "rnaseq": [
+                (
+                    "rnaseq_samples/sample1/sample1.small_R1.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample1.fq.gz",
+                ),
+                (
+                    "rnaseq_samples/sample2/sample2.small_R1.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample2.fq.gz",
+                ),
+                (
+                    "rnaseq_samples/sample3/sample3.small_R1.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample3.fq.gz",
+                ),
+                (
+                    "rnaseq_samples/sample4/sample4.small_R1.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample4.fq.gz",
+                ),
+                (
+                    "rnaseq_samples/sample1/sample1.small_R1.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample1PE_1.fq.gz",
+                ),
+                (
+                    "rnaseq_samples/sample1/sample1.small_R2.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample1PE_2.fq.gz",
+                ),
+                (
+                    "rnaseq_samples/sample2/sample2.small_R1.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample2PE_1.fq.gz",
+                ),
+                (
+                    "rnaseq_samples/sample2/sample2.small_R2.fastq.gz",
+                    "workflows/rnaseq/data/example_data/rnaseq_sample2PE_2.fq.gz",
+                ),
+            ],
+            "chipseq": [
+                (
+                    "chipseq_samples/input_1/input_1.tiny_R1.fastq.gz",
+                    "workflows/chipseq/data/example_data/chipseq_input1.fq.gz",
+                ),
+                (
+                    "chipseq_samples/input_2/input_2.tiny_R1.fastq.gz",
+                    "workflows/chipseq/data/example_data/chipseq_input2.fq.gz",
+                ),
+                (
+                    "chipseq_samples/input_3/input_3.tiny_R1.fastq.gz",
+                    "workflows/chipseq/data/example_data/chipseq_input3.fq.gz",
+                ),
+                (
+                    "chipseq_samples/ip_1/ip_1.tiny_R1.fastq.gz",
+                    "workflows/chipseq/data/example_data/chipseq_ip1.fq.gz",
+                ),
+                (
+                    "chipseq_samples/ip_2/ip_2.tiny_R1.fastq.gz",
+                    "workflows/chipseq/data/example_data/chipseq_ip2.fq.gz",
+                ),
+                (
+                    "chipseq_samples/ip_3/ip_3.tiny_R1.fastq.gz",
+                    "workflows/chipseq/data/example_data/chipseq_ip3.fq.gz",
+                ),
+                (
+                    "chipseq_samples/ip_4/ip_4.tiny_R1.fastq.gz",
+                    "workflows/chipseq/data/example_data/chipseq_ip4.fq.gz",
+                ),
+            ],
+        }
 
-    if args.urls:
-        run_url_check()
+        if args.kind == "all":
+            kinds = list(data_files.keys())
+        else:
+            kinds = [args.kind]
+        for kind in kinds:
+            for fn, dest in data_files[kind]:
+                url = URL.format(fn)
+                if args.verbose:
+                    print(f"downloading {url}")
+                if dest is None:
+                    dest = fn
+                dest = Path(dest)
+                dest.parent.mkdir(parents=True, exist_ok=True)
+                sp.run(
+                    f"wget -q -O- {url} > {dest}", shell=True, check=True, cwd=TOPLEVEL
+                )
 
-    if args.r_test:
-        r_package_check()
+    def _cmd_unit_tests(self):
+        parser = argparse.ArgumentParser(
+            description="Run various unit tests and checks",
+            parents=[self.global_parser],
+            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+        )
+        parser.add_argument(
+            "--pytest",
+            action="store_true",
+            help="Run pytest unit tests and module doctests on lib/ directory",
+        )
+        parser.add_argument(
+            "--url-check",
+            action="store_true",
+            help="Ensure that URLs in config files (e.g., to genome references) are still valid",
+        )
+        parser.add_argument(
+            "--r-test",
+            action="store_true",
+            help="Run devtools::test on the lcdbwf R package. Be sure to check --env-r.",
+        )
 
-    if args.rnaseq:
-        if args.rnaseq == 'dryrun':
-            snakefile('workflows/rnaseq', ['-n', '--use-conda'])
+        parser.add_argument(
+            "--ensure-docs",
+            action="store_true",
+            help="Ensure that all named R chunks are documented in the online help docs",
+        )
 
-        if args.rnaseq == 'standard':
-            snakefile('workflows/rnaseq', ['--use-conda', '-j', args.cpus, '-k', '-p', '-r'])
-            sp.run(['python', 'rnaseq_trackhub.py', 'config/config.yaml', 'config/hub_config.yaml'], check=True, cwd='workflows/rnaseq')
+        args = parser.parse_args(sys.argv[2:])
+
+        if args.pytest:
+            print_header("pytest")
+            sp.run(["pytest", "--doctest-modules", "lib"], check=True, cwd=TOPLEVEL)
+
+        if args.url_check:
+            print_header("url check")
+            sys.path.insert(0, str(TOPLEVEL))
+            from lib.common import check_all_urls_found
+
+            check_all_urls_found()
+
+        if args.r_test:
+            sp.run(
+                [
+                    f"{args.env_r}/bin/Rscript",
+                    "-e",
+                    "devtools::test('lib/lcdbwf', export_all=TRUE)",
+                ]
+            )
+
+        if args.ensure_docs:
+            sp.run(["./ensure_docs.py"], check=True, cwd=TOPLEVEL / "ci")
+
+    def _cmd_rnaseq(self):
+        parser = argparse.ArgumentParser(
+            description="Run rnaseq workflow and downstream tests",
+            parents=[self.global_parser],
+            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+        )
+        parser.add_argument(
+            "--run-workflow",
+            action="store_true",
+            help="""Run rnaseq workflow using the run_tesh.sh harness, which
+            edits the Snakefile to use test settings before running. Additional
+            args not specified here are passed to Snakemake, or use other flags
+            below to easily specify config sets.""",
+        )
+        parser.add_argument(
+            "--trackhub", action="store_true", help="Build the rnaseq track hub"
+        )
+        parser.add_argument(
+            "--downstream",
+            action="store_true",
+            help="""Run the downstream rnaseq.Rmd, via
+            workflows/rnaseq/run_downstream_test.sh. This runs the preprocessor
+            on the files to allow the use of # [TEST SETTINGS] comments; see
+            that script for detail.s Make sure --env-r is set correctly""",
+        )
+        group = parser.add_mutually_exclusive_group()
+        workflow_prefix = "bash run_test.sh"
+        workflow_dir = "workflow/rnaseq"
+        for key, val in WORKFLOW_ARGS["rnaseq"].items():
+            group.add_argument(
+                "--" + key,
+                action="store_const",
+                default="",
+                dest="additional_args",
+                const=val["args"],
+                help=f"""GROUP: Part of mutually exclusive rnaseq group. Runs the
+                following: cd {workflow_dir} && {workflow_prefix}
+                {val['args']}. See workflow_test_params.yaml for details.""",
+            )
+
+        args, extra = parser.parse_known_args(sys.argv[2:])
+
+        if args.run_workflow:
+            print(args)
+            if args.additional_args:
+                extra.extend(shlex.split(args.additional_args))
+
+            extra = [i.replace("__ORIG__", args.orig) for i in extra]
+            strargs = " ".join(extra)
+            print_header(f"Running workflows/rnaseq/run_test.sh with args: {strargs}")
+            sp.run(
+                shlex.split(workflow_prefix) + extra,
+                cwd=TOPLEVEL / "workflows/rnaseq",
+                check=True,
+            )
+        if args.trackhub:
+            print_header("running trackhub script")
+            sp.run(
+                [
+                    "python",
+                    "rnaseq_trackhub.py",
+                    "config/config.yaml",
+                    "config/hub_config.yaml",
+                ],
+                check=True,
+                cwd="workflows/rnaseq",
+            )
+            print("See workflows/rnaseq/staging for the built trackhub")
+
+        if args.downstream:
+            print_header("running downstream rnaseq.Rmd")
+            sp.run(
+                [
+                    "bash",
+                    "run_downstream_test.sh",
+                ],
+                env={"ENV_R": args.env_r, **os.environ},
+                cwd="workflows/rnaseq",
+            )
+
+
+if __name__ == "__main__":
+    Runner()
 
+if __name__ == "__mn__":
     if args.references:
-        snakefile('workflows/references', ['--use-conda', '-j', args.cpus, '-k', '-p', '-r', '--configfile', 'config/config.yaml'])
+        print_header("references")
+        snakefile(
+            "workflows/references",
+            snakemake_args=[
+                "--use-conda",
+                "-j",
+                args.cpus,
+                "-k",
+                "-p",
+                "-r",
+                "--configfile",
+                "config/config.yaml",
+            ],
+        )
 # vim: ft=python
diff --git a/test/test_configs/star_1pass.tsv b/test/test_configs/star_1pass.tsv
new file mode 100644
index 00000000..3c73275e
--- /dev/null
+++ b/test/test_configs/star_1pass.tsv
@@ -0,0 +1,3 @@
+samplename	group	layout	orig_filename
+sample1-star-1pass	control	SE	data/example_data/rnaseq_sample1PE_1.fq.gz
+sample2-star-1pass	control	SE	data/example_data/rnaseq_sample2.fq.gz
diff --git a/test/test_configs/star_2pass.tsv b/test/test_configs/star_2pass.tsv
new file mode 100644
index 00000000..8cf98eb0
--- /dev/null
+++ b/test/test_configs/star_2pass.tsv
@@ -0,0 +1,3 @@
+samplename	group	layout	orig_filename
+sample1-star-2pass	control	SE	data/example_data/rnaseq_sample1PE_1.fq.gz
+sample2-star-2pass	control	SE	data/example_data/rnaseq_sample2.fq.gz
diff --git a/test/test_configs/test_sra_sampletable_SE_only.tsv b/test/test_configs/test_sra_sampletable_SE_only.tsv
index 486e9396..6b403643 100644
--- a/test/test_configs/test_sra_sampletable_SE_only.tsv
+++ b/test/test_configs/test_sra_sampletable_SE_only.tsv
@@ -1,4 +1,4 @@
 samplename	Run	layout
-sra1	SRR948304	SINGLE
-sra2	SRR948304	SINGLE
-sra3	SRR948305	SINGLE
+sra4	SRR948304	SINGLE
+sra5	SRR948304	SINGLE
+sra6	SRR948305	SINGLE
diff --git a/test/test_configs/two_samples.tsv b/test/test_configs/two_samples.tsv
index 30886104..57ccb7d9 100644
--- a/test/test_configs/two_samples.tsv
+++ b/test/test_configs/two_samples.tsv
@@ -1,3 +1,3 @@
 samplename	group	layout	orig_filename
-sample1	control	SE	data/example_data/rnaseq_sample1PE_1.fq.gz
-sample2	control	SE	data/example_data/rnaseq_sample2.fq.gz
+sample1_of_2	control	SE	data/example_data/rnaseq_sample1PE_1.fq.gz
+sample2_of_2	control	SE	data/example_data/rnaseq_sample2.fq.gz
diff --git a/test/workflow_test_params.yaml b/test/workflow_test_params.yaml
new file mode 100644
index 00000000..f396f9d3
--- /dev/null
+++ b/test/workflow_test_params.yaml
@@ -0,0 +1,61 @@
+# NOTE:
+#
+# The "__ORIG__" placeholder is a mechanism for allowing the CI to run config
+# files from a full cloned repo within a deployed directory. The __ORIG__ will
+# be filled in with the lcdb-wf-test "--orig" argument, which defaults to the
+# top-level repo dir. 
+#
+# In other words, "__ORIG__/" will be replaced with the top-level dir unless
+# you specify --orig.
+#
+#
+# NOTE:
+# These arguments are pulled into the test/lcdb-wf-test runner script
+# automatically.
+
+rnaseq:
+  sra-pe:
+    args: |
+      --until cutadapt
+      --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
+      --config sampletable=__ORIG__/test/test_configs/test_sra_sampletable.tsv
+
+  sra-se:
+    args: |
+      --until cutadapt
+      --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
+      --config sampletable=__ORIG__/test/test_configs/test_sra_sampletable_SE_only.tsv
+
+  strandedness-pe:
+    args: |
+      --until strand_check
+      --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
+      --config sampletable=__ORIG__/test/test_configs/test_pe_sampletable.tsv
+
+  strandedness-se:
+    args: |
+      --until strand_check
+      --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
+      --config sampletable=__ORIG__/test/test_configs/two_samples.tsv
+
+  star-2pass:
+    args: |
+        --until star_pass2
+        --configfile
+        __ORIG__/test/test_configs/test_rnaseq_config.yaml
+        __ORIG__/test/test_configs/star_override_2pass.yaml
+        --config sampletable=__ORIG__/test/test_configs/star_2pass.tsv
+
+  star-1pass:
+    args: |
+        --until star
+        --configfile
+        __ORIG__/test/test_configs/test_rnaseq_config.yaml
+        __ORIG__/test/test_configs/star_override_1pass.yaml
+        --config sampletable=__ORIG__/test/test_configs/star_1pass.tsv
+
+pe:
+  args: |
+    --until multiqc
+    --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
+    --config sampletable=__ORIG__/test/test_configs/test_pe_sampletable.tsv
diff --git a/workflows/rnaseq/run_downstream_test.sh b/workflows/rnaseq/run_downstream_test.sh
index 6440d5a1..57ad932d 100755
--- a/workflows/rnaseq/run_downstream_test.sh
+++ b/workflows/rnaseq/run_downstream_test.sh
@@ -19,4 +19,12 @@ done
 cp downstream/config.yaml downstream-test/config.yaml
 cp downstream/text.yaml downstream-test/text.yaml
 
+if [ -z "$ENV_R" ]; then
+    echo Please set \$ENV_R to the conda env containing R and retry. Exiting.
+    exit 1
+fi
+
+eval "$(conda shell.bash hook)"
+conda activate $ENV_R
 Rscript -e "rmarkdown::render('downstream-test/rnaseq.Rmd')"
+conda deactivate

From 6f90e6739492f5cfde324504cac4661ce37c7da9 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Tue, 22 Nov 2022 20:51:47 -0500
Subject: [PATCH 25/91] fix ci config typo

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index b1a63dc1..f2b02c6d 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -211,7 +211,7 @@ variables:
           # This run the preprocessor on the Rmd files and stores them
           # in a new download-test directory (see the comments in the script
           # for details)
-         $DEPLOY/ test/lcdb-wf-test rnaseq --downstream
+          $DEPLOY/test/lcdb-wf-test rnaseq --downstream
 
           # bundle up the entire directory to be used as an artifact
           tar -zcf downstream.tar.gz downstream-test/

From ece7c1a62aa8108b4082c802a92dacb2dfc13956 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Tue, 22 Nov 2022 21:00:29 -0500
Subject: [PATCH 26/91] remove redundant libsizes rules

addresses #342
---
 workflows/chipseq/Snakefile | 56 -------------------------------------
 workflows/rnaseq/Snakefile  | 56 -------------------------------------
 2 files changed, 112 deletions(-)

diff --git a/workflows/chipseq/Snakefile b/workflows/chipseq/Snakefile
index 401448c6..532bceae 100644
--- a/workflows/chipseq/Snakefile
+++ b/workflows/chipseq/Snakefile
@@ -59,9 +59,7 @@ def wrapper_for(path):
 final_targets = utils.flatten((
     c.targets['bam'],
     utils.flatten(c.targets['fastqc']),
-    utils.flatten(c.targets['libsizes']),
     [c.targets['fastq_screen']],
-    [c.targets['libsizes_table']],
     [c.targets['multiqc']],
     utils.flatten(c.targets['markduplicates']),
     utils.flatten(c.targets['bigwig']),
@@ -320,62 +318,8 @@ rule fastq_screen:
         wrapper_for('fastq_screen/wrapper.py')
 
 
-rule libsizes_table:
-    """
-    Aggregate fastq and bam counts in to a single table
-    """
-    input:
-        utils.flatten(c.targets['libsizes'])
-    output:
-        json=c.patterns['libsizes_yaml'],
-        tsv=c.patterns['libsizes_table']
-    run:
-        def sample(f):
-            return os.path.basename(os.path.dirname(f))
-
-        def million(f):
-            return float(open(f).read()) / 1e6
-
-        def stage(f):
-            return os.path.basename(f).split('.', 1)[1].replace('.gz', '').replace('.count', '')
-
-        df = pd.DataFrame(dict(filename=list(map(str, input))))
-        df['sample'] = df.filename.apply(sample)
-        df['million'] = df.filename.apply(million)
-        df['stage'] = df.filename.apply(stage)
-        df = df.set_index('filename')
-        df = df.pivot('sample', columns='stage', values='million')
-
-        # make nicer column names
-        convert = {
-            'fastq.libsize': 'stage1_raw',
-            'cutadapt.fastq.libsize' : 'stage2_trimmed',
-            'cutadapt.bam.libsize': 'stage3_aligned',
-            'cutadapt.unique.bam.libsize': 'stage4_unique',
-            'cutadapt.unique.nodups.bam.libsize': 'stage5_nodups',
-        }
-
-        df.columns = [convert[i] for i in df.columns]
-
-        df.to_csv(output.tsv, sep='\t')
-        y = {
-            'id': 'libsizes_table',
-            'section_name': 'Library sizes',
-            'description': 'Library sizes at various stages of the pipeline',
-            'plot_type': 'table',
-            'pconfig': {
-                'id': 'libsizes_table_table',
-                'title': 'Library size table',
-                'min': 0
-            },
-            'data': yaml.load(df.transpose().to_json(), Loader=yaml.FullLoader),
-        }
-        with open(output.json, 'w') as fout:
-            yaml.dump(y, fout, default_flow_style=False)
-
 multiqc_inputs = [
     utils.flatten(c.targets['fastqc']) +
-    utils.flatten(c.targets['libsizes_yaml']) +
     utils.flatten(c.targets['cutadapt']) +
     utils.flatten(c.targets['bam']) +
     utils.flatten(c.targets['markduplicates']) +
diff --git a/workflows/rnaseq/Snakefile b/workflows/rnaseq/Snakefile
index e086402d..a41b28e9 100644
--- a/workflows/rnaseq/Snakefile
+++ b/workflows/rnaseq/Snakefile
@@ -51,9 +51,7 @@ def wrapper_for(path):
 # See "patterns and targets" in the documentation for what's going on here.
 final_targets = utils.flatten((
     utils.flatten(c.targets['fastqc']),
-    utils.flatten(c.targets['libsizes']),
     [c.targets['fastq_screen']],
-    [c.targets['libsizes_table']],
     [c.targets['rrna_percentages_table']],
     [c.targets['multiqc']],
     utils.flatten(c.targets['featurecounts']),
@@ -625,59 +623,6 @@ rule rrna_libsizes_table:
             yaml.dump(y, fout, default_flow_style=False)
 
 
-rule libsizes_table:
-    """
-    Aggregate fastq and bam counts in to a single table
-    """
-    input:
-        utils.flatten(c.targets['libsizes'])
-    output:
-        json=c.patterns['libsizes_yaml'],
-        tsv=c.patterns['libsizes_table']
-    run:
-        def sample(f):
-            return os.path.basename(os.path.dirname(f))
-
-        def million(f):
-            return float(open(f).read()) / 1e6
-
-        def stage(f):
-            return os.path.basename(f).split('.', 1)[1].replace('.gz', '').replace('.count', '')
-
-        df = pd.DataFrame(dict(filename=list(map(str, input))))
-        df['sample'] = df.filename.apply(sample)
-        df['million'] = df.filename.apply(million)
-        df['stage'] = df.filename.apply(stage)
-        df = df.set_index('filename')
-        df = df.pivot('sample', columns='stage', values='million')
-
-        # make nicer column names
-        convert = {
-            'fastq.libsize': 'stage1_raw',
-            'cutadapt.fastq.libsize' : 'stage2_trimmed',
-            'cutadapt.bam.libsize': 'stage3_aligned',
-        }
-
-        df.columns = [convert[i] for i in df.columns]
-
-        df.to_csv(output.tsv, sep='\t')
-        y = {
-            'id': 'libsizes_table',
-            'section_name': 'Library sizes',
-            'description': 'Library sizes at various stages of the pipeline',
-            'plot_type': 'table',
-            'pconfig': {
-                'id': 'libsizes_table_table',
-                'title': 'Library size table',
-                'min': 0
-            },
-            'data': yaml.load(df.transpose().to_json(), Loader=yaml.FullLoader),
-        }
-        with open(output.json, 'w') as fout:
-            yaml.dump(y, fout, default_flow_style=False)
-
-
-
 rule multiqc:
     """
     Aggregate various QC stats and logs into a single HTML report with MultiQC
@@ -687,7 +632,6 @@ rule multiqc:
     input:
         files=(
             utils.flatten(c.targets['fastqc']) +
-            utils.flatten(c.targets['libsizes_yaml']) +
             utils.flatten(c.targets['rrna_percentages_yaml']) +
             utils.flatten(c.targets['cutadapt']) +
             utils.flatten(c.targets['featurecounts']) +

From 33f2948d0fb3ad44e09b9ad7d8325bb62535831e Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Wed, 23 Nov 2022 10:14:19 -0500
Subject: [PATCH 27/91] default to correct branch

---
 test/lcdb-wf-test | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 3e04c7ba..188cd502 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -90,7 +90,7 @@ class Runner(object):
             help="Kind of data to download",
         )
         parser.add_argument(
-            "--branch", default="main", help="Branch from lcdb-test-data to use"
+            "--branch", default="master", help="Branch from lcdb-test-data to use"
         )
         parser.add_argument(
             "--verbose",

From fd56a35e4689a85db2a7fe7a0afe3be7e723f78e Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Wed, 23 Nov 2022 10:15:07 -0500
Subject: [PATCH 28/91] improve docs and help for testing script

---
 test/lcdb-wf-test              | 12 +++++++++---
 test/workflow_test_params.yaml | 26 ++++++++++++++++----------
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 188cd502..38c59b7b 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -203,12 +203,13 @@ class Runner(object):
         parser.add_argument(
             "--url-check",
             action="store_true",
-            help="Ensure that URLs in config files (e.g., to genome references) are still valid",
+            help="Ensure that URLs found in config files (e.g., to genome references) are still valid",
         )
         parser.add_argument(
             "--r-test",
             action="store_true",
-            help="Run devtools::test on the lcdbwf R package. Be sure to check --env-r.",
+            help="""Run devtools::test on the lcdbwf R package. Activates the
+            conda environment specified by --env-r just before running.""",
         )
 
         parser.add_argument(
@@ -243,6 +244,10 @@ class Runner(object):
             sp.run(["./ensure_docs.py"], check=True, cwd=TOPLEVEL / "ci")
 
     def _cmd_rnaseq(self):
+        """
+        This function handles the "rnaseq" subcommand.
+        """
+
         parser = argparse.ArgumentParser(
             description="Run rnaseq workflow and downstream tests",
             parents=[self.global_parser],
@@ -267,6 +272,7 @@ class Runner(object):
             on the files to allow the use of # [TEST SETTINGS] comments; see
             that script for detail.s Make sure --env-r is set correctly""",
         )
+
         group = parser.add_mutually_exclusive_group()
         workflow_prefix = "bash run_test.sh"
         workflow_dir = "workflow/rnaseq"
@@ -279,7 +285,7 @@ class Runner(object):
                 const=val["args"],
                 help=f"""GROUP: Part of mutually exclusive rnaseq group. Runs the
                 following: cd {workflow_dir} && {workflow_prefix}
-                {val['args']}. See workflow_test_params.yaml for details.""",
+                {val['args']}. {val['desc']} Configured in workflow_test_params.yaml.""",
             )
 
         args, extra = parser.parse_known_args(sys.argv[2:])
diff --git a/test/workflow_test_params.yaml b/test/workflow_test_params.yaml
index f396f9d3..f04cfe40 100644
--- a/test/workflow_test_params.yaml
+++ b/test/workflow_test_params.yaml
@@ -1,44 +1,48 @@
+# This file configures arguments for running various workflows that are  pulled
+# into the test/lcdb-wf-test runner script automatically. It is a way of 
+#
 # NOTE:
 #
 # The "__ORIG__" placeholder is a mechanism for allowing the CI to run config
-# files from a full cloned repo within a deployed directory. The __ORIG__ will
-# be filled in with the lcdb-wf-test "--orig" argument, which defaults to the
-# top-level repo dir. 
-#
-# In other words, "__ORIG__/" will be replaced with the top-level dir unless
-# you specify --orig.
+# files living in a full cloned repo, but within a (different) deployed
+# directory. The __ORIG__ indicates the full cloned repo and will be filled in
+# with the lcdb-wf-test "--orig" argument, which defaults to the top-level repo
+# dir.
 #
-#
-# NOTE:
-# These arguments are pulled into the test/lcdb-wf-test runner script
-# automatically.
+# For local testing, don't specify --orig and leave the default. This will
+# automatically fill in the top-level dir of the current repo.
 
 rnaseq:
   sra-pe:
+    desc: Tests paired-end data downloaded directly from SRA. Only run until the cutadapt rule.
     args: |
       --until cutadapt
       --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
       --config sampletable=__ORIG__/test/test_configs/test_sra_sampletable.tsv
 
   sra-se:
+    desc: Tests single-end data downloaded directly from SRA. Only run until the cutadapt rule.
     args: |
       --until cutadapt
       --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
       --config sampletable=__ORIG__/test/test_configs/test_sra_sampletable_SE_only.tsv
 
   strandedness-pe:
+    desc: Tests running the strandedness pre-check using paired-end data.
     args: |
       --until strand_check
       --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
       --config sampletable=__ORIG__/test/test_configs/test_pe_sampletable.tsv
 
   strandedness-se:
+    desc: Tests running the strandedness pre-check using single-ended data.
     args: |
       --until strand_check
       --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
       --config sampletable=__ORIG__/test/test_configs/two_samples.tsv
 
   star-2pass:
+    desc: Tests running STAR in 2-pass mode. Only runs until the star_pass2 rule.
     args: |
         --until star_pass2
         --configfile
@@ -47,6 +51,7 @@ rnaseq:
         --config sampletable=__ORIG__/test/test_configs/star_2pass.tsv
 
   star-1pass:
+    desc: Tests running STAR in 1-pass (default) mode. Only runs until the star rule.
     args: |
         --until star
         --configfile
@@ -55,6 +60,7 @@ rnaseq:
         --config sampletable=__ORIG__/test/test_configs/star_1pass.tsv
 
 pe:
+  desc: Tests paired-end data
   args: |
     --until multiqc
     --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml

From c6765a16e63cb98cfb1d33480c785e706b27b33c Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Wed, 23 Nov 2022 10:15:24 -0500
Subject: [PATCH 29/91] ensure configured env-r is activated before testing lib

---
 test/lcdb-wf-test | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 38c59b7b..2a96dd7b 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -232,12 +232,14 @@ class Runner(object):
             check_all_urls_found()
 
         if args.r_test:
+            print_header("R test")
             sp.run(
-                [
-                    f"{args.env_r}/bin/Rscript",
-                    "-e",
-                    "devtools::test('lib/lcdbwf', export_all=TRUE)",
-                ]
+                'eval "$(conda shell.bash hook)" '
+                f"&& conda activate {args.env_r} "
+                '''&& Rscript -e "devtools::test('lib/lcdbwf', export_all=TRUE)"''',
+                shell=True,
+                check=True,
+                executable="/bin/bash"
             )
 
         if args.ensure_docs:

From 0abaa4604e87010f415ef1af421d5c06bbb7faaf Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Wed, 23 Nov 2022 20:55:46 -0500
Subject: [PATCH 30/91] improvements to testing config and script

---
 .circleci/config.yml                    | 27 ++++++++------
 test/lcdb-wf-test                       | 47 +++++++++++++++----------
 workflows/rnaseq/run_downstream_test.sh |  8 -----
 3 files changed, 44 insertions(+), 38 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index f2b02c6d..b43f5828 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -50,6 +50,8 @@ variables:
           # x11-utils required to avoid R::png() segfaulting
           apt update && apt install -y locales-all locales x11-utils
           echo 'export DEPLOY=/tmp/lcdb-wf-test' >> $BASH_ENV
+          echo 'export LCDBWF_ENV=lcdb-wf-test' >> $BASH_ENV
+          echo 'export LCDBWF_ENV_R=lcdb-wf-test-r' >> $BASH_ENV
           echo 'export LC_ALL=en_US.utf8' >> $BASH_ENV
           echo 'export LANG=en_US.utf8' >> $BASH_ENV
           source $BASH_ENV
@@ -72,8 +74,8 @@ variables:
             conda config --system --add channels bioconda
             conda config --system --add channels conda-forge
             conda install mamba -y
-            mamba env create -n lcdb-wf-test --file env.yml
-            mamba env create -n lcdb-wf-test-r --file env-r.yml
+            mamba env create -n $LCDBWF_ENV --file env.yml
+            mamba env create -n $LCDBWF_ENV_R --file env-r.yml
         fi
 
   # --------------------------------------------------------------------------
@@ -127,7 +129,7 @@ variables:
         test/lcdb-wf-test unit_tests --url-check
 
         # run R package unit tests using the R env
-        test/lcdb-wf-test unit_tests --r-test --env-r lcdb-wf-test-r
+        test/lcdb-wf-test unit_tests --r-test
 
 
   # --------------------------------------------------------------------------
@@ -199,9 +201,9 @@ variables:
         command: |
           cd $DEPLOY
           source activate lcdb-wf-test
-          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --use-conda -j2 -k -p -r
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --use-conda -j2 -k -p -r --orig $ORIG
 
-          $DEPLOY/test/lcdb-wf-test rnaseq --trackhub
+          $DEPLOY/test/lcdb-wf-test rnaseq --trackhub --orig $ORIG
 
           # Starting in v1.6, we separate out the non-R from the
           # R environments. So we need to test the rnaseq.Rmd separately
@@ -229,12 +231,15 @@ variables:
 
           # Check the help for test/lcdb-wf-test to see what args these
           # provide; some of them use the --until argument to restrict the
-          # rules that are run.
-          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --sra-pe          -k -r -p -j2 --use-conda
-          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --sra-se          -k -r -p -j2 --use-conda
-          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --strandedness-pe -k -r -p -j2 --use-conda
-          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --star-2pass      -k -r -p -j2 --use-conda
-          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --star-1pass      -k -r -p -j2 --use-conda
+          # rules that are run. Note the use of --orig $ORIG to use the test
+          # configs from the original clone rather than the deployed directory.
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --sra-pe          -k -r -p -j2 --use-conda --orig $ORIG
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --sra-se          -k -r -p -j2 --use-conda --orig $ORIG
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --strandedness-pe -k -r -p -j2 --use-conda --orig $ORIG
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --star-2pass      -k -r -p -j2 --use-conda --orig $ORIG
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --star-1pass      -k -r -p -j2 --use-conda --orig $ORIG
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --pe              -k -r -p -j2 --use-conda --orig $ORIG
+
 
 
   # --------------------------------------------------------------------------
diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 2a96dd7b..fb7adf39 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -43,27 +43,32 @@ class Runner(object):
     "_cmd_", create a new ArgumentParser.
     """
 
+    default_env = os.getenv("LCDBWF_ENV", str(TOPLEVEL / "env"))
+    default_env_r = os.getenv("LCDBWF_ENV_R", str(TOPLEVEL / "env-r"))
     global_parser = argparse.ArgumentParser(add_help=False)
     global_parser.add_argument(
-        "--env", default=str(TOPLEVEL / "env"), help="Main conda environment to use"
+        "--env", default=default_env,
+        help=f"""Main conda environment to use. Override
+        by setting $LCDBWF_ENV or override that by explicity setting --env. Currently will use {default_env}"""
     )
     global_parser.add_argument(
         "--env-r",
-        default=str(TOPLEVEL / "env-r"),
-        help="Conda environment containing R to use",
+        default=default_env_r,
+        help=f"""Main R conda environment to use. Override by setting
+        $LCDBWF_ENV_R or override that by explicity setting --env-r. Currently
+        will use {default_env_r}"""
     )
     global_parser.add_argument(
         "--orig",
         default=str(TOPLEVEL),
         help=f"""If specified, you can use the special string '__ORIG__' in
-        command line arguments (for example, when specifying config files).
-        Mostly used in CI.""",
+        command line arguments which will be filled in with the value provided
+        here. Mostly used in CI.""",
     )
 
     def __init__(self):
         parser = argparse.ArgumentParser(
             description="Test runner for lcdb-wf",
-            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
         )
 
         choices = [i.replace("_cmd_", "") for i in dir(self) if i.startswith("_cmd_")]
@@ -79,7 +84,6 @@ class Runner(object):
     def _cmd_data(self):
         parser = argparse.ArgumentParser(
             description="Download data",
-            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
             parents=[self.global_parser],
         )
 
@@ -193,7 +197,6 @@ class Runner(object):
         parser = argparse.ArgumentParser(
             description="Run various unit tests and checks",
             parents=[self.global_parser],
-            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
         )
         parser.add_argument(
             "--pytest",
@@ -253,7 +256,6 @@ class Runner(object):
         parser = argparse.ArgumentParser(
             description="Run rnaseq workflow and downstream tests",
             parents=[self.global_parser],
-            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
         )
         parser.add_argument(
             "--run-workflow",
@@ -272,9 +274,15 @@ class Runner(object):
             help="""Run the downstream rnaseq.Rmd, via
             workflows/rnaseq/run_downstream_test.sh. This runs the preprocessor
             on the files to allow the use of # [TEST SETTINGS] comments; see
-            that script for detail.s Make sure --env-r is set correctly""",
+            that script for details. Activates environment configured in
+            --env-r before running.""",
         )
 
+        # Here we programmatically build the parser from the
+        # workflow_test_params.yaml file. They are added to
+        # a mutually-exclusive group to avoid overwriting each others' config
+        # file params. They all write their params to the args.additional_args
+        # attribute.
         group = parser.add_mutually_exclusive_group()
         workflow_prefix = "bash run_test.sh"
         workflow_dir = "workflow/rnaseq"
@@ -285,9 +293,10 @@ class Runner(object):
                 default="",
                 dest="additional_args",
                 const=val["args"],
-                help=f"""GROUP: Part of mutually exclusive rnaseq group. Runs the
-                following: cd {workflow_dir} && {workflow_prefix}
-                {val['args']}. {val['desc']} Configured in workflow_test_params.yaml.""",
+                help=f"""GROUP: Part of mutually exclusive rnaseq group. Runs
+                the following: cd {workflow_dir} && {workflow_prefix}
+                {val['args']}. {val['desc']} Configured in
+                workflow_test_params.yaml.""",
             )
 
         args, extra = parser.parse_known_args(sys.argv[2:])
@@ -322,12 +331,12 @@ class Runner(object):
         if args.downstream:
             print_header("running downstream rnaseq.Rmd")
             sp.run(
-                [
-                    "bash",
-                    "run_downstream_test.sh",
-                ],
-                env={"ENV_R": args.env_r, **os.environ},
-                cwd="workflows/rnaseq",
+                'eval "$(conda shell.bash hook)" '
+                f"&& conda activate {args.env_r} "
+                "&& (cd workflows/rnaseq && bash run_downstream_test.sh)",
+                shell=True,
+                check=True,
+                executable="/bin/bash"
             )
 
 
diff --git a/workflows/rnaseq/run_downstream_test.sh b/workflows/rnaseq/run_downstream_test.sh
index 57ad932d..ba0fa79b 100755
--- a/workflows/rnaseq/run_downstream_test.sh
+++ b/workflows/rnaseq/run_downstream_test.sh
@@ -18,13 +18,5 @@ done
 # Make sure we move the config file there too
 cp downstream/config.yaml downstream-test/config.yaml
 cp downstream/text.yaml downstream-test/text.yaml
-
-if [ -z "$ENV_R" ]; then
-    echo Please set \$ENV_R to the conda env containing R and retry. Exiting.
-    exit 1
-fi
-
-eval "$(conda shell.bash hook)"
-conda activate $ENV_R
 Rscript -e "rmarkdown::render('downstream-test/rnaseq.Rmd')"
 conda deactivate

From 6a5413bfc9753e8a7f528e354bc2c4604d563990 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Wed, 23 Nov 2022 21:13:19 -0500
Subject: [PATCH 31/91] minor tweaks to r tests

---
 lib/lcdbwf/R/loading.R                  | 3 +++
 workflows/rnaseq/run_downstream_test.sh | 1 -
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/lcdbwf/R/loading.R b/lib/lcdbwf/R/loading.R
index 9ff0eae1..68fcc818 100644
--- a/lib/lcdbwf/R/loading.R
+++ b/lib/lcdbwf/R/loading.R
@@ -22,6 +22,9 @@ DESeqDataSetFromCombinedFeatureCounts <- function(filename, sampletable,
                                                 sample_func=lcdbwf_samplename,
                                                 subset_counts=FALSE, ...){
 
+  if (is.null(subset_counts)){
+    subset_counts <- FALSE
+  }
   # The sampletable may be data.frame or tibble; if it's a tibble then it
   # likely doesn't have rownames. So in this function we assume that it's the
   # first column that contains the samplenames.
diff --git a/workflows/rnaseq/run_downstream_test.sh b/workflows/rnaseq/run_downstream_test.sh
index ba0fa79b..7544c5dd 100755
--- a/workflows/rnaseq/run_downstream_test.sh
+++ b/workflows/rnaseq/run_downstream_test.sh
@@ -19,4 +19,3 @@ done
 cp downstream/config.yaml downstream-test/config.yaml
 cp downstream/text.yaml downstream-test/text.yaml
 Rscript -e "rmarkdown::render('downstream-test/rnaseq.Rmd')"
-conda deactivate

From b088449135da4e7e02ec81d9be975066e5f70e75 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Wed, 23 Nov 2022 21:21:38 -0500
Subject: [PATCH 32/91] minor test fixes

---
 .circleci/config.yml |  9 ++++-----
 test/lcdb-wf-test    | 13 -------------
 2 files changed, 4 insertions(+), 18 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index b43f5828..e3ba5d12 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -48,7 +48,7 @@ variables:
         name: Set path
         command: |
           # x11-utils required to avoid R::png() segfaulting
-          apt update && apt install -y locales-all locales x11-utils
+          apt update && apt install -y locales-all locales rsync x11-utils
           echo 'export DEPLOY=/tmp/lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV=lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV_R=lcdb-wf-test-r' >> $BASH_ENV
@@ -62,10 +62,6 @@ variables:
       name: Setup conda
       command: |
         set -e
-        apt update
-        apt install -y locales-all locales
-        export LC_ALL=en_US.utf8
-        export LANG=en_US.utf8
         # We only do the installation if the conda environment does not already
         # exist.
         if ! conda env list | grep -q "lcdb-wf-test"; then
@@ -119,6 +115,9 @@ variables:
       command: |
         source activate lcdb-wf-test
 
+        echo LCDBWF_ENV_R=$LCDBWF_ENV_R
+        echo LCDBWF_ENV=$LCDBWF_ENV
+
         # run unit tests and doctests for the modules in lib
         test/lcdb-wf-test unit_tests --pytest
 
diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index fb7adf39..d841290f 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -3,19 +3,6 @@
 """
 This script aims to make it more convenient to run various tests using
 different configs.
-
-data: gets example data
-unit: runs unit tests (pytest, testthat, check urls, check docs)
-workflows: runs workflows and downstream tasks
-
-rnaseq:
-  standard:
-    desc: "Run main rnaseq workflow. Supply additional snakemake args."
-    command: "cd workflows/rnaseq && ./run_test.sh $SNAKEMAKE_ARGS"
-  trackhub:
-    desc: "Build the trackhub for rnaseq. Requires 'standard' to have been run"
-    command: "cd workflows/rnaseq && python rnaseq_trackhub.py config/config.yaml config/hub_config.yaml"
-
 """
 import os
 import shlex

From c1d0137d84199550b20e1fcee783108fad4f47a1 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Thu, 24 Nov 2022 09:00:26 -0500
Subject: [PATCH 33/91] run set-path on pytest ci job

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index e3ba5d12..84ed9342 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -299,6 +299,7 @@ jobs:
     steps:
       - checkout
       - *restore_cache
+      - *set-path
       - *setup
       - *pytest-step
 

From ab339b3405b6da7e92207f125b14b6c258489d69 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Thu, 24 Nov 2022 09:14:43 -0500
Subject: [PATCH 34/91] copy test config for ci

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 84ed9342..caec003b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -98,6 +98,7 @@ variables:
         mkdir $DEPLOY/ci
         mkdir $DEPLOY/test
         cp test/lcdb-wf-test $DEPLOY/test
+        cp test/workflow_test_params.yaml $DEPLOY/test
         cp ci/get-data.py $DEPLOY/ci
 
         # the ./run_test.sh scripts run this

From 0f774da8f9f47b1afe757772442454805f3d8ced Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Thu, 24 Nov 2022 09:36:48 -0500
Subject: [PATCH 35/91] typo in ci config

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index caec003b..587d25ff 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -106,7 +106,7 @@ variables:
 
         # download example data
         cd $DEPLOY
-        test/lcdb-wf-test data --kinds=all --verbose
+        test/lcdb-wf-test data --kind=all --verbose
 
   # --------------------------------------------------------------------------
   # Run the doctests across the included modules

From 62ed17b2fe1bb79b890b3cd7ade851a1354377ff Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Thu, 24 Nov 2022 09:49:44 -0500
Subject: [PATCH 36/91] allow --kind all

---
 test/lcdb-wf-test | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index d841290f..4a5c251d 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -77,7 +77,7 @@ class Runner(object):
         parser.add_argument(
             "--kind",
             default="all",
-            choices=["rnaseq", "chipseq"],
+            choices=["all", "rnaseq", "chipseq"],
             help="Kind of data to download",
         )
         parser.add_argument(

From cd8422eff5812d5cdaa820493d1dab5af5ba8357 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Thu, 24 Nov 2022 18:58:02 -0500
Subject: [PATCH 37/91] export $ORIG

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 587d25ff..9e045938 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -54,6 +54,7 @@ variables:
           echo 'export LCDBWF_ENV_R=lcdb-wf-test-r' >> $BASH_ENV
           echo 'export LC_ALL=en_US.utf8' >> $BASH_ENV
           echo 'export LANG=en_US.utf8' >> $BASH_ENV
+          echo 'export ORIG=$(pwd)' >> $BASH_ENV
           source $BASH_ENV
   # --------------------------------------------------------------------------
   # Set up conda if the environments do not already exist
@@ -160,7 +161,6 @@ variables:
       run:
         name: chipseq misc
         command: |
-          ORIG=$(pwd)
           cd $DEPLOY/workflows/chipseq
           source activate lcdb-wf-test
           ./run_test.sh --use-conda -j2 -k -p -r \

From 03c83dfafd2c493f3ba7551e9f7afa579361bf6b Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Thu, 24 Nov 2022 19:58:25 -0500
Subject: [PATCH 38/91] more test refactoring

---
 .circleci/config.yml           |  14 +--
 test/lcdb-wf-test              | 152 ++++++++++++++++++++++++++++-----
 test/workflow_test_params.yaml |  12 +--
 3 files changed, 139 insertions(+), 39 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9e045938..b6111153 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -133,16 +133,6 @@ variables:
         test/lcdb-wf-test unit_tests --r-test
 
 
-  # --------------------------------------------------------------------------
-  # Other downstream jobs depend on this so that we can catch trivial errors
-  # quickly
-  rnaseq-dryrun: &rnaseq-dryrun
-      run:
-        name: dry run
-        command: |
-          source activate lcdb-wf-test
-          $DEPLOY/test/lcdb-wf-test --rnaseq dryrun
-
   # --------------------------------------------------------------------------
   # Standard chipseq workflow
   chipseq-step: &chipseq-step
@@ -189,9 +179,8 @@ variables:
       run:
         name: references workflow
         command: |
-          cd $DEPLOY/workflows/references
           source activate lcdb-wf-test
-          $DEPLOY/test/lcdb-wf-test --references
+          $DEPLOY/test/lcdb-wf-test references --run-workflow --configfile=config/config.yaml -j2 -p -r -k --orig $ORIG
 
   # --------------------------------------------------------------------------
   # Standard RNA-seq workflow
@@ -201,6 +190,7 @@ variables:
         command: |
           cd $DEPLOY
           source activate lcdb-wf-test
+          $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow -n
           $DEPLOY/test/lcdb-wf-test rnaseq --run-workflow --use-conda -j2 -k -p -r --orig $ORIG
 
           $DEPLOY/test/lcdb-wf-test rnaseq --trackhub --orig $ORIG
diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 4a5c251d..dcc75a09 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -55,7 +55,60 @@ class Runner(object):
 
     def __init__(self):
         parser = argparse.ArgumentParser(
-            description="Test runner for lcdb-wf",
+            description="""
+            Test runner for lcdb-wf. There are many things to test; as a first pass use
+            these with appropriate Snakemake args (-n, -j, --use-conda, etc)
+
+                %(prog)s data --kind all
+                %(prog)s unit_tests --pytest
+                %(prog)s unit_tests --r-test
+                %(prog)s rnaseq --run-workflow
+                %(prog)s rnaseq --trackhub
+                %(prog)s rnaseq --downstream
+                %(prog)s chipseq --run-workflow
+                %(prog)s references --run-workflow --configfile=config/config.yaml
+
+            DATA
+            ----
+            %(prog)s data --kind all --verbose
+
+            UNIT TESTS
+            ----------
+            # Run the pytest unit tests on the lib/
+            %(prog)s unit_tests --pytest
+
+            # Run tests on lcdbwf R package
+            %(prog)s unit_tests --r-test
+
+            # Ensure URLs in the configs exist
+            %(prog)s unit_tests --url-check
+
+            # Ensure rnaseq.Rmd has matching sections in the docs
+            %(prog)s unit_tests --ensure-docs
+
+            RNASEQ
+            ------
+            # Run main workflow
+            %(prog)s rnaseq --run-workflow
+
+            # Build RNA-seq trackhub from output of main workflow
+            %(prog)s rnaseq --trackhub
+
+            # Run rnaseq.Rmd
+            %(prog)s rnaseq --downstream
+
+            # Each of these runs a restricted subset of the workflow with
+            # customized configs; they should be run one at a time.
+            %(prog)s rnaseq --run-workflow --sra-pe
+            %(prog)s rnaseq --run-workflow --sra-se
+            %(prog)s rnaseq --run-workflow --strandedness-pe
+            %(prog)s rnaseq --run-workflow --strandedness-se
+            %(prog)s rnaseq --run-workflow --star-2pass
+            %(prog)s rnaseq --run-workflow --star-1pass
+            %(prog)s rnaseq --run-workflow --pe
+
+            """,
+            formatter_class=argparse.RawDescriptionHelpFormatter
         )
 
         choices = [i.replace("_cmd_", "") for i in dir(self) if i.startswith("_cmd_")]
@@ -272,7 +325,7 @@ class Runner(object):
         # attribute.
         group = parser.add_mutually_exclusive_group()
         workflow_prefix = "bash run_test.sh"
-        workflow_dir = "workflow/rnaseq"
+        workflow_dir = TOPLEVEL / "workflows/rnaseq"
         for key, val in WORKFLOW_ARGS["rnaseq"].items():
             group.add_argument(
                 "--" + key,
@@ -295,11 +348,17 @@ class Runner(object):
 
             extra = [i.replace("__ORIG__", args.orig) for i in extra]
             strargs = " ".join(extra)
-            print_header(f"Running workflows/rnaseq/run_test.sh with args: {strargs}")
+            cmd = (
+                'eval "$(conda shell.bash hook)" '
+                f"&& conda activate {args.env} "
+                f"&& (cd {workflow_dir} && {workflow_prefix} {strargs})"
+            )
+            print_header(f"Running the following command:\n{cmd}")
             sp.run(
-                shlex.split(workflow_prefix) + extra,
-                cwd=TOPLEVEL / "workflows/rnaseq",
+                cmd,
                 check=True,
+                shell=True,
+                executable="/bin/bash"
             )
         if args.trackhub:
             print_header("running trackhub script")
@@ -326,24 +385,75 @@ class Runner(object):
                 executable="/bin/bash"
             )
 
+    def _cmd_chipseq(self):
+        """
+        This function handles the "chipseq" subcommand.
+        """
+
+        parser = argparse.ArgumentParser(
+            description="Run chipseq workflow",
+            parents=[self.global_parser],
+        )
+        parser.add_argument(
+            "--run-workflow",
+            action="store_true",
+            help="""Run chipseq workflow using the run_tesh.sh harness, which
+            edits the Snakefile to use test settings before running. Additional
+            args not specified here are passed to Snakemake, or use other flags
+            below to easily specify config sets.""",
+        )
+        args, extra = parser.parse_known_args(sys.argv[2:])
+        workflow_prefix = "bash run_test.sh"
+        workflow_dir = TOPLEVEL / "workflows/chipseq"
+        if args.run_workflow:
+            extra = [i.replace("__ORIG__", args.orig) for i in extra]
+            strargs = " ".join(extra)
+            cmd = (
+                'eval "$(conda shell.bash hook)" '
+                f"&& conda activate {args.env} "
+                f"&& (cd {workflow_dir} && {workflow_prefix} {strargs})"
+            )
+            print_header(f"Running the following command:\n{cmd}")
+            sp.run(
+                cmd,
+                shell=True,
+                check=True,
+                executable="/bin/bash"
+            )
+
+    def _cmd_references(self):
+        parser = argparse.ArgumentParser(
+            description="Run references workflow",
+            parents=[self.global_parser],
+        )
+        parser.add_argument(
+            "--run-workflow",
+            action="store_true",
+            help="""Run references workflow using the run_tesh.sh harness, which
+            edits the Snakefile to use test settings before running."""
+        )
+        args, extra = parser.parse_known_args(sys.argv[2:])
+
+        workflow_prefix = "bash run_test.sh"
+        workflow_dir = TOPLEVEL / "workflows/references"
+        if args.run_workflow:
+            extra = [i.replace("__ORIG__", args.orig) for i in extra]
+            strargs = " ".join(extra)
+            cmd = (
+                'eval "$(conda shell.bash hook)" '
+                f"&& conda activate {args.env} "
+                f"&& (cd {workflow_dir} && {workflow_prefix} {strargs})"
+            )
+            print_header(f"Running the following command:\n{cmd}")
+            sp.run(
+                cmd,
+                shell=True,
+                check=True,
+                executable="/bin/bash"
+            )
+
 
 if __name__ == "__main__":
     Runner()
 
-if __name__ == "__mn__":
-    if args.references:
-        print_header("references")
-        snakefile(
-            "workflows/references",
-            snakemake_args=[
-                "--use-conda",
-                "-j",
-                args.cpus,
-                "-k",
-                "-p",
-                "-r",
-                "--configfile",
-                "config/config.yaml",
-            ],
-        )
 # vim: ft=python
diff --git a/test/workflow_test_params.yaml b/test/workflow_test_params.yaml
index f04cfe40..70e57da6 100644
--- a/test/workflow_test_params.yaml
+++ b/test/workflow_test_params.yaml
@@ -59,9 +59,9 @@ rnaseq:
         __ORIG__/test/test_configs/star_override_1pass.yaml
         --config sampletable=__ORIG__/test/test_configs/star_1pass.tsv
 
-pe:
-  desc: Tests paired-end data
-  args: |
-    --until multiqc
-    --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
-    --config sampletable=__ORIG__/test/test_configs/test_pe_sampletable.tsv
+  pe:
+    desc: Tests paired-end data
+    args: |
+      --until multiqc
+      --configfile __ORIG__/test/test_configs/test_rnaseq_config.yaml
+      --config sampletable=__ORIG__/test/test_configs/test_pe_sampletable.tsv

From 7fb9b9b8af376f2af97aa795853d95a41672bd33 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 08:27:20 -0500
Subject: [PATCH 39/91] test infra updates

---
 .circleci/config.yml |  5 +++--
 test/lcdb-wf-test    | 39 +++++++++++++++++++++++++++++++--------
 2 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index b6111153..47d09373 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -141,8 +141,9 @@ variables:
         command: |
           cd $DEPLOY/workflows/chipseq
           source activate lcdb-wf-test
-          ./run_test.sh --use-conda -j2 -k -p -r
-          python chipseq_trackhub.py config/config.yaml config/hub_config.yaml
+          $DEPLOY/test/lcdb-wf-test chipseq --run-workflow --use-conda -j2 -k -p -r
+          $DEPLOY/test/lcdb-wf-test chipseq --trackhub
+
   # --------------------------------------------------------------------------
   # Previous versions had an error where chipseq peaks needed to be defined for
   # every caller. This does a (relatively) quick test to only run a single
diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index dcc75a09..9b14523d 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -361,16 +361,19 @@ class Runner(object):
                 executable="/bin/bash"
             )
         if args.trackhub:
-            print_header("running trackhub script")
+            cmd = (
+                'eval "$(conda shell.bash hook)" '
+                f"&& conda activate {args.env} "
+                f"&& (cd {workflow_dir} "
+                "&& python rnaseq_trackhub config/config.yaml config/hub_config.yaml)"
+            )
+            print_header(f"Building trackhub with command: {cmd}")
+
             sp.run(
-                [
-                    "python",
-                    "rnaseq_trackhub.py",
-                    "config/config.yaml",
-                    "config/hub_config.yaml",
-                ],
+                cmd,
+                shell=True,
                 check=True,
-                cwd="workflows/rnaseq",
+                executable="/bin/bash"
             )
             print("See workflows/rnaseq/staging for the built trackhub")
 
@@ -402,9 +405,13 @@ class Runner(object):
             args not specified here are passed to Snakemake, or use other flags
             below to easily specify config sets.""",
         )
+        parser.add_argument(
+            "--trackhub", action="store_true", help="Build the rnaseq track hub"
+        )
         args, extra = parser.parse_known_args(sys.argv[2:])
         workflow_prefix = "bash run_test.sh"
         workflow_dir = TOPLEVEL / "workflows/chipseq"
+
         if args.run_workflow:
             extra = [i.replace("__ORIG__", args.orig) for i in extra]
             strargs = " ".join(extra)
@@ -420,6 +427,22 @@ class Runner(object):
                 check=True,
                 executable="/bin/bash"
             )
+        if args.trackhub:
+            cmd = (
+                'eval "$(conda shell.bash hook)" '
+                f"&& conda activate {args.env} "
+                f"&& (cd {workflow_dir} "
+                "&& python chipseq_trackhub config/config.yaml config/hub_config.yaml)"
+            )
+            print_header(f"Building trackhub with command: {cmd}")
+
+            sp.run(
+                cmd,
+                shell=True,
+                check=True,
+                executable="/bin/bash"
+            )
+            print("See workflows/chipseq/staging for the built trackhub")
 
     def _cmd_references(self):
         parser = argparse.ArgumentParser(

From 32a42280888fe99e08e58d30a483004eb052214b Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 08:45:15 -0500
Subject: [PATCH 40/91] typo

---
 test/lcdb-wf-test | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/test/lcdb-wf-test b/test/lcdb-wf-test
index 9b14523d..375c921a 100755
--- a/test/lcdb-wf-test
+++ b/test/lcdb-wf-test
@@ -365,7 +365,7 @@ class Runner(object):
                 'eval "$(conda shell.bash hook)" '
                 f"&& conda activate {args.env} "
                 f"&& (cd {workflow_dir} "
-                "&& python rnaseq_trackhub config/config.yaml config/hub_config.yaml)"
+                "&& python rnaseq_trackhub.py config/config.yaml config/hub_config.yaml)"
             )
             print_header(f"Building trackhub with command: {cmd}")
 
@@ -432,7 +432,7 @@ class Runner(object):
                 'eval "$(conda shell.bash hook)" '
                 f"&& conda activate {args.env} "
                 f"&& (cd {workflow_dir} "
-                "&& python chipseq_trackhub config/config.yaml config/hub_config.yaml)"
+                "&& python chipseq_trackhub.py config/config.yaml config/hub_config.yaml)"
             )
             print_header(f"Building trackhub with command: {cmd}")
 

From 92b7fc05d11d8d50e5d25da41508e5272b0643ea Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 15:46:23 -0500
Subject: [PATCH 41/91] debug test

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 47d09373..32013571 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -63,6 +63,7 @@ variables:
       name: Setup conda
       command: |
         set -e
+        echo $LCDBWF_ENV
         # We only do the installation if the conda environment does not already
         # exist.
         if ! conda env list | grep -q "lcdb-wf-test"; then

From 8c39c3ff4fbdc34bd40946a05571882bb0261da9 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 15:49:45 -0500
Subject: [PATCH 42/91] debug test

---
 .circleci/config.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 32013571..4825981a 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -63,7 +63,6 @@ variables:
       name: Setup conda
       command: |
         set -e
-        echo $LCDBWF_ENV
         # We only do the installation if the conda environment does not already
         # exist.
         if ! conda env list | grep -q "lcdb-wf-test"; then
@@ -71,6 +70,8 @@ variables:
             conda config --system --add channels defaults
             conda config --system --add channels bioconda
             conda config --system --add channels conda-forge
+            echo "env: $LCDBWF_ENV"
+            echo "env-r: $LCDBWF_ENV_R"
             conda install mamba -y
             mamba env create -n $LCDBWF_ENV --file env.yml
             mamba env create -n $LCDBWF_ENV_R --file env-r.yml

From 82e0e96457fa2270473b79214901e4302c6cafe0 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 15:51:56 -0500
Subject: [PATCH 43/91] debug test

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4825981a..e9c9dfd2 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -63,6 +63,7 @@ variables:
       name: Setup conda
       command: |
         set -e
+        source $BASH_ENV
         # We only do the installation if the conda environment does not already
         # exist.
         if ! conda env list | grep -q "lcdb-wf-test"; then

From 3c32959fe4e4326a47570b7d2659feeca6712a1d Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 15:59:03 -0500
Subject: [PATCH 44/91] debug test

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index e9c9dfd2..e72a90f1 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -264,6 +264,7 @@ jobs:
     <<: *defaults
     steps:
       - checkout
+      - *set-path
 
       # Check the hashes of requirements files. If they match a cache, load it.
       # The cache is set up to be the entire miniconda installation, so that

From ea7558f885a76686778bb6cea5149d47cec9266f Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 16:28:06 -0500
Subject: [PATCH 45/91] debug test

---
 .circleci/config.yml | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index e72a90f1..2deb6683 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -49,6 +49,7 @@ variables:
         command: |
           # x11-utils required to avoid R::png() segfaulting
           apt update && apt install -y locales-all locales rsync x11-utils
+          conda install -y yaml
           echo 'export DEPLOY=/tmp/lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV=lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV_R=lcdb-wf-test-r' >> $BASH_ENV
@@ -71,9 +72,7 @@ variables:
             conda config --system --add channels defaults
             conda config --system --add channels bioconda
             conda config --system --add channels conda-forge
-            echo "env: $LCDBWF_ENV"
-            echo "env-r: $LCDBWF_ENV_R"
-            conda install mamba -y
+            conda install mamba yaml -y
             mamba env create -n $LCDBWF_ENV --file env.yml
             mamba env create -n $LCDBWF_ENV_R --file env-r.yml
         fi

From c836e91c6499c6a76521b5931141765f38ac5b89 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 16:46:15 -0500
Subject: [PATCH 46/91] debug test

---
 .circleci/config.yml | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 2deb6683..f2112515 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -198,11 +198,6 @@ variables:
 
           $DEPLOY/test/lcdb-wf-test rnaseq --trackhub --orig $ORIG
 
-          # Starting in v1.6, we separate out the non-R from the
-          # R environments. So we need to test the rnaseq.Rmd separately
-          # outside the context of the Snakefile.
-          source activate lcdb-wf-test-r
-
           # This run the preprocessor on the Rmd files and stores them
           # in a new download-test directory (see the comments in the script
           # for details)

From 04f01fab708699bb9ee5b8d86a4dc29ddfed6943 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 17:29:42 -0500
Subject: [PATCH 47/91] debug test

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index f2112515..d5d62086 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -204,7 +204,7 @@ variables:
           $DEPLOY/test/lcdb-wf-test rnaseq --downstream
 
           # bundle up the entire directory to be used as an artifact
-          tar -zcf downstream.tar.gz downstream-test/
+          tar -zcf downstream.tar.gz workflows/rnaseq/downstream-test/
 
   # --------------------------------------------------------------------------
   # Various tests on RNA-seq workflow that don't warrant the overhead of a new

From 54bf20e10be9539a90300f59150d402b130c133e Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Fri, 25 Nov 2022 21:39:24 -0500
Subject: [PATCH 48/91] typo in wrapper_slurm

---
 include/WRAPPER_SLURM | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/WRAPPER_SLURM b/include/WRAPPER_SLURM
index bed1df6d..09590f4b 100755
--- a/include/WRAPPER_SLURM
+++ b/include/WRAPPER_SLURM
@@ -2,7 +2,7 @@
 #SBATCH --job-name="lcdb-wf"
 #SBATCH --partition="norm"
 #SBATCH --time=12:00:00
-#SBATHC --gres=lscratch:5
+#SBATCH --gres=lscratch:5
 
 # make logdir
 if [[ ! -e logs ]]; then mkdir -p logs; fi

From c457320958cd49c03f5e5eaa10a88ae04c96062a Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sat, 26 Nov 2022 10:01:37 -0500
Subject: [PATCH 49/91] remove shell prefix setup

---
 workflows/rnaseq/Snakefile | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/workflows/rnaseq/Snakefile b/workflows/rnaseq/Snakefile
index a41b28e9..7b6e3d8a 100644
--- a/workflows/rnaseq/Snakefile
+++ b/workflows/rnaseq/Snakefile
@@ -23,11 +23,6 @@ config = common.load_config(config)
 
 include: '../references/Snakefile'
 
-shell.prefix(
-    'set -euo pipefail; export R_PROFILE_USER=; export TMPDIR={};'
-    .format(cluster_specific.tempdir_for_biowulf())
-)
-shell.executable('/bin/bash')
 
 # Verify configuration of config and sampletable files
 helpers.preflight(config)

From d539abf635b7e14bebe44b53dffd17c7d24ffcfc Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sat, 26 Nov 2022 10:03:07 -0500
Subject: [PATCH 50/91] add resources to rnaseq rules

---
 workflows/rnaseq/Snakefile | 142 ++++++++++++++++++++++++++++++++-----
 1 file changed, 123 insertions(+), 19 deletions(-)

diff --git a/workflows/rnaseq/Snakefile b/workflows/rnaseq/Snakefile
index 7b6e3d8a..cbef1644 100644
--- a/workflows/rnaseq/Snakefile
+++ b/workflows/rnaseq/Snakefile
@@ -23,6 +23,13 @@ config = common.load_config(config)
 
 include: '../references/Snakefile'
 
+def autobump(value):
+    """
+    Increments value for each attempt.
+    """
+    def f(wildcards, attempt):
+        return attempt * value
+    return f
 
 # Verify configuration of config and sampletable files
 helpers.preflight(config)
@@ -77,7 +84,7 @@ rule targets:
 
 if 'orig_filename' in c.sampletable.columns:
 
-    localrules: symlinks
+    localrules: symlinks, symlink_targets
 
     # Convert the sampletable to be indexed by the first column, for
     # convenience in generating the input/output filenames.
@@ -101,6 +108,10 @@ if 'orig_filename' in c.sampletable.columns:
             orig_for_sample
         output:
             render_r1_r2(c.patterns['fastq'])
+        threads: 1
+        resources:
+            mem_mb=100,
+            runtime=10,
         run:
             assert len(output) == len(input), (input, output)
             for src, linkname in zip(input, output):
@@ -126,6 +137,9 @@ if 'Run' in c.sampletable.columns and sum(c.sampletable['Run'].str.startswith('S
             is_paired=c.is_paired,
             sampletable=_st,
             # limit = 100000, # [TEST SETTINGS]
+        resources:
+            mem_mb=1024,
+            runtime=autobump(120)
         conda:
             '../../wrappers/wrappers/fastq-dump/environment.yaml'
         script:
@@ -147,6 +161,9 @@ rule sample_strand_check:
     log:
         c.patterns['strand_check']['tsv'] + '.log'
     threads: 6
+    resources:
+        mem_mb=1024 * 8,
+        runtime=autobump(120)
     run:
         prefix = aligners.prefix_from_bowtie2_index(input.index)
         nreads = int(config['strand_check_reads']) * 4
@@ -183,6 +200,9 @@ rule strand_check:
         filelist=temporary('strand_check/filelist')
     log:
         'strand_check/strandedness.log'
+    resources:
+        mem_mb=1024 * 1,
+        runtime=autobump(120)
     run:
         with open(output.filelist, 'w') as fout:
             for i in  input:
@@ -207,6 +227,9 @@ rule cutadapt:
     log:
         render_r1_r2(c.patterns['cutadapt'])[0] + '.log'
     threads: 6
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     run:
 
         # NOTE: Change cutadapt params here
@@ -248,6 +271,9 @@ rule fastqc:
     output:
         html='{sample_dir}/{sample}/fastqc/{sample}{suffix}_fastqc.html',
         zip='{sample_dir}/{sample}/fastqc/{sample}{suffix}_fastqc.zip',
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     script:
         wrapper_for('fastqc/wrapper.py')
 
@@ -265,6 +291,9 @@ if config['aligner']['index'] == 'hisat2':
         log:
             c.patterns['bam'] + '.log'
         threads: 6
+        resources:
+            mem_mb=1024 * 32,
+            runtime=autobump(120)
         run:
             prefix = aligners.prefix_from_bowtie2_index(input.index)
             sam = output.bam.replace('.bam', '.sam')
@@ -337,6 +366,9 @@ if config['aligner']['index'] == 'star':
         log:
             c.patterns['bam'].replace('.bam', '.star.bam.log')
         threads: 16
+        resources:
+            mem_mb=1024 * 64,
+            runtime=autobump(120)
         run:
             genomedir = os.path.dirname(input.index[0])
             outdir = os.path.dirname(output[0])
@@ -369,6 +401,9 @@ if config['aligner']['index'] == 'star-twopass':
         log:
             c.patterns['bam'].replace('.bam', '.star-pass1.bam.log')
         threads: 16
+        resources:
+            mem_mb=1024 * 64,
+            runtime=autobump(120)
         run:
             genomedir = os.path.dirname(input.index[0])
             outdir = os.path.dirname(output[0])
@@ -406,6 +441,9 @@ if config['aligner']['index'] == 'star-twopass':
         log:
             c.patterns['bam'].replace('.bam', '.star-pass2.bam.log')
         threads: 16
+        resources:
+            mem_mb=1024 * 64,
+            runtime=autobump(120)
         run:
             genomedir = os.path.dirname(input.index[0])
             outdir = os.path.dirname(output[0])
@@ -444,6 +482,9 @@ rule rRNA:
     log:
         c.patterns['rrna']['bam'] + '.log'
     threads: 6
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     run:
         prefix = aligners.prefix_from_bowtie2_index(input.index)
         sam = output.bam.replace('.bam', '.sam')
@@ -474,6 +515,10 @@ rule fastq_count:
         fastq='{sample_dir}/{sample}/{sample}{suffix}.fastq.gz'
     output:
         '{sample_dir}/{sample}/{sample}{suffix}.fastq.gz.libsize'
+    threads: 1
+    resources:
+        mem_mb=1024 * 1,
+        runtime=autobump(120)
     shell:
         'zcat {input} | echo $((`wc -l`/4)) > {output}'
 
@@ -486,6 +531,10 @@ rule bam_count:
         bam='{sample_dir}/{sample}/{suffix}.bam'
     output:
         '{sample_dir}/{sample}/{suffix}.bam.libsize'
+    threads: 1
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     shell:
         'samtools view -c {input} > {output}'
 
@@ -498,6 +547,10 @@ rule bam_index:
         bam='{prefix}.bam'
     output:
         bai='{prefix}.bam.bai'
+    threads: 1
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     shell:
         'samtools index {input} {output}'
 
@@ -524,6 +577,10 @@ rule fastq_screen:
         txt=c.patterns['fastq_screen']
     log:
         c.patterns['fastq_screen'] + '.log'
+    threads: 6
+    resources:
+        mem_mb=1024 * 4,
+        runtime=autobump(120)
     params: subset=100000
     script:
         wrapper_for('fastq_screen/wrapper.py')
@@ -541,6 +598,9 @@ rule featurecounts:
     log:
         '{sample_dir}/rnaseq_aggregation/featurecounts.txt.log'
     threads: 8
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     run:
         # NOTE: By default, we use -p for paired-end
         p_arg = ''
@@ -577,6 +637,10 @@ rule rrna_libsizes_table:
     output:
         json=c.patterns['rrna_percentages_yaml'],
         tsv=c.patterns['rrna_percentages_table']
+    threads: 1
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     run:
         def rrna_sample(f):
             return helpers.extract_wildcards(c.patterns['rrna']['libsize'], f)['sample']
@@ -641,6 +705,10 @@ rule multiqc:
         config='config/multiqc_config.yaml'
     output: c.targets['multiqc']
     log: c.targets['multiqc'][0] + '.log'
+    threads: 1
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     run:
         analysis_directory = set([os.path.dirname(i) for i in input])
         outdir = os.path.dirname(c.targets['multiqc'][0])
@@ -675,6 +743,11 @@ rule markduplicates:
         # config.
         java_args='-Xmx20g'
         # java_args='-Xmx2g'  # [TEST SETTINGS -1]
+    threads: 1
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120),
+        disk_mb=1024 *100
     shell:
         'picard '
         '{params.java_args} '
@@ -703,6 +776,10 @@ rule collectrnaseqmetrics:
         # java_args='-Xmx2g'  # [TEST SETTINGS -1]
     log:
         c.patterns['collectrnaseqmetrics']['metrics'] + '.log'
+    threads: 1
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120)
     run:
         strand_arg = helpers.strand_arg_lookup(
             c, {
@@ -732,6 +809,10 @@ rule preseq:
         bam=c.patterns['bam']
     output:
         c.patterns['preseq']
+    threads: 1
+    resources:
+        mem_mb=1024 * 1,
+        runtime=autobump(120)
     shell:
         'preseq '
         'c_curve '
@@ -754,6 +835,9 @@ rule salmon:
     log:
         c.patterns['salmon'] + '.log'
     threads: 6
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120)
     run:
         if c.is_paired:
             fastq_arg = f'-1 {input.fastq[0]} -2 {input.fastq[1]} '
@@ -794,6 +878,9 @@ rule kallisto:
         c.patterns['kallisto'] + '.log'
     threads:
         8
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120)
     run:
         if c.is_paired:
             se_args = ''
@@ -837,6 +924,9 @@ rule rseqc_infer_experiment:
         txt=c.patterns['rseqc']['infer_experiment']
     log:
         c.patterns['rseqc']['infer_experiment'] + '.log'
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
 
     shell:
         'infer_experiment.py -r {input.bed12} -i {input.bam} > {output} &> {log}'
@@ -852,10 +942,33 @@ rule rseqc_read_distribution:
         txt=c.patterns['rseqc']['read_distribution']
     log:
         c.patterns['rseqc']['read_distribution'] + '.log'
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     shell:
         'read_distribution.py -i {input.bam} -r {input.bed12} > {output} &> {log}'
 
 
+rule idxstats:
+    """
+    Run samtools idxstats on sample bams
+    """
+    input:
+        bam=c.patterns['markduplicates']['bam'],
+        bai=c.patterns['markduplicates']['bam'] + '.bai'
+    output:
+        txt=c.patterns['samtools']['idxstats']
+    log: 
+        c.patterns['samtools']['idxstats'] + '.log'
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
+    run:
+        shell(
+            'samtools idxstats {input.bam} 2> {log} 1> {output.txt}'
+        )
+
+
 # Common arguments used for bamCoverage rules below
 BAMCOVERAGE_ARGS = (
     '--minMappingQuality 20 '  # excludes multimappers
@@ -872,6 +985,9 @@ rule bigwig_neg:
         bai=c.patterns['markduplicates']['bam'] + '.bai',
     output: c.patterns['bigwig']['neg']
     threads: 8
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     log:
         c.patterns['bigwig']['neg'] + '.log'
     run:
@@ -902,6 +1018,9 @@ rule bigwig_pos:
         bai=c.patterns['markduplicates']['bam'] + '.bai',
     output: c.patterns['bigwig']['pos']
     threads: 8
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     log:
         c.patterns['bigwig']['pos'] + '.log'
 
@@ -950,6 +1069,9 @@ if 'merged_bigwigs' in config:
             c.patterns['merged_bigwig']
         log:
             c.patterns['merged_bigwig'] + '.log'
+        resources:
+            mem_mb=1024 * 16,
+            runtime=autobump(120)
         script:
             wrapper_for('average-bigwigs/wrapper.py')
 
@@ -975,22 +1097,4 @@ rule rnaseq_rmarkdown:
         '> {log} 2>&1'
         # [TEST_SETTINGS -1]
 
-
-rule idxstats:
-    """
-    Run samtools idxstats on sample bams
-    """
-    input:
-        bam=c.patterns['markduplicates']['bam'],
-        bai=c.patterns['markduplicates']['bam'] + '.bai'
-    output:
-        txt=c.patterns['samtools']['idxstats']
-    log: 
-        c.patterns['samtools']['idxstats'] + '.log'
-    run:
-        shell(
-            'samtools idxstats {input.bam} 2> {log} 1> {output.txt}'
-        )
-
-
 # vim: ft=python

From 1799f0f5b9e8940bb8f70b7edc3f7a63898bbcdc Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sat, 26 Nov 2022 10:19:02 -0500
Subject: [PATCH 51/91] rm shell prefix from rnaseq

---
 workflows/rnaseq/Snakefile | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/workflows/rnaseq/Snakefile b/workflows/rnaseq/Snakefile
index a41b28e9..7b6e3d8a 100644
--- a/workflows/rnaseq/Snakefile
+++ b/workflows/rnaseq/Snakefile
@@ -23,11 +23,6 @@ config = common.load_config(config)
 
 include: '../references/Snakefile'
 
-shell.prefix(
-    'set -euo pipefail; export R_PROFILE_USER=; export TMPDIR={};'
-    .format(cluster_specific.tempdir_for_biowulf())
-)
-shell.executable('/bin/bash')
 
 # Verify configuration of config and sampletable files
 helpers.preflight(config)

From 22a5f69bf0fc356f54ab32e1bbfb5dbccb032672 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Wed, 22 Feb 2023 16:11:03 -0500
Subject: [PATCH 52/91] remove clusterconfig and cluster from WRAPPER_SLURM

---
 include/WRAPPER_SLURM | 2 --
 1 file changed, 2 deletions(-)

diff --git a/include/WRAPPER_SLURM b/include/WRAPPER_SLURM
index 09590f4b..5151e141 100755
--- a/include/WRAPPER_SLURM
+++ b/include/WRAPPER_SLURM
@@ -16,8 +16,6 @@ if [[ ! -e logs ]]; then mkdir -p logs; fi
     --rerun-incomplete \
     --jobname "s.{rulename}.{jobid}.sh" \
     -j 999 \
-    --cluster-config config/clusterconfig.yaml \
-    --cluster 'sbatch {cluster.prefix} --cpus-per-task={threads}  --output=logs/{rule}.o.%j --error=logs/{rule}.e.%j' \
     --use-conda \
     --configfile config/config.yaml \
     --latency-wait=300 \

From e26bde8f85753eb4ae0a20df9003b8c7869eca38 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 23 Feb 2023 13:37:20 -0500
Subject: [PATCH 53/91] use snakemake profile env var if set

---
 include/WRAPPER_SLURM | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/include/WRAPPER_SLURM b/include/WRAPPER_SLURM
index 5151e141..e598572c 100755
--- a/include/WRAPPER_SLURM
+++ b/include/WRAPPER_SLURM
@@ -7,6 +7,22 @@
 # make logdir
 if [[ ! -e logs ]]; then mkdir -p logs; fi
 
+# use SNAKEMAKE_PROFILE if one is set in the environment variables
+if [ -z "$LCDBWF_SNAKE_PROFILE" ]; then
+    if [ -z "$SNAKEMAKE_PROFILE" ]; then
+        # no snakemake profile found
+        PROFILE_CMD=""
+        echo "No environment variable SNAKEMAKE_PROFILE or LCDBWF_SNAKE_PROFILE found."
+        echo "snakemake will run in single job."
+    else
+        # generic SNAKEMAKE_PROFILE found
+        PROFILE_CMD="--profile $SNAKEMAKE_PROFILE"
+    fi
+else
+# LCDBWF_SNAKE_PROFILE found, this takes priority if both profile variables are set
+PROFILE_CMD="--profile $LCDBWF_SNAKE_PROFILE"
+fi
+
 # Run snakemake
 (
     time snakemake \
@@ -18,6 +34,7 @@ if [[ ! -e logs ]]; then mkdir -p logs; fi
     -j 999 \
     --use-conda \
     --configfile config/config.yaml \
+    $PROFILE_CMD \
     --latency-wait=300 \
     --max-jobs-per-second 1 \
     --max-status-checks-per-second 0.01 \

From 46e42262356f3b71cd03400e5cf3ba681162b0c8 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 23 Feb 2023 15:30:19 -0500
Subject: [PATCH 54/91] update chipseq Snakefile for snakemake profile

---
 workflows/chipseq/Snakefile | 98 +++++++++++++++++++++++++++++++++++--
 1 file changed, 93 insertions(+), 5 deletions(-)

diff --git a/workflows/chipseq/Snakefile b/workflows/chipseq/Snakefile
index 532bceae..18a9bb27 100644
--- a/workflows/chipseq/Snakefile
+++ b/workflows/chipseq/Snakefile
@@ -24,11 +24,13 @@ config = common.load_config(config)
 
 include: '../references/Snakefile'
 
-shell.prefix(
-    'set -euo pipefail; export R_PROFILE_USER=; export TMPDIR={};'
-    .format(cluster_specific.tempdir_for_biowulf())
-)
-shell.executable('/bin/bash')
+def autobump(value):
+    """
+    Increments value for each attempt.
+    """
+    def f(wildcards, attempt):
+        return attempt * value
+    return f
 
 # Verify configuration of config and sampletable files
 helpers.preflight(config)
@@ -114,6 +116,10 @@ if 'orig_filename' in c.sampletable.columns:
             orig_for_sample
         output:
             render_r1_r2(c.patterns['fastq'])
+        threads: 1
+        resources:
+            mem_mb=100,
+            runtime=10,
         run:
             assert len(output) == len(input), (input, output)
             for src, linkname in zip(input, output):
@@ -139,6 +145,9 @@ if 'Run' in c.sampletable.columns and sum(c.sampletable['Run'].str.startswith('S
             is_paired=c.is_paired,
             sampletable=_st,
             # limit = 100000, # [TEST SETTINGS]
+        resources:
+            mem_mb=autobump(1024),
+            runtime=autobump(120)
         conda:
             '../../wrappers/wrappers/fastq-dump/environment.yaml'
         script:
@@ -152,6 +161,9 @@ rule cutadapt:
         fastq=render_r1_r2(c.patterns['fastq'])
     output:
         fastq=render_r1_r2(c.patterns['cutadapt'])
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     log:
         render_r1_r2(c.patterns['cutadapt'])[0] + '.log'
     threads: 6
@@ -196,6 +208,9 @@ rule fastqc:
     output:
         html='{sample_dir}/{sample}/fastqc/{sample}{suffix}_fastqc.html',
         zip='{sample_dir}/{sample}/fastqc/{sample}{suffix}_fastqc.zip',
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     script:
         wrapper_for('fastqc/wrapper.py')
 
@@ -212,6 +227,9 @@ rule bowtie2:
     log:
         c.patterns['bam'] + '.log'
     threads: 16
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120)
     run:
         prefix = aligners.prefix_from_bowtie2_index(input.index)
         sam = output.bam.replace('.bam', '.sam')
@@ -248,6 +266,10 @@ rule unique:
         c.patterns['bam']
     output:
         c.patterns['unique']
+    threads: 1
+    resources:
+        mem_mb=1024,
+        runtime=autobump(120)
     shell:
         # NOTE: the quality score chosen here should reflect the scores output
         # by the aligner used. For example, STAR uses 255 as max mapping
@@ -263,6 +285,10 @@ rule fastq_count:
         fastq='{sample_dir}/{sample}/{sample}{suffix}.fastq.gz'
     output:
         '{sample_dir}/{sample}/{sample}{suffix}.fastq.gz.libsize'
+    threads: 1
+    resources:
+        mem_mb=1024 * 1,
+        runtime=autobump(120)
     shell:
         'zcat {input} | echo $((`wc -l`/4)) > {output}'
 
@@ -275,6 +301,10 @@ rule bam_count:
         bam='{sample_dir}/{sample}/{suffix}.bam'
     output:
         '{sample_dir}/{sample}/{suffix}.bam.libsize'
+    threads: 1
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     shell:
         'samtools view -c {input} > {output}'
 
@@ -287,6 +317,10 @@ rule bam_index:
         bam='{prefix}.bam'
     output:
         bai='{prefix}.bam.bai'
+    threads: 1
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     shell:
         'samtools index {input} {output}'
 
@@ -313,6 +347,10 @@ rule fastq_screen:
         txt=c.patterns['fastq_screen']
     log:
         c.patterns['fastq_screen'] + '.log'
+    threads: 6
+    resources:
+        mem_mb=autobump(1024 * 4),
+        runtime=autobump(120)
     params: subset=100000
     script:
         wrapper_for('fastq_screen/wrapper.py')
@@ -345,6 +383,10 @@ rule multiqc:
         c.targets['multiqc']
     log:
         c.targets['multiqc'][0] + '.log'
+    threads: 1
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     run:
         analysis_directory = set([os.path.dirname(i) for i in input])
         outdir = os.path.dirname(c.targets['multiqc'][0])
@@ -373,6 +415,11 @@ rule markduplicates:
         metrics=c.patterns['markduplicates']['metrics']
     log:
         c.patterns['markduplicates']['bam'] + '.log'
+    threads: 1
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120),
+        disk_mb=1024 *100
     params:
         # NOTE: Be careful with the memory here; make sure you have enough
         # and/or it matches the resources you're requesting in the cluster
@@ -408,6 +455,11 @@ rule merge_techreps:
         metrics=c.patterns['merged_techreps'] + '.metrics'
     log:
         c.patterns['merged_techreps'] + '.log'
+    threads: 1
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120),
+        disk_mb=1024 *100
     params:
         # NOTE: Be careful with the memory here; make sure you have enough
         # and/or it matches the resources you're requesting in the cluster
@@ -426,6 +478,10 @@ if c.is_paired:
             metrics=c.patterns['collectinsertsizemetrics']['metrics']
         log:
             c.patterns['collectinsertsizemetrics']['metrics'] + '.log'
+        threads: 1
+        resources:
+            mem_mb=1024 * 32,
+            runtime=autobump(120),
         params:
             java_args='-Xmx20g'
             # java_args='-Xmx2g'  # [TEST SETTINGS -1]
@@ -451,6 +507,10 @@ rule bigwig:
         c.patterns['bigwig']
     log:
         c.patterns['bigwig'] + '.log'
+    threads: 1
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     shell:
         'bamCoverage '
         '--bam {input.bam} '
@@ -484,6 +544,10 @@ rule fingerprint:
         metrics=c.patterns['fingerprint']['metrics']
     threads: 8
     log: c.patterns['fingerprint']['metrics'] + '.log'
+    threads: 1
+    resources:
+        mem_mb=1024 * 32,
+        runtime=autobump(120)
     run:
         if len(input.control) == 0:
             jsdsample_arg = ""
@@ -529,6 +593,9 @@ rule sicer:
         bed=c.patterns['peaks']['sicer']
     log:
         c.patterns['peaks']['sicer'] + '.log'
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     params:
         block=lambda wc: chipseq.block_for_run(config, wc.sicer_run, 'sicer')
     wrapper:
@@ -552,6 +619,9 @@ rule macs2:
         chromsizes=refdict[c.organism][config['aligner']['tag']]['chromsizes'],
     output:
         bed=c.patterns['peaks']['macs2']
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     log:
         c.patterns['peaks']['macs2'] + '.log'
     params:
@@ -583,6 +653,9 @@ rule spp:
         rdata=c.patterns['peaks']['spp'] + '.RData'
     log:
         c.patterns['peaks']['spp'] + '.log'
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     params:
         block=lambda wc: chipseq.block_for_run(config, wc.spp_run, 'spp'),
         keep_tempfiles=False,
@@ -604,6 +677,9 @@ rule bed_to_bigbed:
         bed='{prefix}.bed',
         chromsizes=refdict[c.organism][config['aligner']['tag']]['chromsizes']
     output: '{prefix}.bigbed'
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     log: '{prefix}.bigbed.log'
     run:
         # Based on the filename, identify the algorithm. Based on the contents,
@@ -652,6 +728,9 @@ rule multibigwigsummary:
         npz=c.targets['multibigwigsummary']['npz'],
         tab=c.targets['multibigwigsummary']['tab']
     threads: 16
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     run:
         # from the input files, figure out the sample name.
         labels = ' '.join([i.split('/')[-2] for i in input])
@@ -675,6 +754,9 @@ rule plotcorrelation:
     output:
         heatmap=c.targets['plotcorrelation']['heatmap'],
         tab=c.targets['plotcorrelation']['tab']
+    resources:
+        mem_mb=1024 * 2,
+        runtime=autobump(120)
     shell:
         'plotCorrelation '
         '--corData {input} '
@@ -705,6 +787,9 @@ if 'merged_bigwigs' in config:
             chromsizes=refdict[c.organism][config['aligner']['tag']]['chromsizes'],
         output:
             c.patterns['merged_bigwig']
+        resources:
+            mem_mb=1024 * 16,
+            runtime=autobump(120)
         log:
             c.patterns['merged_bigwig'] + '.log'
         script:
@@ -719,6 +804,9 @@ rule idxstats:
         bai=c.patterns['markduplicates']['bam'] + '.bai'
     output:
         txt=c.patterns['samtools']['idxstats']
+    resources:
+        mem_mb=1024 * 16,
+        runtime=autobump(120)
     log: 
         c.patterns['samtools']['idxstats'] + '.log'
     run:

From 12935fb312b61dc5c02fa86ee044e4e261071f20 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 23 Feb 2023 15:51:40 -0500
Subject: [PATCH 55/91] fix input.control in fingerprint

---
 workflows/chipseq/Snakefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/workflows/chipseq/Snakefile b/workflows/chipseq/Snakefile
index 18a9bb27..1ccdee16 100644
--- a/workflows/chipseq/Snakefile
+++ b/workflows/chipseq/Snakefile
@@ -552,7 +552,7 @@ rule fingerprint:
         if len(input.control) == 0:
             jsdsample_arg = ""
         else:
-            jsdsample_arg = '--JSDsample {input.control}'
+            jsdsample_arg = '--JSDsample ' + str(input.control)
         shell(
             'plotFingerprint ' '--bamfiles {input.bams} '
             '-p {threads} '

From 2fcbea5877c17cd82d03767514c6b5470bd3c183 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 24 Feb 2023 12:35:07 -0500
Subject: [PATCH 56/91] set --restart-times to 3

---
 include/WRAPPER_SLURM | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/WRAPPER_SLURM b/include/WRAPPER_SLURM
index e598572c..393a12fd 100755
--- a/include/WRAPPER_SLURM
+++ b/include/WRAPPER_SLURM
@@ -29,6 +29,7 @@ fi
     -p \
     --directory $PWD \
     -k \
+    --restart-times 3 \
     --rerun-incomplete \
     --jobname "s.{rulename}.{jobid}.sh" \
     -j 999 \

From f29ae61ef1588fd8c06cfb15764b29bd853f0e4f Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 24 Feb 2023 12:37:05 -0500
Subject: [PATCH 57/91] autobump mem_mb for fastq_dump

---
 workflows/rnaseq/Snakefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/workflows/rnaseq/Snakefile b/workflows/rnaseq/Snakefile
index cbef1644..fa41b43a 100644
--- a/workflows/rnaseq/Snakefile
+++ b/workflows/rnaseq/Snakefile
@@ -138,7 +138,7 @@ if 'Run' in c.sampletable.columns and sum(c.sampletable['Run'].str.startswith('S
             sampletable=_st,
             # limit = 100000, # [TEST SETTINGS]
         resources:
-            mem_mb=1024,
+            mem_mb=autobump(1024),
             runtime=autobump(120)
         conda:
             '../../wrappers/wrappers/fastq-dump/environment.yaml'

From 62bf67fa6e16d4901579c817f06a99a5e1a90348 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Mon, 6 Mar 2023 11:20:44 -0500
Subject: [PATCH 58/91] fix volcano plots not showing before barplot

---
 lib/lcdbwf/R/plotting.R | 18 ++++++++++++------
 lib/lcdbwf/R/results.R  |  2 +-
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/lib/lcdbwf/R/plotting.R b/lib/lcdbwf/R/plotting.R
index 216871ec..c848f0d9 100644
--- a/lib/lcdbwf/R/plotting.R
+++ b/lib/lcdbwf/R/plotting.R
@@ -340,7 +340,7 @@ counts.plot <- function(df, rank.nb=NULL, no.aes=FALSE, facet='label') {
 
 #' Plot a histogram of raw pvals
 #'
-#' This is right out of the DESeq2 vignette, from the section about independent
+#' This is edited from the DESeq2 vignette, from the section about independent
 #' filtering. The resulting histogram indicates pvals for those genes kept and
 #' removed before multiple testing adjustment.
 #'
@@ -352,11 +352,17 @@ pval_hist <- function(res){
   h1 <- hist(res$pvalue[!use], breaks=0:50/50, plot=FALSE)
   h2 <- hist(res$pvalue[use], breaks=0:50/50, plot=FALSE)
   colori <- c(`counts too low`='khaki', `pass`="powderblue")
-  barplot(height = rbind(h1$counts, h2$counts), beside = FALSE,
-          col = colori, space = 0, main = "", ylab="frequency")
-  text(x = c(0, length(h1$counts)), y = 0, label = paste(c(0,1)),
-       adj = c(0.5,1.7), xpd=NA)
-  legend("topright", fill=rev(colori), legend=rev(names(colori)))
+  df <- rbind(data.frame(x=h1$mids, counts=h1$counts, label='counts too low'),
+              data.frame(x=h2$mids, counts=h2$counts, label='pass')
+              )
+  plt <- ggplot2::ggplot(df, aes(x=x, y=counts, fill=label)) +
+    geom_bar(stat = 'identity', color='gray20') +
+    theme_classic() +
+    scale_fill_manual(values=c("#EBE379", "#A3DAE0")) +
+    xlab('p-value') +
+    ylab('frequency') +
+    theme(legend.position = c(0.8, 0.8))
+  return(plt)
 }
 
 #' Barplot of size factors by sample
diff --git a/lib/lcdbwf/R/results.R b/lib/lcdbwf/R/results.R
index d84ecd4c..b1cec3aa 100644
--- a/lib/lcdbwf/R/results.R
+++ b/lib/lcdbwf/R/results.R
@@ -56,7 +56,7 @@ build_results_tabs <- function(res_list, dds_list, config, text){
 
     lcdbwf:::mdcat('### P-value distribution')
     lcdbwf:::folded_markdown(text$results_plots$pval_hist, "Help")
-    lcdbwf:::pval_hist(res_i)
+    print(lcdbwf:::pval_hist(res_i))
 
     if (config$toggle$results_diagnostics){
       lcdbwf:::results_diagnostics(res=res_i, dds=res_list[[name]]$dds, name=name, config=config, text=text)

From 651d4e2fb28b6e728b7fd2f78bc7371ee8bc0454 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Mon, 6 Mar 2023 11:21:44 -0500
Subject: [PATCH 59/91] allow skipping orgDb

---
 lib/lcdbwf/R/annotations.R | 52 +++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 20 deletions(-)

diff --git a/lib/lcdbwf/R/annotations.R b/lib/lcdbwf/R/annotations.R
index 473c4b95..d1a40b7d 100644
--- a/lib/lcdbwf/R/annotations.R
+++ b/lib/lcdbwf/R/annotations.R
@@ -119,10 +119,11 @@ get_annotation_db <- function(config, dbtype, genus_species=NULL, orgdb_key_over
 #'
 #' @param res_list List of DESeqResults objects
 #' @param config Full config object, at least containing config$orgdb
+#' @param use_orgdb Boolean to use or bypass orgDb extra columns
 #'
 #' @return List of same results objects, but each one with additional columns
 #'   attached as specified in the config
-attach_extra <- function(res_list, config, force_intersect){
+attach_extra <- function(res_list, config, force_intersect, use_orgdb=TRUE){
 
   if (missing(force_intersect)) force_intersect <- config$main$force_intersect
   if (is.null(force_intersect)) force_intersect <- FALSE
@@ -149,28 +150,39 @@ attach_extra <- function(res_list, config, force_intersect){
 
   keys <- rownames(res_list[[1]]$res)
 
-  orgdb <- lcdbwf:::get_annotation_db(config, dbtype="OrgDb")
+  if (use_orgdb == TRUE) {
+    orgdb <- lcdbwf:::get_annotation_db(config, dbtype="OrgDb")
 
-  # Create a dataframe mapping gene IDs to the various configured columns
-  lookups <- list()
-  for (col in config$annotation$orgdb_columns){
-    lookups[[col]] <- mapIds(orgdb, keys=keys, column=col, keytype=config$annotation$keytype, multiVal='first')
-    if (col %in% config$annotation$fill){
-      lookups[[col]] <- ifelse(is.na(lookups[[col]]), keys, lookups[[col]])
-    }
-  }
-  lookups <- data.frame(lookups)
-
-  # Use that dataframe to attach additional columns to each results object
-  for (name in names(res_list)){
-    res <- res_list[[name]]$res
-    orig_colnames <- colnames(res)
+    # Create a dataframe mapping gene IDs to the various configured columns
+    lookups <- list()
     for (col in config$annotation$orgdb_columns){
-      res[[col]] <- lookups[[col]]
+      lookups[[col]] <- mapIds(orgdb, keys=keys, column=col, keytype=config$annotation$keytype, multiVal='first')
+      if (col %in% config$annotation$fill){
+        lookups[[col]] <- ifelse(is.na(lookups[[col]]), keys, lookups[[col]])
+    }
+    }
+    lookups <- data.frame(lookups)
+
+    # Use that dataframe to attach additional columns to each results object
+    for (name in names(res_list)){
+      res <- res_list[[name]]$res
+      orig_colnames <- colnames(res)
+      for (col in config$annotation$orgdb_columns){
+        res[[col]] <- lookups[[col]]
+      }
+      res$gene <- rownames(res)
+      res <- res[, c('gene', config$annotation$orgdb_columns, orig_colnames)]
+      res_list[[name]]$res <- res
+    }
+  } else {
+    # attach the genes as SYMBOLs in absence of OrgDb data
+    for (name in names(res_list)){
+      res <- res_list[[name]]$res
+      res$gene <- rownames(res)
+      res$SYMBOL <- rownames(res)
+      res_list[[name]]$res <- res
     }
-    res$gene <- rownames(res)
-    res <- res[, c('gene', config$annotation$orgdb_columns, orig_colnames)]
-    res_list[[name]]$res <- res
   }
+
   return(res_list)
 }

From 09e1e2f3ac00a945d6200932c01b5e579c6413d8 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Tue, 7 Mar 2023 14:32:42 -0500
Subject: [PATCH 60/91] use :::

---
 .../downstream/functional-enrichment.Rmd      | 32 +++++++++----------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/workflows/rnaseq/downstream/functional-enrichment.Rmd b/workflows/rnaseq/downstream/functional-enrichment.Rmd
index 17df5b9b..f0626f15 100644
--- a/workflows/rnaseq/downstream/functional-enrichment.Rmd
+++ b/workflows/rnaseq/downstream/functional-enrichment.Rmd
@@ -33,7 +33,7 @@ a particular annotation category.
 devtools::document('../../../lib/lcdbwf')
 devtools::load_all('../../../lib/lcdbwf')
 
-config <- lcdbwf::load_config('config.yaml')
+config <- lcdbwf:::load_config('config.yaml')
 ```
 
 ```{r load, cache=TRUE, cache.extra=file.info('combined.Rds')$mtime}
@@ -45,8 +45,8 @@ dds_list <- obj$dds_list
 ```{r functional_enrichment_prep, cache=TRUE, config=config$annotation$keytype, eval=config$toggle$functional_enrichment, dependson='load'}
 
 # We assume that keys are unique across all term2gene_lists.
-term2gene_list <- lcdbwf::get_go_term2gene(config)
-term2name <- lcdbwf::get_go_descriptions()
+term2gene_list <- lcdbwf:::get_go_term2gene(config)
+term2name <- lcdbwf:::get_go_descriptions()
 
 # We need to assign each key to its respective term2name dataframe (or NULL if
 # none)
@@ -57,9 +57,9 @@ ontology_list <- c(term2gene_list)
 # This can take up a lot of memory on CI/CD, so we only do this if not doing
 # a test.
 if (!config$toggle$test){
-  msigdb_df <- lcdbwf::get_msigdb_df(config)
-  msigdb_term2gene_list <- lcdbwf::get_msigdb_term2gene_list(msigdb_df)
-  msigdb_term2name <- lcdbwf::get_msigdb_term2name(msigdb_df)
+  msigdb_df <- lcdbwf:::get_msigdb_df(config)
+  msigdb_term2gene_list <- lcdbwf:::get_msigdb_term2gene_list(msigdb_df)
+  msigdb_term2name <- lcdbwf:::get_msigdb_term2name(msigdb_df)
   ontology_term2name_mapping <- c(ontology_term2name_mapping, lapply(msigdb_term2gene_list, function(x) NULL))
   ontology_list <- c(ontology_list, msigdb_term2gene_list)
 }
@@ -78,7 +78,7 @@ for (name in names(res_list)){
     for (ont in names(config$functional_enrichment$ontologies)){
       term2gene <- ontology_list[[ont]]
       term2name <- ontology_term2name_mapping[[ont]]
-      enrich_res <- lcdbwf::run_enrichment(
+      enrich_res <- lcdbwf:::run_enrichment(
         res_list[[name]],
         direction=direction,
         TERM2GENE=term2gene,
@@ -99,13 +99,13 @@ for (name in names(res_list)){
 
 ```{r functional_enrichment_plots}
 # Interestingly, it's the *caching* that causes this to hang for a loooong time.
-dotplot_list <- lcdbwf::enrich_list_lapply(all_enrich, dotplots, config=config, send_names=TRUE)
-emapplot_list <- lcdbwf::enrich_list_lapply(all_enrich, emapplots, config=config, send_names=TRUE)
-cnetplot_list <- lcdbwf::enrich_list_lapply(all_enrich, cnetplots, config=config, send_names=TRUE)
+dotplot_list <- lcdbwf:::enrich_list_lapply(all_enrich, dotplots, config=config, send_names=TRUE)
+emapplot_list <- lcdbwf:::enrich_list_lapply(all_enrich, emapplots, config=config, send_names=TRUE)
+cnetplot_list <- lcdbwf:::enrich_list_lapply(all_enrich, cnetplots, config=config, send_names=TRUE)
 ```
 
 ```{r, results='asis'}
-lcdbwf::mdcat("There are many different databases that annotate genes into sets.",
+lcdbwf:::mdcat("There are many different databases that annotate genes into sets.",
       "The following sets are used here:")
 
 knitr::kable(config$functional_enrichment$ontologies %>% as.data.frame %>% t())
@@ -120,19 +120,19 @@ for (name in names(res_list)){
   for (direction in config$functional_enrichment$directions){
     mdcat("### ", direction, "{.tabset}")
     if (length(all_enrich[[name]][[direction]]) == 0){
-      lcdbwf::mdcat("Too few genes differentially expressed.")
+        lcdbwf:::mdcat("Too few genes differentially expressed.")
       next
     }
     for (ont in names(all_enrich[[name]][[direction]])){
-      lcdbwf::mdcat("#### ", ont, "{.tabset}")
+        lcdbwf:::mdcat("#### ", ont, "{.tabset}")
 
-      lcdbwf::mdcat("##### dotplot")
+    lcdbwf:::mdcat("##### dotplot")
       print(dotplot_list[[name]][[direction]][[ont]])
 
-      lcdbwf::mdcat("##### emapplot")
+      lcdbwf:::mdcat("##### emapplot")
       print(emapplot_list[[name]][[direction]][[ont]])
 
-      lcdbwf::mdcat("##### cnetplot")
+      lcdbwf:::mdcat("##### cnetplot")
       print(cnetplot_list[[name]][[direction]][[ont]])
     }
   }

From b1c81de170f9c0159ea0d89d43fd3dd426f34372 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Tue, 7 Mar 2023 14:36:10 -0500
Subject: [PATCH 61/91] modify gene pattern to be stand-alone Rmd

---
 workflows/rnaseq/downstream/gene-patterns.Rmd | 107 ++++++++++++++++--
 1 file changed, 100 insertions(+), 7 deletions(-)

diff --git a/workflows/rnaseq/downstream/gene-patterns.Rmd b/workflows/rnaseq/downstream/gene-patterns.Rmd
index 56d514c7..e2bf94e0 100644
--- a/workflows/rnaseq/downstream/gene-patterns.Rmd
+++ b/workflows/rnaseq/downstream/gene-patterns.Rmd
@@ -1,3 +1,45 @@
+---
+title: Gene pattern analysis
+output:
+    html_document:
+        code_folding: hide
+        toc: true
+        toc_float: true
+        toc_depth: 3
+---
+
+```{r global_options, include=FALSE}
+# Sets up global options for rendering RMarkdown into HTML.
+knitr::opts_chunk$set(
+    warning=FALSE,
+    message=FALSE
+)
+```
+
+```{r}
+library(dplyr)
+library(tidyr)
+library(clusterProfiler)
+library(DESeq2)
+library(DEGreport)
+```
+
+```{r load_helpers}
+# Load the lcdbwf R package, which is stored locally.
+# This package has many custom functions used throughout this document.
+devtools::document('../../../lib/lcdbwf')
+devtools::load_all('../../../lib/lcdbwf')
+
+config <- lcdbwf:::load_config('config.yaml')
+```
+
+```{r load, cache=TRUE, cache.extra=file.info('combined.Rds')$mtime}
+obj <- readRDS('combined.Rds')
+res.list <- obj$res_list
+dds.list <- obj$dds_list
+```
+
+
 # Gene patterns {.tabset}
 
 We can roughly group genes into expression patterns. This uses the [DEGreport
@@ -55,17 +97,23 @@ low.minc <- 1
   more, they are merged together
 - Clusters with fewer than `r minc` genes are not shown.
 
+Gene pattern for changed genes in individual contrasts are also indicated below.
+
 ```{r finalclusters, fig.width=12, results='asis', cache=TRUE, dependson='selections'}
 # Run the clustering, identify patterns, and generate plots.
 # Docs: https://lcdb.github.io/lcdb-wf/rnaseq-rmd.html#finalclusters
 # NOTE: which genes to cluster?------------------------------------------------
 #    By default, we get all the changed genes, but you may want only the up or
 #    down genes.
-ll <- lapply(res.list, function (x) get.sig(x[['res']], 'changed'))
+ll <- lapply(res.list, function (x) lcdbwf:::get_sig(x[['res']], 'changed'))
 
 # Filter out results where there were zero genes detected.
 ll <- ll[lapply(ll, length) > 0]
 
+# get the list of all changed in any contrast
+all.changed <- list('union_all_contrasts' = unlist(ll) %>% unique())
+ll <- c(all.changed, ll)
+
 add.cluster.id <- function(clusters, res, label){
     # Merges the degPattern cluster IDs `cluster` with DESeqresults `res`
     # `label` will be used to create a cluster column with a unique column name 
@@ -79,9 +127,16 @@ add.cluster.id <- function(clusters, res, label){
     return(res)
 }
 
+# n.list will store all the clusters to later add the cluster ID to res.list
+n.list <- list()
+
 for (name in names(ll)){
     # Print a nice Markdown header
-    mdcat('## ', res.list[[name]][['label']])
+    if (name == 'union_all_contrasts') {
+        mdcat('## ', name)
+    } else {
+        mdcat('## ', res.list[[name]][['label']])
+    }
 
     genes <- ll[[name]]
 
@@ -98,15 +153,23 @@ for (name in names(ll)){
     }
 
     # Extract the normalized counts for these genes
-    vsd.i <- varianceStabilizingTransformation(dds.list[[ res.list[[name]][['dds']] ]], blind=TRUE)
+    if (name == 'union_all_contrasts') {
+        vsd.i <- varianceStabilizingTransformation(dds.list[[ 1 ]], blind=TRUE)
+    } else {
+        vsd.i <- varianceStabilizingTransformation(dds.list[[ res.list[[name]][['dds']] ]], blind=TRUE)
+    }
     idx <- rownames(vsd.i) %in% genes
     ma <- assay(vsd.i)[idx,]
 
     # Remove genes with identical normalized counts across all samples
     ma <- ma[apply(as.data.frame(ma), 1, n_distinct) > 1, ]
 
-    colData.i <- colData(dds.list[[ res.list[[name]][['dds']] ]])
-    colData.i <- colData.i[,!(colnames(colData.i) %in% exclude.for.printing)]
+    if (name == 'union_all_contrasts') {
+        colData.i <- colData(dds.list[[ 1 ]])
+    } else {
+        colData.i <- colData(dds.list[[ res.list[[name]][['dds']] ]])
+    }
+    #colData.i <- colData.i[,!(colnames(colData.i) %in% exclude.for.printing)]
 
 
     # Sometimes, if there are limited clusters, degPattern fails. The solution
@@ -151,6 +214,7 @@ for (name in names(ll)){
         )
     )
 
+    n.list[[name]] <- n2
 
     # In the final_clusters directory, this creates files containing lists of
     # the genes in each cluster, and adds a link to the Markdown.
@@ -167,8 +231,37 @@ for (name in names(ll)){
     dev.copy(pdf, file=pdf.file)
     dev.off()
     mdcat('- [', pdf.file, '](', pdf.file, '), PDF')
+}
+```
 
-    # merge the degPattern cluster IDs with res.list
-    res.list[[name]][['res']] <- add.cluster.id(clusters=n2, res=res.list[[name]][['res']], label=name)
+```{r add_cluster_id_res}
+# merge the degPattern cluster IDs with res.list
+for (name in names(res.list)) {
+    for (llname in names(ll)) {
+        res.list[[name]][['res']] <- add.cluster.id(clusters=n.list[[llname]],
+                                                    res=res.list[[name]][['res']],
+                                                    label=llname)
+    }
 }
 ```
+
+
+
+# Exported results
+
+```{r excel, results='asis'}
+lcdbwf:::exported_excel(res.list, dds.list, file='final_clusters/consolidated_results.xlsx')
+```
+
+Here is a single Excel file with one worksheet for each contrast:
+[final_clusters/consolidated_results.xlsx](final_clusters/consolidated_results.xlsx)
+
+Alternatively, the files below are TSVs that can be opened in Excel or used
+progammatically with downstream tools:
+
+```{r write_output, results='asis'}
+# Write out files for full and each selection, and create a link to them in the
+# HTML generated by this RMarkdown.
+tbl <- lcdbwf:::exported_tsvs(res.list, directory='final_clusters')
+knitr::kable(tbl, row.names=FALSE)
+```

From 6b0ceae65361717b71ad9ce01bd35dd9f8dcc454 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 10 Mar 2023 13:23:16 -0500
Subject: [PATCH 62/91] add R plotting function for scatterplot of 2 contrasts
 LFCs color-coded by padj

---
 lib/lcdbwf/R/plotting.R | 77 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)

diff --git a/lib/lcdbwf/R/plotting.R b/lib/lcdbwf/R/plotting.R
index c848f0d9..c850b9dc 100644
--- a/lib/lcdbwf/R/plotting.R
+++ b/lib/lcdbwf/R/plotting.R
@@ -418,3 +418,80 @@ plotSparsity2 <- function(dds){
 }
 
 
+
+
+#' Plot a scatterplot of two contrasts' LFCs, color-coded by significance
+#'
+#' This is edited from the DESeq2 vignette, from the section about independent
+#' filtering. The resulting histogram indicates pvals for those genes kept and
+#' removed before multiple testing adjustment.
+#'
+#' @param res_i DESeq2 results object
+#' @param res_j second DESeq2 results object
+#' @param padj.thr float, p.adj threshold
+#' @param name.col string, gene name column to merge the 2 results, also used for labelling plots
+#' @param label_i, label_j string, label for res_i and res_j
+#' @param return.values boolean,  whether to return the ggplot object (FALSE) or the dataframe (TRUE)
+#' @param' color.palette list of string, colors to use for significance categories 'Both - same LFC sign',
+#'         'Both - opposite LFC sign 'None', label_i, label_j
+
+#' @return Either returns a ggplot object of the scatterplot, or the corresponding dataframe if return.values=TRUE
+
+lfc_scatter <- function(res_i, res_j, padj.thr=0.1, name.col='SYMBOL', label_i=NULL, label_j=NULL,
+                        return.values=FALSE, color.palette=c('#FF3333', "#FF6699", '#999999', '#66CCCC', '#0072B2')) {
+    #  colors from color-blind palette                        red        pink       grey       cyan       blue
+    # check whether the genes match in res_i and res_j, emits a warning if not
+    diff.genes <- c(setdiff(rownames(res_i), rownames(res_j)),
+                    setdiff(rownames(res_j), rownames(res_i))) %>%
+                    unlist() %>%
+                    unique()
+    if( length(diff.genes) > 0 ) {
+        warning(paste0(length(diff.genes),
+                       ' genes were discarded because found in one res but not the other'))
+    }
+
+    # use generic labels if not provided
+    if (is.null(label_i)) {
+        label_i <- 'LFCs contrast 1'
+    }
+    if (is.null(label_j)) {
+        label_j <- 'LFCs contrast 2'
+    }
+
+    # join results into dataframe
+    cols.sub <- c('log2FoldChange', 'padj', name.col)
+    df <- merge(as.data.frame(res_i)[cols.sub],
+                as.data.frame(res_j)[cols.sub],
+                by= name.col)
+    # add significance column
+    df <- df %>%
+        mutate('Significance' = case_when(
+                        (padj.x <= padj.thr) & (padj.y <= padj.thr) & (log2FoldChange.x * log2FoldChange.y >= 0) ~ 'Both - same LFC sign',
+                        (padj.x <= padj.thr) & (padj.y <= padj.thr) & (log2FoldChange.x * log2FoldChange.y < 0) ~ 'Both - opposite LFC sign',
+                        (padj.x <= padj.thr) ~ label_i,
+                        (padj.y <= padj.thr) ~ label_j,
+                        TRUE ~ 'None'))
+
+    # if return.values, return the dataframe now, no need to generate the plot
+    if (return.values == TRUE) {
+        return(df)
+    }
+
+    # Significance as factor, to reorder in the graph
+    df[['Significance']] <- factor(df[['Significance']], levels=c('None', label_j, label_i, 'Both - opposite LFC sign', 'Both - same LFC sign'))
+
+    names(color.palette) <- c('Both - same LFC sign', 'Both - opposite LFC sign', 'None', label_i, label_j)
+
+    p <- ggplot(df %>% arrange(Significance), aes_string(x='log2FoldChange.x', y='log2FoldChange.y',
+                               color='Significance', label=name.col)) +
+            geom_point(size=1) +
+            theme_bw() +
+            scale_color_manual(values=color.palette) +
+            geom_abline(color="#333333", linetype="dashed", size=0.5, alpha=0.7) +
+            geom_hline(yintercept=0, color="#333333", linetype="dashed", size=0.5, alpha=0.7) +
+            geom_vline(xintercept=0, color="#333333", linetype="dashed", size=0.5, alpha=0.7) +
+            xlab(label_i) +
+            ylab(label_j)
+
+    return(p)
+}

From ad2b6e045fcdc025df008a5fa281d7dfc65fbe17 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Wed, 29 Mar 2023 13:27:32 -0400
Subject: [PATCH 63/91] make lcdb-wf snakemake profile name consistent with
 snakemake

---
 include/WRAPPER_SLURM | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/WRAPPER_SLURM b/include/WRAPPER_SLURM
index 393a12fd..841058f4 100755
--- a/include/WRAPPER_SLURM
+++ b/include/WRAPPER_SLURM
@@ -8,7 +8,7 @@
 if [[ ! -e logs ]]; then mkdir -p logs; fi
 
 # use SNAKEMAKE_PROFILE if one is set in the environment variables
-if [ -z "$LCDBWF_SNAKE_PROFILE" ]; then
+if [ -z "$LCDBWF_SNAKEMAKE_PROFILE" ]; then
     if [ -z "$SNAKEMAKE_PROFILE" ]; then
         # no snakemake profile found
         PROFILE_CMD=""
@@ -19,8 +19,8 @@ if [ -z "$LCDBWF_SNAKE_PROFILE" ]; then
         PROFILE_CMD="--profile $SNAKEMAKE_PROFILE"
     fi
 else
-# LCDBWF_SNAKE_PROFILE found, this takes priority if both profile variables are set
-PROFILE_CMD="--profile $LCDBWF_SNAKE_PROFILE"
+# LCDBWF_SNAKEMAKE_PROFILE found, this takes priority if both profile variables are set
+PROFILE_CMD="--profile $LCDBWF_SNAKEMAKE_PROFILE"
 fi
 
 # Run snakemake

From e72a291930203ca53e4789ecd3e980498f1a59a6 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Wed, 29 Mar 2023 13:28:18 -0400
Subject: [PATCH 64/91] fix fastq-dump autobump

---
 workflows/rnaseq/Snakefile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/workflows/rnaseq/Snakefile b/workflows/rnaseq/Snakefile
index fa41b43a..2798827f 100644
--- a/workflows/rnaseq/Snakefile
+++ b/workflows/rnaseq/Snakefile
@@ -138,7 +138,8 @@ if 'Run' in c.sampletable.columns and sum(c.sampletable['Run'].str.startswith('S
             sampletable=_st,
             # limit = 100000, # [TEST SETTINGS]
         resources:
-            mem_mb=autobump(1024),
+            mem_mb=1024,
+            disk_mb=autobump(1024),
             runtime=autobump(120)
         conda:
             '../../wrappers/wrappers/fastq-dump/environment.yaml'

From 7d2be46dd48f056a853f73e28b150e8d4a4bed05 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 30 Mar 2023 06:11:43 -0400
Subject: [PATCH 65/91] update env requirements to latest compatible versions

---
 env-r.yml | 770 ++++++++++++++++++++++++++++--------------------------
 env.yml   | 446 ++++++++++++++++---------------
 2 files changed, 631 insertions(+), 585 deletions(-)

diff --git a/env-r.yml b/env-r.yml
index 4b30a89a..a23ff911 100644
--- a/env-r.yml
+++ b/env-r.yml
@@ -1,387 +1,403 @@
-name: null
 channels:
   - conda-forge
   - bioconda
 dependencies:
-  - _libgcc_mutex=0.1=conda_forge
+  - _libgcc_mutex=0.1
   - _openmp_mutex=4.5=2_gnu
-  - _r-mutex=1.0.1=anacondar_1
-  - binutils_impl_linux-64=2.39=h6ceecb4_0
-  - bioconductor-all=1.32.0=r40hdfd78af_1
-  - bioconductor-annotate=1.68.0=r40hdfd78af_1
-  - bioconductor-annotationdbi=1.52.0=r40hdfd78af_1
-  - bioconductor-annotationhub=2.22.0=r40hdfd78af_1
-  - bioconductor-apeglm=1.12.0=r40h399db7b_1
-  - bioconductor-biobase=2.50.0=r40hd029910_1
-  - bioconductor-biocfilecache=1.14.0=r40hdfd78af_1
-  - bioconductor-biocgenerics=0.36.0=r40hdfd78af_1
-  - bioconductor-biocparallel=1.24.1=r40h399db7b_0
-  - bioconductor-biocversion=3.12.0=r40hdfd78af_1
-  - bioconductor-biomart=2.46.3=r40hdfd78af_0
-  - bioconductor-biostrings=2.58.0=r40hd029910_1
-  - bioconductor-clusterprofiler=3.18.1=r40hdfd78af_0
-  - bioconductor-complexheatmap=2.6.2=r40hdfd78af_1
-  - bioconductor-consensusclusterplus=1.54.0=r40hdfd78af_1
-  - bioconductor-degreport=1.26.0=r40hdfd78af_1
-  - bioconductor-delayedarray=0.16.3=r40hd029910_0
-  - bioconductor-deseq2=1.30.1=r40h399db7b_0
-  - bioconductor-do.db=2.9=r40hdfd78af_10
-  - bioconductor-dose=3.16.0=r40hdfd78af_1
-  - bioconductor-dupradar=1.20.0=r40hdfd78af_1
-  - bioconductor-edger=3.32.1=r40h399db7b_0
-  - bioconductor-enrichplot=1.10.2=r40hdfd78af_0
-  - bioconductor-fgsea=1.16.0=r40h399db7b_1
-  - bioconductor-genefilter=1.72.1=r40hba52eb8_0
-  - bioconductor-geneplotter=1.68.0=r40hdfd78af_1
-  - bioconductor-genomeinfodb=1.26.4=r40hdfd78af_0
-  - bioconductor-genomeinfodbdata=1.2.4=r40hdfd78af_2
-  - bioconductor-genomicalignments=1.26.0=r40hd029910_1
-  - bioconductor-genomicfeatures=1.42.2=r40hdfd78af_0
-  - bioconductor-genomicranges=1.42.0=r40hd029910_1
-  - bioconductor-go.db=3.12.1=r40hdfd78af_1
-  - bioconductor-gosemsim=2.16.1=r40h399db7b_0
-  - bioconductor-graph=1.68.0=r40hd029910_1
-  - bioconductor-graphite=1.36.0=r40hdfd78af_1
-  - bioconductor-ihw=1.18.0=r40hdfd78af_1
-  - bioconductor-interactivedisplaybase=1.28.0=r40hdfd78af_1
-  - bioconductor-iranges=2.24.1=r40hd029910_0
-  - bioconductor-limma=3.46.0=r40hd029910_1
-  - bioconductor-lpsymphony=1.18.0=r40h399db7b_1
-  - bioconductor-matrixgenerics=1.2.1=r40hdfd78af_0
-  - bioconductor-qvalue=2.22.0=r40hdfd78af_1
-  - bioconductor-reactome.db=1.74.0=r40hdfd78af_1
-  - bioconductor-reactomepa=1.34.0=r40hdfd78af_1
-  - bioconductor-rhdf5=2.34.0=r40h399db7b_1
-  - bioconductor-rhdf5filters=1.2.0=r40h399db7b_1
-  - bioconductor-rhdf5lib=1.12.1=r40hd029910_0
-  - bioconductor-rhtslib=1.22.0=r40hd029910_1
-  - bioconductor-rsamtools=2.6.0=r40h399db7b_1
-  - bioconductor-rsubread=2.4.3=r40hd029910_0
-  - bioconductor-rtracklayer=1.50.0=r40h7f5ccec_2
-  - bioconductor-s4vectors=0.28.1=r40hd029910_0
-  - bioconductor-summarizedexperiment=1.20.0=r40hdfd78af_1
-  - bioconductor-sva=3.38.0=r40hd029910_1
-  - bioconductor-tximport=1.18.0=r40hdfd78af_1
-  - bioconductor-xvector=0.30.0=r40hd029910_1
-  - bioconductor-zlibbioc=1.36.0=r40hd029910_1
-  - bwidget=1.9.14=ha770c72_1
-  - bzip2=1.0.8=h7f98852_4
-  - c-ares=1.18.1=h7f98852_0
-  - ca-certificates=2022.9.24=ha878542_0
-  - cairo=1.16.0=ha61ee94_1014
-  - curl=7.86.0=h7bff187_1
-  - expat=2.5.0=h27087fc_0
-  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
-  - font-ttf-inconsolata=3.000=h77eed37_0
-  - font-ttf-source-code-pro=2.038=h77eed37_0
-  - font-ttf-ubuntu=0.83=hab24e00_0
-  - fontconfig=2.14.1=hc2a2eb6_0
+  - _r-mutex=1.0.1
+  - binutils_impl_linux-64=2.40
+  - bioconductor-all=1.40.0
+  - bioconductor-annotate=1.76.0
+  - bioconductor-annotationdbi=1.60.0
+  - bioconductor-annotationhub=3.6.0
+  - bioconductor-apeglm=1.20.0
+  - bioconductor-biobase=2.58.0
+  - bioconductor-biocfilecache=2.6.0
+  - bioconductor-biocgenerics=0.44.0
+  - bioconductor-biocio=1.8.0
+  - bioconductor-biocparallel=1.32.5
+  - bioconductor-biocversion=3.16.0
+  - bioconductor-biomart=2.54.0
+  - bioconductor-biostrings=2.66.0
+  - bioconductor-clusterprofiler=4.6.0
+  - bioconductor-complexheatmap=2.14.0
+  - bioconductor-consensusclusterplus=1.62.0
+  - bioconductor-data-packages=20230202
+  - bioconductor-degreport=1.34.0
+  - bioconductor-delayedarray=0.24.0
+  - bioconductor-deseq2=1.38.0
+  - bioconductor-dose=3.24.0
+  - bioconductor-edger=3.40.0
+  - bioconductor-enrichplot=1.18.0
+  - bioconductor-fgsea=1.24.0
+  - bioconductor-genefilter=1.80.0
+  - bioconductor-geneplotter=1.76.0
+  - bioconductor-genomeinfodb=1.34.8
+  - bioconductor-genomeinfodbdata=1.2.9
+  - bioconductor-genomicalignments=1.34.0
+  - bioconductor-genomicfeatures=1.50.2
+  - bioconductor-genomicranges=1.50.0
+  - bioconductor-ggtree=3.6.0
+  - bioconductor-go.db=3.16.0
+  - bioconductor-gosemsim=2.24.0
+  - bioconductor-hdo.db=0.99.1
+  - bioconductor-ihw=1.26.0
+  - bioconductor-interactivedisplaybase=1.36.0
+  - bioconductor-iranges=2.32.0
+  - bioconductor-keggrest=1.38.0
+  - bioconductor-limma=3.54.0
+  - bioconductor-lpsymphony=1.26.0
+  - bioconductor-matrixgenerics=1.10.0
+  - bioconductor-qvalue=2.30.0
+  - bioconductor-rhdf5=2.42.0
+  - bioconductor-rhdf5filters=1.10.0
+  - bioconductor-rhdf5lib=1.20.0
+  - bioconductor-rhtslib=2.0.0
+  - bioconductor-rsamtools=2.14.0
+  - bioconductor-rtracklayer=1.58.0
+  - bioconductor-s4vectors=0.36.0
+  - bioconductor-summarizedexperiment=1.28.0
+  - bioconductor-sva=3.46.0
+  - bioconductor-treeio=1.22.0
+  - bioconductor-tximport=1.26.0
+  - bioconductor-xvector=0.38.0
+  - bioconductor-zlibbioc=1.44.0
+  - bwidget=1.9.14
+  - bzip2=1.0.8
+  - c-ares=1.18.1
+  - ca-certificates=2022.12.7
+  - cairo=1.16.0
+  - curl=7.87.0
+  - expat=2.5.0
+  - font-ttf-dejavu-sans-mono=2.37
+  - font-ttf-inconsolata=3.000
+  - font-ttf-source-code-pro=2.038
+  - font-ttf-ubuntu=0.83
+  - fontconfig=2.14.2
   - fonts-conda-ecosystem=1=0
   - fonts-conda-forge=1=0
-  - freetype=2.12.1=hca18f0e_0
-  - fribidi=1.0.10=h36c2ea0_0
-  - gcc_impl_linux-64=12.2.0=hcc96c02_19
-  - gettext=0.21.1=h27087fc_0
-  - gfortran_impl_linux-64=12.2.0=h55be85b_19
-  - glpk=5.0=h445213a_0
-  - gmp=6.2.1=h58526e2_0
-  - graphite2=1.3.13=h58526e2_1001
-  - gsl=2.7=he838d99_0
-  - gxx_impl_linux-64=12.2.0=hcc96c02_19
-  - harfbuzz=5.3.0=h418a68e_0
-  - icu=70.1=h27087fc_0
-  - jpeg=9e=h166bdaf_2
-  - kernel-headers_linux-64=2.6.32=he073ed8_15
-  - keyutils=1.6.1=h166bdaf_0
-  - krb5=1.19.3=h3790be6_0
-  - ld_impl_linux-64=2.39=hc81fddc_0
-  - lerc=4.0.0=h27087fc_0
+  - freetype=2.12.1
+  - fribidi=1.0.10
+  - gcc_impl_linux-64=12.2.0
+  - gettext=0.21.1
+  - gfortran_impl_linux-64=12.2.0
+  - glpk=5.0
+  - gmp=6.2.1
+  - graphite2=1.3.13
+  - gsl=2.7
+  - gxx_impl_linux-64=12.2.0
+  - harfbuzz=6.0.0
+  - icu=70.1
+  - jpeg=9e
+  - jq=1.6
+  - kernel-headers_linux-64=2.6.32
+  - keyutils=1.6.1
+  - krb5=1.20.1
+  - ld_impl_linux-64=2.40
+  - lerc=4.0.0
   - libblas=3.9.0=16_linux64_openblas
   - libcblas=3.9.0=16_linux64_openblas
-  - libcurl=7.86.0=h7bff187_1
-  - libdeflate=1.14=h166bdaf_0
-  - libedit=3.1.20191231=he28a2e2_2
-  - libev=4.33=h516909a_1
-  - libffi=3.4.2=h7f98852_5
-  - libgcc-devel_linux-64=12.2.0=h3b97bd3_19
-  - libgcc-ng=12.2.0=h65d4601_19
-  - libgfortran-ng=12.2.0=h69a702a_19
-  - libgfortran5=12.2.0=h337968e_19
-  - libgit2=1.5.0=hde0c96a_1
-  - libglib=2.74.1=h606061b_1
-  - libgomp=12.2.0=h65d4601_19
-  - libiconv=1.17=h166bdaf_0
+  - libcurl=7.87.0
+  - libdeflate=1.17
+  - libedit=3.1.20191231
+  - libev=4.33
+  - libffi=3.4.2
+  - libgcc-devel_linux-64=12.2.0
+  - libgcc-ng=12.2.0
+  - libgfortran-ng=12.2.0
+  - libgfortran5=12.2.0
+  - libgit2=1.5.1
+  - libglib=2.74.1
+  - libgomp=12.2.0
+  - libiconv=1.17
   - liblapack=3.9.0=16_linux64_openblas
-  - libnghttp2=1.47.0=hdcd2b5c_1
-  - libopenblas=0.3.21=pthreads_h78a6416_3
-  - libpng=1.6.38=h753d276_0
-  - libsanitizer=12.2.0=h46fd767_19
-  - libssh2=1.10.0=haa6b8db_3
-  - libstdcxx-devel_linux-64=12.2.0=h3b97bd3_19
-  - libstdcxx-ng=12.2.0=h46fd767_19
-  - libtiff=4.4.0=h55922b4_4
-  - libuuid=2.32.1=h7f98852_1000
-  - libwebp-base=1.2.4=h166bdaf_0
-  - libxcb=1.13=h7f98852_1004
-  - libxml2=2.10.3=h7463322_0
-  - libzlib=1.2.13=h166bdaf_4
-  - make=4.3=hd18ef5c_1
-  - ncurses=6.3=h27087fc_1
-  - openssl=1.1.1s=h166bdaf_0
-  - pandoc=2.19.2=h32600fe_1
-  - pango=1.50.11=h382ae3d_0
-  - pcre2=10.40=hc3806b6_0
-  - pixman=0.40.0=h36c2ea0_0
-  - pthread-stubs=0.4=h36c2ea0_1001
-  - r-ashr=2.2_54=r40h7525677_0
-  - r-askpass=1.1=r40hcfec24a_2
-  - r-assertthat=0.2.1=r40hc72bb7e_2
-  - r-babelgene=22.3=r40hc72bb7e_0
-  - r-backports=1.4.1=r40hcfec24a_0
-  - r-base=4.0.5=hb87df5d_8
-  - r-base64enc=0.1_3=r40hcfec24a_1004
-  - r-bbmle=1.0.25=r40hc72bb7e_0
-  - r-bdsmatrix=1.3_6=r40h06615bd_0
-  - r-bh=1.78.0_0=r40hc72bb7e_0
-  - r-biocmanager=1.30.18=r40hc72bb7e_0
-  - r-bit=4.0.4=r40hcfec24a_0
-  - r-bit64=4.0.5=r40hcfec24a_0
-  - r-bitops=1.0_7=r40h06615bd_0
-  - r-blob=1.2.3=r40hc72bb7e_0
-  - r-brew=1.0_7=r40hc72bb7e_0
-  - r-brio=1.1.3=r40hcfec24a_0
-  - r-broom=1.0.1=r40hc72bb7e_0
-  - r-bslib=0.4.0=r40hc72bb7e_0
-  - r-cachem=1.0.6=r40hcfec24a_0
-  - r-cairo=1.6_0=r40h06615bd_0
-  - r-callr=3.7.2=r40hc72bb7e_0
-  - r-catools=1.18.2=r40h7525677_0
-  - r-checkmate=2.1.0=r40h06615bd_0
-  - r-circlize=0.4.15=r40hc72bb7e_0
-  - r-cli=3.4.1=r40h7525677_0
-  - r-clipr=0.8.0=r40hc72bb7e_0
-  - r-clue=0.3_60=r40hcfec24a_0
-  - r-cluster=2.1.3=r40h8da6f51_0
-  - r-coda=0.19_4=r40hc72bb7e_0
-  - r-codetools=0.2_18=r40hc72bb7e_0
-  - r-colorspace=2.0_3=r40h06615bd_0
-  - r-commonmark=1.8.0=r40h06615bd_0
-  - r-cowplot=1.1.1=r40hc72bb7e_0
-  - r-cpp11=0.4.2=r40hc72bb7e_0
-  - r-crayon=1.5.1=r40hc72bb7e_0
-  - r-credentials=1.3.2=r40hc72bb7e_0
-  - r-crosstalk=1.2.0=r40hc72bb7e_0
-  - r-curl=4.3.2=r40hcfec24a_0
-  - r-data.table=1.14.2=r40hcfec24a_0
-  - r-dbi=1.1.3=r40hc72bb7e_0
-  - r-dbplyr=2.2.1=r40hc72bb7e_0
-  - r-dendextend=1.16.0=r40hc72bb7e_0
-  - r-desc=1.4.2=r40hc72bb7e_0
-  - r-devtools=2.4.4=r40hc72bb7e_0
-  - r-diffobj=0.3.5=r40hcfec24a_0
-  - r-digest=0.6.29=r40h03ef668_0
-  - r-downlit=0.4.2=r40hc72bb7e_0
-  - r-downloader=0.4=r40hc72bb7e_1003
-  - r-dplyr=1.0.10=r40h7525677_0
-  - r-dt=0.25=r40hc72bb7e_0
-  - r-egg=0.4.5=r40hc72bb7e_2
-  - r-ellipsis=0.3.2=r40hcfec24a_0
-  - r-emdbook=1.3.12=r40hc72bb7e_1
-  - r-etrunct=0.1=r40hc72bb7e_1003
-  - r-evaluate=0.16=r40hc72bb7e_0
-  - r-fansi=1.0.3=r40h06615bd_0
-  - r-farver=2.1.1=r40h7525677_0
-  - r-fastmap=1.1.0=r40h03ef668_0
-  - r-fastmatch=1.1_3=r40hcfec24a_0
-  - r-fdrtool=1.2.17=r40hcfec24a_0
-  - r-fontawesome=0.3.0=r40hc72bb7e_0
-  - r-forcats=0.5.2=r40hc72bb7e_0
-  - r-foreach=1.5.2=r40hc72bb7e_0
-  - r-formatr=1.12=r40hc72bb7e_0
-  - r-fs=1.5.2=r40h7525677_1
-  - r-futile.logger=1.4.3=r40hc72bb7e_1003
-  - r-futile.options=1.0.1=r40hc72bb7e_1002
-  - r-gclus=1.3.2=r40hc72bb7e_2
-  - r-generics=0.1.3=r40hc72bb7e_0
-  - r-gert=1.5.0=r40h163148b_2
-  - r-getoptlong=1.0.5=r40hc72bb7e_0
-  - r-ggally=2.1.2=r40hc72bb7e_0
-  - r-ggdendro=0.1.23=r40hc72bb7e_0
-  - r-ggforce=0.3.4=r40h7525677_0
-  - r-ggfun=0.0.7=r40hc72bb7e_0
-  - r-ggnewscale=0.4.7=r40hc72bb7e_0
-  - r-ggplot2=3.3.6=r40hc72bb7e_0
-  - r-ggraph=2.0.6=r40h7525677_0
-  - r-ggrepel=0.9.1=r40h03ef668_0
-  - r-gh=1.3.1=r40hc72bb7e_0
-  - r-gitcreds=0.1.2=r40hc72bb7e_0
-  - r-globaloptions=0.1.2=r40ha770c72_0
-  - r-glue=1.6.2=r40h06615bd_0
-  - r-gplots=3.1.3=r40hc72bb7e_0
-  - r-graphlayouts=0.8.1=r40h7525677_0
-  - r-gridextra=2.3=r40hc72bb7e_1003
-  - r-gtable=0.3.1=r40hc72bb7e_0
-  - r-gtools=3.9.3=r40h06615bd_0
-  - r-heatmaply=1.3.0=r40hc72bb7e_0
-  - r-hexbin=1.28.2=r40h8da6f51_0
-  - r-highr=0.9=r40hc72bb7e_0
-  - r-hms=1.1.2=r40hc72bb7e_0
-  - r-htmltools=0.5.3=r40h7525677_0
-  - r-htmlwidgets=1.5.4=r40hc72bb7e_0
-  - r-httpuv=1.6.6=r40h7525677_0
-  - r-httr=1.4.4=r40hc72bb7e_0
-  - r-igraph=1.3.4=r40hb34fc8a_0
-  - r-ini=0.3.1=r40hc72bb7e_1003
-  - r-invgamma=1.1=r40hc72bb7e_1
-  - r-irlba=2.3.5=r40h5f7b363_0
-  - r-isoband=0.2.5=r40h03ef668_0
-  - r-iterators=1.0.14=r40hc72bb7e_0
-  - r-jquerylib=0.1.4=r40hc72bb7e_0
-  - r-jsonlite=1.8.0=r40h06615bd_0
-  - r-kernsmooth=2.23_20=r40h742201e_0
-  - r-knitr=1.40=r40hc72bb7e_0
-  - r-labeling=0.4.2=r40hc72bb7e_1
-  - r-lambda.r=1.2.4=r40hc72bb7e_1
-  - r-lasso2=1.2_22=r40hcfec24a_0
-  - r-later=1.2.0=r40h03ef668_0
-  - r-lattice=0.20_45=r40hcfec24a_0
-  - r-lazyeval=0.2.2=r40hcfec24a_2
-  - r-lifecycle=1.0.2=r40hc72bb7e_0
-  - r-locfit=1.5_9.4=r40hcfec24a_1
-  - r-logging=0.10_108=r40ha770c72_2
-  - r-magrittr=2.0.3=r40h06615bd_0
-  - r-mass=7.3_58.1=r40h06615bd_0
-  - r-matrix=1.4_1=r40h0154571_0
-  - r-matrixstats=0.62.0=r40h06615bd_0
-  - r-memoise=2.0.1=r40hc72bb7e_0
-  - r-mgcv=1.8_40=r40h0154571_0
-  - r-mime=0.12=r40hcfec24a_0
-  - r-miniui=0.1.1.1=r40hc72bb7e_1002
-  - r-mixsqp=0.3_43=r40h306847c_1
-  - r-mnormt=2.1.0=r40h8da6f51_0
-  - r-msigdbr=7.5.1=r40hc72bb7e_0
-  - r-munsell=0.5.0=r40hc72bb7e_1004
-  - r-mvtnorm=1.1_3=r40h859d828_0
-  - r-nlme=3.1_159=r40h8da6f51_0
-  - r-nozzle.r1=1.1_1.1=r40ha770c72_0
-  - r-numderiv=2016.8_1.1=r40hc72bb7e_3
-  - r-openssl=2.0.3=r40hfaab4ff_0
-  - r-openxlsx=4.2.5=r40h03ef668_0
-  - r-pheatmap=1.0.12=r40hc72bb7e_2
-  - r-pillar=1.8.1=r40hc72bb7e_0
-  - r-pkgbuild=1.3.1=r40hc72bb7e_0
-  - r-pkgconfig=2.0.3=r40hc72bb7e_1
-  - r-pkgdown=2.0.6=r40hc72bb7e_0
-  - r-pkgload=1.3.0=r40hc72bb7e_0
-  - r-plogr=0.2.0=r40hc72bb7e_1003
-  - r-plotly=4.10.0=r40hc72bb7e_0
-  - r-plyr=1.8.7=r40h7525677_0
-  - r-png=0.1_7=r40hcfec24a_1004
-  - r-polyclip=1.10_0=r40h7525677_2
-  - r-praise=1.0.0=r40hc72bb7e_1005
-  - r-prettyunits=1.1.1=r40hc72bb7e_1
-  - r-processx=3.7.0=r40h06615bd_0
-  - r-profvis=0.3.7=r40hcfec24a_0
-  - r-progress=1.2.2=r40hc72bb7e_2
-  - r-promises=1.2.0.1=r40h03ef668_0
-  - r-ps=1.7.1=r40h06615bd_0
-  - r-psych=2.2.5=r40hc72bb7e_0
-  - r-purrr=0.3.4=r40hcfec24a_1
-  - r-qap=0.1_2=r40h8da6f51_0
-  - r-r6=2.5.1=r40hc72bb7e_0
-  - r-ragg=1.2.2=r40hc1f6985_0
-  - r-rappdirs=0.3.3=r40hcfec24a_0
-  - r-rcmdcheck=1.4.0=r40h785f33e_0
-  - r-rcolorbrewer=1.1_3=r40h785f33e_0
-  - r-rcpp=1.0.9=r40h7525677_1
-  - r-rcpparmadillo=0.11.2.3.1=r40h9f5de39_0
-  - r-rcppeigen=0.3.3.9.2=r40h43535f1_0
-  - r-rcppnumerical=0.4_0=r40h03ef668_1
-  - r-rcurl=1.98_1.8=r40h06615bd_0
-  - r-readr=2.1.2=r40h03ef668_0
-  - r-registry=0.5_1=r40hc72bb7e_2
-  - r-rematch2=2.1.2=r40hc72bb7e_1
-  - r-remotes=2.4.2=r40hc72bb7e_0
-  - r-reshape=0.8.9=r40hc72bb7e_0
-  - r-reshape2=1.4.4=r40h03ef668_1
-  - r-rjson=0.2.21=r40h7525677_1
-  - r-rlang=1.0.6=r40h7525677_0
-  - r-rmarkdown=2.16=r40hc72bb7e_0
-  - r-roxygen2=7.2.1=r40h7525677_0
-  - r-rprojroot=2.0.3=r40hc72bb7e_0
-  - r-rsqlite=2.2.8=r40h03ef668_0
-  - r-rstudioapi=0.14=r40hc72bb7e_0
-  - r-rvcheck=0.2.1=r40hc72bb7e_0
-  - r-rversions=2.1.2=r40hc72bb7e_0
-  - r-sass=0.4.2=r40h7525677_0
-  - r-scales=1.2.1=r40hc72bb7e_0
-  - r-scatterpie=0.1.8=r40hc72bb7e_0
-  - r-seriation=1.3.6=r40h8da6f51_0
-  - r-sessioninfo=1.2.2=r40hc72bb7e_0
-  - r-shadowtext=0.1.2=r40hc72bb7e_0
-  - r-shape=1.4.6=r40ha770c72_0
-  - r-shiny=1.7.2=r40h785f33e_0
-  - r-slam=0.1_50=r40hb699f27_1
-  - r-snow=0.4_4=r40hc72bb7e_0
-  - r-sourcetools=0.1.7=r40h03ef668_1002
-  - r-sparsem=1.81=r40h859d828_0
-  - r-spp=1.16.0=r40h52a8340_4
-  - r-squarem=2021.1=r40hc72bb7e_0
-  - r-stringi=1.7.8=r40h30a9eb7_0
-  - r-stringr=1.4.1=r40hc72bb7e_0
-  - r-survival=3.4_0=r40h06615bd_0
-  - r-sys=3.4=r40hcfec24a_0
-  - r-systemfonts=1.0.4=r40hef9c87a_0
-  - r-testthat=3.1.4=r40h7525677_0
-  - r-textshaping=0.3.6=r40h9354b80_2
-  - r-tibble=3.1.8=r40h06615bd_0
-  - r-tidygraph=1.2.2=r40h7525677_0
-  - r-tidyr=1.2.1=r40h7525677_0
-  - r-tidyselect=1.1.2=r40hc72bb7e_0
-  - r-tinytex=0.42=r40hc72bb7e_0
-  - r-tmvnsim=1.0_2=r40h859d828_3
-  - r-truncnorm=1.0_8=r40hcfec24a_1002
-  - r-tsp=1.2_1=r40h06615bd_0
-  - r-tweenr=2.0.2=r40h7525677_0
-  - r-tzdb=0.3.0=r40h7525677_0
-  - r-upsetr=1.4.0=r40hc72bb7e_2
-  - r-urlchecker=1.0.1=r40hc72bb7e_0
-  - r-usethis=2.1.6=r40hc72bb7e_0
-  - r-utf8=1.2.2=r40hcfec24a_0
-  - r-vctrs=0.4.1=r40h7525677_0
-  - r-viridis=0.6.2=r40hc72bb7e_0
-  - r-viridislite=0.4.1=r40hc72bb7e_0
-  - r-vroom=1.5.7=r40h03ef668_0
-  - r-waldo=0.4.0=r40hc72bb7e_0
-  - r-webshot=0.5.4=r40hc72bb7e_0
-  - r-whisker=0.4=r40hc72bb7e_1
-  - r-withr=2.5.0=r40hc72bb7e_0
-  - r-xfun=0.33=r40h7525677_0
-  - r-xml=3.99_0.10=r40h06615bd_0
-  - r-xml2=1.3.3=r40h7525677_1
-  - r-xopen=1.0.0=r40hc72bb7e_1003
-  - r-xtable=1.8_4=r40hc72bb7e_3
-  - r-yaml=2.3.5=r40h06615bd_0
-  - r-yulab.utils=0.0.5=r40hc72bb7e_0
-  - r-zip=2.2.1=r40h06615bd_0
-  - readline=8.1.2=h0f457ee_0
-  - sed=4.8=he412f7d_0
-  - sysroot_linux-64=2.12=he073ed8_15
-  - tk=8.6.12=h27826a3_0
-  - tktable=2.10=hb7b940f_3
-  - xorg-kbproto=1.0.7=h7f98852_1002
-  - xorg-libice=1.0.10=h7f98852_0
-  - xorg-libsm=1.2.3=hd9c2040_1000
-  - xorg-libx11=1.7.2=h7f98852_0
-  - xorg-libxau=1.0.9=h7f98852_0
-  - xorg-libxdmcp=1.1.3=h7f98852_0
-  - xorg-libxext=1.3.4=h7f98852_1
-  - xorg-libxrender=0.9.10=h7f98852_1003
-  - xorg-libxt=1.2.1=h7f98852_2
-  - xorg-renderproto=0.11.1=h7f98852_1002
-  - xorg-xextproto=7.3.0=h7f98852_1002
-  - xorg-xproto=7.0.31=h7f98852_1007
-  - xz=5.2.6=h166bdaf_0
-  - zlib=1.2.13=h166bdaf_4
-  - zstd=1.5.2=h6239696_4
-prefix: /home/dalerr/proj/lcdb-wf/env-r
+  - libnghttp2=1.51.0
+  - libnsl=2.0.0
+  - libopenblas=0.3.21
+  - libpng=1.6.39
+  - libsanitizer=12.2.0
+  - libsqlite=3.40.0
+  - libssh2=1.10.0
+  - libstdcxx-devel_linux-64=12.2.0
+  - libstdcxx-ng=12.2.0
+  - libtiff=4.5.0
+  - libuuid=2.38.1
+  - libwebp-base=1.3.0
+  - libxcb=1.13
+  - libxml2=2.10.3
+  - libzlib=1.2.13
+  - make=4.3
+  - ncurses=6.3
+  - oniguruma=6.9.8
+  - openssl=1.1.1t
+  - pandoc=2.19.2
+  - pango=1.50.14
+  - pcre2=10.40
+  - pixman=0.40.0
+  - pthread-stubs=0.4
+  - python=3.11.0
+  - python_abi=3.11=3_cp311
+  - r-ape=5.7_1
+  - r-aplot=0.1.10
+  - r-ashr=2.2_54
+  - r-askpass=1.1
+  - r-assertthat=0.2.1
+  - r-babelgene=22.9
+  - r-backports=1.4.1
+  - r-base=4.2.2
+  - r-base64enc=0.1_3
+  - r-bbmle=1.0.25
+  - r-bdsmatrix=1.3_6
+  - r-bh=1.81.0_1
+  - r-biocmanager=1.30.20
+  - r-bit=4.0.5
+  - r-bit64=4.0.5
+  - r-bitops=1.0_7
+  - r-blob=1.2.4
+  - r-brew=1.0_8
+  - r-brio=1.1.3
+  - r-broom=1.0.4
+  - r-bslib=0.4.2
+  - r-ca=0.71.1
+  - r-cachem=1.0.7
+  - r-callr=3.7.3
+  - r-circlize=0.4.15
+  - r-cli=3.6.1
+  - r-clipr=0.8.0
+  - r-clue=0.3_64
+  - r-cluster=2.1.4
+  - r-coda=0.19_4
+  - r-codetools=0.2_19
+  - r-colorspace=2.1_0
+  - r-commonmark=1.9.0
+  - r-cowplot=1.1.1
+  - r-cpp11=0.4.3
+  - r-crayon=1.5.2
+  - r-credentials=1.3.2
+  - r-crosstalk=1.2.0
+  - r-curl=4.3.3
+  - r-data.table=1.14.8
+  - r-dbi=1.1.3
+  - r-dbplyr=2.3.2
+  - r-dendextend=1.17.1
+  - r-desc=1.4.2
+  - r-devtools=2.4.5
+  - r-diffobj=0.3.5
+  - r-digest=0.6.31
+  - r-doparallel=1.0.17
+  - r-downlit=0.4.2
+  - r-downloader=0.4
+  - r-dplyr=1.1.1
+  - r-dt=0.27
+  - r-egg=0.4.5
+  - r-ellipsis=0.3.2
+  - r-emdbook=1.3.12
+  - r-etrunct=0.1
+  - r-evaluate=0.20
+  - r-fansi=1.0.4
+  - r-farver=2.1.1
+  - r-fastmap=1.1.1
+  - r-fastmatch=1.1_3
+  - r-fdrtool=1.2.17
+  - r-filelock=1.0.2
+  - r-fontawesome=0.5.0
+  - r-forcats=1.0.0
+  - r-foreach=1.5.2
+  - r-formatr=1.14
+  - r-fs=1.6.1
+  - r-futile.logger=1.4.3
+  - r-futile.options=1.0.1
+  - r-gclus=1.3.2
+  - r-generics=0.1.3
+  - r-gert=1.9.2
+  - r-getoptlong=1.0.5
+  - r-ggally=2.1.2
+  - r-ggdendro=0.1.23
+  - r-ggforce=0.4.1
+  - r-ggfun=0.0.9
+  - r-ggnewscale=0.4.8
+  - r-ggplot2=3.4.1
+  - r-ggplotify=0.1.0
+  - r-ggraph=2.1.0
+  - r-ggrepel=0.9.3
+  - r-gh=1.4.0
+  - r-gitcreds=0.1.2
+  - r-globaloptions=0.1.2
+  - r-glue=1.6.2
+  - r-graphlayouts=0.8.4
+  - r-gridextra=2.3
+  - r-gridgraphics=0.5_1
+  - r-gson=0.1.0
+  - r-gtable=0.3.3
+  - r-heatmaply=1.4.2
+  - r-hexbin=1.28.3
+  - r-highr=0.10
+  - r-hms=1.1.3
+  - r-htmltools=0.5.5
+  - r-htmlwidgets=1.6.2
+  - r-httpuv=1.6.9
+  - r-httr=1.4.5
+  - r-httr2=0.2.2
+  - r-igraph=1.4.1
+  - r-ini=0.3.1
+  - r-invgamma=1.1
+  - r-irlba=2.3.5.1
+  - r-isoband=0.2.7
+  - r-iterators=1.0.14
+  - r-jquerylib=0.1.4
+  - r-jsonlite=1.8.4
+  - r-knitr=1.42
+  - r-labeling=0.4.2
+  - r-lambda.r=1.2.4
+  - r-later=1.3.0
+  - r-lattice=0.20_45
+  - r-lazyeval=0.2.2
+  - r-lifecycle=1.0.3
+  - r-locfit=1.5_9.7
+  - r-logging=0.10_108
+  - r-magrittr=2.0.3
+  - r-mass=7.3_58.3
+  - r-matrix=1.5_3
+  - r-matrixstats=0.63.0
+  - r-memoise=2.0.1
+  - r-mgcv=1.8_42
+  - r-mime=0.12
+  - r-miniui=0.1.1.1
+  - r-mixsqp=0.3_48
+  - r-mnormt=2.1.1
+  - r-msigdbr=7.5.1
+  - r-munsell=0.5.0
+  - r-mvtnorm=1.1_3
+  - r-nlme=3.1_162
+  - r-numderiv=2016.8_1.1
+  - r-openssl=2.0.5
+  - r-openxlsx=4.2.5.2
+  - r-patchwork=1.1.2
+  - r-pheatmap=1.0.12
+  - r-pillar=1.9.0
+  - r-pkgbuild=1.4.0
+  - r-pkgconfig=2.0.3
+  - r-pkgdown=2.0.7
+  - r-pkgload=1.3.2
+  - r-plogr=0.2.0
+  - r-plotly=4.10.1
+  - r-plyr=1.8.8
+  - r-png=0.1_8
+  - r-polyclip=1.10_4
+  - r-praise=1.0.0
+  - r-prettyunits=1.1.1
+  - r-processx=3.8.0
+  - r-profvis=0.3.7
+  - r-progress=1.2.2
+  - r-promises=1.2.0.1
+  - r-ps=1.7.3
+  - r-psych=2.3.3
+  - r-purrr=1.0.1
+  - r-qap=0.1_2
+  - r-r6=2.5.1
+  - r-ragg=1.2.5
+  - r-rappdirs=0.3.3
+  - r-rcmdcheck=1.4.0
+  - r-rcolorbrewer=1.1_3
+  - r-rcpp=1.0.10
+  - r-rcpparmadillo=0.11.4.4.0
+  - r-rcppeigen=0.3.3.9.3
+  - r-rcppnumerical=0.5_0
+  - r-rcurl=1.98_1.10
+  - r-readr=2.1.4
+  - r-registry=0.5_1
+  - r-rematch2=2.1.2
+  - r-remotes=2.4.2
+  - r-reshape=0.8.9
+  - r-reshape2=1.4.4
+  - r-restfulr=0.0.15
+  - r-rjson=0.2.21
+  - r-rlang=1.1.0
+  - r-rmarkdown=2.21
+  - r-roxygen2=7.2.3
+  - r-rprojroot=2.0.3
+  - r-rsqlite=2.3.0
+  - r-rstudioapi=0.14
+  - r-rvcheck=0.2.1
+  - r-rversions=2.1.2
+  - r-sass=0.4.5
+  - r-scales=1.2.1
+  - r-scatterpie=0.1.8
+  - r-seriation=1.4.2
+  - r-sessioninfo=1.2.2
+  - r-shadowtext=0.1.2
+  - r-shape=1.4.6
+  - r-shiny=1.7.4
+  - r-slam=0.1_50
+  - r-snow=0.4_4
+  - r-sourcetools=0.1.7_1
+  - r-sparsem=1.81
+  - r-squarem=2021.1
+  - r-stringi=1.7.12
+  - r-stringr=1.5.0
+  - r-survival=3.5_5
+  - r-sys=3.4.1
+  - r-systemfonts=1.0.4
+  - r-testthat=3.1.7
+  - r-textshaping=0.3.6
+  - r-tibble=3.2.1
+  - r-tidygraph=1.2.3
+  - r-tidyr=1.3.0
+  - r-tidyselect=1.2.0
+  - r-tidytree=0.4.2
+  - r-tinytex=0.44
+  - r-tmvnsim=1.0_2
+  - r-truncnorm=1.0_9
+  - r-tsp=1.2_3
+  - r-tweenr=2.0.2
+  - r-tzdb=0.3.0
+  - r-upsetr=1.4.0
+  - r-urlchecker=1.0.1
+  - r-usethis=2.1.6
+  - r-utf8=1.2.3
+  - r-vctrs=0.6.1
+  - r-viridis=0.6.2
+  - r-viridislite=0.4.1
+  - r-vroom=1.6.1
+  - r-waldo=0.4.0
+  - r-webshot=0.5.4
+  - r-whisker=0.4.1
+  - r-withr=2.5.0
+  - r-xfun=0.38
+  - r-xml=3.99_0.14
+  - r-xml2=1.3.3
+  - r-xopen=1.0.0
+  - r-xtable=1.8_4
+  - r-yaml=2.3.7
+  - r-yulab.utils=0.0.6
+  - r-zip=2.2.2
+  - readline=8.2
+  - sed=4.8
+  - sysroot_linux-64=2.12
+  - tk=8.6.12
+  - tktable=2.10
+  - tzdata=2023c
+  - xorg-kbproto=1.0.7
+  - xorg-libice=1.0.10
+  - xorg-libsm=1.2.3
+  - xorg-libx11=1.8.4
+  - xorg-libxau=1.0.9
+  - xorg-libxdmcp=1.1.3
+  - xorg-libxext=1.3.4
+  - xorg-libxrender=0.9.10
+  - xorg-libxt=1.2.1
+  - xorg-renderproto=0.11.1
+  - xorg-xextproto=7.3.0
+  - xorg-xproto=7.0.31
+  - xz=5.2.6
+  - yaml=0.2.5
+  - zlib=1.2.13
+  - zstd=1.5.2
+  - argcomplete=3.0.5
+  - pip=23.0.1
+  - pyyaml=6.0
+  - setuptools=67.6.1
+  - toml=0.10.2
+  - wheel=0.40.0
+  - xmltodict=0.13.0
+  - yq=3.1.1
diff --git a/env.yml b/env.yml
index 66a8bd01..a47dcab5 100644
--- a/env.yml
+++ b/env.yml
@@ -5,302 +5,185 @@ dependencies:
   - _libgcc_mutex=0.1
   - _openmp_mutex=4.5
   - _r-mutex=1.0.1
-  - alsa-lib=1.2.3.2
-  - amply=0.1.5
-  - appdirs=1.4.4
-  - argcomplete=2.0.0
-  - argh=0.26.2
-  - asttokens=2.0.8
+  - alsa-lib=1.2.8
   - attr=2.5.1
-  - attrs=22.1.0
-  - backcall=0.2.0
   - backports=1.0
   - backports.functools_lru_cache=1.6.4
   - bedtools=2.30.0
-  - binutils_impl_linux-64=2.39
-  - binutils_linux-64=2.39
-  - biopython=1.79
-  - boost-cpp=1.74.0
+  - binutils_impl_linux-64=2.40
   - bowtie=1.3.1
-  - bowtie2=2.5.0
+  - bowtie2=2.5.1
   - brotli=1.0.9
   - brotli-bin=1.0.9
-  - brotlipy=0.7.0
   - bwidget=1.9.14
-  - bx-python=0.9.0
   - bzip2=1.0.8
   - c-ares=1.18.1
-  - ca-certificates=2022.9.24
+  - ca-certificates=2022.12.7
   - cairo=1.16.0
-  - certifi=2022.9.24
-  - cffi=1.15.1
-  - charset-normalizer=2.1.1
-  - click=8.1.3
   - coin-or-cbc=2.10.8
   - coin-or-cgl=0.60.6
   - coin-or-clp=1.17.7
   - coin-or-osi=0.108.7
   - coin-or-utils=2.11.6
   - coincbc=2.10.8
-  - colorama=0.4.6
-  - coloredlogs=15.0.1
-  - colormath=3.0.0
-  - commonmark=0.9.1
-  - configargparse=1.5.3
   - connection_pool=0.0.3
-  - contourpy=1.0.6
-  - cryptography=38.0.2
-  - curl=7.86.0
-  - cutadapt=4.1
-  - cycler=0.11.0
-  - dataclasses=0.8
-  - datrie=0.8.2
+  - curl=7.87.0
   - dbus=1.13.6
-  - decorator=5.1.1
-  - deeptools=3.5.1
-  - deeptoolsintervals=0.1.9
-  - dnaio=0.9.1
-  - docutils=0.19
-  - dpath=2.0.6
-  - exceptiongroup=1.0.0
-  - execnet=1.9.0
-  - executing=1.1.1
   - expat=2.5.0
   - fastq-screen=0.15.2
-  - fastqc=0.11.9
+  - fastqc=0.12.1
   - fftw=3.3.10
-  - filelock=3.8.0
   - font-ttf-dejavu-sans-mono=2.37
   - font-ttf-inconsolata=3.000
   - font-ttf-source-code-pro=2.038
   - font-ttf-ubuntu=0.83
-  - fontconfig=2.14.1
-  - fonts-conda-ecosystem=1
-  - fonts-conda-forge=1
-  - fonttools=4.38.0
+  - fontconfig=2.14.2
+  - fonts-conda-ecosystem=1=0
+  - fonts-conda-forge=1=0
   - freetype=2.12.1
   - fribidi=1.0.10
-  - future=0.18.2
-  - gat=1.3.6
-  - gcc_impl_linux-64=10.4.0
-  - gcc_linux-64=10.4.0
+  - gcc_impl_linux-64=12.2.0
   - gettext=0.21.1
   - gffread=0.12.7
-  - gffutils=0.11.1
-  - gfortran_impl_linux-64=10.4.0
-  - gfortran_linux-64=10.4.0
+  - gfortran_impl_linux-64=12.2.0
   - giflib=5.2.1
-  - gitdb=4.0.9
-  - gitpython=3.1.29
   - glib=2.74.1
   - glib-tools=2.74.1
   - graphite2=1.3.13
   - gsl=2.7
-  - gst-plugins-base=1.18.5
-  - gstreamer=1.20.3
-  - gxx_impl_linux-64=10.4.0
-  - gxx_linux-64=10.4.0
-  - harfbuzz=4.2.0
+  - gst-plugins-base=1.21.3
+  - gstreamer=1.21.3
+  - gstreamer-orc=0.4.33
+  - gxx_impl_linux-64=12.2.0
+  - harfbuzz=6.0.0
   - hdf5=1.12.1
   - hisat2=2.2.1
-  - htslib=1.16
-  - humanfriendly=10.0
-  - icu=69.1
-  - idna=3.4
-  - importlib-metadata=4.11.4
-  - importlib_metadata=4.11.4
-  - importlib_resources=5.10.0
-  - iniconfig=1.1.1
-  - intervalstats=1.01
-  - ipython=8.6.0
+  - htslib=1.17
+  - icu=70.1
+  - importlib_resources=5.12.0
+  - intervalstats=1.01=0
   - isa-l=2.30.0
-  - jack=1.9.18
-  - jedi=0.18.1
-  - jinja2=3.1.2
+  - jack=1.9.22
   - jpeg=9e
-  - jsonschema=4.16.0
-  - jupyter_core=4.11.1
+  - jupyter_core=5.3.0
   - kallisto=0.48.0
   - kernel-headers_linux-64=2.6.32
   - keyutils=1.6.1
-  - kiwisolver=1.4.4
-  - krb5=1.19.3
-  - lcms2=2.13.1
-  - ld_impl_linux-64=2.39
+  - krb5=1.20.1
+  - lame=3.100
+  - lcms2=2.14
+  - ld_impl_linux-64=2.40
   - lerc=4.0.0
   - libblas=3.9.0
   - libbrotlicommon=1.0.9
   - libbrotlidec=1.0.9
   - libbrotlienc=1.0.9
-  - libcap=2.64
+  - libcap=2.66
   - libcblas=3.9.0
-  - libclang=13.0.1
+  - libclang=15.0.7
+  - libclang13=15.0.7
   - libcups=2.3.3
-  - libcurl=7.86.0
+  - libcurl=7.87.0
   - libdb=6.2.32
   - libdeflate=1.13
   - libedit=3.1.20191231
   - libev=4.33
   - libevent=2.1.10
   - libffi=3.4.2
-  - libflac=1.3.4
-  - libgcc-devel_linux-64=10.4.0
+  - libflac=1.4.2
+  - libgcc-devel_linux-64=12.2.0
   - libgcc-ng=12.2.0
+  - libgcrypt=1.10.1
   - libgd=2.3.3
   - libgfortran-ng=12.2.0
   - libgfortran5=12.2.0
   - libglib=2.74.1
   - libgomp=12.2.0
+  - libgpg-error=1.46
+  - libhwloc=2.9.0
   - libiconv=1.17
-  - libjemalloc=5.2.1
   - liblapack=3.9.0
   - liblapacke=3.9.0
-  - libllvm13=13.0.1
-  - libnghttp2=1.47.0
+  - libllvm15=15.0.7
+  - libnghttp2=1.51.0
   - libnsl=2.0.0
   - libogg=1.3.4
   - libopenblas=0.3.21
   - libopus=1.3.1
-  - libpng=1.6.38
-  - libpq=14.5
-  - libsanitizer=10.4.0
-  - libsndfile=1.0.31
-  - libsqlite=3.39.4
+  - libpng=1.6.39
+  - libpq=15.1
+  - libsanitizer=12.2.0
+  - libsndfile=1.2.0
+  - libsqlite=3.40.0
   - libssh2=1.10.0
-  - libstdcxx-devel_linux-64=10.4.0
+  - libstdcxx-devel_linux-64=12.2.0
   - libstdcxx-ng=12.2.0
+  - libsystemd0=252
   - libtiff=4.4.0
-  - libtool=2.4.6
-  - libudev1=251
-  - libuuid=2.32.1
+  - libtool=2.4.7
+  - libudev1=253
+  - libuuid=2.38.1
   - libvorbis=1.3.7
   - libwebp=1.2.4
   - libwebp-base=1.2.4
   - libxcb=1.13
-  - libxkbcommon=1.0.3
-  - libxml2=2.9.12
+  - libxkbcommon=1.5.0
+  - libxml2=2.10.3
   - libzlib=1.2.13
+  - lz4-c=1.9.4
   - lzo=2.10
-  - lzstring=1.0.4
   - make=4.3
-  - markdown=3.4.1
-  - markupsafe=2.1.1
-  - matplotlib=3.6.0
-  - matplotlib-base=3.6.0
-  - matplotlib-inline=0.1.6
-  - multiqc=1.13
-  - munkres=1.1.4
-  - mysql-common=8.0.31
+  - matplotlib-base=3.7.1
+  - mpg123=1.31.3
+  - mysql-common=8.0.32
   - mysql-connector-c=6.1.11
-  - mysql-libs=8.0.31
-  - nbformat=5.7.0
+  - mysql-libs=8.0.32
   - ncurses=6.3
-  - networkx=2.8.7
-  - nspr=4.32
-  - nss=3.78
-  - numpy=1.23.4
-  - openjdk=11.0.1
+  - nspr=4.35
+  - nss=3.89
+  - openjdk=17.0.3
   - openjpeg=2.5.0
-  - openssl=1.1.1q
-  - packaging=21.3
-  - pandas=1.5.1
-  - pandoc=2.19.2
-  - pango=1.50.7
-  - parso=0.8.3
-  - patsy=0.5.3
-  - pbzip2=1.1.13
-  - pcre2=10.37
+  - openssl=1.1.1t
+  - pandoc=3.1.1
+  - pango=1.50.14
+  - pbzip2=1.1.13=0
+  - pcre2=10.40
   - perl=5.32.1
   - perl-gd=2.76
   - perl-gdgraph=1.54
   - perl-gdtextutil=0.86
-  - pexpect=4.8.0
-  - picard=2.27.4
-  - pickleshare=0.7.5
+  - picard=3.0.0
   - pigz=2.6
-  - pillow=9.2.0
-  - pip=22.3
   - pixman=0.40.0
-  - pkgutil-resolve-name=1.3.10
-  - plac=1.3.5
-  - plotly=5.11.0
-  - pluggy=1.0.0
   - preseq=3.2.0
-  - prompt-toolkit=3.0.31
-  - psutil=5.9.3
+  - prompt_toolkit=3.0.38
   - pthread-stubs=0.4
-  - ptyprocess=0.7.0
-  - pulp=2.6.0
-  - pulseaudio=14.0
+  - pulseaudio=16.1
   - pure_eval=0.2.2
-  - py2bit=0.3.0
-  - pybedtools=0.9.0
-  - pybigwig=0.3.18
-  - pycparser=2.21
-  - pyfaidx=0.7.1
-  - pygments=2.13.0
-  - pyopenssl=22.1.0
-  - pyparsing=3.0.9
-  - pyqt=5.15.4
-  - pyqt5-sip=12.9.0
-  - pyrsistent=0.18.1
-  - pysam=0.19.1
-  - pysocks=1.7.1
-  - pytest=7.2.0
-  - pytest-xdist=3.0.2
-  - python=3.10.6
-  - python-dateutil=2.8.2
-  - python-fastjsonschema=2.16.2
+  - pyqt=5.15.7
+  - python=3.10.8
+  - python-fastjsonschema=2.16.3
   - python-isal=1.1.0
-  - python-lzo=1.14
-  - python_abi=3.10
-  - pytz=2022.5
-  - pyvcf3=1.0.3
-  - pyyaml=6.0
-  - qt-main=5.15.2
-  - r-base=4.1.3
-  - ratelimiter=1.2.0
-  - readline=8.1.2
-  - requests=2.28.1
-  - reretry=0.11.1
-  - rich=12.6.0
-  - rich-click=1.5.2
-  - rseqc=5.0.1
-  - salmon=1.9.0
+  - python_abi=3.10=3_cp310
+  - qt-main=5.15.6
+  - r-base=4.2.2
+  - readline=8.2
+  - salmon=0.8.1=0
   - samtools=1.16.1
-  - scipy=1.9.3
-  - seaborn=0.12.1
-  - seaborn-base=0.12.1
+  - seaborn-base=0.12.2
   - sed=4.8
-  - setuptools=65.5.0
-  - simplejson=3.17.6
-  - sip=6.5.1
-  - six=1.16.0
-  - smart_open=6.2.0
-  - smmap=3.0.5
-  - snakemake-minimal=7.17.1
-  - spectra=0.0.11
-  - sqlite=3.39.4
+  - smart_open=6.3.0
+  - snakemake-minimal=7.25.0
   - sra-tools=2.9.6
-  - stack_data=0.5.1
-  - star=2.7.10a
-  - statsmodels=0.13.2
-  - stopit=1.1.2
-  - subread=2.0.1
+  - stack_data=0.6.2
+  - star=2.7.10b
+  - subread=2.0.3
   - sysroot_linux-64=2.12
-  - tabulate=0.9.0
-  - tbb=2021.6.0
-  - tenacity=8.1.0
+  - tbb=2021.8.0
   - tk=8.6.12
   - tktable=2.10
-  - toml=0.10.2
-  - tomli=2.0.1
-  - toposort=1.7
-  - tornado=6.2
-  - trackhub=0.2.4
-  - traitlets=5.5.0
-  - typing_extensions=4.4.0
-  - tzdata=2022f
+  - typing_extensions=4.5.0
+  - tzdata=2023c
   - ucsc-bedgraphtobigwig=377
   - ucsc-bedsort=377
   - ucsc-bedtobigbed=377
@@ -312,27 +195,174 @@ dependencies:
   - ucsc-oligomatch=377
   - ucsc-twobittofa=377
   - ucsc-wigtobigwig=377
-  - unicodedata2=15.0.0
-  - urllib3=1.26.11
-  - wcwidth=0.2.5
-  - wheel=0.37.1
-  - wrapt=1.14.1
-  - xopen=1.6.0
+  - xcb-util=0.4.0
+  - xcb-util-image=0.4.0
+  - xcb-util-keysyms=0.4.0
+  - xcb-util-renderutil=0.3.9
+  - xcb-util-wm=0.4.1
+  - xkeyboard-config=2.38
+  - xorg-fixesproto=5.0
+  - xorg-inputproto=2.3.2
   - xorg-kbproto=1.0.7
   - xorg-libice=1.0.10
   - xorg-libsm=1.2.3
-  - xorg-libx11=1.7.2
+  - xorg-libx11=1.8.4
   - xorg-libxau=1.0.9
   - xorg-libxdmcp=1.1.3
   - xorg-libxext=1.3.4
+  - xorg-libxfixes=5.0.3
+  - xorg-libxi=1.7.10
   - xorg-libxrender=0.9.10
   - xorg-libxt=1.2.1
+  - xorg-libxtst=1.2.3
+  - xorg-recordproto=1.14.2
   - xorg-renderproto=0.11.1
   - xorg-xextproto=7.3.0
   - xorg-xproto=7.0.31
   - xz=5.2.6
   - yaml=0.2.5
-  - yte=1.5.1
-  - zipp=3.10.0
   - zlib=1.2.13
   - zstd=1.5.2
+  - amply=0.1.5
+  - appdirs=1.4.4
+  - argcomplete=3.0.5
+  - argh=0.27.2
+  - asttokens=2.2.1
+  - attrs=22.2.0
+  - backcall=0.2.0
+  - backports.functools_lru_cache=1.6.4
+  - biopython=1.81
+  - brotlipy=0.7.0
+  - bx-python=0.9.0
+  - certifi=2022.12.7
+  - cffi=1.15.1
+  - charset-normalizer=2.1.1
+  - click=8.1.3
+  - colorama=0.4.6
+  - coloredlogs=15.0.1
+  - colormath=3.0.0
+  - configargparse=1.5.3
+  - connection_pool=0.0.3
+  - contourpy=1.0.7
+  - cryptography=39.0.0
+  - cutadapt=4.3
+  - cycler=0.11.0
+  - datrie=0.8.2
+  - decorator=5.1.1
+  - deeptools=3.5.1
+  - deeptoolsintervals=0.1.9
+  - dnaio=0.10.0
+  - docutils=0.19
+  - dpath=2.1.5
+  - exceptiongroup=1.1.1
+  - execnet=1.9.0
+  - executing=1.2.0
+  - python-fastjsonschema=2.16.3
+  - filelock=3.10.7
+  - fonttools=4.39.3
+  - future=0.18.3
+  - gat=1.3.6
+  - gffutils=0.11.1
+  - gitdb=4.0.10
+  - gitpython=3.1.31
+  - humanfriendly=10.0
+  - idna=3.4
+  - importlib-metadata=6.1.0
+  - importlib-resources=5.12.0
+  - iniconfig=2.0.0
+  - ipython=8.11.0
+  - python-isal=1.1.0
+  - jedi=0.18.2
+  - jinja2=3.1.2
+  - jsonschema=4.17.3
+  - jupyter_core=5.3.0
+  - kiwisolver=1.4.4
+  - lzstring=1.0.4
+  - markdown=3.4.3
+  - markdown-it-py=2.2.0
+  - markupsafe=2.1.2
+  - matplotlib=3.7.1
+  - matplotlib-inline=0.1.6
+  - mdurl=0.1.0
+  - multiqc=1.14
+  - munkres=1.1.4
+  - nbformat=5.8.0
+  - networkx=3.0
+  - numpy=1.23.5
+  - packaging=23.0
+  - pandas=1.5.3
+  - parso=0.8.3
+  - patsy=0.5.3
+  - pexpect=4.8.0
+  - pickleshare=0.7.5
+  - pillow=9.2.0
+  - pip=23.0.1
+  - pkgutil-resolve-name=1.3.10
+  - plac=1.3.5
+  - platformdirs=3.2.0
+  - plotly=5.13.1
+  - pluggy=1.0.0
+  - ply=3.11
+  - pooch=1.7.0
+  - prompt-toolkit=3.0.38
+  - psutil=5.9.4
+  - ptyprocess=0.7.0
+  - pulp=2.7.0
+  - pure_eval=0.2.2
+  - py2bit=0.3.0
+  - pybedtools=0.9.0
+  - pybigwig=0.3.18
+  - pycparser=2.21
+  - pyfaidx=0.7.2.1
+  - pygments=2.14.0
+  - pyopenssl=23.1.1
+  - pyparsing=3.0.9
+  - pyqt=5.15.7
+  - pyqt5-sip=12.11.0
+  - pyrsistent=0.19.3
+  - pysam=0.20.0
+  - pysocks=1.7.1
+  - pytest=7.2.2
+  - pytest-xdist=3.2.1
+  - python-dateutil=2.8.2
+  - python-lzo=1.14
+  - pytz=2023.3
+  - pyvcf3=1.0.3
+  - pyyaml=6.0
+  - requests=2.28.2
+  - reretry=0.11.8
+  - rich=13.3.3
+  - rich-click=1.6.1
+  - rseqc=5.0.1
+  - scipy=1.10.1
+  - seaborn=0.12.2
+  - setuptools=67.6.1
+  - simplejson=3.18.4
+  - sip=6.7.7
+  - six=1.16.0
+  - smart-open=6.3.0
+  - smmap=3.0.5
+  - snakemake=7.25.0
+  - spectra=0.0.11
+  - stack_data=0.6.2
+  - statsmodels=0.13.5
+  - stopit=1.1.2
+  - tabulate=0.9.0
+  - tenacity=8.2.2
+  - throttler=1.2.1
+  - toml=0.10.2
+  - tomli=2.0.1
+  - toposort=1.10
+  - tornado=6.2
+  - trackhub=0.2.4
+  - traitlets=5.9.0
+  - typing-extensions=4.5.0
+  - unicodedata2=15.0.0
+  - urllib3=1.26.15
+  - wcwidth=0.2.6
+  - wheel=0.40.0
+  - wrapt=1.15.0
+  - xopen=1.7.0
+  - yte=1.5.1
+  - zipp=3.15.0
+  - zstandard=0.19.0

From f48e7a7fbd90a5936b44b081a9b572caa2575e1a Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 30 Mar 2023 08:46:54 -0400
Subject: [PATCH 66/91] update broken ERCC link

---
 include/reference_configs/ERCC.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/reference_configs/ERCC.yaml b/include/reference_configs/ERCC.yaml
index cea79ccc..22aa25af 100644
--- a/include/reference_configs/ERCC.yaml
+++ b/include/reference_configs/ERCC.yaml
@@ -2,14 +2,14 @@ references:
   ercc:
     srm2374:
       genome:
-        url: 'https://www-s.nist.gov/srmors/certificates/documents/SRM2374_Sequence_v1.FASTA'
+        url: 'https://tsapps.nist.gov/srmext/certificates/documents/SRM2374_Sequence_v1.FASTA'
         postprocess: "lib.postprocess.ercc.fasta_postprocess"
         indexes:
           - 'bowtie2'
           - 'hisat2'
           - 'star'
       annotation:
-        url: 'https://www-s.nist.gov/srmors/certificates/documents/SRM2374_Sequence_v1.FASTA'
+        url: 'https://tsapps.nist.gov/srmext/certificates/documents/SRM2374_Sequence_v1.FASTA'
         postprocess: "lib.postprocess.ercc.gtf_postprocess"
 
     fisher92:

From 682cf2a7ae971675c2b6e3bcf7b61b1bad536feb Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 30 Mar 2023 10:47:41 -0400
Subject: [PATCH 67/91] fix salmon version requirements

---
 env.yml | 386 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 197 insertions(+), 189 deletions(-)

diff --git a/env.yml b/env.yml
index a47dcab5..e7d7a61f 100644
--- a/env.yml
+++ b/env.yml
@@ -5,120 +5,168 @@ dependencies:
   - _libgcc_mutex=0.1
   - _openmp_mutex=4.5
   - _r-mutex=1.0.1
-  - alsa-lib=1.2.8
+  - alsa-lib=1.2.3.2
+  - amply=0.1.5
+  - appdirs=1.4.4
+  - argcomplete=3.0.5
+  - argh=0.27.2
+  - asttokens=2.2.1
   - attr=2.5.1
+  - attrs=22.2.0
+  - backcall=0.2.0
   - backports=1.0
   - backports.functools_lru_cache=1.6.4
   - bedtools=2.30.0
-  - binutils_impl_linux-64=2.40
+  - binutils_impl_linux-64=2.39
+  - binutils_linux-64=2.39
+  - biopython=1.81
+  - boost-cpp=1.74.0
   - bowtie=1.3.1
   - bowtie2=2.5.1
   - brotli=1.0.9
   - brotli-bin=1.0.9
+  - brotlipy=0.7.0
   - bwidget=1.9.14
+  - bx-python=0.9.0
   - bzip2=1.0.8
   - c-ares=1.18.1
   - ca-certificates=2022.12.7
   - cairo=1.16.0
+  - certifi=2022.12.7
+  - cffi=1.15.1
+  - charset-normalizer=2.1.1
+  - click=8.1.3
   - coin-or-cbc=2.10.8
   - coin-or-cgl=0.60.6
   - coin-or-clp=1.17.7
   - coin-or-osi=0.108.7
   - coin-or-utils=2.11.6
   - coincbc=2.10.8
+  - colorama=0.4.6
+  - coloredlogs=15.0.1
+  - colormath=3.0.0
+  - configargparse=1.5.3
   - connection_pool=0.0.3
-  - curl=7.87.0
+  - contourpy=1.0.7
+  - cryptography=39.0.0
+  - curl=7.86.0
+  - cutadapt=4.3
+  - cycler=0.11.0
+  - datrie=0.8.2
   - dbus=1.13.6
+  - decorator=5.1.1
+  - deeptools=3.5.1
+  - deeptoolsintervals=0.1.9
+  - dnaio=0.10.0
+  - docutils=0.19
+  - dpath=2.1.5
+  - exceptiongroup=1.1.1
+  - execnet=1.9.0
+  - executing=1.2.0
   - expat=2.5.0
   - fastq-screen=0.15.2
   - fastqc=0.12.1
   - fftw=3.3.10
+  - filelock=3.10.7
   - font-ttf-dejavu-sans-mono=2.37
   - font-ttf-inconsolata=3.000
   - font-ttf-source-code-pro=2.038
   - font-ttf-ubuntu=0.83
   - fontconfig=2.14.2
-  - fonts-conda-ecosystem=1=0
-  - fonts-conda-forge=1=0
+  - fonts-conda-ecosystem=1
+  - fonts-conda-forge=1
+  - fonttools=4.39.3
   - freetype=2.12.1
   - fribidi=1.0.10
-  - gcc_impl_linux-64=12.2.0
+  - future=0.18.3
+  - gat=1.3.6
+  - gcc_impl_linux-64=10.4.0
+  - gcc_linux-64=10.4.0
   - gettext=0.21.1
   - gffread=0.12.7
-  - gfortran_impl_linux-64=12.2.0
+  - gffutils=0.11.1
+  - gfortran_impl_linux-64=10.4.0
+  - gfortran_linux-64=10.4.0
   - giflib=5.2.1
+  - gitdb=4.0.10
+  - gitpython=3.1.31
   - glib=2.74.1
   - glib-tools=2.74.1
   - graphite2=1.3.13
   - gsl=2.7
-  - gst-plugins-base=1.21.3
-  - gstreamer=1.21.3
-  - gstreamer-orc=0.4.33
-  - gxx_impl_linux-64=12.2.0
-  - harfbuzz=6.0.0
+  - gst-plugins-base=1.18.5
+  - gstreamer=1.20.3
+  - gxx_impl_linux-64=10.4.0
+  - gxx_linux-64=10.4.0
+  - harfbuzz=4.2.0
   - hdf5=1.12.1
   - hisat2=2.2.1
-  - htslib=1.17
-  - icu=70.1
+  - htslib=1.16
+  - humanfriendly=10.0
+  - icu=69.1
+  - idna=3.4
+  - importlib-metadata=6.1.0
   - importlib_resources=5.12.0
-  - intervalstats=1.01=0
+  - iniconfig=2.0.0
+  - intervalstats=1.01
+  - ipython=8.11.0
   - isa-l=2.30.0
-  - jack=1.9.22
+  - jack=1.9.18
+  - jedi=0.18.2
+  - jinja2=3.1.2
   - jpeg=9e
+  - jsonschema=4.17.3
   - jupyter_core=5.3.0
   - kallisto=0.48.0
   - kernel-headers_linux-64=2.6.32
   - keyutils=1.6.1
-  - krb5=1.20.1
-  - lame=3.100
+  - kiwisolver=1.4.4
+  - krb5=1.19.3
   - lcms2=2.14
-  - ld_impl_linux-64=2.40
+  - ld_impl_linux-64=2.39
   - lerc=4.0.0
   - libblas=3.9.0
   - libbrotlicommon=1.0.9
   - libbrotlidec=1.0.9
   - libbrotlienc=1.0.9
-  - libcap=2.66
+  - libcap=2.64
   - libcblas=3.9.0
-  - libclang=15.0.7
-  - libclang13=15.0.7
+  - libclang=13.0.1
   - libcups=2.3.3
-  - libcurl=7.87.0
+  - libcurl=7.86.0
   - libdb=6.2.32
   - libdeflate=1.13
   - libedit=3.1.20191231
   - libev=4.33
   - libevent=2.1.10
   - libffi=3.4.2
-  - libflac=1.4.2
-  - libgcc-devel_linux-64=12.2.0
+  - libflac=1.3.4
+  - libgcc-devel_linux-64=10.4.0
   - libgcc-ng=12.2.0
-  - libgcrypt=1.10.1
   - libgd=2.3.3
   - libgfortran-ng=12.2.0
   - libgfortran5=12.2.0
   - libglib=2.74.1
   - libgomp=12.2.0
-  - libgpg-error=1.46
-  - libhwloc=2.9.0
+  - libhwloc=2.8.0
   - libiconv=1.17
+  - libjemalloc=5.3.0
   - liblapack=3.9.0
   - liblapacke=3.9.0
-  - libllvm15=15.0.7
+  - libllvm13=13.0.1
   - libnghttp2=1.51.0
   - libnsl=2.0.0
   - libogg=1.3.4
   - libopenblas=0.3.21
   - libopus=1.3.1
   - libpng=1.6.39
-  - libpq=15.1
-  - libsanitizer=12.2.0
-  - libsndfile=1.2.0
+  - libpq=14.5
+  - libsanitizer=10.4.0
+  - libsndfile=1.0.31
   - libsqlite=3.40.0
   - libssh2=1.10.0
-  - libstdcxx-devel_linux-64=12.2.0
+  - libstdcxx-devel_linux-64=10.4.0
   - libstdcxx-ng=12.2.0
-  - libsystemd0=252
   - libtiff=4.4.0
   - libtool=2.4.7
   - libudev1=253
@@ -127,187 +175,99 @@ dependencies:
   - libwebp=1.2.4
   - libwebp-base=1.2.4
   - libxcb=1.13
-  - libxkbcommon=1.5.0
-  - libxml2=2.10.3
+  - libxkbcommon=1.0.3
+  - libxml2=2.9.14
   - libzlib=1.2.13
-  - lz4-c=1.9.4
   - lzo=2.10
-  - make=4.3
-  - matplotlib-base=3.7.1
-  - mpg123=1.31.3
-  - mysql-common=8.0.32
-  - mysql-connector-c=6.1.11
-  - mysql-libs=8.0.32
-  - ncurses=6.3
-  - nspr=4.35
-  - nss=3.89
-  - openjdk=17.0.3
-  - openjpeg=2.5.0
-  - openssl=1.1.1t
-  - pandoc=3.1.1
-  - pango=1.50.14
-  - pbzip2=1.1.13=0
-  - pcre2=10.40
-  - perl=5.32.1
-  - perl-gd=2.76
-  - perl-gdgraph=1.54
-  - perl-gdtextutil=0.86
-  - picard=3.0.0
-  - pigz=2.6
-  - pixman=0.40.0
-  - preseq=3.2.0
-  - prompt_toolkit=3.0.38
-  - pthread-stubs=0.4
-  - pulseaudio=16.1
-  - pure_eval=0.2.2
-  - pyqt=5.15.7
-  - python=3.10.8
-  - python-fastjsonschema=2.16.3
-  - python-isal=1.1.0
-  - python_abi=3.10=3_cp310
-  - qt-main=5.15.6
-  - r-base=4.2.2
-  - readline=8.2
-  - salmon=0.8.1=0
-  - samtools=1.16.1
-  - seaborn-base=0.12.2
-  - sed=4.8
-  - smart_open=6.3.0
-  - snakemake-minimal=7.25.0
-  - sra-tools=2.9.6
-  - stack_data=0.6.2
-  - star=2.7.10b
-  - subread=2.0.3
-  - sysroot_linux-64=2.12
-  - tbb=2021.8.0
-  - tk=8.6.12
-  - tktable=2.10
-  - typing_extensions=4.5.0
-  - tzdata=2023c
-  - ucsc-bedgraphtobigwig=377
-  - ucsc-bedsort=377
-  - ucsc-bedtobigbed=377
-  - ucsc-bigwigmerge=377
-  - ucsc-fetchchromsizes=377
-  - ucsc-genepredtobed=377
-  - ucsc-gtftogenepred=377
-  - ucsc-liftover=377
-  - ucsc-oligomatch=377
-  - ucsc-twobittofa=377
-  - ucsc-wigtobigwig=377
-  - xcb-util=0.4.0
-  - xcb-util-image=0.4.0
-  - xcb-util-keysyms=0.4.0
-  - xcb-util-renderutil=0.3.9
-  - xcb-util-wm=0.4.1
-  - xkeyboard-config=2.38
-  - xorg-fixesproto=5.0
-  - xorg-inputproto=2.3.2
-  - xorg-kbproto=1.0.7
-  - xorg-libice=1.0.10
-  - xorg-libsm=1.2.3
-  - xorg-libx11=1.8.4
-  - xorg-libxau=1.0.9
-  - xorg-libxdmcp=1.1.3
-  - xorg-libxext=1.3.4
-  - xorg-libxfixes=5.0.3
-  - xorg-libxi=1.7.10
-  - xorg-libxrender=0.9.10
-  - xorg-libxt=1.2.1
-  - xorg-libxtst=1.2.3
-  - xorg-recordproto=1.14.2
-  - xorg-renderproto=0.11.1
-  - xorg-xextproto=7.3.0
-  - xorg-xproto=7.0.31
-  - xz=5.2.6
-  - yaml=0.2.5
-  - zlib=1.2.13
-  - zstd=1.5.2
-  - amply=0.1.5
-  - appdirs=1.4.4
-  - argcomplete=3.0.5
-  - argh=0.27.2
-  - asttokens=2.2.1
-  - attrs=22.2.0
-  - backcall=0.2.0
-  - backports.functools_lru_cache=1.6.4
-  - biopython=1.81
-  - brotlipy=0.7.0
-  - bx-python=0.9.0
-  - certifi=2022.12.7
-  - cffi=1.15.1
-  - charset-normalizer=2.1.1
-  - click=8.1.3
-  - colorama=0.4.6
-  - coloredlogs=15.0.1
-  - colormath=3.0.0
-  - configargparse=1.5.3
-  - connection_pool=0.0.3
-  - contourpy=1.0.7
-  - cryptography=39.0.0
-  - cutadapt=4.3
-  - cycler=0.11.0
-  - datrie=0.8.2
-  - decorator=5.1.1
-  - deeptools=3.5.1
-  - deeptoolsintervals=0.1.9
-  - dnaio=0.10.0
-  - docutils=0.19
-  - dpath=2.1.5
-  - exceptiongroup=1.1.1
-  - execnet=1.9.0
-  - executing=1.2.0
-  - python-fastjsonschema=2.16.3
-  - filelock=3.10.7
-  - fonttools=4.39.3
-  - future=0.18.3
-  - gat=1.3.6
-  - gffutils=0.11.1
-  - gitdb=4.0.10
-  - gitpython=3.1.31
-  - humanfriendly=10.0
-  - idna=3.4
-  - importlib-metadata=6.1.0
-  - importlib-resources=5.12.0
-  - iniconfig=2.0.0
-  - ipython=8.11.0
-  - python-isal=1.1.0
-  - jedi=0.18.2
-  - jinja2=3.1.2
-  - jsonschema=4.17.3
-  - jupyter_core=5.3.0
-  - kiwisolver=1.4.4
   - lzstring=1.0.4
+  - make=4.3
   - markdown=3.4.3
   - markdown-it-py=2.2.0
   - markupsafe=2.1.2
   - matplotlib=3.7.1
+  - matplotlib-base=3.7.1
   - matplotlib-inline=0.1.6
   - mdurl=0.1.0
   - multiqc=1.14
   - munkres=1.1.4
+  - mysql-common=8.0.32
+  - mysql-connector-c=6.1.11
+  - mysql-libs=8.0.32
   - nbformat=5.8.0
+  - ncbi-vdb=3.0.2
+  - ncurses=6.3
   - networkx=3.0
+  - nspr=4.35
+  - nss=3.89
   - numpy=1.23.5
+  - openjdk=11.0.1
+  - openjpeg=2.5.0
+  - openssl=1.1.1t
+  - ossuuid=1.6.2
   - packaging=23.0
   - pandas=1.5.3
+  - pandoc=3.1.1
+  - pango=1.50.7
   - parso=0.8.3
   - patsy=0.5.3
+  - pbzip2=1.1.13
+  - pcre2=10.37
+  - perl=5.32.1
+  - perl-alien-build=2.48
+  - perl-alien-libxml2=0.17
+  - perl-business-isbn=3.007
+  - perl-business-isbn-data=20210112.006
+  - perl-capture-tiny=0.48
+  - perl-carp=1.50
+  - perl-constant=1.33
+  - perl-data-dumper=2.183
+  - perl-encode=3.19
+  - perl-exporter=5.74
+  - perl-extutils-makemaker=7.70
+  - perl-ffi-checklib=0.28
+  - perl-file-chdir=0.1011
+  - perl-file-path=2.18
+  - perl-file-temp=0.2304
+  - perl-file-which=1.24
+  - perl-gd=2.76
+  - perl-gdgraph=1.54
+  - perl-gdtextutil=0.86
+  - perl-importer=0.026
+  - perl-mime-base64=3.16
+  - perl-parent=0.241
+  - perl-path-tiny=0.124
+  - perl-pathtools=3.75
+  - perl-scope-guard=0.21
+  - perl-storable=3.15
+  - perl-sub-info=0.002
+  - perl-term-table=0.016
+  - perl-test2-suite=0.000145
+  - perl-uri=5.12
+  - perl-xml-libxml=2.0207
+  - perl-xml-namespacesupport=1.12
+  - perl-xml-sax=1.02
+  - perl-xml-sax-base=1.09
   - pexpect=4.8.0
+  - picard=3.0.0
   - pickleshare=0.7.5
+  - pigz=2.6
   - pillow=9.2.0
   - pip=23.0.1
+  - pixman=0.40.0
   - pkgutil-resolve-name=1.3.10
   - plac=1.3.5
   - platformdirs=3.2.0
-  - plotly=5.13.1
+  - plotly=5.14.0
   - pluggy=1.0.0
-  - ply=3.11
   - pooch=1.7.0
+  - preseq=3.2.0
   - prompt-toolkit=3.0.38
+  - prompt_toolkit=3.0.38
   - psutil=5.9.4
+  - pthread-stubs=0.4
   - ptyprocess=0.7.0
   - pulp=2.7.0
+  - pulseaudio=14.0
   - pure_eval=0.2.2
   - py2bit=0.3.0
   - pybedtools=0.9.0
@@ -317,39 +277,58 @@ dependencies:
   - pygments=2.14.0
   - pyopenssl=23.1.1
   - pyparsing=3.0.9
-  - pyqt=5.15.7
-  - pyqt5-sip=12.11.0
+  - pyqt=5.15.4
+  - pyqt5-sip=12.9.0
   - pyrsistent=0.19.3
   - pysam=0.20.0
   - pysocks=1.7.1
   - pytest=7.2.2
   - pytest-xdist=3.2.1
+  - python=3.10.8
   - python-dateutil=2.8.2
+  - python-fastjsonschema=2.16.3
+  - python-isal=1.1.0
   - python-lzo=1.14
+  - python_abi=3.10
   - pytz=2023.3
   - pyvcf3=1.0.3
   - pyyaml=6.0
+  - qt-main=5.15.2
+  - r-base=4.1.3
+  - readline=8.2
   - requests=2.28.2
   - reretry=0.11.8
   - rich=13.3.3
   - rich-click=1.6.1
   - rseqc=5.0.1
+  - salmon=1.10.1
+  - samtools=1.16.1
   - scipy=1.10.1
   - seaborn=0.12.2
+  - seaborn-base=0.12.2
+  - sed=4.8
   - setuptools=67.6.1
   - simplejson=3.18.4
-  - sip=6.7.7
+  - sip=6.5.1
   - six=1.16.0
-  - smart-open=6.3.0
+  - smart_open=6.3.0
   - smmap=3.0.5
-  - snakemake=7.25.0
+  - snakemake-minimal=7.25.0
   - spectra=0.0.11
+  - sqlite=3.40.0
+  - sra-tools=3.0.3
   - stack_data=0.6.2
+  - star=2.7.10b
   - statsmodels=0.13.5
   - stopit=1.1.2
+  - subread=2.0.3
+  - sysroot_linux-64=2.12
   - tabulate=0.9.0
+  - tbb=2021.7.0
   - tenacity=8.2.2
   - throttler=1.2.1
+  - tk=8.6.12
+  - tktable=2.10
   - toml=0.10.2
   - tomli=2.0.1
   - toposort=1.10
@@ -357,12 +336,41 @@ dependencies:
   - trackhub=0.2.4
   - traitlets=5.9.0
   - typing-extensions=4.5.0
+  - typing_extensions=4.5.0
+  - tzdata=2023c
+  - ucsc-bedgraphtobigwig=377
+  - ucsc-bedsort=377
+  - ucsc-bedtobigbed=377
+  - ucsc-bigwigmerge=377
+  - ucsc-fetchchromsizes=377
+  - ucsc-genepredtobed=377
+  - ucsc-gtftogenepred=377
+  - ucsc-liftover=377
+  - ucsc-oligomatch=377
+  - ucsc-twobittofa=377
+  - ucsc-wigtobigwig=377
   - unicodedata2=15.0.0
   - urllib3=1.26.15
   - wcwidth=0.2.6
   - wheel=0.40.0
   - wrapt=1.15.0
   - xopen=1.7.0
+  - xorg-kbproto=1.0.7
+  - xorg-libice=1.0.10
+  - xorg-libsm=1.2.3
+  - xorg-libx11=1.8.4
+  - xorg-libxau=1.0.9
+  - xorg-libxdmcp=1.1.3
+  - xorg-libxext=1.3.4
+  - xorg-libxrender=0.9.10
+  - xorg-libxt=1.2.1
+  - xorg-renderproto=0.11.1
+  - xorg-xextproto=7.3.0
+  - xorg-xproto=7.0.31
+  - xz=5.2.6
+  - yaml=0.2.5
   - yte=1.5.1
   - zipp=3.15.0
+  - zlib=1.2.13
   - zstandard=0.19.0
+  - zstd=1.5.2

From 1c15b7e3f042ae0e3bbe12c211418f2bfabe716f Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 30 Mar 2023 10:48:22 -0400
Subject: [PATCH 68/91] update conda upon requirements updates

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index d5d62086..43c35896 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -69,6 +69,7 @@ variables:
         # exist.
         if ! conda env list | grep -q "lcdb-wf-test"; then
             echo "Setting up conda..."
+            conda update conda
             conda config --system --add channels defaults
             conda config --system --add channels bioconda
             conda config --system --add channels conda-forge

From 7071724324bbf7004168f9a8f7e2fa2c315f464f Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 30 Mar 2023 15:38:10 -0400
Subject: [PATCH 69/91] fix picard version

---
 env.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/env.yml b/env.yml
index e7d7a61f..211aed41 100644
--- a/env.yml
+++ b/env.yml
@@ -248,7 +248,7 @@ dependencies:
   - perl-xml-sax=1.02
   - perl-xml-sax-base=1.09
   - pexpect=4.8.0
-  - picard=3.0.0
+  - picard=2.27.4
   - pickleshare=0.7.5
   - pigz=2.6
   - pillow=9.2.0

From d11e54dc13bb4c9fe7a69bb711692a0a8068a00c Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 30 Mar 2023 16:35:33 -0400
Subject: [PATCH 70/91] debug tests

---
 .circleci/config.yml | 69 ++++++++++++++++++++++----------------------
 1 file changed, 35 insertions(+), 34 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 43c35896..fb16899e 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -67,6 +67,7 @@ variables:
         source $BASH_ENV
         # We only do the installation if the conda environment does not already
         # exist.
+        mamba --version
         if ! conda env list | grep -q "lcdb-wf-test"; then
             echo "Setting up conda..."
             conda update conda
@@ -403,41 +404,41 @@ workflows:
   test-suite:
     jobs:
       - initial-setup
-      - pytest:
-         requires:
-           - initial-setup
-      - chipseq:
-         requires:
-           - initial-setup
-           - pytest
+#      - pytest:
+#         requires:
+#           - initial-setup
+#      - chipseq:
+#         requires:
+#           - initial-setup
+#           - pytest
       - chipseq-misc:
          requires:
            - initial-setup
            - pytest
-      - rnaseq:
-          requires:
-            - initial-setup
-            - pytest
-      - rnaseq-misc:
-          requires:
-            - initial-setup
-            - pytest
-      - references:
-          requires:
-            - initial-setup
-            - pytest
-      - colocalization:
-          requires:
-            - initial-setup
-            - pytest
-      - build-docs:
-          requires:
-            - initial-setup
-      - report-env:
-          requires:
-            - rnaseq
-            - rnaseq-misc
-            - chipseq
-            - chipseq-misc
-            - references
-            - colocalization
+#      - rnaseq:
+#          requires:
+#            - initial-setup
+#            - pytest
+#      - rnaseq-misc:
+#          requires:
+#            - initial-setup
+#            - pytest
+#      - references:
+#          requires:
+#            - initial-setup
+#            - pytest
+#      - colocalization:
+#          requires:
+#            - initial-setup
+#            - pytest
+#      - build-docs:
+#          requires:
+#            - initial-setup
+#      - report-env:
+#          requires:
+#            - rnaseq
+#            - rnaseq-misc
+#            - chipseq
+#            - chipseq-misc
+#            - references
+#            - colocalization

From a13c805997a8cdbb4e58191b7eabae4bb7b5f945 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Thu, 30 Mar 2023 16:38:26 -0400
Subject: [PATCH 71/91] debug tests

---
 .circleci/config.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index fb16899e..63ecebe9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -404,9 +404,9 @@ workflows:
   test-suite:
     jobs:
       - initial-setup
-#      - pytest:
-#         requires:
-#           - initial-setup
+      - pytest:
+         requires:
+           - initial-setup
 #      - chipseq:
 #         requires:
 #           - initial-setup

From 9a3d6296efc7a8a7ba24cdb880a8b905c1e970d9 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 06:03:49 -0400
Subject: [PATCH 72/91] debug tests

---
 .circleci/config.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 63ecebe9..b15f7be7 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -67,7 +67,8 @@ variables:
         source $BASH_ENV
         # We only do the installation if the conda environment does not already
         # exist.
-        mamba --version
+        conda env export | grep mamba
+        exit 1
         if ! conda env list | grep -q "lcdb-wf-test"; then
             echo "Setting up conda..."
             conda update conda

From 154904aed123af944486b289ddc34df61d6f8145 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 06:11:09 -0400
Subject: [PATCH 73/91] debug tests

---
 .circleci/config.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index b15f7be7..dc3bc117 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -67,7 +67,8 @@ variables:
         source $BASH_ENV
         # We only do the installation if the conda environment does not already
         # exist.
-        conda env export | grep mamba
+        conda env export | grep glib
+        which mamba
         exit 1
         if ! conda env list | grep -q "lcdb-wf-test"; then
             echo "Setting up conda..."

From 5069a7d748cd6f37ab99f00ab5cf5f229d6e4e37 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 06:18:56 -0400
Subject: [PATCH 74/91] debug tests

---
 .circleci/config.yml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index dc3bc117..eb6ddd9a 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -67,7 +67,9 @@ variables:
         source $BASH_ENV
         # We only do the installation if the conda environment does not already
         # exist.
-        conda env export | grep glib
+        conda env export | grep libc
+        conda env export | grep mamba
+        conda env list
         which mamba
         exit 1
         if ! conda env list | grep -q "lcdb-wf-test"; then

From b5e5fb757948fe996e6b03ca0a5ce77fc47be54f Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 06:25:50 -0400
Subject: [PATCH 75/91] debug tests

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index eb6ddd9a..5dd6c03b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -71,6 +71,7 @@ variables:
         conda env export | grep mamba
         conda env list
         which mamba
+        mamba --version
         exit 1
         if ! conda env list | grep -q "lcdb-wf-test"; then
             echo "Setting up conda..."

From 06c5d9a7abd4de657b85fe3d02baf3e3dfdf23af Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 10:10:14 -0400
Subject: [PATCH 76/91] debug tests

---
 .circleci/config.yml | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 5dd6c03b..e01a72f7 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -26,7 +26,7 @@ variables:
 
   save_cache: &save_cache
     save_cache:
-      key: v0-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+      key: v1-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
       paths:
         - /opt/conda
 
@@ -49,7 +49,7 @@ variables:
         command: |
           # x11-utils required to avoid R::png() segfaulting
           apt update && apt install -y locales-all locales rsync x11-utils
-          conda install -y yaml
+          conda install -y yaml gcc
           echo 'export DEPLOY=/tmp/lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV=lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV_R=lcdb-wf-test-r' >> $BASH_ENV
@@ -67,19 +67,17 @@ variables:
         source $BASH_ENV
         # We only do the installation if the conda environment does not already
         # exist.
-        conda env export | grep libc
         conda env export | grep mamba
         conda env list
-        which mamba
-        mamba --version
-        exit 1
         if ! conda env list | grep -q "lcdb-wf-test"; then
             echo "Setting up conda..."
             conda update conda
             conda config --system --add channels defaults
             conda config --system --add channels bioconda
             conda config --system --add channels conda-forge
-            conda install mamba yaml -y
+            conda install gcc mamba yaml -y
+            which mamba
+            mamba --version
             mamba env create -n $LCDBWF_ENV --file env.yml
             mamba env create -n $LCDBWF_ENV_R --file env-r.yml
         fi

From cd6caf40647f83a84f07977a311bc3502d97632b Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 10:21:39 -0400
Subject: [PATCH 77/91] debug tests

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index e01a72f7..3ff2d04c 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -49,7 +49,7 @@ variables:
         command: |
           # x11-utils required to avoid R::png() segfaulting
           apt update && apt install -y locales-all locales rsync x11-utils
-          conda install -y yaml gcc
+          conda install -y yaml
           echo 'export DEPLOY=/tmp/lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV=lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV_R=lcdb-wf-test-r' >> $BASH_ENV

From bc2aacaf1be830867405fa1ea311b433f1455acb Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 10:30:16 -0400
Subject: [PATCH 78/91] debug tests

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 3ff2d04c..97b222fc 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -38,7 +38,7 @@ variables:
   restore_cache: &restore_cache
     restore_cache:
       keys:
-        - v0-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+        - v1-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
 
   # --------------------------------------------------------------------------
   # The path needs to be set each time; in jobs below this will be called as

From a93b30add9634d027136cb47ee0d0f624102c119 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 10:39:02 -0400
Subject: [PATCH 79/91] debug tests

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 97b222fc..c18413a3 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -26,7 +26,7 @@ variables:
 
   save_cache: &save_cache
     save_cache:
-      key: v1-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+      key: v2-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
       paths:
         - /opt/conda
 

From 53bb131669d4fdfc829825645877d95c57eebc17 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 10:53:08 -0400
Subject: [PATCH 80/91] trigger rebuilding envs

---
 env.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/env.yml b/env.yml
index 211aed41..4594f5ea 100644
--- a/env.yml
+++ b/env.yml
@@ -374,3 +374,4 @@ dependencies:
   - zlib=1.2.13
   - zstandard=0.19.0
   - zstd=1.5.2
+#

From 13d9c2c4376a3b8739707bcedd6211683a3dc2e0 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 11:52:35 -0400
Subject: [PATCH 81/91] debug tests

---
 .circleci/config.yml | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index c18413a3..b7285000 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -26,7 +26,7 @@ variables:
 
   save_cache: &save_cache
     save_cache:
-      key: v2-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+      key: v0-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
       paths:
         - /opt/conda
 
@@ -67,8 +67,6 @@ variables:
         source $BASH_ENV
         # We only do the installation if the conda environment does not already
         # exist.
-        conda env export | grep mamba
-        conda env list
         if ! conda env list | grep -q "lcdb-wf-test"; then
             echo "Setting up conda..."
             conda update conda

From 99663a6a115f5645f843b88c8c311a982c22518d Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 12:26:26 -0400
Subject: [PATCH 82/91] debug tests

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index b7285000..083d65ab 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -86,6 +86,7 @@ variables:
     run:
       name: Download example data
       command: |
+        conda info --envs
         source activate lcdb-wf-test
 
         # rsync is required for the deployment process

From 9811f88b89631416f69e130e542cec3016188738 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 12:56:35 -0400
Subject: [PATCH 83/91] debug tests

---
 .circleci/config.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 083d65ab..98a56985 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -433,9 +433,9 @@ workflows:
 #          requires:
 #            - initial-setup
 #            - pytest
-#      - build-docs:
-#          requires:
-#            - initial-setup
+      - build-docs:
+          requires:
+            - initial-setup
 #      - report-env:
 #          requires:
 #            - rnaseq

From 44512091e0e4fd688694eeaff152aca65c72fd51 Mon Sep 17 00:00:00 2001
From: Caroline Esnault <caroline.esnault@nih.gov>
Date: Fri, 31 Mar 2023 13:15:38 -0400
Subject: [PATCH 84/91] trigger new cache

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 98a56985..3d3e72b9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -26,7 +26,7 @@ variables:
 
   save_cache: &save_cache
     save_cache:
-      key: v0-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+      key: v3-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
       paths:
         - /opt/conda
 

From 34408bbc599722a7522f26e3655411cc8e750449 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sun, 2 Apr 2023 10:18:07 -0400
Subject: [PATCH 85/91] align save/restore caches

---
 .circleci/config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 3d3e72b9..4595e48b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -38,7 +38,7 @@ variables:
   restore_cache: &restore_cache
     restore_cache:
       keys:
-        - v1-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+        - v3-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
 
   # --------------------------------------------------------------------------
   # The path needs to be set each time; in jobs below this will be called as

From 5e483a993a185a05cd71c51c236cf6286c0df666 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sun, 2 Apr 2023 10:23:06 -0400
Subject: [PATCH 86/91] invalidate cache

---
 .circleci/config.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4595e48b..71f7a0a5 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -26,7 +26,7 @@ variables:
 
   save_cache: &save_cache
     save_cache:
-      key: v3-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+      key: v4-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
       paths:
         - /opt/conda
 
@@ -38,7 +38,7 @@ variables:
   restore_cache: &restore_cache
     restore_cache:
       keys:
-        - v3-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
+        - v4-{{ checksum "env.yml" }}-{{ checksum "env-r.yml" }}
 
   # --------------------------------------------------------------------------
   # The path needs to be set each time; in jobs below this will be called as

From 0e375d466cfb0b647f04596d42080207e91f35a9 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sun, 2 Apr 2023 10:23:17 -0400
Subject: [PATCH 87/91] don't need to install yaml so early

---
 .circleci/config.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 71f7a0a5..d36b5f71 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -49,7 +49,6 @@ variables:
         command: |
           # x11-utils required to avoid R::png() segfaulting
           apt update && apt install -y locales-all locales rsync x11-utils
-          conda install -y yaml
           echo 'export DEPLOY=/tmp/lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV=lcdb-wf-test' >> $BASH_ENV
           echo 'export LCDBWF_ENV_R=lcdb-wf-test-r' >> $BASH_ENV

From de03bffca9daea09e12d023c557b875d6c7606c5 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sun, 2 Apr 2023 10:23:28 -0400
Subject: [PATCH 88/91] set strict channel priority

---
 .circleci/config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index d36b5f71..67bcb040 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -72,6 +72,7 @@ variables:
             conda config --system --add channels defaults
             conda config --system --add channels bioconda
             conda config --system --add channels conda-forge
+            conda config --system --set channel_priority strict
             conda install gcc mamba yaml -y
             which mamba
             mamba --version

From 6452bcc9aff8b6993c386bf38ed161323fa5bffd Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sun, 2 Apr 2023 10:23:44 -0400
Subject: [PATCH 89/91] streamline jobs for tighter feedback loop when
 troubleshooting

---
 .circleci/config.yml | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 67bcb040..f28289a4 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -406,9 +406,9 @@ workflows:
   test-suite:
     jobs:
       - initial-setup
-      - pytest:
-         requires:
-           - initial-setup
+#      - pytest:
+#         requires:
+#           - initial-setup
 #      - chipseq:
 #         requires:
 #           - initial-setup
@@ -416,7 +416,7 @@ workflows:
       - chipseq-misc:
          requires:
            - initial-setup
-           - pytest
+#           - pytest
 #      - rnaseq:
 #          requires:
 #            - initial-setup
@@ -433,9 +433,9 @@ workflows:
 #          requires:
 #            - initial-setup
 #            - pytest
-      - build-docs:
-          requires:
-            - initial-setup
+#      - build-docs:
+#          requires:
+#            - initial-setup
 #      - report-env:
 #          requires:
 #            - rnaseq

From 5f7dfffc1dd13ce65c650777cb61086fd3d1970e Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sun, 2 Apr 2023 10:46:08 -0400
Subject: [PATCH 90/91] try an actual test with gh actions

---
 .github/workflows/main.yaml | 48 ++++++++++++++++++++++++++++++++++---
 1 file changed, 45 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 9d4581eb..058e9590 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -1,4 +1,11 @@
 on: [push]
+env:
+  DEPLOY: /tmp/lcdb-wf-test
+  LCDBWF_ENV: lcdb-wf-test
+  LCDBWF_ENV_R: lcdb-wf-test-r
+  LC_ALL: en_US.utf8
+  LANG: en_US.utf8
+
 jobs:
 
   build:
@@ -29,8 +36,43 @@ jobs:
           mamba env create -n lcdb-wf-test --file env.yml
           mamba env create -n lcdb-wf-test-r --file env-r.yml
 
-      - name: STAR available?
-        shell: bash
+      - name: Download example data
+        run: |
+        conda info --envs
+        source activate lcdb-wf-test
+
+        # rsync is required for the deployment process
+        apt install -y rsync
+
+        # Deploy to the new directory, so we are testing the real-world case of post-deployment.
+        # Note that $DEPLOY is set in the "set-paths" step configured above.
+        python deploy.py --flavor full --dest $DEPLOY --branch $GITHUB_HEAD_REF --clone
+
+        # Separately copy over some test-specific files
+        cp workflows/chipseq/run_test.sh $DEPLOY/workflows/chipseq
+        cp workflows/rnaseq/run_test.sh $DEPLOY/workflows/rnaseq
+        cp workflows/rnaseq/run_downstream_test.sh $DEPLOY/workflows/rnaseq
+        cp workflows/colocalization/run_test.sh $DEPLOY/workflows/references
+        cp workflows/colocalization/run_test.sh $DEPLOY/workflows/colocalization
+        mkdir $DEPLOY/ci
+        mkdir $DEPLOY/test
+        cp test/lcdb-wf-test $DEPLOY/test
+        cp test/workflow_test_params.yaml $DEPLOY/test
+        cp ci/get-data.py $DEPLOY/ci
+
+        # the ./run_test.sh scripts run this
+        cp ci/preprocessor.py $DEPLOY/ci
+
+        # download example data
+        cd $DEPLOY
+        test/lcdb-wf-test data --kind=all --verbose
+
+      - name: chipseq misc
         run: |
+          cd $DEPLOY/workflows/chipseq
           source activate lcdb-wf-test
-          STAR --version
+          ./run_test.sh --use-conda -j2 -k -p -r \
+            --configfile $ORIG/test/test_configs/test_chipseq_regression.yaml \
+            --config sampletable=$ORIG/test/test_configs/chipseq_one_run.tsv \
+            merged_bigwigs="{}" \
+            --until bed_to_bigbed

From 8ceaf5abfcc63f92350cde4e631bdd044a2b2ac0 Mon Sep 17 00:00:00 2001
From: daler <ryan.dale@nih.gov>
Date: Sun, 2 Apr 2023 11:15:51 -0400
Subject: [PATCH 91/91] syntax

---
 .github/workflows/main.yaml | 46 ++++++++++++++++++-------------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 058e9590..f8a41faf 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -38,34 +38,34 @@ jobs:
 
       - name: Download example data
         run: |
-        conda info --envs
-        source activate lcdb-wf-test
+          conda info --envs
+          source activate lcdb-wf-test
 
-        # rsync is required for the deployment process
-        apt install -y rsync
+          # rsync is required for the deployment process
+          apt install -y rsync
 
-        # Deploy to the new directory, so we are testing the real-world case of post-deployment.
-        # Note that $DEPLOY is set in the "set-paths" step configured above.
-        python deploy.py --flavor full --dest $DEPLOY --branch $GITHUB_HEAD_REF --clone
+          # Deploy to the new directory, so we are testing the real-world case of post-deployment.
+          # Note that $DEPLOY is set in the "set-paths" step configured above.
+          python deploy.py --flavor full --dest $DEPLOY --branch $GITHUB_HEAD_REF --clone
 
-        # Separately copy over some test-specific files
-        cp workflows/chipseq/run_test.sh $DEPLOY/workflows/chipseq
-        cp workflows/rnaseq/run_test.sh $DEPLOY/workflows/rnaseq
-        cp workflows/rnaseq/run_downstream_test.sh $DEPLOY/workflows/rnaseq
-        cp workflows/colocalization/run_test.sh $DEPLOY/workflows/references
-        cp workflows/colocalization/run_test.sh $DEPLOY/workflows/colocalization
-        mkdir $DEPLOY/ci
-        mkdir $DEPLOY/test
-        cp test/lcdb-wf-test $DEPLOY/test
-        cp test/workflow_test_params.yaml $DEPLOY/test
-        cp ci/get-data.py $DEPLOY/ci
+          # Separately copy over some test-specific files
+          cp workflows/chipseq/run_test.sh $DEPLOY/workflows/chipseq
+          cp workflows/rnaseq/run_test.sh $DEPLOY/workflows/rnaseq
+          cp workflows/rnaseq/run_downstream_test.sh $DEPLOY/workflows/rnaseq
+          cp workflows/colocalization/run_test.sh $DEPLOY/workflows/references
+          cp workflows/colocalization/run_test.sh $DEPLOY/workflows/colocalization
+          mkdir $DEPLOY/ci
+          mkdir $DEPLOY/test
+          cp test/lcdb-wf-test $DEPLOY/test
+          cp test/workflow_test_params.yaml $DEPLOY/test
+          cp ci/get-data.py $DEPLOY/ci
 
-        # the ./run_test.sh scripts run this
-        cp ci/preprocessor.py $DEPLOY/ci
+          # the ./run_test.sh scripts run this
+          cp ci/preprocessor.py $DEPLOY/ci
 
-        # download example data
-        cd $DEPLOY
-        test/lcdb-wf-test data --kind=all --verbose
+          # download example data
+          cd $DEPLOY
+          test/lcdb-wf-test data --kind=all --verbose
 
       - name: chipseq misc
         run: |