Deprecated: Array and string offset access syntax with curly braces is deprecated in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/init.php on line 542
ja:root:wantto9 [GiriWiki]

ユーザ用ツール

サイト用ツール


ja:root:wantto9

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/parser/handler.php on line 1458

Warning: Declaration of syntax_plugin_note::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/lib/plugins/note/syntax.php on line 79

Warning: Declaration of syntax_plugin_note::render($mode, &$renderer, $indata) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/lib/plugins/note/syntax.php on line 101

treeからグラフを作る


TTree::GetSelectedRows()とかTTree::GetV1()とかの存在を初めて知ったのでメモ。
Rootのclass referenceの”How to obtain more info from TTree::Draw”のところに色々書いてある。

  tree->Draw("X:Y",Cut);//一旦Drawしておく (普段の二次元ヒストグラムを描く時とは順番が違うのに注意)
  const Int_t N = tree->GetSelectedRows();//Drawでselectionを通ったイベントの数を取ってくる
  TGraph *graph = new TGraph(N, tree->GetV1(), tree->GetV2());

TTree::GetV1() ~ TTree::GetV4() は、TTree::Draw(“V1:V2:V3:V4”,…) のV1,…,V4の Double_t 配列の先頭ポインタを返す。

あとでNを使って配列を作ろうとして、でも 
  const Int_t N = ... 
としたんで怒られるので
  static const Int_t N = ... 
としたら、 Error: No memory for static N\0\0  なんてエラーが出てきた。

結局、const Int_t N = ... のままにして、配列を宣言するところで、
  Double_t *X = new Double[N];
のように動的に確保することによって解決。
※最後にdeleteを忘れないように。

N of Selected raw > 1000000 となるときは

tree->SetEstimate(tree->GetEntries()+1);

または

tree->SetEstimate(−1);

を呼んでおけとある。

TTree::GetV1()などを変数で受けたい場合には

  Double_t *Val1 = tree->GetV1();

みたいにしておけばよいが、Val1は再びDrawが呼ばれたときに書き換わってしまう可能性があるため、注意が必要。 ポインタではなく値を渡すようにしていれば当然大丈夫。


パッとグラフっぽく見せたいだけなら、2次元ヒストグラムを描くノリでtreeのDrawオプションで“P”とか”PL”とかにすればいい。
Drawの第一変数で“Y:X”のように2変数を指定すると、 ”htemp”という名前のTH2Fと、 ”Graph”という名前のTGraphが生成されるようだ。 これを取ってくるには以下のようにすれば良い。

TGraph *graph = (TGraph*)gPad->GetPrimitive("Graph");

この辺りについて詳しくは、Drawした後に、

  TList *list = gPad->GetListOfPrimitives();
  list->Dump();

とかすれば見れる。

ちなみに、tree→Draw(“Y:X»hist”)みたいにしても、name=hist になるのはTH2Fの方のみで、TGraphの方はname=Graphのまま。

ja/root/wantto9.txt · 最終更新: 2018/11/07 06:18 by kota