首页 > 解决方案 > 根中的空 TH2F 直方图

问题描述

我正在尝试从根文件中绘制二维,但由于某种原因而不是漂亮的图,我得到了一个包含 918 个条目的空白画布,平均 x = 0,平均 y = 47,并且两个标准偏差都等于 0 .我不知道为什么会这样,显然问题出在最后一行h1->Fill(xk,yk);,因为 cout 就在它工作之前。你能帮我弄清楚吗?

这是我的完整代码:

{
#include <iostream>
#include <vector>

using namespace std;

TFile f1("data1.root");
TFile f2("data2.root");

TTreeReader reader("T1", &f1);
TTreeReaderValue<Double_t> X(reader, "X"); 
TTreeReaderValue<Double_t> Y(reader, "Y");

TH2F* h1=new TH2F("h1"," ",10000,0,900,0,70);

vector<vector<Double_t>>v1;

while (reader.Next()) {
    //cout<<*X<<" "<<*Y<<endl;
    vector<Double_t>i;
    i.push_back(*X);
    i.push_back(*Y);
    v1.push_back(i);
}

for (int k=0;k<918;k++)
    {
        Double_t xk=v1[k][0];
        Double_t yk=v1[k][1];
        cout<<xk<<" "<<yk<<endl;
        h1->Fill(xk,yk);
    }

h1->Draw();
}

标签: c++root-framework

解决方案


我怀疑你在调用错误的构造函数

TH2F* h1=new TH2F("h1"," ",10000,0,900,0,70);

TH2F 的构造函数从这里获取 6 个数字参数(3 个用于 x 轴,3 个用于 y 轴)或指向数组的指针,您提供 5 个。

检查您创建的直方图:

root [2] h->GetXaxis()->GetNbins()
(int) 10000
root [3] h->GetYaxis()->GetNbins()
(int) 900

root [6] h->GetXaxis()->GetBinLowEdge(1)
(double) 0.0000000


root [10] h->GetYaxis()->GetBinLowEdge(1)
(double) 0.0000000
root [11] h->GetYaxis()->GetBinUpEdge(900)
(double) 70.000000

root [13] h->GetXaxis()->GetBinUpEdge(10000)
(double) 1.0000000

看起来重载分辨率选择的 x 轴实例与您的预期不同。我怀疑(根据您提供的数字)您错过了 y 轴的箱数:

TH2F* h1=new TH2F("h1"," ",10000,0,900,10000,0,70);

推荐阅读