この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
ja:root:wantto9 [2017/03/19 02:05] kota 作成 |
ja:root:wantto9 [2018/11/07 06:18] (現在) kota |
||
---|---|---|---|
ライン 3: | ライン 3: | ||
---- | ---- | ||
- | TTree::GetSelectedRows()とかTTree::GetV1()とかの存在を初めて知ったのでメモ。 | + | TTree::GetSelectedRows()とかTTree::GetV1()とかの存在を初めて知ったのでメモ。\\ |
+ | [[https://root.cern.ch/doc/master/classTTree.html|Rootのclass reference]]の”How to obtain more info from TTree::Draw”のところに色々書いてある。\\ | ||
+ | <code cpp> | ||
+ | tree->Draw("X:Y",Cut);//一旦Drawしておく (普段の二次元ヒストグラムを描く時とは順番が違うのに注意) | ||
+ | const Int_t N = tree->GetSelectedRows();//Drawでselectionを通ったイベントの数を取ってくる | ||
+ | TGraph *graph = new TGraph(N, tree->GetV1(), tree->GetV2()); | ||
+ | </code> | ||
+ | TTree::GetV1() ~ TTree::GetV4() は、TTree::Draw("V1:V2:V3:V4",...) のV1,...,V4の Double_t 配列の先頭ポインタを返す。 | ||
- | パッとグラフっぽく見せたいだけなら、2次元ヒストグラムを描くノリでtreeのDrawオプションで"P"とか”PL”とかにすればいい。 | + | <note> |
- | (これの場合、実体として存在するのはgraphじゃなくて2Dヒストグラムだが、Drawオプションでこう見せている?) | + | あとで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を忘れないように。 | ||
+ | </note> | ||
+ | N of Selected raw > 1000000 となるときは | ||
+ | tree->SetEstimate(tree->GetEntries()+1); | ||
+ | または | ||
+ | tree->SetEstimate(−1); | ||
+ | を呼んでおけとある。 | ||
+ | |||
+ | TTree::GetV1()などを変数で受けたい場合には | ||
+ | <code> | ||
+ | Double_t *Val1 = tree->GetV1(); | ||
+ | </code> | ||
+ | みたいにしておけばよいが、Val1は再びDrawが呼ばれたときに書き換わってしまう可能性があるため、注意が必要。 | ||
+ | ポインタではなく値を渡すようにしていれば当然大丈夫。 | ||
+ | |||
+ | ---- | ||
+ | パッとグラフっぽく見せたいだけなら、2次元ヒストグラムを描くノリでtreeのDrawオプションで"P"とか”PL”とかにすればいい。\\ | ||
+ | Drawの第一変数で"Y:X"のように2変数を指定すると、 | ||
+ | ”htemp”という名前のTH2Fと、 | ||
+ | ”Graph”という名前のTGraphが生成されるようだ。 | ||
+ | これを取ってくるには以下のようにすれば良い。 | ||
<code cpp> | <code cpp> | ||
- | tree->Draw("Y:X",Cut);//一旦Drawしておく | + | TGraph *graph = (TGraph*)gPad->GetPrimitive("Graph"); |
- | Int_t N = tree->GetSelectedRows(); | + | |
- | TGraph *graph = new TGraph(N, tree->GetV1(), tree->GetV2()); | + | |
</code> | </code> | ||
+ | |||
+ | この辺りについて詳しくは、Drawした後に、 | ||
+ | <code cpp> | ||
+ | TList *list = gPad->GetListOfPrimitives(); | ||
+ | list->Dump(); | ||
+ | </code> | ||
+ | とかすれば見れる。 | ||
+ | |||
+ | ちなみに、tree->Draw("Y:X>>hist")みたいにしても、name=hist になるのはTH2Fの方のみで、TGraphの方はname=Graphのまま。 | ||
+ | |||
+ | |||
+ |