CERN ROOT資料分析工具基本介紹

ROOT是由歐洲核子研究組織 (CERN) 所開發以C++物件導向為基礎的資料分析套件。該套件原先主要設計於粒子物理實驗資料大數據分析所用,後來亦漸漸加入各種圖表製作功能,因此也吸引了其他科學研究領域做為資料分析使用。ROOT套件提供的功能包含有Histogram、curve fitting、data analysis等資料分析及圖表製作功能(請參考下圖),另外也提供函式繪圖功能,並且支援輸出為LaTeX、3D圖表,及動態修改圖表內容等功能,相當適合於各式資料的處理應用。本文將介紹ROOT安裝及其基本功能,希望可以提供讀者入門參考。

一、ROOT安裝

ROOT可安裝於Linux、Mac或Windows等作業系統,因此使用者可依自己的使用環境來下載安裝ROOT。由於Windows目前只提供測試版,因此本文先以Linux系列的Ubuntu為例介紹其安裝步驟,其他作業系統安裝步驟可參考ROOT install 網頁。Ubuntu安裝步驟如下:

  1. 安裝所需套件:
    • make:for /usr/bin/make
    • cmake3:for /usr/bin/cmake3
    • gcc-c++:for for /usr/bin/g++ (ROOT 6 requires g++ 4.8 or clang 3.4; for SLC5/SLC6)
    • gcc:for /usr/bin/gcc
    • binutils:for /usr/bin/ld
    • libX11-devel:for usr/include/X11/Xlib.h and for /usr/lib/libX11.so
    • libXpm-devel:for /usr/include/X11/xpm.h and for /usr/lib/libXpm.so
    • libXft-devel:for /usr/include/X11/Xft/Xft.h and for /usr/lib/libXft.so
    • libXext-devel:for /usr/include/X11/extensions/shape.h and for /usr/lib/libXext.so
    • python: (ROOT6 requires version >= 2.7)
    • openssl-devel:for /usr/include/openssl/pem.h and /usr/lib/libssl.so and /usr/lib/libcrypto.so

可參考下列指令安裝:

2.下載ROOT安裝程式,解壓縮,並以source指令執行thisroot.sh。

可參考下列指令操作:

上述步驟完成後,在作業系統命令列輸入root,即可進入ROOT命令模式,開始使用ROOT。

如要離開ROOT,指令為 .q。

 

二、ROOT基本功能介紹

接下來我們參考ROOT網站所提供的使用手冊來跟大家介紹ROOT的一些基本功能。

(一) 執行C++程式碼

由於ROOT源自C++,所以使用相同的C++語法即可於ROOT進行運算。當我們進入ROOT命令模式後,你可以輸入任何的C++程式碼,並執行程式。如下面範例,我們輸入”cout << ”Hello ROOT!\n””指令,按Enter後,畫面即列印輸出”Hello ROOT!”。

注意,ROOT不需要使用include指令,ROOT會自動#include幾乎所有的標準函式庫(包括vector, algorithm, tuple 等等)並自動加入using namespace std。

(二) 執行C++巨集

ROOT亦可執行C++巨集,方便我們執行指令較長的功能。執行巨集的步驟為,

首先我們先利用文字編輯器製作C++巨集並命名存成.c檔。注意檔案名稱需與所命名的函式名稱相同,如本例我們需將其取名為MacroName.c。

然後我們可以在ROOT命令模式透過 .x指令來執行 .c巨集檔案。

或者我們也可以直接在作業系統命令提示字元下輸入下列命令來執行巨集。

(三) 繪製函數圖形

接下來我們來看如何使用ROOT繪製函數圖形。步驟為:先利用TF1類別先產生函數物件,再利用該物件的Draw函式即可繪製函數圖形。請參考如下程式範例。在本例中我們先建立名稱為f1的TF1類別物件,參數帶入所欲繪製的函數(本例為 sin(x)/x)及其變數x的範圍(0,10)。接下來我們就可以使用f1.Draw() 指令來繪製我們的函數圖形。

執行後,系統會自動開啟另一視窗繪製函數圖形,請見下圖。

點擊視窗左上角的File->Save 即可將圖案儲存,可存成不同格式,包含.jpg, .pdf或.c等。該檔案會存到當前工作目錄下。

(四) 繪製實驗數據圖

ROOT也可以繪製實驗數據的關係圖。請參考下列程式範例,我們利用TGraphErrors類別建構物件gr,參數代入我們的實驗數據檔案ExampleData.txt(本例資料格式為四欄數據,分別代表x,y,dx,dy,後兩者分別為x,y的誤差)。最後再用物件的Draw() 函式即可繪圖。

下圖為執行結果。

(五) Histograms

接下來我們來介紹製作Histogram圖,即數據分佈統計圖,請參考下面程式範例。在本範例中,我們使用TH1F類別,其中類別名稱TH1F中的H即代表Histogram,F代表數據類型為浮點數(float)。接下來我們來看下面程式碼。在第1-3行我們先利用前面介紹的TF1類別來產生名稱為efunc的指數函數,做為後續取亂數的分佈機率,在第4行我們宣告TH1F物件h,並設定資料範圍在0到5之間,100代表期間包含100 個等分。在第5行,我們利用迴圈及efunc.GetRandom() 產出1000個亂數資料當作我們的數據資料,並利用h.Fill() 將該些數據資料代入物件h。最後呼叫h.Draw()來繪製這些數據的分佈統計圖。

下圖為執行結果。由於本例我們是利用亂數產生數據,所以每次執行的結果會有所不同。

在上例中,圖中的數據是由亂數產生的。如果我們想輸入真正的實驗數據來繪製分佈統計圖亦可。請參考下面的程式範例。我們假設實驗數據是放在檔案expo.dat。在本範例中,我們在程式第2-4行利用C++ 的IO指令將數據匯入變數x,再利用h.Fill() 將數據輸入至TH1F物件h,最後再呼叫h.Draw() 即可繪製實驗數據的分佈統計圖。

三、結語

ROOT還有提供其他豐富的資料處理與圖表繪製功能,其最大的特點在於其特殊的資料結構設計可供處理大量數據,也因此成為高能物理領域在分析粒子碰撞數據時不可或缺的資料處理工具。本文僅就其繪圖的基本功能做入門的介紹,讀者如果有興趣,可參考ROOT網站所提供的教學文件,相信一定可以有更大的收穫。

 

參考文獻

  1. CERN ROOT 網頁
  2. 用C++做資料分析 | CERN ROOT 教學[01] – 介紹

 

by 物理系圖書室