创建一个 TH2,其中包含给定 bin 中变量的标准差
Create a TH2 which contains the standard deviation of a variable in a given bin
我有一个粒子探测器中事件位置的 XY 图,这些事件有几十个表征它们的变量。以能量为例:我可以通过在 ROOT 中制作三个 TH2F 来找到探测器小区域中事件的平均能量:
TH2F* h_xy = new TH2F("h_xy","h_xy",100,-10,10,100,-10,10);
TH2F* h_xyw = new TH2F("h_xyw","h_xyw",100,-10,10,100,-10,10);
TH2F* h_avg = new TH2F("h_avg","h_avg",100,-10,10,100,-10,10);
我用分布在 xy 上的所有事件填充 h_xy
。直方图中的每个条目都加权为 1。然后,我用我所有的事件填充 h_xyw
,并按能量加权。 h_xyw
除以 h_xy
得到每个 bin 的平均能量,我将其放入 h_avg
。我在 ROOT 命令行上执行所有这些操作,因此非常简单:
tree->Draw("energy>>h_xy","","colz")
然后直接从直方图中提取信息。 下一步,除了平均值之外,我希望能够绘制每个箱子中权重的标准差。我知道我可以通过编写编译脚本来做到这一点,但我想知道是否有一种我只是没有想到的简单方法来完成这个命令行。
与您现有的命令类似,您可以用能量的平方作为权重填充另一个直方图 h_xyww
。然后将 h_xyww
除以 h_xy
(平均能量平方),将直方图与平均能量乘以自身(平均能量的平方),然后将两者相减。
std_dev^2 = <E^2> - <E>^2
我有一个粒子探测器中事件位置的 XY 图,这些事件有几十个表征它们的变量。以能量为例:我可以通过在 ROOT 中制作三个 TH2F 来找到探测器小区域中事件的平均能量:
TH2F* h_xy = new TH2F("h_xy","h_xy",100,-10,10,100,-10,10);
TH2F* h_xyw = new TH2F("h_xyw","h_xyw",100,-10,10,100,-10,10);
TH2F* h_avg = new TH2F("h_avg","h_avg",100,-10,10,100,-10,10);
我用分布在 xy 上的所有事件填充 h_xy
。直方图中的每个条目都加权为 1。然后,我用我所有的事件填充 h_xyw
,并按能量加权。 h_xyw
除以 h_xy
得到每个 bin 的平均能量,我将其放入 h_avg
。我在 ROOT 命令行上执行所有这些操作,因此非常简单:
tree->Draw("energy>>h_xy","","colz")
然后直接从直方图中提取信息。 下一步,除了平均值之外,我希望能够绘制每个箱子中权重的标准差。我知道我可以通过编写编译脚本来做到这一点,但我想知道是否有一种我只是没有想到的简单方法来完成这个命令行。
与您现有的命令类似,您可以用能量的平方作为权重填充另一个直方图 h_xyww
。然后将 h_xyww
除以 h_xy
(平均能量平方),将直方图与平均能量乘以自身(平均能量的平方),然后将两者相减。
std_dev^2 = <E^2> - <E>^2