[cctbxbb] some thoughts on cctbx and pip

Billy Poon BKPoon at lbl.gov
Fri Dec 20 11:15:35 PST 2019


Hi everyone,

I updated the conda packages on the cctbx-dev channel and there are also
now packages for macOS. The old packages have been removed so you can
create a new environment with

conda create -n test -c cctbx-dev cctbx python=2.7
conda activate test

where "test" is the environment name and 2.7 is the python version. For the
python version, you can also pick 3.6, 3.7, or 3.8. I think the latest
conda will install 3.8 as the default python if the python argument is not
provided. Or install into an existing environment (with python already
installed) with the same command as before,

conda install -c cctbx-dev cctbx

Again, your .condarc file should have conda-forge as the first channel so
that dependencies can be pulled correctly.

The dispatchers should work now and $LIBTBX_BUILD will be set on activation
of an environment (and unset on environment deactivation) or after
installing into an existing environment, so you can do more interesting
things like

iotbx.fetch_pdb --all --mtz 1kp8

However, this package does not install databases, so

molprobity.molprobity 1kp8.pdb 1kp8.mtz

will fail because the database is not available (also probe and reduce are
not built).

Some known issues in no particular order,

1) You can run "libtbx.run_tests_parallel module=cctbx nproc=Auto" to run
tests, but not all the test files were copied, so I got 30 failures here.
The final package will probably not have the test files.
2) The other python dispatchers, like "cctbx.python", were not updated, so
those will fail. But you can just run "python" in the active environment.
3) Parts of mmtbx still need to be updated for Python 3.
4) The LIBTBX_BUILD variable should be set for sh and csh shells. Let me
know if it's not working for your shell (i.e. "echo $LIBTBX_BUILD" should
show the same thing as $CONDA_PREFIX).
5) One future step is to enable building other CCTBX-like modules with this
conda package. This will require some bookkeeping updates so that modules
in the conda environment and the modules being built are tracked properly.
Also, making sure that all the necessary headers exist in $PREFIX/include.

Gergely, let me know if your scripts are working.

Happy holidays!

--
Billy K. Poon
Research Scientist, Molecular Biophysics and Integrated Bioimaging
Lawrence Berkeley National Laboratory
1 Cyclotron Road, M/S 33R0345
Berkeley, CA 94720
Tel: (510) 486-5709
Fax: (510) 486-5909
Web: https://phenix-online.org


On Wed, Dec 18, 2019 at 11:25 AM Billy Poon <BKPoon at lbl.gov> wrote:

> Hi Gergely,
>
> That's the other information that hasn't been updated yet in the conda
> package. :)
>
> For LIBTBX_BUILD, I can set up environment variables sort of how the conda
> gcc package sets up environment variables. I have to double check to see if
> they're set after installation of the package and after activation of an
> environment. The variable will just be a copy of $CONDA_PREFIX.
>
> The libtbx_env file is a file that exists in $LIBTBX_BUILD that basically
> stores configuration information. I'll have to modify the contents to
> update the locations of the different modules since the conda package will
> not have a "modules" directory.
>
> --
> Billy K. Poon
> Research Scientist, Molecular Biophysics and Integrated Bioimaging
> Lawrence Berkeley National Laboratory
> 1 Cyclotron Road, M/S 33R0345
> Berkeley, CA 94720
> Tel: (510) 486-5709
> Fax: (510) 486-5909
> Web: https://phenix-online.org
>
>
> On Wed, Dec 18, 2019 at 2:08 AM Gergely Katona <gkatona at gmail.com> wrote:
>
>> Hi Billy,
>>
>> Conda install went fine with your instructions after rearranging the
>> channels by putting cctbx last. I removed all environmental variables
>> and previous build of cctbx.
>>
>> import sys
>> print (sys.path, sys.prefix)
>>
>> ['/home/gergely/anaconda3/lib/python36.zip',
>> '/home/gergely/anaconda3/lib/python3.6',
>> '/home/gergely/anaconda3/lib/python3.6/lib-dynload', '',
>> '/home/gergely/anaconda3/lib/python3.6/site-packages',
>> '/home/gergely/anaconda3/lib/python3.6/site-packages/IPython/extensions',
>> '/home/gergely/.ipython'] /home/gergely/anaconda3
>>
>> Many imports went fine including pymc3, but I encountered problems
>> with these three:
>>
>> from cctbx import miller
>> import iotbx.pdb
>> from iotbx import reflection_file_reader, mtz
>>
>>
>> I also got type error when handling space groups.
>>
>>
>>
>>
>> ---------------------------------------------------------------------------
>> KeyError                                  Traceback (most recent call
>> last)
>> <ipython-input-5-cedbd4f84f3d> in <module>
>>      25 from cctbx import uctbx
>>      26 from cctbx import sgtbx
>> ---> 27 from cctbx import miller
>>      28 #from iotbx import reflection_file_reader, mtz
>>      29 sns.set_context("poster")
>>
>> ~/anaconda3/lib/python3.6/site-packages/cctbx/miller/__init__.py in
>> <module>
>>      11
>>      12 from cctbx import crystal
>> ---> 13 from cctbx import maptbx
>>      14 from cctbx import sgtbx
>>      15 from cctbx.sgtbx import lattice_symmetry
>>
>> ~/anaconda3/lib/python3.6/site-packages/cctbx/maptbx/__init__.py in
>> <module>
>>      15 from libtbx import adopt_init_args
>>      16 from libtbx.utils import Sorry
>> ---> 17 import libtbx.load_env
>>      18 import math
>>      19 import sys, os
>>
>> ~/anaconda3/lib/python3.6/site-packages/libtbx/load_env.py in <module>
>>       3 import libtbx.env_config
>>       4 import os
>> ----> 5 libtbx.env = libtbx.env_config.unpickle()
>>       6 libtbx.env.set_os_environ_all_dist()
>>       7 libtbx.env.dispatcher_name =
>> os.environ.get("LIBTBX_DISPATCHER_NAME")
>>
>> ~/anaconda3/lib/python3.6/site-packages/libtbx/env_config.py in unpickle()
>>    2603
>>    2604 def unpickle():
>> -> 2605   build_path = os.environ["LIBTBX_BUILD"]
>>    2606
>>  set_preferred_sys_prefix_and_sys_executable(build_path=build_path)
>>    2607   libtbx_env = open(op.join(build_path, "libtbx_env"), "rb")
>>
>> ~/anaconda3/lib/python3.6/os.py in __getitem__(self, key)
>>     667         except KeyError:
>>     668             # raise KeyError with the original key value
>> --> 669             raise KeyError(key) from None
>>     670         return self.decodevalue(value)
>>     671
>>
>> KeyError: 'LIBTBX_BUILD'
>>
>>
>>
>>
>> ---------------------------------------------------------------------------
>> ArgumentError                             Traceback (most recent call
>> last)
>> <ipython-input-7-2acd3a9ce26a> in <module>
>>      26     return
>> ms,msnam,mscent,msacent,msnamacent,msnamcent,msnamacent_dstar
>>      27
>> ---> 28
>> ms,msnam,mscent,msacent,msnamacent,msnamcent,msnamacent_dstar=initializecrystal()
>>
>> <ipython-input-7-2acd3a9ce26a> in initializecrystal()
>>      11     uc = uctbx.unit_cell(unit_cell)
>>      12     wavelength = 1.54980
>> ---> 13     xtal_symm = crystal.symmetry(unit_cell=unit_cell,
>> space_group_symbol="P 43 21 2")
>>      14
>>      15     ms =
>> miller.build_set(crystal_symmetry=xtal_symm,anomalous_flag=True,
>> d_min=1.61)
>>
>> ~/anaconda3/lib/python3.6/site-packages/cctbx/crystal/__init__.py in
>> __init__(self, unit_cell, space_group_symbol, space_group_info,
>> space_group, correct_rhombohedral_setting_if_necessary,
>> assert_is_compatible_unit_cell, raise_sorry_if_incompatible_unit_cell,
>> force_compatible_unit_cell)
>>      74       if (space_group_symbol is not None):
>>      75         self._space_group_info = sgtbx.space_group_info(
>> ---> 76           symbol=space_group_symbol)
>>      77       elif (space_group is not None):
>>      78         if (isinstance(space_group, sgtbx.space_group)):
>>
>> ~/anaconda3/lib/python3.6/site-packages/cctbx/sgtbx/__init__.py in
>> __init__(self, symbol, table_id, group, number, space_group_t_den)
>>     100       assert group is None
>>     101       if (table_id is None):
>> --> 102         symbols = space_group_symbols(symbol)
>>     103       else:
>>     104         if (isinstance(symbol, int)): symbol = str(symbol)
>>
>> ArgumentError: Python argument types in
>>     space_group_symbols.__init__(space_group_symbols, str)
>> did not match C++ signature:
>>     __init__(_object*, int space_group_number)
>>     __init__(_object*, int space_group_number,
>> std::__cxx11::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > extension='')
>>     __init__(_object*, int space_group_number,
>> std::__cxx11::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > extension='', std::__cxx11::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > table_id='')
>>     __init__(_object*, std::__cxx11::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > symbol)
>>     __init__(_object*, std::__cxx11::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > symbol,
>> std::__cxx11::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > table_id='')
>>
>>
>> When I tried to set LIBTBX_BUILD to /home/gergely/anaconda3 (this is
>> sys.prefix on my system), I got other problems when importing. Can
>> LIBTBX_BUILD be set in the conda package?
>>
>>
>>
>>
>> ---------------------------------------------------------------------------
>> FileNotFoundError                         Traceback (most recent call
>> last)
>> <ipython-input-1-7e2b144826cc> in <module>
>>      26 from cctbx import sgtbx
>>      27 #from cctbx import miller
>> ---> 28 from iotbx import reflection_file_reader, mtz
>>      29 sns.set_context("poster")
>>      30 plt.rcParams.update({'figure.autolayout': True})
>>
>> ~/anaconda3/lib/python3.6/site-packages/iotbx/reflection_file_reader.py
>> in <module>
>>      53
>>      54 from __future__ import absolute_import, division, print_function
>> ---> 55 from iotbx import mtz
>>      56 from iotbx.scalepack import merge as scalepack_merge
>>      57 from iotbx.scalepack import no_merge_original_index as
>> scalepack_no_merge
>>
>> ~/anaconda3/lib/python3.6/site-packages/iotbx/mtz/__init__.py in <module>
>>       9 import iotbx_mtz_ext as ext
>>      10
>> ---> 11 from iotbx.mtz import extract_from_symmetry_lib
>>      12 from cctbx import xray
>>      13 import cctbx.xray.observation_types
>>
>>
>> ~/anaconda3/lib/python3.6/site-packages/iotbx/mtz/extract_from_symmetry_lib.py
>> in <module>
>>       1 from __future__ import absolute_import, division, print_function
>>       2 from cctbx import sgtbx
>> ----> 3 import libtbx.load_env
>>       4 import os.path as op
>>       5 from six.moves import range
>>
>> ~/anaconda3/lib/python3.6/site-packages/libtbx/load_env.py in <module>
>>       3 import libtbx.env_config
>>       4 import os
>> ----> 5 libtbx.env = libtbx.env_config.unpickle()
>>       6 libtbx.env.set_os_environ_all_dist()
>>       7 libtbx.env.dispatcher_name =
>> os.environ.get("LIBTBX_DISPATCHER_NAME")
>>
>> ~/anaconda3/lib/python3.6/site-packages/libtbx/env_config.py in unpickle()
>>    2605   build_path = os.environ["LIBTBX_BUILD"]
>>    2606
>>  set_preferred_sys_prefix_and_sys_executable(build_path=build_path)
>> -> 2607   libtbx_env = open(op.join(build_path, "libtbx_env"), "rb")
>>    2608   env = pickle.load(libtbx_env)
>>    2609   if (env.python_version_major_minor != sys.version_info[:2]):
>>
>> FileNotFoundError: [Errno 2] No such file or directory:
>> '/home/gergely/anaconda3/libtbx_env'
>>
>> On Wed, Dec 18, 2019 at 9:10 AM Billy Poon <BKPoon at lbl.gov> wrote:
>> >
>> > Hi Gergely,
>> >
>> > I've uploaded linux packages to a new channel, cctbx-dev, and you can
>> install it with
>> >
>> > conda install -c cctbx-dev cctbx
>> >
>> > in your current environment. You should set your ~/.condarc file to
>> pull the other dependencies from the conda-forge channel first, so put
>> conda-forge above cctbx. Mine looks like
>> >
>> > channels:
>> >   - conda-forge
>> >   - defaults
>> >   - cctbx
>> >
>> > Do you need dxtbx for your scripts? This package does not build that
>> part. I think the plan is to build a separate conda package for dxtbx so
>> that it can be updated more frequently. I can rebuild the packages to
>> include it for testing, but the one being submitted to conda-forge will not
>> have it.
>> >
>> > Also, your error message is probably due to version of HDF5 that the
>> development build installs. The bootstrap.py script will install 1.10.4,
>> but your other dependency is looking for 1.10.5. Installing this cctbx
>> conda package should install 1.10.5, which should fix the issue. Also, I'm
>> updating those environments and 1.10.5 will be the new default version.
>> >
>> > Lastly, the dispatchers will not work in these packages because the old
>> paths during the build process are still in them and many of them expect
>> some additional information that has not been updated in the packages yet.
>> I'm in the process of doing that and will update the cctbx-dev channel when
>> that's done. However, by starting python, you can import cctbx modules. So
>> you can run commands like
>> >
>> > from scitbx.array_family import flex
>> > a = flex.random_double(1000000)
>> > b = flex.min_max_mean_double(a)
>> > b.min
>> > b.max
>> > b.mean
>> >
>> > Thanks!
>> >
>> > --
>> > Billy K. Poon
>> > Research Scientist, Molecular Biophysics and Integrated Bioimaging
>> > Lawrence Berkeley National Laboratory
>> > 1 Cyclotron Road, M/S 33R0345
>> > Berkeley, CA 94720
>> > Tel: (510) 486-5709
>> > Fax: (510) 486-5909
>> > Web: https://phenix-online.org
>> >
>> >
>> > On Tue, Dec 17, 2019 at 5:39 AM Gergely Katona <gkatona at gmail.com>
>> wrote:
>> >>
>> >> Dear Billy,
>> >>
>> >> Thank you for the detailed explanation, I look forward to do further
>> >> testing! I aim to pool all modules under the same environment, if
>> >> there are conflicts then I just try to reshuffle the order of imports.
>> >> So far this did not cause problems for me even when I was using system
>> >> python, but of course it is not the most prudent thing to do. With
>> >> anaconda everything is much more standardized and isolated already and
>> >> without being superuser I can have my familiar environment at any
>> >> synchrotron based cluster. It is great that cctbx will be an integral
>> >> part of this ecosystem and this was also the last thing holding me
>> >> back from adopting python3. About hdf5, pymc3 requires it and
>> >> importing causes a kernel restart with the following error messages,
>> >> curiously if I import h5py first this can be avoided.
>> >>
>> >> Best wishes,
>> >>
>> >> Gergely
>> >>
>> >> import pymc3 as pm
>> >>
>> >> Warning! ***HDF5 library version mismatched error***
>> >> The HDF5 header files used to compile this application do not match
>> >> the version used by the HDF5 library to which this application is
>> linked.
>> >> Data corruption or segmentation faults may occur if the application
>> continues.
>> >> This can happen when an application was compiled by one version of
>> HDF5 but
>> >> linked with a different version of static or shared HDF5 library.
>> >> You should recompile the application or check your shared library
>> related
>> >> settings such as 'LD_LIBRARY_PATH'.
>> >> You can, at your own risk, disable this warning by setting the
>> environment
>> >> variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
>> >> Setting it to 2 or higher will suppress the warning messages totally.
>> >> Headers are 1.10.4, library is 1.10.5
>> >>         SUMMARY OF THE HDF5 CONFIGURATION
>> >>         =================================
>> >>
>> >> General Information:
>> >> -------------------
>> >>                    HDF5 Version: 1.10.5
>> >>                   Configured on: Tue Oct 22 12:02:13 UTC 2019
>> >>                   Configured by: conda at 16247e67ecd5
>> >>                     Host system: x86_64-conda_cos6-linux-gnu
>> >>               Uname information: Linux 16247e67ecd5 4.15.0-1059-azure
>> >> #64-Ubuntu SMP Fri Sep 13 17:02:44 UTC 2019 x86_64 x86_64 x86_64
>> >> GNU/Linux
>> >>                        Byte sex: little-endian
>> >>              Installation point: /home/gergely/anaconda3
>> >>
>> >> Compiling Options:
>> >> ------------------
>> >>                      Build Mode: production
>> >>               Debugging Symbols: no
>> >>                         Asserts: no
>> >>                       Profiling: no
>> >>              Optimization Level: high
>> >>
>> >> Linking Options:
>> >> ----------------
>> >>                       Libraries: static, shared
>> >>   Statically Linked Executables:
>> >>                         LDFLAGS: -Wl,-O2 -Wl,--sort-common
>> >> -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags
>> >> -Wl,--gc-sections -Wl,-rpath,/home/gergely/anaconda3/lib
>> >> -Wl,-rpath-link,/home/gergely/anaconda3/lib
>> >> -L/home/gergely/anaconda3/lib
>> >>                      H5_LDFLAGS:
>> >>                      AM_LDFLAGS:  -L/home/gergely/anaconda3/lib
>> >>                 Extra libraries: -lrt -lpthread -lz -ldl -lm
>> >>                        Archiver:
>> >>
>> /home/conda/feedstock_root/build_artifacts/hdf5_split_1571745596770/_build_env/bin/x86_64-conda_cos6-linux-gnu-ar
>> >>                        AR_FLAGS: cr
>> >>                          Ranlib:
>> >>
>> /home/conda/feedstock_root/build_artifacts/hdf5_split_1571745596770/_build_env/bin/x86_64-conda_cos6-linux-gnu-ranlib
>> >>
>> >> Languages:
>> >> ----------
>> >>                               C: yes
>> >>                      C Compiler:
>> >>
>> /home/conda/feedstock_root/build_artifacts/hdf5_split_1571745596770/_build_env/bin/x86_64-conda_cos6-linux-gnu-cc
>> >>                        CPPFLAGS: -DNDEBUG -D_FORTIFY_SOURCE=2 -O2
>> >> -I/home/gergely/anaconda3/include
>> >>                     H5_CPPFLAGS: -D_GNU_SOURCE
>> >> -D_POSIX_C_SOURCE=200809L   -DNDEBUG -UH5_DEBUG_API
>> >>                     AM_CPPFLAGS:  -I/home/gergely/anaconda3/include
>> >>                         C Flags: -march=nocona -mtune=haswell
>> >> -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2
>> >> -ffunction-sections -pipe -I/home/gergely/anaconda3/include
>> >>
>> -fdebug-prefix-map=/home/conda/feedstock_root/build_artifacts/hdf5_split_1571745596770/work=/usr/local/src/conda/hdf5_split-1.10.5
>> >> -fdebug-prefix-map=/home/gergely/anaconda3=/usr/local/src/conda-prefix
>> >>                      H5 C Flags:  -std=c99  -pedantic -Wall -Wextra
>> >> -Wbad-function-cast -Wc++-compat -Wcast-align -Wcast-qual -Wconversion
>> >> -Wdeclaration-after-statement -Wdisabled-optimization -Wfloat-equal
>> >> -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-declarations
>> >> -Wmissing-include-dirs -Wmissing-prototypes -Wnested-externs
>> >> -Wold-style-definition -Wpacked -Wpointer-arith -Wredundant-decls
>> >> -Wshadow -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef
>> >> -Wunused-macros -Wunsafe-loop-optimizations -Wwrite-strings
>> >> -finline-functions -s -Wno-inline -Wno-aggregate-return
>> >> -Wno-missing-format-attribute -Wno-missing-noreturn -O
>> >>                      AM C Flags:
>> >>                Shared C Library: yes
>> >>                Static C Library: yes
>> >>
>> >>
>> >>                         Fortran: yes
>> >>                Fortran Compiler:
>> >>
>> /home/conda/feedstock_root/build_artifacts/hdf5_split_1571745596770/_build_env/bin/x86_64-conda_cos6-linux-gnu-gfortran
>> >>                   Fortran Flags:
>> >>                H5 Fortran Flags:  -pedantic -Wall -Wextra -Wunderflow
>> >> -Wimplicit-interface -Wsurprising -Wno-c-binding-type  -s -O2
>> >>                AM Fortran Flags:
>> >>          Shared Fortran Library: yes
>> >>          Static Fortran Library: yes
>> >>
>> >>                             C++: yes
>> >>                    C++ Compiler:
>> >>
>> /home/conda/feedstock_root/build_artifacts/hdf5_split_1571745596770/_build_env/bin/x86_64-conda_cos6-linux-gnu-c++
>> >>                       C++ Flags: -fvisibility-inlines-hidden
>> >> -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell
>> >> -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2
>> >> -ffunction-sections -pipe -I/home/gergely/anaconda3/include
>> >>
>> -fdebug-prefix-map=/home/conda/feedstock_root/build_artifacts/hdf5_split_1571745596770/work=/usr/local/src/conda/hdf5_split-1.10.5
>> >> -fdebug-prefix-map=/home/gergely/anaconda3=/usr/local/src/conda-prefix
>> >>                    H5 C++ Flags:   -pedantic -Wall -W -Wundef -Wshadow
>> >> -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion
>> >> -Wredundant-decls -Winline -Wsign-promo -Woverloaded-virtual
>> >> -Wold-style-cast -Weffc++ -Wreorder -Wnon-virtual-dtor
>> >> -Wctor-dtor-privacy -Wabi -finline-functions -s -O
>> >>                    AM C++ Flags:
>> >>              Shared C++ Library: yes
>> >>              Static C++ Library: yes
>> >>
>> >>                            Java: no
>> >>
>> >>
>> >> Features:
>> >> ---------
>> >>                    Parallel HDF5: no
>> >> Parallel Filtered Dataset Writes: no
>> >>               Large Parallel I/O: no
>> >>               High-level library: yes
>> >>                     Threadsafety: yes
>> >>              Default API mapping: v110
>> >>   With deprecated public symbols: yes
>> >>           I/O filters (external): deflate(zlib)
>> >>                              MPE: no
>> >>                       Direct VFD: no
>> >>                          dmalloc: no
>> >>   Packages w/ extra debug output: none
>> >>                      API tracing: no
>> >>             Using memory checker: yes
>> >>  Memory allocation sanity checks: no
>> >>           Function stack tracing: no
>> >>        Strict file format checks: no
>> >>     Optimization instrumentation: no
>> >>
>> >> On Tue, Dec 17, 2019 at 8:35 AM Billy Poon <BKPoon at lbl.gov> wrote:
>> >> >
>> >> > Hi Gergely,
>> >> >
>> >> > Let me build the test package tomorrow. All the gritty details for
>> building with conda is being finalized and the official documentation will
>> be updated to describe the steps. It would be too confusing to keep
>> changing the documentation as the process evolves. You do have the general
>> process, though, which is summarized as follows.
>> >> >
>> >> > 1) Installing dependencies. The cctbx_dependencies metapackage was
>> an initial approach for managing the CCTBX dependencies, but after
>> contacting the conda-forge folks, they recommended using the --only-deps
>> flag. So when the CCTBX conda package is available, you'll be able to get a
>> set of dependencies with,
>> >> >
>> >> > conda install -c conda-forge --only-deps cctbx
>> >> >
>> >> > By default, the bootstrap.py file will automatically install a set
>> of dependencies in the "conda_base" directory (and a conda installation if
>> one is not found). It just uses standard conda environment files located in
>> libtbx/auto_build/conda_envs, so you do not need to install
>> cctbx_dependencies as a separate step. The environment files avoid channel
>> issues by explicitly defining the channel to pull the packages from and the
>> cctbx channel just stores copies of packages from conda-forge. There were
>> issues earlier where the conda-forge packages would sometimes be moved to a
>> different label. The --use-conda flag also accepts a path to $CONDA_PREFIX
>> if you want to use a specific environment for testing.
>> >> >
>> >> > 2) Building. The bootstrap.py file handles that with SCons.
>> >> >
>> >> > 3) Running. After building, there should be a setpaths.sh (and .csh)
>> file that adds build/bin to your path. The build/bin directory has our
>> dispatchers, which are just scripts that set up the environment variables
>> for you. This prevents other programs from loading our libraries, whose
>> versions may conflict. You should see that there is a "python" dispatcher,
>> which is a convenience for developers. Otherwise, you can use
>> libtbx.python, which will be able to import CCTBX modules.
>> >> >
>> >> > The running part is where the conda package for CCTBX will be
>> different than this build. Since our Python files and extensions modules
>> will be in the "site-packages" directory for Python, the PYTHONPATH
>> variable will not be needed (and conda suggests that that variable not be
>> set). The other CCTBX libraries will be in $CONDA_PREFIX/lib, so
>> LD_LIBRARY_PATH is not needed. In an active environment, PATH will already
>> be modified. And then our LIBTBX_BUILD directory can be set to sys.prefix.
>> >> >
>> >> > So with the conda package, you would only need to activate your
>> conda environment and CCTBX should integrate with other conda packages.
>> What is the conflict with hdf5? That's something that should be fixed.
>> Thanks!
>> >> >
>> >> > --
>> >> > Billy K. Poon
>> >> > Research Scientist, Molecular Biophysics and Integrated Bioimaging
>> >> > Lawrence Berkeley National Laboratory
>> >> > 1 Cyclotron Road, M/S 33R0345
>> >> > Berkeley, CA 94720
>> >> > Tel: (510) 486-5709
>> >> > Fax: (510) 486-5909
>> >> > Web: https://phenix-online.org
>> >> >
>> >> >
>> >> > On Mon, Dec 16, 2019 at 2:53 AM Gergely Katona <gkatona at gmail.com>
>> wrote:
>> >> >>
>> >> >> Dear Billy,
>> >> >>
>> >> >> Thank you for this update and for your efforts! I found a solution
>> and
>> >> >> indeed most things already work in anaconda3. The steps I took (even
>> >> >> if these instructions will have short expiry date):
>> >> >>
>> >> >> Modified .condarc with:
>> >> >> channels:
>> >> >>   - cctbx
>> >> >>   - conda-forge
>> >> >>   - defaults
>> >> >>
>> >> >> run
>> >> >> conda conda install cctbx_dependencies python=3.6
>> >> >>
>> >> >> I expect this will work without python=3.6 in the near future.
>> >> >>
>> >> >> Then compiling cctbx with anaconda3 python went without any problem
>> >> >> when using these flags:
>> >> >> python bootstrap.py --use-conda --python3 --nproc=12
>> >> >>
>> >> >> Then I probably did the unorthodox thing and sourced these
>> directories:
>> >> >>
>> >> >> setenv LIBTBX_BUILD /home/gergely/cctbx/build
>> >> >> setenv PATH ${PATH}:/home/gergely/cctbx/build/bin
>> >> >> setenv PYTHONPATH
>> >> >>
>> /home/gergely/cctbx/modules/cctbx_project:/home/gergely/cctbx/modules:/home/gergely/cctbx/modules/cctbx_project/boost_adaptbx:/home/gergely/cctbx/build/lib:/home/gergely/cctbx/conda_base/lib/python3.6/site-packages:$PYTHONPATH
>> >> >> setenv LD_LIBRARY_PATH
>> >> >>
>> /home/gergely/cctbx/conda_base/lib:/home/gergely/cctbx/build/lib:$LD_LIBRARY_PATH
>> >> >>
>> >> >> There is probably a better way to put this into conda environment.
>> >> >> With these steps I could run one of my scripts depending on cctbx.
>> The
>> >> >> only problem I found is that hdf5 library had conflict with another
>> >> >> package in conda, but I does not find this as a showstopper.
>> >> >>
>> >> >> Best wishes,
>> >> >>
>> >> >> Gergely
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> On Fri, Dec 13, 2019 at 7:23 PM Billy Poon <BKPoon at lbl.gov> wrote:
>> >> >> >
>> >> >> > Hi Gergely,
>> >> >> >
>> >> >> > It's still a work in progress. I'm sorting out some Windows
>> issues right now. I can probably build a test package on a separate channel
>> for people that want to test it (let's say next week?). I'll provide
>> instructions, but basically, the test conda package will be in its own
>> separate channel and the dependencies will be pulled from the conda-forge
>> channel. I want most things to be working correctly on Python 2.7, 3.6,
>> 3.7, and 3.8 on all 3 platforms.
>> >> >> >
>> >> >> > Thanks!
>> >> >> >
>> >> >> > --
>> >> >> > Billy K. Poon
>> >> >> > Research Scientist, Molecular Biophysics and Integrated Bioimaging
>> >> >> > Lawrence Berkeley National Laboratory
>> >> >> > 1 Cyclotron Road, M/S 33R0345
>> >> >> > Berkeley, CA 94720
>> >> >> > Tel: (510) 486-5709
>> >> >> > Fax: (510) 486-5909
>> >> >> > Web: https://phenix-online.org
>> >> >> >
>> >> >> >
>> >> >> > On Fri, Dec 13, 2019 at 5:44 AM Gergely Katona <gkatona at gmail.com>
>> wrote:
>> >> >> >>
>> >> >> >> Dear Billy,
>> >> >> >>
>> >> >> >> This sounds very promising and exciting. I am not sure if cctbx
>> is
>> >> >> >> already functional as a conda package in anaconda3 (Linux) or
>> this is
>> >> >> >> still work in progress. My technical expertise does not allow me
>> to
>> >> >> >> tell the difference. What I tried:
>> >> >> >>
>> >> >> >> Fresh install of anaconda3. Adding - cctbx and - conda-forge to
>> >> >> >> .condarc . Installing pyside2 with conda. Running conda install
>> >> >> >> conda_dependencies .  I get a lot package version conflict, and I
>> >> >> >> cannot import cctbx or iotbx to anaconda python. Am I following
>> the
>> >> >> >> right instructions? Or it is too early to expect that cctbx
>> works when
>> >> >> >> installed through conda?
>> >> >> >>
>> >> >> >> Best wishes,
>> >> >> >>
>> >> >> >> Gergely
>> >> >> >>
>> >> >> >> On Wed, Nov 27, 2019 at 3:56 PM Billy Poon <BKPoon at lbl.gov>
>> wrote:
>> >> >> >> >
>> >> >> >> > Hi all,
>> >> >> >> >
>> >> >> >> > For a brief update, I have submitted a recipe for cctbxlite to
>> conda-forge (https://github.com/conda-forge/staged-recipes/pull/10021)
>> and support for Python 3.7 and 3.8 is being added (
>> https://github.com/cctbx/cctbx_project/pull/409). With some fixes for
>> Windows (https://github.com/cctbx/cctbx_project/pull/416), all platforms
>> (macOS, linux, and Windows) can build for Python 2.7, 3.6, 3.7, and 3.8.
>> Some additional changes will be needed to get Windows to work with Python 3
>> and for tests to pass with Boost 1.70.0. That will enable the conda-forge
>> recipe to build for all platforms and for all supported versions of Python.
>> >> >> >> >
>> >> >> >> > Currently, the conda-forge recipe will install into the conda
>> python and cctbx imports can be done without sourcing the environment
>> scripts. It looks like a lot of the environment variables being set in the
>> dispatchers can be removed since the Python files and C++ extensions are in
>> the right places. I'll update the libtbx_env file so that commands that
>> load the environment can work correctly.
>> >> >> >> >
>> >> >> >> > --
>> >> >> >> > Billy K. Poon
>> >> >> >> > Research Scientist, Molecular Biophysics and Integrated
>> Bioimaging
>> >> >> >> > Lawrence Berkeley National Laboratory
>> >> >> >> > 1 Cyclotron Road, M/S 33R0345
>> >> >> >> > Berkeley, CA 94720
>> >> >> >> > Tel: (510) 486-5709
>> >> >> >> > Fax: (510) 486-5909
>> >> >> >> > Web: https://phenix-online.org
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > On Sun, Aug 25, 2019 at 2:33 PM Tristan Croll <tic20 at cam.ac.uk>
>> wrote:
>> >> >> >> >>
>> >> >> >> >> Hi Luc,
>> >> >> >> >>
>> >> >> >> >> That sounds promising. From there, I’d need to work out how
>> to make a fully-packaged installer (basically a modified wheel file) for
>> the ChimeraX ToolShed - the aim is for the end user to not have to worry
>> about any of this. That adds a couple of complications - e.g. $LIBTBX_BUILD
>> would need to be set dynamically before first import - but doesn’t seem
>> insurmountable.
>> >> >> >> >>
>> >> >> >> >> Thanks,
>> >> >> >> >>
>> >> >> >> >> Tristan
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> Tristan Croll
>> >> >> >> >> Research Fellow
>> >> >> >> >> Cambridge Institute for Medical Research
>> >> >> >> >> University of Cambridge CB2 0XY
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> > On 25 Aug 2019, at 18:31, Luc Bourhis <
>> luc_j_bourhis at mac.com> wrote:
>> >> >> >> >> >
>> >> >> >> >> > Hi Tristan,
>> >> >> >> >> >
>> >> >> >> >> > cctbx could be built to use your ChimeraX python, now that
>> cctbx is moving to Python 3. The option —with-python is there for that with
>> the bootstrap script. The specific environment setup boil down to setting
>> two environment variable LIBTBX_BUILD and either LD_LIBRARY_PATH on Linux,
>> PATH on Win32, or DYLIB_LIBRARY_PATH on MacOS. If you work within a
>> framework such as ChimeraX, that should not be difficult to ensure those
>> two variables are set.
>> >> >> >> >> >
>> >> >> >> >> > Best wishes,
>> >> >> >> >> >
>> >> >> >> >> > Luc
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >> On 23 Aug 2019, at 19:02, Tristan Croll <tic20 at cam.ac.uk>
>> wrote:
>> >> >> >> >> >>
>> >> >> >> >> >> To add my two cents on this: probably the second-most
>> common question I've had about ISOLDE's implementation is, "why didn't you
>> use CCTBX?". The honest answer to that is, "I didn't know how."
>> >> >> >> >> >>
>> >> >> >> >> >> Still don't, really - although the current developments
>> are rather promising. The problem I've faced is that CCTBX was designed as
>> its own self-contained Python (2.7, until very recently) environment, with
>> its own interpreter and a lot of very specific environment setup. Meanwhile
>> I'm developing ISOLDE in ChimeraX, which is *also* its own self-contained
>> Python (3.7) environment. To plug one into the other in that form... well,
>> I don't think I'm a good enough programmer to really know where to start.
>> >> >> >> >> >>
>> >> >> >> >> >> The move to Conda and a more modular CCTBX architecture
>> should make a lot more possible in that direction. Pip would be even better
>> for me personally (ChimeraX can install directly from the PyPI, but doesn't
>> interact with Conda) - but I understand pretty well the substantial
>> challenge that would amount to (not least being that the PyPI imposes a
>> limit - around 100MB from memory? - on the size of an individual package).
>> >> >> >> >> >>
>> >> >> >> >> >> Best regards,
>> >> >> >> >> >>
>> >> >> >> >> >> Tristan
>> >> >> >> >> >>
>> >> >> >> >> >>> On 2019-08-23 09:28, Luc Bourhis wrote:
>> >> >> >> >> >>> Hi Graeme,
>> >> >> >> >> >>> Yes, I know. But “black" is a program doing a very
>> particular task
>> >> >> >> >> >>> (code formatting from the top of my head). Requiring to
>> use a wrapper
>> >> >> >> >> >>> for python itself is another level. But ok, I think I am
>> mellowing to
>> >> >> >> >> >>> the idea after all! Talking with people around me, and
>> extrapolating,
>> >> >> >> >> >>> I would bet that, right now, a great majority of people
>> interested by
>> >> >> >> >> >>> cctbx in pip have already used the cctbx, so they know
>> about the
>> >> >> >> >> >>> Python wrapper, and they would not be too sanguine about
>> that. My
>> >> >> >> >> >>> concern is for the future, when pip will be the first
>> time some people
>> >> >> >> >> >>> use cctbx. Big fat warning notices on PyPI page and a
>> better error
>> >> >> >> >> >>> message when cctbx fails because LIBTBX_BUILD is not set
>> would be
>> >> >> >> >> >>> needed but that could be all right.
>> >> >> >> >> >>> If we do a pip installer, we should aim at a minimal
>> install: cctbx,
>> >> >> >> >> >>> iotbx and their dependencies, and that’s it.
>> >> >> >> >> >>> Best wishes,
>> >> >> >> >> >>> Luc
>> >> >> >> >> >>>> On 23 Aug 2019, at 07:17, Graeme.Winter at Diamond.ac.uk <
>> Graeme.Winter at diamond.ac.uk> wrote:
>> >> >> >> >> >>>> Without discussing the merits of this or whether we
>> _choose_ to make the move to supporting PIP, I am certain it would be
>> _possible_ - many other packages make dispatcher scripts when you pip
>> install them e.g.
>> >> >> >> >> >>>> Silver-Surfer rescale_f2 :) $ which black; cat $(which
>> black)
>> >> >> >> >> >>>>
>> /Library/Frameworks/Python.framework/Versions/3.6/bin/black
>> >> >> >> >> >>>>
>> #!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
>> >> >> >> >> >>>> # -*- coding: utf-8 -*-
>> >> >> >> >> >>>> import re
>> >> >> >> >> >>>> import sys
>> >> >> >> >> >>>> from black import main
>> >> >> >> >> >>>> if __name__ == '__main__':
>> >> >> >> >> >>>>  sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '',
>> sys.argv[0])
>> >> >> >> >> >>>>  sys.exit(main())
>> >> >> >> >> >>>> So we _could_ work around the absence of LIBTBX_BUILD
>> etc. in the system. Whether or not we elect to do the work is a different
>> question, and it seems clear that here are very mixed opinions on this.
>> >> >> >> >> >>>> Best wishes Graeme
>> >> >> >> >> >>>> On 23 Aug 2019, at 01:21, Luc Bourhis <
>> luc_j_bourhis at mac.com<mailto:luc_j_bourhis at mac.com>> wrote:
>> >> >> >> >> >>>> Hi,
>> >> >> >> >> >>>> Even if we managed to ship our the boost dynamic
>> libraries with pip, it would still not be pip-like, as we would still need
>> our python wrappers to set LIBTBX_BUILD and LD_LIBRARY_PATH. Normal pip
>> packages work with the standard python exe. LD_LIBRARY_PATH, we could get
>> around that by changing the way we compile, using -Wl,-R, which is the
>> runtime equivalent of build time -L. That’s a significant change that would
>> need to be tested. But there is no way around setting LIBTBX_BUILD right
>> now. Leaving that to the user is horrible. Perhaps there is a way to hack
>> libtbx/env_config.py so that we can hardwire LIBTBX_BUILD in there when pip
>> installs?
>> >> >> >> >> >>>> Best wishes,
>> >> >> >> >> >>>> Luc
>> >> >> >> >> >>>> On 16 Aug 2019, at 22:47, Luc Bourhis <
>> luc_j_bourhis at mac.com<mailto:luc_j_bourhis at mac.com>> wrote:
>> >> >> >> >> >>>> Hi,
>> >> >> >> >> >>>> I did look into that many years ago, and even toyed with
>> building a pip installer. What stopped me is the exact conclusion you
>> reached too: the user would not have the pip experience he expects. You are
>> right that it is a lot of effort but is it worth it? Considering that
>> remark, I don’t think so. Now, Conda was created specifically to go beyond
>> pip pure-python-only support. Since cctbx has garnered support for Conda,
>> the best avenue imho is to go the extra length to have a package on
>> Anaconda.org<http://anaconda.org/>, and then to advertise it hard to
>> every potential user out there.
>> >> >> >> >> >>>> Best wishes,
>> >> >> >> >> >>>> Luc
>> >> >> >> >> >>>> On 16 Aug 2019, at 21:45, Aaron Brewster <
>> asbrewster at lbl.gov<mailto:asbrewster at lbl.gov>> wrote:
>> >> >> >> >> >>>> Hi, to avoid clouding Dorothee's documentation email
>> thread, which I think is a highly useful enterprise, here's some thoughts
>> about putting cctbx into pip.  Pip doesn't install non-python dependencies
>> well.  I don't think boost is available as a package on pip (at least the
>> package version we use).  wxPython4 isn't portable through pip (
>> https://wiki.wxpython.org/How%20to%20install%20wxPython#Installing_wxPython-Phoenix_using_pip).
>> MPI libraries are system dependent.  If cctbx were a pure python package,
>> pip would be fine, but cctbx is not.
>> >> >> >> >> >>>> All that said, we could build a manylinux1 version of
>> cctbx and upload it to PyPi (I'm just learning about this).  For a pip
>> package to be portable (which is a requirement for cctbx), it needs to
>> conform to PEP513, the manylinux1 standard (
>> https://www.python.org/dev/peps/pep-0513/).  For example, numpy is built
>> according to this standard (see https://pypi.org/project/numpy/#files,
>> where you'll see the manylinux1 wheel).  Note, the manylinux1 standard is
>> built with Centos 5.11 which we no longer support.
>> >> >> >> >> >>>> There is also a manylinux2010 standard, which is based
>> on Centos 6 (https://www.python.org/dev/peps/pep-0571/).  This is likely
>> a more attainable target (note though by default C++11 is not supported on
>> Centos 6).
>> >> >> >> >> >>>> If we built a manylinuxX version of cctbx and uploaded
>> it to PyPi, the user would need all the non-python dependencies.  There's
>> no way to specify these in pip.  For example, cctbx requires boost 1.63 or
>> better.  The user will need to have it in a place their python can find it,
>> or we could package it ourselves and supply it, similar to how the pip h5py
>> package now comes with an hd5f library, or how the pip numpy package
>> includes an openblas library.  We'd have to do the same for any packages we
>> depend on that aren't on pip using the manylinux standards, such as
>> wxPython4.
>> >> >> >> >> >>>> Further, we need to think about how dials and other
>> cctbx-based packages interact.  If pip install cctbx is set up, how does
>> pip install dials work, such that any dials shared libraries can find the
>> cctbx libraries?  Can shared libraries from one pip package link against
>> libraries in another pip package?  Would each package need to supply its
>> own boost?  Possibly this is well understood in the pip field, but not by
>> me :)
>> >> >> >> >> >>>> Finally, there's the option of providing a source pip
>> package.  This would require the full compiler toolchain for any given
>> platform (macOS, linux, windows).  These are likely available for
>> developers, but not for general users.
>> >> >> >> >> >>>> Anyway, these are some of the obstacles.  Not saying it
>> isn't possible, it's just a lot of effort.
>> >> >> >> >> >>>> Thanks,
>> >> >> >> >> >>>> -Aaron
>> >> >> >> >> >>>> _______________________________________________
>> >> >> >> >> >>>> cctbxbb mailing list
>> >> >> >> >> >>>> cctbxbb at phenix-online.org<mailto:
>> cctbxbb at phenix-online.org>
>> >> >> >> >> >>>> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >> >>>> _______________________________________________
>> >> >> >> >> >>>> cctbxbb mailing list
>> >> >> >> >> >>>> cctbxbb at phenix-online.org<mailto:
>> cctbxbb at phenix-online.org>
>> >> >> >> >> >>>> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >> >>>> _______________________________________________
>> >> >> >> >> >>>> cctbxbb mailing list
>> >> >> >> >> >>>> cctbxbb at phenix-online.org<mailto:
>> cctbxbb at phenix-online.org>
>> >> >> >> >> >>>> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >> >>>> --
>> >> >> >> >> >>>> This e-mail and any attachments may contain
>> confidential, copyright and or privileged material, and are for the use of
>> the intended addressee only. If you are not the intended addressee or an
>> authorised recipient of the addressee please notify us of receipt by
>> returning the e-mail and do not use, copy, retain, distribute or disclose
>> the information in or attached to the e-mail.
>> >> >> >> >> >>>> Any opinions expressed within this e-mail are those of
>> the individual and not necessarily of Diamond Light Source Ltd.
>> >> >> >> >> >>>> Diamond Light Source Ltd. cannot guarantee that this
>> e-mail or any attachments are free from viruses and we cannot accept
>> liability for any damage which you may sustain as a result of software
>> viruses which may be transmitted in or with the message.
>> >> >> >> >> >>>> Diamond Light Source Limited (company no. 4375679).
>> Registered in England and Wales with its registered office at Diamond
>> House, Harwell Science and Innovation Campus, Didcot, Oxfordshire, OX11
>> 0DE, United Kingdom
>> >> >> >> >> >>>> _______________________________________________
>> >> >> >> >> >>>> cctbxbb mailing list
>> >> >> >> >> >>>> cctbxbb at phenix-online.org
>> >> >> >> >> >>>> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >> >>> _______________________________________________
>> >> >> >> >> >>> cctbxbb mailing list
>> >> >> >> >> >>> cctbxbb at phenix-online.org
>> >> >> >> >> >>> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >> >>
>> >> >> >> >> >>
>> >> >> >> >> >> _______________________________________________
>> >> >> >> >> >> cctbxbb mailing list
>> >> >> >> >> >> cctbxbb at phenix-online.org
>> >> >> >> >> >> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> > _______________________________________________
>> >> >> >> >> > cctbxbb mailing list
>> >> >> >> >> > cctbxbb at phenix-online.org
>> >> >> >> >> > http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> _______________________________________________
>> >> >> >> >> cctbxbb mailing list
>> >> >> >> >> cctbxbb at phenix-online.org
>> >> >> >> >> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >> >
>> >> >> >> > _______________________________________________
>> >> >> >> > cctbxbb mailing list
>> >> >> >> > cctbxbb at phenix-online.org
>> >> >> >> > http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> --
>> >> >> >> Gergely Katona, PhD
>> >> >> >> Associate Professor
>> >> >> >> Department of Chemistry and Molecular Biology, University of
>> Gothenburg
>> >> >> >> Box 462, 40530 Göteborg, Sweden
>> >> >> >> Tel: +46-31-786-3959 / M: +46-70-912-3309 / Fax: +46-31-786-3910
>> >> >> >> Web: http://katonalab.eu, Email: gergely.katona at gu.se
>> >> >> >>
>> >> >> >> _______________________________________________
>> >> >> >> cctbxbb mailing list
>> >> >> >> cctbxbb at phenix-online.org
>> >> >> >> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >> >
>> >> >> > _______________________________________________
>> >> >> > cctbxbb mailing list
>> >> >> > cctbxbb at phenix-online.org
>> >> >> > http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Gergely Katona, PhD
>> >> >> Associate Professor
>> >> >> Department of Chemistry and Molecular Biology, University of
>> Gothenburg
>> >> >> Box 462, 40530 Göteborg, Sweden
>> >> >> Tel: +46-31-786-3959 / M: +46-70-912-3309 / Fax: +46-31-786-3910
>> >> >> Web: http://katonalab.eu, Email: gergely.katona at gu.se
>> >> >>
>> >> >> _______________________________________________
>> >> >> cctbxbb mailing list
>> >> >> cctbxbb at phenix-online.org
>> >> >> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >> >
>> >> > _______________________________________________
>> >> > cctbxbb mailing list
>> >> > cctbxbb at phenix-online.org
>> >> > http://phenix-online.org/mailman/listinfo/cctbxbb
>> >>
>> >>
>> >>
>> >> --
>> >> Gergely Katona, PhD
>> >> Associate Professor
>> >> Department of Chemistry and Molecular Biology, University of Gothenburg
>> >> Box 462, 40530 Göteborg, Sweden
>> >> Tel: +46-31-786-3959 / M: +46-70-912-3309 / Fax: +46-31-786-3910
>> >> Web: http://katonalab.eu, Email: gergely.katona at gu.se
>> >>
>> >> _______________________________________________
>> >> cctbxbb mailing list
>> >> cctbxbb at phenix-online.org
>> >> http://phenix-online.org/mailman/listinfo/cctbxbb
>> >
>> > _______________________________________________
>> > cctbxbb mailing list
>> > cctbxbb at phenix-online.org
>> > http://phenix-online.org/mailman/listinfo/cctbxbb
>>
>>
>>
>> --
>> Gergely Katona, PhD
>> Associate Professor
>> Department of Chemistry and Molecular Biology, University of Gothenburg
>> Box 462, 40530 Göteborg, Sweden
>> Tel: +46-31-786-3959 / M: +46-70-912-3309 / Fax: +46-31-786-3910
>> Web: http://katonalab.eu, Email: gergely.katona at gu.se
>>
>> _______________________________________________
>> cctbxbb mailing list
>> cctbxbb at phenix-online.org
>> http://phenix-online.org/mailman/listinfo/cctbxbb
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://phenix-online.org/pipermail/cctbxbb/attachments/20191220/cf5f9941/attachment.htm>


More information about the cctbxbb mailing list