C++ 创建一个TH2,其中包含给定容器中变量的标准偏差

C++ 创建一个TH2,其中包含给定容器中变量的标准偏差,c++,histogram,mean,standard-deviation,root-framework,C++,Histogram,Mean,Standard Deviation,Root Framework,我有一个粒子探测器中事件位置的XY图,这些事件有几十个变量来表征它们。以能量为例:我可以通过在根中制作三个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,

我有一个粒子探测器中事件位置的XY图,这些事件有几十个变量来表征它们。以能量为例:我可以通过在根中制作三个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
得到每个箱子的平均能量,我将其放入
h_avg
。我在根命令行上执行所有这些操作,因此很容易:

tree->Draw("energy>>h_xy","","colz")

然后从直方图中提取信息下一步,除了平均值之外,我希望能够绘制每个箱子中权重的标准偏差。我知道我可以通过编写一个编译脚本来实现这一点,但我想知道是否有一种简单的方法来实现我没有想到的命令行。

与您现有的命令类似,您可以在另一个直方图
hxyww
中填充能量平方为weights的能量。然后将
h_xyww
除以
h_xy
(平均平方能量),将直方图与自身的平均能量相乘(平均能量的平方),然后将两者相减

std_dev^2 = <E^2> - <E>^2
std_dev^2=-^2

啊,这太简单了!我完全忽略了标准偏差的定义——专注于每个事件的总和。这正是我需要的,谢谢!你是怎么把两个希氏图除法的?你需要做一个循环来进行除法,还是用命令行来完成?谢谢。@HuanianZhang(这对您来说可能太晚了),但TH2继承了TH1和TH2的所有方法。