仅绘制直方图

时间:2016-10-16 01:49:13

标签: c++ root-framework

绘制直方图的一部分(保留错误数据)的最佳方法是什么?

例如,我有一个大约16k箱的直方图,但我只想绘制12200-13500箱。然而,这个直方图是通过减去另外两个直方图得到的。因此它的错误数据与标准泊松误差数据不同(我假设!如果它没有,那么我还需要弄清楚如何正确地传播错误。)

我的方法是:

TH1D noBgCounts(counts - bgcounts);
auto noBgCounts_plot = new TH1D("Plot", titleString.c_str(), end_bin - start_bin, start_bin, end_bin);
for (int i = 0; i < end_bin - start_bin; ++i) {
  noBgCounts_plot->SetBinContent(i, noBgCounts.GetBinContent(start_bin+i));
}

然后绘制noBgCounts_plot,但我合理地肯定地看着GetBinContent的返回类型,这不会保留错误,所以我留下了标准的sqrt错误。

我还需要为这个数据修改高斯(noBgCounts_plot),高斯使用二进制文件上的错误来制定其参数的错误吗? (我假设如此!)如果是这样,我如何只适合直方图的一部分?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

SetBinContent的参数和GetBinContent的返回值实际上只是float / double,因此您只复制每个直方图bin的中心值。如果您还想复制错误,则可以使用SetBinErrorGetBinError

在您的情况下,所有垃圾箱彼此相邻,您最好使用TAxis::SetRangeUserSetRange

TH1F* h = new TH1F("h","H",100,-5,5);
for (int i = 0 ; i < 1000; i ++) {
   h->FillRandom("gaus");
}
h->Draw();
h->GetXaxis()->SetRangeUser(-3,-1); // only draw axis range from -3 to -1
h->GetXaxis()->SetRange(10,15); // only draw bins 10 to 15
h->Draw();

当拟合TH1::Fit (TF1 *f1, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)时,参数xmin和xmax`设定你的拟合范围。