c++ - 根中的空 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();
}
解决方案
我怀疑你在调用错误的构造函数
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);
推荐阅读
- c++ - 链表上的合并排序
- python - 如何在 1 个 DataFrame Pandas 中比较 3 个 DataFrame
- node.js - 无法使用 zlib 模块解压缩压缩文件
- python - 在 Bernoulli NB 用于分类特征和 Gaussian NB 用于数值特征的一个数据集上实现混合朴素贝叶斯
- sql - 识别实体之间的关系
- sql - SQL - 部分根据另一个表选择行
- reactjs - Reactjs中的自动递减文本区域
- vb.net - 如何删除处理程序事件?
- php - PHP 警告:PHP 启动:无法加载动态库“session.so”
- python - 如何在 Python 中引发 JSONDecodeError