c++ - T树对象;使用绘图选项来绘制差异直方图

标签 c++ data-analysis root-framework

此宏适用于 ROOT (cern) TTree对象。它的目的是显示一个直方图,并从中减去另一个。树木是 friend 。我正在尝试使用 Draw() 选项从一个直方图中减去另一个直方图;

tree1->Draw("hit_PMTid - plain.hit_PMTid");

但是它使错误的轴为负。结果看起来像;

oddly symmetrical graph

据我所知,这些图表的形状几乎相同,这显然是背靠背显示的。我怎样才能让它改变它减去的轴,从 x 到 y?

它可能不需要,但这是完整的宏;

void testReader3(){
  TFile * file1 = TFile::Open("alt4aMaskOutput.root");
  TTree * tree1 = (TTree*)file1->Get("HitsTree");
  tree1->AddFriend("plain = HitsTree", "plainMaskOutput.root");

  tree1->Draw("hit_PMTid - plain.hit_PMTid");
}

最佳答案

您给出的命令将为树的每个事件制作 hit_PMTidplain.hit_PMTid 变量之间差异的直方图。相反,如果您想逐个查看分布中的 bin 差异,则需要填充两个直方图,然后将它们相减(使用 TH1::Add)。正如您所说,您必须强制进行相同的装箱。这方面的一个例子是:

void testReader3(){
  TFile * file1 = TFile::Open("alt4aMaskOutput.root");
  TTree * tree1 = (TTree*)file1->Get("HitsTree");
  tree1->AddFriend("plain = HitsTree", "plainMaskOutput.root");

  // Draw the two histograms from the tree, specifying the
  // output histogram name and binning
  tree1->Draw("hit_PMTid>>hist1(100,0,6000)");
  tree1->Draw("plain.hit_PMTid>>hist2(100,0,6000)");

  // Retrieve the two histograms we just created
  TH1* hist1 = gDirectory->Get("hist1");
  TH1* hist2 = gDirectory->Get("hist2");

  // Subtract
  TH1* hist_diff = (TH1*) hist1->Clone("hist_diff");
  hist_diff->Add(hist2, -1);

}

关于c++ - T树对象;使用绘图选项来绘制差异直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31378559/

相关文章:

java - 如何从java调用C#函数

python - 将 C++ 转换为 pyroot : How to get a file object from a file in pyroot?

c++ - 为什么这个循环不加载正确的事件?

c++ - 如何遍历几个每小时的 ROOT (.root) 文件并将它们组合成更大的每日数据 .root 文件?

c++ - 如何特征默认构造函数是私有(private)的

c++ - 我需要包括什么才能使用 OpenClipboard()?

c++ - 模板类的接口(interface)

machine-learning - 为什么一种热门编码可以提高机器学习性能?

machine-learning - 我有两个计算 'cosine similarity' 的公式,有什么区别?

python - 如何使用 python pandas 库改变数据