Root cern как задать массив примеры
Перейти к содержимому

Root cern как задать массив примеры

  • автор:

Root cern как задать массив примеры

The following script creates an array of pointers to graphs, then puts data into and does a pol1 fit for each graph.

If each graph is a TGraph, everything is fine.

If each graph is a TGraphErrors, then it fails. (To see this, comment out the five TGraph lines and introduce the corresponding TGraphErrors lines.)

Why is the behavior different? What is the right way to do this with TGraphErrors?

//TGraphErrors *gr[4];
TGraph *gr[4];

// gr[0]=new TGraphErrors(4,x[0],y[0],dx[0],dy[0]);
gr[0]=new TGraph(4,x[0],y[0]);
gr[0]->SetMarkerStyle(20);
gr[0]->SetMarkerSize(1.);
gr[0]->SetMarkerColor(1);
gr[0]->Draw(«AP»);
gr[0]->Fit(«pol1»);

// gr[1]=new TGraphErrors(4,x[1],y[1],dx[1],dy[1]);
gr[1]=new TGraph(4,x[1],y[1]);
gr[1]->SetMarkerStyle(20);
gr[1]->SetMarkerSize(1.);
gr[1]->SetMarkerColor(2);
gr[1]->Draw(«P»);
gr[1]->Fit(«pol1»);

// gr[2]=new TGraphErrors(4,x[2],y[2],dx[2],dy[2]);
gr[2]=new TGraph(4,x[2],y[2]);
gr[2]->SetMarkerStyle(20);
gr[2]->SetMarkerSize(1.);
gr[2]->SetMarkerColor(3);
gr[2]->Draw(«P»);
gr[2]->Fit(«pol1»);

// gr[3]=new TGraphErrors(4,x[3],y[3],dx[3],dy[3]);
gr[3]=new TGraph(4,x[3],y[3]);
gr[3]->SetMarkerStyle(20);
gr[3]->SetMarkerSize(1.);
gr[3]->SetMarkerColor(4);
gr[3]->Draw(«P»);
gr[3]->Fit(«pol1»);

Olivier Couet
2013-10-23 07:08:13 UTC

It looks like the minimizer is not the same in both cases.
May be Lorenzo can comment ?

Post by Stephen Pate
The following script creates an array of pointers to graphs, then puts data into and does a pol1 fit for each graph.
If each graph is a TGraph, everything is fine.
If each graph is a TGraphErrors, then it fails. (To see this, comment out the five TGraph lines and introduce the corresponding TGraphErrors lines.)
Why is the behavior different? What is the right way to do this with TGraphErrors?
thanks,
Steve Pate
void main() //TGraphErrors *gr[4];
TGraph *gr[4];
double x[4][4] = ;
double y[4][4] = ;
double dy[4][4] = ;
double dx[4][4] = ;
// gr[0]=new TGraphErrors(4,x[0],y[0],dx[0],dy[0]);
gr[0]=new TGraph(4,x[0],y[0]);
gr[0]->SetMarkerStyle(20);
gr[0]->SetMarkerSize(1.);
gr[0]->SetMarkerColor(1);
gr[0]->Draw(«AP»);
gr[0]->Fit(«pol1»);
// gr[1]=new TGraphErrors(4,x[1],y[1],dx[1],dy[1]);
gr[1]=new TGraph(4,x[1],y[1]);
gr[1]->SetMarkerStyle(20);
gr[1]->SetMarkerSize(1.);
gr[1]->SetMarkerColor(2);
gr[1]->Draw(«P»);
gr[1]->Fit(«pol1»);
// gr[2]=new TGraphErrors(4,x[2],y[2],dx[2],dy[2]);
gr[2]=new TGraph(4,x[2],y[2]);
gr[2]->SetMarkerStyle(20);
gr[2]->SetMarkerSize(1.);
gr[2]->SetMarkerColor(3);
gr[2]->Draw(«P»);
gr[2]->Fit(«pol1»);
// gr[3]=new TGraphErrors(4,x[3],y[3],dx[3],dy[3]);
gr[3]=new TGraph(4,x[3],y[3]);
gr[3]->SetMarkerStyle(20);
gr[3]->SetMarkerSize(1.);
gr[3]->SetMarkerColor(4);
gr[3]->Draw(«P»);
gr[3]->Fit(«pol1»);
>

Лекция 5. Начало работы с root

Рассмотренный в предыдущих лекциях пакет программ PAW реализован на языке программирования Fortran. PAW хорошо зарекомендовал себя в задачах, типичных для обработки данных ускорительного эксперимента, таких, например, как работа с гистограммами. Тем не менее, все возрастающая сложность экспериментальных установок и увеличение объема накапливаемых данных, требовала освоения научным сообществом новых, более эффективных инструментов обработки информации. Речь идет о языке С++, который к середине 90-х годов стал широко использоваться для создания коммерческих программных продуктов. Принципиальным отличием C++ от Fortran является поддержка объектно-ориентированного программирования (ООП). Сотрудники Европейской организации ядерных исследований CERN Рене Бран и Фонс Ридмайкерс в 1994 г. занялись исследованием возможностей C++ применительно к задачам ядерного эксперимента. Результатом этой работы явилось создание программного пакета ROOT. К настоящему времени ROOT претерпел впечатляющую эволюцию и стал по сути дела стандартным программным обеспечением, используемым для хранения и обработки данных ускорительного эксперимента, практически вытеснив PAW. Официальный Web-сайт проекта ROOT расположен по адресу http://root.cern.ch. На этом сайте содержится информация о текущем релизе. Наилучшим справочным материалом по ROOT является блестяще написанное руководство пользователя, которое доступно по адресу http://root.cern.ch/root/doc/RootDoc.html. Поскольку ROOT реализован на C++, то необходимо напомнить некоторые понятия этого языка, необходимые для практической работы. В самом общем виде идея ООП заключается в том, чтобы моделировать окружающий мир как совокупность взаимодействующих объектов. В С++ такой подход реализуется с помощью классов. Класс является типом данных, определяемым пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними. Таким образом, класс — это тип данных, который объединяет переменные и функции. Функции класса называются функциями-членами или методами. Переменные класса называются данными-членами или полями. Принадлежность метода DoSomething классу MyClass обозначается так: MyClass::DoSomething. Переменная соответствующего типа называется объектом, т.е. объект — это конкретный представитель, экземпляр данного класса. При работе с объектами часто используются указатели. Указателем называется переменная, в которой хранится адрес памяти, по которому располагается другая переменная. Тип указателя ― указатель на переменную данного типа. Создание и определение указателя часто осуществляется с помощью операции new: MyClass *pointer = new MyClass(…); Здесь с помощью операции new выделяется объем динамической памяти, необходимой для размещения переменной типа MyClass (т. е. объекта) и адрес этого участка памяти записывается в соответствующий указатель ― переменную pointer. Обращение к методам класса через указатель производится с помощью операции «-­>». Предположим, класс MyClass имеет метод DoSomething(…) (троеточие обозначает возможные параметры и опции этого метода). Тогда обращение к этому методу с помощью указателя pointer выглядит следующим образом: pointer->DoSomething(…); В случае работы непосредственно с объектом класса MyClass, обращение к методам производится через «.»: MyClass cl; cl.DoSomething(…); Перейдем теперь собственно к ROOT. Полное название этого программного пакета “An Object Oriented Data Analysis Framework” — объектно-ориентированная среда для анализа данных. ROOT реализован как набор библиотек классов, обеспечивающих необходимую функциональность: гистограммы, функции, графики, деревья и т. д. В рамках настоящего курса будут рассмотрены классы ROOT, обеспечивающие работу с гистограммами, функциями, файлами, графиками, деревьями. Описание классов ROOT для различных версий пакета находится по адресу http://root.cern.ch/root/Reference.html. Кроме того, в состав ROOT входит интерпретатор CINT, который воспринимает команды ROOT и выражения С/C++. Существует два варианта работы с ROOT. Первый состоит в том, чтобы работать с программой root.exe в сессионном режиме. Второй вариант заключается во включении библиотек классов ROOT в собственные программы. ROOT имеет принятые соглашения по наименованию различных типов переменных: имена классов начинаются с T TF1, TFile переменные типа «не класс» заканчиваются на _t Int_t поля начинаются с f fIntegral методы начинаются с прописной Fill(), Draw() константы начинаются с k kRed глобальные переменные начинаются с g gStyle В ROOT используются предопределенные машинно-независимые типы переменных. К наиболее употребляемым типам относятся: Char_t знаковый символьный 1 байт Int_t знаковый целый 4 байта Float_t вещественный 4 байта Double_t вещественный 8 байт Bool_t логический (0 ложь, 1 истина) Для начала работы в ROOT наберите в командной строке $ root Эта команда запустит интерактивную сессию работы с ROOT (при условии, что программа установлена и правильно настроены соответствующие переменные окружения). Для выхода из программы следует набрать root[] .q (далее root[] будет означать, что команды вводятся в командной строке ROOT). Как уже обсуждалось, ROOT имеет встроенный командный интерпретатор CINT. CINT воспринимает три типа команд. 1. Собственно команды CINT начинаются с «.» .? вывести список всех команд .L загрузить файл filename .x загрузить и выполнить файл filename 2. C/C++ выражения в соответствии с синтаксисом языка Int_t a = 8 a++ Int_t b=a*2 3. Команды SHELL начинаются с «.!» .! pwd Подобно командному интерпретатору ОС Linux, оболочка ROOT имеет встроенную историю команд, для навигации по которой следует использовать клавиши «вверх» и «вниз». Приведем пример простейшей сессии работы в ROOT: создания гистограммы, заполнения ее гауссовым распределением и рисования гистограммы. Сначала создадим объект класса TH1F и указатель h1 на этот объект: root[] TH1F *h1 = new TH1F(«h1», «Random gauss»,100,-2,2) Далее с помощью метода FillRandom заполним гистограмму значениями, распределенными по гауссу: root[] h1->FillRandom(«gaus», 1000) Нарисуем гистограмму: root[] h1->Draw() Обратите внимание на то, что интерпретатор CINT позволяет опускать точки с запятой после команд. Очевидно, работа в интерактивной сессии может быть полезна для небольших задач, поскольку каждый раз необходимые команды приходится набирать вручную (или отыскивать в истории команд). Для большей функциональности необходимо иметь возможность писать скрипты, т.е. последовательности команд, сохраненные в файле. В ROOT различается два типа скриптов: именованные и неименованные. Неименованные скрипты представляют собой простую последовательность команд для CINT, заключенную в фигурные скобки. Пусть файл MyMacro.C содержит следующий код: < #include using namespace std; for (Int_t i=0; i > Запуск такого скрипта в интерактивной сессии осуществляется командой .x: root[] .x MyMacro.C По умолчанию ROOT будет запускать скрипт из текущей директории или из директории $ROOTSYS/macros. В командной строке ROOT можно задать полное имя скрипта, который следует выполнить, например root[] .x /home/user2/rootscripts/MyMacro.C Теперь создадим скрипт, содержащий определение функции: void drawhist() < TH1F *h1 = new TH1F("h1","simplest histo",10,0,10); h1->Fill(3,3); h1->Fill(4,2); h1->Fill(5,1); h1->Draw(); > Такой скрипт является именованным. Прежде чем выполнить функцию drawhist(), нужно загрузить скрипт в память: root[] .L MyNamedMacro.C root[] main() Обратите внимание, что в отличие от работы в режиме интерактивной сессии, в скриптах требуется ставить точки с запятой после каждой команды, в соответствии с синтаксисом C/C++. Команды ROOT, которые будут приводиться далее в курсе, можно использовать как в режиме интерактивной сессии, так и в скриптах. В заключение следует упомянуть о возможности преобразования данных HBOOK/PAW в ROOT-файлы. Для этого в составе ROOT существует специальная утилита h2root. Эта утилита автоматически преобразует гистограммы, ntuples, содержащиеся в HBOOK-файле, в соответствующие объекты ROOT и записывает их в новый файл. Синтаксис утилиты h2root (в консольной строке ОС Linux) $ h2root где hbook file означает имя файла HBOOK, а root file имя выходного ROOT-файла.

22.08.2013 484 б 17 .listing

22.08.2013 38.4 Кб 22 Kal-plan.doc

22.08.2013 591.36 Кб 102 Konspekt.doc

22.08.2013 43.01 Кб 30 Literatura.doc

22.08.2013 8.45 Mб 83 Prezentaciya.ppt

22.08.2013 36.86 Кб 24 Programma.doc

22.08.2013 53.76 Кб 25 Scenarii.doc

22.08.2013 27.65 Кб 22 Temy_zadanij.doc

Ограничение

Для продолжения скачивания необходимо пройти капчу:

Root cern как задать массив примеры

Create TArrayF object and set array size to n floats.

Definition at line 34 of file TArrayF.cxx.

◆ TArrayF() [3/4]

TArrayF::TArrayF ( Int_t n,
const Float_t * array
)

Create TArrayF object and initialize it with values of array.

Definition at line 43 of file TArrayF.cxx.

◆ TArrayF() [4/4]

TArrayF::TArrayF ( const TArrayF & array )

Definition at line 52 of file TArrayF.cxx.

◆ ~TArrayF()

Definition at line 71 of file TArrayF.cxx.

Member Function Documentation

◆ AddAt()

void TArrayF::AddAt ( Float_t c,
Int_t i
)

Add float c at position i. Check for out of bounds.

Definition at line 93 of file TArrayF.cxx.

◆ Adopt()

void TArrayF::Adopt ( Int_t n,
Float_t * arr
)

Adopt array arr into TArrayF, i.e.

don’t copy arr but use it directly in TArrayF. User may not delete arr, TArrayF dtor will do it.

Definition at line 81 of file TArrayF.cxx.

◆ At()

Definition at line 78 of file TArrayF.h.

◆ Class()

Returns TClass describing this class

◆ Class_Name()

Returns Name of this class

◆ Class_Version()

Returns Version of this class

Definition at line 55 of file TArrayF.h.

◆ Copy()

Definition at line 42 of file TArrayF.h.

◆ DeclFileName()

Returns Name of the file containing the class declaration

Definition at line 55 of file TArrayF.h.

◆ GetArray() [1/2]

Definition at line 44 of file TArrayF.h.

◆ GetArray() [2/2]

Definition at line 43 of file TArrayF.h.

◆ GetAt()

Definition at line 45 of file TArrayF.h.

◆ GetSum()

Definition at line 46 of file TArrayF.h.

◆ IsA()

Returns TClass describing current object

Reimplemented in TH1F, TH1K, TH2F, and TH3F.

Definition at line 55 of file TArrayF.h.

◆ operator=()

TArrayF & TArrayF::operator= ( const TArrayF & rhs )

Definition at line 61 of file TArrayF.cxx.

◆ operator[]() [1/2]

Definition at line 84 of file TArrayF.h.

◆ operator[]() [2/2]

Definition at line 91 of file TArrayF.h.

◆ Reset() [1/2]

Definition at line 47 of file TArrayF.h.

◆ Reset() [2/2]

Definition at line 48 of file TArrayF.h.

◆ Set() [1/2]

Set size of this array to n floats.

A new array is created, the old contents copied to the new array, then the old array is deleted. This function should not be called if the array was declared via Adopt.

Definition at line 105 of file TArrayF.cxx.

◆ Set() [2/2]

void TArrayF::Set ( Int_t n,
const Float_t * array
)

Set size of this array to n floats and set the contents.

This function should not be called if the array was declared via Adopt.

Definition at line 132 of file TArrayF.cxx.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *