# installation

## Подготовка к работе и установка программ

Для работы я буду использовать ОС Ubuntu, однако большая часть излагаемого материала будет верна для любой платформы.

Для того что бы использовать GEANT4 мы должны его установить. Есть три способа сделать это:

* Скачать скомпилированный GEANT4 (бинарную сборку) с  официального сайта.
* Скачать виртуальную машину с предустановленным GEANT4.
* Скачать исходный код и скомпилировать его самостаятельно.

Для учащихся ещё только осваивающих мир linux, наиболее удобным будет второй путь, однако для практического использования наиболее правильным является последний пункт, по трем причинам. Во-первых, бинарная сборка не содержит некоторых библиотек необходимых нам для изучения тем продвинутого уровня, а также может не подойти к используемой вами платформе. Во-вторых, это позволяет попрактиковаться в сборке крупных библиотек на C++. В-третьих, исходный код нам все равно понадобится, как для лучшего понимания внутреннего устройства GEANT4, так и для решения наших прикладных задач.

Итак, мы скачали и распаковали архив с исходным кодом GEANT4.

Рассмотрим процесс установки GEANT4. Для его сборки нам необходимы некоторые библиотеки (их список дам в руководстве по установке), так же нам потребуются некоторые полезные утилиты.

### Базовая сборка:

* Процесс сборки описан для версии `4.10.03`, однако данная инструкция может использоваться и для сборки других версий с небольшими отличиями в процессе.
* Скачиваем архив с [официального сайта](http://geant4.web.cern.ch/geant4/support/download.shtml).
* Создаем директорию `GEANT4` в своем домашнем каталоге.
* Распаковываем в неё скачанный архив.
* В директории `GEANT4` создаем папки `build` и `install`. В папке `build` мы будем собирать GEANT4, а в папку `install` устанавливать.
* *Опционально*: можно скачать data-файлы, и разместить их в директории data, что бы затем использовать их при установке. Это совершенно необязательно, так как GEANT4 может скачать их сам при сборке.
* Устанавливаем необходимые утилиты для сборки: компилятор С++, cmake и консольный конфигуратор ccmake, а также необходимые библиотеки (для Debian/Ubuntu, в других дистрибутивах Linux вам следует использовать пакетный менеджер этого дистрибутива):

  ```
    sudo apt-get install g++ cmake cmake-curses-gui
    sudo apt-get install libexpat1 libexpat1-dev
  ```
* Переходим в директорию `build`:

  ```bash
    cd ~/GEANT4/build
  ```
* Запускаем `ccmake`:

  ```bash
    ccmake ../geant4.10.03
  ```

  Здесь в качестве аргумента команды `ccmake` используется путь до директории, распакованной из скаченного нами архива с GEANT4. `ccmake` читает расположенный в этой директории файл `CMakeLIsts.txt`, для того чтобы настроить параметры сборки.
* После того как `ccmake` открылся, жмем клавишу `c`, если все нормально, то `ccmake` выдаст предупреждение об отсуствии data-файлов, которое можно смело проигнорировать. Так же может выдать ошибку если в системе не установлена какая-либо библиотека, тогда её надо доустановить.
* Если `ccmake` успешно сконфигурировался, отредактируем следующие параметры:
  * `CMAKE_INSTALL_PREFIX` - по умолчанию он пытается утсановить GEANT4 в системную директорию, однако я предлагаю прописать здесь путь до папки `install` (если же вы будет устанавливать в директорию по умолчанию, то не забудьте добавить команду `sudo` перед `make install`).
  * `GEANT4_INSTALL_DATA` - установим значение `ON`, для того чтобы GEANT4 сам скачал data-файлы. Если у вас уже есть эти файлы, укажаите к ним путь в параметре `GEANT4_INSTALL_DATADIR`.
* Жмем клавишу `c`, до тех пор пока не появиться опция нажать клавишу `g`. Жмем `g`. `ccmake` создаст `makefile` и закроется.
* Собираем GEANT4:

  ```bash
    make -jN
    # где N количество ядер которое вы хотите задействовать,
    # посмотреть количество ядер можно в htop 
    # (sudo apt-get install htop)
  ```
* Устанавливаем GEANT4:

  ```bash
    make install
    # если вы не изменяли параметр CMAKE_INSTALL_PREFIX, 
    # то используйте sudo make install, 
    # еще лучше воспользуейтесь checkinstall
  ```
* Устанавливаем переменные окружения:

  ```bash
    source /path/to/install/bin/geant4.sh
    # Данную команду нужно прописать в ~/.bashrc для автоматической установки переменных среды.
  ```
* Проверяем работоспособность на примерах согласно [этому параграфу](https://github.com/Zelenyy/geant4-education/tree/76e3765104dfa1237243f1392e6dd7ca1c0adbda/ru/Lesson-installation/example_run.md).
* Папку `build` мы не удаляем, так как она пригодится нам когда мы захотим пересобрать GEANT4 с другими опциями. Это позволит нам в дальнейшем пересобирать только те файлы, которые будут изменены (не забудьте только изменить значение параметра, отвечающего за загрузку data-файлов, дабы не скачивать их несколько раз).

Если у вас в системе установлен пакет `anaconda` могут возникнуть проблемы с зависимостями библиотек. Это решается или удалением пути к `anaconda` из переменной `PATH`, или использованием `anaconda` (смотрим раздел Установка с помощью conda).

### Подключение GDML

Для загрузки геометрии из внешних gdml-файлов, нам потребуется подключить GDML.

* Устанавливаем необходимые библиотеки:

  ```bash
  sudo apt-get install libxerces-c3.1 libxerces-c-dev
  ```
* Запускаем `ccmake` в папке `build`.
* Установим значение `ON` для параметра `GEANT4_USE_GDML`.
* Конфигурируем, генерируем, собираем и устанавливаем.

### Подключение GUI

Для GUI будем использовать qt - установим значение параметра `GEANT4_USE_QT` равным ON. Если хотим использовать qt4 (а я рекомендую его использовать), то установите значение параметра `GEANT4_FORCE_QT4` равным `ON`. Для установки необходимых зависимостей выполните:

```bash
sudo apt-get install libxmu-dev lubxmu

sudo apt-get install qt5-default
#или
sudo apt-get install qt4-default
```

## Установка с помощью conda cross-linux

Если вы не имеет прав суперпользователя, или системные репозитории безнадежно устарели, или вы просто не хотите с ними связываться, то можно использовать пакетный менеджер `conda` для установки дополнительных библиотек.

* Устанавливаем Anaconda или Miniconda c [официального сайта](https://www.anaconda.com/download/#linux).
* Устанавливаем необходимые пакеты:

  ```bash
    conda install -c anaconda gcc
    conda install libgcc
    conda install -c anaconda xerces-c
    conda install -c anaconda cmake
    conda install -c anaconda qt
  ```

  Конфигурируем, генерируем, собираем и устанавливаем согласно базовой инструкции.
