【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は
/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をメインに使うことが多いので解決してよかったです。