Skip to content
Snippets Groups Projects
Commit fb6ef16e authored by Studer Gabriel's avatar Studer Gabriel
Browse files

Merge branch 'release-4.3.0'

parents 785625f6 7a0d3f55
No related branches found
No related tags found
No related merge requests found
Showing
with 23682 additions and 5 deletions
Changes in Release 4.3.0
--------------------------------------------------------------------------------
* Containerized workflows for published QMEAN flavours (QMEAN, QMEANDisCo,
QMEANBrane)
* Several minor bug fixes, improvements
Changes in Release 4.2.0 Changes in Release 4.2.0
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
...@@ -8,7 +16,6 @@ Changes in Release 4.2.0 ...@@ -8,7 +16,6 @@ Changes in Release 4.2.0
* Several minor bug fixes, improvements * Several minor bug fixes, improvements
Changes in Release 4.1.0 Changes in Release 4.1.0
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
......
...@@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.12.1 FATAL_ERROR) ...@@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.12.1 FATAL_ERROR)
cmake_policy(SET CMP0060 NEW) cmake_policy(SET CMP0060 NEW)
set (QMEAN_VERSION_MAJOR 4) set (QMEAN_VERSION_MAJOR 4)
set (QMEAN_VERSION_MINOR 2) set (QMEAN_VERSION_MINOR 3)
set (QMEAN_VERSION_PATCH 0) set (QMEAN_VERSION_PATCH 0)
set (QMEAN_VERSION_STRING ${QMEAN_VERSION_MAJOR}.${QMEAN_VERSION_MINOR}.${QMEAN_VERSION_PATCH} ) set (QMEAN_VERSION_STRING ${QMEAN_VERSION_MAJOR}.${QMEAN_VERSION_MINOR}.${QMEAN_VERSION_PATCH} )
...@@ -74,7 +74,7 @@ set(PYTHON_MODULE_PATH "python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/si ...@@ -74,7 +74,7 @@ set(PYTHON_MODULE_PATH "python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/si
setup_boost() setup_boost()
find_package(OPENSTRUCTURE 2.2.0 REQUIRED find_package(OPENSTRUCTURE 2.3.0 REQUIRED
COMPONENTS mol seq seq_alg mol_alg conop db) COMPONENTS mol seq seq_alg mol_alg conop db)
include_directories(${Boost_INCLUDE_DIRS} include_directories(${Boost_INCLUDE_DIRS}
......
...@@ -70,9 +70,9 @@ copyright = u'2016-2020, Gabriel Studer' ...@@ -70,9 +70,9 @@ copyright = u'2016-2020, Gabriel Studer'
# built documents. # built documents.
# #
# The short X.Y version. # The short X.Y version.
release = '4.2.0' release = '4.3.0'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = '4.2.0' release = '4.3.0'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
......
FROM centos:7.4.1708
# Arguments, optional
ARG CPUS_FOR_MAKE=1
ARG OPT_FOR_CPU=0
# Environment variables
ENV CFLAGS="-march=x86-64 -mtune=generic -isystem /usr/local/include/boost/ -isystem /usr/local/openmm/include" \
HHLIB="/usr/local" \
LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH" \
PERL5LIB="/usr/local/scripts" \
PYTHONPATH="/usr/local/lib64/python3.6/site-packages/:${PYTHONPATH}" \
SCCRE_GTLB="https://git.scicore.unibas.ch/schwede" \
SRC_FLDR="/tmp" \
TEMP="/tmp" \
TEMPDIR="/tmp" \
TMP="/tmp" \
TMPDIR="/tmp"
# Define environment variables depending on other variables
ENV CXXFLAGS=${CFLAGS}
# Set up TMP env var. For some reason, it can't be established using ENV in a
# CentOS image.
RUN echo "# For bash users with uid higher" > /etc/profile.d/tmpdir.sh && \
echo "# than 500 TMPDIR env var points to" >> /etc/profile.d/tmpdir.sh && \
echo "# /scratch. If $TMPDIR is not" >> /etc/profile.d/tmpdir.sh && \
echo "# defined." >> /etc/profile.d/tmpdir.sh && \
echo "# (DISABLED UNTIL WE ACTUALLY " >> /etc/profile.d/tmpdir.sh && \
echo "# WANT THE SPLIT)" >> /etc/profile.d/tmpdir.sh && \
echo "#if [ "$UID" -ge 500 ]; then" >> /etc/profile.d/tmpdir.sh && \
echo " if [ -z "$TMPDIR" ]; then" >> /etc/profile.d/tmpdir.sh && \
echo " export TMPDIR=/tmp" >> /etc/profile.d/tmpdir.sh && \
echo " fi" >> /etc/profile.d/tmpdir.sh && \
echo " export TMP=${TMPDIR}" >> /etc/profile.d/tmpdir.sh && \
echo " export TEMP=${TMPDIR}" >> /etc/profile.d/tmpdir.sh && \
echo " export TEMPDIR=${TMPDIR}" >> /etc/profile.d/tmpdir.sh && \
echo "#fi" >> /etc/profile.d/tmpdir.sh
WORKDIR ${SRC_FLDR}
#
# Compile & install software dependencies
#
# Versions of software used, prefixed with VERSION so $VERSION_<TAB><TAB>
# in the shell produces a list of possible software versions ;)
ENV VERSION_BLAST="2.2.26" \
VERSION_BOOST="1.68.0" \
VERSION_CMAKE="3.17.3" \
VERSION_EIGEN="3.3.1" \
VERSION_HHBLITS="3.3.0" \
VERSION_PSIPRED="3.5" \
VERSION_SSPRO="4.03"
#
# Copy patch files for SSPro/ ACCPro
#
COPY getACCAligns.pl.patch /tmp/
COPY homology_sa.pl.patch /tmp/
COPY predict_ss_sa.pl.patch /tmp/
RUN set -eo pipefail; \
# \
# Install dependencies for building software \
# \
/usr/bin/yum makecache fast; \
/usr/bin/yum -y install epel-release; \
/usr/bin/yum update --assumeyes; \
/usr/bin/yum install --assumeyes bzip2 gcc-c++ compat-libstdc++-33.i686 \
glibc.i686 make openssl-devel patch \
pcre-devel perl python3 python3-devel \
zlib-static; \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum; \
# \
# Install Python modules \
# \
/usr/bin/python3 -m pip install --upgrade --no-cache-dir pip; \
/usr/bin/python3 -m pip install --no-cache-dir numpy==1.17.4 \
scipy==1.4.0 \
matplotlib==3.1.2; \
# configure matplotlib \
/usr/bin/mkdir -p $HOME/.config/matplotlib/; \
echo "backend : Agg" > $HOME/.config/matplotlib/matplotlibrc; \
# Import matplot once to generate the fontcache \
echo "import matplotlib.pyplot" | /usr/bin/python3; \
# \
# Install: a recent version of CMake \
# \
cd ${SRC_FLDR}; \
/usr/bin/curl -o cmake.tar.gz -L https://github.com/Kitware/CMake/releases/download/v${VERSION_CMAKE}/cmake-${VERSION_CMAKE}.tar.gz; \
/usr/bin/mkdir -p cmake/build; \
/usr/bin/tar --strip-components=1 -C cmake -xf cmake.tar.gz; \
/usr/bin/rm -f cmake.tar.gz; \
cd cmake/build; \
../bootstrap; \
/usr/bin/make -j ${CPUS_FOR_MAKE}; \
/usr/bin/make install; \
cd ${SRC_FLDR}; \
/usr/bin/rm -rf cmake; \
# \
# Install: Eigen \
# \
cd ${SRC_FLDR}; \
/usr/bin/curl -o eigen.tar.bz2 -L https://gitlab.com/libeigen/eigen/-/archive/${VERSION_EIGEN}/eigen-${VERSION_EIGEN}.tar.bz2; \
/usr/bin/mkdir eigen/; \
/usr/bin/tar --strip-components=1 -C eigen/ -xf eigen.tar.bz2; \
/usr/bin/rm -rf eigen.tar.bz2; \
/usr/bin/mv eigen/Eigen /usr/local/include; \
/usr/bin/rm -rf eigen; \
# \
# Install: Boost \
# \
cd ${SRC_FLDR}; \
/usr/bin/curl -o boost.tar.bz2 -L https://sourceforge.net/projects/boost/files/boost/${VERSION_BOOST}/boost_${VERSION_BOOST//\./_}.tar.bz2/download; \
/usr/bin/mkdir boost; \
/usr/bin/tar --strip-components=1 -C boost -xf boost.tar.bz2; \
/usr/bin/rm -f boost.tar.bz2; \
cd boost; \
# Python 3.6 in CentOS uses pymalloc, hence there is a 'm' at the end of
# the include dir which Boost 1.68.0 does not consider.
/usr/bin/sed -i 's/includes ?= \$(prefix)\/include\/python\$(version)/includes ?= \$(prefix)\/include\/python\$(version)m/g' \
tools/build/src/tools/python.jam; \
./bootstrap.sh --prefix=/usr/local --with-python=/usr/bin/python3; \
./b2 --without-mpi; \
./b2 install; \
cd ${SRC_FLDR}; \
/usr/bin/rm -rf boost; \
# \
# Install PsiPred \
# \
cd ${SRC_FLDR}; \
/usr/bin/mkdir psipred; \
/usr/bin/curl -o psipred.tar.gz -L http://bioinfadmin.cs.ucl.ac.uk/downloads/psipred/old_versions/psipred${VERSION_PSIPRED}.tar.gz; \
/usr/bin/tar --strip-components=1 -C psipred -xf psipred.tar.gz; \
/usr/bin/rm -f psipred.tar.gz; \
cd psipred/src; \
/usr/bin/make -j ${CPUS_FOR_MAKE}; \
/usr/bin/cp {chkparse,pfilt,psipass2,psipred,seq2mtx} /usr/local/bin/; \
cd ..; \
/usr/bin/cp {runpsipred_single,runpsipred} /usr/local/bin/; \
/usr/bin/cp -r data /usr/local/; \
cd ${SRC_FLDR}; \
/usr/bin/rm -rf psipred; \
# \
# Install BLAST 2.2.26 (this is the old version, not BLAST+)\
# \
cd ${SRC_FLDR}; \
/usr/bin/mkdir blast; \
/usr/bin/curl -o blast.tar.gz -L https://ftp.ncbi.nlm.nih.gov/blast/executables/legacy.NOTSUPPORTED/${VERSION_BLAST}/blast-${VERSION_BLAST}-x64-linux.tar.gz; \
/usr/bin/tar --strip-components=1 -C blast -xf blast.tar.gz; \
/usr/bin/rm -f blast.tar.gz; \
/usr/bin/cp blast/bin/* /usr/local/bin/; \
/usr/bin/mkdir -p /usr/local/data/; \
/usr/bin/cp blast/data/* /usr/local/data/; \
/usr/bin/rm -rf blast; \
# \
# Install HHblits \
# \
cd ${SRC_FLDR}; \
/usr/bin/mkdir hh-suite; \
/usr/bin/curl -o hh-suite.tar.gz -L https://github.com/soedinglab/hh-suite/archive/refs/tags/v${VERSION_HHBLITS}.tar.gz; \
/usr/bin/tar --strip-components=1 -C hh-suite -xf hh-suite.tar.gz; \
/usr/bin/rm -f hh-suite.tar.gz; \
cd hh-suite; \
# Fix paths settings in a Perl module of the HH-Suite
/usr/bin/sed -i 's/\/cluster\/toolkit\/production\/bioprogs\/psipred\/bin/\/usr\/local\/bin/g' scripts/HHPaths.pm; \
/usr/bin/sed -i 's/\/cluster\/toolkit\/production\/bioprogs\/psipred\/data/\/usr\/local\/data/g' scripts/HHPaths.pm; \
/usr/bin/sed -i 's/\/cluster\/toolkit\/production\/bioprogs\/blast\/bin/\/usr\/local\/bin/g' scripts/HHPaths.pm; \
_hhblts_cmke=""; \
if test ${OPT_FOR_CPU} -eq 0; then \
_hhblts_cmke="-DHAVE_SSE2=1"; \
fi; \
/usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX=/usr/local ${_hhblts_cmke}; \
/usr/bin/make -j ${CPUS_FOR_MAKE} NO_PNG=1; \
/usr/bin/make install INSTALL_DIR=/usr/local; \
cd ${SRC_FLDR}; \
/usr/bin/rm -rf hh-suite; \
# \
# Install SSpro and clean up outdated/ unused files \
# \
/usr/bin/mkdir /usr/local/sspro; \
/usr/bin/curl -o sspro.tar.gz -L http://download.igb.uci.edu/sspro4.tar.gz; \
/usr/bin/tar --strip-components=1 -C /usr/local/sspro -xf sspro.tar.gz; \
/usr/bin/rm -f sspro4.tar.gz; \
cd /usr/local/sspro; \
/usr/bin/sed -i 's/\/home\/baldig\/jianlin\/sspro4\//\/usr\/local\/sspro\//g' \
configure.pl; \
/usr/bin/perl configure.pl; \
/usr/bin/rm -rf /usr/local/sspro/data/nr /usr/local/sspro/data/big \
/usr/local/sspro/data/pdb_small \
/usr/local/sspro/data/pdb_large/old/ \
/usr/local/sspro/data/pdb_large/new/ \
/usr/local/sspro/blast2.2.8 \
/usr/local/sspro/model/sspro \
/usr/local/sspro/test \
/usr/local/sspro/configure.pl~; \
/usr/bin/chmod -R og+rx /usr/local/sspro/; \
# apply patch files \
/usr/bin/patch /usr/local/sspro/script/getACCAligns.pl < /tmp/getACCAligns.pl.patch; \
/usr/bin/rm -f /tmp/getACCAligns.pl.patch; \
/usr/bin/patch /usr/local/sspro/script/homology_sa.pl < /tmp/homology_sa.pl.patch; \
/usr/bin/rm -f /tmp/homology_sa.pl.patch; \
/usr/bin/patch /usr/local/sspro/script/predict_ss_sa.pl < /tmp/predict_ss_sa.pl.patch; \
/usr/bin/rm -f /tmp/predict_ss_sa.pl.patch; \
# \
# Cleanup packages only needed to compile/ install things to keep the \
# image size low. \
# \
/usr/bin/yum --assumeyes remove bzip2 gcc gcc-c++ glibc-devel make \
patch pcre-devel openssl-devel \
python3-devel python3-pip zlib-devel \
zlib-static; \
/usr/bin/yum --assumeyes autoremove; \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum; \
/usr/bin/rm -rf /tmp/*; \
# removing python3-devel also removes the entire Python 3 installation...
/usr/bin/yum makecache fast; \
/usr/bin/yum -y install epel-release; \
/usr/bin/yum install --assumeyes python3; \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum
#
# Install OpenStructure
#
# Version can be switched via --build-arg OST_VERSION="<TAG|BRANCH>"
ARG OST_VERSION="2.2.0"
ENV VERSION_OPENSTRUCTURE=$OST_VERSION
RUN set -eo pipefail; \
# \
# Install dependencies for building software \
# \
/usr/bin/yum makecache fast; \
/usr/bin/yum -y install epel-release; \
/usr/bin/yum update --assumeyes; \
/usr/bin/yum install --assumeyes fftw fftw-devel gcc-c++ libpng \
libpng-devel libtiff-devel make \
python3-devel \
sqlite-devel \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum; \
cd ${SRC_FLDR}; \
/usr/bin/mkdir ost; \
/usr/bin/curl -o ost.tar.gz -L ${SCCRE_GTLB}/openstructure/-/archive/${OST_VERSION}/openstructure-${OST_VERSION}.tar.gz; \
/usr/bin/tar --strip-components=1 -C ost -xf ost.tar.gz; \
/usr/bin/rm -f ost.tar.gz; \
/usr/bin/mkdir ost/build; \
cd ost/build; \
/usr/local/bin/cmake .. -DCOMPILE_TMTOOLS=OFF \
-DENABLE_INFO=OFF \
-DENABLE_GFX=OFF \
-DENABLE_GUI=OFF \
-DUSE_NUMPY=OFF \
-DUSE_RPATH=1 \
-DOPTIMIZE=1; \
# 1st run: get everything to build a compounds library
/usr/bin/make -j ${CPUS_FOR_MAKE} chemdict_tool; \
# get the compounds dictionary from RCSB PDB
/usr/bin/curl -o components.cif.gz -L ftp://ftp.wwpdb.org/pub/pdb/data/monomers/components.cif.gz; \
stage/bin/chemdict_tool create components.cif.gz compounds.chemlib pdb; \
stage/bin/chemdict_tool update modules/conop/data/charmm.cif \
compounds.chemlib charmm; \
# 2nd run: build OST with a compounds library
/usr/local/bin/cmake .. -DCOMPOUND_LIB=compounds.chemlib; \
/usr/bin/make -j ${CPUS_FOR_MAKE}; \
/usr/bin/make check; \
/usr/bin/make install; \
cd ${SRC_FLDR}; \
/usr/bin/rm -rf ost; \
# make the compounds.chemlib interchangeable: move to its own dir and link
/usr/bin/mkdir /qmtl; \
/usr/bin/mv /usr/local/share/openstructure/compounds.chemlib \
/qmtl/; \
ln -s /qmtl/compounds.chemlib /usr/local/share/openstructure/; \
# \
# Cleanup packages only needed to compile/ install things \
# \
/usr/bin/yum --assumeyes remove fftw-devel gcc gcc-c++ glibc-devel \
libpng-devel make python3-devel \
sqlite-devel zlib-devel; \
/usr/bin/yum --assumeyes autoremove; \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum; \
/usr/bin/rm -rf /tmp/*
#
# Install QMEAN
#
# Version can be switched via --build-arg QMEAN_VERSION="<TAG|BRANCH>"
ARG QMEAN_VERSION="4.2.0"
ENV VERSION_QMEAN=$QMEAN_VERSION
RUN set -eo pipefail; \
# \
# Install dependencies for building software \
# \
/usr/bin/yum makecache fast; \
/usr/bin/yum -y install epel-release; \
/usr/bin/yum update --assumeyes; \
/usr/bin/yum install --assumeyes gcc-c++ make python3-devel; \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum; \
/usr/bin/curl -o qmean.tar.gz -L ${SCCRE_GTLB}/QMEAN/-/archive/${QMEAN_VERSION}/qmean-${QMEAN_VERSION}.tar.gz; \
/usr/bin/mkdir qmean; \
/usr/bin/tar --strip-components=1 -C qmean -xf qmean.tar.gz; \
/usr/bin/rm -f qmean.tar.gz; \
/usr/bin/mkdir qmean/build; \
cd qmean/build; \
/usr/local/bin/cmake .. -DOPTIMIZE=1 -DOST_ROOT=/usr/local; \
/usr/bin/make -j ${CPUS_FOR_MAKE}; \
/usr/bin/make check; \
/usr/bin/make install; \
cd ${SRC_FLDR}; \
/usr/bin/rm -rf qmean; \
# \
# Cleanup packages only needed to compile/ install things \
# \
/usr/bin/yum --assumeyes remove gcc gcc-c++ glibc-devel make python3-devel; \
/usr/bin/yum --assumeyes autoremove; \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum; \
/usr/bin/rm -rf /tmp/*; \
# removing python3-devel also removes the entire Python 3 installation...
/usr/bin/yum makecache fast; \
/usr/bin/yum -y install epel-release; \
/usr/bin/yum install --assumeyes python3; \
/usr/bin/yum --assumeyes clean all; \
/usr/bin/rm -rf /var/cache/yum
# only for the hackathon
#RUN set -eo pipefail; \
# /usr/bin/python3 -m pip install --upgrade --no-cache-dir pip; \
# /usr/bin/python3 -m pip install --no-cache-dir pylint black
# Labels
LABEL license=""
LABEL org.openstructure.ost.license="LGPL Version 3"
LABEL org.openstructure.qmean.license="Apache License Version 2.0, January 2004"
LABEL org.openstructure.version="${OST_VERSION}"
LABEL org.openstructure.qmean.version="${QMEAN_VERSION}"
LABEL org.openstructure.ost.version.is-production="yes"
LABEL org.openstructure.qmean.version.is-production="yes"
# This is a counter to be increased with every built & uploaded image
LABEL org.openstructure.qmean.docker.image.increment="2"
LABEL maintainer="Stefan Bienert <stefan.bienert@unibas.ch>"
LABEL vendor1="Schwede Group (schwedelab.org)"
LABEL vendor2="SIB - Swiss Institute of Bioinformatics"
LABEL vendor3="Biozentrum - University of Basel"
# create user & group to run QMEAN
# IDs can be switched via --build-arg QMEAN_USER_ID=<USER ID>,
# e.g. --build-arg QMEAN_USER_ID=$(id -u) for your own user. That would mean
# that files and directories outside of the container would belong to you and
# directories you create to be mounted as volumes inside the container are owned
# by the QMEAN user. Just make sure to match the user ID with the one running the
# container in production or make corresponding directories writable. Treat the
# group ID similar.
ARG QMEAN_USER_ID=1000
ARG QMEAN_GROUP_ID=1000
ENV QMEAN_USER="qmean" \
QMEAN_GROUP="qmean"
RUN groupadd --gid $QMEAN_GROUP_ID $QMEAN_GROUP; \
useradd --no-log-init -u $QMEAN_USER_ID -r -ms /bin/bash -g $QMEAN_GROUP \
$QMEAN_USER; \
/usr/bin/mkdir /qmean; \
/usr/bin/cp /usr/local/sspro/script/getACCAligns.pl /qmean/; \
/usr/bin/cp /usr/local/sspro/script/homology_sa.pl /qmean/; \
/usr/bin/cp /usr/local/sspro/script/predict_ss_sa.pl /qmean/; \
/usr/bin/mkdir /data; \
/usr/bin/chgrp -R $QMEAN_GROUP /data; \
/usr/bin/chown -R $QMEAN_USER /data
# Copy script to run QMEANDisCo
COPY run_qmean.py /qmean/
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1
WORKDIR /data
COPY docker-entrypoint.sh /qmean
ENTRYPOINT ["/qmean/docker-entrypoint.sh"]
CMD ["/qmean/run_qmean.py"]
USER $QMEAN_USER
# TODO:
# - note in README how to rebuild with a dedicated user, also test that this
# works
# - turn the run-qmeandisco.py into a proper QMEAN DisCo
# - requires HHBlits, ACCPro and maybe more software in this image
# - in the README note how to switch to a recent compounds.chemlib
# - to be discussed: provide weekly download of compounds.chemlib?
# - copy runscript from cloned repo, not build context!
# - run as user qmean, make sure that swapping the compounds library also works
# - put into docs how to create a compounds library with this container
# - mention in docs how to build a container with dedicated uid to fit into your
# system
# - place docker-entrypoint.sh and qmeandisco script in a non-writable folder for
# security reasons, folder should also be not mountable
# - From Docker best practices (not possible right now, maybe they revert that
# advice in the future):
# - run NTP client (https://docs.docker.com/develop/dev-best-practices/)
# - debian slim:
# - QMEAN is a Python app, start with a debian-slim Python3 base image?
# - for base image, consider what is persistantly installed as base
# LocalWords: QMEAN arg
A Container for QMEAN Protein Structure Model Evaluation
========================================================
This Dockerfile describes an image of the QMEAN software package ([service](
https://swissmodel.expasy.org/qmean/),
[Git](https://git.scicore.unibas.ch/schwede/QMEAN),
[Docker](https://git.scicore.unibas.ch/schwede/QMEAN/container_registry)).
Table Of Contents
-----------------
* [Available Scoring Functions](#scoringfunctions)
* [Input Requirements](#inputrequirements)
* [Structure Processing](#structureprocessing)
* [Obtain the image (Docker `pull`)](#qmeanpull)
* [Obtain an optimised image (Docker `build`)](#qmeanbuild)
* [Additional requirements](#additionalrequirements)
* [Score](#score)
* [Singularity](#singularity)
* [Results](#results)
* [Examples](#examples)
<a name="scoringfunctions"></a>Available Scoring Functions
----------------------------------------------------------
The following scoring functions are implemented:
[QMEANDisCo](https://doi.org/10.1093/bioinformatics/btz828):
> Studer, G., Rempfer, C., Waterhouse, A.M., Gumienny, R., Haas, J., Schwede, T. QMEANDisCo-distance constraints applied on model quality estimation, Bioinformatics 36, 1765–1771 (2020).
>
[QMEAN](https://doi.org/10.1093/bioinformatics/btq662):
> Benkert, P., Biasini, M., Schwede, T. Toward the estimation of the absolute quality of individual protein structure models. Bioinformatics 27, 343-350 (2011).
>
[QMEANBrane](https://doi.org/10.1093/bioinformatics/btu457):
> Studer, G., Biasini, M., Schwede, T. Assessing the local structural quality of transmembrane protein models using statistical potentials (QMEANBrane), Bioinformatics 30, i505–i511 (2014).
>
For a short description of the different scoring functions refer to the QMEAN
server [help page](https://swissmodel.expasy.org/qmean/help).
<a name="inputrequirements"></a>Input Requirements
--------------------------------------------------
The container can read protein structures in PDB (.pdb) or mmCIF (.cif/.mmcif)
format. Compressed files are accepted, too (.gz suffix, e.g. 1crn.pdb.gz).
Providing SEQRES sequences (via the option `--seqres`) is recommended. SEQRES
describes the actual protein sequence of consecutively connected amino acids.
It is not necessarily completely covered by the structural data, think of
missing terminii in a model or gaps. If not provided, sequences are extracted
from the structural data. SEQRES must be provided as one or multiple sequences
in a single FASTA file.
* One sequence: All chains of the input structure(s) must align to it,
the structure(s) are either monomers or homo-oligmers.
* Multiple sequences: Required for hetero-oligomers, uses name based
chain/SEQRES matching
The container calculates sequence profiles using
HHblits ([DOI](https://doi.org/10.1186/s12859-019-3019-7),
[Git](https://github.com/soedinglab/hh-suite)) for each unique SEQRES sequence.
If you already have the respective profiles available in A3M format, you can
speed things up (via the option `--profiles`). This only works if you also
provide SEQRES as an input and the master sequence for each profile must match
one of the SEQRES sequences.
<a name="structureprocessing"></a>Structure Processing
------------------------------------------------------
Structures are processed with the **MOL**ecule **C**hec**K**er
([molck](https://openstructure.org/docs/dev/mol/alg/molalg/?highlight=molck#ost.mol.alg.Molck))
before scoring. In detail:
* Non-standard residues are mapped to their standard counterparts if possible
(e.g. Phospho-Tyrosine to Tyrosine, Seleno-Methionine to Methionine, etc.).
Mapping information is derived from the
[component dictionary](http://www.wwpdb.org/data/ccd)
* Hydrogen atoms are stripped
* Atoms with zero occupancy are stripped
* Everything except the 20 standard proteinogenic amino acids is stripped
(after potential mapping of non-standard residues above)
* Unknown atoms are stripped, i.e. atoms that are not expected based on the
[component dictionary](http://www.wwpdb.org/data/ccd), as found in some force fields.
* Chains are potentially renamed, i.e. if a chain name is ' ', it gets
assigned a valid chain name.
<a name="qmeanpull"></a>Obtain the image (Docker `pull`)
--------------------------------------------------------
An already built copy of the image for the current
[Dockerfile](docker/Dockerfile) is available in our [GitLab registry](
https://git.scicore.unibas.ch/schwede/QMEAN/container_registry). It comes
without CPU optimisations, so it should run on most CPUs. The image can be
downloaded by either pulling it yourself or let Docker pull it first time you
run it. To actively pull, use the following command:
```terminal
$ docker pull registry.scicore.unibas.ch/schwede/qmean:4.2.0
4.2.0: Pulling from schwede/qmean
...
Digest: sha256:db53a753d46b2525051478f9fa273df2b47a69100663eb70d538b461d52743d5
Status: Downloaded newer image for registry.scicore.unibas.ch/schwede/qmean:4.2.0
registry.scicore.unibas.ch/schwede/qmean:4.2.0
$
```
<a name="qmeanbuild"></a>Obtain an optimised image (Docker `build`)
--------------------------------------------------------
The available [Docker image](
https://git.scicore.unibas.ch/schwede/QMEAN/container_registry) only uses the
most common CPU extensions to run HHblits ([DOI](
https://doi.org/10.1186/s12859-019-3019-7), [Git](
https://github.com/soedinglab/hh-suite)). Modern CPUs can do better (run
HHblits faster), providing AVX2 extensions. To make use of them, the QMEAN
image needs to be rebuild with the Docker build argument `OPT_FOR_CPU`
activated, on the target host. Execute the following command inside the
directory storing the Dockerfile
for QMEAN:
```terminal
$ docker build --build-arg OPT_FOR_CPU=1 -t qmean:avx2 .
...
=> => writing image sha256:93da5aa6613847fb7f8b71ed635fe99f72e7dd58f32b40e1e73e3429547c9d25 0.0s
=> => naming to qmean:avx2
$
```
<a name="additionalrequirements"></a>Additional requirements
------------------------------------------------------------
We need the non-redundant
[UniClust30 sequence database](https://uniclust.mmseqs.com/) to build sequence
profiles with HHblits. The following files are required:
* `X_a3m.ffdata`
* `X_a3m.ffindex`
* `X_hhm.ffdata`
* `X_hhm.ffindex`
* `X_cs219.ffdata`
* `X_cs219.ffindex`
with `X` being your UniClust30 version of choice. The productive QMEAN server uses
UniClust30 [August 2018](http://wwwuser.gwdg.de/~compbiol/uniclust/2018_08/).
The directory with the files must be mounted to the container:
```terminal
-v <PATH_TO_LOCAL_UNICLUST>:/uniclust30
```
The QMEANDisCo scoring function additionally requires a template library
(QMEAN Template Library aka QMTL) available [here](
https://swissmodel.expasy.org/repository/download/qmtl/qmtl.tar.bz2). The QMTL
is updated weekly following the PDB update cycle. Checking for new versions on
a Thursday is a good idea. **An up to date QMTL is crucial for optimal QMEANDisCo performance.**
The following files are required:
* `smtl_uniq_cs219.ffdata`
* `smtl_uniq_cs219.ffindex`
* `smtl_uniq_hhm.ffdata`
* `smtl_uniq_hhm.ffindex`
* `CHAINCLUSTERINDEX`
* `indexer.dat`
* `seqres_data.dat`
* `atomseq_data.dat`
* `ca_pos_data.dat`
* `VERSION`
Again, the corresponding directory must be mounted:
```terminal
-v <PATH_TO_LOCAL_QMTL>:/qmtl
```
<a name="score"></a>Score
-------------------------
Having everything setup, you can score `model.pdb` with SEQRES data stored in
`seqres.fasta` using QMEANDisCo:
```terminal
docker run --workdir $(pwd) -v $(pwd):$(pwd) -v <PATH_TO_LOCAL_UNICLUST>:/uniclust30 -v <PATH_TO_LOCAL_QMTL>:/qmtl registry.scicore.unibas.ch/schwede/qmean:4.2.0 run_qmean.py model.pdb --seqres seqres.fasta
```
Additionally to the mounts specified above, the current working directory
containing the input files is mounted into the container and specified
as workdir.
The following gives more details on additional command line arguments:
```terminal
docker run registry.scicore.unibas.ch/schwede/qmean:4.2.0 run_qmean.py --help
```
<a name="singularity"></a>Singularity
-------------------------------------
A Singularity Image can directly be pulled & build from our registry:
```terminal
singularity build qmean_container.sif docker://registry.scicore.unibas.ch/schwede/qmean:4.2.0
```
Singularity allows to directly access the current working directory from within the container,
so scoring simplifies to:
```terminal
singularity run -B <PATH_TO_LOCAL_UNICLUST>:/uniclust30 -B <PATH_TO_LOCAL_QMTL>:/qmtl qmean_container.sif run_qmean.py model.pdb --seqres seqres.fasta
```
<a name="results"></a>Results
-----------------------------
Results are JSON formatted. For each model there is an entry with following
keys:
* `chains`: Contains the ATOMSEQ/SEQRES mapping for each chain. The ATOMSEQ is
extracted from the structure, SEQRES is provided by the user. If SEQRES is not
provided, SEQRES equals the ATOMSEQ
* `original_name`: Filename of the input model
* `preprocessing`: Summarizes the outcome of input structure processing described
above
* `scores`: Model specific scores. No matter what scoring method you're running
(QMEAN [1] /QMEANDisCo [2] /QMEANBrane [3]), you have two keys:
`local_scores` and `global_scores`. While the data in `global_scores`
calculates values according [1], the `local_scores` are method dependent.
For `global_scores` you get another dictionary with keys:
* `acc_agreement_norm_score`
* `acc_agreement_z_score`
* `avg_local_score` (mode dependent)
* `avg_local_score_error` (only set for [2])
* `cbeta_norm_score`
* `cbeta_z_score`
* `nteraction_norm_score`
* `interaction_z_score`
* `packing_norm_score`
* `packing_z_score`
* `qmean4_norm_score`
* `qmean4_z_score`
* `qmean6_norm_score`
* `qmean6_z_score`
* `ss_agreement_norm_score`
* `ss_agreement_z_score`
* `torsion_norm_score`
* `torsion_z_score`
For `local_scores` you get another dictionary with chain names as keys and
lists with local scores as value. The local score lists have the same length
as the corresponding SEQRES (ATOMSEQ if SEQRES is not given as an input).
The location of a residue in SEQRES determines the location of its local score
in the score list.
* `qmeanbrane_membrane`: Only available in case of QMEANBrane. Defines
transmembrane residues with the same SEQRES mapping as the local scores.
<a name="examples"></a>Examples
-------------------------------
Example data to run all available scoring functions are available in the
[qmean_qmeandisco_example](docker/qmean_qmeandisco_example) and
[qmeanbrane_example](docker/qmeanbrane_example) directory.
[comment]: <> ( LocalWords: QMEANDisCo mmCIF JSON GitLab DBeacons cd OST )
[comment]: <> ( LocalWords: schwede qmean sha )
#!/usr/bin/bash
# Exit immediately on commands with a non-zero exit status.
set -eo pipefail
# In case there are no command line arguments, run Celery. (To be done)
# In case of command line arguments, check if it is QMEAN and run it
# In case of command line arguments but not QMEAN, just execute the command line
if [ $# -eq 0 ]; then
: #set -- celery -A qm.clryschdlr worker --loglevel=info
else
if [ $1 == "run_qmean.py" ]; then
set -- /qmean/run_qmean.py "${@:2}"
fi
fi
exec "$@"
--- getACCAligns.pl 2021-04-29 10:21:51.000000000 +0200
+++ getACCAligns.pl 2021-03-31 10:35:36.000000000 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
###################################################
# getACCAligns
# - finds alignments to AA sequence and outputs
@@ -17,25 +17,28 @@
$temp_file = shift @ARGV;
$install_dir = shift @ARGV;
+my $blast_file = shift @ARGV; #SB: blast output added
$dir = $install_dir . "script";
$threshold = .95;
#$threshold = .50;
-$query_file = $temp_file;
-$NCBI_PATH = "${install_dir}blast2.2.8";
+#SB: not needed with external blast; $query_file = $temp_file;
+#SB: not needed with external blast; $NCBI_PATH = "/scicore/soft/app/NCBI/blast/2.2.16/Linux/bin/";#"${install_dir}blast2.2.8";
$data_dir = "${install_dir}data/pdb_large";
#$data_dir = "${install_dir}data/pdb_small";
-$query_header = <>;
-$aa = <>;
-open(TEMP_QUERY,">$query_file") or die "Couldn't open $temp_file for writing\n";
+#SB: not needed with external blast; $query_header = <>;
+#SB: not needed with external blast; $aa = <>;
+#SB: not needed with external blast; open(TEMP_QUERY,">$query_file") or die "Couldn't open $temp_file for writing\n";
#add > to convert to fasta format
-print TEMP_QUERY ">$query_header$aa";
-close(TEMP_QUERY);
+#SB: not needed with external blast; print TEMP_QUERY ">$query_header$aa";
+#SB: not needed with external blast; close(TEMP_QUERY);
-`$NCBI_PATH/blastall -i $query_file -d $data_dir/dataset -p blastp -F F -g F -o ${temp_file}foob.txt`;
+#SB: we now get blast output from above `$NCBI_PATH/blastall -i $query_file -d $data_dir/dataset -p blastp -F F -g F -o ${temp_file}foob.txt`;
-`$dir/blast2index.pl ${temp_file}foob.txt > ${temp_file}fooi.bai`;
+# SB: using blast output from outside
+#`$dir/blast2index.pl ${temp_file}foob.txt > ${temp_file}fooi.bai`;
+`$dir/blast2index.pl $blast_file > ${temp_file}fooi.bai`;
$aligns_file = "$data_dir/acc_data";
$index_file = "${temp_file}fooi.bai";
@@ -119,8 +122,5 @@
}
print "\n";
-`rm -f ${temp_file}foob.txt ${temp_file}fooi.bai $query_file`;
-
-
-
-
+#`rm -f ${temp_file}foob.txt ${temp_file}fooi.bai $query_file`;
+`rm -f ${temp_file}fooi.bai`;
--- homology_sa.pl 2021-04-29 12:50:44.000000000 +0200
+++ homology_sa.pl 2021-03-31 15:31:42.000000000 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/env perl
###################################################
# homology_sa.pl
# - makes a ACC prediction for a protein using
@@ -15,16 +15,20 @@
# Modified by Mike Sweredoski: adapted from homology_ss
###################################################
-if (@ARGV != 4)
+use File::Basename;
+use warnings;
+
+#SB: extended from 4 to 5 to pass blast output in
+if (@ARGV != 5)
{
- die "need 4 params: install dir, seq file(name, sequence in compact format), alignment file, output file\n";
+ die "need 5 params: install dir, seq file(name, sequence in compact format), alignment file, output file, blast output\n";
}
$install_dir = shift @ARGV;
$seq_file = shift @ARGV;
$align_file = shift @ARGV;
$output_file = shift @ARGV;
-
+my $blast_file = shift @ARGV;
if (! -d $install_dir)
{
@@ -53,7 +57,10 @@
open(OUTPUT,">$output_file");
$accpro_pred = `cat $seq_file | $dir/getACCproPred.pl $align_file $temp_file $install_dir`;
-$acc_homology_pred = `cat $seq_file | $dir/getACCAligns.pl $temp_file $install_dir`;
+$pymod_dir = dirname(__FILE__);
+# SB: by passing BLAST output in, we do not need sequence data, anymore
+#$acc_homology_pred = `cat $seq_file | $pymod_dir/getACCAligns.pl $temp_file $install_dir $blast_file`;
+$acc_homology_pred = `$pymod_dir/getACCAligns.pl $temp_file $install_dir $blast_file`;
chomp($accpro_pred);
chomp($acc_homology_pred);
--- predict_ss_sa.pl 2021-04-29 12:51:42.000000000 +0200
+++ predict_ss_sa.pl 2021-03-31 15:29:38.000000000 +0200
@@ -1,90 +1,39 @@
-#!/usr/bin/perl -w
+#!/usr/bin/env perl
+
+use File::Basename;
+use warnings;
#predict SS, SA for a single sequence, SS, SA is a combination of neural network and homology
#June 23, 2004, Jianlin Cheng
+####################################
+### MODIFIED to work along with QMEAN
+### MODIFIED to eat our own MSA
+####################################
+
#input
- # 1: blast_dir
- # 2: big_db
- # 3: nr_db
- # 4: ss_predictor
- # 5: sa_predictor
- # 6: script_dir
- # 7: sequence file(seq_file): one sequence in fasta format,
- # 8: output file
+ # 1: sequence file*
+ # 2: output file
+ # 3: msa file*
+
+# * Important: filenames with a '.' in them make the whole thing fail!
#Output: pxml, casp, eva format contact map for both 12 and 8 A.
#Notice: the white space or . in seq_file are replaced by _.
-if (@ARGV != 8)
-{
- die "Usage: blast_dir big_db nr_db ss_predictor sa_predictor script_dir seq_file(fasta) output_file\n";
-}
-
-$blast_dir = shift @ARGV;
-$big_db = shift @ARGV;
-$nr_db = shift @ARGV;
-$ss_predictor = shift @ARGV;
-$sa_predictor = shift @ARGV;
-$script_dir = shift @ARGV;
-
-################verify if all the things are there#########################
-if (! -d $blast_dir)
-{
- die "can't find blast directory.\n";
-}
-if ( substr($blast_dir, length($blast_dir) - 1, 1) ne "/" )
-{
- $blast_dir .= "/";
-}
-
-if (! -d $script_dir)
-{
- die "can't find perl script directory.\n";
-}
-
-if ( substr($script_dir, length($script_dir) - 1, 1) ne "/" )
-{
- $script_dir .= "/";
-}
-
-if (! -f "${blast_dir}blastpgp")
-{
- die "can't find blastpgp.\n";
-}
-
-if (! -f "${big_db}.pal") {
-if (! -f "${big_db}.phr" || ! -f "${big_db}.pin" || ! -f "${big_db}.psq")
-{
- die "can't find the big coil database.\n";
-}
-}
-
-if (! -f "${nr_db}.pal") {
-if (! -f "${nr_db}.phr" || ! -f "${nr_db}.pin" || ! -f "${nr_db}.psq" || ! -f "${nr_db}.pnd"
- || ! -f "${nr_db}.pni" || ! -f "${nr_db}.psd" || ! -f "${nr_db}.psi" )
-{
- die "can't find the non-redundant database.\n";
-}
-}
-
-if (! -f $ss_predictor)
-{
- die "can't find secondary structure predictor.\n";
-}
+#Oct 28, 2013, SB
+# Modified to create query file for get[SS|ACC]Aligns.pl here
-if (! -f $sa_predictor)
+if (@ARGV != 3)
{
- die "can't find solvent accessibility predictor.\n";
+ die "Usage: seq_file(fasta) output_file alignment_file\n";
}
-#############################End of Verification#######################################
-
-
$seq_file = shift @ARGV;
-$output_file = shift @ARGV;
-$output_dir = "./";
+$output_file = shift @ARGV;
+$alignment_file = shift @ARGV;
+$output_dir = "/tmp";
if (! -f $seq_file)
{
@@ -121,10 +70,9 @@
$seq_filename =~ s/\./_/g;
#output prefix is used as the prefix name of output files
-$output_prefix = $output_dir . $seq_filename;
+$output_prefix = $output_dir . $$ . $seq_filename;
#set alignment file name
$seq_filename .= "alg";
-$output_prefix_alg = $output_dir . $seq_filename;
open(SEQ_FILE, "$seq_file") || die "can't open sequence file.\n";
@content = <SEQ_FILE>;
@@ -150,52 +98,40 @@
}
if (length($sequence) < 1)
{
- die "seqeunce is empty. \n";
+ die "sequence is empty. \n";
}
-$script_dir =~ /(.+)script\/$/;
-$install_dir = $1;
+$install_dir = "/usr/local/sspro/";
-#Generate Alignments for sequence
-print "Generate alignment...\n";
-#the output alignment file name is: $output_prefix
-`${script_dir}generate_flatblast.pl $blast_dir $script_dir $big_db $nr_db $seq_file $output_prefix_alg >/dev/null`;
-print "done\n";
-
-#Predict Secondary Stx
-print "Predict secondary structure...";
-#create input file for sspro
-open(TMP, ">$output_prefix.tmp") || die "can't create temporary file for sspro.\n";
-#a little bit ugly here: for sspro: alignment_file = align_dir + seq_filename
-print TMP "$seq_filename\n";
-print TMP "$sequence\n";
-close(TMP);
-`${script_dir}homology_ss.pl $install_dir $output_prefix.tmp $output_prefix_alg $output_prefix.sspro`;
-print "done\n";
+# SB: create BLAST alignments here, hand down to follow up scripts
+# this should prevent calling BLAST twice
+$NCBI_PATH = "/usr/local/bin";
+# SB: create query file
+open(TEMP_QUERY,">$output_prefix.tmp.homo.$$")
+ or die "Couldn't open $output_prefix.tmp.homo.$$ for writing\n";
+#add > to convert to fasta format
+print TEMP_QUERY ">$seq_filename\n$sequence\n";
+close(TEMP_QUERY);
+# run BLAST
+my $blast_file = "${output_prefix}.tmp.homo.$$.foob.txt";
+`$NCBI_PATH/blastall -i $output_prefix.tmp.homo.$$ -d ${install_dir}data/pdb_large/dataset -p blastp -F F -g F -o ${blast_file}`;
#Predict Solvent Accessibility
+#create input file for accpro
+open(TMP, ">$output_prefix.tmp") || die "can't create temporary file for accpro.\n";
+#a little bit ugly here: for accpro: alignment_file = align_dir + seq_filename
+print TMP "$seq_filename\n";
+print TMP "$sequence\n";
+close(TMP);
+
+$pymod_dir = dirname(__FILE__);
+
print "Predict solvent accessibility...";
-`${script_dir}homology_sa.pl $install_dir $output_prefix.tmp $output_prefix_alg $output_prefix.accpro`;
+`${pymod_dir}/homology_sa.pl $install_dir $output_prefix.tmp $alignment_file $output_prefix.accpro $blast_file`;
print "done\n";
-open(TMP, ">$output_file") || die "can't create temporary file for conpro.\n";
-open(SSPRO, "$output_prefix.sspro") || die "can't open the ss result file.\n";
-open(ACCPRO, "$output_prefix.accpro") || die "can't open the sa result file.\n";
-@sspro = <SSPRO>;
-@accpro = <ACCPRO>;
-$name = shift @sspro;
-$seq = shift @sspro;
-$sstx = shift @sspro;
-shift @accpro;
-shift @accpro;
-$acc = shift @accpro;
-$acc =~ s/-/b/g;
-print TMP "$seq_filename\n$seq$sstx$acc";
-close TMP;
-
-#rename the alignment file
-`mv $output_prefix_alg ${output_file}align`;
-#remove pssm file
-#`rm $output_prefix_alg.pssm`;
+`mv $output_prefix.accpro $output_file`;
+
#remove the intermediate files
-`rm $output_prefix.accpro $output_prefix.sspro`;
`rm $output_prefix.tmp`;
+`rm $blast_file`;
+`rm $output_prefix.tmp.homo.$$`;
Run QMEAN/QMEANDisCo
====================
The simplest you can do is simply run QMEAN on the provided model:
```terminal
sudo docker run --workdir $(pwd) -v $(pwd):$(pwd) -v <PATH_TO_LOCAL_UNICLUST>:/uniclust30 registry.scicore.unibas.ch/schwede/qmean:4.2.0 run_qmean.py model.pdb --method QMEAN
```
However, if possible, you should add the SEQRES sequence which is available in
targets.fasta:
```terminal
sudo docker run --workdir $(pwd) -v $(pwd):$(pwd) -v <PATH_TO_LOCAL_UNICLUST>:/uniclust30 registry.scicore.unibas.ch/schwede/qmean:4.2.0 run_qmean.py model.pdb --method QMEAN --seqres targets.fasta
```
The directory contains pre-computed profiles that match the
sequences in targets.fasta. To speed things up, you can provide them as argument:
```terminal
sudo docker run --workdir $(pwd) -v $(pwd):$(pwd) -v <PATH_TO_LOCAL_UNICLUST>:/uniclust30 registry.scicore.unibas.ch/schwede/qmean:4.2.0 run_qmean.py model.pdb --method QMEAN --seqres targets.fasta --profiles query_hhblits_one.a3m query_hhblits_two.a3m
```
Normally, the container creates a temporary directory to store intermediate
results. If you want to investigate them, or access the sequence profiles,
you can provide a working dir as argument (must be absolute path).
A directory gets created in the working dir for each unique SEQRES named after
the md5 hash of the SEQRES:
```terminal
sudo docker run --workdir $(pwd) -v $(pwd):$(pwd) -v <PATH_TO_LOCAL_UNICLUST>:/uniclust30 registry.scicore.unibas.ch/schwede/qmean:4.2.0 run_qmean.py model.pdb --method QMEAN --seqres targets.fasta --profiles query_hhblits_one.a3m query_hhblits_two.a3m --workdir $(pwd)/my_workdir
```
So far we only computed the QMEAN scoring function. QMEANDisCo includes
structural information and significantly improves prediction performance
of per-residue scores. QMEANDisCo is the default value of the --method
argument. We nevertheless explicitely specify it here. QMEANDisCo adds
the additonal requirement of the QMTL (QMEAN Template Library) which needs
to be mounted.
```terminal
sudo docker run --workdir $(pwd) -v $(pwd):$(pwd) -v <PATH_TO_LOCAL_UNICLUST>:/uniclust30 -v <PATH_TO_LOCAL_QMTL>:/qmtl registry.scicore.unibas.ch/schwede/qmean:4.2.0 run_qmean.py model.pdb --method QMEANDisCo --seqres targets.fasta --profiles query_hhblits_one.a3m query_hhblits_two.a3m --workdir $(pwd)/my_workdir
```
This diff is collapsed.
7
VLSP.ADKTNVKAAWAK.VGNHAADFGAEALERMFMSFPSTKTYFSHF.D......LG.........HNSTQVKGHG...........KKVADALTKAVGH...LDTL...PDALSDLSDL...HAHKLRVDPVNFKLLSHCLLVTLAAHLPGDFTPSVHASLDKFLASVSTVLTSKYR
ILTS.NYNYTFNTFFSK.FSSNSYSIFSYSLSIILFFYPHTNTYFSHFNY......LI.........PFSSPFNNHLSTFIFLFSXXXXXVMGGVEDDVEK...IENM...KEGIIRISEM...NELNMRVEKEKLKIMEKKIIVV.................................
.LSD.GEWQLVLNVWGK.VEADLAGHGQAVLISLCQGLESRKEEKKRD.P......AHACVSSRRSLFVSQDLLFHS...........DAFLVSLGHRSFLAPVSGEN...GQSQKTQPAH...HAQHHRQPWNTEKFISDAIIQVLQSKHAGDFGAEAQAAMKKALELFRNDIAAKYK
.......MACPAKFWEENVVPDAAEHGKNILIRLYKEDPAALGFFPKY.K......DI....PVSELGNNADVKEQG...........AVVVKALGELLKL...KGQH...ESQLHAMAES...HKNTYKIPVEYFPKIFKITDAYLQEKVGAAYA.AIQAAMNVAFDQIADGLKTQYQ
.FEKDDFCYSLQKSFDV.ILRNSSPFYTRFYQKLLERRPDFKNLFSN..T......NF.........D......QQG...........EKLVSMIQYAIDR...LAIL...QKIKTELINLGKRHV.SYGVREEDYQDTGMVLLETLEESLGDEWTQNLKENWQLAITEVASLMI....
.VPP.KQFRLLDRSLRR.VVDARLPLATHFYGRLFAAHPALRPLFPT..D......LT................AQQ...........RKFEDMLVVLVSG...LTVP...DGVAGALRQLAVSHI.GYGAKPEHYPVVAEVLMDSLRTLPGAGLLPEELGAWSGLLDTMVYVLV....
.LTP.RERQIVKDTWAL.AYKNSKSVGVELFIQLFTTYPHHQQKFPSF.KNVPLSEMK.........LGNKKLEAHA...........TNVMYSLATLVDN...LEDVECLIELCSKIGEN...H.LRRKVEQQAFLDVKTVLMKLLKEKLGSSLTPQGEEAWNKTLDLANKCIFQAM.
query_hhblits_fastaalg
VLSPADKTNVKAAWAKVGNHAADFGAEALERMFMSFPSTKTYFSHFDLGHNSTQVKGHGKKVADALTKAVGHLDTLPDALSDLSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPGDFTPSVHASLDKFLASVSTVLTSKYR
eeeeeeee-ee--ee--eeee---e--ee---------e-------eeeeee---e-eeee-----ee------e--ee--e-------eee-ee--ee----------eee--ee---e--e--ee--eee-ee--eeee
File added
Source diff could not be displayed: it is too large. Options to address this: view the blob.
>0e5b599c5303c996e3a760708e8cd90a
VLSPADKTNVKAAWAKVGNHAADFGAEALERMFMSFPSTKTYFSHFDLGHNSTQVKGHGKKVADALTKAVGHLDTLPDALSDLSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPGDFTPSVHASLDKFLASVSTVLTSKYR
7
VHLTGEEKSGLTALWAK..V..N..VEEIGGEALGRLLVVYPWTQRFFEHFGDLS...TADAVMKNPKVKKHGQKVLASFGEGLKH...LD...NLKGTF...A....TLSELHCD...KLHVDPENFRLLGNVLVVVLARHFGKEFTPELQTAYQKVVAGVANALAHKYH
..........VLNVWGK..VEAD..LAGHGQAVLISLCQGLESRKEEKKRDPAHACVSSRRSLFVSQDLLFHSDAFLVSLGHRSFLAPVSG...ENGQSQ...K....TQPAHHAQ...HHRQPWNTEKFISDAIIQVLQSKHAGDFGAEAQAAMKKALELFRNDIAAKY.
.VLSAADKNNVKGIFTK..IAGH..AEEYGAETLERMFITYPPTKTYVDPVNFKL...LG.....QC......FLVVVAIHHPAAL...TP...EVHASL...D....KFLC...........................................................
...TNTQARLLSRSLRR..I..SENGAPLARSFYAELFSAHPEVRPMFHS..DLS...............TQYAKFEDMLVVLVAD...VL...NPGVILRPLQ....DLAKRHV....EYGVTREMYPIVGDIMMRTLRTLDAAPLTGDELEAWDVLLGRVNAFL.....
..LTADELERVQNSWKVVME..N..AEENGMFIFKTFLLKH.NYFPYFKAFANTP...L.EELEENQAFRNHANNIIQALDNVILN...LEDELTIQREL...T....ALGKMHG....KKKISEQQFQELKICILEILDNEFK..LPEDDLQAWSKTLNN..........
...............IK..D..D..IAKVGIFTFIGLFESHPDIKHAFVSFRGLQ....PKELNNSSVLRAHALRVMTTVDKCLFR...FD...NLEKVE...E....LMKSLGCRHGQSYQVVHQHLDLMAPHFNYAIKHNLKDQWSPELESAWDKLFKLMIH.......
.DFTDTQIDTIRSTWPI..L..ACDMVDIGSKVFLKIFIDEPKLKYAFPSFSDME....ENELLRHPPFIDHVTRFMQIIDYLVEN...LD...QQNSDF...HQALLMLGAKHAT...YPGFQVSHFTVFNKALLEVWESAIGEEFIPEVQNCWTQLFAYIMRYIVQ...
query_hhblits_fastaalg
VHLTGEEKSGLTALWAKVNVEEIGGEALGRLLVVYPWTQRFFEHFGDLSTADAVMKNPKVKKHGQKVLASFGEGLKHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPELQTAYQKVVAGVANALAHKYH
eeee-eee-------e--eeeee--e--------eeee-eeee-ee--e------eeeeeee-------e-eee------ee---eeee-ee--e-ee--e--e---e---e---e---ee--ee--e---e---ee--ee-eeee
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment