ROOT, PyROOT, rootpy の Macへのインストレーション

[Home] / 教授でもできる．．． / <Anaconda Python] ROOT

# ROOT, PyROOT, rootpy の Macへのインストレーション

高エネルギーの分野などで解析に使うROOT、それをPythonから使えるようにするPyROOTの設定、
さらにPythonらしくROOTを扱うためのrootpyのインストールの仕方です。

## 1. Xcode

ROOTを走らせるためには、C++のコンパイラーなどが走る必要があり、そのためには
command line toolsが必要なのですが、
それだけでは不十分で、Xcodeが入っていないとROOTを走らせたときにエラーが出ます。もしまだXcodeを入れてない場合は、それを入れます。

アプリケーション フォルダーの中のApp Storeを立ち上げ、Xcodeをダウンロードします。
アプリケーション　フォルダーに入ったXcodeを一旦立ち上げると、必要な部品がinstallされます。
Xcodeを終了します。

## 2. ROOT

次に、ROOTを入れます。

ROOTをダウンロードし、version numberをつけたフォルダーを~/local/root に下に置く。

- CERNのROOTのDownloadサイトから
Pro versionを選び、Mac OS X用のBinary (.tar.gz)を選びます。
（以下の例では、10.12用のものをダウンロードしたと仮定します。
斜体のファイル名は読み替えてください。)
「ダウンロード」フォルダーにdownloadされたroot_v6.08.06.macosx64-10.12-clang80.tarをダブルクリックします。
展開された、「ダウンロード」フォルダーの中の「root」というフォルダーを、versionのついた名前
（例えば root_v6.08.06に改名します。
~/local/root というdirectoryを作ります。(Homeの下にlocalというフォルダー, localの下にroot というフォルダーを作る。）
root_v6.08.06フォルダーを~/local/root の下に移動します。
- ~/local/root/pro からリンクを張る。
Terminal を開き、次をタイプします。(v6.08.06は読み替えて下さい。)　proはないと文句を言われても、無視してくだい。

- $ cd ~/local/root
$ rm pro
$ ln -s root_v6.08.06 pro
- これにより、proからsymbolic linkが張られるので、
以降、~/local/root/pro をROOTのdirectoryとして参照することにします。
こうしておけば、新たなversionのROOTを入れたときにそれを試したり元に戻したりが簡単にできます。
(岩井君のお勧め)
必要な環境変数を設定する。
~/.bash_profile に次の行を追加します。
- . ~/local/root/pro/bin/thisroot.sh （初めのピリオドを忘れぬよう）
- Terminalのウィンドウを一旦閉じ、新たなTerminalのウィンドウを開きます。
Terminalから次のように打つと、ROOTが立ち上がり、図が描けるはず。
- $ root
root [1] TF1 *f1 = new TF1("f1", "sin(x)/x", -5, 5)
root [2] f1->Draw()
root [3] TH1F *h1 = new TH1F("h1", "h1 title", 100, -3, 3)
root [4] h1->FillRandom("gaus", 10000)
root [5] h1->Draw()
root [6] .q

## 3. PyROOT - IPython の中からROOT

上の1 の3のようにして環境変数(PYTHONPATH)を設定してあれば、
python の中からも、ROOTを使う事ができます。
(Enthought PythonやAnaconda Pythonだと、次のように文句を言われます。

≥ import ROOT as rt
Fatal Python error: PyThreadState_Get: no current thread
Abort trap: 6

そこで、Mac OS Xに標準で付いてくるPython (/usr/bin/python) を使います。例えば：

$ /usr/bin/python
>>> import ROOT as rt
>>> In [2]: f1 = rt.TF1('f1', 'sin(x)/x', -5, 5)
>>> In [3]: f1.Draw()
>>> In [4]: h1 = rt.TH1F('h1', 'h1 title', 100, -3, 3)
>>> In [5]: h1.FillRandom('gaus', 10000)
>>> In [6]: h1.Draw('hist')
>>> In [7]: ctrl/d

Pythonだと、作られた変数にその型の情報もついてくるので、新たな変数の型を指定したり、new とかをつけて
作成する必要はありません。

より詳しくは、マニュアルを参照のこと。

2017-06-30 Taku Yamanaka