Skip to content
Snippets Groups Projects
Commit c854f0a1 authored by Rafal Gumienny's avatar Rafal Gumienny
Browse files

feat: Dockerize OST

parent 9c6bd69b
No related branches found
No related tags found
No related merge requests found
FROM ubuntu:16.04
RUN apt-get update -y
# basic packages
RUN apt-get install -y cmake \
sip-dev \
libtiff-dev \
libfftw3-dev \
libeigen3-dev \
libpng-dev \
python-all \
python2.7 \
python-qt4 \
libboost-all-dev \
qt4-qtconfig \
qt4-qmake \
libqt4-dev \
libpng-dev \
wget \
git \
gfortran \
libeigen3-dev \
python-pip
# Install miniconda - to get useful binaries
RUN wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh
RUN bash Miniconda2-latest-Linux-x86_64.sh -p /opt/miniconda2 -b -f
RUN rm Miniconda2-latest-Linux-x86_64.sh
# Install ClustalW and MSMS
RUN /opt/miniconda2/bin/conda install -y -c bioconda clustalw=2.1 msms=2.6.1
# Install OpenMM
RUN /opt/miniconda2/bin/conda install -y -c omnia openmm=7.1.1=py27_0
# Install DSSP
RUN /opt/miniconda2/bin/conda install -y -c salilab dssp=3.0.0
# Install some python packages
RUN pip install --upgrade pip && pip install numpy==1.14.0 \
scipy==1.0.0 \
pandas==0.22.0 \
jupyter==1.0.0
# copy ost release
WORKDIR /opt/ost
RUN git clone https://git.scicore.unibas.ch/schwede/openstructure.git /opt/ost
# compile ost
RUN cmake . -DPYTHON_LIBRARIES=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
-DOPTIMIZE=ON \
-DENABLE_MM=ON \
-DCOMPILE_TMTOOLS=1 \
-DUSE_NUMPY=1 \
-DOPEN_MM_LIBRARY=/opt/miniconda2/pkgs/openmm-7.1.1-py27_0/lib/libOpenMM.so \
-DOPEN_MM_INCLUDE_DIR=/opt/miniconda2/pkgs/openmm-7.1.1-py27_0/include/ \
-DOPEN_MM_PLUGIN_DIR=/opt/miniconda2/pkgs/openmm-7.1.1-py27_0/lib/plugins
# Build chemdict_tool
RUN make -j4 chemdict_tool
# get the compound library
RUN wget ftp://ftp.wwpdb.org/pub/pdb/data/monomers/components.cif.gz
RUN stage/bin/chemdict_tool create components.cif.gz compounds.chemlib pdb
RUN stage/bin/chemdict_tool update modules/conop/data/charmm.cif compounds.chemlib charmm
# Reconfigure OST
RUN cmake . -DPYTHON_LIBRARIES=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
-DOPTIMIZE=ON \
-DENABLE_MM=ON \
-DOPEN_MM_LIBRARY=/opt/miniconda2/pkgs/openmm-7.1.1-py27_0/lib/libOpenMM.so \
-DOPEN_MM_INCLUDE_DIR=/opt/miniconda2/pkgs/openmm-7.1.1-py27_0/include/ \
-DOPEN_MM_PLUGIN_DIR=/opt/miniconda2/pkgs/openmm-7.1.1-py27_0/lib/plugins \
-DCOMPOUND_LIB=/opt/ost/compounds.chemlib
# Build OST
RUN make -j4
#RUN make check
# go back home
WORKDIR /home
# Get the example
RUN wget https://files.rcsb.org/view/5X28.pdb
# Set the environment
# - for GUI
ENV QT_X11_NO_MITSHM 1
# - for Python
ENV PYTHONPATH="/opt/ost/stage/lib64/python2.7/site-packages:${PYTHONPATH}"
# - for PATH
ENV PATH="/opt/ost/stage/bin:${PATH}"
# Link binaries
RUN ln -s /opt/miniconda2/pkgs/clustalw*/bin/* /usr/bin
RUN ln -s /opt/miniconda2/pkgs/dssp*/bin/* /usr/bin
RUN ln -s /opt/miniconda2/pkgs/msms*/bin/* /usr/bin
ENTRYPOINT ["ost"]
CMD ["-i"]
OST Docker
==========
Build Docker image
------------------
In order to build OST image:
```
cd <OST ROOT>/docker
(sudo) docker build --tag <TAG> .
```
One can chose any tag eg. ost.
Run script with OST
-------------------
In order to run OST script do:
```
(sudo) docker run --rm -v <PATH TO SCRIPT DIR>:/home <IMAGE NAME> /home/<SCRIPT NAME> [OPTIONS]
```
Run GUI
-------
In order to run GUI do (tested on linux machine):
```
xhost +local:docker
(sudo) docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --entrypoint dng <IMAGE NAME>
```
\ No newline at end of file
#! /bin/bash
# end when error
set -e
image_name=$1
script_path=$2
if [[ ${#@} -lt 1 ]]; then
echo "Usage: (sudo) run_docker_ost <IMAGE_NAME> [<SCRIPT_PATH>]"
exit 1
fi
if [[ ${script_path} -eq "" ]]; then
docker run -ti --rm ${image_name}
else
abspath=$(readlink -f $script_path)
dirpath=$(dirname $abspath)
name=$(basename $script_path)
docker run --rm -v ${dirpath}:/home ${image_name} /home/${name} ${@:3}
fi
import ost
from ost.mol.alg import qsscoring
# load two biounits to compare
ent_full = ost.io.LoadPDB('3ia3', remote=True)
ent_1 = ent_full.Select('cname=A,D')
ent_2 = ent_full.Select('cname=B,C')
# get score
ost.PushVerbosityLevel(3)
try:
qs_scorer = qsscoring.QSscorer(ent_1, ent_2)
ost.LogScript('QSscore:', str(qs_scorer.global_score))
ost.LogScript('Chain mapping used:', str(qs_scorer.chain_mapping))
except qsscoring.QSscoreError as ex:
# default handling: report failure and set score to 0
ost.LogError('QSscore failed:', str(ex))
qs_score = 0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment