HROOTを用いたplotツールの開発
ソースコード KAGRA DetCharグループで開発中の最新のmoduleはgithubから見ることができる PlotUtilsHROOT.hs
解決すべき問題点
1. TGraphを使ってplotしたときにline, width, color, Markerを変更するオプションが効かない
- これらを使うタイミングはROOTと同じ順序だと思って使ってみると、コンパイル時にエラーも出ず、実行時にもエラーは出ない しかし上記のオプションが効いている様子はない 具体的には サンプルコードを に置いた
2. TGraphで作ったグラフにLabelを付ける
- これはHROOTにこれらを追加するオプションを見つけられなかった 現状HROOT開発者の対応を待つか、こちらでどうにかするしかない
3. TH2Fでcontourの色合いを変更することができない
- 例えば、T-F平面で色合いがSNRを表す2次元のcontour mapを書いたときに、SNRの色合いを変更できない ROOTでそれを変更する関数は、
gStyle->SetPalette(1);
参考 : http://root.cern.ch/root/html/THistPainter.html 端山さんのMacでは上記のトラブルは起こっていないが、任意に色を変更することができないのは問題 サンプルコードは以下の場所にある
4.TApplication型の変数をdeleteできない
- plot関数を2度呼び出すと、tapplication型のtappを新規に宣言しようとする(newTApplication)
- しかしROOTはTApplication型の変数を1つのプログラムで1度しか使えないようになっているので エラーが出てプログラムが強制終了される
DetCharの記事にも書いた(2番目の項目) http://gwclio.icrr.u-tokyo.ac.jp/lcgtsubgroup/detectorcharacterization/2014/05/hrootplot4.html 解決方法としては、C言語でいうところのglobal変数としてTApplication型のtappを宣言する monadを使えば、それと同じことができるという記載を発見したので、現在monadについて理解を進めている
もう一つの解決策は、HROOTの開発者にdelete関数によってきちんとtappを削除できるようしてもらうことが考えられる。(HROOTの開発者には、この問題についてサンプルコードとともに伝えた。2014/6/20) 開発者の方から方からメールに返信があった。deleteがきちんとtappを削除しきっていない問題はROOT自身の問題なので、開発者側では対処できないとのこと。山本氏が作成したtapplicationをgrobal変数として定義して複数回callするc++のソースとともにメールの返信を行った(2014/6/30)
5. ROOTのリアルタイムプロットの関数を使いたい
- ROOTのTGraphを用いてプロットをするときに、 データ点を追加して行くと、以前からあるデータはそのままにして、追加されたデータ点のみを書き足すというかなり効率的な仕組みになっている。 現在詰まっている問題は、canvasを宣言し、run tapp 1として画面描写をすると自動的には画面をcloseすることができないため、次のデータを自動的に画面描写することができず、リアルタイムプロットができない。 この問題もサンプルコードとともに開発者にメールで伝えた。(2014/6/20)