diff --git a/docker/Dockerfile b/docker/Dockerfile index 12c3fd65249ea915d7aa75aae238933e2dde8052..a02301453bc4c02b5cbb0de4a2948d64f2d15d0e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,16 +1,9 @@ -FROM ubuntu:16.04 +FROM ubuntu:18.04 # ARGUMENTS ########### -# OBLIGATORY -ARG OPENSTRUCTURE_VERSION -RUN if [ -z "${OPENSTRUCTURE_VERSION}" ]; then \ - echo "OPENSTRUCTURE_VERSION argument is obligatory. Run with --build-arg OPENSTRUCTURE_VERSION=<VERSION>"; \ - exit 1; \ - else : ; fi - -# OPTIONAL +ARG OPENSTRUCTURE_VERSION="1.10.0" ARG SRC_FOLDER="/usr/local/src" ARG CPUS_FOR_MAKE=8 ARG PYTHONPATH="/usr/local/lib64/python2.7/site-packages:${PYTHONPATH}" @@ -24,6 +17,7 @@ ARG OPENMM_LIB_PATH="/usr/local/openmm/lib/" # INSTALL SYSTEM DEPS ##################### RUN apt-get update -y && apt-get install -y cmake \ + g++ \ sip-dev \ libtiff-dev \ libfftw3-dev \ @@ -32,11 +26,9 @@ RUN apt-get update -y && apt-get install -y cmake \ libpng-dev \ python-all \ python2.7 \ - python-qt4 \ - qt4-qtconfig \ - qt4-qmake \ - libqt4-dev \ - libpng-dev \ + python-pyqt5 \ + qt5-qmake \ + qtbase5-dev \ wget \ git \ gfortran \ @@ -48,9 +40,12 @@ RUN apt-get update -y && apt-get install -y cmake \ clustalw \ python-virtualenv \ libsqlite3-dev \ + dssp \ + python-enum34 \ locales && \ - # CLEANUP - rm -rf /var/lib/apt/lists/* + # CLEANUP + rm -rf /var/lib/apt/lists/* + # INSTALL SOME PYTHON PACKAGES GLOBALY ###################################### RUN pip install -U pip==9.0.3 && \ @@ -92,18 +87,6 @@ RUN cd ${SRC_FOLDER} && \ rm -rf ${SRC_FOLDER}/openmm-${OPENMM_VERSION}.tar.gz && \ rm -rf ${SRC_FOLDER}/openmm-${OPENMM_VERSION} - -# COMPILE AND INSTALL DSSP -########################## -RUN cd ${SRC_FOLDER} && \ - wget ftp://ftp.cmbi.umcn.nl/pub/molbio/software/dssp-2/dssp-${DSSP_VERSION}.tgz && \ - tar -xvzf dssp-${DSSP_VERSION}.tgz && \ - cd dssp-${DSSP_VERSION} && \ - make -j ${CPUS_FOR_MAKE} && \ - make install && \ - rm -rf ${SRC_FOLDER}/dssp-${DSSP_VERSION}.tgz && \ - rm -rf ${SRC_FOLDER}/dssp-${DSSP_VERSION} - # INSTALL OST ############# RUN cd ${SRC_FOLDER} && \ @@ -112,6 +95,7 @@ RUN cd ${SRC_FOLDER} && \ mkdir openstructure-${OPENSTRUCTURE_VERSION} && \ tar xf openstructure-${OPENSTRUCTURE_VERSION}.tar.gz -C ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION} --strip-components=1 && \ mkdir -p ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION}/build + WORKDIR ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION}/build # cmake ost diff --git a/singularity/Singularity.1.10.0 b/singularity/Singularity.1.10.0 new file mode 100644 index 0000000000000000000000000000000000000000..308254163e2baf8ca6ec36391f0d42e85df09d3b --- /dev/null +++ b/singularity/Singularity.1.10.0 @@ -0,0 +1,425 @@ +BootStrap: docker +From: ubuntu:18.04 + +%post +############################################################################## +# POST +############################################################################## + +# CHANGE DASH TO BASH +rm /bin/sh +ln -sf /bin/bash /bin/sh + +# DEFINE SOME ENV VARS USED DURING THE IMAGE BUILD +########################## +export SRC_FOLDER="/usr/local/src" +export CPUS_FOR_MAKE=8 +export PYTHONPATH="/usr/local/lib64/python2.7/site-packages:${PYTHONPATH}" +# When changing OPENSTRUCTURE_VERSION make sure to change it also in the +# environment section of singularity recipe (this file). +export OPENSTRUCTURE_VERSION="1.10.0" +export OPENSTRUCTURE_SHARE="/usr/local/share/ost" +export MSMS_VERSION="2.6.1" +export OPENMM_VERSION="7.1.1" +export OPENMM_INCLUDE_PATH=/usr/local/openmm/include/ +export OPENMM_LIB_PATH=/usr/local/openmm/lib/ +export JUPYTER_CONFIG_DIR="/usr/local/etc/jupyter" +export JUPYTER_PATH="/usr/local/share/jupyter" +export JUPYTER_RUNTIME_DIR="$JUPYTER_PATH/runtime" +export VIRTUALENV_DIR="/usr/local/share/ost_venv" + + +# INSTALL SYSTEM DEPS +##################### +apt-get update -y && apt-get install -y cmake \ + g++ \ + sip-dev \ + libtiff-dev \ + libfftw3-dev \ + libeigen3-dev \ + libboost-all-dev \ + libpng-dev \ + python-all \ + python2.7 \ + python-pyqt5 \ + qt5-qmake \ + qtbase5-dev \ + wget \ + git \ + gfortran \ + python-pip \ + tar \ + libbz2-dev \ + doxygen \ + swig \ + clustalw \ + python-virtualenv \ + libsqlite3-dev \ + dssp \ + python-enum34 \ + python-ipaddress \ + locales + +# SET LOCALE +############ +echo "LC_ALL=en_US.UTF-8" >> /etc/environment +echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen +echo "LANG=en_US.UTF-8" > /etc/locale.conf +locale-gen en_US.UTF-8 + +# INSTALL SOME PYTHON PACKAGES GLOBALY +###################################### +pip install --no-cache-dir numpy==1.10.4 \ + scipy==1.0.0 \ + pandas==0.22.0 + + +# SET UP VIRTUALENV +################### +virtualenv --system-site-packages $VIRTUALENV_DIR +. $VIRTUALENV_DIR/bin/activate + + +# INSTALL REQUIRED PYTHON PACKAGES +################################## +pip install jupyter==1.0.0 \ + nglview==1.1.6 + +# DOWNLOAD AND INSTALL MSMS +############## +cd ${SRC_FOLDER} +if [ ! -f msms_i86_64Linux2_${MSMS_VERSION}.tar.gz ]; then + mkdir -p msms + cd msms + wget http://mgltools.scripps.edu/downloads/tars/releases/MSMSRELEASE/REL${MSMS_VERSION}/msms_i86_64Linux2_${MSMS_VERSION}.tar.gz + tar -xvzf msms_i86_64Linux2_${MSMS_VERSION}.tar.gz + cp -v ${SRC_FOLDER}/msms/msms.x86_64Linux2.${MSMS_VERSION} /usr/local/bin/msms + cp -v ${SRC_FOLDER}/msms/pdb_to_xyzr /usr/local/bin/pdb_to_xyzr + cp -v ${SRC_FOLDER}/msms/pdb_to_xyzrn /usr/local/bin/pdb_to_xyzrn +fi + +# COMPILE OPENMM FROM SOURCES. INSTALL TO /usr/local +############################ +cd ${SRC_FOLDER} +if [ ! -f openmm-${OPENMM_VERSION}.tar.gz ]; then + wget -O openmm-${OPENMM_VERSION}.tar.gz -nc https://github.com/pandegroup/openmm/archive/${OPENMM_VERSION}.tar.gz + mkdir ${SRC_FOLDER}/openmm-${OPENMM_VERSION} + tar xf openmm-${OPENMM_VERSION}.tar.gz -C ${SRC_FOLDER}/openmm-${OPENMM_VERSION} --strip-components=1 + mkdir -p ${SRC_FOLDER}/openmm-${OPENMM_VERSION}/build && cd ${SRC_FOLDER}/openmm-${OPENMM_VERSION}/build + cmake .. && make -j $CPUS_FOR_MAKE && make install + cd ${SRC_FOLDER}/openmm-${OPENMM_VERSION}/build/python && python setup.py build && python setup.py install +fi + +# INSTALL OST +############# + +cd ${SRC_FOLDER} +if [ ! -f openstructure-${OPENSTRUCTURE_VERSION}.tar.gz ]; then + # copy ost release + wget -O openstructure-${OPENSTRUCTURE_VERSION}.tar.gz -nc https://git.scicore.unibas.ch/schwede/openstructure/repository/${OPENSTRUCTURE_VERSION}/archive.tar.gz + mkdir openstructure-${OPENSTRUCTURE_VERSION} + tar xf openstructure-${OPENSTRUCTURE_VERSION}.tar.gz -C ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION} --strip-components=1 + mkdir -p ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION}/build && cd ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION}/build + + # cmake ost + 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=$OPENMM_LIB_PATH/libOpenMM.so \ + -DOPEN_MM_INCLUDE_DIR=$OPENMM_INCLUDE_PATH \ + -DOPEN_MM_PLUGIN_DIR=$OPENMM_LIB_PATH/plugins \ + -DENABLE_GFX=ON \ + -DENABLE_GUI=ON + + # Build chemdict_tool + make -j ${CPUS_FOR_MAKE} chemdict_tool + + # get the compound library + wget 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 + mkdir -p $OPENSTRUCTURE_SHARE + chmod a+rw -R $OPENSTRUCTURE_SHARE + mv compounds.chemlib $OPENSTRUCTURE_SHARE + + # Build and install OST + 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=$OPENMM_LIB_PATH/libOpenMM.so \ + -DOPEN_MM_INCLUDE_DIR=$OPENMM_INCLUDE_PATH \ + -DOPEN_MM_PLUGIN_DIR=$OPENMM_LIB_PATH/plugins \ + -DENABLE_GFX=ON \ + -DENABLE_GUI=ON \ + -DCOMPOUND_LIB=$OPENSTRUCTURE_SHARE/compounds.chemlib + + # Build chemdict_tool + make -j ${CPUS_FOR_MAKE} + make check + make install +fi + +# SETUP JUPYTER +############### +mkdir -p /usr/local/share/ipython +mkdir -p $JUPYTER_PATH +mkdir -p $JUPYTER_RUNTIME_DIR +mkdir -p $JUPYTER_CONFIG_DIR +mkdir -p $JUPYTER_PATH/kernels/ost-kernel +chmod a+rw -R /usr/local/share/ipython +chmod a+rw -R $JUPYTER_PATH +chmod a+rw -R $JUPYTER_CONFIG_DIR +chmod a+rw -R $JUPYTER_RUNTIME_DIR +cat > $JUPYTER_PATH/kernels/ost-kernel/kernel.json <<EOF +{ + "display_name": "OST", + "language": "python", + "argv": [ + "python", + "-m", "ipykernel", + "-f", "{connection_file}", + "--InteractiveShellApp.exec_PYTHONSTARTUP=False", + "--InteractiveShellApp.exec_files=['/usr/local/lib64/python2.7/site-packages/ost/ost_startup.py']" + ], + "env": { + } +} +EOF + +jupyter nbextension enable nglview --py --sys-prefix + +# GO HOME AND CLEANUP +##################### +apt-get purge -y cmake \ + wget \ + git \ + gfortran \ + python-pip \ + libbz2-dev \ + doxygen \ + swig +apt-get clean +apt-get autoremove -y + +cd $SRC_FOLDER && rm -rf $SRC_FOLDER/* + +cd /home + +%environment +############################################################################## +# ENVIRONMENT +############################################################################## +export OST_ROOT="/usr/local" +export OPENSTRUCTURE_VERSION="1.9.0" +export OPENMM_LIB_PATH=/usr/local/openmm/lib/ +export PYTHONPATH="/usr/local/lib64/python2.7/site-packages:${PYTHONPATH}" +export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib64:${OPENMM_LIB_PATH}" +export QT_X11_NO_MITSHM=1 +export IPYTHONDIR="/usr/local/share/ipython" +export JUPYTER_CONFIG_DIR="/usr/local/etc/jupyter" +export JUPYTER_PATH="/usr/local/share/jupyter" +export JUPYTER_RUNTIME_DIR="$JUPYTER_PATH/runtime" +export VIRTUALENV_DIR="/usr/local/share/ost_venv" + +%apprun ChemdictTool +############################################################################## +# CHEMDICT TOOL APP +############################################################################## +$OST_ROOT/bin/chemdict_tool "$@" + +%apprun lDDT +############################################################################## +# lDDT APP +############################################################################## +$OST_ROOT/bin/lddt "$@" + +%apphelp lDDT +The Local Distance Difference Test. + +Usage: + + singularity run --app lDDT <IMAGE> [options] <mod1> [mod1 [mod2]] <re1>[,ref2,ref3] + +Options: + -s selection performed on ref + -c use Calphas only + -f perform structural checks and filter input data + -t fault tolerant parsing + -p <file> use specified parmeter file. Mandatory + -v <level> verbosity level (0=results only,1=problems reported, 2=full report) + -b <value> tolerance in stddevs for bonds + -a <value> tolerance in stddevs for angles + -r <value> distance inclusion radius + -i <value> sequence separation + -e print version + -x ignore residue name consistency checks + +%apprun Molck +############################################################################## +# MOLCK APP +############################################################################## +$OST_ROOT/bin/molck "$@" + +%apphelp Molck +This is molck - the molecule checker + +Usage: + singularity run --app Molck <IMAGE> [options] file1.pdb [file2.pdb [...]] + +Options: + --complib=path location of the compound library file. If not provided, the + following locations are searched in this order: + 1. Working directory, 2. OpenStructure standard library location (if the + executable is part of a standard OpenStructure installation) + --rm=<a>,<b> remove atoms and residues matching some criteria + zeroocc - Remove atoms with zero occupancy + hyd - Remove hydrogen atoms + oxt - Remove terminal oxygens + nonstd - Remove all residues not one of the 20 standard amino acids + unk - Remove unknown and atoms not following the nomenclature + --fix-ele clean up element column + --stdout write cleaned file(s) to stdout + --out=filename write cleaned file(s) to disk. % characters in the filename are + replaced with the basename of the input file without extension. + Default: %-molcked.pdb + --color=auto|on|off + whether output should be colored + --map-nonstd maps modified residues back to the parent amino acid, for example + MSE -> MET, SEP -> SER. + +%apprun OST +############################################################################## +# OST APP +############################################################################## +$OST_ROOT/bin/ost "$@" + +%apphelp OST +The OST app exposes OpenStructure binary and can be used to run interactive shell +and scripts. + +Usage: + singularity run --app OST <IMAGE> [ost options] [script to execute] [script parameters] + +Options: + -i, --interactive start interpreter interactively (must be first + parameter, ignored otherwise) + -h, --help show this help message and exit + -v VLEVEL, --verbosity_level=VLEVEL + sets the verbosity level [default: 2] + +If script requires some external files eg. PDBs, they have to be located in the +path accessible via mounted volumes. By default Singularity mounts $HOME and +goes to CWD. Thus this sould work as expected out of the box. + + +%appenv IPython +############################################################################## +# NOTEBOOK ENV +############################################################################## +export DNG_ROOT=$OST_ROOT +export DNG_INITDIR=${DNG_ROOT}/lib64/python2.7/site-packages/ost + +%apprun IPython +############################################################################## +# OST IPYTON APP +############################################################################## +. $VIRTUALENV_DIR/bin/activate && ipython -i $DNG_INITDIR/ost_startup.py "$@" + +%apphelp IPython +OST-powered iPython shell. + +Usage: + + singularity run --app IPython <IMAGE> [options] + +Detailed help: + + singularity run --app IPython <IMAGE> --help + +%appenv Notebook +############################################################################## +# NOTEBOOK ENV +############################################################################## +export BIN_DIR=$OST_ROOT/bin +export XDG_RUNTIME_DIR="" +. $OST_ROOT/libexec/openstructure/ost_config + +%apprun Notebook +############################################################################## +# NOTEBOOK APP +############################################################################## +. $VIRTUALENV_DIR/bin/activate && jupyter notebook --NotebookApp.iopub_data_rate_limit=10000000 --no-browser "$@" + +%apphelp Notebook +A Jupyter notebook palyground with OST and nglview. + +Usage: + + singularity run --app Notebook <IMAGE> [options] + +The Jupyter notebook is run by default with `--NotebookApp.iopub_data_rate_limit=10000000` +and `--no-browser` options. + +Useful options when running on remote server: + --ip=<Unicode> (NotebookApp.ip) + Default: 'localhost' + The IP address the notebook server will listen on. + --port=<Integer> (NotebookApp.port) + Default: 8888 + The port the notebook server will listen on. + +Copy the URL to the browser and launch the notebook with OST kernel. This will +load all necessary OST components just like in the OST shell. We also enabled +the nglview widget to interactively view molecular structures and trajectories. +For more details on how to use nglview see http://nglviewer.org/nglview/latest/. + +As the Singularity mounts $HOME by default Jupyter and Ipython config files +are moved to separate directories. Proper environmental variables are also set. +In addition, Jupyter is run in a separate virtualenv to not interact with possibly +installed host version. + +To list of all available options: + + singularity run --app Notebook <IMAGE> --help + + +%runscript +############################################################################## +# RUNSCRIPT +############################################################################## +cat << EOF +Singularity container for OST $OPENSTRUCTURE_VERSION. + +This container includes the following apps: + * OST - OpenStructure binary + * IPython - OST-powered iPython shell + * Notebook - A Jupyter notebook palyground with OST and nglview + * lDDT - The Local Distance Difference Test + * Molck - Molecular checker + * ChemdictTool - Creating or update a compound library + +To see the help for each individual app run: + + singularity help --app <APP NAME> <IMAGE NAME> +EOF + +%help +Singularity container for OST. + +This container includes the following apps: + * OST - OpenStructure binary + * IPython - OST-powered iPython shell + * Notebook - A Jupyter notebook palyground with OST and nglview + * lDDT - The Local Distance Difference Test + * Molck - Molecular checker + * ChemdictTool - Creating or update a compound library + +To see the help for each individual app run: + + singularity help --app <APP NAME> <IMAGE NAME> + +