0

我正在尝试从树中绘制 COLZ 图,即带有彩条的 2D 直方图,并且能够自己定义箱数。我的树被称为事件:

我试过了:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw("COLZ");

和:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100", "COLZ");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw();

但两者都不会绘制直方图。

这将绘制一个散点图:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw();

这将绘制一个 COLZ 图,但使用这种方法我无法自己定义 bin 大小:

 event->Draw("x:y", "x>100", "COLZ");
4

2 回答 2

3

我无法重现该问题,您的第一次尝试对我有用:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw("COLZ");

它也可以在一行中工作:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100", "COLZ");

在你的第三种情况下,如果hist1->Draw();绘制散点图,那么hist1->Draw("COLZ");也应该工作。你跑的方式完全一样吗?如果是这样,您能否提供一个最小、完整和可验证的示例

注意:结果不是hist1->Draw();散点图(ROOT 在这里有误导性),它是一个直方图,其中 bin 内容由点表示。例如,请参阅此图,您可以在其中猜测底层箱。

于 2019-03-08T20:32:45.117 回答
0

感谢您的回答 Keldorn,但问题出在我未发布的部分代码中。

我正在使用以下方式访问我的根文件:

 TFile f("file.root"); 
 TTree* event = (TTree*)f.Get("EventTree");

将其更改为:

TFile *f = new TFile("file.root");
TTree* event = (TTree*)f->Get("EventTree");

修复了我所有的直方图问题!

于 2019-03-13T16:55:10.763 回答