DanDyのTechブログ

DanDyのtechブログ

スキルアップのためにブログ執筆中です。

【C++/jupyter】jupyterのC++カーネルをROOT6から引っ張ってくる

以前はXeus-Clingを入れていましたが、ROOT6でうまくできたのでそのメモ。

はじめに

以前書いたXeus-Clingについての記事はこちら
dandy-tech.hatenablog.jp

今回ROOT6のC++カーネルが使えるようになったため、ROOTのクラスも利用して描画することができるようになりました。

インストール

pyenvでanaconda3がすでにインストールされてることを前提としています。

今回のversion
Ubuntu 18.04 @WSL
anaconda3-5.3.0
ROOT6-18.0


公式のドキュメントはこちら
github.com


まず以下をターミナルで実行

$ root --notebook

WSLで実行すると管理者権限のポップアップがwindows側で出てくるので「はい」を選択。

次にmetakernelをインストール。pyenvを使っているのでcondaでインストールしました。

$ conda install metakernel

次に

$ jupyter kernelspec list

でpython3のカーネルがあるディレクトリを確認します。

おそらくpython3は

/home/username/.pyenv/versions/anaconda3-5.3.0/share/jupyter/kernels/

内にカーネルがあると思います。

確認ができたらroot --notebookの設定をjupyter notebook引き継がせるために公式のドキュメントに従って以下を実行

cp -r $ROOTSYS/etc/notebook/kernels/root /home/username/.pyenv/versions/anaconda3-5.3.0/share/jupyter/kernels/

これで実装は完了

テスト

$ jupyter notebook

c++kernelのnotebookを新規作成します。

セルの中に以下のコードを記述し、runさせてみましょう。

TCanvas c;
TH1F h("h","ROOT Histo;X;Y",64,-4,4);
h.FillRandom("gaus");
h.Draw();
c.Draw();

うまくいくと、このようになります。

gist24260bcc1f102fedb93d2cc870687ffd

終わりに

Xeus-Clingも便利そうですが、ROOTをメインに使うことが多いので解決してよかったです。