From 4f14d592277d4bd3af98f2299e5e2e1d48a32016 Mon Sep 17 00:00:00 2001 From: nikos <n.pappas@uu.nl> Date: Thu, 7 Jan 2021 16:04:31 +0100 Subject: [PATCH] added procedures for building containers --- resources/singularity/rafah/README.md | 57 ++ resources/singularity/rafah/rafah.def | 58 ++ resources/singularity/vhmnet/README.md | 53 ++ resources/singularity/vhmnet/environment.txt | 112 ++++ resources/singularity/vhulk/README.md | 73 +++ resources/singularity/vhulk/vHULK-v0.1.py | 516 ++++++++++++++++++ resources/singularity/vhulk/vhulk.def | 56 ++ .../singularity/vhulk/vhulk_explicit.txt | 375 +++++++++++++ resources/singularity/wish/README.md | 32 ++ resources/singularity/wish/wish.def | 45 ++ 10 files changed, 1377 insertions(+) create mode 100644 resources/singularity/rafah/README.md create mode 100644 resources/singularity/rafah/rafah.def create mode 100644 resources/singularity/vhmnet/README.md create mode 100644 resources/singularity/vhmnet/environment.txt create mode 100644 resources/singularity/vhulk/README.md create mode 100755 resources/singularity/vhulk/vHULK-v0.1.py create mode 100644 resources/singularity/vhulk/vhulk.def create mode 100644 resources/singularity/vhulk/vhulk_explicit.txt create mode 100644 resources/singularity/wish/README.md create mode 100644 resources/singularity/wish/wish.def diff --git a/resources/singularity/rafah/README.md b/resources/singularity/rafah/README.md new file mode 100644 index 0000000..93a7e19 --- /dev/null +++ b/resources/singularity/rafah/README.md @@ -0,0 +1,57 @@ +# RaFaH + +Available from `library://papanikos_182/default/rafah:0.1` + +## Procedure + +0. Create a new dir for build context and get in there + +1. Grab necessary dependencies from the +[RaFaH repo](https://sourceforge.net/projects/rafah/files/RaFAH_v0.1_Files/) + +``` +$ wget https://sourceforge.net/projects/rafah/files/RaFAH_v0.1_Files +$ tar -xzvf whatever_is_downloaded +``` + +> wgetting is slow, I used another copy, locally available + +2. Edit RaFaH script to point to appropriate locations in the container + - Replace shebang (line 1) with `#!/usr/bin/env perl` + - Change line 37 to `my $valid_domains_file = "/opt/resources/HP_Ranger_Model_3_Valid_Cols.txt";` + - Change line 38 to `my $hmm_models_prefix = "/opt/resources/HP_Ranger_Model_3_Filtered_0.9_Valids.hmm";` + - Change line 39 to `my $r_script_file_name = "/src/Predict_Host_RF.R";` + - Change line 40 to `my $r_model_file_name = "/opt/resources/MMSeqs_Clusters_Ranger_Model_1+2+3_Clean.RData";` + +3. Make RaFah_v0.1.pl executable +``` +$ chmod +x RaFaH_v0.1.pl +``` + +4. Bundle tables and models in a tar archive (not the perl and R script) and +not the `HP_Ranger_Model_3_Valid_Cols.txt` +``` +$ tar -czvf rafah_resources.tar.gz ./*hmm* MMSeqs_Clusters_Ranger_Model_1+2+3_Clean.RData +``` + +5. Build the image with the definition file +``` +$ sudo singularity build rafah.sif rafah.def +``` + +6. [Optional] Sign the image +``` +$ singularity sign rafah.sif +``` + +7. Push it on the cloud +``` +$ singulairty push rafah.sif library://papanikos_182/default/rafah:0.1 +``` + +## Usage + +``` +$ singularity run library://papanikos_182/default/rafah:0.1 RaFaH_v0.1.pl -h +``` + diff --git a/resources/singularity/rafah/rafah.def b/resources/singularity/rafah/rafah.def new file mode 100644 index 0000000..66007c2 --- /dev/null +++ b/resources/singularity/rafah/rafah.def @@ -0,0 +1,58 @@ +Bootstrap: docker +From: continuumio/miniconda3 + +%labels + Author "Felipe Coutinho" + Maintainer papanikos_182 + Version 0.1 + Source https://sourceforge.net/projects/rafah/ + Preprint https://www.biorxiv.org/content/10.1101/2020.09.25.313155v1 + +%files + RaFAH_v0.1.pl /opt/conda/bin/ + Predict_Host_RF.R /src/ + HP_Ranger_Model_3_Valid_Cols.txt /opt/HP_Ranger_Model_3_Valid_Cols.txt + rafah_resources.tar.gz /opt/rafah_resources.tar.gz + +%environment + export PATH=/src:$PATH + +%post + # Update OS + apt update && apt upgrade -y + + # Set up resources dirs for running RaFAH + mkdir -p /opt/resources + mv /opt/HP_Ranger_Model_3_Valid_Cols.txt /opt/resources + tar -xzvf /opt/rafah_resources.tar.gz -C /opt/resources && rm /opt/rafah_resources.tar.gz + + # Install dependencies + conda config --add channels conda-forge + conda config --add channels default + conda config --add channels bioconda + conda config --add channels r + conda update -y conda + conda install -y mamba + mamba install -y r=3.6 r-ranger perl-bioperl hmmer=3.1b2 prodigal=2.6 + conda clean --all -y + + +%help + A container for RaFAH v0.1 [https://sourceforge.net/projects/rafah]. + Main perl script is in /src . + Helper R script for models is in /src . + Required data dependencies are stored in /opt/resources. + + To run the help menu from RaFAH from this container execute + + $ singularity exec shub://papanikos_182/rafah:0.1 perl RaFAH_v0.1.pl --help + + To run an anlysis for all genomes stored in the /path/to/genomes/ (last slash is required), + with all files ending with .fasta and store the results in + /path/to/outdir/prefix (several files will be written in the /path/to/outdir and prefixed with prefix_ ). + + $ singularity exec shub://papanikos_182/rafah:0.1 \ + perl RaFAH_v0.1.pl \ + --genomes_dir /path/to/genomes/ \ + --extension fasta \ + --file_prefix /path/to/outdir/prefix diff --git a/resources/singularity/vhmnet/README.md b/resources/singularity/vhmnet/README.md new file mode 100644 index 0000000..7e97509 --- /dev/null +++ b/resources/singularity/vhmnet/README.md @@ -0,0 +1,53 @@ +# VirHostMatcher-Net + +Available from `library://papanikos_182/default/vhmnet:0.1` + +* Note that data dependencies are not included in the container. +You need to get them with +``` +wget -c http://www-rcf.usc.edu/~weiliw/VirHostMatcher-Net/data_VirHostMatcher-Net_both_modes.tar.gz +tar xf data_VirHostMatcher-Net_both_modes.tar.gz +``` +The models and genomes unpacked are 125G. + +* [My fork](https://github.com/papanikos/VirHostMatcher-Net) +is used for grabbing source. It mainly allows to define a directory +where the data are located + +## Procedure + +0. Create a new dir for build context and get in there + +1. Create a conda env with its requirements, verify it is working and export +it explicitly + +``` +$ conda env create -n vhmnet numpy pandas biopython blast +... +...Test it runs... +... +$ conda list -n vhmnet --explicit > environment.txt +``` + +2. Build the image with the definition file +``` +$ sudo singularity build vhmnet.sif vhmnet.def +``` + +3. [Optional] Sign the image +``` +$ singularity sign vhmnet.sif +``` + +4. Push it on the cloud +``` +$ singulairty push vhmnet.sif library://papanikos_182/default/vhmnet:0.1 +``` + +## Usage + +``` +$ singularity run library://papanikos_182/default/vhmnet:0.1 \ + VirHostMatcher.py -h +``` + diff --git a/resources/singularity/vhmnet/environment.txt b/resources/singularity/vhmnet/environment.txt new file mode 100644 index 0000000..fc21c7b --- /dev/null +++ b/resources/singularity/vhmnet/environment.txt @@ -0,0 +1,112 @@ +# This file may be used to create an environment using: +# $ conda create --name <env> --file <this file> +# platform: linux-64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/ca-certificates-2020.12.8-h06a4308_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.35.1-hed1e6ac_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran4-7.5.0-hae1eefd_17.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-9.3.0-h2ae2ef3_17.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/tzdata-2020f-he74cb21_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-7.5.0-hae1eefd_17.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-9.3.0-h5dbcf3e_17.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-1_gnu.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-9.3.0-h5dbcf3e_17.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/bzip2-1.0.8-h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/expat-2.2.10-he6710b0_2.conda +https://repo.anaconda.com/pkgs/main/linux-64/libffi-3.3-he6710b0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.12-pthreads_hb3c22a3_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.2-he6710b0_1.conda +https://repo.anaconda.com/pkgs/main/linux-64/openssl-1.1.1i-h27cfd23_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/pcre-8.44-he6710b0_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/perl-5.26.2-h14c3975_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/xz-5.2.5-h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/zlib-1.2.11-h7b6447c_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-6_openblas.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libedit-3.1.20191231-h14c3975_1.conda +https://repo.anaconda.com/pkgs/main/linux-64/libssh2-1.9.0-h1ba5d50_1.conda +https://conda.anaconda.org/bioconda/linux-64/perl-app-cpanminus-1.7044-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-base-2.23-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-common-sense-3.74-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-compress-raw-bzip2-2.087-pl526he1b5a44_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-compress-raw-zlib-2.087-pl526hc9558a2_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-constant-1.33-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-data-dumper-2.173-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-digest-hmac-1.03-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-digest-md5-2.55-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-exporter-5.72-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-exporter-tiny-1.002001-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-extutils-makemaker-7.36-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-tagset-3.20-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-html-1.001-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-zlib-1.10-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mozilla-ca-20180117-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-parent-0.236-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-scalar-list-utils-1.52-pl526h516909a_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-socket-2.027-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-try-tiny-0.30-pl526_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/perl-xml-parser-2.44_01-pl526ha1d75be_1002.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-sax-base-1.09-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xsloader-0.24-pl526_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/readline-8.0-h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/tk-8.6.10-hbc83047_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/krb5-1.18.2-h173b8e3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-6_openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-6_openblas.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-carp-1.38-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-encode-2.88-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-path-2.16-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-parser-3.72-pl526h6bb024c_5.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-compress-2.087-pl526he1b5a44_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-list-moreutils-xs-0.428-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mime-base64-3.15-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-ntlm-1.09-pl526_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-storable-3.15-pl526h14c3975_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-requiresinternet-0.05-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-types-serialiser-1.0-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-namespacesupport-1.12-pl526_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.34.0-h74cdb3f_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libcurl-7.71.1-h20c2e04_1.conda +https://conda.anaconda.org/bioconda/linux-64/perl-business-isbn-data-20140910.003-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-encode-locale-1.05-pl526_6.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-temp-0.2304-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-tree-5.07-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-json-xs-2.34-pl526h6bb024c_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-list-moreutils-0.428-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-lwp-mediatypes-6.04-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-net-ssleay-1.88-pl526h90d6eec_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-pathtools-3.75-pl526h14c3975_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-time-local-1.28-pl526_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/python-3.9.1-hdb3f193_2.conda +https://repo.anaconda.com/pkgs/main/linux-64/certifi-2020.12.5-py39h06a4308_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/curl-7.71.1-hbc83047_1.conda +https://conda.anaconda.org/bioconda/linux-64/perl-archive-tar-2.32-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-business-isbn-3.004-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-date-6.02-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-socket-ssl-2.066-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-json-4.02-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-xml-sax-1.02-pl526_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-1_cp39.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/pytz-2020.5-pyhd3eb1b0_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/six-1.15.0-py39h06a4308_0.conda +https://repo.anaconda.com/pkgs/main/noarch/wheel-0.36.2-pyhd3eb1b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.19.4-py39hdbf815f_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-listing-6.04-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-uri-1.76-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-sax-expat-0.51-pl526_3.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/python-dateutil-2.8.1-py_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/setuptools-51.0.0-py39h06a4308_2.conda +https://conda.anaconda.org/conda-forge/linux-64/biopython-1.78-py39hbd71b63_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pandas-1.2.0-py39hde0f152_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-message-6.18-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-net-http-6.19-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-www-robotrules-6.02-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-simple-2.25-pl526_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/pip-20.3.3-py39h06a4308_0.conda +https://conda.anaconda.org/bioconda/linux-64/perl-http-cookies-6.04-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-daemon-6.01-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-negotiate-6.01-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-libwww-perl-6.39-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-lwp-protocol-https-6.07-pl526_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/entrez-direct-13.9-pl526h375a9b1_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/blast-2.10.1-pl526he19e7b1_3.tar.bz2 diff --git a/resources/singularity/vhulk/README.md b/resources/singularity/vhulk/README.md new file mode 100644 index 0000000..500802a --- /dev/null +++ b/resources/singularity/vhulk/README.md @@ -0,0 +1,73 @@ +# RaFaH + +Available from `library://papanikos_182/default/vhulk:0.1` + +## Procedure + +0. Create a new dir for build context and get in there + +1. Grab source from the +[vHULK repo](https://github.com/LaboratorioBioinformatica/vHULK) + + +``` +$ git clone https://github.com/LaboratorioBioinformatica/vHULK.git +``` + +2. Create a conda env as per +[their suggestions](https://github.com/LaboratorioBioinformatica/vHULK#dependencies) +and export it explicitly with +``` +$ conda list -n vhulk --explicit > vhulk_explicit.txt +``` +This can be used for running stuff + +3. Grab its data dependencies with the auxiliary script they provide +``` +$ conda activate vhulk +(vhulk) $ python ./download_and_set_models.py +``` + +4. Extract (for testing) and rebundle under `vhulk_resources.tar.gz`. This +archive contains +``` +$ tar -tvf vhulk_resources.tar.gz + +drwxr-xr-x nikos/binf 0 2020-12-15 12:21 models/ +-rw-r----- nikos/binf 70143964 2020-09-15 00:52 models/model_species_total_fixed_relu_08mar_2020.h5 +-rw-r----- nikos/binf 70165848 2020-09-15 00:52 models/model_genus_total_fixed_relu_08mar_2020.h5 +-rw-r--r-- nikos/binf 175382277 2020-12-15 12:19 models/all_vogs_hmm_profiles_feb2018.hmm.h3f +-rw-r----- nikos/binf 70165848 2020-09-15 00:52 models/model_genus_total_fixed_softmax_01mar_2020.h5 +-rw-r----- nikos/binf 70143964 2020-09-15 00:52 models/model_species_total_fixed_softmax_01mar_2020.h5 +-rw-r--r-- nikos/binf 333265 2020-12-15 12:19 models/all_vogs_hmm_profiles_feb2018.hmm.h3i +-rw-r--r-- nikos/binf 374382899 2020-12-15 12:19 models/all_vogs_hmm_profiles_feb2018.hmm.h3p +-rw-r--r-- nikos/binf 767855419 2020-12-15 12:19 models/all_vogs_hmm_profiles_feb2018.hmm +-rw-r--r-- nikos/binf 317721714 2020-12-15 12:19 models/all_vogs_hmm_profiles_feb2018.hmm.h3m +``` + +5. Modify the `vHULK-v0.1.py` to mainly point to the appropriate locations +in the container. The rest is aesthetics done with +[black](https://github.com/psf/black). Also make it executable. +The copy in here is the one used in the container. + +6. Build the image with the definition file +``` +$ sudo singularity build vhulk.sif vhulk.def +``` + +7. [Optional] Sign the image +``` +$ singularity sign vhulk.sif +``` + +8. Push it on the cloud +``` +$ singulairty push vhulk.sif library://papanikos_182/default/vhulk:0.1 +``` + +## Usage + +``` +$ singularity run library://papanikos_182/default/vhulk:0.1 vHULK_v0.1.py -h +``` + diff --git a/resources/singularity/vhulk/vHULK-v0.1.py b/resources/singularity/vhulk/vHULK-v0.1.py new file mode 100755 index 0000000..b509fbf --- /dev/null +++ b/resources/singularity/vhulk/vHULK-v0.1.py @@ -0,0 +1,516 @@ +#!/usr/bin/env python +# coding: utf-8 +# Edited May, 27th 2020 +## This is vHULK: viral Host Unveiling Kit +# Developed by Deyvid Amgarten and Bruno Iha +# Creative commons + +# Import required Python modules +import numpy as np +import pandas as pd +from Bio import SeqIO +import re +import sys +import os + +os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" +import subprocess +import datetime +import argparse +import warnings +import csv + +warnings.filterwarnings("ignore", category=DeprecationWarning) +warnings.simplefilter(action="ignore", category=FutureWarning) + +from time import gmtime, strftime +from tensorflow.keras.layers import Dense, Activation, LeakyReLU, ReLU +from tensorflow.keras.models import load_model +from scipy.special import entr + + +# Function declarations +# Run prokka +def run_prokka(binn, input_folder, threads): + # Check the fasta format + prefix = get_prefix(binn) + # Filehandle where the output of prokka will be saved + # output_prokka = open(str(prefix)+'prokka.output', mode='w') + # Full command line for prokka + command_line = ( + "prokka --kingdom Viruses --centre X --compliant --gcode 11 --cpus " + + threads + + " --force --quiet --prefix prokka_results_" + + str(prefix) + + " --fast --norrna --notrna --outdir " + + input_folder + + "results/prokka/" + + str(prefix) + + " --cdsrnaolap --noanno " + + input_folder + + str(binn) + ).split() + return_code = subprocess.call(command_line, stderr=subprocess.PIPE) + # Check with prokka run smothly + if return_code == 1: + print("Prokka may not be correctly installed. Please check that.") + sys.exit(1) + + +# Get prefix from bins +def get_prefix(binn): + if re.search(".fasta", binn): + prefix = re.sub(".fasta", "", binn) + else: + prefix = re.sub(".fa", "", binn) + return prefix + + +# Extract Matrix + + +### +### Main code +### + +# Set arguments +# Modification to use argparse +parser = argparse.ArgumentParser( + description="Predict phage draft genomes in metagenomic bins." +) +parser.add_argument( + "-i", + action="store", + required=True, + dest="input_folder", + help="Path to a folder containing metagenomic bins in .fa or .fasta format (required!)", +) +parser.add_argument( + "-t", + action="store", + dest="threads", + default="1", + help="Number of CPU threads to be used by Prokka and hmmscan (default=1)", +) +args = parser.parse_args() + + +# Greeting message +print("\n**Welcome v.HULK, a toolkit for phage host prediction!\n") + + +# Verify databases +if not os.path.isfile("/opt/vHULK/models/all_vogs_hmm_profiles_feb2018.hmm"): + print( + "**Your database and models are not set. Please, run: python download_and_set_models.py \n" + ) + sys.exit(1) + + +# Create Filehandle for warnings +# warnings_handle = open('marvel-warnings.txt', 'w') + +# Important variables +input_folder = args.input_folder +threads = args.threads + +# Fix input folder path if missing '/' +if not re.search("/$", input_folder): + input_folder = input_folder + "/" + + +# Take the input folder and list all multifasta (bins) contained inside it +# print(input_folder) +list_bins_temp = os.listdir(input_folder) +list_bins = [] +count_bins = 0 +# Empty folder +if list_bins_temp == []: + print("**Input folder is empty. Exiting...\n") + sys.exit(1) +else: + for each_bin in list_bins_temp: + if re.search(".fasta$", each_bin, re.IGNORECASE): + list_bins.append(each_bin) + count_bins += 1 + elif re.search(".fa$", each_bin, re.IGNORECASE): + list_bins.append(each_bin) + count_bins += 1 + +if count_bins == 0: + print( + "**There is no valid genome inside the input folder (%s).\n\ + Genome or bins should be in '.fasta' or '.fa' format.\nExiting..." + % input_folder + ) + sys.exit(1) + +print( + "**Arguments are OK. Checked the input folder and found %d genomes.\n" + % count_bins +) +print("**" + str(datetime.datetime.now())) + +# Create results folder +try: + os.stat(input_folder + "results/") +except: + os.mkdir(input_folder + "results/") + + +##### +# PROKKA +##### +# Running prokka for all the bins multfasta files in input folder +# Perform a check in each bin, then call the execute_prokka function individually +# It may take awhile +count_prokka = 0 +print("**Prokka has started, this may take awhile. Be patient.\n") +for binn in list_bins: + # Verify bin/Genome size + len_bin = 0 + for record in SeqIO.parse(input_folder + binn, "fasta"): + len_bin += len(record.seq) + # If a bin/genome is too short, skip it + if len_bin < 5000: + print( + "**v.HULK has found a genome or bin, which is too short to code \ + proteins (<5000pb). As CDSs are an important feature for v.HULK, \ + we will be skipping this: " + + binn + ) + continue + run_prokka(binn, input_folder, threads) + count_prokka += 1 + if count_prokka % 10 == 0: + print("**Done with %d genomes..." % count_prokka) +print("**Prokka tasks have finished!\n") + + +#### +# HMM SEARCHES +#### +print("**" + str(datetime.datetime.now())) +print("**Starting HMM scan, this may take awhile. Be patient.\n") +# print(str(datetime.datetime.now())) +# Create a new results folder for hmmscan output +try: + os.stat(input_folder + "results/hmmscan/") +except: + os.mkdir(input_folder + "results/hmmscan/") + +# Call HMMscan to all genomes +dic_matrices_by_genome = {} +prop_hmms_hits = {} +count_hmm = 0 +for binn in list_bins: + # Prefix for naming results + prefix = get_prefix(binn) + command_line_hmmscan = ( + "hmmscan -o " + + input_folder + + "results/hmmscan/" + + prefix + + "_hmmscan.out --cpu " + + threads + + " --tblout " + + input_folder + + "results/hmmscan/" + + prefix + + "_hmmscan.tbl --noali /opt/vHULK/models/all_vogs_hmm_profiles_feb2018.hmm " + + input_folder + + "results/prokka/" + + prefix + + "/prokka_results_" + + prefix + + ".faa" + ) + # print(command_line_hmmscan) + # Use -E 1 for next time running HMMscan or leave the fix down there + # In case hmmscan returns an error - Added only because it stopped in half + # if os.path.exists(input_folder + 'results/hmmscan/' + prefix + '_hmmscan.tbl'): + # continue + try: + subprocess.call(command_line_hmmscan, shell=True) + # Comment line above and uncomment line below in case you want to run v.HULK without running hmmscan all over again + # True + except: + print("**Error calling HMMscan:", command_line_hmmscan) + sys.exit(1) + count_hmm += 1 + # Iteration control + print("**Done with %d bins HMM searches..." % count_hmm) + ## Create dictionary as ref of collumns - pVOGs + dic_vogs_headers = {} + with open("/opt/vHULK/files/VOGs_header.txt", "r") as file2: + for line2 in file2: + key = re.match("(.+)\n", line2).group(1) + dic_vogs_headers[key] = np.float32(0.0) + # + # Parse hmmscan results by gene + num_proteins_bin = 0 + with open( + input_folder + + "results/prokka/" + + prefix + + "/prokka_results_" + + prefix + + ".faa", + "r", + ) as faa: + for line in faa: + if re.search("^>", line): + num_proteins_bin += 1 + # Get gene name here + gene_name = re.search("^>(.*)", line).group(1) + dic_matches = {} + + # Parse hmmout + with open( + input_folder + "results/hmmscan/" + prefix + "_hmmscan.tbl", "r" + ) as hmmscan_out: + dic_genes_scores = {} + for line in hmmscan_out: + vog = "" + gene = "" + evalue = np.float32(0.0) + score = np.float32(0.0) + bias = np.float32(0.0) + if re.match("^VOG", line): + matches = re.match( + "^(VOG[\d\w]+)\s+-\s+([^\s]+)[^\d]+([^\s]+)\s+([^\s]+)\s+([^\s]+)", + line, + ) + vog = matches[1] + gene = matches[2] + evalue = float(matches[3]) + score = float(matches[4]) + bias = float(matches[5]) + if gene in dic_genes_scores: + dic_genes_scores[gene].append([vog, evalue, score, bias]) + else: + dic_genes_scores[gene] = [[vog, evalue, score, bias]] + # Here goes the continuation + # Create a matrix by accession + dic_matrices_by_genome[prefix] = pd.DataFrame( + index=dic_genes_scores.keys(), + columns=dic_vogs_headers.keys(), + dtype=float, + ) + dic_matrices_by_genome[prefix].fillna(value=np.float32(0.0), inplace=True) + # Fill in evalue values + for gene in dic_genes_scores: + for each_match in dic_genes_scores[gene]: + # print(each_match[1], gene) + # Fix for evalue values greater than 1 + if each_match[1] > 1: + # print(each_match[1]) + each_match[1] = 1 + # print(each_match[1]) + dic_matrices_by_genome[prefix][each_match[0]][gene] = np.float32( + 1.0 + ) - np.float32(each_match[1]) +print("\n**HMMscan has finished.") + +# Condense matrices to array by suming up columns +list_condensed_matrices = [] +list_file_names = [] +for matrix in dic_matrices_by_genome: + temp = list(dic_matrices_by_genome[matrix].sum(axis=0, skipna=True)) + list_file_names.append(matrix) + # Parse tag + # if re.search('^NC_.*', matrix): + # matrix = matrix.replace("NC_", "NC") + # [0]accession [1]genus [2]species + # tags = matrix.split("_") + # For Genus + # temp.append(tags[1]) + # temp.append(tags[0]) + # For Species + # temp.append(tag[1]+"_"+tag[2]) + # temp.append(tag[0]) + list_condensed_matrices.append(temp) + +# Convert to array +# import numpy as np +array = np.array(list_condensed_matrices) +# print("ARRAY-SHAPE: ", len(array)) + +### +# Predictions +### + +print("\n**Starting deeplearning predictions...") +# load models +model_genus_relu = load_model( + "/opt/vHULK/models/model_genus_total_fixed_relu_08mar_2020.h5", + custom_objects={"LeakyReLU": LeakyReLU, "ReLU": ReLU}, +) +model_genus_sm = load_model( + "/opt/vHULK/models/model_genus_total_fixed_softmax_01mar_2020.h5", + custom_objects={"LeakyReLU": LeakyReLU, "ReLU": ReLU}, +) +model_species_relu = load_model( + "/opt/vHULK/models/model_species_total_fixed_relu_08mar_2020.h5", + custom_objects={"LeakyReLU": LeakyReLU, "ReLU": ReLU}, +) +model_species_sm = load_model( + "/opt/vHULK/models/model_species_total_fixed_softmax_01mar_2020.h5", + custom_objects={"LeakyReLU": LeakyReLU, "ReLU": ReLU}, +) + +with open(input_folder + "results/results.csv", "w") as file: + file.write( + "BIN/genome,pred_genus_relu,score_genus_relu,Pred_genus_softmax,score_genus_softmax,pred_species_relu,score_species_relu,pred_species_softmax,score_species_softmax,final_prediction,entropy\n" + ) + +for i in range(0, len(array)): + # Genus ReLu + # print(list_file_names[i]) + pred_gen_relu = model_genus_relu.predict(np.array([array[i]])) + # print("Genus:ReLu") + # print(pred_gen_relu) + position_pred_gen_relu = np.argmax(pred_gen_relu) + if not pred_gen_relu.any(): + name_pred_gen_relu = "None" + score_pred_gen_relu = "0" + else: + list_hosts_genus = [ + line.rstrip("\n") for line in open("/opt/vHULK/files/list_hosts_genus.txt") + ] + name_pred_gen_relu = list_hosts_genus[position_pred_gen_relu] + score_pred_gen_relu = str(pred_gen_relu[0][position_pred_gen_relu]) + # print(list_hosts_genus[position_pred_gen_relu]) + # print(position_pred_gen_relu, pred_gen_relu[0][position_pred_gen_relu]) + + # Genus softmax + pred_gen_sm = model_genus_sm.predict(np.array([array[i]])) + # print("Genus:Softmax") + # print(pred_gen_sm) + position_pred_gen_sm = np.argmax(pred_gen_sm) + list_hosts_genus = [ + line.rstrip("\n") for line in open("/opt/vHULK/files/list_hosts_genus.txt") + ] + name_pred_gen_sm = list_hosts_genus[position_pred_gen_sm] + score_pred_gen_sm = str(pred_gen_sm[0][position_pred_gen_sm]) + # print(list_hosts_genus[position_pred_gen_sm]) + # print(position_pred_gen_sm, pred_gen_sm[0][position_pred_gen_sm]) + + # Species Relu + pred_sp_relu = model_species_relu.predict(np.array([array[i]])) + # print("Species:ReLu") + # print(pred_sp_relu) + position_pred_sp_relu = np.argmax(pred_sp_relu) + if not pred_sp_relu.any(): + name_pred_sp_relu = "None" + score_pred_sp_relu = "0" + else: + list_hosts_sp = [ + line.rstrip("\n") for line in open("/opt/vHULK/files/list_hosts_species.txt") + ] + # print(list_hosts_sp) + name_pred_sp_relu = list_hosts_sp[position_pred_sp_relu] + score_pred_sp_relu = str(pred_sp_relu[0][position_pred_sp_relu]) + # print(list_hosts_sp[position_pred_sp_relu]) + # print(position_pred_sp_relu, pred_sp_relu[0][position_pred_sp_relu]) + + # Species softmax + pred_sp_sm = model_species_sm.predict(np.array([array[i]])) + # print("Species:Softmax") + # print(pred_sp_sm) + position_pred_sp_sm = np.argmax(pred_sp_sm) + list_hosts_sp = [ + line.rstrip("\n") for line in open("/opt/vHULK/files/list_hosts_species.txt") + ] + # print(list_hosts_sp) + name_pred_sp_sm = list_hosts_sp[position_pred_sp_sm] + score_pred_sp_sm = str(pred_sp_sm[0][position_pred_sp_sm]) + # print(list_hosts_sp[position_pred_sp_sm]) + # print(position_pred_sp_sm, pred_sp_sm[0][position_pred_sp_sm]) + ## + # Calculate entropy + entropy_genus_sm = entr(pred_gen_sm).sum(axis=1) + # entropy_genus_sm = "{:.7f}".format(entr(pred_gen_sm).sum(axis=1)) + # + # Apply decision tree + # + final_decision = "None" + # Relu sp + if float(score_pred_sp_relu) > 0.9: + final_decision = name_pred_sp_relu + # SM sp + if float(score_pred_sp_sm) > 0.6 and name_pred_sp_sm != final_decision: + final_decision = name_pred_sp_sm + # Coudn't predict species + if final_decision == "None": + # Put here sm sp + if float(score_pred_sp_sm) > 0.6: + final_decision = name_pred_sp_sm + # relu genus + if float(score_pred_gen_relu) >= 0.7: + final_decision = name_pred_gen_relu + # sm genus + if ( + float(score_pred_gen_sm) >= 0.5 + and name_pred_gen_sm != final_decision + ): + final_decision = name_pred_gen_sm + else: + # relu genus + if float(score_pred_gen_relu) >= 0.9: + final_decision = name_pred_gen_relu + # sm genus + if ( + float(score_pred_gen_sm) >= 0.4 + and name_pred_gen_sm != final_decision + ): + final_decision = name_pred_gen_sm + # Predicted species. + # Verify if genus is the same + else: + if re.search(name_pred_gen_relu, final_decision) or re.search( + name_pred_gen_sm, final_decision + ): + pass + else: + # relu genus + if float(score_pred_gen_relu) >= 0.9: + final_decision = name_pred_gen_relu + # sm genus + if ( + float(score_pred_gen_sm) >= 0.5 + and name_pred_gen_sm != final_decision + ): + final_decision = name_pred_gen_sm + + # Print CSV + with open(input_folder + "results/results.csv", "a") as file: + file.write( + list_file_names[i] + + "," + + name_pred_gen_relu + + "," + + score_pred_gen_relu + + "," + + name_pred_gen_sm + + "," + + score_pred_gen_sm + + "," + + name_pred_sp_relu + + "," + + score_pred_sp_relu + + "," + + name_pred_sp_sm + + "," + + score_pred_sp_sm + + "," + + final_decision + + "," + + str(entropy_genus_sm[0]) + + "\n" + ) + + # print(list_file_names[i]+","+name_pred_gen_relu+":"+score_pred_gen_relu+","+name_pred_gen_sm+":"+score_pred_gen_sm+","+name_pred_sp_relu+":"+score_pred_sp_relu+","+name_pred_sp_sm+":"+score_pred_sp_sm+","+final_decision+","+str(entropy_genus_sm)) +print( + '\n**Deep learning predictions have finished. Results are in file "results.csv" inside input_folder/results/.\n**Thank you for using v.HULK' +) diff --git a/resources/singularity/vhulk/vhulk.def b/resources/singularity/vhulk/vhulk.def new file mode 100644 index 0000000..1314fad --- /dev/null +++ b/resources/singularity/vhulk/vhulk.def @@ -0,0 +1,56 @@ +Bootstrap: docker +From: continuumio/miniconda3 + +%labels + Maintainer papanikos_182 + Version 0.1 + Source https://github.com/LaboratorioBioinformatica/vHULK + Preprint https://www.biorxiv.org/content/10.1101/2020.12.06.413476v1 + +%files + vhulk_explicit.txt /opt/vHULK/ + vHULK /opt + vhulk_resources.tar.gz /opt/vHULK + + +%environment + export PATH=/opt/vHULK:$PATH + +%post + apt update && apt upgrade -y + conda update -y conda + + conda create -n vhulk --file=/opt/vHULK/vhulk_explicit.txt + + conda clean -ya + + echo ". /opt/conda/etc/profile.d/conda.sh" >> $SINGULARITY_ENVIRONMENT + echo "conda activate vhulk" >> $SINGULARITY_ENVIRONMENT + tar -xvzf /opt/vHULK/vhulk_resources.tar.gz -C /opt/vHULK && rm /opt/vHULK/vhulk_resources.tar.gz + +%help + A container for vHULK v0.1 ( https://github.com/LaboratorioBioinformatica/vHULK ). + + Required source scripts. models and data are stored in /opt/vHULK . + + The main vHULK-v0.1.py has been modified with + - Portable shebang + - All hardcoded paths are now hardcoded for this container + + To run the help menu for vHULK from this container execute + + $ singularity exec library://papanikos_182/vhulk:0.1 python vHULK-v0.1.py --help + + vHULK takes an input directory with one or more fasta files that are assumed to + be bins. It makes predictions based on its models for all bins separately. + That is, if you have assembled contigs you need to split them into separate files + in a directory and provide that as input. + It outputs a dir named `results`, stored within the input dir (nobody knows why..). + Its major output is a `results.csv` file with host predictions for each genome. + The results dir also contains hmmscan results and prokka annotations for all input + genomes/bins. + + To run an anlysis for all genomes stored in the /path/to/genomes, with 8 threads + + $ singularity exec library://papanikos_182/default/vhulk:0.1 \ + python vHULK_v0.1.py -i /path/to/genomes -t 8 diff --git a/resources/singularity/vhulk/vhulk_explicit.txt b/resources/singularity/vhulk/vhulk_explicit.txt new file mode 100644 index 0000000..ba34f2d --- /dev/null +++ b/resources/singularity/vhulk/vhulk_explicit.txt @@ -0,0 +1,375 @@ +# This file may be used to create an environment using: +# $ conda create --name <env> --file <this file> +# platform: linux-64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/_tflow_select-2.3.0-mkl.conda +https://repo.anaconda.com/pkgs/main/linux-64/ca-certificates-2020.12.8-h06a4308_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/ld_impl_linux-64-2.33.1-h53a641e_7.conda +https://conda.anaconda.org/biobuilds/linux-64/libdb-6.2.32-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran4-7.5.0-hae1eefd_17.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-9.3.0-h2ae2ef3_17.tar.bz2 +https://conda.anaconda.org/biobuilds/linux-64/db-utils-6.2.32-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-7.5.0-hae1eefd_17.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-9.3.0-h5dbcf3e_17.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-1_gnu.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-9.3.0-h5dbcf3e_17.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.3-h516909a_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/aragorn-1.2.38-h516909a_3.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/bzip2-1.0.8-h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/c-ares-1.17.1-h27cfd23_0.conda +https://conda.anaconda.org/bioconda/linux-64/clustalw-2.1-hc9558a2_5.tar.bz2 +https://conda.anaconda.org/biobuilds/linux-64/db-6.2.32-hf484d3e_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/expat-2.2.10-he6710b0_2.conda +https://repo.anaconda.com/pkgs/main/linux-64/fribidi-1.0.10-h7b6447c_0.conda +https://conda.anaconda.org/biobuilds/linux-64/gdbm-1.18.1-h14c3975_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/gettext-0.19.8.1-h9b4dc7a_1.conda +https://repo.anaconda.com/pkgs/main/linux-64/giflib-5.2.1-h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/graphite2-1.3.14-h23475e2_0.conda +https://conda.anaconda.org/bioconda/linux-64/hmmer-3.3.1-he1b5a44_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/icu-67.1-he1b5a44_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/infernal-1.1.3-h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/jpeg-9d-h516909a_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libffi-3.3-he6710b0_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.16-h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.12-pthreads_hb3c22a3_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libtool-2.4.6-h7b6447c_1005.conda +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.32.1-h14c3975_1000.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libwebp-base-1.1.0-h7b6447c_3.conda +https://repo.anaconda.com/pkgs/main/linux-64/libxcb-1.14-h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/lz4-c-1.9.2-heb0550a_3.conda +https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.2-he6710b0_1.conda +https://repo.anaconda.com/pkgs/main/linux-64/openssl-1.1.1i-h27cfd23_0.conda +https://conda.anaconda.org/bioconda/linux-64/paml-4.9-h516909a_5.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/pcre-8.44-he6710b0_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/perl-5.26.2-h14c3975_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/pixman-0.38.0-h7b6447c_0.conda +https://conda.anaconda.org/bioconda/linux-64/prodigal-2.6.3-h516909a_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/tidyp-1.04-h516909a_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h14c3975_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h14c3975_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.0.10-h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-h516909a_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h14c3975_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h14c3975_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h14c3975_1007.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/xz-5.2.5-h7b6447c_0.conda +https://conda.anaconda.org/biobuilds/linux-64/zlib-1.2.11-h3c3a69f_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/bedtools-2.29.2-hc088bd4_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/glib-2.66.1-h92f7085_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/hdf5-1.10.6-hb1b8bf9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-3_openblas.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libedit-3.1.20191231-h14c3975_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libidn11-1.34-h1cef754_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libpng-1.6.37-hbc83047_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/libprotobuf-3.14.0-h8c45485_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/libssh2-1.9.0-h1ba5d50_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.10-h68273f3_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/parallel-20201122-ha770c72_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-algorithm-diff-1.1903-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-algorithm-munkres-0.08-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-app-cpanminus-1.7044-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-appconfig-1.71-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-autoloader-5.74-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-base-2.23-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-capture-tiny-0.48-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-class-data-inheritable-0.08-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-class-inspector-1.34-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-class-method-modifiers-2.12-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-common-sense-3.74-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-compress-raw-bzip2-2.087-pl526he1b5a44_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-compress-raw-zlib-2.087-pl526hc9558a2_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-constant-1.33-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-convert-binary-c-0.78-pl526h6bb024c_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-convert-binhex-1.125-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-crypt-rc4-2.02-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-data-dumper-2.173-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-date-format-2.30-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-db-file-1.855-pl526h516909a_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-dbi-1.642-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-devel-stacktrace-2.04-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-digest-hmac-1.03-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-digest-md5-2.55-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-digest-perl-md5-1.9-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-digest-sha1-2.13-pl526h6bb024c_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-dynaloader-1.25-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-email-date-format-1.005-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-error-0.17027-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-exporter-5.72-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-exporter-tiny-1.002001-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-extutils-makemaker-7.36-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-slurp-tiny-0.004-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-sort-1.01-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-which-1.23-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-font-afm-1.20-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-getopt-long-2.50-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-graph-0.9704-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-entities-numbered-0.04-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-tagset-3.20-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-image-size-3.300-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-html-1.001-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-sessiondata-1.03-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-string-1.08-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-stringy-2.111-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-tty-1.12-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-zlib-1.10-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-ipc-sharelite-0.17-pl526h6bb024c_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-jcode-2.07-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-lib-0.63-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-math-cdf-0.1-pl526h14c3975_5.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-math-derivative-1.01-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-math-random-0.72-pl526h14c3975_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mime-types-2.17-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mldbm-2.05-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-module-runtime-0.016-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mozilla-ca-20180117-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mro-compat-0.13-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-ole-storage_lite-0.19-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-params-util-1.07-pl526h6bb024c_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-parent-0.236-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-parse-recdescent-1.967015-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-postscript-0.06-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-scalar-list-utils-1.52-pl526h516909a_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-set-scalar-1.29-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-socket-2.027-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sort-naturally-1.03-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sub-exporter-progressive-0.001013-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sub-identify-0.14-pl526h14c3975_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sub-name-0.21-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sub-quote-2.006003-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sub-uplevel-0.2800-pl526h14c3975_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-svg-2.84-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-task-weaken-1.06-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-deep-1.128-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-harness-3.42-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-leaktrace-0.16-pl526h14c3975_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-tie-ixhash-1.23-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-timedate-2.30-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-try-tiny-0.30-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-unicode-map-0.112-pl526h6bb024c_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/perl-xml-parser-2.44_01-pl526ha1d75be_1002.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-regexp-0.04-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-sax-base-1.09-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-writer-0.625-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-xpathengine-0.14-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xsloader-0.24-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-yaml-1.29-pl526_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/readline-8.0-h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/tk-8.6.10-hbc83047_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-h14c3975_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.3-h84519dc_1000.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.12-h516909a_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/zstd-1.4.5-h9ceee32_0.conda +https://conda.anaconda.org/bioconda/linux-64/barrnap-0.9-2.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/freetype-2.10.4-h5ab3b9f_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/krb5-1.18.2-h173b8e3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-3_openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-3_openblas.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/libtiff-4.1.0-h2733197_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.33-h572872d_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-carp-1.38-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-clone-0.42-pl526h516909a_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-dbd-sqlite-1.64-pl526h516909a_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-devel-globaldestruction-0.14-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-encode-2.88-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-exception-class-1.44-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-path-2.16-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-font-ttf-1.06-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-parser-3.72-pl526h6bb024c_5.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-compress-2.087-pl526he1b5a44_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-ipc-run-20180523.0-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-libxml-perl-0.08-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-list-moreutils-xs-0.428-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-mailtools-2.21-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-math-spline-0.02-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mime-base64-3.15-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-ntlm-1.09-pl526_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-package-stash-xs-0.28-pl526hf484d3e_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-pod-escapes-1.07-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-role-tiny-2.000008-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-spreadsheet-writeexcel-2.40-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-storable-3.15-pl526h14c3975_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-1.26-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-exception-0.43-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-requiresinternet-0.05-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-warn-0.36-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-text-diff-1.45-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-tree-dag_node-1.31-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-type-tiny-1.004004-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-types-serialiser-1.0-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-filter-buffertext-1.01-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-namespacesupport-1.12-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-xpath-1.44-pl526_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/sqlite-3.33.0-h62c20be_0.conda +https://conda.anaconda.org/bioconda/linux-64/tbl2asn-forever-25.7.2f-h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-5.0.3-h516909a_1004.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-h516909a_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.1.5-h516909a_1003.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.13.1-h1056068_1002.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/lcms2-2.11-h396b838_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/libcurl-7.71.1-h20c2e04_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.1.0-h56121f0_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-business-isbn-data-20140910.003-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-cache-cache-1.08-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-dist-checkconflicts-0.11-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-encode-locale-1.05-pl526_6.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-eval-closure-0.14-pl526h6bb024c_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-temp-0.2304-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-tidy-1.60-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-tree-5.07-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-json-xs-2.34-pl526h6bb024c_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-list-moreutils-0.428-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-lwp-mediatypes-6.04-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mime-lite-3.030-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-mime-tools-5.508-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-module-implementation-0.09-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-net-ssleay-1.88-pl526h90d6eec_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-pathtools-3.75-pl526h14c3975_1.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-pdf-api2-2.035-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-pod-usage-1.69-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-spreadsheet-parseexcel-0.65-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sub-install-0.928-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-test-differences-0.67-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-time-hires-1.9760-pl526h14c3975_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-time-local-1.28-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-sax-writer-0.57-pl526_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/python-3.6.12-hcff3b4d_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h516909a_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxpm-3.5.13-h516909a_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/async-timeout-3.0.1-py36_0.conda +https://repo.anaconda.com/pkgs/main/noarch/attrs-20.3.0-pyhd3eb1b0_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/blinker-1.4-py36_0.conda +https://repo.anaconda.com/pkgs/main/noarch/cachetools-4.2.0-pyhd3eb1b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h3fc0475_1005.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/certifi-2020.12.5-py36h06a4308_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/chardet-3.0.4-py36_1003.conda +https://repo.anaconda.com/pkgs/main/noarch/click-7.1.2-py_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/curl-7.71.1-hbc83047_1.conda +https://repo.anaconda.com/pkgs/main/noarch/gast-0.3.3-py_0.conda +https://repo.anaconda.com/pkgs/main/noarch/idna-2.10-py_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.2.5-h341251c_1008.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/multidict-4.7.6-py36h7b6447c_1.conda +https://conda.anaconda.org/bioconda/linux-64/perl-aceperl-1.92-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-apache-test-1.40-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-archive-tar-2.32-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-business-isbn-3.004-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-cgi-4.44-pl526h14c3975_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-data-optlist-0.110-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-element-extended-1.18-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-formatter-2.16-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-treebuilder-xpath-0.14-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-date-6.02-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-io-socket-ssl-2.066-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-json-4.02-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-lwp-simple-6.15-pl526h470a237_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-module-runtime-conflicts-0.003-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-statistics-descriptive-3.0702-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-test-most-0.35-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-xml-sax-1.02-pl526_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/pyasn1-0.4.8-py_0.conda +https://repo.anaconda.com/pkgs/main/noarch/pycparser-2.20-py_2.conda +https://repo.anaconda.com/pkgs/main/linux-64/pysocks-1.7.1-py36_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.6-1_cp36m.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/pytz-2020.4-pyhd3eb1b0_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/six-1.15.0-py36h06a4308_0.conda +https://conda.anaconda.org/conda-forge/noarch/tensorboard-plugin-wit-1.7.0-pyh9f0ad1d_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/termcolor-1.1.0-py36_1.conda +https://repo.anaconda.com/pkgs/main/noarch/typing_extensions-3.7.4.3-py_0.conda +https://repo.anaconda.com/pkgs/main/noarch/werkzeug-1.0.1-py_0.conda +https://repo.anaconda.com/pkgs/main/noarch/wheel-0.36.2-pyhd3eb1b0_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/wrapt-1.12.1-py36h7b6447c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.3-h516909a_1002.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/zipp-3.4.0-pyhd3eb1b0_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/absl-py-0.11.0-py36h06a4308_0.conda +https://repo.anaconda.com/pkgs/main/noarch/astunparse-1.6.3-py_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/cffi-1.14.4-py36h261ae71_0.conda +https://repo.anaconda.com/pkgs/main/noarch/google-pasta-0.2.0-py_0.conda +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-2.7.2-hee91db6_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/idna_ssl-1.1.0-py36_0.conda +https://conda.anaconda.org/conda-forge/linux-64/importlib-metadata-3.3.0-py36h5fab9bb_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.19.4-py36h2aa4a07_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-file-listing-6.04-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-gd-2.71-pl526he860b03_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-html-tableextract-2.13-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-package-stash-0.38-pl526hf484d3e_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-sub-exporter-0.987-pl526_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-svg-graph-0.02-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-uri-1.76-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-libxml-2.0132-pl526h7ec2d77_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-sax-expat-0.51-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-twig-3.52-pl526_2.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/pyasn1-modules-0.2.8-py_0.conda +https://repo.anaconda.com/pkgs/main/noarch/python-dateutil-2.8.1-py_0.conda +https://repo.anaconda.com/pkgs/main/noarch/rsa-4.6-py_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/setuptools-51.0.0-py36h06a4308_2.conda +https://conda.anaconda.org/bioconda/linux-64/t_coffee-11.0.8-py36hea885bf_8.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/typing-extensions-3.7.4.3-0.conda +https://repo.anaconda.com/pkgs/main/linux-64/yarl-1.5.1-py36h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/aiohttp-3.7.3-py36h27cfd23_1.conda +https://repo.anaconda.com/pkgs/main/linux-64/biopython-1.78-py36h7b6447c_0.conda +https://repo.anaconda.com/pkgs/main/linux-64/brotlipy-0.7.0-py36h27cfd23_1003.conda +https://repo.anaconda.com/pkgs/main/linux-64/cryptography-3.3.1-py36h3c74f83_0.conda +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.34.0-py36h8e87921_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/h5py-2.10.0-py36hd6299e0_1.conda +https://repo.anaconda.com/pkgs/main/linux-64/markdown-3.3.3-py36h06a4308_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openjdk-11.0.8-hacce0ff_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-py_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pandas-1.1.5-py36h284efc9_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pango-1.42.4-h7062337_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-class-load-0.25-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-devel-overloadinfo-0.005-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-message-6.18-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-image-info-1.38-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-net-http-6.19-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-package-deprecationmanager-0.17-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-www-robotrules-6.02-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-libxslt-1.94-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-simple-2.25-pl526_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/pip-20.3.1-py36h06a4308_0.conda +https://conda.anaconda.org/conda-forge/linux-64/protobuf-3.14.0-py36hc4f0c31_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.5.3-py36h976291a_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/google-auth-1.24.0-pyhd3eb1b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/graphviz-2.42.3-h0511662_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/keras-preprocessing-1.1.0-py_1.conda +https://conda.anaconda.org/bioconda/noarch/minced-0.4.2-0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-class-load-xs-0.10-pl526h6bb024c_2.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-data-stag-0.14-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-cookies-6.04-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-daemon-6.01-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-http-negotiate-6.01-pl526_3.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-template-toolkit-2.26-pl526_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/pyjwt-1.7.1-py36_0.conda +https://repo.anaconda.com/pkgs/main/noarch/pyopenssl-20.0.0-pyhd3eb1b0_1.conda +https://repo.anaconda.com/pkgs/main/noarch/oauthlib-3.1.0-py_0.conda +https://conda.anaconda.org/bioconda/linux-64/perl-bio-phylo-0.58-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-graphviz-2.24-pl526h734ff71_0.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/perl-libwww-perl-6.39-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-moose-2.2011-pl526hf484d3e_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/tensorflow-base-2.2.0-mkl_py36hd506778_0.conda +https://repo.anaconda.com/pkgs/main/noarch/urllib3-1.25.11-py_0.conda +https://conda.anaconda.org/bioconda/linux-64/perl-lwp-protocol-https-6.07-pl526_4.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-moo-2.003004-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-dom-1.46-pl526_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/requests-2.25.0-pyhd3eb1b0_0.conda +https://repo.anaconda.com/pkgs/main/noarch/tensorflow-estimator-2.2.0-pyh208ff02_0.conda +https://conda.anaconda.org/bioconda/linux-64/entrez-direct-13.9-pl526h375a9b1_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-array-compare-3.0.1-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-soap-lite-1.19-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-xml-dom-xpath-0.14-pl526_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/requests-oauthlib-1.3.0-py_0.conda +https://conda.anaconda.org/bioconda/linux-64/blast-2.10.1-pl526he19e7b1_3.tar.bz2 +https://repo.anaconda.com/pkgs/main/noarch/google-auth-oauthlib-0.4.1-py_2.conda +https://conda.anaconda.org/bioconda/linux-64/perl-bioperl-core-1.007002-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bio-asn1-entrezgene-1.73-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bio-coordinate-1.007001-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bio-featureio-1.6.905-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bio-samtools-1.43-pl526h1341992_1.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.4.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bioperl-run-1.007002-pl526_3.tar.bz2 +https://repo.anaconda.com/pkgs/main/linux-64/tensorflow-2.2.0-mkl_py36h5a57954_0.conda +https://conda.anaconda.org/bioconda/linux-64/perl-bio-tools-phylo-paml-1.7.3-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bio-tools-run-alignment-clustalw-1.7.4-pl526_0.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bio-tools-run-alignment-tcoffee-1.7.4-pl526_1.tar.bz2 +https://conda.anaconda.org/bioconda/linux-64/perl-bioperl-1.7.2-pl526_10.tar.bz2 +https://conda.anaconda.org/bioconda/noarch/prokka-1.14.6-pl526_0.tar.bz2 diff --git a/resources/singularity/wish/README.md b/resources/singularity/wish/README.md new file mode 100644 index 0000000..003fabf --- /dev/null +++ b/resources/singularity/wish/README.md @@ -0,0 +1,32 @@ +# WIsH + +Available from `library://papanikos_182/default/wish:1.0` + +* Note that data dependencies are not included in the container. +Models from [VirHostMatcher-Net](https://github.com/WeiliWw/VirHostMatcher-Net#downloading) +are used + +## Procedure + +1. Build the image with the definition file +``` +$ sudo singularity build wish.sif wish.def +``` + +3. [Optional] Sign the image +``` +$ singularity sign wish.sif +``` + +4. Push it on the cloud +``` +$ singulairty push wish.sif library://papanikos_182/default/wish:0.1 +``` + +## Usage + +``` +$ singularity run library://papanikos_182/default/wish:1.0 \ + WIsH -h +``` + diff --git a/resources/singularity/wish/wish.def b/resources/singularity/wish/wish.def new file mode 100644 index 0000000..0e3e4cb --- /dev/null +++ b/resources/singularity/wish/wish.def @@ -0,0 +1,45 @@ +Bootstrap: docker +From: debian:latest + +%labels + Maintainer papanikos_182 + Version 0.1 + Source https://github.com/soedinglab/WIsH + Publication https://academic.oup.com/bioinformatics/article/33/19/3113/3964377 + + +%environment + export PATH=/opt/wish:$PATH + +%post + # Update stuff + apt update && apt upgrade -y + + # Install compile tools for compiling wish + apt install -y build-essential cmake make git + + # get source + git clone https://github.com/soedinglab/WIsH.git /opt/wish + + # Get in there + cd /opt/wish + + # Compile it + cmake . && make + + +%help + A container for WIsH. + + Source: https://github.com/soedinglab/WIsH + + Models for host genomes are provided from VirHostMatcher-Net. + + Example: + # Probably you need to bind the path/to/data/host_wish_model + $ singularity exec -B /path/to/data/host_wish_model:/data \ + WIsH -c predict -m /data \ + -g /path/to/phage/genomes/fastas \ + -r /path/to/results \ + -b + -- GitLab