Месяца все вопросы с размещением статьи в других местах следует решать с редак



Скачать 147.97 Kb.
Pdf просмотр
Дата15.02.2017
Размер147.97 Kb.
Просмотров219
Скачиваний0

ROOT
© ЕМ. Балдин

900
925
950
975
1000
1025
1050
1075
1100
-1100
-1075
-1050
-1025
-1000
-975
-950
-925
-900
0
0.25
0.5
0.75
1
1.25
1.5
1.75
2
2.25
Del Trirx ry rz 200
Эта статья была опубликована в сентябрьском номере русскоязычного журнала Format (http://www.linuxformat.ru) за 2006 год. Статья размещена с разрешения редакции журнала на сайте http://www.inp.nsk.su/
baldin/ и до февраля месяца все вопросы с размещением статьи в других местах следует решать с редакцией, а после все вопросы следует решать со мной.
Текст, представленный здесь, не является точной копией статьи в журнале. Текущий текст в отличии от журнального варианта корректор не просматривал. Все вопросы по содержанию, атак же замечания и предложения следует задавать мне по электронной почте Текст на текущий момент является просто текстом, а не книгой. Поэтому результирующая доводка в целях улучшения восприятия текста не проводилась Скрипт, который создал картинку, взят с http://paw.web.cern.ch/paw/contributions/. Автор скрипта Luke Jones.
Оглавление Runing ROOT
1 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 Сравнение с PAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 Запускаем ROOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Командная логика . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Графический интерфейс . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Базовые объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 Гистограммы . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 Деревья . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 Графики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 Интерпретатор C++ (CINT) . . . . . . . . . . . . . . . . . . . . . . . .
13 Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
ii

1 Runing Мало данные получить — надо ещё понять, а есть ли от них польза Введение
Даже если данных много — их надо как-то проанализировать. Это может сделать только человек. Компьютер в этом деле только помощник. Выбор инструмента очень важен. ROOT — хороший инструмент. У него был достойный предок ион мог бы быть гораздо лучше. Но здесь и сейчас надо анализировать данные, фиксируя недостатки, дабы исправить их в будущем. Это возможно, потому что ROOT — это свободный продукт.
Примерно через десять лет после возникновения PAW (Physics Analysis стало скучно и лидер команды PAW Рене Бран (Ren´e Brun) с сотоварищами начал новый проект ROOT — An Object Oriented Data Analysis Компьютеры стали много мощнее, но и поток данных увеличился. ROOT стал разрабатываться в рамках эксперимента NA49, где поток данных за один заход
2
мог превышает 10 Тб (грубо 1 Тб=10 3
Гб=10 6
Мб).
С начала 2006 года ROOT (http://root.cern.ch/) стал выпускаться под лицензией, и, возможно, скоро попадёт вовсе основные дистрибутивы GNU/Linux.
1.2 Сравнение с PAW
PAW является предком ROOT, если уж не в смысле кода, то уж в смысле реализации идей заведомо. Поэтому полезно понять чем эти пакеты отличаются ив чём совпадают. Сравнительная таблица не претендует на фундаментальность, а просто отражает личные пристрастия автора.
Абсолютно вся функциональность, которая есть в PAW, присутствует ив Для того чтобы файлы данными, сделанными для PAW, можно было проанализировать в ROOT, вместе с пакетом поставляется программа h2root:
> h 2 r o o t

1
Почему ROOT так называется У меня есть только догадки OO — видимо, Object Oriented, асам от английского корень или источник (root). Предполагается, что ROOT — это база для разработок, а непросто система анализа, то есть корень всех ldots :) Таких заходов было чуть меньше 5 тысяч.
1

1 Runing Рис. 1.1. root в действии — просто демонстрация
2

1 Runing ROOT
Признак
PAW
ROOT
Авторы
Рене Брани др.
Рене Брани др.
Возраст
20 лет чуть больше 10 лет
GNU
начиная с 2000 года сначала года
Интерпретатор
FORTRAN (COMIS)
C++ (Командный процессор+ (Ускорение набора команд сокращение команд
TAB-complition
Кириллица?
никак аналогично
Состояние матёрая, но немного устаревшая система надо повзрослеть, хотя пора бы уже
Система помощи Подробная официальная документация в почти 500 страниц в командной строке
Пухлое руководство пользователя, автодокументация по исходникам, нонет Ааааа.
Что бы сказал
Брукс?
старая школа все признаки второй системы Что есть?
то, что нужно для анализа данных это, плюс много чего ещё лишнего и не очень
Таблица 1.1. Сравнение PAW и ROOT (Почему PAW? Если в вашем проекте PAW уже используется особых причин для смены инструмента нет. Для стандартных операций анализа PAW использовать значительно проще чем ROOT. Это плата за попытку объять необъятное.
Почему С+ популярнее FORTRAN и KUIP. С+ привычнее и с помощью него проще делать задачи, которые являются вспомогательными к анализу для всего используется один инструмент. ROOT активно поддерживается и развивается. Уесть довольно мощное сообщество. На сайте http://root.cern.ch можно найти ответ почти на все вопросы, касающиеся пакета, в RootTalk (там же)
можно задать вопрос любой сложности, на который ответят сочень большой вероятностью Запускаем Так как ROOT получил лицензию LGPL совсем недавно, то, скорее всего, в вашем настольном дистрибутиве его нет. Поэтому запуск придётся отложить на потом»
после сборки и установки.
Брать исходники лучше всего с основного сайта http://root.cern.ch. После распаковки дерева пакетов следует внимательно изучить инструкцию Я слышал такой вариант ответа потому что в отличии отв графическом окне можно мышкой подправить экспериментальные данные — очень надеюсь, что это была шутка.
3

1 Runing Сборка стандартная:
> . / c o n f i g u r e −−p r e f i x =/usr / l o c a l ; make ; make i n s t a l l make install необходимо делать под пользователем Можно попробовать собрать rpm или deb пакет. Собрать пакет под Debian 3.1
(Sarge) без дополнительных телодвижений неуда тся, так как отсутствует пакет, на который указывают зависимости. По видимому, разработка ведётся для тестовой или нестабильной ветки дистрибутива.
После установки перед запуском необходимо установить переменные окружения.
Для bash, это будет выглядеть примерно так:
> export ROOTSYS=/u s r / l o c a l /
> export PATH=$PATH :$ROOTSYS/ bin
> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ROOTSYS/ l i b / r o o Установка LD_LIBRARY_PATH необходима из-за того, что почти весь функционал вынесен в разделяемые библиотеки, которые подгружаются вовремя работы программы. Аналогично можно оформить и свою библиотеку, расширив, таким образом, возможности ROOT.
Всё. Теперь открываем терминал и запускаем ROOT:
> r o o t
∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗∗∗ ∗∗∗ ∗∗∗ ∗∗∗∗ ∗∗∗ ∗∗∗∗ ∗∗∗ ∗∗∗ ∗∗∗∗ ∗∗



W E L C O M E
t o
R O O T




V e r s i o n
5 . 1 1 / 0 2 19 A p r i l 2006




You a r e welcome t o v i s i t our Web s i t e


ht t p : / / r o o t . c e r n . ch



∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗∗∗ ∗∗∗ ∗∗∗ ∗∗∗∗ ∗∗∗ ∗∗∗∗ ∗∗∗ ∗∗∗ ∗∗∗∗ ∗∗
FreeType Engine v2 . 1 . 9 used t o r e n d e r TrueType f o n t s .
Compiled on 19 May 2006 for l i n u x with t h r e a d support .
CINT/ROOT C/C++ I n t e r p r e t e r v e r s i o n 5 . 1 6 . 1 1 , A p r i l 1 4 , 2006
Type ? for h e l p . Commands must be C++ s t a t e m e n t s .
E n c l o s e m u l t i p l e s t a t e m e n t s between { } .
r o o t [ 0 Получив приглашение можно приступать к работе. Сказать «Hello World» из можно следующим образом o o t [ 0 ] co ut << "Hello␣World" << e n d l ;
H e l l o World
4

1 Runing При запуска ROOT считывается файл настроек .rootrc сначала в текущей директории, если нетто в домашней, а затем берётся системный файл От версии к версии эта последовательность может меняться
4
По умолчанию есть ещё три файла, которые могут управлять поведением программы выполняется при запуске — загружается при запуске, ноне выполняется — выполняется при завершении сеанса можно запускать и не в интерактивном режиме. Для этого при запуске следует указать опцию -b. Полный список поддерживаемых опций можно получить при указании ключа -Выйти из ROOT можно с помощью команды «.q». Если в процессе анализа удалось зациклить программу, то желание выйти можно усилить с помощью команд, «.qqqqq» или «.qqqqqqq»
5
. ˆC также может помочь в непредвиденных ситуациях Командная логика»
В качестве командного процессора используется интерпретатор С+ CINT. Это означает, что интерактивная работа очень похожа на написание обычной программы. Знание языка C/C++ приобщении с ROOT является обязательным. Как и для PAW напишем программу по вычислению чисел Фибоначчи o o t [ 0 ] {
end with ’} ’ , ’@’ : a b o r t > int a=0,b=1;
end with ’} ’ , ’@’ : a b o r t > cout << a << "␣" << b << "␣" ;
end with ’} ’ , ’@’ : a b o r t > for ( int i =2; i <=10; i ++) {
end with ’} ’ , ’@’ : a b o r t >
int x=a ; a=b ; b=x+b ;
end with ’} ’ , ’@’ : a b o r t >
co ut << b << "␣" ;
end with ’} ’ , ’@’ : a b o r t > }
end with ’} ’ , ’@’ : a b o r t > cout << e n d l ;
end with ’} ’ , ’@’ : a b o r t > }
0 1 1 2 3 5 8 13 21 34 Команды группируются с помощью фигурных скобок. Этот же код можно сохранить в файл fibonacci.cxx и выполнить его как скрипт o o t [ 1 ] . x f i b o n a c c i . cxx
0 1 1 2 3 5 8 13 21 34 55 В руководстве пользователя в этом месте присутствуют ошибки.
5
Чем больше q, тем сильнее желание.
5

1 Runing В случае C++ окончание команды отмечается «;». Если «;» опустить, то из получится неплохой калькулятор o o t [ 2 ] 2∗ s q r t ( 5 ) ∗ s i n ( 2 ∗ 3 . 1 4 ∗ 7 5 / 1 8 0 ) / 3 . 1 4 ∗ ∗ 2
( const double ) 2 . 2 7 3 1 2 0 8 9 1 2 5 6 6 08 9 3e −01
r o o t [ 3 ] 2∗∗10
( const int )1024
r o o t [ 4 ] 2 . ∗ ∗ 1 0 2 3
( const double ) 8 . 9 8 8 4 6 5 6 7 4 3 1 1 5 79 5 4 Все вспомогательные команды ROOT начинаются сточки. Для выполнения команд оболочки используется команда «.!» за которой следуют инструкции o o t [ 5 ] . ! l s ∗ . cxx f i b o n a c c i . Полный список вспомогательных команд можно получить с помощью инструкции
«.?».
Все необходимые для анализа объекты представлены в виде классов. Класс TFile соответствует файлу в который можно сохранять структуры. Объект TTree представляет из себя более изощрённую реализацию идеи ntuple:
r o o t [ 6 ] TF ile ∗ f=new TFile ( "ee−ang . root" )
r o o t [ 7 ] TTree ∗ t r e e ;
r o o t [ 8 ] t r e e= ( TTree ∗ ) f−>Get ( "h1" ) ;
r o o t [ 9 ] t r e e −>Draw («TAB»
void Draw ( Option_t ∗ opt )
Long64_t Draw ( const char∗ varexp , const TCut& s e l e c t i o n , Option_t ∗
o p t i o n = "" , Long64_t n e n t r i e s = 1000000000 , Long64_t f i r s t e n t r y = 0)
Long64_t Draw ( const char∗ varexp , const char ∗ s e l e c t i o n , Option_t ∗
o p t i o n = "" , Long64_t n e n t r i e s = 1000000000 , Long64_t f i r s t e n t r y = 0)
r o o t [ 1 0 ] t r e e −>Draw ( "E1" , "E1<2.&&f1==−11&&f2==11" )
В строке [9] после скобки была нажата клавиша «TAB», что привело к выводу подсказки по возможным командам. Недостаток команды help восполняется авто- матически создаваемой подсказкой.
1.5 Графический интерфейс
Графическое окно в ROOT называется «канвой» (объект TCanvas). Можно от- крыть сколько угодно таких окон
// Создаём новую канву E1 .
r o o t [ 1 1 ] TCanvas ∗E1=new TCanvas ( "E1" )
// Создаём новую канву c f u n c .
r o o t [ 1 2 ] TCanvas ∗ c f u n c=new TCanvas ( "func" )
// Переходим в канву E1 .
6

1 Runing ROOT
htemp
Entries
513
Mean
1.333
RMS
0.173
E1
0.6
0.8
1
1.2
1.4
1.6
1.8
2
0
5
10
15
20
25
30
35
40
htemp
Entries
513
Mean
1.333
RMS
0.173
E1 {E1<2.&&f1==-11&&f2==11}
-10
-8
-6
-4
-2
0
2
4
6
8
10
0.2
0.4
0.6
0.8
1
1.2
0.1+(sin(x)/x)^2
-10
-8
-6
-4
-2
0
2
4
6
8
10
-1
10
1
0.1+(sin(x)/x)^2
Рис. 1.2. Примеры графического представления гистограммы (канва E1) и функции
(канва cfunc)
r o o t [ 1 3 ] E1−>cd ( ) Рисуем гистограмму по параметру E1 с условием .
r o o t [ 1 4 ] t r e e −>Draw ( "E1" , "E1<2.&&f1==−11&&f2==11" )
// Переходим в канву c f u n c .
r o o t [ 1 5 ] cf unc−>cd ( Делим канву c f u n c на две части по Y.
r o o t [ 1 6 ] cf unc−>Divide ( 1 , 2 )
// Создаём функцию .
r o o t [ 1 7 ] TF1 f 1 ( " d i f r " , "0.1+( sin (x)/x)∗∗2" , −10 ,10)
// Переходим в верхнюю половину канвы c f u n c .
r o o t [ 1 8 ] cf unc−>cd ( 1 Отображаем функцию .
r o o t [ 1 9 ] f 1−>Draw ( )
// Переходим в нижнюю половину канвы c f u n c .
r o o t [ 2 0 ] cf unc−>cd ( 2 )
r o o t [ 2 1 ] f 1−>Draw ( Устанавливаем для нижней половины канвы c f u n c
// логарифмический масштаб для оси Y.
r o o t [ 2 2 ] cf unc−>cd(2)−>SetLogy ( Из канвы c f u n c создаём векторный файл .
r o o t [ 2 3 ] cf unc−>P r i n t ( "root−cfunc . eps" Из канвы E1 создаём растровый файл .
r o o t [ 2 4 ] E1−>P r i n t ( "root−E1. png" В отличии от своего предка PAW ROOT позволяет интерактивно менять параметры картинки с помощью по правому клику выпадающих меню. В зависимости оттого на какой объект направлен указатель мыши тип меню меняется. Также с помощью левой кнопки можно изменять интерактивно масштаб графика. Для возврата в исходное состоянии вменю относящееся к выбранной оси следует выбрать команду UnZoom.
7

1 Runing Не стоит этим увлекаться, так как кажущаяся простота интегрально увеличивает время, потраченное на создание картинок. В отличии от набранных команд,
движение и клики мыши сохранить для повторного использования не возможно,
точнее неосмысленно Базовые объекты унаследовал все базовые объекты анализа, которые были в PAW. Нов отличии от PAW ROOT не ограничивается исключительно анализом. Примером такого подхода, например, служит включение в пакет операций для работы с матрицами (линейная алгебра) и базовых средств для манипуляции объектов отображение физических объёмов). ROOT претендует на нечто большее, чем быть просто пакетом анализа, но всё-же в этом разделе будут перечислены только те объекты, которые могут пригодиться для представления данных Гистограммы
Гистограмма является одним из основных объектов анализа. По сравнению св было добавлено больше типов гистограмм. Конструктор гистограмм имеет вид TH1F. Для двумерной гистограммы вместо 1 надо подставить 2, а для трёхмерной (да, такие тоже есть, правда непонятно каких смотреть) — 3. F означает что на один бин используется Float_t, аналогично возможны и другие типы переменных для хранения значения в бине.
// Создаём новую канву .
r o o t [ 2 5 ] TCanvas ∗ ch=new TCanvas ( "Hist␣Test" , "Hist" )
// Создаём гистограмму в 100 бинов от −3. до 3 .
r o o t [ 2 6 ] TH1F ∗h = new TH1F( "h" , "Hist␣Test" , 1 0 0 , − 3 . , 3 . Обычно гистограммы заполняются с помощью метода F i l l .
r o o t [ 2 7 ] h−>F i l l («TAB»
Int_t F i l l ( Double_t x )
Int_t F i l l ( Double_t x , Double_t w)
Int_t F i l l ( const char ∗ name , Double_t Номы сейчас идём другим путём а ) создаём функцию G,
r o o t [ 2 8 ] TF1 ∗ f u n c = new TF1( "G" , "exp(−x∗∗2)" , −3 б ) заполняем гистограмму случайным образом
//
по форме функции G.
r o o t [ 2 9 ] h−>FillRandom ( "G" ,1 0 0 0 Меняем цвет гистограммы .
r o o t [ 3 0 ] h−>S e t F i l l C o l o r ( 4 5 )
// Подгоняем гистограмму распределением Гаусса r o o t [ 3 1 ] h−>F i t ( "gaus" )
8

1 Runing ROOT
h
Entries
1000
Mean
0.007758
RMS
0.6729
/ ndf
2
χ
61.19 / 61
Constant
1.43
±
35.24
Mean
0.02157
±
0.03841
Sigma
0.0164
±
0.6432
-3
-2
-1
0
1
2
3
0
5
10
15
20
25
30
35
40
h
Entries
1000
Mean
0.007758
RMS
0.6729
/ ndf
2
χ
61.19 / 61
Constant
1.43
±
35.24
Mean
0.02157
±
0.03841
Sigma
0.0164
±
0.6432
Hist Test
Рис. 1.3. Пример подогнанной гистограммы.
//Сохраняем полученную картинку .
r o o t [ 3 2 ] ch−>P r i n t ( "root−histexample . eps" Подгонкой заведует всё тот-же Minuit, что были в PAW, правда переписанный на C++. Алгоритмы не поменялись Деревья
Деревья (tree) в ROOT — это логичное развитие идеи ntuple. ntuple, по сути дела, был таблицей со столбцами переменных типа float. В случае деревьев этого ограничения не существует, ив дереве можно сохранять любые объекты.
time
1100
1105
1110
1115
1120
1125
1130
1135
6
10
×
avg
0.74
0.76
0.78
0.8
0.82
0.84
avg:time {H>0.1}
Рис. 1.4. Графическое представление дерева lkravg. Видно, что красные точки в среднем ниже чёрных, что и требовалось доказать Создаём файл на диске .
r o o t [ 3 3 ] TF ile ∗ f = new TFile ( "lkravg . root" , "RECREATE" Заводим новое дерево TTree ( "lkravg " , "LKr␣degrad" )
9

1 Runing Считаем файл l k r a v g . d a t − тот самый , что "мучили" в
//статье про PAW
r o o t [ 3 5 ] Long64_t n l i n e s = l k r a v g −>ReadFile ( "lkravg . dat" ,
// список переменных "time : run : avg : avg_er :P:H" )
r o o t [ 3 6 ] co ut << "Number␣of ␣ l i n e s : ␣" << n l i n e s << e n d l
//Рисуем картинку : чёрные маркеры − есть магнитное поле ,
// красные маркеры − нет магнитного поля .
r o o t [ 3 7 ] l k r a v g −>Set Ma r ker St yle ( 5 )
r o o t [ 3 8 ] l k r a v g −>Draw ( "avg : time" , "H>0.1" )
r o o t [ 3 9 ] l k r a v g −>SetMarkerColor ( kRed )
r o o t [ 4 0 ] l k r a v g −>Draw ( "avg : time" , "H<=0.1" , "same" )
//Пишем д е р е в о в файл и закрываем файл .
r o o t [ 4 1 ] l k r a v g −>Write ( ) ;
r o o t [ 4 2 ] f −>Clo se ( ) ;
// Теперь этот файл можно открыть r o o t [ 4 3 ] TF ile ∗ f 2 = new TFile ( "lkravg2 . root" и посмотреть что в нём есть − дерево сохранилось .
r o o t [ 4 4 ] . l s
TF ile ∗∗
l k r a v g 2 . r o o t
TF ile ∗
l k r a v g 2 . r o o t
KEY: TTree l k r a v g ; 1
LKr Весть множество способов как создать и заполнить дерево. Подробности лучше посмотреть в пользовательской документации Функции
Как ив весть мощная поддержка функций как объектов. С помощью метода Fit можно подогнать гистограмму или график. Но до этого следует определить функцию, например, так:
//Файл mandel . c x x Множество Мандельброта
Double_t mandel ( Double_t ∗XP, Double_t ∗ par ) {
const Int_t nmax=30;
Double_t xx =0. , yy =0. , t t , x , y ;
x=XP [ 0 ] ; y=XP [ 1 ] ;
for ( Int_t n=1;nt t=xx ∗xx−yy∗yy+x ;
yy =2.∗ xx∗yy+y ;
xx=t t ;
i f ( xx∗xx+yy∗yy >4.) break ;
}
return Double_t ( n )/ Double_t (nmax ) ;
}
10

1 Runing ROOT
-2
-1.5
-1
-0.5
0
0.5
-1
-0.5
0
0.5
1
mandel
-2
-1.5
-1
-0.5
0
0.5
-1
-0.5
0
0.5
1
0
0.2
0.4
0.6
0.8
1
mandel
mandel
-2
-1.5
-1
-0.5
0
0.5
-1
-0.5
0
0.5
1
0
0.2
0.4
0.6
0.8
1
mandel
Рис. 1.5. Примеры графического представления двумерной функции или гистограммы. Множество Мандельброта
Текст функции следует сохранить в файле mandel.cxx. После с ним можно работать из Загружаем описание функции mandel . c x x .
// Теперь можно обращаться к функции .
r o o t [ 4 5 ] . L mandel . cxx r o o t [ 4 6 ] TCanvas ∗cm=new TCanvas ( "mandelbrot" , "Mandelbrot" )
// Создаём объект двумерная функция TF2
r o o t [ 4 7 ] TF2 ∗ Mandelbrot=new
TF2( "Mandelbrot" , mandel , − 2 . 4 , . 8 , − 1 . 2 , 1 . 2 , 0 )
r o o t [ 4 8 ] cm−>Divide ( 2 , 2 )
r o o t [ 4 9 ] cm−>cd ( 1 )
r o o t [ 5 0 ] Mandelbrot −>SetNpx («TAB»
void SetNpx ( Int_t npx = 100)
// ∗MENU∗
// Увеличиваем число шагов отображения Как ив функции отображаются через гистограммы .
r o o t [ 5 1 ] Mandelbrot −>SetNpx ( 2 0 0 )
r o o t [ 5 2 ] Mandelbrot −>SetNpy ( 2 0 0 Контурное графическое представление .
11

1 Runing ROOT
r o o t [ 5 3 ] Mandelbrot −>Draw ( "cont" )
r o o t [ 5 4 ] cm−>cd ( 2 )
// Графическое представление в виде поверхность .
r o o t [ 5 5 ] Mandelbrot −>Draw ( "surf2" )
r o o t [ 5 6 ] cm−>cd ( 3 Множество Мандельброта в цилиндрических координатах .
r o o t [ 5 7 ] Mandelbrot −>Draw ( "surf4cyl" )
r o o t [ 5 8 ] cm−>cd ( 4 )
// Графическое представление в стиле LEGO.
r o o t [ 5 9 ] Mandelbrot −>Draw ( "lego" )
r o o t [ 6 0 ] cm−>P r i n t ( "root−mandel . eps" )
1.6.4 Графики
-1
-0.5
0
0.5
1
0
0.2
0.4
0.6
0.8
1
Graph
-1
-0.5
0
0.5
1
0
0.2
0.4
0.6
0.8
1
-1
-0.5
0
0.5
1
0
0.2
0.4
0.6
0.8
1
Рис. 1.6. Пример Следует обратить внимание на ещё один полезный класс объектов — TGraph. TGraph это графический объект, создаваемый из двух массивов одинаковой длины для оси абсцисс и оси ординат, соответственно o o t [ 6 1 ] Int_t n = 2 0 ;
r o o t [ 6 2 ] Double_t x [ n ] , y [ n ] ;
r o o t [ 6 3 ] for ( Int_t i =0; i end with ’} ’ , ’@’ : a b o r t > x [ i ]=( i −1 0 ) ∗ 0 .1 ;
end with ’} ’ , ’@’ : a b o r t > y [ i ]=x [ i ] ∗ ∗ 2 ;
end with ’} ’ , ’@’ : a b o r t > }
// Создаём график .
r o o t [ 6 4 ] TGraph ∗ g r = new TGraph ( n , x , y ) ;
r o o t [ 6 5 ] gr−>Draw ( "ACP∗" Если добавить ещё два массива ошибок, то это уже будет TGraphError. Графики можно подгонять точно также, как и гистограммы с помощью метода Fit.
12

1 Runing ROOT
3088
3090
3092
3094
3096
3098
3100
3102
3104
3106
3108
90
100
110
120
130
140
150
160
170
/ ndf
2
χ
37.58 / 9
GBEE
0.01745
±
0.3282
GammaEE
0.6759
±
3.932
/ ndf
2
χ
37.58 / 9
GBEE
0.01745
±
0.3282
GammaEE
0.6759
±
3.932
Graph
Рис. 1.7. Примеры TGraphError и подгоночной функции. большой, поэтому данные надо почистить Интерпретатор C++ (Интерпретатор С+ или CINT, который используется в ROOT был независимым проектом. Сейчас он является составной частью ROOT, но его можно использовать и отдельно. Домашняя страничка cint расположена там же, где и ROOT:
http://root.cern.ch/root/Cint.html
CINT охватывает примерно 95% конструкций ANSI C и 85% от C++. Следует понимать, что полное соответствие стандартам никогда не было основной целью. Не следует писать больших программ опираясь на интерпретатор, так как скорость выполнения команд уступает компилируемой версии программы примерно в десять раз. А где один порядок, там и два. Но для небольших скриптов для целей автоматизации анализа CINT вполне подходит, но для серьёзных целей надо писать обычные программы. Благо, абсолютно всё, что доступно в ROOT интерактивно,
доступно и через библиотечные вызовы. Так уж ROOT сделан.
Для внешних скриптов есть две полезные команды:
//Выполняем скрипт s c r i p t . c x x r o o t [ 6 6 ] . x s c r i p t . Загружаем функции , описанные в l i b . c x x r o o t [ 6 7 ] . L l i b . Одной из отличительных особенностей ROOT является возможность делать функции из внешних библиотек доступные для выполнения в скриптах CINT или интерактивно. Ниже будет приведён пример как подключить пользовательскую C- библиотеку.
Допустим существует библиотека в которой есть функции myfunc2(char*) и myfunc1()
, и которые необходимо экспортировать в среду ROOT. Для этого нужно создать заголовочный файл myfile.h примерно следующего вида:
/∗Файл m y f i l e . h ∗/
#i f d e f __cplusplus
13

1 Runing ROOT
extern "C" {
#endif extern void myfunc1 ( ) ;
extern int myfunc2 ( char ∗ ) ;
#i f d e f Пока всё как обычно. Для того чтобы экспортировать функции в ROOT, необходимо создать ещё один заголовочный файл myfileLinkDef.h (к myfile добавляется
LinkDef
):
/∗Файл m y f i l e L i n k D e f . h ∗/
#i f d e f __CINT__
#pragma l i n k C++ f u n c t i o n myfunc1 ( ) ;
#pragma l i n k C++ f u n c t i o n myfunc2 ( char ∗ ) Также можно экспортировать и структуры, подставив вместо слова function слово. После создания описанных заголовочных файлов необходимо сгенерить
«словарик»:
> r o o t c i n t −f m y f i l e D i c t . cxx −c m y f i l e . h myf ileL inkDe f . В результата будут созданы файлы myfileDict.h и Далее нужно собрать саму библиотечку. Пусть для простоты вся библиотека представляет из себя один файл myfile.c:
# Компилируем m y f i l e . c .
> g cc −c −fPIC m y f i l e . c
# Компилируем словарик .
> g++ −c −fPIC ‘ root −c o n f i g −−c f l a g s ‘ m y f i l e D i c t . cxx
# Создаём разделяемую библиотеку .
> g++ −sha r ed −o m y f i l e . so m y f i l e . o m y f i l e D i c t . Теперь эту вновь созданную библиотеку можно загрузить в ROOT для интерактивной работы o o t [ 6 8 ] gSystem−>Load ( "myfile" )
r o o t [ 6 9 ] myfunc1 ( )
r o o t [ 7 0 ] Int_t i c o u n t=myfunc2 ( " string" Это далеко не единственный способ подключить пользовательскую библиотеку к. Для компиляции скриптов можно использовать подсистему ACLiC.
P.S. Кроме CINT в среде ROOT можно использовать скрипты, написанные на или Ruby. И наоборот из этих языков можно общаться с библиотеками. К сожалению описание этих механизмов выходит за рамки этой статьи.
14

1 Runing ROOT
1.8 Заключение
В этой статье ROOT не описан — здесь только собраны какие-то штрихи к портрету. Для более подробного знакомства с этим программным продуктом настоятельно рекомендуется посетить http://root.cern.ch.
ROOT это непросто инструмент анализа — это среда для генерации таких инструментов. Он, возможно, неуклюжи избыточен, но гибок и очень легко расширяем.
Это не идеал, но идеал, скорее всего, будет на него похож.
15

Document Outline

  • Runing ROOT
    • Введение
    • Сравнение с PAW
    • Запускаем ROOT
    • <<Командная логика>>
    • Графический интерфейс
    • Базовые объекты
      • Гистограммы
      • Деревья
      • Функции
      • Графики
    • Интерпретатор C++ (CINT)
    • Заключение



Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал