File: install.rst

package info (click to toggle)
openstructure 2.9.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 205,228 kB
  • sloc: cpp: 188,129; python: 35,361; ansic: 34,298; fortran: 3,275; sh: 286; xml: 146; makefile: 29
file content (420 lines) | stat: -rw-r--r-- 17,022 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
Installing OpenStructure From Source
================================================================================

Brief Overview
--------------------------------------------------------------------------------

For a simple and portable way to use OpenStructure we recommend using a
container solution. We provide recipes to build images for
`Docker <https://www.docker.com/>`_ and
`Singularity <https://sylabs.io/singularity/>`_.
The latest recipes and instructions can be found on our
`GitLab site <https://git.scicore.unibas.ch/schwede/openstructure/>`_, including
a link to OpenStructure's own `GitLab Docker registry <https://git.scicore.unibas.ch/schwede/openstructure/container_registry>`_ (`Docker instructions`_ and
`Singularity instructions`_).

If you wish to compile OpenStructure outside of a container, you need to follow
the steps which we describe in detail below. In essence, these steps are:

* Installing the Dependencies
* Checking out the source code from GIT
* Configuring the build with cmake
* Compiling an Linking


Installing the Dependencies
--------------------------------------------------------------------------------

OpenStructure requires a C++11 enabled compiler (e.g. recent gcc/clang) and uses 
a bunch of open-source libraries. If you haven't already installed them, please 
install them now! Where appropriate, the preferred version is given in 
parentheses.

* `CMake <http://cmake.org>`_ (3.23.1)
* `Python3 <http://python.org>`_ (3.9.5)
* `Boost <http://boost.org>`_ (1.76.0)
* `zlib <https://zlib.net/>`_ (usually comes with Boost or system)
* `Eigen3 <http://eigen.tuxfamily.org>`_ (3.4.0)
* `SQLite3 <https://www3.sqlite.org>`_ (3.35.4)
* `FFTW3 <http://fftw.org>`_ (3.3.9). By default, OpenStructure is compiled with single
  precision and thus also requires FFTW to be compiled with single precision.
  Most platforms offer this as a second package. If you are compiling manually,
  use the `--enable-single` option.
* `libtiff <http://www.libtiff.org>`_ (4.2.0)
* `libpng <http://www.libpng.org>`_ (1.6.37, also needed for GUI)

If you would like to use the info module, also install:

* `Qt5 <http://qt-project.org/>`_ 

If you would like to use the graphical user interface (GUI), also install:

* `Qt5 <http://qt-project.org/>`_ 
* `SIP <http://www.riverbankcomputing.co.uk/software/sip/download>`_
* `PyQt5 <http://www.riverbankcomputing.co.uk/software/pyqt/download>`_

If you would like to use the :mod:`molecular mechanics <ost.mol.mm>` module:

* `OpenMM <https://simtk.org/home/openmm>`_ (7.7.0)

If you would like to do pairwise sequence alignments with parasail
in the :mod:`bindings <ost.bindings>` module:

* `parasail <https://github.com/jeffdaily/parasail/>`_ (2.6.2)

We do not provide backwards compatibility to Python 2.7. The last
release supporting Python 2.7 is 1.11.0.


Getting the Source Code
--------------------------------------------------------------------------------

OpenStructure uses `git` as the revision control system. The main repository can
be browsed `here <https://git.scicore.unibas.ch/schwede/openstructure.git>`_. To
get the source code, use git clone:

.. code-block:: bash

  git clone https://git.scicore.unibas.ch/schwede/openstructure.git <directory-name>
  
The above command will clone OpenStructure into the directory specified by
`<directory-name>`. If omitted, the directory will be called openstructure. 

.. note::

  Some versions of curl have trouble with the certificate of the OpenStructure
  git server and fail to clone the repository. To work around this, disable the
  SSL certificate verification by setting the following environment variable:
  
  .. code-block:: bash

    export GIT_SSL_NO_VERIFY=1


Picking the right branch
--------------------------------------------------------------------------------

By default you are checking out the master branch. Master is by definition a
stable branch. It always points to the latest release. However, there are
several other branches at your disposal. The main development is happening in
the develop branch. It contains the newest features and bug fixes. However, we
don't make any guarantees that the develop branch is bug free and doesn't
contain major bugs. After all, it's in constant flux. If you are developing new
features, start your feature branch off develop. Besides that, there are several
smaller features branches that are used to group together commits for one
specific features. To change to a specific branch, use

.. code-block:: bash

  git checkout <branch-name>


Configuring
--------------------------------------------------------------------------------

OpenStructure uses `CMake <http://cmake.org>`_ for compiling and building the
project. The next required step is to configure the build environment using
cmake. You can do that by invoking `cmake` in the project directory.

.. code-block:: bash

  cmake . <options>

There are two kinds of options: Options that let you control the building
behaviour, enabling and disabling the compilation of certain modules and options
that let you tell CMake where to find the dependencies. All of them are passed
to CMake via `-D<opt>=<value>`.


Flag to choose build generator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

CMake supports different build generators. On UNIX, i.e. macOS and Linux, the
default build generator is Makefiles, but it is also possible to use other
programs. For a list of supported build generators on your platform, run
`cmake` without parameters.


.. _cmake-flags:

Flags to Control the Dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

By default, `CMake <http://cmake.org>`_ searches the standard directories for
dependencies. However, on some systems, this might not be enough. Here is a
short description of how CMake figures out what dependencies to take and how you
can influence it.

* Boost is mainly controlled via the `BOOST_ROOT` option. If boost wasn't
  found, it should be set to the prefix of the boost installation. If for some
  reason, it is desirable to use the non-multithreaded boost libraries, you can
  switch `Boost_USE_MULTITHREADED` off (it is on by default).

* `Python_ROOT_DIR` is the Python equivalent of BOOST_ROOT. It should be set to 
  the prefix path containing the python binary, headers and libraries.

* `SYS_ROOT` controls the general prefix for searching libraries and headers.
  By default, it is set to `/`.
  
* `COMPOUND_LIB` specifies the location of the compound library and
  activates the rule-based-builder. The compound library is based on 
  the component dictionary released by the PDB, and it specifies atoms
  of a certain residue or connectivities between atoms etc. The 
  :doc:`compound library <conop/compoundlib>` itself is created from the 
  component dictionary by calling the OpenStructure chemdict_tool. 
  By default this is switched off but it is highly recommended to provide a
  compound library to use all features of OpenStructure.

* `ENABLE_GUI` controls whether to build the graphical user interface module.
  By default, this is switched on.

* `ENABLE_GFX` controls whether to build the graphics module. By default, this
  is switched on. If it is switched off, it also switches `ENABLE_GUI` off.

* `ENABLE_INFO` controls whether to build the info module. By default, this is
  switched on. If it is switched off, it also switches `ENABLE_GFX` off and
  removes all dependencies to Qt.

* `QT_QMAKE_EXECUTABLE` defines the exact Qt installation to take. It should 
  be set to the full path to `qmake`. This is only needed if `ENABLE_INFO` is
  switched on.

* `COMPILE_TMTOOLS` will activate bindings for TMAlign and TMScore, which are 
  then available at python level. This option requires a Fortran compiler. 
  By default, this option is switched off.

* `ENABLE_MM` controls whether the molecular mechanics module is enabled. By
  default, this is switched off. If it is turned on, you should also set the
  paths to your local OpenMM installation:

  * `OPEN_MM_INCLUDE_DIR`: the include path
  * `OPEN_MM_LIBRARY`: the libOpenMM library
  * `OPEN_MM_PLUGIN_DIR`: the path for OpenMM plugins
  * see example below for commonly used paths

* `ENABLE_PARASAIL` controls whether parasail should be enabled. By default,
  this is switched off. If it is turned on, you must also set the paths
  to your parasail installation:

  * `PARASAIL_INCLUDE_DIR`: the include path containing the file parasail.h
  * `PARASAIL_LIBRARY`: the parasail library

* Several paths to other libraries can be set if they are not in the expected
  locations:

  * `Python_LIBRARY` defines the location of the Python library (file name
    starting with `libpython`). This must be set if it is not in
    `$Python_ROOT_DIR/lib`.
  * `EIGEN3_INCLUDE_DIR` defines the include folder of Eigen3 (contains `Eigen`
    folder with include files).
  * `FFTW_LIBRARY` defines the location of the FFTW3 library (file name starting
    with `libfftw3f` (or `libfftw3` if `USE_DOUBLE_PRECISION` is switched on))
  * `FFTW_INCLUDE_DIR` defines the include folder of FFTW3 (contains include
    files directly)
  * `PNG_LIBRARY` defines the location of the libpng library (file name starting
    with `libpng`)
  * `PNG_PNG_INCLUDE_DIR` defines the include folder of libpng (contains include
    files directly)
  * `ZLIB_LIBRARY` defines the location of the zlib library (file name starting
    with `libz`)
  * `ZLIB_INCLUDE_DIR` defines the include folder of zlib (contains include
    files directly)
  * `TIFF_LIBRARY` defines the location of the libtiff library (file name
    starting with `libtiff`)
  * `TIFF_INCLUDE_DIR` defines the include folder of libtiff (contains include
    files directly)
  * `SQLITE3_LIBRARY` defines the location of the SQLite3 library (file name starting
    with `libsqlite3`)
  * `SQLITE3_INCLUDE_DIR` defines the include folder of SQLite3 (contains include
    files directly)
  * Usually, you will receive errors for those variables when executing `cmake`
    and set them accordingly as needed.

* `OPENGLPREFERENCE_LEGACY` switches the GL implementation to be used by OpenGL.
  The default is what should be used on modern systems. But since there are some
  reports on the internet claiming that the default does not work everywhere,
  this switch enables the usage of the legacy implementation of GL.
  
Build Options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* `OPTIMIZE` can be switched on to build an optimised (-O3 -DNDEBUG) version of
  OpenStructure. By default, this is switched off.

* `USE_DOUBLE_PRECISION` will switch on double precision within OpenStructure. 
  By default, this is switched off.

* `ENABLE_STATIC` allows some parts of OpenStructure to be statically linked 
  and thus can be used more easily across a heterogeneous setup, e.g. older 
  systems and newer systems. Note that enabling this flag will not compile the
  full OpenStructure package and it is not guaranteed to lead to fully portable
  binaries. By default, this is switched off.

* For deployment of OpenStructure with `make install` there are two relevant
  settings to consider:

  * `PREFIX` or `CMAKE_INSTALL_PREFIX` are used to define the path where the
    OpenStructure `stage` folder will be installed to.
  * `USE_RPATH` can be switched on to embed rpath upon make install. By default,
    this option is switched off.

* Experimental settings (only change if you know what you are doing):

  * `USE_SHADER` controls whether to compile with shader support. By default,
    this is turned off.
  * `ENABLE_SPNAV` controls whether 3DConnexion devices should be supported. By
    default, this is turned off.
  * `PROFILE` can be switched on to enable a (very verbose) code profiler. By
    default, this is turned off.
  * `UBUNTU_LAYOUT` can be turned on to switch the directory layout of the
    `stage` folder to be more ubuntu-like. By default, this is switched off.
  * `HIDDEN_VISIBILITY` can be turned on to add "-fvisibility=hidden" to gcc's
    compile flags (only if GNU compiler used). By default, this is switched off.

Known Issues
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* Depending on how the dependecies (e.g. Boost) are compiled, linking might fail
  with something like: `error: undefined reference to pthread_condattr_destroy`.
  Add "-pthread" to the linking options by appending the following to your cmake
  command: `-DCMAKE_EXE_LINKER_FLAGS=" -pthread"`

Example Configurations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Generic Linux without GUI**

The simplest way to compile OpenStructure is to disable the GUI and any
dependency to Qt5. You can build an optimised OpenStructure without GUI as
follows:

.. code-block:: bash

  cmake . -DOPTIMIZE=ON -DENABLE_INFO=OFF

The molecular mechanics module can be enabled by installing OpenMM and adding
the appropriate flags as follows (replace `<OPENMM>` with the actual path to
OpenMM):

.. code-block:: bash

  cmake . -DOPTIMIZE=ON -DENABLE_INFO=OFF -DENABLE_MM=ON \
          -DOPEN_MM_LIBRARY=<OPENMM>/lib/libOpenMM.so \
          -DOPEN_MM_INCLUDE_DIR=<OPENMM>/include/ \
          -DOPEN_MM_PLUGIN_DIR=<OPENMM>/lib/plugins

Note that the OpenMM binaries available online may be incompatible with files
compiled using your gcc compiler (known as "Dual ABI" issue). This has been
observed for OpenMM versions 6.1 until 7.1.1 when compiling with gcc versions >=
5.1. In those cases, you cannot use the binaries and will have to install OpenMM
from source.


**Ubuntu 24.04 LTS**

Besides the molecular mechanics module, we also enable parasail here.
All the dependencies can be installed from the package manager as follows:

.. code-block:: bash

  sudo apt-get install cmake g++ libtiff-dev libfftw3-dev libeigen3-dev \
               libpng-dev python3-all python3-pyqt5 libboost-all-dev \
               qt5-qmake qtbase5-dev libpng-dev libsqlite3-dev \
               libopenmm-dev libopenmm-plugins libparasail-dev

Now, all dependencies are located in standard locations and cmake will
automatically find them. As a single quirk, we need to specify the
OpenMM plugin directory. Lets do a proper out of source build here:

.. code-block:: bash

  mkdir build
  cd build
  cmake .. -DOPTIMIZE=ON -DENABLE_MM=1 -DENABLE_PARASAIL=1 \
           -DOPEN_MM_PLUGIN_DIR=/lib/x86_64-linux-gnu/openmm/plugins

Building the Project
--------------------------------------------------------------------------------

Type ``make``. If you are using a multi-core machine, you can use the `-j` flag
to run multiple jobs at once.


What's next?
--------------------------------------------------------------------------------

One thing is missing for a fully functional OpenStructure installation.
The compound library. It is used at various places for connectivity
information and certain algorithms do not work without.
Besides an OpenStructure executable, we just built the
chemdict_tool which converts the PDB chemical component dictionary
into our internal format:

.. code-block:: bash

  wget https://files.wwpdb.org/pub/pdb/data/monomers/components.cif.gz
  stage/bin/chemdict_tool create components.cif.gz <compounds.chemlib>

We can rerun cmake and make. All cmake parameters from the original
configuration remain in the cache.

.. code-block:: bash

  cmake .. -DCOMPOUND_LIB=<compounds.chemlib>
  make

On Linux and macOS, you can start dng from the command-line. The binaries are
all located in stage/bin:

.. code-block:: bash

  stage/bin/dng
  
or, to start the command-line interpreter:

.. code-block:: bash

  stage/bin/ost
  
But hey, good citizen run the unit tests first:

.. code-block:: bash

  make check
  
If you repeatedly use OpenStructure, it is recommended to add
/path/to/ost/stage/bin to your path.

You can also import OpenStructure directly into your existing python scripts,
jupyter notebooks etc. Simply make sure to point the following environment
variables to the right folders:

.. code-block:: bash

  export OST_ROOT=/path/to/ost/stage
  export PYTHONPATH=$OST_ROOT/lib64/python3.10/site-packages/:$PYTHONPATH
  python

And then you can simply import ost as a module:

.. code-block:: python

  import ost

Getting the newest changes
--------------------------------------------------------------------------------

To get the newest changes from the central git repository, enter

.. code-block:: bash

  git pull

in your terminal. This will fetch the newest changes.


..  LocalWords:  Homebrew cmake CMake zlib SQLite FFTW libtiff libpng PyQt OST
..  LocalWords:  SSL macOS Makefiles PDB qmake PNG libz libsqlite OPTIMIZE dng
..  LocalWords:  DNDEBUG RPATH rpath SHADER shader SPNAV DConnexion profiler
..  LocalWords:  DOPTIMIZE DENABLE DOPEN DPYTHON DBOOST DSYS Xcode Eigen Sur
..  LocalWords:  Monterey SDKROOT DPython DIRS DCMAKE isystem CXX