本示例演示了如何在ntuple上使用高亮机制,hsimple.root中的ntuple是用三种不同选择绘制的,将鼠标移到两个1D表示上方,将在2D图上显示有助于突出显示的bin的事件。


下面介绍具体步骤:

  1. 定义全局变量:
TList *list1 = 0;
TList *list2 = 0;
  1. 设置InitGraphs函数:
void InitGraphs(TNtuple *nt, TH1F *histo)
{Long64_t nev = nt->GetSelectedRows();Double_t *px = nt->GetV1();Double_t *py = nt->GetV2();Double_t *pz = nt->GetV3();auto list = new TList();if      (histo->GetUniqueID() == 1) list1 = list;else if (histo->GetUniqueID() == 2) list2 = list;else  return;Int_t nbins = histo->GetNbinsX();Int_t bin;TGraph *g;for (bin = 0; bin < nbins; bin++) {g = new TGraph();g->SetName(TString::Format("g%sbin_%d", histo->GetName(), bin+1));g->SetBit(kCannotPick);g->SetMarkerStyle(25);g->SetMarkerColor(histo->GetLineColor());list->Add(g);}Double_t value = 0.0;for (Long64_t ie = 0; ie < nev; ie++) {if (histo->GetUniqueID() == 1) value = pz[ie];if (histo->GetUniqueID() == 2) value = px[ie]*py[ie]*pz[ie];bin = histo->FindBin(value) - 1;g = (TGraph *)list->At(bin);if (!g) continue; // under/overflowg->SetPoint(g->GetN(), py[ie], px[ie]); // reverse as px:py}
}
  1. 设置Highlight函数:
void Highlight3(TVirtualPad *pad, TObject *obj, Int_t xhb, Int_t yhb)
{auto histo = (TH1F *)obj;if(!histo) return;TCanvas *Canvas2 = (TCanvas *)gROOT->GetListOfCanvases()->FindObject("Canvas2");if (!Canvas2) return;TGraph *gcommon = (TGraph *)Canvas2->FindObject("Graph");if (!gcommon) return;TList *list = 0;if      (histo->GetUniqueID() == 1) list = list1; // case1else if (histo->GetUniqueID() == 2) list = list2; // case2if (!list) return;TGraph *g = (TGraph *)list->At(xhb);if (!g) return;TVirtualPad *savepad = gPad;Canvas2->cd();gcommon->Draw("AP");//gcommon->SetTitle(TString::Format("%d / %d", g->GetN(), gcommon->GetN()));if (histo->IsHighlight()) // don't draw g after highlight disabledif (g->GetN() > 0) g->Draw("P");Canvas2->Update();savepad->cd();
}
  1. 读取root文件:
auto dir = gROOT->GetTutorialDir();
dir.Append("/hsimple.C");
dir.ReplaceAll("/./","/");
if (!gInterpreter->IsLoaded(dir.Data())) gInterpreter->LoadMacro(dir.Data());
auto file = (TFile*)gROOT->ProcessLineFast("hsimple(1)");
if (!file) return;
  1. 获取ntuple:
TNtuple *ntuple;
file->GetObject("ntuple", ntuple);
if (!ntuple) return;
  1. 设置截断参数:
const char *cut = "pz > 3.0";
  1. 创建两块画布:
TCanvas *Canvas1 = new TCanvas("Canvas1", "Canvas1", 0, 0, 700, 500);
Canvas1->Divide(1, 2);
TCanvas *Canvas2 = new TCanvas("Canvas2", "Canvas2", 705, 0, 500, 500);
  1. 在第一块画布上方绘制histo1与pz的分布信息:
Canvas1->cd(1);
ntuple->Draw("pz>>histo1(100, 2.0, 12.0)", cut);
auto histo1 = (TH1F *)gPad->FindObject("histo1");
auto info1  = new TText(7.0, histo1->GetMaximum()*0.6,"please move the mouse over the frame");
info1->SetTextColor(histo1->GetLineColor());
info1->SetBit(kCannotPick);
info1->Draw();
  1. 在第一块画布下方绘制histo2与pxpypz的分布信息:
Canvas1->cd(2);
ntuple->Draw("(px*py*pz)>>histo2(100, -50.0, 50.0)", cut);
auto histo2 = (TH1F *)gPad->FindObject("histo2");
histo2->SetLineColor(kGreen+2);
auto info2 = new TText(10.0, histo2->GetMaximum()*0.6, info1->GetTitle());
info2->SetTextColor(histo2->GetLineColor());
info2->SetBit(kCannotPick);
info2->Draw();
Canvas1->Update();
  1. 设置Highlight:
histo1->SetHighlight();
histo2->SetHighlight();
Canvas1->HighlightConnect("Highlight3(TVirtualPad*,TObject*,Int_t,Int_t)");
  1. 在第二块画布上绘制graph信息:
Canvas2->cd();
ntuple->Draw("px:py", cut);
auto gcommon = (TGraph *)gPad->FindObject("Graph");
gcommon->SetBit(kCanDelete, kFALSE); // will be redraw
auto htemp = (TH2F *)gPad->FindObject("htemp");
gcommon->SetTitle(htemp->GetTitle());
gcommon->GetXaxis()->SetTitle(htemp->GetXaxis()->GetTitle());
gcommon->GetYaxis()->SetTitle(htemp->GetYaxis()->GetTitle());
gcommon->Draw("AP");
  1. 设置初始化graph(必须在最后一步):
ntuple->Draw("px:py:pz", cut, "goff");
histo1->SetUniqueID(1); // mark as case1
histo2->SetUniqueID(2); // mark as case2
InitGraphs(ntuple, histo1);
InitGraphs(ntuple, histo2);

代码地址:https://github.com/root-project/root/blob/master/tutorials/hist/hlHisto3.C

ROOT学习——ntuple中直方图的Highlight显示(hlHisto3.C)相关推荐

  1. ROOT学习——二维直方图的多种画法(draw2dopt.C)

    二维直方图是数据处理中最常用的存储类型,二维直方图的绘制在ROOT中也有很多种类型,本文通过ROOT官方教程的draw2dopt.C示例,来具体讲述ROOT框架中二维直方图的绘制类型. 下面给出具体代 ...

  2. WPF学习笔记(7):DataGrid中数字自定义格式显示

    WPF学习笔记(7):DataGrid中数字自定义格式显示 原文:WPF学习笔记(7):DataGrid中数字自定义格式显示 DataGrid中数据显示如下图,数据格式比较杂乱.希望达到以下要求:(1 ...

  3. QT学习之解决QT中QIcon图标不显示的问题

    QT学习之解决QT中QIcon图标不显示的问题 参考文章: (1)QT学习之解决QT中QIcon图标不显示的问题 (2)https://www.cnblogs.com/yang12318/p/1069 ...

  4. ROOT学习——一维直方图的条形图示例(hbars.C)

    条形图在日常统计数据时时常会用到,ROOT官方教程中给出了一个示例来讲述如何使用ROOT绘制条形图,绘制效果如下: 下面给出具体步骤: 首先打开tutorials / tree目录中的cernstaf ...

  5. OpenCV中直方图反向投影算法详解与实现

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自:opencv学堂 一:直方图交叉 OpenCV中直方图反向 ...

  6. youcans 的 OpenCV 学习课—2.图像读取与显示

    youcans 的 OpenCV 学习课-2.图像读取与显示 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 本节介绍图像的读取.保存和显示.除基本方法和例程外,还给出了从 ...

  7. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化

    本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...

  8. web前端培训:CSS中单行文本溢出显示省略号的方法

    CSS中单行文本溢出显示省略号的方法你知道吗?在web前端技术学习中,这个问题其实是属于老生常谈了,因为css单行文本的应用是非常频繁的,比如网站最基本的文章列表,标题会很长,而显示列表的区域宽度却没 ...

  9. php video标签使用方法,HTML_HTML5 video标签(播放器)学习笔记(一):使用入门,近有在学习html5中video标签(播 - phpStudy...

    HTML5 video标签(播放器)学习笔记(一):使用入门 近有在学习html5中video标签(播放器)的使用,这里做一些学习笔记,方便自己查阅和记录,本文是第一篇,将介绍的是使用该标签初始化该做 ...

最新文章

  1. asp.net2.0学习历程 菜鸟到中级程序员的飞跃
  2. [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I
  3. Leetcode: 4Sum
  4. testflight测试软件怎么,TestFlight使用步骤
  5. 接手一手机android app维护 如何快速进入,快速上手Android开发,学会这三点就够了!...
  6. 计算机视觉论文-2021-09-07
  7. 推荐三款U盘烧写工具
  8. 防抖和节流的区别是什么?防抖和节流的实现 详解!
  9. UOJ275 [清华集训2016] 组合数问题 【Lucas定理】【数位DP】
  10. 集团进口煤炭行业经历“冰火两重天”说明了啥?
  11. 初手学堂:跟我学习安装配置RedHat9.0
  12. Emitted value instead of an instance of Error-编译vue文件时出现的错误解决
  13. 字库点阵数据的竖置横排和横置横排区别
  14. Mybatis-X使用
  15. Jetson Nano复制系统和U盘启动【第三部分】
  16. C语言:简单的利润与奖金
  17. ai突破性技术_人工智能还没有突破
  18. 存储过程中的when others then 和 raise
  19. 文本文件编码与格式转换
  20. [职场全攻略] 【职场攻略】看透“潜”职场规则

热门文章

  1. SWARD Camera Calibration Toolbox
  2. paypal braintree支付对接
  3. C# WPF 歌词控件(支持逐字定位描色效果)
  4. 打印机有墨水却打印不了,显示end of service
  5. python将子进程的输出抛向黑洞
  6. 论坛好版主(斑竹) 箴言
  7. 组策略找回桌面的IE图标
  8. 请求分页调度算法计算缺页率和命中率:FIFO LRU ORT
  9. 微信第一个支持小程序版本号与服务器不符,解决微信小程序更新发布之后线上还是之前的老版本...
  10. python程序项目报告_python程序设计实验报告