ROOTでのフォントの大きさを絶対値で指定する

ROOTで図を書くときはフォントサイズを直接指定できないため、その大きさをコントロールするのが結構面倒。ちょっと調べてみたので、メモを残しておく。基本的には、ヘルプページのTAttTextの項に書いてある。

https://root.cern.ch/root/html/TAttText.html

フォントは以下のように指定する。

Text font code = 10*fontnumber + precision

''fontnumber''で(僕が)がよく使うのは、以下の4つ(なんでこんな順番なんだろう)。

13: Times normal
2:  Times bold
4:  Helvetica normal
6:  Helvetica bold

"precision"が曲者で、以下の4つが指定できる。

precision = 0 : fast hardware fonts (steps in the size)
precision = 1 : scalable and rotatable hardware fonts (see below)
precision = 2 : scalable and rotatable hardware fonts
precision = 3 : scalable and rotatable hardware fonts. Text size is given in pixels.

普段の解析のときは''precision=2''を使えば良い。この場合、現在のTPadの縦横のうち「短いほう」に対する相対的な大きさでフォントの大きさを指定することになる。つまり、縦横短いほうの4%の大きさのフォントにしたい場合はSetTextSize(0.04)のようにすれば良い。マウスでTCanvasの大きさを変更すればその挙動がだいたいわかるはず。

論文で使うときは''precision=3''を使う。この場合は、フォントの大きさがピクセル単位の絶対値で指定される。フォントの大きさはキャンパスの大きさに依らないので、例えば図中のinsetのような小さな図でも元の図とフォントの大きさを同じにできる。元のフォントサイズが0.04とか小さい数になっているので、precisionを変更したら同時にフォントサイズを指定するのも忘れないように。あとは、LaTeXで図を取り込む際のスケールを固定しておけば、どんな大きさの図でもフォントの大きさを同じにすることができる。

ROOTの図に文字を書く

ROOTで図に文字を入れたいときは、TLatexを使うのがよさそう。文字毎にポインタを作らなくても、TLatex::DrawLatex()を使えば表示するときに新しいポインタを作ってくれるので、フォントの設定や傾き等を毎回指定しなくてすむ。

ROOTのフォントのアライメントはTLatex::SetTextAlign(Short_t)で指定する。どんな場所に表示されるのかは以下のURLにわかりやすい図があった。参考にしながら同じものを作ってみた。

http://ryukyu.astr.tohoku.ac.jp/pukiwiki/index.php?Members%2Fchinone%2F%B3%D0%BD%F1%2FROOT%2F%B3%D0%BD%F1#c596518d

文字の回転は、TLatex::SetTextAngle(Float_t)で角度(deg)を指定する。回転の基準点は文字の位置を指定した場所。

文字の大きさは、TLatex::GetXsize(), TLatex::GetYsize()などで拾える。ただし、上記のTextAngle()で指定した回転は考慮されない。文字と図が重なった場合に背景にある部分を消したい場合は、(プレゼンソフトによくあるような)文字の背景の塗りつぶしのようなものは指定できないので、このGetXsize()とGetYsize()でサイズを測定の上別途TBoxを作ってその上に文字を書くしか今の所方法が思いつかない。