====== SpascharmRoot ======
===== Введение =====
Система SpascharmRoot основана на PandaRoot, используемая сотрудничеством ПАНДА. На данный момент за основу взят последний релиз PandaRoot -> jan16. По мере выходов новых релизов PandaRoot, планируется обновлять этот "базовый" для нас пакет.
Для удобства совместной разработки создан репозиторий [[http://svnbook.red-bean.com/en/1.7/svn-book.html|subversion]], который расположен по адресу: [[svn+ssh://svn.ihep.su/svn/SpascharmRoot/trunk]] (основная ветка разработки) (старый адрес http://star-kes.ihep.su/svn/SpascharmRoot/trunk вскоре будет отключен. Не делайте коммиты пожалуйста сюда). Для работы с репозиторием рекомендуется установить на локальную машину svn версии 1.7 или выше.
Структура проекта выглядит следующим образом:
* PandaRoot/ - папка внешнего пакета PandaRoot (стараться делать как можно меньше изменений здесь)
* U70ecal/ - исходные коды электромагнитного калориметра
* U70guard/ - исходные коды охранной системы
* U70hcal/ - исходные коды адронного калориметра
* U70magnet1/ - исходные коды магнита мишени
* U70muon/ - исходные коды мюонной системы
* U70mwpc/ - исходные коды пропорциональных камер
* cmake/ - скрипты для конфигурирования (создания) Makefiles для утилиты cmake
* gconfig/ - конфигурационные макро для fluka, geant3, geant4, pythia6, pythia8, geane, root (для начала скопированы из PandaRoot, но их можно смело править)
* geometry/ - файлы с описанием геометрии детекторов (.geo, .root, .dat)
* input/ - входные файлы для различных генераторов частиц, карты магнитных полей, матрицы ошибок и тп
* macro/ - root макро для запуска задач (моделирование, дигитизация, реконструкция, pid, анализ и тп)
* CMakeLists.txt - основной файл описания конфигурации SpascharmRoot для утилиты cmake
* CTestCustom.cmake
Предполагается вести разработку в директориях U70xxx (для детекторов) - любые алгоритмы/коды из PandaRoot можно смело копировать и/или наследовать и модифицировать в своем классе.
===== Как установить SpascharmRoot =====
Чтобы установить SpascharmRoot у себя на машине нужно проделать несколько шагов:
- Установить external packages ([[http://fairroot.gsi.de/|fairroot]]), который является внешним для всех систем в FAIR. На данный момент они состоят из двух подпакетов и последние их версии таковы: FairSoft - [[http://fairroot.gsi.de/?q=node/104|nov15]], FairRoot - [[https://github.com/FairRootGroup/FairRoot/releases|v-15.11a]] (Для ревизии SpascharmRoot 109 и ниже основной версией внешних пакетов была [[http://fairroot.gsi.de/?q=node/79|dec13]]). Установка описана на wiki PandaRoot [[https://panda-wiki.gsi.de/foswiki/bin/view/Computing/PandaRootInstallGit|PandaRoot wiki]].
- Скачать на локальную машину исходные коды системы SpascharmRoot (потребуется ввести имя пользователя и пароль на кластере ИФВЭ): svn co svn+ssh://@svn.ihep.su/svn/SpascharmRoot/trunk SpascharmRoot/trunk
, где необходимо заменить на свое имя пользователя на КЛАСТЕРЕ ИФВЭ.
- Перейти в директорию с исходниками: cd SpascharmRoot/trunk
- Установить переменную среды SIMPATH на путь до директории, где установлен FairSoft (директория инсталляции, не исходники!). Например: bash
export SIMPATH=/path_to_fairroot/fairsoft_nov15/buildFairSoft
- Установить переменную среды FAIRROOTPATH на путь до директории, где установлен FairRoot (директория инсталляции, не исходники!). Например: bash
export FAIRROOTPATH=/path_to_fairroot/fairsoft_nov15/buildFairRoot
- Создать директорию для компиляции системы: cd ../..
mkdir spascharmroot_build
cd spascharmroot_build
- Выполнить конфигурацию (создание Makefile) с помощью утилиты cmake: cmake /path_to_dir/SpascharmRoot/trunk
- Выполнить компиляцию: make
===== Как обновить SpascharmRoot =====
Чтобы обновить исходные коды в рабочей копии (в своей рабочей директории - кто-то другой мог что-то изменить в репозитории), необходимо выполнить команду:
cd SpascharmRoot/trunk
svn update
Чтобы посмотреть состояние рабочей копии (узнать какие изменения есть по сравнению с последней редакцией на сервере можно выполнить команду: svn status
Чтобы получить общую информацию о svn репозитории (тип, пути до рабочей копии, репозитория, номер, дату и пользователя последней редакции) можно выполнить команду svn info
===== Как зафиксировать сделанные изменения в коде SpascharmRoot =====
После того, как работа на кодом завершена можно выкладывать свои изменения на сервер svn (репозиторий).
**Внимание! Большая просьба! Выкладывать изменения только, если вы убедились, что код компилируется!**.
Для фиксирования своих изменений достаточно выполнить команду: svn commit
//Замечание:// При этом могут возникнуть конфликты, которые необходимо будет справить (svn сообщит какие и где). В документации по [[http://svnbook.red-bean.com/en/1.7/svn-book.html|subversion]] написано как это делать.
===== Использование IDE Eclipse для разработки =====
Довольно удобно (даже очень) использовать для разработки такого большого проекта интегрированную среду разработки (IDE), например [[http://www.eclipse.org/|eclipse]]. Eclipse снабжен такими полезными функциями как:
* Удобное перемещение по коду с активными взаимными ссылками, то есть можно переходить в текст с описанием типа переменной, функции и тп. просто кликнув в том месте где такой объект используется. Другими словами все типы, классы, методы классов индексируются для такой возможности.
* Автодополнение кода - то есть, среда сама покажет какие методы есть у данного класса, когда вы объявили объект данного класса.
* Проверка синтаксиса налету.
* Интеграция с множеством систем компоновки (в том числе с cmake).
* Интеграция с svn - все команды svn можно выполнять декларативно, кликая по пунктам меню.
* Списки ToDo - если вставлен комментарий вида //!TODO
среда напомнит об этом.
* Встроенный debugger (правда в нашем случае это не очень актуально, так как при компиляции получаются библиотеки, которые вызываются из макро ROOT, однако для скомпилированного исполняемого кода он работает замечательно)
* И еще множество замечательных функций.
Приведем пример, как настроить проект SpascharmRoot в eclipse. //Пример описан для Eclipse версии "Kepler" 4.3.1//. Для более старых версий процесс примерно похож.
==== Инсталляция ====
Необходимо установить C++ версию на вашей системе:
* Установить Java JRE [[http://www.java.com/|Java JRE]]
* Установить Eclipse for C++ Developers
* Установить плагин для SVN, лучше всего [[http://www.eclipse.org/subversive/|subversive]] (иногда в дистрибутивах Linux - eclipse уже идет с этим плагином). Не рекомендую плагин subclipse от tigris.org - мне так и не удалось через него авторизоваться на нашем кластере, subversive намного более гибкий.
==== Создание проекта SpascharmRoot, начиная с текущей рабочей версии из svn ====
* Убедитесь что установлены переменные среды окружения, вызвав config.sh из директории где собирается проект (spascharm_build)
* Запустите Eclipse перейдя в его директорию установки ./eclipse
. Можно также запустить его из меню.
* Появится запрос выбора рабочей области (можно оставить название по умолчанию или назвать по-своему)
{{howto:root:eclipse1.png}}
* Откроется страница "Обзор"(Overview). Можно ее закрыть, перейдя в рабочее пространство.
* Выбрать Файл -> Создать -> Проект (Или сразу C++ project)
* Откроется диалог создания проекта
* Выбираем С++ Project, нажимаем Далее
{{howto:root:eclipse2.png?x800}}
* Указываем Имя проекта, например spascharmroot
* Снимаем галку "Расположение по умолчанию" и выбираем вашу директорию с исходниками SpascharmRoot
* Выбираем Project Type: Makefile project и Toolchain: Linux GCC
{{howto:root:eclipse3.png?x800}}
* Нажимаем Готово
* После этого проект настроен и код будет проиндексирован
* Если все ок к этому моменту вы должны увидеть следующее:
{{howto:root:eclipse4.png?800}}
{{howto:root:eclipse5.png?800}}
==== Настройка системы компоновки (компилятора) ====
* Выберите в меню: Проект -> Свойства
* В открывшемся диалоговом окне выберите С/C++ Build
* Во вкладке Builder Settings укажите свою директорию для компиляции (например spascharm_build):
{{howto:root:eclipse6.png?x600}}
* Во вкладке Tab Behaviour очистите поле "Build (incremental build)":
{{howto:root:eclipse7.png?x600}}
* Теперь проект должен собраться (откомпилироваться). Можно наблюдать прогресс сборки во вкладке "Косносль" внизу окна IDE.
* Для запуска процесса компиляции нажмите на значок "Молотка" в панели инcтрументов IDE.
* Все готово для работы в Eclipse!
{{howto:root:eclipse8.png?1000}}
{{howto:root:eclipse9.png?1000}}
==== Добавление в проект исходных кодов ROOT ====
Для того, чтобы иметь доступ к описаниям классов ROOT (для автозаполнения и тд) нужно сделать следующее:
* Правой кнопкой мыши кликнуть на проекте spascharmroot в "Структуре проекта"
* Выбрать Создать -> Папка
* В появившемся диалоге указать "Имя папки", например ROOT
* Нажать кнопку "Дополнительно"
* Выбрать в списке "Link to alternate location (Linked Folder)" и укажите папку, где установлен ROOT - например /data/fairsoft/tools/root. Так как ROOT - это монстро-подобная программа, то индексация займет довольно продолжительное время. Более легкий вариант - указать только папку include из инсталляции ROOT (будут доступны только заголовочные файлы ROOT).
{{howto:root:eclipse10.png?x600}}
{{howto:root:eclipse11.png?1000}}
==== Некоторые дополнения ====
=== Номера строк в редакторе ===
Для удобства работы с кодом и отладки в редакторе хорошо бы видеть номера строк. Для этого надо сделать следующее:
* Выбираем из меню Окно -> Параметры
* В открывшемся диалоге раскрываем Общие -> Редакторы -> Текстовые редакторы и ставим галку на "Показать номера строк"
{{howto:root:eclipse12.png?x800}}
=== Поддержка SVN ===
Если Eclipse уже имеет плагин поддержки SVN то среда сама разберется, что папка проекта, который вы добавили находится под контролем версий SVN и сама подцепится к репозиторию. При этом в "Структуре проекта" напротив файлов будут показаны номер ревизии, дата и автор последнего изменения, кроме этого файлы и папки будут иметь иконки, указывающие на различные состояния svn (есть, нет отличий от версии в репозитории и тп). И также становятся доступны все команды svn из меню Team.
Если этого не произошло, то самый простой способ такой - сделать checkout проекта напрямую из svn:
- Подключить новый репозиторий через [[https://eclipse.org/subversive/documentation/teamSupport/new_location_wiz.php|subversive]]
- Сделать checkout проекта: меню Создать → Проект → SVN → Project from SVN.
Как говорится в подобных случаях: "Happy coding!" 8-O
=== Запуск пакетной обработки файлов для анализа ===
В системе реализована пакетная обработка файлов. Существует два варианта такой обработки:
- Чтение .dat файлов ("сырые" файлы из daq) и запись деревьев в .root файлы;
- Чтение деревьев из .root файлов для отображения гистограмм в online-мониторе online_gui_sm.
Для запуска варианта 1) необходимо выполнить следующие команды (пример приведен для машины lab3onl):
cd spascharmroot_exec
./batchRawToRoot.sh test
, где "test" - директория для обработки.
Директория, переданная как параметр будет обрабатываться рекурсивно. То есть, можно например указать весь run0XX и обработаются также файлы из поддиректорий, в которых лежат файлы, разбитые по часам.
Для запуска варианта 2), то есть отображение онлайн-гистограмм на уже записанных данных, необходимо выполнить:
root 'online_gui_sm.C(kFALSE, "test")'
, где первый параметр: kTRUE/kFALSE - мода работы (online или пакетная обработка), второй параметр - директория из которой брать файлы. Директория также обрабатывается рекурсивно.