musrfit/doc/html/_sources/setup-standard.txt
Andreas Suter 86d03d7132 Docu updated
Removed the automake tool chain description (hopefully) everywhere.
2019-03-08 13:07:47 +01:00

1395 lines
61 KiB
Plaintext

:tocdepth: 4
.. include:: <isogrk1.txt>
.. index:: setup
.. _musrfit-setup:
Setting up ``musrfit`` on Different Platforms
=============================================
.. index:: supported-operating-systems
.. _supported-operating-systems:
Supported Operating Systems and Software Requirements
-----------------------------------------------------
This page is intended to demonstrate for the interested user which steps are necessary to set up the `free software <http://www.gnu.org/philosophy/free-sw.html>`_
|mgr|\SR data analysis framework :ref:`musrfit <user-manual>`. While the preferred way is to run the software on **GNU/Linux** or **MacOS X/macOS**, with some restrictions
it can also be set up under **MS Windows** (cygwin, only for the *very brave*, probably it is easier for most MS Windows users to install a Virtual Machine running Linux).
.. note::
In case musrfit should be installed according to the description found on this page, the user is strongly encouraged to *read completely* each section dealing with the
present installation step *before* starting the installation process!
Apart from `GCC, the GNU Compiler Collection <http://gcc.gnu.org/>`_ (``gcc``, ``g++``), the build tool `cmake <https://cmake.org/>`_ is needed. Furthermore the helper
tool `pkg-config <http://pkg-config.freedesktop.org/wiki/>`_ needs to be in place, and musrfit requires the installation of a few open-source libraries and programs including
their header packages:
.. index:: boost-c++
**boost C++ libraries**
The powerful Spirit parser framework used by musrfit is included in that collection of libraries. *Required version ≥ 1.33* (see `boost C++ libraries <http://www.boost.org/>`_).
.. index:: gnu-gsl
**GNU Scientific Library**
A numerical ``C`` and ``C++`` library which provides efficient implementations of various mathematical routines. *Required version ≥ 1.9* (see `GNU Scientific Library <http://www.gnu.org/software/gsl/>`_).
.. index:: fftw
**FFTW**
A ``C`` implementation for the fast computation of discrete Fourier transforms. *Required version ≥ 3.1* (see `FFTW <http://www.fftw.org/>`_).
.. index:: root-cern
**ROOT**
A C++ data analysis framework developed at `CERN <http://www.cern.ch/>`_. *Required version ≥ 5.22* (see `ROOT <http://root.cern.ch/>`_).
.. index:: libxml2
**libxml2**
The ``XML C`` parser and toolkit of `gnome <http://www.gnome.org/>`_. *Required version ≥ 2.0* (see `libxml2 <http://xmlsoft.org/>`_).
Additionally, *only* if ``musrfit`` should support reading of data files in the `NeXus` format the following libraries are needed:
.. index:: hdf4
**HDF4**
A library and multi-object file format for storing and managing data (see `HDF4 <http://www.hdfgroup.org/products/hdf4/>`_). ``HDF4`` is "outdated" and its support will soon be dropped.
.. index:: hdf5
**HDF5**
A data model, library, and file format for storing and managing data (see `HDF5 <https://portal.hdfgroup.org/display/support>`_).
.. index:: minixml
**minixml**
A small ``XML`` library that can be used to read and write ``XML`` and ``XML``-like data files. *Required version ≥ 2.2* (see `minixml <http://www.minixml.org/>`_).
.. index:: nexus
**NeXus**
A common data format for neutron, x-ray, and muon science. *Required version ≥ 4.4* (see `NeXus <http://www.nexusformat.org/>`_).
If *optionally* the editor and graphical user interface ``musrgui`` / ``musredit`` is going to be installed there is one further requirement:
.. index:: qt
**Qt**
A cross-platform application and user interface framework. *Required version ≥ 4.6* (musredit) (see `Qt <http://qt.io/>`_).
Each of the following sections focusing on the installation of ``musrfit`` on the different operating systems will also give a brief introduction on the installation of the requirements before the actual musrfit installation is described.
.. index:: os-restrictions
OS Restrictions
---------------
Before the installation procedure will be described, please note the following restrictions:
**GNU/Linux**
No serious problems are currently known. Tested distributions: `RHEL <https://www.redhat.com/de/technologies/linux-platforms/enterprise-linux>`_, `Fedora <https://getfedora.org/>`_,
`Debian <https://www.debian.org/>`_, `Ubuntu <https://www.ubuntu.com/>`_, `Mint <https://linuxmint.com/>`_, `openSUSE <https://en.opensuse.org/Main_Page>`_,
`manjaro <https://de.manjaro.org/>`_, and `antergos <https://antergos.com/>`_.
**Mac OS X/macOS**
No serious problems are currently known for macOS ≥ 10.6.
**MS Windows**
Native *MS Windows* support is currently not available. Potential ways to get ``musrfit`` running are:
* via installation of Linux via the Microsoft App store for Windows 10.
* via installation of the virtual machine on which you install Linux (probably the easiest for most Windows users).
* via `cygwin`_.
.. _cygwin: https://www.cygwin.com/
.. index:: gnu-linux
.. _gnu-linux:
GNU/Linux
---------
.. index:: gnu-linux-requirements
.. _gnu-linux-requirements:
Requirements
++++++++++++
Everything but ROOT and NeXus
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Depending on the GNU/Linux distribution chosen, the above mentioned software -- except ``ROOT/CERN`` and ``NeXus`` -- should be available from
the distributor and could be easily installed in the form of binary packages. If done in this way there should be taken care of installing *both*,
the libraries and the header (dev, devel) files.
On a `Red Hat Linux <https://www.redhat.com/en>`_ (or other RPM-package base Linux distributions) system the following command executed as *superuser*
from the shell will do the trick (never type the '$' it is the shell prompt of your system):
For **Qt4**:
.. code-block:: bash
$ yum install git cmake boost-devel gsl-devel fftw-devel libxml2-devel qt-devel qtwebkit-devel
For **Qt5**:
.. code-block:: bash
$ yum install epel-release
$ yum install git cmake boost-devel gsl-devel fftw-devel libxml2-devel qt5-qtbase-devel qt5-qtsvg-devel qt5-qtwebkit-devel
Depending on your distribution **Qt4** is still the default but is likely to be replaced by **Qt5** in the very near future.
When dealing with a distribution that uses the dpkg/apt package manager like `Debian <https://www.debian.org/>`_ or `Ubuntu <https://www.ubuntu.com/>`_
the installation would look like:
For **Qt4**:
.. code-block:: bash
$ apt-get install git cmake libboost-dev libgsl-dev libfftw3-dev libxml2-dev libqt4-dev libqtwebkit-dev
For **Qt5**:
.. code-block:: bash
$ apt-get install git cmake libboost-dev libgsl-dev libfftw3-dev libxml2-dev qt5-default qtbase5-dev libqt5svg5-dev libqt5webkit5-dev
Everyone should know best himself which is the way to install distribution software on the chosen distribution.
In case the distribution does not include the required software it has to be compiled from the source files. This means either to download
the source code from the corresponding website, or to clone the git repo. If you need to follow this line, please check the install details of the corresponding package.
For any further information on the standard installation of software, please refer to the web search engine of choice and ask for "install software on linux"...
.. index:: nexus-build-linux
Installation of NeXus requirements (optional)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*Only* if ``musrfit`` should support reading/writing data files in the ``NeXus`` format the further required
software has to be set up. The required libraries and header files could either be available through the user's
GNU/Linux distribution or if this is not the case, the packages can be installed from the source code. The necessary
packages to build ``NeXus`` are ``MXML``, (``HDF4``), and ``HDF5``. This means, for a rpm-package based distro try something like:
.. code-block:: bash
$ yum install mxml-devel hdf-devel hdf5-devel
and on a deb-package based distro try something like:
.. code-block:: bash
$ apt-get install libmxml-dev libhdf4-dev libhdf5-dev
.. note::
``HDF4`` support within ``NeXus`` will be dropped by ``musrfit`` in the near future. If you *not* urgently need
to read old ``ISIS NeXus`` files, you safely can drop it.
**Only NeXus Version ≥ 4.4 is support!**
Even though there might exist binary packages for the ``NeXus`` library, it is best to build and
install it directly from the source code which can be found `here <https://github.com/nexusformat/code>`_.
A brief instruction how to get ``NeXus`` compiled from source (lines starting with '#' are comments *only*):
.. code-block:: bash
$ cd Downloads
$ # create a directory for the NeXus source code
$ mkdir nexus
$ cd nexus
$ # get the source code from the master repository
$ git clone https://github.com/nexusformat/code.git
$ # next we will build NeXus out-of-source
$ mkdir build
$ cd build
$ # The next line only if HDF4 support is needed
$ cmake -DENABLE_HDF5=1 -DENABLE_HDF4=1 -DENABLE_MXML=1 ../code
$ # The next line if HDF4 support is NOT needed
$ cmake -DENABLE_HDF5=1 -DENABLE_MXML=1 ../code
$ cmake --build ./ --clean-first
$ # make install needs either to be carried out as root or sudo depending on your linux flavour.
$ sudo make install
.. index:: root-build-linux
ROOT
^^^^
The ROOT framework may or may not be part of the GNU/Linux distribution. Some distributions are packing ROOT in a
manner incompatible with the way it is needed by ``musrfit``, though the situation is improving. If you are
experienced enough you can try the packed ROOT version. Often ROOT is split in many sub-packages. Install the
necessary ones (guess from the description below). **One Warning:** if the ROOT packages are upgraded after a
yum update (apt-get update; apt-get upgrade) you might need to recompile ``musrfit``. *If you are not sure about
all this: install ROOT from source*. Before installing ROOT from source you will need to install some additional header packages.
For RPM based systems (RedHat, Fedora, *etc*) this will likely to be ``libX11-devel``, ``libXft-devel``, ``libXpm-devel``, and ``libXext-devel``:
.. code-block:: bash
$ yum install libX11-devel libXft-devel libXpm-devel libXext-devel
For a dpkg/apt based system (Debian, Ubuntu, *etc*) this will likely to be ``libx11-dev``, ``libxft-dev``, ``libxpm-dev``, and ``libxext-dev``:
.. code-block:: bash
$ apt-get install libx11-dev libxft-dev libxpm-dev libxext-dev
Also make sure that you have installed all required packages listed under :ref:`Required Software <gnu-linux-requirements>` (*e.g.* fftw, gsl, *etc*).
In the following it is assumed that ``ROOT`` shall be installed under ``$HOME/Apps``. If you want to install
it somewhere else, just systematically replace the related terms of the following description. For the
following list of commands the '$' will be given, the command prompt. Do not enter it! Also some comments will
be added starting with a '#' which can be omitted. They are only there to explain what is going on.
.. code-block:: bash
$ cd $HOME
$ # creat the Apps directory if not already present
$ mkdir Apps
$ cd Apps
$ git clone http://github.com/root-project/root.git
$ cd root
$ git tag -l
$ # git tag -l will list all available tags. In the next command choose the tag v6-16-00
$ # or the latest official release number
$ git checkout -b v6-16-00 v6-16-00
$ # now ROOT is ready to be configured. Below you will find the minimal ROOT configuration needed.
$ # since we are using cmake build now, first we will need to create the build directory.
$ mkdir root_build
$ cd root_build
$ cmake ../ -Dgminimal=ON -Dasimage=ON -Dmathmore=On -Dminuit2=ON -Dxml=ON -DCMAKE_INSTALL_PREFIX=../root_exec
$ # next will be the make called via cmake. If running on a multicore CPU you can speed up tremendously by
$ # calling it with the option -j <number>, where <number> is the number of threads which you want to give,
$ # e.g. cmake --build ./ --clean-first -- -j8
$ cmake --build ./ --clean-first
$ # as a last step of the ROOT build process we need to install it
$ make install
What is still missing is that the system should be told where to find the ``ROOT`` installation, therefore the following is suggested:
* As superuser create a file ``/etc/ld.so.conf.d/cern-root.conf`` where the path to the lib directory of ``ROOT`` is
added and call ``/sbin/ldconfig`` afterwards. In the example mentioned above one way of doing this is
(``<home>`` has to be the path to your home, *e.g.* ``/home/luke_skywalker``):
.. code-block:: bash
$ echo "<home>/Apps/root/root_exec/lib" >> /etc/ld.so.conf.d/cern-root.conf
$ /sbin/ldconfig
* Additionally, as normal user one should append the following lines to the ``~/.bashrc`` and/or ``~/.bash_profile``
(``~./profile`` on Debian like systems, and then either restart the shell or call the same commands once more from
the shell) in order to change some path-setting environment variables:
.. code-block:: bash
$ export ROOTSYS=$HOME/Apps/root/root_exec
$ export PATH=$ROOTSYS/bin:$PATH
If an update of ROOT is needed, simple do the following:
.. code-block:: bash
$ cd $HOME/Apps/root
$ git pull
$ cd root_build
$ cmake --build ./ --clean-first
.. index:: musrfit-build-linux
musrfit
+++++++
When all required software has been set up you can proceed with the ``musrfit`` installatio. First, the most
recent source code should be downloaded. The preferred way of doing so is to clone the ``musrfit`` repository via git.
Assuming the code should be located in ``$HOME/Apps`` this is achieved most easily calling from the terminal
.. code-block:: bash
$ cd $HOME/Apps
$ git clone https://bitbucket.org/muonspin/musrfit.git
$ cd musrfit
or
.. code-block:: bash
$ cd $HOME/Apps
$ git clone git://gitlab.psi.ch/nemu/musrfit.git
$ cd musrfit
.. note::
after cloning the ``musrfit`` repo you will automatically be on the
``root6`` branch. If you want to get legacy ROOT 5.34.xx support, you
will needed to switch branches first.
**Update:** If a local repository clone is already present (it needs to be newer than Dec. 2016), one can update it using:
.. code-block:: bash
$ cd $HOME/Apps/musrfit
$ git pull
$ cd build
$ xargs rm < install_manifest.txt
$ cmake --build ./ --clean-first
$ make install
.. _musrfit at bitbucket: https://bitbucket.org/muonspin/musrfit/downloads
As an alternative (if git is not available), the source code can also be downloaded from the following web-page: `musrfit at bitbucket`_
.. index:: musrfit-build-cmake-linux
musrfit build with cmake
^^^^^^^^^^^^^^^^^^^^^^^^
Currently the following configuration switches for ``musrfit`` are available:
**-DCMAKE_INSTALL_PREFIX=<prefix-path>**
Specify the installation prefix, *i.e.* the place where ``musrfit`` shall be installed, *e.g.* ``$ROOTSYS`` if already defined (by default: ``/usr/local``).
**-Dnexus=<value>**
enable/disable the support of ``NeXus`` data files (requires the ``HDF4``, ``HDF5`` and ``NeXus`` libraries to be installed).
<value>=1 enables ``NeXus``, <value>=0 disables ``NeXus``. The default setting, *i.e.* the switch is not provided is ``NeXus`` support is disabled.
**-DASlibs=<value>**
enable/disable the ``ASlibs``. <value>=1 enables the ``ASlibs``, <value>=0 disables the ``ASlibs``. The default setting, *i.e.* the
switch is not provided is ``ASlibs`` support is disabled. For details see Documentation of :ref:`user libs <user-libs>`.
**-DBMWlibs=<value>**
enable/disable the ``BMWlibs``. <value>=1 enables the ``BMWlibs``, <value>=0 disables the ``BMWlibs``. The default setting, *i.e.* the
switch is not provided is ``BMWlibs`` support is disabled. For details see Documentation of :ref:`user libs <user-libs>`.
**-DBNMRlibs=<value>**
enable/disable the ``BNMRlibs``. <value>=1 enables the ``BNMRlibs``, <value>=0 disables the ``BNMRlibs``. The default setting,
*i.e.* the switch is not provided is ``BNMRlibs`` support is disabled.
**-Dqt_based_tools=<value>**
Will try to get ``musredit``, ``musrWiz``, ``musrStep``, and ``mupp`` installed, if ``Qt`` is found.
By default this is enabled. Again <value>=0 means disabled, <value>=1 enabled.
**-Dqt_version=<value>**
Allows to specify which ``Qt`` version shall be tried. <value> can take the values: ``AUTO, 3, 4, 5``.
If the value is set to ``AUTO``, this highest installed version is chosen, otherwise the specified version is used.
**-Dtry_OpenMP=<value>**
Will check if ``OpenMP`` support is possible, and if yes use it. The default is enabled
Normally it should not be necessary to make use of any of the options except for specifying the installation path with ``-DCMAKE_INSTALL_PREFIX``.
``musrfit`` build with ``cmake`` takes the ``out-of-source`` approach. Therefore a typical configuration / make / install process including
``NeXus`` support would look like
.. code-block:: bash
$ cd $HOME/Apps/musrfit
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -Dnexus=1
# below it is assumed that multiple cores are present, hence the -j8 option
$ cmake --build ./ --clean-first -- -j8
$ make install
$ /sbin/ldconfig # (as superuser)
.. index:: musrfit-post-install-linux
musrfit last step of the installation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In order to finish the installation of musrfit two more things should be done:
* Define the *MUSRFITPATH* environment variable containing the path to the ``musrfit`` executables and ``XML`` files.
*E.g.* if the location of the example above is used append the following line to the ``~/.bashrc`` and
``~/.bash_profile`` (and then either restart the shell, source the file, or call the same commands once more from the shell):
.. code-block:: bash
export MUSRFITPATH=$ROOTSYS/bin
* Adjust the paths where ``musrfit`` will search for data files in the installed ``musrfit_startup.xml``. For
detailed information on this XML file refer to the :ref:`manual <musrfit-startup>`.
.. index:: musredit-install-linux
musredit
++++++++
In the latest version of ``musrfit`` the configure script tries to determine automatically the highest available ``Qt`` version.
In case this is found, the editor ``musredit`` is built already together with ``musrfit``.
To install this editor separately, *i.e.* by "hand" do
.. code-block:: bash
$ cd $HOME/Apps/musrfit/src/musredit_qt5
$ # for some distributions you will need qmake-qt5 for the next command
$ qmake musredit.pro
If everything went fine, ``musredit`` can be compiled and installed:
.. code-block:: bash
$ make
$ make install
In case one does not like the executable ``musredit`` to be copied to the default installation directory ``$ROOTSYS/bin``
the last *make install* can be skipped and the executable can be copied somewhere else instead.
musrgui (obsolate)
++++++++++++++++++
If ``Qt4.6`` or higher is not available but ``Qt3`` is set up ``musrgui`` can be installed. For this please
follow the instructions for the ``musredit`` installation where simply every ``musredit`` occurrence has to
be replaced by ``musrgui``. If there are problems during the ``qmake`` step, *e.g.*
"uic: File generated with too old version of Qt Designer", this most probably means the ``Qt4`` version of ``qmake``
is being used. In order to use the ``Qt3`` version it should be enough to specify the full path to its location
when calling it. Within the most GNU/Linux distributions this location will be something like ``/usr/lib/qt-3.3/bin/qmake``.
Check the installation
++++++++++++++++++++++
In order to perform a quick test for finding out if the installation has been completed successfully, a few msr files
together with the corresponding data files can be found in the ``musrfit`` source tree at ``doc/examples/``.
If ``musrgui`` has been installed, just open one of the ``test-*.msr`` files in the editor and test the ``musrfit``
functionalities. Otherwise, if only the terminal should be used, as an initial test for instance the following could be done:
.. code-block:: bash
$ cd $HOME/Apps/musrfit/doc/examples
$ musrview test-histo-ROOT-NPP.msr
MS Windows
----------
.. note::
The description here is only for the very brave ones. It hasn't been tested for quite a while and therefore gives you
rather a flavour of what needs to be done rather than a real instruction how to setup ``musrfit``. If you just need
``musrfit`` to work on a MS Windows platform, it is recommended to install it via a linux virtual machine!
.. note::
For adventurous guys using Windows 10, there is the possibility to activate the built in Ubuntu bash-shell. It allows
to install ``musrfit`` as described in the Linux section.
.. note::
One more advice: Please never try to install either ``ROOT`` or ``musrfit`` from or to a directory containing spaces
in the absolute path or in case you do, do not wonder if some errors occur! msr files, however, might be saved in such
directories like ``...\My Documents\...``
Under Windows a native installation is not supported but there is the possibility to run musrfit through `cygwin`_
which has the great advantage that one gains additionally various nice UNIX tools also for other purposes.
Please also be aware of the fact that the X server which is going to be installed with ``Cygwin`` has to be started
(*e.g.* by selecting it from the "Programs" folder) before any graphical application (``musrview``, ``musrgui``, etc.) is started.
Requirements
++++++++++++
.. index:: cygwin
Setting up Cygwin
^^^^^^^^^^^^^^^^^
For the start go to the Cygwin website, download the setup file and use it to install Cygwin 1.7 or newer. During the installation
process you will be asked where you want to install Cygwin and normally the default choice should just be fine. At some point you
will be asked which packages should be installed. Make sure that you choose at least the following (or packages with revisions close
to the following) in order to fulfill the ``musrfit`` requirements and be able to work with this base system:
::
a2ps, alternatives, autoconf, automake, base-cygwin, base-files, base-passwd bash, bash-completion,
bc, binutils, bison, boost, boost-devel, bzip2, cmake, colorgcc, coreutils, curl, cygutils, cygwin,
editrights, fftw3, findutils, flex, font-adobe-dpi100, font-adobe-dpi75, font-alias,
font-bitstream-dpi100, font-bitstream-dpi75, font-encodings, font-ibm-type1, font-sun-misc, font-util,
font-xfree86-type1, fontconfig, freeglut, gawk, gcc-tools-autoconf, gcc-tools-automake, gcc4,
gcc4-core, gcc4-fortran, gcc4-g++, gccmakedep, gd, gettext, ghostscript, ghostscript-fonts-std,
giflib, gmp, grep, groff, gsl, gsl-apps, gsl-devel, gv, gzip, inputproto, jasper, jpeg, lapack,
less, libboost, libbz2_1, libcharset1, libcurl4, libfftw3-devel, libfftw3_3, libgcc1, libgd-devel,
libgif-devel, libGL-devel, libGL1, libGLU-devel, libGLU1, libglut-devel, libglut3, libgmp-devel,
libgmp3, libgomp1, libICE-devel, libICE6, libjpeg-devel, libjpeg62, liblapack-devel, libmpfr-devel,
libmpfr1, libncurses-devel, libncurses9, libOSMesa-devel, libOSMesa7, libpng, libpng14, libpng14-devel,
libreadline6, libSM-devel, libSM6, libssh2_1, libstdc++6, libstdc++6-devel, libtiff-devel, libtiff5,
libtool, libX11-devel, libX11_6, libXau-devel, libXau6, libXaw7, libxcb-devel, libxcb-xlib-devel,
libXcursor-devel, libXcursor1, libXdmcp-devel, libXdmcp6, libXext-devel, libXext6, libXfixes-devel,
libXfixes3, libXfont-devel, libXfont1, libXft-devel, libXft2, libXi-devel, libXi6, libxkbfile1,
libxml2, libxml2-devel, libXmu-devel, libXmu6, libXpm-devel, libXpm4, libXrender-devel, libXrender1,
libXt-devel, libXt6, login, m4, make, makedepend, man, mpfr, nano, opengl, openssh, openssl, pdftk,
perl, ping, pkg-config, psutils, python, qt3, qt3-bin, qt3-devel, readline, rebase, rgb, rsync, run,
screen, sed, subversion, tar, tcltk, terminfo, unzip, util-linux, vim, w32api, which,
X-start-menu-icons, xauth, xextproto, xfontsel, xinit, xkbcomp, xkeyboard-config, xkill, xlogo,
xlsfonts, xorg-cf-files, xorg-scripts, xorg-server, xproto, xrdb, xrefresh, xset, xterm, zip, zlib,
zlib-devel, zlib0, libQt3Support4-devel, libQtAssistantClient4-devel, libQtCore4-devel,
libQtDBus4-devel, libQtDesigner4-devel, libQtGui4-devel, libQtHelp4-devel, libQtNetwork4-devel,
libQtOpenGL4-devel, libQtScript4-devel, libQtScriptTools4-devel, libQtSql4-devel, libQtSvg4-devel,
libQtTest4-devel, libQtWebKit4-devel, libQtXml4-devel, libQtXmlPatterns4-devel
After these installations already most of the required software is present and the Cygwin shell can be started now for the further steps!
Inside the shell the POSIX naming convention applies, therefore, paths will be given with separating "/" instead of "\" in DOS. The file
structure accessible through this shell can also be accessed through the Windows Explorer — just go to the directory which you specified
as "cygwin root" during the installation: this is the equivalent to "/" in the shell. By default, the different hard drives or network shares
like ``C:\`` can be found at ``/cygdrive/c/`` in the shell — the cygdrive prefix can in principle also be changed but for now we stick to the default.
Since later on the boost header files should be used and in the standard Cygwin installation these are found at a version specific location,
the later handling will be easier if a symbolic link to these files is created now in the terminal (in case it had not been present before):
.. code-block:: bash
$ ln -sf /usr/include/boost-x_yy_z/boost /usr/include/boost
where ``x_yy_z`` has to be substituted by the correct version number, *e.g.* ``1_33_1``.
Everything but ROOT and NeXus
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. index:: nexus-build-windows
Installation of NeXus requirements (optional)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Only if ``musrfit`` should support reading data files in the ``NeXus`` format the further required software has
to be set up. Under ``Cygwin`` of all the required libraries only ``HDF5`` is available. The packages ``hdf5`` and
``libhdf5-devel`` can be installed through the ``Cygwin`` setup. One should also make sure that ``bison``, ``flex``
and a package containing ``/usr/lib/librpc.a`` (*e.g.* ``sunrpc = 4.0-3``, but *not* ``sunrpc = 4.0-4``) are installed.
All other libraries have to be built from the sources. The following lines will track the installation of ``JPEG 6b``,
``MXML 2.9``, ``HDF 4.2.7-patch1``, and ``NeXus 4.3.2``. The version numbers and source-code locations might of
course change with time but should be easily adjustable.
*Only* ``NeXus`` version ≥ 4.4 is support!
.. code-block:: bash
$ cd
$ mkdir nexus
$ cd nexus
$ curl http://www.hdfgroup.org/ftp/lib-external/jpeg/src/jpegsrc.v6b.tar.gz -G | tar xz
$ cd jpeg-6b
$ ./configure --prefix=/usr/local --enable-static
$ make
$ make install
$ cd ..
$ curl www.msweet.org/files/project3/mxml-2.9.tar.gz -G | tar xz
$ cd mxml-2.9
$ ./configure --prefix=/usr/local --enable-static
$ make
$ make install
$ cd ..
$ curl http://www.hdfgroup.org/ftp/HDF/HDF_Current/src/hdf-4.2.7-patch1.tar.gz -G | tar xz
$ cd hdf-4.2.7-patch1
$ ./configure --prefix=/usr/local --enable-static --disable-fortran --with-jpeg=/usr/local
$ make
$ make install
$ cd ..
$ # create a directory for the NeXus source code
$ mkdir nexus
$ cd nexus
$ # get the source code from the master repository
$ git clone https://github.com/nexusformat/code.git
$ # next we will build NeXus out-of-source
$ mkdir build
$ cd build
$ cmake -DENABLE_HDF5=1 -DENABLE_HDF4=1 -DENABLE_MXML=1 ../code
$ make
$ make install
.. index:: root-build-windows
ROOT
^^^^
In order to install the ``ROOT`` system, there are two possibilities:
* Download the precompiled Cygwin GCC 4.3 (or newer) package of the most recent ``ROOT`` version
from the `web page`_ and unpack it in a ``Cygwin`` shell
(in order to get the line endings correctly) at the final location. Suppose the package has been
downloaded to ``C:\`` and the ``ROOT`` tree should be in ``C:\root``, this is achieved by:
.. _web page: https://root.cern.ch/downloading-root
.. code-block:: bash
$ cd /cygdrive/c
$ tar xzf root_v5.xx.yy.win32gcc-gcc-4.3.tar.gz
* If due to some reason there was no precompiled Cygwin GCC 4.3 package available or ``ROOT`` should
be built from source, one has to visit the `web page`_,
download the 'complete source tree for all systems' and save it for instance in ``C:\``.
Then go to the Cygwin shell and unpack this source tree, configure it (here using the minimal set of options)
and compile it as follows right below:
.. code-block:: bash
$ cd /cygdrive/c
$ tar xzf root_v5.xx.yy.source.tar.gz
$ cd root
$ ./configure win32gcc --gminimal --enable-asimage --enable-mathmore --enable-minuit2 --enable-xml
$ make
* In order to finalize the ``ROOT`` installation and to prepare already the installation of ``musrfit`` and
``musredit`` this is a good time for setting necessary environment variables for the use in Cygwin. For
accomplishing that put the following lines at the end of the ``/home/Username/.bashrc`` (``C:\cygwin\home\Username\.bashrc``
for the user ``Username`` and the ``cygwin root`` at ``C:\cygwin``):
.. code-block:: bash
export DISPLAY=:0.0
export QTDIR=/usr/lib/qt4
export ROOTSYS=/cygdrive/c/root
export PATH=$ROOTSYS/bin:$QTDIR/bin:/usr/i686-pc-cygwin/bin:$PATH
export MUSRFITPATH=$ROOTSYS/bin
Afterwards close the Cygwin shell and reopen it again for the installation of ``musrfit``.
.. index:: musrfit-build-windows
musrfit
+++++++
First, the most recent source code should be downloaded. The preferred way of doing so is to clone the ``musrfit``
repository via git. Assuming the code should be located in ``~/musrfit`` this is achieved most easily calling from the terminal
.. code-block:: bash
$ cd
$ git clone https://bitbucket.org/muonspin/musrfit.git
or
.. code-block:: bash
$ cd
$ git clone git://gitlab.psi.ch/nemu/musrfit.git
If the repository had been checked out already before, one can update the local copy using:
.. code-block:: bash
$ cd musrfit
$ git pull
As an alternative (if git is not available), the source code can also be downloaded from the following
web-page: `musrfit at bitbucket`_.
.. index:: musrfit-build-cmake-windows
musrfit build with cmake
^^^^^^^^^^^^^^^^^^^^^^^^
Currently the following configuration switches for ``musrfit`` are available:
**-DCMAKE_INSTALL_PREFIX=<prefix-path>**
Specify the installation prefix, *i.e.* the place where ``musrfit`` shall be installed, *e.g.* ``$ROOTSYS`` if already defined (by default: ``/usr/local``)
**-Dnexus=<value>**
enable/disable the support of ``NeXus`` data files (requires the ``HDF4``, ``HDF5`` and ``NeXus`` libraries to be installed).
<value>=1 enables ``NeXus``, <value>=0 disables ``NeXus``. The default setting, *i.e.* the switch is not provided is ``NeXus`` support is disabled.
**-DASlibs=<value>**
enable/disable the ``ASlibs``. <value>=1 enables the ``ASlibs``, <value>=0 disables the ``ASlibs``.
The default setting, *i.e.* the switch is not provided is ``ASlibs`` support is *disabled*. For details see Documentation of :ref:`user libs <user-libs>`.
**-DBMWlibs=<value>**
enable/disable the ``BMWlibs``. <value>=1 enables the ``BMWlibs``, <value>=0 disables the ``BMWlibs``.
The default setting, *i.e.* the switch is not provided is ``BMWlibs`` support is *disabled*. For details see Documentation of :ref:`user libs <user-libs>`.
**-DBNMRlibs=<value>**
enable/disable the ``BNMRlibs``. <value>=1 enables the ``BNMRlibs``, <value>=0 disables the ``BNMRlibs``.
The default setting, *i.e.* the switch is not provided is ``BNMRlibs`` support is *disabled*.
**-Dqt_based_tools=<value>**
Will try to get ``musredit``, ``musrWiz``, ``musrStep``, and ``mupp`` installed, if ``Qt`` is found.
By default this is *enabled*. Again <value>=0 means disabled, <value>=1 enabled.
**-Dqt_version=<value>**
Allows to specify which ``Qt`` version shall be tried. <value> can take the values: ``AUTO, 3, 4, 5``.
If the value is set to ``AUTO``, this highest installed version is chosen, otherwise the specified version is used.
**-Dtry_OpenMP=<value>**
Will check if ``OpenMP`` support is possible, and if yes use it. The default is *enabled*.
Normally it should not be necessary to make use of any of the options except for specifying the installation path with
``-DCMAKE_INSTALL_PREFIX``. ``musrfit`` build with ``cmake`` takes the out-of-source approach. Therefore a typical
configuration / make / install process including ``NeXus`` support would look like
.. code-block:: bash
$ cd $HOME/Apps/musrfit
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -Dnexus=1
# below it is assumed that multiple cores are present, hence the -j8 option
$ cmake --build ./ --clean-first -- -j8
$ make install
$ /sbin/ldconfig # (as superuser)
.. index:: musredit-install-windows
musredit
++++++++
In the latest version of ``musrfit`` the configure script tries to determine automatically if
Qt4.5 or higher is set up on the machine. In case this is found, the editor ``musredit`` is built
readily with ``musrfit``. If not, try the following:
.. code-block:: bash
$ cd src/musredit
$ qmake-qt4 musredit.pro
If everything went fine ``musredit`` can be compiled and installed:
.. code-block:: bash
$ make
$ make install
In case one likes to get the editor started just with starting the X server from the Windows start
menu the file ``~/.startxwinrc`` with the following contents can be created:
.. code-block:: bash
#!/bin/sh
export DISPLAY=:0.0
export QTDIR=/usr/lib/qt4
export ROOTSYS=/cygdrive/c/root
export PATH=$ROOTSYS/bin:$QTDIR/bin:/usr/i686-pc-cygwin/bin:$PATH
export MUSRFITPATH=$ROOTSYS/bin
musredit &
musrgui (obsolate)
++++++++++++++++++
If ``Qt4.5`` or higher is not available but ``Qt3`` is set up ``musrgui`` can be installed. For this
please follow the instructions for the ``musredit`` installation where simply every ``musredit`` occurrence
has to be replaced by ``musrgui``, and ``qt4`` is replaced by ``qt3``.
Check the installation
++++++++++++++++++++++
In order to perform a quick test for finding out if the installation has been completed successfully,
a few msr files together with the corresponding data files can be found in the ``musrfit`` source tree
at doc/examples/.
If ``musrgui`` has been installed, just open one of the ``test-*.msr`` files in the editor and test
the ``musrfit`` functionalities. Otherwise, if only the terminal should be used, as an initial test
for instance the following could be done:
.. code-block:: bash
$ cd doc/examples
$ musrview test-histo-ROOT-NPP.msr
Potential Problems
++++++++++++++++++
It might be that especially when running on Windows 7 ``musredit`` and ``musrgui`` produce errors like a
"STATUS_ACCESS_VIOLATION". In this case, try to do the following: Close all Cygwin programs (including
the terminals and X server) and run from a Windows command prompt (cmd)
.. code-block:: bash
$ C:\cygwin\bin\ash.exe /bin/rebaseall
If this does not resolve the problem, try to change the compatibility settings of ``C:\cygwin\bin\sh.exe``
and ``C:\cygwin\bin\bash.exe`` so that they are executed with administrator privileges.
Mac OS X / macOS
----------------
.. _MacPorts: https://www.macports.org/
.. _Fink: http://www.finkproject.org/
With Mac OS X / macOS the situation is up to some extent similar like on MS Windows but still different since
Mac OS X is a UNIX system. The similarity is that also on OS X a helping framework — either `MacPorts`_
or `Fink`_ — which provides open-source software is employed to fulfill the basic software requirements of ``musrfit``.
In the following, both possibilities (using MacPorts or Fink) are described but it is emphasized here that
it should be followed only *one* of the possible routes .
.. index:: macports
Requirements (MacPorts)
+++++++++++++++++++++++
Before proceeding with the usage of the ``MacPorts`` system first a few useful tools provided by Apple together
with OS X (on the installation DVD/CDs) should be installed:
**Xcode**
Useful developer tools including for instance the GNU compiler collection. It can be installed via the Apple App store.
Starting from ``XCode`` ≥ 4.3 the command line tools need to be installed manually. The necessary command line tools
can be installed via the following commands entered in the terminal
.. code-block:: bash
$ xcode-select --install
$ sudo xcodebuild -license
**X11**
The X-window system is automatically installed on 10.5 Leopard and 10.6 Snow Leopard. For some other versions you also
will need to install `XQuartz <http://xquartz.macosforge.org/trac>`_. If ``ROOT`` runs without ``XQuartz`` *do not*
install it.
After installing the ``Xcode`` tools go to the `MacPorts install page <http://www.macports.org/install.php>`_, download
the installer for your system and follow the installation instructions on the page. By default the MacPorts system will be
installed in ``/opt/local``. To be sure that the newest version of the software is used a MacPorts upgrade should be performed
by typing in a terminal:
.. code-block:: bash
$ sudo port -v selfupdate
**Remark:** MacPorts uses `rsync <http://rsync.samba.org/>`_ in order to synchronize the list of available packages. It frequently
happens that this service is blocked by firewalls. In this case it should be possible to download a local version of the package
repository and do the synchronization. If this step becomes necessary (*and only then*) it can be done in the following way:
#. Get a local version of the repository:
.. code-block:: bash
$ svn co http://svn.macports.org/repository/macports/trunk/dports ~/dports
#. Edit the file ``/opt/local/etc/macports/sources.conf``: At the end of the file, comment the line beginning with ``rsync://`` and
add a new line pointing to your local copy, *e.g.*
.. code-block:: bash
file:///Users/username/dports
#. Synchronize the packages:
.. code-block:: bash
$ sudo port -v -d sync
Then the MacPorts system should be set up and can be used to install additional software.
The installation of the software mentioned above is then done in the terminal:
.. code-block:: bash
$ sudo port -v install pkgconfig autoconf automake libtool cmake fftw-3 fftw-3-single gsl boost libxml2 qt5 qt5-qtsvg qt5-qtwebengine
With ``Qt5``, ``musredit`` will be installed. If it happens that you used ``musrgui`` in the past,
please change over to ``musredit`` since there will be no further development for ``musrgui`` anymore!
.. index:: nexus-build-macports
Installation of NeXus requirements (optional)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*Only* if ``musrfit`` should support reading data files in the ``NeXus`` format the further required packages are set up:
.. code-block:: bash
$ sudo port -v install hdf4 hdf5
Unfortunately, the ``minixml`` and ``NeXus`` libraries have to be compiled and installed directly from the source code.
Given the respective version numbers of 2.9 and 4.4.2 (which are subject to change with time.
Only ``NeXus`` Version ≥ 4.4 is support!) this can be achieved for example by:
.. code-block:: bash
$ # get and instal Mini-XML
$ cd $HOME/Applications
$ git clone https://github.com/michaelrsweet/mxml.git
$ cd mxml
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ # get and install NeXus
$ cd $HOME/Applications
$ # get the source code from the master repository
$ git clone https://github.com/nexusformat/code.git nexus/code
$ # next we will build NeXus out-of-source
$ cd nexus
$ mkdir build
$ cd build
$ cmake -DENABLE_HDF5=1 -DENABLE_HDF4=1 -DENABLE_MXML=1 ../code
$ make
$ sudo make install
.. index:: root-build-macports
ROOT
^^^^
**The default ROOT version is based on ROOT 6.xx/yy!**
ROOT installed via package installer
""""""""""""""""""""""""""""""""""""
The lazy way to get ``ROOT`` installed is via package installer. If your macOS is directly supported
by the ``ROOT`` people you can download the package installer from the ``ROOT`` `download page <https://root.cern.ch/downloading-root>`_.
Choose the latest ``ROOT`` release and download you macOS version dmg-file, *e.g.* for macOS 10.13 (High Sierra)
it is at the time of writting ``root_v6.16.00.macosx64-10.13-clang91.dmg``. After the installation
``ROOT`` will be installed under ``/Application`` as owner root. In order to ease your life for the
steps to follow and assuming you are the only guy working on your Mac, you could change the owner and group of the ``ROOT`` directory:
.. code-block:: bash
$ cd /Applications
$ sudo chown -R <username> root_v6.16.00
$ sudo chgrp -R staff root_v6.16.00
$ sudo ln -s root_v6.16.00 root
ROOT installed from source
""""""""""""""""""""""""""
The best way to get ``ROOT`` exactly the way needed for ``musrfit`` is to install it from source.
Before describing it, please make sure that you have installed all required packages listed under
:ref:`Requested Software <supported-operating-systems>` (*e.g.* ``fftw``, ``gsl``, etc).
For the following it is assumed that ``ROOT`` shall be installed under ``$HOME/Applications``. If you want
to install it somewhere else, just systematically replace the related terms of the following description.
For the following list of commands the '$' will be given, the command prompt. Do not enter it! Also some
comments will be added starting with a '#' which can be omitted. They are only there to explain what is going on.
.. code-block:: bash
$ cd $HOME/Applications
$ git clone http://github.com/root-project/root.git
$ cd root
$ git tag -l
$ # git tag -l will list all available tags. In the next command choose the tag v6-10-xx
$ # where xx is the highest listed number, e.g. v6-16-00
$ git checkout -b v6-16-00 v6-16-00
$ # now ROOT is ready to be configured. Below you will find the minimal ROOT configuration needed.
$ # We will use the cmake out-of-source approach here.
$ mkdir root_build
$ cd root_build
$ cmake ../ -Dgminimal=ON -Dasimage=ON -Dmathmore=ON -Dminuit2=ON -Dxml=ON -DCMAKE_INSTALL_PREFIX=$HOME/Applications/root/root_exec
$ # next will be the make. If running on a multicore CPU you can speed up tremendously by calling
$ # make with the option -j <number>, where <number> is the number of threads which you want to give,
$ # e.g. make -j8
$ cmake --build ./ --clean-first -- -j8
$ # make will take quite a while
$ make install
For further details see `Installing ROOT from Source <https://root.cern.ch/building-root>`_.
Setting up Environment Variables for ROOT and musrfit
"""""""""""""""""""""""""""""""""""""""""""""""""""""
Since Apple in its wisdom decided that programs started from a shell are treated differently than Apps if it is coming to
system variables, we need to work harder compared to a Linux system.
**For Mac OS X < 10.8:**
In order to finalize the ``ROOT`` installation and to prepare already the installation of ``musrfit`` and ``musredit``
this is a good time for setting necessary environment variables for the use in Mac OS X. Here it assumed that you
installed ``ROOT`` from source. If you downloaded the binary package, you will need to adopt the paths accordingly.
Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation)
into the file ``~/.MacOSX/environment.plist`` and re-login:
.. code-block:: xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>MUSRFITPATH</key>
<string>$HOME/Applications/root/root_exec/bin</string> (where to find the musrfit executables)
<key>QTDIR</key>
<string>/opt/local/lib/qt3mac</string> (where to find Qt3 (for musrgui) or Qt4 (for musredit))
<key>ROOTSYS</key>
<string>$HOME/Applications/root/root_exec</string> (where to find the ROOT system)
</dict>
</plist>
**For Mac OS X ≥ 10.8:**
One needs to add some system variables in ``~/.profile``:
.. code-block:: bash
export ROOTSYS=$HOME/Applications/root/root_exec
export MUSRFITPATH=$ROOTSYS/bin
export PATH=$ROOTSYS/bin:$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH
launchctl setenv ROOTSYS $ROOTSYS
launchctl setenv MUSRFITPATH $MUSRFITPATH
launchctl setenv PATH $PATH
launchctl setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH
After this you will need to "execute" ``.profile`` before proceeding:
.. code-block:: bash
$ source $HOME/.profile
.. index:: fink
Requirements (Fink)
+++++++++++++++++++
Before proceeding with the usage of the `Fink`_ system first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed:
**Xcode**
Useful developer tools including for instance the GNU compiler collection. It can be installed via the Apple App store.
Starting from ``XCode`` ≥ 4.3 the command line tools need to be installed manually. The necessary command line tools
can be installed via the following commands entered in the terminal
.. code-block:: bash
$ xcode-select --install
$ sudo xcodebuild -license
**X11**
The X-window system is automatically installed on 10.5 Leopard and 10.6 Snow Leopard. For some other versions you also
will need to install `XQuartz <http://xquartz.macosforge.org/trac>`_. If ``ROOT`` runs without ``XQuartz`` *do not*
install it.
After installing the ``Xcode`` tools go to the `Fink download page <http://www.finkproject.org/download/index.php?phpLang=en>`_,
download the installer for your system and follow the installation instructions on the page. By default the Fink system is
installed under ``/sw``. After the basic setup make sure that in ``/sw/etc/fink.conf`` the line starting with Trees reads like:
::
Trees: local/main stable/main stable/crypto unstable/main
After applying the changes above to the configuration file, the Fink core system should be upgraded to its newest version by typing in a terminal:
.. code-block:: bash
$ sudo fink selfupdate
Then the Fink system should be set up and can be used to install additional software.
The Fink installer package also contains a graphical user interface called FinkCommander and it is
suggested to use that for installing the following packages (or packages with revisions close to the following) — it
is necessary to compile a few packages from source since no binary packages are available, however, this is done
automatically by the FinkCommander after you have chosen the software packages for installation:
::
autoconf automake cmake boost1.63-nopython boost1.63.nopython-shlibs fftw3 fftw3-shlibs gsl gsl-shlibs
libtool2 libtool2-shlibs libxml2 libxml2-bin libxml2-shlibs pkgconfig qt5-mac-qtbase qt5-mac-qtbase-dev-tools
qt5-mac-qtsvg qt5-mac-qtsvg-shlibs qt5-mac-qtwebengine qt5-mac-qtwebengine-shlibs qt5-mac-qtwebenginecore-shlibs
qt5-mac-qtwebenginewidgets-shlibs
Under OS X 10.6 Snow Leopard it will *not* be possible to install ``qt3mac`` since the system is by default a 64-bit
system and the old ``qt3-mac`` depends on software which is only available for 32-bit systems. It is suggested to
install ``qt5-mac`` instead and use ``musredit``.
Also, due to some not fulfilled dependencies, it might not be possible to install FFTW3 through Fink. In this case
(*and ONLY in THIS case*) simply download the FFTW3 source code from its download page and install it from a terminal
using the following commands (for the FFTW version 3.x.y):
.. code-block:: bash
$ tar xz fftw-3.x.y
$ cd fftw-3.x.y
$ ./configure --enable-single --enable-shared --enable-threads --prefix=/usr/local
$ make
$ sudo make install
Since later on the boost header files should be used and in the standard Fink installation these are found at a version
specific location, the later handling will be easier if a symbolic link to this files is created now in the terminal
(if it did not exist earlier), *e.g.*:
.. code-block:: bash
$ ln -sf /sw/include/boost-x_yy_z/boost /sw/include/boost
where ``x_yy_z`` has to be substituted by the correct version number, *e.g.* ``1_63_0``.
.. index:: nexus-build-fink
Installation of NeXus requirements (optional)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*Only* if ``musrfit`` should support reading data files in the ``NeXus`` format the further required
packages can be installed through Fink (check for the most recent versions):
::
libjpeg hdf hdf5-cpp11 hdf5-cpp11-shlibs
Unfortunately, the ``minixml`` and ``NeXus`` libraries have to be compiled and installed directly from
the source code. Given the respective version numbers of 2.9 and 4.3.2 (which are subject to change with time)
this can be achieved for example by:
.. code-block:: bash
$ # first build Mini-XML
$ cd $HOME/Applications
$ git clone https://github.com/michaelrsweet/mxml.git
$ cd mxml
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ # second build NeXus
$ cd ..
$ git clone https://github.com/nexusformat/code.git nexus/code
$ cd nexus
$ # build NeXus out-of-source
$ mkdir build
$ cd build
$ cmake ../code -DENABLE_HDF4=1 -DENABLE_HDF5=1 -DENABLE_MXML=1
$ cmake --build ./ --clean-first -- -j8
$ sudo make install
.. index:: root-build-fink
ROOT
^^^^
**The default ROOT version is based on ROOT 6.xx/yy!**
ROOT installed via package installer
""""""""""""""""""""""""""""""""""""
The lazy way to get ``ROOT`` installed is via package installer. If your macOS is directly supported
by the ``ROOT`` people you can download the package installer from the ``ROOT`` `download page <https://root.cern.ch/downloading-root>`_.
Choose the latest ``ROOT`` release and download you macOS version dmg-file, *e.g.* for macOS 10.13 (High Sierra)
it is at the time of writting ``root_v6.16.00.macosx64-10.13-clang91.dmg``. After the installation
``ROOT`` will be installed under ``/Application`` as owner root. In order to ease your life for the
steps to follow and assuming you are the only guy working on your Mac, you could change the owner and group of the ``ROOT`` directory:
.. code-block:: bash
$ cd /Applications
$ sudo chown -R <username> root_v6.16.00
$ sudo chgrp -R staff root_v6.16.00
$ sudo ln -s root_v6.16.00 root
ROOT installed from source
""""""""""""""""""""""""""
The best way to get ``ROOT`` exactly the way needed for ``musrfit`` is to install it from source.
Before describing it, please make sure that you have installed all required packages listed under
:ref:`Requested Software <supported-operating-systems>` (*e.g.* ``fftw``, ``gsl``, etc).
For the following it is assumed that ``ROOT`` shall be installed under ``$HOME/Applications``. If you want
to install it somewhere else, just systematically replace the related terms of the following description.
For the following list of commands the '$' will be given, the command prompt. Do not enter it! Also some
comments will be added starting with a '#' which can be omitted. They are only there to explain what is going on.
.. code-block:: bash
$ cd $HOME/Applications
$ git clone http://github.com/root-project/root.git
$ cd root
$ git tag -l
$ # git tag -l will list all available tags. In the next command choose the tag v6-10-xx
$ # where xx is the highest listed number, e.g. v6-16-00
$ git checkout -b v6-16-00 v6-16-00
$ # now ROOT is ready to be configured. Below you will find the minimal ROOT configuration needed.
$ # We will use the cmake out-of-source approach here.
$ mkdir root_build
$ cd root_build
$ cmake ../ -Dgminimal=ON -Dasimage=ON -Dmathmore=ON -Dminuit2=ON -Dxml=ON -DCMAKE_INSTALL_PREFIX=$HOME/Applications/root/root_exec
$ # next will be the make. If running on a multicore CPU you can speed up tremendously by calling
$ # make with the option -j <number>, where <number> is the number of threads which you want to give,
$ # e.g. make -j8
$ cmake --build ./ --clean-first -- -j8
$ # make will take quite a while
$ make install
For further details see `Installing ROOT from Source <https://root.cern.ch/building-root>`_.
Setting up Environment Variables for ROOT and musrfit
"""""""""""""""""""""""""""""""""""""""""""""""""""""
Since Apple in its wisdom decided that programs started from a shell are treated differently than Apps if it is coming to
system variables, we need to work harder compared to a Linux system.
**For Mac OS X < 10.8:**
In order to finalize the ``ROOT`` installation and to prepare already the installation of ``musrfit`` and ``musredit``
this is a good time for setting necessary environment variables for the use in Mac OS X. Here it assumed that you
installed ``ROOT`` from source. If you downloaded the binary package, you will need to adopt the paths accordingly.
Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation)
into the file ``~/.MacOSX/environment.plist`` and re-login:
.. code-block:: xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>MUSRFITPATH</key>
<string>$HOME/Applications/root/root_exec/bin</string> (where to find the musrfit executables)
<key>QTDIR</key>
<string>/opt/local/lib/qt3mac</string> (where to find Qt3 (for musrgui) or Qt4 (for musredit))
<key>ROOTSYS</key>
<string>$HOME/Applications/root/root_exec</string> (where to find the ROOT system)
</dict>
</plist>
**For Mac OS X ≥ 10.8:**
One needs to add some system variables in ``~/.profile``:
.. code-block:: bash
export ROOTSYS=$HOME/Applications/root/root_exec
export MUSRFITPATH=$ROOTSYS/bin
export PATH=$ROOTSYS/bin:$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH
launchctl setenv ROOTSYS $ROOTSYS
launchctl setenv MUSRFITPATH $MUSRFITPATH
launchctl setenv PATH $PATH
launchctl setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH
After this you will need to "execute" ``.profile`` before proceeding:
.. code-block:: bash
$ source $HOME/.profile
.. index:: musrfit-build-macos
musrfit
+++++++
First, the most recent source code should be downloaded. First, the most recent source code should be downloaded.
The preferred way of doing so is to clone the ``musrfit`` repository via git. Assuming the code should be located
in ``~/Applications/musrfit`` this is achieved most easily calling from the termin
.. code-block:: bash
$ cd ~/Applications
$ git clone https://bitbucket.org/muonspin/musrfit.git
$ cd musrfit
or
.. code-block:: bash
$ cd ~/Applications
$ git clone git://gitlab.psi.ch/nemu/musrfit.git
$ cd musrfit
If a local repository clone is already present, one can update it using:
.. code-block:: bash
$ cd ~/Applications/musrfit
$ git pull
As an alternative (*if git is not available*), the source code can also be downloaded from the following
web-page: `musrfit at bitbucket`_.
.. index:: musrfit-build-cmake-macos
musrfit build with cmake
^^^^^^^^^^^^^^^^^^^^^^^^
Currently the following configuration switches for ``musrfit`` are available:
**-DCMAKE_INSTALL_PREFIX=<prefix-path>**
Specify the installation prefix, *i.e.* the place where ``musrfit`` shall be installed, *e.g.* ``$ROOTSYS`` if already defined (by default: ``/usr/local``).
**-Dnexus=<value>**
enable/disable the support of ``NeXus`` data files (requires the ``HDF4``, ``HDF5`` and ``NeXus`` libraries to be installed).
<value>=1 enables ``NeXus``, <value>=0 disables ``NeXus``. The default setting, *i.e.* the switch is not provided is ``NeXus`` support is disabled.
**-DASlibs=<value>**
enable/disable the ``ASlibs``. <value>=1 enables the ``ASlibs``, <value>=0 disables the ``ASlibs``. The default setting, *i.e.* the
switch is not provided is ``ASlibs`` support is disabled. For details see Documentation of :ref:`user libs <user-libs>`.
**-DBMWlibs=<value>**
enable/disable the ``BMWlibs``. <value>=1 enables the ``BMWlibs``, <value>=0 disables the ``BMWlibs``. The default setting, *i.e.* the
switch is not provided is ``BMWlibs`` support is disabled. For details see Documentation of :ref:`user libs <user-libs>`.
**-DBNMRlibs=<value>**
enable/disable the ``BNMRlibs``. <value>=1 enables the ``BNMRlibs``, <value>=0 disables the ``BNMRlibs``. The default setting,
*i.e.* the switch is not provided is ``BNMRlibs`` support is disabled.
**-Dqt_based_tools=<value>**
Will try to get ``musredit``, ``musrWiz``, ``musrStep``, and ``mupp`` installed, if ``Qt`` is found.
By default this is enabled. Again <value>=0 means disabled, <value>=1 enabled.
**-Dqt_version=<value>**
Allows to specify which ``Qt`` version shall be tried. <value> can take the values: ``AUTO, 3, 4, 5``.
If the value is set to ``AUTO``, this highest installed version is chosen, otherwise the specified version is used.
**-Dtry_OpenMP=<value>**
Will check if ``OpenMP`` support is possible, and if yes use it. The default is enabled
Normally it should not be necessary to make use of any of the options except for specifying the installation path with ``-DCMAKE_INSTALL_PREFIX``.
``musrfit`` build with ``cmake`` takes the ``out-of-source`` approach. Therefore a typical configuration / make / install process including
``NeXus`` support would look like
.. code-block:: bash
$ cd $HOME/Apps/musrfit
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -Dnexus=1
# below it is assumed that multiple cores are present, hence the -j8 option
$ cmake --build ./ --clean-first -- -j8
$ make install
$ /sbin/ldconfig # (as superuser)
musrfit last step of the installation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In order to finish the installation of ``musrfit`` two more things should be done:
* Define the ``MUSRFITPATH`` environment variable containing the path to the ``musrfit`` executables and ``XML`` files.
*E.g.* if the location of the example above is used append the following line to the ``~/.bashrc`` and ``~/.bash_profile``
(and then either restart the shell or call the same commands once more from the shell):
.. code-block:: bash
export MUSRFITPATH=$ROOTSYS/bin
* Adjust the paths where ``musrfit`` will search for data files in the installed ``musrfit_startup.xml``. For
detailed information on this XML file refer to the :ref:`manual <musrfit-startup>`.
.. index:: musredit-build-macos
musredit
++++++++
In the latest version of ``musrfit`` the configure script tries to determine automatically the highest
available Qt version. In case this is found, the editor ``musredit`` is built already together with ``musrfit``.
If not, try the following:
.. code-block:: bash
$ cd $HOME/Apps/musrfit/src/musredit_qt5
$ # for some distributions you will need qmake-qt5 for the next command
$ qmake musredit.pro
If everything went fine, ``musredit`` can be compiled and installed:
.. code-block:: bash
$ make
$ make install
In case one does not like the executable ``musredit`` to be copied to the default installation directory
``$ROOTSYS/bin`` the last make install can be skipped and the executable can be copied somewhere else instead.
musrgui (obsolete)
++++++++++++++++++
If Qt3 is set up the installation of the ``musrfit`` editor can be done as follows from within the shell:
.. code-block:: bash
$ cd ~/Applications/musrfit/src/musrgui
$ qmake musrgui.pro
$ make
$ make install
The last command copies ``musrgui.app`` to the standard program directory ``/Applications``.
Under some circumstances it might happen, that if ``musrgui`` was called from Finder the necessary libraries
for executing ``musrfit`` could not be found. In that case, the only workaround for the moment is to export
the environment variable ``DYLD_LIBRARY_PATH`` in the shell and call ``musrgui`` from a terminal! In order to
accomplish that, add the following lines to ``~/.profile`` and call ``musrgui`` with the specified command:
.. code-block:: bash
export DYLD_LIBRARY_PATH=/opt/root-system/lib:/sw/lib:$DYLD_LIBRARY_PATH
alias mgui='/Applications/musrgui.app/Contents/MacOS/musrgui'
Check the installation
++++++++++++++++++++++
In order to perform a quick test for finding out if the installation has been completed successfully, a few msr
files together with the corresponding data files can be found in the musrfit source tree at ``doc/examples/``.
If ``musrgui`` has been installed, just open one of the ``test-*.msr`` files in the editor and test the ``musrfit``
functionalities. Otherwise, if only the terminal should be used, as an initial test for instance the following could be done:
.. code-block:: bash
$ cd ~/Applications/musrfit/doc/examples
$ musrview test-histo-ROOT-NPP.msr