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

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

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

1. Xcode

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

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

2. ROOT

次に、ROOTを入れます。

  1. ROOTをダウンロードし、version numberをつけたフォルダーを~/local/root に下に置く。
    1. CERNのROOTのDownloadサイトから Pro versionを選び、Mac OS X用のBinary (.tar.gz)を選びます。 (以下の例では、10.12用のものをダウンロードしたと仮定します。 斜体のファイル名は読み替えてください。)
    2. 「ダウンロード」フォルダーにdownloadされたroot_v6.08.06.macosx64-10.12-clang80.tarをダブルクリックします。
    3. 展開された、「ダウンロード」フォルダーの中の「root」というフォルダーを、versionのついた名前 (例えば root_v6.08.06に改名します。
    4. ~/local/root というdirectoryを作ります。(Homeの下にlocalというフォルダー, localの下にroot というフォルダーを作る。)
    5. root_v6.08.06フォルダーを~/local/root の下に移動します。
  2. ~/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を入れたときにそれを試したり元に戻したりが簡単にできます。 (岩井君のお勧め)
  3. 必要な環境変数を設定する。
    ~/.bash_profile に次の行を追加します。
    . ~/local/root/pro/bin/thisroot.sh          (初めのピリオドを忘れぬよう)
    				
  4. Terminalのウィンドウを一旦閉じ、新たなTerminalのウィンドウを開きます。
  5. 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