-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreadTreeAndFillHistogram
More file actions
70 lines (57 loc) · 3.12 KB
/
readTreeAndFillHistogram
File metadata and controls
70 lines (57 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// 引入ROOT框架的核心头文件,用于处理文件、树、直方图和画布
#include "TFile.h"
#include "TTree.h"
#include "TH2D.h"
#include "TCanvas.h"
// 定义一个函数来读取TTree并填充二维直方图
void readTreeAndFillHistogram() {
// 1. 打开包含TTree的ROOT文件
// 将 "your_file.root" 替换为你的实际文件名
TFile *file = TFile::Open("/Users/enrich/Projects/newtest/AO2D_ST_merge.root");
if (!file || file->IsZombie()) {
std::cerr << "错误:无法打开文件!请检查文件路径和名称。" << std::endl;
return;
}
// 2. 从文件中获取名为 "O2hfstchbar" 的TTree
TTree *tree;
file->GetObject("DF_2336990794558240/O2hfstchbar", tree);
if (!tree) {
std::cerr << "错误:无法在文件中找到树 O2hfstchbar!" << std::endl;
file->Close();
return;
}
// 3. 打印树的结构信息以便确认(可选,用于调试)
tree->Print();
// 4. 声明变量来存储从树中读取的数据
Float_t fMassOmega;
Float_t fMassXi;
// 5. 将树的各个分支(branch)地址设置到我们声明的变量上
// 这样当读取树时,数据会自动填充到这些变量中
tree->SetBranchAddress("fMassOmega", &fMassOmega);
tree->SetBranchAddress("fMassXi", &fMassXi);
// 6. 创建一个二维直方图 (TH2D)
// "h2d", "fMassOmega vs fMassXi; fMassXi; fMassOmega" 是标题和轴标签
// 100, 1.66, 1.70 // fMassXi: 100个bins,范围建议根据实际数据调整(这里以Xi质量为中心)
// 100, 1.66, 1.70 // fMassOmega: 100个bins,范围建议根据实际数据调整(这里以Omega质量为中心)
TH2D *hist = new TH2D("h2d", "fMassOmega vs fMassXi; fMassXi [GeV/c^{2}]; fMassOmega [GeV/c^{2}]",
200, 1.27, 1.37, 200, 1.56, 1.77);
// 7. 获取树中的总条目数(事件数)
Long64_t nEntries = tree->GetEntries();
// 8. 循环遍历树中的所有条目(事件)
for (Long64_t i = 0; i < nEntries; i++) {
// 8.1 将当前条目数据加载到我们之前SetBranchAddress的变量中
tree->GetEntry(i);
// 8.2 (可选)可以在这里添加一些数据质量的筛选条件,例如:
// if (fMassOmega < 1.0 || fMassOmega > 2.0) continue; // 示例条件,请根据实际情况修改
// 8.3 用当前事件中的fMassXi和fMassOmega值填充二维直方图
hist->Fill(fMassXi, fMassOmega); // 注意顺序:Fill(x, y),这里假设fMassXi在x轴,fMassOmega在y轴
}
// 9. 创建一个画布来绘制并显示二维直方图
TCanvas *canvas = new TCanvas("canvas", "Canvas for 2D Histogram", 800, 600);
hist->Draw("COLZ"); // "COLZ" 选项表示用颜色表示密度,并绘制颜色刻度条
// 10. (可选)将直方图保存为图片或ROOT文件
canvas->SaveAs("Omega_Xi_Mass_Correlation.png");
hist->SaveAs("histogram.root");
// 11. 清理:关闭文件(注意:不要删除hist和canvas,它们现在由ROOT的垃圾回收管理,或者如果你需要进一步操作它们)
file->Close();
}