ARTEMISでHistogram IDからObjectを取得する(そして煮るなり焼くなりする)
ARTEMISの備忘録です。
ARTEMIS上でHistogramを書くとHistogram IDが振られているのが分かります。
artemis [n] ls
file.root
> 0 TH2F h1 x1:y1
1 TH2F h2 x2:y2
2 TH2F h3 x3:y3
...
ヒストグラムの欄は左からそれぞれ Hist ID, 型, Hist name(Object name), Histの式 となっております。 これらのヒストグラムはそれぞれオブジェクトになっていて、例えば
h1->Draw()
などとすると普通に描画が出来ます。 しかし、例えばこのオブジェクトをマクロに組み込んで処理するというのは通常の方法では困難です。
そこで、このオブジェクトを動的に取得してマクロに組み込もうという試みです。
実装
早速実装です。art::TCatHistManagerを使用します。ここでは例として、このHistogram Objectを配列に詰めるということをやります。ここまですればあとはマクロでFitする,Rebinする,Statの結果を配列に入れるなどなど、煮るなり焼くなり出来るわけです。
TH1D* hist[imax];
for(Int_t i = 0; i < imax; ++i)
(TH1D*)hist[i] = TCatHistManager::Instance()->GetObject(i);
これでHistogram IDがiであるもののObjectを配列として取得することが出来ます。 別に配列にする必要は必ずしもないとは思いますが、一例として。